@tiangong-ai/cli 0.0.50 → 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.
Files changed (218) hide show
  1. package/AGENTS.md +22 -2
  2. package/README.md +200 -7
  3. package/dist/cli.js +10 -1
  4. package/dist/cli.js.map +1 -1
  5. package/dist/data/builtins.d.ts +1 -0
  6. package/dist/data/builtins.js +40 -0
  7. package/dist/data/builtins.js.map +1 -0
  8. package/dist/data/catalog.d.ts +25 -0
  9. package/dist/data/catalog.js +305 -0
  10. package/dist/data/catalog.js.map +1 -0
  11. package/dist/data/commands.d.ts +9 -0
  12. package/dist/data/commands.js +307 -0
  13. package/dist/data/commands.js.map +1 -0
  14. package/dist/data/connectors/airnow-hourly-observations.d.ts +2 -0
  15. package/dist/data/connectors/airnow-hourly-observations.js +522 -0
  16. package/dist/data/connectors/airnow-hourly-observations.js.map +1 -0
  17. package/dist/data/connectors/airnow-hourly-observations.schemas.d.ts +299 -0
  18. package/dist/data/connectors/airnow-hourly-observations.schemas.js +188 -0
  19. package/dist/data/connectors/airnow-hourly-observations.schemas.js.map +1 -0
  20. package/dist/data/connectors/bluesky-public-posts.d.ts +2 -0
  21. package/dist/data/connectors/bluesky-public-posts.js +705 -0
  22. package/dist/data/connectors/bluesky-public-posts.js.map +1 -0
  23. package/dist/data/connectors/bluesky-public-posts.schemas.d.ts +733 -0
  24. package/dist/data/connectors/bluesky-public-posts.schemas.js +422 -0
  25. package/dist/data/connectors/bluesky-public-posts.schemas.js.map +1 -0
  26. package/dist/data/connectors/epa-eis-records.d.ts +2 -0
  27. package/dist/data/connectors/epa-eis-records.js +566 -0
  28. package/dist/data/connectors/epa-eis-records.js.map +1 -0
  29. package/dist/data/connectors/epa-eis-records.schemas.d.ts +199 -0
  30. package/dist/data/connectors/epa-eis-records.schemas.js +146 -0
  31. package/dist/data/connectors/epa-eis-records.schemas.js.map +1 -0
  32. package/dist/data/connectors/federal-register-documents.d.ts +2 -0
  33. package/dist/data/connectors/federal-register-documents.js +517 -0
  34. package/dist/data/connectors/federal-register-documents.js.map +1 -0
  35. package/dist/data/connectors/federal-register-documents.schemas.d.ts +357 -0
  36. package/dist/data/connectors/federal-register-documents.schemas.js +243 -0
  37. package/dist/data/connectors/federal-register-documents.schemas.js.map +1 -0
  38. package/dist/data/connectors/gdelt-doc-search.d.ts +2 -0
  39. package/dist/data/connectors/gdelt-doc-search.js +658 -0
  40. package/dist/data/connectors/gdelt-doc-search.js.map +1 -0
  41. package/dist/data/connectors/gdelt-doc-search.schemas.d.ts +446 -0
  42. package/dist/data/connectors/gdelt-doc-search.schemas.js +330 -0
  43. package/dist/data/connectors/gdelt-doc-search.schemas.js.map +1 -0
  44. package/dist/data/connectors/gdelt-file-feeds.d.ts +4 -0
  45. package/dist/data/connectors/gdelt-file-feeds.js +591 -0
  46. package/dist/data/connectors/gdelt-file-feeds.js.map +1 -0
  47. package/dist/data/connectors/gdelt-file-feeds.schemas.d.ts +40 -0
  48. package/dist/data/connectors/gdelt-file-feeds.schemas.js +256 -0
  49. package/dist/data/connectors/gdelt-file-feeds.schemas.js.map +1 -0
  50. package/dist/data/connectors/nasa-firms-fire.d.ts +2 -0
  51. package/dist/data/connectors/nasa-firms-fire.js +578 -0
  52. package/dist/data/connectors/nasa-firms-fire.js.map +1 -0
  53. package/dist/data/connectors/nasa-firms-fire.schemas.d.ts +369 -0
  54. package/dist/data/connectors/nasa-firms-fire.schemas.js +238 -0
  55. package/dist/data/connectors/nasa-firms-fire.schemas.js.map +1 -0
  56. package/dist/data/connectors/open-meteo-air-quality.d.ts +2 -0
  57. package/dist/data/connectors/open-meteo-air-quality.js +401 -0
  58. package/dist/data/connectors/open-meteo-air-quality.js.map +1 -0
  59. package/dist/data/connectors/open-meteo-air-quality.schemas.d.ts +335 -0
  60. package/dist/data/connectors/open-meteo-air-quality.schemas.js +225 -0
  61. package/dist/data/connectors/open-meteo-air-quality.schemas.js.map +1 -0
  62. package/dist/data/connectors/open-meteo-flood.d.ts +2 -0
  63. package/dist/data/connectors/open-meteo-flood.js +446 -0
  64. package/dist/data/connectors/open-meteo-flood.js.map +1 -0
  65. package/dist/data/connectors/open-meteo-flood.schemas.d.ts +388 -0
  66. package/dist/data/connectors/open-meteo-flood.schemas.js +227 -0
  67. package/dist/data/connectors/open-meteo-flood.schemas.js.map +1 -0
  68. package/dist/data/connectors/open-meteo-historical-weather.d.ts +2 -0
  69. package/dist/data/connectors/open-meteo-historical-weather.js +468 -0
  70. package/dist/data/connectors/open-meteo-historical-weather.js.map +1 -0
  71. package/dist/data/connectors/open-meteo-historical-weather.schemas.d.ts +420 -0
  72. package/dist/data/connectors/open-meteo-historical-weather.schemas.js +282 -0
  73. package/dist/data/connectors/open-meteo-historical-weather.schemas.js.map +1 -0
  74. package/dist/data/connectors/openaq-air-quality.d.ts +2 -0
  75. package/dist/data/connectors/openaq-air-quality.js +734 -0
  76. package/dist/data/connectors/openaq-air-quality.js.map +1 -0
  77. package/dist/data/connectors/openaq-air-quality.schemas.d.ts +1067 -0
  78. package/dist/data/connectors/openaq-air-quality.schemas.js +512 -0
  79. package/dist/data/connectors/openaq-air-quality.schemas.js.map +1 -0
  80. package/dist/data/connectors/regulations-gov-attachments.d.ts +2 -0
  81. package/dist/data/connectors/regulations-gov-attachments.js +486 -0
  82. package/dist/data/connectors/regulations-gov-attachments.js.map +1 -0
  83. package/dist/data/connectors/regulations-gov-attachments.schemas.d.ts +270 -0
  84. package/dist/data/connectors/regulations-gov-attachments.schemas.js +181 -0
  85. package/dist/data/connectors/regulations-gov-attachments.schemas.js.map +1 -0
  86. package/dist/data/connectors/regulations-gov-comments.d.ts +2 -0
  87. package/dist/data/connectors/regulations-gov-comments.js +718 -0
  88. package/dist/data/connectors/regulations-gov-comments.js.map +1 -0
  89. package/dist/data/connectors/regulations-gov-comments.schemas.d.ts +717 -0
  90. package/dist/data/connectors/regulations-gov-comments.schemas.js +389 -0
  91. package/dist/data/connectors/regulations-gov-comments.schemas.js.map +1 -0
  92. package/dist/data/connectors/usbr-project-records.d.ts +2 -0
  93. package/dist/data/connectors/usbr-project-records.js +467 -0
  94. package/dist/data/connectors/usbr-project-records.js.map +1 -0
  95. package/dist/data/connectors/usbr-project-records.schemas.d.ts +194 -0
  96. package/dist/data/connectors/usbr-project-records.schemas.js +137 -0
  97. package/dist/data/connectors/usbr-project-records.schemas.js.map +1 -0
  98. package/dist/data/connectors/usbr-rise.d.ts +2 -0
  99. package/dist/data/connectors/usbr-rise.js +625 -0
  100. package/dist/data/connectors/usbr-rise.js.map +1 -0
  101. package/dist/data/connectors/usbr-rise.schemas.d.ts +623 -0
  102. package/dist/data/connectors/usbr-rise.schemas.js +407 -0
  103. package/dist/data/connectors/usbr-rise.schemas.js.map +1 -0
  104. package/dist/data/connectors/usgs-water-instantaneous-values.d.ts +2 -0
  105. package/dist/data/connectors/usgs-water-instantaneous-values.js +521 -0
  106. package/dist/data/connectors/usgs-water-instantaneous-values.js.map +1 -0
  107. package/dist/data/connectors/usgs-water-instantaneous-values.schemas.d.ts +496 -0
  108. package/dist/data/connectors/usgs-water-instantaneous-values.schemas.js +309 -0
  109. package/dist/data/connectors/usgs-water-instantaneous-values.schemas.js.map +1 -0
  110. package/dist/data/connectors/youtube-public-content.d.ts +2 -0
  111. package/dist/data/connectors/youtube-public-content.js +974 -0
  112. package/dist/data/connectors/youtube-public-content.js.map +1 -0
  113. package/dist/data/connectors/youtube-public-content.schemas.d.ts +773 -0
  114. package/dist/data/connectors/youtube-public-content.schemas.js +567 -0
  115. package/dist/data/connectors/youtube-public-content.schemas.js.map +1 -0
  116. package/dist/data/contracts.d.ts +374 -0
  117. package/dist/data/contracts.js +10 -0
  118. package/dist/data/contracts.js.map +1 -0
  119. package/dist/data/runtime/artifacts.d.ts +6 -0
  120. package/dist/data/runtime/artifacts.js +103 -0
  121. package/dist/data/runtime/artifacts.js.map +1 -0
  122. package/dist/data/runtime/bounded-http.d.ts +10 -0
  123. package/dist/data/runtime/bounded-http.js +403 -0
  124. package/dist/data/runtime/bounded-http.js.map +1 -0
  125. package/dist/data/runtime/canonical-json.d.ts +3 -0
  126. package/dist/data/runtime/canonical-json.js +59 -0
  127. package/dist/data/runtime/canonical-json.js.map +1 -0
  128. package/dist/data/runtime/credentials.d.ts +14 -0
  129. package/dist/data/runtime/credentials.js +67 -0
  130. package/dist/data/runtime/credentials.js.map +1 -0
  131. package/dist/data/runtime/csv.d.ts +4 -0
  132. package/dist/data/runtime/csv.js +51 -0
  133. package/dist/data/runtime/csv.js.map +1 -0
  134. package/dist/data/runtime/errors.d.ts +22 -0
  135. package/dist/data/runtime/errors.js +101 -0
  136. package/dist/data/runtime/errors.js.map +1 -0
  137. package/dist/data/runtime/execute.d.ts +11 -0
  138. package/dist/data/runtime/execute.js +358 -0
  139. package/dist/data/runtime/execute.js.map +1 -0
  140. package/dist/data/runtime/receipts.d.ts +13 -0
  141. package/dist/data/runtime/receipts.js +38 -0
  142. package/dist/data/runtime/receipts.js.map +1 -0
  143. package/dist/data/schemas/catalog.v1.json +73 -0
  144. package/dist/data/schemas/core-receipt.v1.json +117 -0
  145. package/dist/data/schemas/describe.v1.json +24 -0
  146. package/dist/data/schemas/discovery.v1.json +130 -0
  147. package/dist/data/schemas/doctor.v1.json +40 -0
  148. package/dist/data/schemas/error.v1.json +48 -0
  149. package/dist/data/schemas/manifest.v1.json +174 -0
  150. package/dist/data/schemas/run-request.v1.json +37 -0
  151. package/dist/data/schemas/run-result.v1.json +77 -0
  152. package/dist/data/schemas.d.ts +27 -0
  153. package/dist/data/schemas.js +69 -0
  154. package/dist/data/schemas.js.map +1 -0
  155. package/dist/env.js.map +1 -1
  156. package/dist/errors.js.map +1 -1
  157. package/dist/http.js.map +1 -1
  158. package/dist/kb/config.js.map +1 -1
  159. package/dist/kb/pipeline-health.js.map +1 -1
  160. package/dist/research/orchestration.js +71 -11
  161. package/dist/research/orchestration.js.map +1 -1
  162. package/dist/research/workspace/acquisition.js +70 -5
  163. package/dist/research/workspace/acquisition.js.map +1 -1
  164. package/dist/research/workspace/audit-bundle.js +7 -2
  165. package/dist/research/workspace/audit-bundle.js.map +1 -1
  166. package/dist/research/workspace/broker.js.map +1 -1
  167. package/dist/research/workspace/constants.js.map +1 -1
  168. package/dist/research/workspace/credentials.d.ts +3 -0
  169. package/dist/research/workspace/credentials.js +20 -3
  170. package/dist/research/workspace/credentials.js.map +1 -1
  171. package/dist/research/workspace/data-evidence-adapter.d.ts +60 -0
  172. package/dist/research/workspace/data-evidence-adapter.js +314 -0
  173. package/dist/research/workspace/data-evidence-adapter.js.map +1 -0
  174. package/dist/research/workspace/discovery-status.js +10 -7
  175. package/dist/research/workspace/discovery-status.js.map +1 -1
  176. package/dist/research/workspace/discovery.js +12 -11
  177. package/dist/research/workspace/discovery.js.map +1 -1
  178. package/dist/research/workspace/evidence-ledger.d.ts +8 -1
  179. package/dist/research/workspace/evidence-ledger.js +46 -4
  180. package/dist/research/workspace/evidence-ledger.js.map +1 -1
  181. package/dist/research/workspace/evidence.d.ts +31 -0
  182. package/dist/research/workspace/evidence.js +77 -0
  183. package/dist/research/workspace/evidence.js.map +1 -1
  184. package/dist/research/workspace/executor.js.map +1 -1
  185. package/dist/research/workspace/external-skills.d.ts +49 -49
  186. package/dist/research/workspace/external-skills.js.map +1 -1
  187. package/dist/research/workspace/platform-capabilities.js.map +1 -1
  188. package/dist/research/workspace/preflight.d.ts +4 -4
  189. package/dist/research/workspace/preflight.js +33 -8
  190. package/dist/research/workspace/preflight.js.map +1 -1
  191. package/dist/research/workspace/projects.js +203 -76
  192. package/dist/research/workspace/projects.js.map +1 -1
  193. package/dist/research/workspace/publication.js.map +1 -1
  194. package/dist/research/workspace/research-policy-wizard.js.map +1 -1
  195. package/dist/research/workspace/research-policy.js.map +1 -1
  196. package/dist/research/workspace/runtime.d.ts +7 -0
  197. package/dist/research/workspace/runtime.js +82 -23
  198. package/dist/research/workspace/runtime.js.map +1 -1
  199. package/dist/research/workspace/sanitization.js.map +1 -1
  200. package/dist/research/workspace/schemas.js +1 -1
  201. package/dist/research/workspace/schemas.js.map +1 -1
  202. package/dist/research/workspace/scientific-design.js.map +1 -1
  203. package/dist/research/workspace/scientific-review.js.map +1 -1
  204. package/dist/research/workspace/setup-catalog.d.ts +9 -9
  205. package/dist/research/workspace/setup-catalog.js +2 -2
  206. package/dist/research/workspace/setup-catalog.js.map +1 -1
  207. package/dist/research/workspace/setup-declarative.js.map +1 -1
  208. package/dist/research/workspace/setup-instructions.d.ts +42 -0
  209. package/dist/research/workspace/setup-instructions.js +413 -0
  210. package/dist/research/workspace/setup-instructions.js.map +1 -0
  211. package/dist/research/workspace/setup-invocation.js.map +1 -1
  212. package/dist/research/workspace/setup-wizard.js +7 -0
  213. package/dist/research/workspace/setup-wizard.js.map +1 -1
  214. package/dist/research/workspace/setup.d.ts +18 -15
  215. package/dist/research/workspace/setup.js +68 -3
  216. package/dist/research/workspace/setup.js.map +1 -1
  217. package/dist/research/workspace/workspace.js.map +1 -1
  218. package/package.json +3 -3
@@ -0,0 +1,446 @@
1
+ import { DATA_MANIFEST_SCHEMA_VERSION } from "../contracts.js";
2
+ import { DataRuntimeError } from "../runtime/errors.js";
3
+ import { OPEN_METEO_FLOOD_INPUT_SCHEMA, OPEN_METEO_FLOOD_OUTPUT_SCHEMA, } from "./open-meteo-flood.schemas.js";
4
+ const ENDPOINT_PATH = "/v1/flood";
5
+ const MAX_WINDOW_DAYS = 366;
6
+ const MAX_VALIDATION_ISSUES = 50;
7
+ const ENSEMBLE_MEMBER_PATTERN = /^river_discharge_member(\d+)$/;
8
+ class IssueCollector {
9
+ count = 0;
10
+ issues = [];
11
+ add(path, message) {
12
+ this.count += 1;
13
+ if (this.issues.length < MAX_VALIDATION_ISSUES)
14
+ this.issues.push({ path, message });
15
+ }
16
+ }
17
+ export const openMeteoFloodConnector = {
18
+ schemaVersion: DATA_MANIFEST_SCHEMA_VERSION,
19
+ capabilityId: "open-meteo.flood",
20
+ capabilityVersion: "1.0.0",
21
+ minimumCliVersion: "0.0.55",
22
+ provider: {
23
+ providerId: "open-meteo",
24
+ name: "Open-Meteo Flood API",
25
+ },
26
+ sourceCategory: "modeled-river-discharge",
27
+ endpoints: [
28
+ {
29
+ endpointId: "open-meteo-flood-public",
30
+ baseUrl: "https://flood-api.open-meteo.com",
31
+ pathPrefixes: ["/v1/"],
32
+ allowedMethods: ["GET"],
33
+ allowedContentTypes: ["application/json"],
34
+ },
35
+ ],
36
+ license: {
37
+ name: "CC BY 4.0",
38
+ url: "https://open-meteo.com/en/license",
39
+ restrictions: [
40
+ "Attribution to Open-Meteo and the underlying Global Flood Awareness System (GloFAS) data provider is required.",
41
+ "The public free API endpoint is for non-commercial use; commercial use requires a separately governed customer endpoint and API key.",
42
+ "GloFAS and Open-Meteo modeled values are provided without accuracy, completeness, availability, or fitness guarantees.",
43
+ ],
44
+ },
45
+ credentials: [],
46
+ limits: {
47
+ timeoutMs: 45_000,
48
+ maxRequestBytes: 4_096,
49
+ maxResponseBytes: 40_000_000,
50
+ maxPages: 1,
51
+ maxRecords: 20_000,
52
+ maxRetries: 3,
53
+ maxRetryDelayMs: 120_000,
54
+ maxRedirects: 1,
55
+ },
56
+ diagnostics: { static: true, live: false },
57
+ freshness: {
58
+ kind: "daily-reanalysis-and-forecast-model",
59
+ description: "GloFAS v4 seamless data combine historical consolidated or reanalysis periods with daily and seasonal forecast products whose update cadence and horizon differ.",
60
+ },
61
+ limitations: [
62
+ "Values are simulated river discharge at an approximately 5 km grid resolution, not gauge measurements.",
63
+ "The endpoint selects the largest represented river near the coordinate; the selected river can be unsuitable or several kilometres from the request.",
64
+ "Ensemble statistical variables are forecast-only and can be absent for consolidated historical dates.",
65
+ "Ensemble-member mode can substantially increase response size and does not itself define flood probability or severity.",
66
+ "The public endpoint is restricted to non-commercial use and is subject to Open-Meteo free-tier request limits.",
67
+ ],
68
+ discovery: {
69
+ source: {
70
+ maintainedBy: "Open-Meteo using Global Flood Awareness System (GloFAS) data",
71
+ summary: "Global daily simulated river-discharge reanalysis and forecasts from the GloFAS hydrological model.",
72
+ description: "The Flood API returns simulated discharge for the largest river represented in roughly a 5 km area around each coordinate. GloFAS v4 seamless data combine historical and forecast products; they are model guidance, not river-gauge observations.",
73
+ coverage: {
74
+ geographic: "Global GloFAS river grid at approximately 0.05 degrees or 5 km, subject to represented-river and grid-cell selection.",
75
+ temporal: "Daily data from 1984 through the provider's available forecast horizon; forecast, seasonal, and consolidated historical components have different availability.",
76
+ granularity: "One selected river-model grid cell, calendar date, and discharge series value.",
77
+ },
78
+ },
79
+ summary: "Retrieve bounded daily GloFAS simulated river-discharge series for up to ten coordinates.",
80
+ description: "This capability sends one deterministic GMT request to the public Open-Meteo Flood endpoint, preserves requested coordinate order, and emits aligned discharge, forecast-statistic, and optional ensemble-member columns with explicit partial validation.",
81
+ provides: [
82
+ "Daily river_discharge plus forecast mean, median, maximum, minimum, p25, and p75 fields when the provider makes them available.",
83
+ "Optional provider ensemble-member discharge series with member identity, units, dates, and selected river-grid coordinates.",
84
+ "Bounded multi-coordinate, explicit-date, variable, cell-selection, byte, retry, timeout, and record behavior.",
85
+ "Partial results when an individual coordinate, date axis, requested variable, or ensemble field cannot be normalized safely.",
86
+ ],
87
+ doesNotProvide: [
88
+ "River-gauge or station observations, station identifiers, basin topology, named-river lookup, or field-measurement quality flags.",
89
+ "Flood alerts, severity classification, warning thresholds, return periods, inundation maps, evacuation advice, or emergency guidance.",
90
+ "Geocoding, automatic coordinate adjustment, causal attribution, or fusion with rainfall, soil, reservoir, or local authority data.",
91
+ "Commercial API access or customer-endpoint API-key handling.",
92
+ ],
93
+ selectionHints: [
94
+ "Choose this capability for broad modeled river-discharge context at already-known coordinates, especially where gauge coverage is unavailable.",
95
+ "Choose an official gauge or local hydrology source when observed river level or discharge is required.",
96
+ "Inspect returned riverGridLocation and external river maps before assuming that the selected largest river represents the intended channel.",
97
+ "Use ensemble members only for downstream probabilistic analysis that explicitly preserves model uncertainty; this capability does not classify risk.",
98
+ ],
99
+ typicalUseCases: [
100
+ "Retrieve a bounded simulated discharge window for environmental context at known coordinates.",
101
+ "Collect aligned provider ensemble-member series for a separately governed uncertainty analysis.",
102
+ ],
103
+ sourceDocumentation: [
104
+ {
105
+ title: "Open-Meteo Flood API documentation",
106
+ url: "https://open-meteo.com/en/docs/flood-api",
107
+ },
108
+ {
109
+ title: "Open-Meteo data license",
110
+ url: "https://open-meteo.com/en/license",
111
+ },
112
+ {
113
+ title: "Open-Meteo API terms",
114
+ url: "https://open-meteo.com/en/terms",
115
+ },
116
+ ],
117
+ },
118
+ operations: [
119
+ {
120
+ operationId: "fetch-daily",
121
+ operationVersion: "1.0.0",
122
+ summary: "Fetch one bounded GMT window of Open-Meteo daily simulated river discharge.",
123
+ description: "Builds one stable public-endpoint query for up to ten coordinates, seven documented discharge variables, and optional ensemble members, then validates aligned daily arrays under shared byte, retry, timeout, and record limits.",
124
+ inputSchema: OPEN_METEO_FLOOD_INPUT_SCHEMA,
125
+ outputSchema: OPEN_METEO_FLOOD_OUTPUT_SCHEMA,
126
+ execute: executeOpenMeteoFlood,
127
+ },
128
+ ],
129
+ };
130
+ async function executeOpenMeteoFlood(context) {
131
+ const input = normalizeInput(context.input);
132
+ const query = {
133
+ latitude: input.locations.map((location) => location.latitude).join(","),
134
+ longitude: input.locations.map((location) => location.longitude).join(","),
135
+ start_date: input.startDate,
136
+ end_date: input.endDate,
137
+ daily: input.dailyVariables.join(","),
138
+ timezone: input.timezone,
139
+ timeformat: "iso8601",
140
+ cell_selection: input.cellSelection,
141
+ };
142
+ if (input.includeEnsembleMembers)
143
+ query.ensemble = true;
144
+ const response = await context.http.request({
145
+ endpointId: "open-meteo-flood-public",
146
+ method: "GET",
147
+ path: ENDPOINT_PATH,
148
+ query,
149
+ });
150
+ const normalized = normalizePayload(response.json(), input, context.limits.maxRecords);
151
+ const partial = normalized.issueCount > 0;
152
+ const invalidPaths = normalized.issues.map((issue) => issue.path);
153
+ const errors = partial
154
+ ? [
155
+ {
156
+ code: "partial-result",
157
+ message: "One or more Open-Meteo Flood locations, dates, variables, or ensemble members could not be normalized.",
158
+ retryable: false,
159
+ userActionRequired: false,
160
+ details: { issueCount: normalized.issueCount, invalidPaths },
161
+ },
162
+ ]
163
+ : [];
164
+ return {
165
+ status: partial ? "partial" : "success",
166
+ data: {
167
+ source: {
168
+ providerId: "open-meteo",
169
+ service: "Flood API",
170
+ endpoint: ENDPOINT_PATH,
171
+ model: "GloFAS v4 Seamless",
172
+ simulated: true,
173
+ timezone: "GMT",
174
+ },
175
+ request: input,
176
+ validation: { issueCount: normalized.issueCount, issues: normalized.issues },
177
+ locations: normalized.locations,
178
+ stopReason: partial ? "partial" : normalized.truncated ? "max-records" : "completed",
179
+ },
180
+ summary: {
181
+ recordCount: normalized.recordCount,
182
+ pageCount: 1,
183
+ chunkCount: 1,
184
+ truncated: normalized.truncated,
185
+ completeness: partial ? "partial" : "complete",
186
+ ...(partial ? { missing: [{ kind: "field", identifiers: invalidPaths }] } : {}),
187
+ },
188
+ warnings: [
189
+ "Open-Meteo Flood values are GloFAS simulated river-grid discharge, not gauge observations.",
190
+ "The provider selects the largest represented river near each coordinate; verify the returned river-grid location.",
191
+ "Attribute Open-Meteo and the underlying GloFAS data provider; the configured public endpoint is non-commercial.",
192
+ ...(input.includeEnsembleMembers
193
+ ? [
194
+ "Ensemble members are model realizations and do not directly define flood severity or probability.",
195
+ ]
196
+ : []),
197
+ ...(normalized.truncated ? ["The normalized daily series reached the record limit."] : []),
198
+ ],
199
+ errors,
200
+ observations: [{ ...response.observation, sourceId: "daily-river-discharge-model" }],
201
+ };
202
+ }
203
+ function normalizeInput(input) {
204
+ const start = parseDate(input.startDate, "startDate");
205
+ const end = parseDate(input.endDate, "endDate");
206
+ if (start.getTime() > end.getTime()) {
207
+ throw new DataRuntimeError("invalid-request", "startDate must not follow endDate.");
208
+ }
209
+ const windowDays = Math.floor((end.getTime() - start.getTime()) / 86_400_000) + 1;
210
+ if (windowDays > MAX_WINDOW_DAYS) {
211
+ throw new DataRuntimeError("invalid-request", `The inclusive Open-Meteo Flood date window must not exceed ${MAX_WINDOW_DAYS} days.`, { details: { windowDays, maximumWindowDays: MAX_WINDOW_DAYS } });
212
+ }
213
+ const dailyVariables = [...input.dailyVariables].sort(codePointOrder);
214
+ const includeEnsembleMembers = input.includeEnsembleMembers ?? false;
215
+ if (includeEnsembleMembers && !dailyVariables.includes("river_discharge")) {
216
+ throw new DataRuntimeError("invalid-request", "includeEnsembleMembers requires river_discharge in dailyVariables.");
217
+ }
218
+ return {
219
+ locations: input.locations.map((location) => ({ ...location })),
220
+ startDate: input.startDate,
221
+ endDate: input.endDate,
222
+ dailyVariables,
223
+ includeEnsembleMembers,
224
+ cellSelection: input.cellSelection ?? "nearest",
225
+ timezone: "GMT",
226
+ };
227
+ }
228
+ function parseDate(value, field) {
229
+ const parsed = new Date(`${value}T00:00:00Z`);
230
+ if (!Number.isFinite(parsed.getTime()) || parsed.toISOString().slice(0, 10) !== value) {
231
+ throw new DataRuntimeError("invalid-request", `${field} must be a real YYYY-MM-DD date.`);
232
+ }
233
+ return parsed;
234
+ }
235
+ function normalizePayload(payload, input, maxRecords) {
236
+ const providerError = recordValue(payload);
237
+ if (providerError?.error === true) {
238
+ throw new DataRuntimeError("provider-response-invalid", "Open-Meteo Flood returned an explicit provider error response.", {
239
+ details: {
240
+ reason: typeof providerError.reason === "string" ? providerError.reason : "Unspecified error",
241
+ },
242
+ });
243
+ }
244
+ const responses = input.locations.length === 1 && !Array.isArray(payload) ? [payload] : payload;
245
+ if (!Array.isArray(responses)) {
246
+ throw new DataRuntimeError("provider-response-invalid", "Open-Meteo Flood must return one object for one coordinate or an array for multiple coordinates.");
247
+ }
248
+ const collector = new IssueCollector();
249
+ if (responses.length !== input.locations.length) {
250
+ collector.add("$", `Expected ${input.locations.length} coordinate responses but received ${responses.length}.`);
251
+ }
252
+ const candidates = [];
253
+ for (let index = 0; index < input.locations.length; index += 1) {
254
+ const location = normalizeLocation(responses[index], index, input.locations[index], input, collector);
255
+ if (location)
256
+ candidates.push(location);
257
+ }
258
+ const totalAvailable = candidates.reduce((total, location) => total + location.dates.length, 0);
259
+ const truncated = totalAvailable > maxRecords;
260
+ let remaining = maxRecords;
261
+ const locations = [];
262
+ for (const location of candidates) {
263
+ if (remaining <= 0)
264
+ break;
265
+ const length = Math.min(location.dates.length, remaining);
266
+ locations.push({
267
+ ...location,
268
+ dates: location.dates.slice(0, length),
269
+ variables: location.variables.map((variable) => ({
270
+ ...variable,
271
+ values: variable.values.slice(0, length),
272
+ })),
273
+ ensembleMembers: location.ensembleMembers.map((member) => ({
274
+ ...member,
275
+ values: member.values.slice(0, length),
276
+ })),
277
+ });
278
+ remaining -= length;
279
+ }
280
+ const recordCount = locations.reduce((total, location) => total + location.dates.length, 0);
281
+ return {
282
+ locations,
283
+ issues: collector.issues,
284
+ issueCount: collector.count,
285
+ recordCount,
286
+ truncated,
287
+ };
288
+ }
289
+ function normalizeLocation(value, index, requestedLocation, input, collector) {
290
+ const path = `$[${index}]`;
291
+ const item = recordValue(value);
292
+ if (!item) {
293
+ collector.add(path, "Coordinate response must be an object.");
294
+ return null;
295
+ }
296
+ if (item.error === true) {
297
+ collector.add(path, "Coordinate response contains an explicit provider error.");
298
+ return null;
299
+ }
300
+ const latitude = finiteNumber(item.latitude);
301
+ const longitude = finiteNumber(item.longitude);
302
+ if (latitude === null || longitude === null) {
303
+ collector.add(path, "Coordinate response is missing numeric river-grid latitude or longitude.");
304
+ return null;
305
+ }
306
+ const daily = recordValue(item.daily);
307
+ const units = recordValue(item.daily_units);
308
+ if (!daily || !units || !Array.isArray(daily.time)) {
309
+ collector.add(path, "Coordinate response must contain daily, daily.time, and daily_units.");
310
+ return null;
311
+ }
312
+ const dates = normalizeDates(daily.time, path, input, collector);
313
+ if (dates === null)
314
+ return null;
315
+ const variables = [];
316
+ for (const variable of input.dailyVariables) {
317
+ const normalized = normalizeSeries(daily[variable], units[variable], `${path}.daily.${variable}`, `${path}.daily_units.${variable}`, dates.length, collector);
318
+ if (normalized)
319
+ variables.push({ variable, ...normalized });
320
+ }
321
+ const ensembleMembers = [];
322
+ if (input.includeEnsembleMembers) {
323
+ const fields = [];
324
+ for (const field of Object.keys(daily)) {
325
+ const match = ENSEMBLE_MEMBER_PATTERN.exec(field);
326
+ if (!match)
327
+ continue;
328
+ const member = Number(match[1]);
329
+ if (!Number.isSafeInteger(member)) {
330
+ collector.add(`${path}.daily.${field}`, "Ensemble member suffix is not a safe integer.");
331
+ continue;
332
+ }
333
+ fields.push({ field, member });
334
+ }
335
+ fields.sort((left, right) => left.member - right.member || codePointOrder(left.field, right.field));
336
+ if (fields.length === 0) {
337
+ collector.add(`${path}.daily.river_discharge_memberNN`, "Ensemble members were requested but none were returned.");
338
+ }
339
+ for (const { field, member } of fields) {
340
+ const normalized = normalizeSeries(daily[field], units[field], `${path}.daily.${field}`, `${path}.daily_units.${field}`, dates.length, collector);
341
+ if (normalized) {
342
+ ensembleMembers.push({
343
+ member,
344
+ sourceField: field,
345
+ ...normalized,
346
+ });
347
+ }
348
+ }
349
+ }
350
+ const hasTimezone = typeof item.timezone === "string" && item.timezone.length > 0;
351
+ const timezone = hasTimezone ? item.timezone : "GMT";
352
+ if (!hasTimezone) {
353
+ collector.add(`${path}.timezone`, "Provider timezone metadata is missing.");
354
+ }
355
+ else if (!["GMT", "UTC", "Etc/UTC"].includes(timezone)) {
356
+ collector.add(`${path}.timezone`, "Provider timezone must remain GMT/UTC for this operation.");
357
+ }
358
+ const hasUtcOffset = typeof item.utc_offset_seconds === "number" && Number.isInteger(item.utc_offset_seconds);
359
+ const utcOffsetSeconds = hasUtcOffset ? item.utc_offset_seconds : 0;
360
+ if (!hasUtcOffset) {
361
+ collector.add(`${path}.utc_offset_seconds`, "Provider UTC offset metadata must be an integer.");
362
+ }
363
+ else if (utcOffsetSeconds !== 0) {
364
+ collector.add(`${path}.utc_offset_seconds`, "Provider UTC offset must be zero in GMT mode.");
365
+ }
366
+ return {
367
+ requestedLocationIndex: index,
368
+ requestedLocation,
369
+ riverGridLocation: { latitude, longitude },
370
+ elevation: finiteNumber(item.elevation),
371
+ timezone,
372
+ timezoneAbbreviation: typeof item.timezone_abbreviation === "string" && item.timezone_abbreviation
373
+ ? item.timezone_abbreviation
374
+ : "GMT",
375
+ utcOffsetSeconds,
376
+ dates,
377
+ variables,
378
+ ensembleMembers,
379
+ };
380
+ }
381
+ function normalizeDates(values, path, input, collector) {
382
+ const expected = Math.floor((new Date(`${input.endDate}T00:00:00Z`).getTime() -
383
+ new Date(`${input.startDate}T00:00:00Z`).getTime()) /
384
+ 86_400_000) + 1;
385
+ if (values.length !== expected) {
386
+ collector.add(`${path}.daily.time`, `Expected ${expected} daily dates but received ${values.length}.`);
387
+ }
388
+ const dates = [];
389
+ let previous = "";
390
+ for (let index = 0; index < values.length; index += 1) {
391
+ const value = values[index];
392
+ if (typeof value !== "string" || !/^\d{4}-\d{2}-\d{2}$/.test(value)) {
393
+ collector.add(`${path}.daily.time[${index}]`, "Daily time must be a YYYY-MM-DD string.");
394
+ return null;
395
+ }
396
+ const parsed = new Date(`${value}T00:00:00Z`);
397
+ if (!Number.isFinite(parsed.getTime()) ||
398
+ parsed.toISOString().slice(0, 10) !== value ||
399
+ value < input.startDate ||
400
+ value > input.endDate ||
401
+ (previous !== "" && value <= previous)) {
402
+ collector.add(`${path}.daily.time[${index}]`, "Daily time must be a real, in-window, strictly ascending date.");
403
+ return null;
404
+ }
405
+ dates.push(value);
406
+ previous = value;
407
+ }
408
+ return dates;
409
+ }
410
+ function normalizeSeries(rawValues, rawUnit, valuePath, unitPath, expectedLength, collector) {
411
+ if (!Array.isArray(rawValues)) {
412
+ collector.add(valuePath, "Requested discharge series is missing or is not an array.");
413
+ return null;
414
+ }
415
+ if (rawValues.length !== expectedLength) {
416
+ collector.add(valuePath, "Discharge series length does not match daily.time.");
417
+ return null;
418
+ }
419
+ if (typeof rawUnit !== "string" || rawUnit.length === 0) {
420
+ collector.add(unitPath, "Discharge series unit is missing.");
421
+ return null;
422
+ }
423
+ const values = rawValues.map((value, index) => {
424
+ if (value === null)
425
+ return null;
426
+ const number = finiteNumber(value);
427
+ if (number === null) {
428
+ collector.add(`${valuePath}[${index}]`, "Discharge value must be numeric or null.");
429
+ return null;
430
+ }
431
+ return number;
432
+ });
433
+ return { unit: rawUnit, values };
434
+ }
435
+ function finiteNumber(value) {
436
+ return typeof value === "number" && Number.isFinite(value) ? value : null;
437
+ }
438
+ function recordValue(value) {
439
+ return value !== null && typeof value === "object" && !Array.isArray(value)
440
+ ? value
441
+ : null;
442
+ }
443
+ function codePointOrder(left, right) {
444
+ return left < right ? -1 : left > right ? 1 : 0;
445
+ }
446
+ //# sourceMappingURL=open-meteo-flood.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"open-meteo-flood.js","sourceRoot":"","sources":["../../../src/data/connectors/open-meteo-flood.ts"],"names":[],"mappings":"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"}