Skip to content
File

Blob: src/worker/objects/card-dav/preconditions.ts

typescript28 lines
1import { addressbookHref } from "@/worker/carddav/paths";
2import type { CardDavDoDb } from "@/worker/db/card-dav-do/client";
3import { addressSyncToken, ensureAddressbook, latestChangeSeq, objectByName } from "@/worker/db/card-dav-do/repository";
4import { cardDavError, type CardDavError } from "@/worker/objects/card-dav/types";
5import {
6 collectionWritePrecondition,
7 type CollectionConditionalInput,
8} from "@/worker/objects/common/collection-preconditions";
9 
10export type AddressConditionalInput = CollectionConditionalInput;
11 
12export function addressWritePrecondition(
13 db: CardDavDoDb,
14 input: AddressConditionalInput,
15 targetHref: string,
16 targetEtag: string | null,
17): CardDavError | null {
18 return collectionWritePrecondition(db, input, targetHref, targetEtag, {
19 basePath: "/addressbooks",
20 collectionHref: addressbookHref,
21 ensureCollection: ensureAddressbook,
22 objectEtag: (db, bookId, objectName) => objectByName(db, bookId, objectName)?.etag ?? null,
23 latestChangeSeq,
24 syncToken: addressSyncToken,
25 preconditionFailed: (message) => cardDavError(412, "precondition_failed", message),
26 });
27}