import { DurableObject } from "cloudflare:workers"; import { createCalDavDoDb, type CalDavDoDb } from "@/worker/db/cal-dav-do/client"; import { createCalendar as createCalendarOp, deleteCalendarByName as deleteCalendarByNameOp, deleteCalendar as deleteCalendarOp, getCalendar as getCalendarOp, listCalendars as listCalendarsOp, updateCalendar as updateCalendarOp, } from "@/worker/objects/cal-dav/calendars"; import { calendarMultiget as calendarMultigetOp, calendarQuery as calendarQueryOp, deleteObject as deleteObjectOp, getObject as getObjectOp, putObject as putObjectOp, syncCollection as syncCollectionOp, } from "@/worker/objects/cal-dav/calendar-objects"; import { describe as describeOp, ensureInitialized as ensureInitializedOp, proppatch as proppatchOp, } from "@/worker/objects/cal-dav/properties"; import type { CalendarCreateInput, CalendarDeleteByNameInput, CalendarDeleteInput, CalendarGetInput, CalendarListInput, CalendarMultigetInput, CalendarQueryInput, CalendarUpdateInput, DeleteCalendarObjectInput, DescribeInput, EnsureInitializedInput, GetCalendarObjectInput, ProppatchInput, PutCalendarObjectInput, SyncCollectionInput, } from "@/worker/objects/cal-dav/types"; import { migrateCalDavObject } from "@/worker/objects/common/migrations"; export type { CalDavError, CalDavErrorCode, CalendarCreateInput, CalendarDeleteByNameInput, CalendarDeleteInput, CalendarGetInput, CalendarListInput, CalendarMultigetInput, CalendarQueryInput, CalendarRecord, CalendarResource, CalendarUpdateInput, DeleteCalendarObjectInput, DescribeInput, EnsureInitializedInput, GetCalendarObjectInput, ProppatchInput, PutCalendarObjectInput, SearchFilter, SyncCollectionInput, } from "@/worker/objects/cal-dav/types"; export class CalDavObject extends DurableObject { readonly db: CalDavDoDb; constructor(ctx: DurableObjectState, env: Env) { super(ctx, env); this.db = createCalDavDoDb(ctx.storage); ctx.blockConcurrencyWhile(async () => { await migrateCalDavObject(this.db); }); } async ping(): Promise<{ ok: true; object: "cal-dav" }> { return { ok: true, object: "cal-dav" }; } async ensureInitialized(input: EnsureInitializedInput) { return ensureInitializedOp(this.db, input); } async listCalendars(input: CalendarListInput) { return listCalendarsOp(this.db, input); } async getCalendar(input: CalendarGetInput) { return getCalendarOp(this.db, input); } async createCalendar(input: CalendarCreateInput) { return createCalendarOp(this.db, input); } async updateCalendar(input: CalendarUpdateInput) { return updateCalendarOp(this.db, input); } async deleteCalendar(input: CalendarDeleteInput) { return deleteCalendarOp(this.db, input); } async deleteCalendarByName(input: CalendarDeleteByNameInput) { return deleteCalendarByNameOp(this.db, input); } async describe(input: DescribeInput) { return describeOp(this.db, input); } async getObject(input: GetCalendarObjectInput) { return getObjectOp(this.db, input); } async putObject(input: PutCalendarObjectInput) { return putObjectOp(this.db, input); } async deleteObject(input: DeleteCalendarObjectInput) { return deleteObjectOp(this.db, input); } async proppatch(input: ProppatchInput) { return proppatchOp(this.db, input); } async calendarQuery(input: CalendarQueryInput) { return calendarQueryOp(this.db, input); } async calendarMultiget(input: CalendarMultigetInput) { return calendarMultigetOp(this.db, input); } async syncCollection(input: SyncCollectionInput) { return syncCollectionOp(this.db, input); } }