Files
aris/packages/aris-data-source-weatherkit
kenneth 850d1925b6 Add query() tests with mocked API response
Tests transformation logic including:
- Feed item type assignment
- Hourly/daily limits
- Timestamp from context
- Unit conversion (metric/imperial)
- Priority assignment
- Unique ID generation

Co-authored-by: Ona <no-reply@ona.com>
2026-01-17 01:09:39 +00:00
..
2026-01-17 00:37:22 +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