2022-07-12 21:35:12 +00:00
/* eslint-disable @typescript-eslint/triple-slash-reference */
2022-03-23 22:00:30 +00:00
/// <reference path="../types/ical.d.ts"/>
2023-02-16 22:39:57 +00:00
import type { Prisma } from "@prisma/client" ;
2021-12-09 15:51:37 +00:00
import ICAL from "ical.js" ;
2022-08-17 17:38:21 +00:00
import type { Attendee , DateArray , DurationObject , Person } from "ics" ;
import { createEvent } from "ics" ;
2023-04-12 17:30:39 +00:00
import type { DAVAccount , DAVCalendar , DAVObject } from "tsdav" ;
2021-12-09 15:51:37 +00:00
import {
createAccount ,
createCalendarObject ,
deleteCalendarObject ,
fetchCalendarObjects ,
fetchCalendars ,
getBasicAuthHeaders ,
updateCalendarObject ,
} from "tsdav" ;
import { v4 as uuidv4 } from "uuid" ;
2022-06-28 20:40:58 +00:00
import dayjs from "@calcom/dayjs" ;
2022-08-25 09:18:30 +00:00
import sanitizeCalendarObject from "@calcom/lib/sanitizeCalendarObject" ;
2022-03-23 22:00:30 +00:00
import type {
Calendar ,
CalendarEvent ,
CalendarEventType ,
EventBusyDate ,
IntegrationCalendar ,
NewCalendarEventType ,
} from "@calcom/types/Calendar" ;
2023-02-16 22:39:57 +00:00
import type { CredentialPayload } from "@calcom/types/Credential" ;
2021-12-09 15:51:37 +00:00
2022-03-23 22:00:30 +00:00
import { getLocation , getRichDescription } from "./CalEventParser" ;
import { symmetricDecrypt } from "./crypto" ;
import logger from "./logger" ;
const TIMEZONE_FORMAT = "YYYY-MM-DDTHH:mm:ss[Z]" ;
const DEFAULT_CALENDAR_TYPE = "caldav" ;
2021-12-09 15:51:37 +00:00
2022-01-06 17:28:31 +00:00
const CALENDSO_ENCRYPTION_KEY = process . env . CALENDSO_ENCRYPTION_KEY || "" ;
2021-12-09 15:51:37 +00:00
2023-04-12 17:30:39 +00:00
type FetchObjectsWithOptionalExpandOptionsType = {
selectedCalendars : IntegrationCalendar [ ] ;
startISOString : string ;
dateTo : string ;
headers? : Record < string , string > ;
} ;
2023-01-05 23:38:44 +00:00
function hasFileExtension ( url : string ) : boolean {
// Get the last portion of the URL (after the last '/')
const fileName = url . substring ( url . lastIndexOf ( "/" ) + 1 ) ;
// Check if the file name has a '.' in it and no '/' after the '.'
return fileName . includes ( "." ) && ! fileName . substring ( fileName . lastIndexOf ( "." ) ) . includes ( "/" ) ;
}
2023-04-12 17:30:39 +00:00
function getFileExtension ( url : string ) : string {
2023-01-05 23:38:44 +00:00
// Return null if the URL does not have a file extension
2023-04-12 17:30:39 +00:00
if ( ! hasFileExtension ( url ) ) return "ics" ;
2023-01-05 23:38:44 +00:00
// Get the last portion of the URL (after the last '/')
const fileName = url . substring ( url . lastIndexOf ( "/" ) + 1 ) ;
// Extract the file extension
return fileName . substring ( fileName . lastIndexOf ( "." ) + 1 ) ;
}
2022-03-23 22:00:30 +00:00
const convertDate = ( date : string ) : DateArray = >
dayjs ( date )
. utc ( )
. toArray ( )
. slice ( 0 , 6 )
. map ( ( v , i ) = > ( i === 1 ? v + 1 : v ) ) as DateArray ;
const getDuration = ( start : string , end : string ) : DurationObject = > ( {
minutes : dayjs ( end ) . diff ( dayjs ( start ) , "minute" ) ,
} ) ;
const getAttendees = ( attendees : Person [ ] ) : Attendee [ ] = >
attendees . map ( ( { email , name } ) = > ( { name , email , partstat : "NEEDS-ACTION" } ) ) ;
2022-01-06 17:28:31 +00:00
export default abstract class BaseCalendarService implements Calendar {
private url = "" ;
private credentials : Record < string , string > = { } ;
private headers : Record < string , string > = { } ;
protected integrationName = "" ;
2022-01-06 22:06:31 +00:00
private log : typeof logger ;
2021-12-09 15:51:37 +00:00
2022-10-31 22:06:03 +00:00
constructor ( credential : CredentialPayload , integrationName : string , url? : string ) {
2021-12-09 15:51:37 +00:00
this . integrationName = integrationName ;
2022-01-06 17:28:31 +00:00
const {
username ,
password ,
url : credentialURL ,
} = JSON . parse ( symmetricDecrypt ( credential . key as string , CALENDSO_ENCRYPTION_KEY ) ) ;
2021-12-09 15:51:37 +00:00
2022-01-06 17:28:31 +00:00
this . url = url || credentialURL ;
2021-12-09 15:51:37 +00:00
2022-01-06 17:28:31 +00:00
this . credentials = { username , password } ;
this . headers = getBasicAuthHeaders ( { username , password } ) ;
2022-01-06 22:06:31 +00:00
this . log = logger . getChildLogger ( { prefix : [ ` [[lib] ${ this . integrationName } ` ] } ) ;
2021-12-09 15:51:37 +00:00
}
2022-01-06 17:28:31 +00:00
async createEvent ( event : CalendarEvent ) : Promise < NewCalendarEventType > {
2021-12-09 15:51:37 +00:00
try {
const calendars = await this . listCalendars ( event ) ;
2022-01-06 17:28:31 +00:00
2021-12-09 15:51:37 +00:00
const uid = uuidv4 ( ) ;
2022-01-06 17:28:31 +00:00
// We create local ICS files
2021-12-09 15:51:37 +00:00
const { error , value : iCalString } = createEvent ( {
uid ,
startInputType : "utc" ,
2022-01-06 17:28:31 +00:00
start : convertDate ( event . startTime ) ,
duration : getDuration ( event . startTime , event . endTime ) ,
2021-12-09 15:51:37 +00:00
title : event.title ,
description : getRichDescription ( event ) ,
location : getLocation ( event ) ,
organizer : { email : event.organizer.email , name : event.organizer.name } ,
2023-03-21 03:15:59 +00:00
attendees : [
. . . getAttendees ( event . attendees ) ,
. . . ( event . team ? . members ? getAttendees ( event . team . members ) : [ ] ) ,
] ,
2022-01-06 17:28:31 +00:00
/** according to https:/ / datatracker . ietf . org / doc / html / rfc2446 # section - 3.2 . 1 , in a published iCalendar component .
* "Attendees" MUST NOT be present
* ` attendees: this.getAttendees(event.attendees), `
2022-08-11 17:16:44 +00:00
* [ UPDATE ] : Since we ' re not using the PUBLISH method to publish the iCalendar event and creating the event directly on iCal ,
* this shouldn ' t be an issue and we should be able to add attendees to the event right here .
2022-01-06 17:28:31 +00:00
* /
2021-12-09 15:51:37 +00:00
} ) ;
2022-08-11 17:16:44 +00:00
if ( error || ! iCalString )
throw new Error ( ` Error creating iCalString:=> ${ error ? . message } : ${ error ? . name } ` ) ;
2021-12-09 15:51:37 +00:00
2022-01-06 17:28:31 +00:00
// We create the event directly on iCal
2021-12-13 13:58:09 +00:00
const responses = await Promise . all (
2021-12-09 15:51:37 +00:00
calendars
. filter ( ( c ) = >
event . destinationCalendar ? . externalId
? c . externalId === event . destinationCalendar . externalId
: true
)
. map ( ( calendar ) = >
createCalendarObject ( {
calendar : {
url : calendar.externalId ,
} ,
filename : ` ${ uid } .ics ` ,
2021-12-13 13:58:09 +00:00
// according to https://datatracker.ietf.org/doc/html/rfc4791#section-4.1, Calendar object resources contained in calendar collections MUST NOT specify the iCalendar METHOD property.
iCalString : iCalString.replace ( /METHOD:[^\r\n]+\r\n/g , "" ) ,
2021-12-09 15:51:37 +00:00
headers : this.headers ,
} )
)
) ;
2021-12-13 13:58:09 +00:00
if ( responses . some ( ( r ) = > ! r . ok ) ) {
throw new Error (
` Error creating event: ${ ( await Promise . all ( responses . map ( ( r ) = > r . text ( ) ) ) ) . join ( ", " ) } `
) ;
}
2021-12-09 15:51:37 +00:00
return {
uid ,
id : uid ,
type : this . integrationName ,
password : "" ,
url : "" ,
2022-01-06 17:28:31 +00:00
additionalInfo : { } ,
2021-12-09 15:51:37 +00:00
} ;
} catch ( reason ) {
2022-01-06 17:28:31 +00:00
logger . error ( reason ) ;
2021-12-09 15:51:37 +00:00
throw reason ;
}
}
2022-06-17 18:34:41 +00:00
async updateEvent (
uid : string ,
event : CalendarEvent
) : Promise < NewCalendarEventType | NewCalendarEventType [ ] > {
2021-12-09 15:51:37 +00:00
try {
2022-01-06 17:28:31 +00:00
const events = await this . getEventsByUID ( uid ) ;
2021-12-09 15:51:37 +00:00
2022-01-21 21:35:31 +00:00
/** We generate the ICS files */
2021-12-09 15:51:37 +00:00
const { error , value : iCalString } = createEvent ( {
uid ,
startInputType : "utc" ,
2022-01-06 17:28:31 +00:00
start : convertDate ( event . startTime ) ,
duration : getDuration ( event . startTime , event . endTime ) ,
2021-12-09 15:51:37 +00:00
title : event.title ,
description : getRichDescription ( event ) ,
location : getLocation ( event ) ,
organizer : { email : event.organizer.email , name : event.organizer.name } ,
2023-03-21 03:15:59 +00:00
attendees : [
. . . getAttendees ( event . attendees ) ,
. . . ( event . team ? . members ? getAttendees ( event . team . members ) : [ ] ) ,
] ,
2021-12-09 15:51:37 +00:00
} ) ;
if ( error ) {
this . log . debug ( "Error creating iCalString" ) ;
2022-01-06 17:28:31 +00:00
2022-02-10 10:44:46 +00:00
return {
2022-06-17 18:34:41 +00:00
uid ,
2022-02-10 10:44:46 +00:00
type : event . type ,
id : typeof event . uid === "string" ? event . uid : "-1" ,
password : "" ,
url : typeof event . location === "string" ? event . location : "-1" ,
2022-06-17 18:34:41 +00:00
additionalInfo : { } ,
2022-02-10 10:44:46 +00:00
} ;
2021-12-09 15:51:37 +00:00
}
2022-10-26 11:04:36 +00:00
let calendarEvent : CalendarEventType ;
2022-01-21 21:35:31 +00:00
const eventsToUpdate = events . filter ( ( e ) = > e . uid === uid ) ;
2022-01-06 17:28:31 +00:00
return Promise . all (
2022-10-26 11:04:36 +00:00
eventsToUpdate . map ( ( eventItem ) = > {
calendarEvent = eventItem ;
2021-12-09 15:51:37 +00:00
return updateCalendarObject ( {
calendarObject : {
2022-10-26 11:04:36 +00:00
url : calendarEvent.url ,
// ensures compliance with standard iCal string (known as iCal2.0 by some) required by various providers
data : iCalString?.replace ( /METHOD:[^\r\n]+\r\n/g , "" ) ,
etag : calendarEvent?.etag ,
2021-12-09 15:51:37 +00:00
} ,
headers : this.headers ,
} ) ;
} )
2022-10-26 11:04:36 +00:00
) . then ( ( responses ) = >
responses . map ( ( response ) = > {
if ( response . status >= 200 && response . status < 300 ) {
return {
uid ,
type : this . credentials . type ,
id : typeof calendarEvent . uid === "string" ? calendarEvent . uid : "-1" ,
password : "" ,
url : calendarEvent.url ,
additionalInfo :
typeof event . additionalInformation === "string" ? event . additionalInformation : { } ,
} ;
} else {
this . log . error ( "Error: Status Code" , response . status ) ;
return {
uid ,
type : event . type ,
id : typeof event . uid === "string" ? event . uid : "-1" ,
password : "" ,
url : typeof event . location === "string" ? event . location : "-1" ,
additionalInfo :
typeof event . additionalInformation === "string" ? event . additionalInformation : { } ,
} ;
}
} )
) ;
2021-12-09 15:51:37 +00:00
} catch ( reason ) {
2022-01-06 17:28:31 +00:00
this . log . error ( reason ) ;
2021-12-09 15:51:37 +00:00
throw reason ;
}
}
async deleteEvent ( uid : string ) : Promise < void > {
try {
2022-01-06 17:28:31 +00:00
const events = await this . getEventsByUID ( uid ) ;
2021-12-09 15:51:37 +00:00
2022-01-06 17:28:31 +00:00
const eventsToDelete = events . filter ( ( event ) = > event . uid === uid ) ;
2021-12-09 15:51:37 +00:00
await Promise . all (
2022-01-06 17:28:31 +00:00
eventsToDelete . map ( ( event ) = > {
2021-12-09 15:51:37 +00:00
return deleteCalendarObject ( {
calendarObject : {
url : event.url ,
etag : event?.etag ,
} ,
headers : this.headers ,
} ) ;
} )
) ;
} catch ( reason ) {
2022-01-06 17:28:31 +00:00
this . log . error ( reason ) ;
2021-12-09 15:51:37 +00:00
throw reason ;
}
}
2022-10-04 09:02:28 +00:00
isValidFormat = ( url : string ) : boolean = > {
2023-01-05 23:38:44 +00:00
const allowedExtensions = [ "eml" , "ics" ] ;
const urlExtension = getFileExtension ( url ) ;
if ( ! allowedExtensions . includes ( urlExtension ) ) {
console . error ( ` Unsupported calendar object format: ${ urlExtension } ` ) ;
2022-10-04 09:02:28 +00:00
return false ;
}
return true ;
} ;
2022-01-29 14:38:53 +00:00
async getAvailability (
2022-01-06 17:28:31 +00:00
dateFrom : string ,
dateTo : string ,
selectedCalendars : IntegrationCalendar [ ]
) : Promise < EventBusyDate [ ] > {
fix(calendar): recurring event fix (#6959)
* Upgrades typescript
* Update yarn lock
* Typings
* Hotfix: ping,riverside,whereby and around not showing up in list (#6712)
* Hotfix: ping,riverside,whereby and around not showing up in list (#6712) (#6713)
* fix(calendar): recurring event fix
the loop was running way too often on every recurring object
mostly due to the fact that the iterator was not checked for finalization,
and in fact the iterator is not implemented correctly so it does not have done.
instead it checks for undefined or not
Signed-off-by: Tobias Gurtzick <magic@wizardtales.com>
* fix(calendar): recurring started in stoneage
add a start date to the iterator creation
Signed-off-by: Tobias Gurtzick <magic@wizardtales.com>
* fix(calendar): no reason for do here
Signed-off-by: Tobias Gurtzick <magic@wizardtales.com>
* fix(calendar): hour must contain same values as date calendar object...
Signed-off-by: Tobias Gurtzick <magic@wizardtales.com>
* Update yarn.lock
* Adds deployment settings to DB (#6706)
* WIP: SIU: Maximum call stack size exceeded fix? (#6740)
* Maximum call stack size exceeded fix?
# Conflicts:
# packages/prisma/index.ts
* Prisma client extensions is too much for our TS
* Removed unused Icons
* Type fixes
* replaced edit location dialog subtitle with link to app store (#6746)
* Upgrades typescript to 4.9.4 (#6747)
* Upgrades typescript to 4.9.4
* Type fixes
* Adds booking data to SDK success event (#6737)
* On duplicating an event type, spacing between arrows and label is wide (Length field) (#6717)
Co-authored-by: gitstart-calcom <gitstart@users.noreply.github.com>
* Update README.md
* Update README.md
* added blue color for links in bio (#6760)
* removed credits from auth container (#6766)
* On seats, hide attendees if option is selected (#6767)
* On seats, hide attendees if option is selected
* Remove unused line
* Fix shift-enter in bio editor (#6769)
* fix wrong enabled update button at first load
* fix shift-enter error
* small fixes + code clean up
---------
Co-authored-by: CarinaWolli <wollencarina@gmail.com>
* fix: back button and heading size (#6768)
Signed-off-by: Udit Takkar <udit.07814802719@cse.mait.ac.in>
* Disable autocomplete on password field (#6705)
* fix padding of lenght input on add event modal (#6771)
* Fix: EventType Duplication (#6778)
* fix: location select menu overflowing the container (#6719)
* Update README.md
* adding ukrainian (#6791)
* fix(web): set canonical as `https://cal.com` in the `<HeadSeo/>` (#6693)
* fix(web): set canonical as https://cal.com in the <HeadSeo/>
* use `window.document.location?.href` if self hosted
* clean up
* use `isCalcom` from library
* handle trailing slash on homepage again
* added impersonation tip (#6794)
* Standardize response codes in Login (#6787)
* standardizing login response codes
* playwright fix
* added translation
* fix: booking limits saved as undefined (#6720)
* fix: booking limits saved as undefined
Signed-off-by: Udit Takkar <udit.07814802719@cse.mait.ac.in>
* fix: add event limit
Signed-off-by: Udit Takkar <udit.07814802719@cse.mait.ac.in>
---------
Signed-off-by: Udit Takkar <udit.07814802719@cse.mait.ac.in>
* Correct invalid ukraine language code ua -> uk
* fix(web): remove `noindex` & `nofollow` tags from the `App` and `Shell` components (#6816)
Fixes https://github.com/calcom/cal.com/issues/6815
* fix: border color in dark teams page (#6817)
* Add additional guests (#6419)
* Add additional guests
* WIP
* WIP
* Type fix
* WIP
* Add validation for already invited attendees
* Revert type to email
* remove controlled fields
* disables signups via env variable (#6212)
* disables signups via env variable
* Apply suggestions from code review
Co-authored-by: Peer Richelsen <peeroke@gmail.com>
Co-authored-by: Omar López <zomars@me.com>
* Reusable Upgrade component for teams only features (#6473)
Co-authored-by: CarinaWolli <wollencarina@gmail.com>
* i18n udpate
* fix: darkmode in booking/[id] page (#6458)
* fix: text-area style
* fix: border styles
* fix: german translation for reschedule booking email subject (#6483)
* fix: german translation for reschedule subject
* fix: add a full stop
* fix: app store spacing issues (#6481)
* feat: add equal spacing with gap
* fix: title style
* fix: title style
* fix: remove margin
* fix: remove margin
* fix: sub header spacing and slider button
* fix: category card text
* fix: app store spacing issues
* fix: tab in tablet
* fix: shell
* fix: styling of dropdown component (#6440)
* fix: styling of dropdown component
Signed-off-by: Udit Takkar <udit.07814802719@cse.mait.ac.in>
* Apply suggestions from code review
* fix: use dropdown item in all pages
Signed-off-by: Udit Takkar <udit.07814802719@cse.mait.ac.in>
* chore: undo
Signed-off-by: Udit Takkar <udit.07814802719@cse.mait.ac.in>
Signed-off-by: Udit Takkar <udit.07814802719@cse.mait.ac.in>
Co-authored-by: Peer Richelsen <peeroke@gmail.com>
* readding sidebar tips for everyone, added 3 more features to teams empty screen (#6475)
* readding sidebar tips for everyone
* added 3 more features to teams plan
* responsive fixes
* responsive fixes
* small responsive fix
* CTA alignment fixed
* Minor alignment fixes to Shell for event-types/[type]
Co-authored-by: Alex van Andel <me@alexvanandel.com>
* fix: wrong i18n placeholder in many locales (#6496)
* fix: czech translation
* fix: spanish translation
* fix: italian translation
* fix: japanese translation
* fix: korean translation
* fix: dutch translation
* fix: norwegian translation
* fix: polish translation
* fix: portuguese translation
* fix: portuguese translation
* fix: romanian translation
* fix: russian translation
* fix: serbian translation
* fix: swedish translation
* fix: turkish translation
* fix: ukrainian translation
* fix: vietnamese translation
* fix: chinese simplified translation
* fix: chinese traditional translation
* Disable redirect for cancellation page (#6498)
* [CAL-677] /event-type : Event Setup sidebar item doesn't reflect multiple durations (#6390)
Co-authored-by: gitstart-calcom <gitstart@users.noreply.github.com>
* Added fallback to hostsFixed too which is used in COLLECTIVE (#6500)
* Don't update the field when changing the select (#6486)
* Don't update the field when changing the select
* Fixing missing label
* Applied the correct y-8 vertical margin
* Changed the description vertical offset from title a bit more
* Add Trash icon on Availability list dropdown
* fix: tablet sidebar profile being too wide and not centered (#6490)
* feat: updated app list items styling issues inside settings/conferencing
* feat: fixed tablet sidebar width and not centered issue
* fix: removed un-related changes from this pr
* deleted .env
* fix: added the accidentaly deleted .env file
* fix: removed unwanted .env file from the pr
Co-authored-by: Peer Richelsen <peeroke@gmail.com>
* Bring back PublicShell (#6505)
* Add red text to error message
* WIP
* Rearrange guest input
* Fix validate unique guests logic
* Allow guests on reschedule
* Lint fix
* More lint fixes
* Lint fixes
* More lint fixes
* Fix remove guest button margin
---------
Signed-off-by: Udit Takkar <udit.07814802719@cse.mait.ac.in>
Co-authored-by: kodiakhq[bot] <49736102+kodiakhq[bot]@users.noreply.github.com>
Co-authored-by: Jeff Loiselle <jeff@loiselles.com>
Co-authored-by: Peer Richelsen <peeroke@gmail.com>
Co-authored-by: Omar López <zomars@me.com>
Co-authored-by: Carina Wollendorfer <30310907+CarinaWolli@users.noreply.github.com>
Co-authored-by: CarinaWolli <wollencarina@gmail.com>
Co-authored-by: Peer Richelsen <peer@cal.com>
Co-authored-by: Nafees Nazik <84864519+G3root@users.noreply.github.com>
Co-authored-by: Udit Takkar <53316345+Udit-takkar@users.noreply.github.com>
Co-authored-by: Alex van Andel <me@alexvanandel.com>
Co-authored-by: Hariom Balhara <hariombalhara@gmail.com>
Co-authored-by: GitStart-Cal.com <121884634+gitstart-calcom@users.noreply.github.com>
Co-authored-by: gitstart-calcom <gitstart@users.noreply.github.com>
Co-authored-by: Ronit Panda <72537293+rtpa25@users.noreply.github.com>
Co-authored-by: Alan <alannnc@gmail.com>
* fix: flash of i18n in teams page (#6818)
* Change lint action to run on BuildJet (#6819)
* Feat - invite user to team flow improvements (#6725)
* Fix Dutch custom event names (#6806)
Continued from #6375
* [CAL-727] [500] on /api/trpc/[trpc] (#6795)
Co-authored-by: gitstart-calcom <gitstart@users.noreply.github.com>
* update isCalcom for canonicals to handle https://cal.com (#6802)
* update isCalcom for canonicals to handle https://cal.com
* avoid env var
* prettier
* handle window undefined
* handle window undefined during pre-render
* add some logs
* add some logs
* Revert "add some logs"
This reverts commit 9d27de029024e526417bc79e9cee42d7333ac592.
* change useHasTeamPlan hook to useHasPaidPlan (#6699)
Co-authored-by: CarinaWolli <wollencarina@gmail.com>
* fix: use guest email in create booking link banner (#6694)
* feat: tabs for teams in mobile (#6685)
* fix: padding
* feat: add teams tab component
* fix: add image to type
* fix: current path check
* fix: add avatar prop
* feat: add teams tab for mobile
* fix: padding
* fix: background and padding x
* fix: empty logic
* fix: conditions
* fix: bg
---------
Co-authored-by: Alan <alannnc@gmail.com>
* [CAL-807] /event-types/single - Fix the header (#6738)
* [CAL-807] /event-types/single - Fix the header
* [CAL-807] /event-types/single - Fix the header
* [CAL-807] /event-types/single - Fix the header
---------
Co-authored-by: gitstart-calcom <gitstart@users.noreply.github.com>
* Session Timeout (#6439)
* Implementation
* Unifying UI to password screen
* Tweaks for session in password section
* Update apps/web/pages/settings/security/password.tsx
Co-authored-by: Omar López <zomars@me.com>
* Update packages/features/kbar/Kbar.tsx
Co-authored-by: Omar López <zomars@me.com>
* Update packages/features/settings/layouts/SettingsLayout.tsx
Co-authored-by: Omar López <zomars@me.com>
* Relying on extra db query
* Upgrades typescript
* Update yarn lock
* Typings
* Hotfix: ping,riverside,whereby and around not showing up in list (#6712)
* Hotfix: ping,riverside,whereby and around not showing up in list (#6712) (#6713)
* Adds deployment settings to DB (#6706)
* WIP
* Adds DeploymentTheme
* Add missing migrations
* Adds client extensions for deployment
* Cleanup
* Using same version as other deps
* Reverting prisma changes and fixing things
* Uneeded tx-expect-error
* Fixing default value
* Update apps/web/public/static/locales/en/common.json
Co-authored-by: Carina Wollendorfer <30310907+CarinaWolli@users.noreply.github.com>
---------
Co-authored-by: Omar López <zomars@me.com>
Co-authored-by: Hariom Balhara <hariombalhara@gmail.com>
Co-authored-by: Carina Wollendorfer <30310907+CarinaWolli@users.noreply.github.com>
* Fix embed modal leading inputs (#6822)
Co-authored-by: sean-brydon <55134778+sean-brydon@users.noreply.github.com>
* Hide attendees from calendar description (#6800)
* Show the organizer timezone when booking on seats
* Only show organizer in event description
* Type fixes
* Update snapshot with new response
---------
Co-authored-by: Alex van Andel <me@alexvanandel.com>
Co-authored-by: Alan <alannnc@gmail.com>
* fix: installed apps and admin apps layout spacing issues. (#6753)
* feat: add highlight props
* feat: add isTemplate prop
* feat: add invalid credintial prop
* feat: add children prop
* feat: render app list card
* fix: add horizontal gap
* fix: installed app layout style
* fix: admin layout
* feat: add isGlobal to returned data
* feat: fix admin tab.
* use common components list and AppListCard
* show isDefault Badge
* hide switch for global apps
* fix: show switch
* fix: remove isglobal
* fix: layout
* refactor: remove unused component and import
* feat: use app list card component
* fix: query param
* fix: prevent unnecessary props passed to the component
* feat: add disabled style
* feat: add disconnect integration modal
* feat: new changes.
* render disconnect integration model only once.
* add dropdown for actions
* feat: changes in admin apps.
* use dropdown for selecting action buttons.
* use modal for editing keys.
* Remove boolean comparison
---------
Co-authored-by: Alan <alannnc@gmail.com>
* user management moved to console.cal.com (#6799)
* Removed unused variables (#6704) (#6750)
* re-adding subtitle to Shell
* lint
* fixed event-type description
* fix: input component style in routing forms (#6731)
* fix: remove custom className
* removed extra type text
removed extra type text from input
---------
Co-authored-by: alannnc <alannnc@gmail.com>
* Add X-Frame-Options to page headers (#6784)
Co-authored-by: Hariom Balhara <hariombalhara@gmail.com>
* Removes pay_later_instructions (#6824)
* [CAL-845] Improve the custom event name modal UI/UX (#6660)
Co-authored-by: gitstart-calcom <gitstart@users.noreply.github.com>
* webhook from ui design change (#6803)
* webhook from ui change
* fix: webhook test border & test webhook font style
* Fixed broken path to fix SB build failure
* feat: add theming options to teams (#6807)
* /teams improvements (#6831)
Co-authored-by: Alex van Andel <me@alexvanandel.com>
* Invalidate hasTeamPlan when the last team is removed (#6837)
* Not allowing random duration (#6743)
* v2.5.7
* fix: padding in shell for mobile (#6825)
* fix: padding
* fix: breakpoints in fab
* fix: padding
* Move e2e to buildjet (#6840)
* i18n fix
* i18n fix
* [CAL-713] /availability single - layout issues. Check spacing, margin, alignment with spec'd design (#6724)
Co-authored-by: gitstart-calcom <gitstart@users.noreply.github.com>
* fix: make cal video default value (#6716)
* [CAL-90] Event Types Single / Allow multiple physical locations (#6692)
Co-authored-by: gitstart-calcom <gitstart@users.noreply.github.com>
* Don't override but decorate the built-in encode function (#6850)
* Don't override but decorate the built-in encode function
* Removed jose + synced lockfile
* Give highest possible value to z-index (#6853)
* Use trackingId only for trackingDomain as thats the only variable supported (#6856)
* v2.5.8
* fixed availabilty layout
* Left / Right buttons now bottom-aligned and slightly shorter (#6857)
Fixes https://github.com/calcom/cal.com/issues/6589
* Hotfix: Event Name (#6863) (#6864)
* feat: make key unique (#6861)
* version 2.5.9 (#6868)
* Use Calendar component view=day for drop-in replacement troubleshooter (#6869)
* Use Calendar component view=day for drop-in replacement troubleshooter
* Setting the id to undefined makes the busy time selected
* Updated event title to include title+source
* lots of small changes by me and ciaran (#6871)
* Hotfix: For old Plausible installs enabled in an EventType, give a default value (#6860)
* Add default for trackingId for old plausible installs in event-types
* Fix types
* fix: filter booking in upcoming (#6406)
* fix: filter booking in upcoming
Signed-off-by: Udit Takkar <udit.07814802719@cse.mait.ac.in>
* fix: test
Signed-off-by: Udit Takkar <udit.07814802719@cse.mait.ac.in>
* fix: wipe-my-cal failing test
Signed-off-by: Udit Takkar <udit.07814802719@cse.mait.ac.in>
---------
Signed-off-by: Udit Takkar <udit.07814802719@cse.mait.ac.in>
Co-authored-by: Peer Richelsen <peeroke@gmail.com>
Co-authored-by: Peer Richelsen <peer@cal.com>
* fix workflows when duplicating event types (#6873)
* fix: get location url from metadata (#6774)
* fix: get location url from metadata
Signed-off-by: Udit Takkar <udit.07814802719@cse.mait.ac.in>
* fix: replace location
Signed-off-by: Udit Takkar <udit.07814802719@cse.mait.ac.in>
* fix: type error
Signed-off-by: Udit Takkar <udit.07814802719@cse.mait.ac.in>
* fix: use zod
Signed-off-by: Udit Takkar <udit.07814802719@cse.mait.ac.in>
---------
Signed-off-by: Udit Takkar <udit.07814802719@cse.mait.ac.in>
* Updates heroku deployment template (#6879)
* Hide button (#6895)
* Fixed some inconsistencies within single event type page (#6887)
* Fixed some inconsistencies within single event type page
* Fix layout shift on AvailabilityTab
* fix(date-overrides): alignment of edit & delete btns (#6892)
* When unchecking the common schedule, schedule should be nulled (#6898)
* theme for storybook
* nit border change (#6899)
* fix: metadata not saved while creating a booking. (#6866)
* feat: add metadata to booking creation
* fix: bug
* Beginning of Strict CSP Compliance (#6841)
* Add CSP Support and enable it initially for Login page
* Update README
* Make sure that CSP is not enabled if CSP_POLICY isnt set
* Add a new value for x-csp header that tells if instance has opted-in to CSP or not
* Add more src to CSP
* Fix typo in header name
* Remove duplicate headers fn
* Add https://eu.ui-avatars.com/api/
* Add CSP_POLICY to env.example
* v2.5.10
* fix: add req.headers (#6921)
Signed-off-by: Udit Takkar <udit.07814802719@cse.mait.ac.in>
* add-console-vars (#6929)
* Admin Wizard Choose License (#6574)
* Implementation
* i18n
* More i18n
* extracted i18n, needs api to get most recent price, added hint: update later
* Fixing i18n var
* Fix booking filters not working for admin (#6576)
* fix: react-select overflow issue in some modals. (#6587)
* feat: add a disable overflow prop
* feat: use the disable overflow prop
* Tailwind Merge (#6596)
* Tailwind Merge
* Fix merge classNames
* [CAL-808] /availability/single - UI issue on buttons beside time inputs (#6561)
* [CAL-808] /availability/single - UI issue on buttons beside time inputs
* Update apps/web/public/static/locales/en/common.json
* Update packages/features/schedules/components/Schedule.tsx
* create new translation for tooltip
Co-authored-by: gitstart-calcom <gitstart@users.noreply.github.com>
Co-authored-by: Peer Richelsen <peeroke@gmail.com>
Co-authored-by: CarinaWolli <wollencarina@gmail.com>
* Bye bye submodules (#6585)
* WIP
* Uses ssh instead
* Update .gitignore
* Update .gitignore
* Update Makefile
* Update git-setup.sh
* Update git-setup.sh
* Replaced Makefile with bash script
* Update package.json
* fix: show button on empty string (#6601)
Signed-off-by: Udit Takkar <udit.07814802719@cse.mait.ac.in>
Signed-off-by: Udit Takkar <udit.07814802719@cse.mait.ac.in>
* fix: add delete in dropdown (#6599)
Signed-off-by: Udit Takkar <udit.07814802719@cse.mait.ac.in>
Signed-off-by: Udit Takkar <udit.07814802719@cse.mait.ac.in>
* Update README.md
* Update README.md
* Changed a neutral- classes to gray (#6603)
* Changed a neutral- classes to gray
* Changed all border-1 to border
* Update package.json
* Test fixes
* Yarn lock fixes
* Fix string equality check in git-setup.sh
* [CAL-811] Avatar icon not redirecting user back to the main page (#6586)
* Remove cursor-pointer, remove old Avatar* files
* Fixed styling for checkedSelect + some cleanup
Co-authored-by: gitstart-calcom <gitstart@users.noreply.github.com>
Co-authored-by: Alex van Andel <me@alexvanandel.com>
* Harsh/add member invite (#6598)
Co-authored-by: Guest <guest@pop-os.localdomain>
Co-authored-by: root <harsh.singh@gocomet.com>
* Regenerated lockfile without upgrade (#6610)
* fix: remove annoying outline when <Button /> clicked (#6537)
* fix: remove annoying outline when <Button /> clicked
* Delete yarn.lock
* remove 1 on 1 icon (#6609)
* removed 1-on-1 badge
* changed user to users for group events
* fix: case-sensitivity in apps path (#6552)
* fix: lowercase slug
* fix: make fallback blocking
* Fix FAB (#6611)
* feat: add LocationSelect component (#6571)
* feat: add LocationSelect component
Signed-off-by: Udit Takkar <udit.07814802719@cse.mait.ac.in>
* fix: type error
Signed-off-by: Udit Takkar <udit.07814802719@cse.mait.ac.in>
* chore: type error
Signed-off-by: Udit Takkar <udit.07814802719@cse.mait.ac.in>
Signed-off-by: Udit Takkar <udit.07814802719@cse.mait.ac.in>
* Update booking filters design (#6543)
* Update booking filters
* Add filter on YOUR bookings
* Fix pending members showing up in list
* Reduce the avatar size to 'sm' for now
* Bugfix/dropdown menu trigger as child remove class names (#6614)
* Fix UsernameTextfield to take right height
* Remove className side-effect
* Incorrect resolution version fixed
* Converted mobile DropdownMenuTrigger styles into Button
* v2.5.3
* fix: use items-center (#6618)
* fix tooltip and modal stacking issues (#6491)
* fix tooltip and modal stacking issues
* use z-index in larger screens and less
Co-authored-by: Alex van Andel <me@alexvanandel.com>
* Temporary fix (#6626)
* Fix Ga4 tracking (#6630)
* generic <UpgradeScreen> component (#6594)
* first attempt of <UpgradeScreen>
* changes to icons
* reverted changes back to initial state, needs fix: teams not showing
* WIP
* Fix weird reactnode error
* Fix loading text
* added upgradeTip to routing forms
* icon colors
* create and use hook to check if user has team plan
* use useTeamPlan for upgradeTeamsBadge
* replace huge svg with compressed jpeg
* responsive fixes
* Update packages/ui/components/badge/UpgradeTeamsBadge.tsx
Co-authored-by: sean-brydon <55134778+sean-brydon@users.noreply.github.com>
* Give team plan features to E2E tests
* Allow option to make a user part of team int ests
* Remove flash of paywall for team user
* Add team user for typeform tests as well
Co-authored-by: Peer Richelsen <peer@cal.com>
Co-authored-by: CarinaWolli <wollencarina@gmail.com>
Co-authored-by: Carina Wollendorfer <30310907+CarinaWolli@users.noreply.github.com>
Co-authored-by: Alex van Andel <me@alexvanandel.com>
Co-authored-by: Hariom Balhara <hariombalhara@gmail.com>
* Removing env var to rely on db
* Restoring i18n keys, set loading moved
* Fixing tailwind-preset glob
* Wizard width fix for md+ screens
* Converting licenses options to radix radio
* Applying feedback + other tweaks
* Reverting this, not this PR related
* Unneeded code removal
* Reverting unneeded style change
* Applying feedback
* Removing licenseType
* Upgrades typescript
* Update yarn lock
* Typings
* Hotfix: ping,riverside,whereby and around not showing up in list (#6712)
* Hotfix: ping,riverside,whereby and around not showing up in list (#6712) (#6713)
* Adds deployment settings to DB (#6706)
* WIP
* Adds DeploymentTheme
* Add missing migrations
* Adds client extensions for deployment
* Cleanup
* Delete migration.sql
* Relying on both, env var and new model
* Restoring env example doc for backward compat
* Maximum call stack size exceeded fix?
* Revert upgrade
* Update index.ts
* Delete index.ts
* Not exposing license key, fixed radio behavior
* Covering undefined env var
* Self contained checkLicense
* Feedback
* Moar feedback
* Feedback
* Feedback
* Feedback
* Cleanup
---------
Signed-off-by: Udit Takkar <udit.07814802719@cse.mait.ac.in>
Co-authored-by: Peer Richelsen <peer@cal.com>
Co-authored-by: sean-brydon <55134778+sean-brydon@users.noreply.github.com>
Co-authored-by: Nafees Nazik <84864519+G3root@users.noreply.github.com>
Co-authored-by: GitStart-Cal.com <121884634+gitstart-calcom@users.noreply.github.com>
Co-authored-by: gitstart-calcom <gitstart@users.noreply.github.com>
Co-authored-by: Peer Richelsen <peeroke@gmail.com>
Co-authored-by: CarinaWolli <wollencarina@gmail.com>
Co-authored-by: Omar López <zomars@me.com>
Co-authored-by: Udit Takkar <53316345+Udit-takkar@users.noreply.github.com>
Co-authored-by: Alex van Andel <me@alexvanandel.com>
Co-authored-by: Harsh Singh <51085015+harshsinghatz@users.noreply.github.com>
Co-authored-by: Guest <guest@pop-os.localdomain>
Co-authored-by: root <harsh.singh@gocomet.com>
Co-authored-by: Luis Cadillo <luiscaf3r@gmail.com>
Co-authored-by: Mohammed Cherfaoui <hi@cherfaoui.dev>
Co-authored-by: Hariom Balhara <hariombalhara@gmail.com>
Co-authored-by: Carina Wollendorfer <30310907+CarinaWolli@users.noreply.github.com>
* added two new tips (#6915)
* [CAL-488] Timezone selection has a weird double dropdown (#6851)
Co-authored-by: gitstart-calcom <gitstart@users.noreply.github.com>
* fix: color and line height of icon (#6913)
* fix: use destination calendar email (#6886)
* fix: use destination calendar email
to display correct primary email
Signed-off-by: Udit Takkar <udit.07814802719@cse.mait.ac.in>
* fix: simplify logic
Signed-off-by: Udit Takkar <udit.07814802719@cse.mait.ac.in>
---------
Signed-off-by: Udit Takkar <udit.07814802719@cse.mait.ac.in>
* fix: dropdown title in bookings page (#6924)
* fixes the broken max size of members on teams page (#6926)
* fix: display provider name instead of url (#6914)
Signed-off-by: Udit Takkar <udit.07814802719@cse.mait.ac.in>
* fix: add sortByLabel (#6797)
Signed-off-by: Udit Takkar <udit.07814802719@cse.mait.ac.in>
* Email Variables Bug (#6943)
* Remove _subject translations for zh-CN, needs retranslation
* minor timezone-select improvements (#6944)
* fixed timezone select positioning and hover
* fixed timezone select positioning and hover
* Give trackingId a default value because if user doesnt interact with trackingId input it is not set (#6945)
* Block /auth/:path, nothing else. (#6949)
* Block /auth/:path, nothing else.
* Also add /signup
* fix start icon in button (#6950)
Co-authored-by: CarinaWolli <wollencarina@gmail.com>
* Fixes localisation of {EVENT_DATE} in workflows (#6907)
* translate {EVENT_DATE} variable to correct language
* fix locale for cron schedule reminder emails/sms
* fix type error
* add missing locale to attendees
* fix type error
* code clean up
* revert last commit
* using Intl for date translations
---------
Co-authored-by: CarinaWolli <wollencarina@gmail.com>
* Allow account linking for Google and SAML providers (#6874)
* allow account linking for self-hosted instances, both Google and SAML are verified emails
* allow account linking for Google and SSO if emails match with existing username/password account
* Tweaked find user by email since we now have multiple providers (other than credentials provider)
* feat/payment-service-6438-cal-767 (#6677)
* WIP paymentService
* Changes for payment Service
* Fix for stripe payment flow
* Remove logs/comments
* Refactored refund for stripe app
* Move stripe handlePayment to own lib
* Move stripe delete payments to paymentService
* lint fix
* Change handleRefundError as generic function
* remove log
* remove logs
* remove logs
* Return stripe default export to lib/server
* Fixing types
* Fix types
* Upgrades typescript
* Update yarn lock
* Typings
* Hotfix: ping,riverside,whereby and around not showing up in list (#6712)
* Hotfix: ping,riverside,whereby and around not showing up in list (#6712) (#6713)
* Adds deployment settings to DB (#6706)
* WIP
* Adds DeploymentTheme
* Add missing migrations
* Adds client extensions for deployment
* Cleanup
* Revert "lint fix"
This reverts commit e1a2e4a357e58e6673c47399888ae2e00d1351a6.
* Add validation
* Revert changes removed in force push
* Removing abstract class and just leaving interface implementation
* Fix types for handlePayments
* Fix payment test appStore import
* Fix stripe metadata in event type
* Move migration to separate PR
* Revert "Move migration to separate PR"
This reverts commit 48aa64e0724a522d3cc2fefaaaee5792ee9cd9e6.
* Update packages/prisma/migrations/20230125175109_remove_type_from_payment_and_add_app_relationship/migration.sql
Co-authored-by: Omar López <zomars@me.com>
---------
Co-authored-by: zomars <zomars@me.com>
Co-authored-by: Hariom Balhara <hariombalhara@gmail.com>
* Small UI fixes for seats & destination calendars (#6859)
* Do not add former time for events on seats
* Default display destination calendar
* Add seats badge to event type item
* Add string
* Actively watch seats enabled option for requires confirmation
* Only show former time when there is a rescheduleUid
* Update RadioAreaGroup.tsx
* Update CalendarService.ts
* Update CalendarService.ts
---------
Signed-off-by: Tobias Gurtzick <magic@wizardtales.com>
Signed-off-by: Udit Takkar <udit.07814802719@cse.mait.ac.in>
Co-authored-by: Hariom Balhara <hariombalhara@gmail.com>
Co-authored-by: Tobias Gurtzick <magic@wizardtales.com>
Co-authored-by: Peer Richelsen <peeroke@gmail.com>
Co-authored-by: GitStart-Cal.com <121884634+gitstart-calcom@users.noreply.github.com>
Co-authored-by: gitstart-calcom <gitstart@users.noreply.github.com>
Co-authored-by: Joe Au-Yeung <65426560+joeauyeung@users.noreply.github.com>
Co-authored-by: Carina Wollendorfer <30310907+CarinaWolli@users.noreply.github.com>
Co-authored-by: CarinaWolli <wollencarina@gmail.com>
Co-authored-by: Udit Takkar <53316345+Udit-takkar@users.noreply.github.com>
Co-authored-by: Sai Deepesh <saideepesh000@gmail.com>
Co-authored-by: Nafees Nazik <84864519+G3root@users.noreply.github.com>
Co-authored-by: Richard Poelderl <richard.poelderl@gmail.com>
Co-authored-by: Syed Ali Shahbaz <52925846+alishaz-polymath@users.noreply.github.com>
Co-authored-by: Alex van Andel <me@alexvanandel.com>
Co-authored-by: kodiakhq[bot] <49736102+kodiakhq[bot]@users.noreply.github.com>
Co-authored-by: Jeff Loiselle <jeff@loiselles.com>
Co-authored-by: Peer Richelsen <peer@cal.com>
Co-authored-by: Ronit Panda <72537293+rtpa25@users.noreply.github.com>
Co-authored-by: Alan <alannnc@gmail.com>
Co-authored-by: sean-brydon <55134778+sean-brydon@users.noreply.github.com>
Co-authored-by: Bram Verstraten <bramverstraten@outlook.com>
Co-authored-by: Leo Giovanetti <hello@leog.me>
Co-authored-by: Ben Lam <37053985+blam404@users.noreply.github.com>
Co-authored-by: Josh Avant <joshavant@gmail.com>
Co-authored-by: Joe Shajan <joeshajan1551@gmail.com>
Co-authored-by: Aaron Presley <155617+AaronPresley@users.noreply.github.com>
Co-authored-by: Ben Hybert <53020786+Hybes@users.noreply.github.com>
Co-authored-by: Harsh Singh <51085015+harshsinghatz@users.noreply.github.com>
Co-authored-by: Guest <guest@pop-os.localdomain>
Co-authored-by: root <harsh.singh@gocomet.com>
Co-authored-by: Luis Cadillo <luiscaf3r@gmail.com>
Co-authored-by: Mohammed Cherfaoui <hi@cherfaoui.dev>
Co-authored-by: Deepak Prabhakara <deepak@boxyhq.com>
2023-03-10 17:58:26 +00:00
const startISOString = new Date ( dateFrom ) . toISOString ( ) ;
2022-01-29 14:38:53 +00:00
2023-04-12 17:30:39 +00:00
const objects = await this . fetchObjectsWithOptionalExpand ( {
selectedCalendars ,
startISOString ,
dateTo ,
headers : this.headers ,
} ) ;
2022-04-14 22:29:16 +00:00
const events : { start : string ; end : string } [ ] = [ ] ;
objects . forEach ( ( object ) = > {
2022-10-26 11:04:36 +00:00
if ( object . data == null || JSON . stringify ( object . data ) == "{}" ) return ;
2023-04-12 17:30:39 +00:00
let vcalendar : ICAL.Component ;
try {
const jcalData = ICAL . parse ( sanitizeCalendarObject ( object ) ) ;
vcalendar = new ICAL . Component ( jcalData ) ;
} catch ( e ) {
console . error ( "Error parsing calendar object: " , e ) ;
return ;
2022-10-19 11:18:08 +00:00
}
2023-04-12 17:30:39 +00:00
const vevents = vcalendar . getAllSubcomponents ( "vevent" ) ;
vevents . forEach ( ( vevent ) = > {
// if event status is free or transparent, return
if ( vevent ? . getFirstPropertyValue ( "transp" ) === "TRANSPARENT" ) return ;
const event = new ICAL . Event ( vevent ) ;
const dtstart : { [ key : string ] : string } | undefined = vevent ? . getFirstPropertyValue ( "dtstart" ) ;
const timezone = dtstart ? dtstart [ "timezone" ] : undefined ;
// We check if the dtstart timezone is in UTC which is actually represented by Z instead, but not recognized as that in ICAL.js as UTC
const isUTC = timezone === "Z" ;
const tzid : string | undefined = vevent ? . getFirstPropertyValue ( "tzid" ) || isUTC ? "UTC" : timezone ;
// In case of icalendar, when only tzid is available without vtimezone, we need to add vtimezone explicitly to take care of timezone diff
if ( ! vcalendar . getFirstSubcomponent ( "vtimezone" ) && tzid ) {
2023-04-22 10:58:03 +00:00
try {
const timezoneComp = new ICAL . Component ( "vtimezone" ) ;
timezoneComp . addPropertyWithValue ( "tzid" , tzid ) ;
const standard = new ICAL . Component ( "standard" ) ;
// get timezone offset
const tzoffsetfrom = dayjs ( event . startDate . toJSDate ( ) ) . tz ( tzid ) . format ( "Z" ) ;
const tzoffsetto = dayjs ( event . endDate . toJSDate ( ) ) . tz ( tzid ) . format ( "Z" ) ;
// set timezone offset
standard . addPropertyWithValue ( "tzoffsetfrom" , tzoffsetfrom ) ;
standard . addPropertyWithValue ( "tzoffsetto" , tzoffsetto ) ;
// provide a standard dtstart
standard . addPropertyWithValue ( "dtstart" , "1601-01-01T00:00:00" ) ;
timezoneComp . addSubcomponent ( standard ) ;
vcalendar . addSubcomponent ( timezoneComp ) ;
} catch ( e ) {
// Adds try-catch to ensure the code proceeds when Apple Calendar provides non-standard TZIDs
console . log ( "error in adding vtimezone" , e ) ;
}
2022-04-05 19:01:47 +00:00
}
2023-04-12 17:30:39 +00:00
const vtimezone = vcalendar . getFirstSubcomponent ( "vtimezone" ) ;
2022-01-29 14:38:53 +00:00
2023-04-12 17:30:39 +00:00
if ( event . isRecurring ( ) ) {
let maxIterations = 365 ;
if ( [ "HOURLY" , "SECONDLY" , "MINUTELY" ] . includes ( event . getRecurrenceTypes ( ) ) ) {
console . error ( ` Won't handle [ ${ event . getRecurrenceTypes ( ) } ] recurrence ` ) ;
return ;
2022-06-12 21:23:14 +00:00
}
2022-04-14 22:29:16 +00:00
2023-04-12 17:30:39 +00:00
const start = dayjs ( dateFrom ) ;
const end = dayjs ( dateTo ) ;
const startDate = ICAL . Time . fromDateTimeString ( startISOString ) ;
startDate . hour = event . startDate . hour ;
startDate . minute = event . startDate . minute ;
startDate . second = event . startDate . second ;
const iterator = event . iterator ( startDate ) ;
let current : ICAL.Time ;
let currentEvent ;
let currentStart = null ;
let currentError ;
while (
maxIterations > 0 &&
( currentStart === null || currentStart . isAfter ( end ) === false ) &&
// this iterator was poorly implemented, normally done is expected to be
// returned
( current = iterator . next ( ) )
) {
maxIterations -= 1 ;
try {
// @see https://github.com/mozilla-comm/ical.js/issues/514
currentEvent = event . getOccurrenceDetails ( current ) ;
} catch ( error ) {
if ( error instanceof Error && error . message !== currentError ) {
currentError = error . message ;
this . log . error ( "error" , error ) ;
}
}
if ( ! currentEvent ) return ;
// do not mix up caldav and icalendar! For the recurring events here, the timezone
// provided is relevant, not as pointed out in https://datatracker.ietf.org/doc/html/rfc4791#section-9.6.5
// where recurring events are always in utc (in caldav!). Thus, apply the time zone here.
if ( vtimezone ) {
const zone = new ICAL . Timezone ( vtimezone ) ;
currentEvent . startDate = currentEvent . startDate . convertToZone ( zone ) ;
currentEvent . endDate = currentEvent . endDate . convertToZone ( zone ) ;
}
currentStart = dayjs ( currentEvent . startDate . toJSDate ( ) ) ;
if ( currentStart . isBetween ( start , end ) === true ) {
events . push ( {
start : currentStart.toISOString ( ) ,
end : dayjs ( currentEvent . endDate . toJSDate ( ) ) . toISOString ( ) ,
} ) ;
}
2022-04-14 22:29:16 +00:00
}
2023-04-12 17:30:39 +00:00
if ( maxIterations <= 0 ) {
console . warn ( "could not find any occurrence for recurring event in 365 iterations" ) ;
}
return ;
fix(calendar): recurring event fix (#6959)
* Upgrades typescript
* Update yarn lock
* Typings
* Hotfix: ping,riverside,whereby and around not showing up in list (#6712)
* Hotfix: ping,riverside,whereby and around not showing up in list (#6712) (#6713)
* fix(calendar): recurring event fix
the loop was running way too often on every recurring object
mostly due to the fact that the iterator was not checked for finalization,
and in fact the iterator is not implemented correctly so it does not have done.
instead it checks for undefined or not
Signed-off-by: Tobias Gurtzick <magic@wizardtales.com>
* fix(calendar): recurring started in stoneage
add a start date to the iterator creation
Signed-off-by: Tobias Gurtzick <magic@wizardtales.com>
* fix(calendar): no reason for do here
Signed-off-by: Tobias Gurtzick <magic@wizardtales.com>
* fix(calendar): hour must contain same values as date calendar object...
Signed-off-by: Tobias Gurtzick <magic@wizardtales.com>
* Update yarn.lock
* Adds deployment settings to DB (#6706)
* WIP: SIU: Maximum call stack size exceeded fix? (#6740)
* Maximum call stack size exceeded fix?
# Conflicts:
# packages/prisma/index.ts
* Prisma client extensions is too much for our TS
* Removed unused Icons
* Type fixes
* replaced edit location dialog subtitle with link to app store (#6746)
* Upgrades typescript to 4.9.4 (#6747)
* Upgrades typescript to 4.9.4
* Type fixes
* Adds booking data to SDK success event (#6737)
* On duplicating an event type, spacing between arrows and label is wide (Length field) (#6717)
Co-authored-by: gitstart-calcom <gitstart@users.noreply.github.com>
* Update README.md
* Update README.md
* added blue color for links in bio (#6760)
* removed credits from auth container (#6766)
* On seats, hide attendees if option is selected (#6767)
* On seats, hide attendees if option is selected
* Remove unused line
* Fix shift-enter in bio editor (#6769)
* fix wrong enabled update button at first load
* fix shift-enter error
* small fixes + code clean up
---------
Co-authored-by: CarinaWolli <wollencarina@gmail.com>
* fix: back button and heading size (#6768)
Signed-off-by: Udit Takkar <udit.07814802719@cse.mait.ac.in>
* Disable autocomplete on password field (#6705)
* fix padding of lenght input on add event modal (#6771)
* Fix: EventType Duplication (#6778)
* fix: location select menu overflowing the container (#6719)
* Update README.md
* adding ukrainian (#6791)
* fix(web): set canonical as `https://cal.com` in the `<HeadSeo/>` (#6693)
* fix(web): set canonical as https://cal.com in the <HeadSeo/>
* use `window.document.location?.href` if self hosted
* clean up
* use `isCalcom` from library
* handle trailing slash on homepage again
* added impersonation tip (#6794)
* Standardize response codes in Login (#6787)
* standardizing login response codes
* playwright fix
* added translation
* fix: booking limits saved as undefined (#6720)
* fix: booking limits saved as undefined
Signed-off-by: Udit Takkar <udit.07814802719@cse.mait.ac.in>
* fix: add event limit
Signed-off-by: Udit Takkar <udit.07814802719@cse.mait.ac.in>
---------
Signed-off-by: Udit Takkar <udit.07814802719@cse.mait.ac.in>
* Correct invalid ukraine language code ua -> uk
* fix(web): remove `noindex` & `nofollow` tags from the `App` and `Shell` components (#6816)
Fixes https://github.com/calcom/cal.com/issues/6815
* fix: border color in dark teams page (#6817)
* Add additional guests (#6419)
* Add additional guests
* WIP
* WIP
* Type fix
* WIP
* Add validation for already invited attendees
* Revert type to email
* remove controlled fields
* disables signups via env variable (#6212)
* disables signups via env variable
* Apply suggestions from code review
Co-authored-by: Peer Richelsen <peeroke@gmail.com>
Co-authored-by: Omar López <zomars@me.com>
* Reusable Upgrade component for teams only features (#6473)
Co-authored-by: CarinaWolli <wollencarina@gmail.com>
* i18n udpate
* fix: darkmode in booking/[id] page (#6458)
* fix: text-area style
* fix: border styles
* fix: german translation for reschedule booking email subject (#6483)
* fix: german translation for reschedule subject
* fix: add a full stop
* fix: app store spacing issues (#6481)
* feat: add equal spacing with gap
* fix: title style
* fix: title style
* fix: remove margin
* fix: remove margin
* fix: sub header spacing and slider button
* fix: category card text
* fix: app store spacing issues
* fix: tab in tablet
* fix: shell
* fix: styling of dropdown component (#6440)
* fix: styling of dropdown component
Signed-off-by: Udit Takkar <udit.07814802719@cse.mait.ac.in>
* Apply suggestions from code review
* fix: use dropdown item in all pages
Signed-off-by: Udit Takkar <udit.07814802719@cse.mait.ac.in>
* chore: undo
Signed-off-by: Udit Takkar <udit.07814802719@cse.mait.ac.in>
Signed-off-by: Udit Takkar <udit.07814802719@cse.mait.ac.in>
Co-authored-by: Peer Richelsen <peeroke@gmail.com>
* readding sidebar tips for everyone, added 3 more features to teams empty screen (#6475)
* readding sidebar tips for everyone
* added 3 more features to teams plan
* responsive fixes
* responsive fixes
* small responsive fix
* CTA alignment fixed
* Minor alignment fixes to Shell for event-types/[type]
Co-authored-by: Alex van Andel <me@alexvanandel.com>
* fix: wrong i18n placeholder in many locales (#6496)
* fix: czech translation
* fix: spanish translation
* fix: italian translation
* fix: japanese translation
* fix: korean translation
* fix: dutch translation
* fix: norwegian translation
* fix: polish translation
* fix: portuguese translation
* fix: portuguese translation
* fix: romanian translation
* fix: russian translation
* fix: serbian translation
* fix: swedish translation
* fix: turkish translation
* fix: ukrainian translation
* fix: vietnamese translation
* fix: chinese simplified translation
* fix: chinese traditional translation
* Disable redirect for cancellation page (#6498)
* [CAL-677] /event-type : Event Setup sidebar item doesn't reflect multiple durations (#6390)
Co-authored-by: gitstart-calcom <gitstart@users.noreply.github.com>
* Added fallback to hostsFixed too which is used in COLLECTIVE (#6500)
* Don't update the field when changing the select (#6486)
* Don't update the field when changing the select
* Fixing missing label
* Applied the correct y-8 vertical margin
* Changed the description vertical offset from title a bit more
* Add Trash icon on Availability list dropdown
* fix: tablet sidebar profile being too wide and not centered (#6490)
* feat: updated app list items styling issues inside settings/conferencing
* feat: fixed tablet sidebar width and not centered issue
* fix: removed un-related changes from this pr
* deleted .env
* fix: added the accidentaly deleted .env file
* fix: removed unwanted .env file from the pr
Co-authored-by: Peer Richelsen <peeroke@gmail.com>
* Bring back PublicShell (#6505)
* Add red text to error message
* WIP
* Rearrange guest input
* Fix validate unique guests logic
* Allow guests on reschedule
* Lint fix
* More lint fixes
* Lint fixes
* More lint fixes
* Fix remove guest button margin
---------
Signed-off-by: Udit Takkar <udit.07814802719@cse.mait.ac.in>
Co-authored-by: kodiakhq[bot] <49736102+kodiakhq[bot]@users.noreply.github.com>
Co-authored-by: Jeff Loiselle <jeff@loiselles.com>
Co-authored-by: Peer Richelsen <peeroke@gmail.com>
Co-authored-by: Omar López <zomars@me.com>
Co-authored-by: Carina Wollendorfer <30310907+CarinaWolli@users.noreply.github.com>
Co-authored-by: CarinaWolli <wollencarina@gmail.com>
Co-authored-by: Peer Richelsen <peer@cal.com>
Co-authored-by: Nafees Nazik <84864519+G3root@users.noreply.github.com>
Co-authored-by: Udit Takkar <53316345+Udit-takkar@users.noreply.github.com>
Co-authored-by: Alex van Andel <me@alexvanandel.com>
Co-authored-by: Hariom Balhara <hariombalhara@gmail.com>
Co-authored-by: GitStart-Cal.com <121884634+gitstart-calcom@users.noreply.github.com>
Co-authored-by: gitstart-calcom <gitstart@users.noreply.github.com>
Co-authored-by: Ronit Panda <72537293+rtpa25@users.noreply.github.com>
Co-authored-by: Alan <alannnc@gmail.com>
* fix: flash of i18n in teams page (#6818)
* Change lint action to run on BuildJet (#6819)
* Feat - invite user to team flow improvements (#6725)
* Fix Dutch custom event names (#6806)
Continued from #6375
* [CAL-727] [500] on /api/trpc/[trpc] (#6795)
Co-authored-by: gitstart-calcom <gitstart@users.noreply.github.com>
* update isCalcom for canonicals to handle https://cal.com (#6802)
* update isCalcom for canonicals to handle https://cal.com
* avoid env var
* prettier
* handle window undefined
* handle window undefined during pre-render
* add some logs
* add some logs
* Revert "add some logs"
This reverts commit 9d27de029024e526417bc79e9cee42d7333ac592.
* change useHasTeamPlan hook to useHasPaidPlan (#6699)
Co-authored-by: CarinaWolli <wollencarina@gmail.com>
* fix: use guest email in create booking link banner (#6694)
* feat: tabs for teams in mobile (#6685)
* fix: padding
* feat: add teams tab component
* fix: add image to type
* fix: current path check
* fix: add avatar prop
* feat: add teams tab for mobile
* fix: padding
* fix: background and padding x
* fix: empty logic
* fix: conditions
* fix: bg
---------
Co-authored-by: Alan <alannnc@gmail.com>
* [CAL-807] /event-types/single - Fix the header (#6738)
* [CAL-807] /event-types/single - Fix the header
* [CAL-807] /event-types/single - Fix the header
* [CAL-807] /event-types/single - Fix the header
---------
Co-authored-by: gitstart-calcom <gitstart@users.noreply.github.com>
* Session Timeout (#6439)
* Implementation
* Unifying UI to password screen
* Tweaks for session in password section
* Update apps/web/pages/settings/security/password.tsx
Co-authored-by: Omar López <zomars@me.com>
* Update packages/features/kbar/Kbar.tsx
Co-authored-by: Omar López <zomars@me.com>
* Update packages/features/settings/layouts/SettingsLayout.tsx
Co-authored-by: Omar López <zomars@me.com>
* Relying on extra db query
* Upgrades typescript
* Update yarn lock
* Typings
* Hotfix: ping,riverside,whereby and around not showing up in list (#6712)
* Hotfix: ping,riverside,whereby and around not showing up in list (#6712) (#6713)
* Adds deployment settings to DB (#6706)
* WIP
* Adds DeploymentTheme
* Add missing migrations
* Adds client extensions for deployment
* Cleanup
* Using same version as other deps
* Reverting prisma changes and fixing things
* Uneeded tx-expect-error
* Fixing default value
* Update apps/web/public/static/locales/en/common.json
Co-authored-by: Carina Wollendorfer <30310907+CarinaWolli@users.noreply.github.com>
---------
Co-authored-by: Omar López <zomars@me.com>
Co-authored-by: Hariom Balhara <hariombalhara@gmail.com>
Co-authored-by: Carina Wollendorfer <30310907+CarinaWolli@users.noreply.github.com>
* Fix embed modal leading inputs (#6822)
Co-authored-by: sean-brydon <55134778+sean-brydon@users.noreply.github.com>
* Hide attendees from calendar description (#6800)
* Show the organizer timezone when booking on seats
* Only show organizer in event description
* Type fixes
* Update snapshot with new response
---------
Co-authored-by: Alex van Andel <me@alexvanandel.com>
Co-authored-by: Alan <alannnc@gmail.com>
* fix: installed apps and admin apps layout spacing issues. (#6753)
* feat: add highlight props
* feat: add isTemplate prop
* feat: add invalid credintial prop
* feat: add children prop
* feat: render app list card
* fix: add horizontal gap
* fix: installed app layout style
* fix: admin layout
* feat: add isGlobal to returned data
* feat: fix admin tab.
* use common components list and AppListCard
* show isDefault Badge
* hide switch for global apps
* fix: show switch
* fix: remove isglobal
* fix: layout
* refactor: remove unused component and import
* feat: use app list card component
* fix: query param
* fix: prevent unnecessary props passed to the component
* feat: add disabled style
* feat: add disconnect integration modal
* feat: new changes.
* render disconnect integration model only once.
* add dropdown for actions
* feat: changes in admin apps.
* use dropdown for selecting action buttons.
* use modal for editing keys.
* Remove boolean comparison
---------
Co-authored-by: Alan <alannnc@gmail.com>
* user management moved to console.cal.com (#6799)
* Removed unused variables (#6704) (#6750)
* re-adding subtitle to Shell
* lint
* fixed event-type description
* fix: input component style in routing forms (#6731)
* fix: remove custom className
* removed extra type text
removed extra type text from input
---------
Co-authored-by: alannnc <alannnc@gmail.com>
* Add X-Frame-Options to page headers (#6784)
Co-authored-by: Hariom Balhara <hariombalhara@gmail.com>
* Removes pay_later_instructions (#6824)
* [CAL-845] Improve the custom event name modal UI/UX (#6660)
Co-authored-by: gitstart-calcom <gitstart@users.noreply.github.com>
* webhook from ui design change (#6803)
* webhook from ui change
* fix: webhook test border & test webhook font style
* Fixed broken path to fix SB build failure
* feat: add theming options to teams (#6807)
* /teams improvements (#6831)
Co-authored-by: Alex van Andel <me@alexvanandel.com>
* Invalidate hasTeamPlan when the last team is removed (#6837)
* Not allowing random duration (#6743)
* v2.5.7
* fix: padding in shell for mobile (#6825)
* fix: padding
* fix: breakpoints in fab
* fix: padding
* Move e2e to buildjet (#6840)
* i18n fix
* i18n fix
* [CAL-713] /availability single - layout issues. Check spacing, margin, alignment with spec'd design (#6724)
Co-authored-by: gitstart-calcom <gitstart@users.noreply.github.com>
* fix: make cal video default value (#6716)
* [CAL-90] Event Types Single / Allow multiple physical locations (#6692)
Co-authored-by: gitstart-calcom <gitstart@users.noreply.github.com>
* Don't override but decorate the built-in encode function (#6850)
* Don't override but decorate the built-in encode function
* Removed jose + synced lockfile
* Give highest possible value to z-index (#6853)
* Use trackingId only for trackingDomain as thats the only variable supported (#6856)
* v2.5.8
* fixed availabilty layout
* Left / Right buttons now bottom-aligned and slightly shorter (#6857)
Fixes https://github.com/calcom/cal.com/issues/6589
* Hotfix: Event Name (#6863) (#6864)
* feat: make key unique (#6861)
* version 2.5.9 (#6868)
* Use Calendar component view=day for drop-in replacement troubleshooter (#6869)
* Use Calendar component view=day for drop-in replacement troubleshooter
* Setting the id to undefined makes the busy time selected
* Updated event title to include title+source
* lots of small changes by me and ciaran (#6871)
* Hotfix: For old Plausible installs enabled in an EventType, give a default value (#6860)
* Add default for trackingId for old plausible installs in event-types
* Fix types
* fix: filter booking in upcoming (#6406)
* fix: filter booking in upcoming
Signed-off-by: Udit Takkar <udit.07814802719@cse.mait.ac.in>
* fix: test
Signed-off-by: Udit Takkar <udit.07814802719@cse.mait.ac.in>
* fix: wipe-my-cal failing test
Signed-off-by: Udit Takkar <udit.07814802719@cse.mait.ac.in>
---------
Signed-off-by: Udit Takkar <udit.07814802719@cse.mait.ac.in>
Co-authored-by: Peer Richelsen <peeroke@gmail.com>
Co-authored-by: Peer Richelsen <peer@cal.com>
* fix workflows when duplicating event types (#6873)
* fix: get location url from metadata (#6774)
* fix: get location url from metadata
Signed-off-by: Udit Takkar <udit.07814802719@cse.mait.ac.in>
* fix: replace location
Signed-off-by: Udit Takkar <udit.07814802719@cse.mait.ac.in>
* fix: type error
Signed-off-by: Udit Takkar <udit.07814802719@cse.mait.ac.in>
* fix: use zod
Signed-off-by: Udit Takkar <udit.07814802719@cse.mait.ac.in>
---------
Signed-off-by: Udit Takkar <udit.07814802719@cse.mait.ac.in>
* Updates heroku deployment template (#6879)
* Hide button (#6895)
* Fixed some inconsistencies within single event type page (#6887)
* Fixed some inconsistencies within single event type page
* Fix layout shift on AvailabilityTab
* fix(date-overrides): alignment of edit & delete btns (#6892)
* When unchecking the common schedule, schedule should be nulled (#6898)
* theme for storybook
* nit border change (#6899)
* fix: metadata not saved while creating a booking. (#6866)
* feat: add metadata to booking creation
* fix: bug
* Beginning of Strict CSP Compliance (#6841)
* Add CSP Support and enable it initially for Login page
* Update README
* Make sure that CSP is not enabled if CSP_POLICY isnt set
* Add a new value for x-csp header that tells if instance has opted-in to CSP or not
* Add more src to CSP
* Fix typo in header name
* Remove duplicate headers fn
* Add https://eu.ui-avatars.com/api/
* Add CSP_POLICY to env.example
* v2.5.10
* fix: add req.headers (#6921)
Signed-off-by: Udit Takkar <udit.07814802719@cse.mait.ac.in>
* add-console-vars (#6929)
* Admin Wizard Choose License (#6574)
* Implementation
* i18n
* More i18n
* extracted i18n, needs api to get most recent price, added hint: update later
* Fixing i18n var
* Fix booking filters not working for admin (#6576)
* fix: react-select overflow issue in some modals. (#6587)
* feat: add a disable overflow prop
* feat: use the disable overflow prop
* Tailwind Merge (#6596)
* Tailwind Merge
* Fix merge classNames
* [CAL-808] /availability/single - UI issue on buttons beside time inputs (#6561)
* [CAL-808] /availability/single - UI issue on buttons beside time inputs
* Update apps/web/public/static/locales/en/common.json
* Update packages/features/schedules/components/Schedule.tsx
* create new translation for tooltip
Co-authored-by: gitstart-calcom <gitstart@users.noreply.github.com>
Co-authored-by: Peer Richelsen <peeroke@gmail.com>
Co-authored-by: CarinaWolli <wollencarina@gmail.com>
* Bye bye submodules (#6585)
* WIP
* Uses ssh instead
* Update .gitignore
* Update .gitignore
* Update Makefile
* Update git-setup.sh
* Update git-setup.sh
* Replaced Makefile with bash script
* Update package.json
* fix: show button on empty string (#6601)
Signed-off-by: Udit Takkar <udit.07814802719@cse.mait.ac.in>
Signed-off-by: Udit Takkar <udit.07814802719@cse.mait.ac.in>
* fix: add delete in dropdown (#6599)
Signed-off-by: Udit Takkar <udit.07814802719@cse.mait.ac.in>
Signed-off-by: Udit Takkar <udit.07814802719@cse.mait.ac.in>
* Update README.md
* Update README.md
* Changed a neutral- classes to gray (#6603)
* Changed a neutral- classes to gray
* Changed all border-1 to border
* Update package.json
* Test fixes
* Yarn lock fixes
* Fix string equality check in git-setup.sh
* [CAL-811] Avatar icon not redirecting user back to the main page (#6586)
* Remove cursor-pointer, remove old Avatar* files
* Fixed styling for checkedSelect + some cleanup
Co-authored-by: gitstart-calcom <gitstart@users.noreply.github.com>
Co-authored-by: Alex van Andel <me@alexvanandel.com>
* Harsh/add member invite (#6598)
Co-authored-by: Guest <guest@pop-os.localdomain>
Co-authored-by: root <harsh.singh@gocomet.com>
* Regenerated lockfile without upgrade (#6610)
* fix: remove annoying outline when <Button /> clicked (#6537)
* fix: remove annoying outline when <Button /> clicked
* Delete yarn.lock
* remove 1 on 1 icon (#6609)
* removed 1-on-1 badge
* changed user to users for group events
* fix: case-sensitivity in apps path (#6552)
* fix: lowercase slug
* fix: make fallback blocking
* Fix FAB (#6611)
* feat: add LocationSelect component (#6571)
* feat: add LocationSelect component
Signed-off-by: Udit Takkar <udit.07814802719@cse.mait.ac.in>
* fix: type error
Signed-off-by: Udit Takkar <udit.07814802719@cse.mait.ac.in>
* chore: type error
Signed-off-by: Udit Takkar <udit.07814802719@cse.mait.ac.in>
Signed-off-by: Udit Takkar <udit.07814802719@cse.mait.ac.in>
* Update booking filters design (#6543)
* Update booking filters
* Add filter on YOUR bookings
* Fix pending members showing up in list
* Reduce the avatar size to 'sm' for now
* Bugfix/dropdown menu trigger as child remove class names (#6614)
* Fix UsernameTextfield to take right height
* Remove className side-effect
* Incorrect resolution version fixed
* Converted mobile DropdownMenuTrigger styles into Button
* v2.5.3
* fix: use items-center (#6618)
* fix tooltip and modal stacking issues (#6491)
* fix tooltip and modal stacking issues
* use z-index in larger screens and less
Co-authored-by: Alex van Andel <me@alexvanandel.com>
* Temporary fix (#6626)
* Fix Ga4 tracking (#6630)
* generic <UpgradeScreen> component (#6594)
* first attempt of <UpgradeScreen>
* changes to icons
* reverted changes back to initial state, needs fix: teams not showing
* WIP
* Fix weird reactnode error
* Fix loading text
* added upgradeTip to routing forms
* icon colors
* create and use hook to check if user has team plan
* use useTeamPlan for upgradeTeamsBadge
* replace huge svg with compressed jpeg
* responsive fixes
* Update packages/ui/components/badge/UpgradeTeamsBadge.tsx
Co-authored-by: sean-brydon <55134778+sean-brydon@users.noreply.github.com>
* Give team plan features to E2E tests
* Allow option to make a user part of team int ests
* Remove flash of paywall for team user
* Add team user for typeform tests as well
Co-authored-by: Peer Richelsen <peer@cal.com>
Co-authored-by: CarinaWolli <wollencarina@gmail.com>
Co-authored-by: Carina Wollendorfer <30310907+CarinaWolli@users.noreply.github.com>
Co-authored-by: Alex van Andel <me@alexvanandel.com>
Co-authored-by: Hariom Balhara <hariombalhara@gmail.com>
* Removing env var to rely on db
* Restoring i18n keys, set loading moved
* Fixing tailwind-preset glob
* Wizard width fix for md+ screens
* Converting licenses options to radix radio
* Applying feedback + other tweaks
* Reverting this, not this PR related
* Unneeded code removal
* Reverting unneeded style change
* Applying feedback
* Removing licenseType
* Upgrades typescript
* Update yarn lock
* Typings
* Hotfix: ping,riverside,whereby and around not showing up in list (#6712)
* Hotfix: ping,riverside,whereby and around not showing up in list (#6712) (#6713)
* Adds deployment settings to DB (#6706)
* WIP
* Adds DeploymentTheme
* Add missing migrations
* Adds client extensions for deployment
* Cleanup
* Delete migration.sql
* Relying on both, env var and new model
* Restoring env example doc for backward compat
* Maximum call stack size exceeded fix?
* Revert upgrade
* Update index.ts
* Delete index.ts
* Not exposing license key, fixed radio behavior
* Covering undefined env var
* Self contained checkLicense
* Feedback
* Moar feedback
* Feedback
* Feedback
* Feedback
* Cleanup
---------
Signed-off-by: Udit Takkar <udit.07814802719@cse.mait.ac.in>
Co-authored-by: Peer Richelsen <peer@cal.com>
Co-authored-by: sean-brydon <55134778+sean-brydon@users.noreply.github.com>
Co-authored-by: Nafees Nazik <84864519+G3root@users.noreply.github.com>
Co-authored-by: GitStart-Cal.com <121884634+gitstart-calcom@users.noreply.github.com>
Co-authored-by: gitstart-calcom <gitstart@users.noreply.github.com>
Co-authored-by: Peer Richelsen <peeroke@gmail.com>
Co-authored-by: CarinaWolli <wollencarina@gmail.com>
Co-authored-by: Omar López <zomars@me.com>
Co-authored-by: Udit Takkar <53316345+Udit-takkar@users.noreply.github.com>
Co-authored-by: Alex van Andel <me@alexvanandel.com>
Co-authored-by: Harsh Singh <51085015+harshsinghatz@users.noreply.github.com>
Co-authored-by: Guest <guest@pop-os.localdomain>
Co-authored-by: root <harsh.singh@gocomet.com>
Co-authored-by: Luis Cadillo <luiscaf3r@gmail.com>
Co-authored-by: Mohammed Cherfaoui <hi@cherfaoui.dev>
Co-authored-by: Hariom Balhara <hariombalhara@gmail.com>
Co-authored-by: Carina Wollendorfer <30310907+CarinaWolli@users.noreply.github.com>
* added two new tips (#6915)
* [CAL-488] Timezone selection has a weird double dropdown (#6851)
Co-authored-by: gitstart-calcom <gitstart@users.noreply.github.com>
* fix: color and line height of icon (#6913)
* fix: use destination calendar email (#6886)
* fix: use destination calendar email
to display correct primary email
Signed-off-by: Udit Takkar <udit.07814802719@cse.mait.ac.in>
* fix: simplify logic
Signed-off-by: Udit Takkar <udit.07814802719@cse.mait.ac.in>
---------
Signed-off-by: Udit Takkar <udit.07814802719@cse.mait.ac.in>
* fix: dropdown title in bookings page (#6924)
* fixes the broken max size of members on teams page (#6926)
* fix: display provider name instead of url (#6914)
Signed-off-by: Udit Takkar <udit.07814802719@cse.mait.ac.in>
* fix: add sortByLabel (#6797)
Signed-off-by: Udit Takkar <udit.07814802719@cse.mait.ac.in>
* Email Variables Bug (#6943)
* Remove _subject translations for zh-CN, needs retranslation
* minor timezone-select improvements (#6944)
* fixed timezone select positioning and hover
* fixed timezone select positioning and hover
* Give trackingId a default value because if user doesnt interact with trackingId input it is not set (#6945)
* Block /auth/:path, nothing else. (#6949)
* Block /auth/:path, nothing else.
* Also add /signup
* fix start icon in button (#6950)
Co-authored-by: CarinaWolli <wollencarina@gmail.com>
* Fixes localisation of {EVENT_DATE} in workflows (#6907)
* translate {EVENT_DATE} variable to correct language
* fix locale for cron schedule reminder emails/sms
* fix type error
* add missing locale to attendees
* fix type error
* code clean up
* revert last commit
* using Intl for date translations
---------
Co-authored-by: CarinaWolli <wollencarina@gmail.com>
* Allow account linking for Google and SAML providers (#6874)
* allow account linking for self-hosted instances, both Google and SAML are verified emails
* allow account linking for Google and SSO if emails match with existing username/password account
* Tweaked find user by email since we now have multiple providers (other than credentials provider)
* feat/payment-service-6438-cal-767 (#6677)
* WIP paymentService
* Changes for payment Service
* Fix for stripe payment flow
* Remove logs/comments
* Refactored refund for stripe app
* Move stripe handlePayment to own lib
* Move stripe delete payments to paymentService
* lint fix
* Change handleRefundError as generic function
* remove log
* remove logs
* remove logs
* Return stripe default export to lib/server
* Fixing types
* Fix types
* Upgrades typescript
* Update yarn lock
* Typings
* Hotfix: ping,riverside,whereby and around not showing up in list (#6712)
* Hotfix: ping,riverside,whereby and around not showing up in list (#6712) (#6713)
* Adds deployment settings to DB (#6706)
* WIP
* Adds DeploymentTheme
* Add missing migrations
* Adds client extensions for deployment
* Cleanup
* Revert "lint fix"
This reverts commit e1a2e4a357e58e6673c47399888ae2e00d1351a6.
* Add validation
* Revert changes removed in force push
* Removing abstract class and just leaving interface implementation
* Fix types for handlePayments
* Fix payment test appStore import
* Fix stripe metadata in event type
* Move migration to separate PR
* Revert "Move migration to separate PR"
This reverts commit 48aa64e0724a522d3cc2fefaaaee5792ee9cd9e6.
* Update packages/prisma/migrations/20230125175109_remove_type_from_payment_and_add_app_relationship/migration.sql
Co-authored-by: Omar López <zomars@me.com>
---------
Co-authored-by: zomars <zomars@me.com>
Co-authored-by: Hariom Balhara <hariombalhara@gmail.com>
* Small UI fixes for seats & destination calendars (#6859)
* Do not add former time for events on seats
* Default display destination calendar
* Add seats badge to event type item
* Add string
* Actively watch seats enabled option for requires confirmation
* Only show former time when there is a rescheduleUid
* Update RadioAreaGroup.tsx
* Update CalendarService.ts
* Update CalendarService.ts
---------
Signed-off-by: Tobias Gurtzick <magic@wizardtales.com>
Signed-off-by: Udit Takkar <udit.07814802719@cse.mait.ac.in>
Co-authored-by: Hariom Balhara <hariombalhara@gmail.com>
Co-authored-by: Tobias Gurtzick <magic@wizardtales.com>
Co-authored-by: Peer Richelsen <peeroke@gmail.com>
Co-authored-by: GitStart-Cal.com <121884634+gitstart-calcom@users.noreply.github.com>
Co-authored-by: gitstart-calcom <gitstart@users.noreply.github.com>
Co-authored-by: Joe Au-Yeung <65426560+joeauyeung@users.noreply.github.com>
Co-authored-by: Carina Wollendorfer <30310907+CarinaWolli@users.noreply.github.com>
Co-authored-by: CarinaWolli <wollencarina@gmail.com>
Co-authored-by: Udit Takkar <53316345+Udit-takkar@users.noreply.github.com>
Co-authored-by: Sai Deepesh <saideepesh000@gmail.com>
Co-authored-by: Nafees Nazik <84864519+G3root@users.noreply.github.com>
Co-authored-by: Richard Poelderl <richard.poelderl@gmail.com>
Co-authored-by: Syed Ali Shahbaz <52925846+alishaz-polymath@users.noreply.github.com>
Co-authored-by: Alex van Andel <me@alexvanandel.com>
Co-authored-by: kodiakhq[bot] <49736102+kodiakhq[bot]@users.noreply.github.com>
Co-authored-by: Jeff Loiselle <jeff@loiselles.com>
Co-authored-by: Peer Richelsen <peer@cal.com>
Co-authored-by: Ronit Panda <72537293+rtpa25@users.noreply.github.com>
Co-authored-by: Alan <alannnc@gmail.com>
Co-authored-by: sean-brydon <55134778+sean-brydon@users.noreply.github.com>
Co-authored-by: Bram Verstraten <bramverstraten@outlook.com>
Co-authored-by: Leo Giovanetti <hello@leog.me>
Co-authored-by: Ben Lam <37053985+blam404@users.noreply.github.com>
Co-authored-by: Josh Avant <joshavant@gmail.com>
Co-authored-by: Joe Shajan <joeshajan1551@gmail.com>
Co-authored-by: Aaron Presley <155617+AaronPresley@users.noreply.github.com>
Co-authored-by: Ben Hybert <53020786+Hybes@users.noreply.github.com>
Co-authored-by: Harsh Singh <51085015+harshsinghatz@users.noreply.github.com>
Co-authored-by: Guest <guest@pop-os.localdomain>
Co-authored-by: root <harsh.singh@gocomet.com>
Co-authored-by: Luis Cadillo <luiscaf3r@gmail.com>
Co-authored-by: Mohammed Cherfaoui <hi@cherfaoui.dev>
Co-authored-by: Deepak Prabhakara <deepak@boxyhq.com>
2023-03-10 17:58:26 +00:00
}
2022-04-14 22:29:16 +00:00
2023-04-12 17:30:39 +00:00
if ( vtimezone ) {
const zone = new ICAL . Timezone ( vtimezone ) ;
event . startDate = event . startDate . convertToZone ( zone ) ;
event . endDate = event . endDate . convertToZone ( zone ) ;
}
2023-04-20 13:51:39 +00:00
2023-04-12 17:30:39 +00:00
return events . push ( {
start : dayjs ( event . startDate . toJSDate ( ) ) . toISOString ( ) ,
end : dayjs ( event . endDate . toJSDate ( ) ) . toISOString ( ) ,
} ) ;
2022-01-29 14:38:53 +00:00
} ) ;
2022-04-14 22:29:16 +00:00
} ) ;
2022-01-06 17:28:31 +00:00
2022-01-29 14:38:53 +00:00
return Promise . resolve ( events ) ;
2021-12-09 15:51:37 +00:00
}
async listCalendars ( event? : CalendarEvent ) : Promise < IntegrationCalendar [ ] > {
try {
const account = await this . getAccount ( ) ;
2022-01-06 17:28:31 +00:00
2023-02-18 01:34:37 +00:00
const calendars = ( await fetchCalendars ( {
2021-12-09 15:51:37 +00:00
account ,
headers : this.headers ,
2023-02-18 01:34:37 +00:00
} ) ) /** @url https://github.com/natelindev/tsdav/pull/139 */ as ( Omit < DAVCalendar , " displayName " > & {
displayName? : string | Record < string , unknown > ;
} ) [ ] ;
2021-12-09 15:51:37 +00:00
return calendars . reduce < IntegrationCalendar [ ] > ( ( newCalendars , calendar ) = > {
if ( ! calendar . components ? . includes ( "VEVENT" ) ) return newCalendars ;
2022-01-06 17:28:31 +00:00
2021-12-09 15:51:37 +00:00
newCalendars . push ( {
externalId : calendar.url ,
2023-02-18 01:34:37 +00:00
/** @url https://github.com/calcom/cal.com/issues/7186 */
name : typeof calendar . displayName === "string" ? calendar . displayName : "" ,
2021-12-09 15:51:37 +00:00
primary : event?.destinationCalendar?.externalId
? event . destinationCalendar . externalId === calendar . url
: false ,
integration : this.integrationName ,
2022-12-20 21:50:20 +00:00
email : this.credentials.username ? ? "" ,
2021-12-09 15:51:37 +00:00
} ) ;
return newCalendars ;
} , [ ] ) ;
} catch ( reason ) {
2022-01-06 17:28:31 +00:00
logger . error ( reason ) ;
2021-12-09 15:51:37 +00:00
throw reason ;
}
}
2023-04-12 17:30:39 +00:00
/ * *
* The fetchObjectsWithOptionalExpand function is responsible for fetching calendar objects
* from an array of selectedCalendars . It attempts to fetch objects with the expand option
* alone such that it works if a calendar supports it . If any calendar object has an undefined 'data' property
* and etag isn ' t undefined , the function makes a new request without the expand option to retrieve the data .
* The result is a flattened array of calendar objects with the structure { url : ... , etag : ... , data : ... } .
*
* @param { Object } options - The options object containing the following properties :
* @param { IntegrationCalendar [ ] } options . selectedCalendars - An array of IntegrationCalendar objects to fetch data from .
* @param { string } options . startISOString - The start date of the date range to fetch events from , in ISO 8601 format .
* @param { string } options . dateTo - The end date of the date range to fetch events from .
* @param { Object } options . headers - Headers to be included in the API requests .
* @returns { Promise < Array > } - A promise that resolves to a flattened array of calendar objects with the structure { url : ... , etag : ... , data : ... } .
* /
async fetchObjectsWithOptionalExpand ( {
selectedCalendars ,
startISOString ,
dateTo ,
headers ,
} : FetchObjectsWithOptionalExpandOptionsType ) : Promise < DAVObject [ ] > {
const filteredCalendars = selectedCalendars . filter ( ( sc ) = > sc . externalId ) ;
const fetchPromises = filteredCalendars . map ( async ( sc ) = > {
const response = await fetchCalendarObjects ( {
urlFilter : ( url ) = > this . isValidFormat ( url ) ,
calendar : {
url : sc.externalId ,
} ,
headers ,
expand : true ,
timeRange : {
start : startISOString ,
end : new Date ( dateTo ) . toISOString ( ) ,
} ,
} ) ;
const processedResponse = await Promise . all (
response . map ( async ( calendarObject ) = > {
const calendarObjectHasEtag = calendarObject . etag !== undefined ;
const calendarObjectDataUndefined = calendarObject . data === undefined ;
if ( calendarObjectDataUndefined && calendarObjectHasEtag ) {
const responseWithoutExpand = await fetchCalendarObjects ( {
urlFilter : ( url ) = > this . isValidFormat ( url ) ,
calendar : {
url : sc.externalId ,
} ,
headers ,
expand : false ,
timeRange : {
start : startISOString ,
end : new Date ( dateTo ) . toISOString ( ) ,
} ,
} ) ;
return responseWithoutExpand . find (
( obj ) = > obj . url === calendarObject . url && obj . etag === calendarObject . etag
) ;
}
return calendarObject ;
} )
) ;
return processedResponse ;
} ) ;
const resolvedPromises = await Promise . allSettled ( fetchPromises ) ;
const fulfilledPromises = resolvedPromises . filter (
( promise ) : promise is PromiseFulfilledResult < ( DAVObject | undefined ) [ ] > = >
promise . status === "fulfilled"
) ;
const flatResult = fulfilledPromises
. map ( ( promise ) = > promise . value )
. flat ( )
. filter ( ( obj ) = > obj !== null ) ;
return flatResult as DAVObject [ ] ;
}
2022-01-06 17:28:31 +00:00
private async getEvents (
2021-12-09 15:51:37 +00:00
calId : string ,
dateFrom : string | null ,
dateTo : string | null ,
objectUrls? : string [ ] | null
) {
try {
const objects = await fetchCalendarObjects ( {
calendar : {
url : calId ,
} ,
objectUrls : objectUrls ? objectUrls : undefined ,
timeRange :
dateFrom && dateTo
? {
2022-01-06 17:28:31 +00:00
start : dayjs ( dateFrom ) . utc ( ) . format ( TIMEZONE_FORMAT ) ,
end : dayjs ( dateTo ) . utc ( ) . format ( TIMEZONE_FORMAT ) ,
2021-12-09 15:51:37 +00:00
}
: undefined ,
headers : this.headers ,
} ) ;
const events = objects
. filter ( ( e ) = > ! ! e . data )
. map ( ( object ) = > {
2022-08-25 09:18:30 +00:00
const jcalData = ICAL . parse ( sanitizeCalendarObject ( object ) ) ;
2022-01-06 17:28:31 +00:00
2021-12-09 15:51:37 +00:00
const vcalendar = new ICAL . Component ( jcalData ) ;
2022-01-06 17:28:31 +00:00
2021-12-09 15:51:37 +00:00
const vevent = vcalendar . getFirstSubcomponent ( "vevent" ) ;
const event = new ICAL . Event ( vevent ) ;
const calendarTimezone =
2022-03-23 22:00:30 +00:00
vcalendar . getFirstSubcomponent ( "vtimezone" ) ? . getFirstPropertyValue < string > ( "tzid" ) || "" ;
2021-12-09 15:51:37 +00:00
const startDate = calendarTimezone
2022-02-09 18:34:47 +00:00
? dayjs . tz ( event . startDate . toString ( ) , calendarTimezone )
2021-12-09 15:51:37 +00:00
: new Date ( event . startDate . toUnixTime ( ) * 1000 ) ;
2022-01-06 17:28:31 +00:00
2021-12-09 15:51:37 +00:00
const endDate = calendarTimezone
2022-02-09 18:34:47 +00:00
? dayjs . tz ( event . endDate . toString ( ) , calendarTimezone )
2021-12-09 15:51:37 +00:00
: new Date ( event . endDate . toUnixTime ( ) * 1000 ) ;
return {
uid : event.uid ,
etag : object.etag ,
url : object.url ,
summary : event.summary ,
description : event.description ,
location : event.location ,
sequence : event.sequence ,
startDate ,
endDate ,
duration : {
weeks : event.duration.weeks ,
days : event.duration.days ,
hours : event.duration.hours ,
minutes : event.duration.minutes ,
seconds : event.duration.seconds ,
isNegative : event.duration.isNegative ,
} ,
organizer : event.organizer ,
attendees : event.attendees.map ( ( a ) = > a . getValues ( ) ) ,
recurrenceId : event.recurrenceId ,
timezone : calendarTimezone ,
} ;
} ) ;
return events ;
} catch ( reason ) {
console . error ( reason ) ;
throw reason ;
}
}
2022-01-06 17:28:31 +00:00
private async getEventsByUID ( uid : string ) : Promise < CalendarEventType [ ] > {
2022-02-10 17:42:06 +00:00
const events : Prisma.PromiseReturnType < typeof this.getEvents > = [ ] ;
2022-01-06 17:28:31 +00:00
const calendars = await this . listCalendars ( ) ;
for ( const cal of calendars ) {
const calEvents = await this . getEvents ( cal . externalId , null , null , [ ` ${ cal . externalId } ${ uid } .ics ` ] ) ;
for ( const ev of calEvents ) {
events . push ( ev ) ;
}
}
return events ;
}
private async getAccount ( ) : Promise < DAVAccount > {
return createAccount ( {
2021-12-09 15:51:37 +00:00
account : {
serverUrl : this.url ,
2022-03-23 22:00:30 +00:00
accountType : DEFAULT_CALENDAR_TYPE ,
2021-12-09 15:51:37 +00:00
credentials : this.credentials ,
} ,
headers : this.headers ,
} ) ;
}
}