@tiangong-ai/cli 0.0.51 → 0.0.55
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +22 -2
- package/README.md +171 -7
- package/dist/cli.js +10 -1
- package/dist/cli.js.map +1 -1
- package/dist/data/builtins.d.ts +1 -0
- package/dist/data/builtins.js +40 -0
- package/dist/data/builtins.js.map +1 -0
- package/dist/data/catalog.d.ts +25 -0
- package/dist/data/catalog.js +305 -0
- package/dist/data/catalog.js.map +1 -0
- package/dist/data/commands.d.ts +9 -0
- package/dist/data/commands.js +307 -0
- package/dist/data/commands.js.map +1 -0
- package/dist/data/connectors/airnow-hourly-observations.d.ts +2 -0
- package/dist/data/connectors/airnow-hourly-observations.js +522 -0
- package/dist/data/connectors/airnow-hourly-observations.js.map +1 -0
- package/dist/data/connectors/airnow-hourly-observations.schemas.d.ts +299 -0
- package/dist/data/connectors/airnow-hourly-observations.schemas.js +188 -0
- package/dist/data/connectors/airnow-hourly-observations.schemas.js.map +1 -0
- package/dist/data/connectors/bluesky-public-posts.d.ts +2 -0
- package/dist/data/connectors/bluesky-public-posts.js +705 -0
- package/dist/data/connectors/bluesky-public-posts.js.map +1 -0
- package/dist/data/connectors/bluesky-public-posts.schemas.d.ts +733 -0
- package/dist/data/connectors/bluesky-public-posts.schemas.js +422 -0
- package/dist/data/connectors/bluesky-public-posts.schemas.js.map +1 -0
- package/dist/data/connectors/epa-eis-records.d.ts +2 -0
- package/dist/data/connectors/epa-eis-records.js +566 -0
- package/dist/data/connectors/epa-eis-records.js.map +1 -0
- package/dist/data/connectors/epa-eis-records.schemas.d.ts +199 -0
- package/dist/data/connectors/epa-eis-records.schemas.js +146 -0
- package/dist/data/connectors/epa-eis-records.schemas.js.map +1 -0
- package/dist/data/connectors/federal-register-documents.d.ts +2 -0
- package/dist/data/connectors/federal-register-documents.js +517 -0
- package/dist/data/connectors/federal-register-documents.js.map +1 -0
- package/dist/data/connectors/federal-register-documents.schemas.d.ts +357 -0
- package/dist/data/connectors/federal-register-documents.schemas.js +243 -0
- package/dist/data/connectors/federal-register-documents.schemas.js.map +1 -0
- package/dist/data/connectors/gdelt-doc-search.d.ts +2 -0
- package/dist/data/connectors/gdelt-doc-search.js +658 -0
- package/dist/data/connectors/gdelt-doc-search.js.map +1 -0
- package/dist/data/connectors/gdelt-doc-search.schemas.d.ts +446 -0
- package/dist/data/connectors/gdelt-doc-search.schemas.js +330 -0
- package/dist/data/connectors/gdelt-doc-search.schemas.js.map +1 -0
- package/dist/data/connectors/gdelt-file-feeds.d.ts +4 -0
- package/dist/data/connectors/gdelt-file-feeds.js +591 -0
- package/dist/data/connectors/gdelt-file-feeds.js.map +1 -0
- package/dist/data/connectors/gdelt-file-feeds.schemas.d.ts +40 -0
- package/dist/data/connectors/gdelt-file-feeds.schemas.js +256 -0
- package/dist/data/connectors/gdelt-file-feeds.schemas.js.map +1 -0
- package/dist/data/connectors/nasa-firms-fire.d.ts +2 -0
- package/dist/data/connectors/nasa-firms-fire.js +578 -0
- package/dist/data/connectors/nasa-firms-fire.js.map +1 -0
- package/dist/data/connectors/nasa-firms-fire.schemas.d.ts +369 -0
- package/dist/data/connectors/nasa-firms-fire.schemas.js +238 -0
- package/dist/data/connectors/nasa-firms-fire.schemas.js.map +1 -0
- package/dist/data/connectors/open-meteo-air-quality.d.ts +2 -0
- package/dist/data/connectors/open-meteo-air-quality.js +401 -0
- package/dist/data/connectors/open-meteo-air-quality.js.map +1 -0
- package/dist/data/connectors/open-meteo-air-quality.schemas.d.ts +335 -0
- package/dist/data/connectors/open-meteo-air-quality.schemas.js +225 -0
- package/dist/data/connectors/open-meteo-air-quality.schemas.js.map +1 -0
- package/dist/data/connectors/open-meteo-flood.d.ts +2 -0
- package/dist/data/connectors/open-meteo-flood.js +446 -0
- package/dist/data/connectors/open-meteo-flood.js.map +1 -0
- package/dist/data/connectors/open-meteo-flood.schemas.d.ts +388 -0
- package/dist/data/connectors/open-meteo-flood.schemas.js +227 -0
- package/dist/data/connectors/open-meteo-flood.schemas.js.map +1 -0
- package/dist/data/connectors/open-meteo-historical-weather.d.ts +2 -0
- package/dist/data/connectors/open-meteo-historical-weather.js +468 -0
- package/dist/data/connectors/open-meteo-historical-weather.js.map +1 -0
- package/dist/data/connectors/open-meteo-historical-weather.schemas.d.ts +420 -0
- package/dist/data/connectors/open-meteo-historical-weather.schemas.js +282 -0
- package/dist/data/connectors/open-meteo-historical-weather.schemas.js.map +1 -0
- package/dist/data/connectors/openaq-air-quality.d.ts +2 -0
- package/dist/data/connectors/openaq-air-quality.js +734 -0
- package/dist/data/connectors/openaq-air-quality.js.map +1 -0
- package/dist/data/connectors/openaq-air-quality.schemas.d.ts +1067 -0
- package/dist/data/connectors/openaq-air-quality.schemas.js +512 -0
- package/dist/data/connectors/openaq-air-quality.schemas.js.map +1 -0
- package/dist/data/connectors/regulations-gov-attachments.d.ts +2 -0
- package/dist/data/connectors/regulations-gov-attachments.js +486 -0
- package/dist/data/connectors/regulations-gov-attachments.js.map +1 -0
- package/dist/data/connectors/regulations-gov-attachments.schemas.d.ts +270 -0
- package/dist/data/connectors/regulations-gov-attachments.schemas.js +181 -0
- package/dist/data/connectors/regulations-gov-attachments.schemas.js.map +1 -0
- package/dist/data/connectors/regulations-gov-comments.d.ts +2 -0
- package/dist/data/connectors/regulations-gov-comments.js +718 -0
- package/dist/data/connectors/regulations-gov-comments.js.map +1 -0
- package/dist/data/connectors/regulations-gov-comments.schemas.d.ts +717 -0
- package/dist/data/connectors/regulations-gov-comments.schemas.js +389 -0
- package/dist/data/connectors/regulations-gov-comments.schemas.js.map +1 -0
- package/dist/data/connectors/usbr-project-records.d.ts +2 -0
- package/dist/data/connectors/usbr-project-records.js +467 -0
- package/dist/data/connectors/usbr-project-records.js.map +1 -0
- package/dist/data/connectors/usbr-project-records.schemas.d.ts +194 -0
- package/dist/data/connectors/usbr-project-records.schemas.js +137 -0
- package/dist/data/connectors/usbr-project-records.schemas.js.map +1 -0
- package/dist/data/connectors/usbr-rise.d.ts +2 -0
- package/dist/data/connectors/usbr-rise.js +625 -0
- package/dist/data/connectors/usbr-rise.js.map +1 -0
- package/dist/data/connectors/usbr-rise.schemas.d.ts +623 -0
- package/dist/data/connectors/usbr-rise.schemas.js +407 -0
- package/dist/data/connectors/usbr-rise.schemas.js.map +1 -0
- package/dist/data/connectors/usgs-water-instantaneous-values.d.ts +2 -0
- package/dist/data/connectors/usgs-water-instantaneous-values.js +521 -0
- package/dist/data/connectors/usgs-water-instantaneous-values.js.map +1 -0
- package/dist/data/connectors/usgs-water-instantaneous-values.schemas.d.ts +496 -0
- package/dist/data/connectors/usgs-water-instantaneous-values.schemas.js +309 -0
- package/dist/data/connectors/usgs-water-instantaneous-values.schemas.js.map +1 -0
- package/dist/data/connectors/youtube-public-content.d.ts +2 -0
- package/dist/data/connectors/youtube-public-content.js +974 -0
- package/dist/data/connectors/youtube-public-content.js.map +1 -0
- package/dist/data/connectors/youtube-public-content.schemas.d.ts +773 -0
- package/dist/data/connectors/youtube-public-content.schemas.js +567 -0
- package/dist/data/connectors/youtube-public-content.schemas.js.map +1 -0
- package/dist/data/contracts.d.ts +374 -0
- package/dist/data/contracts.js +10 -0
- package/dist/data/contracts.js.map +1 -0
- package/dist/data/runtime/artifacts.d.ts +6 -0
- package/dist/data/runtime/artifacts.js +103 -0
- package/dist/data/runtime/artifacts.js.map +1 -0
- package/dist/data/runtime/bounded-http.d.ts +10 -0
- package/dist/data/runtime/bounded-http.js +403 -0
- package/dist/data/runtime/bounded-http.js.map +1 -0
- package/dist/data/runtime/canonical-json.d.ts +3 -0
- package/dist/data/runtime/canonical-json.js +59 -0
- package/dist/data/runtime/canonical-json.js.map +1 -0
- package/dist/data/runtime/credentials.d.ts +14 -0
- package/dist/data/runtime/credentials.js +67 -0
- package/dist/data/runtime/credentials.js.map +1 -0
- package/dist/data/runtime/csv.d.ts +4 -0
- package/dist/data/runtime/csv.js +51 -0
- package/dist/data/runtime/csv.js.map +1 -0
- package/dist/data/runtime/errors.d.ts +22 -0
- package/dist/data/runtime/errors.js +101 -0
- package/dist/data/runtime/errors.js.map +1 -0
- package/dist/data/runtime/execute.d.ts +11 -0
- package/dist/data/runtime/execute.js +358 -0
- package/dist/data/runtime/execute.js.map +1 -0
- package/dist/data/runtime/receipts.d.ts +13 -0
- package/dist/data/runtime/receipts.js +38 -0
- package/dist/data/runtime/receipts.js.map +1 -0
- package/dist/data/schemas/catalog.v1.json +73 -0
- package/dist/data/schemas/core-receipt.v1.json +117 -0
- package/dist/data/schemas/describe.v1.json +24 -0
- package/dist/data/schemas/discovery.v1.json +130 -0
- package/dist/data/schemas/doctor.v1.json +40 -0
- package/dist/data/schemas/error.v1.json +48 -0
- package/dist/data/schemas/manifest.v1.json +174 -0
- package/dist/data/schemas/run-request.v1.json +37 -0
- package/dist/data/schemas/run-result.v1.json +77 -0
- package/dist/data/schemas.d.ts +27 -0
- package/dist/data/schemas.js +69 -0
- package/dist/data/schemas.js.map +1 -0
- package/dist/env.js.map +1 -1
- package/dist/errors.js.map +1 -1
- package/dist/http.js.map +1 -1
- package/dist/kb/config.js.map +1 -1
- package/dist/kb/pipeline-health.js.map +1 -1
- package/dist/research/orchestration.js +54 -7
- package/dist/research/orchestration.js.map +1 -1
- package/dist/research/workspace/acquisition.js.map +1 -1
- package/dist/research/workspace/audit-bundle.js +7 -2
- package/dist/research/workspace/audit-bundle.js.map +1 -1
- package/dist/research/workspace/broker.js.map +1 -1
- package/dist/research/workspace/constants.js.map +1 -1
- package/dist/research/workspace/credentials.d.ts +3 -0
- package/dist/research/workspace/credentials.js +20 -3
- package/dist/research/workspace/credentials.js.map +1 -1
- package/dist/research/workspace/data-evidence-adapter.d.ts +60 -0
- package/dist/research/workspace/data-evidence-adapter.js +314 -0
- package/dist/research/workspace/data-evidence-adapter.js.map +1 -0
- package/dist/research/workspace/discovery-status.js +10 -7
- package/dist/research/workspace/discovery-status.js.map +1 -1
- package/dist/research/workspace/discovery.js +12 -11
- package/dist/research/workspace/discovery.js.map +1 -1
- package/dist/research/workspace/evidence-ledger.d.ts +8 -1
- package/dist/research/workspace/evidence-ledger.js +46 -2
- package/dist/research/workspace/evidence-ledger.js.map +1 -1
- package/dist/research/workspace/evidence.d.ts +31 -0
- package/dist/research/workspace/evidence.js +77 -0
- package/dist/research/workspace/evidence.js.map +1 -1
- package/dist/research/workspace/executor.js.map +1 -1
- package/dist/research/workspace/external-skills.d.ts +49 -49
- package/dist/research/workspace/external-skills.js.map +1 -1
- package/dist/research/workspace/platform-capabilities.js.map +1 -1
- package/dist/research/workspace/preflight.d.ts +4 -4
- package/dist/research/workspace/preflight.js +33 -8
- package/dist/research/workspace/preflight.js.map +1 -1
- package/dist/research/workspace/projects.js.map +1 -1
- package/dist/research/workspace/publication.js.map +1 -1
- package/dist/research/workspace/research-policy-wizard.js.map +1 -1
- package/dist/research/workspace/research-policy.js.map +1 -1
- package/dist/research/workspace/runtime.d.ts +7 -0
- package/dist/research/workspace/runtime.js +77 -20
- package/dist/research/workspace/runtime.js.map +1 -1
- package/dist/research/workspace/sanitization.js.map +1 -1
- package/dist/research/workspace/schemas.js +1 -1
- package/dist/research/workspace/schemas.js.map +1 -1
- package/dist/research/workspace/scientific-design.js.map +1 -1
- package/dist/research/workspace/scientific-review.js.map +1 -1
- package/dist/research/workspace/setup-catalog.d.ts +9 -9
- package/dist/research/workspace/setup-catalog.js +2 -2
- package/dist/research/workspace/setup-catalog.js.map +1 -1
- package/dist/research/workspace/setup-declarative.js.map +1 -1
- package/dist/research/workspace/setup-instructions.d.ts +42 -0
- package/dist/research/workspace/setup-instructions.js +413 -0
- package/dist/research/workspace/setup-instructions.js.map +1 -0
- package/dist/research/workspace/setup-invocation.js.map +1 -1
- package/dist/research/workspace/setup-wizard.js +7 -0
- package/dist/research/workspace/setup-wizard.js.map +1 -1
- package/dist/research/workspace/setup.d.ts +18 -15
- package/dist/research/workspace/setup.js +68 -3
- package/dist/research/workspace/setup.js.map +1 -1
- package/dist/research/workspace/workspace.js.map +1 -1
- package/package.json +3 -3
|
@@ -0,0 +1,468 @@
|
|
|
1
|
+
import { DATA_MANIFEST_SCHEMA_VERSION } from "../contracts.js";
|
|
2
|
+
import { DataRuntimeError } from "../runtime/errors.js";
|
|
3
|
+
import { OPEN_METEO_HISTORICAL_WEATHER_INPUT_SCHEMA, OPEN_METEO_HISTORICAL_WEATHER_OUTPUT_SCHEMA, } from "./open-meteo-historical-weather.schemas.js";
|
|
4
|
+
const ENDPOINT_PATH = "/v1/archive";
|
|
5
|
+
const MAX_WINDOW_DAYS = 366;
|
|
6
|
+
const MAX_VALIDATION_ISSUES = 50;
|
|
7
|
+
class IssueCollector {
|
|
8
|
+
count = 0;
|
|
9
|
+
issues = [];
|
|
10
|
+
add(path, message) {
|
|
11
|
+
this.count += 1;
|
|
12
|
+
if (this.issues.length < MAX_VALIDATION_ISSUES)
|
|
13
|
+
this.issues.push({ path, message });
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
export const openMeteoHistoricalWeatherConnector = {
|
|
17
|
+
schemaVersion: DATA_MANIFEST_SCHEMA_VERSION,
|
|
18
|
+
capabilityId: "open-meteo.historical-weather",
|
|
19
|
+
capabilityVersion: "1.0.0",
|
|
20
|
+
minimumCliVersion: "0.0.55",
|
|
21
|
+
provider: {
|
|
22
|
+
providerId: "open-meteo",
|
|
23
|
+
name: "Open-Meteo Historical Weather API",
|
|
24
|
+
},
|
|
25
|
+
sourceCategory: "weather-reanalysis",
|
|
26
|
+
endpoints: [
|
|
27
|
+
{
|
|
28
|
+
endpointId: "open-meteo-historical-weather-public",
|
|
29
|
+
baseUrl: "https://archive-api.open-meteo.com",
|
|
30
|
+
pathPrefixes: ["/v1/"],
|
|
31
|
+
allowedMethods: ["GET"],
|
|
32
|
+
allowedContentTypes: ["application/json"],
|
|
33
|
+
},
|
|
34
|
+
],
|
|
35
|
+
license: {
|
|
36
|
+
name: "CC BY 4.0",
|
|
37
|
+
url: "https://open-meteo.com/en/license",
|
|
38
|
+
restrictions: [
|
|
39
|
+
"Attribution to Open-Meteo and the underlying weather-data providers is required.",
|
|
40
|
+
"The public free API endpoint is for non-commercial use; commercial use requires a separately governed customer endpoint and API key.",
|
|
41
|
+
"Reanalysis and model-derived values are provided without accuracy, completeness, availability, or fitness guarantees.",
|
|
42
|
+
],
|
|
43
|
+
},
|
|
44
|
+
credentials: [],
|
|
45
|
+
limits: {
|
|
46
|
+
timeoutMs: 45_000,
|
|
47
|
+
maxRequestBytes: 8_192,
|
|
48
|
+
maxResponseBytes: 50_000_000,
|
|
49
|
+
maxPages: 1,
|
|
50
|
+
maxRecords: 100_000,
|
|
51
|
+
maxRetries: 3,
|
|
52
|
+
maxRetryDelayMs: 120_000,
|
|
53
|
+
maxRedirects: 1,
|
|
54
|
+
},
|
|
55
|
+
diagnostics: { static: true, live: false },
|
|
56
|
+
freshness: {
|
|
57
|
+
kind: "model-dependent-reanalysis",
|
|
58
|
+
description: "ERA5 and ERA5-Land generally update daily after a provider delay, while IFS and other models have different availability and update schedules.",
|
|
59
|
+
},
|
|
60
|
+
limitations: [
|
|
61
|
+
"Historical values are reanalysis or model-grid estimates, not raw observations from a named weather station.",
|
|
62
|
+
"The selected grid coordinate and elevation can differ from the requested coordinate, especially around coasts and complex terrain.",
|
|
63
|
+
"Best Match combines model families and upgrades; this can introduce discontinuities into multi-decade trend analysis.",
|
|
64
|
+
"Model coverage, native time resolution, variable availability, spatial resolution, and update delay differ.",
|
|
65
|
+
"The public endpoint is restricted to non-commercial use and is subject to Open-Meteo free-tier request limits.",
|
|
66
|
+
],
|
|
67
|
+
discovery: {
|
|
68
|
+
source: {
|
|
69
|
+
maintainedBy: "Open-Meteo using ECMWF and Copernicus reanalysis and model datasets",
|
|
70
|
+
summary: "Global historical weather reanalysis and model-grid time series assembled by Open-Meteo.",
|
|
71
|
+
description: "The Historical Weather API combines observations with numerical weather models to produce gap-filled reanalysis fields. It returns model-grid estimates for requested coordinates rather than measurements from identifiable stations.",
|
|
72
|
+
coverage: {
|
|
73
|
+
geographic: "Global for ERA5, ERA5-Land, ERA5-Ensemble, and IFS families; CERRA is limited to Europe.",
|
|
74
|
+
temporal: "Model-dependent historical coverage: ERA5 families extend back to 1940 or 1950, while IFS and CERRA cover shorter periods.",
|
|
75
|
+
granularity: "Hourly or model-native time steps and daily aggregates at the selected weather-model grid cell.",
|
|
76
|
+
},
|
|
77
|
+
},
|
|
78
|
+
summary: "Retrieve bounded historical weather reanalysis series for up to ten known coordinates.",
|
|
79
|
+
description: "This capability sends one deterministic GMT request to the public Open-Meteo archive endpoint, selects one documented model, and emits aligned numeric hourly and daily series with explicit partial validation.",
|
|
80
|
+
provides: [
|
|
81
|
+
"Curated hourly temperature, humidity, precipitation, pressure, cloud, wind, radiation, and shallow-soil variables.",
|
|
82
|
+
"Curated numeric daily weather summaries including extrema, precipitation, sunshine, wind, weather code, and reference evapotranspiration.",
|
|
83
|
+
"Explicit model selection, returned model-grid coordinates, elevation, units, and bounded multi-coordinate date windows.",
|
|
84
|
+
"Partial results when an individual coordinate, section, time axis, requested variable, or unit cannot be normalized safely.",
|
|
85
|
+
],
|
|
86
|
+
doesNotProvide: [
|
|
87
|
+
"Raw weather-station observations, station identifiers, observation quality flags, or exact on-site measurements.",
|
|
88
|
+
"Weather forecasts, live current conditions, forecast skill evaluation, or archived individual forecast runs.",
|
|
89
|
+
"Climate projections, future emissions scenarios, causal climate attribution, or trend significance tests.",
|
|
90
|
+
"Geocoding, elevation overrides, commercial endpoint credentials, sunrise or sunset string fields, or arbitrary provider variables.",
|
|
91
|
+
],
|
|
92
|
+
selectionHints: [
|
|
93
|
+
"Choose this capability for gap-filled historical weather context at already-known coordinates.",
|
|
94
|
+
"Select ERA5 or ERA5-Land for multi-decade trend inputs where model consistency matters; Best Match favors locally available detail but changes model families over time.",
|
|
95
|
+
"Choose a station-observation source when instrument provenance, local measurement quality, or regulatory-grade observations are required.",
|
|
96
|
+
"Check the selected model's temporal, regional, variable, and spatial coverage before comparing locations or periods.",
|
|
97
|
+
],
|
|
98
|
+
typicalUseCases: [
|
|
99
|
+
"Retrieve aligned historical temperature and precipitation context for an environmental assessment.",
|
|
100
|
+
"Build a bounded ERA5 or ERA5-Land input series for a separately governed long-term analysis.",
|
|
101
|
+
],
|
|
102
|
+
sourceDocumentation: [
|
|
103
|
+
{
|
|
104
|
+
title: "Open-Meteo Historical Weather API documentation",
|
|
105
|
+
url: "https://open-meteo.com/en/docs/historical-weather-api",
|
|
106
|
+
},
|
|
107
|
+
{
|
|
108
|
+
title: "Open-Meteo Historical Weather OpenAPI specification",
|
|
109
|
+
url: "https://github.com/open-meteo/open-meteo/blob/main/openapi/historical-weather.yml",
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
title: "Open-Meteo data license",
|
|
113
|
+
url: "https://open-meteo.com/en/license",
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
title: "Open-Meteo API terms",
|
|
117
|
+
url: "https://open-meteo.com/en/terms",
|
|
118
|
+
},
|
|
119
|
+
],
|
|
120
|
+
},
|
|
121
|
+
operations: [
|
|
122
|
+
{
|
|
123
|
+
operationId: "fetch",
|
|
124
|
+
operationVersion: "1.0.0",
|
|
125
|
+
summary: "Fetch one bounded GMT window of Open-Meteo historical weather reanalysis.",
|
|
126
|
+
description: "Builds one stable public-endpoint query for up to ten coordinates, one model, and curated hourly or daily variables, then validates aligned numeric arrays under shared byte, retry, timeout, and time-row limits.",
|
|
127
|
+
inputSchema: OPEN_METEO_HISTORICAL_WEATHER_INPUT_SCHEMA,
|
|
128
|
+
outputSchema: OPEN_METEO_HISTORICAL_WEATHER_OUTPUT_SCHEMA,
|
|
129
|
+
execute: executeOpenMeteoHistoricalWeather,
|
|
130
|
+
},
|
|
131
|
+
],
|
|
132
|
+
};
|
|
133
|
+
async function executeOpenMeteoHistoricalWeather(context) {
|
|
134
|
+
const input = normalizeInput(context.input);
|
|
135
|
+
const query = {
|
|
136
|
+
latitude: input.locations.map((location) => location.latitude).join(","),
|
|
137
|
+
longitude: input.locations.map((location) => location.longitude).join(","),
|
|
138
|
+
start_date: input.startDate,
|
|
139
|
+
end_date: input.endDate,
|
|
140
|
+
models: input.model,
|
|
141
|
+
timezone: input.timezone,
|
|
142
|
+
timeformat: "iso8601",
|
|
143
|
+
temperature_unit: input.temperatureUnit,
|
|
144
|
+
wind_speed_unit: input.windSpeedUnit,
|
|
145
|
+
precipitation_unit: input.precipitationUnit,
|
|
146
|
+
cell_selection: input.cellSelection,
|
|
147
|
+
};
|
|
148
|
+
if (input.hourlyVariables.length > 0)
|
|
149
|
+
query.hourly = input.hourlyVariables.join(",");
|
|
150
|
+
if (input.dailyVariables.length > 0)
|
|
151
|
+
query.daily = input.dailyVariables.join(",");
|
|
152
|
+
const response = await context.http.request({
|
|
153
|
+
endpointId: "open-meteo-historical-weather-public",
|
|
154
|
+
method: "GET",
|
|
155
|
+
path: ENDPOINT_PATH,
|
|
156
|
+
query,
|
|
157
|
+
});
|
|
158
|
+
const normalized = normalizePayload(response.json(), input, context.limits.maxRecords);
|
|
159
|
+
const partial = normalized.issueCount > 0;
|
|
160
|
+
const invalidPaths = normalized.issues.map((issue) => issue.path);
|
|
161
|
+
const errors = partial
|
|
162
|
+
? [
|
|
163
|
+
{
|
|
164
|
+
code: "partial-result",
|
|
165
|
+
message: "One or more Open-Meteo historical locations, sections, timestamps, variables, or units could not be normalized.",
|
|
166
|
+
retryable: false,
|
|
167
|
+
userActionRequired: false,
|
|
168
|
+
details: { issueCount: normalized.issueCount, invalidPaths },
|
|
169
|
+
},
|
|
170
|
+
]
|
|
171
|
+
: [];
|
|
172
|
+
return {
|
|
173
|
+
status: partial ? "partial" : "success",
|
|
174
|
+
data: {
|
|
175
|
+
source: {
|
|
176
|
+
providerId: "open-meteo",
|
|
177
|
+
service: "Historical Weather API",
|
|
178
|
+
endpoint: ENDPOINT_PATH,
|
|
179
|
+
model: input.model,
|
|
180
|
+
reanalysis: true,
|
|
181
|
+
timezone: "GMT",
|
|
182
|
+
},
|
|
183
|
+
request: input,
|
|
184
|
+
validation: { issueCount: normalized.issueCount, issues: normalized.issues },
|
|
185
|
+
locations: normalized.locations.map(toOutputLocation),
|
|
186
|
+
stopReason: partial ? "partial" : normalized.truncated ? "max-records" : "completed",
|
|
187
|
+
},
|
|
188
|
+
summary: {
|
|
189
|
+
recordCount: normalized.recordCount,
|
|
190
|
+
pageCount: 1,
|
|
191
|
+
chunkCount: 1,
|
|
192
|
+
truncated: normalized.truncated,
|
|
193
|
+
completeness: partial ? "partial" : "complete",
|
|
194
|
+
...(partial ? { missing: [{ kind: "field", identifiers: invalidPaths }] } : {}),
|
|
195
|
+
},
|
|
196
|
+
warnings: [
|
|
197
|
+
"Open-Meteo Historical Weather values are reanalysis or model-grid estimates, not station observations.",
|
|
198
|
+
"Inspect the returned grid coordinate and elevation before treating values as representative of the requested site.",
|
|
199
|
+
"Attribute Open-Meteo and the underlying data providers; the configured public endpoint is non-commercial.",
|
|
200
|
+
...(input.model === "best_match"
|
|
201
|
+
? [
|
|
202
|
+
"Best Match changes source models over time; select ERA5 or ERA5-Land when long-term model consistency matters.",
|
|
203
|
+
]
|
|
204
|
+
: []),
|
|
205
|
+
...(normalized.truncated ? ["The normalized time rows reached the record limit."] : []),
|
|
206
|
+
],
|
|
207
|
+
errors,
|
|
208
|
+
observations: [{ ...response.observation, sourceId: "historical-weather-reanalysis" }],
|
|
209
|
+
};
|
|
210
|
+
}
|
|
211
|
+
function normalizeInput(input) {
|
|
212
|
+
const start = parseDate(input.startDate, "startDate");
|
|
213
|
+
const end = parseDate(input.endDate, "endDate");
|
|
214
|
+
if (start.getTime() > end.getTime()) {
|
|
215
|
+
throw new DataRuntimeError("invalid-request", "startDate must not follow endDate.");
|
|
216
|
+
}
|
|
217
|
+
const windowDays = Math.floor((end.getTime() - start.getTime()) / 86_400_000) + 1;
|
|
218
|
+
if (windowDays > MAX_WINDOW_DAYS) {
|
|
219
|
+
throw new DataRuntimeError("invalid-request", `The inclusive Open-Meteo historical-weather window must not exceed ${MAX_WINDOW_DAYS} days.`, { details: { windowDays, maximumWindowDays: MAX_WINDOW_DAYS } });
|
|
220
|
+
}
|
|
221
|
+
const hourlyVariables = [...(input.hourlyVariables ?? [])].sort(codePointOrder);
|
|
222
|
+
const dailyVariables = [...(input.dailyVariables ?? [])].sort(codePointOrder);
|
|
223
|
+
if (hourlyVariables.length === 0 && dailyVariables.length === 0) {
|
|
224
|
+
throw new DataRuntimeError("invalid-request", "Specify at least one hourlyVariables or dailyVariables item.");
|
|
225
|
+
}
|
|
226
|
+
return {
|
|
227
|
+
locations: input.locations.map((location) => ({ ...location })),
|
|
228
|
+
startDate: input.startDate,
|
|
229
|
+
endDate: input.endDate,
|
|
230
|
+
hourlyVariables,
|
|
231
|
+
dailyVariables,
|
|
232
|
+
model: input.model ?? "best_match",
|
|
233
|
+
cellSelection: input.cellSelection ?? "land",
|
|
234
|
+
timezone: "GMT",
|
|
235
|
+
temperatureUnit: "celsius",
|
|
236
|
+
windSpeedUnit: "kmh",
|
|
237
|
+
precipitationUnit: "mm",
|
|
238
|
+
};
|
|
239
|
+
}
|
|
240
|
+
function parseDate(value, field) {
|
|
241
|
+
const parsed = new Date(`${value}T00:00:00Z`);
|
|
242
|
+
if (!Number.isFinite(parsed.getTime()) || parsed.toISOString().slice(0, 10) !== value) {
|
|
243
|
+
throw new DataRuntimeError("invalid-request", `${field} must be a real YYYY-MM-DD date.`);
|
|
244
|
+
}
|
|
245
|
+
return parsed;
|
|
246
|
+
}
|
|
247
|
+
function normalizePayload(payload, input, maxRecords) {
|
|
248
|
+
const providerError = recordValue(payload);
|
|
249
|
+
if (providerError?.error === true) {
|
|
250
|
+
throw new DataRuntimeError("provider-response-invalid", "Open-Meteo Historical Weather returned an explicit provider error response.", {
|
|
251
|
+
details: {
|
|
252
|
+
reason: typeof providerError.reason === "string" ? providerError.reason : "Unspecified error",
|
|
253
|
+
},
|
|
254
|
+
});
|
|
255
|
+
}
|
|
256
|
+
const responses = input.locations.length === 1 && !Array.isArray(payload) ? [payload] : payload;
|
|
257
|
+
if (!Array.isArray(responses)) {
|
|
258
|
+
throw new DataRuntimeError("provider-response-invalid", "Open-Meteo Historical Weather must return one object for one coordinate or an array for multiple coordinates.");
|
|
259
|
+
}
|
|
260
|
+
const collector = new IssueCollector();
|
|
261
|
+
if (responses.length !== input.locations.length) {
|
|
262
|
+
collector.add("$", `Expected ${input.locations.length} coordinate responses but received ${responses.length}.`);
|
|
263
|
+
}
|
|
264
|
+
const candidates = [];
|
|
265
|
+
for (let index = 0; index < input.locations.length; index += 1) {
|
|
266
|
+
const location = normalizeLocation(responses[index], index, input.locations[index], input, collector);
|
|
267
|
+
if (location)
|
|
268
|
+
candidates.push(location);
|
|
269
|
+
}
|
|
270
|
+
const totalAvailable = candidates.reduce((total, location) => total + (location.hourly?.times.length ?? 0) + (location.daily?.times.length ?? 0), 0);
|
|
271
|
+
const truncated = totalAvailable > maxRecords;
|
|
272
|
+
let remaining = maxRecords;
|
|
273
|
+
const locations = [];
|
|
274
|
+
for (const location of candidates) {
|
|
275
|
+
if (remaining <= 0)
|
|
276
|
+
break;
|
|
277
|
+
const hourlyLength = Math.min(location.hourly?.times.length ?? 0, remaining);
|
|
278
|
+
const hourly = sliceSection(location.hourly, hourlyLength);
|
|
279
|
+
remaining -= hourlyLength;
|
|
280
|
+
const dailyLength = Math.min(location.daily?.times.length ?? 0, remaining);
|
|
281
|
+
const daily = sliceSection(location.daily, dailyLength);
|
|
282
|
+
remaining -= dailyLength;
|
|
283
|
+
locations.push({ ...location, hourly, daily });
|
|
284
|
+
}
|
|
285
|
+
const recordCount = locations.reduce((total, location) => total + (location.hourly?.times.length ?? 0) + (location.daily?.times.length ?? 0), 0);
|
|
286
|
+
return {
|
|
287
|
+
locations,
|
|
288
|
+
issues: collector.issues,
|
|
289
|
+
issueCount: collector.count,
|
|
290
|
+
recordCount,
|
|
291
|
+
truncated,
|
|
292
|
+
};
|
|
293
|
+
}
|
|
294
|
+
function normalizeLocation(value, index, requestedLocation, input, collector) {
|
|
295
|
+
const path = `$[${index}]`;
|
|
296
|
+
const item = recordValue(value);
|
|
297
|
+
if (!item) {
|
|
298
|
+
collector.add(path, "Coordinate response must be an object.");
|
|
299
|
+
return null;
|
|
300
|
+
}
|
|
301
|
+
if (item.error === true) {
|
|
302
|
+
collector.add(path, "Coordinate response contains an explicit provider error.");
|
|
303
|
+
return null;
|
|
304
|
+
}
|
|
305
|
+
const latitude = finiteNumber(item.latitude);
|
|
306
|
+
const longitude = finiteNumber(item.longitude);
|
|
307
|
+
if (latitude === null || longitude === null) {
|
|
308
|
+
collector.add(path, "Coordinate response is missing numeric model-grid latitude or longitude.");
|
|
309
|
+
return null;
|
|
310
|
+
}
|
|
311
|
+
const hourly = input.hourlyVariables.length > 0
|
|
312
|
+
? normalizeSection(item.hourly, item.hourly_units, `${path}.hourly`, input.hourlyVariables, input, "hourly", collector)
|
|
313
|
+
: null;
|
|
314
|
+
const daily = input.dailyVariables.length > 0
|
|
315
|
+
? normalizeSection(item.daily, item.daily_units, `${path}.daily`, input.dailyVariables, input, "daily", collector)
|
|
316
|
+
: null;
|
|
317
|
+
const hasTimezone = typeof item.timezone === "string" && item.timezone.length > 0;
|
|
318
|
+
const timezone = hasTimezone ? item.timezone : "GMT";
|
|
319
|
+
if (!hasTimezone) {
|
|
320
|
+
collector.add(`${path}.timezone`, "Provider timezone metadata is missing.");
|
|
321
|
+
}
|
|
322
|
+
else if (!["GMT", "UTC", "Etc/UTC"].includes(timezone)) {
|
|
323
|
+
collector.add(`${path}.timezone`, "Provider timezone must remain GMT/UTC for this operation.");
|
|
324
|
+
}
|
|
325
|
+
const hasUtcOffset = typeof item.utc_offset_seconds === "number" && Number.isInteger(item.utc_offset_seconds);
|
|
326
|
+
const utcOffsetSeconds = hasUtcOffset ? item.utc_offset_seconds : 0;
|
|
327
|
+
if (!hasUtcOffset) {
|
|
328
|
+
collector.add(`${path}.utc_offset_seconds`, "Provider UTC offset metadata must be an integer.");
|
|
329
|
+
}
|
|
330
|
+
else if (utcOffsetSeconds !== 0) {
|
|
331
|
+
collector.add(`${path}.utc_offset_seconds`, "Provider UTC offset must be zero in GMT mode.");
|
|
332
|
+
}
|
|
333
|
+
return {
|
|
334
|
+
requestedLocationIndex: index,
|
|
335
|
+
requestedLocation,
|
|
336
|
+
gridLocation: { latitude, longitude },
|
|
337
|
+
elevation: finiteNumber(item.elevation),
|
|
338
|
+
timezone,
|
|
339
|
+
timezoneAbbreviation: typeof item.timezone_abbreviation === "string" && item.timezone_abbreviation
|
|
340
|
+
? item.timezone_abbreviation
|
|
341
|
+
: "GMT",
|
|
342
|
+
utcOffsetSeconds,
|
|
343
|
+
hourly,
|
|
344
|
+
daily,
|
|
345
|
+
};
|
|
346
|
+
}
|
|
347
|
+
function normalizeSection(rawSection, rawUnits, path, variables, input, kind, collector) {
|
|
348
|
+
const section = recordValue(rawSection);
|
|
349
|
+
const units = recordValue(rawUnits);
|
|
350
|
+
if (!section || !units || !Array.isArray(section.time)) {
|
|
351
|
+
collector.add(path, `Response must contain ${kind}, ${kind}.time, and ${kind}_units.`);
|
|
352
|
+
return null;
|
|
353
|
+
}
|
|
354
|
+
const times = normalizeTimes(section.time, path, input, kind, collector);
|
|
355
|
+
if (times === null)
|
|
356
|
+
return null;
|
|
357
|
+
const normalizedVariables = [];
|
|
358
|
+
for (const variable of variables) {
|
|
359
|
+
const normalized = normalizeSeries(section[variable], units[variable], `${path}.${variable}`, `${path.slice(0, path.lastIndexOf("."))}.${kind}_units.${variable}`, times.length, collector);
|
|
360
|
+
if (normalized)
|
|
361
|
+
normalizedVariables.push({ variable, ...normalized });
|
|
362
|
+
}
|
|
363
|
+
return { times, variables: normalizedVariables };
|
|
364
|
+
}
|
|
365
|
+
function normalizeTimes(values, path, input, kind, collector) {
|
|
366
|
+
const expectedDailyCount = Math.floor((new Date(`${input.endDate}T00:00:00Z`).getTime() -
|
|
367
|
+
new Date(`${input.startDate}T00:00:00Z`).getTime()) /
|
|
368
|
+
86_400_000) + 1;
|
|
369
|
+
if (kind === "daily" && values.length !== expectedDailyCount) {
|
|
370
|
+
collector.add(`${path}.time`, `Expected ${expectedDailyCount} daily dates but received ${values.length}.`);
|
|
371
|
+
}
|
|
372
|
+
if (kind === "hourly" && values.length !== expectedDailyCount * 24) {
|
|
373
|
+
collector.add(`${path}.time`, `Expected ${expectedDailyCount * 24} GMT hours but received ${values.length}.`);
|
|
374
|
+
}
|
|
375
|
+
const times = [];
|
|
376
|
+
let previous = "";
|
|
377
|
+
for (let index = 0; index < values.length; index += 1) {
|
|
378
|
+
const value = values[index];
|
|
379
|
+
const validShape = typeof value === "string" &&
|
|
380
|
+
(kind === "daily"
|
|
381
|
+
? /^\d{4}-\d{2}-\d{2}$/.test(value)
|
|
382
|
+
: /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}$/.test(value));
|
|
383
|
+
const datePart = typeof value === "string" ? value.slice(0, 10) : "";
|
|
384
|
+
const parsed = typeof value === "string"
|
|
385
|
+
? new Date(kind === "daily" ? `${value}T00:00:00Z` : `${value}:00Z`)
|
|
386
|
+
: new Date(Number.NaN);
|
|
387
|
+
const normalizedValue = Number.isFinite(parsed.getTime())
|
|
388
|
+
? parsed.toISOString().slice(0, kind === "daily" ? 10 : 16)
|
|
389
|
+
: "";
|
|
390
|
+
if (!validShape ||
|
|
391
|
+
!Number.isFinite(parsed.getTime()) ||
|
|
392
|
+
normalizedValue !== value ||
|
|
393
|
+
datePart < input.startDate ||
|
|
394
|
+
datePart > input.endDate ||
|
|
395
|
+
(previous !== "" && value <= previous)) {
|
|
396
|
+
collector.add(`${path}.time[${index}]`, `${kind === "daily" ? "Daily date" : "Hourly timestamp"} must be real, in-window, and strictly ascending in GMT.`);
|
|
397
|
+
return null;
|
|
398
|
+
}
|
|
399
|
+
times.push(value);
|
|
400
|
+
previous = value;
|
|
401
|
+
}
|
|
402
|
+
return times;
|
|
403
|
+
}
|
|
404
|
+
function normalizeSeries(rawValues, rawUnit, valuePath, unitPath, expectedLength, collector) {
|
|
405
|
+
if (!Array.isArray(rawValues)) {
|
|
406
|
+
collector.add(valuePath, "Requested historical-weather series is missing or is not an array.");
|
|
407
|
+
return null;
|
|
408
|
+
}
|
|
409
|
+
if (rawValues.length !== expectedLength) {
|
|
410
|
+
collector.add(valuePath, "Historical-weather series length does not match its time axis.");
|
|
411
|
+
return null;
|
|
412
|
+
}
|
|
413
|
+
if (typeof rawUnit !== "string" || rawUnit.length === 0) {
|
|
414
|
+
collector.add(unitPath, "Historical-weather series unit is missing.");
|
|
415
|
+
return null;
|
|
416
|
+
}
|
|
417
|
+
const values = rawValues.map((value, index) => {
|
|
418
|
+
if (value === null)
|
|
419
|
+
return null;
|
|
420
|
+
const number = finiteNumber(value);
|
|
421
|
+
if (number === null) {
|
|
422
|
+
collector.add(`${valuePath}[${index}]`, "Historical-weather value must be numeric or null.");
|
|
423
|
+
return null;
|
|
424
|
+
}
|
|
425
|
+
return number;
|
|
426
|
+
});
|
|
427
|
+
return { unit: rawUnit, values };
|
|
428
|
+
}
|
|
429
|
+
function sliceSection(section, length) {
|
|
430
|
+
if (!section || length <= 0)
|
|
431
|
+
return null;
|
|
432
|
+
return {
|
|
433
|
+
times: section.times.slice(0, length),
|
|
434
|
+
variables: section.variables.map((variable) => ({
|
|
435
|
+
...variable,
|
|
436
|
+
values: variable.values.slice(0, length),
|
|
437
|
+
})),
|
|
438
|
+
};
|
|
439
|
+
}
|
|
440
|
+
function toOutputLocation(location) {
|
|
441
|
+
return {
|
|
442
|
+
requestedLocationIndex: location.requestedLocationIndex,
|
|
443
|
+
requestedLocation: location.requestedLocation,
|
|
444
|
+
gridLocation: location.gridLocation,
|
|
445
|
+
elevation: location.elevation,
|
|
446
|
+
timezone: location.timezone,
|
|
447
|
+
timezoneAbbreviation: location.timezoneAbbreviation,
|
|
448
|
+
utcOffsetSeconds: location.utcOffsetSeconds,
|
|
449
|
+
hourly: location.hourly
|
|
450
|
+
? { timesUtc: location.hourly.times, variables: location.hourly.variables }
|
|
451
|
+
: null,
|
|
452
|
+
daily: location.daily
|
|
453
|
+
? { dates: location.daily.times, variables: location.daily.variables }
|
|
454
|
+
: null,
|
|
455
|
+
};
|
|
456
|
+
}
|
|
457
|
+
function finiteNumber(value) {
|
|
458
|
+
return typeof value === "number" && Number.isFinite(value) ? value : null;
|
|
459
|
+
}
|
|
460
|
+
function recordValue(value) {
|
|
461
|
+
return value !== null && typeof value === "object" && !Array.isArray(value)
|
|
462
|
+
? value
|
|
463
|
+
: null;
|
|
464
|
+
}
|
|
465
|
+
function codePointOrder(left, right) {
|
|
466
|
+
return left < right ? -1 : left > right ? 1 : 0;
|
|
467
|
+
}
|
|
468
|
+
//# sourceMappingURL=open-meteo-historical-weather.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"open-meteo-historical-weather.js","sourceRoot":"","sources":["../../../src/data/connectors/open-meteo-historical-weather.ts"],"names":[],"mappings":"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"}
|