0

I'm trying to write a simple node.js program to sync a few address books from a CardDAV server to a local MySQL database. I'm using the node dav client.

I know CardDAV supports only syncing changes since the last sync via sync-token and I see some references to sync tokens when I browse through the source and readme of the dav client. But, I'm very new to DAV, so I'm not 100% sure how to put it all together.

I'm guessing I need to store the sync token (and level?) the server sends back after I run a sync and then include that in my next sync request. Am I on the right track?

Dominic P
  • 2,284
  • 2
  • 27
  • 46

1 Answers1

1

Building a CardDAV client is a great resource which describes how all that works, including WebDAV Sync, which is what you are looking for.

Note that a server is not required to provided WebDAV sync (and quite a few don't). Also note that even if they support WebDAV sync, they can expire the tokens however/whenever they want (e.g. some only store a single token, or only for a limited time).

In short: do not rely on WebDAV-sync. If it is not available, or the token is expired, you need to fallback to a full, regular sync (comparing href's and etag's).

I'm guessing I need to store the sync token (and level?) the server sends back after I run a sync and then include that in my next sync request. Am I on the right track?

Yes you are on the right track. Sync-tokens are usually per collection (Depth:1, I think they can be Depth:infinity, but I'm not sure). So you need to store it alongside the URL of the collection you are syncing. Then in the next sync-request, you embed it into the sync-report. If the token is still valid, you get back the new/deleted/changed records. If the token was invalidated, you need to perform a full sync.

Hope that helps :-)

Community
  • 1
  • 1
hnh
  • 13,957
  • 6
  • 30
  • 40
  • Thanks for the helpful response. I have come across that article on building a CardDAV client before, and it's definitely been helpful. It's the most readable documentation of these concepts I have found. – Dominic P Sep 26 '17 at 23:51