From 5dc81e8677c14525242d88419cc2544741c08fdb Mon Sep 17 00:00:00 2001 From: Lauris Skraucis Date: Thu, 13 Feb 2025 15:17:00 +0100 Subject: [PATCH] feat: v2 slots new version (#18758) * refactor: version old slots * feat: init new slots endpoints * chore: range format * fix: duratin * fix: duratin * test: slot releaseAt * refactor: reserve slot response * refactor variable name * docs: have new slots controller in docs * feat: crud for slots reservations * refactor: use exclude all for response * docs * chore: slots input service * refactor mini * refactor: remove unused imports * docs * handle orgSlug for dynamic events * refactor: correct name * docs * add optional organizationSlug to BySlug search * refactor: slot output format * refactor: return seated slot info * docs * rename functions * refactor: slots seated response * fix: handle same username in org and non org * refactor: test format * fix: allow reservationDuration only for authed requests * chore: check if auth user has permissions to define custom reservation duration * refactor: split e2e test files * refactor: invalid request exception codes * chore: old slots controller uses all old versions --- apps/api/v2/package.json | 1 + .../e2e/booking-fields.e2e-spec.ts | 1 - .../event-types.repository.ts | 13 +- .../v2/src/ee/platform-endpoints-module.ts | 6 +- apps/api/v2/src/lib/api-versions.ts | 3 + .../get-optional-user.decorator.ts | 30 + .../optional-api-auth.guard.ts | 14 + .../strategies/api-auth/api-auth.strategy.ts | 6 +- .../modules/memberships/memberships.module.ts | 5 +- .../services/memberships.service.ts | 24 + .../organizations/organizations.repository.ts | 10 + .../organizations-users.repository.ts | 31 +- .../controllers/slots.controller.e2e-spec.ts | 6 +- .../controllers/slots.controller.ts | 34 +- .../services/slots-output.service.ts | 6 +- .../services/slots.service.ts | 10 +- .../slots/slots-2024-04-15/slots.module.ts | 15 + .../slots.repository.ts | 6 +- ...ic-event-type-slots.controller.e2e-spec.ts | 182 + .../controllers/e2e/expected-slots.ts | 211 + ...am-event-type-slots.controller.e2e-spec.ts | 474 ++ ...am-event-type-slots.controller.e2e-spec.ts | 534 ++ ...er-event-type-slots.controller.e2e-spec.ts | 1260 ++++ .../controllers/slots.controller.ts | 290 + .../outputs/get-reserved-slot.output.ts | 18 + .../outputs/get-slots.output.ts | 19 + .../outputs/reserve-slot.output.ts | 18 + .../services/slots-input.service.ts | 93 + .../services/slots-output.service.ts | 229 + .../services/slots.service.ts | 273 + .../slots/slots-2024-09-04/slots.module.ts | 30 + .../slots-2024-09-04/slots.repository.ts | 74 + apps/api/v2/src/modules/slots/slots.module.ts | 15 - apps/api/v2/swagger/documentation.json | 587 +- .../repository/bookings.repository.fixture.ts | 2 +- .../selected-slots.repository.fixture.ts | 4 + docs/api-reference/v2/openapi.json | 3579 +++++++--- packages/platform/constants/api.ts | 2 + packages/platform/types/slots/index.ts | 2 + .../types/slots/slots-2024-04-15/index.ts | 1 + .../slots-2024-04-15/inputs/index.ts} | 6 +- .../types/slots/slots-2024-09-04/index.ts | 2 + .../inputs/get-slots-input.pipe.ts | 105 + .../inputs/get-slots.input.ts | 151 + .../slots/slots-2024-09-04/inputs/index.ts | 3 + .../inputs/reserve-slot.input.ts | 34 + .../outputs/get-reserved-slot.output.ts | 50 + .../slots/slots-2024-09-04/outputs/index.ts | 3 + .../outputs/reserve-slot.output.ts | 60 + .../slots-2024-09-04/outputs/slots.output.ts | 57 + yarn.lock | 5973 ++++++++++++++++- 51 files changed, 13305 insertions(+), 1257 deletions(-) create mode 100644 apps/api/v2/src/modules/auth/decorators/get-optional-user/get-optional-user.decorator.ts create mode 100644 apps/api/v2/src/modules/auth/guards/optional-api-auth/optional-api-auth.guard.ts create mode 100644 apps/api/v2/src/modules/memberships/services/memberships.service.ts rename apps/api/v2/src/modules/slots/{ => slots-2024-04-15}/controllers/slots.controller.e2e-spec.ts (99%) rename apps/api/v2/src/modules/slots/{ => slots-2024-04-15}/controllers/slots.controller.ts (80%) rename apps/api/v2/src/modules/slots/{ => slots-2024-04-15}/services/slots-output.service.ts (96%) rename apps/api/v2/src/modules/slots/{ => slots-2024-04-15}/services/slots.service.ts (83%) create mode 100644 apps/api/v2/src/modules/slots/slots-2024-04-15/slots.module.ts rename apps/api/v2/src/modules/slots/{ => slots-2024-04-15}/slots.repository.ts (90%) create mode 100644 apps/api/v2/src/modules/slots/slots-2024-09-04/controllers/e2e/dynamic-event-type-slots.controller.e2e-spec.ts create mode 100644 apps/api/v2/src/modules/slots/slots-2024-09-04/controllers/e2e/expected-slots.ts create mode 100644 apps/api/v2/src/modules/slots/slots-2024-09-04/controllers/e2e/org-team-event-type-slots.controller.e2e-spec.ts create mode 100644 apps/api/v2/src/modules/slots/slots-2024-09-04/controllers/e2e/team-event-type-slots.controller.e2e-spec.ts create mode 100644 apps/api/v2/src/modules/slots/slots-2024-09-04/controllers/e2e/user-event-type-slots.controller.e2e-spec.ts create mode 100644 apps/api/v2/src/modules/slots/slots-2024-09-04/controllers/slots.controller.ts create mode 100644 apps/api/v2/src/modules/slots/slots-2024-09-04/outputs/get-reserved-slot.output.ts create mode 100644 apps/api/v2/src/modules/slots/slots-2024-09-04/outputs/get-slots.output.ts create mode 100644 apps/api/v2/src/modules/slots/slots-2024-09-04/outputs/reserve-slot.output.ts create mode 100644 apps/api/v2/src/modules/slots/slots-2024-09-04/services/slots-input.service.ts create mode 100644 apps/api/v2/src/modules/slots/slots-2024-09-04/services/slots-output.service.ts create mode 100644 apps/api/v2/src/modules/slots/slots-2024-09-04/services/slots.service.ts create mode 100644 apps/api/v2/src/modules/slots/slots-2024-09-04/slots.module.ts create mode 100644 apps/api/v2/src/modules/slots/slots-2024-09-04/slots.repository.ts delete mode 100644 apps/api/v2/src/modules/slots/slots.module.ts create mode 100644 packages/platform/types/slots/index.ts create mode 100644 packages/platform/types/slots/slots-2024-04-15/index.ts rename packages/platform/types/{slots.ts => slots/slots-2024-04-15/inputs/index.ts} (96%) create mode 100644 packages/platform/types/slots/slots-2024-09-04/index.ts create mode 100644 packages/platform/types/slots/slots-2024-09-04/inputs/get-slots-input.pipe.ts create mode 100644 packages/platform/types/slots/slots-2024-09-04/inputs/get-slots.input.ts create mode 100644 packages/platform/types/slots/slots-2024-09-04/inputs/index.ts create mode 100644 packages/platform/types/slots/slots-2024-09-04/inputs/reserve-slot.input.ts create mode 100644 packages/platform/types/slots/slots-2024-09-04/outputs/get-reserved-slot.output.ts create mode 100644 packages/platform/types/slots/slots-2024-09-04/outputs/index.ts create mode 100644 packages/platform/types/slots/slots-2024-09-04/outputs/reserve-slot.output.ts create mode 100644 packages/platform/types/slots/slots-2024-09-04/outputs/slots.output.ts diff --git a/apps/api/v2/package.json b/apps/api/v2/package.json index d71df63192..7646daef14 100644 --- a/apps/api/v2/package.json +++ b/apps/api/v2/package.json @@ -61,6 +61,7 @@ "helmet": "^7.1.0", "ioredis": "^5.3.2", "jsforce": "^1.11.0", + "lodash": "^4.17.21", "luxon": "^3.4.4", "nest-winston": "^1.9.4", "next-auth": "^4.22.1", diff --git a/apps/api/v2/src/ee/bookings/2024-08-13/controllers/e2e/booking-fields.e2e-spec.ts b/apps/api/v2/src/ee/bookings/2024-08-13/controllers/e2e/booking-fields.e2e-spec.ts index 8b6af23ac2..c6438e9441 100644 --- a/apps/api/v2/src/ee/bookings/2024-08-13/controllers/e2e/booking-fields.e2e-spec.ts +++ b/apps/api/v2/src/ee/bookings/2024-08-13/controllers/e2e/booking-fields.e2e-spec.ts @@ -455,7 +455,6 @@ describe("Bookings Endpoints 2024-08-13", () => { // eslint-disable-next-line // @ts-ignore const data: GetSeatedBookingOutput_2024_08_13 = responseBody.data; - console.log("asap data", JSON.stringify(data, null, 2)); expect(data.attendees[0].name).toEqual(`${splitName.firstName} ${splitName.lastName}`); expect(data.attendees[0].bookingFieldsResponses.name).toEqual(splitName); } else { diff --git a/apps/api/v2/src/ee/event-types/event-types_2024_06_14/event-types.repository.ts b/apps/api/v2/src/ee/event-types/event-types_2024_06_14/event-types.repository.ts index a4df49c30a..fedf04e412 100644 --- a/apps/api/v2/src/ee/event-types/event-types_2024_06_14/event-types.repository.ts +++ b/apps/api/v2/src/ee/event-types/event-types_2024_06_14/event-types.repository.ts @@ -7,11 +7,7 @@ import { InputEventTransformed_2024_06_14 } from "@calcom/platform-types"; @Injectable() export class EventTypesRepository_2024_06_14 { - constructor( - private readonly dbRead: PrismaReadService, - private readonly dbWrite: PrismaWriteService, - private usersService: UsersService - ) {} + constructor(private readonly dbRead: PrismaReadService, private readonly dbWrite: PrismaWriteService) {} async createUserEventType( userId: number, @@ -47,6 +43,13 @@ export class EventTypesRepository_2024_06_14 { }); } + async getEventTypeWithHosts(eventTypeId: number) { + return this.dbRead.prisma.eventType.findUnique({ + where: { id: eventTypeId }, + include: { hosts: true }, + }); + } + async getUserEventType(userId: number, eventTypeId: number) { return this.dbRead.prisma.eventType.findFirst({ where: { diff --git a/apps/api/v2/src/ee/platform-endpoints-module.ts b/apps/api/v2/src/ee/platform-endpoints-module.ts index 534d80d604..5c6f1fac8b 100644 --- a/apps/api/v2/src/ee/platform-endpoints-module.ts +++ b/apps/api/v2/src/ee/platform-endpoints-module.ts @@ -8,7 +8,8 @@ import { MeModule } from "@/ee/me/me.module"; import { ProviderModule } from "@/ee/provider/provider.module"; import { SchedulesModule_2024_04_15 } from "@/ee/schedules/schedules_2024_04_15/schedules.module"; import { SchedulesModule_2024_06_11 } from "@/ee/schedules/schedules_2024_06_11/schedules.module"; -import { SlotsModule } from "@/modules/slots/slots.module"; +import { SlotsModule_2024_04_15 } from "@/modules/slots/slots-2024-04-15/slots.module"; +import { SlotsModule_2024_09_04 } from "@/modules/slots/slots-2024-09-04/slots.module"; import { TeamsEventTypesModule } from "@/modules/teams/event-types/teams-event-types.module"; import { TeamsMembershipsModule } from "@/modules/teams/memberships/teams-memberships.module"; import { TeamsModule } from "@/modules/teams/teams/teams.module"; @@ -29,7 +30,8 @@ import { Module } from "@nestjs/common"; BookingsModule_2024_04_15, BookingsModule_2024_08_13, TeamsMembershipsModule, - SlotsModule, + SlotsModule_2024_04_15, + SlotsModule_2024_09_04, TeamsModule, ], }) diff --git a/apps/api/v2/src/lib/api-versions.ts b/apps/api/v2/src/lib/api-versions.ts index ab9fcdae09..e0e95c2e95 100644 --- a/apps/api/v2/src/lib/api-versions.ts +++ b/apps/api/v2/src/lib/api-versions.ts @@ -6,6 +6,7 @@ import { VERSION_2024_06_11, VERSION_2024_06_14, VERSION_2024_08_13, + VERSION_2024_09_04, } from "@calcom/platform-constants"; export const API_VERSIONS_VALUES: VersionValue = API_VERSIONS as unknown as VersionValue; @@ -13,8 +14,10 @@ export const VERSION_2024_06_14_VALUE: VersionValue = VERSION_2024_06_14 as unkn export const VERSION_2024_06_11_VALUE: VersionValue = VERSION_2024_06_11 as unknown as VersionValue; export const VERSION_2024_04_15_VALUE: VersionValue = VERSION_2024_04_15 as unknown as VersionValue; export const VERSION_2024_08_13_VALUE: VersionValue = VERSION_2024_08_13 as unknown as VersionValue; +export const VERSION_2024_09_04_VALUE: VersionValue = VERSION_2024_09_04 as unknown as VersionValue; export { VERSION_2024_04_15 }; export { VERSION_2024_06_11 }; export { VERSION_2024_06_14 }; export { VERSION_2024_08_13 }; +export { VERSION_2024_09_04 }; diff --git a/apps/api/v2/src/modules/auth/decorators/get-optional-user/get-optional-user.decorator.ts b/apps/api/v2/src/modules/auth/decorators/get-optional-user/get-optional-user.decorator.ts new file mode 100644 index 0000000000..4566a9e747 --- /dev/null +++ b/apps/api/v2/src/modules/auth/decorators/get-optional-user/get-optional-user.decorator.ts @@ -0,0 +1,30 @@ +import { ApiAuthGuardUser } from "@/modules/auth/strategies/api-auth/api-auth.strategy"; +import { ExecutionContext } from "@nestjs/common"; +import { createParamDecorator } from "@nestjs/common"; + +export const GetOptionalUser = createParamDecorator< + keyof ApiAuthGuardUser | (keyof ApiAuthGuardUser)[], + ExecutionContext +>((data, ctx) => { + const request = ctx.switchToHttp().getRequest(); + const user = request.user as ApiAuthGuardUser; + + if (!user) { + return null; + } + + if (Array.isArray(data)) { + return data.reduce((prev, curr) => { + return { + ...prev, + [curr]: user[curr], + }; + }, {}); + } + + if (data) { + return user[data]; + } + + return user; +}); diff --git a/apps/api/v2/src/modules/auth/guards/optional-api-auth/optional-api-auth.guard.ts b/apps/api/v2/src/modules/auth/guards/optional-api-auth/optional-api-auth.guard.ts new file mode 100644 index 0000000000..3e03924bd6 --- /dev/null +++ b/apps/api/v2/src/modules/auth/guards/optional-api-auth/optional-api-auth.guard.ts @@ -0,0 +1,14 @@ +import { ApiAuthGuard } from "@/modules/auth/guards/api-auth/api-auth.guard"; +import { NO_AUTH_PROVIDED_MESSAGE } from "@/modules/auth/strategies/api-auth/api-auth.strategy"; + +export class OptionalApiAuthGuard extends ApiAuthGuard { + handleRequest(error: Error, user: any) { + // note(Lauris): optional means that auth is not required but if it is invalid then still throw error. + const noAuthProvided = error && error.message === NO_AUTH_PROVIDED_MESSAGE; + if (user || noAuthProvided || !error) { + return user || null; + } else { + throw error; + } + } +} diff --git a/apps/api/v2/src/modules/auth/strategies/api-auth/api-auth.strategy.ts b/apps/api/v2/src/modules/auth/strategies/api-auth/api-auth.strategy.ts index 326ba79e0e..713cacc883 100644 --- a/apps/api/v2/src/modules/auth/strategies/api-auth/api-auth.strategy.ts +++ b/apps/api/v2/src/modules/auth/strategies/api-auth/api-auth.strategy.ts @@ -19,6 +19,8 @@ import { INVALID_ACCESS_TOKEN, X_CAL_CLIENT_ID, X_CAL_SECRET_KEY } from "@calcom export type ApiAuthGuardUser = UserWithProfile & { isSystemAdmin: boolean }; +export const NO_AUTH_PROVIDED_MESSAGE = + "No authentication method provided. Either pass an API key as 'Bearer' header or OAuth client credentials as 'x-cal-secret-key' and 'x-cal-client-id' headers"; @Injectable() export class ApiAuthStrategy extends PassportStrategy(BaseStrategy, "api-auth") { constructor( @@ -62,9 +64,7 @@ export class ApiAuthStrategy extends PassportStrategy(BaseStrategy, "api-auth") return await this.authenticateNextAuth(nextAuthToken); } - throw new UnauthorizedException( - "No authentication method provided. Either pass an API key as 'Bearer' header or OAuth client credentials as 'x-cal-secret-key' and 'x-cal-client-id' headers" - ); + throw new UnauthorizedException(NO_AUTH_PROVIDED_MESSAGE); } catch (err) { if (err instanceof Error) { return this.error(err); diff --git a/apps/api/v2/src/modules/memberships/memberships.module.ts b/apps/api/v2/src/modules/memberships/memberships.module.ts index 418e1f6d16..631f56674d 100644 --- a/apps/api/v2/src/modules/memberships/memberships.module.ts +++ b/apps/api/v2/src/modules/memberships/memberships.module.ts @@ -1,10 +1,11 @@ import { MembershipsRepository } from "@/modules/memberships/memberships.repository"; +import { MembershipsService } from "@/modules/memberships/services/memberships.service"; import { PrismaModule } from "@/modules/prisma/prisma.module"; import { Module } from "@nestjs/common"; @Module({ imports: [PrismaModule], - providers: [MembershipsRepository], - exports: [MembershipsRepository], + providers: [MembershipsRepository, MembershipsService], + exports: [MembershipsRepository, MembershipsService], }) export class MembershipsModule {} diff --git a/apps/api/v2/src/modules/memberships/services/memberships.service.ts b/apps/api/v2/src/modules/memberships/services/memberships.service.ts new file mode 100644 index 0000000000..815e35b8ed --- /dev/null +++ b/apps/api/v2/src/modules/memberships/services/memberships.service.ts @@ -0,0 +1,24 @@ +import { MembershipsRepository } from "@/modules/memberships/memberships.repository"; +import { Injectable } from "@nestjs/common"; +import { intersectionBy } from "lodash"; + +@Injectable() +export class MembershipsService { + constructor(private readonly membershipsRepository: MembershipsRepository) {} + + async haveMembershipsInCommon(firstUserId: number, secondUserId: number) { + const memberships = await this.membershipsInCommon(firstUserId, secondUserId); + return memberships.length > 0; + } + + async membershipsInCommon(firstUserId: number, secondUserId: number) { + const firstUserMemberships = await this.membershipsRepository.findUserMemberships(firstUserId); + const secondUserMemberships = await this.membershipsRepository.findUserMemberships(secondUserId); + + return intersectionBy( + firstUserMemberships.filter((m) => m.accepted), + secondUserMemberships.filter((m) => m.accepted), + "teamId" + ); + } +} diff --git a/apps/api/v2/src/modules/organizations/organizations.repository.ts b/apps/api/v2/src/modules/organizations/organizations.repository.ts index 1af8e365b8..3d451cef06 100644 --- a/apps/api/v2/src/modules/organizations/organizations.repository.ts +++ b/apps/api/v2/src/modules/organizations/organizations.repository.ts @@ -131,4 +131,14 @@ export class OrganizationsRepository { }, }); } + + async findOrgBySlug(slug: string) { + return this.dbRead.prisma.team.findFirst({ + where: { + slug, + parentId: null, + isOrganization: true, + }, + }); + } } diff --git a/apps/api/v2/src/modules/organizations/repositories/organizations-users.repository.ts b/apps/api/v2/src/modules/organizations/repositories/organizations-users.repository.ts index d2d007ccae..0816b9a0d5 100644 --- a/apps/api/v2/src/modules/organizations/repositories/organizations-users.repository.ts +++ b/apps/api/v2/src/modules/organizations/repositories/organizations-users.repository.ts @@ -37,22 +37,6 @@ export class OrganizationsUsersRepository { }); } - async getOrganizationUserByUsername(orgId: number, username: string) { - return await this.dbRead.prisma.user.findFirst({ - where: { - username, - ...this.filterOnOrgMembership(orgId), - }, - include: { - profiles: { - where: { - organizationId: orgId, - }, - }, - }, - }); - } - async getOrganizationUserByEmail(orgId: number, email: string) { return await this.dbRead.prisma.user.findFirst({ where: { @@ -109,4 +93,19 @@ export class OrganizationsUsersRepository { }, }); } + + async getOrganizationUserByUsername(orgId: number, username: string) { + const profile = await this.dbRead.prisma.profile.findUnique({ + where: { + username_organizationId: { + organizationId: orgId, + username, + }, + }, + include: { + user: true, + }, + }); + return profile?.user; + } } diff --git a/apps/api/v2/src/modules/slots/controllers/slots.controller.e2e-spec.ts b/apps/api/v2/src/modules/slots/slots-2024-04-15/controllers/slots.controller.e2e-spec.ts similarity index 99% rename from apps/api/v2/src/modules/slots/controllers/slots.controller.e2e-spec.ts rename to apps/api/v2/src/modules/slots/slots-2024-04-15/controllers/slots.controller.e2e-spec.ts index 0d85f96cea..3923b63d6d 100644 --- a/apps/api/v2/src/modules/slots/controllers/slots.controller.e2e-spec.ts +++ b/apps/api/v2/src/modules/slots/slots-2024-04-15/controllers/slots.controller.e2e-spec.ts @@ -4,7 +4,7 @@ import { SchedulesModule_2024_06_11 } from "@/ee/schedules/schedules_2024_06_11/ import { SchedulesService_2024_06_11 } from "@/ee/schedules/schedules_2024_06_11/services/schedules.service"; import { PermissionsGuard } from "@/modules/auth/guards/permissions/permissions.guard"; import { PrismaModule } from "@/modules/prisma/prisma.module"; -import { SlotsModule } from "@/modules/slots/slots.module"; +import { SlotsModule_2024_04_15 } from "@/modules/slots/slots-2024-04-15/slots.module"; import { TokensModule } from "@/modules/tokens/tokens.module"; import { UsersModule } from "@/modules/users/users.module"; import { INestApplication } from "@nestjs/common"; @@ -243,7 +243,7 @@ const expectedSlotsRomeRange = { }, }; -describe("Slots Endpoints", () => { +describe("Slots 2024-04-15 Endpoints", () => { describe("Individual user slots", () => { let app: INestApplication; @@ -275,7 +275,7 @@ describe("Slots Endpoints", () => { UsersModule, TokensModule, SchedulesModule_2024_06_11, - SlotsModule, + SlotsModule_2024_04_15, ], }) ) diff --git a/apps/api/v2/src/modules/slots/controllers/slots.controller.ts b/apps/api/v2/src/modules/slots/slots-2024-04-15/controllers/slots.controller.ts similarity index 80% rename from apps/api/v2/src/modules/slots/controllers/slots.controller.ts rename to apps/api/v2/src/modules/slots/slots-2024-04-15/controllers/slots.controller.ts index feb96b0740..56e9e29fbe 100644 --- a/apps/api/v2/src/modules/slots/controllers/slots.controller.ts +++ b/apps/api/v2/src/modules/slots/slots-2024-04-15/controllers/slots.controller.ts @@ -1,25 +1,31 @@ -import { API_VERSIONS_VALUES } from "@/lib/api-versions"; -import { SlotsOutputService } from "@/modules/slots/services/slots-output.service"; -import { SlotsService } from "@/modules/slots/services/slots.service"; +import { SlotsOutputService_2024_04_15 } from "@/modules/slots/slots-2024-04-15/services/slots-output.service"; +import { SlotsService_2024_04_15 } from "@/modules/slots/slots-2024-04-15/services/slots.service"; import { Query, Body, Controller, Get, Delete, Post, Req, Res } from "@nestjs/common"; +import { ApiExcludeController as DocsExcludeController } from "@nestjs/swagger"; import { ApiTags as DocsTags, ApiCreatedResponse, ApiOkResponse, ApiOperation } from "@nestjs/swagger"; import { Response as ExpressResponse, Request as ExpressRequest } from "express"; -import { SUCCESS_STATUS } from "@calcom/platform-constants"; +import { + SUCCESS_STATUS, + VERSION_2024_06_14, + VERSION_2024_04_15, + VERSION_2024_06_11, + VERSION_2024_08_13, +} from "@calcom/platform-constants"; import { getAvailableSlots } from "@calcom/platform-libraries"; import type { AvailableSlotsType } from "@calcom/platform-libraries"; -import { RemoveSelectedSlotInput, ReserveSlotInput } from "@calcom/platform-types"; -import { ApiResponse, GetAvailableSlotsInput } from "@calcom/platform-types"; +import { RemoveSelectedSlotInput_2024_04_15, ReserveSlotInput_2024_04_15 } from "@calcom/platform-types"; +import { ApiResponse, GetAvailableSlotsInput_2024_04_15 } from "@calcom/platform-types"; @Controller({ path: "/v2/slots", - version: API_VERSIONS_VALUES, + version: [VERSION_2024_04_15, VERSION_2024_06_11, VERSION_2024_06_14, VERSION_2024_08_13], }) -@DocsTags("Slots") -export class SlotsController { +@DocsExcludeController(true) +export class SlotsController_2024_04_15 { constructor( - private readonly slotsService: SlotsService, - private readonly slotsOutputService: SlotsOutputService + private readonly slotsService: SlotsService_2024_04_15, + private readonly slotsOutputService: SlotsOutputService_2024_04_15 ) {} @Post("/reserve") @@ -40,7 +46,7 @@ export class SlotsController { }) @ApiOperation({ summary: "Reserve a slot" }) async reserveSlot( - @Body() body: ReserveSlotInput, + @Body() body: ReserveSlotInput_2024_04_15, @Res({ passthrough: true }) res: ExpressResponse, @Req() req: ExpressRequest ): Promise> { @@ -65,7 +71,7 @@ export class SlotsController { }) @ApiOperation({ summary: "Delete a selected slot" }) async deleteSelectedSlot( - @Query() params: RemoveSelectedSlotInput, + @Query() params: RemoveSelectedSlotInput_2024_04_15, @Req() req: ExpressRequest ): Promise { const uid = req.cookies?.uid || params.uid; @@ -148,7 +154,7 @@ export class SlotsController { }) @ApiOperation({ summary: "Get available slots" }) async getAvailableSlots( - @Query() query: GetAvailableSlotsInput, + @Query() query: GetAvailableSlotsInput_2024_04_15, @Req() req: ExpressRequest ): Promise> { const isTeamEvent = await this.slotsService.checkIfIsTeamEvent(query.eventTypeId); diff --git a/apps/api/v2/src/modules/slots/services/slots-output.service.ts b/apps/api/v2/src/modules/slots/slots-2024-04-15/services/slots-output.service.ts similarity index 96% rename from apps/api/v2/src/modules/slots/services/slots-output.service.ts rename to apps/api/v2/src/modules/slots/slots-2024-04-15/services/slots-output.service.ts index 5b00dfea70..0ba8a2a541 100644 --- a/apps/api/v2/src/modules/slots/services/slots-output.service.ts +++ b/apps/api/v2/src/modules/slots/slots-2024-04-15/services/slots-output.service.ts @@ -4,13 +4,15 @@ import { DateTime } from "luxon"; import { SlotFormat } from "@calcom/platform-enums"; -type TimeSlots = { slots: Record }; +export type TimeSlots = { + slots: Record; +}; type RangeSlots = { slots: Record; }; @Injectable() -export class SlotsOutputService { +export class SlotsOutputService_2024_04_15 { constructor(private readonly eventTypesRepository: EventTypesRepository_2024_04_15) {} async getOutputSlots( diff --git a/apps/api/v2/src/modules/slots/services/slots.service.ts b/apps/api/v2/src/modules/slots/slots-2024-04-15/services/slots.service.ts similarity index 83% rename from apps/api/v2/src/modules/slots/services/slots.service.ts rename to apps/api/v2/src/modules/slots/slots-2024-04-15/services/slots.service.ts index 6ea24916de..f1f12035bd 100644 --- a/apps/api/v2/src/modules/slots/services/slots.service.ts +++ b/apps/api/v2/src/modules/slots/slots-2024-04-15/services/slots.service.ts @@ -1,20 +1,20 @@ import { EventTypesRepository_2024_04_15 } from "@/ee/event-types/event-types_2024_04_15/event-types.repository"; -import { SlotsRepository } from "@/modules/slots/slots.repository"; +import { SlotsRepository_2024_04_15 } from "@/modules/slots/slots-2024-04-15/slots.repository"; import { Injectable, NotFoundException, BadRequestException } from "@nestjs/common"; import { DateTime } from "luxon"; import { v4 as uuid } from "uuid"; import { SlotFormat } from "@calcom/platform-enums"; -import { ReserveSlotInput } from "@calcom/platform-types"; +import { ReserveSlotInput_2024_04_15 } from "@calcom/platform-types"; @Injectable() -export class SlotsService { +export class SlotsService_2024_04_15 { constructor( private readonly eventTypeRepo: EventTypesRepository_2024_04_15, - private readonly slotsRepo: SlotsRepository + private readonly slotsRepo: SlotsRepository_2024_04_15 ) {} - async reserveSlot(input: ReserveSlotInput, headerUid?: string) { + async reserveSlot(input: ReserveSlotInput_2024_04_15, headerUid?: string) { const uid = headerUid || uuid(); const eventType = await this.eventTypeRepo.getEventTypeWithSeats(input.eventTypeId); if (!eventType) { diff --git a/apps/api/v2/src/modules/slots/slots-2024-04-15/slots.module.ts b/apps/api/v2/src/modules/slots/slots-2024-04-15/slots.module.ts new file mode 100644 index 0000000000..d2867babbf --- /dev/null +++ b/apps/api/v2/src/modules/slots/slots-2024-04-15/slots.module.ts @@ -0,0 +1,15 @@ +import { EventTypesModule_2024_04_15 } from "@/ee/event-types/event-types_2024_04_15/event-types.module"; +import { PrismaModule } from "@/modules/prisma/prisma.module"; +import { SlotsController_2024_04_15 } from "@/modules/slots/slots-2024-04-15/controllers/slots.controller"; +import { SlotsOutputService_2024_04_15 } from "@/modules/slots/slots-2024-04-15/services/slots-output.service"; +import { SlotsService_2024_04_15 } from "@/modules/slots/slots-2024-04-15/services/slots.service"; +import { SlotsRepository_2024_04_15 } from "@/modules/slots/slots-2024-04-15/slots.repository"; +import { Module } from "@nestjs/common"; + +@Module({ + imports: [PrismaModule, EventTypesModule_2024_04_15], + providers: [SlotsRepository_2024_04_15, SlotsService_2024_04_15, SlotsOutputService_2024_04_15], + controllers: [SlotsController_2024_04_15], + exports: [SlotsService_2024_04_15], +}) +export class SlotsModule_2024_04_15 {} diff --git a/apps/api/v2/src/modules/slots/slots.repository.ts b/apps/api/v2/src/modules/slots/slots-2024-04-15/slots.repository.ts similarity index 90% rename from apps/api/v2/src/modules/slots/slots.repository.ts rename to apps/api/v2/src/modules/slots/slots-2024-04-15/slots.repository.ts index 8ef589f9f8..774833f212 100644 --- a/apps/api/v2/src/modules/slots/slots.repository.ts +++ b/apps/api/v2/src/modules/slots/slots-2024-04-15/slots.repository.ts @@ -4,10 +4,10 @@ import { Injectable } from "@nestjs/common"; import { DateTime } from "luxon"; import { MINUTES_TO_BOOK } from "@calcom/platform-libraries"; -import { ReserveSlotInput } from "@calcom/platform-types"; +import { ReserveSlotInput_2024_04_15 } from "@calcom/platform-types"; @Injectable() -export class SlotsRepository { +export class SlotsRepository_2024_04_15 { constructor(private readonly dbRead: PrismaReadService, private readonly dbWrite: PrismaWriteService) {} async getBookingWithAttendees(bookingUid?: string) { @@ -17,7 +17,7 @@ export class SlotsRepository { }); } - async upsertSelectedSlot(userId: number, input: ReserveSlotInput, uid: string, isSeat: boolean) { + async upsertSelectedSlot(userId: number, input: ReserveSlotInput_2024_04_15, uid: string, isSeat: boolean) { const { slotUtcEndDate, slotUtcStartDate, eventTypeId } = input; const releaseAt = DateTime.utc() diff --git a/apps/api/v2/src/modules/slots/slots-2024-09-04/controllers/e2e/dynamic-event-type-slots.controller.e2e-spec.ts b/apps/api/v2/src/modules/slots/slots-2024-09-04/controllers/e2e/dynamic-event-type-slots.controller.e2e-spec.ts new file mode 100644 index 0000000000..020c249b85 --- /dev/null +++ b/apps/api/v2/src/modules/slots/slots-2024-09-04/controllers/e2e/dynamic-event-type-slots.controller.e2e-spec.ts @@ -0,0 +1,182 @@ +import { bootstrap } from "@/app"; +import { AppModule } from "@/app.module"; +import { SchedulesModule_2024_06_11 } from "@/ee/schedules/schedules_2024_06_11/schedules.module"; +import { SchedulesService_2024_06_11 } from "@/ee/schedules/schedules_2024_06_11/services/schedules.service"; +import { PermissionsGuard } from "@/modules/auth/guards/permissions/permissions.guard"; +import { PrismaModule } from "@/modules/prisma/prisma.module"; +import { + expectedSlotsRome, + expectedSlotsUTC, +} from "@/modules/slots/slots-2024-09-04/controllers/e2e/expected-slots"; +import { GetSlotsOutput_2024_09_04 } from "@/modules/slots/slots-2024-09-04/outputs/get-slots.output"; +import { SlotsModule_2024_09_04 } from "@/modules/slots/slots-2024-09-04/slots.module"; +import { TokensModule } from "@/modules/tokens/tokens.module"; +import { UsersModule } from "@/modules/users/users.module"; +import { INestApplication } from "@nestjs/common"; +import { NestExpressApplication } from "@nestjs/platform-express"; +import { Test } from "@nestjs/testing"; +import { Profile, User } from "@prisma/client"; +import * as request from "supertest"; +import { OrganizationRepositoryFixture } from "test/fixtures/repository/organization.repository.fixture"; +import { ProfileRepositoryFixture } from "test/fixtures/repository/profiles.repository.fixture"; +import { UserRepositoryFixture } from "test/fixtures/repository/users.repository.fixture"; +import { randomString } from "test/utils/randomString"; +import { withApiAuth } from "test/utils/withApiAuth"; + +import { CAL_API_VERSION_HEADER, SUCCESS_STATUS, VERSION_2024_09_04 } from "@calcom/platform-constants"; +import { CreateScheduleInput_2024_06_11 } from "@calcom/platform-types"; +import { Team } from "@calcom/prisma/client"; + +describe("Slots 2024-09-04 Endpoints", () => { + describe("Dynamic event type slots", () => { + let app: INestApplication; + + let userRepositoryFixture: UserRepositoryFixture; + let schedulesService: SchedulesService_2024_06_11; + let organizationsRepositoryFixture: OrganizationRepositoryFixture; + let profileRepositoryFixture: ProfileRepositoryFixture; + + const userEmailOne = `slots-2024-09-04-user-1-dynamic-slots-${randomString()}@api.com`; + const userEmailTwo = `slots-2024-09-04-user-2-dynamic-slots-${randomString()}@api.com`; + + let organization: Team; + let userOne: User; + let userTwo: User; + let orgProfileOne: Profile; + let orgProfileTwo: Profile; + + beforeAll(async () => { + const moduleRef = await withApiAuth( + userEmailOne, + Test.createTestingModule({ + imports: [ + AppModule, + PrismaModule, + UsersModule, + TokensModule, + SchedulesModule_2024_06_11, + SlotsModule_2024_09_04, + ], + }) + ) + .overrideGuard(PermissionsGuard) + .useValue({ + canActivate: () => true, + }) + .compile(); + + userRepositoryFixture = new UserRepositoryFixture(moduleRef); + schedulesService = moduleRef.get(SchedulesService_2024_06_11); + organizationsRepositoryFixture = new OrganizationRepositoryFixture(moduleRef); + profileRepositoryFixture = new ProfileRepositoryFixture(moduleRef); + + const orgSlug = `slots-2024-09-04-org-${randomString()}`; + organization = await organizationsRepositoryFixture.create({ + name: orgSlug, + isOrganization: true, + slug: orgSlug, + }); + + userOne = await userRepositoryFixture.create({ + email: userEmailOne, + name: userEmailOne, + username: userEmailOne, + }); + + userTwo = await userRepositoryFixture.create({ + email: userEmailTwo, + name: userEmailTwo, + username: userEmailTwo, + }); + + orgProfileOne = await profileRepositoryFixture.create({ + uid: `usr-${userOne.id}`, + username: "teammate-one", + organization: { + connect: { + id: organization.id, + }, + }, + user: { + connect: { + id: userOne.id, + }, + }, + }); + + orgProfileTwo = await profileRepositoryFixture.create({ + uid: `usr-${userTwo.id}`, + username: "teammate-two", + organization: { + connect: { + id: organization.id, + }, + }, + user: { + connect: { + id: userTwo.id, + }, + }, + }); + + const userSchedule: CreateScheduleInput_2024_06_11 = { + name: "working time", + timeZone: "Europe/Rome", + isDefault: true, + }; + // note(Lauris): this creates default schedule monday to friday from 9AM to 5PM in Europe/Rome timezone + await schedulesService.createUserSchedule(userOne.id, userSchedule); + await schedulesService.createUserSchedule(userTwo.id, userSchedule); + + app = moduleRef.createNestApplication(); + bootstrap(app as NestExpressApplication); + + await app.init(); + }); + + it("should get slots in UTC by usernames", async () => { + return request(app.getHttpServer()) + .get( + `/v2/slots?usernames=${orgProfileOne.username},${orgProfileTwo.username}&organizationSlug=${organization.slug}&start=2050-09-05&end=2050-09-09&duration=60` + ) + .set(CAL_API_VERSION_HEADER, VERSION_2024_09_04) + .expect(200) + .then(async (response) => { + const responseBody: GetSlotsOutput_2024_09_04 = response.body; + expect(responseBody.status).toEqual(SUCCESS_STATUS); + const slots = responseBody.data; + + expect(slots).toBeDefined(); + const days = Object.keys(slots); + expect(days.length).toEqual(5); + expect(slots).toEqual(expectedSlotsUTC); + }); + }); + + it("should get slots in specified timezone and in specified duration by usernames", async () => { + return request(app.getHttpServer()) + .get( + `/v2/slots?usernames=${orgProfileOne.username},${orgProfileTwo.username}&organizationSlug=${organization.slug}&start=2050-09-05&end=2050-09-09&duration=60&timeZone=Europe/Rome` + ) + .set(CAL_API_VERSION_HEADER, VERSION_2024_09_04) + .expect(200) + .then(async (response) => { + const responseBody: GetSlotsOutput_2024_09_04 = response.body; + expect(responseBody.status).toEqual(SUCCESS_STATUS); + const slots = responseBody.data; + + expect(slots).toBeDefined(); + const days = Object.keys(slots); + expect(days.length).toEqual(5); + expect(slots).toEqual(expectedSlotsRome); + }); + }); + + afterAll(async () => { + await userRepositoryFixture.deleteByEmail(userOne.email); + await userRepositoryFixture.deleteByEmail(userTwo.email); + await organizationsRepositoryFixture.delete(organization.id); + await app.close(); + }); + }); +}); diff --git a/apps/api/v2/src/modules/slots/slots-2024-09-04/controllers/e2e/expected-slots.ts b/apps/api/v2/src/modules/slots/slots-2024-09-04/controllers/e2e/expected-slots.ts new file mode 100644 index 0000000000..2c6072174e --- /dev/null +++ b/apps/api/v2/src/modules/slots/slots-2024-09-04/controllers/e2e/expected-slots.ts @@ -0,0 +1,211 @@ +export const expectedSlotsUTC = { + "2050-09-05": [ + { start: "2050-09-05T07:00:00.000Z" }, + { start: "2050-09-05T08:00:00.000Z" }, + { start: "2050-09-05T09:00:00.000Z" }, + { start: "2050-09-05T10:00:00.000Z" }, + { start: "2050-09-05T11:00:00.000Z" }, + { start: "2050-09-05T12:00:00.000Z" }, + { start: "2050-09-05T13:00:00.000Z" }, + { start: "2050-09-05T14:00:00.000Z" }, + ], + "2050-09-06": [ + { start: "2050-09-06T07:00:00.000Z" }, + { start: "2050-09-06T08:00:00.000Z" }, + { start: "2050-09-06T09:00:00.000Z" }, + { start: "2050-09-06T10:00:00.000Z" }, + { start: "2050-09-06T11:00:00.000Z" }, + { start: "2050-09-06T12:00:00.000Z" }, + { start: "2050-09-06T13:00:00.000Z" }, + { start: "2050-09-06T14:00:00.000Z" }, + ], + "2050-09-07": [ + { start: "2050-09-07T07:00:00.000Z" }, + { start: "2050-09-07T08:00:00.000Z" }, + { start: "2050-09-07T09:00:00.000Z" }, + { start: "2050-09-07T10:00:00.000Z" }, + { start: "2050-09-07T11:00:00.000Z" }, + { start: "2050-09-07T12:00:00.000Z" }, + { start: "2050-09-07T13:00:00.000Z" }, + { start: "2050-09-07T14:00:00.000Z" }, + ], + "2050-09-08": [ + { start: "2050-09-08T07:00:00.000Z" }, + { start: "2050-09-08T08:00:00.000Z" }, + { start: "2050-09-08T09:00:00.000Z" }, + { start: "2050-09-08T10:00:00.000Z" }, + { start: "2050-09-08T11:00:00.000Z" }, + { start: "2050-09-08T12:00:00.000Z" }, + { start: "2050-09-08T13:00:00.000Z" }, + { start: "2050-09-08T14:00:00.000Z" }, + ], + "2050-09-09": [ + { start: "2050-09-09T07:00:00.000Z" }, + { start: "2050-09-09T08:00:00.000Z" }, + { start: "2050-09-09T09:00:00.000Z" }, + { start: "2050-09-09T10:00:00.000Z" }, + { start: "2050-09-09T11:00:00.000Z" }, + { start: "2050-09-09T12:00:00.000Z" }, + { start: "2050-09-09T13:00:00.000Z" }, + { start: "2050-09-09T14:00:00.000Z" }, + ], +}; + +export const expectedSlotsRome = { + "2050-09-05": [ + { start: "2050-09-05T09:00:00.000+02:00" }, + { start: "2050-09-05T10:00:00.000+02:00" }, + { start: "2050-09-05T11:00:00.000+02:00" }, + { start: "2050-09-05T12:00:00.000+02:00" }, + { start: "2050-09-05T13:00:00.000+02:00" }, + { start: "2050-09-05T14:00:00.000+02:00" }, + { start: "2050-09-05T15:00:00.000+02:00" }, + { start: "2050-09-05T16:00:00.000+02:00" }, + ], + "2050-09-06": [ + { start: "2050-09-06T09:00:00.000+02:00" }, + { start: "2050-09-06T10:00:00.000+02:00" }, + { start: "2050-09-06T11:00:00.000+02:00" }, + { start: "2050-09-06T12:00:00.000+02:00" }, + { start: "2050-09-06T13:00:00.000+02:00" }, + { start: "2050-09-06T14:00:00.000+02:00" }, + { start: "2050-09-06T15:00:00.000+02:00" }, + { start: "2050-09-06T16:00:00.000+02:00" }, + ], + "2050-09-07": [ + { start: "2050-09-07T09:00:00.000+02:00" }, + { start: "2050-09-07T10:00:00.000+02:00" }, + { start: "2050-09-07T11:00:00.000+02:00" }, + { start: "2050-09-07T12:00:00.000+02:00" }, + { start: "2050-09-07T13:00:00.000+02:00" }, + { start: "2050-09-07T14:00:00.000+02:00" }, + { start: "2050-09-07T15:00:00.000+02:00" }, + { start: "2050-09-07T16:00:00.000+02:00" }, + ], + "2050-09-08": [ + { start: "2050-09-08T09:00:00.000+02:00" }, + { start: "2050-09-08T10:00:00.000+02:00" }, + { start: "2050-09-08T11:00:00.000+02:00" }, + { start: "2050-09-08T12:00:00.000+02:00" }, + { start: "2050-09-08T13:00:00.000+02:00" }, + { start: "2050-09-08T14:00:00.000+02:00" }, + { start: "2050-09-08T15:00:00.000+02:00" }, + { start: "2050-09-08T16:00:00.000+02:00" }, + ], + "2050-09-09": [ + { start: "2050-09-09T09:00:00.000+02:00" }, + { start: "2050-09-09T10:00:00.000+02:00" }, + { start: "2050-09-09T11:00:00.000+02:00" }, + { start: "2050-09-09T12:00:00.000+02:00" }, + { start: "2050-09-09T13:00:00.000+02:00" }, + { start: "2050-09-09T14:00:00.000+02:00" }, + { start: "2050-09-09T15:00:00.000+02:00" }, + { start: "2050-09-09T16:00:00.000+02:00" }, + ], +}; + +export const expectedSlotsUTCRange = { + "2050-09-05": [ + { start: "2050-09-05T07:00:00.000Z", end: "2050-09-05T08:00:00.000Z" }, + { start: "2050-09-05T08:00:00.000Z", end: "2050-09-05T09:00:00.000Z" }, + { start: "2050-09-05T09:00:00.000Z", end: "2050-09-05T10:00:00.000Z" }, + { start: "2050-09-05T10:00:00.000Z", end: "2050-09-05T11:00:00.000Z" }, + { start: "2050-09-05T11:00:00.000Z", end: "2050-09-05T12:00:00.000Z" }, + { start: "2050-09-05T12:00:00.000Z", end: "2050-09-05T13:00:00.000Z" }, + { start: "2050-09-05T13:00:00.000Z", end: "2050-09-05T14:00:00.000Z" }, + { start: "2050-09-05T14:00:00.000Z", end: "2050-09-05T15:00:00.000Z" }, + ], + "2050-09-06": [ + { start: "2050-09-06T07:00:00.000Z", end: "2050-09-06T08:00:00.000Z" }, + { start: "2050-09-06T08:00:00.000Z", end: "2050-09-06T09:00:00.000Z" }, + { start: "2050-09-06T09:00:00.000Z", end: "2050-09-06T10:00:00.000Z" }, + { start: "2050-09-06T10:00:00.000Z", end: "2050-09-06T11:00:00.000Z" }, + { start: "2050-09-06T11:00:00.000Z", end: "2050-09-06T12:00:00.000Z" }, + { start: "2050-09-06T12:00:00.000Z", end: "2050-09-06T13:00:00.000Z" }, + { start: "2050-09-06T13:00:00.000Z", end: "2050-09-06T14:00:00.000Z" }, + { start: "2050-09-06T14:00:00.000Z", end: "2050-09-06T15:00:00.000Z" }, + ], + "2050-09-07": [ + { start: "2050-09-07T07:00:00.000Z", end: "2050-09-07T08:00:00.000Z" }, + { start: "2050-09-07T08:00:00.000Z", end: "2050-09-07T09:00:00.000Z" }, + { start: "2050-09-07T09:00:00.000Z", end: "2050-09-07T10:00:00.000Z" }, + { start: "2050-09-07T10:00:00.000Z", end: "2050-09-07T11:00:00.000Z" }, + { start: "2050-09-07T11:00:00.000Z", end: "2050-09-07T12:00:00.000Z" }, + { start: "2050-09-07T12:00:00.000Z", end: "2050-09-07T13:00:00.000Z" }, + { start: "2050-09-07T13:00:00.000Z", end: "2050-09-07T14:00:00.000Z" }, + { start: "2050-09-07T14:00:00.000Z", end: "2050-09-07T15:00:00.000Z" }, + ], + "2050-09-08": [ + { start: "2050-09-08T07:00:00.000Z", end: "2050-09-08T08:00:00.000Z" }, + { start: "2050-09-08T08:00:00.000Z", end: "2050-09-08T09:00:00.000Z" }, + { start: "2050-09-08T09:00:00.000Z", end: "2050-09-08T10:00:00.000Z" }, + { start: "2050-09-08T10:00:00.000Z", end: "2050-09-08T11:00:00.000Z" }, + { start: "2050-09-08T11:00:00.000Z", end: "2050-09-08T12:00:00.000Z" }, + { start: "2050-09-08T12:00:00.000Z", end: "2050-09-08T13:00:00.000Z" }, + { start: "2050-09-08T13:00:00.000Z", end: "2050-09-08T14:00:00.000Z" }, + { start: "2050-09-08T14:00:00.000Z", end: "2050-09-08T15:00:00.000Z" }, + ], + "2050-09-09": [ + { start: "2050-09-09T07:00:00.000Z", end: "2050-09-09T08:00:00.000Z" }, + { start: "2050-09-09T08:00:00.000Z", end: "2050-09-09T09:00:00.000Z" }, + { start: "2050-09-09T09:00:00.000Z", end: "2050-09-09T10:00:00.000Z" }, + { start: "2050-09-09T10:00:00.000Z", end: "2050-09-09T11:00:00.000Z" }, + { start: "2050-09-09T11:00:00.000Z", end: "2050-09-09T12:00:00.000Z" }, + { start: "2050-09-09T12:00:00.000Z", end: "2050-09-09T13:00:00.000Z" }, + { start: "2050-09-09T13:00:00.000Z", end: "2050-09-09T14:00:00.000Z" }, + { start: "2050-09-09T14:00:00.000Z", end: "2050-09-09T15:00:00.000Z" }, + ], +}; + +export const expectedSlotsRomeRange = { + "2050-09-05": [ + { start: "2050-09-05T09:00:00.000+02:00", end: "2050-09-05T10:00:00.000+02:00" }, + { start: "2050-09-05T10:00:00.000+02:00", end: "2050-09-05T11:00:00.000+02:00" }, + { start: "2050-09-05T11:00:00.000+02:00", end: "2050-09-05T12:00:00.000+02:00" }, + { start: "2050-09-05T12:00:00.000+02:00", end: "2050-09-05T13:00:00.000+02:00" }, + { start: "2050-09-05T13:00:00.000+02:00", end: "2050-09-05T14:00:00.000+02:00" }, + { start: "2050-09-05T14:00:00.000+02:00", end: "2050-09-05T15:00:00.000+02:00" }, + { start: "2050-09-05T15:00:00.000+02:00", end: "2050-09-05T16:00:00.000+02:00" }, + { start: "2050-09-05T16:00:00.000+02:00", end: "2050-09-05T17:00:00.000+02:00" }, + ], + "2050-09-06": [ + { start: "2050-09-06T09:00:00.000+02:00", end: "2050-09-06T10:00:00.000+02:00" }, + { start: "2050-09-06T10:00:00.000+02:00", end: "2050-09-06T11:00:00.000+02:00" }, + { start: "2050-09-06T11:00:00.000+02:00", end: "2050-09-06T12:00:00.000+02:00" }, + { start: "2050-09-06T12:00:00.000+02:00", end: "2050-09-06T13:00:00.000+02:00" }, + { start: "2050-09-06T13:00:00.000+02:00", end: "2050-09-06T14:00:00.000+02:00" }, + { start: "2050-09-06T14:00:00.000+02:00", end: "2050-09-06T15:00:00.000+02:00" }, + { start: "2050-09-06T15:00:00.000+02:00", end: "2050-09-06T16:00:00.000+02:00" }, + { start: "2050-09-06T16:00:00.000+02:00", end: "2050-09-06T17:00:00.000+02:00" }, + ], + "2050-09-07": [ + { start: "2050-09-07T09:00:00.000+02:00", end: "2050-09-07T10:00:00.000+02:00" }, + { start: "2050-09-07T10:00:00.000+02:00", end: "2050-09-07T11:00:00.000+02:00" }, + { start: "2050-09-07T11:00:00.000+02:00", end: "2050-09-07T12:00:00.000+02:00" }, + { start: "2050-09-07T12:00:00.000+02:00", end: "2050-09-07T13:00:00.000+02:00" }, + { start: "2050-09-07T13:00:00.000+02:00", end: "2050-09-07T14:00:00.000+02:00" }, + { start: "2050-09-07T14:00:00.000+02:00", end: "2050-09-07T15:00:00.000+02:00" }, + { start: "2050-09-07T15:00:00.000+02:00", end: "2050-09-07T16:00:00.000+02:00" }, + { start: "2050-09-07T16:00:00.000+02:00", end: "2050-09-07T17:00:00.000+02:00" }, + ], + "2050-09-08": [ + { start: "2050-09-08T09:00:00.000+02:00", end: "2050-09-08T10:00:00.000+02:00" }, + { start: "2050-09-08T10:00:00.000+02:00", end: "2050-09-08T11:00:00.000+02:00" }, + { start: "2050-09-08T11:00:00.000+02:00", end: "2050-09-08T12:00:00.000+02:00" }, + { start: "2050-09-08T12:00:00.000+02:00", end: "2050-09-08T13:00:00.000+02:00" }, + { start: "2050-09-08T13:00:00.000+02:00", end: "2050-09-08T14:00:00.000+02:00" }, + { start: "2050-09-08T14:00:00.000+02:00", end: "2050-09-08T15:00:00.000+02:00" }, + { start: "2050-09-08T15:00:00.000+02:00", end: "2050-09-08T16:00:00.000+02:00" }, + { start: "2050-09-08T16:00:00.000+02:00", end: "2050-09-08T17:00:00.000+02:00" }, + ], + "2050-09-09": [ + { start: "2050-09-09T09:00:00.000+02:00", end: "2050-09-09T10:00:00.000+02:00" }, + { start: "2050-09-09T10:00:00.000+02:00", end: "2050-09-09T11:00:00.000+02:00" }, + { start: "2050-09-09T11:00:00.000+02:00", end: "2050-09-09T12:00:00.000+02:00" }, + { start: "2050-09-09T12:00:00.000+02:00", end: "2050-09-09T13:00:00.000+02:00" }, + { start: "2050-09-09T13:00:00.000+02:00", end: "2050-09-09T14:00:00.000+02:00" }, + { start: "2050-09-09T14:00:00.000+02:00", end: "2050-09-09T15:00:00.000+02:00" }, + { start: "2050-09-09T15:00:00.000+02:00", end: "2050-09-09T16:00:00.000+02:00" }, + { start: "2050-09-09T16:00:00.000+02:00", end: "2050-09-09T17:00:00.000+02:00" }, + ], +}; diff --git a/apps/api/v2/src/modules/slots/slots-2024-09-04/controllers/e2e/org-team-event-type-slots.controller.e2e-spec.ts b/apps/api/v2/src/modules/slots/slots-2024-09-04/controllers/e2e/org-team-event-type-slots.controller.e2e-spec.ts new file mode 100644 index 0000000000..2fc6f7e962 --- /dev/null +++ b/apps/api/v2/src/modules/slots/slots-2024-09-04/controllers/e2e/org-team-event-type-slots.controller.e2e-spec.ts @@ -0,0 +1,474 @@ +import { bootstrap } from "@/app"; +import { AppModule } from "@/app.module"; +import { SchedulesModule_2024_06_11 } from "@/ee/schedules/schedules_2024_06_11/schedules.module"; +import { SchedulesService_2024_06_11 } from "@/ee/schedules/schedules_2024_06_11/services/schedules.service"; +import { PermissionsGuard } from "@/modules/auth/guards/permissions/permissions.guard"; +import { PrismaModule } from "@/modules/prisma/prisma.module"; +import { expectedSlotsUTC } from "@/modules/slots/slots-2024-09-04/controllers/e2e/expected-slots"; +import { GetSlotsOutput_2024_09_04 } from "@/modules/slots/slots-2024-09-04/outputs/get-slots.output"; +import { SlotsModule_2024_09_04 } from "@/modules/slots/slots-2024-09-04/slots.module"; +import { TokensModule } from "@/modules/tokens/tokens.module"; +import { UsersModule } from "@/modules/users/users.module"; +import { INestApplication } from "@nestjs/common"; +import { NestExpressApplication } from "@nestjs/platform-express"; +import { Test } from "@nestjs/testing"; +import { User } from "@prisma/client"; +import * as request from "supertest"; +import { BookingsRepositoryFixture } from "test/fixtures/repository/bookings.repository.fixture"; +import { EventTypesRepositoryFixture } from "test/fixtures/repository/event-types.repository.fixture"; +import { MembershipRepositoryFixture } from "test/fixtures/repository/membership.repository.fixture"; +import { OrganizationRepositoryFixture } from "test/fixtures/repository/organization.repository.fixture"; +import { ProfileRepositoryFixture } from "test/fixtures/repository/profiles.repository.fixture"; +import { TeamRepositoryFixture } from "test/fixtures/repository/team.repository.fixture"; +import { UserRepositoryFixture } from "test/fixtures/repository/users.repository.fixture"; +import { randomString } from "test/utils/randomString"; +import { withApiAuth } from "test/utils/withApiAuth"; + +import { CAL_API_VERSION_HEADER, SUCCESS_STATUS, VERSION_2024_09_04 } from "@calcom/platform-constants"; +import { CreateScheduleInput_2024_06_11 } from "@calcom/platform-types"; +import { Team } from "@calcom/prisma/client"; + +describe("Slots 2024-09-04 Endpoints", () => { + describe("Organization team event type slots", () => { + let app: INestApplication; + + let userRepositoryFixture: UserRepositoryFixture; + let schedulesService: SchedulesService_2024_06_11; + let teamRepositoryFixture: TeamRepositoryFixture; + let eventTypesRepositoryFixture: EventTypesRepositoryFixture; + let profileRepositoryFixture: ProfileRepositoryFixture; + let membershipsRepositoryFixture: MembershipRepositoryFixture; + let organizationsRepositoryFixture: OrganizationRepositoryFixture; + let bookingsRepositoryFixture: BookingsRepositoryFixture; + + const sharedUsername = `slots-2024-09-04-shared-username-${randomString()}`; + const sharedEventTypeSlug = `slots-2024-09-04-shared-event-type-slug-${randomString()}`; + + const orgUserEmailOne = `slots-2024-09-04-org-user-one-${randomString()}@api.com`; + const orgUserEmailTwo = `slots-2024-09-04-org-user-two-${randomString()}@api.com`; + + const nonOrgUserEmailOne = `slots-2024-09-04-non-org-user-one-${randomString()}@api.com`; + + let organization: Team; + let team: Team; + let orgUserOne: User; + let orgUserTwo: User; + let collectiveEventTypeId: number; + let roundRobinEventTypeId: number; + let collectiveBookingId: number; + let roundRobinBookingId: number; + let fullyBookedRoundRobinBookingIdOne: number; + let fullyBookedRoundRobinBookingIdTwo: number; + + let nonOrgUser: User; + + beforeAll(async () => { + const moduleRef = await withApiAuth( + orgUserEmailOne, + Test.createTestingModule({ + imports: [ + AppModule, + PrismaModule, + UsersModule, + TokensModule, + SchedulesModule_2024_06_11, + SlotsModule_2024_09_04, + ], + }) + ) + .overrideGuard(PermissionsGuard) + .useValue({ + canActivate: () => true, + }) + .compile(); + + userRepositoryFixture = new UserRepositoryFixture(moduleRef); + schedulesService = moduleRef.get(SchedulesService_2024_06_11); + teamRepositoryFixture = new TeamRepositoryFixture(moduleRef); + organizationsRepositoryFixture = new OrganizationRepositoryFixture(moduleRef); + eventTypesRepositoryFixture = new EventTypesRepositoryFixture(moduleRef); + profileRepositoryFixture = new ProfileRepositoryFixture(moduleRef); + membershipsRepositoryFixture = new MembershipRepositoryFixture(moduleRef); + bookingsRepositoryFixture = new BookingsRepositoryFixture(moduleRef); + + const orgSlug = `slots-2024-09-04-organization-${randomString()}`; + organization = await organizationsRepositoryFixture.create({ + name: orgSlug, + isOrganization: true, + slug: orgSlug, + timeZone: "Europe/Rome", + }); + + orgUserOne = await userRepositoryFixture.create({ + email: orgUserEmailOne, + name: orgUserEmailOne, + username: orgUserEmailOne, + }); + + await eventTypesRepositoryFixture.create( + { title: "frisbee match orgUserOne", slug: sharedEventTypeSlug, length: 60 }, + orgUserOne.id + ); + + orgUserTwo = await userRepositoryFixture.create({ + email: orgUserEmailTwo, + name: orgUserEmailTwo, + username: orgUserEmailTwo, + }); + + nonOrgUser = await userRepositoryFixture.create({ + email: nonOrgUserEmailOne, + name: nonOrgUserEmailOne, + username: sharedUsername, + }); + + await eventTypesRepositoryFixture.create( + { title: "frisbee match nonOrgUser", slug: sharedEventTypeSlug, length: 60 }, + nonOrgUser.id + ); + + await profileRepositoryFixture.create({ + uid: `usr-${orgUserOne.id}`, + username: sharedUsername, + organization: { + connect: { + id: organization.id, + }, + }, + user: { + connect: { + id: orgUserOne.id, + }, + }, + }); + + team = await teamRepositoryFixture.create({ + name: `slots-2024-09-04-team-${randomString()}`, + isOrganization: false, + parent: { connect: { id: organization.id } }, + }); + + await membershipsRepositoryFixture.create({ + role: "MEMBER", + user: { connect: { id: orgUserOne.id } }, + team: { connect: { id: team.id } }, + accepted: true, + }); + + await membershipsRepositoryFixture.create({ + role: "MEMBER", + user: { connect: { id: orgUserTwo.id } }, + team: { connect: { id: team.id } }, + accepted: true, + }); + + const collectiveEventType = await eventTypesRepositoryFixture.createTeamEventType({ + schedulingType: "COLLECTIVE", + team: { + connect: { id: team.id }, + }, + title: "Collective Event Type", + slug: `slots-2024-09-04-org-collective-event-type-${randomString()}`, + length: 60, + assignAllTeamMembers: true, + bookingFields: [], + locations: [], + users: { + connect: [{ id: orgUserOne.id }, { id: orgUserTwo.id }], + }, + }); + collectiveEventTypeId = collectiveEventType.id; + + const roundRobinEventType = await eventTypesRepositoryFixture.createTeamEventType({ + schedulingType: "ROUND_ROBIN", + team: { + connect: { id: team.id }, + }, + title: "RR Event Type", + slug: `slots-2024-09-04-org-round-robin-event-type-${randomString()}`, + length: 60, + assignAllTeamMembers: true, + bookingFields: [], + locations: [], + users: { + connect: [{ id: orgUserOne.id }, { id: orgUserTwo.id }], + }, + }); + roundRobinEventTypeId = roundRobinEventType.id; + + const orgUsersSchedule: CreateScheduleInput_2024_06_11 = { + name: "working time", + timeZone: "Europe/Rome", + isDefault: true, + }; + + const nonOrgUserSchedule: CreateScheduleInput_2024_06_11 = { + name: "working time", + timeZone: "Europe/Rome", + isDefault: true, + availability: [ + { + days: ["Monday"], + startTime: "09:00", + endTime: "17:00", + }, + ], + }; + // note(Lauris): this creates default schedule monday to friday from 9AM to 5PM in Europe/Rome timezone + await schedulesService.createUserSchedule(orgUserOne.id, orgUsersSchedule); + await schedulesService.createUserSchedule(orgUserTwo.id, orgUsersSchedule); + await schedulesService.createUserSchedule(nonOrgUser.id, nonOrgUserSchedule); + + app = moduleRef.createNestApplication(); + bootstrap(app as NestExpressApplication); + + await app.init(); + }); + + describe("org and non org user have the same username and event type slug", () => { + it("should get org user event slots in UTC", async () => { + return request(app.getHttpServer()) + .get( + `/v2/slots?organizationSlug=${organization.slug}&eventTypeSlug=${sharedEventTypeSlug}&username=${sharedUsername}&start=2050-09-05&end=2050-09-09` + ) + .set(CAL_API_VERSION_HEADER, VERSION_2024_09_04) + .expect(200) + .then(async (response) => { + const responseBody: GetSlotsOutput_2024_09_04 = response.body; + expect(responseBody.status).toEqual(SUCCESS_STATUS); + const slots = responseBody.data; + + expect(slots).toBeDefined(); + const days = Object.keys(slots); + expect(days.length).toEqual(5); + expect(slots).toEqual(expectedSlotsUTC); + }); + }); + + it("should get non org user event slots in UTC", async () => { + return request(app.getHttpServer()) + .get( + `/v2/slots?&eventTypeSlug=${sharedEventTypeSlug}&username=${sharedUsername}&start=2050-09-05&end=2050-09-09` + ) + .set(CAL_API_VERSION_HEADER, VERSION_2024_09_04) + .expect(200) + .then(async (response) => { + const responseBody: GetSlotsOutput_2024_09_04 = response.body; + expect(responseBody.status).toEqual(SUCCESS_STATUS); + const slots = responseBody.data; + + expect(slots).toBeDefined(); + const days = Object.keys(slots); + expect(days.length).toEqual(1); + expect(slots).toEqual({ "2050-09-05": expectedSlotsUTC["2050-09-05"] }); + }); + }); + }); + + it("should get collective team event slots in UTC", async () => { + return request(app.getHttpServer()) + .get(`/v2/slots?eventTypeId=${collectiveEventTypeId}&start=2050-09-05&end=2050-09-09`) + .set(CAL_API_VERSION_HEADER, VERSION_2024_09_04) + .expect(200) + .then(async (response) => { + const responseBody: GetSlotsOutput_2024_09_04 = response.body; + expect(responseBody.status).toEqual(SUCCESS_STATUS); + const slots = responseBody.data; + + expect(slots).toBeDefined(); + const days = Object.keys(slots); + expect(days.length).toEqual(5); + expect(slots).toEqual(expectedSlotsUTC); + }); + }); + + it("should get round robin team event slots in UTC", async () => { + return request(app.getHttpServer()) + .get(`/v2/slots?eventTypeId=${roundRobinEventTypeId}&start=2050-09-05&end=2050-09-09`) + .set(CAL_API_VERSION_HEADER, VERSION_2024_09_04) + .expect(200) + .then(async (response) => { + const responseBody: GetSlotsOutput_2024_09_04 = response.body; + expect(responseBody.status).toEqual(SUCCESS_STATUS); + const slots = responseBody.data; + + expect(slots).toBeDefined(); + const days = Object.keys(slots); + expect(days.length).toEqual(5); + expect(slots).toEqual(expectedSlotsUTC); + }); + }); + + it("should book collective event type and slot should not be available at that time", async () => { + const startTime = "2050-09-05T11:00:00.000Z"; + const booking = await bookingsRepositoryFixture.create({ + uid: `booking-uid-${collectiveEventTypeId}`, + title: "booking title", + startTime, + endTime: "2050-09-05T12:00:00.000Z", + eventType: { + connect: { + id: collectiveEventTypeId, + }, + }, + metadata: {}, + responses: { + name: "tester", + email: "tester@example.com", + guests: [], + }, + user: { + connect: { + id: orgUserOne.id, + }, + }, + }); + collectiveBookingId = booking.id; + + const response = await request(app.getHttpServer()) + .get(`/v2/slots?eventTypeId=${collectiveEventTypeId}&start=2050-09-05&end=2050-09-09`) + .set(CAL_API_VERSION_HEADER, VERSION_2024_09_04) + .expect(200); + + const responseBody: GetSlotsOutput_2024_09_04 = response.body; + expect(responseBody.status).toEqual(SUCCESS_STATUS); + const slots = responseBody.data; + + expect(slots).toBeDefined(); + const days = Object.keys(slots); + expect(days.length).toEqual(5); + + const expectedSlotsUTC2050_09_05 = expectedSlotsUTC["2050-09-05"].filter( + (slot) => slot.start !== startTime + ); + expect(slots).toEqual({ ...expectedSlotsUTC, "2050-09-05": expectedSlotsUTC2050_09_05 }); + bookingsRepositoryFixture.deleteById(booking.id); + }); + + it("should book round robin event type and slot should be available at that time", async () => { + const startTime = "2050-09-05T11:00:00.000Z"; + const booking = await bookingsRepositoryFixture.create({ + uid: `booking-uid-${roundRobinEventTypeId}`, + title: "booking title", + startTime, + endTime: "2050-09-05T12:00:00.000Z", + eventType: { + connect: { + id: roundRobinEventTypeId, + }, + }, + metadata: {}, + responses: { + name: "tester", + email: "tester@example.com", + guests: [], + }, + user: { + connect: { + id: orgUserOne.id, + }, + }, + }); + roundRobinBookingId = booking.id; + + const response = await request(app.getHttpServer()) + .get(`/v2/slots?eventTypeId=${roundRobinEventTypeId}&start=2050-09-05&end=2050-09-09`) + .set(CAL_API_VERSION_HEADER, VERSION_2024_09_04) + .expect(200); + + const responseBody: GetSlotsOutput_2024_09_04 = response.body; + expect(responseBody.status).toEqual(SUCCESS_STATUS); + const slots = responseBody.data; + + expect(slots).toBeDefined(); + const days = Object.keys(slots); + expect(days.length).toEqual(5); + + expect(slots).toEqual(expectedSlotsUTC); + bookingsRepositoryFixture.deleteById(booking.id); + }); + + it("should fully book round robin event type and slot should not be available at that time", async () => { + const startTime = "2050-09-05T11:00:00.000Z"; + const bookingOne = await bookingsRepositoryFixture.create({ + uid: `booking-uid-${roundRobinEventTypeId}-1`, + title: "booking title", + startTime, + endTime: "2050-09-05T12:00:00.000Z", + eventType: { + connect: { + id: roundRobinEventTypeId, + }, + }, + metadata: {}, + responses: { + name: "tester", + email: "tester@example.com", + guests: [], + }, + user: { + connect: { + id: orgUserOne.id, + }, + }, + }); + fullyBookedRoundRobinBookingIdOne = bookingOne.id; + + const bookingTwo = await bookingsRepositoryFixture.create({ + uid: `booking-uid-${roundRobinEventTypeId}-2`, + title: "booking title", + startTime, + endTime: "2050-09-05T12:00:00.000Z", + eventType: { + connect: { + id: roundRobinEventTypeId, + }, + }, + metadata: {}, + responses: { + name: "tester", + email: "tester@example.com", + guests: [], + }, + user: { + connect: { + id: orgUserTwo.id, + }, + }, + }); + fullyBookedRoundRobinBookingIdTwo = bookingTwo.id; + + const response = await request(app.getHttpServer()) + .get(`/v2/slots?eventTypeId=${roundRobinEventTypeId}&start=2050-09-05&end=2050-09-09`) + .set(CAL_API_VERSION_HEADER, VERSION_2024_09_04) + .expect(200); + + const responseBody: GetSlotsOutput_2024_09_04 = response.body; + expect(responseBody.status).toEqual(SUCCESS_STATUS); + const slots = responseBody.data; + + expect(slots).toBeDefined(); + const days = Object.keys(slots); + expect(days.length).toEqual(5); + + const expectedSlotsUTC2050_09_05 = expectedSlotsUTC["2050-09-05"].filter( + (slot) => slot.start !== startTime + ); + expect(slots).toEqual({ ...expectedSlotsUTC, "2050-09-05": expectedSlotsUTC2050_09_05 }); + bookingsRepositoryFixture.deleteById(bookingOne.id); + bookingsRepositoryFixture.deleteById(bookingTwo.id); + }); + + afterAll(async () => { + await userRepositoryFixture.deleteByEmail(orgUserOne.email); + await userRepositoryFixture.deleteByEmail(orgUserTwo.email); + await teamRepositoryFixture.delete(team.id); + await organizationsRepositoryFixture.delete(organization.id); + await bookingsRepositoryFixture.deleteById(collectiveBookingId); + await bookingsRepositoryFixture.deleteById(roundRobinBookingId); + await bookingsRepositoryFixture.deleteById(fullyBookedRoundRobinBookingIdOne); + await bookingsRepositoryFixture.deleteById(fullyBookedRoundRobinBookingIdTwo); + await app.close(); + }); + }); +}); diff --git a/apps/api/v2/src/modules/slots/slots-2024-09-04/controllers/e2e/team-event-type-slots.controller.e2e-spec.ts b/apps/api/v2/src/modules/slots/slots-2024-09-04/controllers/e2e/team-event-type-slots.controller.e2e-spec.ts new file mode 100644 index 0000000000..0c069a4f09 --- /dev/null +++ b/apps/api/v2/src/modules/slots/slots-2024-09-04/controllers/e2e/team-event-type-slots.controller.e2e-spec.ts @@ -0,0 +1,534 @@ +import { bootstrap } from "@/app"; +import { AppModule } from "@/app.module"; +import { SchedulesModule_2024_06_11 } from "@/ee/schedules/schedules_2024_06_11/schedules.module"; +import { SchedulesService_2024_06_11 } from "@/ee/schedules/schedules_2024_06_11/services/schedules.service"; +import { PermissionsGuard } from "@/modules/auth/guards/permissions/permissions.guard"; +import { PrismaModule } from "@/modules/prisma/prisma.module"; +import { expectedSlotsUTC } from "@/modules/slots/slots-2024-09-04/controllers/e2e/expected-slots"; +import { GetSlotsOutput_2024_09_04 } from "@/modules/slots/slots-2024-09-04/outputs/get-slots.output"; +import { ReserveSlotOutputResponse_2024_09_04 } from "@/modules/slots/slots-2024-09-04/outputs/reserve-slot.output"; +import { SlotsModule_2024_09_04 } from "@/modules/slots/slots-2024-09-04/slots.module"; +import { TokensModule } from "@/modules/tokens/tokens.module"; +import { UsersModule } from "@/modules/users/users.module"; +import { INestApplication } from "@nestjs/common"; +import { NestExpressApplication } from "@nestjs/platform-express"; +import { Test } from "@nestjs/testing"; +import { User } from "@prisma/client"; +import { advanceTo, clear } from "jest-date-mock"; +import { DateTime } from "luxon"; +import * as request from "supertest"; +import { ApiKeysRepositoryFixture } from "test/fixtures/repository/api-keys.repository.fixture"; +import { BookingsRepositoryFixture } from "test/fixtures/repository/bookings.repository.fixture"; +import { EventTypesRepositoryFixture } from "test/fixtures/repository/event-types.repository.fixture"; +import { MembershipRepositoryFixture } from "test/fixtures/repository/membership.repository.fixture"; +import { SelectedSlotsRepositoryFixture } from "test/fixtures/repository/selected-slots.repository.fixture"; +import { TeamRepositoryFixture } from "test/fixtures/repository/team.repository.fixture"; +import { UserRepositoryFixture } from "test/fixtures/repository/users.repository.fixture"; +import { randomString } from "test/utils/randomString"; + +import { CAL_API_VERSION_HEADER, SUCCESS_STATUS, VERSION_2024_09_04 } from "@calcom/platform-constants"; +import { + CreateScheduleInput_2024_06_11, + ReserveSlotOutput_2024_09_04 as ReserveSlotOutputData_2024_09_04, +} from "@calcom/platform-types"; +import { Team } from "@calcom/prisma/client"; + +describe("Slots 2024-09-04 Endpoints", () => { + describe("Team event type slots", () => { + let app: INestApplication; + + let userRepositoryFixture: UserRepositoryFixture; + let schedulesService: SchedulesService_2024_06_11; + let teamRepositoryFixture: TeamRepositoryFixture; + let eventTypesRepositoryFixture: EventTypesRepositoryFixture; + let membershipsRepositoryFixture: MembershipRepositoryFixture; + let bookingsRepositoryFixture: BookingsRepositoryFixture; + let apiKeysRepositoryFixture: ApiKeysRepositoryFixture; + let selectedSlotsRepositoryFixture: SelectedSlotsRepositoryFixture; + + const teammateEmailOne = `slots-2024-09-04-user-1-team-slots-${randomString()}`; + let teammateApiKeyString: string; + const teammateEmailTwo = `slots-2024-09-04-user-2-team-slots-${randomString()}`; + + const outsiderEmail = `slots-2024-09-04-unrelated-team-slots-${randomString()}`; + let outsider: User; + let outsiderApiKeyString: string; + + let team: Team; + let teammateOne: User; + let teammateTwo: User; + let collectiveEventTypeId: number; + let collectiveEventTypeWithoutHostsId: number; + let roundRobinEventTypeId: number; + let collectiveBookingId: number; + let roundRobinBookingId: number; + let fullyBookedRoundRobinBookingIdOne: number; + let fullyBookedRoundRobinBookingIdTwo: number; + + let reservedSlot: ReserveSlotOutputData_2024_09_04; + + beforeAll(async () => { + const moduleRef = await Test.createTestingModule({ + imports: [ + AppModule, + PrismaModule, + UsersModule, + TokensModule, + SchedulesModule_2024_06_11, + SlotsModule_2024_09_04, + ], + }) + .overrideGuard(PermissionsGuard) + .useValue({ + canActivate: () => true, + }) + .compile(); + + userRepositoryFixture = new UserRepositoryFixture(moduleRef); + schedulesService = moduleRef.get(SchedulesService_2024_06_11); + teamRepositoryFixture = new TeamRepositoryFixture(moduleRef); + eventTypesRepositoryFixture = new EventTypesRepositoryFixture(moduleRef); + membershipsRepositoryFixture = new MembershipRepositoryFixture(moduleRef); + bookingsRepositoryFixture = new BookingsRepositoryFixture(moduleRef); + apiKeysRepositoryFixture = new ApiKeysRepositoryFixture(moduleRef); + selectedSlotsRepositoryFixture = new SelectedSlotsRepositoryFixture(moduleRef); + + teammateOne = await userRepositoryFixture.create({ + email: teammateEmailOne, + name: teammateEmailOne, + username: teammateEmailOne, + }); + + teammateTwo = await userRepositoryFixture.create({ + email: teammateEmailTwo, + name: teammateEmailTwo, + username: teammateEmailTwo, + }); + + outsider = await userRepositoryFixture.create({ + email: outsiderEmail, + name: outsiderEmail, + username: outsiderEmail, + }); + + const { keyString } = await apiKeysRepositoryFixture.createApiKey(teammateOne.id, null); + teammateApiKeyString = keyString; + + const { keyString: unrelatedUserKeyString } = await apiKeysRepositoryFixture.createApiKey( + outsider.id, + null + ); + outsiderApiKeyString = unrelatedUserKeyString; + + team = await teamRepositoryFixture.create({ + name: `slots-2024-09-04-team-${randomString()}`, + isOrganization: false, + }); + + await membershipsRepositoryFixture.create({ + role: "MEMBER", + user: { connect: { id: teammateOne.id } }, + team: { connect: { id: team.id } }, + accepted: true, + }); + + await membershipsRepositoryFixture.create({ + role: "MEMBER", + user: { connect: { id: teammateTwo.id } }, + team: { connect: { id: team.id } }, + accepted: true, + }); + + const collectiveEventType = await eventTypesRepositoryFixture.createTeamEventType({ + schedulingType: "COLLECTIVE", + team: { + connect: { id: team.id }, + }, + title: "Collective Event Type", + slug: `slots-2024-09-04-collective-event-type-${randomString()}`, + length: 60, + assignAllTeamMembers: true, + bookingFields: [], + locations: [], + users: { + connect: [{ id: teammateOne.id }, { id: teammateTwo.id }], + }, + hosts: { + create: [ + { + userId: teammateOne.id, + isFixed: true, + }, + { + userId: teammateTwo.id, + isFixed: true, + }, + ], + }, + }); + collectiveEventTypeId = collectiveEventType.id; + + const collectiveEventTypeWithoutHosts = await eventTypesRepositoryFixture.createTeamEventType({ + schedulingType: "COLLECTIVE", + team: { + connect: { id: team.id }, + }, + title: "Collective Event Type Without Hosts", + slug: `slots-2024-09-04-collective-event-type-without-hosts-${randomString()}`, + length: 60, + assignAllTeamMembers: true, + bookingFields: [], + locations: [], + users: { + connect: [{ id: teammateOne.id }, { id: teammateTwo.id }], + }, + }); + collectiveEventTypeWithoutHostsId = collectiveEventTypeWithoutHosts.id; + + const roundRobinEventType = await eventTypesRepositoryFixture.createTeamEventType({ + schedulingType: "ROUND_ROBIN", + team: { + connect: { id: team.id }, + }, + title: "RR Event Type", + slug: `slots-2024-09-04-round-robin-event-type-${randomString()}`, + length: 60, + assignAllTeamMembers: true, + bookingFields: [], + locations: [], + users: { + connect: [{ id: teammateOne.id }, { id: teammateTwo.id }], + }, + hosts: { + create: [ + { + userId: teammateOne.id, + isFixed: true, + }, + { + userId: teammateTwo.id, + isFixed: true, + }, + ], + }, + }); + roundRobinEventTypeId = roundRobinEventType.id; + + const userSchedule: CreateScheduleInput_2024_06_11 = { + name: "working time", + timeZone: "Europe/Rome", + isDefault: true, + }; + // note(Lauris): this creates default schedule monday to friday from 9AM to 5PM in Europe/Rome timezone + await schedulesService.createUserSchedule(teammateOne.id, userSchedule); + await schedulesService.createUserSchedule(teammateTwo.id, userSchedule); + + app = moduleRef.createNestApplication(); + bootstrap(app as NestExpressApplication); + + await app.init(); + }); + + it("should get collective team event slots in UTC", async () => { + return request(app.getHttpServer()) + .get(`/v2/slots?eventTypeId=${collectiveEventTypeId}&start=2050-09-05&end=2050-09-09`) + .set(CAL_API_VERSION_HEADER, VERSION_2024_09_04) + .expect(200) + .then(async (response) => { + const responseBody: GetSlotsOutput_2024_09_04 = response.body; + expect(responseBody.status).toEqual(SUCCESS_STATUS); + const slots = responseBody.data; + + expect(slots).toBeDefined(); + const days = Object.keys(slots); + expect(days.length).toEqual(5); + expect(slots).toEqual(expectedSlotsUTC); + }); + }); + + it("should get round robin team event slots in UTC", async () => { + return request(app.getHttpServer()) + .get(`/v2/slots?eventTypeId=${roundRobinEventTypeId}&start=2050-09-05&end=2050-09-09`) + .set(CAL_API_VERSION_HEADER, VERSION_2024_09_04) + .expect(200) + .then(async (response) => { + const responseBody: GetSlotsOutput_2024_09_04 = response.body; + expect(responseBody.status).toEqual(SUCCESS_STATUS); + const slots = responseBody.data; + + expect(slots).toBeDefined(); + const days = Object.keys(slots); + expect(days.length).toEqual(5); + expect(slots).toEqual(expectedSlotsUTC); + }); + }); + + it("should not be able reserve a team event type slot with custom duration if no auth is provided", async () => { + await request(app.getHttpServer()) + .post(`/v2/slots/reservations`) + .send({ + eventTypeId: collectiveEventTypeId, + slotStart: "2050-09-05T10:00:00.000Z", + reservationDuration: 10, + }) + .set(CAL_API_VERSION_HEADER, VERSION_2024_09_04) + .expect(401); + }); + + it("should not be able reserve a slot with custom duration if provided auth user is not part of the team that owns the team event type", async () => { + await request(app.getHttpServer()) + .post(`/v2/slots/reservations`) + .send({ + eventTypeId: collectiveEventTypeId, + slotStart: "2050-09-05T10:00:00.000Z", + reservationDuration: 10, + }) + .set({ Authorization: `Bearer cal_test_${outsiderApiKeyString}` }) + .set(CAL_API_VERSION_HEADER, VERSION_2024_09_04) + .expect(403); + }); + + it("should not be able reserve a slot for team event type without hosts", async () => { + await request(app.getHttpServer()) + .post(`/v2/slots/reservations`) + .send({ + eventTypeId: collectiveEventTypeWithoutHostsId, + slotStart: "2050-09-05T10:00:00.000Z", + }) + .set({ Authorization: `Bearer cal_test_${teammateApiKeyString}` }) + .set(CAL_API_VERSION_HEADER, VERSION_2024_09_04) + .expect(400); + }); + + it("should reserve a slot as team member of the team that owns the team event type", async () => { + // note(Lauris): mock current date to test slots release time + const now = "2049-09-05T12:00:00.000Z"; + const newDate = DateTime.fromISO(now, { zone: "UTC" }).toJSDate(); + advanceTo(newDate); + + const slotStartTime = "2050-09-05T10:00:00.000Z"; + const reserveResponse = await request(app.getHttpServer()) + .post(`/v2/slots/reservations`) + .set({ Authorization: `Bearer cal_test_${teammateApiKeyString}` }) + .send({ + eventTypeId: collectiveEventTypeId, + slotStart: slotStartTime, + reservationDuration: 10, + }) + .set(CAL_API_VERSION_HEADER, VERSION_2024_09_04) + .expect(201); + + const reserveResponseBody: ReserveSlotOutputResponse_2024_09_04 = reserveResponse.body; + expect(reserveResponseBody.status).toEqual(SUCCESS_STATUS); + const responseReservedSlot: ReserveSlotOutputData_2024_09_04 = reserveResponseBody.data; + expect(responseReservedSlot.reservationUid).toBeDefined(); + if (!responseReservedSlot.reservationUid) { + throw new Error("Reserved slot uid is undefined"); + } + reservedSlot = responseReservedSlot; + + const response = await request(app.getHttpServer()) + .get(`/v2/slots?eventTypeId=${collectiveEventTypeId}&start=2050-09-05&end=2050-09-09`) + .set(CAL_API_VERSION_HEADER, VERSION_2024_09_04) + .expect(200); + + const responseBody: GetSlotsOutput_2024_09_04 = response.body; + expect(responseBody.status).toEqual(SUCCESS_STATUS); + const slots = responseBody.data; + + expect(slots).toBeDefined(); + const days = Object.keys(slots); + expect(days.length).toEqual(5); + + const expectedSlotsUTC2050_09_05 = expectedSlotsUTC["2050-09-05"].filter( + (slot) => slot.start !== slotStartTime + ); + expect(slots).toEqual({ ...expectedSlotsUTC, "2050-09-05": expectedSlotsUTC2050_09_05 }); + + const dbSlot = await selectedSlotsRepositoryFixture.getByUid(reservedSlot.reservationUid); + expect(dbSlot).toBeDefined(); + if (dbSlot) { + const dbReleaseAt = DateTime.fromJSDate(dbSlot.releaseAt, { zone: "UTC" }).toISO(); + const expectedReleaseAt = DateTime.fromISO(now, { zone: "UTC" }).plus({ minutes: 10 }).toISO(); + expect(dbReleaseAt).toEqual(expectedReleaseAt); + } + await selectedSlotsRepositoryFixture.deleteByUId(reservedSlot.reservationUid); + clear(); + }); + + it("should book collective event type and slot should not be available at that time", async () => { + const startTime = "2050-09-05T11:00:00.000Z"; + const booking = await bookingsRepositoryFixture.create({ + uid: `booking-uid-${collectiveEventTypeId}`, + title: "booking title", + startTime, + endTime: "2050-09-05T12:00:00.000Z", + eventType: { + connect: { + id: collectiveEventTypeId, + }, + }, + metadata: {}, + responses: { + name: "tester", + email: "tester@example.com", + guests: [], + }, + user: { + connect: { + id: teammateOne.id, + }, + }, + }); + collectiveBookingId = booking.id; + + const response = await request(app.getHttpServer()) + .get(`/v2/slots?eventTypeId=${collectiveEventTypeId}&start=2050-09-05&end=2050-09-09`) + .set(CAL_API_VERSION_HEADER, VERSION_2024_09_04) + .expect(200); + + const responseBody: GetSlotsOutput_2024_09_04 = response.body; + expect(responseBody.status).toEqual(SUCCESS_STATUS); + const slots = responseBody.data; + + expect(slots).toBeDefined(); + const days = Object.keys(slots); + expect(days.length).toEqual(5); + + const expectedSlotsUTC2050_09_05 = expectedSlotsUTC["2050-09-05"].filter( + (slot) => slot.start !== startTime + ); + expect(slots).toEqual({ ...expectedSlotsUTC, "2050-09-05": expectedSlotsUTC2050_09_05 }); + bookingsRepositoryFixture.deleteById(booking.id); + }); + + it("should book round robin event type and slot should be available at that time", async () => { + const startTime = "2050-09-05T11:00:00.000Z"; + const booking = await bookingsRepositoryFixture.create({ + uid: `booking-uid-${roundRobinEventTypeId}`, + title: "booking title", + startTime, + endTime: "2050-09-05T12:00:00.000Z", + eventType: { + connect: { + id: roundRobinEventTypeId, + }, + }, + metadata: {}, + responses: { + name: "tester", + email: "tester@example.com", + guests: [], + }, + user: { + connect: { + id: teammateOne.id, + }, + }, + }); + roundRobinBookingId = booking.id; + + const response = await request(app.getHttpServer()) + .get(`/v2/slots?eventTypeId=${roundRobinEventTypeId}&start=2050-09-05&end=2050-09-09`) + .set(CAL_API_VERSION_HEADER, VERSION_2024_09_04) + .expect(200); + + const responseBody: GetSlotsOutput_2024_09_04 = response.body; + expect(responseBody.status).toEqual(SUCCESS_STATUS); + const slots = responseBody.data; + + expect(slots).toBeDefined(); + const days = Object.keys(slots); + expect(days.length).toEqual(5); + + const expectedSlotsUTC2050_09_05 = expectedSlotsUTC["2050-09-05"].filter( + (slot) => slot.start !== startTime + ); + expect(slots).toEqual({ ...expectedSlotsUTC, "2050-09-05": expectedSlotsUTC2050_09_05 }); + bookingsRepositoryFixture.deleteById(booking.id); + }); + + it("should fully book round robin event type and slot should not be available at that time", async () => { + const startTime = "2050-09-05T11:00:00.000Z"; + const bookingOne = await bookingsRepositoryFixture.create({ + uid: `booking-uid-${roundRobinEventTypeId}-1`, + title: "booking title", + startTime, + endTime: "2050-09-05T12:00:00.000Z", + eventType: { + connect: { + id: roundRobinEventTypeId, + }, + }, + metadata: {}, + responses: { + name: "tester", + email: "tester@example.com", + guests: [], + }, + user: { + connect: { + id: teammateOne.id, + }, + }, + }); + fullyBookedRoundRobinBookingIdOne = bookingOne.id; + + const bookingTwo = await bookingsRepositoryFixture.create({ + uid: `booking-uid-${roundRobinEventTypeId}-2`, + title: "booking title", + startTime, + endTime: "2050-09-05T12:00:00.000Z", + eventType: { + connect: { + id: roundRobinEventTypeId, + }, + }, + metadata: {}, + responses: { + name: "tester", + email: "tester@example.com", + guests: [], + }, + user: { + connect: { + id: teammateTwo.id, + }, + }, + }); + fullyBookedRoundRobinBookingIdTwo = bookingTwo.id; + + const response = await request(app.getHttpServer()) + .get(`/v2/slots?eventTypeId=${roundRobinEventTypeId}&start=2050-09-05&end=2050-09-09`) + .set(CAL_API_VERSION_HEADER, VERSION_2024_09_04) + .expect(200); + + const responseBody: GetSlotsOutput_2024_09_04 = response.body; + expect(responseBody.status).toEqual(SUCCESS_STATUS); + const slots = responseBody.data; + + expect(slots).toBeDefined(); + const days = Object.keys(slots); + expect(days.length).toEqual(5); + + const expectedSlotsUTC2050_09_05 = expectedSlotsUTC["2050-09-05"].filter( + (slot) => slot.start !== startTime + ); + expect(slots).toEqual({ ...expectedSlotsUTC, "2050-09-05": expectedSlotsUTC2050_09_05 }); + bookingsRepositoryFixture.deleteById(bookingOne.id); + bookingsRepositoryFixture.deleteById(bookingTwo.id); + }); + + afterAll(async () => { + await userRepositoryFixture.deleteByEmail(teammateOne.email); + await userRepositoryFixture.deleteByEmail(teammateTwo.email); + await userRepositoryFixture.deleteByEmail(outsiderEmail); + await teamRepositoryFixture.delete(team.id); + await bookingsRepositoryFixture.deleteById(collectiveBookingId); + await bookingsRepositoryFixture.deleteById(roundRobinBookingId); + await bookingsRepositoryFixture.deleteById(fullyBookedRoundRobinBookingIdOne); + await bookingsRepositoryFixture.deleteById(fullyBookedRoundRobinBookingIdTwo); + await app.close(); + }); + }); +}); diff --git a/apps/api/v2/src/modules/slots/slots-2024-09-04/controllers/e2e/user-event-type-slots.controller.e2e-spec.ts b/apps/api/v2/src/modules/slots/slots-2024-09-04/controllers/e2e/user-event-type-slots.controller.e2e-spec.ts new file mode 100644 index 0000000000..8da3bc101c --- /dev/null +++ b/apps/api/v2/src/modules/slots/slots-2024-09-04/controllers/e2e/user-event-type-slots.controller.e2e-spec.ts @@ -0,0 +1,1260 @@ +import { bootstrap } from "@/app"; +import { AppModule } from "@/app.module"; +import { SchedulesModule_2024_06_11 } from "@/ee/schedules/schedules_2024_06_11/schedules.module"; +import { SchedulesService_2024_06_11 } from "@/ee/schedules/schedules_2024_06_11/services/schedules.service"; +import { PermissionsGuard } from "@/modules/auth/guards/permissions/permissions.guard"; +import { PrismaModule } from "@/modules/prisma/prisma.module"; +import { + expectedSlotsRome, + expectedSlotsRomeRange, + expectedSlotsUTC, + expectedSlotsUTCRange, +} from "@/modules/slots/slots-2024-09-04/controllers/e2e/expected-slots"; +import { GetReservedSlotOutput_2024_09_04 } from "@/modules/slots/slots-2024-09-04/outputs/get-reserved-slot.output"; +import { GetSlotsOutput_2024_09_04 } from "@/modules/slots/slots-2024-09-04/outputs/get-slots.output"; +import { ReserveSlotOutputResponse_2024_09_04 } from "@/modules/slots/slots-2024-09-04/outputs/reserve-slot.output"; +import { SlotsModule_2024_09_04 } from "@/modules/slots/slots-2024-09-04/slots.module"; +import { TokensModule } from "@/modules/tokens/tokens.module"; +import { UsersModule } from "@/modules/users/users.module"; +import { INestApplication } from "@nestjs/common"; +import { NestExpressApplication } from "@nestjs/platform-express"; +import { Test } from "@nestjs/testing"; +import { EventType, User } from "@prisma/client"; +import { advanceTo, clear } from "jest-date-mock"; +import { DateTime } from "luxon"; +import * as request from "supertest"; +import { ApiKeysRepositoryFixture } from "test/fixtures/repository/api-keys.repository.fixture"; +import { AttendeeRepositoryFixture } from "test/fixtures/repository/attendee.repository.fixture"; +import { BookingSeatRepositoryFixture } from "test/fixtures/repository/booking-seat.repository.fixture"; +import { BookingsRepositoryFixture } from "test/fixtures/repository/bookings.repository.fixture"; +import { EventTypesRepositoryFixture } from "test/fixtures/repository/event-types.repository.fixture"; +import { MembershipRepositoryFixture } from "test/fixtures/repository/membership.repository.fixture"; +import { SelectedSlotsRepositoryFixture } from "test/fixtures/repository/selected-slots.repository.fixture"; +import { TeamRepositoryFixture } from "test/fixtures/repository/team.repository.fixture"; +import { UserRepositoryFixture } from "test/fixtures/repository/users.repository.fixture"; +import { randomString } from "test/utils/randomString"; + +import { CAL_API_VERSION_HEADER, SUCCESS_STATUS, VERSION_2024_09_04 } from "@calcom/platform-constants"; +import { + CreateScheduleInput_2024_06_11, + ReserveSlotOutput_2024_09_04 as ReserveSlotOutputData_2024_09_04, +} from "@calcom/platform-types"; +import { Team } from "@calcom/prisma/client"; + +describe("Slots 2024-09-04 Endpoints", () => { + describe("User event type slots", () => { + let app: INestApplication; + + let userRepositoryFixture: UserRepositoryFixture; + let schedulesService: SchedulesService_2024_06_11; + let eventTypesRepositoryFixture: EventTypesRepositoryFixture; + let selectedSlotsRepositoryFixture: SelectedSlotsRepositoryFixture; + let bookingsRepositoryFixture: BookingsRepositoryFixture; + let bookingSeatsRepositoryFixture: BookingSeatRepositoryFixture; + let attendeesRepositoryFixture: AttendeeRepositoryFixture; + let apiKeysRepositoryFixture: ApiKeysRepositoryFixture; + let apiKeyString: string; + let membershipsRepositoryFixture: MembershipRepositoryFixture; + let teamRepositoryFixture: TeamRepositoryFixture; + + const userEmail = `slots-2024-09-04-user-${randomString()}@example.com`; + let user: User; + let eventTypeId: number; + let eventTypeSlug: string; + let eventTypeLength: number; + + let team: Team; + const teammateUserEmail = `slots-2024-09-04-teammate-user-${randomString()}@example.com`; + let teammateUser: User; + let teammateUserApiKeyString: string; + + const unrelatedUserEmail = `slots-2024-09-04-unrelated-user-${randomString()}@example.com`; + let unrelatedUser: User; + let unrelatedUserApiKeyString: string; + + const seatedEventTypeSlug = `slots-2024-09-04-seated-event-type-${randomString()}`; + let seatedEventType: EventType; + + let reservedSlot: ReserveSlotOutputData_2024_09_04; + + beforeAll(async () => { + const moduleRef = await Test.createTestingModule({ + imports: [ + AppModule, + PrismaModule, + UsersModule, + TokensModule, + SchedulesModule_2024_06_11, + SlotsModule_2024_09_04, + ], + }) + .overrideGuard(PermissionsGuard) + .useValue({ + canActivate: () => true, + }) + .compile(); + + userRepositoryFixture = new UserRepositoryFixture(moduleRef); + schedulesService = moduleRef.get(SchedulesService_2024_06_11); + eventTypesRepositoryFixture = new EventTypesRepositoryFixture(moduleRef); + selectedSlotsRepositoryFixture = new SelectedSlotsRepositoryFixture(moduleRef); + bookingsRepositoryFixture = new BookingsRepositoryFixture(moduleRef); + bookingSeatsRepositoryFixture = new BookingSeatRepositoryFixture(moduleRef); + attendeesRepositoryFixture = new AttendeeRepositoryFixture(moduleRef); + apiKeysRepositoryFixture = new ApiKeysRepositoryFixture(moduleRef); + membershipsRepositoryFixture = new MembershipRepositoryFixture(moduleRef); + teamRepositoryFixture = new TeamRepositoryFixture(moduleRef); + + user = await userRepositoryFixture.create({ + email: userEmail, + name: userEmail, + username: userEmail, + }); + + unrelatedUser = await userRepositoryFixture.create({ + email: unrelatedUserEmail, + name: unrelatedUserEmail, + username: unrelatedUserEmail, + }); + + teammateUser = await userRepositoryFixture.create({ + email: teammateUserEmail, + name: teammateUserEmail, + username: teammateUserEmail, + }); + + const { keyString } = await apiKeysRepositoryFixture.createApiKey(user.id, null); + apiKeyString = keyString; + + const { keyString: unrelatedUserKeyString } = await apiKeysRepositoryFixture.createApiKey( + unrelatedUser.id, + null + ); + unrelatedUserApiKeyString = unrelatedUserKeyString; + + const { keyString: teammateUserKeyString } = await apiKeysRepositoryFixture.createApiKey( + teammateUser.id, + null + ); + teammateUserApiKeyString = teammateUserKeyString; + + const userSchedule: CreateScheduleInput_2024_06_11 = { + name: `slots-2024-09-04-schedule-${randomString()}`, + timeZone: "Europe/Rome", + isDefault: true, + }; + // note(Lauris): this creates default schedule monday to friday from 9AM to 5PM in Europe/Rome timezone + await schedulesService.createUserSchedule(user.id, userSchedule); + + const event = await eventTypesRepositoryFixture.create( + { title: "frisbee match", slug: `slots-2024-09-04-event-type-${randomString()}`, length: 60 }, + user.id + ); + eventTypeId = event.id; + eventTypeSlug = event.slug; + eventTypeLength = event.length; + + const seatedEvent = await eventTypesRepositoryFixture.create( + { + title: "peer coding", + slug: seatedEventTypeSlug, + length: 60, + seatsPerTimeSlot: 5, + seatsShowAttendees: true, + seatsShowAvailabilityCount: true, + locations: [{ type: "inPerson", address: "via 10, rome, italy" }], + }, + user.id + ); + seatedEventType = seatedEvent; + + team = await teamRepositoryFixture.create({ + name: `slots-2024-09-04-team-${randomString()}`, + isOrganization: false, + }); + + await membershipsRepositoryFixture.create({ + role: "MEMBER", + user: { connect: { id: user.id } }, + team: { connect: { id: team.id } }, + accepted: true, + }); + + await membershipsRepositoryFixture.create({ + role: "MEMBER", + user: { connect: { id: teammateUser.id } }, + team: { connect: { id: team.id } }, + accepted: true, + }); + + app = moduleRef.createNestApplication(); + bootstrap(app as NestExpressApplication); + + await app.init(); + }); + + it("should get slots in UTC by event type id", async () => { + return request(app.getHttpServer()) + .get(`/v2/slots?eventTypeId=${eventTypeId}&start=2050-09-05&end=2050-09-09`) + .set(CAL_API_VERSION_HEADER, VERSION_2024_09_04) + .expect(200) + .then(async (response) => { + const responseBody: GetSlotsOutput_2024_09_04 = response.body; + expect(responseBody.status).toEqual(SUCCESS_STATUS); + const slots = responseBody.data; + + expect(slots).toBeDefined(); + const days = Object.keys(slots); + expect(days.length).toEqual(5); + expect(slots).toEqual(expectedSlotsUTC); + }); + }); + + it("should get slots in specified time zone by event type id", async () => { + return request(app.getHttpServer()) + .get(`/v2/slots?eventTypeId=${eventTypeId}&start=2050-09-05&end=2050-09-09&timeZone=Europe/Rome`) + .set(CAL_API_VERSION_HEADER, VERSION_2024_09_04) + .expect(200) + .then(async (response) => { + const responseBody: GetSlotsOutput_2024_09_04 = response.body; + expect(responseBody.status).toEqual(SUCCESS_STATUS); + const slots = responseBody.data; + + expect(slots).toBeDefined(); + const days = Object.keys(slots); + expect(days.length).toEqual(5); + expect(slots).toEqual(expectedSlotsRome); + }); + }); + + it("should get slots in UTC by event type slug", async () => { + return request(app.getHttpServer()) + .get( + `/v2/slots?eventTypeSlug=${eventTypeSlug}&username=${user.username}&start=2050-09-05&end=2050-09-09` + ) + .set(CAL_API_VERSION_HEADER, VERSION_2024_09_04) + .expect(200) + .then(async (response) => { + const responseBody: GetSlotsOutput_2024_09_04 = response.body; + expect(responseBody.status).toEqual(SUCCESS_STATUS); + const slots = responseBody.data; + + expect(slots).toBeDefined(); + const days = Object.keys(slots); + expect(days.length).toEqual(5); + expect(slots).toEqual(expectedSlotsUTC); + }); + }); + + it("should get slots in specified time zone by event type slug", async () => { + return request(app.getHttpServer()) + .get( + `/v2/slots?eventTypeSlug=${eventTypeSlug}&username=${user.username}&start=2050-09-05&end=2050-09-09&timeZone=Europe/Rome` + ) + .set(CAL_API_VERSION_HEADER, VERSION_2024_09_04) + .expect(200) + .then(async (response) => { + const responseBody: GetSlotsOutput_2024_09_04 = response.body; + expect(responseBody.status).toEqual(SUCCESS_STATUS); + const slots = responseBody.data; + + expect(slots).toBeDefined(); + const days = Object.keys(slots); + expect(days.length).toEqual(5); + + expect(slots).toEqual(expectedSlotsRome); + }); + }); + + it("should get slots by event type id and with start hours specified", async () => { + return request(app.getHttpServer()) + .get(`/v2/slots?eventTypeId=${eventTypeId}&start=2050-09-05T09:00:00.000Z&end=2050-09-09`) + .set(CAL_API_VERSION_HEADER, VERSION_2024_09_04) + .expect(200) + .then(async (response) => { + const responseBody: GetSlotsOutput_2024_09_04 = response.body; + expect(responseBody.status).toEqual(SUCCESS_STATUS); + const slots = responseBody.data; + + expect(slots).toBeDefined(); + const days = Object.keys(slots); + expect(days.length).toEqual(5); + + const expectedSlotsUTC2050_09_05 = expectedSlotsUTC["2050-09-05"].slice(2); + expect(slots).toEqual({ ...expectedSlotsUTC, "2050-09-05": expectedSlotsUTC2050_09_05 }); + }); + }); + + it("should get slots by event type id and with end hours specified", async () => { + return request(app.getHttpServer()) + .get(`/v2/slots?eventTypeId=${eventTypeId}&start=2050-09-05&end=2050-09-09T12:00:00.000Z`) + .set(CAL_API_VERSION_HEADER, VERSION_2024_09_04) + .expect(200) + .then(async (response) => { + const responseBody: GetSlotsOutput_2024_09_04 = response.body; + expect(responseBody.status).toEqual(SUCCESS_STATUS); + const slots = responseBody.data; + + expect(slots).toBeDefined(); + const days = Object.keys(slots); + expect(days.length).toEqual(5); + + const expectedSlotsUTC2050_09_09 = expectedSlotsUTC["2050-09-09"].slice(0, 5); + expect(slots).toEqual({ ...expectedSlotsUTC, "2050-09-09": expectedSlotsUTC2050_09_09 }); + }); + }); + + it("should get slots in specified time zone by event type id and with start hours specified", async () => { + return request(app.getHttpServer()) + .get( + `/v2/slots?eventTypeId=${eventTypeId}&start=2050-09-05T09:00:00.000Z&end=2050-09-09&timeZone=Europe/Rome` + ) + .set(CAL_API_VERSION_HEADER, VERSION_2024_09_04) + .expect(200) + .then(async (response) => { + const responseBody: GetSlotsOutput_2024_09_04 = response.body; + expect(responseBody.status).toEqual(SUCCESS_STATUS); + const slots = responseBody.data; + + expect(slots).toBeDefined(); + const days = Object.keys(slots); + expect(days.length).toEqual(5); + + const expectedSlotsRome2050_09_05 = expectedSlotsRome["2050-09-05"].slice(2); + expect(slots).toEqual({ ...expectedSlotsRome, "2050-09-05": expectedSlotsRome2050_09_05 }); + }); + }); + + it("should get slots in specified time zone by event type id and with end hours specified", async () => { + return request(app.getHttpServer()) + .get( + `/v2/slots?eventTypeId=${eventTypeId}&start=2050-09-05&end=2050-09-09T12:00:00.000Z&timeZone=Europe/Rome` + ) + .set(CAL_API_VERSION_HEADER, VERSION_2024_09_04) + .expect(200) + .then(async (response) => { + const responseBody: GetSlotsOutput_2024_09_04 = response.body; + expect(responseBody.status).toEqual(SUCCESS_STATUS); + const slots = responseBody.data; + + expect(slots).toBeDefined(); + const days = Object.keys(slots); + expect(days.length).toEqual(5); + + const expectedSlotsRome2050_09_09 = expectedSlotsRome["2050-09-09"].slice(0, 5); + expect(slots).toEqual({ ...expectedSlotsRome, "2050-09-09": expectedSlotsRome2050_09_09 }); + }); + }); + + it("should get slots in UTC by event type id in range format", async () => { + return request(app.getHttpServer()) + .get(`/v2/slots?eventTypeId=${eventTypeId}&start=2050-09-05&end=2050-09-10&format=range`) + .set(CAL_API_VERSION_HEADER, VERSION_2024_09_04) + .expect(200) + .expect((res) => { + expect(res.body).toEqual({ + status: SUCCESS_STATUS, + data: expectedSlotsUTCRange, + }); + }); + }); + + it("should get slots in specified time zone by event type id in range format", async () => { + return request(app.getHttpServer()) + .get( + `/v2/slots?eventTypeId=${eventTypeId}&start=2050-09-05&end=2050-09-10&timeZone=Europe/Rome&format=range` + ) + .set(CAL_API_VERSION_HEADER, VERSION_2024_09_04) + .expect(200) + .expect((res) => { + expect(res.body).toEqual({ + status: SUCCESS_STATUS, + data: expectedSlotsRomeRange, + }); + }); + }); + + it("should get slots in UTC by event type slug in range format", async () => { + return request(app.getHttpServer()) + .get( + `/v2/slots?eventTypeSlug=${eventTypeSlug}&username=${user.username}&start=2050-09-05&end=2050-09-09&format=range` + ) + .set(CAL_API_VERSION_HEADER, VERSION_2024_09_04) + .expect(200) + .then(async (response) => { + const responseBody: GetSlotsOutput_2024_09_04 = response.body; + expect(responseBody.status).toEqual(SUCCESS_STATUS); + const slots = responseBody.data; + + expect(slots).toBeDefined(); + const days = Object.keys(slots); + expect(days.length).toEqual(5); + expect(slots).toEqual(expectedSlotsUTCRange); + }); + }); + + it("should get slots in specified time zone by event type slug in range format", async () => { + return request(app.getHttpServer()) + .get( + `/v2/slots?eventTypeSlug=${eventTypeSlug}&username=${user.username}&start=2050-09-05&end=2050-09-09&timeZone=Europe/Rome&format=range` + ) + .set(CAL_API_VERSION_HEADER, VERSION_2024_09_04) + .expect(200) + .then(async (response) => { + const responseBody: GetSlotsOutput_2024_09_04 = response.body; + expect(responseBody.status).toEqual(SUCCESS_STATUS); + const slots = responseBody.data; + + expect(slots).toBeDefined(); + const days = Object.keys(slots); + expect(days.length).toEqual(5); + expect(slots).toEqual(expectedSlotsRomeRange); + }); + }); + + it("should reserve a slot and it should not appear in available slots", async () => { + // note(Lauris): mock current date to test slots release time + const now = "2049-09-05T12:00:00.000Z"; + const newDate = DateTime.fromISO(now, { zone: "UTC" }).toJSDate(); + advanceTo(newDate); + + const slotStartTime = "2050-09-05T10:00:00.000Z"; + const reserveResponse = await request(app.getHttpServer()) + .post(`/v2/slots/reservations`) + .send({ + eventTypeId, + slotStart: slotStartTime, + }) + .set(CAL_API_VERSION_HEADER, VERSION_2024_09_04) + .expect(201); + + const reserveResponseBody: ReserveSlotOutputResponse_2024_09_04 = reserveResponse.body; + expect(reserveResponseBody.status).toEqual(SUCCESS_STATUS); + const responseReservedSlot: ReserveSlotOutputData_2024_09_04 = reserveResponseBody.data; + expect(responseReservedSlot.reservationUid).toBeDefined(); + expect(responseReservedSlot.eventTypeId).toEqual(eventTypeId); + expect(responseReservedSlot.slotStart).toEqual(slotStartTime); + expect(responseReservedSlot.slotDuration).toEqual(eventTypeLength); + expect(responseReservedSlot.slotEnd).toEqual( + DateTime.fromISO(slotStartTime, { zone: "UTC" }).plus({ minutes: eventTypeLength }).toISO() + ); + expect(responseReservedSlot.reservationDuration).toEqual(5); + + if (!responseReservedSlot.reservationUid) { + throw new Error("Reserved slot uid is undefined"); + } + + reservedSlot = responseReservedSlot; + + const response = await request(app.getHttpServer()) + .get(`/v2/slots?eventTypeId=${eventTypeId}&start=2050-09-05&end=2050-09-09`) + .set(CAL_API_VERSION_HEADER, VERSION_2024_09_04) + .expect(200); + + const responseBody: GetSlotsOutput_2024_09_04 = response.body; + expect(responseBody.status).toEqual(SUCCESS_STATUS); + const slots = responseBody.data; + + expect(slots).toBeDefined(); + const days = Object.keys(slots); + expect(days.length).toEqual(5); + + const expectedSlotsUTC2050_09_05 = expectedSlotsUTC["2050-09-05"].filter( + (slot) => slot.start !== slotStartTime + ); + expect(slots).toEqual({ ...expectedSlotsUTC, "2050-09-05": expectedSlotsUTC2050_09_05 }); + + const dbSlot = await selectedSlotsRepositoryFixture.getByUid(reservedSlot.reservationUid); + expect(dbSlot).toBeDefined(); + if (dbSlot) { + const dbReleaseAt = DateTime.fromJSDate(dbSlot.releaseAt, { zone: "UTC" }).toISO(); + const expectedReleaseAt = DateTime.fromISO(now, { zone: "UTC" }).plus({ minutes: 5 }).toISO(); + expect(dbReleaseAt).toEqual(expectedReleaseAt); + expect(responseReservedSlot.reservationUntil).toEqual(expectedReleaseAt); + } + clear(); + }); + + it("should get reserved slot", async () => { + const reserveResponse = await request(app.getHttpServer()) + .get(`/v2/slots/reservations/${reservedSlot.reservationUid}`) + .set(CAL_API_VERSION_HEADER, VERSION_2024_09_04) + .expect(200); + + const reserveResponseBody: GetReservedSlotOutput_2024_09_04 = reserveResponse.body; + expect(reserveResponseBody.status).toEqual(SUCCESS_STATUS); + const { reservationDuration, ...rest } = reservedSlot; + expect(reserveResponseBody.data).toEqual(rest); + }); + + it("should update a reserved slot and it should not appear in available slots", async () => { + // note(Lauris): mock current date to test slots release time + const now = "2049-09-05T14:00:00.000Z"; + const newDate = DateTime.fromISO(now, { zone: "UTC" }).toJSDate(); + advanceTo(newDate); + + const slotStartTime = "2050-09-05T13:00:00.000Z"; + const reserveResponse = await request(app.getHttpServer()) + .patch(`/v2/slots/reservations/${reservedSlot.reservationUid}`) + .send({ + eventTypeId, + slotStart: slotStartTime, + }) + .set(CAL_API_VERSION_HEADER, VERSION_2024_09_04) + .expect(200); + + const reserveResponseBody: ReserveSlotOutputResponse_2024_09_04 = reserveResponse.body; + expect(reserveResponseBody.status).toEqual(SUCCESS_STATUS); + const responseReservedSlot: ReserveSlotOutputData_2024_09_04 = reserveResponseBody.data; + expect(responseReservedSlot.reservationUid).toBeDefined(); + expect(responseReservedSlot.eventTypeId).toEqual(eventTypeId); + expect(responseReservedSlot.slotStart).toEqual(slotStartTime); + expect(responseReservedSlot.slotDuration).toEqual(eventTypeLength); + expect(responseReservedSlot.slotEnd).toEqual( + DateTime.fromISO(slotStartTime, { zone: "UTC" }).plus({ minutes: eventTypeLength }).toISO() + ); + expect(responseReservedSlot.reservationDuration).toEqual(5); + + if (!responseReservedSlot.reservationUid) { + throw new Error("Reserved slot uid is undefined"); + } + + reservedSlot = responseReservedSlot; + + const response = await request(app.getHttpServer()) + .get(`/v2/slots?eventTypeId=${eventTypeId}&start=2050-09-05&end=2050-09-09`) + .set(CAL_API_VERSION_HEADER, VERSION_2024_09_04) + .expect(200); + + const responseBody: GetSlotsOutput_2024_09_04 = response.body; + expect(responseBody.status).toEqual(SUCCESS_STATUS); + const slots = responseBody.data; + + expect(slots).toBeDefined(); + const days = Object.keys(slots); + expect(days.length).toEqual(5); + + const expectedSlotsUTC2050_09_05 = expectedSlotsUTC["2050-09-05"].filter( + (slot) => slot.start !== slotStartTime + ); + expect(slots).toEqual({ ...expectedSlotsUTC, "2050-09-05": expectedSlotsUTC2050_09_05 }); + + const dbSlot = await selectedSlotsRepositoryFixture.getByUid(reservedSlot.reservationUid); + expect(dbSlot).toBeDefined(); + if (dbSlot) { + const dbReleaseAt = DateTime.fromJSDate(dbSlot.releaseAt, { zone: "UTC" }).toISO(); + const expectedReleaseAt = DateTime.fromISO(now, { zone: "UTC" }).plus({ minutes: 5 }).toISO(); + expect(dbReleaseAt).toEqual(expectedReleaseAt); + expect(responseReservedSlot.reservationUntil).toEqual(expectedReleaseAt); + } + clear(); + }); + + it("should delete reserved slot and it should not appear in available slots", async () => { + await request(app.getHttpServer()) + .delete(`/v2/slots/reservations/${reservedSlot.reservationUid}`) + .set(CAL_API_VERSION_HEADER, VERSION_2024_09_04) + .expect(200); + + const response = await request(app.getHttpServer()) + .get(`/v2/slots?eventTypeId=${eventTypeId}&start=2050-09-05&end=2050-09-09`) + .set(CAL_API_VERSION_HEADER, VERSION_2024_09_04) + .expect(200); + + const responseBody: GetSlotsOutput_2024_09_04 = response.body; + expect(responseBody.status).toEqual(SUCCESS_STATUS); + const slots = responseBody.data; + + expect(slots).toBeDefined(); + const days = Object.keys(slots); + expect(days.length).toEqual(5); + expect(slots).toEqual({ ...expectedSlotsUTC }); + }); + + it("should not be able reserve a slot with custom duration if no auth is provided", async () => { + await request(app.getHttpServer()) + .post(`/v2/slots/reservations`) + .send({ + eventTypeId, + slotStart: "2050-09-05T10:00:00.000Z", + reservationDuration: 10, + }) + .set(CAL_API_VERSION_HEADER, VERSION_2024_09_04) + .expect(401); + }); + + it("should not be able reserve a slot with custom duration if provided auth user is not owner of event type nor shares team membership with owner", async () => { + await request(app.getHttpServer()) + .post(`/v2/slots/reservations`) + .send({ + eventTypeId, + slotStart: "2050-09-05T10:00:00.000Z", + reservationDuration: 10, + }) + .set({ Authorization: `Bearer cal_test_${unrelatedUserApiKeyString}` }) + .set(CAL_API_VERSION_HEADER, VERSION_2024_09_04) + .expect(403); + }); + + it("should reserve a slot as event type owner with custom duration and it should not appear in available slots", async () => { + // note(Lauris): mock current date to test slots release time + const now = "2049-09-05T12:00:00.000Z"; + const newDate = DateTime.fromISO(now, { zone: "UTC" }).toJSDate(); + advanceTo(newDate); + + const slotStartTime = "2050-09-05T10:00:00.000Z"; + const reserveResponse = await request(app.getHttpServer()) + .post(`/v2/slots/reservations`) + .set({ Authorization: `Bearer cal_test_${apiKeyString}` }) + .send({ + eventTypeId, + slotStart: slotStartTime, + reservationDuration: 10, + }) + .set(CAL_API_VERSION_HEADER, VERSION_2024_09_04) + .expect(201); + + const reserveResponseBody: ReserveSlotOutputResponse_2024_09_04 = reserveResponse.body; + expect(reserveResponseBody.status).toEqual(SUCCESS_STATUS); + const responseReservedSlot: ReserveSlotOutputData_2024_09_04 = reserveResponseBody.data; + expect(responseReservedSlot.reservationUid).toBeDefined(); + if (!responseReservedSlot.reservationUid) { + throw new Error("Reserved slot uid is undefined"); + } + reservedSlot = responseReservedSlot; + + const response = await request(app.getHttpServer()) + .get(`/v2/slots?eventTypeId=${eventTypeId}&start=2050-09-05&end=2050-09-09`) + .set(CAL_API_VERSION_HEADER, VERSION_2024_09_04) + .expect(200); + + const responseBody: GetSlotsOutput_2024_09_04 = response.body; + expect(responseBody.status).toEqual(SUCCESS_STATUS); + const slots = responseBody.data; + + expect(slots).toBeDefined(); + const days = Object.keys(slots); + expect(days.length).toEqual(5); + + const expectedSlotsUTC2050_09_05 = expectedSlotsUTC["2050-09-05"].filter( + (slot) => slot.start !== slotStartTime + ); + expect(slots).toEqual({ ...expectedSlotsUTC, "2050-09-05": expectedSlotsUTC2050_09_05 }); + + const dbSlot = await selectedSlotsRepositoryFixture.getByUid(reservedSlot.reservationUid); + expect(dbSlot).toBeDefined(); + if (dbSlot) { + const dbReleaseAt = DateTime.fromJSDate(dbSlot.releaseAt, { zone: "UTC" }).toISO(); + const expectedReleaseAt = DateTime.fromISO(now, { zone: "UTC" }).plus({ minutes: 10 }).toISO(); + expect(dbReleaseAt).toEqual(expectedReleaseAt); + } + await selectedSlotsRepositoryFixture.deleteByUId(reservedSlot.reservationUid); + clear(); + }); + + it("should reserve a slot as someone who shares team with event type owner with custom duration and it should not appear in available slots", async () => { + // note(Lauris): mock current date to test slots release time + const now = "2049-09-05T12:00:00.000Z"; + const newDate = DateTime.fromISO(now, { zone: "UTC" }).toJSDate(); + advanceTo(newDate); + + const slotStartTime = "2050-09-05T10:00:00.000Z"; + const reserveResponse = await request(app.getHttpServer()) + .post(`/v2/slots/reservations`) + .set({ Authorization: `Bearer cal_test_${teammateUserApiKeyString}` }) + .send({ + eventTypeId, + slotStart: slotStartTime, + reservationDuration: 10, + }) + .set(CAL_API_VERSION_HEADER, VERSION_2024_09_04) + .expect(201); + + const reserveResponseBody: ReserveSlotOutputResponse_2024_09_04 = reserveResponse.body; + expect(reserveResponseBody.status).toEqual(SUCCESS_STATUS); + const responseReservedSlot: ReserveSlotOutputData_2024_09_04 = reserveResponseBody.data; + expect(responseReservedSlot.reservationUid).toBeDefined(); + if (!responseReservedSlot.reservationUid) { + throw new Error("Reserved slot uid is undefined"); + } + reservedSlot = responseReservedSlot; + + const response = await request(app.getHttpServer()) + .get(`/v2/slots?eventTypeId=${eventTypeId}&start=2050-09-05&end=2050-09-09`) + .set(CAL_API_VERSION_HEADER, VERSION_2024_09_04) + .expect(200); + + const responseBody: GetSlotsOutput_2024_09_04 = response.body; + expect(responseBody.status).toEqual(SUCCESS_STATUS); + const slots = responseBody.data; + + expect(slots).toBeDefined(); + const days = Object.keys(slots); + expect(days.length).toEqual(5); + + const expectedSlotsUTC2050_09_05 = expectedSlotsUTC["2050-09-05"].filter( + (slot) => slot.start !== slotStartTime + ); + expect(slots).toEqual({ ...expectedSlotsUTC, "2050-09-05": expectedSlotsUTC2050_09_05 }); + + const dbSlot = await selectedSlotsRepositoryFixture.getByUid(reservedSlot.reservationUid); + expect(dbSlot).toBeDefined(); + if (dbSlot) { + const dbReleaseAt = DateTime.fromJSDate(dbSlot.releaseAt, { zone: "UTC" }).toISO(); + const expectedReleaseAt = DateTime.fromISO(now, { zone: "UTC" }).plus({ minutes: 10 }).toISO(); + expect(dbReleaseAt).toEqual(expectedReleaseAt); + } + await selectedSlotsRepositoryFixture.deleteByUId(reservedSlot.reservationUid); + clear(); + }); + + it("should do a booking and slot should not be available at that time", async () => { + const startTime = "2050-09-05T11:00:00.000Z"; + const booking = await bookingsRepositoryFixture.create({ + uid: `booking-uid-${eventTypeId}`, + title: "booking title", + startTime, + endTime: "2050-09-05T12:00:00.000Z", + eventType: { + connect: { + id: eventTypeId, + }, + }, + metadata: {}, + responses: { + name: "tester", + email: "tester@example.com", + guests: [], + }, + user: { + connect: { + id: user.id, + }, + }, + }); + + const response = await request(app.getHttpServer()) + .get(`/v2/slots?eventTypeId=${eventTypeId}&start=2050-09-05&end=2050-09-09`) + .set(CAL_API_VERSION_HEADER, VERSION_2024_09_04) + .expect(200); + + const responseBody: GetSlotsOutput_2024_09_04 = response.body; + expect(responseBody.status).toEqual(SUCCESS_STATUS); + const slots = responseBody.data; + + expect(slots).toBeDefined(); + const days = Object.keys(slots); + expect(days.length).toEqual(5); + + const expectedSlotsUTC2050_09_05 = expectedSlotsUTC["2050-09-05"].filter( + (slot) => slot.start !== startTime + ); + expect(slots).toEqual({ ...expectedSlotsUTC, "2050-09-05": expectedSlotsUTC2050_09_05 }); + await bookingsRepositoryFixture.deleteById(booking.id); + }); + + it("should do a booking for seated event and slot should show attendees count and bookingUid", async () => { + const startTime = "2050-09-05T11:00:00.000Z"; + const booking = await bookingsRepositoryFixture.create({ + uid: `booking-uid-${seatedEventType.id}`, + title: "booking title", + startTime, + endTime: "2050-09-05T12:00:00.000Z", + eventType: { + connect: { + id: seatedEventType.id, + }, + }, + metadata: {}, + responses: { + name: "tester", + email: "tester@example.com", + guests: [], + }, + user: { + connect: { + id: user.id, + }, + }, + }); + + const attendee = await attendeesRepositoryFixture.create({ + name: "tester", + email: "tester@example.com", + timeZone: "Europe/London", + booking: { + connect: { + id: booking.id, + }, + }, + }); + + bookingSeatsRepositoryFixture.create({ + referenceUid: "100", + data: {}, + booking: { + connect: { + id: booking.id, + }, + }, + attendee: { + connect: { + id: attendee.id, + }, + }, + }); + + const response = await request(app.getHttpServer()) + .get(`/api/v2/slots?eventTypeId=${seatedEventType.id}&start=2050-09-05&end=2050-09-10`) + .set(CAL_API_VERSION_HEADER, VERSION_2024_09_04) + .expect(200); + + const responseBody: GetSlotsOutput_2024_09_04 = response.body; + expect(responseBody.status).toEqual(SUCCESS_STATUS); + const slots = responseBody.data; + + expect(slots).toBeDefined(); + const days = Object.keys(slots); + expect(days.length).toEqual(5); + + const expectedSlotsUTC = { + "2050-09-05": [ + { start: "2050-09-05T07:00:00.000Z", seatsBooked: 0, seatsRemaining: 5, seatsTotal: 5 }, + { start: "2050-09-05T08:00:00.000Z", seatsBooked: 0, seatsRemaining: 5, seatsTotal: 5 }, + { start: "2050-09-05T09:00:00.000Z", seatsBooked: 0, seatsRemaining: 5, seatsTotal: 5 }, + { start: "2050-09-05T10:00:00.000Z", seatsBooked: 0, seatsRemaining: 5, seatsTotal: 5 }, + // note(Lauris): this is when booking was made + { + start: "2050-09-05T11:00:00.000Z", + seatsBooked: 1, + seatsRemaining: 4, + seatsTotal: 5, + bookingUid: booking.uid, + }, + { start: "2050-09-05T12:00:00.000Z", seatsBooked: 0, seatsRemaining: 5, seatsTotal: 5 }, + { start: "2050-09-05T13:00:00.000Z", seatsBooked: 0, seatsRemaining: 5, seatsTotal: 5 }, + { start: "2050-09-05T14:00:00.000Z", seatsBooked: 0, seatsRemaining: 5, seatsTotal: 5 }, + ], + "2050-09-06": [ + { start: "2050-09-06T07:00:00.000Z", seatsBooked: 0, seatsRemaining: 5, seatsTotal: 5 }, + { start: "2050-09-06T08:00:00.000Z", seatsBooked: 0, seatsRemaining: 5, seatsTotal: 5 }, + { start: "2050-09-06T09:00:00.000Z", seatsBooked: 0, seatsRemaining: 5, seatsTotal: 5 }, + { start: "2050-09-06T10:00:00.000Z", seatsBooked: 0, seatsRemaining: 5, seatsTotal: 5 }, + { start: "2050-09-06T11:00:00.000Z", seatsBooked: 0, seatsRemaining: 5, seatsTotal: 5 }, + { start: "2050-09-06T12:00:00.000Z", seatsBooked: 0, seatsRemaining: 5, seatsTotal: 5 }, + { start: "2050-09-06T13:00:00.000Z", seatsBooked: 0, seatsRemaining: 5, seatsTotal: 5 }, + { start: "2050-09-06T14:00:00.000Z", seatsBooked: 0, seatsRemaining: 5, seatsTotal: 5 }, + ], + "2050-09-07": [ + { start: "2050-09-07T07:00:00.000Z", seatsBooked: 0, seatsRemaining: 5, seatsTotal: 5 }, + { start: "2050-09-07T08:00:00.000Z", seatsBooked: 0, seatsRemaining: 5, seatsTotal: 5 }, + { start: "2050-09-07T09:00:00.000Z", seatsBooked: 0, seatsRemaining: 5, seatsTotal: 5 }, + { start: "2050-09-07T10:00:00.000Z", seatsBooked: 0, seatsRemaining: 5, seatsTotal: 5 }, + { start: "2050-09-07T11:00:00.000Z", seatsBooked: 0, seatsRemaining: 5, seatsTotal: 5 }, + { start: "2050-09-07T12:00:00.000Z", seatsBooked: 0, seatsRemaining: 5, seatsTotal: 5 }, + { start: "2050-09-07T13:00:00.000Z", seatsBooked: 0, seatsRemaining: 5, seatsTotal: 5 }, + { start: "2050-09-07T14:00:00.000Z", seatsBooked: 0, seatsRemaining: 5, seatsTotal: 5 }, + ], + "2050-09-08": [ + { start: "2050-09-08T07:00:00.000Z", seatsBooked: 0, seatsRemaining: 5, seatsTotal: 5 }, + { start: "2050-09-08T08:00:00.000Z", seatsBooked: 0, seatsRemaining: 5, seatsTotal: 5 }, + { start: "2050-09-08T09:00:00.000Z", seatsBooked: 0, seatsRemaining: 5, seatsTotal: 5 }, + { start: "2050-09-08T10:00:00.000Z", seatsBooked: 0, seatsRemaining: 5, seatsTotal: 5 }, + { start: "2050-09-08T11:00:00.000Z", seatsBooked: 0, seatsRemaining: 5, seatsTotal: 5 }, + { start: "2050-09-08T12:00:00.000Z", seatsBooked: 0, seatsRemaining: 5, seatsTotal: 5 }, + { start: "2050-09-08T13:00:00.000Z", seatsBooked: 0, seatsRemaining: 5, seatsTotal: 5 }, + { start: "2050-09-08T14:00:00.000Z", seatsBooked: 0, seatsRemaining: 5, seatsTotal: 5 }, + ], + "2050-09-09": [ + { start: "2050-09-09T07:00:00.000Z", seatsBooked: 0, seatsRemaining: 5, seatsTotal: 5 }, + { start: "2050-09-09T08:00:00.000Z", seatsBooked: 0, seatsRemaining: 5, seatsTotal: 5 }, + { start: "2050-09-09T09:00:00.000Z", seatsBooked: 0, seatsRemaining: 5, seatsTotal: 5 }, + { start: "2050-09-09T10:00:00.000Z", seatsBooked: 0, seatsRemaining: 5, seatsTotal: 5 }, + { start: "2050-09-09T11:00:00.000Z", seatsBooked: 0, seatsRemaining: 5, seatsTotal: 5 }, + { start: "2050-09-09T12:00:00.000Z", seatsBooked: 0, seatsRemaining: 5, seatsTotal: 5 }, + { start: "2050-09-09T13:00:00.000Z", seatsBooked: 0, seatsRemaining: 5, seatsTotal: 5 }, + { start: "2050-09-09T14:00:00.000Z", seatsBooked: 0, seatsRemaining: 5, seatsTotal: 5 }, + ], + }; + + expect(slots).toEqual(expectedSlotsUTC); + + await bookingsRepositoryFixture.deleteById(booking.id); + }); + + it("should do a booking for seated event and slot should show attendees count and bookingUid and return range format", async () => { + const startTime = "2050-09-05T11:00:00.000Z"; + const booking = await bookingsRepositoryFixture.create({ + uid: `booking-uid-${seatedEventType.id}`, + title: "booking title", + startTime, + endTime: "2050-09-05T12:00:00.000Z", + eventType: { + connect: { + id: seatedEventType.id, + }, + }, + metadata: {}, + responses: { + name: "tester", + email: "tester@example.com", + guests: [], + }, + user: { + connect: { + id: user.id, + }, + }, + }); + + const attendee = await attendeesRepositoryFixture.create({ + name: "tester", + email: "tester@example.com", + timeZone: "Europe/London", + booking: { + connect: { + id: booking.id, + }, + }, + }); + + bookingSeatsRepositoryFixture.create({ + referenceUid: "100", + data: {}, + booking: { + connect: { + id: booking.id, + }, + }, + attendee: { + connect: { + id: attendee.id, + }, + }, + }); + + const response = await request(app.getHttpServer()) + .get(`/api/v2/slots?eventTypeId=${seatedEventType.id}&start=2050-09-05&end=2050-09-10&format=range`) + .set(CAL_API_VERSION_HEADER, VERSION_2024_09_04) + .expect(200); + + const responseBody: GetSlotsOutput_2024_09_04 = response.body; + expect(responseBody.status).toEqual(SUCCESS_STATUS); + const slots = responseBody.data; + + expect(slots).toBeDefined(); + const days = Object.keys(slots); + expect(days.length).toEqual(5); + + const expectedSlotsUTC = { + "2050-09-05": [ + { + start: "2050-09-05T07:00:00.000Z", + end: "2050-09-05T08:00:00.000Z", + seatsBooked: 0, + seatsRemaining: 5, + seatsTotal: 5, + }, + { + start: "2050-09-05T08:00:00.000Z", + end: "2050-09-05T09:00:00.000Z", + seatsBooked: 0, + seatsRemaining: 5, + seatsTotal: 5, + }, + { + start: "2050-09-05T09:00:00.000Z", + end: "2050-09-05T10:00:00.000Z", + seatsBooked: 0, + seatsRemaining: 5, + seatsTotal: 5, + }, + { + start: "2050-09-05T10:00:00.000Z", + end: "2050-09-05T11:00:00.000Z", + seatsBooked: 0, + seatsRemaining: 5, + seatsTotal: 5, + }, + // note(Lauris): this is when booking was made + { + start: "2050-09-05T11:00:00.000Z", + end: "2050-09-05T12:00:00.000Z", + seatsBooked: 1, + seatsRemaining: 4, + seatsTotal: 5, + bookingUid: booking.uid, + }, + { + start: "2050-09-05T12:00:00.000Z", + end: "2050-09-05T13:00:00.000Z", + seatsBooked: 0, + seatsRemaining: 5, + seatsTotal: 5, + }, + { + start: "2050-09-05T13:00:00.000Z", + end: "2050-09-05T14:00:00.000Z", + seatsBooked: 0, + seatsRemaining: 5, + seatsTotal: 5, + }, + { + start: "2050-09-05T14:00:00.000Z", + end: "2050-09-05T15:00:00.000Z", + seatsBooked: 0, + seatsRemaining: 5, + seatsTotal: 5, + }, + ], + "2050-09-06": [ + { + start: "2050-09-06T07:00:00.000Z", + end: "2050-09-06T08:00:00.000Z", + seatsBooked: 0, + seatsRemaining: 5, + seatsTotal: 5, + }, + { + start: "2050-09-06T08:00:00.000Z", + end: "2050-09-06T09:00:00.000Z", + seatsBooked: 0, + seatsRemaining: 5, + seatsTotal: 5, + }, + { + start: "2050-09-06T09:00:00.000Z", + end: "2050-09-06T10:00:00.000Z", + seatsBooked: 0, + seatsRemaining: 5, + seatsTotal: 5, + }, + { + start: "2050-09-06T10:00:00.000Z", + end: "2050-09-06T11:00:00.000Z", + seatsBooked: 0, + seatsRemaining: 5, + seatsTotal: 5, + }, + { + start: "2050-09-06T11:00:00.000Z", + end: "2050-09-06T12:00:00.000Z", + seatsBooked: 0, + seatsRemaining: 5, + seatsTotal: 5, + }, + { + start: "2050-09-06T12:00:00.000Z", + end: "2050-09-06T13:00:00.000Z", + seatsBooked: 0, + seatsRemaining: 5, + seatsTotal: 5, + }, + { + start: "2050-09-06T13:00:00.000Z", + end: "2050-09-06T14:00:00.000Z", + seatsBooked: 0, + seatsRemaining: 5, + seatsTotal: 5, + }, + { + start: "2050-09-06T14:00:00.000Z", + end: "2050-09-06T15:00:00.000Z", + seatsBooked: 0, + seatsRemaining: 5, + seatsTotal: 5, + }, + ], + "2050-09-07": [ + { + start: "2050-09-07T07:00:00.000Z", + end: "2050-09-07T08:00:00.000Z", + seatsBooked: 0, + seatsRemaining: 5, + seatsTotal: 5, + }, + { + start: "2050-09-07T08:00:00.000Z", + end: "2050-09-07T09:00:00.000Z", + seatsBooked: 0, + seatsRemaining: 5, + seatsTotal: 5, + }, + { + start: "2050-09-07T09:00:00.000Z", + end: "2050-09-07T10:00:00.000Z", + seatsBooked: 0, + seatsRemaining: 5, + seatsTotal: 5, + }, + { + start: "2050-09-07T10:00:00.000Z", + end: "2050-09-07T11:00:00.000Z", + seatsBooked: 0, + seatsRemaining: 5, + seatsTotal: 5, + }, + { + start: "2050-09-07T11:00:00.000Z", + end: "2050-09-07T12:00:00.000Z", + seatsBooked: 0, + seatsRemaining: 5, + seatsTotal: 5, + }, + { + start: "2050-09-07T12:00:00.000Z", + end: "2050-09-07T13:00:00.000Z", + seatsBooked: 0, + seatsRemaining: 5, + seatsTotal: 5, + }, + { + start: "2050-09-07T13:00:00.000Z", + end: "2050-09-07T14:00:00.000Z", + seatsBooked: 0, + seatsRemaining: 5, + seatsTotal: 5, + }, + { + start: "2050-09-07T14:00:00.000Z", + end: "2050-09-07T15:00:00.000Z", + seatsBooked: 0, + seatsRemaining: 5, + seatsTotal: 5, + }, + ], + "2050-09-08": [ + { + start: "2050-09-08T07:00:00.000Z", + end: "2050-09-08T08:00:00.000Z", + seatsBooked: 0, + seatsRemaining: 5, + seatsTotal: 5, + }, + { + start: "2050-09-08T08:00:00.000Z", + end: "2050-09-08T09:00:00.000Z", + seatsBooked: 0, + seatsRemaining: 5, + seatsTotal: 5, + }, + { + start: "2050-09-08T09:00:00.000Z", + end: "2050-09-08T10:00:00.000Z", + seatsBooked: 0, + seatsRemaining: 5, + seatsTotal: 5, + }, + { + start: "2050-09-08T10:00:00.000Z", + end: "2050-09-08T11:00:00.000Z", + seatsBooked: 0, + seatsRemaining: 5, + seatsTotal: 5, + }, + { + start: "2050-09-08T11:00:00.000Z", + end: "2050-09-08T12:00:00.000Z", + seatsBooked: 0, + seatsRemaining: 5, + seatsTotal: 5, + }, + { + start: "2050-09-08T12:00:00.000Z", + end: "2050-09-08T13:00:00.000Z", + seatsBooked: 0, + seatsRemaining: 5, + seatsTotal: 5, + }, + { + start: "2050-09-08T13:00:00.000Z", + end: "2050-09-08T14:00:00.000Z", + seatsBooked: 0, + seatsRemaining: 5, + seatsTotal: 5, + }, + { + start: "2050-09-08T14:00:00.000Z", + end: "2050-09-08T15:00:00.000Z", + seatsBooked: 0, + seatsRemaining: 5, + seatsTotal: 5, + }, + ], + "2050-09-09": [ + { + start: "2050-09-09T07:00:00.000Z", + end: "2050-09-09T08:00:00.000Z", + seatsBooked: 0, + seatsRemaining: 5, + seatsTotal: 5, + }, + { + start: "2050-09-09T08:00:00.000Z", + end: "2050-09-09T09:00:00.000Z", + seatsBooked: 0, + seatsRemaining: 5, + seatsTotal: 5, + }, + { + start: "2050-09-09T09:00:00.000Z", + end: "2050-09-09T10:00:00.000Z", + seatsBooked: 0, + seatsRemaining: 5, + seatsTotal: 5, + }, + { + start: "2050-09-09T10:00:00.000Z", + end: "2050-09-09T11:00:00.000Z", + seatsBooked: 0, + seatsRemaining: 5, + seatsTotal: 5, + }, + { + start: "2050-09-09T11:00:00.000Z", + end: "2050-09-09T12:00:00.000Z", + seatsBooked: 0, + seatsRemaining: 5, + seatsTotal: 5, + }, + { + start: "2050-09-09T12:00:00.000Z", + end: "2050-09-09T13:00:00.000Z", + seatsBooked: 0, + seatsRemaining: 5, + seatsTotal: 5, + }, + { + start: "2050-09-09T13:00:00.000Z", + end: "2050-09-09T14:00:00.000Z", + seatsBooked: 0, + seatsRemaining: 5, + seatsTotal: 5, + }, + { + start: "2050-09-09T14:00:00.000Z", + end: "2050-09-09T15:00:00.000Z", + seatsBooked: 0, + seatsRemaining: 5, + seatsTotal: 5, + }, + ], + }; + + expect(slots).toEqual(expectedSlotsUTC); + + await bookingsRepositoryFixture.deleteById(booking.id); + }); + + afterAll(async () => { + await userRepositoryFixture.deleteByEmail(user.email); + await userRepositoryFixture.deleteByEmail(unrelatedUser.email); + await selectedSlotsRepositoryFixture.deleteByUId(reservedSlot.reservationUid); + await bookingsRepositoryFixture.deleteAllBookings(user.id, user.email); + await teamRepositoryFixture.delete(team.id); + clear(); + + await app.close(); + }); + }); +}); diff --git a/apps/api/v2/src/modules/slots/slots-2024-09-04/controllers/slots.controller.ts b/apps/api/v2/src/modules/slots/slots-2024-09-04/controllers/slots.controller.ts new file mode 100644 index 0000000000..a9cce091ef --- /dev/null +++ b/apps/api/v2/src/modules/slots/slots-2024-09-04/controllers/slots.controller.ts @@ -0,0 +1,290 @@ +import { VERSION_2024_09_04 } from "@/lib/api-versions"; +import { GetOptionalUser } from "@/modules/auth/decorators/get-optional-user/get-optional-user.decorator"; +import { OptionalApiAuthGuard } from "@/modules/auth/guards/optional-api-auth/optional-api-auth.guard"; +import { GetReservedSlotOutput_2024_09_04 } from "@/modules/slots/slots-2024-09-04/outputs/get-reserved-slot.output"; +import { GetSlotsOutput_2024_09_04 } from "@/modules/slots/slots-2024-09-04/outputs/get-slots.output"; +import { ReserveSlotOutputResponse_2024_09_04 } from "@/modules/slots/slots-2024-09-04/outputs/reserve-slot.output"; +import { SlotsService_2024_09_04 } from "@/modules/slots/slots-2024-09-04/services/slots.service"; +import { + Query, + Body, + Controller, + Get, + Delete, + Post, + Param, + Res, + HttpCode, + HttpStatus, + Patch, + UseGuards, + BadRequestException, +} from "@nestjs/common"; +import { + ApiOperation, + ApiTags as DocsTags, + ApiHeader, + ApiResponse as DocsResponse, + ApiQuery, +} from "@nestjs/swagger"; +import { User } from "@prisma/client"; +import { plainToClass } from "class-transformer"; + +import { SUCCESS_STATUS } from "@calcom/platform-constants"; +import { + GetSlotsInput_2024_09_04, + GetSlotsInputPipe, + ReserveSlotInput_2024_09_04, + ReserveSlotOutput_2024_09_04 as ReserveSlotOutputType_2024_09_04, + GetReservedSlotOutput_2024_09_04 as GetReservedSlotOutputType_2024_09_04, +} from "@calcom/platform-types"; +import { ApiResponse } from "@calcom/platform-types"; + +@Controller({ + path: "/v2/slots", + version: VERSION_2024_09_04, +}) +@DocsTags("Slots") +@ApiHeader({ + name: "cal-api-version", + description: `Must be set to \`2024-09-04\``, + required: true, +}) +export class SlotsController_2024_09_04 { + constructor(private readonly slotsService: SlotsService_2024_09_04) {} + + @Get("/") + @ApiOperation({ + summary: "Find out when is an event type ready to be booked.", + description: ` + There are 4 ways to get available slots: + + 1. By event type id. Event type id can be of user and team event types. Example '/v2/slots?eventTypeId=10&start=2050-09-05&end=2050-09-06&timeZone=Europe/Rome' + + 2. By event type slug + username. Example '/v2/slots?eventTypeSlug=intro&username=bob&start=2050-09-05&end=2050-09-06' + + 3. By event type slug + username + organization slug when searching within an organization. Example '/v2/slots?organizationSlug=org-slug&eventTypeSlug=intro&username=bob&start=2050-09-05&end=2050-09-06' + + 4. By usernames only (used for dynamic event type - there is no specific event but you want to know when 2 or more people are available). Example '/v2/slots?usernames=alice,bob&username=bob&organizationSlug=org-slug&start=2050-09-05&end=2050-09-06'. As you see you also need to provide the slug of the organization to which each user in the 'usernames' array belongs. + + All of them require "start" and "end" query parameters which define the time range for which available slots should be checked. + Optional parameters are: + - timeZone: Time zone in which the available slots should be returned. Defaults to UTC. + - duration: Only use for event types that allow multiple durations or for dynamic event types. If not passed for multiple duration event types defaults to default duration. For dynamic event types defaults to 30 aka each returned slot is 30 minutes long. So duration=60 means that returned slots will be each 60 minutes long. + - slotFormat: Format of the slots. By default return is an object where each key is date and value is array of slots as string. If you want to get start and end of each slot use "range" as value. + `, + }) + @ApiQuery({ + name: "timeZone", + required: false, + description: "Time zone in which the available slots should be returned. Defaults to UTC.", + example: "Europe/Rome", + }) + @ApiQuery({ + name: "duration", + required: false, + description: + "If event type has multiple possible durations then you can specify the desired duration here. Also, if you are fetching slots for a dynamic event then you can specify the duration her which defaults to 30, meaning that returned slots will be each 30 minutes long.", + example: "60", + }) + @ApiQuery({ + name: "slotFormat", + required: false, + description: + "Format of slot times in response. Use 'range' to get start and end times. Use 'time' or omit this query parameter to get only start time.", + example: "range", + }) + @ApiQuery({ + name: "usernames", + required: false, + description: `The usernames for which available slots should be checked separated by a comma. + + Checking slots by usernames is used mainly for dynamic events where there is no specific event but we just want to know when 2 or more people are available. + + Must contain at least 2 usernames.`, + example: "alice,bob", + }) + @ApiQuery({ + name: "eventTypeId", + required: false, + description: "The ID of the event type for which available slots should be checked.", + example: "100", + }) + @ApiQuery({ + name: "eventTypeSlug", + required: false, + description: + "The slug of the event type for which available slots should be checked. If slug is provided then username must be provided too.", + example: "event-type-slug", + }) + @ApiQuery({ + name: "username", + required: false, + description: "The username of the user to get event types for.", + example: "bob", + }) + @ApiQuery({ + name: "end", + required: true, + description: ` + Time until which available slots should be checked. + + Must be in UTC timezone as ISO 8601 datestring. + + You can pass date without hours which defaults to end of day or specify hours: + 2024-08-20 (will have hours 23:59:59 aka at the very end of the date) or you can specify hours manually like 2024-08-20T18:00:00Z.`, + example: "2050-09-06", + }) + @ApiQuery({ + name: "start", + required: true, + description: ` + Time starting from which available slots should be checked. + + Must be in UTC timezone as ISO 8601 datestring. + + You can pass date without hours which defaults to start of day or specify hours: + 2024-08-13 (will have hours 00:00:00 aka at very beginning of the date) or you can specify hours manually like 2024-08-13T09:00:00Z.`, + example: "2050-09-05", + }) + @DocsResponse({ + status: 200, + description: `A map of available slots indexed by date, where each date is associated with an array of time slots. If format=range is specified, each slot will be an object with start and end properties denoting start and end of the slot. + For seated slots each object will have attendeesCount and bookingUid properties.`, + schema: { + oneOf: [ + { + type: "object", + title: "Default format (or with format=time)", + additionalProperties: { + type: "array", + items: { type: "string" }, + }, + example: { + status: "success", + data: { + "2050-09-05": [ + { start: "2050-09-05T09:00:00.000+02:00" }, + { start: "2050-09-05T10:00:00.000+02:00" }, + ], + "2050-09-06": [ + { start: "2050-09-06T09:00:00.000+02:00" }, + { start: "2050-09-06T10:00:00.000+02:00" }, + ], + }, + }, + }, + { + type: "object", + title: "Range format (when format=range)", + additionalProperties: { + type: "array", + items: { + type: "object", + properties: { + start: { type: "string" }, + end: { type: "string" }, + }, + }, + }, + example: { + status: "success", + data: { + "2050-09-05": [ + { start: "2050-09-05T09:00:00.000+02:00", end: "2050-09-05T10:00:00.000+02:00" }, + { start: "2050-09-05T10:00:00.000+02:00", end: "2050-09-05T11:00:00.000+02:00" }, + ], + "2050-09-06": [ + { start: "2050-09-06T09:00:00.000+02:00", end: "2050-09-06T10:00:00.000+02:00" }, + { start: "2050-09-06T10:00:00.000+02:00", end: "2050-09-06T11:00:00.000+02:00" }, + ], + }, + }, + }, + ], + }, + }) + async getAvailableSlots( + @Query(new GetSlotsInputPipe()) query: GetSlotsInput_2024_09_04 + ): Promise { + const slots = await this.slotsService.getAvailableSlots(query); + + return { + data: slots, + status: SUCCESS_STATUS, + }; + } + + @Post("/reservations") + @UseGuards(OptionalApiAuthGuard) + @ApiOperation({ + summary: "Reserve a slot", + description: "Make a slot not available for others to book for a certain period of time.", + }) + async reserveSlot( + @Body() body: ReserveSlotInput_2024_09_04, + @GetOptionalUser() user: User + ): Promise { + const reservedSlot = await this.slotsService.reserveSlot(body, user?.id); + + return { + status: SUCCESS_STATUS, + data: plainToClass(ReserveSlotOutputType_2024_09_04, reservedSlot, { + strategy: "excludeAll", + }), + }; + } + + @Get("/reservations/:uid") + @ApiOperation({ + summary: "Get reserved slot", + }) + async getReservedSlot(@Param("uid") uid: string): Promise { + const reservedSlot = await this.slotsService.getReservedSlot(uid); + + return { + status: SUCCESS_STATUS, + data: plainToClass(GetReservedSlotOutputType_2024_09_04, reservedSlot, { + strategy: "excludeAll", + }), + }; + } + + @Patch("/reservations/:uid") + @ApiOperation({ + summary: "Updated reserved a slot", + }) + @HttpCode(HttpStatus.OK) + async updateReservedSlot( + @Body() body: ReserveSlotInput_2024_09_04, + @Param("uid") uid: string + ): Promise { + const reservedSlot = await this.slotsService.updateReservedSlot(body, uid); + + return { + status: SUCCESS_STATUS, + data: plainToClass(ReserveSlotOutputType_2024_09_04, reservedSlot, { + strategy: "excludeAll", + }), + }; + } + + @Delete("/reservations/:uid") + @HttpCode(HttpStatus.OK) + @DocsResponse({ + status: 200, + schema: { + type: "object", + example: { + status: "success", + }, + }, + }) + async deleteReservedSlot(@Param("uid") uid: string): Promise { + await this.slotsService.deleteReservedSlot(uid); + + return { + status: SUCCESS_STATUS, + }; + } +} diff --git a/apps/api/v2/src/modules/slots/slots-2024-09-04/outputs/get-reserved-slot.output.ts b/apps/api/v2/src/modules/slots/slots-2024-09-04/outputs/get-reserved-slot.output.ts new file mode 100644 index 0000000000..7f48247ca9 --- /dev/null +++ b/apps/api/v2/src/modules/slots/slots-2024-09-04/outputs/get-reserved-slot.output.ts @@ -0,0 +1,18 @@ +import { ApiProperty } from "@nestjs/swagger"; +import { Type } from "class-transformer"; +import { IsNotEmptyObject, ValidateNested } from "class-validator"; + +import { + ApiResponseWithoutData, + GetReservedSlotOutput_2024_09_04 as GetReservedSlotOutputType_2024_09_04, +} from "@calcom/platform-types"; + +export class GetReservedSlotOutput_2024_09_04 extends ApiResponseWithoutData { + @ApiProperty({ + type: GetReservedSlotOutputType_2024_09_04, + }) + @IsNotEmptyObject() + @ValidateNested() + @Type(() => GetReservedSlotOutputType_2024_09_04) + data!: GetReservedSlotOutputType_2024_09_04 | null; +} diff --git a/apps/api/v2/src/modules/slots/slots-2024-09-04/outputs/get-slots.output.ts b/apps/api/v2/src/modules/slots/slots-2024-09-04/outputs/get-slots.output.ts new file mode 100644 index 0000000000..40f5ce7413 --- /dev/null +++ b/apps/api/v2/src/modules/slots/slots-2024-09-04/outputs/get-slots.output.ts @@ -0,0 +1,19 @@ +import { ApiExtraModels, ApiProperty, getSchemaPath } from "@nestjs/swagger"; +import { Type } from "class-transformer"; +import { ValidateNested } from "class-validator"; + +import { ApiResponseWithoutData, SlotsOutput_2024_09_04 } from "@calcom/platform-types"; +import { RangeSlotsOutput_2024_09_04 } from "@calcom/platform-types"; + +@ApiExtraModels(SlotsOutput_2024_09_04, RangeSlotsOutput_2024_09_04) +export class GetSlotsOutput_2024_09_04 extends ApiResponseWithoutData { + @ValidateNested() + @ApiProperty({ + oneOf: [ + { $ref: getSchemaPath(SlotsOutput_2024_09_04) }, + { $ref: getSchemaPath(RangeSlotsOutput_2024_09_04) }, + ], + }) + @Type(() => Object) + data!: SlotsOutput_2024_09_04 | RangeSlotsOutput_2024_09_04; +} diff --git a/apps/api/v2/src/modules/slots/slots-2024-09-04/outputs/reserve-slot.output.ts b/apps/api/v2/src/modules/slots/slots-2024-09-04/outputs/reserve-slot.output.ts new file mode 100644 index 0000000000..0b2f019bab --- /dev/null +++ b/apps/api/v2/src/modules/slots/slots-2024-09-04/outputs/reserve-slot.output.ts @@ -0,0 +1,18 @@ +import { ApiProperty } from "@nestjs/swagger"; +import { Type } from "class-transformer"; +import { IsNotEmptyObject, ValidateNested } from "class-validator"; + +import { + ApiResponseWithoutData, + ReserveSlotOutput_2024_09_04 as ReserveSlotOutputType_2024_09_04, +} from "@calcom/platform-types"; + +export class ReserveSlotOutputResponse_2024_09_04 extends ApiResponseWithoutData { + @ApiProperty({ + type: ReserveSlotOutputType_2024_09_04, + }) + @IsNotEmptyObject() + @ValidateNested() + @Type(() => ReserveSlotOutputType_2024_09_04) + data!: ReserveSlotOutputType_2024_09_04; +} diff --git a/apps/api/v2/src/modules/slots/slots-2024-09-04/services/slots-input.service.ts b/apps/api/v2/src/modules/slots/slots-2024-09-04/services/slots-input.service.ts new file mode 100644 index 0000000000..bc4999785c --- /dev/null +++ b/apps/api/v2/src/modules/slots/slots-2024-09-04/services/slots-input.service.ts @@ -0,0 +1,93 @@ +import { EventTypesRepository_2024_06_14 } from "@/ee/event-types/event-types_2024_06_14/event-types.repository"; +import { OrganizationsRepository } from "@/modules/organizations/organizations.repository"; +import { OrganizationsUsersRepository } from "@/modules/organizations/repositories/organizations-users.repository"; +import { UsersRepository } from "@/modules/users/users.repository"; +import { Injectable, NotFoundException } from "@nestjs/common"; +import { DateTime } from "luxon"; + +import { dynamicEvent } from "@calcom/platform-libraries"; +import { GetSlotsInput_2024_09_04 } from "@calcom/platform-types"; + +@Injectable() +export class SlotsInputService_2024_09_04 { + constructor( + private readonly eventTypeRepository: EventTypesRepository_2024_06_14, + private readonly usersRepository: UsersRepository, + private readonly organizationsUsersRepository: OrganizationsUsersRepository, + private readonly organizationsRepository: OrganizationsRepository + ) {} + + async transformGetSlotsQuery(query: GetSlotsInput_2024_09_04) { + const eventType = await this.getEventType(query); + if (!eventType) { + throw new NotFoundException(`Event Type not found`); + } + const isTeamEvent = !!eventType?.teamId; + + const startTime = query.start; + const endTime = this.adjustEndTime(query.end); + const duration = query.duration; + const eventTypeId = eventType.id; + const eventTypeSlug = eventType.slug; + const usernameList = "usernames" in query ? query.usernames : []; + const timeZone = query.timeZone; + const orgSlug = "organizationSlug" in query ? query.organizationSlug : null; + + return { + isTeamEvent, + startTime, + endTime, + duration, + eventTypeId, + eventTypeSlug, + usernameList, + timeZone, + orgSlug, + }; + } + + private async getEventType(input: GetSlotsInput_2024_09_04) { + if ("eventTypeId" in input) { + return this.eventTypeRepository.getEventTypeById(input.eventTypeId); + } + + if ("eventTypeSlug" in input) { + const user = await this.getEventTypeUser(input); + if (!user) { + throw new NotFoundException(`User with username ${input.username} not found`); + } + return this.eventTypeRepository.getUserEventTypeBySlug(user.id, input.eventTypeSlug); + } + + return input.duration ? { ...dynamicEvent, length: input.duration } : dynamicEvent; + } + + private async getEventTypeUser(input: GetSlotsInput_2024_09_04) { + if ("eventTypeSlug" in input) { + if ("organizationSlug" in input && input.organizationSlug) { + const organization = await this.organizationsRepository.findOrgBySlug(input.organizationSlug); + if (!organization) { + throw new NotFoundException( + `slots-input.service.ts: Organization with slug ${input.organizationSlug} not found` + ); + } + + return await this.organizationsUsersRepository.getOrganizationUserByUsername( + organization.id, + input.username + ); + } + + return await this.usersRepository.findByUsername(input.username); + } + } + + private adjustEndTime(endTime: string) { + let dateTime = DateTime.fromISO(endTime, { zone: "utc" }); + if (dateTime.hour === 0 && dateTime.minute === 0 && dateTime.second === 0) { + dateTime = dateTime.set({ hour: 23, minute: 59, second: 59 }); + } + + return dateTime.toISO(); + } +} diff --git a/apps/api/v2/src/modules/slots/slots-2024-09-04/services/slots-output.service.ts b/apps/api/v2/src/modules/slots/slots-2024-09-04/services/slots-output.service.ts new file mode 100644 index 0000000000..9c5cc8b57c --- /dev/null +++ b/apps/api/v2/src/modules/slots/slots-2024-09-04/services/slots-output.service.ts @@ -0,0 +1,229 @@ +import { EventTypesRepository_2024_06_14 } from "@/ee/event-types/event-types_2024_06_14/event-types.repository"; +import { Injectable, BadRequestException } from "@nestjs/common"; +import { DateTime } from "luxon"; + +import { SlotFormat } from "@calcom/platform-enums"; +import { + GetReservedSlotOutput_2024_09_04, + RangeSlot_2024_09_04, + RangeSlotsOutput_2024_09_04, + ReserveSlotOutput_2024_09_04, + SeatedRangeSlot_2024_09_04, + SeatedSlot_2024_09_04, + Slot_2024_09_04, + SlotsOutput_2024_09_04, +} from "@calcom/platform-types"; +import { SelectedSlots } from "@calcom/prisma/client"; + +type GetAvailableSlots = { + slots: Record; +}; + +@Injectable() +export class SlotsOutputService_2024_09_04 { + constructor(private readonly eventTypesRepository: EventTypesRepository_2024_06_14) {} + + async getAvailableSlots( + availableSlots: GetAvailableSlots, + eventTypeId: number, + duration?: number, + format?: SlotFormat, + timeZone?: string + ): Promise { + if (!format || format === SlotFormat.Time) { + return this.getAvailableTimeSlots(availableSlots, eventTypeId, timeZone); + } + + return this.getAvailableRangeSlots(availableSlots, eventTypeId, timeZone, duration); + } + + private async getAvailableTimeSlots( + availableSlots: GetAvailableSlots, + eventTypeId: number, + timeZone: string | undefined + ): Promise { + const eventType = await this.eventTypesRepository.getEventTypeById(eventTypeId); + + const slots: { [key: string]: (Slot_2024_09_04 | SeatedSlot_2024_09_04)[] } = {}; + for (const date in availableSlots.slots) { + slots[date] = availableSlots.slots[date].map((slot) => { + if (!timeZone) { + if (!eventType?.seatsPerTimeSlot) { + return this.getAvailableTimeSlot(slot.time); + } + return this.getAvailableTimeSlotSeated( + slot.time, + slot.attendees || 0, + eventType.seatsPerTimeSlot || 0, + slot.bookingUid + ); + } + const slotTimezoneAdjusted = DateTime.fromISO(slot.time, { zone: "utc" }).setZone(timeZone).toISO(); + if (!slotTimezoneAdjusted) { + throw new BadRequestException( + `Could not adjust timezone for slot ${slot.time} with timezone ${timeZone}` + ); + } + if (!eventType?.seatsPerTimeSlot) { + return this.getAvailableTimeSlot(slotTimezoneAdjusted); + } + return this.getAvailableTimeSlotSeated( + slotTimezoneAdjusted, + slot.attendees || 0, + eventType.seatsPerTimeSlot || 0, + slot.bookingUid + ); + }); + } + + return slots; + } + + private getAvailableTimeSlot(start: string): Slot_2024_09_04 | SeatedSlot_2024_09_04 { + return { + start, + }; + } + + private getAvailableTimeSlotSeated( + start: string, + seatsBooked: number, + eventTypeSeatsPerTimeslot: number, + bookingUid: string | undefined + ): Slot_2024_09_04 | SeatedSlot_2024_09_04 { + return { + start, + seatsBooked, + seatsRemaining: eventTypeSeatsPerTimeslot - seatsBooked, + seatsTotal: eventTypeSeatsPerTimeslot, + bookingUid, + }; + } + + private async getAvailableRangeSlots( + availableSlots: GetAvailableSlots, + eventTypeId: number, + timeZone?: string, + duration?: number + ): Promise { + const eventType = await this.eventTypesRepository.getEventTypeById(eventTypeId); + + const slotDuration = duration ?? eventType?.length; + + const slots = Object.entries(availableSlots.slots).reduce< + Record + >((acc, [date, slots]) => { + acc[date] = slots.map((slot) => { + if (timeZone) { + const start = DateTime.fromISO(slot.time, { zone: "utc" }).setZone(timeZone).toISO(); + if (!start) { + throw new BadRequestException( + `Could not adjust timezone for slot ${slot.time} with timezone ${timeZone}` + ); + } + + const end = DateTime.fromISO(slot.time, { zone: "utc" }) + .plus({ minutes: slotDuration }) + .setZone(timeZone) + .toISO(); + + if (!end) { + throw new BadRequestException( + `Could not adjust timezone for slot end time ${slot.time} with timezone ${timeZone}` + ); + } + + if (!eventType?.seatsPerTimeSlot) { + return this.getAvailableRangeSlot(start, end); + } + return this.getAvailableRangeSlotSeated( + start, + end, + slot.attendees || 0, + eventType.seatsPerTimeSlot ?? undefined, + slot.bookingUid + ); + } else { + const start = DateTime.fromISO(slot.time, { zone: "utc" }).toISO(); + const end = DateTime.fromISO(slot.time, { zone: "utc" }).plus({ minutes: slotDuration }).toISO(); + + if (!start || !end) { + throw new BadRequestException(`Could not create UTC time for slot ${slot.time}`); + } + + if (!eventType?.seatsPerTimeSlot) { + return this.getAvailableRangeSlot(start, end); + } + return this.getAvailableRangeSlotSeated( + start, + end, + slot.attendees || 0, + eventType.seatsPerTimeSlot ?? undefined, + slot.bookingUid + ); + } + }); + return acc; + }, {}); + + return slots; + } + + private getAvailableRangeSlot( + start: string, + end: string + ): RangeSlot_2024_09_04 | SeatedRangeSlot_2024_09_04 { + return { + start, + end, + }; + } + + private getAvailableRangeSlotSeated( + start: string, + end: string, + seatsBooked: number, + eventTypeSeatsPerTimeslot: number, + bookingUid: string | undefined + ): RangeSlot_2024_09_04 | SeatedRangeSlot_2024_09_04 { + return { + start, + end, + seatsBooked, + seatsRemaining: eventTypeSeatsPerTimeslot - seatsBooked, + seatsTotal: eventTypeSeatsPerTimeslot, + bookingUid, + }; + } + + getReservationSlot(slot: SelectedSlots): GetReservedSlotOutput_2024_09_04 { + return { + eventTypeId: slot.eventTypeId, + slotStart: DateTime.fromJSDate(slot.slotUtcStartDate, { zone: "utc" }).toISO() || "unknown-slot-start", + slotEnd: DateTime.fromJSDate(slot.slotUtcEndDate, { zone: "utc" }).toISO() || "unknown-slot-end", + slotDuration: DateTime.fromJSDate(slot.slotUtcEndDate, { zone: "utc" }).diff( + DateTime.fromJSDate(slot.slotUtcStartDate, { zone: "utc" }), + "minutes" + ).minutes, + reservationUid: slot.uid, + reservationUntil: + DateTime.fromJSDate(slot.releaseAt, { zone: "utc" }).toISO() || "unknown-reserved-until", + }; + } + + getReservationSlotCreated(slot: SelectedSlots, reservationDuration: number): ReserveSlotOutput_2024_09_04 { + return { + eventTypeId: slot.eventTypeId, + slotStart: DateTime.fromJSDate(slot.slotUtcStartDate, { zone: "utc" }).toISO() || "unknown-slot-start", + slotEnd: DateTime.fromJSDate(slot.slotUtcEndDate, { zone: "utc" }).toISO() || "unknown-slot-end", + slotDuration: DateTime.fromJSDate(slot.slotUtcEndDate, { zone: "utc" }).diff( + DateTime.fromJSDate(slot.slotUtcStartDate, { zone: "utc" }), + "minutes" + ).minutes, + reservationDuration, + reservationUid: slot.uid, + reservationUntil: + DateTime.fromJSDate(slot.releaseAt, { zone: "utc" }).toISO() || "unknown-reserved-until", + }; + } +} diff --git a/apps/api/v2/src/modules/slots/slots-2024-09-04/services/slots.service.ts b/apps/api/v2/src/modules/slots/slots-2024-09-04/services/slots.service.ts new file mode 100644 index 0000000000..b9522ede24 --- /dev/null +++ b/apps/api/v2/src/modules/slots/slots-2024-09-04/services/slots.service.ts @@ -0,0 +1,273 @@ +import { EventTypesRepository_2024_06_14 } from "@/ee/event-types/event-types_2024_06_14/event-types.repository"; +import { MembershipsRepository } from "@/modules/memberships/memberships.repository"; +import { MembershipsService } from "@/modules/memberships/services/memberships.service"; +import { TimeSlots } from "@/modules/slots/slots-2024-04-15/services/slots-output.service"; +import { SlotsInputService_2024_09_04 } from "@/modules/slots/slots-2024-09-04/services/slots-input.service"; +import { SlotsOutputService_2024_09_04 } from "@/modules/slots/slots-2024-09-04/services/slots-output.service"; +import { SlotsRepository_2024_09_04 } from "@/modules/slots/slots-2024-09-04/slots.repository"; +import { TeamsRepository } from "@/modules/teams/teams/teams.repository"; +import { + BadRequestException, + ForbiddenException, + Injectable, + NotFoundException, + UnauthorizedException, + UnprocessableEntityException, +} from "@nestjs/common"; +import { DateTime } from "luxon"; +import { z } from "zod"; + +import { getAvailableSlots } from "@calcom/platform-libraries"; +import { GetSlotsInput_2024_09_04, ReserveSlotInput_2024_09_04 } from "@calcom/platform-types"; +import { EventType } from "@calcom/prisma/client"; + +const eventTypeMetadataSchema = z.object({ + multipleDuration: z.number().array().optional(), +}); + +const DEFAULT_RESERVATION_DURATION = 5; + +@Injectable() +export class SlotsService_2024_09_04 { + constructor( + private readonly eventTypeRepository: EventTypesRepository_2024_06_14, + private readonly slotsRepository: SlotsRepository_2024_09_04, + private readonly slotsOutputService: SlotsOutputService_2024_09_04, + private readonly slotsInputService: SlotsInputService_2024_09_04, + private readonly membershipsService: MembershipsService, + private readonly membershipsRepository: MembershipsRepository, + private readonly teamsRepository: TeamsRepository + ) {} + + async getAvailableSlots(query: GetSlotsInput_2024_09_04) { + const queryTransformed = await this.slotsInputService.transformGetSlotsQuery(query); + + const availableSlots: TimeSlots = await getAvailableSlots({ + input: { + ...queryTransformed, + }, + ctx: {}, + }); + + const formatted = await this.slotsOutputService.getAvailableSlots( + availableSlots, + queryTransformed.eventTypeId, + queryTransformed.duration, + query.format, + queryTransformed.timeZone + ); + + return formatted; + } + + async reserveSlot(input: ReserveSlotInput_2024_09_04, authUserId?: number) { + if (input.reservationDuration && !authUserId) { + throw new UnauthorizedException( + "reservationDuration can only be used for authenticated requests - use access token, api key or OAuth credentials" + ); + } + + const eventType = await this.eventTypeRepository.getEventTypeWithHosts(input.eventTypeId); + if (!eventType) { + throw new NotFoundException(`Event Type with ID=${input.eventTypeId} not found`); + } + + if (input.reservationDuration && authUserId) { + const canSpecifyCustomReservationDuration = await this.canSpecifyCustomReservationDuration( + authUserId, + eventType + ); + if (!canSpecifyCustomReservationDuration) { + throw new ForbiddenException( + "authenticated user is not owner of event type, does not have memberships in common with owner of the event type, nor does belong to event type's team or org." + ); + } + } + + const startDate = DateTime.fromISO(input.slotStart, { zone: "utc" }); + if (!startDate.isValid) { + throw new BadRequestException("Invalid start date"); + } + + const metadata = eventTypeMetadataSchema.parse(eventType); + if ( + input.slotDuration && + metadata.multipleDuration && + !metadata.multipleDuration.includes(input.slotDuration) + ) { + throw new BadRequestException( + `Provided 'slotDuration' is not one of the possible lengths for the event type. The possible lengths for this variable length event type are: ${metadata.multipleDuration.join( + ", " + )}` + ); + } + + const endDate = startDate.plus({ minutes: input.slotDuration ?? eventType.length }); + if (!endDate.isValid) { + throw new BadRequestException("Invalid end date"); + } + + const booking = await this.slotsRepository.getBookingWithAttendeesByEventTypeIdAndStart( + input.eventTypeId, + startDate.toJSDate() + ); + + if (eventType.seatsPerTimeSlot) { + const attendeesCount = booking?.attendees?.length; + if (attendeesCount) { + const seatsLeft = eventType.seatsPerTimeSlot - attendeesCount; + if (seatsLeft < 1) { + throw new UnprocessableEntityException( + `Booking with id=${input.eventTypeId} at ${input.slotStart} has no more seats left.` + ); + } + } + } + + const nonSeatedEventAlreadyBooked = !eventType.seatsPerTimeSlot && booking; + if (nonSeatedEventAlreadyBooked) { + throw new UnprocessableEntityException(`Can't reserve a slot if the event is already booked.`); + } + + const reservationDuration = input.reservationDuration ?? DEFAULT_RESERVATION_DURATION; + + if (eventType.userId) { + const slot = await this.slotsRepository.createSlot( + eventType.userId, + eventType.id, + startDate.toISO(), + endDate.toISO(), + eventType.seatsPerTimeSlot !== null, + reservationDuration + ); + return this.slotsOutputService.getReservationSlotCreated(slot, reservationDuration); + } + + const host = eventType.hosts[0]; + if (!host) { + throw new BadRequestException("Cannot reserve a slot for a team event without any hosts"); + } + + const slot = await this.slotsRepository.createSlot( + host.userId, + eventType.id, + startDate.toISO(), + endDate.toISO(), + eventType.seatsPerTimeSlot !== null, + reservationDuration + ); + + return this.slotsOutputService.getReservationSlotCreated(slot, reservationDuration); + } + + async canSpecifyCustomReservationDuration(authUserId: number, eventType: EventType) { + if (eventType.userId) { + return await this.canSpecifyCustomReservationDurationIndividualEvent(authUserId, eventType.userId); + } + if (eventType.teamId) { + return await this.canSpecifyCustomReservationDurationTeamEvent(authUserId, eventType.teamId); + } + return false; + } + + async canSpecifyCustomReservationDurationIndividualEvent(authUserId: number, eventTypeOwnerId: number) { + if (authUserId === eventTypeOwnerId) return true; + if (await this.membershipsService.haveMembershipsInCommon(authUserId, eventTypeOwnerId)) return true; + return false; + } + + async canSpecifyCustomReservationDurationTeamEvent(authUserId: number, teamId: number) { + const teamMembership = await this.membershipsRepository.findMembershipByTeamId(teamId, authUserId); + const hasAcceptedTeamMembership = !!teamMembership?.accepted; + if (hasAcceptedTeamMembership) return true; + + const team = await this.teamsRepository.getById(teamId); + if (!team?.parentId) { + return false; + } + const orgMembership = await this.membershipsRepository.findMembershipByTeamId(team.parentId, authUserId); + const hasAcceptedOrgMembership = !!orgMembership?.accepted; + return hasAcceptedOrgMembership; + } + + async getReservedSlot(uid: string) { + const slot = await this.slotsRepository.getByUid(uid); + if (!slot) { + return null; + } + return this.slotsOutputService.getReservationSlot(slot); + } + + async updateReservedSlot(input: ReserveSlotInput_2024_09_04, uid: string) { + const dbSlot = await this.slotsRepository.getByUid(uid); + if (!dbSlot) { + throw new NotFoundException(`Slot with uid=${uid} not found`); + } + + const eventType = await this.eventTypeRepository.getEventTypeWithHosts(input.eventTypeId); + if (!eventType) { + throw new NotFoundException(`Event Type with ID=${input.eventTypeId} not found`); + } + + const startDate = DateTime.fromISO(input.slotStart, { zone: "utc" }); + if (!startDate.isValid) { + throw new BadRequestException("Invalid start date"); + } + + const metadata = eventTypeMetadataSchema.parse(eventType); + if ( + input.slotDuration && + metadata.multipleDuration && + !metadata.multipleDuration.includes(input.slotDuration) + ) { + throw new BadRequestException( + `Provided 'slotDuration' is not one of the possible lengths for the event type. The possible lengths for this variable length event type are: ${metadata.multipleDuration.join( + ", " + )}` + ); + } + + const endDate = startDate.plus({ minutes: input.slotDuration ?? eventType.length }); + if (!endDate.isValid) { + throw new BadRequestException("Invalid end date"); + } + + const booking = await this.slotsRepository.getBookingWithAttendeesByEventTypeIdAndStart( + input.eventTypeId, + startDate.toJSDate() + ); + + if (eventType.seatsPerTimeSlot) { + const attendeesCount = booking?.attendees?.length; + if (attendeesCount) { + const seatsLeft = eventType.seatsPerTimeSlot - attendeesCount; + if (seatsLeft < 1) { + throw new UnprocessableEntityException( + `Booking with id=${input.eventTypeId} at ${input.slotStart} has no more seats left.` + ); + } + } + } + + const nonSeatedEventAlreadyBooked = !eventType.seatsPerTimeSlot && booking; + if (nonSeatedEventAlreadyBooked) { + throw new UnprocessableEntityException(`Can't reserve a slot if the event is already booked.`); + } + + const reservationDuration = input.reservationDuration ?? DEFAULT_RESERVATION_DURATION; + + const slot = await this.slotsRepository.updateSlot( + eventType.id, + startDate.toISO(), + endDate.toISO(), + dbSlot.id, + reservationDuration + ); + + return this.slotsOutputService.getReservationSlotCreated(slot, reservationDuration); + } + + async deleteReservedSlot(uid: string) { + return this.slotsRepository.deleteSlot(uid); + } +} diff --git a/apps/api/v2/src/modules/slots/slots-2024-09-04/slots.module.ts b/apps/api/v2/src/modules/slots/slots-2024-09-04/slots.module.ts new file mode 100644 index 0000000000..50e9e09450 --- /dev/null +++ b/apps/api/v2/src/modules/slots/slots-2024-09-04/slots.module.ts @@ -0,0 +1,30 @@ +import { EventTypesModule_2024_06_14 } from "@/ee/event-types/event-types_2024_06_14/event-types.module"; +import { MembershipsModule } from "@/modules/memberships/memberships.module"; +import { OrganizationsRepository } from "@/modules/organizations/organizations.repository"; +import { OrganizationsUsersRepository } from "@/modules/organizations/repositories/organizations-users.repository"; +import { PrismaModule } from "@/modules/prisma/prisma.module"; +import { SlotsController_2024_09_04 } from "@/modules/slots/slots-2024-09-04/controllers/slots.controller"; +import { SlotsInputService_2024_09_04 } from "@/modules/slots/slots-2024-09-04/services/slots-input.service"; +import { SlotsOutputService_2024_09_04 } from "@/modules/slots/slots-2024-09-04/services/slots-output.service"; +import { SlotsService_2024_09_04 } from "@/modules/slots/slots-2024-09-04/services/slots.service"; +import { SlotsRepository_2024_09_04 } from "@/modules/slots/slots-2024-09-04/slots.repository"; +import { StripeModule } from "@/modules/stripe/stripe.module"; +import { TeamsModule } from "@/modules/teams/teams/teams.module"; +import { UsersRepository } from "@/modules/users/users.repository"; +import { Module } from "@nestjs/common"; + +@Module({ + imports: [PrismaModule, EventTypesModule_2024_06_14, StripeModule, TeamsModule, MembershipsModule], + providers: [ + SlotsRepository_2024_09_04, + SlotsService_2024_09_04, + UsersRepository, + SlotsInputService_2024_09_04, + SlotsOutputService_2024_09_04, + OrganizationsUsersRepository, + OrganizationsRepository, + ], + controllers: [SlotsController_2024_09_04], + exports: [SlotsService_2024_09_04], +}) +export class SlotsModule_2024_09_04 {} diff --git a/apps/api/v2/src/modules/slots/slots-2024-09-04/slots.repository.ts b/apps/api/v2/src/modules/slots/slots-2024-09-04/slots.repository.ts new file mode 100644 index 0000000000..b0eecc3dad --- /dev/null +++ b/apps/api/v2/src/modules/slots/slots-2024-09-04/slots.repository.ts @@ -0,0 +1,74 @@ +import { PrismaReadService } from "@/modules/prisma/prisma-read.service"; +import { PrismaWriteService } from "@/modules/prisma/prisma-write.service"; +import { Injectable } from "@nestjs/common"; +import { DateTime } from "luxon"; +import { v4 as uuid } from "uuid"; + +@Injectable() +export class SlotsRepository_2024_09_04 { + constructor(private readonly dbRead: PrismaReadService, private readonly dbWrite: PrismaWriteService) {} + + async getByUid(uid: string) { + return this.dbRead.prisma.selectedSlots.findFirst({ where: { uid } }); + } + + async getBookingWithAttendeesByEventTypeIdAndStart(eventTypeId: number, startTime: Date) { + return this.dbRead.prisma.booking.findFirst({ + where: { eventTypeId, startTime }, + select: { attendees: true }, + }); + } + + async createSlot( + userId: number, + eventTypeId: number, + slotUtcStartDate: string, + slotUtcEndDate: string, + isSeat: boolean, + duration: number + ) { + const uid = uuid(); + const reservationUntil = DateTime.utc().plus({ minutes: duration }).toISO(); + + return this.dbWrite.prisma.selectedSlots.create({ + data: { + uid, + userId, + eventTypeId, + slotUtcStartDate, + slotUtcEndDate, + releaseAt: reservationUntil, + isSeat, + }, + }); + } + + async updateSlot( + eventTypeId: number, + slotUtcStartDate: string, + slotUtcEndDate: string, + id: number, + duration: number + ) { + const reservationUntil = DateTime.utc().plus({ minutes: duration }).toISO(); + + return this.dbWrite.prisma.selectedSlots.update({ + where: { + id, + }, + data: { + slotUtcEndDate, + slotUtcStartDate, + releaseAt: reservationUntil, + eventTypeId, + }, + }); + } + + async deleteSlot(uid: string) { + // note(Lauris): we have deleteMany because for some reason uid is not unique in the prisma schema + return this.dbWrite.prisma.selectedSlots.deleteMany({ + where: { uid: { equals: uid } }, + }); + } +} diff --git a/apps/api/v2/src/modules/slots/slots.module.ts b/apps/api/v2/src/modules/slots/slots.module.ts deleted file mode 100644 index bad7120e81..0000000000 --- a/apps/api/v2/src/modules/slots/slots.module.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { EventTypesModule_2024_04_15 } from "@/ee/event-types/event-types_2024_04_15/event-types.module"; -import { PrismaModule } from "@/modules/prisma/prisma.module"; -import { SlotsController } from "@/modules/slots/controllers/slots.controller"; -import { SlotsOutputService } from "@/modules/slots/services/slots-output.service"; -import { SlotsService } from "@/modules/slots/services/slots.service"; -import { SlotsRepository } from "@/modules/slots/slots.repository"; -import { Module } from "@nestjs/common"; - -@Module({ - imports: [PrismaModule, EventTypesModule_2024_04_15], - providers: [SlotsRepository, SlotsService, SlotsOutputService], - controllers: [SlotsController], - exports: [SlotsService], -}) -export class SlotsModule {} diff --git a/apps/api/v2/swagger/documentation.json b/apps/api/v2/swagger/documentation.json index 8739dfad24..85ec2d01e8 100644 --- a/apps/api/v2/swagger/documentation.json +++ b/apps/api/v2/swagger/documentation.json @@ -5394,43 +5394,219 @@ ] } }, - "/v2/slots/reserve": { + "/v2/slots": { + "get": { + "operationId": "SlotsController_2024_09_04_getAvailableSlots", + "summary": "Find out when is an event type ready to be booked.", + "description": "\n There are 4 ways to get available slots:\n \n 1. By event type id. Event type id can be of user and team event types. Example '/v2/slots?eventTypeId=10&start=2050-09-05&end=2050-09-06&timeZone=Europe/Rome'\n\n 2. By event type slug + username. Example '/v2/slots?eventTypeSlug=intro&username=bob&start=2050-09-05&end=2050-09-06'\n\n 3. By event type slug + username + organization slug when searching within an organization. Example '/v2/slots?organizationSlug=org-slug&eventTypeSlug=intro&username=bob&start=2050-09-05&end=2050-09-06'\n\n 4. By usernames only (used for dynamic event type - there is no specific event but you want to know when 2 or more people are available). Example '/v2/slots?usernames=alice,bob&username=bob&organizationSlug=org-slug&start=2050-09-05&end=2050-09-06'. As you see you also need to provide the slug of the organization to which each user in the 'usernames' array belongs.\n\n All of them require \"start\" and \"end\" query parameters which define the time range for which available slots should be checked.\n Optional parameters are:\n - timeZone: Time zone in which the available slots should be returned. Defaults to UTC.\n - duration: Only use for event types that allow multiple durations or for dynamic event types. If not passed for multiple duration event types defaults to default duration. For dynamic event types defaults to 30 aka each returned slot is 30 minutes long. So duration=60 means that returned slots will be each 60 minutes long.\n - slotFormat: Format of the slots. By default return is an object where each key is date and value is array of slots as string. If you want to get start and end of each slot use \"range\" as value.\n ", + "parameters": [ + { + "name": "cal-api-version", + "in": "header", + "description": "Must be set to `2024-09-04`", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "start", + "required": true, + "in": "query", + "description": "\n Time starting from which available slots should be checked.\n \n Must be in UTC timezone as ISO 8601 datestring.\n \n You can pass date without hours which defaults to start of day or specify hours:\n 2024-08-13 (will have hours 00:00:00 aka at very beginning of the date) or you can specify hours manually like 2024-08-13T09:00:00Z.", + "example": "2050-09-05", + "schema": {} + }, + { + "name": "end", + "required": true, + "in": "query", + "description": "\n Time until which available slots should be checked.\n \n Must be in UTC timezone as ISO 8601 datestring.\n \n You can pass date without hours which defaults to end of day or specify hours:\n 2024-08-20 (will have hours 23:59:59 aka at the very end of the date) or you can specify hours manually like 2024-08-20T18:00:00Z.", + "example": "2050-09-06", + "schema": {} + }, + { + "name": "username", + "required": false, + "in": "query", + "description": "The username of the user to get event types for.", + "example": "bob", + "schema": {} + }, + { + "name": "eventTypeSlug", + "required": false, + "in": "query", + "description": "The slug of the event type for which available slots should be checked. If slug is provided then username must be provided too.", + "example": "event-type-slug", + "schema": {} + }, + { + "name": "eventTypeId", + "required": false, + "in": "query", + "description": "The ID of the event type for which available slots should be checked.", + "example": "100", + "schema": {} + }, + { + "name": "usernames", + "required": false, + "in": "query", + "description": "The usernames for which available slots should be checked separated by a comma.\n \n Checking slots by usernames is used mainly for dynamic events where there is no specific event but we just want to know when 2 or more people are available.\n \n Must contain at least 2 usernames.", + "example": "alice,bob", + "schema": {} + }, + { + "name": "slotFormat", + "required": false, + "in": "query", + "description": "Format of slot times in response. Use 'range' to get start and end times. Use 'time' or omit this query parameter to get only start time.", + "example": "range", + "schema": {} + }, + { + "name": "duration", + "required": false, + "in": "query", + "description": "If event type has multiple possible durations then you can specify the desired duration here. Also, if you are fetching slots for a dynamic event then you can specify the duration her which defaults to 30, meaning that returned slots will be each 30 minutes long.", + "example": "60", + "schema": {} + }, + { + "name": "timeZone", + "required": false, + "in": "query", + "description": "Time zone in which the available slots should be returned. Defaults to UTC.", + "example": "Europe/Rome", + "schema": {} + } + ], + "responses": { + "200": { + "description": "A map of available slots indexed by date, where each date is associated with an array of time slots. If format=range is specified, each slot will be an object with start and end properties denoting start and end of the slot.\n For seated slots each object will have attendeesCount and bookingUid properties.", + "content": { + "application/json": { + "schema": { + "oneOf": [ + { + "type": "object", + "title": "Default format (or with format=time)", + "additionalProperties": { + "type": "array", + "items": { + "type": "string" + } + }, + "example": { + "status": "success", + "data": { + "2050-09-05": [ + { + "start": "2050-09-05T09:00:00.000+02:00" + }, + { + "start": "2050-09-05T10:00:00.000+02:00" + } + ], + "2050-09-06": [ + { + "start": "2050-09-06T09:00:00.000+02:00" + }, + { + "start": "2050-09-06T10:00:00.000+02:00" + } + ] + } + } + }, + { + "type": "object", + "title": "Range format (when format=range)", + "additionalProperties": { + "type": "array", + "items": { + "type": "object", + "properties": { + "start": { + "type": "string" + }, + "end": { + "type": "string" + } + } + } + }, + "example": { + "status": "success", + "data": { + "2050-09-05": [ + { + "start": "2050-09-05T09:00:00.000+02:00", + "end": "2050-09-05T10:00:00.000+02:00" + }, + { + "start": "2050-09-05T10:00:00.000+02:00", + "end": "2050-09-05T11:00:00.000+02:00" + } + ], + "2050-09-06": [ + { + "start": "2050-09-06T09:00:00.000+02:00", + "end": "2050-09-06T10:00:00.000+02:00" + }, + { + "start": "2050-09-06T10:00:00.000+02:00", + "end": "2050-09-06T11:00:00.000+02:00" + } + ] + } + } + } + ] + } + } + } + } + }, + "tags": [ + "Slots" + ] + } + }, + "/v2/slots/reservations": { "post": { - "operationId": "SlotsController_reserveSlot", + "operationId": "SlotsController_2024_09_04_reserveSlot", "summary": "Reserve a slot", - "parameters": [], + "description": "Make a slot not available for others to book for a certain period of time.", + "parameters": [ + { + "name": "cal-api-version", + "in": "header", + "description": "Must be set to `2024-09-04`", + "required": true, + "schema": { + "type": "string" + } + } + ], "requestBody": { "required": true, "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ReserveSlotInput" + "$ref": "#/components/schemas/ReserveSlotInput_2024_09_04" } } } }, "responses": { "201": { - "description": "Successful response returning uid of reserved slot.", + "description": "", "content": { "application/json": { "schema": { - "type": "object", - "properties": { - "status": { - "type": "string", - "example": "success" - }, - "data": { - "type": "object", - "properties": { - "uid": { - "type": "string", - "example": "e2a7bcf9-cc7b-40a0-80d3-657d391775a6" - } - } - } - } + "$ref": "#/components/schemas/ReserveSlotOutputResponse_2024_09_04" } } } @@ -5441,17 +5617,24 @@ ] } }, - "/v2/slots/selected-slot": { - "delete": { - "operationId": "SlotsController_deleteSelectedSlot", - "summary": "Delete a selected slot", + "/v2/slots/reservations/{uid}": { + "get": { + "operationId": "SlotsController_2024_09_04_getReservedSlot", + "summary": "Get reserved slot", "parameters": [ + { + "name": "cal-api-version", + "in": "header", + "description": "Must be set to `2024-09-04`", + "required": true, + "schema": { + "type": "string" + } + }, { "name": "uid", "required": true, - "in": "query", - "description": "Unique identifier for the slot to be removed.", - "example": "e2a7bcf9-cc7b-40a0-80d3-657d391775a6", + "in": "path", "schema": { "type": "string" } @@ -5459,17 +5642,11 @@ ], "responses": { "200": { - "description": "Response deleting reserved slot by uid.", + "description": "", "content": { "application/json": { "schema": { - "type": "object", - "properties": { - "status": { - "type": "string", - "example": "success" - } - } + "$ref": "#/components/schemas/GetReservedSlotOutput_2024_09_04" } } } @@ -5478,126 +5655,71 @@ "tags": [ "Slots" ] - } - }, - "/v2/slots/available": { - "get": { - "operationId": "SlotsController_getAvailableSlots", - "summary": "Get available slots", + }, + "patch": { + "operationId": "SlotsController_2024_09_04_updateReservedSlot", + "summary": "Updated reserved a slot", "parameters": [ { - "name": "startTime", + "name": "cal-api-version", + "in": "header", + "description": "Must be set to `2024-09-04`", "required": true, - "in": "query", - "description": "Start date string starting from which to fetch slots in UTC timezone.", - "example": "2022-06-14T00:00:00.000Z", "schema": { "type": "string" } }, { - "name": "endTime", + "name": "uid", "required": true, - "in": "query", - "description": "End date string until which to fetch slots in UTC timezone.", - "example": "2022-06-14T23:59:59.999Z", + "in": "path", "schema": { "type": "string" } - }, - { - "name": "eventTypeId", - "required": false, - "in": "query", - "description": "Event Type ID for which slots are being fetched.", - "example": 100, - "schema": { - "type": "number" - } - }, - { - "name": "eventTypeSlug", - "required": false, - "in": "query", - "description": "Slug of the event type for which slots are being fetched. If event slug is provided then username must be provided too as query parameter `usernameList[]=username`", - "schema": { - "type": "string" - } - }, - { - "name": "usernameList", - "required": false, - "in": "query", - "description": "Only if eventTypeSlug is provided or for dynamic events - list of usernames for which slots are being fetched.", - "example": "usernameList[]=bob", - "schema": { - "type": "array", - "items": { - "type": "string" + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ReserveSlotInput_2024_09_04" } } - }, - { - "name": "debug", - "required": false, - "in": "query", - "schema": { - "type": "boolean" + } + }, + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ReserveSlotOutputResponse_2024_09_04" + } + } } - }, + } + }, + "tags": [ + "Slots" + ] + }, + "delete": { + "operationId": "SlotsController_2024_09_04_deleteReservedSlot", + "parameters": [ { - "name": "duration", - "required": false, - "in": "query", - "description": "Only for dynamic events - length of returned slots.", - "schema": { - "type": "number" - } - }, - { - "name": "rescheduleUid", - "required": false, - "in": "query", - "schema": { - "nullable": true, - "type": "string" - } - }, - { - "name": "timeZone", - "required": false, - "in": "query", + "name": "cal-api-version", + "in": "header", + "description": "Must be set to `2024-09-04`", + "required": true, "schema": { "type": "string" } }, { - "name": "orgSlug", - "required": false, - "in": "query", - "description": "Organization slug.", - "schema": { - "type": "string" - } - }, - { - "name": "slotFormat", - "required": false, - "in": "query", - "description": "Format of slot times in response. Use 'range' to get start and end times.", - "example": "range", - "schema": { - "enum": [ - "range", - "time" - ], - "type": "string" - } - }, - { - "name": "teamMemberEmail", - "required": false, - "in": "query", + "name": "uid", + "required": true, + "in": "path", "schema": { "type": "string" } @@ -5605,80 +5727,13 @@ ], "responses": { "200": { - "description": "Available time slots retrieved successfully", + "description": "", "content": { "application/json": { "schema": { "type": "object", - "properties": { - "status": { - "type": "string", - "example": "success" - }, - "data": { - "type": "object", - "properties": { - "slots": { - "type": "object", - "additionalProperties": { - "type": "array", - "items": { - "type": "object", - "oneOf": [ - { - "properties": { - "time": { - "type": "string", - "format": "date-time", - "example": "2024-09-25T08:00:00.000Z" - } - } - }, - { - "properties": { - "startTime": { - "type": "string", - "format": "date-time", - "example": "2024-09-25T08:00:00.000Z" - }, - "endTime": { - "type": "string", - "format": "date-time", - "example": "2024-09-25T08:30:00.000Z" - } - } - } - ] - } - } - } - } - } - }, "example": { - "status": "success", - "data": { - "slots": { - "2024-09-25": [ - { - "time": "2024-09-25T08:00:00.000Z" - }, - { - "time": "2024-09-25T08:15:00.000Z" - } - ], - "2024-09-26": [ - { - "startTime": "2024-09-26T08:00:00.000Z", - "endTime": "2024-09-26T08:30:00.000Z" - }, - { - "startTime": "2024-09-26T08:15:00.000Z", - "endTime": "2024-09-26T08:45:00.000Z" - } - ] - } - } + "status": "success" } } } @@ -16663,33 +16718,127 @@ "data" ] }, - "ReserveSlotInput": { + "ReserveSlotInput_2024_09_04": { "type": "object", "properties": { "eventTypeId": { "type": "number", - "description": "Event Type ID for which timeslot is being reserved.", - "example": 100 + "example": 1, + "description": "The ID of the event type for which slot should be reserved." }, - "slotUtcStartDate": { + "slotStart": { "type": "string", - "description": "Start date of the slot in UTC timezone.", - "example": "2022-06-14T00:00:00.000Z" + "example": "2024-09-04T09:00:00Z", + "description": "ISO 8601 datestring in UTC timezone representing available slot." }, - "slotUtcEndDate": { - "type": "string", - "description": "End date of the slot in UTC timezone.", - "example": "2022-06-14T00:30:00.000Z" + "slotDuration": { + "type": "number", + "example": "30", + "description": "By default slot duration is equal to event type length, but if you want to reserve a slot for an event type that has a variable length you can specify it here as a number in minutes. If you don't have this set explicitly that event type can have one of many lengths you can omit this." }, - "bookingUid": { - "type": "string", - "description": "Optional but only for events with seats. Used to retrieve booking of a seated event." + "reservationDuration": { + "type": "number", + "example": 5, + "description": "ONLY for authenticated requests with api key, access token or OAuth credentials (ID + secret).\n \n For how many minutes the slot should be reserved - for this long time noone else can book this event type at `start` time. If not provided, defaults to 5 minutes." } }, "required": [ "eventTypeId", - "slotUtcStartDate", - "slotUtcEndDate" + "slotStart" + ] + }, + "ReserveSlotOutput_2024_09_04": { + "type": "object", + "properties": { + "eventTypeId": { + "type": "number", + "example": 1, + "description": "The ID of the event type for which slot was reserved." + }, + "slotStart": { + "type": "string", + "example": "2024-09-04T09:00:00Z", + "description": "ISO 8601 datestring in UTC timezone representing available slot." + }, + "slotEnd": { + "type": "string", + "example": "2024-09-04T10:00:00Z", + "description": "ISO 8601 datestring in UTC timezone representing slot end." + }, + "slotDuration": { + "type": "number", + "example": "30", + "description": "By default slot duration is equal to event type length, but if you want to reserve a slot for an event type that has a variable length you can specify it here. If you don't have this set explicitly that event type can have one of many lengths you can omit this." + }, + "reservationUid": { + "type": "string", + "example": "e84be5a3-4696-49e3-acc7-b2f3999c3b94", + "description": "The unique identifier of the reservation. Use it to update, get or delete the reservation." + }, + "reservationDuration": { + "type": "number", + "example": 5, + "description": "For how many minutes the slot is reserved - for this long time noone else can book this event type at `start` time." + }, + "reservationUntil": { + "type": "string", + "example": "2023-09-04T10:00:00Z", + "description": "ISO 8601 datestring in UTC timezone representing time until which the slot is reserved." + } + }, + "required": [ + "eventTypeId", + "slotStart", + "slotEnd", + "slotDuration", + "reservationUid", + "reservationDuration", + "reservationUntil" + ] + }, + "ReserveSlotOutputResponse_2024_09_04": { + "type": "object", + "properties": { + "status": { + "type": "string", + "example": "success", + "enum": [ + "success", + "error" + ] + }, + "data": { + "$ref": "#/components/schemas/ReserveSlotOutput_2024_09_04" + } + }, + "required": [ + "status", + "data" + ] + }, + "GetReservedSlotOutput_2024_09_04": { + "type": "object", + "properties": { + "status": { + "type": "string", + "example": "success", + "enum": [ + "success", + "error" + ] + }, + "data": { + "nullable": true, + "allOf": [ + { + "$ref": "#/components/schemas/GetReservedSlotOutput_2024_09_04" + } + ] + } + }, + "required": [ + "status", + "data" ] }, "UserWebhookOutputDto": { diff --git a/apps/api/v2/test/fixtures/repository/bookings.repository.fixture.ts b/apps/api/v2/test/fixtures/repository/bookings.repository.fixture.ts index 9bfbd7abd2..56d2a166db 100644 --- a/apps/api/v2/test/fixtures/repository/bookings.repository.fixture.ts +++ b/apps/api/v2/test/fixtures/repository/bookings.repository.fixture.ts @@ -35,7 +35,7 @@ export class BookingsRepositoryFixture { } async deleteById(bookingId: Booking["id"]) { - return this.prismaWriteClient.booking.delete({ where: { id: bookingId } }); + return this.prismaWriteClient.booking.deleteMany({ where: { id: bookingId } }); } async deleteAllBookings(userId: User["id"], userEmail: User["email"]) { diff --git a/apps/api/v2/test/fixtures/repository/selected-slots.repository.fixture.ts b/apps/api/v2/test/fixtures/repository/selected-slots.repository.fixture.ts index b9b5150eff..e894935d39 100644 --- a/apps/api/v2/test/fixtures/repository/selected-slots.repository.fixture.ts +++ b/apps/api/v2/test/fixtures/repository/selected-slots.repository.fixture.ts @@ -12,6 +12,10 @@ export class SelectedSlotsRepositoryFixture { this.prismaWriteClient = module.get(PrismaWriteService).prisma; } + async getByUid(uid: string) { + return this.prismaReadClient.selectedSlots.findFirst({ where: { uid } }); + } + async deleteByUId(uid: SelectedSlots["uid"]) { return this.prismaWriteClient.selectedSlots.deleteMany({ where: { uid } }); } diff --git a/docs/api-reference/v2/openapi.json b/docs/api-reference/v2/openapi.json index 68b3b5980b..85ec2d01e8 100644 --- a/docs/api-reference/v2/openapi.json +++ b/docs/api-reference/v2/openapi.json @@ -27,7 +27,9 @@ } } }, - "tags": ["Platform / Cal Provider"] + "tags": [ + "Platform / Cal Provider" + ] } }, "/v2/provider/{clientId}/access-token": { @@ -56,93 +58,9 @@ } } }, - "tags": ["Platform / Cal Provider"] - } - }, - "/v2/gcal/oauth/auth-url": { - "get": { - "operationId": "GcalController_redirect", - "summary": "Get auth URL", - "parameters": [ - { - "name": "Authorization", - "required": true, - "in": "header", - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/GcalAuthUrlOutput" - } - } - } - } - }, - "tags": ["Platform / Google Calendar"] - } - }, - "/v2/gcal/oauth/save": { - "get": { - "operationId": "GcalController_save", - "summary": "Connect a calendar", - "parameters": [ - { - "name": "state", - "required": true, - "in": "query", - "schema": { - "type": "string" - } - }, - { - "name": "code", - "required": true, - "in": "query", - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/GcalSaveRedirectOutput" - } - } - } - } - }, - "tags": ["Platform / Google Calendar"] - } - }, - "/v2/gcal/check": { - "get": { - "operationId": "GcalController_check", - "summary": "Check a calendar connection status", - "parameters": [], - "responses": { - "200": { - "description": "", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/GcalCheckOutput" - } - } - } - } - }, - "tags": ["Platform / Google Calendar"] + "tags": [ + "Platform / Cal Provider" + ] } }, "/v2/oauth-clients/{clientId}/users": { @@ -181,7 +99,9 @@ } } }, - "tags": ["Platform / Managed Users"] + "tags": [ + "Platform / Managed Users" + ] }, "post": { "operationId": "OAuthClientUsersController_createUser", @@ -218,7 +138,9 @@ } } }, - "tags": ["Platform / Managed Users"] + "tags": [ + "Platform / Managed Users" + ] } }, "/v2/oauth-clients/{clientId}/users/{userId}": { @@ -255,7 +177,9 @@ } } }, - "tags": ["Platform / Managed Users"] + "tags": [ + "Platform / Managed Users" + ] }, "patch": { "operationId": "OAuthClientUsersController_updateUser", @@ -300,7 +224,9 @@ } } }, - "tags": ["Platform / Managed Users"] + "tags": [ + "Platform / Managed Users" + ] }, "delete": { "operationId": "OAuthClientUsersController_deleteUser", @@ -335,7 +261,9 @@ } } }, - "tags": ["Platform / Managed Users"] + "tags": [ + "Platform / Managed Users" + ] } }, "/v2/oauth-clients/{clientId}/users/{userId}/force-refresh": { @@ -373,7 +301,9 @@ } } }, - "tags": ["Platform / Managed Users"] + "tags": [ + "Platform / Managed Users" + ] } }, "/v2/oauth/{clientId}/refresh": { @@ -422,7 +352,9 @@ } } }, - "tags": ["Platform / Managed Users"] + "tags": [ + "Platform / Managed Users" + ] } }, "/v2/oauth-clients/{clientId}/webhooks": { @@ -461,7 +393,9 @@ } } }, - "tags": ["Platform / Webhooks"] + "tags": [ + "Platform / Webhooks" + ] }, "get": { "operationId": "OAuthClientWebhooksController_getOAuthClientWebhooks", @@ -508,7 +442,9 @@ } } }, - "tags": ["Platform / Webhooks"] + "tags": [ + "Platform / Webhooks" + ] }, "delete": { "operationId": "OAuthClientWebhooksController_deleteAllOAuthClientWebhooks", @@ -535,7 +471,9 @@ } } }, - "tags": ["Platform / Webhooks"] + "tags": [ + "Platform / Webhooks" + ] } }, "/v2/oauth-clients/{clientId}/webhooks/{webhookId}": { @@ -574,7 +512,9 @@ } } }, - "tags": ["Platform / Webhooks"] + "tags": [ + "Platform / Webhooks" + ] }, "get": { "operationId": "OAuthClientWebhooksController_getOAuthClientWebhook", @@ -592,7 +532,9 @@ } } }, - "tags": ["Platform / Webhooks"] + "tags": [ + "Platform / Webhooks" + ] }, "delete": { "operationId": "OAuthClientWebhooksController_deleteOAuthClientWebhook", @@ -610,7 +552,9 @@ } } }, - "tags": ["Platform / Webhooks"] + "tags": [ + "Platform / Webhooks" + ] } }, "/v2/organizations/{orgId}/attributes": { @@ -659,7 +603,9 @@ } } }, - "tags": ["Orgs / Attributes"] + "tags": [ + "Orgs / Attributes" + ] }, "post": { "operationId": "OrganizationsAttributesController_createOrganizationAttribute", @@ -696,7 +642,9 @@ } } }, - "tags": ["Orgs / Attributes"] + "tags": [ + "Orgs / Attributes" + ] } }, "/v2/organizations/{orgId}/attributes/{attributeId}": { @@ -733,7 +681,9 @@ } } }, - "tags": ["Orgs / Attributes"] + "tags": [ + "Orgs / Attributes" + ] }, "patch": { "operationId": "OrganizationsAttributesController_updateOrganizationAttribute", @@ -778,7 +728,9 @@ } } }, - "tags": ["Orgs / Attributes"] + "tags": [ + "Orgs / Attributes" + ] }, "delete": { "operationId": "OrganizationsAttributesController_deleteOrganizationAttribute", @@ -813,7 +765,9 @@ } } }, - "tags": ["Orgs / Attributes"] + "tags": [ + "Orgs / Attributes" + ] } }, "/v2/organizations/{orgId}/attributes/{attributeId}/options": { @@ -860,7 +814,9 @@ } } }, - "tags": ["Orgs / Attributes / Options"] + "tags": [ + "Orgs / Attributes / Options" + ] }, "get": { "operationId": "OrganizationsOptionsAttributesController_getOrganizationAttributeOptions", @@ -895,7 +851,9 @@ } } }, - "tags": ["Orgs / Attributes / Options"] + "tags": [ + "Orgs / Attributes / Options" + ] } }, "/v2/organizations/{orgId}/attributes/{attributeId}/options/{optionId}": { @@ -940,7 +898,9 @@ } } }, - "tags": ["Orgs / Attributes / Options"] + "tags": [ + "Orgs / Attributes / Options" + ] }, "patch": { "operationId": "OrganizationsOptionsAttributesController_updateOrganizationAttributeOption", @@ -993,7 +953,9 @@ } } }, - "tags": ["Orgs / Attributes / Options"] + "tags": [ + "Orgs / Attributes / Options" + ] } }, "/v2/organizations/{orgId}/attributes/options/{userId}": { @@ -1040,7 +1002,9 @@ } } }, - "tags": ["Orgs / Attributes / Options"] + "tags": [ + "Orgs / Attributes / Options" + ] }, "get": { "operationId": "OrganizationsOptionsAttributesController_getOrganizationAttributeOptionsForUser", @@ -1075,7 +1039,9 @@ } } }, - "tags": ["Orgs / Attributes / Options"] + "tags": [ + "Orgs / Attributes / Options" + ] } }, "/v2/organizations/{orgId}/attributes/options/{userId}/{attributeOptionId}": { @@ -1120,7 +1086,9 @@ } } }, - "tags": ["Orgs / Attributes / Options"] + "tags": [ + "Orgs / Attributes / Options" + ] } }, "/v2/organizations/{orgId}/teams/{teamId}/event-types": { @@ -1167,7 +1135,9 @@ } } }, - "tags": ["Orgs / Event Types"] + "tags": [ + "Orgs / Event Types" + ] }, "get": { "operationId": "OrganizationsEventTypesController_getTeamEventTypes", @@ -1212,7 +1182,9 @@ } } }, - "tags": ["Orgs / Event Types"] + "tags": [ + "Orgs / Event Types" + ] } }, "/v2/organizations/{orgId}/teams/{teamId}/event-types/{eventTypeId}": { @@ -1249,7 +1221,9 @@ } } }, - "tags": ["Orgs / Event Types"] + "tags": [ + "Orgs / Event Types" + ] }, "patch": { "operationId": "OrganizationsEventTypesController_updateTeamEventType", @@ -1294,7 +1268,9 @@ } } }, - "tags": ["Orgs / Event Types"] + "tags": [ + "Orgs / Event Types" + ] }, "delete": { "operationId": "OrganizationsEventTypesController_deleteTeamEventType", @@ -1329,7 +1305,9 @@ } } }, - "tags": ["Orgs / Event Types"] + "tags": [ + "Orgs / Event Types" + ] } }, "/v2/organizations/{orgId}/teams/{teamId}/event-types/{eventTypeId}/create-phone-call": { @@ -1376,7 +1354,9 @@ } } }, - "tags": ["Orgs / Event Types"] + "tags": [ + "Orgs / Event Types" + ] } }, "/v2/organizations/{orgId}/teams/event-types": { @@ -1425,7 +1405,9 @@ } } }, - "tags": ["Orgs / Event Types"] + "tags": [ + "Orgs / Event Types" + ] } }, "/v2/organizations/{orgId}/memberships": { @@ -1474,7 +1456,9 @@ } } }, - "tags": ["Orgs / Memberships"] + "tags": [ + "Orgs / Memberships" + ] }, "post": { "operationId": "OrganizationsMembershipsController_createMembership", @@ -1511,7 +1495,9 @@ } } }, - "tags": ["Orgs / Memberships"] + "tags": [ + "Orgs / Memberships" + ] } }, "/v2/organizations/{orgId}/memberships/{membershipId}": { @@ -1548,7 +1534,9 @@ } } }, - "tags": ["Orgs / Memberships"] + "tags": [ + "Orgs / Memberships" + ] }, "delete": { "operationId": "OrganizationsMembershipsController_deleteMembership", @@ -1583,7 +1571,9 @@ } } }, - "tags": ["Orgs / Memberships"] + "tags": [ + "Orgs / Memberships" + ] }, "patch": { "operationId": "OrganizationsMembershipsController_updateMembership", @@ -1628,7 +1618,9 @@ } } }, - "tags": ["Orgs / Memberships"] + "tags": [ + "Orgs / Memberships" + ] } }, "/v2/organizations/{orgId}/schedules": { @@ -1677,7 +1669,9 @@ } } }, - "tags": ["Orgs / Schedules"] + "tags": [ + "Orgs / Schedules" + ] } }, "/v2/organizations/{orgId}/users/{userId}/schedules": { @@ -1716,7 +1710,10 @@ } } }, - "tags": ["Orgs / Schedules", "Orgs / Users / Schedules"] + "tags": [ + "Orgs / Schedules", + "Orgs / Users / Schedules" + ] }, "get": { "operationId": "OrganizationsSchedulesController_getUserSchedules", @@ -1743,7 +1740,10 @@ } } }, - "tags": ["Orgs / Schedules", "Orgs / Users / Schedules"] + "tags": [ + "Orgs / Schedules", + "Orgs / Users / Schedules" + ] } }, "/v2/organizations/{orgId}/users/{userId}/schedules/{scheduleId}": { @@ -1780,7 +1780,10 @@ } } }, - "tags": ["Orgs / Schedules", "Orgs / Users / Schedules"] + "tags": [ + "Orgs / Schedules", + "Orgs / Users / Schedules" + ] }, "patch": { "operationId": "OrganizationsSchedulesController_updateUserSchedule", @@ -1825,7 +1828,10 @@ } } }, - "tags": ["Orgs / Schedules", "Orgs / Users / Schedules"] + "tags": [ + "Orgs / Schedules", + "Orgs / Users / Schedules" + ] }, "delete": { "operationId": "OrganizationsSchedulesController_deleteUserSchedule", @@ -1860,7 +1866,10 @@ } } }, - "tags": ["Orgs / Schedules", "Orgs / Users / Schedules"] + "tags": [ + "Orgs / Schedules", + "Orgs / Users / Schedules" + ] } }, "/v2/organizations/{orgId}/teams": { @@ -1909,7 +1918,10 @@ } } }, - "tags": ["Orgs / Teams", "Teams"] + "tags": [ + "Orgs / Teams", + "Teams" + ] }, "post": { "operationId": "OrganizationsTeamsController_createTeam", @@ -1954,7 +1966,9 @@ } } }, - "tags": ["Orgs / Teams"] + "tags": [ + "Orgs / Teams" + ] } }, "/v2/organizations/{orgId}/teams/me": { @@ -2003,7 +2017,9 @@ } } }, - "tags": ["Orgs / Teams"] + "tags": [ + "Orgs / Teams" + ] } }, "/v2/organizations/{orgId}/teams/{teamId}": { @@ -2023,7 +2039,9 @@ } } }, - "tags": ["Orgs / Teams"] + "tags": [ + "Orgs / Teams" + ] }, "delete": { "operationId": "OrganizationsTeamsController_deleteTeam", @@ -2058,7 +2076,9 @@ } } }, - "tags": ["Orgs / Teams"] + "tags": [ + "Orgs / Teams" + ] }, "patch": { "operationId": "OrganizationsTeamsController_updateTeam", @@ -2103,7 +2123,9 @@ } } }, - "tags": ["Orgs / Teams"] + "tags": [ + "Orgs / Teams" + ] } }, "/v2/organizations/{orgId}/teams/{teamId}/bookings": { @@ -2121,7 +2143,13 @@ "type": "array", "items": { "type": "string", - "enum": ["upcoming", "recurring", "past", "cancelled", "unconfirmed"] + "enum": [ + "upcoming", + "recurring", + "past", + "cancelled", + "unconfirmed" + ] } } }, @@ -2192,7 +2220,10 @@ "description": "Sort results by their start time in ascending or descending order.", "example": "?sortStart=asc OR ?sortStart=desc", "schema": { - "enum": ["asc", "desc"], + "enum": [ + "asc", + "desc" + ], "type": "string" } }, @@ -2203,7 +2234,10 @@ "description": "Sort results by their end time in ascending or descending order.", "example": "?sortEnd=asc OR ?sortEnd=desc", "schema": { - "enum": ["asc", "desc"], + "enum": [ + "asc", + "desc" + ], "type": "string" } }, @@ -2214,7 +2248,10 @@ "description": "Sort results by their creation time (when booking was made) in ascending or descending order.", "example": "?sortCreated=asc OR ?sortCreated=desc", "schema": { - "enum": ["asc", "desc"], + "enum": [ + "asc", + "desc" + ], "type": "string" } }, @@ -2262,7 +2299,9 @@ } } }, - "tags": ["Orgs / Teams / Bookings"] + "tags": [ + "Orgs / Teams / Bookings" + ] } }, "/v2/organizations/{orgId}/teams/{teamId}/memberships": { @@ -2319,7 +2358,9 @@ } } }, - "tags": ["Orgs / Teams / Memberships"] + "tags": [ + "Orgs / Teams / Memberships" + ] }, "post": { "operationId": "OrganizationsTeamsMembershipsController_createOrgTeamMembership", @@ -2364,7 +2405,9 @@ } } }, - "tags": ["Orgs / Teams / Memberships"] + "tags": [ + "Orgs / Teams / Memberships" + ] } }, "/v2/organizations/{orgId}/teams/{teamId}/memberships/{membershipId}": { @@ -2409,7 +2452,9 @@ } } }, - "tags": ["Orgs / Teams / Memberships"] + "tags": [ + "Orgs / Teams / Memberships" + ] }, "delete": { "operationId": "OrganizationsTeamsMembershipsController_deleteOrgTeamMembership", @@ -2452,7 +2497,9 @@ } } }, - "tags": ["Orgs / Teams / Memberships"] + "tags": [ + "Orgs / Teams / Memberships" + ] }, "patch": { "operationId": "OrganizationsTeamsMembershipsController_updateOrgTeamMembership", @@ -2505,7 +2552,9 @@ } } }, - "tags": ["Orgs / Teams / Memberships"] + "tags": [ + "Orgs / Teams / Memberships" + ] } }, "/v2/organizations/{orgId}/teams/{teamId}/users/{userId}/schedules": { @@ -2534,7 +2583,10 @@ } } }, - "tags": ["Orgs / Teams / Schedules", "Orgs / Teams / Users / Schedules"] + "tags": [ + "Orgs / Teams / Schedules", + "Orgs / Teams / Users / Schedules" + ] } }, "/v2/organizations/{orgId}/users": { @@ -2598,7 +2650,9 @@ } } }, - "tags": ["Orgs / Users"] + "tags": [ + "Orgs / Users" + ] }, "post": { "operationId": "OrganizationsUsersController_createOrganizationUser", @@ -2635,7 +2689,9 @@ } } }, - "tags": ["Orgs / Users"] + "tags": [ + "Orgs / Users" + ] } }, "/v2/organizations/{orgId}/users/{userId}": { @@ -2682,7 +2738,9 @@ } } }, - "tags": ["Orgs / Users"] + "tags": [ + "Orgs / Users" + ] }, "delete": { "operationId": "OrganizationsUsersController_deleteOrganizationUser", @@ -2717,7 +2775,9 @@ } } }, - "tags": ["Orgs / Users"] + "tags": [ + "Orgs / Users" + ] } }, "/v2/organizations/{orgId}/users/{userId}/ooo": { @@ -2760,7 +2820,10 @@ "description": "Sort results by their start time in ascending or descending order.", "example": "?sortStart=asc OR ?sortStart=desc", "schema": { - "enum": ["asc", "desc"], + "enum": [ + "asc", + "desc" + ], "type": "string" } }, @@ -2771,7 +2834,10 @@ "description": "Sort results by their end time in ascending or descending order.", "example": "?sortEnd=asc OR ?sortEnd=desc", "schema": { - "enum": ["asc", "desc"], + "enum": [ + "asc", + "desc" + ], "type": "string" } } @@ -2781,7 +2847,9 @@ "description": "" } }, - "tags": ["Orgs / Users / OOO"] + "tags": [ + "Orgs / Users / OOO" + ] }, "post": { "operationId": "OrganizationsUsersOOOController_createOrganizationUserOOO", @@ -2811,7 +2879,9 @@ "description": "" } }, - "tags": ["Orgs / Users / OOO"] + "tags": [ + "Orgs / Users / OOO" + ] } }, "/v2/organizations/{orgId}/users/{userId}/ooo/{oooId}": { @@ -2851,7 +2921,9 @@ "description": "" } }, - "tags": ["Orgs / Users / OOO"] + "tags": [ + "Orgs / Users / OOO" + ] }, "delete": { "operationId": "OrganizationsUsersOOOController_deleteOrganizationUserOOO", @@ -2871,7 +2943,9 @@ "description": "" } }, - "tags": ["Orgs / Users / OOO"] + "tags": [ + "Orgs / Users / OOO" + ] } }, "/v2/organizations/{orgId}/ooo": { @@ -2914,7 +2988,10 @@ "description": "Sort results by their start time in ascending or descending order.", "example": "?sortStart=asc OR ?sortStart=desc", "schema": { - "enum": ["asc", "desc"], + "enum": [ + "asc", + "desc" + ], "type": "string" } }, @@ -2925,7 +3002,10 @@ "description": "Sort results by their end time in ascending or descending order.", "example": "?sortEnd=asc OR ?sortEnd=desc", "schema": { - "enum": ["asc", "desc"], + "enum": [ + "asc", + "desc" + ], "type": "string" } }, @@ -2945,7 +3025,9 @@ "description": "" } }, - "tags": ["Orgs / Users / OOO"] + "tags": [ + "Orgs / Users / OOO" + ] } }, "/v2/organizations/{orgId}/webhooks": { @@ -2994,7 +3076,9 @@ } } }, - "tags": ["Orgs / Webhooks"] + "tags": [ + "Orgs / Webhooks" + ] }, "post": { "operationId": "OrganizationsWebhooksController_createOrganizationWebhook", @@ -3031,7 +3115,9 @@ } } }, - "tags": ["Orgs / Webhooks"] + "tags": [ + "Orgs / Webhooks" + ] } }, "/v2/organizations/{orgId}/webhooks/{webhookId}": { @@ -3060,7 +3146,9 @@ } } }, - "tags": ["Orgs / Webhooks"] + "tags": [ + "Orgs / Webhooks" + ] }, "delete": { "operationId": "OrganizationsWebhooksController_deleteWebhook", @@ -3087,7 +3175,9 @@ } } }, - "tags": ["Orgs / Webhooks"] + "tags": [ + "Orgs / Webhooks" + ] }, "patch": { "operationId": "OrganizationsWebhooksController_updateOrgWebhook", @@ -3124,7 +3214,9 @@ } } }, - "tags": ["Orgs / Webhooks"] + "tags": [ + "Orgs / Webhooks" + ] } }, "/v2/bookings": { @@ -3176,7 +3268,9 @@ } } }, - "tags": ["Bookings"] + "tags": [ + "Bookings" + ] }, "get": { "operationId": "BookingsController_2024_08_13_getBookings", @@ -3201,7 +3295,13 @@ "type": "array", "items": { "type": "string", - "enum": ["upcoming", "recurring", "past", "cancelled", "unconfirmed"] + "enum": [ + "upcoming", + "recurring", + "past", + "cancelled", + "unconfirmed" + ] } } }, @@ -3312,7 +3412,10 @@ "description": "Sort results by their start time in ascending or descending order.", "example": "?sortStart=asc OR ?sortStart=desc", "schema": { - "enum": ["asc", "desc"], + "enum": [ + "asc", + "desc" + ], "type": "string" } }, @@ -3323,7 +3426,10 @@ "description": "Sort results by their end time in ascending or descending order.", "example": "?sortEnd=asc OR ?sortEnd=desc", "schema": { - "enum": ["asc", "desc"], + "enum": [ + "asc", + "desc" + ], "type": "string" } }, @@ -3334,7 +3440,10 @@ "description": "Sort results by their creation time (when booking was made) in ascending or descending order.", "example": "?sortCreated=asc OR ?sortCreated=desc", "schema": { - "enum": ["asc", "desc"], + "enum": [ + "asc", + "desc" + ], "type": "string" } }, @@ -3345,7 +3454,10 @@ "description": "Sort results by their updated time (for example when booking status changes) in ascending or descending order.", "example": "?sortUpdated=asc OR ?sortUpdated=desc", "schema": { - "enum": ["asc", "desc"], + "enum": [ + "asc", + "desc" + ], "type": "string" } }, @@ -3391,7 +3503,9 @@ } } }, - "tags": ["Bookings"] + "tags": [ + "Bookings" + ] } }, "/v2/bookings/{bookingUid}": { @@ -3430,7 +3544,9 @@ } } }, - "tags": ["Bookings"] + "tags": [ + "Bookings" + ] } }, "/v2/bookings/{bookingUid}/reschedule": { @@ -3469,7 +3585,9 @@ } } }, - "tags": ["Bookings"] + "tags": [ + "Bookings" + ] } }, "/v2/bookings/{bookingUid}/cancel": { @@ -3508,7 +3626,9 @@ } } }, - "tags": ["Bookings"] + "tags": [ + "Bookings" + ] } }, "/v2/bookings/{bookingUid}/mark-absent": { @@ -3565,7 +3685,9 @@ } } }, - "tags": ["Bookings"] + "tags": [ + "Bookings" + ] } }, "/v2/bookings/{bookingUid}/reassign": { @@ -3612,7 +3734,9 @@ } } }, - "tags": ["Bookings"] + "tags": [ + "Bookings" + ] } }, "/v2/bookings/{bookingUid}/reassign/{userId}": { @@ -3677,7 +3801,9 @@ } } }, - "tags": ["Bookings"] + "tags": [ + "Bookings" + ] } }, "/v2/bookings/{bookingUid}/confirm": { @@ -3724,7 +3850,9 @@ } } }, - "tags": ["Bookings"] + "tags": [ + "Bookings" + ] } }, "/v2/bookings/{bookingUid}/decline": { @@ -3781,7 +3909,9 @@ } } }, - "tags": ["Bookings"] + "tags": [ + "Bookings" + ] } }, "/v2/calendars/ics-feed/save": { @@ -3811,7 +3941,9 @@ } } }, - "tags": ["Calendars"] + "tags": [ + "Calendars" + ] } }, "/v2/calendars/ics-feed/check": { @@ -3831,7 +3963,9 @@ } } }, - "tags": ["Calendars"] + "tags": [ + "Calendars" + ] } }, "/v2/calendars/busy-times": { @@ -3899,7 +4033,9 @@ } } }, - "tags": ["Calendars"] + "tags": [ + "Calendars" + ] } }, "/v2/calendars": { @@ -3919,7 +4055,9 @@ } } }, - "tags": ["Calendars"] + "tags": [ + "Calendars" + ] } }, "/v2/calendars/{calendar}/connect": { @@ -3956,7 +4094,9 @@ } } }, - "tags": ["Calendars"] + "tags": [ + "Calendars" + ] } }, "/v2/calendars/{calendar}/save": { @@ -3994,7 +4134,9 @@ "description": "" } }, - "tags": ["Calendars"] + "tags": [ + "Calendars" + ] } }, "/v2/calendars/{calendar}/credentials": { @@ -4016,7 +4158,9 @@ "description": "" } }, - "tags": ["Calendars"] + "tags": [ + "Calendars" + ] } }, "/v2/calendars/{calendar}/check": { @@ -4045,7 +4189,9 @@ } } }, - "tags": ["Calendars"] + "tags": [ + "Calendars" + ] } }, "/v2/calendars/{calendar}/disconnect": { @@ -4084,7 +4230,9 @@ } } }, - "tags": ["Calendars"] + "tags": [ + "Calendars" + ] } }, "/v2/conferencing/{app}/connect": { @@ -4113,7 +4261,9 @@ } } }, - "tags": ["Conferencing"] + "tags": [ + "Conferencing" + ] } }, "/v2/conferencing/{app}/oauth/auth-url": { @@ -4166,7 +4316,9 @@ } } }, - "tags": ["Conferencing"] + "tags": [ + "Conferencing" + ] } }, "/v2/conferencing/{app}/oauth/callback": { @@ -4204,7 +4356,9 @@ "description": "" } }, - "tags": ["Conferencing"] + "tags": [ + "Conferencing" + ] } }, "/v2/conferencing": { @@ -4224,7 +4378,9 @@ } } }, - "tags": ["Conferencing"] + "tags": [ + "Conferencing" + ] } }, "/v2/conferencing/{app}/default": { @@ -4253,7 +4409,9 @@ } } }, - "tags": ["Conferencing"] + "tags": [ + "Conferencing" + ] } }, "/v2/conferencing/default": { @@ -4273,7 +4431,9 @@ } } }, - "tags": ["Conferencing"] + "tags": [ + "Conferencing" + ] } }, "/v2/conferencing/{app}/disconnect": { @@ -4302,7 +4462,9 @@ } } }, - "tags": ["Conferencing"] + "tags": [ + "Conferencing" + ] } }, "/v2/destination-calendars": { @@ -4332,7 +4494,9 @@ } } }, - "tags": ["Destination Calendars"] + "tags": [ + "Destination Calendars" + ] } }, "/v2/event-types": { @@ -4381,7 +4545,9 @@ } } }, - "tags": ["Event Types"] + "tags": [ + "Event Types" + ] }, "get": { "operationId": "EventTypesController_2024_06_14_getEventTypes", @@ -4454,7 +4620,9 @@ } } }, - "tags": ["Event Types"] + "tags": [ + "Event Types" + ] } }, "/v2/event-types/{eventTypeId}": { @@ -4501,7 +4669,9 @@ } } }, - "tags": ["Event Types"] + "tags": [ + "Event Types" + ] }, "patch": { "operationId": "EventTypesController_2024_06_14_updateEventType", @@ -4556,7 +4726,9 @@ } } }, - "tags": ["Event Types"] + "tags": [ + "Event Types" + ] }, "delete": { "operationId": "EventTypesController_2024_06_14_deleteEventType", @@ -4601,7 +4773,9 @@ } } }, - "tags": ["Event Types"] + "tags": [ + "Event Types" + ] } }, "/v2/event-types/{eventTypeId}/webhooks": { @@ -4640,7 +4814,9 @@ } } }, - "tags": ["Event Types / Webhooks"] + "tags": [ + "Event Types / Webhooks" + ] }, "get": { "operationId": "EventTypeWebhooksController_getEventTypeWebhooks", @@ -4687,7 +4863,9 @@ } } }, - "tags": ["Event Types / Webhooks"] + "tags": [ + "Event Types / Webhooks" + ] }, "delete": { "operationId": "EventTypeWebhooksController_deleteAllEventTypeWebhooks", @@ -4714,7 +4892,9 @@ } } }, - "tags": ["Event Types / Webhooks"] + "tags": [ + "Event Types / Webhooks" + ] } }, "/v2/event-types/{eventTypeId}/webhooks/{webhookId}": { @@ -4753,7 +4933,9 @@ } } }, - "tags": ["Event Types / Webhooks"] + "tags": [ + "Event Types / Webhooks" + ] }, "get": { "operationId": "EventTypeWebhooksController_getEventTypeWebhook", @@ -4771,7 +4953,9 @@ } } }, - "tags": ["Event Types / Webhooks"] + "tags": [ + "Event Types / Webhooks" + ] }, "delete": { "operationId": "EventTypeWebhooksController_deleteEventTypeWebhook", @@ -4789,7 +4973,9 @@ } } }, - "tags": ["Event Types / Webhooks"] + "tags": [ + "Event Types / Webhooks" + ] } }, "/v2/me": { @@ -4809,7 +4995,9 @@ } } }, - "tags": ["Me"] + "tags": [ + "Me" + ] }, "patch": { "operationId": "MeController_updateMe", @@ -4837,7 +5025,9 @@ } } }, - "tags": ["Me"] + "tags": [ + "Me" + ] } }, "/v2/schedules": { @@ -4887,7 +5077,9 @@ } } }, - "tags": ["Schedules"] + "tags": [ + "Schedules" + ] }, "get": { "operationId": "SchedulesController_2024_06_11_getSchedules", @@ -4925,7 +5117,9 @@ } } }, - "tags": ["Schedules"] + "tags": [ + "Schedules" + ] } }, "/v2/schedules/default": { @@ -4965,7 +5159,9 @@ } } }, - "tags": ["Schedules"] + "tags": [ + "Schedules" + ] } }, "/v2/schedules/{scheduleId}": { @@ -5012,7 +5208,9 @@ } } }, - "tags": ["Schedules"] + "tags": [ + "Schedules" + ] }, "patch": { "operationId": "SchedulesController_2024_06_11_updateSchedule", @@ -5067,7 +5265,9 @@ } } }, - "tags": ["Schedules"] + "tags": [ + "Schedules" + ] }, "delete": { "operationId": "SchedulesController_2024_06_11_deleteSchedule", @@ -5112,7 +5312,9 @@ } } }, - "tags": ["Schedules"] + "tags": [ + "Schedules" + ] } }, "/v2/selected-calendars": { @@ -5142,7 +5344,9 @@ } } }, - "tags": ["Selected Calendars"] + "tags": [ + "Selected Calendars" + ] }, "delete": { "operationId": "SelectedCalendarsController_removeSelectedCalendar", @@ -5185,65 +5389,252 @@ } } }, - "tags": ["Selected Calendars"] + "tags": [ + "Selected Calendars" + ] } }, - "/v2/slots/reserve": { + "/v2/slots": { + "get": { + "operationId": "SlotsController_2024_09_04_getAvailableSlots", + "summary": "Find out when is an event type ready to be booked.", + "description": "\n There are 4 ways to get available slots:\n \n 1. By event type id. Event type id can be of user and team event types. Example '/v2/slots?eventTypeId=10&start=2050-09-05&end=2050-09-06&timeZone=Europe/Rome'\n\n 2. By event type slug + username. Example '/v2/slots?eventTypeSlug=intro&username=bob&start=2050-09-05&end=2050-09-06'\n\n 3. By event type slug + username + organization slug when searching within an organization. Example '/v2/slots?organizationSlug=org-slug&eventTypeSlug=intro&username=bob&start=2050-09-05&end=2050-09-06'\n\n 4. By usernames only (used for dynamic event type - there is no specific event but you want to know when 2 or more people are available). Example '/v2/slots?usernames=alice,bob&username=bob&organizationSlug=org-slug&start=2050-09-05&end=2050-09-06'. As you see you also need to provide the slug of the organization to which each user in the 'usernames' array belongs.\n\n All of them require \"start\" and \"end\" query parameters which define the time range for which available slots should be checked.\n Optional parameters are:\n - timeZone: Time zone in which the available slots should be returned. Defaults to UTC.\n - duration: Only use for event types that allow multiple durations or for dynamic event types. If not passed for multiple duration event types defaults to default duration. For dynamic event types defaults to 30 aka each returned slot is 30 minutes long. So duration=60 means that returned slots will be each 60 minutes long.\n - slotFormat: Format of the slots. By default return is an object where each key is date and value is array of slots as string. If you want to get start and end of each slot use \"range\" as value.\n ", + "parameters": [ + { + "name": "cal-api-version", + "in": "header", + "description": "Must be set to `2024-09-04`", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "start", + "required": true, + "in": "query", + "description": "\n Time starting from which available slots should be checked.\n \n Must be in UTC timezone as ISO 8601 datestring.\n \n You can pass date without hours which defaults to start of day or specify hours:\n 2024-08-13 (will have hours 00:00:00 aka at very beginning of the date) or you can specify hours manually like 2024-08-13T09:00:00Z.", + "example": "2050-09-05", + "schema": {} + }, + { + "name": "end", + "required": true, + "in": "query", + "description": "\n Time until which available slots should be checked.\n \n Must be in UTC timezone as ISO 8601 datestring.\n \n You can pass date without hours which defaults to end of day or specify hours:\n 2024-08-20 (will have hours 23:59:59 aka at the very end of the date) or you can specify hours manually like 2024-08-20T18:00:00Z.", + "example": "2050-09-06", + "schema": {} + }, + { + "name": "username", + "required": false, + "in": "query", + "description": "The username of the user to get event types for.", + "example": "bob", + "schema": {} + }, + { + "name": "eventTypeSlug", + "required": false, + "in": "query", + "description": "The slug of the event type for which available slots should be checked. If slug is provided then username must be provided too.", + "example": "event-type-slug", + "schema": {} + }, + { + "name": "eventTypeId", + "required": false, + "in": "query", + "description": "The ID of the event type for which available slots should be checked.", + "example": "100", + "schema": {} + }, + { + "name": "usernames", + "required": false, + "in": "query", + "description": "The usernames for which available slots should be checked separated by a comma.\n \n Checking slots by usernames is used mainly for dynamic events where there is no specific event but we just want to know when 2 or more people are available.\n \n Must contain at least 2 usernames.", + "example": "alice,bob", + "schema": {} + }, + { + "name": "slotFormat", + "required": false, + "in": "query", + "description": "Format of slot times in response. Use 'range' to get start and end times. Use 'time' or omit this query parameter to get only start time.", + "example": "range", + "schema": {} + }, + { + "name": "duration", + "required": false, + "in": "query", + "description": "If event type has multiple possible durations then you can specify the desired duration here. Also, if you are fetching slots for a dynamic event then you can specify the duration her which defaults to 30, meaning that returned slots will be each 30 minutes long.", + "example": "60", + "schema": {} + }, + { + "name": "timeZone", + "required": false, + "in": "query", + "description": "Time zone in which the available slots should be returned. Defaults to UTC.", + "example": "Europe/Rome", + "schema": {} + } + ], + "responses": { + "200": { + "description": "A map of available slots indexed by date, where each date is associated with an array of time slots. If format=range is specified, each slot will be an object with start and end properties denoting start and end of the slot.\n For seated slots each object will have attendeesCount and bookingUid properties.", + "content": { + "application/json": { + "schema": { + "oneOf": [ + { + "type": "object", + "title": "Default format (or with format=time)", + "additionalProperties": { + "type": "array", + "items": { + "type": "string" + } + }, + "example": { + "status": "success", + "data": { + "2050-09-05": [ + { + "start": "2050-09-05T09:00:00.000+02:00" + }, + { + "start": "2050-09-05T10:00:00.000+02:00" + } + ], + "2050-09-06": [ + { + "start": "2050-09-06T09:00:00.000+02:00" + }, + { + "start": "2050-09-06T10:00:00.000+02:00" + } + ] + } + } + }, + { + "type": "object", + "title": "Range format (when format=range)", + "additionalProperties": { + "type": "array", + "items": { + "type": "object", + "properties": { + "start": { + "type": "string" + }, + "end": { + "type": "string" + } + } + } + }, + "example": { + "status": "success", + "data": { + "2050-09-05": [ + { + "start": "2050-09-05T09:00:00.000+02:00", + "end": "2050-09-05T10:00:00.000+02:00" + }, + { + "start": "2050-09-05T10:00:00.000+02:00", + "end": "2050-09-05T11:00:00.000+02:00" + } + ], + "2050-09-06": [ + { + "start": "2050-09-06T09:00:00.000+02:00", + "end": "2050-09-06T10:00:00.000+02:00" + }, + { + "start": "2050-09-06T10:00:00.000+02:00", + "end": "2050-09-06T11:00:00.000+02:00" + } + ] + } + } + } + ] + } + } + } + } + }, + "tags": [ + "Slots" + ] + } + }, + "/v2/slots/reservations": { "post": { - "operationId": "SlotsController_reserveSlot", + "operationId": "SlotsController_2024_09_04_reserveSlot", "summary": "Reserve a slot", - "parameters": [], + "description": "Make a slot not available for others to book for a certain period of time.", + "parameters": [ + { + "name": "cal-api-version", + "in": "header", + "description": "Must be set to `2024-09-04`", + "required": true, + "schema": { + "type": "string" + } + } + ], "requestBody": { "required": true, "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ReserveSlotInput" + "$ref": "#/components/schemas/ReserveSlotInput_2024_09_04" } } } }, "responses": { "201": { - "description": "Successful response returning uid of reserved slot.", + "description": "", "content": { "application/json": { "schema": { - "type": "object", - "properties": { - "status": { - "type": "string", - "example": "success" - }, - "data": { - "type": "object", - "properties": { - "uid": { - "type": "string", - "example": "e2a7bcf9-cc7b-40a0-80d3-657d391775a6" - } - } - } - } + "$ref": "#/components/schemas/ReserveSlotOutputResponse_2024_09_04" } } } } }, - "tags": ["Slots"] + "tags": [ + "Slots" + ] } }, - "/v2/slots/selected-slot": { - "delete": { - "operationId": "SlotsController_deleteSelectedSlot", - "summary": "Delete a selected slot", + "/v2/slots/reservations/{uid}": { + "get": { + "operationId": "SlotsController_2024_09_04_getReservedSlot", + "summary": "Get reserved slot", "parameters": [ + { + "name": "cal-api-version", + "in": "header", + "description": "Must be set to `2024-09-04`", + "required": true, + "schema": { + "type": "string" + } + }, { "name": "uid", "required": true, - "in": "query", - "description": "Unique identifier for the slot to be removed.", - "example": "e2a7bcf9-cc7b-40a0-80d3-657d391775a6", + "in": "path", "schema": { "type": "string" } @@ -5251,140 +5642,84 @@ ], "responses": { "200": { - "description": "Response deleting reserved slot by uid.", + "description": "", "content": { "application/json": { "schema": { - "type": "object", - "properties": { - "status": { - "type": "string", - "example": "success" - } - } + "$ref": "#/components/schemas/GetReservedSlotOutput_2024_09_04" } } } } }, - "tags": ["Slots"] - } - }, - "/v2/slots/available": { - "get": { - "operationId": "SlotsController_getAvailableSlots", - "summary": "Get available slots", + "tags": [ + "Slots" + ] + }, + "patch": { + "operationId": "SlotsController_2024_09_04_updateReservedSlot", + "summary": "Updated reserved a slot", "parameters": [ { - "name": "startTime", + "name": "cal-api-version", + "in": "header", + "description": "Must be set to `2024-09-04`", "required": true, - "in": "query", - "description": "Start date string starting from which to fetch slots in UTC timezone.", - "example": "2022-06-14T00:00:00.000Z", "schema": { "type": "string" } }, { - "name": "endTime", + "name": "uid", "required": true, - "in": "query", - "description": "End date string until which to fetch slots in UTC timezone.", - "example": "2022-06-14T23:59:59.999Z", + "in": "path", "schema": { "type": "string" } - }, - { - "name": "eventTypeId", - "required": false, - "in": "query", - "description": "Event Type ID for which slots are being fetched.", - "example": 100, - "schema": { - "type": "number" - } - }, - { - "name": "eventTypeSlug", - "required": false, - "in": "query", - "description": "Slug of the event type for which slots are being fetched. If event slug is provided then username must be provided too as query parameter `usernameList[]=username`", - "schema": { - "type": "string" - } - }, - { - "name": "usernameList", - "required": false, - "in": "query", - "description": "Only if eventTypeSlug is provided or for dynamic events - list of usernames for which slots are being fetched.", - "example": "usernameList[]=bob", - "schema": { - "type": "array", - "items": { - "type": "string" + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ReserveSlotInput_2024_09_04" } } - }, - { - "name": "debug", - "required": false, - "in": "query", - "schema": { - "type": "boolean" + } + }, + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ReserveSlotOutputResponse_2024_09_04" + } + } } - }, + } + }, + "tags": [ + "Slots" + ] + }, + "delete": { + "operationId": "SlotsController_2024_09_04_deleteReservedSlot", + "parameters": [ { - "name": "duration", - "required": false, - "in": "query", - "description": "Only for dynamic events - length of returned slots.", - "schema": { - "type": "number" - } - }, - { - "name": "rescheduleUid", - "required": false, - "in": "query", - "schema": { - "nullable": true, - "type": "string" - } - }, - { - "name": "timeZone", - "required": false, - "in": "query", + "name": "cal-api-version", + "in": "header", + "description": "Must be set to `2024-09-04`", + "required": true, "schema": { "type": "string" } }, { - "name": "orgSlug", - "required": false, - "in": "query", - "description": "Organization slug.", - "schema": { - "type": "string" - } - }, - { - "name": "slotFormat", - "required": false, - "in": "query", - "description": "Format of slot times in response. Use 'range' to get start and end times.", - "example": "range", - "schema": { - "enum": ["range", "time"], - "type": "string" - } - }, - { - "name": "teamMemberEmail", - "required": false, - "in": "query", + "name": "uid", + "required": true, + "in": "path", "schema": { "type": "string" } @@ -5392,87 +5727,22 @@ ], "responses": { "200": { - "description": "Available time slots retrieved successfully", + "description": "", "content": { "application/json": { "schema": { "type": "object", - "properties": { - "status": { - "type": "string", - "example": "success" - }, - "data": { - "type": "object", - "properties": { - "slots": { - "type": "object", - "additionalProperties": { - "type": "array", - "items": { - "type": "object", - "oneOf": [ - { - "properties": { - "time": { - "type": "string", - "format": "date-time", - "example": "2024-09-25T08:00:00.000Z" - } - } - }, - { - "properties": { - "startTime": { - "type": "string", - "format": "date-time", - "example": "2024-09-25T08:00:00.000Z" - }, - "endTime": { - "type": "string", - "format": "date-time", - "example": "2024-09-25T08:30:00.000Z" - } - } - } - ] - } - } - } - } - } - }, "example": { - "status": "success", - "data": { - "slots": { - "2024-09-25": [ - { - "time": "2024-09-25T08:00:00.000Z" - }, - { - "time": "2024-09-25T08:15:00.000Z" - } - ], - "2024-09-26": [ - { - "startTime": "2024-09-26T08:00:00.000Z", - "endTime": "2024-09-26T08:30:00.000Z" - }, - { - "startTime": "2024-09-26T08:15:00.000Z", - "endTime": "2024-09-26T08:45:00.000Z" - } - ] - } - } + "status": "success" } } } } } }, - "tags": ["Slots"] + "tags": [ + "Slots" + ] } }, "/v2/stripe/connect": { @@ -5501,7 +5771,9 @@ } } }, - "tags": ["Stripe"] + "tags": [ + "Stripe" + ] } }, "/v2/stripe/save": { @@ -5538,7 +5810,9 @@ } } }, - "tags": ["Stripe"] + "tags": [ + "Stripe" + ] } }, "/v2/stripe/check": { @@ -5558,7 +5832,9 @@ } } }, - "tags": ["Stripe"] + "tags": [ + "Stripe" + ] } }, "/v2/stripe/check/{teamId}": { @@ -5587,7 +5863,9 @@ } } }, - "tags": ["Stripe"] + "tags": [ + "Stripe" + ] } }, "/v2/teams": { @@ -5617,7 +5895,9 @@ } } }, - "tags": ["Teams"] + "tags": [ + "Teams" + ] }, "get": { "operationId": "TeamsController_getTeams", @@ -5635,7 +5915,9 @@ } } }, - "tags": ["Teams"] + "tags": [ + "Teams" + ] } }, "/v2/teams/{teamId}": { @@ -5664,7 +5946,9 @@ } } }, - "tags": ["Teams"] + "tags": [ + "Teams" + ] }, "patch": { "operationId": "TeamsController_updateTeam", @@ -5701,7 +5985,9 @@ } } }, - "tags": ["Teams"] + "tags": [ + "Teams" + ] }, "delete": { "operationId": "TeamsController_deleteTeam", @@ -5728,7 +6014,9 @@ } } }, - "tags": ["Teams"] + "tags": [ + "Teams" + ] } }, "/v2/teams/{teamId}/event-types": { @@ -5767,7 +6055,9 @@ } } }, - "tags": ["Teams / Event Types"] + "tags": [ + "Teams / Event Types" + ] }, "get": { "operationId": "TeamsEventTypesController_getTeamEventTypes", @@ -5812,7 +6102,9 @@ } } }, - "tags": ["Teams / Event Types"] + "tags": [ + "Teams / Event Types" + ] } }, "/v2/teams/{teamId}/event-types/{eventTypeId}": { @@ -5849,7 +6141,9 @@ } } }, - "tags": ["Teams / Event Types"] + "tags": [ + "Teams / Event Types" + ] }, "patch": { "operationId": "TeamsEventTypesController_updateTeamEventType", @@ -5894,7 +6188,9 @@ } } }, - "tags": ["Teams / Event Types"] + "tags": [ + "Teams / Event Types" + ] }, "delete": { "operationId": "TeamsEventTypesController_deleteTeamEventType", @@ -5929,7 +6225,9 @@ } } }, - "tags": ["Teams / Event Types"] + "tags": [ + "Teams / Event Types" + ] } }, "/v2/teams/{teamId}/event-types/{eventTypeId}/create-phone-call": { @@ -5976,7 +6274,9 @@ } } }, - "tags": ["Teams / Event Types"] + "tags": [ + "Teams / Event Types" + ] } }, "/v2/teams/{teamId}/memberships": { @@ -6015,7 +6315,9 @@ } } }, - "tags": ["Teams / Memberships"] + "tags": [ + "Teams / Memberships" + ] }, "get": { "operationId": "TeamsMembershipsController_getTeamMemberships", @@ -6062,7 +6364,9 @@ } } }, - "tags": ["Teams / Memberships"] + "tags": [ + "Teams / Memberships" + ] } }, "/v2/teams/{teamId}/memberships/{membershipId}": { @@ -6099,7 +6403,9 @@ } } }, - "tags": ["Teams / Memberships"] + "tags": [ + "Teams / Memberships" + ] }, "patch": { "operationId": "TeamsMembershipsController_updateTeamMembership", @@ -6144,7 +6450,9 @@ } } }, - "tags": ["Teams / Memberships"] + "tags": [ + "Teams / Memberships" + ] }, "delete": { "operationId": "TeamsMembershipsController_deleteTeamMembership", @@ -6179,7 +6487,9 @@ } } }, - "tags": ["Teams / Memberships"] + "tags": [ + "Teams / Memberships" + ] } }, "/v2/timezones": { @@ -6199,7 +6509,9 @@ } } }, - "tags": ["Timezones"] + "tags": [ + "Timezones" + ] } }, "/v2/webhooks": { @@ -6229,7 +6541,9 @@ } } }, - "tags": ["Webhooks"] + "tags": [ + "Webhooks" + ] }, "get": { "operationId": "WebhooksController_getWebhooks", @@ -6269,7 +6583,9 @@ } } }, - "tags": ["Webhooks"] + "tags": [ + "Webhooks" + ] } }, "/v2/webhooks/{webhookId}": { @@ -6308,7 +6624,9 @@ } } }, - "tags": ["Webhooks"] + "tags": [ + "Webhooks" + ] }, "get": { "operationId": "WebhooksController_getWebhook", @@ -6326,7 +6644,9 @@ } } }, - "tags": ["Webhooks"] + "tags": [ + "Webhooks" + ] }, "delete": { "operationId": "WebhooksController_deleteWebhook", @@ -6353,7 +6673,9 @@ } } }, - "tags": ["Webhooks"] + "tags": [ + "Webhooks" + ] } } }, @@ -6483,7 +6805,10 @@ "status": { "type": "string", "example": "success", - "enum": ["success", "error"] + "enum": [ + "success", + "error" + ] }, "data": { "type": "array", @@ -6492,7 +6817,10 @@ } } }, - "required": ["status", "data"] + "required": [ + "status", + "data" + ] }, "CreateManagedUserInput": { "type": "object", @@ -6508,14 +6836,25 @@ }, "timeFormat": { "type": "number", - "enum": [12, 24], + "enum": [ + 12, + 24 + ], "example": 12, "description": "Must be a number 12 or 24" }, "weekStart": { "type": "string", "example": "Monday", - "enum": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"] + "enum": [ + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday", + "Sunday" + ] }, "timeZone": { "type": "string", @@ -6576,7 +6915,10 @@ "description": "URL of the user's avatar image" } }, - "required": ["email", "name"] + "required": [ + "email", + "name" + ] }, "CreateManagedUserData": { "type": "object", @@ -6594,7 +6936,12 @@ "type": "number" } }, - "required": ["user", "accessToken", "refreshToken", "accessTokenExpiresAt"] + "required": [ + "user", + "accessToken", + "refreshToken", + "accessTokenExpiresAt" + ] }, "CreateManagedUserOutput": { "type": "object", @@ -6602,7 +6949,10 @@ "status": { "type": "string", "example": "success", - "enum": ["success", "error"] + "enum": [ + "success", + "error" + ] }, "data": { "$ref": "#/components/schemas/CreateManagedUserData" @@ -6611,7 +6961,10 @@ "type": "object" } }, - "required": ["status", "data"] + "required": [ + "status", + "data" + ] }, "GetManagedUserOutput": { "type": "object", @@ -6619,13 +6972,19 @@ "status": { "type": "string", "example": "success", - "enum": ["success", "error"] + "enum": [ + "success", + "error" + ] }, "data": { "$ref": "#/components/schemas/ManagedUserOutput" } }, - "required": ["status", "data"] + "required": [ + "status", + "data" + ] }, "UpdateManagedUserInput": { "type": "object", @@ -6638,7 +6997,10 @@ }, "timeFormat": { "type": "number", - "enum": [12, 24], + "enum": [ + 12, + 24 + ], "example": 12, "description": "Must be 12 or 24" }, @@ -6647,7 +7009,15 @@ }, "weekStart": { "type": "string", - "enum": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"], + "enum": [ + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday", + "Sunday" + ], "example": "Monday" }, "timeZone": { @@ -6723,7 +7093,11 @@ "type": "number" } }, - "required": ["accessToken", "refreshToken", "accessTokenExpiresAt"] + "required": [ + "accessToken", + "refreshToken", + "accessTokenExpiresAt" + ] }, "KeysResponseDto": { "type": "object", @@ -6731,13 +7105,19 @@ "status": { "type": "string", "example": "success", - "enum": ["success", "error"] + "enum": [ + "success", + "error" + ] }, "data": { "$ref": "#/components/schemas/KeysDto" } }, - "required": ["status", "data"] + "required": [ + "status", + "data" + ] }, "CreateOAuthClientInput": { "type": "object", @@ -6770,7 +7150,11 @@ "type": "boolean" } }, - "required": ["name", "redirectUris", "permissions"] + "required": [ + "name", + "redirectUris", + "permissions" + ] }, "DataDto": { "type": "object", @@ -6784,14 +7168,20 @@ "example": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJuYW1lIjoib2F1dGgtY2xpZW50Iiwi" } }, - "required": ["clientId", "clientSecret"] + "required": [ + "clientId", + "clientSecret" + ] }, "CreateOAuthClientResponseDto": { "type": "object", "properties": { "status": { "type": "string", - "enum": ["success", "error"], + "enum": [ + "success", + "error" + ], "example": "success" }, "data": { @@ -6806,7 +7196,10 @@ ] } }, - "required": ["status", "data"] + "required": [ + "status", + "data" + ] }, "PlatformOAuthClientDto": { "type": "object", @@ -6833,7 +7226,9 @@ "example": "https://example.com/logo.png" }, "redirectUris": { - "example": ["https://example.com/callback"], + "example": [ + "https://example.com/callback" + ], "type": "array", "items": { "type": "string" @@ -6849,7 +7244,15 @@ "example": "2024-03-23T08:33:21.851Z" } }, - "required": ["id", "name", "secret", "permissions", "redirectUris", "organizationId", "createdAt"] + "required": [ + "id", + "name", + "secret", + "permissions", + "redirectUris", + "organizationId", + "createdAt" + ] }, "GetOAuthClientsResponseDto": { "type": "object", @@ -6857,7 +7260,10 @@ "status": { "type": "string", "example": "success", - "enum": ["success", "error"] + "enum": [ + "success", + "error" + ] }, "data": { "type": "array", @@ -6866,7 +7272,10 @@ } } }, - "required": ["status", "data"] + "required": [ + "status", + "data" + ] }, "GetOAuthClientResponseDto": { "type": "object", @@ -6874,13 +7283,19 @@ "status": { "type": "string", "example": "success", - "enum": ["success", "error"] + "enum": [ + "success", + "error" + ] }, "data": { "$ref": "#/components/schemas/PlatformOAuthClientDto" } }, - "required": ["status", "data"] + "required": [ + "status", + "data" + ] }, "UpdateOAuthClientInput": { "type": "object", @@ -6919,7 +7334,9 @@ "description": "Managed user's refresh token." } }, - "required": ["refreshToken"] + "required": [ + "refreshToken" + ] }, "InputAddressLocation_2024_06_14": { "type": "object", @@ -6937,7 +7354,11 @@ "type": "boolean" } }, - "required": ["type", "address", "public"] + "required": [ + "type", + "address", + "public" + ] }, "InputLinkLocation_2024_06_14": { "type": "object", @@ -6955,7 +7376,11 @@ "type": "boolean" } }, - "required": ["type", "link", "public"] + "required": [ + "type", + "link", + "public" + ] }, "InputIntegrationLocation_2024_06_14": { "type": "object", @@ -6968,10 +7393,16 @@ "integration": { "type": "string", "example": "cal-video", - "enum": ["cal-video", "google-meet"] + "enum": [ + "cal-video", + "google-meet" + ] } }, - "required": ["type", "integration"] + "required": [ + "type", + "integration" + ] }, "InputPhoneLocation_2024_06_14": { "type": "object", @@ -6989,7 +7420,11 @@ "type": "boolean" } }, - "required": ["type", "phone", "public"] + "required": [ + "type", + "phone", + "public" + ] }, "PhoneFieldInput_2024_06_14": { "type": "object", @@ -7022,7 +7457,14 @@ "description": "If true show under event type settings but don't show this booking field in the Booker. If false show in both." } }, - "required": ["type", "slug", "label", "required", "placeholder", "hidden"] + "required": [ + "type", + "slug", + "label", + "required", + "placeholder", + "hidden" + ] }, "AddressFieldInput_2024_06_14": { "type": "object", @@ -7057,7 +7499,14 @@ "description": "If true show under event type settings but don't show this booking field in the Booker. If false show in both." } }, - "required": ["type", "slug", "label", "required", "placeholder", "hidden"] + "required": [ + "type", + "slug", + "label", + "required", + "placeholder", + "hidden" + ] }, "TextFieldInput_2024_06_14": { "type": "object", @@ -7092,7 +7541,14 @@ "description": "If true show under event type settings but don't show this booking field in the Booker. If false show in both." } }, - "required": ["type", "slug", "label", "required", "placeholder", "hidden"] + "required": [ + "type", + "slug", + "label", + "required", + "placeholder", + "hidden" + ] }, "NumberFieldInput_2024_06_14": { "type": "object", @@ -7127,7 +7583,14 @@ "description": "If true show under event type settings but don't show this booking field in the Booker. If false show in both." } }, - "required": ["type", "slug", "label", "required", "placeholder", "hidden"] + "required": [ + "type", + "slug", + "label", + "required", + "placeholder", + "hidden" + ] }, "TextAreaFieldInput_2024_06_14": { "type": "object", @@ -7162,7 +7625,14 @@ "description": "If true show under event type settings but don't show this booking field in the Booker. If false show in both." } }, - "required": ["type", "slug", "label", "required", "placeholder", "hidden"] + "required": [ + "type", + "slug", + "label", + "required", + "placeholder", + "hidden" + ] }, "SelectFieldInput_2024_06_14": { "type": "object", @@ -7189,7 +7659,10 @@ "example": "Select..." }, "options": { - "example": ["Option 1", "Option 2"], + "example": [ + "Option 1", + "Option 2" + ], "type": "array", "items": { "type": "string" @@ -7204,7 +7677,15 @@ "description": "If true show under event type settings but don't show this booking field in the Booker. If false show in both." } }, - "required": ["type", "slug", "label", "required", "placeholder", "options", "hidden"] + "required": [ + "type", + "slug", + "label", + "required", + "placeholder", + "options", + "hidden" + ] }, "MultiSelectFieldInput_2024_06_14": { "type": "object", @@ -7227,7 +7708,10 @@ "type": "boolean" }, "options": { - "example": ["Option 1", "Option 2"], + "example": [ + "Option 1", + "Option 2" + ], "type": "array", "items": { "type": "string" @@ -7242,7 +7726,14 @@ "description": "If true show under event type settings but don't show this booking field in the Booker. If false show in both." } }, - "required": ["type", "slug", "label", "required", "options", "hidden"] + "required": [ + "type", + "slug", + "label", + "required", + "options", + "hidden" + ] }, "MultiEmailFieldInput_2024_06_14": { "type": "object", @@ -7277,7 +7768,14 @@ "description": "If true show under event type settings but don't show this booking field in the Booker. If false show in both." } }, - "required": ["type", "slug", "label", "required", "placeholder", "hidden"] + "required": [ + "type", + "slug", + "label", + "required", + "placeholder", + "hidden" + ] }, "CheckboxGroupFieldInput_2024_06_14": { "type": "object", @@ -7300,7 +7798,10 @@ "type": "boolean" }, "options": { - "example": ["Checkbox 1", "Checkbox 2"], + "example": [ + "Checkbox 1", + "Checkbox 2" + ], "type": "array", "items": { "type": "string" @@ -7315,7 +7816,14 @@ "description": "If true show under event type settings but don't show this booking field in the Booker. If false show in both." } }, - "required": ["type", "slug", "label", "required", "options", "hidden"] + "required": [ + "type", + "slug", + "label", + "required", + "options", + "hidden" + ] }, "RadioGroupFieldInput_2024_06_14": { "type": "object", @@ -7338,7 +7846,10 @@ "type": "boolean" }, "options": { - "example": ["Radio 1", "Radio 2"], + "example": [ + "Radio 1", + "Radio 2" + ], "type": "array", "items": { "type": "string" @@ -7353,7 +7864,14 @@ "description": "If true show under event type settings but don't show this booking field in the Booker. If false show in both." } }, - "required": ["type", "slug", "label", "required", "options", "hidden"] + "required": [ + "type", + "slug", + "label", + "required", + "options", + "hidden" + ] }, "BooleanFieldInput_2024_06_14": { "type": "object", @@ -7383,14 +7901,24 @@ "description": "If true show under event type settings but don't show this booking field in the Booker. If false show in both." } }, - "required": ["type", "slug", "label", "required", "hidden"] + "required": [ + "type", + "slug", + "label", + "required", + "hidden" + ] }, "BusinessDaysWindow_2024_06_14": { "type": "object", "properties": { "type": { "type": "string", - "enum": ["businessDays", "calendarDays", "range"], + "enum": [ + "businessDays", + "calendarDays", + "range" + ], "description": "Whether the window should be business days, calendar days or a range of dates" }, "value": { @@ -7404,14 +7932,21 @@ "description": "\n Determines the behavior of the booking window:\n - If **true**, the window is rolling. This means the number of available days will always be equal the specified 'value' \n and adjust dynamically as bookings are made. For example, if 'value' is 3 and availability is only on Mondays, \n a booker attempting to schedule on November 10 will see slots on November 11, 18, and 25. As one of these days \n becomes fully booked, a new day (e.g., December 2) will open up to ensure 3 available days are always visible.\n - If **false**, the window is fixed. This means the booking window only considers the next 'value' days from the\n moment someone is trying to book. For example, if 'value' is 3, availability is only on Mondays, and the current \n date is November 10, the booker will only see slots on November 11 because the window is restricted to the next \n 3 calendar days (November 10–12).\n " } }, - "required": ["type", "value"] + "required": [ + "type", + "value" + ] }, "CalendarDaysWindow_2024_06_14": { "type": "object", "properties": { "type": { "type": "string", - "enum": ["businessDays", "calendarDays", "range"], + "enum": [ + "businessDays", + "calendarDays", + "range" + ], "description": "Whether the window should be business days, calendar days or a range of dates" }, "value": { @@ -7425,18 +7960,28 @@ "description": "\n Determines the behavior of the booking window:\n - If **true**, the window is rolling. This means the number of available days will always be equal the specified 'value' \n and adjust dynamically as bookings are made. For example, if 'value' is 3 and availability is only on Mondays, \n a booker attempting to schedule on November 10 will see slots on November 11, 18, and 25. As one of these days \n becomes fully booked, a new day (e.g., December 2) will open up to ensure 3 available days are always visible.\n - If **false**, the window is fixed. This means the booking window only considers the next 'value' days from the\n moment someone is trying to book. For example, if 'value' is 3, availability is only on Mondays, and the current \n date is November 10, the booker will only see slots on November 11 because the window is restricted to the next \n 3 calendar days (November 10–12).\n " } }, - "required": ["type", "value"] + "required": [ + "type", + "value" + ] }, "RangeWindow_2024_06_14": { "type": "object", "properties": { "type": { "type": "string", - "enum": ["businessDays", "calendarDays", "range"], + "enum": [ + "businessDays", + "calendarDays", + "range" + ], "description": "Whether the window should be business days, calendar days or a range of dates" }, "value": { - "example": ["2030-09-05", "2030-09-09"], + "example": [ + "2030-09-05", + "2030-09-09" + ], "description": "Date range for when this event can be booked.", "type": "array", "items": { @@ -7444,7 +7989,10 @@ } } }, - "required": ["type", "value"] + "required": [ + "type", + "value" + ] }, "BaseBookingLimitsCount_2024_06_14": { "type": "object", @@ -7485,7 +8033,9 @@ "default": false } }, - "required": ["disabled"] + "required": [ + "disabled" + ] }, "BaseBookingLimitsDuration_2024_06_14": { "type": "object", @@ -7527,10 +8077,18 @@ }, "frequency": { "type": "string", - "enum": ["yearly", "monthly", "weekly"] + "enum": [ + "yearly", + "monthly", + "weekly" + ] } }, - "required": ["interval", "occurrences", "frequency"] + "required": [ + "interval", + "occurrences", + "frequency" + ] }, "NoticeThreshold_2024_06_14": { "type": "object", @@ -7546,7 +8104,10 @@ "example": 30 } }, - "required": ["unit", "count"] + "required": [ + "unit", + "count" + ] }, "BaseConfirmationPolicy_2024_06_14": { "type": "object", @@ -7565,7 +8126,9 @@ ] } }, - "required": ["type"] + "required": [ + "type" + ] }, "Seats_2024_06_14": { "type": "object", @@ -7586,7 +8149,11 @@ "example": true } }, - "required": ["seatsPerTimeSlot", "showAttendeeInfo", "showAvailabilityCount"] + "required": [ + "seatsPerTimeSlot", + "showAttendeeInfo", + "showAvailabilityCount" + ] }, "InputAttendeeAddressLocation_2024_06_14": { "type": "object", @@ -7597,7 +8164,9 @@ "description": "only allowed value for type is `attendeeAddress`" } }, - "required": ["type"] + "required": [ + "type" + ] }, "InputAttendeePhoneLocation_2024_06_14": { "type": "object", @@ -7608,7 +8177,9 @@ "description": "only allowed value for type is `attendeePhone`" } }, - "required": ["type"] + "required": [ + "type" + ] }, "InputAttendeeDefinedLocation_2024_06_14": { "type": "object", @@ -7619,7 +8190,9 @@ "description": "only allowed value for type is `attendeeDefined`" } }, - "required": ["type"] + "required": [ + "type" + ] }, "NameDefaultFieldInput_2024_06_14": { "type": "object", @@ -7640,7 +8213,11 @@ "description": "Disable this booking field if the URL contains query parameter with key equal to the slug and prefill it with the provided value. For example, if URL contains query parameter `&name=bob`, the name field will be prefilled with this value and disabled." } }, - "required": ["type", "label", "placeholder"] + "required": [ + "type", + "label", + "placeholder" + ] }, "EmailDefaultFieldInput_2024_06_14": { "type": "object", @@ -7664,7 +8241,12 @@ "description": "Disable this booking field if the URL contains query parameter with key equal to the slug and prefill it with the provided value. For example, if URL contains query parameter `&email=bob@gmail.com`, the email field will be prefilled with this value and disabled." } }, - "required": ["type", "label", "required", "placeholder"] + "required": [ + "type", + "label", + "required", + "placeholder" + ] }, "TitleDefaultFieldInput_2024_06_14": { "type": "object", @@ -7692,7 +8274,9 @@ "description": "Disable this booking field if the URL contains query parameter with key equal to the slug and prefill it with the provided value. For example, if URL contains query parameter `&title=journey`, the title field will be prefilled with this value and disabled." } }, - "required": ["slug"] + "required": [ + "slug" + ] }, "NotesDefaultFieldInput_2024_06_14": { "type": "object", @@ -7720,7 +8304,9 @@ "description": "Disable this booking field if the URL contains query parameter with key equal to the slug and prefill it with the provided value. For example, if URL contains query parameter `¬es=journey`, the notes field will be prefilled with this value and disabled." } }, - "required": ["slug"] + "required": [ + "slug" + ] }, "GuestsDefaultFieldInput_2024_06_14": { "type": "object", @@ -7748,7 +8334,9 @@ "description": "Disable this booking field if the URL contains query parameter with key equal to the slug and prefill it with the provided value. For example, if URL contains query parameter `&guests=bob@cal.com`, the guests field will be prefilled with this value and disabled." } }, - "required": ["slug"] + "required": [ + "slug" + ] }, "RescheduleReasonDefaultFieldInput_2024_06_14": { "type": "object", @@ -7776,24 +8364,37 @@ "description": "Disable this booking field if the URL contains query parameter with key equal to the slug and prefill it with the provided value. For example, if URL contains query parameter `&rescheduleReason=travel`, the rescheduleReason field will be prefilled with this value and disabled." } }, - "required": ["slug"] + "required": [ + "slug" + ] }, "BookerLayouts_2024_06_14": { "type": "object", "properties": { "defaultLayout": { "type": "string", - "enum": ["month", "week", "column"] + "enum": [ + "month", + "week", + "column" + ] }, "enabledLayouts": { "type": "array", "items": { "type": "string", - "enum": ["month", "week", "column"] + "enum": [ + "month", + "week", + "column" + ] } } }, - "required": ["defaultLayout", "enabledLayouts"] + "required": [ + "defaultLayout", + "enabledLayouts" + ] }, "EventTypeColor_2024_06_14": { "type": "object", @@ -7809,7 +8410,10 @@ "example": "#fafafa" } }, - "required": ["lightThemeHex", "darkThemeHex"] + "required": [ + "lightThemeHex", + "darkThemeHex" + ] }, "DestinationCalendar_2024_06_14": { "type": "object", @@ -7823,7 +8427,10 @@ "description": "The external ID of the destination calendar. Refer to the /api/v2/calendars endpoint to retrieve the external IDs of your connected calendars." } }, - "required": ["integration", "externalId"] + "required": [ + "integration", + "externalId" + ] }, "CreateEventTypeInput_2024_06_14": { "type": "object", @@ -7833,7 +8440,11 @@ "example": 60 }, "lengthInMinutesOptions": { - "example": [15, 30, 60], + "example": [ + 15, + 30, + 60 + ], "description": "If you want that user can choose between different lengths of the event you can specify them here. Must include the provided `lengthInMinutes`.", "type": "array", "items": { @@ -8084,7 +8695,11 @@ "example": "https://masterchief.com/argentina/flan/video/9129412" } }, - "required": ["lengthInMinutes", "title", "slug"] + "required": [ + "lengthInMinutes", + "title", + "slug" + ] }, "OutputAddressLocation_2024_06_14": { "type": "object", @@ -8111,7 +8726,11 @@ "type": "boolean" } }, - "required": ["type", "address", "public"] + "required": [ + "type", + "address", + "public" + ] }, "OutputLinkLocation_2024_06_14": { "type": "object", @@ -8138,7 +8757,11 @@ "type": "boolean" } }, - "required": ["type", "link", "public"] + "required": [ + "type", + "link", + "public" + ] }, "OutputIntegrationLocation_2024_06_14": { "type": "object", @@ -8205,7 +8828,10 @@ "description": "Credential ID associated with the integration" } }, - "required": ["type", "integration"] + "required": [ + "type", + "integration" + ] }, "OutputPhoneLocation_2024_06_14": { "type": "object", @@ -8232,7 +8858,11 @@ "type": "boolean" } }, - "required": ["type", "phone", "public"] + "required": [ + "type", + "phone", + "public" + ] }, "OutputConferencingLocation_2024_06_14": { "type": "object", @@ -8254,7 +8884,9 @@ "description": "only allowed value for type is `conferencing`" } }, - "required": ["type"] + "required": [ + "type" + ] }, "OutputUnknownLocation_2024_06_14": { "type": "object", @@ -8279,7 +8911,10 @@ "type": "string" } }, - "required": ["type", "location"] + "required": [ + "type", + "location" + ] }, "EmailDefaultFieldOutput_2024_06_14": { "type": "object", @@ -8330,7 +8965,12 @@ "default": "email" } }, - "required": ["type", "required", "isDefault", "slug"] + "required": [ + "type", + "required", + "isDefault", + "slug" + ] }, "NameDefaultFieldOutput_2024_06_14": { "type": "object", @@ -8380,7 +9020,12 @@ "type": "boolean" } }, - "required": ["type", "isDefault", "slug", "required"] + "required": [ + "type", + "isDefault", + "slug", + "required" + ] }, "LocationDefaultFieldOutput_2024_06_14": { "type": "object", @@ -8408,14 +9053,26 @@ "description": "If true show under event type settings but don't show this booking field in the Booker. If false show in both." } }, - "required": ["isDefault", "slug", "type", "required", "hidden"] + "required": [ + "isDefault", + "slug", + "type", + "required", + "hidden" + ] }, "RescheduleReasonDefaultFieldOutput_2024_06_14": { "type": "object", "properties": { "slug": { "type": "string", - "enum": ["name", "email", "title", "notes", "guests"], + "enum": [ + "name", + "email", + "title", + "notes", + "guests" + ], "example": "rescheduleReason", "description": "only allowed value for type is `rescheduleReason`", "default": "rescheduleReason" @@ -8448,14 +9105,24 @@ "default": "textarea" } }, - "required": ["slug", "isDefault", "type"] + "required": [ + "slug", + "isDefault", + "type" + ] }, "TitleDefaultFieldOutput_2024_06_14": { "type": "object", "properties": { "slug": { "type": "string", - "enum": ["name", "email", "title", "notes", "guests"], + "enum": [ + "name", + "email", + "title", + "notes", + "guests" + ], "example": "title", "description": "only allowed value for type is `title`", "default": "title" @@ -8488,14 +9155,24 @@ "default": "text" } }, - "required": ["slug", "isDefault", "type"] + "required": [ + "slug", + "isDefault", + "type" + ] }, "NotesDefaultFieldOutput_2024_06_14": { "type": "object", "properties": { "slug": { "type": "string", - "enum": ["name", "email", "title", "notes", "guests"], + "enum": [ + "name", + "email", + "title", + "notes", + "guests" + ], "example": "notes", "description": "only allowed value for type is `notes`", "default": "notes" @@ -8528,14 +9205,24 @@ "default": "textarea" } }, - "required": ["slug", "isDefault", "type"] + "required": [ + "slug", + "isDefault", + "type" + ] }, "GuestsDefaultFieldOutput_2024_06_14": { "type": "object", "properties": { "slug": { "type": "string", - "enum": ["name", "email", "title", "notes", "guests"], + "enum": [ + "name", + "email", + "title", + "notes", + "guests" + ], "example": "guests", "description": "only allowed value for type is `guests`", "default": "guests" @@ -8568,7 +9255,11 @@ "default": "multiemail" } }, - "required": ["slug", "isDefault", "type"] + "required": [ + "slug", + "isDefault", + "type" + ] }, "AddressFieldOutput_2024_06_14": { "type": "object", @@ -8624,7 +9315,14 @@ "example": false } }, - "required": ["type", "slug", "label", "required", "hidden", "isDefault"] + "required": [ + "type", + "slug", + "label", + "required", + "hidden", + "isDefault" + ] }, "BooleanFieldOutput_2024_06_14": { "type": "object", @@ -8675,7 +9373,14 @@ "example": false } }, - "required": ["type", "slug", "label", "required", "hidden", "isDefault"] + "required": [ + "type", + "slug", + "label", + "required", + "hidden", + "isDefault" + ] }, "CheckboxGroupFieldOutput_2024_06_14": { "type": "object", @@ -8713,7 +9418,10 @@ "type": "boolean" }, "options": { - "example": ["Checkbox 1", "Checkbox 2"], + "example": [ + "Checkbox 1", + "Checkbox 2" + ], "type": "array", "items": { "type": "string" @@ -8734,7 +9442,15 @@ "example": false } }, - "required": ["type", "slug", "label", "required", "options", "hidden", "isDefault"] + "required": [ + "type", + "slug", + "label", + "required", + "options", + "hidden", + "isDefault" + ] }, "MultiEmailFieldOutput_2024_06_14": { "type": "object", @@ -8790,7 +9506,14 @@ "example": false } }, - "required": ["type", "slug", "label", "required", "hidden", "isDefault"] + "required": [ + "type", + "slug", + "label", + "required", + "hidden", + "isDefault" + ] }, "MultiSelectFieldOutput_2024_06_14": { "type": "object", @@ -8828,7 +9551,10 @@ "type": "boolean" }, "options": { - "example": ["Option 1", "Option 2"], + "example": [ + "Option 1", + "Option 2" + ], "type": "array", "items": { "type": "string" @@ -8849,7 +9575,15 @@ "example": false } }, - "required": ["type", "slug", "label", "required", "options", "hidden", "isDefault"] + "required": [ + "type", + "slug", + "label", + "required", + "options", + "hidden", + "isDefault" + ] }, "NumberFieldOutput_2024_06_14": { "type": "object", @@ -8905,7 +9639,14 @@ "example": false } }, - "required": ["type", "slug", "label", "required", "hidden", "isDefault"] + "required": [ + "type", + "slug", + "label", + "required", + "hidden", + "isDefault" + ] }, "PhoneFieldOutput_2024_06_14": { "type": "object", @@ -8959,7 +9700,14 @@ "example": false } }, - "required": ["type", "slug", "label", "required", "hidden", "isDefault"] + "required": [ + "type", + "slug", + "label", + "required", + "hidden", + "isDefault" + ] }, "RadioGroupFieldOutput_2024_06_14": { "type": "object", @@ -8997,7 +9745,10 @@ "type": "boolean" }, "options": { - "example": ["Radio 1", "Radio 2"], + "example": [ + "Radio 1", + "Radio 2" + ], "type": "array", "items": { "type": "string" @@ -9018,7 +9769,15 @@ "example": false } }, - "required": ["type", "slug", "label", "required", "options", "hidden", "isDefault"] + "required": [ + "type", + "slug", + "label", + "required", + "options", + "hidden", + "isDefault" + ] }, "SelectFieldOutput_2024_06_14": { "type": "object", @@ -9060,7 +9819,10 @@ "example": "Select..." }, "options": { - "example": ["Option 1", "Option 2"], + "example": [ + "Option 1", + "Option 2" + ], "type": "array", "items": { "type": "string" @@ -9081,7 +9843,15 @@ "example": false } }, - "required": ["type", "slug", "label", "required", "options", "hidden", "isDefault"] + "required": [ + "type", + "slug", + "label", + "required", + "options", + "hidden", + "isDefault" + ] }, "TextAreaFieldOutput_2024_06_14": { "type": "object", @@ -9137,7 +9907,14 @@ "example": false } }, - "required": ["type", "slug", "label", "required", "hidden", "isDefault"] + "required": [ + "type", + "slug", + "label", + "required", + "hidden", + "isDefault" + ] }, "TextFieldOutput_2024_06_14": { "type": "object", @@ -9193,7 +9970,14 @@ "example": false } }, - "required": ["type", "slug", "label", "required", "hidden", "isDefault"] + "required": [ + "type", + "slug", + "label", + "required", + "hidden", + "isDefault" + ] }, "EventTypeOutput_2024_06_14": { "type": "object", @@ -9207,7 +9991,11 @@ "example": 60 }, "lengthInMinutesOptions": { - "example": [15, 30, 60], + "example": [ + 15, + 30, + 60 + ], "description": "If you want that user can choose between different lengths of the event you can specify them here. Must include the provided `lengthInMinutes`.", "type": "array", "items": { @@ -9472,21 +10260,30 @@ "properties": { "status": { "type": "string", - "enum": ["success", "error"], + "enum": [ + "success", + "error" + ], "example": "success" }, "data": { "$ref": "#/components/schemas/EventTypeOutput_2024_06_14" } }, - "required": ["status", "data"] + "required": [ + "status", + "data" + ] }, "GetEventTypeOutput_2024_06_14": { "type": "object", "properties": { "status": { "type": "string", - "enum": ["success", "error"], + "enum": [ + "success", + "error" + ], "example": "success" }, "data": { @@ -9498,14 +10295,20 @@ ] } }, - "required": ["status", "data"] + "required": [ + "status", + "data" + ] }, "GetEventTypesOutput_2024_06_14": { "type": "object", "properties": { "status": { "type": "string", - "enum": ["success", "error"], + "enum": [ + "success", + "error" + ], "example": "success" }, "data": { @@ -9515,7 +10318,10 @@ } } }, - "required": ["status", "data"] + "required": [ + "status", + "data" + ] }, "UpdateEventTypeInput_2024_06_14": { "type": "object", @@ -9525,7 +10331,11 @@ "example": 60 }, "lengthInMinutesOptions": { - "example": [15, 30, 60], + "example": [ + 15, + 30, + 60 + ], "description": "If you want that user can choose between different lengths of the event you can specify them here. Must include the provided `lengthInMinutes`.", "type": "array", "items": { @@ -9782,14 +10592,20 @@ "properties": { "status": { "type": "string", - "enum": ["success", "error"], + "enum": [ + "success", + "error" + ], "example": "success" }, "data": { "$ref": "#/components/schemas/EventTypeOutput_2024_06_14" } }, - "required": ["status", "data"] + "required": [ + "status", + "data" + ] }, "DeleteData_2024_06_14": { "type": "object", @@ -9810,21 +10626,32 @@ "type": "string" } }, - "required": ["id", "lengthInMinutes", "title", "slug"] + "required": [ + "id", + "lengthInMinutes", + "title", + "slug" + ] }, "DeleteEventTypeOutput_2024_06_14": { "type": "object", "properties": { "status": { "type": "string", - "enum": ["success", "error"], + "enum": [ + "success", + "error" + ], "example": "success" }, "data": { "$ref": "#/components/schemas/DeleteData_2024_06_14" } }, - "required": ["status", "data"] + "required": [ + "status", + "data" + ] }, "SelectedCalendarsInputDto": { "type": "object", @@ -9839,7 +10666,11 @@ "type": "number" } }, - "required": ["integration", "externalId", "credentialId"] + "required": [ + "integration", + "externalId", + "credentialId" + ] }, "SelectedCalendarOutputDto": { "type": "object", @@ -9858,7 +10689,12 @@ "nullable": true } }, - "required": ["userId", "integration", "externalId", "credentialId"] + "required": [ + "userId", + "integration", + "externalId", + "credentialId" + ] }, "SelectedCalendarOutputResponseDto": { "type": "object", @@ -9866,13 +10702,19 @@ "status": { "type": "string", "example": "success", - "enum": ["success", "error"] + "enum": [ + "success", + "error" + ] }, "data": { "$ref": "#/components/schemas/SelectedCalendarOutputDto" } }, - "required": ["status", "data"] + "required": [ + "status", + "data" + ] }, "OrgTeamOutputDto": { "type": "object", @@ -9945,7 +10787,11 @@ "default": "Sunday" } }, - "required": ["id", "name", "isOrganization"] + "required": [ + "id", + "name", + "isOrganization" + ] }, "OrgTeamsOutputResponseDto": { "type": "object", @@ -9953,7 +10799,10 @@ "status": { "type": "string", "example": "success", - "enum": ["success", "error"] + "enum": [ + "success", + "error" + ] }, "data": { "type": "array", @@ -9962,7 +10811,10 @@ } } }, - "required": ["status", "data"] + "required": [ + "status", + "data" + ] }, "OrgMeTeamsOutputResponseDto": { "type": "object", @@ -9970,7 +10822,10 @@ "status": { "type": "string", "example": "success", - "enum": ["success", "error"] + "enum": [ + "success", + "error" + ] }, "data": { "type": "array", @@ -9979,7 +10834,10 @@ } } }, - "required": ["status", "data"] + "required": [ + "status", + "data" + ] }, "OrgTeamOutputResponseDto": { "type": "object", @@ -9987,13 +10845,19 @@ "status": { "type": "string", "example": "success", - "enum": ["success", "error"] + "enum": [ + "success", + "error" + ] }, "data": { "$ref": "#/components/schemas/OrgTeamOutputDto" } }, - "required": ["status", "data"] + "required": [ + "status", + "data" + ] }, "UpdateOrgTeamDto": { "type": "object", @@ -10149,19 +11013,40 @@ "default": true } }, - "required": ["name"] + "required": [ + "name" + ] }, "ScheduleAvailabilityInput_2024_06_11": { "type": "object", "properties": { "days": { "type": "array", - "enum": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"], - "example": ["Monday", "Tuesday"], + "enum": [ + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday", + "Sunday" + ], + "example": [ + "Monday", + "Tuesday" + ], "description": "Array of days when schedule is active.", "items": { "type": "string", - "enum": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"] + "enum": [ + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday", + "Sunday" + ] } }, "startTime": { @@ -10177,7 +11062,11 @@ "description": "endTime must be a valid time in format HH:MM e.g. 15:00" } }, - "required": ["days", "startTime", "endTime"] + "required": [ + "days", + "startTime", + "endTime" + ] }, "ScheduleOverrideInput_2024_06_11": { "type": "object", @@ -10199,7 +11088,11 @@ "description": "endTime must be a valid time in format HH:MM e.g. 13:00" } }, - "required": ["date", "startTime", "endTime"] + "required": [ + "date", + "startTime", + "endTime" + ] }, "ScheduleOutput_2024_06_11": { "type": "object", @@ -10223,12 +11116,18 @@ "availability": { "example": [ { - "days": ["Monday", "Tuesday"], + "days": [ + "Monday", + "Tuesday" + ], "startTime": "17:00", "endTime": "19:00" }, { - "days": ["Wednesday", "Thursday"], + "days": [ + "Wednesday", + "Thursday" + ], "startTime": "16:00", "endTime": "20:00" } @@ -10256,7 +11155,15 @@ } } }, - "required": ["id", "ownerId", "name", "timeZone", "availability", "isDefault", "overrides"] + "required": [ + "id", + "ownerId", + "name", + "timeZone", + "availability", + "isDefault", + "overrides" + ] }, "GetSchedulesOutput_2024_06_11": { "type": "object", @@ -10264,7 +11171,10 @@ "status": { "type": "string", "example": "success", - "enum": ["success", "error"] + "enum": [ + "success", + "error" + ] }, "data": { "type": "array", @@ -10276,7 +11186,10 @@ "type": "object" } }, - "required": ["status", "data"] + "required": [ + "status", + "data" + ] }, "CreateScheduleInput_2024_06_11": { "type": "object", @@ -10294,12 +11207,18 @@ "description": "Each object contains days and times when the user is available. If not passed, the default availability is Monday to Friday from 09:00 to 17:00.", "example": [ { - "days": ["Monday", "Tuesday"], + "days": [ + "Monday", + "Tuesday" + ], "startTime": "17:00", "endTime": "19:00" }, { - "days": ["Wednesday", "Thursday"], + "days": [ + "Wednesday", + "Thursday" + ], "startTime": "16:00", "endTime": "20:00" } @@ -10329,7 +11248,11 @@ } } }, - "required": ["name", "timeZone", "isDefault"] + "required": [ + "name", + "timeZone", + "isDefault" + ] }, "CreateScheduleOutput_2024_06_11": { "type": "object", @@ -10337,13 +11260,19 @@ "status": { "type": "string", "example": "success", - "enum": ["success", "error"] + "enum": [ + "success", + "error" + ] }, "data": { "$ref": "#/components/schemas/ScheduleOutput_2024_06_11" } }, - "required": ["status", "data"] + "required": [ + "status", + "data" + ] }, "GetScheduleOutput_2024_06_11": { "type": "object", @@ -10351,7 +11280,10 @@ "status": { "type": "string", "example": "success", - "enum": ["success", "error"] + "enum": [ + "success", + "error" + ] }, "data": { "nullable": true, @@ -10365,7 +11297,10 @@ "type": "object" } }, - "required": ["status", "data"] + "required": [ + "status", + "data" + ] }, "UpdateScheduleInput_2024_06_11": { "type": "object", @@ -10381,7 +11316,10 @@ "availability": { "example": [ { - "days": ["Monday", "Tuesday"], + "days": [ + "Monday", + "Tuesday" + ], "startTime": "09:00", "endTime": "10:00" } @@ -10416,7 +11354,10 @@ "status": { "type": "string", "example": "success", - "enum": ["success", "error"] + "enum": [ + "success", + "error" + ] }, "data": { "$ref": "#/components/schemas/ScheduleOutput_2024_06_11" @@ -10425,7 +11366,10 @@ "type": "object" } }, - "required": ["status", "data"] + "required": [ + "status", + "data" + ] }, "DeleteScheduleOutput_2024_06_11": { "type": "object", @@ -10433,10 +11377,15 @@ "status": { "type": "string", "example": "success", - "enum": ["success", "error"] + "enum": [ + "success", + "error" + ] } }, - "required": ["status"] + "required": [ + "status" + ] }, "ProfileOutput": { "type": "object", @@ -10463,7 +11412,11 @@ "example": "john_doe" } }, - "required": ["id", "organizationId", "userId"] + "required": [ + "id", + "organizationId", + "userId" + ] }, "GetOrgUsersWithProfileOutput": { "type": "object", @@ -10599,7 +11552,15 @@ ] } }, - "required": ["id", "email", "timeZone", "weekStart", "hideBranding", "createdDate", "profile"] + "required": [ + "id", + "email", + "timeZone", + "weekStart", + "hideBranding", + "createdDate", + "profile" + ] }, "GetOrganizationUsersResponseDTO": { "type": "object", @@ -10607,7 +11568,10 @@ "status": { "type": "string", "example": "success", - "enum": ["success", "error"] + "enum": [ + "success", + "error" + ] }, "data": { "type": "array", @@ -10616,7 +11580,10 @@ } } }, - "required": ["status", "data"] + "required": [ + "status", + "data" + ] }, "CreateOrganizationUserInput": { "type": "object", @@ -10694,14 +11661,20 @@ "organizationRole": { "type": "string", "default": "MEMBER", - "enum": ["MEMBER", "ADMIN", "OWNER"] + "enum": [ + "MEMBER", + "ADMIN", + "OWNER" + ] }, "autoAccept": { "type": "boolean", "default": true } }, - "required": ["email"] + "required": [ + "email" + ] }, "GetOrganizationUserOutput": { "type": "object", @@ -10709,13 +11682,19 @@ "status": { "type": "string", "example": "success", - "enum": ["success", "error"] + "enum": [ + "success", + "error" + ] }, "data": { "$ref": "#/components/schemas/GetOrgUsersWithProfileOutput" } }, - "required": ["status", "data"] + "required": [ + "status", + "data" + ] }, "UpdateOrganizationUserInput": { "type": "object", @@ -10738,13 +11717,23 @@ }, "role": { "type": "string", - "enum": ["MEMBER", "OWNER", "ADMIN"] + "enum": [ + "MEMBER", + "OWNER", + "ADMIN" + ] }, "disableImpersonation": { "type": "boolean" } }, - "required": ["id", "userId", "teamId", "accepted", "role"] + "required": [ + "id", + "userId", + "teamId", + "accepted", + "role" + ] }, "GetAllOrgMemberships": { "type": "object", @@ -10752,13 +11741,19 @@ "status": { "type": "string", "example": "success", - "enum": ["success", "error"] + "enum": [ + "success", + "error" + ] }, "data": { "$ref": "#/components/schemas/OrgMembershipOutputDto" } }, - "required": ["status", "data"] + "required": [ + "status", + "data" + ] }, "CreateOrgMembershipDto": { "type": "object", @@ -10773,14 +11768,21 @@ "role": { "type": "string", "default": "MEMBER", - "enum": ["MEMBER", "OWNER", "ADMIN"] + "enum": [ + "MEMBER", + "OWNER", + "ADMIN" + ] }, "disableImpersonation": { "type": "boolean", "default": false } }, - "required": ["userId", "role"] + "required": [ + "userId", + "role" + ] }, "CreateOrgMembershipOutput": { "type": "object", @@ -10788,13 +11790,19 @@ "status": { "type": "string", "example": "success", - "enum": ["success", "error"] + "enum": [ + "success", + "error" + ] }, "data": { "$ref": "#/components/schemas/OrgMembershipOutputDto" } }, - "required": ["status", "data"] + "required": [ + "status", + "data" + ] }, "GetOrgMembership": { "type": "object", @@ -10802,13 +11810,19 @@ "status": { "type": "string", "example": "success", - "enum": ["success", "error"] + "enum": [ + "success", + "error" + ] }, "data": { "$ref": "#/components/schemas/OrgMembershipOutputDto" } }, - "required": ["status", "data"] + "required": [ + "status", + "data" + ] }, "DeleteOrgMembership": { "type": "object", @@ -10816,13 +11830,19 @@ "status": { "type": "string", "example": "success", - "enum": ["success", "error"] + "enum": [ + "success", + "error" + ] }, "data": { "$ref": "#/components/schemas/OrgMembershipOutputDto" } }, - "required": ["status", "data"] + "required": [ + "status", + "data" + ] }, "UpdateOrgMembershipDto": { "type": "object", @@ -10832,7 +11852,11 @@ }, "role": { "type": "string", - "enum": ["MEMBER", "OWNER", "ADMIN"] + "enum": [ + "MEMBER", + "OWNER", + "ADMIN" + ] }, "disableImpersonation": { "type": "boolean" @@ -10845,13 +11869,19 @@ "status": { "type": "string", "example": "success", - "enum": ["success", "error"] + "enum": [ + "success", + "error" + ] }, "data": { "$ref": "#/components/schemas/OrgMembershipOutputDto" } }, - "required": ["status", "data"] + "required": [ + "status", + "data" + ] }, "Host": { "type": "object", @@ -10866,10 +11896,18 @@ }, "priority": { "type": "string", - "enum": ["lowest", "low", "medium", "high", "highest"] + "enum": [ + "lowest", + "low", + "medium", + "high", + "highest" + ] } }, - "required": ["userId"] + "required": [ + "userId" + ] }, "CreateTeamEventTypeInput_2024_06_14": { "type": "object", @@ -10879,7 +11917,11 @@ "example": 60 }, "lengthInMinutesOptions": { - "example": [15, 30, 60], + "example": [ + 15, + 30, + 60 + ], "description": "If you want that user can choose between different lengths of the event you can specify them here. Must include the provided `lengthInMinutes`.", "type": "array", "items": { @@ -11143,7 +12185,13 @@ "description": "If true, all current and future team members will be assigned to this event type" } }, - "required": ["lengthInMinutes", "title", "slug", "schedulingType", "hosts"] + "required": [ + "lengthInMinutes", + "title", + "slug", + "schedulingType", + "hosts" + ] }, "CreateTeamEventTypeOutput": { "type": "object", @@ -11151,7 +12199,10 @@ "status": { "type": "string", "example": "success", - "enum": ["success", "error"] + "enum": [ + "success", + "error" + ] }, "data": { "oneOf": [ @@ -11167,7 +12218,10 @@ ] } }, - "required": ["status", "data"] + "required": [ + "status", + "data" + ] }, "TeamEventTypeResponseHost": { "type": "object", @@ -11184,7 +12238,13 @@ "priority": { "type": "string", "default": "medium", - "enum": ["lowest", "low", "medium", "high", "highest"] + "enum": [ + "lowest", + "low", + "medium", + "high", + "highest" + ] }, "name": { "type": "string", @@ -11196,7 +12256,10 @@ "example": "https://cal.com/api/avatar/d95949bc-ccb1-400f-acf6-045c51a16856.png" } }, - "required": ["userId", "name"] + "required": [ + "userId", + "name" + ] }, "EventTypeTeam": { "type": "object", @@ -11229,7 +12292,9 @@ "type": "string" } }, - "required": ["id"] + "required": [ + "id" + ] }, "TeamEventTypeOutput_2024_06_14": { "type": "object", @@ -11244,7 +12309,11 @@ "example": 60 }, "lengthInMinutesOptions": { - "example": [15, 30, 60], + "example": [ + 15, + 30, + 60 + ], "description": "If you want that user can choose between different lengths of the event you can specify them here. Must include the provided `lengthInMinutes`.", "type": "array", "items": { @@ -11500,7 +12569,11 @@ "schedulingType": { "type": "string", "nullable": true, - "enum": ["ROUND_ROBIN", "COLLECTIVE", "MANAGED"] + "enum": [ + "ROUND_ROBIN", + "COLLECTIVE", + "MANAGED" + ] }, "team": { "$ref": "#/components/schemas/EventTypeTeam" @@ -11536,13 +12609,19 @@ "status": { "type": "string", "example": "success", - "enum": ["success", "error"] + "enum": [ + "success", + "error" + ] }, "data": { "$ref": "#/components/schemas/TeamEventTypeOutput_2024_06_14" } }, - "required": ["status", "data"] + "required": [ + "status", + "data" + ] }, "CreatePhoneCallInput": { "type": "object", @@ -11568,7 +12647,10 @@ }, "templateType": { "default": "CUSTOM_TEMPLATE", - "enum": ["CHECK_IN_APPOINTMENT", "CUSTOM_TEMPLATE"], + "enum": [ + "CHECK_IN_APPOINTMENT", + "CUSTOM_TEMPLATE" + ], "type": "string", "description": "Template type" }, @@ -11597,7 +12679,13 @@ "description": "General prompt" } }, - "required": ["yourPhoneNumber", "numberToCall", "calApiKey", "enabled", "templateType"] + "required": [ + "yourPhoneNumber", + "numberToCall", + "calApiKey", + "enabled", + "templateType" + ] }, "Data": { "type": "object", @@ -11609,7 +12697,10 @@ "type": "string" } }, - "required": ["callId", "agentId"] + "required": [ + "callId", + "agentId" + ] }, "CreatePhoneCallOutput": { "type": "object", @@ -11617,13 +12708,19 @@ "status": { "type": "string", "example": "success", - "enum": ["success", "error"] + "enum": [ + "success", + "error" + ] }, "data": { "$ref": "#/components/schemas/Data" } }, - "required": ["status", "data"] + "required": [ + "status", + "data" + ] }, "GetTeamEventTypesOutput": { "type": "object", @@ -11631,7 +12728,10 @@ "status": { "type": "string", "example": "success", - "enum": ["success", "error"] + "enum": [ + "success", + "error" + ] }, "data": { "type": "array", @@ -11640,7 +12740,10 @@ } } }, - "required": ["status", "data"] + "required": [ + "status", + "data" + ] }, "UpdateTeamEventTypeInput_2024_06_14": { "type": "object", @@ -11650,7 +12753,11 @@ "example": 60 }, "lengthInMinutesOptions": { - "example": [15, 30, 60], + "example": [ + 15, + 30, + 60 + ], "description": "If you want that user can choose between different lengths of the event you can specify them here. Must include the provided `lengthInMinutes`.", "type": "array", "items": { @@ -11918,7 +13025,10 @@ "status": { "type": "string", "example": "success", - "enum": ["success", "error"] + "enum": [ + "success", + "error" + ] }, "data": { "oneOf": [ @@ -11934,7 +13044,10 @@ ] } }, - "required": ["status", "data"] + "required": [ + "status", + "data" + ] }, "DeleteTeamEventTypeOutput": { "type": "object", @@ -11942,13 +13055,19 @@ "status": { "type": "string", "example": "success", - "enum": ["success", "error"] + "enum": [ + "success", + "error" + ] }, "data": { "type": "object" } }, - "required": ["status", "data"] + "required": [ + "status", + "data" + ] }, "MembershipUserOutputDto": { "type": "object", @@ -11966,7 +13085,9 @@ "type": "string" } }, - "required": ["email"] + "required": [ + "email" + ] }, "OrgTeamMembershipOutputDto": { "type": "object", @@ -11985,7 +13106,11 @@ }, "role": { "type": "string", - "enum": ["MEMBER", "OWNER", "ADMIN"] + "enum": [ + "MEMBER", + "OWNER", + "ADMIN" + ] }, "disableImpersonation": { "type": "boolean" @@ -11994,7 +13119,14 @@ "$ref": "#/components/schemas/MembershipUserOutputDto" } }, - "required": ["id", "userId", "teamId", "accepted", "role", "user"] + "required": [ + "id", + "userId", + "teamId", + "accepted", + "role", + "user" + ] }, "OrgTeamMembershipsOutputResponseDto": { "type": "object", @@ -12002,7 +13134,10 @@ "status": { "type": "string", "example": "success", - "enum": ["success", "error"] + "enum": [ + "success", + "error" + ] }, "data": { "type": "array", @@ -12011,7 +13146,10 @@ } } }, - "required": ["status", "data"] + "required": [ + "status", + "data" + ] }, "OrgTeamMembershipOutputResponseDto": { "type": "object", @@ -12019,13 +13157,19 @@ "status": { "type": "string", "example": "success", - "enum": ["success", "error"] + "enum": [ + "success", + "error" + ] }, "data": { "$ref": "#/components/schemas/OrgTeamMembershipOutputDto" } }, - "required": ["status", "data"] + "required": [ + "status", + "data" + ] }, "UpdateOrgTeamMembershipDto": { "type": "object", @@ -12035,7 +13179,11 @@ }, "role": { "type": "string", - "enum": ["MEMBER", "OWNER", "ADMIN"] + "enum": [ + "MEMBER", + "OWNER", + "ADMIN" + ] }, "disableImpersonation": { "type": "boolean" @@ -12055,14 +13203,21 @@ "role": { "type": "string", "default": "MEMBER", - "enum": ["MEMBER", "OWNER", "ADMIN"] + "enum": [ + "MEMBER", + "OWNER", + "ADMIN" + ] }, "disableImpersonation": { "type": "boolean", "default": false } }, - "required": ["userId", "role"] + "required": [ + "userId", + "role" + ] }, "Attribute": { "type": "object", @@ -12080,7 +13235,12 @@ "type": { "type": "string", "description": "The type of the attribute", - "enum": ["TEXT", "NUMBER", "SINGLE_SELECT", "MULTI_SELECT"] + "enum": [ + "TEXT", + "NUMBER", + "SINGLE_SELECT", + "MULTI_SELECT" + ] }, "name": { "type": "string", @@ -12103,7 +13263,14 @@ "example": true } }, - "required": ["id", "teamId", "type", "name", "slug", "enabled"] + "required": [ + "id", + "teamId", + "type", + "name", + "slug", + "enabled" + ] }, "GetOrganizationAttributesOutput": { "type": "object", @@ -12111,7 +13278,10 @@ "status": { "type": "string", "example": "success", - "enum": ["success", "error"] + "enum": [ + "success", + "error" + ] }, "data": { "type": "array", @@ -12120,7 +13290,10 @@ } } }, - "required": ["status", "data"] + "required": [ + "status", + "data" + ] }, "GetSingleAttributeOutput": { "type": "object", @@ -12128,7 +13301,10 @@ "status": { "type": "string", "example": "success", - "enum": ["success", "error"] + "enum": [ + "success", + "error" + ] }, "data": { "nullable": true, @@ -12139,7 +13315,10 @@ ] } }, - "required": ["status", "data"] + "required": [ + "status", + "data" + ] }, "CreateOrganizationAttributeOptionInput": { "type": "object", @@ -12151,7 +13330,10 @@ "type": "string" } }, - "required": ["value", "slug"] + "required": [ + "value", + "slug" + ] }, "CreateOrganizationAttributeInput": { "type": "object", @@ -12164,7 +13346,12 @@ }, "type": { "type": "string", - "enum": ["TEXT", "NUMBER", "SINGLE_SELECT", "MULTI_SELECT"] + "enum": [ + "TEXT", + "NUMBER", + "SINGLE_SELECT", + "MULTI_SELECT" + ] }, "options": { "type": "array", @@ -12176,7 +13363,12 @@ "type": "boolean" } }, - "required": ["name", "slug", "type", "options"] + "required": [ + "name", + "slug", + "type", + "options" + ] }, "CreateOrganizationAttributesOutput": { "type": "object", @@ -12184,13 +13376,19 @@ "status": { "type": "string", "example": "success", - "enum": ["success", "error"] + "enum": [ + "success", + "error" + ] }, "data": { "$ref": "#/components/schemas/Attribute" } }, - "required": ["status", "data"] + "required": [ + "status", + "data" + ] }, "UpdateOrganizationAttributeInput": { "type": "object", @@ -12203,7 +13401,12 @@ }, "type": { "type": "string", - "enum": ["TEXT", "NUMBER", "SINGLE_SELECT", "MULTI_SELECT"] + "enum": [ + "TEXT", + "NUMBER", + "SINGLE_SELECT", + "MULTI_SELECT" + ] }, "enabled": { "type": "boolean" @@ -12216,13 +13419,19 @@ "status": { "type": "string", "example": "success", - "enum": ["success", "error"] + "enum": [ + "success", + "error" + ] }, "data": { "$ref": "#/components/schemas/Attribute" } }, - "required": ["status", "data"] + "required": [ + "status", + "data" + ] }, "DeleteOrganizationAttributesOutput": { "type": "object", @@ -12230,13 +13439,19 @@ "status": { "type": "string", "example": "success", - "enum": ["success", "error"] + "enum": [ + "success", + "error" + ] }, "data": { "$ref": "#/components/schemas/Attribute" } }, - "required": ["status", "data"] + "required": [ + "status", + "data" + ] }, "OptionOutput": { "type": "object", @@ -12262,7 +13477,12 @@ "example": "option-slug" } }, - "required": ["id", "attributeId", "value", "slug"] + "required": [ + "id", + "attributeId", + "value", + "slug" + ] }, "CreateAttributeOptionOutput": { "type": "object", @@ -12270,13 +13490,19 @@ "status": { "type": "string", "example": "success", - "enum": ["success", "error"] + "enum": [ + "success", + "error" + ] }, "data": { "$ref": "#/components/schemas/OptionOutput" } }, - "required": ["status", "data"] + "required": [ + "status", + "data" + ] }, "DeleteAttributeOptionOutput": { "type": "object", @@ -12284,13 +13510,19 @@ "status": { "type": "string", "example": "success", - "enum": ["success", "error"] + "enum": [ + "success", + "error" + ] }, "data": { "$ref": "#/components/schemas/OptionOutput" } }, - "required": ["status", "data"] + "required": [ + "status", + "data" + ] }, "UpdateOrganizationAttributeOptionInput": { "type": "object", @@ -12309,13 +13541,19 @@ "status": { "type": "string", "example": "success", - "enum": ["success", "error"] + "enum": [ + "success", + "error" + ] }, "data": { "$ref": "#/components/schemas/OptionOutput" } }, - "required": ["status", "data"] + "required": [ + "status", + "data" + ] }, "GetAllAttributeOptionOutput": { "type": "object", @@ -12323,7 +13561,10 @@ "status": { "type": "string", "example": "success", - "enum": ["success", "error"] + "enum": [ + "success", + "error" + ] }, "data": { "type": "array", @@ -12332,7 +13573,10 @@ } } }, - "required": ["status", "data"] + "required": [ + "status", + "data" + ] }, "AssignOrganizationAttributeOptionToUserInput": { "type": "object", @@ -12347,7 +13591,9 @@ "type": "string" } }, - "required": ["attributeId"] + "required": [ + "attributeId" + ] }, "AssignOptionUserOutputData": { "type": "object", @@ -12365,7 +13611,11 @@ "description": "The value of the option" } }, - "required": ["id", "memberId", "attributeOptionId"] + "required": [ + "id", + "memberId", + "attributeOptionId" + ] }, "AssignOptionUserOutput": { "type": "object", @@ -12373,13 +13623,19 @@ "status": { "type": "string", "example": "success", - "enum": ["success", "error"] + "enum": [ + "success", + "error" + ] }, "data": { "$ref": "#/components/schemas/AssignOptionUserOutputData" } }, - "required": ["status", "data"] + "required": [ + "status", + "data" + ] }, "UnassignOptionUserOutput": { "type": "object", @@ -12387,13 +13643,19 @@ "status": { "type": "string", "example": "success", - "enum": ["success", "error"] + "enum": [ + "success", + "error" + ] }, "data": { "$ref": "#/components/schemas/AssignOptionUserOutputData" } }, - "required": ["status", "data"] + "required": [ + "status", + "data" + ] }, "GetOptionUserOutputData": { "type": "object", @@ -12415,7 +13677,12 @@ "description": "The slug of the option" } }, - "required": ["id", "attributeId", "value", "slug"] + "required": [ + "id", + "attributeId", + "value", + "slug" + ] }, "GetOptionUserOutput": { "type": "object", @@ -12423,7 +13690,10 @@ "status": { "type": "string", "example": "success", - "enum": ["success", "error"] + "enum": [ + "success", + "error" + ] }, "data": { "type": "array", @@ -12432,7 +13702,10 @@ } } }, - "required": ["status", "data"] + "required": [ + "status", + "data" + ] }, "TeamWebhookOutputDto": { "type": "object", @@ -12464,7 +13737,14 @@ "type": "string" } }, - "required": ["payloadTemplate", "teamId", "id", "triggers", "subscriberUrl", "active"] + "required": [ + "payloadTemplate", + "teamId", + "id", + "triggers", + "subscriberUrl", + "active" + ] }, "TeamWebhooksOutputResponseDto": { "type": "object", @@ -12472,7 +13752,10 @@ "status": { "type": "string", "example": "success", - "enum": ["success", "error"] + "enum": [ + "success", + "error" + ] }, "data": { "type": "array", @@ -12481,7 +13764,10 @@ } } }, - "required": ["status", "data"] + "required": [ + "status", + "data" + ] }, "CreateWebhookInputDto": { "type": "object", @@ -12534,7 +13820,11 @@ "type": "string" } }, - "required": ["active", "subscriberUrl", "triggers"] + "required": [ + "active", + "subscriberUrl", + "triggers" + ] }, "TeamWebhookOutputResponseDto": { "type": "object", @@ -12542,13 +13832,19 @@ "status": { "type": "string", "example": "success", - "enum": ["success", "error"] + "enum": [ + "success", + "error" + ] }, "data": { "$ref": "#/components/schemas/TeamWebhookOutputDto" } }, - "required": ["status", "data"] + "required": [ + "status", + "data" + ] }, "UpdateWebhookInputDto": { "type": "object", @@ -12631,10 +13927,19 @@ "type": "string", "description": "the reason for the out of office entry, if applicable", "example": "vacation", - "enum": ["unspecified", "vacation", "travel", "sick", "public_holiday"] + "enum": [ + "unspecified", + "vacation", + "travel", + "sick", + "public_holiday" + ] } }, - "required": ["start", "end"] + "required": [ + "start", + "end" + ] }, "UpdateOutOfOfficeEntryDto": { "type": "object", @@ -12665,7 +13970,13 @@ "type": "string", "description": "the reason for the out of office entry, if applicable", "example": "vacation", - "enum": ["unspecified", "vacation", "travel", "sick", "public_holiday"] + "enum": [ + "unspecified", + "vacation", + "travel", + "sick", + "public_holiday" + ] } } }, @@ -12676,7 +13987,9 @@ "type": "string" } }, - "required": ["authUrl"] + "required": [ + "authUrl" + ] }, "StripConnectOutputResponseDto": { "type": "object", @@ -12684,13 +13997,19 @@ "status": { "type": "string", "example": "success", - "enum": ["success", "error"] + "enum": [ + "success", + "error" + ] }, "data": { "$ref": "#/components/schemas/StripConnectOutputDto" } }, - "required": ["status", "data"] + "required": [ + "status", + "data" + ] }, "StripCredentialsSaveOutputResponseDto": { "type": "object", @@ -12699,7 +14018,9 @@ "type": "string" } }, - "required": ["url"] + "required": [ + "url" + ] }, "StripCredentialsCheckOutputResponseDto": { "type": "object", @@ -12709,7 +14030,9 @@ "example": "success" } }, - "required": ["status"] + "required": [ + "status" + ] }, "GetDefaultScheduleOutput_2024_06_11": { "type": "object", @@ -12717,13 +14040,19 @@ "status": { "type": "string", "example": "success", - "enum": ["success", "error"] + "enum": [ + "success", + "error" + ] }, "data": { "$ref": "#/components/schemas/ScheduleOutput_2024_06_11" } }, - "required": ["status", "data"] + "required": [ + "status", + "data" + ] }, "CreateTeamInput": { "type": "object", @@ -12802,7 +14131,9 @@ "default": true } }, - "required": ["name"] + "required": [ + "name" + ] }, "CreateTeamOutput": { "type": "object", @@ -12810,7 +14141,10 @@ "status": { "type": "string", "example": "success", - "enum": ["success", "error"] + "enum": [ + "success", + "error" + ] }, "data": { "oneOf": [ @@ -12824,7 +14158,10 @@ "description": "Either an Output object or a TeamOutputDto." } }, - "required": ["status", "data"] + "required": [ + "status", + "data" + ] }, "TeamOutputDto": { "type": "object", @@ -12897,7 +14234,11 @@ "default": "Sunday" } }, - "required": ["id", "name", "isOrganization"] + "required": [ + "id", + "name", + "isOrganization" + ] }, "GetTeamOutput": { "type": "object", @@ -12905,13 +14246,19 @@ "status": { "type": "string", "example": "success", - "enum": ["success", "error"] + "enum": [ + "success", + "error" + ] }, "data": { "$ref": "#/components/schemas/TeamOutputDto" } }, - "required": ["status", "data"] + "required": [ + "status", + "data" + ] }, "GetTeamsOutput": { "type": "object", @@ -12919,7 +14266,10 @@ "status": { "type": "string", "example": "success", - "enum": ["success", "error"] + "enum": [ + "success", + "error" + ] }, "data": { "type": "array", @@ -12928,7 +14278,10 @@ } } }, - "required": ["status", "data"] + "required": [ + "status", + "data" + ] }, "UpdateTeamOutput": { "type": "object", @@ -12936,56 +14289,19 @@ "status": { "type": "string", "example": "success", - "enum": ["success", "error"] + "enum": [ + "success", + "error" + ] }, "data": { "$ref": "#/components/schemas/TeamOutputDto" } }, - "required": ["status", "data"] - }, - "AuthUrlData": { - "type": "object", - "properties": { - "authUrl": { - "type": "string" - } - }, - "required": ["authUrl"] - }, - "GcalAuthUrlOutput": { - "type": "object", - "properties": { - "status": { - "type": "string", - "example": "success", - "enum": ["success", "error"] - }, - "data": { - "$ref": "#/components/schemas/AuthUrlData" - } - }, - "required": ["status", "data"] - }, - "GcalSaveRedirectOutput": { - "type": "object", - "properties": { - "url": { - "type": "string" - } - }, - "required": ["url"] - }, - "GcalCheckOutput": { - "type": "object", - "properties": { - "status": { - "type": "string", - "example": "success", - "enum": ["success", "error"] - } - }, - "required": ["status"] + "required": [ + "status", + "data" + ] }, "ProviderVerifyClientData": { "type": "object", @@ -13000,7 +14316,11 @@ "type": "string" } }, - "required": ["clientId", "organizationId", "name"] + "required": [ + "clientId", + "organizationId", + "name" + ] }, "ProviderVerifyClientOutput": { "type": "object", @@ -13008,13 +14328,19 @@ "status": { "type": "string", "example": "success", - "enum": ["success", "error"] + "enum": [ + "success", + "error" + ] }, "data": { "$ref": "#/components/schemas/ProviderVerifyClientData" } }, - "required": ["status", "data"] + "required": [ + "status", + "data" + ] }, "ProviderVerifyAccessTokenOutput": { "type": "object", @@ -13022,10 +14348,15 @@ "status": { "type": "string", "example": "success", - "enum": ["success", "error"] + "enum": [ + "success", + "error" + ] } }, - "required": ["status"] + "required": [ + "status" + ] }, "MeOrgOutput": { "type": "object", @@ -13037,7 +14368,10 @@ "type": "number" } }, - "required": ["isPlatform", "id"] + "required": [ + "isPlatform", + "id" + ] }, "MeOutput": { "type": "object", @@ -13089,13 +14423,19 @@ "status": { "type": "string", "example": "success", - "enum": ["success", "error"] + "enum": [ + "success", + "error" + ] }, "data": { "$ref": "#/components/schemas/MeOutput" } }, - "required": ["status", "data"] + "required": [ + "status", + "data" + ] }, "UpdateMeOutput": { "type": "object", @@ -13103,20 +14443,29 @@ "status": { "type": "string", "example": "success", - "enum": ["success", "error"] + "enum": [ + "success", + "error" + ] }, "data": { "$ref": "#/components/schemas/MeOutput" } }, - "required": ["status", "data"] + "required": [ + "status", + "data" + ] }, "CreateIcsFeedInputDto": { "type": "object", "properties": { "urls": { "type": "array", - "example": ["https://cal.com/ics/feed.ics", "http://cal.com/ics/feed.ics"], + "example": [ + "https://cal.com/ics/feed.ics", + "http://cal.com/ics/feed.ics" + ], "description": "An array of ICS URLs", "items": { "type": "string", @@ -13130,7 +14479,9 @@ "description": "Whether to allowing writing to the calendar or not" } }, - "required": ["urls"] + "required": [ + "urls" + ] }, "CreateIcsFeedOutput": { "type": "object", @@ -13170,7 +14521,14 @@ "description": "Whether the calendar credentials are valid or not" } }, - "required": ["id", "type", "userId", "teamId", "appId", "invalid"] + "required": [ + "id", + "type", + "userId", + "teamId", + "appId", + "invalid" + ] }, "CreateIcsFeedOutputResponseDto": { "type": "object", @@ -13178,13 +14536,19 @@ "status": { "type": "string", "example": "success", - "enum": ["success", "error"] + "enum": [ + "success", + "error" + ] }, "data": { "$ref": "#/components/schemas/CreateIcsFeedOutput" } }, - "required": ["status", "data"] + "required": [ + "status", + "data" + ] }, "BusyTimesOutput": { "type": "object", @@ -13202,7 +14566,10 @@ "nullable": true } }, - "required": ["start", "end"] + "required": [ + "start", + "end" + ] }, "GetBusyTimesOutput": { "type": "object", @@ -13210,7 +14577,10 @@ "status": { "type": "string", "example": "success", - "enum": ["success", "error"] + "enum": [ + "success", + "error" + ] }, "data": { "type": "array", @@ -13219,7 +14589,10 @@ } } }, - "required": ["status", "data"] + "required": [ + "status", + "data" + ] }, "Integration": { "type": "object", @@ -13324,7 +14697,13 @@ "type": "number" } }, - "required": ["externalId", "primary", "readOnly", "isSelected", "credentialId"] + "required": [ + "externalId", + "primary", + "readOnly", + "isSelected", + "credentialId" + ] }, "Calendar": { "type": "object", @@ -13355,7 +14734,12 @@ "type": "number" } }, - "required": ["externalId", "readOnly", "isSelected", "credentialId"] + "required": [ + "externalId", + "readOnly", + "isSelected", + "credentialId" + ] }, "ConnectedCalendar": { "type": "object", @@ -13376,7 +14760,10 @@ } } }, - "required": ["integration", "credentialId"] + "required": [ + "integration", + "credentialId" + ] }, "DestinationCalendar": { "type": "object", @@ -13446,7 +14833,10 @@ "$ref": "#/components/schemas/DestinationCalendar" } }, - "required": ["connectedCalendars", "destinationCalendar"] + "required": [ + "connectedCalendars", + "destinationCalendar" + ] }, "ConnectedCalendarsOutput": { "type": "object", @@ -13454,13 +14844,19 @@ "status": { "type": "string", "example": "success", - "enum": ["success", "error"] + "enum": [ + "success", + "error" + ] }, "data": { "$ref": "#/components/schemas/ConnectedCalendarsData" } }, - "required": ["status", "data"] + "required": [ + "status", + "data" + ] }, "DeleteCalendarCredentialsInputBodyDto": { "type": "object", @@ -13471,7 +14867,9 @@ "description": "Credential ID of the calendar to delete, as returned by the /calendars endpoint" } }, - "required": ["id"] + "required": [ + "id" + ] }, "DeletedCalendarCredentialsOutputDto": { "type": "object", @@ -13499,7 +14897,14 @@ "nullable": true } }, - "required": ["id", "type", "userId", "teamId", "appId", "invalid"] + "required": [ + "id", + "type", + "userId", + "teamId", + "appId", + "invalid" + ] }, "DeletedCalendarCredentialsOutputResponseDto": { "type": "object", @@ -13507,13 +14912,19 @@ "status": { "type": "string", "example": "success", - "enum": ["success", "error"] + "enum": [ + "success", + "error" + ] }, "data": { "$ref": "#/components/schemas/DeletedCalendarCredentialsOutputDto" } }, - "required": ["status", "data"] + "required": [ + "status", + "data" + ] }, "Attendee": { "type": "object", @@ -13589,7 +15000,10 @@ "default": "en" } }, - "required": ["name", "timeZone"] + "required": [ + "name", + "timeZone" + ] }, "CreateBookingInput_2024_08_13": { "type": "object", @@ -13619,7 +15033,10 @@ }, "guests": { "description": "An optional list of guest emails attending the event.", - "example": ["guest1@example.com", "guest2@example.com"], + "example": [ + "guest1@example.com", + "guest2@example.com" + ], "type": "array", "items": { "type": "string" @@ -13651,7 +15068,11 @@ } } }, - "required": ["start", "eventTypeId", "attendee"] + "required": [ + "start", + "eventTypeId", + "attendee" + ] }, "CreateInstantBookingInput_2024_08_13": { "type": "object", @@ -13681,7 +15102,10 @@ }, "guests": { "description": "An optional list of guest emails attending the event.", - "example": ["guest1@example.com", "guest2@example.com"], + "example": [ + "guest1@example.com", + "guest2@example.com" + ], "type": "array", "items": { "type": "string" @@ -13718,7 +15142,12 @@ "example": true } }, - "required": ["start", "eventTypeId", "attendee", "instant"] + "required": [ + "start", + "eventTypeId", + "attendee", + "instant" + ] }, "CreateRecurringBookingInput_2024_08_13": { "type": "object", @@ -13748,7 +15177,10 @@ }, "guests": { "description": "An optional list of guest emails attending the event.", - "example": ["guest1@example.com", "guest2@example.com"], + "example": [ + "guest1@example.com", + "guest2@example.com" + ], "type": "array", "items": { "type": "string" @@ -13785,7 +15217,11 @@ "example": 5 } }, - "required": ["start", "eventTypeId", "attendee"] + "required": [ + "start", + "eventTypeId", + "attendee" + ] }, "BookingHost": { "type": "object", @@ -13811,7 +15247,13 @@ "example": "America/Los_Angeles" } }, - "required": ["id", "name", "email", "username", "timeZone"] + "required": [ + "id", + "name", + "email", + "username", + "timeZone" + ] }, "EventType": { "type": "object", @@ -13825,7 +15267,10 @@ "example": "some-event" } }, - "required": ["id", "slug"] + "required": [ + "id", + "slug" + ] }, "BookingOutput_2024_08_13": { "type": "object", @@ -13854,7 +15299,12 @@ }, "status": { "type": "string", - "enum": ["cancelled", "accepted", "rejected", "pending"], + "enum": [ + "cancelled", + "accepted", + "rejected", + "pending" + ], "example": "accepted" }, "cancellationReason": { @@ -13933,7 +15383,10 @@ } }, "guests": { - "example": ["guest1@example.com", "guest2@example.com"], + "example": [ + "guest1@example.com", + "guest2@example.com" + ], "type": "array", "items": { "type": "string" @@ -13994,7 +15447,12 @@ }, "status": { "type": "string", - "enum": ["cancelled", "accepted", "rejected", "pending"], + "enum": [ + "cancelled", + "accepted", + "rejected", + "pending" + ], "example": "accepted" }, "cancellationReason": { @@ -14073,7 +15531,10 @@ } }, "guests": { - "example": ["guest1@example.com", "guest2@example.com"], + "example": [ + "guest1@example.com", + "guest2@example.com" + ], "type": "array", "items": { "type": "string" @@ -14201,7 +15662,14 @@ } } }, - "required": ["name", "email", "timeZone", "absent", "seatUid", "bookingFieldsResponses"] + "required": [ + "name", + "email", + "timeZone", + "absent", + "seatUid", + "bookingFieldsResponses" + ] }, "CreateSeatedBookingOutput_2024_08_13": { "type": "object", @@ -14230,7 +15698,12 @@ }, "status": { "type": "string", - "enum": ["cancelled", "accepted", "rejected", "pending"], + "enum": [ + "cancelled", + "accepted", + "rejected", + "pending" + ], "example": "accepted" }, "cancellationReason": { @@ -14360,7 +15833,12 @@ }, "status": { "type": "string", - "enum": ["cancelled", "accepted", "rejected", "pending"], + "enum": [ + "cancelled", + "accepted", + "rejected", + "pending" + ], "example": "accepted" }, "cancellationReason": { @@ -14474,7 +15952,10 @@ "status": { "type": "string", "example": "success", - "enum": ["success", "error"] + "enum": [ + "success", + "error" + ] }, "data": { "oneOf": [ @@ -14500,7 +15981,10 @@ "description": "Booking data, which can be either a BookingOutput object or an array of RecurringBookingOutput objects" } }, - "required": ["status", "data"] + "required": [ + "status", + "data" + ] }, "GetSeatedBookingOutput_2024_08_13": { "type": "object", @@ -14529,7 +16013,12 @@ }, "status": { "type": "string", - "enum": ["cancelled", "accepted", "rejected", "pending"], + "enum": [ + "cancelled", + "accepted", + "rejected", + "pending" + ], "example": "accepted" }, "cancellationReason": { @@ -14654,7 +16143,12 @@ }, "status": { "type": "string", - "enum": ["cancelled", "accepted", "rejected", "pending"], + "enum": [ + "cancelled", + "accepted", + "rejected", + "pending" + ], "example": "accepted" }, "cancellationReason": { @@ -14763,7 +16257,10 @@ "status": { "type": "string", "example": "success", - "enum": ["success", "error"] + "enum": [ + "success", + "error" + ] }, "data": { "oneOf": [ @@ -14798,7 +16295,10 @@ "type": "object" } }, - "required": ["status", "data"] + "required": [ + "status", + "data" + ] }, "GetBookingsOutput_2024_08_13": { "type": "object", @@ -14806,7 +16306,10 @@ "status": { "type": "string", "example": "success", - "enum": ["success", "error"] + "enum": [ + "success", + "error" + ] }, "data": { "type": "array", @@ -14832,7 +16335,10 @@ "type": "object" } }, - "required": ["status", "data"] + "required": [ + "status", + "data" + ] }, "RescheduleBookingOutput_2024_08_13": { "type": "object", @@ -14840,7 +16346,10 @@ "status": { "type": "string", "example": "success", - "enum": ["success", "error"] + "enum": [ + "success", + "error" + ] }, "data": { "oneOf": [ @@ -14860,7 +16369,10 @@ "description": "Booking data, which can be either a BookingOutput object or a RecurringBookingOutput object" } }, - "required": ["status", "data"] + "required": [ + "status", + "data" + ] }, "CancelBookingOutput_2024_08_13": { "type": "object", @@ -14868,7 +16380,10 @@ "status": { "type": "string", "example": "success", - "enum": ["success", "error"] + "enum": [ + "success", + "error" + ] }, "data": { "oneOf": [ @@ -14900,7 +16415,10 @@ "description": "Booking data, which can be either a BookingOutput object, a RecurringBookingOutput object, or an array of RecurringBookingOutput objects" } }, - "required": ["status", "data"] + "required": [ + "status", + "data" + ] }, "MarkAbsentBookingInput_2024_08_13": { "type": "object", @@ -14924,7 +16442,10 @@ "status": { "type": "string", "example": "success", - "enum": ["success", "error"] + "enum": [ + "success", + "error" + ] }, "data": { "oneOf": [ @@ -14938,7 +16459,10 @@ "description": "Booking data, which can be either a BookingOutput object or a RecurringBookingOutput object" } }, - "required": ["status", "data"] + "required": [ + "status", + "data" + ] }, "ReassignedToDto": { "type": "object", @@ -14956,7 +16480,11 @@ "example": "john.doe@example.com" } }, - "required": ["id", "name", "email"] + "required": [ + "id", + "name", + "email" + ] }, "ReassignBookingOutput_2024_08_13": { "type": "object", @@ -14964,7 +16492,10 @@ "status": { "type": "string", "example": "success", - "enum": ["success", "error"] + "enum": [ + "success", + "error" + ] }, "data": { "oneOf": [ @@ -14980,7 +16511,10 @@ ] } }, - "required": ["status", "data"] + "required": [ + "status", + "data" + ] }, "ReassignToUserBookingInput_2024_08_13": { "type": "object", @@ -15015,14 +16549,20 @@ "role": { "type": "string", "default": "MEMBER", - "enum": ["MEMBER", "OWNER", "ADMIN"] + "enum": [ + "MEMBER", + "OWNER", + "ADMIN" + ] }, "disableImpersonation": { "type": "boolean", "default": false } }, - "required": ["userId"] + "required": [ + "userId" + ] }, "TeamMembershipOutput": { "type": "object", @@ -15041,13 +16581,23 @@ }, "role": { "type": "string", - "enum": ["MEMBER", "OWNER", "ADMIN"] + "enum": [ + "MEMBER", + "OWNER", + "ADMIN" + ] }, "disableImpersonation": { "type": "boolean" } }, - "required": ["id", "userId", "teamId", "accepted", "role"] + "required": [ + "id", + "userId", + "teamId", + "accepted", + "role" + ] }, "CreateTeamMembershipOutput": { "type": "object", @@ -15055,13 +16605,19 @@ "status": { "type": "string", "example": "success", - "enum": ["success", "error"] + "enum": [ + "success", + "error" + ] }, "data": { "$ref": "#/components/schemas/TeamMembershipOutput" } }, - "required": ["status", "data"] + "required": [ + "status", + "data" + ] }, "GetTeamMembershipOutput": { "type": "object", @@ -15069,13 +16625,19 @@ "status": { "type": "string", "example": "success", - "enum": ["success", "error"] + "enum": [ + "success", + "error" + ] }, "data": { "$ref": "#/components/schemas/TeamMembershipOutput" } }, - "required": ["status", "data"] + "required": [ + "status", + "data" + ] }, "GetTeamMembershipsOutput": { "type": "object", @@ -15083,13 +16645,19 @@ "status": { "type": "string", "example": "success", - "enum": ["success", "error"] + "enum": [ + "success", + "error" + ] }, "data": { "$ref": "#/components/schemas/TeamMembershipOutput" } }, - "required": ["status", "data"] + "required": [ + "status", + "data" + ] }, "UpdateTeamMembershipInput": { "type": "object", @@ -15099,7 +16667,11 @@ }, "role": { "type": "string", - "enum": ["MEMBER", "OWNER", "ADMIN"] + "enum": [ + "MEMBER", + "OWNER", + "ADMIN" + ] }, "disableImpersonation": { "type": "boolean" @@ -15112,13 +16684,19 @@ "status": { "type": "string", "example": "success", - "enum": ["success", "error"] + "enum": [ + "success", + "error" + ] }, "data": { "$ref": "#/components/schemas/TeamMembershipOutput" } }, - "required": ["status", "data"] + "required": [ + "status", + "data" + ] }, "DeleteTeamMembershipOutput": { "type": "object", @@ -15126,38 +16704,142 @@ "status": { "type": "string", "example": "success", - "enum": ["success", "error"] + "enum": [ + "success", + "error" + ] }, "data": { "$ref": "#/components/schemas/TeamMembershipOutput" } }, - "required": ["status", "data"] + "required": [ + "status", + "data" + ] }, - "ReserveSlotInput": { + "ReserveSlotInput_2024_09_04": { "type": "object", "properties": { "eventTypeId": { "type": "number", - "description": "Event Type ID for which timeslot is being reserved.", - "example": 100 + "example": 1, + "description": "The ID of the event type for which slot should be reserved." }, - "slotUtcStartDate": { + "slotStart": { "type": "string", - "description": "Start date of the slot in UTC timezone.", - "example": "2022-06-14T00:00:00.000Z" + "example": "2024-09-04T09:00:00Z", + "description": "ISO 8601 datestring in UTC timezone representing available slot." }, - "slotUtcEndDate": { - "type": "string", - "description": "End date of the slot in UTC timezone.", - "example": "2022-06-14T00:30:00.000Z" + "slotDuration": { + "type": "number", + "example": "30", + "description": "By default slot duration is equal to event type length, but if you want to reserve a slot for an event type that has a variable length you can specify it here as a number in minutes. If you don't have this set explicitly that event type can have one of many lengths you can omit this." }, - "bookingUid": { - "type": "string", - "description": "Optional but only for events with seats. Used to retrieve booking of a seated event." + "reservationDuration": { + "type": "number", + "example": 5, + "description": "ONLY for authenticated requests with api key, access token or OAuth credentials (ID + secret).\n \n For how many minutes the slot should be reserved - for this long time noone else can book this event type at `start` time. If not provided, defaults to 5 minutes." } }, - "required": ["eventTypeId", "slotUtcStartDate", "slotUtcEndDate"] + "required": [ + "eventTypeId", + "slotStart" + ] + }, + "ReserveSlotOutput_2024_09_04": { + "type": "object", + "properties": { + "eventTypeId": { + "type": "number", + "example": 1, + "description": "The ID of the event type for which slot was reserved." + }, + "slotStart": { + "type": "string", + "example": "2024-09-04T09:00:00Z", + "description": "ISO 8601 datestring in UTC timezone representing available slot." + }, + "slotEnd": { + "type": "string", + "example": "2024-09-04T10:00:00Z", + "description": "ISO 8601 datestring in UTC timezone representing slot end." + }, + "slotDuration": { + "type": "number", + "example": "30", + "description": "By default slot duration is equal to event type length, but if you want to reserve a slot for an event type that has a variable length you can specify it here. If you don't have this set explicitly that event type can have one of many lengths you can omit this." + }, + "reservationUid": { + "type": "string", + "example": "e84be5a3-4696-49e3-acc7-b2f3999c3b94", + "description": "The unique identifier of the reservation. Use it to update, get or delete the reservation." + }, + "reservationDuration": { + "type": "number", + "example": 5, + "description": "For how many minutes the slot is reserved - for this long time noone else can book this event type at `start` time." + }, + "reservationUntil": { + "type": "string", + "example": "2023-09-04T10:00:00Z", + "description": "ISO 8601 datestring in UTC timezone representing time until which the slot is reserved." + } + }, + "required": [ + "eventTypeId", + "slotStart", + "slotEnd", + "slotDuration", + "reservationUid", + "reservationDuration", + "reservationUntil" + ] + }, + "ReserveSlotOutputResponse_2024_09_04": { + "type": "object", + "properties": { + "status": { + "type": "string", + "example": "success", + "enum": [ + "success", + "error" + ] + }, + "data": { + "$ref": "#/components/schemas/ReserveSlotOutput_2024_09_04" + } + }, + "required": [ + "status", + "data" + ] + }, + "GetReservedSlotOutput_2024_09_04": { + "type": "object", + "properties": { + "status": { + "type": "string", + "example": "success", + "enum": [ + "success", + "error" + ] + }, + "data": { + "nullable": true, + "allOf": [ + { + "$ref": "#/components/schemas/GetReservedSlotOutput_2024_09_04" + } + ] + } + }, + "required": [ + "status", + "data" + ] }, "UserWebhookOutputDto": { "type": "object", @@ -15189,7 +16871,14 @@ "type": "string" } }, - "required": ["payloadTemplate", "userId", "id", "triggers", "subscriberUrl", "active"] + "required": [ + "payloadTemplate", + "userId", + "id", + "triggers", + "subscriberUrl", + "active" + ] }, "UserWebhookOutputResponseDto": { "type": "object", @@ -15197,13 +16886,19 @@ "status": { "type": "string", "example": "success", - "enum": ["success", "error"] + "enum": [ + "success", + "error" + ] }, "data": { "$ref": "#/components/schemas/UserWebhookOutputDto" } }, - "required": ["status", "data"] + "required": [ + "status", + "data" + ] }, "UserWebhooksOutputResponseDto": { "type": "object", @@ -15211,7 +16906,10 @@ "status": { "type": "string", "example": "success", - "enum": ["success", "error"] + "enum": [ + "success", + "error" + ] }, "data": { "type": "array", @@ -15220,7 +16918,10 @@ } } }, - "required": ["status", "data"] + "required": [ + "status", + "data" + ] }, "EventTypeWebhookOutputDto": { "type": "object", @@ -15252,7 +16953,14 @@ "type": "string" } }, - "required": ["payloadTemplate", "eventTypeId", "id", "triggers", "subscriberUrl", "active"] + "required": [ + "payloadTemplate", + "eventTypeId", + "id", + "triggers", + "subscriberUrl", + "active" + ] }, "EventTypeWebhookOutputResponseDto": { "type": "object", @@ -15260,13 +16968,19 @@ "status": { "type": "string", "example": "success", - "enum": ["success", "error"] + "enum": [ + "success", + "error" + ] }, "data": { "$ref": "#/components/schemas/EventTypeWebhookOutputDto" } }, - "required": ["status", "data"] + "required": [ + "status", + "data" + ] }, "EventTypeWebhooksOutputResponseDto": { "type": "object", @@ -15274,7 +16988,10 @@ "status": { "type": "string", "example": "success", - "enum": ["success", "error"] + "enum": [ + "success", + "error" + ] }, "data": { "type": "array", @@ -15283,7 +17000,10 @@ } } }, - "required": ["status", "data"] + "required": [ + "status", + "data" + ] }, "DeleteManyWebhooksOutputResponseDto": { "type": "object", @@ -15291,13 +17011,19 @@ "status": { "type": "string", "example": "success", - "enum": ["success", "error"] + "enum": [ + "success", + "error" + ] }, "data": { "type": "string" } }, - "required": ["status", "data"] + "required": [ + "status", + "data" + ] }, "OAuthClientWebhookOutputDto": { "type": "object", @@ -15329,7 +17055,14 @@ "type": "string" } }, - "required": ["payloadTemplate", "oAuthClientId", "id", "triggers", "subscriberUrl", "active"] + "required": [ + "payloadTemplate", + "oAuthClientId", + "id", + "triggers", + "subscriberUrl", + "active" + ] }, "OAuthClientWebhookOutputResponseDto": { "type": "object", @@ -15337,13 +17070,19 @@ "status": { "type": "string", "example": "success", - "enum": ["success", "error"] + "enum": [ + "success", + "error" + ] }, "data": { "$ref": "#/components/schemas/OAuthClientWebhookOutputDto" } }, - "required": ["status", "data"] + "required": [ + "status", + "data" + ] }, "OAuthClientWebhooksOutputResponseDto": { "type": "object", @@ -15351,7 +17090,10 @@ "status": { "type": "string", "example": "success", - "enum": ["success", "error"] + "enum": [ + "success", + "error" + ] }, "data": { "type": "array", @@ -15360,7 +17102,10 @@ } } }, - "required": ["status", "data"] + "required": [ + "status", + "data" + ] }, "DestinationCalendarsInputBodyDto": { "type": "object", @@ -15369,7 +17114,11 @@ "type": "string", "example": "apple_calendar", "description": "The calendar service you want to integrate, as returned by the /calendars endpoint", - "enum": ["apple_calendar", "google_calendar", "office365_calendar"] + "enum": [ + "apple_calendar", + "google_calendar", + "office365_calendar" + ] }, "externalId": { "type": "string", @@ -15377,7 +17126,10 @@ "description": "Unique identifier used to represent the specfic calendar, as returned by the /calendars endpoint" } }, - "required": ["integration", "externalId"] + "required": [ + "integration", + "externalId" + ] }, "DestinationCalendarsOutputDto": { "type": "object", @@ -15396,7 +17148,12 @@ "nullable": true } }, - "required": ["userId", "integration", "externalId", "credentialId"] + "required": [ + "userId", + "integration", + "externalId", + "credentialId" + ] }, "DestinationCalendarsOutputResponseDto": { "type": "object", @@ -15404,13 +17161,19 @@ "status": { "type": "string", "example": "success", - "enum": ["success", "error"] + "enum": [ + "success", + "error" + ] }, "data": { "$ref": "#/components/schemas/DestinationCalendarsOutputDto" } }, - "required": ["status", "data"] + "required": [ + "status", + "data" + ] }, "ConferencingAppsOutputDto": { "type": "object", @@ -15435,20 +17198,30 @@ "description": "Whether if the connection is working or not." } }, - "required": ["id", "type", "userId"] + "required": [ + "id", + "type", + "userId" + ] }, "ConferencingAppOutputResponseDto": { "type": "object", "properties": { "status": { "type": "string", - "enum": ["success", "error"] + "enum": [ + "success", + "error" + ] }, "data": { "$ref": "#/components/schemas/ConferencingAppsOutputDto" } }, - "required": ["status", "data"] + "required": [ + "status", + "data" + ] }, "GetConferencingAppsOauthUrlResponseDto": { "type": "object", @@ -15456,17 +17229,25 @@ "status": { "type": "string", "example": "success", - "enum": ["success", "error"] + "enum": [ + "success", + "error" + ] } }, - "required": ["status"] + "required": [ + "status" + ] }, "ConferencingAppsOutputResponseDto": { "type": "object", "properties": { "status": { "type": "string", - "enum": ["success", "error"] + "enum": [ + "success", + "error" + ] }, "data": { "type": "array", @@ -15475,7 +17256,10 @@ } } }, - "required": ["status", "data"] + "required": [ + "status", + "data" + ] }, "SetDefaultConferencingAppOutputResponseDto": { "type": "object", @@ -15483,10 +17267,15 @@ "status": { "type": "string", "example": "success", - "enum": ["success", "error"] + "enum": [ + "success", + "error" + ] } }, - "required": ["status"] + "required": [ + "status" + ] }, "DefaultConferencingAppsOutputDto": { "type": "object", @@ -15505,13 +17294,18 @@ "status": { "type": "string", "example": "success", - "enum": ["success", "error"] + "enum": [ + "success", + "error" + ] }, "data": { "$ref": "#/components/schemas/DefaultConferencingAppsOutputDto" } }, - "required": ["status"] + "required": [ + "status" + ] }, "DisconnectConferencingAppOutputResponseDto": { "type": "object", @@ -15519,11 +17313,16 @@ "status": { "type": "string", "example": "success", - "enum": ["success", "error"] + "enum": [ + "success", + "error" + ] } }, - "required": ["status"] + "required": [ + "status" + ] } } } -} +} \ No newline at end of file diff --git a/packages/platform/constants/api.ts b/packages/platform/constants/api.ts index d6386f047a..f3514c8973 100644 --- a/packages/platform/constants/api.ts +++ b/packages/platform/constants/api.ts @@ -57,12 +57,14 @@ export const VERSION_2024_06_14 = "2024-06-14"; export const VERSION_2024_06_11 = "2024-06-11"; export const VERSION_2024_04_15 = "2024-04-15"; export const VERSION_2024_08_13 = "2024-08-13"; +export const VERSION_2024_09_04 = "2024-09-04"; export const API_VERSIONS = [ VERSION_2024_06_14, VERSION_2024_06_11, VERSION_2024_04_15, VERSION_2024_08_13, + VERSION_2024_09_04, ] as const; export type API_VERSIONS_ENUM = (typeof API_VERSIONS)[number]; diff --git a/packages/platform/types/slots/index.ts b/packages/platform/types/slots/index.ts new file mode 100644 index 0000000000..4dbf1f2c22 --- /dev/null +++ b/packages/platform/types/slots/index.ts @@ -0,0 +1,2 @@ +export * from "./slots-2024-04-15"; +export * from "./slots-2024-09-04"; diff --git a/packages/platform/types/slots/slots-2024-04-15/index.ts b/packages/platform/types/slots/slots-2024-04-15/index.ts new file mode 100644 index 0000000000..1ac83e88a7 --- /dev/null +++ b/packages/platform/types/slots/slots-2024-04-15/index.ts @@ -0,0 +1 @@ +export * from "./inputs"; diff --git a/packages/platform/types/slots.ts b/packages/platform/types/slots/slots-2024-04-15/inputs/index.ts similarity index 96% rename from packages/platform/types/slots.ts rename to packages/platform/types/slots/slots-2024-04-15/inputs/index.ts index 449ee623ce..af937ad9ef 100644 --- a/packages/platform/types/slots.ts +++ b/packages/platform/types/slots/slots-2024-04-15/inputs/index.ts @@ -14,7 +14,7 @@ import { import { SlotFormat } from "@calcom/platform-enums"; -export class GetAvailableSlotsInput { +export class GetAvailableSlotsInput_2024_04_15 { @IsDateString() @ApiProperty({ description: "Start date string starting from which to fetch slots in UTC timezone.", @@ -131,7 +131,7 @@ export class GetAvailableSlotsInput { teamMemberEmail?: string; } -export class RemoveSelectedSlotInput { +export class RemoveSelectedSlotInput_2024_04_15 { @IsString() @IsOptional() @ApiProperty({ @@ -142,7 +142,7 @@ export class RemoveSelectedSlotInput { uid?: string; } -export class ReserveSlotInput { +export class ReserveSlotInput_2024_04_15 { @IsInt() @ApiProperty({ description: "Event Type ID for which timeslot is being reserved.", example: 100 }) eventTypeId!: number; diff --git a/packages/platform/types/slots/slots-2024-09-04/index.ts b/packages/platform/types/slots/slots-2024-09-04/index.ts new file mode 100644 index 0000000000..775f90ba48 --- /dev/null +++ b/packages/platform/types/slots/slots-2024-09-04/index.ts @@ -0,0 +1,2 @@ +export * from "./inputs"; +export * from "./outputs"; diff --git a/packages/platform/types/slots/slots-2024-09-04/inputs/get-slots-input.pipe.ts b/packages/platform/types/slots/slots-2024-09-04/inputs/get-slots-input.pipe.ts new file mode 100644 index 0000000000..390deaca7a --- /dev/null +++ b/packages/platform/types/slots/slots-2024-09-04/inputs/get-slots-input.pipe.ts @@ -0,0 +1,105 @@ +import type { PipeTransform } from "@nestjs/common"; +import { Injectable, BadRequestException } from "@nestjs/common"; +import { plainToClass } from "class-transformer"; +import type { ValidationError } from "class-validator"; +import { validateSync } from "class-validator"; + +import { ById_2024_09_04, BySlug_2024_09_04 } from "./get-slots.input"; +import { ByUsernames_2024_09_04 } from "./get-slots.input"; + +export type GetSlotsInput_2024_09_04 = ById_2024_09_04 | BySlug_2024_09_04 | ByUsernames_2024_09_04; + +@Injectable() +export class GetSlotsInputPipe implements PipeTransform { + // note(Lauris): we need empty constructor otherwise v2 can't be started due to error: + // CreateBookingInputPipe is not a constructor + + // eslint-disable-next-line @typescript-eslint/no-empty-function + constructor() {} + + transform(value: GetSlotsInput_2024_09_04): GetSlotsInput_2024_09_04 { + if (!value) { + throw new BadRequestException("Body is required"); + } + if (typeof value !== "object") { + throw new BadRequestException("Body should be an object"); + } + + if (this.isById(value)) { + return this.validateById(value); + } + + if (this.isBySlug(value)) { + return this.validateBySlug(value); + } + + return this.validateByUsernames(value); + } + + validateById(value: ById_2024_09_04) { + const object = plainToClass(ById_2024_09_04, value); + + const errors = validateSync(object, { + whitelist: true, + forbidNonWhitelisted: true, + skipMissingProperties: false, + }); + + if (errors.length > 0) { + throw new BadRequestException(this.formatErrors(errors)); + } + + return object; + } + + validateBySlug(value: BySlug_2024_09_04) { + const object = plainToClass(BySlug_2024_09_04, value); + + const errors = validateSync(object, { + whitelist: true, + forbidNonWhitelisted: true, + skipMissingProperties: false, + }); + + if (errors.length > 0) { + throw new BadRequestException(this.formatErrors(errors)); + } + + return object; + } + + validateByUsernames(value: ByUsernames_2024_09_04) { + const object = plainToClass(ByUsernames_2024_09_04, value); + + const errors = validateSync(object, { + whitelist: true, + forbidNonWhitelisted: true, + skipMissingProperties: false, + }); + + if (errors.length > 0) { + throw new BadRequestException(this.formatErrors(errors)); + } + + return object; + } + + private formatErrors(errors: ValidationError[]): string { + return errors + .map((err) => { + const constraints = err.constraints ? Object.values(err.constraints).join(", ") : ""; + const childrenErrors = + err.children && err.children.length > 0 ? `${this.formatErrors(err.children)}` : ""; + return `${err.property} property is wrong,${constraints} ${childrenErrors}`; + }) + .join(", "); + } + + private isById(value: GetSlotsInput_2024_09_04): value is ById_2024_09_04 { + return value.hasOwnProperty("eventTypeId"); + } + + private isBySlug(value: GetSlotsInput_2024_09_04): value is BySlug_2024_09_04 { + return value.hasOwnProperty("eventTypeSlug"); + } +} diff --git a/packages/platform/types/slots/slots-2024-09-04/inputs/get-slots.input.ts b/packages/platform/types/slots/slots-2024-09-04/inputs/get-slots.input.ts new file mode 100644 index 0000000000..a5491181c6 --- /dev/null +++ b/packages/platform/types/slots/slots-2024-09-04/inputs/get-slots.input.ts @@ -0,0 +1,151 @@ +import { ApiProperty, ApiPropertyOptional } from "@nestjs/swagger"; +import { Transform } from "class-transformer"; +import { + IsDateString, + IsTimeZone, + IsOptional, + IsNumber, + IsString, + IsArray, + ArrayMinSize, + IsEnum, +} from "class-validator"; + +import { SlotFormat } from "@calcom/platform-enums"; + +class GetAvailableSlotsInput_2024_09_04 { + @IsDateString() + @ApiProperty({ + type: String, + description: ` + Time starting from which available slots should be checked. + + Must be in UTC timezone as ISO 8601 datestring. + + You can pass date without hours which defaults to start of day or specify hours: + 2024-08-13 (will have hours 00:00:00 aka at very beginning of the date) or you can specify hours manually like 2024-08-13T09:00:00Z + `, + example: "2050-09-05", + }) + start!: string; + + @IsDateString() + @ApiProperty({ + type: String, + description: ` + Time until which available slots should be checked. + + Must be in UTC timezone as ISO 8601 datestring. + + You can pass date without hours which defaults to end of day or specify hours: + 2024-08-20 (will have hours 23:59:59 aka at the very end of the date) or you can specify hours manually like 2024-08-20T18:00:00Z`, + example: "2050-09-06", + }) + end!: string; + + @IsTimeZone() + @IsOptional() + @ApiPropertyOptional({ + type: String, + description: "Time zone in which the available slots should be returned. Defaults to UTC.", + example: "Europe/Rome", + }) + timeZone?: string; + + @Transform(({ value }: { value: string }) => value && parseInt(value)) + @IsNumber() + @IsOptional() + @ApiPropertyOptional({ + type: Number, + description: + "If event type has multiple possible durations then you can specify the desired duration here. Also, if you are fetching slots for a dynamic event then you can specify the duration her which defaults to 30, meaning that returned slots will be each 30 minutes long.", + example: "60", + }) + duration?: number; + + @IsString() + @IsEnum(SlotFormat, { + message: "slotFormat must be either 'range' or 'time'", + }) + @Transform(({ value }) => { + if (!value) return undefined; + return value.toLowerCase(); + }) + @IsOptional() + @ApiPropertyOptional({ + description: "Format of slot times in response. Use 'range' to get start and end times.", + example: "range", + enum: SlotFormat, + }) + format?: SlotFormat; +} + +export class ById_2024_09_04 extends GetAvailableSlotsInput_2024_09_04 { + @Transform(({ value }: { value: string }) => value && parseInt(value)) + @IsNumber() + @ApiProperty({ + type: Number, + description: "The ID of the event type for which available slots should be checked.", + example: "100", + }) + eventTypeId!: number; +} + +export class BySlug_2024_09_04 extends GetAvailableSlotsInput_2024_09_04 { + @IsString() + @ApiProperty({ + type: String, + description: "The slug of the event type for which available slots should be checked.", + example: "event-type-slug", + }) + eventTypeSlug!: string; + + @IsString() + @ApiProperty({ + type: String, + description: + "When searching by eventTypeSlug a username must be provided too aka username of the owner of the event type.", + example: "bob", + }) + username!: string; + + @IsString() + @IsOptional() + @ApiProperty({ + type: String, + description: + "Organzation slug in which the slots of event type belonging to the specified username should be checked.", + example: "org-slug", + }) + organizationSlug?: string; +} + +export class ByUsernames_2024_09_04 extends GetAvailableSlotsInput_2024_09_04 { + @Transform(({ value }) => { + if (typeof value === "string") { + return value.split(",").map((username: string) => username.trim()); + } + return value; + }) + @IsArray() + @ArrayMinSize(2, { message: "The array must contain at least 2 elements." }) + @IsString({ each: true }) + @ApiProperty({ + type: [String], + description: `The usernames for which available slots should be checked. + + Checking slots by usernames is used mainly for dynamic event where there is no specific event but we just want to know when are 2 or more people available. + + Must contain at least 2 usernames e.g. ?usernames=alice,bob`, + example: ["username1", "username2"], + }) + usernames!: string[]; + + @IsString() + @ApiProperty({ + type: String, + description: "Slug of the organization to which each user in the `usernames` array belongs.", + example: "org-slug", + }) + organizationSlug!: string; +} diff --git a/packages/platform/types/slots/slots-2024-09-04/inputs/index.ts b/packages/platform/types/slots/slots-2024-09-04/inputs/index.ts new file mode 100644 index 0000000000..9b0c47ee2c --- /dev/null +++ b/packages/platform/types/slots/slots-2024-09-04/inputs/index.ts @@ -0,0 +1,3 @@ +export * from "./reserve-slot.input"; +export * from "./get-slots-input.pipe"; +export * from "./get-slots.input"; diff --git a/packages/platform/types/slots/slots-2024-09-04/inputs/reserve-slot.input.ts b/packages/platform/types/slots/slots-2024-09-04/inputs/reserve-slot.input.ts new file mode 100644 index 0000000000..cc0fe5383a --- /dev/null +++ b/packages/platform/types/slots/slots-2024-09-04/inputs/reserve-slot.input.ts @@ -0,0 +1,34 @@ +import { ApiProperty, ApiPropertyOptional } from "@nestjs/swagger"; +import { IsInt, IsDateString, IsOptional } from "class-validator"; + +export class ReserveSlotInput_2024_09_04 { + @IsInt() + @ApiProperty({ example: 1, description: "The ID of the event type for which slot should be reserved." }) + eventTypeId!: number; + + @IsDateString() + @ApiProperty({ + example: "2024-09-04T09:00:00Z", + description: "ISO 8601 datestring in UTC timezone representing available slot.", + }) + slotStart!: string; + + @IsInt() + @IsOptional() + @ApiPropertyOptional({ + example: "30", + description: + "By default slot duration is equal to event type length, but if you want to reserve a slot for an event type that has a variable length you can specify it here as a number in minutes. If you don't have this set explicitly that event type can have one of many lengths you can omit this.", + }) + slotDuration?: number; + + @IsInt() + @IsOptional() + @ApiPropertyOptional({ + example: 5, + description: `ONLY for authenticated requests with api key, access token or OAuth credentials (ID + secret). + + For how many minutes the slot should be reserved - for this long time noone else can book this event type at \`start\` time. If not provided, defaults to 5 minutes.`, + }) + reservationDuration?: number; +} diff --git a/packages/platform/types/slots/slots-2024-09-04/outputs/get-reserved-slot.output.ts b/packages/platform/types/slots/slots-2024-09-04/outputs/get-reserved-slot.output.ts new file mode 100644 index 0000000000..ce381d2c58 --- /dev/null +++ b/packages/platform/types/slots/slots-2024-09-04/outputs/get-reserved-slot.output.ts @@ -0,0 +1,50 @@ +import { ApiProperty } from "@nestjs/swagger"; +import { Expose } from "class-transformer"; +import { IsDateString, IsString, IsInt } from "class-validator"; + +export class GetReservedSlotOutput_2024_09_04 { + @IsString() + @ApiProperty({ + example: "e84be5a3-4696-49e3-acc7-b2f3999c3b94", + description: "The unique identifier of the reservation.", + }) + @Expose() + reservationUid!: string; + + @IsInt() + @ApiProperty({ example: 1, description: "The ID of the event type for which booking should be reserved." }) + @Expose() + eventTypeId!: number; + + @IsDateString() + @ApiProperty({ + example: "2024-09-04T09:00:00Z", + description: "ISO 8601 datestring in UTC timezone representing available slot.", + }) + @Expose() + slotStart!: string; + + @IsDateString() + @ApiProperty({ + example: "2024-09-04T10:00:00Z", + description: "ISO 8601 datestring in UTC timezone representing slot end.", + }) + @Expose() + slotEnd!: string; + + @IsInt() + @ApiProperty({ + example: "30", + description: "Difference in minutes between slotStart and slotEnd.", + }) + @Expose() + slotDuration!: number; + + @IsDateString() + @ApiProperty({ + example: "2023-09-04T10:00:00Z", + description: "ISO 8601 datestring in UTC timezone representing time until which the slot is reserved.", + }) + @Expose() + reservationUntil!: string; +} diff --git a/packages/platform/types/slots/slots-2024-09-04/outputs/index.ts b/packages/platform/types/slots/slots-2024-09-04/outputs/index.ts new file mode 100644 index 0000000000..d8b282c53a --- /dev/null +++ b/packages/platform/types/slots/slots-2024-09-04/outputs/index.ts @@ -0,0 +1,3 @@ +export * from "./slots.output"; +export * from "./reserve-slot.output"; +export * from "./get-reserved-slot.output"; diff --git a/packages/platform/types/slots/slots-2024-09-04/outputs/reserve-slot.output.ts b/packages/platform/types/slots/slots-2024-09-04/outputs/reserve-slot.output.ts new file mode 100644 index 0000000000..8e6aca2402 --- /dev/null +++ b/packages/platform/types/slots/slots-2024-09-04/outputs/reserve-slot.output.ts @@ -0,0 +1,60 @@ +import { ApiProperty } from "@nestjs/swagger"; +import { Expose } from "class-transformer"; +import { IsDateString, IsInt, IsString } from "class-validator"; + +export class ReserveSlotOutput_2024_09_04 { + @IsInt() + @ApiProperty({ example: 1, description: "The ID of the event type for which slot was reserved." }) + @Expose() + eventTypeId!: number; + + @IsDateString() + @ApiProperty({ + example: "2024-09-04T09:00:00Z", + description: "ISO 8601 datestring in UTC timezone representing available slot.", + }) + @Expose() + slotStart!: string; + + @IsDateString() + @ApiProperty({ + example: "2024-09-04T10:00:00Z", + description: "ISO 8601 datestring in UTC timezone representing slot end.", + }) + @Expose() + slotEnd!: string; + + @IsInt() + @ApiProperty({ + example: "30", + description: + "By default slot duration is equal to event type length, but if you want to reserve a slot for an event type that has a variable length you can specify it here. If you don't have this set explicitly that event type can have one of many lengths you can omit this.", + }) + @Expose() + slotDuration!: number; + + @IsString() + @ApiProperty({ + example: "e84be5a3-4696-49e3-acc7-b2f3999c3b94", + description: "The unique identifier of the reservation. Use it to update, get or delete the reservation.", + }) + @Expose() + reservationUid!: string; + + @IsInt() + @ApiProperty({ + example: 5, + description: + "For how many minutes the slot is reserved - for this long time noone else can book this event type at `start` time.", + }) + @Expose() + reservationDuration!: number; + + @IsDateString() + @ApiProperty({ + example: "2023-09-04T10:00:00Z", + description: "ISO 8601 datestring in UTC timezone representing time until which the slot is reserved.", + }) + @Expose() + reservationUntil!: string; +} diff --git a/packages/platform/types/slots/slots-2024-09-04/outputs/slots.output.ts b/packages/platform/types/slots/slots-2024-09-04/outputs/slots.output.ts new file mode 100644 index 0000000000..4a5d6746bf --- /dev/null +++ b/packages/platform/types/slots/slots-2024-09-04/outputs/slots.output.ts @@ -0,0 +1,57 @@ +import { ApiProperty } from "@nestjs/swagger"; +import { IsDateString, IsInt, IsString } from "class-validator"; + +export class Slot_2024_09_04 { + @ApiProperty({ description: "Start time of slot." }) + @IsDateString() + start!: string; +} + +export class SeatedSlot_2024_09_04 extends Slot_2024_09_04 { + @ApiProperty({ description: "How many attendees are attending seated event at this slot." }) + @IsInt() + seatsBooked!: number; + + @ApiProperty({ description: "How many seats are remaining at this slot." }) + @IsInt() + seatsRemaining!: number; + + @ApiProperty({ description: "Total number of seats for the event type" }) + @IsInt() + seatsTotal!: number; + + @ApiProperty({ description: "Unique identifier of the booking of the seated event." }) + @IsString() + bookingUid?: string; +} + +export class SlotsOutput_2024_09_04 { + [key: string]: (Slot_2024_09_04 | SeatedSlot_2024_09_04)[]; +} + +export class RangeSlot_2024_09_04 extends Slot_2024_09_04 { + @ApiProperty({ description: "End time of slot." }) + @IsDateString() + end!: string; +} + +export class SeatedRangeSlot_2024_09_04 extends RangeSlot_2024_09_04 { + @ApiProperty({ description: "How many attendees are attending seated event at this slot." }) + @IsInt() + seatsBooked!: number; + + @ApiProperty({ description: "How many seats are remaining at this slot." }) + @IsInt() + seatsRemaining!: number; + + @ApiProperty({ description: "Total number of seats for the event type" }) + @IsInt() + seatsTotal!: number; + + @ApiProperty({ description: "Unique identifier of the booking of the seated event." }) + @IsString() + bookingUid?: string; +} +export class RangeSlotsOutput_2024_09_04 { + [key: string]: (RangeSlot_2024_09_04 | SeatedRangeSlot_2024_09_04)[]; +} diff --git a/yarn.lock b/yarn.lock index bc8090af83..6cdf81c8a2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5,6 +5,46 @@ __metadata: version: 6 cacheKey: 8 +"@0no-co/graphql.web@npm:^1.0.1": + version: 1.0.13 + resolution: "@0no-co/graphql.web@npm:1.0.13" + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 + peerDependenciesMeta: + graphql: + optional: true + checksum: d5899f374618d73620c04f85fd5f90ea469b153b3d484c1f203042864530f3439c552a56944d2f3e7f8026b26b14d62d7a592d3b1670eb5386ee2d71833e3ae1 + languageName: node + linkType: hard + +"@47ng/cloak@npm:^1.2.0": + version: 1.2.0 + resolution: "@47ng/cloak@npm:1.2.0" + dependencies: + "@47ng/codec": ^1.0.1 + "@stablelib/base64": ^1.0.1 + "@stablelib/hex": ^1.0.1 + "@stablelib/utf8": ^1.0.1 + chalk: ^4.1.2 + commander: ^8.3.0 + dotenv: ^10.0.0 + s-ago: ^2.2.0 + bin: + cloak: dist/cli.js + checksum: bb023a28a4c8ecd112ec19679cfa23cfbc279bb995180187cb1dedee39468810590c6dc5f57f786e4137b884d1f407a85fb93194c82f75109515d7cbd73ee341 + languageName: node + linkType: hard + +"@47ng/codec@npm:^1.0.1": + version: 1.1.0 + resolution: "@47ng/codec@npm:1.1.0" + dependencies: + "@stablelib/base64": ^1.0.1 + "@stablelib/hex": ^1.0.1 + checksum: 4f780c4413fe78bbedbaff4135340c0e5f5a30df88f5cffbec51349eb0a1c909728e6c2bbda52506ff8c12653bf39b78c67b78bbe9501b0b9741da0cdaeec6ff + languageName: node + linkType: hard + "@adobe/css-tools@npm:^4.0.1": version: 4.2.0 resolution: "@adobe/css-tools@npm:4.2.0" @@ -12,6 +52,17 @@ __metadata: languageName: node linkType: hard +"@algora/sdk@npm:^0.1.2": + version: 0.1.3 + resolution: "@algora/sdk@npm:0.1.3" + dependencies: + "@trpc/client": ^10.0.0 + "@trpc/server": ^10.0.0 + superjson: ^1.9.1 + checksum: 1b99e0f155181beefe12b625969166f4ecfa42d334706224d0a9a4e9ad72e2cda7335712c47290df7aeeeb003a9773ff5babce7cbee8fb8d1c5ded4ad81c80c1 + languageName: node + linkType: hard + "@alloc/quick-lru@npm:^5.2.0": version: 5.2.0 resolution: "@alloc/quick-lru@npm:5.2.0" @@ -141,6 +192,30 @@ __metadata: languageName: node linkType: hard +"@ardatan/relay-compiler@npm:^12.0.1": + version: 12.0.1 + resolution: "@ardatan/relay-compiler@npm:12.0.1" + dependencies: + "@babel/generator": ^7.14.0 + "@babel/parser": ^7.14.0 + "@babel/runtime": ^7.0.0 + babel-preset-fbjs: ^3.4.0 + chalk: ^4.0.0 + fb-watchman: ^2.0.0 + fbjs: ^3.0.0 + immutable: ~3.7.6 + invariant: ^2.2.4 + nullthrows: ^1.1.1 + relay-runtime: 12.0.0 + signedsource: ^1.0.0 + peerDependencies: + graphql: "*" + bin: + relay-compiler: bin/relay-compiler + checksum: 9ac40be43d3963c25d9a2011b3f4ca6f11d475fb27dc670d88768c4d34703b66dc9508f97a023966f592674860ef94b6aa2fce389087f930557d2d7d0283747f + languageName: node + linkType: hard + "@aw-web-design/x-default-browser@npm:1.4.126": version: 1.4.126 resolution: "@aw-web-design/x-default-browser@npm:1.4.126" @@ -1075,6 +1150,24 @@ __metadata: languageName: node linkType: hard +"@babel/code-frame@npm:^7.26.2": + version: 7.26.2 + resolution: "@babel/code-frame@npm:7.26.2" + dependencies: + "@babel/helper-validator-identifier": ^7.25.9 + js-tokens: ^4.0.0 + picocolors: ^1.0.0 + checksum: db13f5c42d54b76c1480916485e6900748bbcb0014a8aca87f50a091f70ff4e0d0a6db63cade75eb41fcc3d2b6ba0a7f89e343def4f96f00269b41b8ab8dd7b8 + languageName: node + linkType: hard + +"@babel/compat-data@npm:^7.20.5, @babel/compat-data@npm:^7.26.5": + version: 7.26.5 + resolution: "@babel/compat-data@npm:7.26.5" + checksum: 7aaac0e79cf6f38478b877b1185413390bfe8ce9f2a19f906cfdf898df82f5a932579bee49c5d0d0a6fd838c715ff59d4958bfd161ef0e857e5eb083efb707b4 + languageName: node + linkType: hard + "@babel/compat-data@npm:^7.22.6, @babel/compat-data@npm:^7.22.9": version: 7.22.9 resolution: "@babel/compat-data@npm:7.22.9" @@ -1165,6 +1258,30 @@ __metadata: languageName: node linkType: hard +"@babel/core@npm:^7.22.9": + version: 7.26.8 + resolution: "@babel/core@npm:7.26.8" + dependencies: + "@ampproject/remapping": ^2.2.0 + "@babel/code-frame": ^7.26.2 + "@babel/generator": ^7.26.8 + "@babel/helper-compilation-targets": ^7.26.5 + "@babel/helper-module-transforms": ^7.26.0 + "@babel/helpers": ^7.26.7 + "@babel/parser": ^7.26.8 + "@babel/template": ^7.26.8 + "@babel/traverse": ^7.26.8 + "@babel/types": ^7.26.8 + "@types/gensync": ^1.0.0 + convert-source-map: ^2.0.0 + debug: ^4.1.0 + gensync: ^1.0.0-beta.2 + json5: ^2.2.3 + semver: ^6.3.1 + checksum: 9d83fb7ad33467fc5ed841d24158d01b7c486ad399d7988232ab9edc6d9f92cd4d60b598ca717aeeb136feb48f7e289c247663c6a28e85dee92a39b2e97cc2e1 + languageName: node + linkType: hard + "@babel/core@npm:^7.23.5, @babel/core@npm:^7.23.9": version: 7.24.0 resolution: "@babel/core@npm:7.24.0" @@ -1199,6 +1316,19 @@ __metadata: languageName: node linkType: hard +"@babel/generator@npm:^7.14.0, @babel/generator@npm:^7.18.13, @babel/generator@npm:^7.26.8": + version: 7.26.8 + resolution: "@babel/generator@npm:7.26.8" + dependencies: + "@babel/parser": ^7.26.8 + "@babel/types": ^7.26.8 + "@jridgewell/gen-mapping": ^0.3.5 + "@jridgewell/trace-mapping": ^0.3.25 + jsesc: ^3.0.2 + checksum: 15ef65699a556f1c75edba52109e65a597a3e16da2faf117d617e67b667983d5e3cd11399a1d6ff9ff1b0029f8e7c9513975884704b6c2d13bba3d780456823d + languageName: node + linkType: hard + "@babel/generator@npm:^7.17.3, @babel/generator@npm:^7.22.10": version: 7.22.10 resolution: "@babel/generator@npm:7.22.10" @@ -1259,6 +1389,15 @@ __metadata: languageName: node linkType: hard +"@babel/helper-annotate-as-pure@npm:^7.18.6, @babel/helper-annotate-as-pure@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-annotate-as-pure@npm:7.25.9" + dependencies: + "@babel/types": ^7.25.9 + checksum: 41edda10df1ae106a9b4fe617bf7c6df77db992992afd46192534f5cff29f9e49a303231733782dd65c5f9409714a529f215325569f14282046e9d3b7a1ffb6c + languageName: node + linkType: hard + "@babel/helper-annotate-as-pure@npm:^7.22.5": version: 7.22.5 resolution: "@babel/helper-annotate-as-pure@npm:7.22.5" @@ -1277,6 +1416,19 @@ __metadata: languageName: node linkType: hard +"@babel/helper-compilation-targets@npm:^7.20.7, @babel/helper-compilation-targets@npm:^7.25.9, @babel/helper-compilation-targets@npm:^7.26.5": + version: 7.26.5 + resolution: "@babel/helper-compilation-targets@npm:7.26.5" + dependencies: + "@babel/compat-data": ^7.26.5 + "@babel/helper-validator-option": ^7.25.9 + browserslist: ^4.24.0 + lru-cache: ^5.1.1 + semver: ^6.3.1 + checksum: 6bc0107613bf1d4d21913606e8e517194e5099a24db2a8374568e56ef4626e8140f9b8f8a4aabc35479f5904459a0aead2a91ee0dc63aae110ccbc2bc4b4fda1 + languageName: node + linkType: hard + "@babel/helper-compilation-targets@npm:^7.22.10, @babel/helper-compilation-targets@npm:^7.22.6": version: 7.22.10 resolution: "@babel/helper-compilation-targets@npm:7.22.10" @@ -1329,6 +1481,23 @@ __metadata: languageName: node linkType: hard +"@babel/helper-create-class-features-plugin@npm:^7.18.6, @babel/helper-create-class-features-plugin@npm:^7.21.0": + version: 7.25.9 + resolution: "@babel/helper-create-class-features-plugin@npm:7.25.9" + dependencies: + "@babel/helper-annotate-as-pure": ^7.25.9 + "@babel/helper-member-expression-to-functions": ^7.25.9 + "@babel/helper-optimise-call-expression": ^7.25.9 + "@babel/helper-replace-supers": ^7.25.9 + "@babel/helper-skip-transparent-expression-wrappers": ^7.25.9 + "@babel/traverse": ^7.25.9 + semver: ^6.3.1 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 91dd5f203ed04568c70b052e2f26dfaac7c146447196c00b8ecbb6d3d2f3b517abadb985d3321a19d143adaed6fe17f7f79f8f50e0c20e9d8ad83e1027b42424 + languageName: node + linkType: hard + "@babel/helper-create-class-features-plugin@npm:^7.22.15, @babel/helper-create-class-features-plugin@npm:^7.23.5": version: 7.23.5 resolution: "@babel/helper-create-class-features-plugin@npm:7.23.5" @@ -1497,6 +1666,16 @@ __metadata: languageName: node linkType: hard +"@babel/helper-member-expression-to-functions@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-member-expression-to-functions@npm:7.25.9" + dependencies: + "@babel/traverse": ^7.25.9 + "@babel/types": ^7.25.9 + checksum: 8e2f1979b6d596ac2a8cbf17f2cf709180fefc274ac3331408b48203fe19134ed87800774ef18838d0275c3965130bae22980d90caed756b7493631d4b2cf961 + languageName: node + linkType: hard + "@babel/helper-module-imports@npm:^7.12.13, @babel/helper-module-imports@npm:^7.22.5": version: 7.22.5 resolution: "@babel/helper-module-imports@npm:7.22.5" @@ -1525,6 +1704,16 @@ __metadata: languageName: node linkType: hard +"@babel/helper-module-imports@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-module-imports@npm:7.25.9" + dependencies: + "@babel/traverse": ^7.25.9 + "@babel/types": ^7.25.9 + checksum: 1b411ce4ca825422ef7065dffae7d8acef52023e51ad096351e3e2c05837e9bf9fca2af9ca7f28dc26d596a588863d0fedd40711a88e350b736c619a80e704e6 + languageName: node + linkType: hard + "@babel/helper-module-transforms@npm:^7.22.9": version: 7.22.9 resolution: "@babel/helper-module-transforms@npm:7.22.9" @@ -1570,6 +1759,19 @@ __metadata: languageName: node linkType: hard +"@babel/helper-module-transforms@npm:^7.26.0": + version: 7.26.0 + resolution: "@babel/helper-module-transforms@npm:7.26.0" + dependencies: + "@babel/helper-module-imports": ^7.25.9 + "@babel/helper-validator-identifier": ^7.25.9 + "@babel/traverse": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 942eee3adf2b387443c247a2c190c17c4fd45ba92a23087abab4c804f40541790d51ad5277e4b5b1ed8d5ba5b62de73857446b7742f835c18ebd350384e63917 + languageName: node + linkType: hard + "@babel/helper-optimise-call-expression@npm:^7.22.5": version: 7.22.5 resolution: "@babel/helper-optimise-call-expression@npm:7.22.5" @@ -1579,6 +1781,15 @@ __metadata: languageName: node linkType: hard +"@babel/helper-optimise-call-expression@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-optimise-call-expression@npm:7.25.9" + dependencies: + "@babel/types": ^7.25.9 + checksum: f09d0ad60c0715b9a60c31841b3246b47d67650c512ce85bbe24a3124f1a4d66377df793af393273bc6e1015b0a9c799626c48e53747581c1582b99167cc65dc + languageName: node + linkType: hard + "@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.10.4, @babel/helper-plugin-utils@npm:^7.12.13, @babel/helper-plugin-utils@npm:^7.14.5, @babel/helper-plugin-utils@npm:^7.18.6, @babel/helper-plugin-utils@npm:^7.22.5, @babel/helper-plugin-utils@npm:^7.8.0, @babel/helper-plugin-utils@npm:^7.8.3": version: 7.22.5 resolution: "@babel/helper-plugin-utils@npm:7.22.5" @@ -1586,6 +1797,13 @@ __metadata: languageName: node linkType: hard +"@babel/helper-plugin-utils@npm:^7.20.2, @babel/helper-plugin-utils@npm:^7.25.9, @babel/helper-plugin-utils@npm:^7.26.5": + version: 7.26.5 + resolution: "@babel/helper-plugin-utils@npm:7.26.5" + checksum: 4771fbb1711c624c62d12deabc2ed7435a6e6994b6ce09d5ede1bc1bf19be59c3775461a1e693bdd596af865685e87bb2abc778f62ceadc1b2095a8e2aa74180 + languageName: node + linkType: hard + "@babel/helper-remap-async-to-generator@npm:^7.22.20": version: 7.22.20 resolution: "@babel/helper-remap-async-to-generator@npm:7.22.20" @@ -1625,6 +1843,19 @@ __metadata: languageName: node linkType: hard +"@babel/helper-replace-supers@npm:^7.25.9": + version: 7.26.5 + resolution: "@babel/helper-replace-supers@npm:7.26.5" + dependencies: + "@babel/helper-member-expression-to-functions": ^7.25.9 + "@babel/helper-optimise-call-expression": ^7.25.9 + "@babel/traverse": ^7.26.5 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: c5ab31b29c7cc09e30278f8860ecdb873ce6c84b5c08bc5239c369c7c4fe9f0a63cda61b55b7bbd20edb4e5dc32e73087cc3c57d85264834bd191551d1499185 + languageName: node + linkType: hard + "@babel/helper-simple-access@npm:^7.22.5": version: 7.22.5 resolution: "@babel/helper-simple-access@npm:7.22.5" @@ -1653,6 +1884,16 @@ __metadata: languageName: node linkType: hard +"@babel/helper-skip-transparent-expression-wrappers@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-skip-transparent-expression-wrappers@npm:7.25.9" + dependencies: + "@babel/traverse": ^7.25.9 + "@babel/types": ^7.25.9 + checksum: fdbb5248932198bc26daa6abf0d2ac42cab9c2dbb75b7e9f40d425c8f28f09620b886d40e7f9e4e08ffc7aaa2cefe6fc2c44be7c20e81f7526634702fb615bdc + languageName: node + linkType: hard + "@babel/helper-split-export-declaration@npm:^7.16.7, @babel/helper-split-export-declaration@npm:^7.22.6": version: 7.22.6 resolution: "@babel/helper-split-export-declaration@npm:7.22.6" @@ -1692,6 +1933,13 @@ __metadata: languageName: node linkType: hard +"@babel/helper-string-parser@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-string-parser@npm:7.25.9" + checksum: 6435ee0849e101681c1849868278b5aee82686ba2c1e27280e5e8aca6233af6810d39f8e4e693d2f2a44a3728a6ccfd66f72d71826a94105b86b731697cdfa99 + languageName: node + linkType: hard + "@babel/helper-validator-identifier@npm:^7.16.7, @babel/helper-validator-identifier@npm:^7.22.5": version: 7.22.5 resolution: "@babel/helper-validator-identifier@npm:7.22.5" @@ -1713,6 +1961,13 @@ __metadata: languageName: node linkType: hard +"@babel/helper-validator-identifier@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-validator-identifier@npm:7.25.9" + checksum: 5b85918cb1a92a7f3f508ea02699e8d2422fe17ea8e82acd445006c0ef7520fbf48e3dbcdaf7b0a1d571fc3a2715a29719e5226636cb6042e15fe6ed2a590944 + languageName: node + linkType: hard + "@babel/helper-validator-option@npm:^7.22.15": version: 7.22.15 resolution: "@babel/helper-validator-option@npm:7.22.15" @@ -1741,6 +1996,13 @@ __metadata: languageName: node linkType: hard +"@babel/helper-validator-option@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-validator-option@npm:7.25.9" + checksum: 9491b2755948ebbdd68f87da907283698e663b5af2d2b1b02a2765761974b1120d5d8d49e9175b167f16f72748ffceec8c9cf62acfbee73f4904507b246e2b3d + languageName: node + linkType: hard + "@babel/helper-wrap-function@npm:^7.22.20": version: 7.22.20 resolution: "@babel/helper-wrap-function@npm:7.22.20" @@ -1795,6 +2057,16 @@ __metadata: languageName: node linkType: hard +"@babel/helpers@npm:^7.26.7": + version: 7.26.7 + resolution: "@babel/helpers@npm:7.26.7" + dependencies: + "@babel/template": ^7.25.9 + "@babel/types": ^7.26.7 + checksum: 1c93604c7fd6dbd7aa6f3eb2f9fa56369f9ad02bac8b3afb902de6cd4264beb443cc8589bede3790ca28d7477d4c07801fe6f4943f9833ac5956b72708bbd7ac + languageName: node + linkType: hard + "@babel/highlight@npm:^7.22.13": version: 7.22.13 resolution: "@babel/highlight@npm:7.22.13" @@ -1838,6 +2110,17 @@ __metadata: languageName: node linkType: hard +"@babel/parser@npm:^7.14.0, @babel/parser@npm:^7.16.8, @babel/parser@npm:^7.26.8": + version: 7.26.8 + resolution: "@babel/parser@npm:7.26.8" + dependencies: + "@babel/types": ^7.26.8 + bin: + parser: ./bin/babel-parser.js + checksum: 2ede62d2451eaf37f524f2048ca41994466c81bda1f5acec36fbd8931fe77bf365e2b2060972735165e40aec305e04af76dd4d8fa895bc08a250215b32356577 + languageName: node + linkType: hard + "@babel/parser@npm:^7.14.7, @babel/parser@npm:^7.17.3, @babel/parser@npm:^7.20.5, @babel/parser@npm:^7.22.11, @babel/parser@npm:^7.22.5": version: 7.22.14 resolution: "@babel/parser@npm:7.22.14" @@ -1910,6 +2193,33 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-proposal-class-properties@npm:^7.0.0": + version: 7.18.6 + resolution: "@babel/plugin-proposal-class-properties@npm:7.18.6" + dependencies: + "@babel/helper-create-class-features-plugin": ^7.18.6 + "@babel/helper-plugin-utils": ^7.18.6 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 49a78a2773ec0db56e915d9797e44fd079ab8a9b2e1716e0df07c92532f2c65d76aeda9543883916b8e0ff13606afeffa67c5b93d05b607bc87653ad18a91422 + languageName: node + linkType: hard + +"@babel/plugin-proposal-object-rest-spread@npm:^7.0.0": + version: 7.20.7 + resolution: "@babel/plugin-proposal-object-rest-spread@npm:7.20.7" + dependencies: + "@babel/compat-data": ^7.20.5 + "@babel/helper-compilation-targets": ^7.20.7 + "@babel/helper-plugin-utils": ^7.20.2 + "@babel/plugin-syntax-object-rest-spread": ^7.8.3 + "@babel/plugin-transform-parameters": ^7.20.7 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 1329db17009964bc644484c660eab717cb3ca63ac0ab0f67c651a028d1bc2ead51dc4064caea283e46994f1b7221670a35cbc0b4beb6273f55e915494b5aa0b2 + languageName: node + linkType: hard + "@babel/plugin-proposal-private-property-in-object@npm:7.21.0-placeholder-for-preset-env.2": version: 7.21.0-placeholder-for-preset-env.2 resolution: "@babel/plugin-proposal-private-property-in-object@npm:7.21.0-placeholder-for-preset-env.2" @@ -1919,6 +2229,20 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-proposal-private-property-in-object@npm:^7.21.11": + version: 7.21.11 + resolution: "@babel/plugin-proposal-private-property-in-object@npm:7.21.11" + dependencies: + "@babel/helper-annotate-as-pure": ^7.18.6 + "@babel/helper-create-class-features-plugin": ^7.21.0 + "@babel/helper-plugin-utils": ^7.20.2 + "@babel/plugin-syntax-private-property-in-object": ^7.14.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 1b880543bc5f525b360b53d97dd30807302bb82615cd42bf931968f59003cac75629563d6b104868db50abd22235b3271fdf679fea5db59a267181a99cc0c265 + languageName: node + linkType: hard + "@babel/plugin-syntax-async-generators@npm:^7.8.4": version: 7.8.4 resolution: "@babel/plugin-syntax-async-generators@npm:7.8.4" @@ -1941,7 +2265,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-class-properties@npm:^7.12.13, @babel/plugin-syntax-class-properties@npm:^7.8.3": +"@babel/plugin-syntax-class-properties@npm:^7.0.0, @babel/plugin-syntax-class-properties@npm:^7.12.13, @babel/plugin-syntax-class-properties@npm:^7.8.3": version: 7.12.13 resolution: "@babel/plugin-syntax-class-properties@npm:7.12.13" dependencies: @@ -1985,6 +2309,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-syntax-flow@npm:^7.0.0, @babel/plugin-syntax-flow@npm:^7.26.0": + version: 7.26.0 + resolution: "@babel/plugin-syntax-flow@npm:7.26.0" + dependencies: + "@babel/helper-plugin-utils": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: fdc0d0a7b512e00d933e12cf93c785ea4645a193f4b539230b7601cfaa8c704410199318ce9ea14e5fca7d13e9027822f7d81a7871d3e854df26b6af04cc3c6c + languageName: node + linkType: hard + "@babel/plugin-syntax-flow@npm:^7.23.3": version: 7.23.3 resolution: "@babel/plugin-syntax-flow@npm:7.23.3" @@ -1996,6 +2331,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-syntax-import-assertions@npm:^7.20.0": + version: 7.26.0 + resolution: "@babel/plugin-syntax-import-assertions@npm:7.26.0" + dependencies: + "@babel/helper-plugin-utils": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: b58f2306df4a690ca90b763d832ec05202c50af787158ff8b50cdf3354359710bce2e1eb2b5135fcabf284756ac8eadf09ca74764aa7e76d12a5cac5f6b21e67 + languageName: node + linkType: hard + "@babel/plugin-syntax-import-assertions@npm:^7.22.5": version: 7.22.5 resolution: "@babel/plugin-syntax-import-assertions@npm:7.22.5" @@ -2051,6 +2397,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-syntax-jsx@npm:^7.0.0, @babel/plugin-syntax-jsx@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-syntax-jsx@npm:7.25.9" + dependencies: + "@babel/helper-plugin-utils": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: bb609d1ffb50b58f0c1bac8810d0e46a4f6c922aa171c458f3a19d66ee545d36e782d3bffbbc1fed0dc65a558bdce1caf5279316583c0fff5a2c1658982a8563 + languageName: node + linkType: hard + "@babel/plugin-syntax-jsx@npm:^7.12.13, @babel/plugin-syntax-jsx@npm:^7.22.5": version: 7.22.5 resolution: "@babel/plugin-syntax-jsx@npm:7.22.5" @@ -2106,7 +2463,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-object-rest-spread@npm:^7.8.3": +"@babel/plugin-syntax-object-rest-spread@npm:^7.0.0, @babel/plugin-syntax-object-rest-spread@npm:^7.8.3": version: 7.8.3 resolution: "@babel/plugin-syntax-object-rest-spread@npm:7.8.3" dependencies: @@ -2184,6 +2541,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-arrow-functions@npm:^7.0.0": + version: 7.25.9 + resolution: "@babel/plugin-transform-arrow-functions@npm:7.25.9" + dependencies: + "@babel/helper-plugin-utils": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: c29f081224859483accf55fb4d091db2aac0dcd0d7954bac5ca889030cc498d3f771aa20eb2e9cd8310084ec394d85fa084b97faf09298b6bc9541182b3eb5bb + languageName: node + linkType: hard + "@babel/plugin-transform-arrow-functions@npm:^7.23.3": version: 7.23.3 resolution: "@babel/plugin-transform-arrow-functions@npm:7.23.3" @@ -2222,6 +2590,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-block-scoped-functions@npm:^7.0.0": + version: 7.26.5 + resolution: "@babel/plugin-transform-block-scoped-functions@npm:7.26.5" + dependencies: + "@babel/helper-plugin-utils": ^7.26.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: f2046c09bf8e588bfb1a6342d0eee733189102cf663ade27adb0130f3865123af5816b40a55ec8d8fa09271b54dfdaf977cd2f8e0b3dc97f18e690188d5a2174 + languageName: node + linkType: hard + "@babel/plugin-transform-block-scoped-functions@npm:^7.23.3": version: 7.23.3 resolution: "@babel/plugin-transform-block-scoped-functions@npm:7.23.3" @@ -2233,6 +2612,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-block-scoping@npm:^7.0.0": + version: 7.25.9 + resolution: "@babel/plugin-transform-block-scoping@npm:7.25.9" + dependencies: + "@babel/helper-plugin-utils": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: e869500cfb1995e06e64c9608543b56468639809febfcdd6fcf683bc0bf1be2431cacf2981a168a1a14f4766393e37bc9f7c96d25bc5b5f39a64a8a8ad0bf8e0 + languageName: node + linkType: hard + "@babel/plugin-transform-block-scoping@npm:^7.23.4": version: 7.23.4 resolution: "@babel/plugin-transform-block-scoping@npm:7.23.4" @@ -2281,6 +2671,22 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-classes@npm:^7.0.0": + version: 7.25.9 + resolution: "@babel/plugin-transform-classes@npm:7.25.9" + dependencies: + "@babel/helper-annotate-as-pure": ^7.25.9 + "@babel/helper-compilation-targets": ^7.25.9 + "@babel/helper-plugin-utils": ^7.25.9 + "@babel/helper-replace-supers": ^7.25.9 + "@babel/traverse": ^7.25.9 + globals: ^11.1.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: d12584f72125314cc0fa8c77586ece2888d677788ac75f7393f5da574dfe4e45a556f7e3488fab29c8777ab3e5856d7a2d79f6df02834083aaa9d766440e3c68 + languageName: node + linkType: hard + "@babel/plugin-transform-classes@npm:^7.23.5": version: 7.23.5 resolution: "@babel/plugin-transform-classes@npm:7.23.5" @@ -2300,6 +2706,18 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-computed-properties@npm:^7.0.0": + version: 7.25.9 + resolution: "@babel/plugin-transform-computed-properties@npm:7.25.9" + dependencies: + "@babel/helper-plugin-utils": ^7.25.9 + "@babel/template": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: f77fa4bc0c1e0031068172df28852388db6b0f91c268d037905f459607cf1e8ebab00015f9f179f4ad96e11c5f381b635cd5dc4e147a48c7ac79d195ae7542de + languageName: node + linkType: hard + "@babel/plugin-transform-computed-properties@npm:^7.23.3": version: 7.23.3 resolution: "@babel/plugin-transform-computed-properties@npm:7.23.3" @@ -2312,6 +2730,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-destructuring@npm:^7.0.0": + version: 7.25.9 + resolution: "@babel/plugin-transform-destructuring@npm:7.25.9" + dependencies: + "@babel/helper-plugin-utils": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 965f63077a904828f4adee91393f83644098533442b8217d5a135c23a759a4c252c714074c965676a60d2c33f610f579a4eeb59ffd783724393af61c0ca45fef + languageName: node + linkType: hard + "@babel/plugin-transform-destructuring@npm:^7.23.3": version: 7.23.3 resolution: "@babel/plugin-transform-destructuring@npm:7.23.3" @@ -2394,6 +2823,18 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-flow-strip-types@npm:^7.0.0": + version: 7.26.5 + resolution: "@babel/plugin-transform-flow-strip-types@npm:7.26.5" + dependencies: + "@babel/helper-plugin-utils": ^7.26.5 + "@babel/plugin-syntax-flow": ^7.26.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: a15ae76aea55f1801a5c8ebdfdd0e4616f256ca1eeb504b0781120242aae5a2174439a084bacd2b9e3e83d2a8463cf10c2a8c9f0f0504ded21144297c2b4a380 + languageName: node + linkType: hard + "@babel/plugin-transform-flow-strip-types@npm:^7.23.3": version: 7.23.3 resolution: "@babel/plugin-transform-flow-strip-types@npm:7.23.3" @@ -2406,6 +2847,18 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-for-of@npm:^7.0.0": + version: 7.25.9 + resolution: "@babel/plugin-transform-for-of@npm:7.25.9" + dependencies: + "@babel/helper-plugin-utils": ^7.25.9 + "@babel/helper-skip-transparent-expression-wrappers": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 41b56e70256a29fc26ed7fb95ece062d7ec2f3b6ea8f0686349ffd004cd4816132085ee21165b89c502ee7161cb7cfb12510961638851357945dc7bc546475b7 + languageName: node + linkType: hard + "@babel/plugin-transform-for-of@npm:^7.23.3": version: 7.23.3 resolution: "@babel/plugin-transform-for-of@npm:7.23.3" @@ -2417,6 +2870,19 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-function-name@npm:^7.0.0": + version: 7.25.9 + resolution: "@babel/plugin-transform-function-name@npm:7.25.9" + dependencies: + "@babel/helper-compilation-targets": ^7.25.9 + "@babel/helper-plugin-utils": ^7.25.9 + "@babel/traverse": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: a8d7c8d019a6eb57eab5ca1be3e3236f175557d55b1f3b11f8ad7999e3fbb1cf37905fd8cb3a349bffb4163a558e9f33b63f631597fdc97c858757deac1b2fd7 + languageName: node + linkType: hard + "@babel/plugin-transform-function-name@npm:^7.23.3": version: 7.23.3 resolution: "@babel/plugin-transform-function-name@npm:7.23.3" @@ -2442,6 +2908,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-literals@npm:^7.0.0": + version: 7.25.9 + resolution: "@babel/plugin-transform-literals@npm:7.25.9" + dependencies: + "@babel/helper-plugin-utils": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 3cca75823a38aab599bc151b0fa4d816b5e1b62d6e49c156aa90436deb6e13649f5505973151a10418b64f3f9d1c3da53e38a186402e0ed7ad98e482e70c0c14 + languageName: node + linkType: hard + "@babel/plugin-transform-literals@npm:^7.23.3": version: 7.23.3 resolution: "@babel/plugin-transform-literals@npm:7.23.3" @@ -2465,6 +2942,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-member-expression-literals@npm:^7.0.0": + version: 7.25.9 + resolution: "@babel/plugin-transform-member-expression-literals@npm:7.25.9" + dependencies: + "@babel/helper-plugin-utils": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: db92041ae87b8f59f98b50359e0bb172480f6ba22e5e76b13bdfe07122cbf0daa9cd8ad2e78dcb47939938fed88ad57ab5989346f64b3a16953fc73dea3a9b1f + languageName: node + linkType: hard + "@babel/plugin-transform-member-expression-literals@npm:^7.23.3": version: 7.23.3 resolution: "@babel/plugin-transform-member-expression-literals@npm:7.23.3" @@ -2488,6 +2976,18 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-modules-commonjs@npm:^7.0.0": + version: 7.26.3 + resolution: "@babel/plugin-transform-modules-commonjs@npm:7.26.3" + dependencies: + "@babel/helper-module-transforms": ^7.26.0 + "@babel/helper-plugin-utils": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 0ac9aa4e5fe9fe34b58ee174881631e5e1c89eee5b1ebfd1147934686be92fc5fbfdc11119f0b607b3743d36a1cbcb7c36f18e0dd4424d6d7b749b1b9a18808a + languageName: node + linkType: hard + "@babel/plugin-transform-modules-commonjs@npm:^7.23.0, @babel/plugin-transform-modules-commonjs@npm:^7.23.3": version: 7.23.3 resolution: "@babel/plugin-transform-modules-commonjs@npm:7.23.3" @@ -2613,6 +3113,18 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-object-super@npm:^7.0.0": + version: 7.25.9 + resolution: "@babel/plugin-transform-object-super@npm:7.25.9" + dependencies: + "@babel/helper-plugin-utils": ^7.25.9 + "@babel/helper-replace-supers": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 1817b5d8b80e451ae1ad9080cca884f4f16df75880a158947df76a2ed8ab404d567a7dce71dd8051ef95f90fbe3513154086a32aba55cc76027f6cbabfbd7f98 + languageName: node + linkType: hard + "@babel/plugin-transform-object-super@npm:^7.23.3": version: 7.23.3 resolution: "@babel/plugin-transform-object-super@npm:7.23.3" @@ -2650,6 +3162,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-parameters@npm:^7.0.0, @babel/plugin-transform-parameters@npm:^7.20.7": + version: 7.25.9 + resolution: "@babel/plugin-transform-parameters@npm:7.25.9" + dependencies: + "@babel/helper-plugin-utils": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: d7ba2a7d05edbc85aed741289b0ff3d6289a1c25d82ac4be32c565f88a66391f46631aad59ceeed40824037f7eeaa7a0de1998db491f50e65a565cd964f78786 + languageName: node + linkType: hard + "@babel/plugin-transform-parameters@npm:^7.23.3": version: 7.23.3 resolution: "@babel/plugin-transform-parameters@npm:7.23.3" @@ -2699,6 +3222,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-property-literals@npm:^7.0.0": + version: 7.25.9 + resolution: "@babel/plugin-transform-property-literals@npm:7.25.9" + dependencies: + "@babel/helper-plugin-utils": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 436046ab07d54a9b44a384eeffec701d4e959a37a7547dda72e069e751ca7ff753d1782a8339e354b97c78a868b49ea97bf41bf5a44c6d7a3c0a05ad40eeb49c + languageName: node + linkType: hard + "@babel/plugin-transform-property-literals@npm:^7.23.3": version: 7.23.3 resolution: "@babel/plugin-transform-property-literals@npm:7.23.3" @@ -2710,6 +3244,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-react-display-name@npm:^7.0.0": + version: 7.25.9 + resolution: "@babel/plugin-transform-react-display-name@npm:7.25.9" + dependencies: + "@babel/helper-plugin-utils": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: cd7020494e6f31c287834e8929e6a718d5b0ace21232fa30feb48622c2312045504c34b347dcff9e88145c349882b296a7d6b6cc3d3447d8c85502f16471747c + languageName: node + linkType: hard + "@babel/plugin-transform-react-display-name@npm:^7.23.3": version: 7.23.3 resolution: "@babel/plugin-transform-react-display-name@npm:7.23.3" @@ -2776,6 +3321,21 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-react-jsx@npm:^7.0.0": + version: 7.25.9 + resolution: "@babel/plugin-transform-react-jsx@npm:7.25.9" + dependencies: + "@babel/helper-annotate-as-pure": ^7.25.9 + "@babel/helper-module-imports": ^7.25.9 + "@babel/helper-plugin-utils": ^7.25.9 + "@babel/plugin-syntax-jsx": ^7.25.9 + "@babel/types": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 5c6523c3963e3c6cf4c3cc2768a3766318af05b8f6c17aff52a4010e2c170e87b2fcdc94e9c9223ae12158664df4852ce81b9c8d042c15ea8fd83d6375f9f30f + languageName: node + linkType: hard + "@babel/plugin-transform-react-jsx@npm:^7.19.0, @babel/plugin-transform-react-jsx@npm:^7.22.5": version: 7.22.5 resolution: "@babel/plugin-transform-react-jsx@npm:7.22.5" @@ -2857,6 +3417,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-shorthand-properties@npm:^7.0.0": + version: 7.25.9 + resolution: "@babel/plugin-transform-shorthand-properties@npm:7.25.9" + dependencies: + "@babel/helper-plugin-utils": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: f774995d58d4e3a992b732cf3a9b8823552d471040e280264dd15e0735433d51b468fef04d75853d061309389c66bda10ce1b298297ce83999220eb0ad62741d + languageName: node + linkType: hard + "@babel/plugin-transform-shorthand-properties@npm:^7.23.3": version: 7.23.3 resolution: "@babel/plugin-transform-shorthand-properties@npm:7.23.3" @@ -2868,6 +3439,18 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-spread@npm:^7.0.0": + version: 7.25.9 + resolution: "@babel/plugin-transform-spread@npm:7.25.9" + dependencies: + "@babel/helper-plugin-utils": ^7.25.9 + "@babel/helper-skip-transparent-expression-wrappers": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 2403a5d49171b7714d5e5ecb1f598c61575a4dbe5e33e5a5f08c0ea990b75e693ca1ea983b6a96b2e3e5e7da48c8238333f525e47498c53b577c5d094d964c06 + languageName: node + linkType: hard + "@babel/plugin-transform-spread@npm:^7.23.3": version: 7.23.3 resolution: "@babel/plugin-transform-spread@npm:7.23.3" @@ -2891,6 +3474,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-template-literals@npm:^7.0.0": + version: 7.26.8 + resolution: "@babel/plugin-transform-template-literals@npm:7.26.8" + dependencies: + "@babel/helper-plugin-utils": ^7.26.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 65874c8844ce906507cd5b9c78950d6173f8339b6416a2a9e763021db5a7045315a6f0e58976ec4af5e960c003ef322576c105130a644addb8f94d1a0821a972 + languageName: node + linkType: hard + "@babel/plugin-transform-template-literals@npm:^7.23.3": version: 7.23.3 resolution: "@babel/plugin-transform-template-literals@npm:7.23.3" @@ -3162,6 +3756,15 @@ __metadata: languageName: node linkType: hard +"@babel/runtime@npm:^7.21.0": + version: 7.26.7 + resolution: "@babel/runtime@npm:7.26.7" + dependencies: + regenerator-runtime: ^0.14.0 + checksum: a1664a08f3f4854b895b540cca2f5f5c6c1993b5fb788c9615d70fc201e16bb254df8e0550c83eaf2749a14d87775e11a7c9ded6161203e9da7a4a323d546925 + languageName: node + linkType: hard + "@babel/runtime@npm:^7.23.2": version: 7.23.5 resolution: "@babel/runtime@npm:7.23.5" @@ -3171,6 +3774,17 @@ __metadata: languageName: node linkType: hard +"@babel/template@npm:^7.18.10, @babel/template@npm:^7.20.7, @babel/template@npm:^7.25.9, @babel/template@npm:^7.26.8": + version: 7.26.8 + resolution: "@babel/template@npm:7.26.8" + dependencies: + "@babel/code-frame": ^7.26.2 + "@babel/parser": ^7.26.8 + "@babel/types": ^7.26.8 + checksum: dfa79b33d49b89b2466a660bf299a545dd5fd6680fbf9828d2deca9bd826eb861041a9f5a25a4a0dddf6e4905e6fafac18a6885bf2aeecac6f39407a221e630f + languageName: node + linkType: hard + "@babel/template@npm:^7.22.15": version: 7.22.15 resolution: "@babel/template@npm:7.22.15" @@ -3233,6 +3847,21 @@ __metadata: languageName: node linkType: hard +"@babel/traverse@npm:^7.16.8, @babel/traverse@npm:^7.25.9, @babel/traverse@npm:^7.26.5, @babel/traverse@npm:^7.26.8": + version: 7.26.8 + resolution: "@babel/traverse@npm:7.26.8" + dependencies: + "@babel/code-frame": ^7.26.2 + "@babel/generator": ^7.26.8 + "@babel/parser": ^7.26.8 + "@babel/template": ^7.26.8 + "@babel/types": ^7.26.8 + debug: ^4.3.1 + globals: ^11.1.0 + checksum: f8b2f4d9945932ac6b0a359c322628327514a3e1d356555923dc143f3376d3e01f8f7a56cccb717223fa7420426e077809701175b717d946c622d826a6df7c60 + languageName: node + linkType: hard + "@babel/traverse@npm:^7.18.9, @babel/traverse@npm:^7.23.2, @babel/traverse@npm:^7.23.5": version: 7.23.5 resolution: "@babel/traverse@npm:7.23.5" @@ -3326,6 +3955,16 @@ __metadata: languageName: node linkType: hard +"@babel/types@npm:^7.16.8, @babel/types@npm:^7.18.13, @babel/types@npm:^7.25.9, @babel/types@npm:^7.26.7, @babel/types@npm:^7.26.8": + version: 7.26.8 + resolution: "@babel/types@npm:7.26.8" + dependencies: + "@babel/helper-string-parser": ^7.25.9 + "@babel/helper-validator-identifier": ^7.25.9 + checksum: 8f0f3bac37cc93d4658df460dc24156c6f1466abca63ef111c9f03128df6c247c672ed89e779ababb41250627c78d8bfcfba616eecb01b6e4ddcfd8ded718996 + languageName: node + linkType: hard + "@babel/types@npm:^7.17.0, @babel/types@npm:^7.22.10, @babel/types@npm:^7.22.11, @babel/types@npm:^7.22.5, @babel/types@npm:^7.4.4, @babel/types@npm:^7.8.3": version: 7.22.11 resolution: "@babel/types@npm:7.22.11" @@ -3542,6 +4181,7 @@ __metadata: jest: ^29.7.0 jest-date-mock: ^1.0.10 jsforce: ^1.11.0 + lodash: ^4.17.21 luxon: ^3.4.4 nest-winston: ^1.9.4 next-auth: ^4.22.1 @@ -3858,6 +4498,43 @@ __metadata: languageName: unknown linkType: soft +"@calcom/console@workspace:apps/console": + version: 0.0.0-use.local + resolution: "@calcom/console@workspace:apps/console" + dependencies: + "@calcom/dayjs": "*" + "@calcom/features": "*" + "@calcom/lib": "*" + "@calcom/tsconfig": "*" + "@calcom/ui": "*" + "@headlessui/react": ^1.5.0 + "@heroicons/react": ^1.0.6 + "@prisma/client": ^5.4.2 + "@tailwindcss/forms": ^0.5.2 + "@types/node": 16.9.1 + "@types/react": 18.0.26 + autoprefixer: ^10.4.12 + chart.js: ^3.7.1 + client-only: ^0.0.1 + eslint: ^8.34.0 + next: ^13.5.4 + next-auth: ^4.22.1 + next-i18next: ^13.2.2 + postcss: ^8.4.18 + prisma: ^5.4.2 + prisma-field-encryption: ^1.4.0 + react: ^18.2.0 + react-chartjs-2: ^4.0.1 + react-dom: ^18.2.0 + react-hook-form: ^7.43.3 + react-live-chat-loader: ^2.8.1 + swr: ^1.2.2 + tailwindcss: ^3.3.3 + typescript: ^4.9.4 + zod: ^3.22.4 + languageName: unknown + linkType: soft + "@calcom/core@*, @calcom/core@workspace:packages/core": version: 0.0.0-use.local resolution: "@calcom/core@workspace:packages/core" @@ -4008,7 +4685,7 @@ __metadata: languageName: unknown linkType: soft -"@calcom/embed-react@workspace:*, @calcom/embed-react@workspace:packages/embeds/embed-react": +"@calcom/embed-react@workspace:*, @calcom/embed-react@workspace:^, @calcom/embed-react@workspace:packages/embeds/embed-react": version: 0.0.0-use.local resolution: "@calcom/embed-react@workspace:packages/embeds/embed-react" dependencies: @@ -5208,6 +5885,118 @@ __metadata: languageName: unknown linkType: soft +"@calcom/website@workspace:apps/website": + version: 0.0.0-use.local + resolution: "@calcom/website@workspace:apps/website" + dependencies: + "@algora/sdk": ^0.1.2 + "@calcom/app-store": "*" + "@calcom/config": "*" + "@calcom/dayjs": "*" + "@calcom/embed-react": "workspace:^" + "@calcom/features": "*" + "@calcom/lib": "*" + "@calcom/prisma": "*" + "@calcom/tsconfig": "*" + "@calcom/ui": "*" + "@datocms/cma-client-node": ^2.0.0 + "@floating-ui/react-dom": ^1.0.0 + "@flodlc/nebula": ^1.0.56 + "@graphql-codegen/cli": ^5.0.0 + "@graphql-codegen/typed-document-node": ^5.0.1 + "@graphql-codegen/typescript": ^4.0.1 + "@graphql-codegen/typescript-operations": ^4.0.1 + "@graphql-typed-document-node/core": ^3.2.0 + "@headlessui/react": ^1.5.0 + "@heroicons/react": ^1.0.6 + "@hookform/resolvers": ^2.9.7 + "@juggle/resize-observer": ^3.4.0 + "@next/bundle-analyzer": ^13.1.6 + "@radix-ui/react-accordion": ^1.0.0 + "@radix-ui/react-avatar": ^1.0.4 + "@radix-ui/react-dropdown-menu": ^2.0.5 + "@radix-ui/react-navigation-menu": ^1.0.0 + "@radix-ui/react-portal": ^1.0.0 + "@radix-ui/react-slider": ^1.0.0 + "@radix-ui/react-tabs": ^1.0.0 + "@radix-ui/react-tooltip": ^1.0.0 + "@stripe/stripe-js": ^1.35.0 + "@tanstack/react-query": ^4.3.9 + "@typeform/embed-react": ^1.2.4 + "@types/bcryptjs": ^2.4.2 + "@types/debounce": ^1.2.1 + "@types/gtag.js": ^0.0.10 + "@types/micro": 7.3.7 + "@types/node": 16.9.1 + "@types/react": 18.0.26 + "@types/react-gtm-module": ^2.0.1 + "@types/xml2js": ^0.4.11 + "@vercel/analytics": ^0.1.6 + "@vercel/edge-functions-ui": ^0.2.1 + "@vercel/og": ^0.5.0 + autoprefixer: ^10.4.12 + bcryptjs: ^2.4.3 + clsx: ^1.2.1 + cobe: ^0.4.1 + concurrently: ^7.6.0 + cross-env: ^7.0.3 + datocms-structured-text-to-plain-text: ^2.0.4 + datocms-structured-text-utils: ^2.0.4 + debounce: ^1.2.1 + dotenv: ^16.3.1 + enquirer: ^2.4.1 + env-cmd: ^10.1.0 + eslint: ^8.34.0 + fathom-client: ^3.5.0 + globby: ^13.1.3 + graphql: ^16.8.0 + graphql-codegen: ^0.4.0 + graphql-request: ^6.1.0 + gray-matter: ^4.0.3 + gsap: ^3.11.0 + i18n-unused: ^0.13.0 + iframe-resizer-react: ^1.1.0 + keen-slider: ^6.8.0 + lucide-react: ^0.171.0 + micro: ^10.0.1 + next: ^14.1.3 + next-auth: ^4.22.1 + next-axiom: ^0.17.0 + next-i18next: ^13.2.2 + next-seo: ^6.0.0 + playwright-core: ^1.38.1 + postcss: ^8.4.18 + prism-react-renderer: ^1.3.5 + react: ^18.2.0 + react-confetti: ^6.0.1 + react-datocms: ^3.1.0 + react-device-detect: ^2.2.2 + react-dom: ^18.2.0 + react-fast-marquee: ^1.6.4 + react-github-btn: ^1.4.0 + react-hook-form: ^7.43.3 + react-hot-toast: ^2.3.0 + react-live-chat-loader: ^2.8.1 + react-markdown: ^9.0.1 + react-merge-refs: 1.1.0 + react-resize-detector: ^9.1.0 + react-twemoji: ^0.3.0 + react-use-measure: ^2.1.1 + react-wrap-balancer: ^1.0.0 + remark: ^14.0.2 + remark-html: ^14.0.1 + remeda: ^1.24.1 + stripe: ^9.16.0 + tailwind-merge: ^1.13.2 + tailwindcss: ^3.3.3 + ts-node: ^10.9.1 + typescript: ^4.9.4 + wait-on: ^7.0.1 + xml2js: ^0.6.0 + zod: ^3.22.2 + languageName: unknown + linkType: soft + "@calcom/whatsapp@workspace:packages/app-store/whatsapp": version: 0.0.0-use.local resolution: "@calcom/whatsapp@workspace:packages/app-store/whatsapp" @@ -5634,6 +6423,38 @@ __metadata: languageName: node linkType: hard +"@datocms/cma-client-node@npm:^2.0.0": + version: 2.2.6 + resolution: "@datocms/cma-client-node@npm:2.2.6" + dependencies: + "@datocms/cma-client": ^2.2.6 + "@datocms/rest-client-utils": ^1.3.3 + got: ^11.8.5 + mime-types: ^2.1.35 + tmp-promise: ^3.0.3 + checksum: d18b568f5a4538abbd824091722f7df95c99cb5e550560bcae701654924e7933559b27d176fc7772056afe214516c99e8bb383319d4e492b053d20d3732df929 + languageName: node + linkType: hard + +"@datocms/cma-client@npm:^2.2.6": + version: 2.2.6 + resolution: "@datocms/cma-client@npm:2.2.6" + dependencies: + "@datocms/rest-client-utils": ^1.3.3 + checksum: 52e65ab5cdc6b09859f6b07f87a5e8700ba2b2f0579894b7f3c6735c1360f83e41941783dfab78bd18d3f9e12bbd50436b953663a332c50fbcd12b167c567ed6 + languageName: node + linkType: hard + +"@datocms/rest-client-utils@npm:^1.3.3": + version: 1.3.3 + resolution: "@datocms/rest-client-utils@npm:1.3.3" + dependencies: + "@whatwg-node/fetch": ^0.5.3 + async-scheduler: ^1.4.4 + checksum: eb746ce41b0c38b0ebef42238046ce8ff2734330580b7198cc11bf7182de394af9de4df021e967419592eb62729feae533c7126d5629ec97e7cc8b3aa30e9eb2 + languageName: node + linkType: hard + "@discoveryjs/json-ext@npm:^0.5.3": version: 0.5.7 resolution: "@discoveryjs/json-ext@npm:0.5.7" @@ -5810,6 +6631,25 @@ __metadata: languageName: node linkType: hard +"@envelop/core@npm:^5.0.2": + version: 5.0.3 + resolution: "@envelop/core@npm:5.0.3" + dependencies: + "@envelop/types": 5.0.0 + tslib: ^2.5.0 + checksum: 5a5987b57fea6fcae3a0665adb9f11c0d25ecf99f235759e5c9601c464a2b99d8f20aca69437225dd8df6dc97d6fb0d3882979158dff53f9c81cde0a6c27893c + languageName: node + linkType: hard + +"@envelop/types@npm:5.0.0": + version: 5.0.0 + resolution: "@envelop/types@npm:5.0.0" + dependencies: + tslib: ^2.5.0 + checksum: 1098f821981d2b59a453f5f21ac3b2ea9fcf6bd253a564f0317f67b7469ff17e53921ea99a3b528cb5c95e0671460d68b55150836ce635788576500317a8ad9b + languageName: node + linkType: hard + "@esbuild/aix-ppc64@npm:0.21.5": version: 0.21.5 resolution: "@esbuild/aix-ppc64@npm:0.21.5" @@ -6489,7 +7329,7 @@ __metadata: languageName: node linkType: hard -"@floating-ui/react-dom@npm:^1.3.0": +"@floating-ui/react-dom@npm:^1.0.0, @floating-ui/react-dom@npm:^1.3.0": version: 1.3.0 resolution: "@floating-ui/react-dom@npm:1.3.0" dependencies: @@ -6527,6 +7367,13 @@ __metadata: languageName: node linkType: hard +"@flodlc/nebula@npm:^1.0.56": + version: 1.0.56 + resolution: "@flodlc/nebula@npm:1.0.56" + checksum: 044058423bc8a2c6ea60a0636400593a0912c142fbb6f50cc03288c702ae9c2029f84eb4fbac7e701a7ee1c2a5e33cc1af1b8d94af419c1197f74066b7867d21 + languageName: node + linkType: hard + "@formatjs/ecma402-abstract@npm:1.11.4": version: 1.11.4 resolution: "@formatjs/ecma402-abstract@npm:1.11.4" @@ -6717,6 +7564,649 @@ __metadata: languageName: node linkType: hard +"@graphql-codegen/add@npm:^5.0.3": + version: 5.0.3 + resolution: "@graphql-codegen/add@npm:5.0.3" + dependencies: + "@graphql-codegen/plugin-helpers": ^5.0.3 + tslib: ~2.6.0 + peerDependencies: + graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + checksum: 5196b6c64907f03dc1adc0ac4f98ed5fe69abe0eb87027a55dfc14b178cc1fee2bc47f68c8f5a68ce7aa4bc5a4f970f983d1d85b6d7a20489e50657baccd2ad0 + languageName: node + linkType: hard + +"@graphql-codegen/cli@npm:^5.0.0": + version: 5.0.4 + resolution: "@graphql-codegen/cli@npm:5.0.4" + dependencies: + "@babel/generator": ^7.18.13 + "@babel/template": ^7.18.10 + "@babel/types": ^7.18.13 + "@graphql-codegen/client-preset": ^4.6.0 + "@graphql-codegen/core": ^4.0.2 + "@graphql-codegen/plugin-helpers": ^5.0.3 + "@graphql-tools/apollo-engine-loader": ^8.0.0 + "@graphql-tools/code-file-loader": ^8.0.0 + "@graphql-tools/git-loader": ^8.0.0 + "@graphql-tools/github-loader": ^8.0.0 + "@graphql-tools/graphql-file-loader": ^8.0.0 + "@graphql-tools/json-file-loader": ^8.0.0 + "@graphql-tools/load": ^8.0.0 + "@graphql-tools/prisma-loader": ^8.0.0 + "@graphql-tools/url-loader": ^8.0.0 + "@graphql-tools/utils": ^10.0.0 + "@whatwg-node/fetch": ^0.10.0 + chalk: ^4.1.0 + cosmiconfig: ^8.1.3 + debounce: ^1.2.0 + detect-indent: ^6.0.0 + graphql-config: ^5.1.1 + inquirer: ^8.0.0 + is-glob: ^4.0.1 + jiti: ^1.17.1 + json-to-pretty-yaml: ^1.2.2 + listr2: ^4.0.5 + log-symbols: ^4.0.0 + micromatch: ^4.0.5 + shell-quote: ^1.7.3 + string-env-interpolation: ^1.0.1 + ts-log: ^2.2.3 + tslib: ^2.4.0 + yaml: ^2.3.1 + yargs: ^17.0.0 + peerDependencies: + "@parcel/watcher": ^2.1.0 + graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + peerDependenciesMeta: + "@parcel/watcher": + optional: true + bin: + gql-gen: cjs/bin.js + graphql-code-generator: cjs/bin.js + graphql-codegen: cjs/bin.js + graphql-codegen-esm: esm/bin.js + checksum: e38cbe36238d386512cc45cd2e08d5c00ee264b7b0fa21d188e2fcf12cfd37f4b97b13cf14c0bde3754cb08e69a8225107e9a9d982485dd503c309d9249855f1 + languageName: node + linkType: hard + +"@graphql-codegen/client-preset@npm:^4.6.0": + version: 4.6.1 + resolution: "@graphql-codegen/client-preset@npm:4.6.1" + dependencies: + "@babel/helper-plugin-utils": ^7.20.2 + "@babel/template": ^7.20.7 + "@graphql-codegen/add": ^5.0.3 + "@graphql-codegen/gql-tag-operations": 4.0.14 + "@graphql-codegen/plugin-helpers": ^5.1.0 + "@graphql-codegen/typed-document-node": ^5.0.13 + "@graphql-codegen/typescript": ^4.1.3 + "@graphql-codegen/typescript-operations": ^4.4.1 + "@graphql-codegen/visitor-plugin-common": ^5.6.1 + "@graphql-tools/documents": ^1.0.0 + "@graphql-tools/utils": ^10.0.0 + "@graphql-typed-document-node/core": 3.2.0 + tslib: ~2.6.0 + peerDependencies: + graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + checksum: 1e707fbb225bdfe07169298e4621f0e9df6fdd113d949225a7fe654233698be8a77db0964844f02e6d4c26d70c6fa7dc70fbcc2526cc345d225fb9954be344c8 + languageName: node + linkType: hard + +"@graphql-codegen/core@npm:^4.0.2": + version: 4.0.2 + resolution: "@graphql-codegen/core@npm:4.0.2" + dependencies: + "@graphql-codegen/plugin-helpers": ^5.0.3 + "@graphql-tools/schema": ^10.0.0 + "@graphql-tools/utils": ^10.0.0 + tslib: ~2.6.0 + peerDependencies: + graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + checksum: 5fda4e843174aacd4a481b73b4d259fa2df7ffe4200bd06e95ecd4b3f43aa5969deeaeb51f6cf15a542e99ee5756c3e02a29d9d2ff9891af40e234a8f68ead4d + languageName: node + linkType: hard + +"@graphql-codegen/gql-tag-operations@npm:4.0.14": + version: 4.0.14 + resolution: "@graphql-codegen/gql-tag-operations@npm:4.0.14" + dependencies: + "@graphql-codegen/plugin-helpers": ^5.1.0 + "@graphql-codegen/visitor-plugin-common": 5.6.1 + "@graphql-tools/utils": ^10.0.0 + auto-bind: ~4.0.0 + tslib: ~2.6.0 + peerDependencies: + graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + checksum: 0d3814904dc02aadb45e149d1839e014374b15b46d3cb0f66b2f806bc676c0cb97a868ce4d2bbda7e4a9c607835f23109f6359624bb1a52be600f2f336c0de32 + languageName: node + linkType: hard + +"@graphql-codegen/plugin-helpers@npm:^5.0.3, @graphql-codegen/plugin-helpers@npm:^5.1.0": + version: 5.1.0 + resolution: "@graphql-codegen/plugin-helpers@npm:5.1.0" + dependencies: + "@graphql-tools/utils": ^10.0.0 + change-case-all: 1.0.15 + common-tags: 1.8.2 + import-from: 4.0.0 + lodash: ~4.17.0 + tslib: ~2.6.0 + peerDependencies: + graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + checksum: 235762e2e7a55898e71fb1d52ef3093c26787c16e7eb5a3df6e06a7b2003da641b9a9c96833091e9fb11f9cf72da9e7c5f19ce124074d5d7d33a419117d050a9 + languageName: node + linkType: hard + +"@graphql-codegen/schema-ast@npm:^4.0.2": + version: 4.1.0 + resolution: "@graphql-codegen/schema-ast@npm:4.1.0" + dependencies: + "@graphql-codegen/plugin-helpers": ^5.0.3 + "@graphql-tools/utils": ^10.0.0 + tslib: ~2.6.0 + peerDependencies: + graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + checksum: cddec7723d708990ac8e33eb8935e72545b60ed7b772452ba45b60e577af950d23503de83f0919d1730f7d52dcb970900d3587d9a54202032164ba3c246d4c10 + languageName: node + linkType: hard + +"@graphql-codegen/typed-document-node@npm:^5.0.1, @graphql-codegen/typed-document-node@npm:^5.0.13": + version: 5.0.13 + resolution: "@graphql-codegen/typed-document-node@npm:5.0.13" + dependencies: + "@graphql-codegen/plugin-helpers": ^5.1.0 + "@graphql-codegen/visitor-plugin-common": 5.6.1 + auto-bind: ~4.0.0 + change-case-all: 1.0.15 + tslib: ~2.6.0 + peerDependencies: + graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + checksum: 9a10d8b76ef6c102442a490658e89ebd9e529f81322836b4f2e4ce97b83defba93c022499143c7643c2010b0188842921696dd6223e365a7cb6395e5364db775 + languageName: node + linkType: hard + +"@graphql-codegen/typescript-operations@npm:^4.0.1, @graphql-codegen/typescript-operations@npm:^4.4.1": + version: 4.4.1 + resolution: "@graphql-codegen/typescript-operations@npm:4.4.1" + dependencies: + "@graphql-codegen/plugin-helpers": ^5.1.0 + "@graphql-codegen/typescript": ^4.1.3 + "@graphql-codegen/visitor-plugin-common": 5.6.1 + auto-bind: ~4.0.0 + tslib: ~2.6.0 + peerDependencies: + graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + checksum: 855de09757dd5b4531afada448f05fe34f59481dba1e4795915de4e2b03f9abd1840e7c3a86b074725359b847d6b09ec94c0580fe2c67214649ed044c9cb75ab + languageName: node + linkType: hard + +"@graphql-codegen/typescript@npm:^4.0.1, @graphql-codegen/typescript@npm:^4.1.3": + version: 4.1.3 + resolution: "@graphql-codegen/typescript@npm:4.1.3" + dependencies: + "@graphql-codegen/plugin-helpers": ^5.1.0 + "@graphql-codegen/schema-ast": ^4.0.2 + "@graphql-codegen/visitor-plugin-common": 5.6.1 + auto-bind: ~4.0.0 + tslib: ~2.6.0 + peerDependencies: + graphql: ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + checksum: 218de994c6c702b96aa40ff7ac4ea14d0ca078e60149207967794f4b28fb02c5a5173646ce9a1d0b2feb9181081135e7f9f0d3a9e634730e79c04e50451287ee + languageName: node + linkType: hard + +"@graphql-codegen/visitor-plugin-common@npm:5.6.1, @graphql-codegen/visitor-plugin-common@npm:^5.6.1": + version: 5.6.1 + resolution: "@graphql-codegen/visitor-plugin-common@npm:5.6.1" + dependencies: + "@graphql-codegen/plugin-helpers": ^5.1.0 + "@graphql-tools/optimize": ^2.0.0 + "@graphql-tools/relay-operation-optimizer": ^7.0.0 + "@graphql-tools/utils": ^10.0.0 + auto-bind: ~4.0.0 + change-case-all: 1.0.15 + dependency-graph: ^0.11.0 + graphql-tag: ^2.11.0 + parse-filepath: ^1.0.2 + tslib: ~2.6.0 + peerDependencies: + graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + checksum: eff9ee6ed97976b8e4fb5d3b77d3905e98477b55624c17e13e39622f9dadc977084df36406983455d13f10878108826b725d8a6f0c705d3226852ff097821fb9 + languageName: node + linkType: hard + +"@graphql-tools/apollo-engine-loader@npm:^8.0.0": + version: 8.0.13 + resolution: "@graphql-tools/apollo-engine-loader@npm:8.0.13" + dependencies: + "@graphql-tools/utils": ^10.7.2 + "@whatwg-node/fetch": ^0.10.0 + sync-fetch: 0.6.0-2 + tslib: ^2.4.0 + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + checksum: 1a3cdf9a06bf55e94512ba250331a90da42f2891e9a205648e0bfc33b0c14b13a06d5d9eb30541675d603d4eb10a705e2b1e1af2c540d8962bb151a152a696e7 + languageName: node + linkType: hard + +"@graphql-tools/batch-execute@npm:^9.0.11": + version: 9.0.11 + resolution: "@graphql-tools/batch-execute@npm:9.0.11" + dependencies: + "@graphql-tools/utils": ^10.7.0 + dataloader: ^2.2.3 + tslib: ^2.8.1 + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + checksum: fb3fda923679913205b31f9e27f00b900ef4e03eaeea51b05f91179900bba87de29652c31dfe1124d21ad6882bb900e12d7a4c293ef46d14748b50d89b5254c1 + languageName: node + linkType: hard + +"@graphql-tools/code-file-loader@npm:^8.0.0": + version: 8.1.13 + resolution: "@graphql-tools/code-file-loader@npm:8.1.13" + dependencies: + "@graphql-tools/graphql-tag-pluck": 8.3.12 + "@graphql-tools/utils": ^10.7.2 + globby: ^11.0.3 + tslib: ^2.4.0 + unixify: ^1.0.0 + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + checksum: dc0b9fb21a596154c9711c5ba82138dc9f2ecdafd1ce974d1be08b058eb9d444cc65829e5d66f651aae0289fed6c89ee4d13d449d5c0b4f1d928f8d0c3e0a37c + languageName: node + linkType: hard + +"@graphql-tools/delegate@npm:^10.2.11": + version: 10.2.11 + resolution: "@graphql-tools/delegate@npm:10.2.11" + dependencies: + "@graphql-tools/batch-execute": ^9.0.11 + "@graphql-tools/executor": ^1.3.10 + "@graphql-tools/schema": ^10.0.11 + "@graphql-tools/utils": ^10.7.0 + "@repeaterjs/repeater": ^3.0.6 + dataloader: ^2.2.3 + dset: ^3.1.2 + tslib: ^2.8.1 + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + checksum: 07e194bf9a9b6a14b6d6a93daf592e4cf0c61837a8d4812e0b50932c5a437d86320f8907f2a6adfd1dea9d89feef65b37d9023dbeb105312a8a64be0ef5d25d0 + languageName: node + linkType: hard + +"@graphql-tools/documents@npm:^1.0.0": + version: 1.0.1 + resolution: "@graphql-tools/documents@npm:1.0.1" + dependencies: + lodash.sortby: ^4.7.0 + tslib: ^2.4.0 + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + checksum: c6ff859d2673dbf884f19d6319735afacc6bff2df6f8ea3dbf56839d01568f61210f256f0905156f123428cc24962ada26b37903263699fc8cd7efb8849a6508 + languageName: node + linkType: hard + +"@graphql-tools/executor-common@npm:^0.0.1": + version: 0.0.1 + resolution: "@graphql-tools/executor-common@npm:0.0.1" + dependencies: + "@envelop/core": ^5.0.2 + "@graphql-tools/utils": ^10.7.0 + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + checksum: a7204915439810a0e2187b7b3e9c70a046c8e57ac632a03bec8c72bef5755f95650fbc7428f17d27a13f17edfac66e3fe34052e26eb86092c54c10abcfc59231 + languageName: node + linkType: hard + +"@graphql-tools/executor-graphql-ws@npm:^1.3.2": + version: 1.3.7 + resolution: "@graphql-tools/executor-graphql-ws@npm:1.3.7" + dependencies: + "@graphql-tools/executor-common": ^0.0.1 + "@graphql-tools/utils": ^10.7.0 + "@whatwg-node/disposablestack": ^0.0.5 + graphql-ws: ^5.14.0 + isomorphic-ws: ^5.0.0 + tslib: ^2.8.1 + ws: ^8.17.1 + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + checksum: 2930889ce9af2a7bf6a6b86c3df0b7903bce16e72846bedccbc570c08ce743a4df2db55e1c024db091f71ee8228d80261b3540da9f0f68983cb8c29efec12b34 + languageName: node + linkType: hard + +"@graphql-tools/executor-http@npm:^1.1.9": + version: 1.2.6 + resolution: "@graphql-tools/executor-http@npm:1.2.6" + dependencies: + "@graphql-tools/executor-common": ^0.0.1 + "@graphql-tools/utils": ^10.7.0 + "@repeaterjs/repeater": ^3.0.4 + "@whatwg-node/disposablestack": ^0.0.5 + "@whatwg-node/fetch": ^0.10.1 + extract-files: ^11.0.0 + meros: ^1.2.1 + tslib: ^2.8.1 + value-or-promise: ^1.0.12 + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + checksum: 872a9bb9df967a32400877db644600d4a31dd245203c6f16a0252070b8aa9543e656d8f1c781497f8b814922d0f96e39bebfdf6513e63fa8ea6dc00c501899ca + languageName: node + linkType: hard + +"@graphql-tools/executor-legacy-ws@npm:^1.1.10": + version: 1.1.10 + resolution: "@graphql-tools/executor-legacy-ws@npm:1.1.10" + dependencies: + "@graphql-tools/utils": ^10.7.2 + "@types/ws": ^8.0.0 + isomorphic-ws: ^5.0.0 + tslib: ^2.4.0 + ws: ^8.17.1 + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + checksum: 8945b8dee35226ad776390857e3902efad5737ebbcc460abd8ed6ff6b8073ef4ab0c7557b2561353d3b637eee45ead97635c4777a458cc8ee70dc188b79ffec6 + languageName: node + linkType: hard + +"@graphql-tools/executor@npm:^1.3.10": + version: 1.3.12 + resolution: "@graphql-tools/executor@npm:1.3.12" + dependencies: + "@graphql-tools/utils": ^10.7.2 + "@graphql-typed-document-node/core": ^3.2.0 + "@repeaterjs/repeater": ^3.0.4 + "@whatwg-node/disposablestack": ^0.0.5 + tslib: ^2.4.0 + value-or-promise: ^1.0.12 + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + checksum: 007ee16defb0ed5162da9ac033b030bd55cce08027514278b85e8dfbe4543e84850b2131a4897a0ad2774df682116a5dc531c6be5a6352e7bb0dc67a6a9528d4 + languageName: node + linkType: hard + +"@graphql-tools/git-loader@npm:^8.0.0": + version: 8.0.17 + resolution: "@graphql-tools/git-loader@npm:8.0.17" + dependencies: + "@graphql-tools/graphql-tag-pluck": 8.3.12 + "@graphql-tools/utils": ^10.7.2 + is-glob: 4.0.3 + micromatch: ^4.0.8 + tslib: ^2.4.0 + unixify: ^1.0.0 + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + checksum: d389f59d36cec7129ca839b3e66f118ade336832c15fcbc991a1d7396b253fd28bead3355f0caf08de121f435bac0909d0a1c8918d942b3afc245fe935cb9e7b + languageName: node + linkType: hard + +"@graphql-tools/github-loader@npm:^8.0.0": + version: 8.0.13 + resolution: "@graphql-tools/github-loader@npm:8.0.13" + dependencies: + "@graphql-tools/executor-http": ^1.1.9 + "@graphql-tools/graphql-tag-pluck": ^8.3.12 + "@graphql-tools/utils": ^10.7.2 + "@whatwg-node/fetch": ^0.10.0 + sync-fetch: 0.6.0-2 + tslib: ^2.4.0 + value-or-promise: ^1.0.12 + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + checksum: 8a0ed9a86afbd4b4323fe7a1c6204658beb114bb763805cbeb7422231c8893a7fd2027100402c380859f6dd2109aa674ec7aa1499f7a1b1f4996e9c66d8a9840 + languageName: node + linkType: hard + +"@graphql-tools/graphql-file-loader@npm:^8.0.0": + version: 8.0.12 + resolution: "@graphql-tools/graphql-file-loader@npm:8.0.12" + dependencies: + "@graphql-tools/import": 7.0.11 + "@graphql-tools/utils": ^10.7.2 + globby: ^11.0.3 + tslib: ^2.4.0 + unixify: ^1.0.0 + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + checksum: 99ba0a7735dc432437b70213b75ffabac417babb633488effe39cd5ad6b0f15e85bb665a7966da0e8aa5d6ccf7ad955cd3f8ac1f8c14f476e1dcd349d949dd04 + languageName: node + linkType: hard + +"@graphql-tools/graphql-tag-pluck@npm:8.3.12, @graphql-tools/graphql-tag-pluck@npm:^8.3.12": + version: 8.3.12 + resolution: "@graphql-tools/graphql-tag-pluck@npm:8.3.12" + dependencies: + "@babel/core": ^7.22.9 + "@babel/parser": ^7.16.8 + "@babel/plugin-syntax-import-assertions": ^7.20.0 + "@babel/traverse": ^7.16.8 + "@babel/types": ^7.16.8 + "@graphql-tools/utils": ^10.7.2 + tslib: ^2.4.0 + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + checksum: da2f25c36aace4d6ded40b2f7312a29cb3d55231f836ad49a5290beb5c0e184e3afa5cb6bfae8800e74b5b4c50388274f4e788e75501607677a622c921a0162a + languageName: node + linkType: hard + +"@graphql-tools/import@npm:7.0.11": + version: 7.0.11 + resolution: "@graphql-tools/import@npm:7.0.11" + dependencies: + "@graphql-tools/utils": ^10.7.2 + resolve-from: 5.0.0 + tslib: ^2.4.0 + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + checksum: 86bee9019a70657778d3c31236e454eb30204bece4daefe1bfa509cafbbddae1e20e60cbc0e186bb7494e030fe857284f2d9db016475dfbe64c59a409e67b878 + languageName: node + linkType: hard + +"@graphql-tools/json-file-loader@npm:^8.0.0": + version: 8.0.11 + resolution: "@graphql-tools/json-file-loader@npm:8.0.11" + dependencies: + "@graphql-tools/utils": ^10.7.2 + globby: ^11.0.3 + tslib: ^2.4.0 + unixify: ^1.0.0 + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + checksum: 8281ea44b6e543ce66f7d0cb42b97ea38a06eaa5aec7dea8ee889edb376dcf7e3d1447ebc568e53d6857150997d9645708a78e4f470c8cbc6369336650547f6c + languageName: node + linkType: hard + +"@graphql-tools/load@npm:^8.0.0": + version: 8.0.12 + resolution: "@graphql-tools/load@npm:8.0.12" + dependencies: + "@graphql-tools/schema": ^10.0.16 + "@graphql-tools/utils": ^10.7.2 + p-limit: 3.1.0 + tslib: ^2.4.0 + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + checksum: b9cb9f3843e6d28c20c1b1554740823a83011b42e50fdb7952a5c8d67a67e5b8bf77c654865e505acd1ba5429c715a21b9fcdfefafdaa035e2c27b432e89ec3f + languageName: node + linkType: hard + +"@graphql-tools/merge@npm:^9.0.0, @graphql-tools/merge@npm:^9.0.19": + version: 9.0.19 + resolution: "@graphql-tools/merge@npm:9.0.19" + dependencies: + "@graphql-tools/utils": ^10.8.1 + tslib: ^2.4.0 + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + checksum: dfae329da0ca683d7672d8e08b11161e2299bf78224c61f3673a2ca69c73c0590b67da390c8555c8caf61ee106f2038339da8c7f35555b941ba9b1aefb52e808 + languageName: node + linkType: hard + +"@graphql-tools/merge@npm:^9.0.17": + version: 9.0.17 + resolution: "@graphql-tools/merge@npm:9.0.17" + dependencies: + "@graphql-tools/utils": ^10.7.2 + tslib: ^2.4.0 + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + checksum: 94f7b891a6cad12ae58c9aae1196bcc5a7dcaa8f3358520bedf4e1780513d3bbbeef4a942d256f22bfcd3d43ef5e127a97b84a202cbf2fc869495a2c4de58148 + languageName: node + linkType: hard + +"@graphql-tools/optimize@npm:^2.0.0": + version: 2.0.0 + resolution: "@graphql-tools/optimize@npm:2.0.0" + dependencies: + tslib: ^2.4.0 + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + checksum: 7f79c0e1852abc571308e887d27d613da5b797256c8c6eb6c5fe7ca77f09e61524778ae281cebc0b698c51d4fe1074e2b8e0d0627b8e2dcf505aa6ed09b49a2f + languageName: node + linkType: hard + +"@graphql-tools/prisma-loader@npm:^8.0.0": + version: 8.0.17 + resolution: "@graphql-tools/prisma-loader@npm:8.0.17" + dependencies: + "@graphql-tools/url-loader": ^8.0.15 + "@graphql-tools/utils": ^10.5.6 + "@types/js-yaml": ^4.0.0 + "@whatwg-node/fetch": ^0.10.0 + chalk: ^4.1.0 + debug: ^4.3.1 + dotenv: ^16.0.0 + graphql-request: ^6.0.0 + http-proxy-agent: ^7.0.0 + https-proxy-agent: ^7.0.0 + jose: ^5.0.0 + js-yaml: ^4.0.0 + lodash: ^4.17.20 + scuid: ^1.1.0 + tslib: ^2.4.0 + yaml-ast-parser: ^0.0.43 + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + checksum: e05be13e5dd152cb5f88acba90ab23982bdea3ed623647956d399196dd6c73a75e47a5c594f9d5a2ef1fc19db178a5a956c9d9cecf75ab0f77609b07808e0b35 + languageName: node + linkType: hard + +"@graphql-tools/relay-operation-optimizer@npm:^7.0.0": + version: 7.0.12 + resolution: "@graphql-tools/relay-operation-optimizer@npm:7.0.12" + dependencies: + "@ardatan/relay-compiler": ^12.0.1 + "@graphql-tools/utils": ^10.7.2 + tslib: ^2.4.0 + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + checksum: b8350a9047ecbcf48f77f89725d2ebb0a971cd1ad801a8ba21721f155a6d105c539bb9dca3b9fcbd2bdd31bfb7fbfe8a8ef6c92df6d023051f694a99dd011f36 + languageName: node + linkType: hard + +"@graphql-tools/schema@npm:^10.0.0, @graphql-tools/schema@npm:^10.0.11": + version: 10.0.18 + resolution: "@graphql-tools/schema@npm:10.0.18" + dependencies: + "@graphql-tools/merge": ^9.0.19 + "@graphql-tools/utils": ^10.8.1 + tslib: ^2.4.0 + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + checksum: 620faa9524c8acf3bac7ca7792ad8b4ac38533fd1f35b1eab53de3c8bdb9c81f9095f977e431a6bbcec14a58454db1449ff3826ff9a23225902f44f1c2a66936 + languageName: node + linkType: hard + +"@graphql-tools/schema@npm:^10.0.16": + version: 10.0.16 + resolution: "@graphql-tools/schema@npm:10.0.16" + dependencies: + "@graphql-tools/merge": ^9.0.17 + "@graphql-tools/utils": ^10.7.2 + tslib: ^2.4.0 + value-or-promise: ^1.0.12 + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + checksum: 59c49b5187f3bf22443b9417cac79f7cdd5f969d043c99aa5d528c10391e71ae848c6e377868af458f86ec86ae2c057c8cb9f8fff4dc203028acc327b1f7e9c9 + languageName: node + linkType: hard + +"@graphql-tools/url-loader@npm:^8.0.0, @graphql-tools/url-loader@npm:^8.0.15": + version: 8.0.24 + resolution: "@graphql-tools/url-loader@npm:8.0.24" + dependencies: + "@graphql-tools/executor-graphql-ws": ^1.3.2 + "@graphql-tools/executor-http": ^1.1.9 + "@graphql-tools/executor-legacy-ws": ^1.1.10 + "@graphql-tools/utils": ^10.7.2 + "@graphql-tools/wrap": ^10.0.16 + "@types/ws": ^8.0.0 + "@whatwg-node/fetch": ^0.10.0 + isomorphic-ws: ^5.0.0 + sync-fetch: 0.6.0-2 + tslib: ^2.4.0 + value-or-promise: ^1.0.11 + ws: ^8.17.1 + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + checksum: 531c6397f0613aa7fd05cd9c9881261b3cb0897b3393a4f749268f1f0b70cf54bd462e121311d035ffc11d4c26cf72828ffdfc2bda007cfeb85349f618b4b159 + languageName: node + linkType: hard + +"@graphql-tools/utils@npm:^10.0.0, @graphql-tools/utils@npm:^10.5.6, @graphql-tools/utils@npm:^10.7.0, @graphql-tools/utils@npm:^10.8.1": + version: 10.8.1 + resolution: "@graphql-tools/utils@npm:10.8.1" + dependencies: + "@graphql-typed-document-node/core": ^3.1.1 + cross-inspect: 1.0.1 + dset: ^3.1.4 + tslib: ^2.4.0 + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + checksum: 2de6d259a904a053d368134b76bf673c67af43e6d86a7fac5f638af119e61e86b30f3c1c00855ed558915f55b8057c11e732e78748e52d7b9fad491911b51c9c + languageName: node + linkType: hard + +"@graphql-tools/utils@npm:^10.7.2": + version: 10.7.2 + resolution: "@graphql-tools/utils@npm:10.7.2" + dependencies: + "@graphql-typed-document-node/core": ^3.1.1 + cross-inspect: 1.0.1 + dset: ^3.1.4 + tslib: ^2.4.0 + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + checksum: 042580d31a6e0fe4a0667430c43206eac137353c1e6cfc9d2c759e0569c6aa9e1186e6cbfe96dbd095cbccf068e05f937efc2a4c0c5482dff8643ffd3209d3b5 + languageName: node + linkType: hard + +"@graphql-tools/wrap@npm:^10.0.16": + version: 10.0.29 + resolution: "@graphql-tools/wrap@npm:10.0.29" + dependencies: + "@graphql-tools/delegate": ^10.2.11 + "@graphql-tools/schema": ^10.0.11 + "@graphql-tools/utils": ^10.7.0 + tslib: ^2.8.1 + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + checksum: 3f0f5fc906019e165465b94e2cb477f29b48d770419bd4f72a71cd86eb31a5af83fd9b41d3a275ca4e2bc224fdc2335f705a408c24986f2802de03de61c3d575 + languageName: node + linkType: hard + +"@graphql-typed-document-node/core@npm:3.2.0, @graphql-typed-document-node/core@npm:^3.1.1, @graphql-typed-document-node/core@npm:^3.2.0": + version: 3.2.0 + resolution: "@graphql-typed-document-node/core@npm:3.2.0" + peerDependencies: + graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + checksum: fa44443accd28c8cf4cb96aaaf39d144a22e8b091b13366843f4e97d19c7bfeaf609ce3c7603a4aeffe385081eaf8ea245d078633a7324c11c5ec4b2011bb76d + languageName: node + linkType: hard + "@grpc/grpc-js@npm:^1.7.1": version: 1.9.14 resolution: "@grpc/grpc-js@npm:1.9.14" @@ -6741,6 +8231,44 @@ __metadata: languageName: node linkType: hard +"@hapi/hoek@npm:^9.0.0, @hapi/hoek@npm:^9.3.0": + version: 9.3.0 + resolution: "@hapi/hoek@npm:9.3.0" + checksum: 4771c7a776242c3c022b168046af4e324d116a9d2e1d60631ee64f474c6e38d1bb07092d898bf95c7bc5d334c5582798a1456321b2e53ca817d4e7c88bc25b43 + languageName: node + linkType: hard + +"@hapi/topo@npm:^5.1.0": + version: 5.1.0 + resolution: "@hapi/topo@npm:5.1.0" + dependencies: + "@hapi/hoek": ^9.0.0 + checksum: 604dfd5dde76d5c334bd03f9001fce69c7ce529883acf92da96f4fe7e51221bf5e5110e964caca287a6a616ba027c071748ab636ff178ad750547fba611d6014 + languageName: node + linkType: hard + +"@headlessui/react@npm:^1.5.0": + version: 1.7.19 + resolution: "@headlessui/react@npm:1.7.19" + dependencies: + "@tanstack/react-virtual": ^3.0.0-beta.60 + client-only: ^0.0.1 + peerDependencies: + react: ^16 || ^17 || ^18 + react-dom: ^16 || ^17 || ^18 + checksum: 2a343a5fcf1f45e870cc94613231b89a8da78114001ffafa4751a0eceae7569ff9237aff1f2aedfa6f6e53ee3bb9ba5e5d19ebf1878fee3ff4f3c733fddc1087 + languageName: node + linkType: hard + +"@heroicons/react@npm:^1.0.6": + version: 1.0.6 + resolution: "@heroicons/react@npm:1.0.6" + peerDependencies: + react: ">= 16" + checksum: 372b1eda3ce735ef069777bc96304f70de585ebb71a6d1cedc121bb695f9bca235619112e3ee14e8779e95a03096813cbbe3b755927a54b7580d1ce084fa4096 + languageName: node + linkType: hard + "@hookform/error-message@npm:^2.0.0": version: 2.0.0 resolution: "@hookform/error-message@npm:2.0.0" @@ -7937,7 +9465,7 @@ __metadata: languageName: node linkType: hard -"@juggle/resize-observer@npm:^3.3.1": +"@juggle/resize-observer@npm:^3.3.1, @juggle/resize-observer@npm:^3.4.0": version: 3.4.0 resolution: "@juggle/resize-observer@npm:3.4.0" checksum: 2505028c05cc2e17639fcad06218b1c4b60f932a4ebb4b41ab546ef8c157031ae377e3f560903801f6d01706dbefd4943b6c4704bf19ed86dfa1c62f1473a570 @@ -8734,6 +10262,13 @@ __metadata: languageName: node linkType: hard +"@next/env@npm:13.5.8": + version: 13.5.8 + resolution: "@next/env@npm:13.5.8" + checksum: 233983c0b6be309b199ba918dec05eca3fb1aff91dd06e076088553f07af9a8bca6336a801302e50a737c8a19ce33e9e5f386f382d5af549b43a6c5f5e2a305e + languageName: node + linkType: hard + "@next/env@npm:14.0.4": version: 14.0.4 resolution: "@next/env@npm:14.0.4" @@ -8741,6 +10276,13 @@ __metadata: languageName: node linkType: hard +"@next/env@npm:14.2.24": + version: 14.2.24 + resolution: "@next/env@npm:14.2.24" + checksum: 251f9f3038fcc286619abd9fb32dcbf9f6e00355ecc7905986a3352658a67eca896519ba19df23f4e683e9628a6cf1414e94b498c1a4daac4060762a2658ff77 + languageName: node + linkType: hard + "@next/env@npm:15.1.6": version: 15.1.6 resolution: "@next/env@npm:15.1.6" @@ -8782,6 +10324,13 @@ __metadata: languageName: node linkType: hard +"@next/swc-darwin-arm64@npm:13.5.8": + version: 13.5.8 + resolution: "@next/swc-darwin-arm64@npm:13.5.8" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + "@next/swc-darwin-arm64@npm:14.0.4": version: 14.0.4 resolution: "@next/swc-darwin-arm64@npm:14.0.4" @@ -8789,6 +10338,13 @@ __metadata: languageName: node linkType: hard +"@next/swc-darwin-arm64@npm:14.2.24": + version: 14.2.24 + resolution: "@next/swc-darwin-arm64@npm:14.2.24" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + "@next/swc-darwin-arm64@npm:15.1.6": version: 15.1.6 resolution: "@next/swc-darwin-arm64@npm:15.1.6" @@ -8803,6 +10359,13 @@ __metadata: languageName: node linkType: hard +"@next/swc-darwin-x64@npm:13.5.8": + version: 13.5.8 + resolution: "@next/swc-darwin-x64@npm:13.5.8" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + "@next/swc-darwin-x64@npm:14.0.4": version: 14.0.4 resolution: "@next/swc-darwin-x64@npm:14.0.4" @@ -8810,6 +10373,13 @@ __metadata: languageName: node linkType: hard +"@next/swc-darwin-x64@npm:14.2.24": + version: 14.2.24 + resolution: "@next/swc-darwin-x64@npm:14.2.24" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + "@next/swc-darwin-x64@npm:15.1.6": version: 15.1.6 resolution: "@next/swc-darwin-x64@npm:15.1.6" @@ -8824,6 +10394,13 @@ __metadata: languageName: node linkType: hard +"@next/swc-linux-arm64-gnu@npm:13.5.8": + version: 13.5.8 + resolution: "@next/swc-linux-arm64-gnu@npm:13.5.8" + conditions: os=linux & cpu=arm64 & libc=glibc + languageName: node + linkType: hard + "@next/swc-linux-arm64-gnu@npm:14.0.4": version: 14.0.4 resolution: "@next/swc-linux-arm64-gnu@npm:14.0.4" @@ -8831,6 +10408,13 @@ __metadata: languageName: node linkType: hard +"@next/swc-linux-arm64-gnu@npm:14.2.24": + version: 14.2.24 + resolution: "@next/swc-linux-arm64-gnu@npm:14.2.24" + conditions: os=linux & cpu=arm64 & libc=glibc + languageName: node + linkType: hard + "@next/swc-linux-arm64-gnu@npm:15.1.6": version: 15.1.6 resolution: "@next/swc-linux-arm64-gnu@npm:15.1.6" @@ -8845,6 +10429,13 @@ __metadata: languageName: node linkType: hard +"@next/swc-linux-arm64-musl@npm:13.5.8": + version: 13.5.8 + resolution: "@next/swc-linux-arm64-musl@npm:13.5.8" + conditions: os=linux & cpu=arm64 & libc=musl + languageName: node + linkType: hard + "@next/swc-linux-arm64-musl@npm:14.0.4": version: 14.0.4 resolution: "@next/swc-linux-arm64-musl@npm:14.0.4" @@ -8852,6 +10443,13 @@ __metadata: languageName: node linkType: hard +"@next/swc-linux-arm64-musl@npm:14.2.24": + version: 14.2.24 + resolution: "@next/swc-linux-arm64-musl@npm:14.2.24" + conditions: os=linux & cpu=arm64 & libc=musl + languageName: node + linkType: hard + "@next/swc-linux-arm64-musl@npm:15.1.6": version: 15.1.6 resolution: "@next/swc-linux-arm64-musl@npm:15.1.6" @@ -8866,6 +10464,13 @@ __metadata: languageName: node linkType: hard +"@next/swc-linux-x64-gnu@npm:13.5.8": + version: 13.5.8 + resolution: "@next/swc-linux-x64-gnu@npm:13.5.8" + conditions: os=linux & cpu=x64 & libc=glibc + languageName: node + linkType: hard + "@next/swc-linux-x64-gnu@npm:14.0.4": version: 14.0.4 resolution: "@next/swc-linux-x64-gnu@npm:14.0.4" @@ -8873,6 +10478,13 @@ __metadata: languageName: node linkType: hard +"@next/swc-linux-x64-gnu@npm:14.2.24": + version: 14.2.24 + resolution: "@next/swc-linux-x64-gnu@npm:14.2.24" + conditions: os=linux & cpu=x64 & libc=glibc + languageName: node + linkType: hard + "@next/swc-linux-x64-gnu@npm:15.1.6": version: 15.1.6 resolution: "@next/swc-linux-x64-gnu@npm:15.1.6" @@ -8887,6 +10499,13 @@ __metadata: languageName: node linkType: hard +"@next/swc-linux-x64-musl@npm:13.5.8": + version: 13.5.8 + resolution: "@next/swc-linux-x64-musl@npm:13.5.8" + conditions: os=linux & cpu=x64 & libc=musl + languageName: node + linkType: hard + "@next/swc-linux-x64-musl@npm:14.0.4": version: 14.0.4 resolution: "@next/swc-linux-x64-musl@npm:14.0.4" @@ -8894,6 +10513,13 @@ __metadata: languageName: node linkType: hard +"@next/swc-linux-x64-musl@npm:14.2.24": + version: 14.2.24 + resolution: "@next/swc-linux-x64-musl@npm:14.2.24" + conditions: os=linux & cpu=x64 & libc=musl + languageName: node + linkType: hard + "@next/swc-linux-x64-musl@npm:15.1.6": version: 15.1.6 resolution: "@next/swc-linux-x64-musl@npm:15.1.6" @@ -8908,6 +10534,13 @@ __metadata: languageName: node linkType: hard +"@next/swc-win32-arm64-msvc@npm:13.5.8": + version: 13.5.8 + resolution: "@next/swc-win32-arm64-msvc@npm:13.5.8" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + "@next/swc-win32-arm64-msvc@npm:14.0.4": version: 14.0.4 resolution: "@next/swc-win32-arm64-msvc@npm:14.0.4" @@ -8915,6 +10548,13 @@ __metadata: languageName: node linkType: hard +"@next/swc-win32-arm64-msvc@npm:14.2.24": + version: 14.2.24 + resolution: "@next/swc-win32-arm64-msvc@npm:14.2.24" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + "@next/swc-win32-arm64-msvc@npm:15.1.6": version: 15.1.6 resolution: "@next/swc-win32-arm64-msvc@npm:15.1.6" @@ -8929,6 +10569,13 @@ __metadata: languageName: node linkType: hard +"@next/swc-win32-ia32-msvc@npm:13.5.8": + version: 13.5.8 + resolution: "@next/swc-win32-ia32-msvc@npm:13.5.8" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + "@next/swc-win32-ia32-msvc@npm:14.0.4": version: 14.0.4 resolution: "@next/swc-win32-ia32-msvc@npm:14.0.4" @@ -8936,6 +10583,13 @@ __metadata: languageName: node linkType: hard +"@next/swc-win32-ia32-msvc@npm:14.2.24": + version: 14.2.24 + resolution: "@next/swc-win32-ia32-msvc@npm:14.2.24" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + "@next/swc-win32-x64-msvc@npm:13.5.7": version: 13.5.7 resolution: "@next/swc-win32-x64-msvc@npm:13.5.7" @@ -8943,6 +10597,13 @@ __metadata: languageName: node linkType: hard +"@next/swc-win32-x64-msvc@npm:13.5.8": + version: 13.5.8 + resolution: "@next/swc-win32-x64-msvc@npm:13.5.8" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + "@next/swc-win32-x64-msvc@npm:14.0.4": version: 14.0.4 resolution: "@next/swc-win32-x64-msvc@npm:14.0.4" @@ -8950,6 +10611,13 @@ __metadata: languageName: node linkType: hard +"@next/swc-win32-x64-msvc@npm:14.2.24": + version: 14.2.24 + resolution: "@next/swc-win32-x64-msvc@npm:14.2.24" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + "@next/swc-win32-x64-msvc@npm:15.1.6": version: 15.1.6 resolution: "@next/swc-win32-x64-msvc@npm:15.1.6" @@ -10381,6 +12049,39 @@ __metadata: languageName: node linkType: hard +"@peculiar/asn1-schema@npm:^2.3.13, @peculiar/asn1-schema@npm:^2.3.8": + version: 2.3.15 + resolution: "@peculiar/asn1-schema@npm:2.3.15" + dependencies: + asn1js: ^3.0.5 + pvtsutils: ^1.3.6 + tslib: ^2.8.1 + checksum: af9a84e3a530f0208561dfeacfc591e1bdbee1a8bb0bc666fc46c7d9e6426c793816cef0eba94d01d289e7b6d7be82767f90553404f3487e4abf54867831d4d7 + languageName: node + linkType: hard + +"@peculiar/json-schema@npm:^1.1.12": + version: 1.1.12 + resolution: "@peculiar/json-schema@npm:1.1.12" + dependencies: + tslib: ^2.0.0 + checksum: b26ececdc23c5ef25837f8be8d1eb5e1c8bb6e9ae7227ac59ffea57fff56bd05137734e7685e9100595d3d88d906dff638ef8d1df54264c388d3eac1b05aa060 + languageName: node + linkType: hard + +"@peculiar/webcrypto@npm:^1.4.0": + version: 1.5.0 + resolution: "@peculiar/webcrypto@npm:1.5.0" + dependencies: + "@peculiar/asn1-schema": ^2.3.8 + "@peculiar/json-schema": ^1.1.12 + pvtsutils: ^1.3.5 + tslib: ^2.6.2 + webcrypto-core: ^1.8.0 + checksum: 9022d7452d564a5a26fbacf477842be34736f2d9139f2f5026adc47fdeda7033193d727491503f2a829d35ab819bbfa61c82a785c49c999eac535ecd69a3a459 + languageName: node + linkType: hard + "@pkgjs/parseargs@npm:^0.11.0": version: 0.11.0 resolution: "@pkgjs/parseargs@npm:0.11.0" @@ -10546,6 +12247,13 @@ __metadata: languageName: node linkType: hard +"@prisma/debug@npm:5.22.0": + version: 5.22.0 + resolution: "@prisma/debug@npm:5.22.0" + checksum: ee263d933c3ab92e93aee78771e5040a510316d96ce69c64cfd65d21e59646b9c5a047446ce7965651563d001150ef763485474bd43ca8a6544ab7ce604d2ffa + languageName: node + linkType: hard + "@prisma/debug@npm:5.3.1": version: 5.3.1 resolution: "@prisma/debug@npm:5.3.1" @@ -10716,6 +12424,15 @@ __metadata: languageName: node linkType: hard +"@prisma/generator-helper@npm:^5.9.1": + version: 5.22.0 + resolution: "@prisma/generator-helper@npm:5.22.0" + dependencies: + "@prisma/debug": 5.22.0 + checksum: 5c942d95b0e31c5b80eecb29185ff2561ca9a5eb86badb0d6dfd96c4e8b8e65e726c8682366bd55c332d9682deda08bc90d8f8dd7c0fc0652c9254d0d983bf47 + languageName: node + linkType: hard + "@prisma/generator-helper@npm:~3.8.1": version: 3.8.1 resolution: "@prisma/generator-helper@npm:3.8.1" @@ -11002,6 +12719,40 @@ __metadata: languageName: node linkType: hard +"@radix-ui/primitive@npm:1.1.1": + version: 1.1.1 + resolution: "@radix-ui/primitive@npm:1.1.1" + checksum: d7e819177590108b74139809d52ec043c0962ae3513e947998be575fb13639c5c1c091896ddcf1d6a22a777d44ade59d22c2019ce9099607fc62a5de09c59707 + languageName: node + linkType: hard + +"@radix-ui/react-accordion@npm:^1.0.0": + version: 1.2.3 + resolution: "@radix-ui/react-accordion@npm:1.2.3" + dependencies: + "@radix-ui/primitive": 1.1.1 + "@radix-ui/react-collapsible": 1.1.3 + "@radix-ui/react-collection": 1.1.2 + "@radix-ui/react-compose-refs": 1.1.1 + "@radix-ui/react-context": 1.1.1 + "@radix-ui/react-direction": 1.1.0 + "@radix-ui/react-id": 1.1.0 + "@radix-ui/react-primitive": 2.0.2 + "@radix-ui/react-use-controllable-state": 1.1.0 + peerDependencies: + "@types/react": "*" + "@types/react-dom": "*" + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + "@types/react": + optional: true + "@types/react-dom": + optional: true + checksum: ea7873d9b796b0433f3b0091f36aa97c7a9fb29fa5f9ccb43389d9b59d35f43b8b7a41b9e7419c78897ccac67833a88156b66a89fb37aaaea5d2d182c6804ea0 + languageName: node + linkType: hard + "@radix-ui/react-arrow@npm:1.0.3": version: 1.0.3 resolution: "@radix-ui/react-arrow@npm:1.0.3" @@ -11072,6 +12823,32 @@ __metadata: languageName: node linkType: hard +"@radix-ui/react-collapsible@npm:1.1.3": + version: 1.1.3 + resolution: "@radix-ui/react-collapsible@npm:1.1.3" + dependencies: + "@radix-ui/primitive": 1.1.1 + "@radix-ui/react-compose-refs": 1.1.1 + "@radix-ui/react-context": 1.1.1 + "@radix-ui/react-id": 1.1.0 + "@radix-ui/react-presence": 1.1.2 + "@radix-ui/react-primitive": 2.0.2 + "@radix-ui/react-use-controllable-state": 1.1.0 + "@radix-ui/react-use-layout-effect": 1.1.0 + peerDependencies: + "@types/react": "*" + "@types/react-dom": "*" + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + "@types/react": + optional: true + "@types/react-dom": + optional: true + checksum: 3689dd1393ed983869e1f2aa4ccfe349af4788a4eb8ee36805ff89aaf6df5ed9743823302388691f9d4527ecee6ed558e95a198fdbe5b86bd2d81b40d0bc2a8c + languageName: node + linkType: hard + "@radix-ui/react-collapsible@npm:^1.0.0": version: 1.0.3 resolution: "@radix-ui/react-collapsible@npm:1.0.3" @@ -11137,6 +12914,28 @@ __metadata: languageName: node linkType: hard +"@radix-ui/react-collection@npm:1.1.2": + version: 1.1.2 + resolution: "@radix-ui/react-collection@npm:1.1.2" + dependencies: + "@radix-ui/react-compose-refs": 1.1.1 + "@radix-ui/react-context": 1.1.1 + "@radix-ui/react-primitive": 2.0.2 + "@radix-ui/react-slot": 1.1.2 + peerDependencies: + "@types/react": "*" + "@types/react-dom": "*" + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + "@types/react": + optional: true + "@types/react-dom": + optional: true + checksum: 4401f36778cc9edc9dc5e82f59b51327f38cf6ed048981a04ff17b3279c47b1c6b6919fe6a621572fc154d2cb664df829b125f28525a556980e3c3b66447e6e5 + languageName: node + linkType: hard + "@radix-ui/react-compose-refs@npm:0.1.0": version: 0.1.0 resolution: "@radix-ui/react-compose-refs@npm:0.1.0" @@ -11187,6 +12986,19 @@ __metadata: languageName: node linkType: hard +"@radix-ui/react-compose-refs@npm:1.1.1": + version: 1.1.1 + resolution: "@radix-ui/react-compose-refs@npm:1.1.1" + peerDependencies: + "@types/react": "*" + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + "@types/react": + optional: true + checksum: 1be82f9f7fab96cc10f167a2e4f976e0135a63d473334f664c06f02af13bc5ea1994cb0505f89ed190d756cb65d57506721c030908af07e49b9e3cfd36044f33 + languageName: node + linkType: hard + "@radix-ui/react-context@npm:0.1.1": version: 0.1.1 resolution: "@radix-ui/react-context@npm:0.1.1" @@ -11237,6 +13049,19 @@ __metadata: languageName: node linkType: hard +"@radix-ui/react-context@npm:1.1.1": + version: 1.1.1 + resolution: "@radix-ui/react-context@npm:1.1.1" + peerDependencies: + "@types/react": "*" + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + "@types/react": + optional: true + checksum: 9a04db236685dacc2f5ab2bdcfc4c82b974998e712ab97d79b11d5b4ef073d24aa9392398c876ef6cb3c59f40299285ceee3646187ad818cdad4fe1c74469d3f + languageName: node + linkType: hard + "@radix-ui/react-dialog@npm:1.0.0": version: 1.0.0 resolution: "@radix-ui/react-dialog@npm:1.0.0" @@ -11311,6 +13136,19 @@ __metadata: languageName: node linkType: hard +"@radix-ui/react-direction@npm:1.1.0": + version: 1.1.0 + resolution: "@radix-ui/react-direction@npm:1.1.0" + peerDependencies: + "@types/react": "*" + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + "@types/react": + optional: true + checksum: 25ad0d1d65ad08c93cebfbefdff9ef2602e53f4573a66b37d2c366ede9485e75ec6fc8e7dd7d2939b34ea5504ca0fe6ac4a3acc2f6ee9b62d131d65486eafd49 + languageName: node + linkType: hard + "@radix-ui/react-dismissable-layer@npm:0.1.5": version: 0.1.5 resolution: "@radix-ui/react-dismissable-layer@npm:0.1.5" @@ -11393,6 +13231,29 @@ __metadata: languageName: node linkType: hard +"@radix-ui/react-dismissable-layer@npm:1.1.5": + version: 1.1.5 + resolution: "@radix-ui/react-dismissable-layer@npm:1.1.5" + dependencies: + "@radix-ui/primitive": 1.1.1 + "@radix-ui/react-compose-refs": 1.1.1 + "@radix-ui/react-primitive": 2.0.2 + "@radix-ui/react-use-callback-ref": 1.1.0 + "@radix-ui/react-use-escape-keydown": 1.1.0 + peerDependencies: + "@types/react": "*" + "@types/react-dom": "*" + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + "@types/react": + optional: true + "@types/react-dom": + optional: true + checksum: 6f8c219df5033e98b5337e5351e0add8706aab6d10a6f2c7f028f7f36202300f648805530e788a8c8cc3014a7fb9d8e9824ea02100da510e70778457ffb3e4c0 + languageName: node + linkType: hard + "@radix-ui/react-dropdown-menu@npm:^2.0.5": version: 2.0.5 resolution: "@radix-ui/react-dropdown-menu@npm:2.0.5" @@ -11564,6 +13425,21 @@ __metadata: languageName: node linkType: hard +"@radix-ui/react-id@npm:1.1.0": + version: 1.1.0 + resolution: "@radix-ui/react-id@npm:1.1.0" + dependencies: + "@radix-ui/react-use-layout-effect": 1.1.0 + peerDependencies: + "@types/react": "*" + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + "@types/react": + optional: true + checksum: 6fbc9d1739b3b082412da10359e63967b4f3a60383ebda4c9e56b07a722d29bee53b203b3b1418f88854a29315a7715867133bb149e6e22a027a048cdd20d970 + languageName: node + linkType: hard + "@radix-ui/react-label@npm:0.1.5": version: 0.1.5 resolution: "@radix-ui/react-label@npm:0.1.5" @@ -11616,6 +13492,38 @@ __metadata: languageName: node linkType: hard +"@radix-ui/react-navigation-menu@npm:^1.0.0": + version: 1.2.5 + resolution: "@radix-ui/react-navigation-menu@npm:1.2.5" + dependencies: + "@radix-ui/primitive": 1.1.1 + "@radix-ui/react-collection": 1.1.2 + "@radix-ui/react-compose-refs": 1.1.1 + "@radix-ui/react-context": 1.1.1 + "@radix-ui/react-direction": 1.1.0 + "@radix-ui/react-dismissable-layer": 1.1.5 + "@radix-ui/react-id": 1.1.0 + "@radix-ui/react-presence": 1.1.2 + "@radix-ui/react-primitive": 2.0.2 + "@radix-ui/react-use-callback-ref": 1.1.0 + "@radix-ui/react-use-controllable-state": 1.1.0 + "@radix-ui/react-use-layout-effect": 1.1.0 + "@radix-ui/react-use-previous": 1.1.0 + "@radix-ui/react-visually-hidden": 1.1.2 + peerDependencies: + "@types/react": "*" + "@types/react-dom": "*" + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + "@types/react": + optional: true + "@types/react-dom": + optional: true + checksum: b5790c9f2ec06fd10fb2b7226f62777555a7691003ecd085cd8d6beef59ee1e224023e31b260775278da6d7be8d5996e8ad6e8ec5ab00805d018752c8988a134 + languageName: node + linkType: hard + "@radix-ui/react-popover@npm:^1.0.2": version: 1.0.6 resolution: "@radix-ui/react-popover@npm:1.0.6" @@ -11810,6 +13718,26 @@ __metadata: languageName: node linkType: hard +"@radix-ui/react-presence@npm:1.1.2": + version: 1.1.2 + resolution: "@radix-ui/react-presence@npm:1.1.2" + dependencies: + "@radix-ui/react-compose-refs": 1.1.1 + "@radix-ui/react-use-layout-effect": 1.1.0 + peerDependencies: + "@types/react": "*" + "@types/react-dom": "*" + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + "@types/react": + optional: true + "@types/react-dom": + optional: true + checksum: 0345bc8d3e1ddcbf4b864025833c71f3d76e4801ce16ad126a98aed816be6e819c4fe01097c6c1320771b947f5a14929cc610d18e7a1438cfb5573289fa4d4a6 + languageName: node + linkType: hard + "@radix-ui/react-primitive@npm:0.1.4": version: 0.1.4 resolution: "@radix-ui/react-primitive@npm:0.1.4" @@ -11874,6 +13802,25 @@ __metadata: languageName: node linkType: hard +"@radix-ui/react-primitive@npm:2.0.2": + version: 2.0.2 + resolution: "@radix-ui/react-primitive@npm:2.0.2" + dependencies: + "@radix-ui/react-slot": 1.1.2 + peerDependencies: + "@types/react": "*" + "@types/react-dom": "*" + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + "@types/react": + optional: true + "@types/react-dom": + optional: true + checksum: 3a6144ed164322b1135f6f774bfd23c7c4c5340db8a1022d05c9c7ad41ba187299a4894caae634e94a1d73b5f69305318a47b41e6dc7806fb5923fa05dd39d40 + languageName: node + linkType: hard + "@radix-ui/react-radio-group@npm:^1.0.0": version: 1.1.3 resolution: "@radix-ui/react-radio-group@npm:1.1.3" @@ -11931,6 +13878,33 @@ __metadata: languageName: node linkType: hard +"@radix-ui/react-roving-focus@npm:1.1.2": + version: 1.1.2 + resolution: "@radix-ui/react-roving-focus@npm:1.1.2" + dependencies: + "@radix-ui/primitive": 1.1.1 + "@radix-ui/react-collection": 1.1.2 + "@radix-ui/react-compose-refs": 1.1.1 + "@radix-ui/react-context": 1.1.1 + "@radix-ui/react-direction": 1.1.0 + "@radix-ui/react-id": 1.1.0 + "@radix-ui/react-primitive": 2.0.2 + "@radix-ui/react-use-callback-ref": 1.1.0 + "@radix-ui/react-use-controllable-state": 1.1.0 + peerDependencies: + "@types/react": "*" + "@types/react-dom": "*" + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + "@types/react": + optional: true + "@types/react-dom": + optional: true + checksum: 4a57f5af51387ae7621a6d0c7e3c743f16b06afda9311e6e5a39c023157d6a314931170dd794f901b59c0c768f0c3a121b8af59f7f80e58eb87512fb4540b037 + languageName: node + linkType: hard + "@radix-ui/react-select@npm:^0.1.1": version: 0.1.1 resolution: "@radix-ui/react-select@npm:0.1.1" @@ -12106,6 +14080,21 @@ __metadata: languageName: node linkType: hard +"@radix-ui/react-slot@npm:1.1.2": + version: 1.1.2 + resolution: "@radix-ui/react-slot@npm:1.1.2" + dependencies: + "@radix-ui/react-compose-refs": 1.1.1 + peerDependencies: + "@types/react": "*" + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + "@types/react": + optional: true + checksum: f341cd66b284061a5147a67f6d7b8a7337a4c076b97ce087bcb1358fa36e9714ef988cc7ea2c2ed3b6ec3f17adafd2460851b31ed8f4dd73ea22b0b11e22ab97 + languageName: node + linkType: hard + "@radix-ui/react-switch@npm:^1.0.0": version: 1.0.3 resolution: "@radix-ui/react-switch@npm:1.0.3" @@ -12157,6 +14146,32 @@ __metadata: languageName: node linkType: hard +"@radix-ui/react-tabs@npm:^1.0.0": + version: 1.1.3 + resolution: "@radix-ui/react-tabs@npm:1.1.3" + dependencies: + "@radix-ui/primitive": 1.1.1 + "@radix-ui/react-context": 1.1.1 + "@radix-ui/react-direction": 1.1.0 + "@radix-ui/react-id": 1.1.0 + "@radix-ui/react-presence": 1.1.2 + "@radix-ui/react-primitive": 2.0.2 + "@radix-ui/react-roving-focus": 1.1.2 + "@radix-ui/react-use-controllable-state": 1.1.0 + peerDependencies: + "@types/react": "*" + "@types/react-dom": "*" + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + "@types/react": + optional: true + "@types/react-dom": + optional: true + checksum: abfba997219743ac75840281df5577f0be154c4813588cb4bb4aac16fc8bd4bcd230170663162a805bb31bdc393adfd2ee942daa3f15484ab4f82aa210e532bb + languageName: node + linkType: hard + "@radix-ui/react-toast@npm:^1.1.5": version: 1.1.5 resolution: "@radix-ui/react-toast@npm:1.1.5" @@ -12450,6 +14465,21 @@ __metadata: languageName: node linkType: hard +"@radix-ui/react-use-escape-keydown@npm:1.1.0": + version: 1.1.0 + resolution: "@radix-ui/react-use-escape-keydown@npm:1.1.0" + dependencies: + "@radix-ui/react-use-callback-ref": 1.1.0 + peerDependencies: + "@types/react": "*" + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + "@types/react": + optional: true + checksum: 9bf88ea272b32ea0f292afd336780a59c5646f795036b7e6105df2d224d73c54399ee5265f61d571eb545d28382491a8b02dc436e3088de8dae415d58b959b71 + languageName: node + linkType: hard + "@radix-ui/react-use-layout-effect@npm:0.1.0": version: 0.1.0 resolution: "@radix-ui/react-use-layout-effect@npm:0.1.0" @@ -12618,6 +14648,25 @@ __metadata: languageName: node linkType: hard +"@radix-ui/react-visually-hidden@npm:1.1.2": + version: 1.1.2 + resolution: "@radix-ui/react-visually-hidden@npm:1.1.2" + dependencies: + "@radix-ui/react-primitive": 2.0.2 + peerDependencies: + "@types/react": "*" + "@types/react-dom": "*" + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + "@types/react": + optional: true + "@types/react-dom": + optional: true + checksum: 87dc45ffb32b652bde629bb5c3b216adb82fd1ec68c484fec260980b31508cbc515a73327798d0f47d558dd22245b25f51bb06296b1762693af9f27e23c1cb1f + languageName: node + linkType: hard + "@radix-ui/rect@npm:1.0.1": version: 1.0.1 resolution: "@radix-ui/rect@npm:1.0.1" @@ -12717,6 +14766,13 @@ __metadata: languageName: node linkType: hard +"@repeaterjs/repeater@npm:^3.0.4, @repeaterjs/repeater@npm:^3.0.6": + version: 3.0.6 + resolution: "@repeaterjs/repeater@npm:3.0.6" + checksum: aae878b953162bec77c94b45f2236ddfc01a65308267c7cb30220fa2f8511654a302c0d32aad228c58241d685607d7bb35b6d528b2879355e6636ff08fddb266 + languageName: node + linkType: hard + "@replexica/sdk@npm:^0.7.0": version: 0.7.2 resolution: "@replexica/sdk@npm:0.7.2" @@ -12749,6 +14805,13 @@ __metadata: languageName: node linkType: hard +"@resvg/resvg-wasm@npm:2.6.0": + version: 2.6.0 + resolution: "@resvg/resvg-wasm@npm:2.6.0" + checksum: 730ababcab7d11be84129ab68aa9b86bb393b820b5a0a223fb53232462c33bc777eb875170691f54cd5d29c6aa36498f5b7dcd7fca000b56818e3e312be01804 + languageName: node + linkType: hard + "@rollup/plugin-commonjs@npm:24.0.0": version: 24.0.0 resolution: "@rollup/plugin-commonjs@npm:24.0.0" @@ -13907,6 +15970,29 @@ __metadata: languageName: node linkType: hard +"@sideway/address@npm:^4.1.5": + version: 4.1.5 + resolution: "@sideway/address@npm:4.1.5" + dependencies: + "@hapi/hoek": ^9.0.0 + checksum: 3e3ea0f00b4765d86509282290368a4a5fd39a7995fdc6de42116ca19a96120858e56c2c995081def06e1c53e1f8bccc7d013f6326602bec9d56b72ee2772b9d + languageName: node + linkType: hard + +"@sideway/formula@npm:^3.0.1": + version: 3.0.1 + resolution: "@sideway/formula@npm:3.0.1" + checksum: e4beeebc9dbe2ff4ef0def15cec0165e00d1612e3d7cea0bc9ce5175c3263fc2c818b679bd558957f49400ee7be9d4e5ac90487e1625b4932e15c4aa7919c57a + languageName: node + linkType: hard + +"@sideway/pinpoint@npm:^2.0.0": + version: 2.0.0 + resolution: "@sideway/pinpoint@npm:2.0.0" + checksum: 0f4491e5897fcf5bf02c46f5c359c56a314e90ba243f42f0c100437935daa2488f20482f0f77186bd6bf43345095a95d8143ecf8b1f4d876a7bc0806aba9c3d2 + languageName: node + linkType: hard + "@sinclair/typebox@npm:^0.25.16": version: 0.25.24 resolution: "@sinclair/typebox@npm:0.25.24" @@ -13921,7 +16007,7 @@ __metadata: languageName: node linkType: hard -"@sindresorhus/is@npm:^4": +"@sindresorhus/is@npm:^4, @sindresorhus/is@npm:^4.0.0": version: 4.6.0 resolution: "@sindresorhus/is@npm:4.6.0" checksum: 83839f13da2c29d55c97abc3bc2c55b250d33a0447554997a85c539e058e57b8da092da396e252b11ec24a0279a0bed1f537fa26302209327060643e327f81d2 @@ -14454,13 +16540,27 @@ __metadata: languageName: node linkType: hard -"@stablelib/base64@npm:^1.0.0": +"@stablelib/base64@npm:^1.0.0, @stablelib/base64@npm:^1.0.1": version: 1.0.1 resolution: "@stablelib/base64@npm:1.0.1" checksum: 3ef4466d1d6889ac3fc67407bc21aa079953981c322eeca3b29f426d05506c63011faab1bfc042d7406e0677a94de6c9d2db2ce079afdd1eccae90031bfb5859 languageName: node linkType: hard +"@stablelib/hex@npm:^1.0.1": + version: 1.0.1 + resolution: "@stablelib/hex@npm:1.0.1" + checksum: 557f1c5d6b42963deee7627d4be1ae3542607851c5561e9419c42682d09562ebd3a06e2d92e088c52213a71ed121ec38221abfc5acd9e65707a77ecee3c96915 + languageName: node + linkType: hard + +"@stablelib/utf8@npm:^1.0.1": + version: 1.0.2 + resolution: "@stablelib/utf8@npm:1.0.2" + checksum: 3ab01baa4eb36eece44a310bf6b2e4313e8d585fc04dbcf8a5dc2d239f06071f34038b85aad6fbd98e9969f0b3b0584fcb541fe5e512c8f0cc0982b9fe1290a3 + languageName: node + linkType: hard + "@storybook/addon-actions@npm:7.6.3, @storybook/addon-actions@npm:^7.6.3": version: 7.6.3 resolution: "@storybook/addon-actions@npm:7.6.3" @@ -15628,6 +17728,16 @@ __metadata: languageName: node linkType: hard +"@swc/helpers@npm:0.5.5": + version: 0.5.5 + resolution: "@swc/helpers@npm:0.5.5" + dependencies: + "@swc/counter": ^0.1.3 + tslib: ^2.4.0 + checksum: d4f207b191e54b29460804ddf2984ba6ece1d679a0b2f6a9c765dcf27bba92c5769e7965668a4546fb9f1021eaf0ff9be4bf5c235ce12adcd65acdfe77187d11 + languageName: node + linkType: hard + "@swc/types@npm:^0.1.5": version: 0.1.5 resolution: "@swc/types@npm:0.1.5" @@ -15644,6 +17754,15 @@ __metadata: languageName: node linkType: hard +"@szmarczak/http-timer@npm:^4.0.5": + version: 4.0.6 + resolution: "@szmarczak/http-timer@npm:4.0.6" + dependencies: + defer-to-connect: ^2.0.0 + checksum: c29df3bcec6fc3bdec2b17981d89d9c9fc9bd7d0c9bcfe92821dc533f4440bc890ccde79971838b4ceed1921d456973c4180d7175ee1d0023ad0562240a58d95 + languageName: node + linkType: hard + "@szmarczak/http-timer@npm:^5.0.1": version: 5.0.1 resolution: "@szmarczak/http-timer@npm:5.0.1" @@ -15686,6 +17805,13 @@ __metadata: languageName: node linkType: hard +"@tanstack/query-core@npm:4.36.1": + version: 4.36.1 + resolution: "@tanstack/query-core@npm:4.36.1" + checksum: 47672094da20d89402d9fe03bb7b0462be73a76ff9ca715169738bc600a719d064d106d083a8eedae22a2c22de22f87d5eb5d31ef447aba771d9190f2117ed10 + languageName: node + linkType: hard + "@tanstack/query-core@npm:5.17.19": version: 5.17.19 resolution: "@tanstack/query-core@npm:5.17.19" @@ -15693,6 +17819,25 @@ __metadata: languageName: node linkType: hard +"@tanstack/react-query@npm:^4.3.9": + version: 4.36.1 + resolution: "@tanstack/react-query@npm:4.36.1" + dependencies: + "@tanstack/query-core": 4.36.1 + use-sync-external-store: ^1.2.0 + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-native: "*" + peerDependenciesMeta: + react-dom: + optional: true + react-native: + optional: true + checksum: 1aff0a476859386f8d32253fa0d0bde7b81769a6d4d4d9cbd78778f0f955459a3bdb7ee27a0d2ee7373090f12998b45df80db0b5b313bd0a7a39d36c6e8e51c5 + languageName: node + linkType: hard + "@tanstack/react-query@npm:^5.17.15": version: 5.17.19 resolution: "@tanstack/react-query@npm:5.17.19" @@ -15716,6 +17861,18 @@ __metadata: languageName: node linkType: hard +"@tanstack/react-virtual@npm:^3.0.0-beta.60": + version: 3.13.0 + resolution: "@tanstack/react-virtual@npm:3.13.0" + dependencies: + "@tanstack/virtual-core": 3.13.0 + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + checksum: 0cc6fcc63d68af698d79b455fa6a44115ee3abfb41bd2a52fc96094cb4760743989e593871b3b872021f966c7ecc90eb45e85ccfc70446fff44ce8e6296cc76f + languageName: node + linkType: hard + "@tanstack/react-virtual@npm:^3.10.9": version: 3.10.9 resolution: "@tanstack/react-virtual@npm:3.10.9" @@ -15742,6 +17899,13 @@ __metadata: languageName: node linkType: hard +"@tanstack/virtual-core@npm:3.13.0": + version: 3.13.0 + resolution: "@tanstack/virtual-core@npm:3.13.0" + checksum: 0cbead3350002bea1f8353e091d3d8d3d9ba7815f4a0eb359bc927b7b7f39c9530c1dfa15f8d75fe5f47621c8f55be57643133b8fe728af09f7ea0578016f78d + languageName: node + linkType: hard + "@tediousjs/connection-string@npm:^0.5.0": version: 0.5.0 resolution: "@tediousjs/connection-string@npm:0.5.0" @@ -15937,6 +18101,15 @@ __metadata: languageName: node linkType: hard +"@trpc/client@npm:^10.0.0": + version: 10.45.2 + resolution: "@trpc/client@npm:10.45.2" + peerDependencies: + "@trpc/server": 10.45.2 + checksum: d1eaa8e0059a371265065dafb48372be8456bc5bbc68f63c92401b12258cf15efb3f9f3790ef18ec6a0b7b73daa362bbd371f98db67c0610f2aee284f12cf09a + languageName: node + linkType: hard + "@trpc/next@npm:11.0.0-next-beta.222": version: 11.0.0-next-beta.222 resolution: "@trpc/next@npm:11.0.0-next-beta.222" @@ -15977,6 +18150,13 @@ __metadata: languageName: node linkType: hard +"@trpc/server@npm:^10.0.0": + version: 10.45.2 + resolution: "@trpc/server@npm:10.45.2" + checksum: 30b92853c45747a376bbbd5c4eef71fea17a2b22e83ba7e694fb13cc99b15d1f24a17aa9124346074618fb5cee8d13434aa16cdf24af82f5e8acabdecfee0ca2 + languageName: node + linkType: hard + "@tryvital/vital-node@npm:^1.4.6": version: 1.4.6 resolution: "@tryvital/vital-node@npm:1.4.6" @@ -16030,6 +18210,25 @@ __metadata: languageName: node linkType: hard +"@typeform/embed-react@npm:^1.2.4": + version: 1.21.0 + resolution: "@typeform/embed-react@npm:1.21.0" + dependencies: + "@typeform/embed": 1.38.0 + fast-deep-equal: ^3.1.3 + peerDependencies: + react: ">=16.8.0" + checksum: 1d91cb797dfe7b27e08798f7a571f34724a8f56bf9c89a8ed2a454820efce2de4db44fd4a18f446573784c28f79478f269c1719500e1b332e7ea34ea77ffa185 + languageName: node + linkType: hard + +"@typeform/embed@npm:1.38.0": + version: 1.38.0 + resolution: "@typeform/embed@npm:1.38.0" + checksum: 41115134e5cee28f5e031181b4525c7885d23707699cf183921110262717c7544bfd101428267410b812914c235687783e373ce98e37bdc447d72f8177663597 + languageName: node + linkType: hard + "@types/accept-language-parser@npm:1.5.2": version: 1.5.2 resolution: "@types/accept-language-parser@npm:1.5.2" @@ -16141,6 +18340,18 @@ __metadata: languageName: node linkType: hard +"@types/cacheable-request@npm:^6.0.1": + version: 6.0.3 + resolution: "@types/cacheable-request@npm:6.0.3" + dependencies: + "@types/http-cache-semantics": "*" + "@types/keyv": ^3.1.4 + "@types/node": "*" + "@types/responselike": ^1.0.0 + checksum: d9b26403fe65ce6b0cb3720b7030104c352bcb37e4fac2a7089a25a97de59c355fa08940658751f2f347a8512aa9d18fdb66ab3ade835975b2f454f2d5befbd9 + languageName: node + linkType: hard + "@types/cli-progress@npm:^3.11.0": version: 3.11.4 resolution: "@types/cli-progress@npm:3.11.4" @@ -16306,6 +18517,13 @@ __metadata: languageName: node linkType: hard +"@types/debounce@npm:^1.2.1": + version: 1.2.4 + resolution: "@types/debounce@npm:1.2.4" + checksum: decef3eee65d681556d50f7fac346f1b33134f6b21f806d41326f9dfb362fa66b0282ff0640ae6791b690694c9dc3dad4e146e909e707e6f96650f3aa325b9da + languageName: node + linkType: hard + "@types/debug@npm:4.1.7": version: 4.1.7 resolution: "@types/debug@npm:4.1.7" @@ -16333,6 +18551,15 @@ __metadata: languageName: node linkType: hard +"@types/debug@npm:^4.0.0": + version: 4.1.12 + resolution: "@types/debug@npm:4.1.12" + dependencies: + "@types/ms": "*" + checksum: 47876a852de8240bfdaf7481357af2b88cb660d30c72e73789abf00c499d6bc7cd5e52f41c915d1b9cd8ec9fef5b05688d7b7aef17f7f272c2d04679508d1053 + languageName: node + linkType: hard + "@types/detect-port@npm:^1.3.0": version: 1.3.5 resolution: "@types/detect-port@npm:1.3.5" @@ -16411,6 +18638,15 @@ __metadata: languageName: node linkType: hard +"@types/estree-jsx@npm:^1.0.0": + version: 1.0.5 + resolution: "@types/estree-jsx@npm:1.0.5" + dependencies: + "@types/estree": "*" + checksum: a028ab0cd7b2950168a05c6a86026eb3a36a54a4adfae57f13911d7b49dffe573d9c2b28421b2d029b49b3d02fcd686611be2622dc3dad6d9791166c083f6008 + languageName: node + linkType: hard + "@types/estree@npm:*, @types/estree@npm:^0.0.51": version: 0.0.51 resolution: "@types/estree@npm:0.0.51" @@ -16529,6 +18765,13 @@ __metadata: languageName: node linkType: hard +"@types/gensync@npm:^1.0.0": + version: 1.0.4 + resolution: "@types/gensync@npm:1.0.4" + checksum: 99c3aa0d3f1198973c7e51bea5947b815f3338ce89ce09a39ac8abb41cd844c5b95189da254ea45e50a395fe25fd215664d8ca76c5438814963597afb01f686e + languageName: node + linkType: hard + "@types/glidejs__glide@npm:^3.4.2": version: 3.4.2 resolution: "@types/glidejs__glide@npm:3.4.2" @@ -16545,6 +18788,13 @@ __metadata: languageName: node linkType: hard +"@types/gtag.js@npm:^0.0.10": + version: 0.0.10 + resolution: "@types/gtag.js@npm:0.0.10" + checksum: 5c18ffdc64418887763ec1a564e73c9fbf222ff3eece1fbc35a182fdd884e7884bb7708f67e6e4939f157bb9f2cb7a4aff42be7834527e35c5aac4f98783164c + languageName: node + linkType: hard + "@types/hast@npm:^2.0.0": version: 2.3.4 resolution: "@types/hast@npm:2.3.4" @@ -16554,6 +18804,15 @@ __metadata: languageName: node linkType: hard +"@types/hast@npm:^3.0.0": + version: 3.0.4 + resolution: "@types/hast@npm:3.0.4" + dependencies: + "@types/unist": "*" + checksum: 7a973e8d16fcdf3936090fa2280f408fb2b6a4f13b42edeb5fbd614efe042b82eac68e298e556d50f6b4ad585a3a93c353e9c826feccdc77af59de8dd400d044 + languageName: node + linkType: hard + "@types/hoist-non-react-statics@npm:^3.3.0, @types/hoist-non-react-statics@npm:^3.3.1": version: 3.3.1 resolution: "@types/hoist-non-react-statics@npm:3.3.1" @@ -16578,7 +18837,7 @@ __metadata: languageName: node linkType: hard -"@types/http-cache-semantics@npm:^4.0.2": +"@types/http-cache-semantics@npm:*, @types/http-cache-semantics@npm:^4.0.2": version: 4.0.4 resolution: "@types/http-cache-semantics@npm:4.0.4" checksum: 7f4dd832e618bc1e271be49717d7b4066d77c2d4eed5b81198eb987e532bb3e1c7e02f45d77918185bad936f884b700c10cebe06305f50400f382ab75055f9e8 @@ -16669,6 +18928,13 @@ __metadata: languageName: node linkType: hard +"@types/js-yaml@npm:^4.0.0": + version: 4.0.9 + resolution: "@types/js-yaml@npm:4.0.9" + checksum: e5e5e49b5789a29fdb1f7d204f82de11cb9e8f6cb24ab064c616da5d6e1b3ccfbf95aa5d1498a9fbd3b9e745564e69b4a20b6c530b5a8bbb2d4eb830cda9bc69 + languageName: node + linkType: hard + "@types/jsdom@npm:^21.1.3": version: 21.1.4 resolution: "@types/jsdom@npm:21.1.4" @@ -16751,6 +19017,15 @@ __metadata: languageName: node linkType: hard +"@types/keyv@npm:^3.1.4": + version: 3.1.4 + resolution: "@types/keyv@npm:3.1.4" + dependencies: + "@types/node": "*" + checksum: e009a2bfb50e90ca9b7c6e8f648f8464067271fd99116f881073fa6fa76dc8d0133181dd65e6614d5fb1220d671d67b0124aef7d97dc02d7e342ab143a47779d + languageName: node + linkType: hard + "@types/koa-compose@npm:*": version: 3.2.8 resolution: "@types/koa-compose@npm:3.2.8" @@ -16846,6 +19121,24 @@ __metadata: languageName: node linkType: hard +"@types/mdast@npm:^3.0.0": + version: 3.0.15 + resolution: "@types/mdast@npm:3.0.15" + dependencies: + "@types/unist": ^2 + checksum: af85042a4e3af3f879bde4059fa9e76c71cb552dffc896cdcc6cf9dc1fd38e37035c2dbd6245cfa6535b433f1f0478f5549696234ccace47a64055a10c656530 + languageName: node + linkType: hard + +"@types/mdast@npm:^4.0.0": + version: 4.0.4 + resolution: "@types/mdast@npm:4.0.4" + dependencies: + "@types/unist": "*" + checksum: 20c4e9574cc409db662a35cba52b068b91eb696b3049e94321219d47d34c8ccc99a142be5c76c80a538b612457b03586bc2f6b727a3e9e7530f4c8568f6282ee + languageName: node + linkType: hard + "@types/mdurl@npm:*": version: 1.0.2 resolution: "@types/mdurl@npm:1.0.2" @@ -16853,6 +19146,13 @@ __metadata: languageName: node linkType: hard +"@types/mdurl@npm:^1.0.0": + version: 1.0.5 + resolution: "@types/mdurl@npm:1.0.5" + checksum: e8e872e8da8f517a9c748b06cec61c947cb73fd3069e8aeb0926670ec5dfac5d30549b3d0f1634950401633e812f9b7263f2d5dbe7e98fce12bcb2c659aa4b21 + languageName: node + linkType: hard + "@types/mdx@npm:^2.0.0": version: 2.0.10 resolution: "@types/mdx@npm:2.0.10" @@ -16992,6 +19292,13 @@ __metadata: languageName: node linkType: hard +"@types/parse5@npm:^6.0.0": + version: 6.0.3 + resolution: "@types/parse5@npm:6.0.3" + checksum: ddb59ee4144af5dfcc508a8dcf32f37879d11e12559561e65788756b95b33e6f03ea027d88e1f5408f9b7bfb656bf630ace31a2169edf44151daaf8dd58df1b7 + languageName: node + linkType: hard + "@types/passport-jwt@npm:^3.0.13": version: 3.0.13 resolution: "@types/passport-jwt@npm:3.0.13" @@ -17128,6 +19435,13 @@ __metadata: languageName: node linkType: hard +"@types/react-gtm-module@npm:^2.0.1": + version: 2.0.4 + resolution: "@types/react-gtm-module@npm:2.0.4" + checksum: 635699a2d85f958ba92126cda851f9a1b46df75d3846bdc89ce2345524f73d889a266110d00492f6c23e9e42e70ec2246449a93c9cc2c6367bd643a7d2f0e88a + languageName: node + linkType: hard + "@types/react-phone-number-input@npm:^3.0.14": version: 3.0.14 resolution: "@types/react-phone-number-input@npm:3.0.14" @@ -17190,6 +19504,15 @@ __metadata: languageName: node linkType: hard +"@types/responselike@npm:^1.0.0": + version: 1.0.3 + resolution: "@types/responselike@npm:1.0.3" + dependencies: + "@types/node": "*" + checksum: 6ac4b35723429b11b117e813c7acc42c3af8b5554caaf1fc750404c1ae59f9b7376bc69b9e9e194a5a97357a597c2228b7173d317320f0360d617b6425212f58 + languageName: node + linkType: hard + "@types/retry@npm:0.12.0": version: 0.12.0 resolution: "@types/retry@npm:0.12.0" @@ -17380,6 +19703,20 @@ __metadata: languageName: node linkType: hard +"@types/unist@npm:^2": + version: 2.0.11 + resolution: "@types/unist@npm:2.0.11" + checksum: 6d436e832bc35c6dde9f056ac515ebf2b3384a1d7f63679d12358766f9b313368077402e9c1126a14d827f10370a5485e628bf61aa91117cf4fc882423191a4e + languageName: node + linkType: hard + +"@types/unist@npm:^3.0.0": + version: 3.0.3 + resolution: "@types/unist@npm:3.0.3" + checksum: 96e6453da9e075aaef1dc22482463898198acdc1eeb99b465e65e34303e2ec1e3b1ed4469a9118275ec284dc98019f63c3f5d49422f0e4ac707e5ab90fb3b71a + languageName: node + linkType: hard + "@types/uuid@npm:8.3.1": version: 8.3.1 resolution: "@types/uuid@npm:8.3.1" @@ -17426,6 +19763,24 @@ __metadata: languageName: node linkType: hard +"@types/ws@npm:^8.0.0": + version: 8.5.14 + resolution: "@types/ws@npm:8.5.14" + dependencies: + "@types/node": "*" + checksum: b63d25146a0d2ebb9cb35e4b68c5a01d81b8f4657d62b0a0d9470df6a357798349a44064b2f84b8f98a553ba84d9a5ee302d3053feef02c7771010c55d290ca6 + languageName: node + linkType: hard + +"@types/xml2js@npm:^0.4.11": + version: 0.4.14 + resolution: "@types/xml2js@npm:0.4.14" + dependencies: + "@types/node": "*" + checksum: df9f106b9953dcdec7ba3304ebc56d6c2f61d49bf556d600bed439f94a1733f73ca0bf2d0f64330b402191622862d9d6058bab9d7e3dcb5b0fe51ebdc4372aac + languageName: node + linkType: hard + "@types/yargs-parser@npm:*": version: 21.0.0 resolution: "@types/yargs-parser@npm:21.0.0" @@ -17852,6 +20207,13 @@ __metadata: languageName: node linkType: hard +"@ungap/structured-clone@npm:^1.0.0": + version: 1.3.0 + resolution: "@ungap/structured-clone@npm:1.3.0" + checksum: 64ed518f49c2b31f5b50f8570a1e37bde3b62f2460042c50f132430b2d869c4a6586f13aa33a58a4722715b8158c68cae2827389d6752ac54da2893c83e480fc + languageName: node + linkType: hard + "@unkey/api@npm:^0.19.4": version: 0.19.4 resolution: "@unkey/api@npm:0.19.4" @@ -17889,6 +20251,15 @@ __metadata: languageName: node linkType: hard +"@vercel/analytics@npm:^0.1.6": + version: 0.1.11 + resolution: "@vercel/analytics@npm:0.1.11" + peerDependencies: + react: ^16.8||^17||^18 + checksum: 05b8180ac6e23ebe7c09d74c43f8ee78c408cd0b6546e676389cbf4fba44dfeeae3648c9b52e2421be64fe3aeee8b026e6ea4bdfc0589fb5780670f2b090a167 + languageName: node + linkType: hard + "@vercel/edge-config@npm:^0.1.1": version: 0.1.1 resolution: "@vercel/edge-config@npm:0.1.1" @@ -17922,6 +20293,17 @@ __metadata: languageName: node linkType: hard +"@vercel/og@npm:^0.5.0": + version: 0.5.20 + resolution: "@vercel/og@npm:0.5.20" + dependencies: + "@resvg/resvg-wasm": 2.6.0 + satori: 0.10.9 + yoga-wasm-web: 0.3.3 + checksum: b6e08f3a9b2a0ef7c2cfe074d7e2699e7d4b1ab78cab370846ebea92dcb1becfcfef50309e1f905c1c37f37a64484fc789b0a364a5ce9496b8b4ab25048e7aaa + languageName: node + linkType: hard + "@vercel/og@npm:^0.6.3": version: 0.6.3 resolution: "@vercel/og@npm:0.6.3" @@ -18403,6 +20785,52 @@ __metadata: languageName: node linkType: hard +"@whatwg-node/disposablestack@npm:^0.0.5": + version: 0.0.5 + resolution: "@whatwg-node/disposablestack@npm:0.0.5" + dependencies: + tslib: ^2.6.3 + checksum: d2df8ba46c567c3cc07767821fcedc8f4c9247f1f5488c7dadc42f86ca6429bace4451e48506ac2de15afe8e5baa1cd0951a7aa6419f091d48c671844e399931 + languageName: node + linkType: hard + +"@whatwg-node/fetch@npm:^0.10.0, @whatwg-node/fetch@npm:^0.10.1": + version: 0.10.3 + resolution: "@whatwg-node/fetch@npm:0.10.3" + dependencies: + "@whatwg-node/node-fetch": ^0.7.7 + urlpattern-polyfill: ^10.0.0 + checksum: 9fb7072cb048d1b747dfb6cf9b9a4e5240071bd290095b0b5552644b68626fa7116c76817462c74461dc0e0c57eb6bd2ba73e2dafa5f1d8d178e0366bea75bbb + languageName: node + linkType: hard + +"@whatwg-node/fetch@npm:^0.5.3": + version: 0.5.4 + resolution: "@whatwg-node/fetch@npm:0.5.4" + dependencies: + "@peculiar/webcrypto": ^1.4.0 + abort-controller: ^3.0.0 + busboy: ^1.6.0 + form-data-encoder: ^1.7.1 + formdata-node: ^4.3.1 + node-fetch: ^2.6.7 + undici: ^5.12.0 + web-streams-polyfill: ^3.2.0 + checksum: 6fb6c6a582cb78fc438beee11f1d931eabc0ac8b5b660b68ea30a42c2068f4d3126d2b07e21770a4d6f391e70979bae527ca892898da9857e73dc3cc7adb8da9 + languageName: node + linkType: hard + +"@whatwg-node/node-fetch@npm:^0.7.7": + version: 0.7.8 + resolution: "@whatwg-node/node-fetch@npm:0.7.8" + dependencies: + "@whatwg-node/disposablestack": ^0.0.5 + busboy: ^1.6.0 + tslib: ^2.6.3 + checksum: e55bed5736a824454c50aee45534b7128324f0e96b6e3ac2aa3a6598a9433895fac2c11191fbc9d9362e91d530469d505db8ba2c29782fd0c4b0b6c25d9c5344 + languageName: node + linkType: hard + "@wojtekmaj/date-utils@npm:^1.0.2, @wojtekmaj/date-utils@npm:^1.0.3": version: 1.0.3 resolution: "@wojtekmaj/date-utils@npm:1.0.3" @@ -19204,6 +21632,13 @@ __metadata: languageName: node linkType: hard +"array-flatten@npm:^3.0.0": + version: 3.0.0 + resolution: "array-flatten@npm:3.0.0" + checksum: ad00c51ca70cf837501fb6da823ba39bc6a86b43d0b76d840daa02fe0f8e68e94ad5bc2d0d038053118b879aaca8ea6168c32c7387a2fa5b118ad28db4f1f863 + languageName: node + linkType: hard + "array-includes@npm:^3.1.4": version: 3.1.4 resolution: "array-includes@npm:3.1.4" @@ -19587,6 +22022,17 @@ __metadata: languageName: node linkType: hard +"asn1js@npm:^3.0.5": + version: 3.0.5 + resolution: "asn1js@npm:3.0.5" + dependencies: + pvtsutils: ^1.3.2 + pvutils: ^1.1.3 + tslib: ^2.4.0 + checksum: 3b6af1bbadd5762ef8ead5daf2f6bda1bc9e23bc825c4dcc996aa1f9521ad7390a64028565d95d98090d69c8431f004c71cccb866004759169d7c203cf9075eb + languageName: node + linkType: hard + "assert-plus@npm:1.0.0, assert-plus@npm:^1.0.0": version: 1.0.0 resolution: "assert-plus@npm:1.0.0" @@ -19678,6 +22124,13 @@ __metadata: languageName: node linkType: hard +"async-scheduler@npm:^1.4.4": + version: 1.4.4 + resolution: "async-scheduler@npm:1.4.4" + checksum: 080310e642bc4309aa83d625b21f9f0f1291bd0a292361cf6c0ebc86646ca719888bebc3d519f8ed177130b623b0f20640dad7f24fd8c2ede31d6d6f976968a4 + languageName: node + linkType: hard + "async@npm:^3.2.3, async@npm:^3.2.4": version: 3.2.4 resolution: "async@npm:3.2.4" @@ -19730,7 +22183,7 @@ __metadata: languageName: node linkType: hard -"auto-bind@npm:4.0.0": +"auto-bind@npm:4.0.0, auto-bind@npm:~4.0.0": version: 4.0.0 resolution: "auto-bind@npm:4.0.0" checksum: 00cad71cce5742faccb7dd65c1b55ebc4f45add4b0c9a1547b10b05bab22813230133b0c892c67ba3eb969a4524710c5e43cc45c72898ec84e56f3a596e7a04f @@ -19921,6 +22374,17 @@ __metadata: languageName: node linkType: hard +"axios@npm:^1.6.1": + version: 1.7.9 + resolution: "axios@npm:1.7.9" + dependencies: + follow-redirects: ^1.15.6 + form-data: ^4.0.0 + proxy-from-env: ^1.1.0 + checksum: cb8ce291818effda09240cb60f114d5625909b345e10f389a945320e06acf0bc949d0f8422d25720f5dd421362abee302c99f5e97edec4c156c8939814b23d19 + languageName: node + linkType: hard + "axios@npm:^1.6.7": version: 1.6.8 resolution: "axios@npm:1.6.8" @@ -20106,6 +22570,13 @@ __metadata: languageName: node linkType: hard +"babel-plugin-syntax-trailing-function-commas@npm:^7.0.0-beta.0": + version: 7.0.0-beta.0 + resolution: "babel-plugin-syntax-trailing-function-commas@npm:7.0.0-beta.0" + checksum: e37509156ca945dd9e4b82c66dd74f2d842ad917bd280cb5aa67960942300cd065eeac476d2514bdcdedec071277a358f6d517c31d9f9244d9bbc3619a8ecf8a + languageName: node + linkType: hard + "babel-preset-current-node-syntax@npm:^1.0.0": version: 1.0.1 resolution: "babel-preset-current-node-syntax@npm:1.0.1" @@ -20128,6 +22599,43 @@ __metadata: languageName: node linkType: hard +"babel-preset-fbjs@npm:^3.4.0": + version: 3.4.0 + resolution: "babel-preset-fbjs@npm:3.4.0" + dependencies: + "@babel/plugin-proposal-class-properties": ^7.0.0 + "@babel/plugin-proposal-object-rest-spread": ^7.0.0 + "@babel/plugin-syntax-class-properties": ^7.0.0 + "@babel/plugin-syntax-flow": ^7.0.0 + "@babel/plugin-syntax-jsx": ^7.0.0 + "@babel/plugin-syntax-object-rest-spread": ^7.0.0 + "@babel/plugin-transform-arrow-functions": ^7.0.0 + "@babel/plugin-transform-block-scoped-functions": ^7.0.0 + "@babel/plugin-transform-block-scoping": ^7.0.0 + "@babel/plugin-transform-classes": ^7.0.0 + "@babel/plugin-transform-computed-properties": ^7.0.0 + "@babel/plugin-transform-destructuring": ^7.0.0 + "@babel/plugin-transform-flow-strip-types": ^7.0.0 + "@babel/plugin-transform-for-of": ^7.0.0 + "@babel/plugin-transform-function-name": ^7.0.0 + "@babel/plugin-transform-literals": ^7.0.0 + "@babel/plugin-transform-member-expression-literals": ^7.0.0 + "@babel/plugin-transform-modules-commonjs": ^7.0.0 + "@babel/plugin-transform-object-super": ^7.0.0 + "@babel/plugin-transform-parameters": ^7.0.0 + "@babel/plugin-transform-property-literals": ^7.0.0 + "@babel/plugin-transform-react-display-name": ^7.0.0 + "@babel/plugin-transform-react-jsx": ^7.0.0 + "@babel/plugin-transform-shorthand-properties": ^7.0.0 + "@babel/plugin-transform-spread": ^7.0.0 + "@babel/plugin-transform-template-literals": ^7.0.0 + babel-plugin-syntax-trailing-function-commas: ^7.0.0-beta.0 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: b3352cf690729125997f254bc31b9c4db347f8646f1571958ced1c45f0da89439e183e1c88e35397eb0361b9e1fbb1dd8142d3f4647814deb427e53c54f44d5f + languageName: node + linkType: hard + "babel-preset-jest@npm:^29.6.3": version: 29.6.3 resolution: "babel-preset-jest@npm:29.6.3" @@ -20140,6 +22648,23 @@ __metadata: languageName: node linkType: hard +"babel-runtime@npm:^6.11.6": + version: 6.26.0 + resolution: "babel-runtime@npm:6.26.0" + dependencies: + core-js: ^2.4.0 + regenerator-runtime: ^0.11.0 + checksum: 8aeade94665e67a73c1ccc10f6fd42ba0c689b980032b70929de7a6d9a12eb87ef51902733f8fefede35afea7a5c3ef7e916a64d503446c1eedc9e3284bd3d50 + languageName: node + linkType: hard + +"bail@npm:^2.0.0": + version: 2.0.2 + resolution: "bail@npm:2.0.2" + checksum: aab4e8ccdc8d762bf3fdfce8e706601695620c0c2eda256dd85088dc0be3cfd7ff126f6e99c2bee1f24f5d418414aacf09d7f9702f16d6963df2fa488cda8824 + languageName: node + linkType: hard + "balanced-match@npm:^1.0.0": version: 1.0.2 resolution: "balanced-match@npm:1.0.2" @@ -20646,6 +23171,20 @@ __metadata: languageName: node linkType: hard +"browserslist@npm:^4.24.0": + version: 4.24.4 + resolution: "browserslist@npm:4.24.4" + dependencies: + caniuse-lite: ^1.0.30001688 + electron-to-chromium: ^1.5.73 + node-releases: ^2.0.19 + update-browserslist-db: ^1.1.1 + bin: + browserslist: cli.js + checksum: 64074bf6cf0a9ae3094d753270e3eae9cf925149db45d646f0bc67bacc2e46d7ded64a4e835b95f5fdcf0350f63a83c3755b32f80831f643a47f0886deb8a065 + languageName: node + linkType: hard + "bs-logger@npm:0.x": version: 0.2.6 resolution: "bs-logger@npm:0.2.6" @@ -20794,7 +23333,7 @@ __metadata: languageName: node linkType: hard -"busboy@npm:1.6.0, busboy@npm:^1.0.0": +"busboy@npm:1.6.0, busboy@npm:^1.0.0, busboy@npm:^1.6.0": version: 1.6.0 resolution: "busboy@npm:1.6.0" dependencies: @@ -20899,6 +23438,13 @@ __metadata: languageName: node linkType: hard +"cacheable-lookup@npm:^5.0.3": + version: 5.0.4 + resolution: "cacheable-lookup@npm:5.0.4" + checksum: 763e02cf9196bc9afccacd8c418d942fc2677f22261969a4c2c2e760fa44a2351a81557bd908291c3921fe9beb10b976ba8fa50c5ca837c5a0dd945f16468f2d + languageName: node + linkType: hard + "cacheable-lookup@npm:^7.0.0": version: 7.0.0 resolution: "cacheable-lookup@npm:7.0.0" @@ -20921,6 +23467,21 @@ __metadata: languageName: node linkType: hard +"cacheable-request@npm:^7.0.2": + version: 7.0.4 + resolution: "cacheable-request@npm:7.0.4" + 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 + checksum: 0de9df773fd4e7dd9bd118959878f8f2163867e2e1ab3575ffbecbe6e75e80513dd0c68ba30005e5e5a7b377cc6162bbc00ab1db019bb4e9cb3c2f3f7a6f1ee4 + languageName: node + linkType: hard + "calcom-monorepo@workspace:.": version: 0.0.0-use.local resolution: "calcom-monorepo@workspace:." @@ -21054,6 +23615,16 @@ __metadata: languageName: node linkType: hard +"camel-case@npm:^3.0.0": + version: 3.0.0 + resolution: "camel-case@npm:3.0.0" + dependencies: + no-case: ^2.2.0 + upper-case: ^1.1.1 + checksum: 4190ed6ab8acf4f3f6e1a78ad4d0f3f15ce717b6bfa1b5686d58e4bcd29960f6e312dd746b5fa259c6d452f1413caef25aee2e10c9b9a580ac83e516533a961a + languageName: node + linkType: hard + "camel-case@npm:^4.1.2": version: 4.1.2 resolution: "camel-case@npm:4.1.2" @@ -21082,6 +23653,13 @@ __metadata: languageName: node linkType: hard +"camelcase@npm:^3.0.0": + version: 3.0.0 + resolution: "camelcase@npm:3.0.0" + checksum: ae4fe1c17c8442a3a345a6b7d2393f028ab7a7601af0c352ad15d1ab97ca75112e19e29c942b2a214898e160194829b68923bce30e018d62149c6d84187f1673 + languageName: node + linkType: hard + "camelcase@npm:^5.0.0, camelcase@npm:^5.3.1": version: 5.3.1 resolution: "camelcase@npm:5.3.1" @@ -21159,6 +23737,24 @@ __metadata: languageName: node linkType: hard +"caniuse-lite@npm:^1.0.30001688": + version: 1.0.30001699 + resolution: "caniuse-lite@npm:1.0.30001699" + checksum: 697172065537b0f33c428fe8561f4cba6796428dc8e3e56f78eee28404edfcbea70d48bb109ab6c6536de6da90e331058a2cb8ef3a15c58b2226c96ee558bc07 + languageName: node + linkType: hard + +"capital-case@npm:^1.0.4": + version: 1.0.4 + resolution: "capital-case@npm:1.0.4" + dependencies: + no-case: ^3.0.4 + tslib: ^2.0.3 + upper-case-first: ^2.0.2 + checksum: 41fa8fa87f6d24d0835a2b4a9341a3eaecb64ac29cd7c5391f35d6175a0fa98ab044e7f2602e1ec3afc886231462ed71b5b80c590b8b41af903ec2c15e5c5931 + languageName: node + linkType: hard + "cardinal@npm:^2.1.1": version: 2.1.1 resolution: "cardinal@npm:2.1.1" @@ -21185,6 +23781,13 @@ __metadata: languageName: node linkType: hard +"ccount@npm:^2.0.0": + version: 2.0.1 + resolution: "ccount@npm:2.0.1" + checksum: 48193dada54c9e260e0acf57fc16171a225305548f9ad20d5471e0f7a8c026aedd8747091dccb0d900cde7df4e4ddbd235df0d8de4a64c71b12f0d3303eeafd4 + languageName: node + linkType: hard + "chai@npm:^5.1.1": version: 5.1.1 resolution: "chai@npm:5.1.1" @@ -21272,6 +23875,24 @@ __metadata: languageName: node linkType: hard +"change-case-all@npm:1.0.15": + version: 1.0.15 + resolution: "change-case-all@npm:1.0.15" + dependencies: + change-case: ^4.1.2 + is-lower-case: ^2.0.2 + is-upper-case: ^2.0.2 + lower-case: ^2.0.2 + lower-case-first: ^2.0.2 + sponge-case: ^1.0.1 + swap-case: ^2.0.2 + title-case: ^3.0.3 + upper-case: ^2.0.2 + upper-case-first: ^2.0.2 + checksum: e1dabdcd8447a3690f3faf15f92979dfbc113109b50916976e1d5e518e6cfdebee4f05f54d0ca24fb79a4bf835185b59ae25e967bb3dc10bd236a775b19ecc52 + languageName: node + linkType: hard + "change-case@npm:^2.3.0": version: 2.3.1 resolution: "change-case@npm:2.3.1" @@ -21296,6 +23917,52 @@ __metadata: languageName: node linkType: hard +"change-case@npm:^3.0.0": + version: 3.1.0 + resolution: "change-case@npm:3.1.0" + dependencies: + camel-case: ^3.0.0 + constant-case: ^2.0.0 + dot-case: ^2.1.0 + header-case: ^1.0.0 + is-lower-case: ^1.1.0 + is-upper-case: ^1.1.0 + lower-case: ^1.1.1 + lower-case-first: ^1.0.0 + no-case: ^2.3.2 + param-case: ^2.1.0 + pascal-case: ^2.0.0 + path-case: ^2.1.0 + sentence-case: ^2.1.0 + snake-case: ^2.1.0 + swap-case: ^1.1.0 + title-case: ^2.1.0 + upper-case: ^1.1.1 + upper-case-first: ^1.1.0 + checksum: d6f9f90a5f1d2a98294e06ea62f913fa0d7cfc289f188bf05662344da6128f5710b5c99ece83682c6a848db8d996b7348e09b2235dc3363afb6ae7142e7978e1 + languageName: node + linkType: hard + +"change-case@npm:^4.1.2": + version: 4.1.2 + resolution: "change-case@npm:4.1.2" + dependencies: + camel-case: ^4.1.2 + capital-case: ^1.0.4 + constant-case: ^3.0.4 + dot-case: ^3.0.4 + header-case: ^2.0.4 + no-case: ^3.0.4 + param-case: ^3.0.4 + pascal-case: ^3.1.2 + path-case: ^3.0.4 + sentence-case: ^3.0.4 + snake-case: ^3.0.4 + tslib: ^2.0.3 + checksum: e4bc4a093a1f7cce8b33896665cf9e456e3bc3cc0def2ad7691b1994cfca99b3188d0a513b16855b01a6bd20692fcde12a7d4d87a5615c4c515bbbf0e651f116 + languageName: node + linkType: hard + "char-regex@npm:^1.0.2": version: 1.0.2 resolution: "char-regex@npm:1.0.2" @@ -21303,6 +23970,13 @@ __metadata: languageName: node linkType: hard +"character-entities-html4@npm:^2.0.0": + version: 2.1.0 + resolution: "character-entities-html4@npm:2.1.0" + checksum: 7034aa7c7fa90309667f6dd50499c8a760c3d3a6fb159adb4e0bada0107d194551cdbad0714302f62d06ce4ed68565c8c2e15fdef2e8f8764eb63fa92b34b11d + languageName: node + linkType: hard + "character-entities-legacy@npm:^1.0.0": version: 1.1.4 resolution: "character-entities-legacy@npm:1.1.4" @@ -21310,6 +23984,13 @@ __metadata: languageName: node linkType: hard +"character-entities-legacy@npm:^3.0.0": + version: 3.0.0 + resolution: "character-entities-legacy@npm:3.0.0" + checksum: 7582af055cb488b626d364b7d7a4e46b06abd526fb63c0e4eb35bcb9c9799cc4f76b39f34fdccef2d1174ac95e53e9ab355aae83227c1a2505877893fce77731 + languageName: node + linkType: hard + "character-entities@npm:^1.0.0": version: 1.2.4 resolution: "character-entities@npm:1.2.4" @@ -21317,6 +23998,13 @@ __metadata: languageName: node linkType: hard +"character-entities@npm:^2.0.0": + version: 2.0.2 + resolution: "character-entities@npm:2.0.2" + checksum: cf1643814023697f725e47328fcec17923b8f1799102a8a79c1514e894815651794a2bffd84bb1b3a4b124b050154e4529ed6e81f7c8068a734aecf07a6d3def + languageName: node + linkType: hard + "character-reference-invalid@npm:^1.0.0": version: 1.1.4 resolution: "character-reference-invalid@npm:1.1.4" @@ -21324,6 +24012,13 @@ __metadata: languageName: node linkType: hard +"character-reference-invalid@npm:^2.0.0": + version: 2.0.1 + resolution: "character-reference-invalid@npm:2.0.1" + checksum: 98d3b1a52ae510b7329e6ee7f6210df14f1e318c5415975d4c9e7ee0ef4c07875d47c6e74230c64551f12f556b4a8ccc24d9f3691a2aa197019e72a95e9297ee + languageName: node + linkType: hard + "chardet@npm:^0.7.0": version: 0.7.0 resolution: "chardet@npm:0.7.0" @@ -21338,6 +24033,13 @@ __metadata: languageName: node linkType: hard +"chart.js@npm:^3.7.1": + version: 3.9.1 + resolution: "chart.js@npm:3.9.1" + checksum: 9ab0c0ac01215af0b3f020f2e313030fd6e347b48ed17d5484ee9c4e8ead45e78ae71bea16c397621c386b409ce0b14bf17f9f6c2492cd15b56c0f433efdfff6 + languageName: node + linkType: hard + "check-error@npm:^2.1.1": version: 2.1.1 resolution: "check-error@npm:2.1.1" @@ -21732,13 +24434,24 @@ __metadata: languageName: node linkType: hard -"client-only@npm:0.0.1": +"client-only@npm:0.0.1, client-only@npm:^0.0.1": version: 0.0.1 resolution: "client-only@npm:0.0.1" checksum: 0c16bf660dadb90610553c1d8946a7fdfb81d624adea073b8440b7d795d5b5b08beb3c950c6a2cf16279365a3265158a236876d92bce16423c485c322d7dfaf8 languageName: node linkType: hard +"cliui@npm:^3.2.0": + version: 3.2.0 + resolution: "cliui@npm:3.2.0" + dependencies: + string-width: ^1.0.1 + strip-ansi: ^3.0.1 + wrap-ansi: ^2.0.0 + checksum: c68d1dbc3e347bfe79ed19cc7f48007d5edd6cd8438342e32073e0b4e311e3c44e1f4f19221462bc6590de56c2df520e427533a9dde95dee25710bec322746ad + languageName: node + linkType: hard + "cliui@npm:^6.0.0": version: 6.0.0 resolution: "cliui@npm:6.0.0" @@ -21783,6 +24496,15 @@ __metadata: languageName: node linkType: hard +"clone-response@npm:^1.0.2": + version: 1.0.3 + resolution: "clone-response@npm:1.0.3" + dependencies: + mimic-response: ^1.0.0 + checksum: 4e671cac39b11c60aa8ba0a450657194a5d6504df51bca3fac5b3bd0145c4f8e8464898f87c8406b83232e3bc5cca555f51c1f9c8ac023969ebfbf7f6bdabb2e + languageName: node + linkType: hard + "clone@npm:^1.0.2": version: 1.0.4 resolution: "clone@npm:1.0.4" @@ -21811,6 +24533,13 @@ __metadata: languageName: node linkType: hard +"clsx@npm:^1.2.1": + version: 1.2.1 + resolution: "clsx@npm:1.2.1" + checksum: 30befca8019b2eb7dbad38cff6266cf543091dae2825c856a62a8ccf2c3ab9c2907c4d12b288b73101196767f66812365400a227581484a05f968b0307cfaf12 + languageName: node + linkType: hard + "clsx@npm:^2.0.0": version: 2.1.0 resolution: "clsx@npm:2.1.0" @@ -21861,6 +24590,15 @@ __metadata: languageName: node linkType: hard +"cobe@npm:^0.4.1": + version: 0.4.2 + resolution: "cobe@npm:0.4.2" + dependencies: + phenomenon: ^1.6.0 + checksum: 4c11dd8cf3c6614a2ff2f6eacca5283278c6db06c2e441011aa90f58c66d045e66ef98a5e4b9d0282d58ee22f5b87d965538aa4c6064ed97f436f3e4cd9ee3ed + languageName: node + linkType: hard + "code-block-writer@npm:^11.0.0": version: 11.0.0 resolution: "code-block-writer@npm:11.0.0" @@ -21879,6 +24617,13 @@ __metadata: languageName: node linkType: hard +"code-point-at@npm:^1.0.0": + version: 1.1.0 + resolution: "code-point-at@npm:1.1.0" + checksum: 17d5666611f9b16d64fdf48176d9b7fb1c7d1c1607a189f7e600040a11a6616982876af148230336adb7d8fe728a559f743a4e29db3747e3b1a32fa7f4529681 + languageName: node + linkType: hard + "coffeescript@npm:^1.10.0": version: 1.12.7 resolution: "coffeescript@npm:1.12.7" @@ -22014,6 +24759,13 @@ __metadata: languageName: node linkType: hard +"comma-separated-tokens@npm:^2.0.0": + version: 2.0.3 + resolution: "comma-separated-tokens@npm:2.0.3" + checksum: e3bf9e0332a5c45f49b90e79bcdb4a7a85f28d6a6f0876a94f1bb9b2bfbdbbb9292aac50e1e742d8c0db1e62a0229a106f57917e2d067fca951d81737651700d + languageName: node + linkType: hard + "command-score@npm:0.1.2, command-score@npm:^0.1.2": version: 0.1.2 resolution: "command-score@npm:0.1.2" @@ -22121,6 +24873,13 @@ __metadata: languageName: node linkType: hard +"common-tags@npm:1.8.2": + version: 1.8.2 + resolution: "common-tags@npm:1.8.2" + checksum: 767a6255a84bbc47df49a60ab583053bb29a7d9687066a18500a516188a062c4e4cd52de341f22de0b07062e699b1b8fe3cfa1cb55b241cb9301aeb4f45b4dff + languageName: node + linkType: hard + "commondir@npm:^1.0.1": version: 1.0.1 resolution: "commondir@npm:1.0.1" @@ -22216,6 +24975,26 @@ __metadata: languageName: node linkType: hard +"concurrently@npm:^7.6.0": + version: 7.6.0 + resolution: "concurrently@npm:7.6.0" + 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 + bin: + conc: dist/bin/concurrently.js + concurrently: dist/bin/concurrently.js + checksum: f705c9a7960f1b16559ca64958043faeeef6385c0bf30a03d1375e15ab2d96dba4f8166f1bbbb1c85e8da35ca0ce3c353875d71dff2aa132b2357bb533b3332e + languageName: node + linkType: hard + "conf@npm:10.2.0": version: 10.2.0 resolution: "conf@npm:10.2.0" @@ -22300,6 +25079,27 @@ __metadata: languageName: node linkType: hard +"constant-case@npm:^2.0.0": + version: 2.0.0 + resolution: "constant-case@npm:2.0.0" + dependencies: + snake-case: ^2.1.0 + upper-case: ^1.1.1 + checksum: 893c793a425ebcd0744061c7f12650c655aae259b89d5654fb8eda42d22c3690716a4988ed03f2abe370b1ee7bfec44f8e4395e76e2f1458a8921982b15410ba + languageName: node + linkType: hard + +"constant-case@npm:^3.0.4": + version: 3.0.4 + resolution: "constant-case@npm:3.0.4" + dependencies: + no-case: ^3.0.4 + tslib: ^2.0.3 + upper-case: ^2.0.2 + checksum: 6c3346d51afc28d9fae922e966c68eb77a19d94858dba230dd92d7b918b37d36db50f0311e9ecf6847e43e934b1c01406a0936973376ab17ec2c471fbcfb2cf3 + languageName: node + linkType: hard + "constants-browserify@npm:^1.0.0": version: 1.0.0 resolution: "constants-browserify@npm:1.0.0" @@ -22480,6 +25280,13 @@ __metadata: languageName: node linkType: hard +"core-js@npm:^2.4.0": + version: 2.6.12 + resolution: "core-js@npm:2.6.12" + checksum: 44fa9934a85f8c78d61e0c8b7b22436330471ffe59ec5076fe7f324d6e8cf7f824b14b1c81ca73608b13bdb0fef035bd820989bf059767ad6fa13123bb8bd016 + languageName: node + linkType: hard + "core-js@npm:^3": version: 3.21.1 resolution: "core-js@npm:3.21.1" @@ -22561,7 +25368,7 @@ __metadata: languageName: node linkType: hard -"cosmiconfig@npm:^8.2.0": +"cosmiconfig@npm:^8.1.0, cosmiconfig@npm:^8.1.3, cosmiconfig@npm:^8.2.0": version: 8.3.6 resolution: "cosmiconfig@npm:8.3.6" dependencies: @@ -22697,6 +25504,18 @@ __metadata: languageName: node linkType: hard +"cross-env@npm:^7.0.3": + version: 7.0.3 + resolution: "cross-env@npm:7.0.3" + dependencies: + cross-spawn: ^7.0.1 + bin: + cross-env: src/bin/cross-env.js + cross-env-shell: src/bin/cross-env-shell.js + checksum: 26f2f3ea2ab32617f57effb70d329c2070d2f5630adc800985d8b30b56e8bf7f5f439dd3a0358b79cee6f930afc23cf8e23515f17ccfb30092c6b62c6b630a79 + languageName: node + linkType: hard + "cross-fetch@npm:3.1.5, cross-fetch@npm:^3.1.5": version: 3.1.5 resolution: "cross-fetch@npm:3.1.5" @@ -22715,6 +25534,15 @@ __metadata: languageName: node linkType: hard +"cross-inspect@npm:1.0.1": + version: 1.0.1 + resolution: "cross-inspect@npm:1.0.1" + dependencies: + tslib: ^2.4.0 + checksum: 7c1e02e0a9670b62416a3ea1df7ae880fdad3aa0a857de8932c4e5f8acd71298c7e3db9da8e9da603f5692cd1879938f5e72e34a9f5d1345987bef656d117fc1 + languageName: node + linkType: hard + "cross-spawn@npm:7.0.3, cross-spawn@npm:^7.0.0, cross-spawn@npm:^7.0.2, cross-spawn@npm:^7.0.3": version: 7.0.3 resolution: "cross-spawn@npm:7.0.3" @@ -22750,7 +25578,7 @@ __metadata: languageName: node linkType: hard -"cross-spawn@npm:^7.0.6": +"cross-spawn@npm:^7.0.1, cross-spawn@npm:^7.0.6": version: 7.0.6 resolution: "cross-spawn@npm:7.0.6" dependencies: @@ -23266,6 +26094,13 @@ __metadata: languageName: node linkType: hard +"dataloader@npm:^2.2.3": + version: 2.2.3 + resolution: "dataloader@npm:2.2.3" + checksum: cc272181f6cad0ea20511c0a0d270cbc1df960a3526ab24941bbeb2cb7120499a598fe2cd41b4818527367acf7bc1be0723b6e5034637db4759a396c904b78a6 + languageName: node + linkType: hard + "date-fns@npm:^2.28.0": version: 2.29.3 resolution: "date-fns@npm:2.29.3" @@ -23273,6 +26108,15 @@ __metadata: languageName: node linkType: hard +"date-fns@npm:^2.29.1": + version: 2.30.0 + resolution: "date-fns@npm:2.30.0" + dependencies: + "@babel/runtime": ^7.21.0 + checksum: f7be01523282e9bb06c0cd2693d34f245247a29098527d4420628966a2d9aad154bd0e90a6b1cf66d37adcb769cd108cf8a7bd49d76db0fb119af5cdd13644f4 + languageName: node + linkType: hard + "date-fns@npm:^3.6.0": version: 3.6.0 resolution: "date-fns@npm:3.6.0" @@ -23280,6 +26124,43 @@ __metadata: languageName: node linkType: hard +"datocms-listen@npm:^0.1.9": + version: 0.1.15 + resolution: "datocms-listen@npm:0.1.15" + dependencies: + "@0no-co/graphql.web": ^1.0.1 + checksum: 243fec6f8c07d35f8d8d206ded45c4b8cfeb22907bba23d2180af6284903e4af1146c89e08ad0f68977193d42530323c53d0d906f7cf9f1ba92490ed11386e8c + languageName: node + linkType: hard + +"datocms-structured-text-generic-html-renderer@npm:^2.0.1, datocms-structured-text-generic-html-renderer@npm:^2.1.12": + version: 2.1.12 + resolution: "datocms-structured-text-generic-html-renderer@npm:2.1.12" + dependencies: + datocms-structured-text-utils: ^2.1.12 + checksum: ef9e29b15903ce69be42faa4f4a4364bb7ba0c6565008cb2f557e8865c0806edb938a27f9bee7aa682f7af84fe89489b688b9713ea48501c139d204fea1f18c0 + languageName: node + linkType: hard + +"datocms-structured-text-to-plain-text@npm:^2.0.4": + version: 2.1.12 + resolution: "datocms-structured-text-to-plain-text@npm:2.1.12" + dependencies: + datocms-structured-text-generic-html-renderer: ^2.1.12 + datocms-structured-text-utils: ^2.1.12 + checksum: 8d436ca14379650d66257b5a2f36523e1ebaee41584caf021c863155404a292dbde7408c6cb0e0185638c2eb7508087239f862e78e8647b806ececd4e24683fd + languageName: node + linkType: hard + +"datocms-structured-text-utils@npm:^2.0.1, datocms-structured-text-utils@npm:^2.0.4, datocms-structured-text-utils@npm:^2.1.12": + version: 2.1.12 + resolution: "datocms-structured-text-utils@npm:2.1.12" + dependencies: + array-flatten: ^3.0.0 + checksum: 68d5be9cb711fb630866cca2c0e44b333b390d9672b2ea680d5870c26e8ccadcc6bd77d02a95ccbb913c160466a3046cbd934c41712f9d064f98a73009e0b97a + languageName: node + linkType: hard + "dayjs@npm:1.11.4": version: 1.11.4 resolution: "dayjs@npm:1.11.4" @@ -23327,6 +26208,13 @@ __metadata: languageName: node linkType: hard +"debounce@npm:^1.2.0, debounce@npm:^1.2.1": + version: 1.2.1 + resolution: "debounce@npm:1.2.1" + checksum: 682a89506d9e54fb109526f4da255c5546102fbb8e3ae75eef3b04effaf5d4853756aee97475cd4650641869794e44f410eeb20ace2b18ea592287ab2038519e + languageName: node + linkType: hard + "debug@npm:2.6.9, debug@npm:^2.2.0, debug@npm:^2.6.0, debug@npm:^2.6.9": version: 2.6.9 resolution: "debug@npm:2.6.9" @@ -23357,6 +26245,18 @@ __metadata: languageName: node linkType: hard +"debug@npm:^4.0.0": + version: 4.4.0 + resolution: "debug@npm:4.4.0" + dependencies: + ms: ^2.1.3 + peerDependenciesMeta: + supports-color: + optional: true + checksum: fb42df878dd0e22816fc56e1fdca9da73caa85212fbe40c868b1295a6878f9101ae684f4eeef516c13acfc700f5ea07f1136954f43d4cd2d477a811144136479 + languageName: node + linkType: hard + "debug@npm:^4.3.6, debug@npm:^4.3.7": version: 4.3.7 resolution: "debug@npm:4.3.7" @@ -23379,7 +26279,7 @@ __metadata: languageName: node linkType: hard -"decamelize@npm:^1.1.0, decamelize@npm:^1.2.0": +"decamelize@npm:^1.1.0, decamelize@npm:^1.1.1, decamelize@npm:^1.2.0": version: 1.2.0 resolution: "decamelize@npm:1.2.0" checksum: ad8c51a7e7e0720c70ec2eeb1163b66da03e7616d7b98c9ef43cce2416395e84c1e9548dd94f5f6ffecfee9f8b94251fc57121a8b021f2ff2469b2bae247b8aa @@ -23400,6 +26300,15 @@ __metadata: languageName: node linkType: hard +"decode-named-character-reference@npm:^1.0.0": + version: 1.0.2 + resolution: "decode-named-character-reference@npm:1.0.2" + dependencies: + character-entities: ^2.0.0 + checksum: f4c71d3b93105f20076052f9cb1523a22a9c796b8296cd35eef1ca54239c78d182c136a848b83ff8da2071e3ae2b1d300bf29d00650a6d6e675438cc31b11d78 + languageName: node + linkType: hard + "decompress-response@npm:^6.0.0": version: 6.0.0 resolution: "decompress-response@npm:6.0.0" @@ -23525,7 +26434,7 @@ __metadata: languageName: node linkType: hard -"defer-to-connect@npm:^2.0.1": +"defer-to-connect@npm:^2.0.0, defer-to-connect@npm:^2.0.1": version: 2.0.1 resolution: "defer-to-connect@npm:2.0.1" checksum: 8a9b50d2f25446c0bfefb55a48e90afd58f85b21bcf78e9207cd7b804354f6409032a1705c2491686e202e64fc05f147aa5aa45f9aa82627563f045937f5791b @@ -23676,6 +26585,13 @@ __metadata: languageName: node linkType: hard +"dependency-graph@npm:^0.11.0": + version: 0.11.0 + resolution: "dependency-graph@npm:0.11.0" + checksum: 477204beaa9be69e642bc31ffe7a8c383d0cf48fa27acbc91c5df01431ab913e65c154213d2ef83d034c98d77280743ec85e5da018a97a18dd43d3c0b78b28cd + languageName: node + linkType: hard + "deprecation@npm:^2.0.0": version: 2.3.1 resolution: "deprecation@npm:2.3.1" @@ -23683,7 +26599,7 @@ __metadata: languageName: node linkType: hard -"dequal@npm:^2.0.2, dequal@npm:^2.0.3": +"dequal@npm:^2.0.0, dequal@npm:^2.0.2, dequal@npm:^2.0.3": version: 2.0.3 resolution: "dequal@npm:2.0.3" checksum: 8679b850e1a3d0ebbc46ee780d5df7b478c23f335887464023a631d1b9af051ad4a6595a44220f9ff8ff95a8ddccf019b5ad778a976fd7bbf77383d36f412f90 @@ -23781,6 +26697,15 @@ __metadata: languageName: node linkType: hard +"devlop@npm:^1.0.0, devlop@npm:^1.1.0": + version: 1.1.0 + resolution: "devlop@npm:1.1.0" + dependencies: + dequal: ^2.0.0 + checksum: d2ff650bac0bb6ef08c48f3ba98640bb5fec5cce81e9957eb620408d1bab1204d382a45b785c6b3314dc867bb0684936b84c6867820da6db97cbb5d3c15dd185 + languageName: node + linkType: hard + "dezalgo@npm:^1.0.4": version: 1.0.4 resolution: "dezalgo@npm:1.0.4" @@ -23819,6 +26744,13 @@ __metadata: languageName: node linkType: hard +"diff@npm:^5.0.0": + version: 5.2.0 + resolution: "diff@npm:5.2.0" + checksum: 12b63ca9c36c72bafa3effa77121f0581b4015df18bc16bac1f8e263597735649f1a173c26f7eba17fb4162b073fee61788abe49610e6c70a2641fe1895443fd + languageName: node + linkType: hard + "diffie-hellman@npm:^5.0.0": version: 5.0.3 resolution: "diffie-hellman@npm:5.0.3" @@ -24040,6 +26972,15 @@ __metadata: languageName: node linkType: hard +"dot-case@npm:^2.1.0": + version: 2.1.1 + resolution: "dot-case@npm:2.1.1" + dependencies: + no-case: ^2.2.0 + checksum: 5c9d937245ff810a7ae788602e40c62e38cb515146ddf9b11c7f60cb02aae84859588761f1e8769d9e713609fae3c78dc99c8da9e0ee8e4d8b5c09a2fdf70328 + languageName: node + linkType: hard + "dot-case@npm:^3.0.4": version: 3.0.4 resolution: "dot-case@npm:3.0.4" @@ -24124,6 +27065,13 @@ __metadata: languageName: node linkType: hard +"dotenv@npm:^10.0.0": + version: 10.0.0 + resolution: "dotenv@npm:10.0.0" + checksum: f412c5fe8c24fbe313d302d2500e247ba8a1946492db405a4de4d30dd0eb186a88a43f13c958c5a7de303938949c4231c56994f97d05c4bc1f22478d631b4005 + languageName: node + linkType: hard + "dotenv@npm:^16.0.0": version: 16.0.1 resolution: "dotenv@npm:16.0.1" @@ -24153,6 +27101,13 @@ __metadata: languageName: node linkType: hard +"dset@npm:^3.1.2, dset@npm:^3.1.4": + version: 3.1.4 + resolution: "dset@npm:3.1.4" + checksum: 9a7677e9ffd3c13ad850f7cf367aa94b39984006510e84c3c09b7b88bba0a5b3b7196d85a99d0c4cae4e47d67bdeca43dc1834a41d80f31bcdc86dd26121ecec + languageName: node + linkType: hard + "dub@npm:^0.46.15": version: 0.46.15 resolution: "dub@npm:0.46.15" @@ -24276,6 +27231,13 @@ __metadata: languageName: node linkType: hard +"electron-to-chromium@npm:^1.5.73": + version: 1.5.97 + resolution: "electron-to-chromium@npm:1.5.97" + checksum: e41173d90ab1c6b8d4767d7c2533f41545c8a37fbf288197137189773d0b630e00b7c54d0361c2f3357833dd41bfa79a6328cb739b34066abb708eae3c90c0fc + languageName: node + linkType: hard + "elliptic@npm:^6.5.3": version: 6.5.4 resolution: "elliptic@npm:6.5.4" @@ -24363,7 +27325,7 @@ __metadata: languageName: node linkType: hard -"encoding@npm:0.1.13, encoding@npm:^0.1.13": +"encoding@npm:0.1.13, encoding@npm:^0.1.11, encoding@npm:^0.1.13": version: 0.1.13 resolution: "encoding@npm:0.1.13" dependencies: @@ -24441,6 +27403,16 @@ __metadata: languageName: node linkType: hard +"enquirer@npm:^2.4.1": + version: 2.4.1 + resolution: "enquirer@npm:2.4.1" + dependencies: + ansi-colors: ^4.1.1 + strip-ansi: ^6.0.1 + checksum: f080f11a74209647dbf347a7c6a83c8a47ae1ebf1e75073a808bc1088eb780aa54075bfecd1bcdb3e3c724520edb8e6ee05da031529436b421b71066fcc48cb5 + languageName: node + linkType: hard + "entities@npm:^2.0.0": version: 2.2.0 resolution: "entities@npm:2.2.0" @@ -24515,7 +27487,7 @@ __metadata: languageName: node linkType: hard -"error-ex@npm:^1.3.1": +"error-ex@npm:^1.2.0, error-ex@npm:^1.3.1": version: 1.3.2 resolution: "error-ex@npm:1.3.2" dependencies: @@ -25317,6 +28289,13 @@ __metadata: languageName: node linkType: hard +"escalade@npm:^3.2.0": + version: 3.2.0 + resolution: "escalade@npm:3.2.0" + checksum: 47b029c83de01b0d17ad99ed766347b974b0d628e848de404018f3abee728e987da0d2d370ad4574aa3d5b5bfc368754fd085d69a30f8e75903486ec4b5b709e + languageName: node + linkType: hard + "escape-goat@npm:^4.0.0": version: 4.0.0 resolution: "escape-goat@npm:4.0.0" @@ -26150,6 +29129,13 @@ __metadata: languageName: node linkType: hard +"estree-util-is-identifier-name@npm:^3.0.0": + version: 3.0.0 + resolution: "estree-util-is-identifier-name@npm:3.0.0" + checksum: ea3909f0188ea164af0aadeca87c087e3e5da78d76da5ae9c7954ff1340ea3e4679c4653bbf4299ffb70caa9b322218cc1128db2541f3d2976eb9704f9857787 + languageName: node + linkType: hard + "estree-walker@npm:^1.0.1": version: 1.0.1 resolution: "estree-walker@npm:1.0.1" @@ -26450,6 +29436,13 @@ __metadata: languageName: node linkType: hard +"extract-files@npm:^11.0.0": + version: 11.0.0 + resolution: "extract-files@npm:11.0.0" + checksum: 39ebd92772e9a1e30d1e3112fb7db85d353c8243640635668b615ac1d605ceb79fbb13d17829dd308993ef37bb189ad99817f79ab164ae95c9bb3df9f440bd16 + languageName: node + linkType: hard + "extract-zip@npm:^1.6.6": version: 1.7.0 resolution: "extract-zip@npm:1.7.0" @@ -26678,6 +29671,13 @@ __metadata: languageName: node linkType: hard +"fathom-client@npm:^3.5.0": + version: 3.7.2 + resolution: "fathom-client@npm:3.7.2" + checksum: 2f6859cc8e2995334b67b1e9efe3e1084e0b55cfd8832f4fd9badf37abf80d2213a5892313ec57a3dfccd7b7a62bb3949617dc8310dd7af2af0781e534398cbc + languageName: node + linkType: hard + "fault@npm:^1.0.0": version: 1.0.4 resolution: "fault@npm:1.0.4" @@ -26719,6 +29719,28 @@ __metadata: languageName: node linkType: hard +"fbjs-css-vars@npm:^1.0.0": + version: 1.0.2 + resolution: "fbjs-css-vars@npm:1.0.2" + checksum: 72baf6d22c45b75109118b4daecb6c8016d4c83c8c0f23f683f22e9d7c21f32fff6201d288df46eb561e3c7d4bb4489b8ad140b7f56444c453ba407e8bd28511 + languageName: node + linkType: hard + +"fbjs@npm:^3.0.0": + version: 3.0.5 + resolution: "fbjs@npm:3.0.5" + dependencies: + cross-fetch: ^3.1.5 + fbjs-css-vars: ^1.0.0 + loose-envify: ^1.0.0 + object-assign: ^4.1.0 + promise: ^7.1.1 + setimmediate: ^1.0.5 + ua-parser-js: ^1.0.35 + checksum: e609b5b64686bc96495a5c67728ed9b2710b9b3d695c5759c5f5e47c9483d1c323543ac777a86459e3694efc5712c6ce7212e944feb19752867d699568bb0e54 + languageName: node + linkType: hard + "fd-slicer@npm:~1.1.0": version: 1.1.0 resolution: "fd-slicer@npm:1.1.0" @@ -27007,6 +30029,16 @@ __metadata: languageName: node linkType: hard +"find-up@npm:^1.0.0": + version: 1.1.2 + resolution: "find-up@npm:1.1.2" + dependencies: + path-exists: ^2.0.0 + pinkie-promise: ^2.0.0 + checksum: a2cb9f4c9f06ee3a1e92ed71d5aed41ac8ae30aefa568132f6c556fac7678a5035126153b59eaec68da78ac409eef02503b2b059706bdbf232668d7245e3240a + languageName: node + linkType: hard + "find-up@npm:^2.1.0": version: 2.1.0 resolution: "find-up@npm:2.1.0" @@ -27260,6 +30292,13 @@ __metadata: languageName: node linkType: hard +"form-data-encoder@npm:^1.7.1": + version: 1.9.0 + resolution: "form-data-encoder@npm:1.9.0" + checksum: a73f617976f91b594dbd777ec5147abdb0c52d707475130f8cefc8ae9102ccf51be154b929f7c18323729c2763ac25b16055f5034bc188834e9febeb0d971d7f + languageName: node + linkType: hard + "form-data-encoder@npm:^2.1.2": version: 2.1.4 resolution: "form-data-encoder@npm:2.1.4" @@ -27339,6 +30378,16 @@ __metadata: languageName: node linkType: hard +"formdata-node@npm:^4.3.1": + version: 4.4.1 + resolution: "formdata-node@npm:4.4.1" + dependencies: + node-domexception: 1.0.0 + web-streams-polyfill: 4.0.0-beta.3 + checksum: d91d4f667cfed74827fc281594102c0dabddd03c9f8b426fc97123eedbf73f5060ee43205d89284d6854e2fc5827e030cd352ef68b93beda8decc2d72128c576 + languageName: node + linkType: hard + "formdata-polyfill@npm:^4.0.10": version: 4.0.10 resolution: "formdata-polyfill@npm:4.0.10" @@ -27481,7 +30530,7 @@ __metadata: languageName: node linkType: hard -"fs-extra@npm:^8.1.0": +"fs-extra@npm:^8.0.1, fs-extra@npm:^8.1.0": version: 8.1.0 resolution: "fs-extra@npm:8.1.0" dependencies: @@ -27761,6 +30810,13 @@ __metadata: languageName: node linkType: hard +"get-caller-file@npm:^1.0.1": + version: 1.0.3 + resolution: "get-caller-file@npm:1.0.3" + checksum: 2b90a7f848896abcebcdc0acc627a435bcf05b9cd280599bc980ebfcdc222416c3df12c24c4845f69adc4346728e8966f70b758f9369f3534182791dfbc25c05 + languageName: node + linkType: hard + "get-caller-file@npm:^2.0.1, get-caller-file@npm:^2.0.5": version: 2.0.5 resolution: "get-caller-file@npm:2.0.5" @@ -27892,6 +30948,15 @@ __metadata: languageName: node linkType: hard +"get-stream@npm:^5.1.0": + version: 5.2.0 + resolution: "get-stream@npm:5.2.0" + dependencies: + pump: ^3.0.0 + checksum: 8bc1a23174a06b2b4ce600df38d6c98d2ef6d84e020c1ddad632ad75bac4e092eeb40e4c09e0761c35fc2dbc5e7fff5dab5e763a383582c4a167dd69a905bd12 + languageName: node + linkType: hard + "get-stream@npm:^6.0.0, get-stream@npm:^6.0.1": version: 6.0.1 resolution: "get-stream@npm:6.0.1" @@ -28038,6 +31103,13 @@ __metadata: languageName: node linkType: hard +"github-buttons@npm:^2.22.0": + version: 2.29.1 + resolution: "github-buttons@npm:2.29.1" + checksum: adde1324247df85730e0056206d751894c02ce8dcad5e96234bbc9f2f15caaa12a6431608b7e04434e29df83b6900f4fc36d2d4581605f435d97dc29dcfd1a42 + languageName: node + linkType: hard + "github-from-package@npm:0.0.0": version: 0.0.0 resolution: "github-from-package@npm:0.0.0" @@ -28272,7 +31344,7 @@ __metadata: languageName: node linkType: hard -"globby@npm:11.1.0, globby@npm:^11.0.0, globby@npm:^11.0.1, globby@npm:^11.0.2, globby@npm:^11.1.0": +"globby@npm:11.1.0, globby@npm:^11.0.0, globby@npm:^11.0.1, globby@npm:^11.0.2, globby@npm:^11.0.3, globby@npm:^11.1.0": version: 11.1.0 resolution: "globby@npm:11.1.0" dependencies: @@ -28326,6 +31398,19 @@ __metadata: languageName: node linkType: hard +"globby@npm:^13.1.3": + version: 13.2.2 + resolution: "globby@npm:13.2.2" + dependencies: + dir-glob: ^3.0.1 + fast-glob: ^3.3.0 + ignore: ^5.2.4 + merge2: ^1.4.1 + slash: ^4.0.0 + checksum: f3d84ced58a901b4fcc29c846983108c426631fe47e94872868b65565495f7bee7b3defd68923bd480582771fd4bbe819217803a164a618ad76f1d22f666f41e + languageName: node + linkType: hard + "globrex@npm:^0.1.2": version: 0.1.2 resolution: "globrex@npm:0.1.2" @@ -28471,6 +31556,25 @@ __metadata: languageName: node linkType: hard +"got@npm:^11.8.5": + version: 11.8.6 + resolution: "got@npm:11.8.6" + 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 + checksum: bbc783578a8d5030c8164ef7f57ce41b5ad7db2ed13371e1944bef157eeca5a7475530e07c0aaa71610d7085474d0d96222c9f4268d41db333a17e39b463f45d + languageName: node + linkType: hard + "got@npm:^12.1.0": version: 12.6.1 resolution: "got@npm:12.6.1" @@ -28535,6 +31639,89 @@ __metadata: languageName: node linkType: hard +"graphql-codegen@npm:^0.4.0": + version: 0.4.0 + resolution: "graphql-codegen@npm:0.4.0" + dependencies: + babel-runtime: ^6.11.6 + change-case: ^3.0.0 + graphql: ^0.7.0 + inflected: ^1.1.7 + mkdirp: ^0.5.1 + node-fetch: ^1.5.3 + yargs: ^5.0.0 + bin: + graphql-codegen: ./lib/cli.js + checksum: 584ad3382de9ee3927cfd4fcc340abb2f8d4bbdacacebe9e56e34edf255c87eb1e191f2d7c4f3d1d5bb0ebd829b852e50efe91e967683a8b181dcd3b26ae6b6c + languageName: node + linkType: hard + +"graphql-config@npm:^5.1.1": + version: 5.1.3 + resolution: "graphql-config@npm:5.1.3" + dependencies: + "@graphql-tools/graphql-file-loader": ^8.0.0 + "@graphql-tools/json-file-loader": ^8.0.0 + "@graphql-tools/load": ^8.0.0 + "@graphql-tools/merge": ^9.0.0 + "@graphql-tools/url-loader": ^8.0.0 + "@graphql-tools/utils": ^10.0.0 + cosmiconfig: ^8.1.0 + jiti: ^2.0.0 + minimatch: ^9.0.5 + string-env-interpolation: ^1.0.1 + tslib: ^2.4.0 + peerDependencies: + cosmiconfig-toml-loader: ^1.0.0 + graphql: ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + peerDependenciesMeta: + cosmiconfig-toml-loader: + optional: true + checksum: fde8aee849def42a5eaf02fbe3e404c91be94a53782c22ff58b29bfcfed7e9be2fba114fa94b4a97e12ea1e5970267ebaa119ba6915b2d4d9bb8f5ae9c5485c2 + languageName: node + linkType: hard + +"graphql-request@npm:^6.0.0, graphql-request@npm:^6.1.0": + version: 6.1.0 + resolution: "graphql-request@npm:6.1.0" + dependencies: + "@graphql-typed-document-node/core": ^3.2.0 + cross-fetch: ^3.1.5 + peerDependencies: + graphql: 14 - 16 + checksum: 6d62630a0169574442320651c1f7626c0c602025c3c46b19e09417c9579bb209306ee63de9793a03be2e1701bb7f13971f8545d99bc6573e340f823af0ad35b2 + languageName: node + linkType: hard + +"graphql-tag@npm:^2.11.0": + version: 2.12.6 + resolution: "graphql-tag@npm:2.12.6" + dependencies: + tslib: ^2.1.0 + peerDependencies: + graphql: ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + checksum: b15162a3d62f17b9b79302445b9ee330e041582f1c7faca74b9dec5daa74272c906ec1c34e1c50592bb6215e5c3eba80a309103f6ba9e4c1cddc350c46f010df + languageName: node + linkType: hard + +"graphql-ws@npm:^5.14.0": + version: 5.16.2 + resolution: "graphql-ws@npm:5.16.2" + peerDependencies: + graphql: ">=0.11 <=16" + checksum: ecbfee032fed2fad80a7da192ad46c0ff53c13125def6c5bd83f6ad491c9e77c212f343c7f87b4e36825b0a92178ea5038081bb0f27b96af91e9bdd44dba24e6 + languageName: node + linkType: hard + +"graphql@npm:^0.7.0": + version: 0.7.2 + resolution: "graphql@npm:0.7.2" + dependencies: + iterall: 1.0.2 + checksum: 9b815b851d4fbc861609ce37e88e0be881d25fa2d5dc54f661379e600d103d4f051cee15a09799c4efa2d3590a61f64fc2e1d67332c7fdf8df2871c27b1c3f40 + languageName: node + linkType: hard + "graphql@npm:^16.3.0": version: 16.5.0 resolution: "graphql@npm:16.5.0" @@ -28542,6 +31729,13 @@ __metadata: languageName: node linkType: hard +"graphql@npm:^16.8.0": + version: 16.10.0 + resolution: "graphql@npm:16.10.0" + checksum: 969c2d1061d69ad6fe08a7fe642428212b0b8485a2f9b5d8650203eb6c3221479e81ec6a757708f849d84b85afcb3ebc5a8ff2f71778bb66c5e4850f051c170e + languageName: node + linkType: hard + "gray-matter@npm:^4.0.3": version: 4.0.3 resolution: "gray-matter@npm:4.0.3" @@ -28554,6 +31748,13 @@ __metadata: languageName: node linkType: hard +"gsap@npm:^3.11.0": + version: 3.12.7 + resolution: "gsap@npm:3.12.7" + checksum: 15f5da56d02f04be8eb4b58cb733fbd71619647608c0854717697da8b1922a5ce4ea5487cba0c66f428aa645247e143e462bec885f8470725c2c9ab393247e25 + languageName: node + linkType: hard + "gtoken@npm:^5.0.4": version: 5.3.2 resolution: "gtoken@npm:5.3.2" @@ -28840,6 +32041,21 @@ __metadata: languageName: node linkType: hard +"hast-util-from-parse5@npm:^7.0.0": + version: 7.1.2 + resolution: "hast-util-from-parse5@npm:7.1.2" + dependencies: + "@types/hast": ^2.0.0 + "@types/unist": ^2.0.0 + hastscript: ^7.0.0 + property-information: ^6.0.0 + vfile: ^5.0.0 + vfile-location: ^4.0.0 + web-namespaces: ^2.0.0 + checksum: 7b4ed5b508b1352127c6719f7b0c0880190cf9859fe54ccaf7c9228ecf623d36cef3097910b3874d2fe1aac6bf4cf45d3cc2303daac3135a05e9ade6534ddddb + languageName: node + linkType: hard + "hast-util-parse-selector@npm:^2.0.0": version: 2.2.5 resolution: "hast-util-parse-selector@npm:2.2.5" @@ -28847,6 +32063,115 @@ __metadata: languageName: node linkType: hard +"hast-util-parse-selector@npm:^3.0.0": + version: 3.1.1 + resolution: "hast-util-parse-selector@npm:3.1.1" + dependencies: + "@types/hast": ^2.0.0 + checksum: 511d373465f60dd65e924f88bf0954085f4fb6e3a2b062a4b5ac43b93cbfd36a8dce6234b5d1e3e63499d936375687e83fc5da55628b22bd6b581b5ee167d1c4 + languageName: node + linkType: hard + +"hast-util-raw@npm:^7.0.0": + version: 7.2.3 + resolution: "hast-util-raw@npm:7.2.3" + dependencies: + "@types/hast": ^2.0.0 + "@types/parse5": ^6.0.0 + hast-util-from-parse5: ^7.0.0 + hast-util-to-parse5: ^7.0.0 + html-void-elements: ^2.0.0 + parse5: ^6.0.0 + unist-util-position: ^4.0.0 + unist-util-visit: ^4.0.0 + vfile: ^5.0.0 + web-namespaces: ^2.0.0 + zwitch: ^2.0.0 + checksum: 21857eea3ffb8fd92d2d9be7793b56d0b2c40db03c4cfa14828855ae41d7c584917aa83efb7157220b2e41e25e95f81f24679ac342c35145e5f1c1d39015f81f + languageName: node + linkType: hard + +"hast-util-sanitize@npm:^4.0.0": + version: 4.1.0 + resolution: "hast-util-sanitize@npm:4.1.0" + dependencies: + "@types/hast": ^2.0.0 + checksum: 4f1786d6556bae6485a657a3e77e7e71b573fd20e4e2d70678e0f445eb8fe3dc6c4441cda6d18b89a79b53e2c03b6232eb6c470ecd478737050724ea09398603 + languageName: node + linkType: hard + +"hast-util-to-html@npm:^8.0.0": + version: 8.0.4 + resolution: "hast-util-to-html@npm:8.0.4" + dependencies: + "@types/hast": ^2.0.0 + "@types/unist": ^2.0.0 + ccount: ^2.0.0 + comma-separated-tokens: ^2.0.0 + hast-util-raw: ^7.0.0 + hast-util-whitespace: ^2.0.0 + html-void-elements: ^2.0.0 + property-information: ^6.0.0 + space-separated-tokens: ^2.0.0 + stringify-entities: ^4.0.0 + zwitch: ^2.0.4 + checksum: 8f2ae071df2ced5afb4f19f76af8fd3a2f837dc47bcc1c0e0c1578d29dafcd28738f9617505d13c4a2adf13d70e043143e2ad8f130d5554ab4fc11bfa8f74094 + languageName: node + linkType: hard + +"hast-util-to-jsx-runtime@npm:^2.0.0": + version: 2.3.2 + resolution: "hast-util-to-jsx-runtime@npm:2.3.2" + dependencies: + "@types/estree": ^1.0.0 + "@types/hast": ^3.0.0 + "@types/unist": ^3.0.0 + comma-separated-tokens: ^2.0.0 + devlop: ^1.0.0 + estree-util-is-identifier-name: ^3.0.0 + hast-util-whitespace: ^3.0.0 + mdast-util-mdx-expression: ^2.0.0 + mdast-util-mdx-jsx: ^3.0.0 + mdast-util-mdxjs-esm: ^2.0.0 + property-information: ^6.0.0 + space-separated-tokens: ^2.0.0 + style-to-object: ^1.0.0 + unist-util-position: ^5.0.0 + vfile-message: ^4.0.0 + checksum: 223cc3e2ea622d14529e2aa070bd88f6ca7255084bd5e6e28015dad435cda22b1ddd98064bba6a4753d546d882dcd3f8067af1ea27c253986f6f303869544075 + languageName: node + linkType: hard + +"hast-util-to-parse5@npm:^7.0.0": + version: 7.1.0 + resolution: "hast-util-to-parse5@npm:7.1.0" + dependencies: + "@types/hast": ^2.0.0 + comma-separated-tokens: ^2.0.0 + property-information: ^6.0.0 + space-separated-tokens: ^2.0.0 + web-namespaces: ^2.0.0 + zwitch: ^2.0.0 + checksum: 3a7f2175a3db599bbae7e49ba73d3e5e688e5efca7590ff50130ba108ad649f728402815d47db49146f6b94c14c934bf119915da9f6964e38802c122bcc8af6b + languageName: node + linkType: hard + +"hast-util-whitespace@npm:^2.0.0": + version: 2.0.1 + resolution: "hast-util-whitespace@npm:2.0.1" + checksum: 431be6b2f35472f951615540d7a53f69f39461e5e080c0190268bdeb2be9ab9b1dddfd1f467dd26c1de7e7952df67beb1307b6ee940baf78b24a71b5e0663868 + languageName: node + linkType: hard + +"hast-util-whitespace@npm:^3.0.0": + version: 3.0.0 + resolution: "hast-util-whitespace@npm:3.0.0" + dependencies: + "@types/hast": ^3.0.0 + checksum: 41d93ccce218ba935dc3c12acdf586193c35069489c8c8f50c2aa824c00dec94a3c78b03d1db40fa75381942a189161922e4b7bca700b3a2cc779634c351a1e4 + languageName: node + linkType: hard + "hastscript@npm:^6.0.0": version: 6.0.0 resolution: "hastscript@npm:6.0.0" @@ -28860,6 +32185,19 @@ __metadata: languageName: node linkType: hard +"hastscript@npm:^7.0.0": + version: 7.2.0 + resolution: "hastscript@npm:7.2.0" + dependencies: + "@types/hast": ^2.0.0 + comma-separated-tokens: ^2.0.0 + hast-util-parse-selector: ^3.0.0 + property-information: ^6.0.0 + space-separated-tokens: ^2.0.0 + checksum: 928a21576ff7b9a8c945e7940bcbf2d27f770edb4279d4d04b33dc90753e26ca35c1172d626f54afebd377b2afa32331e399feb3eb0f7b91a399dca5927078ae + languageName: node + linkType: hard + "he@npm:1.2.0, he@npm:^1.2.0": version: 1.2.0 resolution: "he@npm:1.2.0" @@ -28869,6 +32207,26 @@ __metadata: languageName: node linkType: hard +"header-case@npm:^1.0.0": + version: 1.0.1 + resolution: "header-case@npm:1.0.1" + dependencies: + no-case: ^2.2.0 + upper-case: ^1.1.3 + checksum: fe1cc9a555ec9aabc2de80f4dd961a81c534fc23951694fef34297e59b0dd60f26647148731bf0dd3fdb3a1c688089d3cd147d7038db850e25be7c0a5fabb022 + languageName: node + linkType: hard + +"header-case@npm:^2.0.4": + version: 2.0.4 + resolution: "header-case@npm:2.0.4" + dependencies: + capital-case: ^1.0.4 + tslib: ^2.0.3 + checksum: 571c83eeb25e8130d172218712f807c0b96d62b020981400bccc1503a7cf14b09b8b10498a962d2739eccf231d950e3848ba7d420b58a6acd2f9283439546cd9 + languageName: node + linkType: hard + "headers-polyfill@npm:^3.0.4": version: 3.0.7 resolution: "headers-polyfill@npm:3.0.7" @@ -29022,6 +32380,20 @@ __metadata: languageName: node linkType: hard +"html-url-attributes@npm:^3.0.0": + version: 3.0.1 + resolution: "html-url-attributes@npm:3.0.1" + checksum: 1ecbf9cae0c438d2802386710177b7bbf7e30cc61327e9f125eb32fca7302cd1e3ab45c441859cb1e7646109be322fc1163592ad4dfde9b14d09416d101a6573 + languageName: node + linkType: hard + +"html-void-elements@npm:^2.0.0": + version: 2.0.1 + resolution: "html-void-elements@npm:2.0.1" + checksum: 06d41f13b9d5d6e0f39861c4bec9a9196fa4906d56cd5cf6cf54ad2e52a85bf960cca2bf9600026bde16c8331db171bedba5e5a35e2e43630c8f1d497b2fb658 + languageName: node + linkType: hard + "html-webpack-plugin@npm:^5.5.0": version: 5.5.4 resolution: "html-webpack-plugin@npm:5.5.4" @@ -29061,7 +32433,7 @@ __metadata: languageName: node linkType: hard -"http-cache-semantics@npm:^4.1.0, http-cache-semantics@npm:^4.1.1": +"http-cache-semantics@npm:^4.0.0, http-cache-semantics@npm:^4.1.0, http-cache-semantics@npm:^4.1.1": version: 4.1.1 resolution: "http-cache-semantics@npm:4.1.1" checksum: 83ac0bc60b17a3a36f9953e7be55e5c8f41acc61b22583060e8dedc9dd5e3607c823a88d0926f9150e571f90946835c7fe150732801010845c72cd8bbff1a236 @@ -29215,6 +32587,16 @@ __metadata: languageName: node linkType: hard +"http2-wrapper@npm:^1.0.0-beta.5.2": + version: 1.0.3 + resolution: "http2-wrapper@npm:1.0.3" + dependencies: + quick-lru: ^5.1.1 + resolve-alpn: ^1.0.0 + checksum: 74160b862ec699e3f859739101ff592d52ce1cb207b7950295bf7962e4aa1597ef709b4292c673bece9c9b300efad0559fc86c71b1409c7a1e02b7229456003e + languageName: node + linkType: hard + "http2-wrapper@npm:^2.1.10": version: 2.2.1 resolution: "http2-wrapper@npm:2.2.1" @@ -29472,6 +32854,28 @@ __metadata: languageName: node linkType: hard +"iframe-resizer-react@npm:^1.1.0": + version: 1.1.1 + resolution: "iframe-resizer-react@npm:1.1.1" + dependencies: + "@babel/plugin-proposal-private-property-in-object": ^7.21.11 + iframe-resizer: ^4.4.4 + warning: ^4.0.3 + peerDependencies: + prop-types: ^15.7.2 + react: ^16.13.1 || ^18.0.0 + react-dom: ^16.13.1 || ^18.0.0 + checksum: fd3db2dfd3e1455e2f8150ed0cc4068b8970389eca478d13e2ca6408e1fe0a85425f7b2cb004e5a8eee0e7d4ed304774cad4b1b40d9a7467c2db3ed4851c4572 + languageName: node + linkType: hard + +"iframe-resizer@npm:^4.4.4": + version: 4.4.5 + resolution: "iframe-resizer@npm:4.4.5" + checksum: fa2493daba2df7578866aeb5fceabcf2129da9327abd7d26b4f16e9e7109eddcb97a8ba7ea6e94b043705f13bcbe6ae307e67cc48c24f7bd9d948d491a150163 + languageName: node + linkType: hard + "ignore-walk@npm:^5.0.1": version: 5.0.1 resolution: "ignore-walk@npm:5.0.1" @@ -29522,6 +32926,13 @@ __metadata: languageName: node linkType: hard +"immer@npm:^10.0.3": + version: 10.1.1 + resolution: "immer@npm:10.1.1" + checksum: 07c67970b7d22aded73607193d84861bf786f07d47f7d7c98bb10016c7a88f6654ad78ae1e220b3c623695b133aabbf24f5eb8d9e8060cff11e89ccd81c9c10b + languageName: node + linkType: hard + "immutable@npm:^3.8.2, immutable@npm:^3.x.x": version: 3.8.2 resolution: "immutable@npm:3.8.2" @@ -29529,6 +32940,13 @@ __metadata: languageName: node linkType: hard +"immutable@npm:~3.7.6": + version: 3.7.6 + resolution: "immutable@npm:3.7.6" + checksum: 8cccfb22d3ecf14fe0c474612e96d6bb5d117493e7639fe6642fb81e78c9ac4b698dd8a322c105001a709ad873ffc90e30bad7db5d9a3ef0b54a6e1db0258e8e + languageName: node + linkType: hard + "import-fresh@npm:^3.0.0, import-fresh@npm:^3.1.0, import-fresh@npm:^3.2.1, import-fresh@npm:^3.3.0": version: 3.3.0 resolution: "import-fresh@npm:3.3.0" @@ -29539,6 +32957,13 @@ __metadata: languageName: node linkType: hard +"import-from@npm:4.0.0": + version: 4.0.0 + resolution: "import-from@npm:4.0.0" + checksum: 1fa29c05b048da18914e91d9a529e5d9b91774bebbfab10e53f59bcc1667917672b971cf102fee857f142e5e433ce69fa1f0a596e1c7d82f9947a5ec352694b9 + languageName: node + linkType: hard + "import-in-the-middle@npm:1.4.2": version: 1.4.2 resolution: "import-in-the-middle@npm:1.4.2" @@ -29634,6 +33059,13 @@ __metadata: languageName: node linkType: hard +"inflected@npm:^1.1.7": + version: 1.1.7 + resolution: "inflected@npm:1.1.7" + checksum: eac857f10871586006d629dc72bab05058f1967c10fae9d7391d627534566a8e5be0a1f690d2590102d890e4ef5647b73b7827380dc7bcf50faac4154f0ab084 + languageName: node + linkType: hard + "inflight@npm:^1.0.4": version: 1.0.6 resolution: "inflight@npm:1.0.6" @@ -29729,6 +33161,13 @@ __metadata: languageName: node linkType: hard +"inline-style-parser@npm:0.2.4": + version: 0.2.4 + resolution: "inline-style-parser@npm:0.2.4" + checksum: 5df20a21dd8d67104faaae29774bb50dc9690c75bc5c45dac107559670a5530104ead72c4cf54f390026e617e7014c65b3d68fb0bb573a37c4d1f94e9c36e1ca + languageName: node + linkType: hard + "inline-style-prefixer@npm:^7.0.0": version: 7.0.0 resolution: "inline-style-prefixer@npm:7.0.0" @@ -29770,7 +33209,7 @@ __metadata: languageName: node linkType: hard -"inquirer@npm:8.2.6": +"inquirer@npm:8.2.6, inquirer@npm:^8.0.0": version: 8.2.6 resolution: "inquirer@npm:8.2.6" dependencies: @@ -29941,6 +33380,13 @@ __metadata: languageName: node linkType: hard +"invert-kv@npm:^1.0.0": + version: 1.0.0 + resolution: "invert-kv@npm:1.0.0" + checksum: aebeee31dda3b3d25ffd242e9a050926e7fe5df642d60953ab183aca1a7d1ffb39922eb2618affb0e850cf2923116f0da1345367759d88d097df5da1f1e1590e + languageName: node + linkType: hard + "ioredis@npm:^5.3.2": version: 5.3.2 resolution: "ioredis@npm:5.3.2" @@ -29989,6 +33435,16 @@ __metadata: languageName: node linkType: hard +"is-absolute@npm:^1.0.0": + version: 1.0.0 + resolution: "is-absolute@npm:1.0.0" + dependencies: + is-relative: ^1.0.0 + is-windows: ^1.0.1 + checksum: 9d16b2605eda3f3ce755410f1d423e327ad3a898bcb86c9354cf63970ed3f91ba85e9828aa56f5d6a952b9fae43d0477770f78d37409ae8ecc31e59ebc279b27 + languageName: node + linkType: hard + "is-alphabetical@npm:^1.0.0": version: 1.0.4 resolution: "is-alphabetical@npm:1.0.4" @@ -29996,6 +33452,13 @@ __metadata: languageName: node linkType: hard +"is-alphabetical@npm:^2.0.0": + version: 2.0.1 + resolution: "is-alphabetical@npm:2.0.1" + checksum: 56207db8d9de0850f0cd30f4966bf731eb82cedfe496cbc2e97e7c3bacaf66fc54a972d2d08c0d93bb679cb84976a05d24c5ad63de56fabbfc60aadae312edaa + languageName: node + linkType: hard + "is-alphanumerical@npm:^1.0.0": version: 1.0.4 resolution: "is-alphanumerical@npm:1.0.4" @@ -30006,6 +33469,16 @@ __metadata: languageName: node linkType: hard +"is-alphanumerical@npm:^2.0.0": + version: 2.0.1 + resolution: "is-alphanumerical@npm:2.0.1" + dependencies: + is-alphabetical: ^2.0.0 + is-decimal: ^2.0.0 + checksum: 87acc068008d4c9c4e9f5bd5e251041d42e7a50995c77b1499cf6ed248f971aadeddb11f239cabf09f7975ee58cac7a48ffc170b7890076d8d227b24a68663c9 + languageName: node + linkType: hard + "is-arguments@npm:^1.0.4, is-arguments@npm:^1.1.1": version: 1.1.1 resolution: "is-arguments@npm:1.1.1" @@ -30118,6 +33591,13 @@ __metadata: languageName: node linkType: hard +"is-buffer@npm:^2.0.0": + version: 2.0.5 + resolution: "is-buffer@npm:2.0.5" + checksum: 764c9ad8b523a9f5a32af29bdf772b08eb48c04d2ad0a7240916ac2688c983bf5f8504bf25b35e66240edeb9d9085461f9b5dae1f3d2861c6b06a65fe983de42 + languageName: node + linkType: hard + "is-buffer@npm:~1.1.6": version: 1.1.6 resolution: "is-buffer@npm:1.1.6" @@ -30270,6 +33750,13 @@ __metadata: languageName: node linkType: hard +"is-decimal@npm:^2.0.0": + version: 2.0.1 + resolution: "is-decimal@npm:2.0.1" + checksum: 97132de7acdce77caa7b797632970a2ecd649a88e715db0e4dbc00ab0708b5e7574ba5903962c860cd4894a14fd12b100c0c4ac8aed445cf6f55c6cf747a4158 + languageName: node + linkType: hard + "is-deflate@npm:^1.0.0": version: 1.0.0 resolution: "is-deflate@npm:1.0.0" @@ -30337,6 +33824,15 @@ __metadata: languageName: node linkType: hard +"is-fullwidth-code-point@npm:^1.0.0": + version: 1.0.0 + resolution: "is-fullwidth-code-point@npm:1.0.0" + dependencies: + number-is-nan: ^1.0.0 + checksum: 4d46a7465a66a8aebcc5340d3b63a56602133874af576a9ca42c6f0f4bd787a743605771c5f246db77da96605fefeffb65fc1dbe862dcc7328f4b4d03edf5a57 + languageName: node + linkType: hard + "is-fullwidth-code-point@npm:^3.0.0": version: 3.0.0 resolution: "is-fullwidth-code-point@npm:3.0.0" @@ -30374,7 +33870,7 @@ __metadata: languageName: node linkType: hard -"is-glob@npm:^4.0.0, is-glob@npm:^4.0.1, is-glob@npm:^4.0.3, is-glob@npm:~4.0.1": +"is-glob@npm:4.0.3, is-glob@npm:^4.0.0, is-glob@npm:^4.0.1, is-glob@npm:^4.0.3, is-glob@npm:~4.0.1": version: 4.0.3 resolution: "is-glob@npm:4.0.3" dependencies: @@ -30397,6 +33893,13 @@ __metadata: languageName: node linkType: hard +"is-hexadecimal@npm:^2.0.0": + version: 2.0.1 + resolution: "is-hexadecimal@npm:2.0.1" + checksum: 66a2ea85994c622858f063f23eda506db29d92b52580709eb6f4c19550552d4dcf3fb81952e52f7cf972097237959e00adc7bb8c9400cd12886e15bf06145321 + languageName: node + linkType: hard + "is-in-ci@npm:^0.1.0": version: 0.1.0 resolution: "is-in-ci@npm:0.1.0" @@ -30457,6 +33960,15 @@ __metadata: languageName: node linkType: hard +"is-lower-case@npm:^2.0.2": + version: 2.0.2 + resolution: "is-lower-case@npm:2.0.2" + dependencies: + tslib: ^2.0.3 + checksum: ba57dd1201e15fd9b590654736afccf1b3b68e919f40c23ef13b00ebcc639b1d9c2f81fe86415bff3e8eccffec459786c9ac9dc8f3a19cfa4484206c411c1d7d + languageName: node + linkType: hard + "is-map@npm:^2.0.2": version: 2.0.2 resolution: "is-map@npm:2.0.2" @@ -30598,7 +34110,7 @@ __metadata: languageName: node linkType: hard -"is-plain-obj@npm:^4.1.0": +"is-plain-obj@npm:^4.0.0, is-plain-obj@npm:^4.1.0": version: 4.1.0 resolution: "is-plain-obj@npm:4.1.0" checksum: 6dc45da70d04a81f35c9310971e78a6a3c7a63547ef782e3a07ee3674695081b6ca4e977fbb8efc48dae3375e0b34558d2bcd722aec9bddfa2d7db5b041be8ce @@ -30673,6 +34185,15 @@ __metadata: languageName: node linkType: hard +"is-relative@npm:^1.0.0": + version: 1.0.0 + resolution: "is-relative@npm:1.0.0" + dependencies: + is-unc-path: ^1.0.0 + checksum: 3271a0df109302ef5e14a29dcd5d23d9788e15ade91a40b942b035827ffbb59f7ce9ff82d036ea798541a52913cbf9d2d0b66456340887b51f3542d57b5a4c05 + languageName: node + linkType: hard + "is-retry-allowed@npm:^1.1.0": version: 1.2.0 resolution: "is-retry-allowed@npm:1.2.0" @@ -30737,6 +34258,13 @@ __metadata: languageName: node linkType: hard +"is-stream@npm:^1.0.1": + version: 1.1.0 + resolution: "is-stream@npm:1.1.0" + checksum: 063c6bec9d5647aa6d42108d4c59723d2bd4ae42135a2d4db6eadbd49b7ea05b750fd69d279e5c7c45cf9da753ad2c00d8978be354d65aa9f6bb434969c6a2ae + languageName: node + linkType: hard + "is-stream@npm:^2.0.0": version: 2.0.1 resolution: "is-stream@npm:2.0.1" @@ -30840,6 +34368,15 @@ __metadata: languageName: node linkType: hard +"is-unc-path@npm:^1.0.0": + version: 1.0.0 + resolution: "is-unc-path@npm:1.0.0" + dependencies: + unc-path-regex: ^0.1.2 + checksum: e8abfde203f7409f5b03a5f1f8636e3a41e78b983702ef49d9343eb608cdfe691429398e8815157519b987b739bcfbc73ae7cf4c8582b0ab66add5171088eab6 + languageName: node + linkType: hard + "is-unicode-supported@npm:^0.1.0": version: 0.1.0 resolution: "is-unicode-supported@npm:0.1.0" @@ -30870,6 +34407,22 @@ __metadata: languageName: node linkType: hard +"is-upper-case@npm:^2.0.2": + version: 2.0.2 + resolution: "is-upper-case@npm:2.0.2" + dependencies: + tslib: ^2.0.3 + checksum: cf4fd43c00c2e72cd5cff911923070b89f0933b464941bd782e2315385f80b5a5acd772db3b796542e5e3cfed735f4dffd88c54d62db1ebfc5c3daa7b1af2bc6 + languageName: node + linkType: hard + +"is-utf8@npm:^0.2.0": + version: 0.2.1 + resolution: "is-utf8@npm:0.2.1" + checksum: 167ccd2be869fc228cc62c1a28df4b78c6b5485d15a29027d3b5dceb09b383e86a3522008b56dcac14b592b22f0a224388718c2505027a994fd8471465de54b3 + languageName: node + linkType: hard + "is-weakmap@npm:^2.0.2": version: 2.0.2 resolution: "is-weakmap@npm:2.0.2" @@ -30919,7 +34472,7 @@ __metadata: languageName: node linkType: hard -"is-windows@npm:1.0.2, is-windows@npm:^1.0.0": +"is-windows@npm:1.0.2, is-windows@npm:^1.0.0, is-windows@npm:^1.0.1": version: 1.0.2 resolution: "is-windows@npm:1.0.2" checksum: 438b7e52656fe3b9b293b180defb4e448088e7023a523ec21a91a80b9ff8cdb3377ddb5b6e60f7c7de4fa8b63ab56e121b6705fe081b3cf1b828b0a380009ad7 @@ -31014,6 +34567,15 @@ __metadata: languageName: node linkType: hard +"isomorphic-ws@npm:^5.0.0": + version: 5.0.0 + resolution: "isomorphic-ws@npm:5.0.0" + peerDependencies: + ws: "*" + checksum: e20eb2aee09ba96247465fda40c6d22c1153394c0144fa34fe6609f341af4c8c564f60ea3ba762335a7a9c306809349f9b863c8beedf2beea09b299834ad5398 + languageName: node + linkType: hard + "isstream@npm:~0.1.2": version: 0.1.2 resolution: "isstream@npm:0.1.2" @@ -31109,6 +34671,13 @@ __metadata: languageName: node linkType: hard +"iterall@npm:1.0.2": + version: 1.0.2 + resolution: "iterall@npm:1.0.2" + checksum: f87cbb8e22e3681f4d7ba634e4ce7bd419a78b47ff7b01f57f90cf761d187cb845fcac0d4d7e4c7dfcbfb80467c8ea42a9f3691bb3aa909e3e3707a25735ed70 + languageName: node + linkType: hard + "iterare@npm:1.2.1": version: 1.2.1 resolution: "iterare@npm:1.2.1" @@ -31768,6 +35337,15 @@ __metadata: languageName: node linkType: hard +"jiti@npm:^1.17.1, jiti@npm:^1.21.6": + version: 1.21.7 + resolution: "jiti@npm:1.21.7" + bin: + jiti: bin/jiti.js + checksum: 9cd20dabf82e3a4cceecb746a69381da7acda93d34eed0cdb9c9bdff3bce07e4f2f4a016ca89924392c935297d9aedc58ff9f7d3281bc5293319ad244926e0b7 + languageName: node + linkType: hard + "jiti@npm:^1.18.2": version: 1.20.0 resolution: "jiti@npm:1.20.0" @@ -31786,12 +35364,12 @@ __metadata: languageName: node linkType: hard -"jiti@npm:^1.21.6": - version: 1.21.7 - resolution: "jiti@npm:1.21.7" +"jiti@npm:^2.0.0": + version: 2.4.2 + resolution: "jiti@npm:2.4.2" bin: - jiti: bin/jiti.js - checksum: 9cd20dabf82e3a4cceecb746a69381da7acda93d34eed0cdb9c9bdff3bce07e4f2f4a016ca89924392c935297d9aedc58ff9f7d3281bc5293319ad244926e0b7 + jiti: lib/jiti-cli.mjs + checksum: c6c30c7b6b293e9f26addfb332b63d964a9f143cdd2cf5e946dbe5143db89f7c1b50ad9223b77fb1f6ddb0b9c5ecef995fea024ecf7d2861d285d779cde66e1e languageName: node linkType: hard @@ -31802,6 +35380,19 @@ __metadata: languageName: node linkType: hard +"joi@npm:^17.11.0": + version: 17.13.3 + resolution: "joi@npm:17.13.3" + dependencies: + "@hapi/hoek": ^9.3.0 + "@hapi/topo": ^5.1.0 + "@sideway/address": ^4.1.5 + "@sideway/formula": ^3.0.1 + "@sideway/pinpoint": ^2.0.0 + checksum: 66ed454fee3d8e8da1ce21657fd2c7d565d98f3e539d2c5c028767e5f38cbd6297ce54df8312d1d094e62eb38f9452ebb43da4ce87321df66cf5e3f128cbc400 + languageName: node + linkType: hard + "jose@npm:5.2.1": version: 5.2.1 resolution: "jose@npm:5.2.1" @@ -31830,6 +35421,13 @@ __metadata: languageName: node linkType: hard +"jose@npm:^5.0.0": + version: 5.9.6 + resolution: "jose@npm:5.9.6" + checksum: 4b536da0201858ed4c4582e8bb479081f11e0c63dd0f5e473adde16fc539785e1f2f0409bc1fc7cbbb5b68026776c960b4952da3a06f6fdfff0b9764c9127ae0 + languageName: node + linkType: hard + "jpeg-js@npm:0.4.2": version: 0.4.2 resolution: "jpeg-js@npm:0.4.2" @@ -31879,7 +35477,7 @@ __metadata: languageName: node linkType: hard -"js-yaml@npm:4.1.0, js-yaml@npm:=4.1.0, js-yaml@npm:^4.1.0": +"js-yaml@npm:4.1.0, js-yaml@npm:=4.1.0, js-yaml@npm:^4.0.0, js-yaml@npm:^4.1.0": version: 4.1.0 resolution: "js-yaml@npm:4.1.0" dependencies: @@ -32037,6 +35635,15 @@ __metadata: languageName: node linkType: hard +"jsesc@npm:^3.0.2": + version: 3.1.0 + resolution: "jsesc@npm:3.1.0" + bin: + jsesc: bin/jsesc + checksum: 19c94095ea026725540c0d29da33ab03144f6bcf2d4159e4833d534976e99e0c09c38cefa9a575279a51fc36b31166f8d6d05c9fe2645d5f15851d690b41f17f + languageName: node + linkType: hard + "jsesc@npm:~0.5.0": version: 0.5.0 resolution: "jsesc@npm:0.5.0" @@ -32159,6 +35766,16 @@ __metadata: languageName: node linkType: hard +"json-to-pretty-yaml@npm:^1.2.2": + version: 1.2.2 + resolution: "json-to-pretty-yaml@npm:1.2.2" + dependencies: + remedial: ^1.0.7 + remove-trailing-spaces: ^1.0.6 + checksum: 4b78480f426e176e5fdac073e05877683bb026f1175deb52d0941b992f9c91a58a812c020f00aa67ba1fc7cadb220539a264146f222e48a48c8bb2a0931cac9b + languageName: node + linkType: hard + "json5@npm:^1.0.1, json5@npm:^1.0.2": version: 1.0.2 resolution: "json5@npm:1.0.2" @@ -32214,6 +35831,19 @@ __metadata: languageName: node linkType: hard +"jsonfile@npm:^5.0.0": + version: 5.0.0 + resolution: "jsonfile@npm:5.0.0" + dependencies: + graceful-fs: ^4.1.6 + universalify: ^0.1.2 + dependenciesMeta: + graceful-fs: + optional: true + checksum: e0ecff572dba34153a66e3a3bc5c6cb01a2c1d2cf4a2c19b6728dcfcab39d94be9cca4a0fc86a17ff2c815f2aeb43768ac75545780dbea4009433fdc32aa14d1 + languageName: node + linkType: hard + "jsonfile@npm:^6.0.1": version: 6.1.0 resolution: "jsonfile@npm:6.1.0" @@ -32387,6 +36017,13 @@ __metadata: languageName: node linkType: hard +"keen-slider@npm:^6.8.0": + version: 6.8.6 + resolution: "keen-slider@npm:6.8.6" + checksum: f87e65d72e3b2e73cbd52b1908c1458b253ec5a2a2d3e1e34bd1a831172d18568649188cf3e4ad679c7988568929195ae91d4b7a1c0bd3d6da592a453be3723a + languageName: node + linkType: hard + "keypress@npm:~0.2.1": version: 0.2.1 resolution: "keypress@npm:0.2.1" @@ -32394,7 +36031,7 @@ __metadata: languageName: node linkType: hard -"keyv@npm:^4.5.3, keyv@npm:^4.5.4": +"keyv@npm:^4.0.0, keyv@npm:^4.5.3, keyv@npm:^4.5.4": version: 4.5.4 resolution: "keyv@npm:4.5.4" dependencies: @@ -32410,7 +36047,7 @@ __metadata: languageName: node linkType: hard -"kleur@npm:4.1.5, kleur@npm:^4.1.5": +"kleur@npm:4.1.5, kleur@npm:^4.0.3, kleur@npm:^4.1.5": version: 4.1.5 resolution: "kleur@npm:4.1.5" checksum: 1dc476e32741acf0b1b5b0627ffd0d722e342c1b0da14de3e8ae97821327ca08f9fb944542fb3c126d90ac5f27f9d804edbe7c585bf7d12ef495d115e0f22c12 @@ -32513,6 +36150,15 @@ __metadata: languageName: node linkType: hard +"lcid@npm:^1.0.0": + version: 1.0.0 + resolution: "lcid@npm:1.0.0" + dependencies: + invert-kv: ^1.0.0 + checksum: e8c7a4db07663068c5c44b650938a2bc41aa992037eebb69376214320f202c1250e70b50c32f939e28345fd30c2d35b8e8cd9a19d5932c398246a864ce54843d + languageName: node + linkType: hard + "level-blobs@npm:^0.1.7": version: 0.1.7 resolution: "level-blobs@npm:0.1.7" @@ -32815,6 +36461,19 @@ __metadata: languageName: node linkType: hard +"load-json-file@npm:^1.0.0": + version: 1.1.0 + resolution: "load-json-file@npm:1.1.0" + dependencies: + graceful-fs: ^4.1.2 + parse-json: ^2.2.0 + pify: ^2.0.0 + pinkie-promise: ^2.0.0 + strip-bom: ^2.0.0 + checksum: 0e4e4f380d897e13aa236246a917527ea5a14e4fc34d49e01ce4e7e2a1e08e2740ee463a03fb021c04f594f29a178f4adb994087549d7c1c5315fcd29bf9934b + languageName: node + linkType: hard + "load-json-file@npm:^4.0.0": version: 4.0.0 resolution: "load-json-file@npm:4.0.0" @@ -32942,6 +36601,13 @@ __metadata: languageName: node linkType: hard +"lodash.assign@npm:^4.1.0, lodash.assign@npm:^4.2.0": + version: 4.2.0 + resolution: "lodash.assign@npm:4.2.0" + checksum: 75bbc6733c9f577c448031b4051f990f068802708891f94be9d4c2faffd6a9ec67a2c49671dafc908a068d35687765464853282842b4560b662e6c903d11cc90 + languageName: node + linkType: hard + "lodash.camelcase@npm:^4.3.0": version: 4.3.0 resolution: "lodash.camelcase@npm:4.3.0" @@ -33103,6 +36769,13 @@ __metadata: languageName: node linkType: hard +"lodash.sortby@npm:^4.7.0": + version: 4.7.0 + resolution: "lodash.sortby@npm:4.7.0" + checksum: db170c9396d29d11fe9a9f25668c4993e0c1331bcb941ddbd48fb76f492e732add7f2a47cfdf8e9d740fa59ac41bbfaf931d268bc72aab3ab49e9f89354d718c + languageName: node + linkType: hard + "lodash.startcase@npm:^4.4.0": version: 4.4.0 resolution: "lodash.startcase@npm:4.4.0" @@ -33138,14 +36811,14 @@ __metadata: languageName: node linkType: hard -"lodash@npm:4.17.21, lodash@npm:^4.17.15, lodash@npm:^4.17.19, lodash@npm:^4.17.20, lodash@npm:^4.17.21, lodash@npm:~4.17.15": +"lodash@npm:4.17.21, lodash@npm:^4.17.15, lodash@npm:^4.17.19, lodash@npm:^4.17.20, lodash@npm:^4.17.21, lodash@npm:~4.17.0, lodash@npm:~4.17.15": version: 4.17.21 resolution: "lodash@npm:4.17.21" checksum: eb835a2e51d381e561e508ce932ea50a8e5a68f4ebdd771ea240d3048244a8d13658acbd502cd4829768c56f2e16bdd4340b9ea141297d472517b83868e677f7 languageName: node linkType: hard -"log-symbols@npm:4.1.0, log-symbols@npm:^4.1.0": +"log-symbols@npm:4.1.0, log-symbols@npm:^4.0.0, log-symbols@npm:^4.1.0": version: 4.1.0 resolution: "log-symbols@npm:4.1.0" dependencies: @@ -33226,6 +36899,13 @@ __metadata: languageName: node linkType: hard +"longest-streak@npm:^3.0.0": + version: 3.1.0 + resolution: "longest-streak@npm:3.1.0" + checksum: d7f952ed004cbdb5c8bcfc4f7f5c3d65449e6c5a9e9be4505a656e3df5a57ee125f284286b4bf8ecea0c21a7b3bf2b8f9001ad506c319b9815ad6a63a47d0fd0 + languageName: node + linkType: hard + "loose-envify@npm:^1.0.0, loose-envify@npm:^1.1.0, loose-envify@npm:^1.4.0": version: 1.4.0 resolution: "loose-envify@npm:1.4.0" @@ -33281,6 +36961,15 @@ __metadata: languageName: node linkType: hard +"lower-case-first@npm:^2.0.2": + version: 2.0.2 + resolution: "lower-case-first@npm:2.0.2" + dependencies: + tslib: ^2.0.3 + checksum: 33e3da1098ddda219ce125d4ab7a78a944972c0ee8872e95b6ccc35df8ad405284ab233b0ba4d72315ad1a06fe2f0d418ee4cba9ec1ef1c386dea78899fc8958 + languageName: node + linkType: hard + "lower-case@npm:^1.1.0, lower-case@npm:^1.1.1, lower-case@npm:^1.1.2": version: 1.1.4 resolution: "lower-case@npm:1.1.4" @@ -33297,6 +36986,13 @@ __metadata: languageName: node linkType: hard +"lowercase-keys@npm:^2.0.0": + version: 2.0.0 + resolution: "lowercase-keys@npm:2.0.0" + checksum: 24d7ebd56ccdf15ff529ca9e08863f3c54b0b9d1edb97a3ae1af34940ae666c01a1e6d200707bce730a8ef76cb57cc10e65f245ecaaf7e6bc8639f2fb460ac23 + languageName: node + linkType: hard + "lowercase-keys@npm:^3.0.0": version: 3.0.0 resolution: "lowercase-keys@npm:3.0.0" @@ -33411,6 +37107,15 @@ __metadata: languageName: node linkType: hard +"lucide-react@npm:^0.171.0": + version: 0.171.0 + resolution: "lucide-react@npm:0.171.0" + peerDependencies: + react: ^16.5.1 || ^17.0.0 || ^18.0.0 + checksum: 768ffe368c52a518ee339203d86ff4479989ab4d79c0716f721900c4bb7392ef6ff7a14807f6a685abd74d27f4c1778170bff77a0ab4c3e06c17944b557d8300 + languageName: node + linkType: hard + "lucide-static@npm:^0.424.0": version: 0.424.0 resolution: "lucide-static@npm:0.424.0" @@ -33641,6 +37346,13 @@ __metadata: languageName: node linkType: hard +"map-cache@npm:^0.2.0": + version: 0.2.2 + resolution: "map-cache@npm:0.2.2" + checksum: 3067cea54285c43848bb4539f978a15dedc63c03022abeec6ef05c8cb6829f920f13b94bcaf04142fc6a088318e564c4785704072910d120d55dbc2e0c421969 + languageName: node + linkType: hard + "map-obj@npm:^1.0.0": version: 1.0.1 resolution: "map-obj@npm:1.0.1" @@ -33752,6 +37464,192 @@ __metadata: languageName: node linkType: hard +"mdast-util-definitions@npm:^5.0.0": + version: 5.1.2 + resolution: "mdast-util-definitions@npm:5.1.2" + dependencies: + "@types/mdast": ^3.0.0 + "@types/unist": ^2.0.0 + unist-util-visit: ^4.0.0 + checksum: 2544daccab744ea1ede76045c2577ae4f1cc1b9eb1ea51ab273fe1dca8db5a8d6f50f87759c0ce6484975914b144b7f40316f805cb9c86223a78db8de0b77bae + languageName: node + linkType: hard + +"mdast-util-from-markdown@npm:^1.0.0": + version: 1.3.1 + resolution: "mdast-util-from-markdown@npm:1.3.1" + dependencies: + "@types/mdast": ^3.0.0 + "@types/unist": ^2.0.0 + decode-named-character-reference: ^1.0.0 + mdast-util-to-string: ^3.1.0 + micromark: ^3.0.0 + micromark-util-decode-numeric-character-reference: ^1.0.0 + micromark-util-decode-string: ^1.0.0 + micromark-util-normalize-identifier: ^1.0.0 + micromark-util-symbol: ^1.0.0 + micromark-util-types: ^1.0.0 + unist-util-stringify-position: ^3.0.0 + uvu: ^0.5.0 + checksum: c2fac225167e248d394332a4ea39596e04cbde07d8cdb3889e91e48972c4c3462a02b39fda3855345d90231eb17a90ac6e082fb4f012a77c1d0ddfb9c7446940 + languageName: node + linkType: hard + +"mdast-util-from-markdown@npm:^2.0.0": + version: 2.0.2 + resolution: "mdast-util-from-markdown@npm:2.0.2" + dependencies: + "@types/mdast": ^4.0.0 + "@types/unist": ^3.0.0 + decode-named-character-reference: ^1.0.0 + devlop: ^1.0.0 + mdast-util-to-string: ^4.0.0 + micromark: ^4.0.0 + micromark-util-decode-numeric-character-reference: ^2.0.0 + micromark-util-decode-string: ^2.0.0 + micromark-util-normalize-identifier: ^2.0.0 + micromark-util-symbol: ^2.0.0 + micromark-util-types: ^2.0.0 + unist-util-stringify-position: ^4.0.0 + checksum: 1ad19f48b30ac6e0cb756070c210c78ad93c26876edfb3f75127783bc6df8b9402016d8f3e9964f3d1d5430503138ec65c145e869438727e1aa7f3cebf228fba + languageName: node + linkType: hard + +"mdast-util-mdx-expression@npm:^2.0.0": + version: 2.0.1 + resolution: "mdast-util-mdx-expression@npm:2.0.1" + dependencies: + "@types/estree-jsx": ^1.0.0 + "@types/hast": ^3.0.0 + "@types/mdast": ^4.0.0 + devlop: ^1.0.0 + mdast-util-from-markdown: ^2.0.0 + mdast-util-to-markdown: ^2.0.0 + checksum: 6af56b06bde3ab971129db9855dcf0d31806c70b3b052d7a90a5499a366b57ffd0c2efca67d281c448c557298ba7e3e61bd07133733b735440840dd339b28e19 + languageName: node + linkType: hard + +"mdast-util-mdx-jsx@npm:^3.0.0": + version: 3.2.0 + resolution: "mdast-util-mdx-jsx@npm:3.2.0" + dependencies: + "@types/estree-jsx": ^1.0.0 + "@types/hast": ^3.0.0 + "@types/mdast": ^4.0.0 + "@types/unist": ^3.0.0 + ccount: ^2.0.0 + devlop: ^1.1.0 + mdast-util-from-markdown: ^2.0.0 + mdast-util-to-markdown: ^2.0.0 + parse-entities: ^4.0.0 + stringify-entities: ^4.0.0 + unist-util-stringify-position: ^4.0.0 + vfile-message: ^4.0.0 + checksum: 224f5f6ad247f0f2622ee36c82ac7a4c6a60c31850de4056bf95f531bd2f7ec8943ef34dfe8a8375851f65c07e4913c4f33045d703df4ff4d11b2de5a088f7f9 + languageName: node + linkType: hard + +"mdast-util-mdxjs-esm@npm:^2.0.0": + version: 2.0.1 + resolution: "mdast-util-mdxjs-esm@npm:2.0.1" + dependencies: + "@types/estree-jsx": ^1.0.0 + "@types/hast": ^3.0.0 + "@types/mdast": ^4.0.0 + devlop: ^1.0.0 + mdast-util-from-markdown: ^2.0.0 + mdast-util-to-markdown: ^2.0.0 + checksum: 1f9dad04d31d59005332e9157ea9510dc1d03092aadbc607a10475c7eec1c158b475aa0601a3a4f74e13097ca735deb8c2d9d37928ddef25d3029fd7c9e14dc3 + languageName: node + linkType: hard + +"mdast-util-phrasing@npm:^3.0.0": + version: 3.0.1 + resolution: "mdast-util-phrasing@npm:3.0.1" + dependencies: + "@types/mdast": ^3.0.0 + unist-util-is: ^5.0.0 + checksum: c5b616d9b1eb76a6b351d195d94318494722525a12a89d9c8a3b091af7db3dd1fc55d294f9d29266d8159a8267b0df4a7a133bda8a3909d5331c383e1e1ff328 + languageName: node + linkType: hard + +"mdast-util-phrasing@npm:^4.0.0": + version: 4.1.0 + resolution: "mdast-util-phrasing@npm:4.1.0" + dependencies: + "@types/mdast": ^4.0.0 + unist-util-is: ^6.0.0 + checksum: 3a97533e8ad104a422f8bebb34b3dde4f17167b8ed3a721cf9263c7416bd3447d2364e6d012a594aada40cac9e949db28a060bb71a982231693609034ed5324e + languageName: node + linkType: hard + +"mdast-util-to-hast@npm:^11.0.0": + version: 11.3.0 + resolution: "mdast-util-to-hast@npm:11.3.0" + dependencies: + "@types/hast": ^2.0.0 + "@types/mdast": ^3.0.0 + "@types/mdurl": ^1.0.0 + mdast-util-definitions: ^5.0.0 + mdurl: ^1.0.0 + unist-builder: ^3.0.0 + unist-util-generated: ^2.0.0 + unist-util-position: ^4.0.0 + unist-util-visit: ^4.0.0 + checksum: a968d034613aa5cfb44b9c03d8e61a08bb563bfde3a233fb3d83a28857357e2beef56b6767bab2867d3c3796dc5dd796af4d03fb83e3133aeb7f4187b5cc9327 + languageName: node + linkType: hard + +"mdast-util-to-hast@npm:^13.0.0": + version: 13.2.0 + resolution: "mdast-util-to-hast@npm:13.2.0" + dependencies: + "@types/hast": ^3.0.0 + "@types/mdast": ^4.0.0 + "@ungap/structured-clone": ^1.0.0 + devlop: ^1.0.0 + micromark-util-sanitize-uri: ^2.0.0 + trim-lines: ^3.0.0 + unist-util-position: ^5.0.0 + unist-util-visit: ^5.0.0 + vfile: ^6.0.0 + checksum: 7e5231ff3d4e35e1421908437577fd5098141f64918ff5cc8a0f7a8a76c5407f7a3ee88d75f7a1f7afb763989c9f357475fa0ba8296c00aaff1e940098fe86a6 + languageName: node + linkType: hard + +"mdast-util-to-markdown@npm:^1.0.0": + version: 1.5.0 + resolution: "mdast-util-to-markdown@npm:1.5.0" + dependencies: + "@types/mdast": ^3.0.0 + "@types/unist": ^2.0.0 + longest-streak: ^3.0.0 + mdast-util-phrasing: ^3.0.0 + mdast-util-to-string: ^3.0.0 + micromark-util-decode-string: ^1.0.0 + unist-util-visit: ^4.0.0 + zwitch: ^2.0.0 + checksum: 64338eb33e49bb0aea417591fd986f72fdd39205052563bb7ce9eb9ecc160824509bfacd740086a05af355c6d5c36353aafe95cab9e6927d674478757cee6259 + languageName: node + linkType: hard + +"mdast-util-to-markdown@npm:^2.0.0": + version: 2.1.2 + resolution: "mdast-util-to-markdown@npm:2.1.2" + dependencies: + "@types/mdast": ^4.0.0 + "@types/unist": ^3.0.0 + longest-streak: ^3.0.0 + mdast-util-phrasing: ^4.0.0 + mdast-util-to-string: ^4.0.0 + micromark-util-classify-character: ^2.0.0 + micromark-util-decode-string: ^2.0.0 + unist-util-visit: ^5.0.0 + zwitch: ^2.0.0 + checksum: 288d152bd50c00632e6e01c610bb904a220d1e226c8086c40627877959746f83ab0b872f4150cb7d910198953b1bf756e384ac3fee3e7b0ddb4517f9084c5803 + languageName: node + linkType: hard + "mdast-util-to-string@npm:^1.0.0": version: 1.1.0 resolution: "mdast-util-to-string@npm:1.1.0" @@ -33759,6 +37657,24 @@ __metadata: languageName: node linkType: hard +"mdast-util-to-string@npm:^3.0.0, mdast-util-to-string@npm:^3.1.0": + version: 3.2.0 + resolution: "mdast-util-to-string@npm:3.2.0" + dependencies: + "@types/mdast": ^3.0.0 + checksum: dc40b544d54339878ae2c9f2b3198c029e1e07291d2126bd00ca28272ee6616d0d2194eb1c9828a7c34d412a79a7e73b26512a734698d891c710a1e73db1e848 + languageName: node + linkType: hard + +"mdast-util-to-string@npm:^4.0.0": + version: 4.0.0 + resolution: "mdast-util-to-string@npm:4.0.0" + dependencies: + "@types/mdast": ^4.0.0 + checksum: 35489fb5710d58cbc2d6c8b6547df161a3f81e0f28f320dfb3548a9393555daf07c310c0c497708e67ed4dfea4a06e5655799e7d631ca91420c288b4525d6c29 + languageName: node + linkType: hard + "mdn-data@npm:2.0.14": version: 2.0.14 resolution: "mdn-data@npm:2.0.14" @@ -33766,7 +37682,7 @@ __metadata: languageName: node linkType: hard -"mdurl@npm:^1.0.1": +"mdurl@npm:^1.0.0, mdurl@npm:^1.0.1": version: 1.0.1 resolution: "mdurl@npm:1.0.1" checksum: 71731ecba943926bfbf9f9b51e28b5945f9411c4eda80894221b47cc105afa43ba2da820732b436f0798fd3edbbffcd1fc1415843c41a87fea08a41cc1e3d02b @@ -33900,6 +37816,18 @@ __metadata: languageName: node linkType: hard +"meros@npm:^1.2.1": + version: 1.3.0 + resolution: "meros@npm:1.3.0" + peerDependencies: + "@types/node": ">=13" + peerDependenciesMeta: + "@types/node": + optional: true + checksum: ea86c83fe9357d3eb2f5bad20909e12642c7bc8c10340d9bd0968b48f69ec453de14f7e5032d138ad04cb10d79b8c9fb3c9601bb515e8fbdf9bec4eed62994ad + languageName: node + linkType: hard + "methods@npm:^1.1.2, methods@npm:~1.1.2": version: 1.1.2 resolution: "methods@npm:1.1.2" @@ -33920,6 +37848,478 @@ __metadata: languageName: node linkType: hard +"micromark-core-commonmark@npm:^1.0.1": + version: 1.1.0 + resolution: "micromark-core-commonmark@npm:1.1.0" + dependencies: + decode-named-character-reference: ^1.0.0 + micromark-factory-destination: ^1.0.0 + micromark-factory-label: ^1.0.0 + micromark-factory-space: ^1.0.0 + micromark-factory-title: ^1.0.0 + micromark-factory-whitespace: ^1.0.0 + micromark-util-character: ^1.0.0 + micromark-util-chunked: ^1.0.0 + micromark-util-classify-character: ^1.0.0 + micromark-util-html-tag-name: ^1.0.0 + micromark-util-normalize-identifier: ^1.0.0 + micromark-util-resolve-all: ^1.0.0 + micromark-util-subtokenize: ^1.0.0 + micromark-util-symbol: ^1.0.0 + micromark-util-types: ^1.0.1 + uvu: ^0.5.0 + checksum: c6dfedc95889cc73411cb222fc2330b9eda6d849c09c9fd9eb3cd3398af246167e9d3cdb0ae3ce9ae59dd34a14624c8330e380255d41279ad7350cf6c6be6c5b + languageName: node + linkType: hard + +"micromark-core-commonmark@npm:^2.0.0": + version: 2.0.2 + resolution: "micromark-core-commonmark@npm:2.0.2" + dependencies: + decode-named-character-reference: ^1.0.0 + devlop: ^1.0.0 + micromark-factory-destination: ^2.0.0 + micromark-factory-label: ^2.0.0 + micromark-factory-space: ^2.0.0 + micromark-factory-title: ^2.0.0 + micromark-factory-whitespace: ^2.0.0 + micromark-util-character: ^2.0.0 + micromark-util-chunked: ^2.0.0 + micromark-util-classify-character: ^2.0.0 + micromark-util-html-tag-name: ^2.0.0 + micromark-util-normalize-identifier: ^2.0.0 + micromark-util-resolve-all: ^2.0.0 + micromark-util-subtokenize: ^2.0.0 + micromark-util-symbol: ^2.0.0 + micromark-util-types: ^2.0.0 + checksum: e49d78429baf72533a02d06ae83e5a24d4d547bc832173547ffbae93c0960a7dbf0d8896058301498fa4297f280070a5a66891e0e6160040d6c5ef9bc5d9cd51 + languageName: node + linkType: hard + +"micromark-factory-destination@npm:^1.0.0": + version: 1.1.0 + resolution: "micromark-factory-destination@npm:1.1.0" + dependencies: + micromark-util-character: ^1.0.0 + micromark-util-symbol: ^1.0.0 + micromark-util-types: ^1.0.0 + checksum: 9e2b5fb5fedbf622b687e20d51eb3d56ae90c0e7ecc19b37bd5285ec392c1e56f6e21aa7cfcb3c01eda88df88fe528f3acb91a5f57d7f4cba310bc3cd7f824fa + languageName: node + linkType: hard + +"micromark-factory-destination@npm:^2.0.0": + version: 2.0.1 + resolution: "micromark-factory-destination@npm:2.0.1" + dependencies: + micromark-util-character: ^2.0.0 + micromark-util-symbol: ^2.0.0 + micromark-util-types: ^2.0.0 + checksum: 9c4baa9ca2ed43c061bbf40ddd3d85154c2a0f1f485de9dea41d7dd2ad994ebb02034a003b2c1dbe228ba83a0576d591f0e90e0bf978713f84ee7d7f3aa98320 + languageName: node + linkType: hard + +"micromark-factory-label@npm:^1.0.0": + version: 1.1.0 + resolution: "micromark-factory-label@npm:1.1.0" + dependencies: + micromark-util-character: ^1.0.0 + micromark-util-symbol: ^1.0.0 + micromark-util-types: ^1.0.0 + uvu: ^0.5.0 + checksum: fcda48f1287d9b148c562c627418a2ab759cdeae9c8e017910a0cba94bb759a96611e1fc6df33182e97d28fbf191475237298983bb89ef07d5b02464b1ad28d5 + languageName: node + linkType: hard + +"micromark-factory-label@npm:^2.0.0": + version: 2.0.1 + resolution: "micromark-factory-label@npm:2.0.1" + dependencies: + devlop: ^1.0.0 + micromark-util-character: ^2.0.0 + micromark-util-symbol: ^2.0.0 + micromark-util-types: ^2.0.0 + checksum: bd03f5a75f27cdbf03b894ddc5c4480fc0763061fecf9eb927d6429233c930394f223969a99472df142d570c831236134de3dc23245d23d9f046f9d0b623b5c2 + languageName: node + linkType: hard + +"micromark-factory-space@npm:^1.0.0": + version: 1.1.0 + resolution: "micromark-factory-space@npm:1.1.0" + dependencies: + micromark-util-character: ^1.0.0 + micromark-util-types: ^1.0.0 + checksum: b58435076b998a7e244259a4694eb83c78915581206b6e7fc07b34c6abd36a1726ade63df8972fbf6c8fa38eecb9074f4e17be8d53f942e3b3d23d1a0ecaa941 + languageName: node + linkType: hard + +"micromark-factory-space@npm:^2.0.0": + version: 2.0.1 + resolution: "micromark-factory-space@npm:2.0.1" + dependencies: + micromark-util-character: ^2.0.0 + micromark-util-types: ^2.0.0 + checksum: 1bd68a017c1a66f4787506660c1e1c5019169aac3b1cb075d49ac5e360e0b2065e984d4e1d6e9e52a9d44000f2fa1c98e66a743d7aae78b4b05616bf3242ed71 + languageName: node + linkType: hard + +"micromark-factory-title@npm:^1.0.0": + version: 1.1.0 + resolution: "micromark-factory-title@npm:1.1.0" + dependencies: + micromark-factory-space: ^1.0.0 + micromark-util-character: ^1.0.0 + micromark-util-symbol: ^1.0.0 + micromark-util-types: ^1.0.0 + checksum: 4432d3dbc828c81f483c5901b0c6591a85d65a9e33f7d96ba7c3ae821617a0b3237ff5faf53a9152d00aaf9afb3a9f185b205590f40ed754f1d9232e0e9157b1 + languageName: node + linkType: hard + +"micromark-factory-title@npm:^2.0.0": + version: 2.0.1 + resolution: "micromark-factory-title@npm:2.0.1" + dependencies: + micromark-factory-space: ^2.0.0 + micromark-util-character: ^2.0.0 + micromark-util-symbol: ^2.0.0 + micromark-util-types: ^2.0.0 + checksum: b4d2e4850a8ba0dff25ce54e55a3eb0d43dda88a16293f53953153288f9d84bcdfa8ca4606b2cfbb4f132ea79587bbb478a73092a349f893f5264fbcdbce2ee1 + languageName: node + linkType: hard + +"micromark-factory-whitespace@npm:^1.0.0": + version: 1.1.0 + resolution: "micromark-factory-whitespace@npm:1.1.0" + dependencies: + micromark-factory-space: ^1.0.0 + micromark-util-character: ^1.0.0 + micromark-util-symbol: ^1.0.0 + micromark-util-types: ^1.0.0 + checksum: ef0fa682c7d593d85a514ee329809dee27d10bc2a2b65217d8ef81173e33b8e83c549049764b1ad851adfe0a204dec5450d9d20a4ca8598f6c94533a73f73fcd + languageName: node + linkType: hard + +"micromark-factory-whitespace@npm:^2.0.0": + version: 2.0.1 + resolution: "micromark-factory-whitespace@npm:2.0.1" + dependencies: + micromark-factory-space: ^2.0.0 + micromark-util-character: ^2.0.0 + micromark-util-symbol: ^2.0.0 + micromark-util-types: ^2.0.0 + checksum: 67b3944d012a42fee9e10e99178254a04d48af762b54c10a50fcab988688799993efb038daf9f5dbc04001a97b9c1b673fc6f00e6a56997877ab25449f0c8650 + languageName: node + linkType: hard + +"micromark-util-character@npm:^1.0.0": + version: 1.2.0 + resolution: "micromark-util-character@npm:1.2.0" + dependencies: + micromark-util-symbol: ^1.0.0 + micromark-util-types: ^1.0.0 + checksum: 089e79162a19b4a28731736246579ab7e9482ac93cd681c2bfca9983dcff659212ef158a66a5957e9d4b1dba957d1b87b565d85418a5b009f0294f1f07f2aaac + languageName: node + linkType: hard + +"micromark-util-character@npm:^2.0.0": + version: 2.1.1 + resolution: "micromark-util-character@npm:2.1.1" + dependencies: + micromark-util-symbol: ^2.0.0 + micromark-util-types: ^2.0.0 + checksum: e9e409efe4f2596acd44587e8591b722bfc041c1577e8fe0d9c007a4776fb800f9b3637a22862ad2ba9489f4bdf72bb547fce5767dbbfe0a5e6760e2a21c6495 + languageName: node + linkType: hard + +"micromark-util-chunked@npm:^1.0.0": + version: 1.1.0 + resolution: "micromark-util-chunked@npm:1.1.0" + dependencies: + micromark-util-symbol: ^1.0.0 + checksum: c435bde9110cb595e3c61b7f54c2dc28ee03e6a57fa0fc1e67e498ad8bac61ee5a7457a2b6a73022ddc585676ede4b912d28dcf57eb3bd6951e54015e14dc20b + languageName: node + linkType: hard + +"micromark-util-chunked@npm:^2.0.0": + version: 2.0.1 + resolution: "micromark-util-chunked@npm:2.0.1" + dependencies: + micromark-util-symbol: ^2.0.0 + checksum: f8cb2a67bcefe4bd2846d838c97b777101f0043b9f1de4f69baf3e26bb1f9885948444e3c3aec66db7595cad8173bd4567a000eb933576c233d54631f6323fe4 + languageName: node + linkType: hard + +"micromark-util-classify-character@npm:^1.0.0": + version: 1.1.0 + resolution: "micromark-util-classify-character@npm:1.1.0" + dependencies: + micromark-util-character: ^1.0.0 + micromark-util-symbol: ^1.0.0 + micromark-util-types: ^1.0.0 + checksum: 8499cb0bb1f7fb946f5896285fcca65cd742f66cd3e79ba7744792bd413ec46834f932a286de650349914d02e822946df3b55d03e6a8e1d245d1ddbd5102e5b0 + languageName: node + linkType: hard + +"micromark-util-classify-character@npm:^2.0.0": + version: 2.0.1 + resolution: "micromark-util-classify-character@npm:2.0.1" + dependencies: + micromark-util-character: ^2.0.0 + micromark-util-symbol: ^2.0.0 + micromark-util-types: ^2.0.0 + checksum: 4d8bbe3a6dbf69ac0fc43516866b5bab019fe3f4568edc525d4feaaaf78423fa54e6b6732b5bccbeed924455279a3758ffc9556954aafb903982598a95a02704 + languageName: node + linkType: hard + +"micromark-util-combine-extensions@npm:^1.0.0": + version: 1.1.0 + resolution: "micromark-util-combine-extensions@npm:1.1.0" + dependencies: + micromark-util-chunked: ^1.0.0 + micromark-util-types: ^1.0.0 + checksum: ee78464f5d4b61ccb437850cd2d7da4d690b260bca4ca7a79c4bb70291b84f83988159e373b167181b6716cb197e309bc6e6c96a68cc3ba9d50c13652774aba9 + languageName: node + linkType: hard + +"micromark-util-combine-extensions@npm:^2.0.0": + version: 2.0.1 + resolution: "micromark-util-combine-extensions@npm:2.0.1" + dependencies: + micromark-util-chunked: ^2.0.0 + micromark-util-types: ^2.0.0 + checksum: 5d22fb9ee37e8143adfe128a72b50fa09568c2cc553b3c76160486c96dbbb298c5802a177a10a215144a604b381796071b5d35be1f2c2b2ee17995eda92f0c8e + languageName: node + linkType: hard + +"micromark-util-decode-numeric-character-reference@npm:^1.0.0": + version: 1.1.0 + resolution: "micromark-util-decode-numeric-character-reference@npm:1.1.0" + dependencies: + micromark-util-symbol: ^1.0.0 + checksum: 4733fe75146e37611243f055fc6847137b66f0cde74d080e33bd26d0408c1d6f44cabc984063eee5968b133cb46855e729d555b9ff8d744652262b7b51feec73 + languageName: node + linkType: hard + +"micromark-util-decode-numeric-character-reference@npm:^2.0.0": + version: 2.0.2 + resolution: "micromark-util-decode-numeric-character-reference@npm:2.0.2" + dependencies: + micromark-util-symbol: ^2.0.0 + checksum: ee11c8bde51e250e302050474c4a2adca094bca05c69f6cdd241af12df285c48c88d19ee6e022b9728281c280be16328904adca994605680c43af56019f4b0b6 + languageName: node + linkType: hard + +"micromark-util-decode-string@npm:^1.0.0": + version: 1.1.0 + resolution: "micromark-util-decode-string@npm:1.1.0" + dependencies: + decode-named-character-reference: ^1.0.0 + micromark-util-character: ^1.0.0 + micromark-util-decode-numeric-character-reference: ^1.0.0 + micromark-util-symbol: ^1.0.0 + checksum: f1625155db452f15aa472918499689ba086b9c49d1322a08b22bfbcabe918c61b230a3002c8bc3ea9b1f52ca7a9bb1c3dd43ccb548c7f5f8b16c24a1ae77a813 + languageName: node + linkType: hard + +"micromark-util-decode-string@npm:^2.0.0": + version: 2.0.1 + resolution: "micromark-util-decode-string@npm:2.0.1" + dependencies: + decode-named-character-reference: ^1.0.0 + micromark-util-character: ^2.0.0 + micromark-util-decode-numeric-character-reference: ^2.0.0 + micromark-util-symbol: ^2.0.0 + checksum: e9546ae53f9b5a4f9aa6aaf3e750087100d3429485ca80dbacec99ff2bb15a406fa7d93784a0fc2fe05ad7296b9295e75160ef71faec9e90110b7be2ae66241a + languageName: node + linkType: hard + +"micromark-util-encode@npm:^1.0.0": + version: 1.1.0 + resolution: "micromark-util-encode@npm:1.1.0" + checksum: 4ef29d02b12336918cea6782fa87c8c578c67463925221d4e42183a706bde07f4b8b5f9a5e1c7ce8c73bb5a98b261acd3238fecd152e6dd1cdfa2d1ae11b60a0 + languageName: node + linkType: hard + +"micromark-util-encode@npm:^2.0.0": + version: 2.0.1 + resolution: "micromark-util-encode@npm:2.0.1" + checksum: be890b98e78dd0cdd953a313f4148c4692cc2fb05533e56fef5f421287d3c08feee38ca679f318e740530791fc251bfe8c80efa926fcceb4419b269c9343d226 + languageName: node + linkType: hard + +"micromark-util-html-tag-name@npm:^1.0.0": + version: 1.2.0 + resolution: "micromark-util-html-tag-name@npm:1.2.0" + checksum: ccf0fa99b5c58676dc5192c74665a3bfd1b536fafaf94723bd7f31f96979d589992df6fcf2862eba290ef18e6a8efb30ec8e1e910d9f3fc74f208871e9f84750 + languageName: node + linkType: hard + +"micromark-util-html-tag-name@npm:^2.0.0": + version: 2.0.1 + resolution: "micromark-util-html-tag-name@npm:2.0.1" + checksum: dea365f5ad28ad74ff29fcb581f7b74fc1f80271c5141b3b2bc91c454cbb6dfca753f28ae03730d657874fcbd89d0494d0e3965dfdca06d9855f467c576afa9d + languageName: node + linkType: hard + +"micromark-util-normalize-identifier@npm:^1.0.0": + version: 1.1.0 + resolution: "micromark-util-normalize-identifier@npm:1.1.0" + dependencies: + micromark-util-symbol: ^1.0.0 + checksum: 8655bea41ffa4333e03fc22462cb42d631bbef9c3c07b625fd852b7eb442a110f9d2e5902a42e65188d85498279569502bf92f3434a1180fc06f7c37edfbaee2 + languageName: node + linkType: hard + +"micromark-util-normalize-identifier@npm:^2.0.0": + version: 2.0.1 + resolution: "micromark-util-normalize-identifier@npm:2.0.1" + dependencies: + micromark-util-symbol: ^2.0.0 + checksum: 1eb9a289d7da067323df9fdc78bfa90ca3207ad8fd893ca02f3133e973adcb3743b233393d23d95c84ccaf5d220ae7f5a28402a644f135dcd4b8cfa60a7b5f84 + languageName: node + linkType: hard + +"micromark-util-resolve-all@npm:^1.0.0": + version: 1.1.0 + resolution: "micromark-util-resolve-all@npm:1.1.0" + dependencies: + micromark-util-types: ^1.0.0 + checksum: 1ce6c0237cd3ca061e76fae6602cf95014e764a91be1b9f10d36cb0f21ca88f9a07de8d49ab8101efd0b140a4fbfda6a1efb72027ab3f4d5b54c9543271dc52c + languageName: node + linkType: hard + +"micromark-util-resolve-all@npm:^2.0.0": + version: 2.0.1 + resolution: "micromark-util-resolve-all@npm:2.0.1" + dependencies: + micromark-util-types: ^2.0.0 + checksum: 9275f3ddb6c26f254dd2158e66215d050454b279707a7d9ce5a3cd0eba23201021cedcb78ae1a746c1b23227dcc418ee40dd074ade195359506797a5493550cc + languageName: node + linkType: hard + +"micromark-util-sanitize-uri@npm:^1.0.0": + version: 1.2.0 + resolution: "micromark-util-sanitize-uri@npm:1.2.0" + dependencies: + micromark-util-character: ^1.0.0 + micromark-util-encode: ^1.0.0 + micromark-util-symbol: ^1.0.0 + checksum: 6663f365c4fe3961d622a580f4a61e34867450697f6806f027f21cf63c92989494895fcebe2345d52e249fe58a35be56e223a9776d084c9287818b40c779acc1 + languageName: node + linkType: hard + +"micromark-util-sanitize-uri@npm:^2.0.0": + version: 2.0.1 + resolution: "micromark-util-sanitize-uri@npm:2.0.1" + dependencies: + micromark-util-character: ^2.0.0 + micromark-util-encode: ^2.0.0 + micromark-util-symbol: ^2.0.0 + checksum: d01517840c17de67aaa0b0f03bfe05fac8a41d99723cd8ce16c62f6810e99cd3695364a34c335485018e5e2c00e69031744630a1b85c6868aa2f2ca1b36daa2f + languageName: node + linkType: hard + +"micromark-util-subtokenize@npm:^1.0.0": + version: 1.1.0 + resolution: "micromark-util-subtokenize@npm:1.1.0" + dependencies: + micromark-util-chunked: ^1.0.0 + micromark-util-symbol: ^1.0.0 + micromark-util-types: ^1.0.0 + uvu: ^0.5.0 + checksum: 4a9d780c4d62910e196ea4fd886dc4079d8e424e5d625c0820016da0ed399a281daff39c50f9288045cc4bcd90ab47647e5396aba500f0853105d70dc8b1fc45 + languageName: node + linkType: hard + +"micromark-util-subtokenize@npm:^2.0.0": + version: 2.0.4 + resolution: "micromark-util-subtokenize@npm:2.0.4" + dependencies: + devlop: ^1.0.0 + micromark-util-chunked: ^2.0.0 + micromark-util-symbol: ^2.0.0 + micromark-util-types: ^2.0.0 + checksum: a084e626773f0750747770226c017a2d31f30fa5bd7c7e9df62755681395fea7d8693eeb81b5f41a15a05db941f2491c37af5c23f05e50d2d9777e4036a2b6bb + languageName: node + linkType: hard + +"micromark-util-symbol@npm:^1.0.0": + version: 1.1.0 + resolution: "micromark-util-symbol@npm:1.1.0" + checksum: 02414a753b79f67ff3276b517eeac87913aea6c028f3e668a19ea0fc09d98aea9f93d6222a76ca783d20299af9e4b8e7c797fe516b766185dcc6e93290f11f88 + languageName: node + linkType: hard + +"micromark-util-symbol@npm:^2.0.0": + version: 2.0.1 + resolution: "micromark-util-symbol@npm:2.0.1" + checksum: fb7346950550bc85a55793dda94a8b3cb3abc068dbd7570d1162db7aee803411d06c0a5de4ae59cd945f46143bdeadd4bba02a02248fa0d18cc577babaa00044 + languageName: node + linkType: hard + +"micromark-util-types@npm:^1.0.0, micromark-util-types@npm:^1.0.1": + version: 1.1.0 + resolution: "micromark-util-types@npm:1.1.0" + checksum: b0ef2b4b9589f15aec2666690477a6a185536927ceb7aa55a0f46475852e012d75a1ab945187e5c7841969a842892164b15d58ff8316b8e0d6cc920cabd5ede7 + languageName: node + linkType: hard + +"micromark-util-types@npm:^2.0.0": + version: 2.0.1 + resolution: "micromark-util-types@npm:2.0.1" + checksum: 630aac466628a360962f478f69421599c53ff8b3080765201b7be3b3a4be7f4c5b73632b9a6dd426b9e06035353c18acccee637d6c43d9b0bf1c31111bbb88a7 + languageName: node + linkType: hard + +"micromark@npm:^3.0.0": + version: 3.2.0 + resolution: "micromark@npm:3.2.0" + dependencies: + "@types/debug": ^4.0.0 + debug: ^4.0.0 + decode-named-character-reference: ^1.0.0 + micromark-core-commonmark: ^1.0.1 + micromark-factory-space: ^1.0.0 + micromark-util-character: ^1.0.0 + micromark-util-chunked: ^1.0.0 + micromark-util-combine-extensions: ^1.0.0 + micromark-util-decode-numeric-character-reference: ^1.0.0 + micromark-util-encode: ^1.0.0 + micromark-util-normalize-identifier: ^1.0.0 + micromark-util-resolve-all: ^1.0.0 + micromark-util-sanitize-uri: ^1.0.0 + micromark-util-subtokenize: ^1.0.0 + micromark-util-symbol: ^1.0.0 + micromark-util-types: ^1.0.1 + uvu: ^0.5.0 + checksum: 56c15851ad3eb8301aede65603473443e50c92a54849cac1dadd57e4ec33ab03a0a77f3df03de47133e6e8f695dae83b759b514586193269e98c0bf319ecd5e4 + languageName: node + linkType: hard + +"micromark@npm:^4.0.0": + version: 4.0.1 + resolution: "micromark@npm:4.0.1" + dependencies: + "@types/debug": ^4.0.0 + debug: ^4.0.0 + decode-named-character-reference: ^1.0.0 + devlop: ^1.0.0 + micromark-core-commonmark: ^2.0.0 + micromark-factory-space: ^2.0.0 + micromark-util-character: ^2.0.0 + micromark-util-chunked: ^2.0.0 + micromark-util-combine-extensions: ^2.0.0 + micromark-util-decode-numeric-character-reference: ^2.0.0 + micromark-util-encode: ^2.0.0 + micromark-util-normalize-identifier: ^2.0.0 + micromark-util-resolve-all: ^2.0.0 + micromark-util-sanitize-uri: ^2.0.0 + micromark-util-subtokenize: ^2.0.0 + micromark-util-symbol: ^2.0.0 + micromark-util-types: ^2.0.0 + checksum: 83ea084e8bf84442cc70c1207e916df11f0fde0ebd9daf978c895a1466c47a1dd4ed42b21b6e65bcc0d268fcbec24b4b1b28bc59c548940fe690929b8e0e7732 + languageName: node + linkType: hard + "micromatch@npm:^4.0.0, micromatch@npm:^4.0.2, micromatch@npm:^4.0.4, micromatch@npm:^4.0.5": version: 4.0.5 resolution: "micromatch@npm:4.0.5" @@ -34007,6 +38407,13 @@ __metadata: languageName: node linkType: hard +"mimic-response@npm:^1.0.0": + version: 1.0.1 + resolution: "mimic-response@npm:1.0.1" + checksum: 034c78753b0e622bc03c983663b1cdf66d03861050e0c8606563d149bc2b02d63f62ce4d32be4ab50d0553ae0ffe647fc34d1f5281184c6e1e8cf4d85e8d9823 + languageName: node + linkType: hard + "mimic-response@npm:^3.1.0": version: 3.1.0 resolution: "mimic-response@npm:3.1.0" @@ -34096,7 +38503,7 @@ __metadata: languageName: node linkType: hard -"minimatch@npm:^9.0.4": +"minimatch@npm:^9.0.4, minimatch@npm:^9.0.5": version: 9.0.5 resolution: "minimatch@npm:9.0.5" dependencies: @@ -34116,7 +38523,7 @@ __metadata: languageName: node linkType: hard -"minimist@npm:^1.1.0, minimist@npm:^1.2.3": +"minimist@npm:^1.1.0, minimist@npm:^1.2.3, minimist@npm:^1.2.8": version: 1.2.8 resolution: "minimist@npm:1.2.8" checksum: 75a6d645fb122dad29c06a7597bddea977258957ed88d7a6df59b5cd3fe4a527e253e9bbf2e783e4b73657f9098b96a5fe96ab8a113655d4109108577ecf85b0 @@ -34482,7 +38889,7 @@ __metadata: languageName: node linkType: hard -"mri@npm:^1.2.0": +"mri@npm:^1.1.0, mri@npm:^1.2.0": version: 1.2.0 resolution: "mri@npm:1.2.0" checksum: 83f515abbcff60150873e424894a2f65d68037e5a7fcde8a9e2b285ee9c13ac581b63cfc1e6826c4732de3aeb84902f7c1e16b7aff46cd3f897a0f757a894e85 @@ -35144,6 +39551,61 @@ __metadata: languageName: node linkType: hard +"next@npm:^13.5.4": + version: 13.5.8 + resolution: "next@npm:13.5.8" + dependencies: + "@next/env": 13.5.8 + "@next/swc-darwin-arm64": 13.5.8 + "@next/swc-darwin-x64": 13.5.8 + "@next/swc-linux-arm64-gnu": 13.5.8 + "@next/swc-linux-arm64-musl": 13.5.8 + "@next/swc-linux-x64-gnu": 13.5.8 + "@next/swc-linux-x64-musl": 13.5.8 + "@next/swc-win32-arm64-msvc": 13.5.8 + "@next/swc-win32-ia32-msvc": 13.5.8 + "@next/swc-win32-x64-msvc": 13.5.8 + "@swc/helpers": 0.5.2 + busboy: 1.6.0 + caniuse-lite: ^1.0.30001406 + postcss: 8.4.31 + styled-jsx: 5.1.1 + watchpack: 2.4.0 + peerDependencies: + "@opentelemetry/api": ^1.1.0 + react: ^18.2.0 + react-dom: ^18.2.0 + sass: ^1.3.0 + dependenciesMeta: + "@next/swc-darwin-arm64": + optional: true + "@next/swc-darwin-x64": + optional: true + "@next/swc-linux-arm64-gnu": + optional: true + "@next/swc-linux-arm64-musl": + optional: true + "@next/swc-linux-x64-gnu": + optional: true + "@next/swc-linux-x64-musl": + optional: true + "@next/swc-win32-arm64-msvc": + optional: true + "@next/swc-win32-ia32-msvc": + optional: true + "@next/swc-win32-x64-msvc": + optional: true + peerDependenciesMeta: + "@opentelemetry/api": + optional: true + sass: + optional: true + bin: + next: dist/bin/next + checksum: caf82f428b519139e39d9379da3f8cf2396bc5c5b0b329398f77c071b27bbca46e8638374fa8a3942173954ad55a586cfece4a3f9592ff743e06906304196019 + languageName: node + linkType: hard + "next@npm:^13.5.6": version: 13.5.7 resolution: "next@npm:13.5.7" @@ -35199,6 +39661,64 @@ __metadata: languageName: node linkType: hard +"next@npm:^14.1.3": + version: 14.2.24 + resolution: "next@npm:14.2.24" + dependencies: + "@next/env": 14.2.24 + "@next/swc-darwin-arm64": 14.2.24 + "@next/swc-darwin-x64": 14.2.24 + "@next/swc-linux-arm64-gnu": 14.2.24 + "@next/swc-linux-arm64-musl": 14.2.24 + "@next/swc-linux-x64-gnu": 14.2.24 + "@next/swc-linux-x64-musl": 14.2.24 + "@next/swc-win32-arm64-msvc": 14.2.24 + "@next/swc-win32-ia32-msvc": 14.2.24 + "@next/swc-win32-x64-msvc": 14.2.24 + "@swc/helpers": 0.5.5 + busboy: 1.6.0 + caniuse-lite: ^1.0.30001579 + graceful-fs: ^4.2.11 + postcss: 8.4.31 + styled-jsx: 5.1.1 + peerDependencies: + "@opentelemetry/api": ^1.1.0 + "@playwright/test": ^1.41.2 + react: ^18.2.0 + react-dom: ^18.2.0 + sass: ^1.3.0 + dependenciesMeta: + "@next/swc-darwin-arm64": + optional: true + "@next/swc-darwin-x64": + optional: true + "@next/swc-linux-arm64-gnu": + optional: true + "@next/swc-linux-arm64-musl": + optional: true + "@next/swc-linux-x64-gnu": + optional: true + "@next/swc-linux-x64-musl": + optional: true + "@next/swc-win32-arm64-msvc": + optional: true + "@next/swc-win32-ia32-msvc": + optional: true + "@next/swc-win32-x64-msvc": + optional: true + peerDependenciesMeta: + "@opentelemetry/api": + optional: true + "@playwright/test": + optional: true + sass: + optional: true + bin: + next: dist/bin/next + checksum: b85053104c932b0e1b248623e2b40c78a6597ca3acf9bdad6040a9a2748b4badf59af7d0095ad54405f1b74d106f89797b4cbd072ad49d732f54b6df2e6fd8b7 + languageName: node + linkType: hard + "nice-try@npm:^1.0.4": version: 1.0.5 resolution: "nice-try@npm:1.0.5" @@ -35206,6 +39726,15 @@ __metadata: languageName: node linkType: hard +"no-case@npm:^2.2.0, no-case@npm:^2.3.2": + version: 2.3.2 + resolution: "no-case@npm:2.3.2" + dependencies: + lower-case: ^1.1.1 + checksum: 856487731936fef44377ca74fdc5076464aba2e0734b56a4aa2b2a23d5b154806b591b9b2465faa59bb982e2b5c9391e3685400957fb4eeb38f480525adcf3dd + languageName: node + linkType: hard + "no-case@npm:^3.0.4": version: 3.0.4 resolution: "no-case@npm:3.0.4" @@ -35340,7 +39869,7 @@ __metadata: languageName: node linkType: hard -"node-fetch@npm:3.3.2": +"node-fetch@npm:3.3.2, node-fetch@npm:^3.3.2": version: 3.3.2 resolution: "node-fetch@npm:3.3.2" dependencies: @@ -35351,6 +39880,16 @@ __metadata: languageName: node linkType: hard +"node-fetch@npm:^1.5.3": + version: 1.7.3 + resolution: "node-fetch@npm:1.7.3" + dependencies: + encoding: ^0.1.11 + is-stream: ^1.0.1 + checksum: 3bb0528c05d541316ebe52770d71ee25a6dce334df4231fd55df41a644143e07f068637488c18a5b0c43f05041dbd3346752f9e19b50df50569a802484544d5b + languageName: node + linkType: hard + "node-forge@npm:1.3.1, node-forge@npm:^1.3.1": version: 1.3.1 resolution: "node-forge@npm:1.3.1" @@ -35517,6 +40056,13 @@ __metadata: languageName: node linkType: hard +"node-releases@npm:^2.0.19": + version: 2.0.19 + resolution: "node-releases@npm:2.0.19" + checksum: 917dbced519f48c6289a44830a0ca6dc944c3ee9243c468ebd8515a41c97c8b2c256edb7f3f750416bc37952cc9608684e6483c7b6c6f39f6bd8d86c52cfe658 + languageName: node + linkType: hard + "node-releases@npm:^2.0.6": version: 2.0.6 resolution: "node-releases@npm:2.0.6" @@ -35623,6 +40169,15 @@ __metadata: languageName: node linkType: hard +"normalize-path@npm:^2.1.1": + version: 2.1.1 + resolution: "normalize-path@npm:2.1.1" + dependencies: + remove-trailing-separator: ^1.0.1 + checksum: 7e9cbdcf7f5b8da7aa191fbfe33daf290cdcd8c038f422faf1b8a83c972bf7a6d94c5be34c4326cb00fb63bc0fd97d9fbcfaf2e5d6142332c2cd36d2e1b86cea + languageName: node + linkType: hard + "normalize-path@npm:^3.0.0, normalize-path@npm:~3.0.0": version: 3.0.0 resolution: "normalize-path@npm:3.0.0" @@ -35637,6 +40192,13 @@ __metadata: languageName: node linkType: hard +"normalize-url@npm:^6.0.1": + version: 6.1.0 + resolution: "normalize-url@npm:6.1.0" + checksum: 4a4944631173e7d521d6b80e4c85ccaeceb2870f315584fa30121f505a6dfd86439c5e3fdd8cd9e0e291290c41d0c3599f0cb12ab356722ed242584c30348e50 + languageName: node + linkType: hard + "normalize-url@npm:^8.0.0": version: 8.0.1 resolution: "normalize-url@npm:8.0.1" @@ -35754,6 +40316,13 @@ __metadata: languageName: node linkType: hard +"nullthrows@npm:^1.1.1": + version: 1.1.1 + resolution: "nullthrows@npm:1.1.1" + checksum: 10806b92121253eb1b08ecf707d92480f5331ba8ae5b23fa3eb0548ad24196eb797ed47606153006568a5733ea9e528a3579f21421f7828e09e7756f4bdd386f + languageName: node + linkType: hard + "number-allocator@npm:^1.0.9": version: 1.0.14 resolution: "number-allocator@npm:1.0.14" @@ -35894,6 +40463,13 @@ __metadata: languageName: node linkType: hard +"object-path@npm:^0.11.8": + version: 0.11.8 + resolution: "object-path@npm:0.11.8" + checksum: 684ccf0fb6b82f067dc81e2763481606692b8485bec03eb2a64e086a44dbea122b2b9ef44423a08e09041348fe4b4b67bd59985598f1652f67df95f0618f5968 + languageName: node + linkType: hard + "object-treeify@npm:^1.1.33": version: 1.1.33 resolution: "object-treeify@npm:1.1.33" @@ -36470,6 +41046,15 @@ __metadata: languageName: node linkType: hard +"os-locale@npm:^1.4.0": + version: 1.4.0 + resolution: "os-locale@npm:1.4.0" + dependencies: + lcid: ^1.0.0 + checksum: 0161a1b6b5a8492f99f4b47fe465df9fc521c55ba5414fce6444c45e2500487b8ed5b40a47a98a2363fe83ff04ab033785300ed8df717255ec4c3b625e55b1fb + languageName: node + linkType: hard + "os-name@npm:5.1.0": version: 5.1.0 resolution: "os-name@npm:5.1.0" @@ -36523,6 +41108,13 @@ __metadata: languageName: node linkType: hard +"p-cancelable@npm:^2.0.0": + version: 2.1.1 + resolution: "p-cancelable@npm:2.1.1" + checksum: 3dba12b4fb4a1e3e34524535c7858fc82381bbbd0f247cc32dedc4018592a3950ce66b106d0880b4ec4c2d8d6576f98ca885dc1d7d0f274d1370be20e9523ddf + languageName: node + linkType: hard + "p-cancelable@npm:^3.0.0": version: 3.0.0 resolution: "p-cancelable@npm:3.0.0" @@ -36546,6 +41138,15 @@ __metadata: languageName: node linkType: hard +"p-limit@npm:3.1.0, p-limit@npm:^3.0.2, p-limit@npm:^3.1.0": + version: 3.1.0 + resolution: "p-limit@npm:3.1.0" + dependencies: + yocto-queue: ^0.1.0 + checksum: 7c3690c4dbf62ef625671e20b7bdf1cbc9534e83352a2780f165b0d3ceba21907e77ad63401708145ca4e25bfc51636588d89a8c0aeb715e6c37d1c066430360 + languageName: node + linkType: hard + "p-limit@npm:^1.1.0": version: 1.3.0 resolution: "p-limit@npm:1.3.0" @@ -36564,15 +41165,6 @@ __metadata: languageName: node linkType: hard -"p-limit@npm:^3.0.2, p-limit@npm:^3.1.0": - version: 3.1.0 - resolution: "p-limit@npm:3.1.0" - dependencies: - yocto-queue: ^0.1.0 - checksum: 7c3690c4dbf62ef625671e20b7bdf1cbc9534e83352a2780f165b0d3ceba21907e77ad63401708145ca4e25bfc51636588d89a8c0aeb715e6c37d1c066430360 - languageName: node - linkType: hard - "p-limit@npm:^4.0.0": version: 4.0.0 resolution: "p-limit@npm:4.0.0" @@ -36761,6 +41353,15 @@ __metadata: languageName: node linkType: hard +"param-case@npm:^2.1.0": + version: 2.1.1 + resolution: "param-case@npm:2.1.1" + dependencies: + no-case: ^2.2.0 + checksum: 3a63dcb8d8dc7995a612de061afdc7bb6fe7bd0e6db994db8d4cae999ed879859fd24389090e1a0d93f4c9207ebf8c048c870f468a3f4767161753e03cb9ab58 + languageName: node + linkType: hard + "param-case@npm:^3.0.4": version: 3.0.4 resolution: "param-case@npm:3.0.4" @@ -36848,6 +41449,32 @@ __metadata: languageName: node linkType: hard +"parse-entities@npm:^4.0.0": + version: 4.0.2 + resolution: "parse-entities@npm:4.0.2" + dependencies: + "@types/unist": ^2.0.0 + character-entities-legacy: ^3.0.0 + character-reference-invalid: ^2.0.0 + decode-named-character-reference: ^1.0.0 + is-alphanumerical: ^2.0.0 + is-decimal: ^2.0.0 + is-hexadecimal: ^2.0.0 + checksum: db22b46da1a62af00409c929ac49fbd306b5ebf0dbacf4646d2ae2b58616ef90a40eedc282568a3cf740fac2a7928bc97146973a628f6977ca274dedc2ad6edc + languageName: node + linkType: hard + +"parse-filepath@npm:^1.0.2": + version: 1.0.2 + resolution: "parse-filepath@npm:1.0.2" + dependencies: + is-absolute: ^1.0.0 + map-cache: ^0.2.0 + path-root: ^0.1.1 + checksum: 6794c3f38d3921f0f7cc63fb1fb0c4d04cd463356ad389c8ce6726d3c50793b9005971f4138975a6d7025526058d5e65e9bfe634d0765e84c4e2571152665a69 + languageName: node + linkType: hard + "parse-headers@npm:^2.0.0": version: 2.0.5 resolution: "parse-headers@npm:2.0.5" @@ -36855,6 +41482,15 @@ __metadata: languageName: node linkType: hard +"parse-json@npm:^2.2.0": + version: 2.2.0 + resolution: "parse-json@npm:2.2.0" + dependencies: + error-ex: ^1.2.0 + checksum: dda78a63e57a47b713a038630868538f718a7ca0cd172a36887b0392ccf544ed0374902eb28f8bf3409e8b71d62b79d17062f8543afccf2745f9b0b2d2bb80ca + languageName: node + linkType: hard + "parse-json@npm:^4.0.0": version: 4.0.0 resolution: "parse-json@npm:4.0.0" @@ -36925,7 +41561,7 @@ __metadata: languageName: node linkType: hard -"parse5@npm:^6.0.1": +"parse5@npm:^6.0.0, parse5@npm:^6.0.1": version: 6.0.1 resolution: "parse5@npm:6.0.1" checksum: 7d569a176c5460897f7c8f3377eff640d54132b9be51ae8a8fa4979af940830b2b0c296ce75e5bd8f4041520aadde13170dbdec44889975f906098ea0002f4bd @@ -36958,6 +41594,16 @@ __metadata: languageName: node linkType: hard +"pascal-case@npm:^2.0.0": + version: 2.0.1 + resolution: "pascal-case@npm:2.0.1" + dependencies: + camel-case: ^3.0.0 + upper-case-first: ^1.1.0 + checksum: 4c539bf556572812f64a02fc6b544f3d2b51db12aed484e5162ed7f8ac2b366775d15e536091c890d71d82bdf9153128321f21574721b3a984bd85df9e519a35 + languageName: node + linkType: hard + "pascal-case@npm:^3.1.2": version: 3.1.2 resolution: "pascal-case@npm:3.1.2" @@ -37029,6 +41675,34 @@ __metadata: languageName: node linkType: hard +"path-case@npm:^2.1.0": + version: 2.1.1 + resolution: "path-case@npm:2.1.1" + dependencies: + no-case: ^2.2.0 + checksum: eb1da508c28378715cbe4ce054ee5f83a570c5010f041f4cfb439c811f7a78e36c46f26a8d59b2594c3882b53db06ef26195519c27f86523dc5d19c2e29f306d + languageName: node + linkType: hard + +"path-case@npm:^3.0.4": + version: 3.0.4 + resolution: "path-case@npm:3.0.4" + dependencies: + dot-case: ^3.0.4 + tslib: ^2.0.3 + checksum: 61de0526222629f65038a66f63330dd22d5b54014ded6636283e1d15364da38b3cf29e4433aa3f9d8b0dba407ae2b059c23b0104a34ee789944b1bc1c5c7e06d + languageName: node + linkType: hard + +"path-exists@npm:^2.0.0": + version: 2.1.0 + resolution: "path-exists@npm:2.1.0" + dependencies: + pinkie-promise: ^2.0.0 + checksum: fdb734f1d00f225f7a0033ce6d73bff6a7f76ea08936abf0e5196fa6e54a645103538cd8aedcb90d6d8c3fa3705ded0c58a4da5948ae92aa8834892c1ab44a84 + languageName: node + linkType: hard + "path-exists@npm:^3.0.0": version: 3.0.0 resolution: "path-exists@npm:3.0.0" @@ -37085,6 +41759,22 @@ __metadata: languageName: node linkType: hard +"path-root-regex@npm:^0.1.0": + version: 0.1.2 + resolution: "path-root-regex@npm:0.1.2" + checksum: dcd75d1f8e93faabe35a58e875b0f636839b3658ff2ad8c289463c40bc1a844debe0dab73c3398ef9dc8f6ec6c319720aff390cf4633763ddcf3cf4b1bbf7e8b + languageName: node + linkType: hard + +"path-root@npm:^0.1.1": + version: 0.1.1 + resolution: "path-root@npm:0.1.1" + dependencies: + path-root-regex: ^0.1.0 + checksum: ff88aebfc1c59ace510cc06703d67692a11530989920427625e52b66a303ca9b3d4059b0b7d0b2a73248d1ad29bcb342b8b786ec00592f3101d38a45fd3b2e08 + languageName: node + linkType: hard + "path-scurry@npm:^1.10.0, path-scurry@npm:^1.10.1, path-scurry@npm:^1.6.1": version: 1.10.1 resolution: "path-scurry@npm:1.10.1" @@ -37126,6 +41816,17 @@ __metadata: languageName: node linkType: hard +"path-type@npm:^1.0.0": + version: 1.1.0 + resolution: "path-type@npm:1.1.0" + dependencies: + graceful-fs: ^4.1.2 + pify: ^2.0.0 + pinkie-promise: ^2.0.0 + checksum: 59a4b2c0e566baf4db3021a1ed4ec09a8b36fca960a490b54a6bcefdb9987dafe772852982b6011cd09579478a96e57960a01f75fa78a794192853c9d468fc79 + languageName: node + linkType: hard + "path-type@npm:^3.0.0": version: 3.0.0 resolution: "path-type@npm:3.0.0" @@ -37336,6 +42037,13 @@ __metadata: languageName: node linkType: hard +"phenomenon@npm:^1.6.0": + version: 1.6.0 + resolution: "phenomenon@npm:1.6.0" + checksum: e05ca8223a9df42c5cee02c082103ef96a349424fec18a8478d2171060a63095e21bef394529263c64d8082aff43204a0fa1355211fd7ac2a338c2839fffbca3 + languageName: node + linkType: hard + "phin@npm:^2.9.1": version: 2.9.3 resolution: "phin@npm:2.9.3" @@ -37403,7 +42111,7 @@ __metadata: languageName: node linkType: hard -"pify@npm:^2.3.0": +"pify@npm:^2.0.0, pify@npm:^2.3.0": version: 2.3.0 resolution: "pify@npm:2.3.0" checksum: 9503aaeaf4577acc58642ad1d25c45c6d90288596238fb68f82811c08104c800e5a7870398e9f015d82b44ecbcbef3dc3d4251a1cbb582f6e5959fe09884b2ba @@ -37433,6 +42141,15 @@ __metadata: languageName: node linkType: hard +"pinkie-promise@npm:^2.0.0": + version: 2.0.1 + resolution: "pinkie-promise@npm:2.0.1" + dependencies: + pinkie: ^2.0.0 + checksum: b53a4a2e73bf56b6f421eef711e7bdcb693d6abb474d57c5c413b809f654ba5ee750c6a96dd7225052d4b96c4d053cdcb34b708a86fceed4663303abee52fcca + languageName: node + linkType: hard + "pinkie@npm:^1.0.0": version: 1.0.0 resolution: "pinkie@npm:1.0.0" @@ -37440,6 +42157,13 @@ __metadata: languageName: node linkType: hard +"pinkie@npm:^2.0.0": + version: 2.0.4 + resolution: "pinkie@npm:2.0.4" + checksum: b12b10afea1177595aab036fc220785488f67b4b0fc49e7a27979472592e971614fa1c728e63ad3e7eb748b4ec3c3dbd780819331dad6f7d635c77c10537b9db + languageName: node + linkType: hard + "pirates@npm:^4.0.1, pirates@npm:^4.0.5": version: 4.0.5 resolution: "pirates@npm:4.0.5" @@ -37519,6 +42243,15 @@ __metadata: languageName: node linkType: hard +"playwright-core@npm:^1.38.1": + version: 1.50.1 + resolution: "playwright-core@npm:1.50.1" + bin: + playwright-core: cli.js + checksum: 9c9c3115e8c39c9a2f4e0dc5b2bc1d76925fb0244051ace2bcffc7b2b66cf6fe1b96d9162f81bc7d9b7811b8c6f9df5aa93052d1284bfd6d30203bf4f7b58868 + languageName: node + linkType: hard + "playwright@npm:1.45.3": version: 1.45.3 resolution: "playwright@npm:1.45.3" @@ -38264,6 +42997,33 @@ __metadata: languageName: node linkType: hard +"prism-react-renderer@npm:^1.3.5": + version: 1.3.5 + resolution: "prism-react-renderer@npm:1.3.5" + peerDependencies: + react: ">=0.14.9" + checksum: c18806dcbc4c0b4fd6fd15bd06b4f7c0a6da98d93af235c3e970854994eb9b59e23315abb6cfc29e69da26d36709a47e25da85ab27fed81b6812f0a52caf6dfa + languageName: node + linkType: hard + +"prisma-field-encryption@npm:^1.4.0": + version: 1.6.0 + resolution: "prisma-field-encryption@npm:1.6.0" + dependencies: + "@47ng/cloak": ^1.2.0 + "@prisma/generator-helper": ^5.9.1 + debug: ^4.3.4 + immer: ^10.0.3 + object-path: ^0.11.8 + zod: ^3.22.4 + peerDependencies: + "@prisma/client": ">= 4.7" + bin: + prisma-field-encryption: dist/generator/main.js + checksum: 70a63e6ba316b17982288f01ce69a268ed924d6ca4b25082297ceedc75bc1aacbef20703d0e6356518a599107bc7a61ecec7964cb698a93e8076044291f31890 + languageName: node + linkType: hard + "prisma-kysely@npm:^1.7.1": version: 1.8.0 resolution: "prisma-kysely@npm:1.8.0" @@ -38449,6 +43209,13 @@ __metadata: languageName: node linkType: hard +"property-information@npm:^6.0.0": + version: 6.5.0 + resolution: "property-information@npm:6.5.0" + checksum: 6e55664e2f64083b715011e5bafaa1e694faf36986c235b0907e95d09259cc37c38382e3cc94a4c3f56366e05336443db12c8a0f0968a8c0a1b1416eebfc8f53 + languageName: node + linkType: hard + "proto-list@npm:~1.2.1": version: 1.2.4 resolution: "proto-list@npm:1.2.4" @@ -38667,6 +43434,22 @@ __metadata: languageName: node linkType: hard +"pvtsutils@npm:^1.3.2, pvtsutils@npm:^1.3.5, pvtsutils@npm:^1.3.6": + version: 1.3.6 + resolution: "pvtsutils@npm:1.3.6" + dependencies: + tslib: ^2.8.1 + checksum: 97b023b46d7b95bff004f8340efc465c1d995f35d7e97a2ef2e28d5e160f5ca47b48f42463b6be92b4341452a6b8c555feb2b1eb59ee90b97bd5d6fc86ffb186 + languageName: node + linkType: hard + +"pvutils@npm:^1.1.3": + version: 1.1.3 + resolution: "pvutils@npm:1.1.3" + checksum: 2ee26a9e5176c348977d6ec00d8ee80bff62f51743b1c5fe8abeeb4c5d29d9959cdfe0ce146707a9e6801bce88190fed3002d720b072dc87d031c692820b44c9 + languageName: node + linkType: hard + "q@npm:2.0.x": version: 2.0.3 resolution: "q@npm:2.0.3" @@ -38959,6 +43742,16 @@ __metadata: languageName: node linkType: hard +"react-chartjs-2@npm:^4.0.1": + version: 4.3.1 + resolution: "react-chartjs-2@npm:4.3.1" + peerDependencies: + chart.js: ^3.5.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + checksum: 574d12cc43b9b4a0f1e04cc692982e16ef7083c03da2a8a9fc2180fe9bcadc793008f81d8f4eec5465925eff84c95d7c523cb74376858b363ae75a83bb3c2a5d + languageName: node + linkType: hard + "react-colorful@npm:^5.1.2": version: 5.6.1 resolution: "react-colorful@npm:5.6.1" @@ -38979,6 +43772,17 @@ __metadata: languageName: node linkType: hard +"react-confetti@npm:^6.0.1": + version: 6.2.2 + resolution: "react-confetti@npm:6.2.2" + dependencies: + tween-functions: ^1.2.0 + peerDependencies: + react: ^16.3.0 || ^17.0.1 || ^18.0.0 || ^19.0.0 + checksum: df470c7fae00c1db6b50562469916f900f1beaf3fcd3c735146e5c55cc3e79bb142851d10b8b9b493e347a016c94156b50564ca9ec4f9864ea02d2eae5fb9559 + languageName: node + linkType: hard + "react-copy-to-clipboard@npm:5.0.4": version: 5.0.4 resolution: "react-copy-to-clipboard@npm:5.0.4" @@ -39012,6 +43816,23 @@ __metadata: languageName: node linkType: hard +"react-datocms@npm:^3.1.0": + version: 3.1.4 + resolution: "react-datocms@npm:3.1.4" + dependencies: + datocms-listen: ^0.1.9 + datocms-structured-text-generic-html-renderer: ^2.0.1 + datocms-structured-text-utils: ^2.0.1 + react-intersection-observer: ^8.33.1 + react-string-replace: ^1.1.0 + universal-base64: ^2.1.0 + use-deep-compare-effect: ^1.6.1 + peerDependencies: + react: ">= 16.12.0" + checksum: 54aba12aef4937175c2011548a8a576c96c8d8a596e84d191826910624c1d596e76a49782689dc236388a10803b02e700ac820cb7500cca7fd147a81f6c544c3 + languageName: node + linkType: hard + "react-day-picker@npm:^8.10.1": version: 8.10.1 resolution: "react-day-picker@npm:8.10.1" @@ -39034,6 +43855,18 @@ __metadata: languageName: node linkType: hard +"react-device-detect@npm:^2.2.2": + version: 2.2.3 + resolution: "react-device-detect@npm:2.2.3" + dependencies: + ua-parser-js: ^1.0.33 + peerDependencies: + react: ">= 0.14.0" + react-dom: ">= 0.14.0" + checksum: 42d9b3182b9d2495bf0d7914c9f370da51d8bdb853a3eba2acaf433894ae760386a075ba103185be825b33d42f50d85ef462087f261656d433f4c74dab23861f + languageName: node + linkType: hard + "react-devtools-core@npm:^4.19.1": version: 4.24.6 resolution: "react-devtools-core@npm:4.24.6" @@ -39140,6 +43973,16 @@ __metadata: languageName: node linkType: hard +"react-fast-marquee@npm:^1.6.4": + version: 1.6.5 + resolution: "react-fast-marquee@npm:1.6.5" + peerDependencies: + react: ">= 16.8.0 || ^18.0.0" + react-dom: ">= 16.8.0 || ^18.0.0" + checksum: 5213b10983f47a2dc27c3206144f96b37dad2f08457b19ecb9e393e4bd3c8db8c9cccf1758ceb5c4ca6d697e3715f3f90c5d806e4cb62bbbad9ece7f0e7b3caf + languageName: node + linkType: hard + "react-fit@npm:^1.4.0": version: 1.4.0 resolution: "react-fit@npm:1.4.0" @@ -39163,6 +44006,17 @@ __metadata: languageName: node linkType: hard +"react-github-btn@npm:^1.4.0": + version: 1.4.0 + resolution: "react-github-btn@npm:1.4.0" + dependencies: + github-buttons: ^2.22.0 + peerDependencies: + react: ">=16.3.0" + checksum: 33a416ad76ab4cc9238ac5cf5cfcab636bb2127c48fb30805385350fd3a3c2aa0aaeb78f6c726c52a0d3d133ca469be35d4b3d188c8e40c735c7ff458d2c8c3c + languageName: node + linkType: hard + "react-hook-form@npm:^7.43.3": version: 7.43.3 resolution: "react-hook-form@npm:7.43.3" @@ -39248,6 +44102,15 @@ __metadata: languageName: node linkType: hard +"react-intersection-observer@npm:^8.33.1": + version: 8.34.0 + resolution: "react-intersection-observer@npm:8.34.0" + peerDependencies: + react: ^15.0.0 || ^16.0.0 || ^17.0.0|| ^18.0.0 + checksum: 7713fecfd1512c7f5a60f9f0bf15403b8f8bbd4110bcafaeaea6de36a0e0eb60368c3638f99e9c97b75ad8fc787ea48c241dcb5c694f821d7f2976f709082cc5 + languageName: node + linkType: hard + "react-intl@npm:^5.25.1": version: 5.25.1 resolution: "react-intl@npm:5.25.1" @@ -39316,6 +44179,34 @@ __metadata: languageName: node linkType: hard +"react-markdown@npm:^9.0.1": + version: 9.0.3 + resolution: "react-markdown@npm:9.0.3" + dependencies: + "@types/hast": ^3.0.0 + devlop: ^1.0.0 + hast-util-to-jsx-runtime: ^2.0.0 + html-url-attributes: ^3.0.0 + mdast-util-to-hast: ^13.0.0 + remark-parse: ^11.0.0 + remark-rehype: ^11.0.0 + unified: ^11.0.0 + unist-util-visit: ^5.0.0 + vfile: ^6.0.0 + peerDependencies: + "@types/react": ">=18" + react: ">=18" + checksum: 7ebb01b295f7c9acddcd305308a8531c58c582c24fb8d6a4897f16b21ba0bd7e9e20ddae4a9024767e910310d22db0003489b61478cdb491a3d802343cf3a931 + languageName: node + linkType: hard + +"react-merge-refs@npm:1.1.0": + version: 1.1.0 + resolution: "react-merge-refs@npm:1.1.0" + checksum: 90884352999002d868ab9f1bcfe3222fb0f2178ed629f1da7e98e5a9b02a2c96b4aa72800db92aabd69d2483211b4be57a2088e89a11a0b660e7ada744d4ddf7 + languageName: node + linkType: hard + "react-multi-email@npm:^0.5.3": version: 0.5.3 resolution: "react-multi-email@npm:0.5.3" @@ -39517,6 +44408,18 @@ __metadata: languageName: node linkType: hard +"react-resize-detector@npm:^9.1.0": + version: 9.1.1 + resolution: "react-resize-detector@npm:9.1.1" + dependencies: + lodash: ^4.17.21 + peerDependencies: + react: ^16.0.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.0.0 || ^17.0.0 || ^18.0.0 + checksum: 0612b4416212962e5762f25e20c7016bdce3107d745a399b44bc099a04488a704228908357845c2e3fa49bf9902077f0eeebc99cf76d42ea479a8aa79f4c5b9d + languageName: node + linkType: hard + "react-schemaorg@npm:^2.0.0": version: 2.0.0 resolution: "react-schemaorg@npm:2.0.0" @@ -39591,6 +44494,13 @@ __metadata: languageName: node linkType: hard +"react-string-replace@npm:^1.1.0": + version: 1.1.1 + resolution: "react-string-replace@npm:1.1.1" + checksum: fd5058bbb3953f4bb2daa7012630a154c6109e3e848f93925e146710cebf527647a7c1496c89ca0b5d9e4b4f8ffd5c55ca631539095039faaba0a7ba3787e7cb + languageName: node + linkType: hard + "react-style-singleton@npm:^2.1.0": version: 2.1.1 resolution: "react-style-singleton@npm:2.1.1" @@ -39709,6 +44619,20 @@ __metadata: languageName: node linkType: hard +"react-twemoji@npm:^0.3.0": + version: 0.3.0 + resolution: "react-twemoji@npm:0.3.0" + dependencies: + lodash.isequal: ^4.5.0 + prop-types: ^15.7.2 + twemoji: ^13.0.1 + peerDependencies: + react: ^16.4.2 + react-dom: ^16.4.2 + checksum: d4e56477c28c0ad65b98a062a2e9a1777b808a16c05dfa35d77d84fea26f7d1e884d2e30f95a8f14c94c31330d3d4f53a4fd0bfce917bc4be9fb21d34a05db8a + languageName: node + linkType: hard + "react-universal-interface@npm:^0.6.2": version: 0.6.2 resolution: "react-universal-interface@npm:0.6.2" @@ -39729,6 +44653,19 @@ __metadata: languageName: node linkType: hard +"react-use-measure@npm:^2.1.1": + version: 2.1.7 + resolution: "react-use-measure@npm:2.1.7" + peerDependencies: + react: ">=16.13" + react-dom: ">=16.13" + peerDependenciesMeta: + react-dom: + optional: true + checksum: 5f00c14cf50b0710cdbd27b63a005be20283099d2fa2723a97f3a1cf0b2daedddd67249520c21e49e95348f56428689f3229c343dcb9ed37da58f9c227d29bee + languageName: node + linkType: hard + "react-use@npm:^17.4.2": version: 17.5.0 resolution: "react-use@npm:17.5.0" @@ -39765,6 +44702,15 @@ __metadata: languageName: node linkType: hard +"react-wrap-balancer@npm:^1.0.0": + version: 1.1.1 + resolution: "react-wrap-balancer@npm:1.1.1" + peerDependencies: + react: ">=16.8.0 || ^17.0.0 || ^18" + checksum: 68d9417efa751eced4a8c9f7e3f1f43d59fbf9ecf42dfd90b7b4c33f5af855766bb21bf967c9fc8a0f09f6ca4a58071c1dd47af2c813b33b3813ebe7efcb32f2 + languageName: node + linkType: hard + "react@npm:^18, react@npm:^18.2.0": version: 18.2.0 resolution: "react@npm:18.2.0" @@ -39803,6 +44749,27 @@ __metadata: languageName: node linkType: hard +"read-pkg-up@npm:^1.0.1": + version: 1.0.1 + resolution: "read-pkg-up@npm:1.0.1" + dependencies: + find-up: ^1.0.0 + read-pkg: ^1.0.0 + checksum: d18399a0f46e2da32beb2f041edd0cda49d2f2cc30195a05c759ef3ed9b5e6e19ba1ad1bae2362bdec8c6a9f2c3d18f4d5e8c369e808b03d498d5781cb9122c7 + languageName: node + linkType: hard + +"read-pkg@npm:^1.0.0": + version: 1.1.0 + resolution: "read-pkg@npm:1.1.0" + dependencies: + load-json-file: ^1.0.0 + normalize-package-data: ^2.3.2 + path-type: ^1.0.0 + checksum: a0f5d5e32227ec8e6a028dd5c5134eab229768dcb7a5d9a41a284ed28ad4b9284fecc47383dc1593b5694f4de603a7ffaee84b738956b9b77e0999567485a366 + languageName: node + linkType: hard + "read-pkg@npm:^3.0.0": version: 3.0.0 resolution: "read-pkg@npm:3.0.0" @@ -40184,6 +45151,13 @@ __metadata: languageName: node linkType: hard +"regenerator-runtime@npm:^0.11.0": + version: 0.11.1 + resolution: "regenerator-runtime@npm:0.11.1" + checksum: 3c97bd2c7b2b3247e6f8e2147a002eb78c995323732dad5dc70fac8d8d0b758d0295e7015b90d3d444446ae77cbd24b9f9123ec3a77018e81d8999818301b4f4 + languageName: node + linkType: hard + "regenerator-runtime@npm:^0.13.3": version: 0.13.9 resolution: "regenerator-runtime@npm:0.13.9" @@ -40343,6 +45317,17 @@ __metadata: languageName: node linkType: hard +"relay-runtime@npm:12.0.0": + version: 12.0.0 + resolution: "relay-runtime@npm:12.0.0" + dependencies: + "@babel/runtime": ^7.0.0 + fbjs: ^3.0.0 + invariant: ^2.2.4 + checksum: 51cdc8a5e04188982452ae4e7c6ac7d6375ee769130d24ce8e8f9cdd45aa7e11ecd68670f56e30dcee1b4974585e88ecce19e69a9868b80cda0db7678c3b8f0a + languageName: node + linkType: hard + "release-it@npm:^17.1.1": version: 17.1.1 resolution: "release-it@npm:17.1.1" @@ -40393,6 +45378,55 @@ __metadata: languageName: node linkType: hard +"remark-html@npm:^14.0.1": + version: 14.0.1 + resolution: "remark-html@npm:14.0.1" + dependencies: + "@types/mdast": ^3.0.0 + hast-util-sanitize: ^4.0.0 + hast-util-to-html: ^8.0.0 + mdast-util-to-hast: ^11.0.0 + unified: ^10.0.0 + checksum: 5d689b05dc6b4f24e08ece07aabca98685949198a8b6ceacb2fbf7fba8f45f55cea5623caddfd92aaf6e6f082bc1c93797dfb82dc48a6f6e1c5263947a4779c9 + languageName: node + linkType: hard + +"remark-parse@npm:^10.0.0": + version: 10.0.2 + resolution: "remark-parse@npm:10.0.2" + dependencies: + "@types/mdast": ^3.0.0 + mdast-util-from-markdown: ^1.0.0 + unified: ^10.0.0 + checksum: 5041b4b44725f377e69986e02f8f072ae2222db5e7d3b6c80829756b842e811343ffc2069cae1f958a96bfa36104ab91a57d7d7e2f0cef521e210ab8c614d5c7 + languageName: node + linkType: hard + +"remark-parse@npm:^11.0.0": + version: 11.0.0 + resolution: "remark-parse@npm:11.0.0" + dependencies: + "@types/mdast": ^4.0.0 + mdast-util-from-markdown: ^2.0.0 + micromark-util-types: ^2.0.0 + unified: ^11.0.0 + checksum: d83d245290fa84bb04fb3e78111f09c74f7417e7c012a64dd8dc04fccc3699036d828fbd8eeec8944f774b6c30cc1d925c98f8c46495ebcee7c595496342ab7f + languageName: node + linkType: hard + +"remark-rehype@npm:^11.0.0": + version: 11.1.1 + resolution: "remark-rehype@npm:11.1.1" + dependencies: + "@types/hast": ^3.0.0 + "@types/mdast": ^4.0.0 + mdast-util-to-hast: ^13.0.0 + unified: ^11.0.0 + vfile: ^6.0.0 + checksum: e199dff098ae6a560e13dd1778dec9c61440f979cc931c4ca4dcde0d58e51c0723243a901c1842379b189083cf4d74f224f57833738095ffa9535179d7cf3f01 + languageName: node + linkType: hard + "remark-slug@npm:^6.0.0": version: 6.1.0 resolution: "remark-slug@npm:6.1.0" @@ -40404,6 +45438,29 @@ __metadata: languageName: node linkType: hard +"remark-stringify@npm:^10.0.0": + version: 10.0.3 + resolution: "remark-stringify@npm:10.0.3" + dependencies: + "@types/mdast": ^3.0.0 + mdast-util-to-markdown: ^1.0.0 + unified: ^10.0.0 + checksum: 6004e204fba672ee322c3cf0bef090e95802feedf7ef875f88b120c5e6208f1eb09c014486d5ca42a1e199c0a17ce0ed165fb248c66608458afed4bdca51dd3a + languageName: node + linkType: hard + +"remark@npm:^14.0.2": + version: 14.0.3 + resolution: "remark@npm:14.0.3" + dependencies: + "@types/mdast": ^3.0.0 + remark-parse: ^10.0.0 + remark-stringify: ^10.0.0 + unified: ^10.0.0 + checksum: 36eec9668c5f5e497507fa5d396c79183265a5f7dd204a608e7f031a4f61b48f7bb5cfaec212f5614ccd1266cc4a9f8d7a59a45e95aed9876986b4c453b191be + languageName: node + linkType: hard + "remarkable@npm:^2.0.1": version: 2.0.1 resolution: "remarkable@npm:2.0.1" @@ -40416,6 +45473,20 @@ __metadata: languageName: node linkType: hard +"remeda@npm:^1.24.1": + version: 1.61.0 + resolution: "remeda@npm:1.61.0" + checksum: c080da71953ccc178334ca774f0da5c3f4664ef25ff7bc1e1f09a921ff9c264bbf8be8e0ac876c4a3f851a4d3e017cd454319a0e24610fd744bd8f9177dd4c7b + languageName: node + linkType: hard + +"remedial@npm:^1.0.7": + version: 1.0.8 + resolution: "remedial@npm:1.0.8" + checksum: 12df7c55eb92501d7f33cfe5f5ad12be13bb6ac0c53f494aaa9963d5a5155bb8be2143e8d5e17afa1a500ef5dc71d13642920d35350f2a31b65a9778afab6869 + languageName: node + linkType: hard + "remove-markdown@npm:^0.5.0": version: 0.5.0 resolution: "remove-markdown@npm:0.5.0" @@ -40423,6 +45494,20 @@ __metadata: languageName: node linkType: hard +"remove-trailing-separator@npm:^1.0.1": + version: 1.1.0 + resolution: "remove-trailing-separator@npm:1.1.0" + checksum: d3c20b5a2d987db13e1cca9385d56ecfa1641bae143b620835ac02a6b70ab88f68f117a0021838db826c57b31373d609d52e4f31aca75fc490c862732d595419 + languageName: node + linkType: hard + +"remove-trailing-spaces@npm:^1.0.6": + version: 1.0.8 + resolution: "remove-trailing-spaces@npm:1.0.8" + checksum: 81f615c5cd8dd6a5e3017dcc9af598965575d176d42ef99cfd7b894529991f464e629fd68aba089f5c6bebf5bb8070a5eee56f3b621aba55e8ef524d6a4d4f69 + languageName: node + linkType: hard + "renderkid@npm:^3.0.0": version: 3.0.0 resolution: "renderkid@npm:3.0.0" @@ -40503,6 +45588,13 @@ __metadata: languageName: node linkType: hard +"require-main-filename@npm:^1.0.1": + version: 1.0.1 + resolution: "require-main-filename@npm:1.0.1" + checksum: 1fef30754da961f4e13c450c3eb60c7ae898a529c6ad6fa708a70bd2eed01564ceb299187b2899f5562804d797a059f39a5789884d0ac7b7ae1defc68fba4abf + languageName: node + linkType: hard + "require-main-filename@npm:^2.0.0": version: 2.0.0 resolution: "require-main-filename@npm:2.0.0" @@ -40531,7 +45623,7 @@ __metadata: languageName: node linkType: hard -"resolve-alpn@npm:^1.2.0": +"resolve-alpn@npm:^1.0.0, resolve-alpn@npm:^1.2.0": version: 1.2.1 resolution: "resolve-alpn@npm:1.2.1" checksum: f558071fcb2c60b04054c99aebd572a2af97ef64128d59bef7ab73bd50d896a222a056de40ffc545b633d99b304c259ea9d0c06830d5c867c34f0bfa60b8eae0 @@ -40547,6 +45639,13 @@ __metadata: languageName: node linkType: hard +"resolve-from@npm:5.0.0, resolve-from@npm:^5.0.0": + version: 5.0.0 + resolution: "resolve-from@npm:5.0.0" + checksum: 4ceeb9113e1b1372d0cd969f3468fa042daa1dd9527b1b6bb88acb6ab55d8b9cd65dbf18819f9f9ddf0db804990901dcdaade80a215e7b2c23daae38e64f5bdf + languageName: node + linkType: hard + "resolve-from@npm:^4.0.0": version: 4.0.0 resolution: "resolve-from@npm:4.0.0" @@ -40554,13 +45653,6 @@ __metadata: languageName: node linkType: hard -"resolve-from@npm:^5.0.0": - version: 5.0.0 - resolution: "resolve-from@npm:5.0.0" - checksum: 4ceeb9113e1b1372d0cd969f3468fa042daa1dd9527b1b6bb88acb6ab55d8b9cd65dbf18819f9f9ddf0db804990901dcdaade80a215e7b2c23daae38e64f5bdf - languageName: node - linkType: hard - "resolve-url-loader@npm:^5.0.0": version: 5.0.0 resolution: "resolve-url-loader@npm:5.0.0" @@ -40777,6 +45869,15 @@ __metadata: languageName: node linkType: hard +"responselike@npm:^2.0.0": + version: 2.0.1 + resolution: "responselike@npm:2.0.1" + dependencies: + lowercase-keys: ^2.0.0 + checksum: b122535466e9c97b55e69c7f18e2be0ce3823c5d47ee8de0d9c0b114aa55741c6db8bfbfce3766a94d1272e61bfb1ebf0a15e9310ac5629fbb7446a861b4fd3a + languageName: node + linkType: hard + "responselike@npm:^3.0.0": version: 3.0.0 resolution: "responselike@npm:3.0.0" @@ -41215,7 +46316,7 @@ __metadata: languageName: node linkType: hard -"rxjs@npm:7.8.1, rxjs@npm:^7.8.1": +"rxjs@npm:7.8.1, rxjs@npm:^7.0.0, rxjs@npm:^7.8.1": version: 7.8.1 resolution: "rxjs@npm:7.8.1" dependencies: @@ -41233,6 +46334,22 @@ __metadata: languageName: node linkType: hard +"s-ago@npm:^2.2.0": + version: 2.2.0 + resolution: "s-ago@npm:2.2.0" + checksum: f665fef44d9d88322ce5a798ca3c49b40f96231ddc7bd46dc23c883e98215675aa422985760d45d3779faa3c0bc94edb2a50630bf15f54c239d11963e53d998c + languageName: node + linkType: hard + +"sade@npm:^1.7.3": + version: 1.8.1 + resolution: "sade@npm:1.8.1" + dependencies: + mri: ^1.1.0 + checksum: 0756e5b04c51ccdc8221ebffd1548d0ce5a783a44a0fa9017a026659b97d632913e78f7dca59f2496aa996a0be0b0c322afd87ca72ccd909406f49dbffa0f45d + languageName: node + linkType: hard + "safe-array-concat@npm:^1.0.1": version: 1.1.0 resolution: "safe-array-concat@npm:1.1.0" @@ -41510,6 +46627,13 @@ __metadata: languageName: node linkType: hard +"scuid@npm:^1.1.0": + version: 1.1.0 + resolution: "scuid@npm:1.1.0" + checksum: cd094ac3718b0070a222f9a499b280c698fdea10268cc163fa244421099544c1766dd893fdee0e2a8eba5d53ab9d0bcb11067bedff166665030fa6fda25a096b + languageName: node + linkType: hard + "section-matter@npm:^1.0.0": version: 1.0.0 resolution: "section-matter@npm:1.0.0" @@ -41657,6 +46781,27 @@ __metadata: languageName: node linkType: hard +"sentence-case@npm:^2.1.0": + version: 2.1.1 + resolution: "sentence-case@npm:2.1.1" + dependencies: + no-case: ^2.2.0 + upper-case-first: ^1.1.2 + checksum: ce5ca48804051e056a6956ad75a1a7d833e5d8f5021a015d380a22d3cf04496d5238de2e5c876d9701a9218633052c3a65911ca1b6460d36a41ecad46e81d139 + languageName: node + linkType: hard + +"sentence-case@npm:^3.0.4": + version: 3.0.4 + resolution: "sentence-case@npm:3.0.4" + dependencies: + no-case: ^3.0.4 + tslib: ^2.0.3 + upper-case-first: ^2.0.2 + checksum: 3cfe6c0143e649132365695706702d7f729f484fa7b25f43435876efe7af2478243eefb052bacbcce10babf9319fd6b5b6bc59b94c80a1c819bcbb40651465d5 + languageName: node + linkType: hard + "seq-queue@npm:^0.0.5": version: 0.0.5 resolution: "seq-queue@npm:0.0.5" @@ -41798,7 +46943,7 @@ __metadata: languageName: node linkType: hard -"setimmediate@npm:^1.0.4": +"setimmediate@npm:^1.0.4, setimmediate@npm:^1.0.5": version: 1.0.5 resolution: "setimmediate@npm:1.0.5" checksum: c9a6f2c5b51a2dabdc0247db9c46460152ffc62ee139f3157440bd48e7c59425093f42719ac1d7931f054f153e2d26cf37dfeb8da17a794a58198a2705e527fd @@ -41965,6 +47110,13 @@ __metadata: languageName: node linkType: hard +"shell-quote@npm:^1.7.3": + version: 1.8.2 + resolution: "shell-quote@npm:1.8.2" + checksum: 1e97b62ced1c4c5135015978ebf273bed1f425a68cf84163e83fbb0f34b3ff9471e656720dab2b7cbb4ae0f58998e686d17d166c28dfb3662acd009e8bd7faed + languageName: node + linkType: hard + "shelljs@npm:0.8.5": version: 0.8.5 resolution: "shelljs@npm:0.8.5" @@ -42087,6 +47239,13 @@ __metadata: languageName: node linkType: hard +"signedsource@npm:^1.0.0": + version: 1.0.0 + resolution: "signedsource@npm:1.0.0" + checksum: 64b2c8d7a48de9009cfd3aff62bb7c88abf3b8e0421f17ebb1d7f5ca9cc9c3ad10f5a1e3ae6cd804e4e6121c87b668202ae9057065f058ddfbf34ea65f63945d + languageName: node + linkType: hard + "simple-concat@npm:^1.0.0": version: 1.0.1 resolution: "simple-concat@npm:1.0.1" @@ -42244,6 +47403,25 @@ __metadata: languageName: node linkType: hard +"snake-case@npm:^2.1.0": + version: 2.1.0 + resolution: "snake-case@npm:2.1.0" + dependencies: + no-case: ^2.2.0 + checksum: 7e42b4841103be4dd050b2f57f5cb423d5164524c1cb3d81efda9809265a82a2d02ddf44361beae37d75a239308e6414be85fe441dc48cd70c708cb975387d10 + languageName: node + linkType: hard + +"snake-case@npm:^3.0.4": + version: 3.0.4 + resolution: "snake-case@npm:3.0.4" + dependencies: + dot-case: ^3.0.4 + tslib: ^2.0.3 + checksum: 0a7a79900bbb36f8aaa922cf111702a3647ac6165736d5dc96d3ef367efc50465cac70c53cd172c382b022dac72ec91710608e5393de71f76d7142e6fd80e8a3 + languageName: node + linkType: hard + "socks-proxy-agent@npm:^7.0.0": version: 7.0.0 resolution: "socks-proxy-agent@npm:7.0.0" @@ -42404,6 +47582,13 @@ __metadata: languageName: node linkType: hard +"space-separated-tokens@npm:^2.0.0": + version: 2.0.2 + resolution: "space-separated-tokens@npm:2.0.2" + checksum: 202e97d7ca1ba0758a0aa4fe226ff98142073bcceeff2da3aad037968878552c3bbce3b3231970025375bbba5aee00c5b8206eda408da837ab2dc9c0f26be990 + languageName: node + linkType: hard + "spacetime@npm:^7.1.4": version: 7.1.4 resolution: "spacetime@npm:7.1.4" @@ -42420,6 +47605,13 @@ __metadata: languageName: node linkType: hard +"spawn-command@npm:^0.0.2-1": + version: 0.0.2 + resolution: "spawn-command@npm:0.0.2" + checksum: e35c5d28177b4d461d33c88cc11f6f3a5079e2b132c11e1746453bbb7a0c0b8a634f07541a2a234fa4758239d88203b758def509161b651e81958894c0b4b64b + languageName: node + linkType: hard + "spawndamnit@npm:^2.0.0": version: 2.0.0 resolution: "spawndamnit@npm:2.0.0" @@ -42496,6 +47688,15 @@ __metadata: languageName: node linkType: hard +"sponge-case@npm:^1.0.1": + version: 1.0.1 + resolution: "sponge-case@npm:1.0.1" + dependencies: + tslib: ^2.0.3 + checksum: 64f53d930f63c5a9e59d4cae487c1ffa87d25eab682833b01d572cc885e7e3fdbad4f03409a41f03ecb27f1f8959432253eb48332c7007c3388efddb24ba2792 + languageName: node + linkType: hard + "sprintf-js@npm:^1.1.2": version: 1.1.2 resolution: "sprintf-js@npm:1.1.2" @@ -42869,6 +48070,13 @@ __metadata: languageName: node linkType: hard +"string-env-interpolation@npm:^1.0.1": + version: 1.0.1 + resolution: "string-env-interpolation@npm:1.0.1" + checksum: d126329587f635bee65300e4451e7352b9b67e03daeb62f006ca84244cac12a1f6e45176b018653ba0c3ec3b5d980f9ca59d2eeed99cf799501cdaa7f871dc6f + languageName: node + linkType: hard + "string-length@npm:^4.0.1": version: 4.0.2 resolution: "string-length@npm:4.0.2" @@ -42897,6 +48105,17 @@ __metadata: languageName: node linkType: hard +"string-width@npm:^1.0.1, string-width@npm:^1.0.2": + version: 1.0.2 + resolution: "string-width@npm:1.0.2" + dependencies: + code-point-at: ^1.0.0 + is-fullwidth-code-point: ^1.0.0 + strip-ansi: ^3.0.0 + checksum: 5c79439e95bc3bd7233a332c5f5926ab2ee90b23816ed4faa380ce3b2576d7800b0a5bb15ae88ed28737acc7ea06a518c2eef39142dd727adad0e45c776cd37e + languageName: node + linkType: hard + "string-width@npm:^5.0.0, string-width@npm:^5.0.1, string-width@npm:^5.1.2": version: 5.1.2 resolution: "string-width@npm:5.1.2" @@ -43189,6 +48408,16 @@ __metadata: languageName: node linkType: hard +"stringify-entities@npm:^4.0.0": + version: 4.0.4 + resolution: "stringify-entities@npm:4.0.4" + dependencies: + character-entities-html4: ^2.0.0 + character-entities-legacy: ^3.0.0 + checksum: ac1344ef211eacf6cf0a0a8feaf96f9c36083835b406560d2c6ff5a87406a41b13f2f0b4c570a3b391f465121c4fd6822b863ffb197e8c0601a64097862cc5b5 + languageName: node + linkType: hard + "stringify-object@npm:^3.3.0": version: 3.3.0 resolution: "stringify-object@npm:3.3.0" @@ -43209,7 +48438,7 @@ __metadata: languageName: node linkType: hard -"strip-ansi@npm:^3.0.0": +"strip-ansi@npm:^3.0.0, strip-ansi@npm:^3.0.1": version: 3.0.1 resolution: "strip-ansi@npm:3.0.1" dependencies: @@ -43243,6 +48472,15 @@ __metadata: languageName: node linkType: hard +"strip-bom@npm:^2.0.0": + version: 2.0.0 + resolution: "strip-bom@npm:2.0.0" + dependencies: + is-utf8: ^0.2.0 + checksum: 08efb746bc67b10814cd03d79eb31bac633393a782e3f35efbc1b61b5165d3806d03332a97f362822cf0d4dd14ba2e12707fcff44fe1c870c48a063a0c9e4944 + languageName: node + linkType: hard + "strip-bom@npm:^3.0.0": version: 3.0.0 resolution: "strip-bom@npm:3.0.0" @@ -43365,6 +48603,15 @@ __metadata: languageName: node linkType: hard +"style-to-object@npm:^1.0.0": + version: 1.0.8 + resolution: "style-to-object@npm:1.0.8" + dependencies: + inline-style-parser: 0.2.4 + checksum: 80ca4773fc728d7919edc552eb46bab11aa8cdd0b426528ee8b817ba6872ea7b9d38fbb97b6443fd2d4895a4c4b02ec32765387466a302d0b4d1b91deab1e1a0 + languageName: node + linkType: hard + "styled-jsx@npm:5.1.1": version: 5.1.1 resolution: "styled-jsx@npm:5.1.1" @@ -43493,6 +48740,15 @@ __metadata: languageName: node linkType: hard +"superjson@npm:^1.9.1": + version: 1.13.3 + resolution: "superjson@npm:1.13.3" + dependencies: + copy-anything: ^3.0.2 + checksum: f5aeb010f24163cb871a4bc402d9164112201c059afc247a75b03131c274aea6eec9cf08be9e4a9465fe4961689009a011584528531d52f7cc91c077e07e5c75 + languageName: node + linkType: hard + "supertest@npm:^6.3.3": version: 6.3.4 resolution: "supertest@npm:6.3.4" @@ -43528,7 +48784,7 @@ __metadata: languageName: node linkType: hard -"supports-color@npm:^8.0.0, supports-color@npm:^8.1.1": +"supports-color@npm:^8.0.0, supports-color@npm:^8.1.0, supports-color@npm:^8.1.1": version: 8.1.1 resolution: "supports-color@npm:8.1.1" dependencies: @@ -43711,6 +48967,15 @@ __metadata: languageName: node linkType: hard +"swap-case@npm:^2.0.2": + version: 2.0.2 + resolution: "swap-case@npm:2.0.2" + dependencies: + tslib: ^2.0.3 + checksum: 6e21c9e1b3cd5735eb2af679a99ec3efc78a14e3d4d5e3fd594e254b91cfd37185b3d1c6e41b22f53a2cdf5d1b963ce30c0fe8b78337e3fd43d0137084670a5f + languageName: node + linkType: hard + "swc-loader@npm:^0.2.3": version: 0.2.3 resolution: "swc-loader@npm:0.2.3" @@ -43721,6 +48986,15 @@ __metadata: languageName: node linkType: hard +"swr@npm:^1.2.2": + version: 1.3.0 + resolution: "swr@npm:1.3.0" + peerDependencies: + react: ^16.11.0 || ^17.0.0 || ^18.0.0 + checksum: e7a184f0d560e9c8be85c023cc8e65e56a88a6ed46f9394b301b07f838edca23d2e303685319a4fcd620b81d447a7bcb489c7fa0a752c259f91764903c690cdb + languageName: node + linkType: hard + "symbol-observable@npm:4.0.0": version: 4.0.0 resolution: "symbol-observable@npm:4.0.0" @@ -43735,6 +49009,17 @@ __metadata: languageName: node linkType: hard +"sync-fetch@npm:0.6.0-2": + version: 0.6.0-2 + resolution: "sync-fetch@npm:0.6.0-2" + dependencies: + node-fetch: ^3.3.2 + timeout-signal: ^2.0.0 + whatwg-mimetype: ^4.0.0 + checksum: 325988e32633affdc7c6dcababd5a6ed5a1e825f30eca55af4a44f877d4154ae5a9783351f82fd793de85d3105213a3f60a12411a4db25e7ae4be08581367252 + languageName: node + linkType: hard + "synchronous-promise@npm:^2.0.15": version: 2.0.15 resolution: "synchronous-promise@npm:2.0.15" @@ -44249,6 +49534,13 @@ __metadata: languageName: node linkType: hard +"timeout-signal@npm:^2.0.0": + version: 2.0.0 + resolution: "timeout-signal@npm:2.0.0" + checksum: 0e3a6fb7ce4912e890475fe268888dd31068814ed096b264b3748d57f5a63a323fa1a5c4ba3d7da4529fb5031ed1a69bf8edfe5fb709bd3eec79d72f9ee51cc9 + languageName: node + linkType: hard + "timers-browserify@npm:^2.0.12, timers-browserify@npm:^2.0.4": version: 2.0.12 resolution: "timers-browserify@npm:2.0.12" @@ -44396,6 +49688,25 @@ __metadata: languageName: node linkType: hard +"title-case@npm:^2.1.0": + version: 2.1.1 + resolution: "title-case@npm:2.1.1" + dependencies: + no-case: ^2.2.0 + upper-case: ^1.0.3 + checksum: e88ddfc4608a7fb18ed440139d9c42a5f8a50f916e07062be2aef5e2038720746ed51c4fdf9e7190d24a8cc10e6dec9773027fc44450b3a4a5e5c49b4a931fb1 + languageName: node + linkType: hard + +"title-case@npm:^3.0.3": + version: 3.0.3 + resolution: "title-case@npm:3.0.3" + dependencies: + tslib: ^2.0.3 + checksum: e8b7ea006b53cf3208d278455d9f1e22c409459d7f9878da324fa3b18cc0aef8560924c19c744e870394a5d9cddfdbe029ebae9875909ee7f4fc562e7cbfc53e + languageName: node + linkType: hard + "tldts-core@npm:^6.1.61": version: 6.1.61 resolution: "tldts-core@npm:6.1.61" @@ -44414,6 +49725,15 @@ __metadata: languageName: node linkType: hard +"tmp-promise@npm:^3.0.3": + version: 3.0.3 + resolution: "tmp-promise@npm:3.0.3" + dependencies: + tmp: ^0.2.0 + checksum: f854f5307dcee6455927ec3da9398f139897faf715c5c6dcee6d9471ae85136983ea06662eba2edf2533bdcb0fca66d16648e79e14381e30c7fb20be9c1aa62c + languageName: node + linkType: hard + "tmp@npm:0.2.1": version: 0.2.1 resolution: "tmp@npm:0.2.1" @@ -44432,6 +49752,13 @@ __metadata: languageName: node linkType: hard +"tmp@npm:^0.2.0": + version: 0.2.3 + resolution: "tmp@npm:0.2.3" + checksum: 73b5c96b6e52da7e104d9d44afb5d106bb1e16d9fa7d00dbeb9e6522e61b571fbdb165c756c62164be9a3bbe192b9b268c236d370a2a0955c7689cd2ae377b95 + languageName: node + linkType: hard + "tmpl@npm:1.0.5": version: 1.0.5 resolution: "tmpl@npm:1.0.5" @@ -44579,7 +49906,7 @@ __metadata: languageName: node linkType: hard -"tree-kill@npm:1.2.2": +"tree-kill@npm:1.2.2, tree-kill@npm:^1.2.2": version: 1.2.2 resolution: "tree-kill@npm:1.2.2" bin: @@ -44588,6 +49915,13 @@ __metadata: languageName: node linkType: hard +"trim-lines@npm:^3.0.0": + version: 3.0.1 + resolution: "trim-lines@npm:3.0.1" + checksum: e241da104682a0e0d807222cc1496b92e716af4db7a002f4aeff33ae6a0024fef93165d49eab11aa07c71e1347c42d46563f91dfaa4d3fb945aa535cdead53ed + languageName: node + linkType: hard + "trim-newlines@npm:^3.0.0": version: 3.0.1 resolution: "trim-newlines@npm:3.0.1" @@ -44602,6 +49936,13 @@ __metadata: languageName: node linkType: hard +"trough@npm:^2.0.0": + version: 2.2.0 + resolution: "trough@npm:2.2.0" + checksum: 6097df63169aca1f9b08c263b1b501a9b878387f46e161dde93f6d0bba7febba93c95f876a293c5ea370f6cb03bcb687b2488c8955c3cfb66c2c0161ea8c00f6 + languageName: node + linkType: hard + "ts-api-utils@npm:^1.0.1": version: 1.0.3 resolution: "ts-api-utils@npm:1.0.3" @@ -44759,6 +50100,13 @@ __metadata: languageName: node linkType: hard +"ts-log@npm:^2.2.3": + version: 2.2.7 + resolution: "ts-log@npm:2.2.7" + checksum: c423a5eb54abb9471578902953814d3d0c88b3f237db016998f8998ecf982cb0f748bb8ebf93670eeba9b836ff0ce407d8065a340f3ab218ea7b9442c255b3d4 + languageName: node + linkType: hard + "ts-morph@npm:^13.0.2": version: 13.0.3 resolution: "ts-morph@npm:13.0.3" @@ -44966,13 +50314,20 @@ __metadata: languageName: node linkType: hard -"tslib@npm:^2.8.0": +"tslib@npm:^2.6.2, tslib@npm:^2.6.3, tslib@npm:^2.7.0, tslib@npm:^2.8.0, tslib@npm:^2.8.1": version: 2.8.1 resolution: "tslib@npm:2.8.1" checksum: e4aba30e632b8c8902b47587fd13345e2827fa639e7c3121074d5ee0880723282411a8838f830b55100cbe4517672f84a2472667d355b81e8af165a55dc6203a languageName: node linkType: hard +"tslib@npm:~2.6.0": + version: 2.6.3 + resolution: "tslib@npm:2.6.3" + checksum: 74fce0e100f1ebd95b8995fbbd0e6c91bdd8f4c35c00d4da62e285a3363aaa534de40a80db30ecfd388ed7c313c42d930ee0eaf108e8114214b180eec3dbe6f5 + languageName: node + linkType: hard + "tslog@npm:^4.9.2": version: 4.9.2 resolution: "tslog@npm:4.9.2" @@ -45111,6 +50466,13 @@ __metadata: languageName: node linkType: hard +"tween-functions@npm:^1.2.0": + version: 1.2.0 + resolution: "tween-functions@npm:1.2.0" + checksum: 880708d680eff5c347ddcb9f922ad121703a91c78ce308ed309073e73a794b633eb0b80589a839365803f150515ad34c9646809ae8a0e90f09e62686eefb1ab6 + languageName: node + linkType: hard + "tweetnacl@npm:^0.14.3, tweetnacl@npm:~0.14.0": version: 0.14.5 resolution: "tweetnacl@npm:0.14.5" @@ -45118,6 +50480,25 @@ __metadata: languageName: node linkType: hard +"twemoji-parser@npm:13.1.0": + version: 13.1.0 + resolution: "twemoji-parser@npm:13.1.0" + checksum: 8046ce003c03dd92d68c2648cfbfa39c659fca4f05c10da8d14957985dc3c0c680f3ecf2de8245dc1ddffedc5b2a675f2032053e1e77cc7474301a88fe192ad3 + languageName: node + linkType: hard + +"twemoji@npm:^13.0.1": + version: 13.1.1 + resolution: "twemoji@npm:13.1.1" + dependencies: + fs-extra: ^8.0.1 + jsonfile: ^5.0.0 + twemoji-parser: 13.1.0 + universalify: ^0.1.2 + checksum: f60a8785ad6eb1a673c4f1bccb00a852ead13639db9f763c0e3e9dee6e3e67d88f1d2b481bcee34c35570ab060918b30b6ee68aa65ea1042ad35cd83212a102a + languageName: node + linkType: hard + "twilio@npm:^3.80.1": version: 3.80.1 resolution: "twilio@npm:3.80.1" @@ -45623,6 +51004,15 @@ __metadata: languageName: node linkType: hard +"ua-parser-js@npm:^1.0.33, ua-parser-js@npm:^1.0.35": + version: 1.0.40 + resolution: "ua-parser-js@npm:1.0.40" + bin: + ua-parser-js: script/cli.js + checksum: ae555a33dc9395dd877e295d6adbf5634e047aad7c3358328830218f3ca3a6233e35848cd355465a7612f269860e8029984389282940c7a27c9af4dfcdbba8c3 + languageName: node + linkType: hard + "uc.micro@npm:^1.0.1, uc.micro@npm:^1.0.5": version: 1.0.6 resolution: "uc.micro@npm:1.0.6" @@ -45706,6 +51096,22 @@ __metadata: languageName: node linkType: hard +"unc-path-regex@npm:^0.1.2": + version: 0.1.2 + resolution: "unc-path-regex@npm:0.1.2" + checksum: a05fa2006bf4606051c10fc7968f08ce7b28fa646befafa282813aeb1ac1a56f65cb1b577ca7851af2726198d59475bb49b11776036257b843eaacee2860a4ec + languageName: node + linkType: hard + +"undici@npm:^5.12.0": + version: 5.28.5 + resolution: "undici@npm:5.28.5" + dependencies: + "@fastify/busboy": ^2.0.0 + checksum: a402d699a602a8feee1c0f78267467c8ffcbd7682267fec7a1307fd11554a32976a2307bf1cc8bf6ef7a667654336592fbd66d675df20ce28357536fb55a3a7d + languageName: node + linkType: hard + "undici@npm:^5.28.2": version: 5.28.4 resolution: "undici@npm:5.28.4" @@ -45763,6 +51169,36 @@ __metadata: languageName: node linkType: hard +"unified@npm:^10.0.0": + version: 10.1.2 + resolution: "unified@npm:10.1.2" + dependencies: + "@types/unist": ^2.0.0 + bail: ^2.0.0 + extend: ^3.0.0 + is-buffer: ^2.0.0 + is-plain-obj: ^4.0.0 + trough: ^2.0.0 + vfile: ^5.0.0 + checksum: 053e7c65ede644607f87bd625a299e4b709869d2f76ec8138569e6e886903b6988b21cd9699e471eda42bee189527be0a9dac05936f1d069a5e65d0125d5d756 + languageName: node + linkType: hard + +"unified@npm:^11.0.0": + version: 11.0.5 + resolution: "unified@npm:11.0.5" + dependencies: + "@types/unist": ^3.0.0 + bail: ^2.0.0 + devlop: ^1.0.0 + extend: ^3.0.0 + is-plain-obj: ^4.0.0 + trough: ^2.0.0 + vfile: ^6.0.0 + checksum: b3bf7fd6f568cc261e074dae21188483b0f2a8ab858d62e6e85b75b96cc655f59532906ae3c64d56a9b257408722d71f1d4135292b3d7ee02907c8b592fb3cf0 + languageName: node + linkType: hard + "unique-filename@npm:^2.0.0": version: 2.0.1 resolution: "unique-filename@npm:2.0.1" @@ -45817,6 +51253,22 @@ __metadata: languageName: node linkType: hard +"unist-builder@npm:^3.0.0": + version: 3.0.1 + resolution: "unist-builder@npm:3.0.1" + dependencies: + "@types/unist": ^2.0.0 + checksum: d8c42fe69aa55a3e9aed3c581007ec5371349bf9885bfa8b0b787634f8d12fa5081f066b205ded379b6d0aeaa884039bae9ebb65a3e71784005fb110aef30d0f + languageName: node + linkType: hard + +"unist-util-generated@npm:^2.0.0": + version: 2.0.1 + resolution: "unist-util-generated@npm:2.0.1" + checksum: 6221ad0571dcc9c8964d6b054f39ef6571ed59cc0ce3e88ae97ea1c70afe76b46412a5ffaa91f96814644ac8477e23fb1b477d71f8d70e625728c5258f5c0d99 + languageName: node + linkType: hard + "unist-util-is@npm:^4.0.0": version: 4.1.0 resolution: "unist-util-is@npm:4.1.0" @@ -45824,6 +51276,60 @@ __metadata: languageName: node linkType: hard +"unist-util-is@npm:^5.0.0": + version: 5.2.1 + resolution: "unist-util-is@npm:5.2.1" + dependencies: + "@types/unist": ^2.0.0 + checksum: ae76fdc3d35352cd92f1bedc3a0d407c3b9c42599a52ab9141fe89bdd786b51f0ec5a2ab68b93fb532e239457cae62f7e39eaa80229e1cb94875da2eafcbe5c4 + languageName: node + linkType: hard + +"unist-util-is@npm:^6.0.0": + version: 6.0.0 + resolution: "unist-util-is@npm:6.0.0" + dependencies: + "@types/unist": ^3.0.0 + checksum: f630a925126594af9993b091cf807b86811371e465b5049a6283e08537d3e6ba0f7e248e1e7dab52cfe33f9002606acef093441137181b327f6fe504884b20e2 + languageName: node + linkType: hard + +"unist-util-position@npm:^4.0.0": + version: 4.0.4 + resolution: "unist-util-position@npm:4.0.4" + dependencies: + "@types/unist": ^2.0.0 + checksum: e7487b6cec9365299695e3379ded270a1717074fa11fd2407c9b934fb08db6fe1d9077ddeaf877ecf1813665f8ccded5171693d3d9a7a01a125ec5cdd5e88691 + languageName: node + linkType: hard + +"unist-util-position@npm:^5.0.0": + version: 5.0.0 + resolution: "unist-util-position@npm:5.0.0" + dependencies: + "@types/unist": ^3.0.0 + checksum: f89b27989b19f07878de9579cd8db2aa0194c8360db69e2c99bd2124a480d79c08f04b73a64daf01a8fb3af7cba65ff4b45a0b978ca243226084ad5f5d441dde + languageName: node + linkType: hard + +"unist-util-stringify-position@npm:^3.0.0": + version: 3.0.3 + resolution: "unist-util-stringify-position@npm:3.0.3" + dependencies: + "@types/unist": ^2.0.0 + checksum: dbd66c15183607ca942a2b1b7a9f6a5996f91c0d30cf8966fb88955a02349d9eefd3974e9010ee67e71175d784c5a9fea915b0aa0b0df99dcb921b95c4c9e124 + languageName: node + linkType: hard + +"unist-util-stringify-position@npm:^4.0.0": + version: 4.0.0 + resolution: "unist-util-stringify-position@npm:4.0.0" + dependencies: + "@types/unist": ^3.0.0 + checksum: e2e7aee4b92ddb64d314b4ac89eef7a46e4c829cbd3ee4aee516d100772b490eb6b4974f653ba0717a0071ca6ea0770bf22b0a2ea62c65fcba1d071285e96324 + languageName: node + linkType: hard + "unist-util-visit-parents@npm:^3.0.0": version: 3.1.1 resolution: "unist-util-visit-parents@npm:3.1.1" @@ -45834,6 +51340,26 @@ __metadata: languageName: node linkType: hard +"unist-util-visit-parents@npm:^5.1.1": + version: 5.1.3 + resolution: "unist-util-visit-parents@npm:5.1.3" + dependencies: + "@types/unist": ^2.0.0 + unist-util-is: ^5.0.0 + checksum: 8ecada5978994f846b64658cf13b4092cd78dea39e1ba2f5090a5de842ba4852712c02351a8ae95250c64f864635e7b02aedf3b4a093552bb30cf1bd160efbaa + languageName: node + linkType: hard + +"unist-util-visit-parents@npm:^6.0.0": + version: 6.0.1 + resolution: "unist-util-visit-parents@npm:6.0.1" + dependencies: + "@types/unist": ^3.0.0 + unist-util-is: ^6.0.0 + checksum: 08927647c579f63b91aafcbec9966dc4a7d0af1e5e26fc69f4e3e6a01215084835a2321b06f3cbe7bf7914a852830fc1439f0fc3d7153d8804ac3ef851ddfa20 + languageName: node + linkType: hard + "unist-util-visit@npm:^2.0.0": version: 2.0.3 resolution: "unist-util-visit@npm:2.0.3" @@ -45845,6 +51371,35 @@ __metadata: languageName: node linkType: hard +"unist-util-visit@npm:^4.0.0": + version: 4.1.2 + resolution: "unist-util-visit@npm:4.1.2" + dependencies: + "@types/unist": ^2.0.0 + unist-util-is: ^5.0.0 + unist-util-visit-parents: ^5.1.1 + checksum: 95a34e3f7b5b2d4b68fd722b6229972099eb97b6df18913eda44a5c11df8b1e27efe7206dd7b88c4ed244a48c474a5b2e2629ab79558ff9eb936840295549cee + languageName: node + linkType: hard + +"unist-util-visit@npm:^5.0.0": + version: 5.0.0 + resolution: "unist-util-visit@npm:5.0.0" + dependencies: + "@types/unist": ^3.0.0 + unist-util-is: ^6.0.0 + unist-util-visit-parents: ^6.0.0 + checksum: 9ec42e618e7e5d0202f3c191cd30791b51641285732767ee2e6bcd035931032e3c1b29093f4d7fd0c79175bbc1f26f24f26ee49770d32be76f8730a652a857e6 + languageName: node + linkType: hard + +"universal-base64@npm:^2.1.0": + version: 2.1.0 + resolution: "universal-base64@npm:2.1.0" + checksum: 03bc6f7de04aee83038c26038cd2639f470fd9665f99b3613934c4ccde5d59047d45e34ea4c843ac582da83ea1b050bf8defba8eb390e566f0be314646ddbc9b + languageName: node + linkType: hard + "universal-user-agent@npm:^6.0.0": version: 6.0.1 resolution: "universal-user-agent@npm:6.0.1" @@ -45852,7 +51407,7 @@ __metadata: languageName: node linkType: hard -"universalify@npm:^0.1.0": +"universalify@npm:^0.1.0, universalify@npm:^0.1.2": version: 0.1.2 resolution: "universalify@npm:0.1.2" checksum: 40cdc60f6e61070fe658ca36016a8f4ec216b29bf04a55dce14e3710cc84c7448538ef4dad3728d0bfe29975ccd7bfb5f414c45e7b78883567fb31b246f02dff @@ -45873,6 +51428,15 @@ __metadata: languageName: node linkType: hard +"unixify@npm:^1.0.0": + version: 1.0.0 + resolution: "unixify@npm:1.0.0" + dependencies: + normalize-path: ^2.1.1 + checksum: 3be30e48579fc6c7390bd59b4ab9e745fede0c164dfb7351cf710bd1dbef8484b1441186205af6bcb13b731c0c88caf9b33459f7bf8c89e79c046e656ae433f0 + languageName: node + linkType: hard + "unpipe@npm:1.0.0, unpipe@npm:~1.0.0": version: 1.0.0 resolution: "unpipe@npm:1.0.0" @@ -45953,6 +51517,20 @@ __metadata: languageName: node linkType: hard +"update-browserslist-db@npm:^1.1.1": + version: 1.1.2 + resolution: "update-browserslist-db@npm:1.1.2" + dependencies: + escalade: ^3.2.0 + picocolors: ^1.1.1 + peerDependencies: + browserslist: ">= 4.21.0" + bin: + update-browserslist-db: cli.js + checksum: 088d2bad8ddeaeccd82d87d3f6d736d5256d697b725ffaa2b601dfd0ec16ba5fad20db8dcdccf55396e1a36194236feb69e3f5cce772e5be15a5e4261ff2815d + languageName: node + linkType: hard + "update-input-width@npm:^1.2.2": version: 1.4.2 resolution: "update-input-width@npm:1.4.2" @@ -45980,7 +51558,7 @@ __metadata: languageName: node linkType: hard -"upper-case-first@npm:^1.1.0": +"upper-case-first@npm:^1.1.0, upper-case-first@npm:^1.1.2": version: 1.1.2 resolution: "upper-case-first@npm:1.1.2" dependencies: @@ -45989,13 +51567,31 @@ __metadata: languageName: node linkType: hard -"upper-case@npm:^1.0.3, upper-case@npm:^1.1.0, upper-case@npm:^1.1.1": +"upper-case-first@npm:^2.0.2": + version: 2.0.2 + resolution: "upper-case-first@npm:2.0.2" + dependencies: + tslib: ^2.0.3 + checksum: 4487db4701effe3b54ced4b3e4aa4d9ab06c548f97244d04aafb642eedf96a76d5a03cf5f38f10f415531d5792d1ac6e1b50f2a76984dc6964ad530f12876409 + languageName: node + linkType: hard + +"upper-case@npm:^1.0.3, upper-case@npm:^1.1.0, upper-case@npm:^1.1.1, upper-case@npm:^1.1.3": version: 1.1.3 resolution: "upper-case@npm:1.1.3" checksum: 991c845de75fa56e5ad983f15e58494dd77b77cadd79d273cc11e8da400067e9881ae1a52b312aed79b3d754496e2e0712e08d22eae799e35c7f9ba6f3d8a85d languageName: node linkType: hard +"upper-case@npm:^2.0.2": + version: 2.0.2 + resolution: "upper-case@npm:2.0.2" + dependencies: + tslib: ^2.0.3 + checksum: 508723a2b03ab90cf1d6b7e0397513980fab821cbe79c87341d0e96cedefadf0d85f9d71eac24ab23f526a041d585a575cfca120a9f920e44eb4f8a7cf89121c + languageName: node + linkType: hard + "uri-js@npm:^4.2.2": version: 4.4.1 resolution: "uri-js@npm:4.4.1" @@ -46049,6 +51645,13 @@ __metadata: languageName: node linkType: hard +"urlpattern-polyfill@npm:^10.0.0": + version: 10.0.0 + resolution: "urlpattern-polyfill@npm:10.0.0" + checksum: 61d890f151ea4ecf34a3dcab32c65ad1f3cda857c9d154af198260c6e5b2ad96d024593409baaa6d4428dd1ab206c14799bf37fe011117ac93a6a44913ac5aa4 + languageName: node + linkType: hard + "use-callback-ref@npm:^1.2.3": version: 1.2.5 resolution: "use-callback-ref@npm:1.2.5" @@ -46077,6 +51680,18 @@ __metadata: languageName: node linkType: hard +"use-deep-compare-effect@npm:^1.6.1": + version: 1.8.1 + resolution: "use-deep-compare-effect@npm:1.8.1" + dependencies: + "@babel/runtime": ^7.12.5 + dequal: ^2.0.2 + peerDependencies: + react: ">=16.13" + checksum: 2b9b6291df3f772f44d259b352e5d998963ccee0db2efeb76bb05525d928064aeeb69bb0dee5a5e428fea7cf3db67c097a770ebd30caa080662b565f6ef02b2e + languageName: node + linkType: hard + "use-isomorphic-layout-effect@npm:^1.1.2": version: 1.1.2 resolution: "use-isomorphic-layout-effect@npm:1.1.2" @@ -46138,6 +51753,15 @@ __metadata: languageName: node linkType: hard +"use-sync-external-store@npm:^1.2.0": + version: 1.4.0 + resolution: "use-sync-external-store@npm:1.4.0" + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + checksum: dc3843a1b59ac8bd01417bd79498d4c688d5df8bf4801be50008ef4bfaacb349058c0b1605b5b43c828e0a2d62722d7e861573b3f31cea77a7f23e8b0fc2f7e3 + languageName: node + linkType: hard + "utif@npm:^2.0.1": version: 2.0.1 resolution: "utif@npm:2.0.1" @@ -46217,6 +51841,20 @@ __metadata: languageName: node linkType: hard +"uvu@npm:^0.5.0": + version: 0.5.6 + resolution: "uvu@npm:0.5.6" + dependencies: + dequal: ^2.0.0 + diff: ^5.0.0 + kleur: ^4.0.3 + sade: ^1.7.3 + bin: + uvu: bin.js + checksum: 09460a37975627de9fcad396e5078fb844d01aaf64a6399ebfcfd9e55f1c2037539b47611e8631f89be07656962af0cf48c334993db82b9ae9c3d25ce3862168 + languageName: node + linkType: hard + "v8-compile-cache-lib@npm:^3.0.1": version: 3.0.1 resolution: "v8-compile-cache-lib@npm:3.0.1" @@ -46252,6 +51890,13 @@ __metadata: languageName: node linkType: hard +"value-or-promise@npm:^1.0.11, value-or-promise@npm:^1.0.12": + version: 1.0.12 + resolution: "value-or-promise@npm:1.0.12" + checksum: f53a66c75b7447c90bbaf946a757ca09c094629cb80ba742f59c980ec3a69be0a385a0e75505dedb4e757862f1a994ca4beaf083a831f24d3ffb3d4bb18cd1e1 + languageName: node + linkType: hard + "vary@npm:^1, vary@npm:~1.1.2": version: 1.1.2 resolution: "vary@npm:1.1.2" @@ -46270,6 +51915,58 @@ __metadata: languageName: node linkType: hard +"vfile-location@npm:^4.0.0": + version: 4.1.0 + resolution: "vfile-location@npm:4.1.0" + dependencies: + "@types/unist": ^2.0.0 + vfile: ^5.0.0 + checksum: c894e8e5224170d1f85288f4a1d1ebcee0780823ea2b49d881648ab360ebf01b37ecb09b1c4439a75f9a51f31a9f9742cd045e987763e367c352a1ef7c50d446 + languageName: node + linkType: hard + +"vfile-message@npm:^3.0.0": + version: 3.1.4 + resolution: "vfile-message@npm:3.1.4" + dependencies: + "@types/unist": ^2.0.0 + unist-util-stringify-position: ^3.0.0 + checksum: d0ee7da1973ad76513c274e7912adbed4d08d180eaa34e6bd40bc82459f4b7bc50fcaff41556135e3339995575eac5f6f709aba9332b80f775618ea4880a1367 + languageName: node + linkType: hard + +"vfile-message@npm:^4.0.0": + version: 4.0.2 + resolution: "vfile-message@npm:4.0.2" + dependencies: + "@types/unist": ^3.0.0 + unist-util-stringify-position: ^4.0.0 + checksum: 964e7e119f4c0e0270fc269119c41c96da20afa01acb7c9809a88365c8e0c64aa692fafbd952669382b978002ecd7ad31ef4446d85e8a22cdb62f6df20186c2d + languageName: node + linkType: hard + +"vfile@npm:^5.0.0": + version: 5.3.7 + resolution: "vfile@npm:5.3.7" + dependencies: + "@types/unist": ^2.0.0 + is-buffer: ^2.0.0 + unist-util-stringify-position: ^3.0.0 + vfile-message: ^3.0.0 + checksum: 642cce703afc186dbe7cabf698dc954c70146e853491086f5da39e1ce850676fc96b169fcf7898aa3ff245e9313aeec40da93acd1e1fcc0c146dc4f6308b4ef9 + languageName: node + linkType: hard + +"vfile@npm:^6.0.0": + version: 6.0.3 + resolution: "vfile@npm:6.0.3" + dependencies: + "@types/unist": ^3.0.0 + vfile-message: ^4.0.0 + checksum: 152b6729be1af70df723efb65c1a1170fd483d41086557da3651eea69a1dd1f0c22ea4344834d56d30734b9185bcab63e22edc81d3f0e9bed8aa4660d61080af + languageName: node + linkType: hard + "victory-vendor@npm:^36.6.8": version: 36.9.2 resolution: "victory-vendor@npm:36.9.2" @@ -46726,6 +52423,21 @@ __metadata: languageName: node linkType: hard +"wait-on@npm:^7.0.1": + version: 7.2.0 + resolution: "wait-on@npm:7.2.0" + dependencies: + axios: ^1.6.1 + joi: ^17.11.0 + lodash: ^4.17.21 + minimist: ^1.2.8 + rxjs: ^7.8.1 + bin: + wait-on: bin/wait-on + checksum: 69ec1432bb4479363fdd71f2f3f501a98aa356a562781108a4a89ef8fdf1e3d5fd0c2fd56c4cc5902abbb662065f1f22d4e436a1e6fc9331ce8b575eb023325e + languageName: node + linkType: hard + "walker@npm:^1.0.8": version: 1.0.8 resolution: "walker@npm:1.0.8" @@ -46735,6 +52447,15 @@ __metadata: languageName: node linkType: hard +"warning@npm:^4.0.3": + version: 4.0.3 + resolution: "warning@npm:4.0.3" + dependencies: + loose-envify: ^1.0.0 + checksum: 4f2cb6a9575e4faf71ddad9ad1ae7a00d0a75d24521c193fa464f30e6b04027bd97aa5d9546b0e13d3a150ab402eda216d59c1d0f2d6ca60124d96cd40dfa35c + languageName: node + linkType: hard + "watchpack@npm:2.4.0": version: 2.4.0 resolution: "watchpack@npm:2.4.0" @@ -46771,6 +52492,13 @@ __metadata: languageName: node linkType: hard +"web-namespaces@npm:^2.0.0": + version: 2.0.1 + resolution: "web-namespaces@npm:2.0.1" + checksum: b6d9f02f1a43d0ef0848a812d89c83801d5bbad57d8bb61f02eb6d7eb794c3736f6cc2e1191664bb26136594c8218ac609f4069722c6f56d9fc2d808fa9271c6 + languageName: node + linkType: hard + "web-push@npm:^3.6.7": version: 3.6.7 resolution: "web-push@npm:3.6.7" @@ -46793,7 +52521,14 @@ __metadata: languageName: node linkType: hard -"web-streams-polyfill@npm:^3.0.3": +"web-streams-polyfill@npm:4.0.0-beta.3": + version: 4.0.0-beta.3 + resolution: "web-streams-polyfill@npm:4.0.0-beta.3" + checksum: dfec1fbf52b9140e4183a941e380487b6c3d5d3838dd1259be81506c1c9f2abfcf5aeb670aeeecfd9dff4271a6d8fef931b193c7bedfb42542a3b05ff36c0d16 + languageName: node + linkType: hard + +"web-streams-polyfill@npm:^3.0.3, web-streams-polyfill@npm:^3.2.0": version: 3.3.3 resolution: "web-streams-polyfill@npm:3.3.3" checksum: 21ab5ea08a730a2ef8023736afe16713b4f2023ec1c7085c16c8e293ee17ed085dff63a0ad8722da30c99c4ccbd4ccd1b2e79c861829f7ef2963d7de7004c2cb @@ -46807,6 +52542,19 @@ __metadata: languageName: node linkType: hard +"webcrypto-core@npm:^1.8.0": + version: 1.8.1 + resolution: "webcrypto-core@npm:1.8.1" + dependencies: + "@peculiar/asn1-schema": ^2.3.13 + "@peculiar/json-schema": ^1.1.12 + asn1js: ^3.0.5 + pvtsutils: ^1.3.5 + tslib: ^2.7.0 + checksum: 5f8d862991bf9b36bfec53a317ceec7de95010c6d16092d2ba62b988acdfca9adfd254ef388036e610c66d0aad506d3f344574f62e06501a8c72ef961c8996b2 + languageName: node + linkType: hard + "webidl-conversions@npm:^3.0.0": version: 3.0.1 resolution: "webidl-conversions@npm:3.0.1" @@ -47147,6 +52895,13 @@ __metadata: languageName: node linkType: hard +"which-module@npm:^1.0.0": + version: 1.0.0 + resolution: "which-module@npm:1.0.0" + checksum: 98434f7deb36350cb543c1f15612188541737e1f12d39b23b1c371dff5cf4aa4746210f2bdec202d5fe9da8682adaf8e3f7c44c520687d30948cfc59d5534edb + languageName: node + linkType: hard + "which-module@npm:^2.0.0": version: 2.0.1 resolution: "which-module@npm:2.0.1" @@ -47283,6 +53038,15 @@ __metadata: languageName: node linkType: hard +"window-size@npm:^0.2.0": + version: 0.2.0 + resolution: "window-size@npm:0.2.0" + bin: + window-size: cli.js + checksum: a85e2acf156cfa194301294809867bdadd8a48ee5d972d9fa8e3e1b3420a1d0201b13ac8eb0348a0d14bbf2c3316565b6a749749c2384c5d286caf8a064c4f90 + languageName: node + linkType: hard + "windows-release@npm:^5.0.1": version: 5.1.1 resolution: "windows-release@npm:5.1.1" @@ -47365,6 +53129,16 @@ __metadata: languageName: node linkType: hard +"wrap-ansi@npm:^2.0.0": + version: 2.1.0 + resolution: "wrap-ansi@npm:2.1.0" + dependencies: + string-width: ^1.0.1 + strip-ansi: ^3.0.1 + checksum: 2dacd4b3636f7a53ee13d4d0fe7fa2ed9ad81e9967e17231924ea88a286ec4619a78288de8d41881ee483f4449ab2c0287cde8154ba1bd0126c10271101b2ee3 + languageName: node + linkType: hard + "wrap-ansi@npm:^6.0.1, wrap-ansi@npm:^6.2.0": version: 6.2.0 resolution: "wrap-ansi@npm:6.2.0" @@ -47466,7 +53240,7 @@ __metadata: languageName: node linkType: hard -"ws@npm:^8.18.0": +"ws@npm:^8.17.1, ws@npm:^8.18.0": version: 8.18.0 resolution: "ws@npm:8.18.0" peerDependencies: @@ -47563,7 +53337,7 @@ __metadata: languageName: node linkType: hard -"xml2js@npm:0.6.2, xml2js@npm:^0.6.2": +"xml2js@npm:0.6.2, xml2js@npm:^0.6.0, xml2js@npm:^0.6.2": version: 0.6.2 resolution: "xml2js@npm:0.6.2" dependencies: @@ -47682,6 +53456,13 @@ __metadata: languageName: node linkType: hard +"y18n@npm:^3.2.1": + version: 3.2.2 + resolution: "y18n@npm:3.2.2" + checksum: 6154fd7544f8bbf5b18cdf77692ed88d389be49c87238ecb4e0d6a5276446cd2a5c29cc4bdbdddfc7e4e498b08df9d7e38df4a1453cf75eecfead392246ea74a + languageName: node + linkType: hard + "y18n@npm:^4.0.0": version: 4.0.3 resolution: "y18n@npm:4.0.3" @@ -47717,6 +53498,13 @@ __metadata: languageName: node linkType: hard +"yaml-ast-parser@npm:^0.0.43": + version: 0.0.43 + resolution: "yaml-ast-parser@npm:0.0.43" + checksum: fb5df4c067b6ccbd00953a46faf6ff27f0e290d623c712dc41f330251118f110e22cfd184bbff498bd969cbcda3cd27e0f9d0adb9e6d90eb60ccafc0d8e28077 + languageName: node + linkType: hard + "yaml@npm:2.0.0-1": version: 2.0.0-1 resolution: "yaml@npm:2.0.0-1" @@ -47738,7 +53526,7 @@ __metadata: languageName: node linkType: hard -"yaml@npm:^2.3.4": +"yaml@npm:^2.3.1, yaml@npm:^2.3.4": version: 2.7.0 resolution: "yaml@npm:2.7.0" bin: @@ -47771,6 +53559,16 @@ __metadata: languageName: node linkType: hard +"yargs-parser@npm:^3.2.0": + version: 3.2.0 + resolution: "yargs-parser@npm:3.2.0" + dependencies: + camelcase: ^3.0.0 + lodash.assign: ^4.1.0 + checksum: d86fd69816a28a617f4cad21f7bfe7f7c931b16d063c73449cd914db409b8d5981a0f29f9e2a05014a7229164aa47336adf5a8856fa9870ab892346d29138e9a + languageName: node + linkType: hard + "yargs@npm:^15.1.0, yargs@npm:^15.3.1": version: 15.4.1 resolution: "yargs@npm:15.4.1" @@ -47805,7 +53603,7 @@ __metadata: languageName: node linkType: hard -"yargs@npm:^17.3.1, yargs@npm:^17.6.2, yargs@npm:^17.7.1, yargs@npm:^17.7.2": +"yargs@npm:^17.0.0, yargs@npm:^17.3.1, yargs@npm:^17.6.2, yargs@npm:^17.7.1, yargs@npm:^17.7.2": version: 17.7.2 resolution: "yargs@npm:17.7.2" dependencies: @@ -47820,6 +53618,28 @@ __metadata: languageName: node linkType: hard +"yargs@npm:^5.0.0": + version: 5.0.0 + resolution: "yargs@npm:5.0.0" + dependencies: + cliui: ^3.2.0 + decamelize: ^1.1.1 + get-caller-file: ^1.0.1 + lodash.assign: ^4.2.0 + os-locale: ^1.4.0 + read-pkg-up: ^1.0.1 + require-directory: ^2.1.1 + require-main-filename: ^1.0.1 + set-blocking: ^2.0.0 + string-width: ^1.0.2 + which-module: ^1.0.0 + window-size: ^0.2.0 + y18n: ^3.2.1 + yargs-parser: ^3.2.0 + checksum: 478e9c8562c5cf5b9c2efc7c917e0b00c489cc50153d5d911ab68767c2cfddaf0b5bd4e04d6fefc00cb1d8f6263eab1d73df79a24d650ba95f5d45c819a1585a + languageName: node + linkType: hard + "yarn@npm:^1.22.18": version: 1.22.19 resolution: "yarn@npm:1.22.19" @@ -48013,3 +53833,10 @@ __metadata: checksum: 160052a7faaefbaad1071e890a06e5d7a04f6ff6985def30a7b4471f4ddbdd1d30bb05b3688a2777cd0b717d1f0d98dad24883a5caa3deeb3afb4d83b6dabc55 languageName: node linkType: hard + +"zwitch@npm:^2.0.0, zwitch@npm:^2.0.4": + version: 2.0.4 + resolution: "zwitch@npm:2.0.4" + checksum: f22ec5fc2d5f02c423c93d35cdfa83573a3a3bd98c66b927c368ea4d0e7252a500df2a90a6b45522be536a96a73404393c958e945fdba95e6832c200791702b6 + languageName: node + linkType: hard