Files
aris/packages/aris-data-source-weatherkit
Kenneth 96e22e227c feat: replace flat context with tuple-keyed store (#50)
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>
2026-03-01 22:52:41 +00:00
..

@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:

  1. Create a .env file with your credentials (see .env.example)
  2. Run bun run scripts/generate-fixtures.ts