mirror of
https://github.com/kennethnym/aris.git
synced 2026-03-20 00:51:20 +00:00
Context keys are now tuples instead of strings, inspired by
React Query's query keys. This prevents context collisions
when multiple instances of the same source type are registered.
Sources write to structured keys like
["aris.google-calendar", "nextEvent", { account: "work" }]
and consumers can query by prefix via context.find().
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.