mirror of
https://github.com/kennethnym/aris.git
synced 2026-03-20 17:11:17 +00:00
The iCal parser returned master VEVENT components with their original start dates instead of expanding recurrences. Events from months ago appeared in today's feed. parseICalEvents now accepts an optional timeRange. When set, recurring events are expanded via ical.js iterator and only occurrences overlapping the range are returned. Exception overrides (RECURRENCE-ID) are applied during expansion. Co-authored-by: Ona <no-reply@ona.com>
@aris/source-caldav
A FeedSource that fetches calendar events from any CalDAV server.
Usage
import { CalDavSource } from "@aris/source-caldav"
// Basic auth (Nextcloud, Radicale, Baikal, iCloud, etc.)
const source = new CalDavSource({
serverUrl: "https://caldav.example.com",
authMethod: "basic",
username: "user",
password: "pass",
lookAheadDays: 7, // optional, default: 0 (today only)
timeZone: "America/New_York", // optional, default: UTC
})
// OAuth
const source = new CalDavSource({
serverUrl: "https://caldav.provider.com",
authMethod: "oauth",
accessToken: "...",
refreshToken: "...",
tokenUrl: "https://provider.com/oauth/token",
})
iCloud
Use your Apple ID email as the username and an app-specific password:
const source = new CalDavSource({
serverUrl: "https://caldav.icloud.com",
authMethod: "basic",
username: "you@icloud.com",
password: "<app-specific-password>",
})
Testing
bun test
Live test
bun run test:live connects to a real CalDAV server and prints all events to the console. It prompts for:
- CalDAV server URL — e.g.
https://caldav.icloud.com - Username — your account email
- Password — your password (or app-specific password for iCloud)
- Look-ahead days — how many days beyond today to fetch (default: 0)
The script runs both fetchContext and fetchItems, printing the calendar context (in-progress events, next event, today's count) followed by each event with its title, time, location, signals, and attendees.