import { addressbookHref } from "@/worker/carddav/paths"; import type { CardDavDoDb } from "@/worker/db/card-dav-do/client"; import { addressSyncToken, ensureAddressbook, latestChangeSeq, objectByName } from "@/worker/db/card-dav-do/repository"; import { cardDavError, type CardDavError } from "@/worker/objects/card-dav/types"; import { collectionWritePrecondition, type CollectionConditionalInput, } from "@/worker/objects/common/collection-preconditions"; export type AddressConditionalInput = CollectionConditionalInput; export function addressWritePrecondition( db: CardDavDoDb, input: AddressConditionalInput, targetHref: string, targetEtag: string | null, ): CardDavError | null { return collectionWritePrecondition(db, input, targetHref, targetEtag, { basePath: "/addressbooks", collectionHref: addressbookHref, ensureCollection: ensureAddressbook, objectEtag: (db, bookId, objectName) => objectByName(db, bookId, objectName)?.etag ?? null, latestChangeSeq, syncToken: addressSyncToken, preconditionFailed: (message) => cardDavError(412, "precondition_failed", message), }); }