diff --git a/lib/integrations/calendar/services/BaseCalendarService.ts b/lib/integrations/calendar/services/BaseCalendarService.ts index 429425dbfa..11a3292b45 100644 --- a/lib/integrations/calendar/services/BaseCalendarService.ts +++ b/lib/integrations/calendar/services/BaseCalendarService.ts @@ -184,18 +184,54 @@ export default abstract class BaseCalendarService implements Calendar { } } - getAvailability( + async getAvailability( dateFrom: string, dateTo: string, selectedCalendars: IntegrationCalendar[] ): Promise { - this.log.warn( - `Method not implemented. dateFrom: ${dateFrom}, dateTo: ${dateTo}, selectedCalendars: ${selectedCalendars}` - ); + const objects = ( + await Promise.all( + selectedCalendars.map((sc) => + fetchCalendarObjects({ + calendar: { + url: sc.externalId, + }, + headers: this.headers, + expand: true, + timeRange: { + start: new Date(dateFrom).toISOString(), + end: new Date(dateTo).toISOString(), + }, + }) + ) + ) + ).flat(); - const eventsBusyDate: EventBusyDate[] = []; + const events = objects + .filter((e) => !!e.data) + .map((object) => { + const jcalData = ICAL.parse(object.data); + const vcalendar = new ICAL.Component(jcalData); + const vevent = vcalendar.getFirstSubcomponent("vevent"); + const event = new ICAL.Event(vevent); + const calendarTimezone = + vcalendar.getFirstSubcomponent("vtimezone")?.getFirstPropertyValue("tzid") || ""; - return Promise.resolve(eventsBusyDate); + const startDate = calendarTimezone + ? dayjs(event.startDate.toJSDate()).tz(calendarTimezone) + : new Date(event.startDate.toUnixTime() * 1000); + + const endDate = calendarTimezone + ? dayjs(event.endDate.toJSDate()).tz(calendarTimezone) + : new Date(event.endDate.toUnixTime() * 1000); + + return { + start: startDate.toISOString(), + end: endDate.toISOString(), + }; + }); + + return Promise.resolve(events); } async listCalendars(event?: CalendarEvent): Promise { diff --git a/package.json b/package.json index 794d98612c..b7cb226e5e 100644 --- a/package.json +++ b/package.json @@ -100,7 +100,7 @@ "short-uuid": "^4.2.0", "stripe": "^8.191.0", "superjson": "1.8.0", - "tsdav": "^1.1.5", + "tsdav": "2.0.0-rc.3", "tslog": "^3.2.1", "uuid": "^8.3.2", "zod": "^3.8.2" diff --git a/yarn.lock b/yarn.lock index 5e93c69683..6d55874cb4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4115,12 +4115,12 @@ create-require@^1.1.0: resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== -cross-fetch@3.1.4: - version "3.1.4" - resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.1.4.tgz#9723f3a3a247bf8b89039f3a380a9244e8fa2f39" - integrity sha512-1eAtFWdIubi6T4XPy6ei9iUFoKpUkIF971QLN8lIvvvwueI65+Nw5haMNKUwfJxabqlIIDODJKGrQ66gxC0PbQ== +cross-fetch@3.1.5: + version "3.1.5" + resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.1.5.tgz#e1389f44d9e7ba767907f7af8454787952ab534f" + integrity sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw== dependencies: - node-fetch "2.6.1" + node-fetch "2.6.7" cross-spawn@7.0.3, cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3: version "7.0.3" @@ -4238,13 +4238,20 @@ debug@2, debug@2.6.9, debug@^2.2.0, debug@^2.3.3: dependencies: ms "2.0.0" -debug@4, debug@4.3.2, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@~4.3.1: +debug@4, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@~4.3.1: version "4.3.2" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.2.tgz#f0a49c18ac8779e31d4a0c6029dfb76873c7428b" integrity sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw== dependencies: ms "2.1.2" +debug@4.3.3: + version "4.3.3" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.3.tgz#04266e0b70a98d4462e6e288e38259213332b664" + integrity sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q== + dependencies: + ms "2.1.2" + debug@^3.2.7: version "3.2.7" resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" @@ -4673,14 +4680,13 @@ eslint-config-prettier@^8.3.0: resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz#f7471b20b6fe8a9a9254cc684454202886a2dd7a" integrity sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew== -eslint-module-utils@2.7.1: - version "2.7.1" - resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.7.1.tgz#b435001c9f8dd4ab7f6d0efcae4b9696d4c24b7c" - integrity sha512-fjoetBXQZq2tSTWZ9yWVl2KuFrTZZH3V+9iD1V1RfpDgxzJR+mPd/KZmMiA8gbPqdBzpNiEHOuT7IYEWxrH0zQ== +eslint-module-utils@2.7.3: + version "2.7.3" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.7.3.tgz#ad7e3a10552fdd0642e1e55292781bd6e34876ee" + integrity sha512-088JEC7O3lDZM9xGe0RerkOMd0EjFl+Yvd1jPWIkMT5u3H9+HC34mWWPnqPrN13gieT9pBOO+Qt07Nb/6TresQ== dependencies: debug "^3.2.7" find-up "^2.1.0" - pkg-dir "^2.0.0" eslint-plugin-playwright@^0.7.1: version "0.7.1" @@ -7797,6 +7803,13 @@ node-fetch@2.6.1: resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052" integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw== +node-fetch@2.6.7: + version "2.6.7" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" + integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== + dependencies: + whatwg-url "^5.0.0" + node-fetch@^2.6.1: version "2.6.6" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.6.tgz#1751a7c01834e8e1697758732e9efb6eeadfaf89" @@ -8472,13 +8485,6 @@ pixelmatch@^5.2.1: dependencies: pngjs "^4.0.1" -pkg-dir@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b" - integrity sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s= - dependencies: - find-up "^2.1.0" - pkg-dir@^4.1.0, pkg-dir@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" @@ -9471,10 +9477,10 @@ rollup-plugin-node-builtins@2.1.2: crypto-browserify "^3.11.0" process-es6 "^0.11.2" -rollup-plugin-polyfill-node@0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/rollup-plugin-polyfill-node/-/rollup-plugin-polyfill-node-0.7.0.tgz#938e13278c98a582a4f8814975ddd26f90afddcc" - integrity sha512-iJLZDfvxcQh3SpC0OiYlZG9ik26aRM29hiC2sARbAPXYunB8rzW8GtVaWuJgiCtX1hNAo/OaYvVXfPp15fMs7g== +rollup-plugin-polyfill-node@0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/rollup-plugin-polyfill-node/-/rollup-plugin-polyfill-node-0.8.0.tgz#859c070822f5e38d221e5b4238cb34aa894c2b19" + integrity sha512-C4UeKedOmOBkB3FgR+z/v9kzRwV1Q/H8xWs1u1+CNe4XOV6hINfOrcO+TredKxYvopCmr+WKUSNsFUnD1RLHgQ== dependencies: "@rollup/plugin-inject" "^4.0.0" @@ -10500,17 +10506,17 @@ ts-node@^10.2.1: make-error "^1.1.1" yn "3.1.1" -tsdav@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/tsdav/-/tsdav-1.1.5.tgz#1d33baad2fdf81e5fb73565904cfa39cbd851e41" - integrity sha512-4so4E7XZQ2Ahdz3QEdbkStcqfilUJYBcRq4ZhLr7Giy3KB9Ch+b7krQ8dqWeZoQJR/tXpb7knreoKuatIVLe2g== +tsdav@2.0.0-rc.3: + version "2.0.0-rc.3" + resolved "https://registry.yarnpkg.com/tsdav/-/tsdav-2.0.0-rc.3.tgz#b8cef07079e69a65be4d1404c91a6dbd319fa5b0" + integrity sha512-F6YxPB+dA5TP5KIr4NgfzQtPO7Pvf6XLwDjkpkWw6FhAdtshN97AVR+kP+DPcyUp2df3vMK9YS+XEOcpqwxCCw== dependencies: base-64 "1.0.0" - cross-fetch "3.1.4" - debug "4.3.2" - eslint-module-utils "2.7.1" + cross-fetch "3.1.5" + debug "4.3.3" + eslint-module-utils "2.7.3" rollup-plugin-node-builtins "2.1.2" - rollup-plugin-polyfill-node "0.7.0" + rollup-plugin-polyfill-node "0.8.0" xml-js "1.6.11" tslib@2.0.1: