@nylas/web-elements 2.6.0 → 2.6.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. package/dist/cdn/nylas-scheduler-editor/nylas-scheduler-editor.es.js +961 -961
  2. package/dist/cdn/nylas-scheduling/nylas-scheduling.es.js +74 -70
  3. package/dist/cjs/google-logo-icon.microsoft-logo-icon.nylas-editor-tabs.nylas-editor-tabs-group.nylas-list-configurations.nylas-select-event-type.entry.cjs.js.map +1 -1
  4. package/dist/cjs/google-logo-icon_6.cjs.entry.js +8 -7
  5. package/dist/cjs/google-logo-icon_6.cjs.entry.js.map +1 -1
  6. package/dist/cjs/nylas-scheduler-editor.cjs.entry.js +1 -1
  7. package/dist/cjs/nylas-scheduling.cjs.entry.js +9 -6
  8. package/dist/cjs/nylas-scheduling.cjs.entry.js.map +1 -1
  9. package/dist/cjs/nylas-scheduling.entry.cjs.js.map +1 -1
  10. package/dist/cjs/{version-CHszslqN.js → version-pNhv-OnX.js} +3 -3
  11. package/dist/cjs/{version-CHszslqN.js.map → version-pNhv-OnX.js.map} +1 -1
  12. package/dist/collection/components/scheduler-editor/nylas-editor-tabs-group/nylas-editor-tabs-group.js +7 -6
  13. package/dist/collection/components/scheduler-editor/nylas-editor-tabs-group/nylas-editor-tabs-group.js.map +1 -1
  14. package/dist/collection/connector/shared/api/scheduler.js +8 -5
  15. package/dist/collection/connector/shared/api/scheduler.js.map +1 -1
  16. package/dist/collection/version.js +1 -1
  17. package/dist/collection/version.js.map +1 -1
  18. package/dist/components/nylas-editor-tabs-group.js +1 -1
  19. package/dist/components/nylas-editor-tabs.js +1 -1
  20. package/dist/components/nylas-scheduler-editor.js +3 -3
  21. package/dist/components/nylas-scheduling.js +9 -6
  22. package/dist/components/nylas-scheduling.js.map +1 -1
  23. package/dist/components/{p-CNj6i-JK.js → p-BvUse-6u.js} +3 -3
  24. package/dist/components/{p-CNj6i-JK.js.map → p-BvUse-6u.js.map} +1 -1
  25. package/dist/components/{p-DTNmzKXY.js → p-CK_YvIAV.js} +10 -9
  26. package/dist/components/p-CK_YvIAV.js.map +1 -0
  27. package/dist/components/{p-Z5I7z8cD.js → p-CmX4JCsD.js} +3 -3
  28. package/dist/components/{p-Z5I7z8cD.js.map → p-CmX4JCsD.js.map} +1 -1
  29. package/dist/esm/google-logo-icon.microsoft-logo-icon.nylas-editor-tabs.nylas-editor-tabs-group.nylas-list-configurations.nylas-select-event-type.entry.js.map +1 -1
  30. package/dist/esm/google-logo-icon_6.entry.js +8 -7
  31. package/dist/esm/google-logo-icon_6.entry.js.map +1 -1
  32. package/dist/esm/nylas-scheduler-editor.entry.js +1 -1
  33. package/dist/esm/nylas-scheduling.entry.js +9 -6
  34. package/dist/esm/nylas-scheduling.entry.js.map +1 -1
  35. package/dist/esm/{version-CYTx0-4Z.js → version-D-6xYsvk.js} +3 -3
  36. package/dist/esm/{version-CYTx0-4Z.js.map → version-D-6xYsvk.js.map} +1 -1
  37. package/dist/nylas-web-elements/google-logo-icon.microsoft-logo-icon.nylas-editor-tabs.nylas-editor-tabs-group.nylas-list-configurations.nylas-select-event-type.entry.esm.js.map +1 -1
  38. package/dist/nylas-web-elements/nylas-scheduling.entry.esm.js.map +1 -1
  39. package/dist/nylas-web-elements/nylas-web-elements.esm.js +1 -1
  40. package/dist/nylas-web-elements/{p-CYTx0-4Z.js → p-D-6xYsvk.js} +2 -2
  41. package/dist/nylas-web-elements/{p-CYTx0-4Z.js.map → p-D-6xYsvk.js.map} +1 -1
  42. package/dist/nylas-web-elements/{p-5d3ae749.entry.js → p-a6909b16.entry.js} +2 -2
  43. package/dist/nylas-web-elements/p-d346e3fb.entry.js +2 -0
  44. package/dist/nylas-web-elements/p-d346e3fb.entry.js.map +1 -0
  45. package/dist/nylas-web-elements/{p-f5ccd7f3.entry.js → p-f831f2f7.entry.js} +2 -2
  46. package/dist/nylas-web-elements/{p-f5ccd7f3.entry.js.map → p-f831f2f7.entry.js.map} +1 -1
  47. package/dist/types/connector/shared/api/scheduler.d.ts +1 -0
  48. package/dist/types/version.d.ts +1 -1
  49. package/package.json +1 -1
  50. package/dist/components/p-DTNmzKXY.js.map +0 -1
  51. package/dist/nylas-web-elements/p-82b39e7c.entry.js +0 -2
  52. package/dist/nylas-web-elements/p-82b39e7c.entry.js.map +0 -1
  53. /package/dist/nylas-web-elements/{p-5d3ae749.entry.js.map → p-a6909b16.entry.js.map} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"scheduler.js","sourceRoot":"","sources":["../../../../../src/connector/shared/api/scheduler.ts"],"names":[],"mappings":"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","sourcesContent":["import { AvailabilityResponse, NylasSchedulerBookingData, NylasSchedulerBookingDataWithFlatFields, NylasEvent, UISettingsResponse } from '@/common/types';\nimport { LANGUAGE_CODE } from '@/common/constants';\nimport { NylasSchedulerStoreType } from '../../../components';\nimport type { NylasErrorResponse, NylasResponse, NylasSchedulerResponse, Timeslot } from '@nylas/core';\nimport { Errors } from '@/connector/nylas-scheduler-connector/errors';\nimport { addDaysToCurrentDate, normalizeDateInput, normalizeSupportedLanguageCode } from '@/utils/utils';\nimport i18next from '@/utils/i18n';\nimport { APIErrorType } from '@nylas/core';\nimport { ErrorCategory } from '@/types/index';\nimport { version } from '@/version';\n\ntype NylasSchedulerAPIConnectorOptions = {\n schedulerAPIURL: string;\n schedulerStore: NylasSchedulerStoreType;\n sessionId?: string;\n configId?: string;\n slug?: string;\n clientId?: string;\n};\n\n/**\n * NylaSchedulerConnector\n * This class is used to make API requests to the scheduler.\n */\nexport class NylaSchedulerAPIConnector {\n private schedulerStore: NylasSchedulerStoreType;\n private schedulerAPIURL: string;\n private sessionId: string | undefined;\n private configId: string | undefined;\n private slug: string | undefined;\n private clientId: string | undefined;\n private errors = new Errors();\n\n constructor({ schedulerAPIURL, schedulerStore, sessionId, configId, slug, clientId }: NylasSchedulerAPIConnectorOptions) {\n this.schedulerStore = schedulerStore;\n this.schedulerAPIURL = schedulerAPIURL;\n this.sessionId = sessionId;\n this.configId = configId;\n this.slug = slug;\n this.clientId = clientId;\n }\n\n private getHeaders() {\n return this.sessionId\n ? {\n Authorization: `Bearer ${this.sessionId}`,\n }\n : {};\n }\n\n /**\n * Makes an API request to the scheduler.\n * @param path The path to the API endpoint.\n * @param method The HTTP method.\n * @param body The request body (if any).\n * @returns {Promise<T>}\n */\n public async makeAPIRequest<T>(path: string, method: string, body: string | undefined, headers = {}, signal?: AbortSignal): Promise<NylasResponse<T>> {\n try {\n const schedulerURL = new URL(this.schedulerAPIURL);\n schedulerURL.pathname = path;\n const response = await fetch(decodeURIComponent(schedulerURL.toString()), {\n method,\n headers: {\n 'Content-Type': 'application/json',\n 'Origin': window.location.origin,\n 'X-Source': 'nylas-scheduling',\n 'X-Nylas-Web-Elements-Version': version,\n ...(this.clientId && { 'X-Nylas-Application-Public-Id': this.clientId }),\n ...headers,\n },\n body,\n signal,\n });\n // A successful mutation (e.g. cancelling a booking) can respond with 204 No\n // Content and an empty body. Calling response.json() on an empty body throws\n // \"Unexpected end of JSON input\", which the catch block below would surface as a\n // misleading \"API request failed\" even though the request succeeded. Handle the\n // no-content response explicitly rather than parsing a body that isn't there.\n if (response.status === 204) {\n return { data: undefined } as NylasResponse<T>;\n }\n // The server returns a json object for errors: eg.\n // {\n // \"request_id\": \"<request_id>\",\n // \"error\": {\n // \"type\": \"not_found_error\",\n // \"message\": \"Session not found\"\n // }\n // }\n const data = await response.json();\n return data as NylasResponse<T>;\n } catch (error: any) {\n // Let AbortError propagate so callers (getUISettings, getAvailability) skip\n // their store-mutation error paths for intentionally cancelled requests.\n if (error.name === 'AbortError') {\n throw error;\n }\n // NOTE: current server implementation doesn't return a JSON object for errors on some endpoints\n // handle this case by returning the error response as a string to be handled downstream\n return {\n error: {\n message: error.message,\n title: 'API request failed',\n type: 'api',\n },\n } as NylasErrorResponse;\n }\n }\n\n private getErrorMessage(error: NylasErrorResponse['error']) {\n let errorMessage = error?.message || error?.title || 'Something went wrong';\n if (error?.type === 'provider_error') {\n errorMessage = error?.provider_error?.error?.message || error?.provider_error?.error?.title || 'Something went wrong';\n }\n return errorMessage;\n }\n\n public setConfigId(configId: string) {\n this.configId = configId;\n }\n\n public setSchedulerAPIURL(url: string) {\n if (url === '/') {\n url = new URL(window.location.href).origin;\n }\n this.schedulerAPIURL = url;\n }\n\n public setSessionId(sessionId: string) {\n this.sessionId = sessionId;\n }\n\n /**\n * Selects a date in the scheduler.\n */\n public selectDate(date: Date) {\n this.schedulerStore.set('selectedDate', date);\n this.schedulerStore.set('selectedTimeslot', null);\n }\n\n /**\n * Selects a time in the scheduler.\n */\n public selectTime(time: Timeslot) {\n this.schedulerStore.set('selectedTimeslot', time);\n }\n\n /**\n * Sets the timezone in the scheduler.\n */\n public selectTimezone(timezone: string) {\n this.schedulerStore.set('selectedTimezone', timezone);\n }\n\n /**\n * Sets the language in the scheduler.\n */\n public selectLanguage(language: string) {\n const selectedLanguage = normalizeSupportedLanguageCode(language) || LANGUAGE_CODE.en;\n this.schedulerStore.set('selectedLanguage', selectedLanguage);\n i18next.changeLanguage(selectedLanguage);\n }\n\n /**\n * Toggles showBookingForm\n * @param value boolean\n */\n public async toggleAdditionalData(value: boolean) {\n if (!value) {\n // Refetch availability\n await this.refetchAvailability();\n }\n this.schedulerStore.set('showBookingForm', value);\n }\n\n /**\n * Set/update the name of the participant booking the event.\n */\n public setParticipantName(name: string) {\n const { bookingInfo } = this.schedulerStore.state;\n this.schedulerStore.set('bookingInfo', {\n ...bookingInfo,\n primaryParticipant: {\n ...(bookingInfo?.primaryParticipant as NylasSchedulerBookingData['primaryParticipant']),\n name,\n },\n });\n }\n\n /**\n * Set/update the email of the participant booking the event.\n */\n public setParticipantEmail(email: string) {\n const { bookingInfo } = this.schedulerStore.state;\n this.schedulerStore.set('bookingInfo', {\n ...bookingInfo,\n primaryParticipant: {\n ...(bookingInfo?.primaryParticipant as NylasSchedulerBookingData['primaryParticipant']),\n email,\n },\n });\n }\n\n /**\n * Set/update the additional guests of the event.\n * Stores the guest emails in the same shape the booking form rehydrates from\n * (an array of participants keyed by email), so they survive back-navigation.\n */\n public setGuests(guestEmails: string[]) {\n const { bookingInfo } = this.schedulerStore.state;\n this.schedulerStore.set('bookingInfo', {\n ...bookingInfo,\n primaryParticipant: bookingInfo?.primaryParticipant as NylasSchedulerBookingData['primaryParticipant'],\n guests: guestEmails.map(email => ({ name: email, email })),\n });\n }\n\n /**\n * Set/update the additional/custom fields of the event.\n * Wraps each flat field value in the `{ value }` shape the booking form\n * rehydrates from, preserving any existing type/readOnly metadata, so custom\n * field entries survive back-navigation.\n */\n public setAdditionalFields(additionalFields: Record<string, string>) {\n const { bookingInfo } = this.schedulerStore.state;\n const existing = bookingInfo?.additionalFields ?? {};\n const merged: NonNullable<NylasSchedulerBookingData['additionalFields']> = { ...existing };\n Object.entries(additionalFields).forEach(([key, value]) => {\n merged[key] = { ...existing[key], value };\n });\n this.schedulerStore.set('bookingInfo', {\n ...bookingInfo,\n primaryParticipant: bookingInfo?.primaryParticipant as NylasSchedulerBookingData['primaryParticipant'],\n additionalFields: merged,\n });\n }\n\n private async refetchAvailability() {\n const today = new Date();\n // Refetch availability\n const startTime = new Date(today.getFullYear(), today.getMonth(), 1).getTime() / 1000;\n const startTimeWithOffset = startTime < today.getTime() / 1000 ? Math.floor(today.getTime() / 1000) : startTime;\n const endTime = new Date(today.getFullYear(), today.getMonth() + 1, 1).getTime() / 1000;\n const result = await this.getAvailability(startTimeWithOffset, endTime);\n return result;\n }\n\n private async resetStoreStateAndFetchAvailability() {\n const today = new Date();\n // Refetch availability\n const result = await this.refetchAvailability();\n // Set selected date to first available date\n const firstAvailableDate = this.schedulerStore.get('availability').find((timeslot: any) => {\n const startTime = normalizeDateInput(timeslot.start_time);\n return startTime ? startTime > new Date() : false;\n });\n let _selectedDate = today;\n if (firstAvailableDate) {\n _selectedDate = normalizeDateInput(firstAvailableDate.start_time) || today;\n }\n this.schedulerStore.set('selectedDate', _selectedDate);\n // Reset store state\n this.schedulerStore.set('eventInfo', null);\n this.schedulerStore.set('showBookingForm', false);\n this.schedulerStore.set('selectedTimeslot', null);\n\n return result;\n }\n\n /**\n * Set reschedule booking id\n */\n public async setReschedule(bookingID: string) {\n this.schedulerStore.set('isLoading', true);\n const eventInfo = this.schedulerStore.state.eventInfo;\n if (eventInfo) {\n this.schedulerStore.set('reschedulingEventInfo', eventInfo);\n }\n this.schedulerStore.set('rescheduleBookingId', bookingID);\n await this.getUISettings();\n // Set reschedule booking id\n const result = await this.resetStoreStateAndFetchAvailability().finally(() => {\n this.schedulerStore.set('isLoading', false);\n });\n\n return result;\n }\n\n /**\n * Set cancel booking id\n */\n public async setCancel(bookingID: string) {\n this.schedulerStore.set('cancelBookingId', bookingID);\n }\n\n /**\n * Set reject booking id\n */\n public async setReject(bookingID: string) {\n this.schedulerStore.set('rejectBookingId', bookingID);\n }\n\n public async resetCancel() {\n const result = await this.resetStoreStateAndFetchAvailability();\n this.schedulerStore.set('cancelBookingId', '');\n this.schedulerStore.set('rejectBookingId', '');\n this.schedulerStore.set('cancelledEventInfo', null);\n return result;\n }\n\n public async goBack() {\n this.schedulerStore.set('cancelBookingId', '');\n return;\n }\n\n public async resetConfirm() {\n const result = await this.resetStoreStateAndFetchAvailability();\n this.schedulerStore.set('organizerConfirmationBookingId', '');\n this.schedulerStore.set('confirmedEventInfo', undefined);\n return result;\n }\n\n /**\n * Book the selected timeslot.\n * @param data The booking info.\n * @returns {Promise<NylasResponse<NylasEvent>>}\n */\n public async bookTimeslot(data?: NylasSchedulerBookingDataWithFlatFields & { timeslot?: Timeslot }): Promise<NylasSchedulerResponse<NylasEvent>> {\n this.schedulerStore.set('isLoading', true);\n const { selectedTimeslot, selectedTimezone, bookingInfo, selectedLanguage } = this.schedulerStore.state;\n\n if (!data && !bookingInfo) {\n return { error: this.errors.component(i18next.t('createBookingErrorTitle')).no_booking_info() };\n }\n\n const timeslot = data?.timeslot || selectedTimeslot;\n if (!timeslot) {\n return { error: this.errors.component(i18next.t('createBookingErrorTitle')).no_timeslot_selected() };\n }\n\n const timezone = data && data?.timezone ? data?.timezone : selectedTimezone;\n const language = selectedLanguage || 'en-US';\n\n if (!timezone) {\n return { error: this.errors.component(i18next.t('createBookingErrorTitle')).no_timezone_selected() };\n }\n\n const order = [...this.schedulerStore.get('availabilityOrderEmails')];\n\n let participantToBookWith = '';\n const emails = timeslot?.emails || [];\n\n const addFields = {};\n Object.entries(bookingInfo?.additionalFields || {}).forEach(([key, entry]) => {\n addFields[key] = (entry as { value: string; type?: string }).value;\n });\n\n const primaryGuest = data ? data?.primaryParticipant : bookingInfo?.primaryParticipant;\n const guests = data ? data?.guests || [] : bookingInfo?.guests || [];\n const additional_fields = data ? data?.additionalFields : addFields;\n\n const headers = this.getHeaders();\n const configIdParam =\n !this.sessionId && this.configId\n ? `?configuration_id=${this.configId}`\n : !this.sessionId && this.slug && this.clientId\n ? `?slug=${this.slug}&client_id=${this.clientId}`\n : '';\n const url = `/v3/scheduling/bookings${configIdParam}`;\n\n // If the order array is empty, make a single request without retries\n if (order.length === 0) {\n const response = await this.makeAPIRequest<NylasEvent>(\n decodeURIComponent(url),\n 'POST',\n JSON.stringify({\n additional_fields,\n additional_guests: guests,\n guest: { ...primaryGuest },\n start_time: timeslot.start_time.getTime() / 1000,\n end_time: timeslot.end_time.getTime() / 1000,\n timezone,\n event_id: timeslot?.event_id || undefined,\n master_id: timeslot?.master_id || undefined,\n calendar_id: timeslot?.calendar_id || undefined,\n email_language: this.getTwoLetterLanguageCode(language),\n }),\n headers,\n );\n\n this.schedulerStore.set('isLoading', false);\n if ('data' in response) {\n this.schedulerStore.set('eventInfo', response.data);\n return response;\n }\n return { error: response.error };\n }\n\n while (order.length > 0) {\n participantToBookWith = order.shift()!;\n\n if (!emails.includes(participantToBookWith)) {\n continue; // Skip if the email is not part of the timeslot\n }\n\n const response = await this.makeAPIRequest<NylasEvent>(\n decodeURIComponent(url),\n 'POST',\n JSON.stringify({\n participants: participantToBookWith ? [{ email: participantToBookWith }] : undefined,\n additional_fields,\n additional_guests: guests,\n guest: { ...primaryGuest },\n start_time: timeslot.start_time.getTime() / 1000,\n end_time: timeslot.end_time.getTime() / 1000,\n timezone: timezone,\n email_language: this.getTwoLetterLanguageCode(language),\n }),\n headers,\n );\n\n if ('data' in response) {\n // Successful booking\n this.schedulerStore.set('isLoading', false);\n this.schedulerStore.set('eventInfo', response?.data);\n return response;\n } else if (response.error?.message?.startsWith('The selected timeslot is unavailable')) {\n // Retry with the next email in the order\n continue;\n } else {\n // Return other errors\n this.schedulerStore.set('isLoading', false);\n const errorType = response.error?.type;\n let error = response.error;\n if (errorType && errorType in this.errors.api(i18next.t('createBookingErrorTitle'))) {\n const errorMessage = this.getErrorMessage(error);\n error = this.errors.api(i18next.t('createBookingErrorTitle'))[errorType as APIErrorType](errorMessage);\n }\n return { error };\n }\n }\n\n // If no emails in order succeed\n this.schedulerStore.set('isLoading', false);\n return {\n error: this.errors.api(i18next.t('createBookingErrorTitle')).timeslot_not_available('The selected timeslot is unavailable'),\n };\n }\n\n /**\n * Get UI settings for the scheduler.\n */\n public async getUISettings(signal?: AbortSignal): Promise<NylasSchedulerResponse<UISettingsResponse>> {\n this.schedulerStore.set('isLoading', true);\n const bookingId = this.schedulerStore.get('rescheduleBookingId');\n const headers = this.getHeaders();\n let configIdParam =\n !this.sessionId && this.configId\n ? `?configuration_id=${this.configId}`\n : !this.sessionId && this.slug && this.clientId\n ? `?slug=${this.slug}&client_id=${this.clientId}`\n : '';\n if (bookingId && !!configIdParam) {\n configIdParam += `&booking_id=${bookingId}`;\n } else if (bookingId) {\n configIdParam += `?booking_id=${bookingId}`;\n }\n\n const url = `/v3/scheduling/ui-settings${configIdParam}`;\n\n const response = await this.makeAPIRequest<UISettingsResponse>(url, 'GET', undefined, headers, signal);\n if ('error' in response) {\n this.schedulerStore.set('isLoading', false);\n const errorType = response.error?.type;\n let error = response.error;\n if (errorType && errorType in this.errors.api(i18next.t('getUISettingErrorTitle'))) {\n error = this.errors.api(i18next.t('getUISettingErrorTitle'))[errorType as APIErrorType](error?.message || error?.title || 'Something went wrong');\n }\n return { error };\n }\n if ('data' in response) {\n this.schedulerStore.set('configSettings', response.data);\n this.clientId = response.data.app_client_id || this.clientId;\n }\n this.schedulerStore.set('isLoading', false);\n return response;\n }\n\n private getTwoLetterLanguageCode(language: string) {\n return language.split('-')[0];\n }\n\n private getStartTimeWithMinBookingNotice(startTime: number) {\n const scheduler = this.schedulerStore.get('configSettings')?.scheduler;\n const min_booking_notice = scheduler?.min_booking_notice;\n if (!min_booking_notice) {\n return startTime;\n }\n const today = new Date().getTime();\n\n if (startTime < (today + min_booking_notice * 60 * 1000) / 1000) {\n return Math.floor((today + min_booking_notice * 60 * 1000) / 1000);\n } else {\n return startTime;\n }\n }\n\n private getEndTimeForAvailableDaysInFuture(endTime: number) {\n const today = new Date();\n const availableDaysInFuture = this.schedulerStore.get('configSettings')?.scheduler?.available_days_in_future;\n const endTimeForAvailableDaysInFuture = Math.floor(addDaysToCurrentDate(today, availableDaysInFuture).getTime() / 1000);\n const endTimeWithOffset = Math.min(endTimeForAvailableDaysInFuture, endTime);\n return endTimeWithOffset;\n }\n\n /**\n * Gets the availability for a page.\n * @param startTime The start time.\n * @param endTime The end time.\n * @returns {Promise<AvailabilityResponse>}\n */\n public async getAvailability(startTime: number = 0, endTime: number = 0, signal?: AbortSignal): Promise<NylasSchedulerResponse<AvailabilityResponse>> {\n this.schedulerStore.set('isLoading', true);\n const params = new URLSearchParams();\n const now = new Date();\n const nowTime = now.getTime();\n\n if (endTime && endTime < nowTime / 1000) {\n this.schedulerStore.set('isLoading', false);\n const error = this.errors.component(i18next.t('getAvailabilityErrorTitle')).endtime_not_in_future();\n return { error };\n }\n\n // Calculate the start of the current month if startTime is not provided\n if (!startTime) {\n const startOfMonth = new Date(now.getFullYear(), now.getMonth(), 1);\n startTime = Math.floor(startOfMonth.getTime() / 1000); // Convert to UNIX timestamp in seconds\n }\n\n // Calculate the end of the current month if endTime is not provided\n if (!endTime) {\n const endOfMonth = new Date(now.getFullYear(), now.getMonth() + 1, 0); // Setting day to 0 gets the last day of the previous month, so in this case, the last day of the current month\n endTime = Math.floor(endOfMonth.getTime() / 1000); // Convert to UNIX timestamp in seconds\n }\n\n endTime = this.getEndTimeForAvailableDaysInFuture(endTime);\n const startTimeWithMinBooking = this.getStartTimeWithMinBookingNotice(startTime);\n startTime = startTimeWithMinBooking;\n endTime = startTimeWithMinBooking > endTime ? startTimeWithMinBooking + 1 : endTime;\n\n params.append('start_time', encodeURIComponent(startTime.toString()));\n params.append('end_time', encodeURIComponent(endTime.toString()));\n if (this.configId && !this.sessionId) {\n params.append('configuration_id', encodeURIComponent(this.configId));\n } else if (this.slug && this.clientId && !this.sessionId) {\n params.append('slug', encodeURIComponent(this.slug));\n params.append('client_id', encodeURIComponent(this.clientId));\n }\n\n const rescheduleBookingId = this.schedulerStore.get('rescheduleBookingId');\n if (rescheduleBookingId) {\n params.append('booking_id', encodeURIComponent(rescheduleBookingId));\n }\n const queryString = params.toString();\n const url = `/v3/scheduling/availability${queryString ? `?${queryString}` : ''}`;\n const headers = this.getHeaders();\n const response = await this.makeAPIRequest<AvailabilityResponse>(decodeURIComponent(url), 'GET', undefined, headers, signal);\n\n if ('error' in response) {\n this.schedulerStore.set('availability', []);\n this.schedulerStore.set('isLoading', false);\n const errorType = response.error?.type;\n let error = response.error;\n // If the error message contains \"Failed to find a valid Grant\", return a custom error.\n // This is a temporary fix for showing a user friendly error message and hiding PII from the error message.\n // TODO: Implement proper error handling and remove this temporary fix.\n if (error?.message?.toLowerCase().includes('Failed to find a valid Grant')) {\n const errorMessage = i18next.t('invalidGrantError');\n return {\n error: {\n title: i18next.t('invalidGrantErrorTitle'),\n message: errorMessage,\n category: ErrorCategory.Api,\n },\n };\n }\n\n if (errorType && errorType in this.errors.api(i18next.t('getAvailabilityErrorTitle'))) {\n const errorMessage = this.getErrorMessage(error);\n error = this.errors.api(i18next.t('getAvailabilityErrorTitle'))[errorType as APIErrorType](errorMessage);\n }\n return { error };\n }\n\n if ('data' in response) {\n const availability =\n response.data?.time_slots?.map(timeslot => {\n return {\n ...timeslot,\n start_time: new Date(timeslot.start_time * 1000),\n end_time: new Date(timeslot.end_time * 1000),\n };\n }) || [];\n\n // Filter out timeslots that are in the past\n const availabilityTimeslotsFiltered = availability.filter(timeslot => timeslot.start_time.getTime() > nowTime);\n const availabilityTimeslotSorted = availabilityTimeslotsFiltered.sort((a, b) => a.start_time.getTime() - b.start_time.getTime());\n this.schedulerStore.set('availability', availabilityTimeslotSorted);\n const order = response.data?.order || [];\n this.schedulerStore.set('availabilityOrderEmails', order);\n }\n\n this.schedulerStore.set('isLoading', false);\n return response;\n }\n\n /**\n * Cancels a booking.\n * @param bookingId The booking ID.\n */\n public async cancelBooking(bookingId: string, reason: string): Promise<NylasSchedulerResponse<Partial<NylasEvent>>> {\n this.schedulerStore.set('isLoading', true);\n if (!bookingId) {\n return { error: this.errors.component(i18next.t('cancelBookingErrorTitle')).no_booking_id() };\n }\n const configIdParam =\n !this.sessionId && this.configId\n ? `?configuration_id=${this.configId}`\n : !this.sessionId && this.slug && this.clientId\n ? `?slug=${this.slug}&client_id=${this.clientId}`\n : '';\n const url = `/v3/scheduling/bookings/${bookingId}${configIdParam}`;\n const headers = this.getHeaders();\n const response = await this.makeAPIRequest<Partial<NylasEvent>>(\n decodeURIComponent(url),\n 'DELETE',\n JSON.stringify({\n action: 'cancel',\n cancellation_reason: reason,\n }),\n headers,\n );\n\n if ('error' in response) {\n this.schedulerStore.set('isLoading', false);\n const errorType = response.error?.type;\n let error = response.error;\n if (errorType && errorType in this.errors.api(i18next.t('cancelBookingErrorTitle'))) {\n const errorMessage = this.getErrorMessage(error);\n error = this.errors.api(i18next.t('cancelBookingErrorTitle'))[errorType as APIErrorType](errorMessage);\n }\n return { error };\n }\n\n this.schedulerStore.set('cancelledEventInfo', {\n booking_id: bookingId,\n });\n this.schedulerStore.set('rescheduleBookingId', '');\n this.schedulerStore.set('isLoading', false);\n return response;\n }\n\n /**\n * Reschedules a booking.\n * @param bookingId The booking ID.\n * @param data The booking info.\n * @returns {Promise<NylasResponse<NylasEvent>>}\n */\n public async rescheduleBooking(bookingId: string, data: NylasSchedulerBookingDataWithFlatFields): Promise<NylasSchedulerResponse<NylasEvent>> {\n this.schedulerStore.set('isLoading', true);\n if (!bookingId) {\n return { error: this.errors.component(i18next.t('rescheduleBookingErrorTitle')).no_booking_id() };\n }\n const apiErrors = this.errors.api(i18next.t('rescheduleBookingErrorTitle'));\n const componentErrors = this.errors.component(i18next.t('rescheduleBookingErrorTitle'));\n const { bookingInfo, selectedTimeslot, selectedTimezone, selectedLanguage } = this.schedulerStore.state;\n // Validate data\n const { startTime, endTime, timezone } = data;\n const start_time = startTime || selectedTimeslot?.start_time;\n\n if (!start_time) {\n return { error: componentErrors.invalid_start_time('Please pass \"startTime\" in data or set \"selectedTimeslot\" in the defaultSchedulerState.') };\n }\n const end_time = endTime || selectedTimeslot?.end_time;\n if (!end_time) {\n return { error: componentErrors.invalid_end_time('Please pass \"endTime\" in data or set \"selectedTimeslot\" in the defaultSchedulerState.') };\n }\n\n const order = this.schedulerStore.get('availabilityOrderEmails');\n let participantToBookWith = '';\n if (order.length > 0) {\n // Get the emails in the timeslot\n const emails = selectedTimeslot?.emails || [];\n for (let i = 0; i < order.length; i++) {\n if (emails.includes(order[i])) {\n participantToBookWith = order[i];\n break;\n }\n }\n }\n\n const time_zone = timezone || selectedTimezone;\n if (!time_zone) {\n return { error: componentErrors.invalid_timezone('Please pass \"timezone\" in data or set \"selectedTimezone\" in the defaultSchedulerState.') };\n }\n\n // Group event fields\n const event_id = selectedTimeslot?.event_id || undefined;\n const master_id = selectedTimeslot?.master_id || undefined;\n const calendar_id = selectedTimeslot?.calendar_id || undefined;\n\n const addFields = {};\n Object.entries(bookingInfo?.additionalFields || {}).forEach(([key, entry]) => {\n addFields[key] = (entry as { value: string; type?: string }).value;\n });\n const primaryGuest = data ? data?.primaryParticipant : bookingInfo?.primaryParticipant;\n const guests = data ? data?.guests || [] : bookingInfo?.guests || [];\n const additional_fields = data ? data?.additionalFields : addFields;\n\n const configIdParam =\n !this.sessionId && this.configId\n ? `?configuration_id=${this.configId}`\n : !this.sessionId && this.slug && this.clientId\n ? `?slug=${this.slug}&client_id=${this.clientId}`\n : '';\n const url = `/v3/scheduling/bookings/${bookingId}${configIdParam}`;\n const headers = this.getHeaders();\n const response = await this.makeAPIRequest<NylasEvent>(\n decodeURIComponent(url),\n 'PATCH',\n JSON.stringify({\n start_time: start_time.getTime() / 1000,\n end_time: end_time.getTime() / 1000,\n timezone: time_zone,\n additional_fields,\n guest: { ...primaryGuest },\n additional_guests: guests,\n participants: participantToBookWith ? [{ email: participantToBookWith }] : undefined,\n email_language: this.getTwoLetterLanguageCode(selectedLanguage),\n event_id,\n master_id,\n calendar_id,\n }),\n headers,\n );\n\n if ('error' in response) {\n this.schedulerStore.set('isLoading', false);\n const errorType = response.error?.type;\n let error = response.error;\n if (errorType && errorType in apiErrors) {\n const errorMessage = this.getErrorMessage(error);\n error = apiErrors[errorType as APIErrorType](errorMessage);\n }\n return { error };\n }\n\n const eventInfo = this.schedulerStore.get('reschedulingEventInfo');\n if ('data' in response) {\n this.schedulerStore.set('eventInfo', response?.data);\n // Update rescheduleBookingId to the new booking ID so that subsequent\n // operations (e.g. cancel) target the rescheduled booking, not the original.\n if (response.data?.booking_id) {\n this.schedulerStore.set('rescheduleBookingId', response.data.booking_id);\n }\n } else if (eventInfo) {\n this.schedulerStore.set('eventInfo', eventInfo);\n } else {\n // We should technically never reach this point\n const event = {\n booking_id: bookingId,\n } as NylasEvent;\n this.schedulerStore.set('eventInfo', event);\n }\n\n this.schedulerStore.set('reschedulingEventInfo', undefined);\n this.schedulerStore.set('isLoading', false);\n return response;\n }\n\n /**\n * Updates the booking.\n * @param bookingId The booking ID.\n */\n public async updateBooking(payload: { bookingId: string; status: 'confirmed' | 'cancelled'; reason?: string }): Promise<NylasSchedulerResponse<NylasEvent>> {\n this.schedulerStore.set('isLoading', true);\n const { bookingId, status, reason } = payload;\n const salt = this.schedulerStore.get('organizerConfirmationSalt');\n const errorTitle = status === 'confirmed' ? i18next.t('confirmBookingErrorTitle') : i18next.t('rejectBookingErrorTitle');\n\n if (!bookingId) {\n return { error: this.errors.component(errorTitle).no_booking_id() };\n }\n if (!salt) {\n return { error: this.errors.component(errorTitle).no_salt() };\n }\n\n const configIdParam =\n !this.sessionId && this.configId\n ? `?configuration_id=${this.configId}`\n : !this.sessionId && this.slug && this.clientId\n ? `?slug=${this.slug}&client_id=${this.clientId}`\n : '';\n const url = `/v3/scheduling/bookings/${bookingId}${configIdParam}`;\n const headers = this.getHeaders();\n const response = await this.makeAPIRequest<NylasEvent>(\n decodeURIComponent(url),\n 'PUT',\n JSON.stringify({\n status: status,\n cancellation_reason: reason,\n salt,\n }),\n headers,\n );\n\n if ('error' in response) {\n this.schedulerStore.set('isLoading', false);\n const errorType = response.error?.type;\n let error = response.error;\n if (errorType && errorType in this.errors.api(errorTitle)) {\n const errorMessage = this.getErrorMessage(error);\n error = this.errors.api(errorTitle)[errorType as APIErrorType](errorMessage);\n }\n return { error };\n }\n\n if ('data' in response && status === 'confirmed') {\n this.schedulerStore.set('confirmedEventInfo', response?.data);\n } else if ('request_id' in response && status === 'cancelled') {\n this.schedulerStore.set('cancelledEventInfo', {\n booking_id: bookingId,\n });\n }\n\n this.schedulerStore.set('organizerConfirmationBookingId', '');\n this.schedulerStore.set('isLoading', false);\n return response;\n }\n\n /**\n * Validate timeslot for group event booking\n */\n public async validateGroupEventTimeslot(timeslot: Timeslot) {\n this.schedulerStore.set('isLoading', true);\n const configId = this.schedulerStore.get('configSettings')?.configuration_id;\n if (!configId) {\n return { error: this.errors.component(i18next.t('validateTimeslotErrorTitle')).no_config_id() };\n }\n\n const headers = this.getHeaders();\n const url = `/v3/scheduling/configurations/${configId}/group-events/validate-timeslot`;\n const response = await this.makeAPIRequest<NylasEvent>(\n decodeURIComponent(url),\n 'POST',\n JSON.stringify({\n ...timeslot,\n start_time: timeslot.start_time.getTime() / 1000,\n end_time: timeslot.end_time.getTime() / 1000,\n }),\n headers,\n );\n\n if ('error' in response) {\n this.schedulerStore.set('isLoading', false);\n const errorType = response.error?.type;\n let error = response.error;\n if (errorType && errorType in this.errors.api(i18next.t('validateTimeslotErrorTitle'))) {\n const errorMessage = this.getErrorMessage(error);\n error = this.errors.api(i18next.t('validateTimeslotErrorTitle'))[errorType as APIErrorType](errorMessage);\n }\n this.refetchAvailability();\n return { error };\n }\n\n this.schedulerStore.set('selectedTimeslot', timeslot);\n this.schedulerStore.set('showBookingForm', true);\n this.schedulerStore.set('isLoading', false);\n return response;\n }\n}\n"]}
1
+ {"version":3,"file":"scheduler.js","sourceRoot":"","sources":["../../../../../src/connector/shared/api/scheduler.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAGnD,OAAO,EAAE,MAAM,EAAE,MAAM,8CAA8C,CAAC;AACtE,OAAO,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,8BAA8B,EAAE,MAAM,eAAe,CAAC;AACzG,OAAO,OAAO,MAAM,cAAc,CAAC;AAEnC,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAepC,MAAM,OAAO,yBAAyB;IASpC,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAqC;QAF/G,WAAM,GAAG,IAAI,MAAM,EAAE,CAAC;QAG5B,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;QACrC,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC;QACvC,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;IAEO,UAAU;QAChB,OAAO,IAAI,CAAC,SAAS;YACnB,CAAC,CAAC;gBACE,aAAa,EAAE,UAAU,IAAI,CAAC,SAAS,EAAE;aAC1C;YACH,CAAC,CAAC,EAAE,CAAC;IACT,CAAC;IASM,KAAK,CAAC,cAAc,CAAI,IAAY,EAAE,MAAc,EAAE,IAAwB,EAAE,OAAO,GAAG,EAAE,EAAE,MAAoB;QACvH,IAAI,CAAC;YACH,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;YACnD,YAAY,CAAC,QAAQ,GAAG,IAAI,CAAC;YAC7B,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,kBAAkB,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC,EAAE;gBACxE,MAAM;gBACN,OAAO,EAAE;oBACP,cAAc,EAAE,kBAAkB;oBAClC,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM;oBAChC,UAAU,EAAE,kBAAkB;oBAC9B,8BAA8B,EAAE,OAAO;oBACvC,GAAG,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,+BAA+B,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;oBACxE,GAAG,OAAO;iBACX;gBACD,IAAI;gBACJ,MAAM;aACP,CAAC,CAAC;YAMH,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;gBAC5B,OAAO,EAAE,IAAI,EAAE,SAAS,EAAsB,CAAC;YACjD,CAAC;YASD,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACnC,OAAO,IAAwB,CAAC;QAClC,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YAGpB,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;gBAChC,MAAM,KAAK,CAAC;YACd,CAAC;YAGD,OAAO;gBACL,KAAK,EAAE;oBACL,OAAO,EAAE,KAAK,CAAC,OAAO;oBACtB,KAAK,EAAE,oBAAoB;oBAC3B,IAAI,EAAE,KAAK;iBACZ;aACoB,CAAC;QAC1B,CAAC;IACH,CAAC;IAEO,eAAe,CAAC,KAAkC;QACxD,IAAI,YAAY,GAAG,KAAK,EAAE,OAAO,IAAI,KAAK,EAAE,KAAK,IAAI,sBAAsB,CAAC;QAC5E,IAAI,KAAK,EAAE,IAAI,KAAK,gBAAgB,EAAE,CAAC;YACrC,YAAY,GAAG,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,OAAO,IAAI,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,KAAK,IAAI,sBAAsB,CAAC;QACxH,CAAC;QACD,OAAO,YAAY,CAAC;IACtB,CAAC;IAEM,WAAW,CAAC,QAAgB;QACjC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;IAEM,kBAAkB,CAAC,GAAW;QACnC,IAAI,GAAG,KAAK,GAAG,EAAE,CAAC;YAChB,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;QAC7C,CAAC;QACD,IAAI,CAAC,eAAe,GAAG,GAAG,CAAC;IAC7B,CAAC;IAEM,YAAY,CAAC,SAAiB;QACnC,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC7B,CAAC;IAKM,UAAU,CAAC,IAAU;QAC1B,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;QAC9C,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,kBAAkB,EAAE,IAAI,CAAC,CAAC;IACpD,CAAC;IAKM,UAAU,CAAC,IAAc;QAC9B,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,kBAAkB,EAAE,IAAI,CAAC,CAAC;IACpD,CAAC;IAKM,cAAc,CAAC,QAAgB;QACpC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,kBAAkB,EAAE,QAAQ,CAAC,CAAC;IACxD,CAAC;IAKM,cAAc,CAAC,QAAgB;QACpC,MAAM,gBAAgB,GAAG,8BAA8B,CAAC,QAAQ,CAAC,IAAI,aAAa,CAAC,EAAE,CAAC;QACtF,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,kBAAkB,EAAE,gBAAgB,CAAC,CAAC;QAC9D,OAAO,CAAC,cAAc,CAAC,gBAAgB,CAAC,CAAC;IAC3C,CAAC;IAMM,KAAK,CAAC,oBAAoB,CAAC,KAAc;QAC9C,IAAI,CAAC,KAAK,EAAE,CAAC;YAGX,MAAM,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC,CAAC;QAC9D,CAAC;QACD,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,iBAAiB,EAAE,KAAK,CAAC,CAAC;IACpD,CAAC;IAKM,kBAAkB,CAAC,IAAY;QACpC,MAAM,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC;QAClD,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,aAAa,EAAE;YACrC,GAAG,WAAW;YACd,kBAAkB,EAAE;gBAClB,GAAI,WAAW,EAAE,kBAAsE;gBACvF,IAAI;aACL;SACF,CAAC,CAAC;IACL,CAAC;IAKM,mBAAmB,CAAC,KAAa;QACtC,MAAM,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC;QAClD,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,aAAa,EAAE;YACrC,GAAG,WAAW;YACd,kBAAkB,EAAE;gBAClB,GAAI,WAAW,EAAE,kBAAsE;gBACvF,KAAK;aACN;SACF,CAAC,CAAC;IACL,CAAC;IAOM,SAAS,CAAC,WAAqB;QACpC,MAAM,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC;QAClD,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,aAAa,EAAE;YACrC,GAAG,WAAW;YACd,kBAAkB,EAAE,WAAW,EAAE,kBAAqE;YACtG,MAAM,EAAE,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;SAC3D,CAAC,CAAC;IACL,CAAC;IAQM,mBAAmB,CAAC,gBAAwC;QACjE,MAAM,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC;QAClD,MAAM,QAAQ,GAAG,WAAW,EAAE,gBAAgB,IAAI,EAAE,CAAC;QACrD,MAAM,MAAM,GAA+D,EAAE,GAAG,QAAQ,EAAE,CAAC;QAC3F,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;YACxD,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,QAAQ,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC;QAC5C,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,aAAa,EAAE;YACrC,GAAG,WAAW;YACd,kBAAkB,EAAE,WAAW,EAAE,kBAAqE;YACtG,gBAAgB,EAAE,MAAM;SACzB,CAAC,CAAC;IACL,CAAC;IAKO,oBAAoB;QAC1B,OAAO,CACL,kBAAkB,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,cAAc,CAAkC,CAAC,IAAI,kBAAkB,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,kBAAkB,CAAC,EAAE,UAAU,CAAC,CAC5K,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,mBAAmB,CAAC,aAAmB,IAAI,IAAI,EAAE;QAC7D,MAAM,KAAK,GAAG,IAAI,IAAI,EAAE,CAAC;QAEzB,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,EAAE,UAAU,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC;QAChG,MAAM,mBAAmB,GAAG,SAAS,GAAG,KAAK,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAChH,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,EAAE,UAAU,CAAC,QAAQ,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC;QAClG,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,mBAAmB,EAAE,OAAO,CAAC,CAAC;QACxE,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,KAAK,CAAC,mCAAmC;QAC/C,MAAM,KAAK,GAAG,IAAI,IAAI,EAAE,CAAC;QAEzB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAEhD,MAAM,kBAAkB,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,CAAC,QAAa,EAAE,EAAE;YACxF,MAAM,SAAS,GAAG,kBAAkB,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;YAC1D,OAAO,SAAS,CAAC,CAAC,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;QACpD,CAAC,CAAC,CAAC;QACH,IAAI,aAAa,GAAG,KAAK,CAAC;QAC1B,IAAI,kBAAkB,EAAE,CAAC;YACvB,aAAa,GAAG,kBAAkB,CAAC,kBAAkB,CAAC,UAAU,CAAC,IAAI,KAAK,CAAC;QAC7E,CAAC;QACD,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,cAAc,EAAE,aAAa,CAAC,CAAC;QAEvD,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;QAC3C,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,iBAAiB,EAAE,KAAK,CAAC,CAAC;QAClD,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,kBAAkB,EAAE,IAAI,CAAC,CAAC;QAElD,OAAO,MAAM,CAAC;IAChB,CAAC;IAKM,KAAK,CAAC,aAAa,CAAC,SAAiB;QAC1C,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;QAC3C,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,SAAS,CAAC;QACtD,IAAI,SAAS,EAAE,CAAC;YACd,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,uBAAuB,EAAE,SAAS,CAAC,CAAC;QAC9D,CAAC;QACD,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,qBAAqB,EAAE,SAAS,CAAC,CAAC;QAC1D,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;QAE3B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,mCAAmC,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE;YAC3E,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;QAC9C,CAAC,CAAC,CAAC;QAEH,OAAO,MAAM,CAAC;IAChB,CAAC;IAKM,KAAK,CAAC,SAAS,CAAC,SAAiB;QACtC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,iBAAiB,EAAE,SAAS,CAAC,CAAC;IACxD,CAAC;IAKM,KAAK,CAAC,SAAS,CAAC,SAAiB;QACtC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,iBAAiB,EAAE,SAAS,CAAC,CAAC;IACxD,CAAC;IAEM,KAAK,CAAC,WAAW;QACtB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,mCAAmC,EAAE,CAAC;QAChE,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC;QAC/C,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC;QAC/C,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,oBAAoB,EAAE,IAAI,CAAC,CAAC;QACpD,OAAO,MAAM,CAAC;IAChB,CAAC;IAEM,KAAK,CAAC,MAAM;QACjB,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC;QAC/C,OAAO;IACT,CAAC;IAEM,KAAK,CAAC,YAAY;QACvB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,mCAAmC,EAAE,CAAC;QAChE,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,gCAAgC,EAAE,EAAE,CAAC,CAAC;QAC9D,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,oBAAoB,EAAE,SAAS,CAAC,CAAC;QACzD,OAAO,MAAM,CAAC;IAChB,CAAC;IAOM,KAAK,CAAC,YAAY,CAAC,IAAwE;QAChG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;QAC3C,MAAM,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,WAAW,EAAE,gBAAgB,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC;QAExG,IAAI,CAAC,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YAC1B,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,eAAe,EAAE,EAAE,CAAC;QAClG,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,EAAE,QAAQ,IAAI,gBAAgB,CAAC;QACpD,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,oBAAoB,EAAE,EAAE,CAAC;QACvG,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,IAAI,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,gBAAgB,CAAC;QAC5E,MAAM,QAAQ,GAAG,gBAAgB,IAAI,OAAO,CAAC;QAE7C,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,oBAAoB,EAAE,EAAE,CAAC;QACvG,CAAC;QAED,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC,CAAC;QAEtE,IAAI,qBAAqB,GAAG,EAAE,CAAC;QAC/B,MAAM,MAAM,GAAG,QAAQ,EAAE,MAAM,IAAI,EAAE,CAAC;QAEtC,MAAM,SAAS,GAAG,EAAE,CAAC;QACrB,MAAM,CAAC,OAAO,CAAC,WAAW,EAAE,gBAAgB,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;YAC3E,SAAS,CAAC,GAAG,CAAC,GAAI,KAA0C,CAAC,KAAK,CAAC;QACrE,CAAC,CAAC,CAAC;QAEH,MAAM,YAAY,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,kBAAkB,CAAC,CAAC,CAAC,WAAW,EAAE,kBAAkB,CAAC;QACvF,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,IAAI,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,MAAM,IAAI,EAAE,CAAC;QACrE,MAAM,iBAAiB,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC,CAAC,SAAS,CAAC;QAEpE,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QAClC,MAAM,aAAa,GACjB,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,QAAQ;YAC9B,CAAC,CAAC,qBAAqB,IAAI,CAAC,QAAQ,EAAE;YACtC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ;gBAC7C,CAAC,CAAC,SAAS,IAAI,CAAC,IAAI,cAAc,IAAI,CAAC,QAAQ,EAAE;gBACjD,CAAC,CAAC,EAAE,CAAC;QACX,MAAM,GAAG,GAAG,0BAA0B,aAAa,EAAE,CAAC;QAGtD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,cAAc,CACxC,kBAAkB,CAAC,GAAG,CAAC,EACvB,MAAM,EACN,IAAI,CAAC,SAAS,CAAC;gBACb,iBAAiB;gBACjB,iBAAiB,EAAE,MAAM;gBACzB,KAAK,EAAE,EAAE,GAAG,YAAY,EAAE;gBAC1B,UAAU,EAAE,QAAQ,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,IAAI;gBAChD,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,OAAO,EAAE,GAAG,IAAI;gBAC5C,QAAQ;gBACR,QAAQ,EAAE,QAAQ,EAAE,QAAQ,IAAI,SAAS;gBACzC,SAAS,EAAE,QAAQ,EAAE,SAAS,IAAI,SAAS;gBAC3C,WAAW,EAAE,QAAQ,EAAE,WAAW,IAAI,SAAS;gBAC/C,cAAc,EAAE,IAAI,CAAC,wBAAwB,CAAC,QAAQ,CAAC;aACxD,CAAC,EACF,OAAO,CACR,CAAC;YAEF,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;YAC5C,IAAI,MAAM,IAAI,QAAQ,EAAE,CAAC;gBACvB,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,WAAW,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;gBACpD,OAAO,QAAQ,CAAC;YAClB,CAAC;YACD,OAAO,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAC;QACnC,CAAC;QAED,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxB,qBAAqB,GAAG,KAAK,CAAC,KAAK,EAAG,CAAC;YAEvC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,qBAAqB,CAAC,EAAE,CAAC;gBAC5C,SAAS;YACX,CAAC;YAED,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,cAAc,CACxC,kBAAkB,CAAC,GAAG,CAAC,EACvB,MAAM,EACN,IAAI,CAAC,SAAS,CAAC;gBACb,YAAY,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,qBAAqB,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS;gBACpF,iBAAiB;gBACjB,iBAAiB,EAAE,MAAM;gBACzB,KAAK,EAAE,EAAE,GAAG,YAAY,EAAE;gBAC1B,UAAU,EAAE,QAAQ,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,IAAI;gBAChD,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,OAAO,EAAE,GAAG,IAAI;gBAC5C,QAAQ,EAAE,QAAQ;gBAClB,cAAc,EAAE,IAAI,CAAC,wBAAwB,CAAC,QAAQ,CAAC;aACxD,CAAC,EACF,OAAO,CACR,CAAC;YAEF,IAAI,MAAM,IAAI,QAAQ,EAAE,CAAC;gBAEvB,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;gBAC5C,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,WAAW,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;gBACrD,OAAO,QAAQ,CAAC;YAClB,CAAC;iBAAM,IAAI,QAAQ,CAAC,KAAK,EAAE,OAAO,EAAE,UAAU,CAAC,sCAAsC,CAAC,EAAE,CAAC;gBAEvF,SAAS;YACX,CAAC;iBAAM,CAAC;gBAEN,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;gBAC5C,MAAM,SAAS,GAAG,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC;gBACvC,IAAI,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC;gBAC3B,IAAI,SAAS,IAAI,SAAS,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,EAAE,CAAC;oBACpF,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;oBACjD,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,SAAyB,CAAC,CAAC,YAAY,CAAC,CAAC;gBACzG,CAAC;gBACD,OAAO,EAAE,KAAK,EAAE,CAAC;YACnB,CAAC;QACH,CAAC;QAGD,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;QAC5C,OAAO;YACL,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,sBAAsB,CAAC,sCAAsC,CAAC;SAC5H,CAAC;IACJ,CAAC;IAKM,KAAK,CAAC,aAAa,CAAC,MAAoB;QAC7C,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;QAC3C,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;QACjE,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QAClC,IAAI,aAAa,GACf,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,QAAQ;YAC9B,CAAC,CAAC,qBAAqB,IAAI,CAAC,QAAQ,EAAE;YACtC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ;gBAC7C,CAAC,CAAC,SAAS,IAAI,CAAC,IAAI,cAAc,IAAI,CAAC,QAAQ,EAAE;gBACjD,CAAC,CAAC,EAAE,CAAC;QACX,IAAI,SAAS,IAAI,CAAC,CAAC,aAAa,EAAE,CAAC;YACjC,aAAa,IAAI,eAAe,SAAS,EAAE,CAAC;QAC9C,CAAC;aAAM,IAAI,SAAS,EAAE,CAAC;YACrB,aAAa,IAAI,eAAe,SAAS,EAAE,CAAC;QAC9C,CAAC;QAED,MAAM,GAAG,GAAG,6BAA6B,aAAa,EAAE,CAAC;QAEzD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,cAAc,CAAqB,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;QACvG,IAAI,OAAO,IAAI,QAAQ,EAAE,CAAC;YACxB,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;YAC5C,MAAM,SAAS,GAAG,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC;YACvC,IAAI,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC;YAC3B,IAAI,SAAS,IAAI,SAAS,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,EAAE,CAAC;gBACnF,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,SAAyB,CAAC,CAAC,KAAK,EAAE,OAAO,IAAI,KAAK,EAAE,KAAK,IAAI,sBAAsB,CAAC,CAAC;YACpJ,CAAC;YACD,OAAO,EAAE,KAAK,EAAE,CAAC;QACnB,CAAC;QACD,IAAI,MAAM,IAAI,QAAQ,EAAE,CAAC;YACvB,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,gBAAgB,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;YACzD,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,QAAQ,CAAC;QAC/D,CAAC;QACD,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;QAC5C,OAAO,QAAQ,CAAC;IAClB,CAAC;IAEO,wBAAwB,CAAC,QAAgB;QAC/C,OAAO,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAChC,CAAC;IAEO,gCAAgC,CAAC,SAAiB;QACxD,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE,SAAS,CAAC;QACvE,MAAM,kBAAkB,GAAG,SAAS,EAAE,kBAAkB,CAAC;QACzD,IAAI,CAAC,kBAAkB,EAAE,CAAC;YACxB,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,MAAM,KAAK,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;QAEnC,IAAI,SAAS,GAAG,CAAC,KAAK,GAAG,kBAAkB,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC;YAChE,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,kBAAkB,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;QACrE,CAAC;aAAM,CAAC;YACN,OAAO,SAAS,CAAC;QACnB,CAAC;IACH,CAAC;IAEO,kCAAkC,CAAC,OAAe;QACxD,MAAM,KAAK,GAAG,IAAI,IAAI,EAAE,CAAC;QACzB,MAAM,qBAAqB,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE,SAAS,EAAE,wBAAwB,CAAC;QAC7G,MAAM,+BAA+B,GAAG,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC,KAAK,EAAE,qBAAqB,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;QACxH,MAAM,iBAAiB,GAAG,IAAI,CAAC,GAAG,CAAC,+BAA+B,EAAE,OAAO,CAAC,CAAC;QAC7E,OAAO,iBAAiB,CAAC;IAC3B,CAAC;IAQM,KAAK,CAAC,eAAe,CAAC,YAAoB,CAAC,EAAE,UAAkB,CAAC,EAAE,MAAoB;QAC3F,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;QAC3C,MAAM,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;QACrC,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,EAAE,CAAC;QAE9B,IAAI,OAAO,IAAI,OAAO,GAAG,OAAO,GAAG,IAAI,EAAE,CAAC;YACxC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;YAC5C,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,2BAA2B,CAAC,CAAC,CAAC,qBAAqB,EAAE,CAAC;YACpG,OAAO,EAAE,KAAK,EAAE,CAAC;QACnB,CAAC;QAGD,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,YAAY,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,EAAE,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC;YACpE,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;QACxD,CAAC;QAGD,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,UAAU,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,EAAE,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;YACtE,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;QACpD,CAAC;QAED,OAAO,GAAG,IAAI,CAAC,kCAAkC,CAAC,OAAO,CAAC,CAAC;QAC3D,MAAM,uBAAuB,GAAG,IAAI,CAAC,gCAAgC,CAAC,SAAS,CAAC,CAAC;QACjF,SAAS,GAAG,uBAAuB,CAAC;QACpC,OAAO,GAAG,uBAAuB,GAAG,OAAO,CAAC,CAAC,CAAC,uBAAuB,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;QAEpF,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,kBAAkB,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QACtE,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,kBAAkB,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QAClE,IAAI,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACrC,MAAM,CAAC,MAAM,CAAC,kBAAkB,EAAE,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;QACvE,CAAC;aAAM,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACzD,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YACrD,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;QAChE,CAAC;QAED,MAAM,mBAAmB,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;QAC3E,IAAI,mBAAmB,EAAE,CAAC;YACxB,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,kBAAkB,CAAC,mBAAmB,CAAC,CAAC,CAAC;QACvE,CAAC;QACD,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;QACtC,MAAM,GAAG,GAAG,8BAA8B,WAAW,CAAC,CAAC,CAAC,IAAI,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QACjF,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QAClC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,cAAc,CAAuB,kBAAkB,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;QAE7H,IAAI,OAAO,IAAI,QAAQ,EAAE,CAAC;YACxB,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;YAC5C,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;YAC5C,MAAM,SAAS,GAAG,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC;YACvC,IAAI,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC;YAI3B,IAAI,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC,EAAE,CAAC;gBAC3E,MAAM,YAAY,GAAG,OAAO,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC;gBACpD,OAAO;oBACL,KAAK,EAAE;wBACL,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,wBAAwB,CAAC;wBAC1C,OAAO,EAAE,YAAY;wBACrB,QAAQ,EAAE,aAAa,CAAC,GAAG;qBAC5B;iBACF,CAAC;YACJ,CAAC;YAED,IAAI,SAAS,IAAI,SAAS,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,2BAA2B,CAAC,CAAC,EAAE,CAAC;gBACtF,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;gBACjD,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,2BAA2B,CAAC,CAAC,CAAC,SAAyB,CAAC,CAAC,YAAY,CAAC,CAAC;YAC3G,CAAC;YACD,OAAO,EAAE,KAAK,EAAE,CAAC;QACnB,CAAC;QAED,IAAI,MAAM,IAAI,QAAQ,EAAE,CAAC;YACvB,MAAM,YAAY,GAChB,QAAQ,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,CAAC,QAAQ,CAAC,EAAE;gBACxC,OAAO;oBACL,GAAG,QAAQ;oBACX,UAAU,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,GAAG,IAAI,CAAC;oBAChD,QAAQ,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAAC;iBAC7C,CAAC;YACJ,CAAC,CAAC,IAAI,EAAE,CAAC;YAGX,MAAM,6BAA6B,GAAG,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,OAAO,CAAC,CAAC;YAC/G,MAAM,0BAA0B,GAAG,6BAA6B,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC;YACjI,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,cAAc,EAAE,0BAA0B,CAAC,CAAC;YACpE,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC;YACzC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,yBAAyB,EAAE,KAAK,CAAC,CAAC;QAC5D,CAAC;QAED,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;QAC5C,OAAO,QAAQ,CAAC;IAClB,CAAC;IAMM,KAAK,CAAC,aAAa,CAAC,SAAiB,EAAE,MAAc;QAC1D,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;QAC3C,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,aAAa,EAAE,EAAE,CAAC;QAChG,CAAC;QACD,MAAM,aAAa,GACjB,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,QAAQ;YAC9B,CAAC,CAAC,qBAAqB,IAAI,CAAC,QAAQ,EAAE;YACtC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ;gBAC7C,CAAC,CAAC,SAAS,IAAI,CAAC,IAAI,cAAc,IAAI,CAAC,QAAQ,EAAE;gBACjD,CAAC,CAAC,EAAE,CAAC;QACX,MAAM,GAAG,GAAG,2BAA2B,SAAS,GAAG,aAAa,EAAE,CAAC;QACnE,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QAClC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,cAAc,CACxC,kBAAkB,CAAC,GAAG,CAAC,EACvB,QAAQ,EACR,IAAI,CAAC,SAAS,CAAC;YACb,MAAM,EAAE,QAAQ;YAChB,mBAAmB,EAAE,MAAM;SAC5B,CAAC,EACF,OAAO,CACR,CAAC;QAEF,IAAI,OAAO,IAAI,QAAQ,EAAE,CAAC;YACxB,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;YAC5C,MAAM,SAAS,GAAG,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC;YACvC,IAAI,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC;YAC3B,IAAI,SAAS,IAAI,SAAS,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,EAAE,CAAC;gBACpF,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;gBACjD,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,SAAyB,CAAC,CAAC,YAAY,CAAC,CAAC;YACzG,CAAC;YACD,OAAO,EAAE,KAAK,EAAE,CAAC;QACnB,CAAC;QAED,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,oBAAoB,EAAE;YAC5C,UAAU,EAAE,SAAS;SACtB,CAAC,CAAC;QACH,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,qBAAqB,EAAE,EAAE,CAAC,CAAC;QACnD,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;QAC5C,OAAO,QAAQ,CAAC;IAClB,CAAC;IAQM,KAAK,CAAC,iBAAiB,CAAC,SAAiB,EAAE,IAA6C;QAC7F,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;QAC3C,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,6BAA6B,CAAC,CAAC,CAAC,aAAa,EAAE,EAAE,CAAC;QACpG,CAAC;QACD,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,6BAA6B,CAAC,CAAC,CAAC;QAC5E,MAAM,eAAe,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,6BAA6B,CAAC,CAAC,CAAC;QACxF,MAAM,EAAE,WAAW,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC;QAExG,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC;QAC9C,MAAM,UAAU,GAAG,SAAS,IAAI,gBAAgB,EAAE,UAAU,CAAC;QAE7D,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,OAAO,EAAE,KAAK,EAAE,eAAe,CAAC,kBAAkB,CAAC,yFAAyF,CAAC,EAAE,CAAC;QAClJ,CAAC;QACD,MAAM,QAAQ,GAAG,OAAO,IAAI,gBAAgB,EAAE,QAAQ,CAAC;QACvD,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO,EAAE,KAAK,EAAE,eAAe,CAAC,gBAAgB,CAAC,uFAAuF,CAAC,EAAE,CAAC;QAC9I,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;QACjE,IAAI,qBAAqB,GAAG,EAAE,CAAC;QAC/B,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAErB,MAAM,MAAM,GAAG,gBAAgB,EAAE,MAAM,IAAI,EAAE,CAAC;YAC9C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACtC,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC9B,qBAAqB,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;oBACjC,MAAM;gBACR,CAAC;YACH,CAAC;QACH,CAAC;QAED,MAAM,SAAS,GAAG,QAAQ,IAAI,gBAAgB,CAAC;QAC/C,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO,EAAE,KAAK,EAAE,eAAe,CAAC,gBAAgB,CAAC,wFAAwF,CAAC,EAAE,CAAC;QAC/I,CAAC;QAGD,MAAM,QAAQ,GAAG,gBAAgB,EAAE,QAAQ,IAAI,SAAS,CAAC;QACzD,MAAM,SAAS,GAAG,gBAAgB,EAAE,SAAS,IAAI,SAAS,CAAC;QAC3D,MAAM,WAAW,GAAG,gBAAgB,EAAE,WAAW,IAAI,SAAS,CAAC;QAE/D,MAAM,SAAS,GAAG,EAAE,CAAC;QACrB,MAAM,CAAC,OAAO,CAAC,WAAW,EAAE,gBAAgB,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;YAC3E,SAAS,CAAC,GAAG,CAAC,GAAI,KAA0C,CAAC,KAAK,CAAC;QACrE,CAAC,CAAC,CAAC;QACH,MAAM,YAAY,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,kBAAkB,CAAC,CAAC,CAAC,WAAW,EAAE,kBAAkB,CAAC;QACvF,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,IAAI,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,MAAM,IAAI,EAAE,CAAC;QACrE,MAAM,iBAAiB,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC,CAAC,SAAS,CAAC;QAEpE,MAAM,aAAa,GACjB,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,QAAQ;YAC9B,CAAC,CAAC,qBAAqB,IAAI,CAAC,QAAQ,EAAE;YACtC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ;gBAC7C,CAAC,CAAC,SAAS,IAAI,CAAC,IAAI,cAAc,IAAI,CAAC,QAAQ,EAAE;gBACjD,CAAC,CAAC,EAAE,CAAC;QACX,MAAM,GAAG,GAAG,2BAA2B,SAAS,GAAG,aAAa,EAAE,CAAC;QACnE,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QAClC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,cAAc,CACxC,kBAAkB,CAAC,GAAG,CAAC,EACvB,OAAO,EACP,IAAI,CAAC,SAAS,CAAC;YACb,UAAU,EAAE,UAAU,CAAC,OAAO,EAAE,GAAG,IAAI;YACvC,QAAQ,EAAE,QAAQ,CAAC,OAAO,EAAE,GAAG,IAAI;YACnC,QAAQ,EAAE,SAAS;YACnB,iBAAiB;YACjB,KAAK,EAAE,EAAE,GAAG,YAAY,EAAE;YAC1B,iBAAiB,EAAE,MAAM;YACzB,YAAY,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,qBAAqB,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS;YACpF,cAAc,EAAE,IAAI,CAAC,wBAAwB,CAAC,gBAAgB,CAAC;YAC/D,QAAQ;YACR,SAAS;YACT,WAAW;SACZ,CAAC,EACF,OAAO,CACR,CAAC;QAEF,IAAI,OAAO,IAAI,QAAQ,EAAE,CAAC;YACxB,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;YAC5C,MAAM,SAAS,GAAG,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC;YACvC,IAAI,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC;YAC3B,IAAI,SAAS,IAAI,SAAS,IAAI,SAAS,EAAE,CAAC;gBACxC,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;gBACjD,KAAK,GAAG,SAAS,CAAC,SAAyB,CAAC,CAAC,YAAY,CAAC,CAAC;YAC7D,CAAC;YACD,OAAO,EAAE,KAAK,EAAE,CAAC;QACnB,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;QACnE,IAAI,MAAM,IAAI,QAAQ,EAAE,CAAC;YACvB,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,WAAW,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;YAGrD,IAAI,QAAQ,CAAC,IAAI,EAAE,UAAU,EAAE,CAAC;gBAC9B,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,qBAAqB,EAAE,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAC3E,CAAC;QACH,CAAC;aAAM,IAAI,SAAS,EAAE,CAAC;YACrB,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;QAClD,CAAC;aAAM,CAAC;YAEN,MAAM,KAAK,GAAG;gBACZ,UAAU,EAAE,SAAS;aACR,CAAC;YAChB,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;QAC9C,CAAC;QAED,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,uBAAuB,EAAE,SAAS,CAAC,CAAC;QAC5D,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;QAC5C,OAAO,QAAQ,CAAC;IAClB,CAAC;IAMM,KAAK,CAAC,aAAa,CAAC,OAAkF;QAC3G,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;QAC3C,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;QAC9C,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;QAClE,MAAM,UAAU,GAAG,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,0BAA0B,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC;QAEzH,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,aAAa,EAAE,EAAE,CAAC;QACtE,CAAC;QACD,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC;QAChE,CAAC;QAED,MAAM,aAAa,GACjB,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,QAAQ;YAC9B,CAAC,CAAC,qBAAqB,IAAI,CAAC,QAAQ,EAAE;YACtC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ;gBAC7C,CAAC,CAAC,SAAS,IAAI,CAAC,IAAI,cAAc,IAAI,CAAC,QAAQ,EAAE;gBACjD,CAAC,CAAC,EAAE,CAAC;QACX,MAAM,GAAG,GAAG,2BAA2B,SAAS,GAAG,aAAa,EAAE,CAAC;QACnE,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QAClC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,cAAc,CACxC,kBAAkB,CAAC,GAAG,CAAC,EACvB,KAAK,EACL,IAAI,CAAC,SAAS,CAAC;YACb,MAAM,EAAE,MAAM;YACd,mBAAmB,EAAE,MAAM;YAC3B,IAAI;SACL,CAAC,EACF,OAAO,CACR,CAAC;QAEF,IAAI,OAAO,IAAI,QAAQ,EAAE,CAAC;YACxB,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;YAC5C,MAAM,SAAS,GAAG,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC;YACvC,IAAI,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC;YAC3B,IAAI,SAAS,IAAI,SAAS,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC1D,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;gBACjD,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,SAAyB,CAAC,CAAC,YAAY,CAAC,CAAC;YAC/E,CAAC;YACD,OAAO,EAAE,KAAK,EAAE,CAAC;QACnB,CAAC;QAED,IAAI,MAAM,IAAI,QAAQ,IAAI,MAAM,KAAK,WAAW,EAAE,CAAC;YACjD,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,oBAAoB,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;QAChE,CAAC;aAAM,IAAI,YAAY,IAAI,QAAQ,IAAI,MAAM,KAAK,WAAW,EAAE,CAAC;YAC9D,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,oBAAoB,EAAE;gBAC5C,UAAU,EAAE,SAAS;aACtB,CAAC,CAAC;QACL,CAAC;QAED,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,gCAAgC,EAAE,EAAE,CAAC,CAAC;QAC9D,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;QAC5C,OAAO,QAAQ,CAAC;IAClB,CAAC;IAKM,KAAK,CAAC,0BAA0B,CAAC,QAAkB;QACxD,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;QAC3C,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;QAC7E,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,4BAA4B,CAAC,CAAC,CAAC,YAAY,EAAE,EAAE,CAAC;QAClG,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QAClC,MAAM,GAAG,GAAG,iCAAiC,QAAQ,iCAAiC,CAAC;QACvF,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,cAAc,CACxC,kBAAkB,CAAC,GAAG,CAAC,EACvB,MAAM,EACN,IAAI,CAAC,SAAS,CAAC;YACb,GAAG,QAAQ;YACX,UAAU,EAAE,QAAQ,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,IAAI;YAChD,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,OAAO,EAAE,GAAG,IAAI;SAC7C,CAAC,EACF,OAAO,CACR,CAAC;QAEF,IAAI,OAAO,IAAI,QAAQ,EAAE,CAAC;YACxB,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;YAC5C,MAAM,SAAS,GAAG,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC;YACvC,IAAI,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC;YAC3B,IAAI,SAAS,IAAI,SAAS,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,4BAA4B,CAAC,CAAC,EAAE,CAAC;gBACvF,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;gBACjD,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,4BAA4B,CAAC,CAAC,CAAC,SAAyB,CAAC,CAAC,YAAY,CAAC,CAAC;YAC5G,CAAC;YACD,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;YAC9C,OAAO,EAAE,KAAK,EAAE,CAAC;QACnB,CAAC;QAED,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,kBAAkB,EAAE,QAAQ,CAAC,CAAC;QACtD,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,iBAAiB,EAAE,IAAI,CAAC,CAAC;QACjD,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;QAC5C,OAAO,QAAQ,CAAC;IAClB,CAAC;CACF","sourcesContent":["import { AvailabilityResponse, NylasSchedulerBookingData, NylasSchedulerBookingDataWithFlatFields, NylasEvent, UISettingsResponse } from '@/common/types';\nimport { LANGUAGE_CODE } from '@/common/constants';\nimport { NylasSchedulerStoreType } from '../../../components';\nimport type { NylasErrorResponse, NylasResponse, NylasSchedulerResponse, Timeslot } from '@nylas/core';\nimport { Errors } from '@/connector/nylas-scheduler-connector/errors';\nimport { addDaysToCurrentDate, normalizeDateInput, normalizeSupportedLanguageCode } from '@/utils/utils';\nimport i18next from '@/utils/i18n';\nimport { APIErrorType } from '@nylas/core';\nimport { ErrorCategory } from '@/types/index';\nimport { version } from '@/version';\n\ntype NylasSchedulerAPIConnectorOptions = {\n schedulerAPIURL: string;\n schedulerStore: NylasSchedulerStoreType;\n sessionId?: string;\n configId?: string;\n slug?: string;\n clientId?: string;\n};\n\n/**\n * NylaSchedulerConnector\n * This class is used to make API requests to the scheduler.\n */\nexport class NylaSchedulerAPIConnector {\n private schedulerStore: NylasSchedulerStoreType;\n private schedulerAPIURL: string;\n private sessionId: string | undefined;\n private configId: string | undefined;\n private slug: string | undefined;\n private clientId: string | undefined;\n private errors = new Errors();\n\n constructor({ schedulerAPIURL, schedulerStore, sessionId, configId, slug, clientId }: NylasSchedulerAPIConnectorOptions) {\n this.schedulerStore = schedulerStore;\n this.schedulerAPIURL = schedulerAPIURL;\n this.sessionId = sessionId;\n this.configId = configId;\n this.slug = slug;\n this.clientId = clientId;\n }\n\n private getHeaders() {\n return this.sessionId\n ? {\n Authorization: `Bearer ${this.sessionId}`,\n }\n : {};\n }\n\n /**\n * Makes an API request to the scheduler.\n * @param path The path to the API endpoint.\n * @param method The HTTP method.\n * @param body The request body (if any).\n * @returns {Promise<T>}\n */\n public async makeAPIRequest<T>(path: string, method: string, body: string | undefined, headers = {}, signal?: AbortSignal): Promise<NylasResponse<T>> {\n try {\n const schedulerURL = new URL(this.schedulerAPIURL);\n schedulerURL.pathname = path;\n const response = await fetch(decodeURIComponent(schedulerURL.toString()), {\n method,\n headers: {\n 'Content-Type': 'application/json',\n 'Origin': window.location.origin,\n 'X-Source': 'nylas-scheduling',\n 'X-Nylas-Web-Elements-Version': version,\n ...(this.clientId && { 'X-Nylas-Application-Public-Id': this.clientId }),\n ...headers,\n },\n body,\n signal,\n });\n // A successful mutation (e.g. cancelling a booking) can respond with 204 No\n // Content and an empty body. Calling response.json() on an empty body throws\n // \"Unexpected end of JSON input\", which the catch block below would surface as a\n // misleading \"API request failed\" even though the request succeeded. Handle the\n // no-content response explicitly rather than parsing a body that isn't there.\n if (response.status === 204) {\n return { data: undefined } as NylasResponse<T>;\n }\n // The server returns a json object for errors: eg.\n // {\n // \"request_id\": \"<request_id>\",\n // \"error\": {\n // \"type\": \"not_found_error\",\n // \"message\": \"Session not found\"\n // }\n // }\n const data = await response.json();\n return data as NylasResponse<T>;\n } catch (error: any) {\n // Let AbortError propagate so callers (getUISettings, getAvailability) skip\n // their store-mutation error paths for intentionally cancelled requests.\n if (error.name === 'AbortError') {\n throw error;\n }\n // NOTE: current server implementation doesn't return a JSON object for errors on some endpoints\n // handle this case by returning the error response as a string to be handled downstream\n return {\n error: {\n message: error.message,\n title: 'API request failed',\n type: 'api',\n },\n } as NylasErrorResponse;\n }\n }\n\n private getErrorMessage(error: NylasErrorResponse['error']) {\n let errorMessage = error?.message || error?.title || 'Something went wrong';\n if (error?.type === 'provider_error') {\n errorMessage = error?.provider_error?.error?.message || error?.provider_error?.error?.title || 'Something went wrong';\n }\n return errorMessage;\n }\n\n public setConfigId(configId: string) {\n this.configId = configId;\n }\n\n public setSchedulerAPIURL(url: string) {\n if (url === '/') {\n url = new URL(window.location.href).origin;\n }\n this.schedulerAPIURL = url;\n }\n\n public setSessionId(sessionId: string) {\n this.sessionId = sessionId;\n }\n\n /**\n * Selects a date in the scheduler.\n */\n public selectDate(date: Date) {\n this.schedulerStore.set('selectedDate', date);\n this.schedulerStore.set('selectedTimeslot', null);\n }\n\n /**\n * Selects a time in the scheduler.\n */\n public selectTime(time: Timeslot) {\n this.schedulerStore.set('selectedTimeslot', time);\n }\n\n /**\n * Sets the timezone in the scheduler.\n */\n public selectTimezone(timezone: string) {\n this.schedulerStore.set('selectedTimezone', timezone);\n }\n\n /**\n * Sets the language in the scheduler.\n */\n public selectLanguage(language: string) {\n const selectedLanguage = normalizeSupportedLanguageCode(language) || LANGUAGE_CODE.en;\n this.schedulerStore.set('selectedLanguage', selectedLanguage);\n i18next.changeLanguage(selectedLanguage);\n }\n\n /**\n * Toggles showBookingForm\n * @param value boolean\n */\n public async toggleAdditionalData(value: boolean) {\n if (!value) {\n // Refetch availability for the month the user was viewing, not the current month,\n // otherwise going Back from a later month shows that month with no timeslots.\n await this.refetchAvailability(this.getViewedMonthAnchor());\n }\n this.schedulerStore.set('showBookingForm', value);\n }\n\n /**\n * Set/update the name of the participant booking the event.\n */\n public setParticipantName(name: string) {\n const { bookingInfo } = this.schedulerStore.state;\n this.schedulerStore.set('bookingInfo', {\n ...bookingInfo,\n primaryParticipant: {\n ...(bookingInfo?.primaryParticipant as NylasSchedulerBookingData['primaryParticipant']),\n name,\n },\n });\n }\n\n /**\n * Set/update the email of the participant booking the event.\n */\n public setParticipantEmail(email: string) {\n const { bookingInfo } = this.schedulerStore.state;\n this.schedulerStore.set('bookingInfo', {\n ...bookingInfo,\n primaryParticipant: {\n ...(bookingInfo?.primaryParticipant as NylasSchedulerBookingData['primaryParticipant']),\n email,\n },\n });\n }\n\n /**\n * Set/update the additional guests of the event.\n * Stores the guest emails in the same shape the booking form rehydrates from\n * (an array of participants keyed by email), so they survive back-navigation.\n */\n public setGuests(guestEmails: string[]) {\n const { bookingInfo } = this.schedulerStore.state;\n this.schedulerStore.set('bookingInfo', {\n ...bookingInfo,\n primaryParticipant: bookingInfo?.primaryParticipant as NylasSchedulerBookingData['primaryParticipant'],\n guests: guestEmails.map(email => ({ name: email, email })),\n });\n }\n\n /**\n * Set/update the additional/custom fields of the event.\n * Wraps each flat field value in the `{ value }` shape the booking form\n * rehydrates from, preserving any existing type/readOnly metadata, so custom\n * field entries survive back-navigation.\n */\n public setAdditionalFields(additionalFields: Record<string, string>) {\n const { bookingInfo } = this.schedulerStore.state;\n const existing = bookingInfo?.additionalFields ?? {};\n const merged: NonNullable<NylasSchedulerBookingData['additionalFields']> = { ...existing };\n Object.entries(additionalFields).forEach(([key, value]) => {\n merged[key] = { ...existing[key], value };\n });\n this.schedulerStore.set('bookingInfo', {\n ...bookingInfo,\n primaryParticipant: bookingInfo?.primaryParticipant as NylasSchedulerBookingData['primaryParticipant'],\n additionalFields: merged,\n });\n }\n\n /**\n * The date whose month the date picker is showing: the selected date, else the selected timeslot.\n */\n private getViewedMonthAnchor(): Date | undefined {\n return (\n normalizeDateInput(this.schedulerStore.get('selectedDate') as Date | string | number | null) ?? normalizeDateInput(this.schedulerStore.get('selectedTimeslot')?.start_time)\n );\n }\n\n private async refetchAvailability(anchorDate: Date = new Date()) {\n const today = new Date();\n // Refetch availability for the month containing anchorDate, starting no earlier than now\n const startTime = new Date(anchorDate.getFullYear(), anchorDate.getMonth(), 1).getTime() / 1000;\n const startTimeWithOffset = startTime < today.getTime() / 1000 ? Math.floor(today.getTime() / 1000) : startTime;\n const endTime = new Date(anchorDate.getFullYear(), anchorDate.getMonth() + 1, 1).getTime() / 1000;\n const result = await this.getAvailability(startTimeWithOffset, endTime);\n return result;\n }\n\n private async resetStoreStateAndFetchAvailability() {\n const today = new Date();\n // Refetch availability\n const result = await this.refetchAvailability();\n // Set selected date to first available date\n const firstAvailableDate = this.schedulerStore.get('availability').find((timeslot: any) => {\n const startTime = normalizeDateInput(timeslot.start_time);\n return startTime ? startTime > new Date() : false;\n });\n let _selectedDate = today;\n if (firstAvailableDate) {\n _selectedDate = normalizeDateInput(firstAvailableDate.start_time) || today;\n }\n this.schedulerStore.set('selectedDate', _selectedDate);\n // Reset store state\n this.schedulerStore.set('eventInfo', null);\n this.schedulerStore.set('showBookingForm', false);\n this.schedulerStore.set('selectedTimeslot', null);\n\n return result;\n }\n\n /**\n * Set reschedule booking id\n */\n public async setReschedule(bookingID: string) {\n this.schedulerStore.set('isLoading', true);\n const eventInfo = this.schedulerStore.state.eventInfo;\n if (eventInfo) {\n this.schedulerStore.set('reschedulingEventInfo', eventInfo);\n }\n this.schedulerStore.set('rescheduleBookingId', bookingID);\n await this.getUISettings();\n // Set reschedule booking id\n const result = await this.resetStoreStateAndFetchAvailability().finally(() => {\n this.schedulerStore.set('isLoading', false);\n });\n\n return result;\n }\n\n /**\n * Set cancel booking id\n */\n public async setCancel(bookingID: string) {\n this.schedulerStore.set('cancelBookingId', bookingID);\n }\n\n /**\n * Set reject booking id\n */\n public async setReject(bookingID: string) {\n this.schedulerStore.set('rejectBookingId', bookingID);\n }\n\n public async resetCancel() {\n const result = await this.resetStoreStateAndFetchAvailability();\n this.schedulerStore.set('cancelBookingId', '');\n this.schedulerStore.set('rejectBookingId', '');\n this.schedulerStore.set('cancelledEventInfo', null);\n return result;\n }\n\n public async goBack() {\n this.schedulerStore.set('cancelBookingId', '');\n return;\n }\n\n public async resetConfirm() {\n const result = await this.resetStoreStateAndFetchAvailability();\n this.schedulerStore.set('organizerConfirmationBookingId', '');\n this.schedulerStore.set('confirmedEventInfo', undefined);\n return result;\n }\n\n /**\n * Book the selected timeslot.\n * @param data The booking info.\n * @returns {Promise<NylasResponse<NylasEvent>>}\n */\n public async bookTimeslot(data?: NylasSchedulerBookingDataWithFlatFields & { timeslot?: Timeslot }): Promise<NylasSchedulerResponse<NylasEvent>> {\n this.schedulerStore.set('isLoading', true);\n const { selectedTimeslot, selectedTimezone, bookingInfo, selectedLanguage } = this.schedulerStore.state;\n\n if (!data && !bookingInfo) {\n return { error: this.errors.component(i18next.t('createBookingErrorTitle')).no_booking_info() };\n }\n\n const timeslot = data?.timeslot || selectedTimeslot;\n if (!timeslot) {\n return { error: this.errors.component(i18next.t('createBookingErrorTitle')).no_timeslot_selected() };\n }\n\n const timezone = data && data?.timezone ? data?.timezone : selectedTimezone;\n const language = selectedLanguage || 'en-US';\n\n if (!timezone) {\n return { error: this.errors.component(i18next.t('createBookingErrorTitle')).no_timezone_selected() };\n }\n\n const order = [...this.schedulerStore.get('availabilityOrderEmails')];\n\n let participantToBookWith = '';\n const emails = timeslot?.emails || [];\n\n const addFields = {};\n Object.entries(bookingInfo?.additionalFields || {}).forEach(([key, entry]) => {\n addFields[key] = (entry as { value: string; type?: string }).value;\n });\n\n const primaryGuest = data ? data?.primaryParticipant : bookingInfo?.primaryParticipant;\n const guests = data ? data?.guests || [] : bookingInfo?.guests || [];\n const additional_fields = data ? data?.additionalFields : addFields;\n\n const headers = this.getHeaders();\n const configIdParam =\n !this.sessionId && this.configId\n ? `?configuration_id=${this.configId}`\n : !this.sessionId && this.slug && this.clientId\n ? `?slug=${this.slug}&client_id=${this.clientId}`\n : '';\n const url = `/v3/scheduling/bookings${configIdParam}`;\n\n // If the order array is empty, make a single request without retries\n if (order.length === 0) {\n const response = await this.makeAPIRequest<NylasEvent>(\n decodeURIComponent(url),\n 'POST',\n JSON.stringify({\n additional_fields,\n additional_guests: guests,\n guest: { ...primaryGuest },\n start_time: timeslot.start_time.getTime() / 1000,\n end_time: timeslot.end_time.getTime() / 1000,\n timezone,\n event_id: timeslot?.event_id || undefined,\n master_id: timeslot?.master_id || undefined,\n calendar_id: timeslot?.calendar_id || undefined,\n email_language: this.getTwoLetterLanguageCode(language),\n }),\n headers,\n );\n\n this.schedulerStore.set('isLoading', false);\n if ('data' in response) {\n this.schedulerStore.set('eventInfo', response.data);\n return response;\n }\n return { error: response.error };\n }\n\n while (order.length > 0) {\n participantToBookWith = order.shift()!;\n\n if (!emails.includes(participantToBookWith)) {\n continue; // Skip if the email is not part of the timeslot\n }\n\n const response = await this.makeAPIRequest<NylasEvent>(\n decodeURIComponent(url),\n 'POST',\n JSON.stringify({\n participants: participantToBookWith ? [{ email: participantToBookWith }] : undefined,\n additional_fields,\n additional_guests: guests,\n guest: { ...primaryGuest },\n start_time: timeslot.start_time.getTime() / 1000,\n end_time: timeslot.end_time.getTime() / 1000,\n timezone: timezone,\n email_language: this.getTwoLetterLanguageCode(language),\n }),\n headers,\n );\n\n if ('data' in response) {\n // Successful booking\n this.schedulerStore.set('isLoading', false);\n this.schedulerStore.set('eventInfo', response?.data);\n return response;\n } else if (response.error?.message?.startsWith('The selected timeslot is unavailable')) {\n // Retry with the next email in the order\n continue;\n } else {\n // Return other errors\n this.schedulerStore.set('isLoading', false);\n const errorType = response.error?.type;\n let error = response.error;\n if (errorType && errorType in this.errors.api(i18next.t('createBookingErrorTitle'))) {\n const errorMessage = this.getErrorMessage(error);\n error = this.errors.api(i18next.t('createBookingErrorTitle'))[errorType as APIErrorType](errorMessage);\n }\n return { error };\n }\n }\n\n // If no emails in order succeed\n this.schedulerStore.set('isLoading', false);\n return {\n error: this.errors.api(i18next.t('createBookingErrorTitle')).timeslot_not_available('The selected timeslot is unavailable'),\n };\n }\n\n /**\n * Get UI settings for the scheduler.\n */\n public async getUISettings(signal?: AbortSignal): Promise<NylasSchedulerResponse<UISettingsResponse>> {\n this.schedulerStore.set('isLoading', true);\n const bookingId = this.schedulerStore.get('rescheduleBookingId');\n const headers = this.getHeaders();\n let configIdParam =\n !this.sessionId && this.configId\n ? `?configuration_id=${this.configId}`\n : !this.sessionId && this.slug && this.clientId\n ? `?slug=${this.slug}&client_id=${this.clientId}`\n : '';\n if (bookingId && !!configIdParam) {\n configIdParam += `&booking_id=${bookingId}`;\n } else if (bookingId) {\n configIdParam += `?booking_id=${bookingId}`;\n }\n\n const url = `/v3/scheduling/ui-settings${configIdParam}`;\n\n const response = await this.makeAPIRequest<UISettingsResponse>(url, 'GET', undefined, headers, signal);\n if ('error' in response) {\n this.schedulerStore.set('isLoading', false);\n const errorType = response.error?.type;\n let error = response.error;\n if (errorType && errorType in this.errors.api(i18next.t('getUISettingErrorTitle'))) {\n error = this.errors.api(i18next.t('getUISettingErrorTitle'))[errorType as APIErrorType](error?.message || error?.title || 'Something went wrong');\n }\n return { error };\n }\n if ('data' in response) {\n this.schedulerStore.set('configSettings', response.data);\n this.clientId = response.data.app_client_id || this.clientId;\n }\n this.schedulerStore.set('isLoading', false);\n return response;\n }\n\n private getTwoLetterLanguageCode(language: string) {\n return language.split('-')[0];\n }\n\n private getStartTimeWithMinBookingNotice(startTime: number) {\n const scheduler = this.schedulerStore.get('configSettings')?.scheduler;\n const min_booking_notice = scheduler?.min_booking_notice;\n if (!min_booking_notice) {\n return startTime;\n }\n const today = new Date().getTime();\n\n if (startTime < (today + min_booking_notice * 60 * 1000) / 1000) {\n return Math.floor((today + min_booking_notice * 60 * 1000) / 1000);\n } else {\n return startTime;\n }\n }\n\n private getEndTimeForAvailableDaysInFuture(endTime: number) {\n const today = new Date();\n const availableDaysInFuture = this.schedulerStore.get('configSettings')?.scheduler?.available_days_in_future;\n const endTimeForAvailableDaysInFuture = Math.floor(addDaysToCurrentDate(today, availableDaysInFuture).getTime() / 1000);\n const endTimeWithOffset = Math.min(endTimeForAvailableDaysInFuture, endTime);\n return endTimeWithOffset;\n }\n\n /**\n * Gets the availability for a page.\n * @param startTime The start time.\n * @param endTime The end time.\n * @returns {Promise<AvailabilityResponse>}\n */\n public async getAvailability(startTime: number = 0, endTime: number = 0, signal?: AbortSignal): Promise<NylasSchedulerResponse<AvailabilityResponse>> {\n this.schedulerStore.set('isLoading', true);\n const params = new URLSearchParams();\n const now = new Date();\n const nowTime = now.getTime();\n\n if (endTime && endTime < nowTime / 1000) {\n this.schedulerStore.set('isLoading', false);\n const error = this.errors.component(i18next.t('getAvailabilityErrorTitle')).endtime_not_in_future();\n return { error };\n }\n\n // Calculate the start of the current month if startTime is not provided\n if (!startTime) {\n const startOfMonth = new Date(now.getFullYear(), now.getMonth(), 1);\n startTime = Math.floor(startOfMonth.getTime() / 1000); // Convert to UNIX timestamp in seconds\n }\n\n // Calculate the end of the current month if endTime is not provided\n if (!endTime) {\n const endOfMonth = new Date(now.getFullYear(), now.getMonth() + 1, 0); // Setting day to 0 gets the last day of the previous month, so in this case, the last day of the current month\n endTime = Math.floor(endOfMonth.getTime() / 1000); // Convert to UNIX timestamp in seconds\n }\n\n endTime = this.getEndTimeForAvailableDaysInFuture(endTime);\n const startTimeWithMinBooking = this.getStartTimeWithMinBookingNotice(startTime);\n startTime = startTimeWithMinBooking;\n endTime = startTimeWithMinBooking > endTime ? startTimeWithMinBooking + 1 : endTime;\n\n params.append('start_time', encodeURIComponent(startTime.toString()));\n params.append('end_time', encodeURIComponent(endTime.toString()));\n if (this.configId && !this.sessionId) {\n params.append('configuration_id', encodeURIComponent(this.configId));\n } else if (this.slug && this.clientId && !this.sessionId) {\n params.append('slug', encodeURIComponent(this.slug));\n params.append('client_id', encodeURIComponent(this.clientId));\n }\n\n const rescheduleBookingId = this.schedulerStore.get('rescheduleBookingId');\n if (rescheduleBookingId) {\n params.append('booking_id', encodeURIComponent(rescheduleBookingId));\n }\n const queryString = params.toString();\n const url = `/v3/scheduling/availability${queryString ? `?${queryString}` : ''}`;\n const headers = this.getHeaders();\n const response = await this.makeAPIRequest<AvailabilityResponse>(decodeURIComponent(url), 'GET', undefined, headers, signal);\n\n if ('error' in response) {\n this.schedulerStore.set('availability', []);\n this.schedulerStore.set('isLoading', false);\n const errorType = response.error?.type;\n let error = response.error;\n // If the error message contains \"Failed to find a valid Grant\", return a custom error.\n // This is a temporary fix for showing a user friendly error message and hiding PII from the error message.\n // TODO: Implement proper error handling and remove this temporary fix.\n if (error?.message?.toLowerCase().includes('Failed to find a valid Grant')) {\n const errorMessage = i18next.t('invalidGrantError');\n return {\n error: {\n title: i18next.t('invalidGrantErrorTitle'),\n message: errorMessage,\n category: ErrorCategory.Api,\n },\n };\n }\n\n if (errorType && errorType in this.errors.api(i18next.t('getAvailabilityErrorTitle'))) {\n const errorMessage = this.getErrorMessage(error);\n error = this.errors.api(i18next.t('getAvailabilityErrorTitle'))[errorType as APIErrorType](errorMessage);\n }\n return { error };\n }\n\n if ('data' in response) {\n const availability =\n response.data?.time_slots?.map(timeslot => {\n return {\n ...timeslot,\n start_time: new Date(timeslot.start_time * 1000),\n end_time: new Date(timeslot.end_time * 1000),\n };\n }) || [];\n\n // Filter out timeslots that are in the past\n const availabilityTimeslotsFiltered = availability.filter(timeslot => timeslot.start_time.getTime() > nowTime);\n const availabilityTimeslotSorted = availabilityTimeslotsFiltered.sort((a, b) => a.start_time.getTime() - b.start_time.getTime());\n this.schedulerStore.set('availability', availabilityTimeslotSorted);\n const order = response.data?.order || [];\n this.schedulerStore.set('availabilityOrderEmails', order);\n }\n\n this.schedulerStore.set('isLoading', false);\n return response;\n }\n\n /**\n * Cancels a booking.\n * @param bookingId The booking ID.\n */\n public async cancelBooking(bookingId: string, reason: string): Promise<NylasSchedulerResponse<Partial<NylasEvent>>> {\n this.schedulerStore.set('isLoading', true);\n if (!bookingId) {\n return { error: this.errors.component(i18next.t('cancelBookingErrorTitle')).no_booking_id() };\n }\n const configIdParam =\n !this.sessionId && this.configId\n ? `?configuration_id=${this.configId}`\n : !this.sessionId && this.slug && this.clientId\n ? `?slug=${this.slug}&client_id=${this.clientId}`\n : '';\n const url = `/v3/scheduling/bookings/${bookingId}${configIdParam}`;\n const headers = this.getHeaders();\n const response = await this.makeAPIRequest<Partial<NylasEvent>>(\n decodeURIComponent(url),\n 'DELETE',\n JSON.stringify({\n action: 'cancel',\n cancellation_reason: reason,\n }),\n headers,\n );\n\n if ('error' in response) {\n this.schedulerStore.set('isLoading', false);\n const errorType = response.error?.type;\n let error = response.error;\n if (errorType && errorType in this.errors.api(i18next.t('cancelBookingErrorTitle'))) {\n const errorMessage = this.getErrorMessage(error);\n error = this.errors.api(i18next.t('cancelBookingErrorTitle'))[errorType as APIErrorType](errorMessage);\n }\n return { error };\n }\n\n this.schedulerStore.set('cancelledEventInfo', {\n booking_id: bookingId,\n });\n this.schedulerStore.set('rescheduleBookingId', '');\n this.schedulerStore.set('isLoading', false);\n return response;\n }\n\n /**\n * Reschedules a booking.\n * @param bookingId The booking ID.\n * @param data The booking info.\n * @returns {Promise<NylasResponse<NylasEvent>>}\n */\n public async rescheduleBooking(bookingId: string, data: NylasSchedulerBookingDataWithFlatFields): Promise<NylasSchedulerResponse<NylasEvent>> {\n this.schedulerStore.set('isLoading', true);\n if (!bookingId) {\n return { error: this.errors.component(i18next.t('rescheduleBookingErrorTitle')).no_booking_id() };\n }\n const apiErrors = this.errors.api(i18next.t('rescheduleBookingErrorTitle'));\n const componentErrors = this.errors.component(i18next.t('rescheduleBookingErrorTitle'));\n const { bookingInfo, selectedTimeslot, selectedTimezone, selectedLanguage } = this.schedulerStore.state;\n // Validate data\n const { startTime, endTime, timezone } = data;\n const start_time = startTime || selectedTimeslot?.start_time;\n\n if (!start_time) {\n return { error: componentErrors.invalid_start_time('Please pass \"startTime\" in data or set \"selectedTimeslot\" in the defaultSchedulerState.') };\n }\n const end_time = endTime || selectedTimeslot?.end_time;\n if (!end_time) {\n return { error: componentErrors.invalid_end_time('Please pass \"endTime\" in data or set \"selectedTimeslot\" in the defaultSchedulerState.') };\n }\n\n const order = this.schedulerStore.get('availabilityOrderEmails');\n let participantToBookWith = '';\n if (order.length > 0) {\n // Get the emails in the timeslot\n const emails = selectedTimeslot?.emails || [];\n for (let i = 0; i < order.length; i++) {\n if (emails.includes(order[i])) {\n participantToBookWith = order[i];\n break;\n }\n }\n }\n\n const time_zone = timezone || selectedTimezone;\n if (!time_zone) {\n return { error: componentErrors.invalid_timezone('Please pass \"timezone\" in data or set \"selectedTimezone\" in the defaultSchedulerState.') };\n }\n\n // Group event fields\n const event_id = selectedTimeslot?.event_id || undefined;\n const master_id = selectedTimeslot?.master_id || undefined;\n const calendar_id = selectedTimeslot?.calendar_id || undefined;\n\n const addFields = {};\n Object.entries(bookingInfo?.additionalFields || {}).forEach(([key, entry]) => {\n addFields[key] = (entry as { value: string; type?: string }).value;\n });\n const primaryGuest = data ? data?.primaryParticipant : bookingInfo?.primaryParticipant;\n const guests = data ? data?.guests || [] : bookingInfo?.guests || [];\n const additional_fields = data ? data?.additionalFields : addFields;\n\n const configIdParam =\n !this.sessionId && this.configId\n ? `?configuration_id=${this.configId}`\n : !this.sessionId && this.slug && this.clientId\n ? `?slug=${this.slug}&client_id=${this.clientId}`\n : '';\n const url = `/v3/scheduling/bookings/${bookingId}${configIdParam}`;\n const headers = this.getHeaders();\n const response = await this.makeAPIRequest<NylasEvent>(\n decodeURIComponent(url),\n 'PATCH',\n JSON.stringify({\n start_time: start_time.getTime() / 1000,\n end_time: end_time.getTime() / 1000,\n timezone: time_zone,\n additional_fields,\n guest: { ...primaryGuest },\n additional_guests: guests,\n participants: participantToBookWith ? [{ email: participantToBookWith }] : undefined,\n email_language: this.getTwoLetterLanguageCode(selectedLanguage),\n event_id,\n master_id,\n calendar_id,\n }),\n headers,\n );\n\n if ('error' in response) {\n this.schedulerStore.set('isLoading', false);\n const errorType = response.error?.type;\n let error = response.error;\n if (errorType && errorType in apiErrors) {\n const errorMessage = this.getErrorMessage(error);\n error = apiErrors[errorType as APIErrorType](errorMessage);\n }\n return { error };\n }\n\n const eventInfo = this.schedulerStore.get('reschedulingEventInfo');\n if ('data' in response) {\n this.schedulerStore.set('eventInfo', response?.data);\n // Update rescheduleBookingId to the new booking ID so that subsequent\n // operations (e.g. cancel) target the rescheduled booking, not the original.\n if (response.data?.booking_id) {\n this.schedulerStore.set('rescheduleBookingId', response.data.booking_id);\n }\n } else if (eventInfo) {\n this.schedulerStore.set('eventInfo', eventInfo);\n } else {\n // We should technically never reach this point\n const event = {\n booking_id: bookingId,\n } as NylasEvent;\n this.schedulerStore.set('eventInfo', event);\n }\n\n this.schedulerStore.set('reschedulingEventInfo', undefined);\n this.schedulerStore.set('isLoading', false);\n return response;\n }\n\n /**\n * Updates the booking.\n * @param bookingId The booking ID.\n */\n public async updateBooking(payload: { bookingId: string; status: 'confirmed' | 'cancelled'; reason?: string }): Promise<NylasSchedulerResponse<NylasEvent>> {\n this.schedulerStore.set('isLoading', true);\n const { bookingId, status, reason } = payload;\n const salt = this.schedulerStore.get('organizerConfirmationSalt');\n const errorTitle = status === 'confirmed' ? i18next.t('confirmBookingErrorTitle') : i18next.t('rejectBookingErrorTitle');\n\n if (!bookingId) {\n return { error: this.errors.component(errorTitle).no_booking_id() };\n }\n if (!salt) {\n return { error: this.errors.component(errorTitle).no_salt() };\n }\n\n const configIdParam =\n !this.sessionId && this.configId\n ? `?configuration_id=${this.configId}`\n : !this.sessionId && this.slug && this.clientId\n ? `?slug=${this.slug}&client_id=${this.clientId}`\n : '';\n const url = `/v3/scheduling/bookings/${bookingId}${configIdParam}`;\n const headers = this.getHeaders();\n const response = await this.makeAPIRequest<NylasEvent>(\n decodeURIComponent(url),\n 'PUT',\n JSON.stringify({\n status: status,\n cancellation_reason: reason,\n salt,\n }),\n headers,\n );\n\n if ('error' in response) {\n this.schedulerStore.set('isLoading', false);\n const errorType = response.error?.type;\n let error = response.error;\n if (errorType && errorType in this.errors.api(errorTitle)) {\n const errorMessage = this.getErrorMessage(error);\n error = this.errors.api(errorTitle)[errorType as APIErrorType](errorMessage);\n }\n return { error };\n }\n\n if ('data' in response && status === 'confirmed') {\n this.schedulerStore.set('confirmedEventInfo', response?.data);\n } else if ('request_id' in response && status === 'cancelled') {\n this.schedulerStore.set('cancelledEventInfo', {\n booking_id: bookingId,\n });\n }\n\n this.schedulerStore.set('organizerConfirmationBookingId', '');\n this.schedulerStore.set('isLoading', false);\n return response;\n }\n\n /**\n * Validate timeslot for group event booking\n */\n public async validateGroupEventTimeslot(timeslot: Timeslot) {\n this.schedulerStore.set('isLoading', true);\n const configId = this.schedulerStore.get('configSettings')?.configuration_id;\n if (!configId) {\n return { error: this.errors.component(i18next.t('validateTimeslotErrorTitle')).no_config_id() };\n }\n\n const headers = this.getHeaders();\n const url = `/v3/scheduling/configurations/${configId}/group-events/validate-timeslot`;\n const response = await this.makeAPIRequest<NylasEvent>(\n decodeURIComponent(url),\n 'POST',\n JSON.stringify({\n ...timeslot,\n start_time: timeslot.start_time.getTime() / 1000,\n end_time: timeslot.end_time.getTime() / 1000,\n }),\n headers,\n );\n\n if ('error' in response) {\n this.schedulerStore.set('isLoading', false);\n const errorType = response.error?.type;\n let error = response.error;\n if (errorType && errorType in this.errors.api(i18next.t('validateTimeslotErrorTitle'))) {\n const errorMessage = this.getErrorMessage(error);\n error = this.errors.api(i18next.t('validateTimeslotErrorTitle'))[errorType as APIErrorType](errorMessage);\n }\n this.refetchAvailability(timeslot.start_time);\n return { error };\n }\n\n this.schedulerStore.set('selectedTimeslot', timeslot);\n this.schedulerStore.set('showBookingForm', true);\n this.schedulerStore.set('isLoading', false);\n return response;\n }\n}\n"]}
@@ -1,2 +1,2 @@
1
- export const version = '2.6.0';
1
+ export const version = '2.6.2';
2
2
  //# sourceMappingURL=version.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,CAAC","sourcesContent":["export const version = '2.6.0';\n"]}
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,CAAC","sourcesContent":["export const version = '2.6.2';\n"]}
@@ -1,4 +1,4 @@
1
- import { N as NylasEditorTabsGroup$1, d as defineCustomElement$1 } from './p-DTNmzKXY.js';
1
+ import { N as NylasEditorTabsGroup$1, d as defineCustomElement$1 } from './p-CK_YvIAV.js';
2
2
 
3
3
  const NylasEditorTabsGroup = NylasEditorTabsGroup$1;
4
4
  const defineCustomElement = defineCustomElement$1;
@@ -1,4 +1,4 @@
1
- import { N as NylasEditorTabs$1, d as defineCustomElement$1 } from './p-Z5I7z8cD.js';
1
+ import { N as NylasEditorTabs$1, d as defineCustomElement$1 } from './p-CmX4JCsD.js';
2
2
 
3
3
  const NylasEditorTabs = NylasEditorTabs$1;
4
4
  const defineCustomElement = defineCustomElement$1;
@@ -5,7 +5,7 @@ import { h as dayjs, w as utc, x as timezone, a as debug, d as dataResponse, _ a
5
5
  import { o as o$1, E as ErrorCategory, N as NotificationType } from './p-CWplx7sA.js';
6
6
  import { c as createStore } from './p-DVWbg8if.js';
7
7
  import { i as instance } from './p-BjxQTsOy.js';
8
- import { v as version } from './p-CNj6i-JK.js';
8
+ import { v as version } from './p-BvUse-6u.js';
9
9
  import { d as defineCustomElement$1A } from './p-CGkcVt8h.js';
10
10
  import { d as defineCustomElement$1z } from './p-D0NY8UNC.js';
11
11
  import { d as defineCustomElement$1y } from './p-Baw3jP2X.js';
@@ -58,8 +58,8 @@ import { d as defineCustomElement$Q } from './p-DEJGXMSG.js';
58
58
  import { d as defineCustomElement$P } from './p-r182lPIw.js';
59
59
  import { d as defineCustomElement$O } from './p-DXQVWZkn.js';
60
60
  import { d as defineCustomElement$N } from './p-CI1nvbUl.js';
61
- import { d as defineCustomElement$M } from './p-Z5I7z8cD.js';
62
- import { d as defineCustomElement$L } from './p-DTNmzKXY.js';
61
+ import { d as defineCustomElement$M } from './p-CmX4JCsD.js';
62
+ import { d as defineCustomElement$L } from './p-CK_YvIAV.js';
63
63
  import { d as defineCustomElement$K } from './p-D9XKQ809.js';
64
64
  import { d as defineCustomElement$J } from './p-cf3Hv5c6.js';
65
65
  import { d as defineCustomElement$I } from './p-BnLt26W8.js';
@@ -3,7 +3,7 @@ import { N as NylasBaseProvider } from './p-D04Mu9fK.js';
3
3
  import { $ as normalizeSupportedLanguageCode, L as LANGUAGE_CODE, y as normalizeDateInput, z as addDaysToCurrentDate, a as debug, a0 as detectBrowserLanguageCode, a4 as compactStringToUUIDs, o as LANGUAGE_CODE_TO_LOCALE_MAP, l as capitalizeFirstLetter, I as LANGUAGE_MAP } from './p-CMNiSC4o.js';
4
4
  import { E as ErrorCategory, u } from './p-CWplx7sA.js';
5
5
  import { i as instance } from './p-BjxQTsOy.js';
6
- import { v as version, i as isInitialized, a as init, f as feedbackSyncIntegration, c as captureMessage, b as captureFeedback } from './p-CNj6i-JK.js';
6
+ import { v as version, i as isInitialized, a as init, f as feedbackSyncIntegration, c as captureMessage, b as captureFeedback } from './p-BvUse-6u.js';
7
7
  import { c as createStore } from './p-DVWbg8if.js';
8
8
  import { d as defineCustomElement$D } from './p-CGkcVt8h.js';
9
9
  import { d as defineCustomElement$C } from './p-D0NY8UNC.js';
@@ -269,7 +269,7 @@ class NylaSchedulerAPIConnector {
269
269
  }
270
270
  async toggleAdditionalData(value) {
271
271
  if (!value) {
272
- await this.refetchAvailability();
272
+ await this.refetchAvailability(this.getViewedMonthAnchor());
273
273
  }
274
274
  this.schedulerStore.set('showBookingForm', value);
275
275
  }
@@ -314,11 +314,14 @@ class NylaSchedulerAPIConnector {
314
314
  additionalFields: merged,
315
315
  });
316
316
  }
317
- async refetchAvailability() {
317
+ getViewedMonthAnchor() {
318
+ return (normalizeDateInput(this.schedulerStore.get('selectedDate')) ?? normalizeDateInput(this.schedulerStore.get('selectedTimeslot')?.start_time));
319
+ }
320
+ async refetchAvailability(anchorDate = new Date()) {
318
321
  const today = new Date();
319
- const startTime = new Date(today.getFullYear(), today.getMonth(), 1).getTime() / 1000;
322
+ const startTime = new Date(anchorDate.getFullYear(), anchorDate.getMonth(), 1).getTime() / 1000;
320
323
  const startTimeWithOffset = startTime < today.getTime() / 1000 ? Math.floor(today.getTime() / 1000) : startTime;
321
- const endTime = new Date(today.getFullYear(), today.getMonth() + 1, 1).getTime() / 1000;
324
+ const endTime = new Date(anchorDate.getFullYear(), anchorDate.getMonth() + 1, 1).getTime() / 1000;
322
325
  const result = await this.getAvailability(startTimeWithOffset, endTime);
323
326
  return result;
324
327
  }
@@ -791,7 +794,7 @@ class NylaSchedulerAPIConnector {
791
794
  const errorMessage = this.getErrorMessage(error);
792
795
  error = this.errors.api(instance.t('validateTimeslotErrorTitle'))[errorType](errorMessage);
793
796
  }
794
- this.refetchAvailability();
797
+ this.refetchAvailability(timeslot.start_time);
795
798
  return { error };
796
799
  }
797
800
  this.schedulerStore.set('selectedTimeslot', timeslot);