Skip to content

Commit 2f818c0

Browse files
committed
chore: prepare v2.1.8 release
1 parent bfab3ac commit 2f818c0

24 files changed

Lines changed: 298 additions & 191 deletions

.eslintrc.json

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,25 @@
1919
"sourceType": "module",
2020
"project": "./tsconfig.json"
2121
},
22+
"overrides": [
23+
{
24+
"files": ["dist/**/*", "docs/**/*"],
25+
"excludedFiles": ["dist/**/*.ts", "dist/**/*.d.ts", "docs/**/*.ts", "docs/**/*.tsx"],
26+
"parserOptions": {
27+
"project": null
28+
},
29+
"rules": {
30+
"@typescript-eslint/no-implied-eval": "off",
31+
"@typescript-eslint/dot-notation": "off"
32+
}
33+
},
34+
{
35+
"files": ["*.js", "src/__tests__/**/*", "src/util/__tests__/**/*"],
36+
"parserOptions": {
37+
"project": null
38+
}
39+
}
40+
],
2241
"rules": {
2342
"import/prefer-default-export": "off",
2443
"@typescript-eslint/no-explicit-any": "off",
@@ -40,6 +59,8 @@
4059
"peerDependencies": false
4160
}
4261
],
43-
"import/no-cycle": 0
62+
"import/no-cycle": 0,
63+
"@typescript-eslint/lines-between-class-members": "off",
64+
"@typescript-eslint/no-throw-literal": "off"
4465
}
4566
}

AGENTS.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,38 +1,46 @@
11
# AGENTS
22

33
## Project Snapshot
4+
45
- `tsdav` is a TypeScript WebDAV client that wraps CalDAV and CardDAV workflows for browsers and Node.js (`docs/docs/intro.md`).
56
- Core entry points are `createDAVClient` and `DAVClient`; for the class-based API you must call `client.login()` before issuing DAV requests.
67
- Source lives in `src/`, generated bundles ship from `dist/`, while human-readable references are kept under `docs/docs/`.
78
- Install dependencies with `pnpm install`; build with `pnpm build`. Jest integration targets expect provider credentials (`package.json` scripts).
89
- Debug HTTP traffic by setting `DEBUG=tsdav:*` (`README.md`).
910

1011
## WebDAV Building Blocks
12+
1113
- `serviceDiscovery`, `fetchPrincipalUrl`, and `fetchHomeUrl` locate account roots via `/.well-known/` redirects (`docs/docs/webdav/account`).
1214
- `createAccount` enriches a `DAVAccount` with discovered URLs plus calendars/address books when supplied credentials.
1315
- `davRequest` is the low-level fetch wrapper shared by WebDAV, CalDAV, and CardDAV helpers (`docs/docs/webdav/davRequest.md`).
1416
- Object helpers map to HTTP verbs: `createObject`, `updateObject`, and `deleteObject` issue PUT/PATCH/DELETE with concurrency headers; `propfind` reads WebDAV metadata (`docs/docs/webdav`).
1517

1618
## CalDAV Workflow Highlights
19+
1720
- Enumerate calendars with `fetchCalendars`; filter or retrieve objects via `fetchCalendarObjects`, `calendarMultiGet`, and `calendarQuery` (`docs/docs/caldav`).
1821
- Write data with `createCalendarObject`, `updateCalendarObject`, and `deleteCalendarObject`; the helpers enforce proper `If-Match`/`If-None-Match` usage.
1922
- `syncCalendars` and `smartCollectionSync` surface server-side `sync-token`/`ctag` deltas for incremental syncs.
2023
- `smart calendar sync.md` documents end-to-end two-way sync: recommended database schema, handling created/updated/deleted objects, and when to fall back to multi-get.
2124

2225
## CardDAV Workflow Highlights
26+
2327
- `fetchAddressBooks` discovers address books; `fetchVCards`, `addressBookMultiGet`, and `addressBookQuery` return contact payloads (`docs/docs/carddav`).
2428
- CRUD mirrors CalDAV: `createVCard`, `updateVCard`, and `deleteVCard` manage `.vcf` resources while honoring provider-specific UID behavior.
2529

2630
## Helpers and Types
31+
2732
- `docs/docs/helper.mdx` exposes the XML ⇄ JS converter to assemble ElementCompact request bodies without manual XML string building.
2833
- Typed shapes such as `DAVAccount`, `DAVCalendar`, `DAVCalendarObject`, `DAVAddressBook`, `ElementCompact`, and credential tokens are documented in `docs/docs/types/`.
2934
- Most high-level functions accept `headers`, `headersToExclude`, and `fetchOptions` overrides—ensure custom auth headers align with provider requirements.
35+
- You can override the underlying `fetch` implementation for custom transports (Electron, KaiOS, Workers); see `docs/docs/intro.md` and `docs/docs/cloud providers.md`.
3036

3137
## Cloud Provider Notes
38+
3239
- Credential setup differs across providers (Apple app-specific passwords, Google OAuth refresh tokens, Fastmail app passwords) (`docs/docs/cloud providers.md`).
3340
- Expect quirks such as Google renaming objects to UID-based filenames, Zoho preventing duplicate UIDs, and Nextcloud renaming on delete; design agents to normalize URLs before diffing.
3441

3542
## Field Tips for Agents
43+
3644
- Always normalize calendar object URLs using `URL.resolve` when combining parent collection URLs with relative paths (see smart sync example).
3745
- When overriding CalDAV/CardDAV `props`, keep required fields (`supported-calendar-component-set`, `resourcetype`) to prevent server errors.
3846
- Reuse helper predicates (`urlFilter`, `useMultiGet`) for providers that emit non-`.ics` or non-`.vcf` keys.

CHANGELOG.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,12 @@
44

55
- fixed [#272](https://github.com/natelindev/tsdav/issues/272) malformed expand request in fetchCalendarObjects
66
- optimized fetchCalendarObjects to reduce redundant requests when expand is true
7+
- added Bearer auth support for token-based providers (e.g., Nextcloud OIDC)
8+
- added fetch overrides across account, request, and collection helpers for custom transports
9+
- prefer native fetch in Cloudflare Workers to avoid cross-fetch incompatibilities
10+
- collectionQuery now rejects on non-OK responses instead of returning empty arrays
11+
- fetchVCards filters out collection URLs to avoid empty/invalid entries (Radicale-compatible)
12+
- docs updates for iCal feed import, providers, and custom transport guidance
713

814
## v2.1.7
915

dist/index.d.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ export { davRequest, propfind, createObject, updateObject, deleteObject } from '
99
export { collectionQuery, supportedReportSet, isCollectionDirty, syncCollection, smartCollectionSync, } from './collection';
1010
export { calendarQuery, calendarMultiGet, makeCalendar, fetchCalendars, fetchCalendarUserAddresses, fetchCalendarObjects, createCalendarObject, updateCalendarObject, deleteCalendarObject, syncCalendars, freeBusyQuery, } from './calendar';
1111
export { addressBookQuery, addressBookMultiGet, fetchAddressBooks, fetchVCards, createVCard, updateVCard, deleteVCard, } from './addressBook';
12-
export { getBasicAuthHeaders, getOauthHeaders, fetchOauthTokens, refreshAccessToken, } from './util/authHelpers';
12+
export { getBasicAuthHeaders, getBearerAuthHeaders, getOauthHeaders, fetchOauthTokens, refreshAccessToken, } from './util/authHelpers';
1313
export { urlContains, urlEquals, getDAVAttribute, cleanupFalsy } from './util/requestHelpers';
1414
export { DAVNamespace, DAVAttributeMap, DAVNamespaceShort } from './consts';
1515
declare const _default: {

dist/package.json

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "tsdav",
3-
"version": "2.1.7",
3+
"version": "2.1.8",
44
"description": "WebDAV, CALDAV, and CARDDAV client for Nodejs and the Browser",
55
"keywords": [
66
"dav",
@@ -32,6 +32,7 @@
3232
],
3333
"scripts": {
3434
"build": "pnpm -s clean && rollup -c rollup.config.mjs && copyfiles package.json LICENSE README.md ./dist && rimraf ./dist/ts",
35+
"lint": "eslint --ext .ts,.tsx src --ignore-pattern src/__tests__ --ignore-pattern src/util/__tests__",
3536
"clean": "rimraf dist*",
3637
"prepublishOnly": "pnpm build",
3738
"test": "jest --testPathPatterns=src/__tests__/unit",
@@ -65,7 +66,7 @@
6566
"copyfiles": "2.4.1",
6667
"cross-env": "10.1.0",
6768
"dotenv": "17.2.3",
68-
"eslint": "9.39.2",
69+
"eslint": "8.57.0",
6970
"eslint-config-airbnb": "19.0.4",
7071
"eslint-config-airbnb-typescript": "18.0.0",
7172
"eslint-config-prettier": "10.1.8",

dist/tsdav.cjs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2111,6 +2111,7 @@ exports.fetchOauthTokens = fetchOauthTokens;
21112111
exports.fetchVCards = fetchVCards;
21122112
exports.freeBusyQuery = freeBusyQuery;
21132113
exports.getBasicAuthHeaders = getBasicAuthHeaders;
2114+
exports.getBearerAuthHeaders = getBearerAuthHeaders;
21142115
exports.getDAVAttribute = getDAVAttribute;
21152116
exports.getOauthHeaders = getOauthHeaders;
21162117
exports.isCollectionDirty = isCollectionDirty;

dist/tsdav.cjs.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2111,6 +2111,7 @@ exports.fetchOauthTokens = fetchOauthTokens;
21112111
exports.fetchVCards = fetchVCards;
21122112
exports.freeBusyQuery = freeBusyQuery;
21132113
exports.getBasicAuthHeaders = getBasicAuthHeaders;
2114+
exports.getBearerAuthHeaders = getBearerAuthHeaders;
21142115
exports.getDAVAttribute = getDAVAttribute;
21152116
exports.getOauthHeaders = getOauthHeaders;
21162117
exports.isCollectionDirty = isCollectionDirty;

dist/tsdav.d.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -804,6 +804,9 @@ declare const createAccount: (params: {
804804
declare const getBasicAuthHeaders: (credentials: DAVCredentials) => {
805805
authorization?: string;
806806
};
807+
declare const getBearerAuthHeaders: (credentials: DAVCredentials) => {
808+
authorization?: string;
809+
};
807810
declare const fetchOauthTokens: (credentials: DAVCredentials, fetchOptions?: RequestInit, fetchOverride?: typeof fetch$1) => Promise<DAVTokens>;
808811
declare const refreshAccessToken: (credentials: DAVCredentials, fetchOptions?: RequestInit, fetchOverride?: typeof fetch$1) => Promise<{
809812
access_token?: string;
@@ -1397,5 +1400,5 @@ declare const _default: {
13971400
};
13981401
};
13991402

1400-
export { DAVAttributeMap, DAVClient, DAVNamespace, DAVNamespaceShort, addressBookMultiGet, addressBookQuery, calendarMultiGet, calendarQuery, cleanupFalsy, collectionQuery, createAccount, createCalendarObject, createDAVClient, createObject, createVCard, davRequest, _default as default, deleteCalendarObject, deleteObject, deleteVCard, fetchAddressBooks, fetchCalendarObjects, fetchCalendarUserAddresses, fetchCalendars, fetchOauthTokens, fetchVCards, freeBusyQuery, getBasicAuthHeaders, getDAVAttribute, getOauthHeaders, isCollectionDirty, makeCalendar, propfind, refreshAccessToken, smartCollectionSync, supportedReportSet, syncCalendars, syncCollection, updateCalendarObject, updateObject, updateVCard, urlContains, urlEquals };
1403+
export { DAVAttributeMap, DAVClient, DAVNamespace, DAVNamespaceShort, addressBookMultiGet, addressBookQuery, calendarMultiGet, calendarQuery, cleanupFalsy, collectionQuery, createAccount, createCalendarObject, createDAVClient, createObject, createVCard, davRequest, _default as default, deleteCalendarObject, deleteObject, deleteVCard, fetchAddressBooks, fetchCalendarObjects, fetchCalendarUserAddresses, fetchCalendars, fetchOauthTokens, fetchVCards, freeBusyQuery, getBasicAuthHeaders, getBearerAuthHeaders, getDAVAttribute, getOauthHeaders, isCollectionDirty, makeCalendar, propfind, refreshAccessToken, smartCollectionSync, supportedReportSet, syncCalendars, syncCollection, updateCalendarObject, updateObject, updateVCard, urlContains, urlEquals };
14011404
export type { DAVAccount, DAVAddressBook, DAVCalendar, DAVCalendarObject, DAVCollection, DAVCredentials, DAVDepth, DAVMethods, DAVObject, DAVRequest, DAVResponse, DAVTokens, DAVVCard };

dist/tsdav.esm.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2081,4 +2081,4 @@ var index = {
20812081
...requestHelpers,
20822082
};
20832083

2084-
export { DAVAttributeMap, DAVClient, DAVNamespace, DAVNamespaceShort, addressBookMultiGet, addressBookQuery, calendarMultiGet, calendarQuery, cleanupFalsy, collectionQuery, createAccount, createCalendarObject, createDAVClient, createObject, createVCard, davRequest, index as default, deleteCalendarObject, deleteObject, deleteVCard, fetchAddressBooks, fetchCalendarObjects, fetchCalendarUserAddresses, fetchCalendars, fetchOauthTokens, fetchVCards, freeBusyQuery, getBasicAuthHeaders, getDAVAttribute, getOauthHeaders, isCollectionDirty, makeCalendar, propfind, refreshAccessToken, smartCollectionSync, supportedReportSet, syncCalendars, syncCollection, updateCalendarObject, updateObject, updateVCard, urlContains, urlEquals };
2084+
export { DAVAttributeMap, DAVClient, DAVNamespace, DAVNamespaceShort, addressBookMultiGet, addressBookQuery, calendarMultiGet, calendarQuery, cleanupFalsy, collectionQuery, createAccount, createCalendarObject, createDAVClient, createObject, createVCard, davRequest, index as default, deleteCalendarObject, deleteObject, deleteVCard, fetchAddressBooks, fetchCalendarObjects, fetchCalendarUserAddresses, fetchCalendars, fetchOauthTokens, fetchVCards, freeBusyQuery, getBasicAuthHeaders, getBearerAuthHeaders, getDAVAttribute, getOauthHeaders, isCollectionDirty, makeCalendar, propfind, refreshAccessToken, smartCollectionSync, supportedReportSet, syncCalendars, syncCollection, updateCalendarObject, updateObject, updateVCard, urlContains, urlEquals };

dist/tsdav.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11447,4 +11447,4 @@ var index = {
1144711447
...requestHelpers,
1144811448
};
1144911449

11450-
export { DAVAttributeMap, DAVClient, DAVNamespace, DAVNamespaceShort, addressBookMultiGet, addressBookQuery, calendarMultiGet, calendarQuery, cleanupFalsy, collectionQuery, createAccount, createCalendarObject, createDAVClient, createObject, createVCard, davRequest, index as default, deleteCalendarObject, deleteObject, deleteVCard, fetchAddressBooks, fetchCalendarObjects, fetchCalendarUserAddresses, fetchCalendars, fetchOauthTokens, fetchVCards, freeBusyQuery, getBasicAuthHeaders, getDAVAttribute, getOauthHeaders, isCollectionDirty, makeCalendar, propfind, refreshAccessToken, smartCollectionSync, supportedReportSet, syncCalendars, syncCollection, updateCalendarObject, updateObject, updateVCard, urlContains, urlEquals };
11450+
export { DAVAttributeMap, DAVClient, DAVNamespace, DAVNamespaceShort, addressBookMultiGet, addressBookQuery, calendarMultiGet, calendarQuery, cleanupFalsy, collectionQuery, createAccount, createCalendarObject, createDAVClient, createObject, createVCard, davRequest, index as default, deleteCalendarObject, deleteObject, deleteVCard, fetchAddressBooks, fetchCalendarObjects, fetchCalendarUserAddresses, fetchCalendars, fetchOauthTokens, fetchVCards, freeBusyQuery, getBasicAuthHeaders, getBearerAuthHeaders, getDAVAttribute, getOauthHeaders, isCollectionDirty, makeCalendar, propfind, refreshAccessToken, smartCollectionSync, supportedReportSet, syncCalendars, syncCollection, updateCalendarObject, updateObject, updateVCard, urlContains, urlEquals };

0 commit comments

Comments
 (0)