mirror of
https://github.com/kennethnym/aris.git
synced 2026-03-20 09:01:19 +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/data-source-weatherkit
Weather data source using Apple WeatherKit REST API.
Usage
import { WeatherKitDataSource, Units } from "@aris/data-source-weatherkit"
const dataSource = new WeatherKitDataSource({
credentials: {
privateKey: "-----BEGIN PRIVATE KEY-----\n...",
keyId: "ABC123",
teamId: "DEF456",
serviceId: "com.example.weatherkit",
},
hourlyLimit: 12, // optional, default: 12
dailyLimit: 7, // optional, default: 7
})
const items = await dataSource.query(context, {
units: Units.metric, // or Units.imperial
})
Feed Items
The data source returns four types of feed items:
| Type | Description |
|---|---|
weather-current |
Current weather conditions |
weather-hourly |
Hourly forecast |
weather-daily |
Daily forecast |
weather-alert |
Weather alerts |
Priority
Base priorities are adjusted based on weather conditions:
- Severe conditions (tornado, hurricane, blizzard, etc.): +0.3
- Moderate conditions (thunderstorm, heavy rain, etc.): +0.15
- Alert severity: extreme=1.0, severe=0.9, moderate=0.75, minor=0.7
Authentication
WeatherKit requires Apple Developer credentials. Generate a private key in the Apple Developer portal under Certificates, Identifiers & Profiles > Keys.
Validation
API responses are validated using arktype schemas.
Generating Test Fixtures
To regenerate fixture data from the real API:
- Create a
.envfile with your credentials (see.env.example) - Run
bun run scripts/generate-fixtures.ts