diff --git a/apps/api/v2/package.json b/apps/api/v2/package.json index e920a5e21c..2ab92e5169 100644 --- a/apps/api/v2/package.json +++ b/apps/api/v2/package.json @@ -28,7 +28,7 @@ "dependencies": { "@calcom/platform-constants": "*", "@calcom/platform-enums": "*", - "@calcom/platform-libraries": "npm:@calcom/platform-libraries@0.0.46", + "@calcom/platform-libraries": "npm:@calcom/platform-libraries@0.0.47", "@calcom/platform-libraries-0.0.2": "npm:@calcom/platform-libraries@0.0.2", "@calcom/platform-types": "*", "@calcom/platform-utils": "*", diff --git a/apps/api/v2/src/ee/bookings/2024-08-13/controllers/user-bookings.controller.e2e-spec.ts b/apps/api/v2/src/ee/bookings/2024-08-13/controllers/user-bookings.controller.e2e-spec.ts index d1bf1082ef..66611391e6 100644 --- a/apps/api/v2/src/ee/bookings/2024-08-13/controllers/user-bookings.controller.e2e-spec.ts +++ b/apps/api/v2/src/ee/bookings/2024-08-13/controllers/user-bookings.controller.e2e-spec.ts @@ -662,7 +662,6 @@ describe("Bookings Endpoints 2024-08-13", () => { expect(responseBody.data).toBeDefined(); const data: (BookingOutput_2024_08_13 | RecurringBookingOutput_2024_08_13)[] = responseBody.data; expect(data.length).toEqual(2); - console.log("asap data", JSON.stringify(data, null, 2)); expect(data[0].start).toEqual(createdBooking.start); expect(data[1].start).toEqual(bookingInThePast.startTime.toISOString()); }); diff --git a/apps/api/v2/src/ee/event-types/event-types_2024_06_14/controllers/event-types.controller.e2e-spec.ts b/apps/api/v2/src/ee/event-types/event-types_2024_06_14/controllers/event-types.controller.e2e-spec.ts index b55123bb0f..edadded6c8 100644 --- a/apps/api/v2/src/ee/event-types/event-types_2024_06_14/controllers/event-types.controller.e2e-spec.ts +++ b/apps/api/v2/src/ee/event-types/event-types_2024_06_14/controllers/event-types.controller.e2e-spec.ts @@ -31,6 +31,7 @@ import { ApiSuccessResponse, CreateEventTypeInput_2024_06_14, EventTypeOutput_2024_06_14, + NameFieldInput_2024_06_14, UpdateEventTypeInput_2024_06_14, } from "@calcom/platform-types"; import { SchedulingType } from "@calcom/prisma/enums"; @@ -199,6 +200,13 @@ describe("Event types Endpoints", () => { }); it("should create an event type", async () => { + const nameBookingField: NameFieldInput_2024_06_14 = { + type: "name", + label: "Your name sir / madam", + placeholder: "john doe", + disableOnPrefill: false, + }; + const body: CreateEventTypeInput_2024_06_14 = { title: "Coding class", slug: "coding-class", @@ -211,6 +219,7 @@ describe("Event types Endpoints", () => { }, ], bookingFields: [ + nameBookingField, { type: "select", label: "select which language you want to learn", @@ -218,6 +227,7 @@ describe("Event types Endpoints", () => { required: true, placeholder: "select language", options: ["javascript", "python", "cobol"], + disableOnPrefill: true, }, ], scheduleId: firstSchedule.id, @@ -304,12 +314,14 @@ describe("Event types Endpoints", () => { ); expect(createdEventType.color).toEqual(body.color); - const responseBookingFields = body.bookingFields || []; + const requestBookingFields = body.bookingFields || []; const expectedBookingFields = [ - { isDefault: true, required: true, slug: "name", type: "name" }, + { isDefault: true, required: true, slug: "name", ...nameBookingField }, { isDefault: true, required: true, slug: "email", type: "email" }, { isDefault: true, required: false, slug: "rescheduleReason", type: "textarea" }, - ...responseBookingFields.map((field) => ({ isDefault: false, ...field })), + ...requestBookingFields + .filter((field) => field.type !== "name" && field.type !== "email") + .map((field) => ({ isDefault: false, ...field })), ]; expect(createdEventType.bookingFields).toEqual(expectedBookingFields); @@ -630,11 +642,30 @@ describe("Event types Endpoints", () => { }); it("should update event type", async () => { + const nameBookingField: NameFieldInput_2024_06_14 = { + type: "name", + label: "Your name sir / madam", + placeholder: "john doe", + disableOnPrefill: true, + }; + const newTitle = "Coding class in Italian!"; const body: UpdateEventTypeInput_2024_06_14 = { title: newTitle, scheduleId: secondSchedule.id, + bookingFields: [ + nameBookingField, + { + type: "select", + label: "select which language you want to learn", + slug: "select-language", + required: true, + placeholder: "select language", + options: ["javascript", "python", "cobol"], + disableOnPrefill: false, + }, + ], bookingLimitsCount: { day: 4, week: 10, @@ -694,7 +725,19 @@ describe("Event types Endpoints", () => { expect(updatedEventType.description).toEqual(eventType.description); expect(updatedEventType.lengthInMinutes).toEqual(eventType.lengthInMinutes); expect(updatedEventType.locations).toEqual(eventType.locations); - expect(updatedEventType.bookingFields).toEqual(eventType.bookingFields); + + const requestBookingFields = body.bookingFields || []; + const expectedBookingFields = [ + { isDefault: true, required: true, slug: "name", ...nameBookingField }, + { isDefault: true, required: true, slug: "email", type: "email" }, + { isDefault: true, required: false, slug: "rescheduleReason", type: "textarea" }, + ...requestBookingFields + .filter((field) => field.type !== "name" && field.type !== "email") + .map((field) => ({ isDefault: false, ...field })), + ]; + + expect(updatedEventType.bookingFields).toEqual(expectedBookingFields); + expect(updatedEventType.ownerId).toEqual(user.id); expect(updatedEventType.scheduleId).toEqual(secondSchedule.id); expect(updatedEventType.bookingLimitsCount).toEqual(body.bookingLimitsCount); @@ -732,6 +775,7 @@ describe("Event types Endpoints", () => { eventType.hideCalendarEventDetails = updatedEventType.hideCalendarEventDetails; eventType.lockTimeZoneToggleOnBookingPage = updatedEventType.lockTimeZoneToggleOnBookingPage; eventType.color = updatedEventType.color; + eventType.bookingFields = updatedEventType.bookingFields; }); }); diff --git a/apps/api/v2/src/ee/event-types/event-types_2024_06_14/services/input-event-types.service.ts b/apps/api/v2/src/ee/event-types/event-types_2024_06_14/services/input-event-types.service.ts index 6580dd94e0..9dbc59ff25 100644 --- a/apps/api/v2/src/ee/event-types/event-types_2024_06_14/services/input-event-types.service.ts +++ b/apps/api/v2/src/ee/event-types/event-types_2024_06_14/services/input-event-types.service.ts @@ -20,6 +20,8 @@ import { transformEventColorsApiToInternal, validateCustomEventName, transformSeatsApiToInternal, + SystemField, + CustomField, } from "@calcom/platform-libraries"; import { CreateEventTypeInput_2024_06_14, @@ -211,16 +213,27 @@ export class InputEventTypesService_2024_06_14 { inputBookingFields: CreateEventTypeInput_2024_06_14["bookingFields"], hasMultipleLocations: boolean ) { - const defaultFieldsBefore = [systemBeforeFieldName, systemBeforeFieldEmail]; + const customFields: (SystemField | CustomField)[] = inputBookingFields + ? transformBookingFieldsApiToInternal(inputBookingFields) + : []; + const customFieldsWithoutNameEmail = customFields.filter( + (field) => field.type !== "name" && field.type !== "email" + ); + const customNameField = customFields?.find((field) => field.type === "name"); + const customEmailField = customFields?.find((field) => field.type === "email"); + + const defaultFieldsBefore: (SystemField | CustomField)[] = [ + customNameField || systemBeforeFieldName, + customEmailField || systemBeforeFieldEmail, + ]; // note(Lauris): if event type has multiple locations then a radio button booking field has to be displayed to allow booker to pick location if (hasMultipleLocations) { defaultFieldsBefore.push(systemBeforeFieldLocation); } - const customFields = transformBookingFieldsApiToInternal(inputBookingFields); const defaultFieldsAfter = [systemAfterFieldRescheduleReason]; - return [...defaultFieldsBefore, ...customFields, ...defaultFieldsAfter]; + return [...defaultFieldsBefore, ...customFieldsWithoutNameEmail, ...defaultFieldsAfter]; } transformInputIntervalLimits(inputBookingFields: CreateEventTypeInput_2024_06_14["bookingLimitsCount"]) { diff --git a/apps/api/v2/swagger/documentation.json b/apps/api/v2/swagger/documentation.json index 062e80206d..2ae76dea1b 100644 --- a/apps/api/v2/swagger/documentation.json +++ b/apps/api/v2/swagger/documentation.json @@ -5977,6 +5977,10 @@ }, "placeholder": { "type": "string" + }, + "disableOnPrefill": { + "type": "boolean", + "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 the slug is `phone` and the URL contains query parameter `&phone=1234567890`, the phone field will be prefilled with this value and disabled." } }, "required": [ @@ -6010,6 +6014,10 @@ "placeholder": { "type": "string", "example": "e.g., 1234 Main St" + }, + "disableOnPrefill": { + "type": "boolean", + "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 the slug is `address` and the URL contains query parameter `&address=1234 Main St, London`, the address field will be prefilled with this value and disabled." } }, "required": [ @@ -6043,6 +6051,10 @@ "placeholder": { "type": "string", "example": "e.g., Enter text here" + }, + "disableOnPrefill": { + "type": "boolean", + "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 the slug is `who-referred-you` and the URL contains query parameter `&who-referred-you=bob`, the text field will be prefilled with this value and disabled." } }, "required": [ @@ -6076,6 +6088,10 @@ "placeholder": { "type": "string", "example": "e.g., 100" + }, + "disableOnPrefill": { + "type": "boolean", + "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 the slug is `calories-per-day` and the URL contains query parameter `&calories-per-day=3000`, the number field will be prefilled with this value and disabled." } }, "required": [ @@ -6109,6 +6125,10 @@ "placeholder": { "type": "string", "example": "e.g., Detailed description here..." + }, + "disableOnPrefill": { + "type": "boolean", + "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 the slug is `dear-diary` and the URL contains query parameter `&dear-diary=Today I shipped a feature`, the text area will be prefilled with this value and disabled." } }, "required": [ @@ -6152,6 +6172,10 @@ "items": { "type": "string" } + }, + "disableOnPrefill": { + "type": "boolean", + "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 the slug is `language` and options of this select field are ['english', 'italian'] and the URL contains query parameter `&language=italian`, the 'italian' will be selected and the select field will be disabled." } }, "required": [ @@ -6192,6 +6216,10 @@ "items": { "type": "string" } + }, + "disableOnPrefill": { + "type": "boolean", + "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 the slug is `consultants` and the URL contains query parameter `&consultants=en&language=it`, the 'en' and 'it' will be selected and the select field will be disabled." } }, "required": [ @@ -6225,6 +6253,10 @@ "placeholder": { "type": "string", "example": "e.g., example@example.com" + }, + "disableOnPrefill": { + "type": "boolean", + "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 the slug is `consultants` and the URL contains query parameter `&consultants=alice@gmail.com&consultants=bob@gmail.com`, the these emails will be added and none more can be added." } }, "required": [ @@ -6264,6 +6296,10 @@ "items": { "type": "string" } + }, + "disableOnPrefill": { + "type": "boolean", + "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 the slug is `notify-me` and the URL contains query parameter `¬ify-me=true`, the checkbox will be selected and the checkbox field will be disabled." } }, "required": [ @@ -6303,6 +6339,10 @@ "items": { "type": "string" } + }, + "disableOnPrefill": { + "type": "boolean", + "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 the slug is `language` and options of this select field are ['english', 'italian'] and the URL contains query parameter `&language=italian`, the 'italian' radio buttom will be selected and the select field will be disabled." } }, "required": [ @@ -6332,6 +6372,9 @@ }, "required": { "type": "boolean" + }, + "disableOnPrefill": { + "type": "boolean" } }, "required": [ @@ -6875,6 +6918,37 @@ "EmailDefaultFieldOutput_2024_06_14": { "type": "object", "properties": { + "type": { + "type": "string", + "enum": [ + "name", + "email", + "phone", + "address", + "text", + "number", + "textarea", + "select", + "multiselect", + "multiemail", + "checkbox", + "radio", + "boolean" + ], + "example": "email", + "description": "only allowed value for type is `email`", + "default": "email" + }, + "label": { + "type": "string" + }, + "placeholder": { + "type": "string" + }, + "disableOnPrefill": { + "type": "boolean", + "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." + }, "isDefault": { "type": "object", "default": true, @@ -6885,24 +6959,51 @@ "type": "string", "default": "email" }, - "type": { - "type": "string", - "default": "email" - }, "required": { "type": "boolean" } }, "required": [ + "type", "isDefault", "slug", - "type", "required" ] }, "NameDefaultFieldOutput_2024_06_14": { "type": "object", "properties": { + "type": { + "type": "string", + "enum": [ + "name", + "email", + "phone", + "address", + "text", + "number", + "textarea", + "select", + "multiselect", + "multiemail", + "checkbox", + "radio", + "boolean" + ], + "example": "name", + "description": "only allowed value for type is `name`", + "default": "name" + }, + "label": { + "type": "string" + }, + "placeholder": { + "type": "string" + }, + "disableOnPrefill": { + "type": "boolean", + "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." + }, "isDefault": { "type": "object", "default": true, @@ -6913,18 +7014,14 @@ "type": "string", "default": "name" }, - "type": { - "type": "string", - "default": "name" - }, "required": { "type": "boolean" } }, "required": [ + "type", "isDefault", "slug", - "type", "required" ] }, @@ -7074,6 +7171,8 @@ "type": { "type": "string", "enum": [ + "name", + "email", "phone", "address", "text", @@ -7105,6 +7204,10 @@ "type": "string", "example": "e.g., 1234 Main St" }, + "disableOnPrefill": { + "type": "boolean", + "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 the slug is `address` and the URL contains query parameter `&address=1234 Main St, London`, the address field will be prefilled with this value and disabled." + }, "isDefault": { "type": "object", "default": false, @@ -7126,6 +7229,8 @@ "type": { "type": "string", "enum": [ + "name", + "email", "phone", "address", "text", @@ -7153,6 +7258,9 @@ "required": { "type": "boolean" }, + "disableOnPrefill": { + "type": "boolean" + }, "isDefault": { "type": "object", "default": false, @@ -7174,6 +7282,8 @@ "type": { "type": "string", "enum": [ + "name", + "email", "phone", "address", "text", @@ -7211,6 +7321,10 @@ "type": "string" } }, + "disableOnPrefill": { + "type": "boolean", + "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 the slug is `notify-me` and the URL contains query parameter `¬ify-me=true`, the checkbox will be selected and the checkbox field will be disabled." + }, "isDefault": { "type": "object", "default": false, @@ -7233,6 +7347,8 @@ "type": { "type": "string", "enum": [ + "name", + "email", "phone", "address", "text", @@ -7264,6 +7380,10 @@ "type": "string", "example": "e.g., example@example.com" }, + "disableOnPrefill": { + "type": "boolean", + "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 the slug is `consultants` and the URL contains query parameter `&consultants=alice@gmail.com&consultants=bob@gmail.com`, the these emails will be added and none more can be added." + }, "isDefault": { "type": "object", "default": false, @@ -7285,6 +7405,8 @@ "type": { "type": "string", "enum": [ + "name", + "email", "phone", "address", "text", @@ -7322,6 +7444,10 @@ "type": "string" } }, + "disableOnPrefill": { + "type": "boolean", + "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 the slug is `consultants` and the URL contains query parameter `&consultants=en&language=it`, the 'en' and 'it' will be selected and the select field will be disabled." + }, "isDefault": { "type": "object", "default": false, @@ -7344,6 +7470,8 @@ "type": { "type": "string", "enum": [ + "name", + "email", "phone", "address", "text", @@ -7375,6 +7503,10 @@ "type": "string", "example": "e.g., 100" }, + "disableOnPrefill": { + "type": "boolean", + "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 the slug is `calories-per-day` and the URL contains query parameter `&calories-per-day=3000`, the number field will be prefilled with this value and disabled." + }, "isDefault": { "type": "object", "default": false, @@ -7396,6 +7528,8 @@ "type": { "type": "string", "enum": [ + "name", + "email", "phone", "address", "text", @@ -7425,6 +7559,10 @@ "placeholder": { "type": "string" }, + "disableOnPrefill": { + "type": "boolean", + "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 the slug is `phone` and the URL contains query parameter `&phone=1234567890`, the phone field will be prefilled with this value and disabled." + }, "isDefault": { "type": "object", "default": false, @@ -7446,6 +7584,8 @@ "type": { "type": "string", "enum": [ + "name", + "email", "phone", "address", "text", @@ -7483,6 +7623,10 @@ "type": "string" } }, + "disableOnPrefill": { + "type": "boolean", + "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 the slug is `language` and options of this select field are ['english', 'italian'] and the URL contains query parameter `&language=italian`, the 'italian' radio buttom will be selected and the select field will be disabled." + }, "isDefault": { "type": "object", "default": false, @@ -7505,6 +7649,8 @@ "type": { "type": "string", "enum": [ + "name", + "email", "phone", "address", "text", @@ -7546,6 +7692,10 @@ "type": "string" } }, + "disableOnPrefill": { + "type": "boolean", + "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 the slug is `language` and options of this select field are ['english', 'italian'] and the URL contains query parameter `&language=italian`, the 'italian' will be selected and the select field will be disabled." + }, "isDefault": { "type": "object", "default": false, @@ -7568,6 +7718,8 @@ "type": { "type": "string", "enum": [ + "name", + "email", "phone", "address", "text", @@ -7599,6 +7751,10 @@ "type": "string", "example": "e.g., Detailed description here..." }, + "disableOnPrefill": { + "type": "boolean", + "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 the slug is `dear-diary` and the URL contains query parameter `&dear-diary=Today I shipped a feature`, the text area will be prefilled with this value and disabled." + }, "isDefault": { "type": "object", "default": false, @@ -7620,6 +7776,8 @@ "type": { "type": "string", "enum": [ + "name", + "email", "phone", "address", "text", @@ -7651,6 +7809,10 @@ "type": "string", "example": "e.g., Enter text here" }, + "disableOnPrefill": { + "type": "boolean", + "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 the slug is `who-referred-you` and the URL contains query parameter `&who-referred-you=bob`, the text field will be prefilled with this value and disabled." + }, "isDefault": { "type": "object", "default": false, diff --git a/packages/lib/event-types/transformers/api-to-internal/api-to-internal.spec.ts b/packages/lib/event-types/transformers/api-to-internal/api-to-internal.spec.ts index 71240c9950..2e917d88b2 100644 --- a/packages/lib/event-types/transformers/api-to-internal/api-to-internal.spec.ts +++ b/packages/lib/event-types/transformers/api-to-internal/api-to-internal.spec.ts @@ -21,7 +21,12 @@ import type { SeatOptionsDisabledSchema, } from "@calcom/platform-types"; -import type { CustomField } from "../internal-to-api/booking-fields"; +import { + systemBeforeFieldEmail, + systemBeforeFieldName, + type CustomField, + type SystemField, +} from "../internal-to-api/booking-fields"; import { transformLocationsApiToInternal, transformBookingFieldsApiToInternal, @@ -105,6 +110,59 @@ describe("transformLocationsApiToInternal", () => { }); describe("transformBookingFieldsApiToInternal", () => { + it("should transform name field", () => { + const bookingField: InputBookingField_2024_06_14 = { + type: "name", + label: "Your name number", + placeholder: "123456789", + disableOnPrefill: true, + }; + const input: InputBookingField_2024_06_14[] = [bookingField]; + + const expectedField = { + ...systemBeforeFieldName, + label: "Your name number", + placeholder: "123456789", + disableOnPrefill: true, + }; + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + expectedField.variantsConfig.variants.fullName.fields[0].label = "Your name number"; + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + expectedField.variantsConfig.variants.fullName.fields[0].placeholder = "123456789"; + + const expectedOutput: SystemField[] = [expectedField]; + + const result = transformBookingFieldsApiToInternal(input); + + expect(result).toEqual(expectedOutput); + }); + + it("should transform email field", () => { + const bookingField: InputBookingField_2024_06_14 = { + type: "email", + label: "Your email", + placeholder: "bob@gmail.com", + disableOnPrefill: true, + }; + + const input: InputBookingField_2024_06_14[] = [bookingField]; + + const expectedOutput: SystemField[] = [ + { + ...systemBeforeFieldEmail, + label: "Your email", + placeholder: "bob@gmail.com", + disableOnPrefill: true, + }, + ]; + + const result = transformBookingFieldsApiToInternal(input); + + expect(result).toEqual(expectedOutput); + }); + it("should transform phone field", () => { const bookingField: InputBookingField_2024_06_14 = { type: "phone", @@ -470,6 +528,44 @@ describe("transformBookingFieldsApiToInternal", () => { const input: InputBookingField_2024_06_14[] = [bookingField]; + const expectedOutput: CustomField[] = [ + { + name: bookingField.slug, + type: bookingField.type, + label: bookingField.label, + labelAsSafeHtml: `

${bookingField.label}

\n`, + sources: [ + { + id: "user", + type: "user", + label: "User", + fieldRequired: true, + }, + ], + editable: "user", + required: bookingField.required, + }, + ]; + + const result = transformBookingFieldsApiToInternal(input); + + expect(result).toEqual(expectedOutput); + }); + + it("should keep disableOnPrefill property", () => { + const disableOnPrefill = true; + + const bookingField: InputBookingField_2024_06_14 = { + type: "radio", + slug: "radio", + label: "Your radio buttons", + required: true, + options: ["Radio 1", "Radio 2"], + disableOnPrefill, + }; + + const input: InputBookingField_2024_06_14[] = [bookingField]; + const expectedOutput: CustomField[] = [ { name: bookingField.slug, @@ -486,6 +582,8 @@ describe("transformBookingFieldsApiToInternal", () => { editable: "user", required: bookingField.required, placeholder: "", + options: transformSelectOptionsApiToInternal(bookingField.options), + disableOnPrefill, }, ]; diff --git a/packages/lib/event-types/transformers/api-to-internal/booking-fields.ts b/packages/lib/event-types/transformers/api-to-internal/booking-fields.ts index 09a29ae37e..bad9f4407a 100644 --- a/packages/lib/event-types/transformers/api-to-internal/booking-fields.ts +++ b/packages/lib/event-types/transformers/api-to-internal/booking-fields.ts @@ -1,19 +1,70 @@ -import { type CreateEventTypeInput_2024_06_14 } from "@calcom/platform-types"; +import type { InputBookingField_2024_06_14 } from "@calcom/platform-types"; -import type { CustomField } from "../internal-to-api"; +import { + systemBeforeFieldEmail, + systemBeforeFieldName, + type CustomField, + type SystemField, +} from "../internal-to-api"; export function transformBookingFieldsApiToInternal( - inputBookingFields: CreateEventTypeInput_2024_06_14["bookingFields"] -) { - if (!inputBookingFields) { - return []; + inputBookingFields: InputBookingField_2024_06_14[] +): (SystemField | CustomField)[] { + const customBookingFields = inputBookingFields.map((field) => { + const baseProperties = getBaseProperties(field); + + const options = + "options" in field && field.options ? transformSelectOptionsApiToInternal(field.options) : undefined; + + if (!options) { + return baseProperties; + } + + return { + ...baseProperties, + options, + }; + }); + + return customBookingFields; +} + +function getBaseProperties(field: InputBookingField_2024_06_14): SystemField | CustomField { + if (field.type === "name") { + const systemName = { ...systemBeforeFieldName }; + if (systemName.variantsConfig?.variants?.fullName?.fields?.[0]) { + systemName.variantsConfig.variants.fullName.fields[0].label = field.label; + } + + if (systemName.variantsConfig?.variants?.fullName?.fields?.[0]) { + systemName.variantsConfig.variants.fullName.fields[0].placeholder = field.placeholder; + } + // note(Lauris): we attach top level label and placeholder for easier access when converting database event type + // to v2 response event type even though form builder uses label and placeholder from variantsConfig. + systemName.label = field.label; + systemName.placeholder = field.placeholder; + + return { + ...systemName, + disableOnPrefill: field.disableOnPrefill, + }; } - const customBookingFields = inputBookingFields.map((field) => { - const commonFields: CustomField = { + if (field.type === "email") { + return { + ...systemBeforeFieldEmail, + label: field.label, + placeholder: field.placeholder, + disableOnPrefill: field.disableOnPrefill, + }; + } + + if (field.type === "boolean") { + return { name: field.slug, type: field.type, label: field.label, + labelAsSafeHtml: `

${field.label}

\n`, sources: [ { id: "user", @@ -24,23 +75,27 @@ export function transformBookingFieldsApiToInternal( ], editable: "user", required: field.required, - placeholder: "placeholder" in field && field.placeholder ? field.placeholder : "", + disableOnPrefill: field.disableOnPrefill, }; + } - const options = - "options" in field && field.options ? transformSelectOptionsApiToInternal(field.options) : undefined; - - if (!options) { - return commonFields; - } - - return { - ...commonFields, - options, - }; - }); - - return customBookingFields; + return { + name: field.slug, + type: field.type, + label: field.label, + sources: [ + { + id: "user", + type: "user", + label: "User", + fieldRequired: true, + }, + ], + editable: "user", + required: field.required, + placeholder: "placeholder" in field && field.placeholder ? field.placeholder : "", + disableOnPrefill: field.disableOnPrefill, + }; } export function transformSelectOptionsApiToInternal(options: string[]) { diff --git a/packages/lib/event-types/transformers/internal-to-api/booking-fields.ts b/packages/lib/event-types/transformers/internal-to-api/booking-fields.ts index 9089db9f24..96f8341083 100644 --- a/packages/lib/event-types/transformers/internal-to-api/booking-fields.ts +++ b/packages/lib/event-types/transformers/internal-to-api/booking-fields.ts @@ -25,6 +25,9 @@ export function transformBookingFieldsInternalToApi( type: field.type, slug: field.name, required: field.required, + label: field.label, + placeholder: field.placeholder, + disableOnPrefill: field.disableOnPrefill, }; case "email": return { @@ -32,6 +35,9 @@ export function transformBookingFieldsInternalToApi( type: field.type, slug: field.name, required: field.required, + label: field.label, + placeholder: field.placeholder, + disableOnPrefill: field.disableOnPrefill, }; case "location": return { @@ -85,6 +91,7 @@ export function transformBookingFieldsInternalToApi( label: field.label, required: field.required, placeholder: field.placeholder, + disableOnPrefill: field.disableOnPrefill, }; case "address": return { @@ -94,6 +101,7 @@ export function transformBookingFieldsInternalToApi( label: field.label, required: field.required, placeholder: field.placeholder, + disableOnPrefill: field.disableOnPrefill, }; case "text": return { @@ -103,6 +111,7 @@ export function transformBookingFieldsInternalToApi( label: field.label, required: field.required, placeholder: field.placeholder, + disableOnPrefill: field.disableOnPrefill, }; case "number": return { @@ -112,6 +121,7 @@ export function transformBookingFieldsInternalToApi( label: field.label, required: field.required, placeholder: field.placeholder, + disableOnPrefill: field.disableOnPrefill, }; case "textarea": return { @@ -121,6 +131,7 @@ export function transformBookingFieldsInternalToApi( label: field.label, required: field.required, placeholder: field.placeholder, + disableOnPrefill: field.disableOnPrefill, }; case "multiemail": return { @@ -130,6 +141,7 @@ export function transformBookingFieldsInternalToApi( label: field.label, required: field.required, placeholder: field.placeholder, + disableOnPrefill: field.disableOnPrefill, }; case "boolean": return { @@ -138,6 +150,7 @@ export function transformBookingFieldsInternalToApi( slug: field.name, label: field.label, required: field.required, + disableOnPrefill: field.disableOnPrefill, }; case "select": return { @@ -148,6 +161,7 @@ export function transformBookingFieldsInternalToApi( required: field.required, placeholder: field.placeholder, options: field.options ? field.options.map((option) => option.value) : [], + disableOnPrefill: field.disableOnPrefill, }; case "multiselect": return { @@ -157,6 +171,7 @@ export function transformBookingFieldsInternalToApi( label: field.label, required: field.required, options: field.options ? field.options?.map((option) => option.value) : [], + disableOnPrefill: field.disableOnPrefill, }; case "checkbox": return { @@ -166,6 +181,7 @@ export function transformBookingFieldsInternalToApi( label: field.label, required: field.required, options: field.options ? field.options?.map((option) => option.value) : [], + disableOnPrefill: field.disableOnPrefill, }; case "radio": return { @@ -175,6 +191,7 @@ export function transformBookingFieldsInternalToApi( label: field.label, required: field.required, options: field.options ? field.options?.map((option) => option.value) : [], + disableOnPrefill: field.disableOnPrefill, }; default: throw new Error(`Unsupported booking field type '${field.type}'.`); @@ -203,6 +220,7 @@ const CustomFieldsSchema = z.object({ name: z.string(), type: CustomFieldTypeEnum, label: z.string(), + labelAsSafeHtml: z.string().optional(), sources: z.array( z.object({ id: z.literal("user"), @@ -211,7 +229,7 @@ const CustomFieldsSchema = z.object({ fieldRequired: z.literal(true), }) ), - editable: z.literal("user"), + editable: z.enum(["user", "user-readonly"]), required: z.boolean(), placeholder: z.string().optional(), options: z @@ -222,6 +240,7 @@ const CustomFieldsSchema = z.object({ }) ) .optional(), + disableOnPrefill: z.boolean().optional(), }); const SystemFieldSchema = z.object({ @@ -244,6 +263,7 @@ const SystemFieldSchema = z.object({ ) .optional(), defaultPlaceholder: z.enum(["", "share_additional_notes", "email", "reschedule_placeholder"]).optional(), + placeholder: z.string().optional(), hidden: z.boolean().optional(), required: z.boolean(), hideWhenJustOneOption: z.boolean().optional(), @@ -262,12 +282,31 @@ const SystemFieldSchema = z.object({ }), }) .optional(), + disableOnPrefill: z.boolean().optional(), }); const NameSystemFieldSchema = SystemFieldSchema.extend({ name: z.literal("name"), type: z.literal("name"), required: z.literal(true), + variant: z.literal("fullName").optional(), + variantsConfig: z + .object({ + variants: z.object({ + fullName: z.object({ + fields: z.array( + z.object({ + name: z.literal("fullName"), + type: z.literal("text"), + label: z.string().optional(), + required: z.literal(true), + placeholder: z.string().optional(), + }) + ), + }), + }), + }) + .optional(), }); const EmailSystemFieldSchema = SystemFieldSchema.extend({ @@ -306,8 +345,8 @@ const GuestsSystemFieldSchema = SystemFieldSchema.extend({ required: z.literal(false), }); -type NameSystemField = z.infer; -type EmailSystemField = z.infer; +export type NameSystemField = z.infer; +export type EmailSystemField = z.infer; type RescheduleReasonSystemField = z.infer; type LocationReasonSystemField = z.infer; type TitleSystemField = z.infer; @@ -343,6 +382,7 @@ export const systemBeforeFieldName: NameSystemField = { editable: "system", defaultLabel: "your_name", required: true, + variant: "fullName", sources: [ { label: "Default", @@ -350,21 +390,19 @@ export const systemBeforeFieldName: NameSystemField = { type: "default", }, ], -}; - -export const systemBeforeFieldNameReadOnly: NameSystemField = { - type: "name", - name: "name", - editable: "user-readonly", - defaultLabel: "your_name", - required: true, - sources: [ - { - label: "Default", - id: "default", - type: "default", + variantsConfig: { + variants: { + fullName: { + fields: [ + { + name: "fullName", + type: "text", + required: true, + }, + ], + }, }, - ], + }, }; export const systemBeforeFieldEmail: EmailSystemField = { @@ -382,21 +420,6 @@ export const systemBeforeFieldEmail: EmailSystemField = { ], }; -export const systemBeforeFieldEmailReadOnly: EmailSystemField = { - defaultLabel: "email_address", - type: "email", - name: "email", - required: true, - editable: "user-readonly", - sources: [ - { - label: "Default", - id: "default", - type: "default", - }, - ], -}; - export const systemBeforeFieldLocation: LocationReasonSystemField = { defaultLabel: "location", type: "radioInput", diff --git a/packages/lib/event-types/transformers/internal-to-api/internal-to-api.spec.ts b/packages/lib/event-types/transformers/internal-to-api/internal-to-api.spec.ts index 9307971af0..e5a8b006f0 100644 --- a/packages/lib/event-types/transformers/internal-to-api/internal-to-api.spec.ts +++ b/packages/lib/event-types/transformers/internal-to-api/internal-to-api.spec.ts @@ -31,13 +31,18 @@ import { transformEventTypeColorsInternalToApi, transformSeatsInternalToApi, } from "."; -import type { CustomField } from "./booking-fields"; +import { + systemBeforeFieldEmail, + systemBeforeFieldName, + type CustomField, + type SystemField, +} from "./booking-fields"; describe("transformLocationsInternalToApi", () => { it("should reverse transform address location", () => { const transformedLocation = [ { - type: "inPerson", + type: "inPerson" as const, address: "1234 Main St", displayLocationPublicly: true, }, @@ -59,7 +64,7 @@ describe("transformLocationsInternalToApi", () => { it("should reverse transform link location", () => { const transformedLocation = [ { - type: "link", + type: "link" as const, link: "https://example.com", displayLocationPublicly: true, }, @@ -81,7 +86,7 @@ describe("transformLocationsInternalToApi", () => { it("should reverse transform phone location", () => { const transformedLocation = [ { - type: "userPhone", + type: "userPhone" as const, hostPhoneNumber: "123456789", displayLocationPublicly: true, }, @@ -103,7 +108,7 @@ describe("transformLocationsInternalToApi", () => { it("should reverse transform integration location", () => { const transformedLocation = [ { - type: "integrations:daily", + type: "integrations:daily" as const, }, ]; @@ -121,6 +126,109 @@ describe("transformLocationsInternalToApi", () => { }); describe("transformBookingFieldsInternalToApi", () => { + it("should reverse transform not modified name default field", () => { + const transformedField: SystemField[] = [systemBeforeFieldName]; + + const expectedOutput = [ + { + type: "name", + slug: "name", + isDefault: true, + required: true, + }, + ]; + + const result = transformBookingFieldsInternalToApi(transformedField); + + expect(result).toEqual(expectedOutput); + }); + + it("should reverse transform modified name default field", () => { + const nameField = { + ...systemBeforeFieldName, + placeholder: "custom placeholder", + disableOnPrefill: true, + label: "custom label", + variantsConfig: { + variants: { + fullName: { + fields: [ + { + name: "fullName", + label: "custom label", + placeholder: "custom placeholder", + type: "text", + required: true, + }, + ], + }, + }, + }, + }; + + const transformedField: SystemField[] = [nameField]; + + const expectedOutput = [ + { + type: "name", + slug: "name", + isDefault: true, + required: true, + placeholder: "custom placeholder", + disableOnPrefill: true, + label: "custom label", + }, + ]; + + const result = transformBookingFieldsInternalToApi(transformedField); + + expect(result).toEqual(expectedOutput); + }); + + it("should reverse transform not modified email default field", () => { + const transformedField: SystemField[] = [systemBeforeFieldEmail]; + + const expectedOutput = [ + { + type: "email", + slug: "email", + isDefault: true, + required: true, + }, + ]; + + const result = transformBookingFieldsInternalToApi(transformedField); + + expect(result).toEqual(expectedOutput); + }); + + it("should reverse transform modified email default field", () => { + const transformedField: SystemField[] = [ + { + ...systemBeforeFieldEmail, + placeholder: "custom placeholder", + disableOnPrefill: true, + label: "custom label", + }, + ]; + + const expectedOutput = [ + { + type: "email", + slug: "email", + isDefault: true, + required: true, + placeholder: "custom placeholder", + disableOnPrefill: true, + label: "custom label", + }, + ]; + + const result = transformBookingFieldsInternalToApi(transformedField); + + expect(result).toEqual(expectedOutput); + }); + it("should reverse transform phone field", () => { const transformedField: CustomField[] = [ { @@ -511,7 +619,6 @@ describe("transformBookingFieldsInternalToApi", () => { ], editable: "user", required: true, - placeholder: "", }, ]; @@ -733,7 +840,7 @@ describe("transformRequiresConfirmationInternalToApi", () => { }; const result = transformRequiresConfirmationInternalToApi( transformedField.requiresConfirmation, - !!undefined, + false, undefined ); diff --git a/packages/platform/atoms/booker/BookerPlatformWrapper.tsx b/packages/platform/atoms/booker/BookerPlatformWrapper.tsx index b700f86ab2..3c909817ae 100644 --- a/packages/platform/atoms/booker/BookerPlatformWrapper.tsx +++ b/packages/platform/atoms/booker/BookerPlatformWrapper.tsx @@ -62,10 +62,6 @@ export type BookerPlatformWrapperAtomProps = Omit< notes?: string; rescheduleReason?: string; } & Record; - readOnlyFormValues?: { - name?: boolean; - email?: boolean; - }; handleCreateBooking?: (input: UseCreateBookingInput) => void; onCreateBookingSuccess?: (data: ApiSuccessResponse) => void; onCreateBookingError?: (data: ApiErrorResponse | Error) => void; @@ -153,7 +149,7 @@ export const BookerPlatformWrapper = ( isPending: isTeamPending, data: teamEventTypeData && teamEventTypeData.length > 0 - ? transformApiTeamEventTypeForAtom(teamEventTypeData[0], props.entity, props.readOnlyFormValues) + ? transformApiTeamEventTypeForAtom(teamEventTypeData[0], props.entity, props.defaultFormValues) : undefined, }; } @@ -164,7 +160,7 @@ export const BookerPlatformWrapper = ( isPending, data: data && data.length > 0 - ? transformApiEventTypeForAtom(data[0], props.entity, props.readOnlyFormValues) + ? transformApiEventTypeForAtom(data[0], props.entity, props.defaultFormValues) : undefined, }; }, [ diff --git a/packages/platform/atoms/cal-provider/BaseCalProvider.tsx b/packages/platform/atoms/cal-provider/BaseCalProvider.tsx index c29bd90949..dd5f388770 100644 --- a/packages/platform/atoms/cal-provider/BaseCalProvider.tsx +++ b/packages/platform/atoms/cal-provider/BaseCalProvider.tsx @@ -113,7 +113,7 @@ export function BaseCalProvider({ let translation = labels?.[resolvedKey as keyof typeof labels] ?? String(getTranslation(resolvedKey, language) ?? ""); if (!translation) { - return ""; + return key; } if (values) { const valueKeys = Object.keys(values) as (keyof typeof values)[]; diff --git a/packages/platform/atoms/event-types/atom-api-transformers/transformApiEventTypeForAtom.ts b/packages/platform/atoms/event-types/atom-api-transformers/transformApiEventTypeForAtom.ts index c4066b88a9..512677a153 100644 --- a/packages/platform/atoms/event-types/atom-api-transformers/transformApiEventTypeForAtom.ts +++ b/packages/platform/atoms/event-types/atom-api-transformers/transformApiEventTypeForAtom.ts @@ -8,13 +8,13 @@ import { systemBeforeFieldLocation, systemAfterFieldRescheduleReason, transformRecurrenceApiToInternal, - systemBeforeFieldNameReadOnly, - systemBeforeFieldEmailReadOnly, } from "@calcom/lib/event-types/transformers"; import { getBookerBaseUrlSync } from "@calcom/lib/getBookerUrl/client"; import type { CustomFieldOutput_2024_06_14, + EmailDefaultFieldOutput_2024_06_14, EventTypeOutput_2024_06_14, + NameDefaultFieldOutput_2024_06_14, TeamEventTypeOutput_2024_06_14, } from "@calcom/platform-types"; import { @@ -30,7 +30,7 @@ import type { BookerPlatformWrapperAtomProps } from "../../booker/BookerPlatform export function transformApiEventTypeForAtom( eventType: Omit, entity: BookerPlatformWrapperAtomProps["entity"] | undefined, - readOnlyFormValues: BookerPlatformWrapperAtomProps["readOnlyFormValues"] | undefined + defaultFormValues: BookerPlatformWrapperAtomProps["defaultFormValues"] | undefined ) { const { lengthInMinutes, locations, bookingFields, users, recurrence, ...rest } = eventType; @@ -50,7 +50,7 @@ export function transformApiEventTypeForAtom( ...rest, length: lengthInMinutes, locations: getLocations(locations), - bookingFields: getBookingFields(bookingFields, readOnlyFormValues), + bookingFields: getBookingFields(bookingFields, defaultFormValues), isDefault, isDynamic: false, profile: { @@ -107,7 +107,7 @@ export function transformApiEventTypeForAtom( export function transformApiTeamEventTypeForAtom( eventType: TeamEventTypeOutput_2024_06_14, entity: BookerPlatformWrapperAtomProps["entity"] | undefined, - readOnlyFormValues: BookerPlatformWrapperAtomProps["readOnlyFormValues"] | undefined + defaultFormValues: BookerPlatformWrapperAtomProps["defaultFormValues"] | undefined ) { const { lengthInMinutes, locations, hosts, bookingFields, recurrence, ...rest } = eventType; @@ -126,7 +126,7 @@ export function transformApiTeamEventTypeForAtom( ...rest, length: lengthInMinutes, locations: getLocations(locations), - bookingFields: getBookingFields(bookingFields, readOnlyFormValues), + bookingFields: getBookingFields(bookingFields, defaultFormValues), isDefault, isDynamic: false, profile: { @@ -226,26 +226,48 @@ function getLocations(locations: EventTypeOutput_2024_06_14["locations"]) { function getBookingFields( bookingFields: EventTypeOutput_2024_06_14["bookingFields"], - readOnlyFormValues: BookerPlatformWrapperAtomProps["readOnlyFormValues"] | undefined + defaultFormValues: BookerPlatformWrapperAtomProps["defaultFormValues"] | undefined ) { + // note(Lauris): the peculiar thing about returning atom booking fields using v2 event type is that v2 event type has more possible + // booking field outputs than inputs due to default system fields that cant be passed as inputs, which is why we take v2 from response + // only the custom fields and default editable fields aka fields that can be passed as inputs for event type booking fields. + const customFields: (SystemField | CustomField)[] = bookingFields + ? transformBookingFieldsApiToInternal( + bookingFields.filter((field) => isCustomField(field) || isDefaultEditableField(field)) + ) + : []; + + const customFieldsWithoutNameEmail = customFields.filter( + (field) => field.type !== "name" && field.type !== "email" + ); + const customNameField = customFields?.find((field) => field.type === "name"); + const customEmailField = customFields?.find((field) => field.type === "email"); + const systemBeforeFields: SystemField[] = [ - readOnlyFormValues?.name ? systemBeforeFieldNameReadOnly : systemBeforeFieldName, - readOnlyFormValues?.email ? systemBeforeFieldEmailReadOnly : systemBeforeFieldEmail, + customNameField || systemBeforeFieldName, + customEmailField || systemBeforeFieldEmail, systemBeforeFieldLocation, ]; - const transformedCustomFields: CustomField[] = transformBookingFieldsApiToInternal( - bookingFields.filter((field) => isCustomField(field)) - ); - const systemAfterFields: SystemField[] = [systemAfterFieldRescheduleReason]; const transformedBookingFields: (SystemField | CustomField)[] = [ ...systemBeforeFields, - ...transformedCustomFields, + ...customFieldsWithoutNameEmail, ...systemAfterFields, ]; + // note(Lauris): in web app booking form values can be passed as url query params, but booker atom does not accept booking field values via url, + // so defaultFormValues act as a way to prefill booking form fields, and if the field in database has disableOnPrefill=true and value passed then its read only. + const defaultFormValuesKeys = defaultFormValues ? Object.keys(defaultFormValues) : []; + if (defaultFormValuesKeys.length) { + for (const field of transformedBookingFields) { + if (defaultFormValuesKeys.includes(field.name) && field.disableOnPrefill) { + field.editable = "user-readonly"; + } + } + } + return eventTypeBookingFields.brand<"HAS_SYSTEM_FIELDS">().parse(transformedBookingFields); } @@ -254,3 +276,9 @@ function isCustomField( ): field is CustomFieldOutput_2024_06_14 { return !field.isDefault; } + +function isDefaultEditableField( + field: EventTypeOutput_2024_06_14["bookingFields"][number] +): field is NameDefaultFieldOutput_2024_06_14 | EmailDefaultFieldOutput_2024_06_14 { + return field.type === "name" || field.type === "email"; +} diff --git a/packages/platform/libraries/index.ts b/packages/platform/libraries/index.ts index efa8b22794..34471f0475 100644 --- a/packages/platform/libraries/index.ts +++ b/packages/platform/libraries/index.ts @@ -125,7 +125,12 @@ export { systemAfterFieldRescheduleReason, } from "@calcom/lib/event-types/transformers"; -export type { SystemField, CustomField } from "@calcom/lib/event-types/transformers"; +export type { + SystemField, + CustomField, + NameSystemField, + EmailSystemField, +} from "@calcom/lib/event-types/transformers"; export { parseBookingLimit, parseEventTypeColor } from "@calcom/lib"; diff --git a/packages/platform/types/event-types/event-types_2024_06_14/inputs/booking-fields.input.ts b/packages/platform/types/event-types/event-types_2024_06_14/inputs/booking-fields.input.ts index 056ae86e25..f844f77307 100644 --- a/packages/platform/types/event-types/event-types_2024_06_14/inputs/booking-fields.input.ts +++ b/packages/platform/types/event-types/event-types_2024_06_14/inputs/booking-fields.input.ts @@ -1,11 +1,13 @@ import { BadRequestException } from "@nestjs/common"; -import { ApiProperty as DocsProperty } from "@nestjs/swagger"; +import { ApiProperty as DocsProperty, ApiPropertyOptional as DocsPropertyOptional } from "@nestjs/swagger"; import { plainToInstance } from "class-transformer"; import { IsString, IsBoolean, IsArray, IsIn, IsOptional } from "class-validator"; import type { ValidationOptions, ValidatorConstraintInterface } from "class-validator"; import { registerDecorator, validate, ValidatorConstraint } from "class-validator"; const inputBookingFieldTypes = [ + "name", + "email", "phone", "address", "text", @@ -19,6 +21,59 @@ const inputBookingFieldTypes = [ "boolean", ] as const; +export class NameFieldInput_2024_06_14 { + @IsIn(inputBookingFieldTypes) + @DocsProperty({ example: "name", description: "only allowed value for type is `name`" }) + type!: "name"; + + @IsString() + @IsOptional() + @DocsProperty() + label?: string; + + @IsString() + @IsOptional() + @DocsProperty() + placeholder?: string; + + @IsBoolean() + @IsOptional() + @DocsPropertyOptional({ + type: Boolean, + 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.", + }) + disableOnPrefill?: boolean; +} + +export class EmailFieldInput_2024_06_14 { + @IsIn(inputBookingFieldTypes) + @DocsProperty({ example: "email", description: "only allowed value for type is `email`" }) + type!: "email"; + + @IsString() + @IsOptional() + @DocsProperty() + label?: string; + + @IsString() + @IsOptional() + @DocsProperty() + placeholder?: string; + + @IsBoolean() + @IsOptional() + @DocsPropertyOptional({ + type: Boolean, + 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.", + }) + disableOnPrefill?: boolean; +} export class PhoneFieldInput_2024_06_14 { @IsIn(inputBookingFieldTypes) @DocsProperty({ example: "phone", description: "only allowed value for type is `phone`" }) @@ -44,6 +99,17 @@ export class PhoneFieldInput_2024_06_14 { @IsOptional() @DocsProperty() placeholder?: string; + + @IsBoolean() + @IsOptional() + @DocsPropertyOptional({ + type: Boolean, + 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 the slug is `phone` and the URL contains query parameter `&phone=1234567890`,\ + the phone field will be prefilled with this value and disabled.", + }) + disableOnPrefill?: boolean; } export class AddressFieldInput_2024_06_14 { @@ -72,6 +138,17 @@ export class AddressFieldInput_2024_06_14 { @DocsProperty() @DocsProperty({ example: "e.g., 1234 Main St" }) placeholder?: string; + + @IsBoolean() + @IsOptional() + @DocsPropertyOptional({ + type: Boolean, + 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 the slug is `address` and the URL contains query parameter `&address=1234 Main St, London`,\ + the address field will be prefilled with this value and disabled.", + }) + disableOnPrefill?: boolean; } export class TextFieldInput_2024_06_14 { @@ -100,6 +177,17 @@ export class TextFieldInput_2024_06_14 { @IsOptional() @DocsProperty() placeholder?: string; + + @IsBoolean() + @IsOptional() + @DocsPropertyOptional({ + type: Boolean, + 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 the slug is `who-referred-you` and the URL contains query parameter `&who-referred-you=bob`,\ + the text field will be prefilled with this value and disabled.", + }) + disableOnPrefill?: boolean; } export class NumberFieldInput_2024_06_14 { @@ -128,6 +216,17 @@ export class NumberFieldInput_2024_06_14 { @IsOptional() @DocsProperty() placeholder?: string; + + @IsBoolean() + @IsOptional() + @DocsPropertyOptional({ + type: Boolean, + 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 the slug is `calories-per-day` and the URL contains query parameter `&calories-per-day=3000`,\ + the number field will be prefilled with this value and disabled.", + }) + disableOnPrefill?: boolean; } export class TextAreaFieldInput_2024_06_14 { @@ -156,6 +255,17 @@ export class TextAreaFieldInput_2024_06_14 { @IsOptional() @DocsProperty() placeholder?: string; + + @IsBoolean() + @IsOptional() + @DocsPropertyOptional({ + type: Boolean, + 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 the slug is `dear-diary` and the URL contains query parameter `&dear-diary=Today I shipped a feature`,\ + the text area will be prefilled with this value and disabled.", + }) + disableOnPrefill?: boolean; } export class SelectFieldInput_2024_06_14 { @@ -188,6 +298,17 @@ export class SelectFieldInput_2024_06_14 { @IsArray() @DocsProperty({ type: [String], example: ["Option 1", "Option 2"] }) options!: string[]; + + @IsBoolean() + @IsOptional() + @DocsPropertyOptional({ + type: Boolean, + 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 the slug is `language` and options of this select field are ['english', 'italian'] and the URL contains query parameter `&language=italian`,\ + the 'italian' will be selected and the select field will be disabled.", + }) + disableOnPrefill?: boolean; } export class MultiSelectFieldInput_2024_06_14 { @@ -214,6 +335,17 @@ export class MultiSelectFieldInput_2024_06_14 { @IsArray() @DocsProperty({ type: [String], example: ["Option 1", "Option 2"] }) options!: string[]; + + @IsBoolean() + @IsOptional() + @DocsPropertyOptional({ + type: Boolean, + 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 the slug is `consultants` and the URL contains query parameter `&consultants=en&language=it`,\ + the 'en' and 'it' will be selected and the select field will be disabled.", + }) + disableOnPrefill?: boolean; } export class MultiEmailFieldInput_2024_06_14 { @@ -242,6 +374,17 @@ export class MultiEmailFieldInput_2024_06_14 { @IsOptional() @DocsProperty() placeholder?: string; + + @IsBoolean() + @IsOptional() + @DocsPropertyOptional({ + type: Boolean, + 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 the slug is `consultants` and the URL contains query parameter `&consultants=alice@gmail.com&consultants=bob@gmail.com`,\ + the these emails will be added and none more can be added.", + }) + disableOnPrefill?: boolean; } export class CheckboxGroupFieldInput_2024_06_14 { @@ -268,6 +411,17 @@ export class CheckboxGroupFieldInput_2024_06_14 { @IsArray() @DocsProperty({ type: [String], example: ["Checkbox 1", "Checkbox 2"] }) options!: string[]; + + @IsBoolean() + @IsOptional() + @DocsPropertyOptional({ + type: Boolean, + 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 the slug is `notify-me` and the URL contains query parameter `¬ify-me=true`,\ + the checkbox will be selected and the checkbox field will be disabled.", + }) + disableOnPrefill?: boolean; } export class RadioGroupFieldInput_2024_06_14 { @@ -294,6 +448,17 @@ export class RadioGroupFieldInput_2024_06_14 { @IsArray() @DocsProperty({ type: [String], example: ["Radio 1", "Radio 2"] }) options!: string[]; + + @IsBoolean() + @IsOptional() + @DocsPropertyOptional({ + type: Boolean, + 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 the slug is `language` and options of this select field are ['english', 'italian'] and the URL contains query parameter `&language=italian`,\ + the 'italian' radio buttom will be selected and the select field will be disabled.", + }) + disableOnPrefill?: boolean; } export class BooleanFieldInput_2024_06_14 { @@ -316,9 +481,16 @@ export class BooleanFieldInput_2024_06_14 { @IsBoolean() @DocsProperty() required!: boolean; + + @IsBoolean() + @IsOptional() + @DocsPropertyOptional({ type: Boolean }) + disableOnPrefill?: boolean; } export type InputBookingField_2024_06_14 = + | NameFieldInput_2024_06_14 + | EmailFieldInput_2024_06_14 | PhoneFieldInput_2024_06_14 | AddressFieldInput_2024_06_14 | TextFieldInput_2024_06_14 @@ -334,6 +506,8 @@ export type InputBookingField_2024_06_14 = @ValidatorConstraint({ async: true }) class InputBookingFieldValidator_2024_06_14 implements ValidatorConstraintInterface { private classTypeMap: { [key: string]: new () => InputBookingField_2024_06_14 } = { + name: NameFieldInput_2024_06_14, + email: EmailFieldInput_2024_06_14, phone: PhoneFieldInput_2024_06_14, address: AddressFieldInput_2024_06_14, text: TextFieldInput_2024_06_14, @@ -347,7 +521,7 @@ class InputBookingFieldValidator_2024_06_14 implements ValidatorConstraintInterf boolean: BooleanFieldInput_2024_06_14, }; - private reservedSystemSlugs = ["name", "email", "location", "rescheduleReason"]; + private reservedSystemSlugs = ["location", "rescheduleReason"]; async validate(bookingFields: { type: string; slug: string }[]) { if (!Array.isArray(bookingFields)) { @@ -365,7 +539,8 @@ class InputBookingFieldValidator_2024_06_14 implements ValidatorConstraintInterf throw new BadRequestException(`Each booking field must have a 'type' property.`); } - if (!slug) { + const notSystemEditableField = type !== "name" && type !== "email"; + if (notSystemEditableField && !slug) { throw new BadRequestException(`Each booking field must have a 'slug' property.`); } @@ -382,7 +557,9 @@ class InputBookingFieldValidator_2024_06_14 implements ValidatorConstraintInterf `Duplicate bookingFields slug '${slug}' found. All bookingFields slugs must be unique.` ); } - slugs.push(slug); + if (notSystemEditableField) { + slugs.push(slug); + } const ClassType = this.classTypeMap[type]; if (!ClassType) { diff --git a/packages/platform/types/event-types/event-types_2024_06_14/outputs/booking-fields.output.ts b/packages/platform/types/event-types/event-types_2024_06_14/outputs/booking-fields.output.ts index 4253f443ee..69510be221 100644 --- a/packages/platform/types/event-types/event-types_2024_06_14/outputs/booking-fields.output.ts +++ b/packages/platform/types/event-types/event-types_2024_06_14/outputs/booking-fields.output.ts @@ -17,9 +17,11 @@ import { CheckboxGroupFieldInput_2024_06_14, RadioGroupFieldInput_2024_06_14, BooleanFieldInput_2024_06_14, + NameFieldInput_2024_06_14, + EmailFieldInput_2024_06_14, } from "../inputs"; -export class NameDefaultFieldOutput_2024_06_14 { +export class NameDefaultFieldOutput_2024_06_14 extends NameFieldInput_2024_06_14 { @IsBoolean() @DocsProperty({ description: "This property is always true because it's a default field", @@ -45,7 +47,7 @@ export class NameDefaultFieldOutput_2024_06_14 { required!: true; } -export class EmailDefaultFieldOutput_2024_06_14 { +export class EmailDefaultFieldOutput_2024_06_14 extends EmailFieldInput_2024_06_14 { @IsBoolean() @DocsProperty({ description: "This property is always true because it's a default field", diff --git a/yarn.lock b/yarn.lock index 3d43af0bb1..a55bb50b6d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4125,7 +4125,7 @@ __metadata: dependencies: "@calcom/platform-constants": "*" "@calcom/platform-enums": "*" - "@calcom/platform-libraries": "npm:@calcom/platform-libraries@0.0.45" + "@calcom/platform-libraries": "npm:@calcom/platform-libraries@0.0.47" "@calcom/platform-libraries-0.0.2": "npm:@calcom/platform-libraries@0.0.2" "@calcom/platform-types": "*" "@calcom/platform-utils": "*" @@ -4318,28 +4318,6 @@ __metadata: languageName: unknown linkType: soft -"@calcom/atoms@npm:1.0.60": - version: 1.0.60 - resolution: "@calcom/atoms@npm:1.0.60" - dependencies: - "@radix-ui/react-dialog": ^1.0.4 - "@radix-ui/react-slot": ^1.0.2 - "@radix-ui/react-switch": ^1.1.0 - "@radix-ui/react-toast": ^1.1.5 - "@tanstack/react-query": ^5.17.15 - class-variance-authority: ^0.7.0 - clsx: ^2.0.0 - react-use: ^17.4.2 - tailwind-merge: ^1.13.2 - tailwindcss: ^3.3.3 - tailwindcss-animate: ^1.0.6 - peerDependencies: - react: ">=18.0.0" - typescript: ">=5.4.5" - checksum: b216d40948ca1a96d8374c0f9878c1c9b5776b2b6cc569ba7fb344fec360fe4a43f23f97a4d82e4c5ad75c83ea6c8b63de079088598594564bf44d00d7cb9b42 - languageName: node - linkType: hard - "@calcom/autocheckin@workspace:packages/app-store/autocheckin": version: 0.0.0-use.local resolution: "@calcom/autocheckin@workspace:packages/app-store/autocheckin" @@ -4497,7 +4475,7 @@ __metadata: chart.js: ^3.7.1 client-only: ^0.0.1 eslint: ^8.34.0 - next: ^13.5.6 + next: ^13.5.4 next-auth: ^4.22.1 next-i18next: ^13.2.2 postcss: ^8.4.18 @@ -5154,14 +5132,14 @@ __metadata: languageName: node linkType: hard -"@calcom/platform-libraries@npm:@calcom/platform-libraries@0.0.45": - version: 0.0.45 - resolution: "@calcom/platform-libraries@npm:0.0.45" +"@calcom/platform-libraries@npm:@calcom/platform-libraries@0.0.47": + version: 0.0.47 + resolution: "@calcom/platform-libraries@npm:0.0.47" dependencies: "@calcom/core": "*" "@calcom/features": "*" "@calcom/lib": "*" - checksum: 69f3513cd389d328153ba6704db3eb6251a005618f4d71de7b6102e553393004da9c420c3685370c8a4daa255a0964d2f2f6979079e66036e0be2e4c2277c8ce + checksum: 2a942510e6d1165903dcb6abb37cc1ab7f8ff1cd8cd69512a5ed6affca2f3a1698c3072b453055140e7aa3def1b04bd1fb153485f50fb4ff390621fd823398b9 languageName: node linkType: hard @@ -5513,6 +5491,15 @@ __metadata: languageName: unknown linkType: soft +"@calcom/telli@workspace:packages/app-store/telli": + version: 0.0.0-use.local + resolution: "@calcom/telli@workspace:packages/app-store/telli" + dependencies: + "@calcom/lib": "*" + "@calcom/types": "*" + languageName: unknown + linkType: soft + "@calcom/trpc@*, @calcom/trpc@workspace:packages/trpc": version: 0.0.0-use.local resolution: "@calcom/trpc@workspace:packages/trpc" @@ -5821,7 +5808,6 @@ __metadata: dependencies: "@algora/sdk": ^0.1.2 "@calcom/app-store": "*" - "@calcom/atoms": 1.0.60 "@calcom/config": "*" "@calcom/dayjs": "*" "@calcom/embed-react": "workspace:^" @@ -5831,8 +5817,6 @@ __metadata: "@calcom/tsconfig": "*" "@calcom/ui": "*" "@datocms/cma-client-node": ^2.0.0 - "@dub/analytics": ^0.0.15 - "@eslint/js": ^9.9.0 "@floating-ui/react-dom": ^1.0.0 "@flodlc/nebula": ^1.0.56 "@graphql-codegen/cli": ^5.0.0 @@ -5850,7 +5834,6 @@ __metadata: "@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-select": ^2.1.1 "@radix-ui/react-slider": ^1.0.0 "@radix-ui/react-tabs": ^1.0.0 "@radix-ui/react-tooltip": ^1.0.0 @@ -5870,7 +5853,6 @@ __metadata: "@vercel/og": ^0.5.0 autoprefixer: ^10.4.12 bcryptjs: ^2.4.3 - class-variance-authority: ^0.7.0 clsx: ^1.2.1 cobe: ^0.4.1 concurrently: ^7.6.0 @@ -5879,14 +5861,10 @@ __metadata: datocms-structured-text-utils: ^2.0.4 debounce: ^1.2.1 dotenv: ^16.3.1 - embla-carousel-react: ^8.1.8 enquirer: ^2.4.1 env-cmd: ^10.1.0 - eslint: ^9.9.0 - eslint-plugin-react: ^7.35.0 + eslint: ^8.34.0 fathom-client: ^3.5.0 - framer-motion: ^11.0.25 - globals: ^15.9.0 globby: ^13.1.3 graphql: ^16.8.0 graphql-codegen: ^0.4.0 @@ -5896,7 +5874,7 @@ __metadata: i18n-unused: ^0.13.0 iframe-resizer-react: ^1.1.0 keen-slider: ^6.8.0 - lucide-react: ^0.364.0 + lucide-react: ^0.171.0 micro: ^10.0.1 next: ^14.1.3 next-auth: ^4.22.1 @@ -5905,11 +5883,10 @@ __metadata: next-seo: ^6.0.0 playwright-core: ^1.38.1 postcss: ^8.4.18 - prettier: 3.3.3 prism-react-renderer: ^1.3.5 react: ^18.2.0 react-confetti: ^6.0.1 - react-datocms: ^5.0.3 + react-datocms: ^3.1.0 react-device-detect: ^2.2.2 react-dom: ^18.2.0 react-fast-marquee: ^1.6.4 @@ -5919,10 +5896,8 @@ __metadata: react-live-chat-loader: ^2.8.1 react-markdown: ^9.0.1 react-merge-refs: 1.1.0 - react-parallax-tilt: ^1.7.226 react-resize-detector: ^9.1.0 react-twemoji: ^0.3.0 - react-twitter-embed: ^4.0.4 react-use-measure: ^2.1.1 react-wrap-balancer: ^1.0.0 remark: ^14.0.2 @@ -5932,8 +5907,7 @@ __metadata: tailwind-merge: ^1.13.2 tailwindcss: ^3.3.3 ts-node: ^10.9.1 - typescript: ^4.4.4 - typescript-eslint: ^8.2.0 + typescript: ^4.9.4 wait-on: ^7.0.1 xml2js: ^0.6.0 zod: ^3.22.2 @@ -7034,7 +7008,7 @@ __metadata: languageName: node linkType: hard -"@eslint-community/eslint-utils@npm:^4.2.0, @eslint-community/eslint-utils@npm:^4.4.0": +"@eslint-community/eslint-utils@npm:^4.2.0": version: 4.4.0 resolution: "@eslint-community/eslint-utils@npm:4.4.0" dependencies: @@ -7045,13 +7019,6 @@ __metadata: languageName: node linkType: hard -"@eslint-community/regexpp@npm:^4.10.0, @eslint-community/regexpp@npm:^4.11.0": - version: 4.11.1 - resolution: "@eslint-community/regexpp@npm:4.11.1" - checksum: 6986685529d30e33c2640973c3d8e7ddd31bef3cc8cb10ad54ddc1dea12680779a2c23a45562aa1462c488137a3570e672d122fac7da22d82294382d915cec70 - languageName: node - linkType: hard - "@eslint-community/regexpp@npm:^4.6.1": version: 4.10.0 resolution: "@eslint-community/regexpp@npm:4.10.0" @@ -7059,24 +7026,6 @@ __metadata: languageName: node linkType: hard -"@eslint/config-array@npm:^0.18.0": - version: 0.18.0 - resolution: "@eslint/config-array@npm:0.18.0" - dependencies: - "@eslint/object-schema": ^2.1.4 - debug: ^4.3.1 - minimatch: ^3.1.2 - checksum: 5ff748e1788745bfb3160c3b3151d62a7c054e336e9fe8069e86cfa6106f3abbd59b24f1253122268295f98c66803e9a7b23d7f947a8c00f62d2060cc44bc7fc - languageName: node - linkType: hard - -"@eslint/core@npm:^0.6.0": - version: 0.6.0 - resolution: "@eslint/core@npm:0.6.0" - checksum: bf6a285d8cfb7f76524041991832fcc1573c7fc4bdfa091a14972bdb719d5a735330efb88ec453dd33930f49bcc9bb2737b40c43fb1220933781ebb712667265 - languageName: node - linkType: hard - "@eslint/eslintrc@npm:^1.4.1": version: 1.4.1 resolution: "@eslint/eslintrc@npm:1.4.1" @@ -7111,23 +7060,6 @@ __metadata: languageName: node linkType: hard -"@eslint/eslintrc@npm:^3.1.0": - version: 3.1.0 - resolution: "@eslint/eslintrc@npm:3.1.0" - dependencies: - ajv: ^6.12.4 - debug: ^4.3.2 - espree: ^10.0.1 - globals: ^14.0.0 - ignore: ^5.2.0 - import-fresh: ^3.2.1 - js-yaml: ^4.1.0 - minimatch: ^3.1.2 - strip-json-comments: ^3.1.1 - checksum: b0a9bbd98c8b9e0f4d975b042ff9b874dde722b20834ea2ff46551c3de740d4f10f56c449b790ef34d7f82147cbddfc22b004a43cc885dbc2664bb134766b5e4 - languageName: node - linkType: hard - "@eslint/js@npm:8.57.0": version: 8.57.0 resolution: "@eslint/js@npm:8.57.0" @@ -7135,29 +7067,6 @@ __metadata: languageName: node linkType: hard -"@eslint/js@npm:9.12.0, @eslint/js@npm:^9.9.0": - version: 9.12.0 - resolution: "@eslint/js@npm:9.12.0" - checksum: cad2ee0d3080a3e507e18f1846e343d4dac00cb83b0c56355fa165b05fa0780ad746e0b93540666036e50b4cf4a4ee496a730417e500dc217c201902edd7ab5b - languageName: node - linkType: hard - -"@eslint/object-schema@npm:^2.1.4": - version: 2.1.4 - resolution: "@eslint/object-schema@npm:2.1.4" - checksum: 5a03094115bcdab7991dbbc5d17a9713f394cebb4b44d3eaf990d7487b9b8e1877b817997334ab40be52e299a0384595c6f6ba91b389901e5e1d21efda779271 - languageName: node - linkType: hard - -"@eslint/plugin-kit@npm:^0.2.0": - version: 0.2.0 - resolution: "@eslint/plugin-kit@npm:0.2.0" - dependencies: - levn: ^0.4.1 - checksum: 2c358c816575b8338e017cff59bf8b7a186510bc0e6c1b234e889156bfea9e00ce588ce424a0aa5d322e316f1ad08e8fdc7450a7fd966c64cbb911e64eaffbb9 - languageName: node - linkType: hard - "@ewsjs/ntlm-client@npm:^3.0.1": version: 3.0.1 resolution: "@ewsjs/ntlm-client@npm:3.0.1" @@ -8161,23 +8070,6 @@ __metadata: languageName: node linkType: hard -"@humanfs/core@npm:^0.19.0": - version: 0.19.0 - resolution: "@humanfs/core@npm:0.19.0" - checksum: d73c153e9a41efce401cdf8eaa831e5b01630b45a46678eded3803347251a24446f1500b0074750fcab0a88d947609b164a0d5bba57f58ec18167bea01c69ac5 - languageName: node - linkType: hard - -"@humanfs/node@npm:^0.16.5": - version: 0.16.5 - resolution: "@humanfs/node@npm:0.16.5" - dependencies: - "@humanfs/core": ^0.19.0 - "@humanwhocodes/retry": ^0.3.0 - checksum: ae4799c6bf436450e1b1836f23fdb4ce0eb862df8e02fd498ee7d8ebe552d85fe36ccac81fcfbe39bf43cb49b302ae438d94699a451d1cfc78f64198d4b45674 - languageName: node - linkType: hard - "@humanwhocodes/config-array@npm:^0.11.14": version: 0.11.14 resolution: "@humanwhocodes/config-array@npm:0.11.14" @@ -8221,13 +8113,6 @@ __metadata: languageName: node linkType: hard -"@humanwhocodes/retry@npm:^0.3.0, @humanwhocodes/retry@npm:^0.3.1": - version: 0.3.1 - resolution: "@humanwhocodes/retry@npm:0.3.1" - checksum: 7e5517bb51dbea3e02ab6cacef59a8f4b0ca023fc4b0b8cbc40de0ad29f46edd50b897c6e7fba79366a0217e3f48e2da8975056f6c35cfe19d9cc48f1d03c1dd - languageName: node - linkType: hard - "@iarna/toml@npm:2.2.5": version: 2.2.5 resolution: "@iarna/toml@npm:2.2.5" @@ -9622,60 +9507,6 @@ __metadata: languageName: node linkType: hard -"@mux/mux-player-react@npm:*": - version: 3.0.0 - resolution: "@mux/mux-player-react@npm:3.0.0" - dependencies: - "@mux/mux-player": 3.0.0 - "@mux/playback-core": 0.26.0 - prop-types: ^15.7.2 - peerDependencies: - "@types/react": ^17.0.0 || ^18 || ^19 - react: ^17.0.2 || ^18 || ^19 - react-dom: ^17.0.2 || ^18 || ^19 - peerDependenciesMeta: - "@types/react": - optional: true - "@types/react-dom": - optional: true - checksum: ab399677b9f044e74f1c56b02bf75e02154886b2b4a778073d8179440c6ac2fee51692f4ad75ba25d6fe7c35a5a1b2ebe2ae807b7a36e3669bea65392b373b10 - languageName: node - linkType: hard - -"@mux/mux-player@npm:3.0.0": - version: 3.0.0 - resolution: "@mux/mux-player@npm:3.0.0" - dependencies: - "@mux/mux-video": 0.21.0 - "@mux/playback-core": 0.26.0 - media-chrome: ~4.1.1 - player.style: ^0.0.8 - checksum: f2110d03eb49e2468b964cda2f70ea201cefafc35b738f6247637711d97f93f2a0828d51e0da04439a131ee6cdb530fc6ebaec228d268013cc6d30e68a6fda2f - languageName: node - linkType: hard - -"@mux/mux-video@npm:0.21.0": - version: 0.21.0 - resolution: "@mux/mux-video@npm:0.21.0" - dependencies: - "@mux/playback-core": 0.26.0 - castable-video: ~1.1.0 - custom-media-element: ~1.3.1 - media-tracks: ~0.3.2 - checksum: 33b9083c84ea3ad0f7c59e545790b605f4cdc47714f488fa6ab269dd8531060deac6c4a1237d132722d706f68c786561b712b83b5581398ffaa7f0a3fc642c31 - languageName: node - linkType: hard - -"@mux/playback-core@npm:0.26.0": - version: 0.26.0 - resolution: "@mux/playback-core@npm:0.26.0" - dependencies: - hls.js: ~1.5.11 - mux-embed: ^5.3.0 - checksum: 648300310eee8038654c6f2aa5be2ab0bf6ad281a6bb01ea5ffe84e501230959655917a4800d96841aa5342e1e06cc97c32228b0eeb462f57264e5dd524f1b95 - languageName: node - linkType: hard - "@ndelangen/get-tarball@npm:^3.0.7": version: 3.0.9 resolution: "@ndelangen/get-tarball@npm:3.0.9" @@ -10280,6 +10111,19 @@ __metadata: languageName: node linkType: hard +"@npmcli/agent@npm:^2.0.0": + version: 2.2.2 + resolution: "@npmcli/agent@npm:2.2.2" + dependencies: + agent-base: ^7.1.0 + http-proxy-agent: ^7.0.0 + https-proxy-agent: ^7.0.1 + lru-cache: ^10.0.1 + socks-proxy-agent: ^8.0.3 + checksum: 67de7b88cc627a79743c88bab35e023e23daf13831a8aa4e15f998b92f5507b644d8ffc3788afc8e64423c612e0785a6a92b74782ce368f49a6746084b50d874 + languageName: node + linkType: hard + "@npmcli/fs@npm:^2.1.0": version: 2.1.2 resolution: "@npmcli/fs@npm:2.1.2" @@ -10290,6 +10134,15 @@ __metadata: languageName: node linkType: hard +"@npmcli/fs@npm:^3.1.0": + version: 3.1.1 + resolution: "@npmcli/fs@npm:3.1.1" + dependencies: + semver: ^7.3.5 + checksum: d960cab4b93adcb31ce223bfb75c5714edbd55747342efb67dcc2f25e023d930a7af6ece3e75f2f459b6f38fc14d031c766f116cd124fdc937fd33112579e820 + languageName: node + linkType: hard + "@npmcli/move-file@npm:^2.0.0": version: 2.0.1 resolution: "@npmcli/move-file@npm:2.0.1" @@ -11871,13 +11724,6 @@ __metadata: languageName: node linkType: hard -"@radix-ui/number@npm:1.1.0": - version: 1.1.0 - resolution: "@radix-ui/number@npm:1.1.0" - checksum: e4fc7483c19141c25dbaf3d140b75e2b7fed0bfa3ad969f4441f0266ed34b35413f57a35df7b025e2a977152bbe6131849d3444fc6f15a73345dfc2bfdc105fa - languageName: node - linkType: hard - "@radix-ui/primitive@npm:0.1.0": version: 0.1.0 resolution: "@radix-ui/primitive@npm:0.1.0" @@ -11959,25 +11805,6 @@ __metadata: languageName: node linkType: hard -"@radix-ui/react-arrow@npm:1.1.0": - version: 1.1.0 - resolution: "@radix-ui/react-arrow@npm:1.1.0" - dependencies: - "@radix-ui/react-primitive": 2.0.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: 8522e0a8095ecc32d3a719f9c3bc0514c677a9c9d5ac26985d5416576dbc487c2a49ba2484397d9de502b54657856cb41ca3ea0b2165563eeeae45a83750885b - languageName: node - linkType: hard - "@radix-ui/react-avatar@npm:^1.0.4": version: 1.0.4 resolution: "@radix-ui/react-avatar@npm:1.0.4" @@ -12241,19 +12068,6 @@ __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" @@ -12446,29 +12260,6 @@ __metadata: languageName: node linkType: hard -"@radix-ui/react-dismissable-layer@npm:1.1.1": - version: 1.1.1 - resolution: "@radix-ui/react-dismissable-layer@npm:1.1.1" - dependencies: - "@radix-ui/primitive": 1.1.0 - "@radix-ui/react-compose-refs": 1.1.0 - "@radix-ui/react-primitive": 2.0.0 - "@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: 18450111de16435a6e98661c8530bf87d8dfe51aa8649fea4f420db389642800792bc454669cab010c35cd402e9ae945c882e78e4cf2ce209d9c701f7a9b940f - 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" @@ -12521,19 +12312,6 @@ __metadata: languageName: node linkType: hard -"@radix-ui/react-focus-guards@npm:1.1.1": - version: 1.1.1 - resolution: "@radix-ui/react-focus-guards@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: ac8dd31f48fa0500bafd9368f2f06c5a06918dccefa89fa5dc77ca218dc931a094a81ca57f6b181138029822f7acdd5280dceccf5ba4d9263c754fb8f7961879 - languageName: node - linkType: hard - "@radix-ui/react-focus-scope@npm:0.1.4": version: 0.1.4 resolution: "@radix-ui/react-focus-scope@npm:0.1.4" @@ -12585,27 +12363,6 @@ __metadata: languageName: node linkType: hard -"@radix-ui/react-focus-scope@npm:1.1.0": - version: 1.1.0 - resolution: "@radix-ui/react-focus-scope@npm:1.1.0" - dependencies: - "@radix-ui/react-compose-refs": 1.1.0 - "@radix-ui/react-primitive": 2.0.0 - "@radix-ui/react-use-callback-ref": 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: bea6c993752780c46c69f0c21a0fd96f11b9ed7edac23deb0953fbd8524d90938bf4c8060ccac7cad14caba3eb493f2642be7f8933910f4b6fa184666b7fcb40 - languageName: node - linkType: hard - "@radix-ui/react-hover-card@npm:^1.0.7": version: 1.0.7 resolution: "@radix-ui/react-hover-card@npm:1.0.7" @@ -12865,34 +12622,6 @@ __metadata: languageName: node linkType: hard -"@radix-ui/react-popper@npm:1.2.0": - version: 1.2.0 - resolution: "@radix-ui/react-popper@npm:1.2.0" - dependencies: - "@floating-ui/react-dom": ^2.0.0 - "@radix-ui/react-arrow": 1.1.0 - "@radix-ui/react-compose-refs": 1.1.0 - "@radix-ui/react-context": 1.1.0 - "@radix-ui/react-primitive": 2.0.0 - "@radix-ui/react-use-callback-ref": 1.1.0 - "@radix-ui/react-use-layout-effect": 1.1.0 - "@radix-ui/react-use-rect": 1.1.0 - "@radix-ui/react-use-size": 1.1.0 - "@radix-ui/rect": 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: 95b2390181abe3296274b3e3836d295dc7b1624462ca88cc283b70c4efa25b1a640ff56cfe2cc8606bfe493f81b57a86345f962d86a027ad673aed58390545c6 - languageName: node - linkType: hard - "@radix-ui/react-portal@npm:0.1.4": version: 0.1.4 resolution: "@radix-ui/react-portal@npm:0.1.4" @@ -12960,26 +12689,6 @@ __metadata: languageName: node linkType: hard -"@radix-ui/react-portal@npm:1.1.2": - version: 1.1.2 - resolution: "@radix-ui/react-portal@npm:1.1.2" - dependencies: - "@radix-ui/react-primitive": 2.0.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: 2f737dc0445f02f512f814ba140227e1a049b3d215d79e22ead412c9befe830292c48a559a8ad1514a474ae8f0c4c43954dfbe294b93a0279d8747d08f7b7924 - languageName: node - linkType: hard - "@radix-ui/react-presence@npm:1.0.0": version: 1.0.0 resolution: "@radix-ui/react-presence@npm:1.0.0" @@ -13253,45 +12962,6 @@ __metadata: languageName: node linkType: hard -"@radix-ui/react-select@npm:^2.1.1": - version: 2.1.2 - resolution: "@radix-ui/react-select@npm:2.1.2" - dependencies: - "@radix-ui/number": 1.1.0 - "@radix-ui/primitive": 1.1.0 - "@radix-ui/react-collection": 1.1.0 - "@radix-ui/react-compose-refs": 1.1.0 - "@radix-ui/react-context": 1.1.1 - "@radix-ui/react-direction": 1.1.0 - "@radix-ui/react-dismissable-layer": 1.1.1 - "@radix-ui/react-focus-guards": 1.1.1 - "@radix-ui/react-focus-scope": 1.1.0 - "@radix-ui/react-id": 1.1.0 - "@radix-ui/react-popper": 1.2.0 - "@radix-ui/react-portal": 1.1.2 - "@radix-ui/react-primitive": 2.0.0 - "@radix-ui/react-slot": 1.1.0 - "@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.0 - aria-hidden: ^1.1.1 - react-remove-scroll: 2.6.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: cd662a5f0b1cc77dd81df51997ddc1dd47cc0025551e4ffa0c2675c056b3609257096d4f4e27189ddac98771a0191d68323c97d61fa0991d6fae78e708650959 - languageName: node - linkType: hard - "@radix-ui/react-separator@npm:1.0.3": version: 1.0.3 resolution: "@radix-ui/react-separator@npm:1.0.3" @@ -13887,21 +13557,6 @@ __metadata: languageName: node linkType: hard -"@radix-ui/react-use-rect@npm:1.1.0": - version: 1.1.0 - resolution: "@radix-ui/react-use-rect@npm:1.1.0" - dependencies: - "@radix-ui/rect": 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: facc9528af43df3b01952dbb915ff751b5924db2c31d41f053ddea19a7cc5cac5b096c4d7a2059e8f564a3f0d4a95bcd909df8faed52fa01709af27337628e2c - languageName: node - linkType: hard - "@radix-ui/react-use-size@npm:1.0.1": version: 1.0.1 resolution: "@radix-ui/react-use-size@npm:1.0.1" @@ -13993,13 +13648,6 @@ __metadata: languageName: node linkType: hard -"@radix-ui/rect@npm:1.1.0": - version: 1.1.0 - resolution: "@radix-ui/rect@npm:1.1.0" - checksum: 1ad93efbc9fc3b878bae5e8bb26ffa1005235d8b5b9fca8339eb5dbcf7bf53abc9ccd2a8ce128557820168c8600521e48e0ea4dda96aa5f116381f66f46aeda3 - languageName: node - linkType: hard - "@reach/observe-rect@npm:^1.1.0": version: 1.2.0 resolution: "@reach/observe-rect@npm:1.2.0" @@ -17807,13 +17455,6 @@ __metadata: languageName: node linkType: hard -"@types/estree@npm:^1.0.6": - version: 1.0.6 - resolution: "@types/estree@npm:1.0.6" - checksum: 8825d6e729e16445d9a1dd2fb1db2edc5ed400799064cd4d028150701031af012ba30d6d03fe9df40f4d7a437d0de6d2b256020152b7b09bde9f2e420afdffd9 - languageName: node - linkType: hard - "@types/express-jwt@npm:0.0.42": version: 0.0.42 resolution: "@types/express-jwt@npm:0.0.42" @@ -18094,13 +17735,6 @@ __metadata: languageName: node linkType: hard -"@types/json-schema@npm:^7.0.15": - version: 7.0.15 - resolution: "@types/json-schema@npm:7.0.15" - checksum: 97ed0cb44d4070aecea772b7b2e2ed971e10c81ec87dd4ecc160322ffa55ff330dace1793489540e3e318d90942064bb697cc0f8989391797792d919737b3b98 - languageName: node - linkType: hard - "@types/json5@npm:^0.0.29": version: 0.0.29 resolution: "@types/json5@npm:0.0.29" @@ -18922,29 +18556,6 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/eslint-plugin@npm:8.8.1": - version: 8.8.1 - resolution: "@typescript-eslint/eslint-plugin@npm:8.8.1" - dependencies: - "@eslint-community/regexpp": ^4.10.0 - "@typescript-eslint/scope-manager": 8.8.1 - "@typescript-eslint/type-utils": 8.8.1 - "@typescript-eslint/utils": 8.8.1 - "@typescript-eslint/visitor-keys": 8.8.1 - graphemer: ^1.4.0 - ignore: ^5.3.1 - natural-compare: ^1.4.0 - ts-api-utils: ^1.3.0 - peerDependencies: - "@typescript-eslint/parser": ^8.0.0 || ^8.0.0-alpha.0 - eslint: ^8.57.0 || ^9.0.0 - peerDependenciesMeta: - typescript: - optional: true - checksum: 1f68a48a98ccf9a97674a4f58ed43624b9eb57b8d99440ecd35f1dfeeb4905d18bc044bd0857f7dbea354d49562ee66f8639133dc273edfc65d3b34ddd58036d - languageName: node - linkType: hard - "@typescript-eslint/eslint-plugin@npm:^5.52.0": version: 5.52.0 resolution: "@typescript-eslint/eslint-plugin@npm:5.52.0" @@ -18969,24 +18580,6 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/parser@npm:8.8.1": - version: 8.8.1 - resolution: "@typescript-eslint/parser@npm:8.8.1" - dependencies: - "@typescript-eslint/scope-manager": 8.8.1 - "@typescript-eslint/types": 8.8.1 - "@typescript-eslint/typescript-estree": 8.8.1 - "@typescript-eslint/visitor-keys": 8.8.1 - debug: ^4.3.4 - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - peerDependenciesMeta: - typescript: - optional: true - checksum: d3b6d5549533a09826a1b13be281c9af2d222bd41087d9bdafffe6db0cd65c74dba2a799486cb4d42b39c114eee734f989b13966a1d84a42c453701ed4da5095 - languageName: node - linkType: hard - "@typescript-eslint/parser@npm:^5.4.2 || ^6.0.0": version: 6.21.0 resolution: "@typescript-eslint/parser@npm:6.21.0" @@ -19069,16 +18662,6 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/scope-manager@npm:8.8.1": - version: 8.8.1 - resolution: "@typescript-eslint/scope-manager@npm:8.8.1" - dependencies: - "@typescript-eslint/types": 8.8.1 - "@typescript-eslint/visitor-keys": 8.8.1 - checksum: 08527c75ac99192d86e4c93bf3c0628f0ec63f2337a4f7e7f9fab17a6a37b396dc1a3589ea291fcdd0f2c7c0874b4d18e16ace977e16234b4bcc27926796ea4d - languageName: node - linkType: hard - "@typescript-eslint/type-utils@npm:5.52.0": version: 5.52.0 resolution: "@typescript-eslint/type-utils@npm:5.52.0" @@ -19096,21 +18679,6 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/type-utils@npm:8.8.1": - version: 8.8.1 - resolution: "@typescript-eslint/type-utils@npm:8.8.1" - dependencies: - "@typescript-eslint/typescript-estree": 8.8.1 - "@typescript-eslint/utils": 8.8.1 - debug: ^4.3.4 - ts-api-utils: ^1.3.0 - peerDependenciesMeta: - typescript: - optional: true - checksum: 2674288fcf99bda0439ec60b42da8fbc9cc2f827c41bbef7f4687beeb3d24a09fbc50897d7f090743830a00cf4e018a3cec7847842bf58d83b70a42203898278 - languageName: node - linkType: hard - "@typescript-eslint/types@npm:5.48.0": version: 5.48.0 resolution: "@typescript-eslint/types@npm:5.48.0" @@ -19139,13 +18707,6 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/types@npm:8.8.1": - version: 8.8.1 - resolution: "@typescript-eslint/types@npm:8.8.1" - checksum: 271d0dc55743d63e038c1476b47aee28db96029138bd1ace5cd16a12e1c32819b3fa0e53a9a26fd548e463ed6cdb3caf4dfd643cb7c7fc2004a624efd6e9d17e - languageName: node - linkType: hard - "@typescript-eslint/typescript-estree@npm:5.48.0": version: 5.48.0 resolution: "@typescript-eslint/typescript-estree@npm:5.48.0" @@ -19219,25 +18780,6 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/typescript-estree@npm:8.8.1": - version: 8.8.1 - resolution: "@typescript-eslint/typescript-estree@npm:8.8.1" - dependencies: - "@typescript-eslint/types": 8.8.1 - "@typescript-eslint/visitor-keys": 8.8.1 - debug: ^4.3.4 - fast-glob: ^3.3.2 - is-glob: ^4.0.3 - minimatch: ^9.0.4 - semver: ^7.6.0 - ts-api-utils: ^1.3.0 - peerDependenciesMeta: - typescript: - optional: true - checksum: 893795fd562da8babcf6eca36e1ea1a39920200dbd15e826120a3482458be6648f0d138c71c4c840aded0feb7528272c0b9033d57fba978756a6d2730cec5ca6 - languageName: node - linkType: hard - "@typescript-eslint/utils@npm:5.52.0, @typescript-eslint/utils@npm:^5.52.0": version: 5.52.0 resolution: "@typescript-eslint/utils@npm:5.52.0" @@ -19256,20 +18798,6 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/utils@npm:8.8.1": - version: 8.8.1 - resolution: "@typescript-eslint/utils@npm:8.8.1" - dependencies: - "@eslint-community/eslint-utils": ^4.4.0 - "@typescript-eslint/scope-manager": 8.8.1 - "@typescript-eslint/types": 8.8.1 - "@typescript-eslint/typescript-estree": 8.8.1 - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - checksum: cf31d18edb646f6c864239f591fcff322ae315c27337d2f07f71f1a859e58102467923810ef165acc6fb147be857b319087fb82622d93c9ca49042872f576f80 - languageName: node - linkType: hard - "@typescript-eslint/visitor-keys@npm:5.48.0": version: 5.48.0 resolution: "@typescript-eslint/visitor-keys@npm:5.48.0" @@ -19310,16 +18838,6 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/visitor-keys@npm:8.8.1": - version: 8.8.1 - resolution: "@typescript-eslint/visitor-keys@npm:8.8.1" - dependencies: - "@typescript-eslint/types": 8.8.1 - eslint-visitor-keys: ^3.4.3 - checksum: c5861ae79fb3f190e7882dcdf7735799249c73804f0e52e2ac5a5000bc33cbc44c4e3a0800db7aa8d5ee5c43393495eec7a7c7c963ceafc122e8472b479b32f5 - languageName: node - linkType: hard - "@ungap/structured-clone@npm:^1.0.0, @ungap/structured-clone@npm:^1.2.0": version: 1.2.0 resolution: "@ungap/structured-clone@npm:1.2.0" @@ -20012,6 +19530,13 @@ __metadata: languageName: node linkType: hard +"abbrev@npm:^2.0.0": + version: 2.0.0 + resolution: "abbrev@npm:2.0.0" + checksum: 0e994ad2aa6575f94670d8a2149afe94465de9cedaaaac364e7fb43a40c3691c980ff74899f682f4ca58fa96b4cbd7421a015d3a6defe43a442117d7821a2f36 + languageName: node + linkType: hard + "abort-controller@npm:^3.0.0": version: 3.0.0 resolution: "abort-controller@npm:3.0.0" @@ -20124,15 +19649,6 @@ __metadata: languageName: node linkType: hard -"acorn@npm:^8.12.0": - version: 8.12.1 - resolution: "acorn@npm:8.12.1" - bin: - acorn: bin/acorn - checksum: 677880034aee5bdf7434cc2d25b641d7bedb0b5ef47868a78dadabedccf58e1c5457526d9d8249cd253f2df087e081c3fe7d903b448d8e19e5131a3065b83c07 - languageName: node - linkType: hard - "acorn@npm:^8.5.0": version: 8.7.1 resolution: "acorn@npm:8.7.1" @@ -20211,6 +19727,15 @@ __metadata: languageName: node linkType: hard +"agent-base@npm:^7.1.1": + version: 7.1.1 + resolution: "agent-base@npm:7.1.1" + dependencies: + debug: ^4.3.4 + checksum: 51c158769c5c051482f9ca2e6e1ec085ac72b5a418a9b31b4e82fe6c0a6699adb94c1c42d246699a587b3335215037091c79e0de512c516f73b6ea844202f037 + languageName: node + linkType: hard + "agentkeepalive@npm:^4.2.1": version: 4.3.0 resolution: "agentkeepalive@npm:4.3.0" @@ -20728,20 +20253,6 @@ __metadata: languageName: node linkType: hard -"array-includes@npm:^3.1.8": - version: 3.1.8 - resolution: "array-includes@npm:3.1.8" - dependencies: - call-bind: ^1.0.7 - define-properties: ^1.2.1 - es-abstract: ^1.23.2 - es-object-atoms: ^1.0.0 - get-intrinsic: ^1.2.4 - is-string: ^1.0.7 - checksum: eb39ba5530f64e4d8acab39297c11c1c5be2a4ea188ab2b34aba5fb7224d918f77717a9d57a3e2900caaa8440e59431bdaf5c974d5212ef65d97f132e38e2d91 - languageName: node - linkType: hard - "array-timsort@npm:^1.0.3": version: 1.0.3 resolution: "array-timsort@npm:1.0.3" @@ -20782,20 +20293,6 @@ __metadata: languageName: node linkType: hard -"array.prototype.findlast@npm:^1.2.5": - version: 1.2.5 - resolution: "array.prototype.findlast@npm:1.2.5" - dependencies: - call-bind: ^1.0.7 - define-properties: ^1.2.1 - es-abstract: ^1.23.2 - es-errors: ^1.3.0 - es-object-atoms: ^1.0.0 - es-shim-unscopables: ^1.0.2 - checksum: 83ce4ad95bae07f136d316f5a7c3a5b911ac3296c3476abe60225bc4a17938bf37541972fcc37dd5adbc99cbb9c928c70bbbfc1c1ce549d41a415144030bb446 - languageName: node - linkType: hard - "array.prototype.findlastindex@npm:^1.2.3": version: 1.2.4 resolution: "array.prototype.findlastindex@npm:1.2.4" @@ -20932,19 +20429,6 @@ __metadata: languageName: node linkType: hard -"array.prototype.tosorted@npm:^1.1.4": - version: 1.1.4 - resolution: "array.prototype.tosorted@npm:1.1.4" - dependencies: - call-bind: ^1.0.7 - define-properties: ^1.2.1 - es-abstract: ^1.23.3 - es-errors: ^1.3.0 - es-shim-unscopables: ^1.0.2 - checksum: e4142d6f556bcbb4f393c02e7dbaea9af8f620c040450c2be137c9cbbd1a17f216b9c688c5f2c08fbb038ab83f55993fa6efdd9a05881d84693c7bcb5422127a - languageName: node - linkType: hard - "arraybuffer.prototype.slice@npm:^1.0.2": version: 1.0.2 resolution: "arraybuffer.prototype.slice@npm:1.0.2" @@ -22373,6 +21857,26 @@ __metadata: languageName: node linkType: hard +"cacache@npm:^18.0.0": + version: 18.0.4 + resolution: "cacache@npm:18.0.4" + dependencies: + "@npmcli/fs": ^3.1.0 + fs-minipass: ^3.0.0 + glob: ^10.2.2 + lru-cache: ^10.0.1 + minipass: ^7.0.3 + minipass-collect: ^2.0.1 + minipass-flush: ^1.0.5 + minipass-pipeline: ^1.2.4 + p-map: ^4.0.0 + ssri: ^10.0.0 + tar: ^6.1.11 + unique-filename: ^3.0.0 + checksum: b7422c113b4ec750f33beeca0f426a0024c28e3172f332218f48f963e5b970647fa1ac05679fe5bb448832c51efea9fda4456b9a95c3a1af1105fe6c1833cde2 + languageName: node + linkType: hard + "cacheable-lookup@npm:^5.0.3": version: 5.0.4 resolution: "cacheable-lookup@npm:5.0.4" @@ -22446,6 +21950,7 @@ __metadata: lint-staged: ^12.5.0 mailhog: ^4.16.0 next-router-mock: ^0.9.12 + node-gyp: ^10.2.0 node-ical: ^0.16.1 prettier: ^2.8.6 prismock: ^1.21.1 @@ -22676,15 +22181,6 @@ __metadata: languageName: node linkType: hard -"castable-video@npm:~1.1.0": - version: 1.1.0 - resolution: "castable-video@npm:1.1.0" - dependencies: - custom-media-element: ~1.3.2 - checksum: 0b7280140e2e855f66ad824c8352d8422695f3a0195757341e8c0b5828df9c0279af70154d7ef514e9d7849814b74625c4df7a652853bd624ecb205a232c295e - languageName: node - linkType: hard - "ccount@npm:^2.0.0": version: 2.0.1 resolution: "ccount@npm:2.0.1" @@ -23145,15 +22641,6 @@ __metadata: languageName: node linkType: hard -"class-variance-authority@npm:^0.7.0": - version: 0.7.0 - resolution: "class-variance-authority@npm:0.7.0" - dependencies: - clsx: 2.0.0 - checksum: e7fd1fab433ef06f52a1b7b241b70b4a185864deef199d3b0a2c3412f1cc179517288264c383f3b971a00d76811625fc8f7ffe709e6170219e88cd7368f08a20 - languageName: node - linkType: hard - "classnames@npm:^2.2.5, classnames@npm:^2.2.6": version: 2.3.2 resolution: "classnames@npm:2.3.2" @@ -23426,13 +22913,6 @@ __metadata: languageName: node linkType: hard -"clsx@npm:2.0.0": - version: 2.0.0 - resolution: "clsx@npm:2.0.0" - checksum: a2cfb2351b254611acf92faa0daf15220f4cd648bdf96ce369d729813b85336993871a4bf6978ddea2b81b5a130478339c20d9d0b5c6fc287e5147f0c059276e - languageName: node - linkType: hard - "clsx@npm:^1.1.1": version: 1.1.1 resolution: "clsx@npm:1.1.1" @@ -24750,13 +24230,6 @@ __metadata: languageName: node linkType: hard -"custom-media-element@npm:~1.3.1, custom-media-element@npm:~1.3.2": - version: 1.3.2 - resolution: "custom-media-element@npm:1.3.2" - checksum: 9ec2ff88c3c5ba7d20b9484c0359b4cfe08ad6804f3116934ffbae2f2e0e04d2a832beb6f0bec56027a969ab366727d217406f750890613c988de6de5330cb4f - languageName: node - linkType: hard - "d3-array@npm:2 - 3, d3-array@npm:2.10.0 - 3, d3-array@npm:^3.1.6": version: 3.2.3 resolution: "d3-array@npm:3.2.3" @@ -26048,34 +25521,6 @@ __metadata: languageName: node linkType: hard -"embla-carousel-react@npm:^8.1.8": - version: 8.3.0 - resolution: "embla-carousel-react@npm:8.3.0" - dependencies: - embla-carousel: 8.3.0 - embla-carousel-reactive-utils: 8.3.0 - peerDependencies: - react: ^16.8.0 || ^17.0.1 || ^18.0.0 - checksum: 414bf10ea5b983fdf2f64aeb7806ebaf69b2790617c8ff13b13e7bb6cc4671f243544a786fc6be33dde18965513402e4c4d78474ca928f4031af7db9e276be26 - languageName: node - linkType: hard - -"embla-carousel-reactive-utils@npm:8.3.0": - version: 8.3.0 - resolution: "embla-carousel-reactive-utils@npm:8.3.0" - peerDependencies: - embla-carousel: 8.3.0 - checksum: 687eb69c5db4bf1c9fc09090ea4441e60ab94dd04de7b8e69139eff26fed3d9ba62e6804cc1c44616838c14924fe1b07e31864222a6106365c7129fd95d7d741 - languageName: node - linkType: hard - -"embla-carousel@npm:8.3.0": - version: 8.3.0 - resolution: "embla-carousel@npm:8.3.0" - checksum: c2d3c89c93e105133e6931dfdba5899f44f01b32ea0fa331999030150819a2a51c4699df49b69540bc935b63def219f7484f6ca363becaacaf7609e863e39b72 - languageName: node - linkType: hard - "emittery@npm:^0.13.1": version: 0.13.1 resolution: "emittery@npm:0.13.1" @@ -26335,60 +25780,6 @@ __metadata: languageName: node linkType: hard -"es-abstract@npm:^1.17.5, es-abstract@npm:^1.23.3": - version: 1.23.3 - resolution: "es-abstract@npm:1.23.3" - dependencies: - array-buffer-byte-length: ^1.0.1 - arraybuffer.prototype.slice: ^1.0.3 - available-typed-arrays: ^1.0.7 - call-bind: ^1.0.7 - data-view-buffer: ^1.0.1 - data-view-byte-length: ^1.0.1 - data-view-byte-offset: ^1.0.0 - es-define-property: ^1.0.0 - es-errors: ^1.3.0 - es-object-atoms: ^1.0.0 - es-set-tostringtag: ^2.0.3 - es-to-primitive: ^1.2.1 - function.prototype.name: ^1.1.6 - get-intrinsic: ^1.2.4 - get-symbol-description: ^1.0.2 - globalthis: ^1.0.3 - gopd: ^1.0.1 - has-property-descriptors: ^1.0.2 - has-proto: ^1.0.3 - has-symbols: ^1.0.3 - hasown: ^2.0.2 - internal-slot: ^1.0.7 - is-array-buffer: ^3.0.4 - is-callable: ^1.2.7 - is-data-view: ^1.0.1 - is-negative-zero: ^2.0.3 - is-regex: ^1.1.4 - is-shared-array-buffer: ^1.0.3 - is-string: ^1.0.7 - is-typed-array: ^1.1.13 - is-weakref: ^1.0.2 - object-inspect: ^1.13.1 - object-keys: ^1.1.1 - object.assign: ^4.1.5 - regexp.prototype.flags: ^1.5.2 - safe-array-concat: ^1.1.2 - safe-regex-test: ^1.0.3 - string.prototype.trim: ^1.2.9 - string.prototype.trimend: ^1.0.8 - string.prototype.trimstart: ^1.0.8 - typed-array-buffer: ^1.0.2 - typed-array-byte-length: ^1.0.1 - typed-array-byte-offset: ^1.0.2 - typed-array-length: ^1.0.6 - unbox-primitive: ^1.0.2 - which-typed-array: ^1.1.15 - checksum: f840cf161224252512f9527306b57117192696571e07920f777cb893454e32999206198b4f075516112af6459daca282826d1735c450528470356d09eff3a9ae - languageName: node - linkType: hard - "es-abstract@npm:^1.19.0, es-abstract@npm:^1.19.1": version: 1.19.2 resolution: "es-abstract@npm:1.19.2" @@ -26713,28 +26104,6 @@ __metadata: languageName: node linkType: hard -"es-iterator-helpers@npm:^1.0.19": - version: 1.1.0 - resolution: "es-iterator-helpers@npm:1.1.0" - dependencies: - call-bind: ^1.0.7 - define-properties: ^1.2.1 - es-abstract: ^1.23.3 - es-errors: ^1.3.0 - es-set-tostringtag: ^2.0.3 - function-bind: ^1.1.2 - get-intrinsic: ^1.2.4 - globalthis: ^1.0.4 - has-property-descriptors: ^1.0.2 - has-proto: ^1.0.3 - has-symbols: ^1.0.3 - internal-slot: ^1.0.7 - iterator.prototype: ^1.1.3 - safe-array-concat: ^1.1.2 - checksum: 4ba3a32ab7ba05b85f0ae30604feeb8ffd801fe762e9df9577bd220a96b9eaa2e90af8e6bdc498e523051f293955e2f7d2bddd34de71e1428a1b8ff3fd961016 - languageName: node - linkType: hard - "es-module-lexer@npm:^1.2.1, es-module-lexer@npm:^1.4.1": version: 1.4.1 resolution: "es-module-lexer@npm:1.4.1" @@ -27494,34 +26863,6 @@ __metadata: languageName: node linkType: hard -"eslint-plugin-react@npm:^7.35.0": - version: 7.37.1 - resolution: "eslint-plugin-react@npm:7.37.1" - dependencies: - array-includes: ^3.1.8 - array.prototype.findlast: ^1.2.5 - array.prototype.flatmap: ^1.3.2 - array.prototype.tosorted: ^1.1.4 - doctrine: ^2.1.0 - es-iterator-helpers: ^1.0.19 - estraverse: ^5.3.0 - hasown: ^2.0.2 - jsx-ast-utils: ^2.4.1 || ^3.0.0 - minimatch: ^3.1.2 - object.entries: ^1.1.8 - object.fromentries: ^2.0.8 - object.values: ^1.2.0 - prop-types: ^15.8.1 - resolve: ^2.0.0-next.5 - semver: ^6.3.1 - string.prototype.matchall: ^4.0.11 - string.prototype.repeat: ^1.0.0 - peerDependencies: - eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7 - checksum: 22d1bdf0dd4cdbf8c57ce563c58d43c5f5e1da0b08d27d0a69d7126d9e8afcb74a5befae97dab4019b4c6029ae617b6a0af1709cb9e0439d5757b01b392d2ca7 - languageName: node - linkType: hard - "eslint-plugin-turbo@npm:0.0.7": version: 0.0.7 resolution: "eslint-plugin-turbo@npm:0.0.7" @@ -27592,16 +26933,6 @@ __metadata: languageName: node linkType: hard -"eslint-scope@npm:^8.1.0": - version: 8.1.0 - resolution: "eslint-scope@npm:8.1.0" - dependencies: - esrecurse: ^4.3.0 - estraverse: ^5.2.0 - checksum: 3ce9392ec74f35f84eddad7755941cb5f7e3a1bc53cf902e95e541384ef78b604bec1489933f37c663e4686b36c31533d06cf0842be9a729a680c489efce7acb - languageName: node - linkType: hard - "eslint-utils@npm:^3.0.0": version: 3.0.0 resolution: "eslint-utils@npm:3.0.0" @@ -27634,13 +26965,6 @@ __metadata: languageName: node linkType: hard -"eslint-visitor-keys@npm:^4.1.0": - version: 4.1.0 - resolution: "eslint-visitor-keys@npm:4.1.0" - checksum: b5d53725df14a6a225fd74d5e687f5f0547b0aaa3e1963ab6f4acb8dc80f99ad0bec11148e14b4a67de024dde7b4449e7e4c0b1524de605955dee7eefcdd7824 - languageName: node - linkType: hard - "eslint@npm:^8": version: 8.57.0 resolution: "eslint@npm:8.57.0" @@ -27738,56 +27062,6 @@ __metadata: languageName: node linkType: hard -"eslint@npm:^9.9.0": - version: 9.12.0 - resolution: "eslint@npm:9.12.0" - dependencies: - "@eslint-community/eslint-utils": ^4.2.0 - "@eslint-community/regexpp": ^4.11.0 - "@eslint/config-array": ^0.18.0 - "@eslint/core": ^0.6.0 - "@eslint/eslintrc": ^3.1.0 - "@eslint/js": 9.12.0 - "@eslint/plugin-kit": ^0.2.0 - "@humanfs/node": ^0.16.5 - "@humanwhocodes/module-importer": ^1.0.1 - "@humanwhocodes/retry": ^0.3.1 - "@types/estree": ^1.0.6 - "@types/json-schema": ^7.0.15 - ajv: ^6.12.4 - chalk: ^4.0.0 - cross-spawn: ^7.0.2 - debug: ^4.3.2 - escape-string-regexp: ^4.0.0 - eslint-scope: ^8.1.0 - eslint-visitor-keys: ^4.1.0 - espree: ^10.2.0 - esquery: ^1.5.0 - esutils: ^2.0.2 - fast-deep-equal: ^3.1.3 - file-entry-cache: ^8.0.0 - find-up: ^5.0.0 - glob-parent: ^6.0.2 - ignore: ^5.2.0 - imurmurhash: ^0.1.4 - is-glob: ^4.0.0 - json-stable-stringify-without-jsonify: ^1.0.1 - lodash.merge: ^4.6.2 - minimatch: ^3.1.2 - natural-compare: ^1.4.0 - optionator: ^0.9.3 - text-table: ^0.2.0 - peerDependencies: - jiti: "*" - peerDependenciesMeta: - jiti: - optional: true - bin: - eslint: bin/eslint.js - checksum: cf0dbe242268ede8cc13c04566973077c4feea21cf94a2eacba7ad43f566b2dee0d8f1af32ccb46d30dbcd78a7274828199b8aa9a7b1c708d7a71085b686385c - languageName: node - linkType: hard - "esm@npm:^3.2.25": version: 3.2.25 resolution: "esm@npm:3.2.25" @@ -27795,17 +27069,6 @@ __metadata: languageName: node linkType: hard -"espree@npm:^10.0.1, espree@npm:^10.2.0": - version: 10.2.0 - resolution: "espree@npm:10.2.0" - dependencies: - acorn: ^8.12.0 - acorn-jsx: ^5.3.2 - eslint-visitor-keys: ^4.1.0 - checksum: 16ee75c2f6029622a70a675ad8989fffc6f7199265d07af516a11e4adc9eb2d03866fceff33f1a081c42621df79871e508f8fc8fe5855eac2de925b58196711b - languageName: node - linkType: hard - "espree@npm:^9.4.0": version: 9.4.1 resolution: "espree@npm:9.4.1" @@ -27856,15 +27119,6 @@ __metadata: languageName: node linkType: hard -"esquery@npm:^1.5.0": - version: 1.6.0 - resolution: "esquery@npm:1.6.0" - dependencies: - estraverse: ^5.1.0 - checksum: 08ec4fe446d9ab27186da274d979558557fbdbbd10968fa9758552482720c54152a5640e08b9009e5a30706b66aba510692054d4129d32d0e12e05bbc0b96fb2 - languageName: node - linkType: hard - "esrecurse@npm:^4.3.0": version: 4.3.0 resolution: "esrecurse@npm:4.3.0" @@ -28108,6 +27362,13 @@ __metadata: languageName: node linkType: hard +"exponential-backoff@npm:^3.1.1": + version: 3.1.1 + resolution: "exponential-backoff@npm:3.1.1" + checksum: 3d21519a4f8207c99f7457287291316306255a328770d320b401114ec8481986e4e467e854cb9914dd965e0a1ca810a23ccb559c642c88f4c7f55c55778a9b48 + languageName: node + linkType: hard + "express@npm:4.18.2, express@npm:^4.17.3": version: 4.18.2 resolution: "express@npm:4.18.2" @@ -28626,15 +27887,6 @@ __metadata: languageName: node linkType: hard -"file-entry-cache@npm:^8.0.0": - version: 8.0.0 - resolution: "file-entry-cache@npm:8.0.0" - dependencies: - flat-cache: ^4.0.0 - checksum: f67802d3334809048c69b3d458f672e1b6d26daefda701761c81f203b80149c35dea04d78ea4238969dd617678e530876722a0634c43031a0957f10cc3ed190f - languageName: node - linkType: hard - "file-system-cache@npm:2.3.0": version: 2.3.0 resolution: "file-system-cache@npm:2.3.0" @@ -28831,16 +28083,6 @@ __metadata: languageName: node linkType: hard -"flat-cache@npm:^4.0.0": - version: 4.0.1 - resolution: "flat-cache@npm:4.0.1" - dependencies: - flatted: ^3.2.9 - keyv: ^4.5.4 - checksum: 899fc86bf6df093547d76e7bfaeb900824b869d7d457d02e9b8aae24836f0a99fbad79328cfd6415ee8908f180699bf259dc7614f793447cb14f707caf5996f6 - languageName: node - linkType: hard - "flatted@npm:^3.1.0": version: 3.2.5 resolution: "flatted@npm:3.2.5" @@ -28848,7 +28090,7 @@ __metadata: languageName: node linkType: hard -"flatted@npm:^3.2.9, flatted@npm:^3.3.1": +"flatted@npm:^3.3.1": version: 3.3.1 resolution: "flatted@npm:3.3.1" checksum: 85ae7181650bb728c221e7644cbc9f4bf28bc556f2fc89bb21266962bdf0ce1029cc7acc44bb646cd469d9baac7c317f64e841c4c4c00516afa97320cdac7f94 @@ -29199,26 +28441,6 @@ __metadata: languageName: node linkType: hard -"framer-motion@npm:^11.0.25": - version: 11.11.7 - resolution: "framer-motion@npm:11.11.7" - dependencies: - tslib: ^2.4.0 - peerDependencies: - "@emotion/is-prop-valid": "*" - react: ^18.0.0 - react-dom: ^18.0.0 - peerDependenciesMeta: - "@emotion/is-prop-valid": - optional: true - react: - optional: true - react-dom: - optional: true - checksum: dc8d97a75c15a785238d78e5c2e6a405c7d9c6b88aee04f94e944cfaee34f247241ff3ad9eb05ceca16add095c618665a6e7a2b4820c8c34c51ad3bcb6c6955b - languageName: node - linkType: hard - "fresh@npm:0.5.2, fresh@npm:^0.5.2": version: 0.5.2 resolution: "fresh@npm:0.5.2" @@ -29325,6 +28547,15 @@ __metadata: languageName: node linkType: hard +"fs-minipass@npm:^3.0.0": + version: 3.0.3 + resolution: "fs-minipass@npm:3.0.3" + dependencies: + minipass: ^7.0.3 + checksum: 8722a41109130851d979222d3ec88aabaceeaaf8f57b2a8f744ef8bd2d1ce95453b04a61daa0078822bc5cd21e008814f06fe6586f56fef511e71b8d2394d802 + languageName: node + linkType: hard + "fs-monkey@npm:^1.0.4": version: 1.0.5 resolution: "fs-monkey@npm:1.0.5" @@ -29899,6 +29130,22 @@ __metadata: languageName: node linkType: hard +"glob@npm:^10.2.2": + version: 10.4.5 + resolution: "glob@npm:10.4.5" + dependencies: + foreground-child: ^3.1.0 + jackspeak: ^3.1.2 + minimatch: ^9.0.4 + minipass: ^7.1.2 + package-json-from-dist: ^1.0.0 + path-scurry: ^1.11.1 + bin: + glob: dist/esm/bin.mjs + checksum: 0bc725de5e4862f9f387fd0f2b274baf16850dcd2714502ccf471ee401803997983e2c05590cb65f9675a3c6f2a58e7a53f9e365704108c6ad3cbf1d60934c4a + languageName: node + linkType: hard + "glob@npm:^7.0.0, glob@npm:^7.1.1, glob@npm:^7.2.3": version: 7.2.3 resolution: "glob@npm:7.2.3" @@ -29987,20 +29234,6 @@ __metadata: languageName: node linkType: hard -"globals@npm:^14.0.0": - version: 14.0.0 - resolution: "globals@npm:14.0.0" - checksum: 534b8216736a5425737f59f6e6a5c7f386254560c9f41d24a9227d60ee3ad4a9e82c5b85def0e212e9d92162f83a92544be4c7fd4c902cb913736c10e08237ac - languageName: node - linkType: hard - -"globals@npm:^15.9.0": - version: 15.11.0 - resolution: "globals@npm:15.11.0" - checksum: ef32d5ef987f3d4b47fc2e389a0b235f6a46f605160c4e405722fd7b576106ca407cb867e66fd1e0fc43b631800e2e2e71847f37691026d813f96f40339da702 - languageName: node - linkType: hard - "globalthis@npm:^1.0.3": version: 1.0.3 resolution: "globalthis@npm:1.0.3" @@ -30010,16 +29243,6 @@ __metadata: languageName: node linkType: hard -"globalthis@npm:^1.0.4": - version: 1.0.4 - resolution: "globalthis@npm:1.0.4" - dependencies: - define-properties: ^1.2.1 - gopd: ^1.0.1 - checksum: 39ad667ad9f01476474633a1834a70842041f70a55571e8dcef5fb957980a92da5022db5430fca8aecc5d47704ae30618c0bc877a579c70710c904e9ef06108a - languageName: node - linkType: hard - "globalyzer@npm:0.1.0": version: 0.1.0 resolution: "globalyzer@npm:0.1.0" @@ -30918,13 +30141,6 @@ __metadata: languageName: node linkType: hard -"hls.js@npm:~1.5.11": - version: 1.5.16 - resolution: "hls.js@npm:1.5.16" - checksum: 0121feee70837006f75c6e7a42dbfff63fe83b85a932fb8c9b4f186098f1cd0d72868dd1e5cd168e797e4e92a4afc889f8efb141fd2de8b35c98f9fa29340a39 - languageName: node - linkType: hard - "hmac-drbg@npm:^1.0.1": version: 1.0.1 resolution: "hmac-drbg@npm:1.0.1" @@ -31546,13 +30762,6 @@ __metadata: languageName: node linkType: hard -"ignore@npm:^5.3.1": - version: 5.3.2 - resolution: "ignore@npm:5.3.2" - checksum: 2acfd32a573260ea522ea0bfeff880af426d68f6831f973129e2ba7363f422923cf53aab62f8369cbf4667c7b25b6f8a3761b34ecdb284ea18e87a5262a865be - languageName: node - linkType: hard - "image-q@npm:^4.0.0": version: 4.0.0 resolution: "image-q@npm:4.0.0" @@ -33031,6 +32240,13 @@ __metadata: languageName: node linkType: hard +"isexe@npm:^3.1.1": + version: 3.1.1 + resolution: "isexe@npm:3.1.1" + checksum: 7fe1931ee4e88eb5aa524cd3ceb8c882537bc3a81b02e438b240e47012eef49c86904d0f0e593ea7c3a9996d18d0f1f3be8d3eaa92333977b0c3a9d353d5563e + languageName: node + linkType: hard + "isobject@npm:^3.0.1": version: 3.0.1 resolution: "isobject@npm:3.0.1" @@ -33193,19 +32409,6 @@ __metadata: languageName: node linkType: hard -"iterator.prototype@npm:^1.1.3": - version: 1.1.3 - resolution: "iterator.prototype@npm:1.1.3" - dependencies: - define-properties: ^1.2.1 - get-intrinsic: ^1.2.1 - has-symbols: ^1.0.3 - reflect.getprototypeof: ^1.0.4 - set-function-name: ^2.0.1 - checksum: 7d2a1f8bcbba7b76f72e956faaf7b25405f4de54430c9d099992e6fb9d571717c3044604e8cdfb8e624cb881337d648030ee8b1541d544af8b338835e3f47ebe - languageName: node - linkType: hard - "jackspeak@npm:^2.0.3, jackspeak@npm:^2.3.5": version: 2.3.6 resolution: "jackspeak@npm:2.3.6" @@ -33219,6 +32422,19 @@ __metadata: languageName: node linkType: hard +"jackspeak@npm:^3.1.2": + version: 3.4.3 + resolution: "jackspeak@npm:3.4.3" + dependencies: + "@isaacs/cliui": ^8.0.2 + "@pkgjs/parseargs": ^0.11.0 + dependenciesMeta: + "@pkgjs/parseargs": + optional: true + checksum: be31027fc72e7cc726206b9f560395604b82e0fddb46c4cbf9f97d049bcef607491a5afc0699612eaa4213ca5be8fd3e1e7cd187b3040988b65c9489838a7c00 + languageName: node + linkType: hard + "jake@npm:^10.8.5": version: 10.8.7 resolution: "jake@npm:10.8.7" @@ -34436,7 +33652,7 @@ __metadata: languageName: node linkType: hard -"keyv@npm:^4.0.0, keyv@npm:^4.5.3, keyv@npm:^4.5.4": +"keyv@npm:^4.0.0, keyv@npm:^4.5.3": version: 4.5.4 resolution: "keyv@npm:4.5.4" dependencies: @@ -35394,6 +34610,13 @@ __metadata: languageName: node linkType: hard +"lru-cache@npm:^10.0.1, lru-cache@npm:^10.2.0": + version: 10.4.3 + resolution: "lru-cache@npm:10.4.3" + checksum: 6476138d2125387a6d20f100608c2583d415a4f64a0fecf30c9e2dda976614f09cad4baa0842447bd37dd459a7bd27f57d9d8f8ce558805abd487c583f3d774a + languageName: node + linkType: hard + "lru-cache@npm:^4.0.1": version: 4.1.5 resolution: "lru-cache@npm:4.1.5" @@ -35484,12 +34707,12 @@ __metadata: languageName: node linkType: hard -"lucide-react@npm:^0.364.0": - version: 0.364.0 - resolution: "lucide-react@npm:0.364.0" +"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: 954f6274df46ffa172130d9e60eb630a377435c7dbf0ddb5ceebf284602dde3b99755dcd5c0757e697ee734a32c808a3cd2c25ad88fec1d8f627a2317f00e3e6 + checksum: 768ffe368c52a518ee339203d86ff4479989ab4d79c0716f721900c4bb7392ef6ff7a14807f6a685abd74d27f4c1778170bff77a0ab4c3e06c17944b557d8300 languageName: node linkType: hard @@ -35685,6 +34908,26 @@ __metadata: languageName: node linkType: hard +"make-fetch-happen@npm:^13.0.0": + version: 13.0.1 + resolution: "make-fetch-happen@npm:13.0.1" + dependencies: + "@npmcli/agent": ^2.0.0 + cacache: ^18.0.0 + http-cache-semantics: ^4.1.1 + is-lambda: ^1.0.1 + minipass: ^7.0.2 + minipass-fetch: ^3.0.0 + minipass-flush: ^1.0.5 + minipass-pipeline: ^1.2.4 + negotiator: ^0.6.3 + proc-log: ^4.2.0 + promise-retry: ^2.0.1 + ssri: ^10.0.0 + checksum: 5c9fad695579b79488fa100da05777213dd9365222f85e4757630f8dd2a21a79ddd3206c78cfd6f9b37346819681782b67900ac847a57cf04190f52dda5343fd + languageName: node + linkType: hard + "makeerror@npm:1.0.12": version: 1.0.12 resolution: "makeerror@npm:1.0.12" @@ -36020,27 +35263,6 @@ __metadata: languageName: node linkType: hard -"media-chrome@npm:^4.1.0": - version: 4.2.0 - resolution: "media-chrome@npm:4.2.0" - checksum: 16a60926adb5e29ba1da3114af72bf842d6187620239e6a4c0a249c15dc09413c85171a5658a28f80c44d19f0c534855931b4d9fba2477803f373e97e578a324 - languageName: node - linkType: hard - -"media-chrome@npm:~4.1.1": - version: 4.1.5 - resolution: "media-chrome@npm:4.1.5" - checksum: 50ba8416f5e6f35dc22f2c30d102a2a8659f7b888919392d511be80e2cd0dd097b0e9eb339ec21d4f6f9ced6d2c81a91c130419977d42b1b928e7e93c9d2ceb1 - languageName: node - linkType: hard - -"media-tracks@npm:~0.3.2": - version: 0.3.3 - resolution: "media-tracks@npm:0.3.3" - checksum: 4795af3f171d7ad3a68d1ac1c1e8166a735244fe57d3fc0ec53b1c7410799e524756fc0bfb389632aebb148436b03baade36ca34a3f5377776c3968f6d2cc580 - languageName: node - linkType: hard - "media-typer@npm:0.3.0": version: 0.3.0 resolution: "media-typer@npm:0.3.0" @@ -36888,6 +36110,15 @@ __metadata: languageName: node linkType: hard +"minipass-collect@npm:^2.0.1": + version: 2.0.1 + resolution: "minipass-collect@npm:2.0.1" + dependencies: + minipass: ^7.0.3 + checksum: b251bceea62090f67a6cced7a446a36f4cd61ee2d5cea9aee7fff79ba8030e416327a1c5aa2908dc22629d06214b46d88fdab8c51ac76bacbf5703851b5ad342 + languageName: node + linkType: hard + "minipass-fetch@npm:^2.0.3": version: 2.1.2 resolution: "minipass-fetch@npm:2.1.2" @@ -36903,6 +36134,21 @@ __metadata: languageName: node linkType: hard +"minipass-fetch@npm:^3.0.0": + version: 3.0.5 + resolution: "minipass-fetch@npm:3.0.5" + dependencies: + encoding: ^0.1.13 + minipass: ^7.0.3 + minipass-sized: ^1.0.3 + minizlib: ^2.1.2 + dependenciesMeta: + encoding: + optional: true + checksum: 8047d273236157aab27ab7cd8eab7ea79e6ecd63e8f80c3366ec076cb9a0fed550a6935bab51764369027c414647fd8256c2a20c5445fb250c483de43350de83 + languageName: node + linkType: hard + "minipass-flush@npm:^1.0.5": version: 1.0.5 resolution: "minipass-flush@npm:1.0.5" @@ -36983,6 +36229,13 @@ __metadata: languageName: node linkType: hard +"minipass@npm:^7.0.2, minipass@npm:^7.0.3, minipass@npm:^7.1.2": + version: 7.1.2 + resolution: "minipass@npm:7.1.2" + checksum: 2bfd325b95c555f2b4d2814d49325691c7bee937d753814861b0b49d5edcda55cbbf22b6b6a60bb91eddac8668771f03c5ff647dcd9d0f798e9548b9cdc46ee3 + languageName: node + linkType: hard + "minizlib@npm:^2.1.1, minizlib@npm:^2.1.2": version: 2.1.2 resolution: "minizlib@npm:2.1.2" @@ -37382,13 +36635,6 @@ __metadata: languageName: node linkType: hard -"mux-embed@npm:^5.3.0": - version: 5.3.2 - resolution: "mux-embed@npm:5.3.2" - checksum: e56dd70b22916c106425fa252fe3d0438fe69dc8e3c01628a53cdb0199f406be79be33c8102044d04c9f50e3d533b3ddc615f7f9ab498b291ef21d4f65922e33 - languageName: node - linkType: hard - "mysql2@npm:3.9.1": version: 3.9.1 resolution: "mysql2@npm:3.9.1" @@ -37789,7 +37035,7 @@ __metadata: languageName: node linkType: hard -"next@npm:^13.5.6": +"next@npm:^13.5.4, next@npm:^13.5.6": version: 13.5.7 resolution: "next@npm:13.5.7" dependencies: @@ -38084,6 +37330,26 @@ __metadata: languageName: node linkType: hard +"node-gyp@npm:^10.2.0": + version: 10.2.0 + resolution: "node-gyp@npm:10.2.0" + dependencies: + env-paths: ^2.2.0 + exponential-backoff: ^3.1.1 + glob: ^10.3.10 + graceful-fs: ^4.2.6 + make-fetch-happen: ^13.0.0 + nopt: ^7.0.0 + proc-log: ^4.1.0 + semver: ^7.3.5 + tar: ^6.2.1 + which: ^4.0.0 + bin: + node-gyp: bin/node-gyp.js + checksum: 0233759d8c19765f7fdc259a35eb046ad86c3d09e22f7384613ae2b89647dd27fcf833fdf5293d9335041e91f9b1c539494225959cdb312a5c8080b7534b926f + languageName: node + linkType: hard + "node-gyp@npm:latest": version: 9.3.1 resolution: "node-gyp@npm:9.3.1" @@ -38288,6 +37554,17 @@ __metadata: languageName: node linkType: hard +"nopt@npm:^7.0.0": + version: 7.2.1 + resolution: "nopt@npm:7.2.1" + dependencies: + abbrev: ^2.0.0 + bin: + nopt: bin/nopt.js + checksum: 6fa729cc77ce4162cfad8abbc9ba31d4a0ff6850c3af61d59b505653bef4781ec059f8890ecfe93ee8aa0c511093369cca88bfc998101616a2904e715bbbb7c9 + languageName: node + linkType: hard + "normalize-package-data@npm:^2.3.2, normalize-package-data@npm:^2.5.0": version: 2.5.0 resolution: "normalize-package-data@npm:2.5.0" @@ -38675,17 +37952,6 @@ __metadata: languageName: node linkType: hard -"object.entries@npm:^1.1.8": - version: 1.1.8 - resolution: "object.entries@npm:1.1.8" - dependencies: - call-bind: ^1.0.7 - define-properties: ^1.2.1 - es-object-atoms: ^1.0.0 - checksum: 5314877cb637ef3437a30bba61d9bacdb3ce74bf73ac101518be0633c37840c8cc67407edb341f766e8093b3d7516d5c3358f25adfee4a2c697c0ec4c8491907 - languageName: node - linkType: hard - "object.fromentries@npm:^2.0.5": version: 2.0.5 resolution: "object.fromentries@npm:2.0.5" @@ -38719,18 +37985,6 @@ __metadata: languageName: node linkType: hard -"object.fromentries@npm:^2.0.8": - version: 2.0.8 - resolution: "object.fromentries@npm:2.0.8" - dependencies: - call-bind: ^1.0.7 - define-properties: ^1.2.1 - es-abstract: ^1.23.2 - es-object-atoms: ^1.0.0 - checksum: 29b2207a2db2782d7ced83f93b3ff5d425f901945f3665ffda1821e30a7253cd1fd6b891a64279976098137ddfa883d748787a6fea53ecdb51f8df8b8cec0ae1 - languageName: node - linkType: hard - "object.groupby@npm:^1.0.1": version: 1.0.2 resolution: "object.groupby@npm:1.0.2" @@ -38807,17 +38061,6 @@ __metadata: languageName: node linkType: hard -"object.values@npm:^1.2.0": - version: 1.2.0 - resolution: "object.values@npm:1.2.0" - dependencies: - call-bind: ^1.0.7 - define-properties: ^1.2.1 - es-object-atoms: ^1.0.0 - checksum: 51fef456c2a544275cb1766897f34ded968b22adfc13ba13b5e4815fdaf4304a90d42a3aee114b1f1ede048a4890381d47a5594d84296f2767c6a0364b9da8fa - languageName: node - linkType: hard - "objectorarray@npm:^1.0.5": version: 1.0.5 resolution: "objectorarray@npm:1.0.5" @@ -39396,6 +38639,13 @@ __metadata: languageName: node linkType: hard +"package-json-from-dist@npm:^1.0.0": + version: 1.0.1 + resolution: "package-json-from-dist@npm:1.0.1" + checksum: 58ee9538f2f762988433da00e26acc788036914d57c71c246bf0be1b60cdbd77dd60b6a3e1a30465f0b248aeb80079e0b34cb6050b1dfa18c06953bb1cbc7602 + languageName: node + linkType: hard + "package-json@npm:^8.1.0": version: 8.1.1 resolution: "package-json@npm:8.1.1" @@ -39861,6 +39111,16 @@ __metadata: languageName: node linkType: hard +"path-scurry@npm:^1.11.1": + version: 1.11.1 + resolution: "path-scurry@npm:1.11.1" + dependencies: + lru-cache: ^10.2.0 + minipass: ^5.0.0 || ^6.0.2 || ^7.0.0 + checksum: 890d5abcd593a7912dcce7cf7c6bf7a0b5648e3dee6caf0712c126ca0a65c7f3d7b9d769072a4d1baf370f61ce493ab5b038d59988688e0c5f3f646ee3c69023 + languageName: node + linkType: hard + "path-to-regexp@npm:0.1.7": version: 0.1.7 resolution: "path-to-regexp@npm:0.1.7" @@ -40293,15 +39553,6 @@ __metadata: languageName: node linkType: hard -"player.style@npm:^0.0.8": - version: 0.0.8 - resolution: "player.style@npm:0.0.8" - dependencies: - media-chrome: ^4.1.0 - checksum: 009f59bc8e7f84e82adcacec4df3ea11094d7097413a5755bb6a586150c9aa6114f7d7840f215b8b98c20f3eabbf40b7eb1d20731384253fea3122bd62b9512e - languageName: node - linkType: hard - "playwright-core@npm:1.45.3": version: 1.45.3 resolution: "playwright-core@npm:1.45.3" @@ -40864,15 +40115,6 @@ __metadata: languageName: node linkType: hard -"prettier@npm:3.3.3": - version: 3.3.3 - resolution: "prettier@npm:3.3.3" - bin: - prettier: bin/prettier.cjs - checksum: bc8604354805acfdde6106852d14b045bb20827ad76a5ffc2455b71a8257f94de93f17f14e463fe844808d2ccc87248364a5691488a3304f1031326e62d9276e - languageName: node - linkType: hard - "prettier@npm:^2.7.1": version: 2.8.7 resolution: "prettier@npm:2.8.7" @@ -41087,6 +40329,13 @@ __metadata: languageName: node linkType: hard +"proc-log@npm:^4.1.0, proc-log@npm:^4.2.0": + version: 4.2.0 + resolution: "proc-log@npm:4.2.0" + checksum: 98f6cd012d54b5334144c5255ecb941ee171744f45fca8b43b58ae5a0c1af07352475f481cadd9848e7f0250376ee584f6aa0951a856ff8f021bdfbff4eb33fc + languageName: node + linkType: hard + "process-es6@npm:^0.11.2": version: 0.11.6 resolution: "process-es6@npm:0.11.6" @@ -41790,21 +41039,20 @@ __metadata: languageName: node linkType: hard -"react-datocms@npm:^5.0.3": - version: 5.0.3 - resolution: "react-datocms@npm:5.0.3" +"react-datocms@npm:^3.1.0": + version: 3.1.4 + resolution: "react-datocms@npm:3.1.4" dependencies: - "@mux/mux-player-react": "*" datocms-listen: ^0.1.9 datocms-structured-text-generic-html-renderer: ^2.0.1 datocms-structured-text-utils: ^2.0.1 - react-intersection-observer: ^9.4.3 + 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: 22c20152afb54424acfe967a2c8c525cd9f132a33374f2aba0231f16ea64dade389b096e2dac8de9ffded612bc32e9891d725609ee947639fe1cef907cb143f5 + checksum: 54aba12aef4937175c2011548a8a576c96c8d8a596e84d191826910624c1d596e76a49782689dc236388a10803b02e700ac820cb7500cca7fd147a81f6c544c3 languageName: node linkType: hard @@ -42065,16 +41313,12 @@ __metadata: languageName: node linkType: hard -"react-intersection-observer@npm:^9.4.3": - version: 9.13.1 - resolution: "react-intersection-observer@npm:9.13.1" +"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 || ^19.0.0 - react-dom: ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - peerDependenciesMeta: - react-dom: - optional: true - checksum: 92b3e7d9293365635bf5ede89b912a670030c6244879dce36fa9437e6749c637151087fbcaa72cc160b2fa7045bd5ac861a8535e0a2b7b8f230f11f2e0391005 + react: ^15.0.0 || ^16.0.0 || ^17.0.0|| ^18.0.0 + checksum: 7713fecfd1512c7f5a60f9f0bf15403b8f8bbd4110bcafaeaea6de36a0e0eb60368c3638f99e9c97b75ad8fc787ea48c241dcb5c694f821d7f2976f709082cc5 languageName: node linkType: hard @@ -42184,16 +41428,6 @@ __metadata: languageName: node linkType: hard -"react-parallax-tilt@npm:^1.7.226": - version: 1.7.245 - resolution: "react-parallax-tilt@npm:1.7.245" - peerDependencies: - react: ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 - react-dom: ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 - checksum: 32b56fdb46e993c769f8458e3f9cdd9edd4711c6f95ecfaa4ac004775ea9653f0487232dd010179e45348fd34a61ccdf8026baaf439685ae2450914471de1fb9 - languageName: node - linkType: hard - "react-phone-input-2@npm:^2.15.1": version: 2.15.1 resolution: "react-phone-input-2@npm:2.15.1" @@ -42316,22 +41550,6 @@ __metadata: languageName: node linkType: hard -"react-remove-scroll-bar@npm:^2.3.6": - version: 2.3.6 - resolution: "react-remove-scroll-bar@npm:2.3.6" - dependencies: - react-style-singleton: ^2.2.1 - tslib: ^2.0.0 - peerDependencies: - "@types/react": ^16.8.0 || ^17.0.0 || ^18.0.0 - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - peerDependenciesMeta: - "@types/react": - optional: true - checksum: e793fe110e2ea60d5724d0b60f09de1f6cd1b080df00df9e68bb9a1b985895830e703194647059fdc22402a67a89b7673a5260773b89bcd98031fd99bc91aefa - languageName: node - linkType: hard - "react-remove-scroll@npm:2.5.4": version: 2.5.4 resolution: "react-remove-scroll@npm:2.5.4" @@ -42370,25 +41588,6 @@ __metadata: languageName: node linkType: hard -"react-remove-scroll@npm:2.6.0": - version: 2.6.0 - resolution: "react-remove-scroll@npm:2.6.0" - dependencies: - react-remove-scroll-bar: ^2.3.6 - react-style-singleton: ^2.2.1 - tslib: ^2.1.0 - use-callback-ref: ^1.3.0 - use-sidecar: ^1.1.2 - peerDependencies: - "@types/react": ^16.8.0 || ^17.0.0 || ^18.0.0 - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - peerDependenciesMeta: - "@types/react": - optional: true - checksum: e7ad2383ce20d63cf28f3ed14e63f684e139301fc4a5c1573da330d4465b733e6084c33b2bfcaee448c9b1df0e37993a15d6cba8a1dd80fe631f803e48e9f798 - languageName: node - linkType: hard - "react-remove-scroll@npm:^2.4.0": version: 2.4.4 resolution: "react-remove-scroll@npm:2.4.4" @@ -42645,18 +41844,6 @@ __metadata: languageName: node linkType: hard -"react-twitter-embed@npm:^4.0.4": - version: 4.0.4 - resolution: "react-twitter-embed@npm:4.0.4" - dependencies: - scriptjs: ^2.5.9 - peerDependencies: - react: ^16.0.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.0.0 || ^17.0.0 || ^18.0.0 - checksum: cdb3c5bd04c4da0efa767476be47c0a3865fb6335f2a1b9e242170167b51615c38164223278cef60c77143c4bac27ba582cbea054d0af3f138104fa5ec537c4c - languageName: node - linkType: hard - "react-universal-interface@npm:^0.6.2": version: 0.6.2 resolution: "react-universal-interface@npm:0.6.2" @@ -44537,13 +43724,6 @@ __metadata: languageName: node linkType: hard -"scriptjs@npm:^2.5.9": - version: 2.5.9 - resolution: "scriptjs@npm:2.5.9" - checksum: fc84cb6b60b6fb9aa6f1b3bc59fc94b233bd5241ed3a04233579014382b5eb60640269c87d8657902acc09f9b785ee33230c218627cea00e653564bda8f5acb6 - languageName: node - linkType: hard - "scuid@npm:^1.1.0": version: 1.1.0 resolution: "scuid@npm:1.1.0" @@ -44650,15 +43830,6 @@ __metadata: languageName: node linkType: hard -"semver@npm:^7.6.0": - version: 7.6.3 - resolution: "semver@npm:7.6.3" - bin: - semver: bin/semver.js - checksum: 4110ec5d015c9438f322257b1c51fe30276e5f766a3f64c09edd1d7ea7118ecbc3f379f3b69032bacf13116dc7abc4ad8ce0d7e2bd642e26b0d271b56b61a7d8 - languageName: node - linkType: hard - "semver@npm:~2.3.1": version: 2.3.2 resolution: "semver@npm:2.3.2" @@ -44830,18 +44001,6 @@ __metadata: languageName: node linkType: hard -"set-function-name@npm:^2.0.2": - version: 2.0.2 - resolution: "set-function-name@npm:2.0.2" - dependencies: - define-data-property: ^1.1.4 - es-errors: ^1.3.0 - functions-have-names: ^1.2.3 - has-property-descriptors: ^1.0.2 - checksum: d6229a71527fd0404399fc6227e0ff0652800362510822a291925c9d7b48a1ca1a468b11b281471c34cd5a2da0db4f5d7ff315a61d26655e77f6e971e6d0c80f - languageName: node - linkType: hard - "set-harmonic-interval@npm:^1.0.1": version: 1.0.1 resolution: "set-harmonic-interval@npm:1.0.1" @@ -45233,6 +44392,17 @@ __metadata: languageName: node linkType: hard +"socks-proxy-agent@npm:^8.0.3": + version: 8.0.4 + resolution: "socks-proxy-agent@npm:8.0.4" + dependencies: + agent-base: ^7.1.1 + debug: ^4.3.4 + socks: ^2.8.3 + checksum: b2ec5051d85fe49072f9a250c427e0e9571fd09d5db133819192d078fd291276e1f0f50f6dbc04329b207738b1071314cee8bdbb4b12e27de42dbcf1d4233c67 + languageName: node + linkType: hard + "socks@npm:^2.6.2": version: 2.7.1 resolution: "socks@npm:2.7.1" @@ -45253,6 +44423,16 @@ __metadata: languageName: node linkType: hard +"socks@npm:^2.8.3": + version: 2.8.3 + resolution: "socks@npm:2.8.3" + dependencies: + ip-address: ^9.0.5 + smart-buffer: ^4.2.0 + checksum: 7a6b7f6eedf7482b9e4597d9a20e09505824208006ea8f2c49b71657427f3c137ca2ae662089baa73e1971c62322d535d9d0cf1c9235cf6f55e315c18203eadd + languageName: node + linkType: hard + "sorted-array-functions@npm:^1.3.0": version: 1.3.0 resolution: "sorted-array-functions@npm:1.3.0" @@ -45514,6 +44694,15 @@ __metadata: languageName: node linkType: hard +"ssri@npm:^10.0.0": + version: 10.0.6 + resolution: "ssri@npm:10.0.6" + dependencies: + minipass: ^7.0.3 + checksum: 4603d53a05bcd44188747d38f1cc43833b9951b5a1ee43ba50535bdfc5fe4a0897472dbe69837570a5417c3c073377ef4f8c1a272683b401857f72738ee57299 + languageName: node + linkType: hard + "ssri@npm:^9.0.0": version: 9.0.1 resolution: "ssri@npm:9.0.1" @@ -45914,26 +45103,6 @@ __metadata: languageName: node linkType: hard -"string.prototype.matchall@npm:^4.0.11": - version: 4.0.11 - resolution: "string.prototype.matchall@npm:4.0.11" - dependencies: - call-bind: ^1.0.7 - define-properties: ^1.2.1 - es-abstract: ^1.23.2 - es-errors: ^1.3.0 - es-object-atoms: ^1.0.0 - get-intrinsic: ^1.2.4 - gopd: ^1.0.1 - has-symbols: ^1.0.3 - internal-slot: ^1.0.7 - regexp.prototype.flags: ^1.5.2 - set-function-name: ^2.0.2 - side-channel: ^1.0.6 - checksum: 6ac6566ed065c0c8489c91156078ca077db8ff64d683fda97ae652d00c52dfa5f39aaab0a710d8243031a857fd2c7c511e38b45524796764d25472d10d7075ae - languageName: node - linkType: hard - "string.prototype.matchall@npm:^4.0.7": version: 4.0.7 resolution: "string.prototype.matchall@npm:4.0.7" @@ -45977,16 +45146,6 @@ __metadata: languageName: node linkType: hard -"string.prototype.repeat@npm:^1.0.0": - version: 1.0.0 - resolution: "string.prototype.repeat@npm:1.0.0" - dependencies: - define-properties: ^1.1.3 - es-abstract: ^1.17.5 - checksum: 95dfc514ed7f328d80a066dabbfbbb1615c3e51490351085409db2eb7cbfed7ea29fdadaf277647fbf9f4a1e10e6dd9e95e78c0fd2c4e6bb6723ea6e59401004 - languageName: node - linkType: hard - "string.prototype.trim@npm:^1.2.8": version: 1.2.8 resolution: "string.prototype.trim@npm:1.2.8" @@ -46085,17 +45244,6 @@ __metadata: languageName: node linkType: hard -"string.prototype.trimstart@npm:^1.0.8": - version: 1.0.8 - resolution: "string.prototype.trimstart@npm:1.0.8" - dependencies: - call-bind: ^1.0.7 - define-properties: ^1.2.1 - es-object-atoms: ^1.0.0 - checksum: df1007a7f580a49d692375d996521dc14fd103acda7f3034b3c558a60b82beeed3a64fa91e494e164581793a8ab0ae2f59578a49896a7af6583c1f20472bce96 - languageName: node - linkType: hard - "string_decoder@npm:^1.0.0, string_decoder@npm:^1.1.1, string_decoder@npm:^1.3.0": version: 1.3.0 resolution: "string_decoder@npm:1.3.0" @@ -46899,6 +46047,20 @@ __metadata: languageName: node linkType: hard +"tar@npm:^6.2.1": + version: 6.2.1 + resolution: "tar@npm:6.2.1" + dependencies: + chownr: ^2.0.0 + fs-minipass: ^2.0.0 + minipass: ^5.0.0 + minizlib: ^2.1.1 + mkdirp: ^1.0.3 + yallist: ^4.0.0 + checksum: f1322768c9741a25356c11373bce918483f40fa9a25c69c59410c8a1247632487edef5fe76c5f12ac51a6356d2f1829e96d2bc34098668a2fc34d76050ac2b6c + languageName: node + linkType: hard + "tarn@npm:^3.0.2": version: 3.0.2 resolution: "tarn@npm:3.0.2" @@ -47516,15 +46678,6 @@ __metadata: languageName: node linkType: hard -"ts-api-utils@npm:^1.3.0": - version: 1.3.0 - resolution: "ts-api-utils@npm:1.3.0" - peerDependencies: - typescript: ">=4.2.0" - checksum: c746ddabfdffbf16cb0b0db32bb287236a19e583057f8649ee7c49995bb776e1d3ef384685181c11a1a480369e022ca97512cb08c517b2d2bd82c83754c97012 - languageName: node - linkType: hard - "ts-dedent@npm:^2.0.0, ts-dedent@npm:^2.2.0": version: 2.2.0 resolution: "ts-dedent@npm:2.2.0" @@ -48305,20 +47458,6 @@ __metadata: languageName: node linkType: hard -"typed-array-length@npm:^1.0.6": - version: 1.0.6 - resolution: "typed-array-length@npm:1.0.6" - dependencies: - call-bind: ^1.0.7 - for-each: ^0.3.3 - gopd: ^1.0.1 - has-proto: ^1.0.3 - is-typed-array: ^1.1.13 - possible-typed-array-names: ^1.0.0 - checksum: f0315e5b8f0168c29d390ff410ad13e4d511c78e6006df4a104576844812ee447fcc32daab1f3a76c9ef4f64eff808e134528b5b2439de335586b392e9750e5c - languageName: node - linkType: hard - "typedarray-to-buffer@npm:^3.1.5": version: 3.1.5 resolution: "typedarray-to-buffer@npm:3.1.5" @@ -48422,20 +47561,6 @@ __metadata: languageName: node linkType: hard -"typescript-eslint@npm:^8.2.0": - version: 8.8.1 - resolution: "typescript-eslint@npm:8.8.1" - dependencies: - "@typescript-eslint/eslint-plugin": 8.8.1 - "@typescript-eslint/parser": 8.8.1 - "@typescript-eslint/utils": 8.8.1 - peerDependenciesMeta: - typescript: - optional: true - checksum: b55739c826b5b58d606ad3261e892c24ee1b33221e53f2e5279ae195deb9afb5962d9acc9db36f7ee2add2392bfcc6a1641ec8a1814d93458959e4991015d4d4 - languageName: node - linkType: hard - "typescript@npm:5.3.3": version: 5.3.3 resolution: "typescript@npm:5.3.3" @@ -48446,7 +47571,7 @@ __metadata: languageName: node linkType: hard -"typescript@npm:^4.4.4, typescript@npm:^4.9.4": +"typescript@npm:^4.9.4": version: 4.9.5 resolution: "typescript@npm:4.9.5" bin: @@ -48476,7 +47601,7 @@ __metadata: languageName: node linkType: hard -"typescript@patch:typescript@^4.4.4#~builtin, typescript@patch:typescript@^4.9.4#~builtin": +"typescript@patch:typescript@^4.9.4#~builtin": version: 4.9.5 resolution: "typescript@patch:typescript@npm%3A4.9.5#~builtin::version=4.9.5&hash=23ec76" bin: @@ -48664,6 +47789,15 @@ __metadata: languageName: node linkType: hard +"unique-filename@npm:^3.0.0": + version: 3.0.0 + resolution: "unique-filename@npm:3.0.0" + dependencies: + unique-slug: ^4.0.0 + checksum: 8e2f59b356cb2e54aab14ff98a51ac6c45781d15ceaab6d4f1c2228b780193dc70fae4463ce9e1df4479cb9d3304d7c2043a3fb905bdeca71cc7e8ce27e063df + languageName: node + linkType: hard + "unique-slug@npm:^3.0.0": version: 3.0.0 resolution: "unique-slug@npm:3.0.0" @@ -48673,6 +47807,15 @@ __metadata: languageName: node linkType: hard +"unique-slug@npm:^4.0.0": + version: 4.0.0 + resolution: "unique-slug@npm:4.0.0" + dependencies: + imurmurhash: ^0.1.4 + checksum: 0884b58365af59f89739e6f71e3feacb5b1b41f2df2d842d0757933620e6de08eff347d27e9d499b43c40476cbaf7988638d3acb2ffbcb9d35fd035591adfd15 + languageName: node + linkType: hard + "unique-string@npm:^2.0.0": version: 2.0.0 resolution: "unique-string@npm:2.0.0" @@ -50271,6 +49414,17 @@ __metadata: languageName: node linkType: hard +"which@npm:^4.0.0": + version: 4.0.0 + resolution: "which@npm:4.0.0" + dependencies: + isexe: ^3.1.1 + bin: + node-which: bin/which.js + checksum: f17e84c042592c21e23c8195108cff18c64050b9efb8459589116999ea9da6dd1509e6a1bac3aeebefd137be00fabbb61b5c2bc0aa0f8526f32b58ee2f545651 + languageName: node + linkType: hard + "why-is-node-running@npm:^2.3.0": version: 2.3.0 resolution: "why-is-node-running@npm:2.3.0"