@tiangong-ai/cli 0.0.51 → 0.0.56
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 +71 -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,521 @@
|
|
|
1
|
+
import { DATA_MANIFEST_SCHEMA_VERSION } from "../contracts.js";
|
|
2
|
+
import { DataRuntimeError } from "../runtime/errors.js";
|
|
3
|
+
import { USGS_WATER_IV_INPUT_SCHEMA, USGS_WATER_IV_OUTPUT_SCHEMA, } from "./usgs-water-instantaneous-values.schemas.js";
|
|
4
|
+
const ENDPOINT_PATH = "/nwis/iv/";
|
|
5
|
+
const MAX_TIME_SERIES = 500;
|
|
6
|
+
const MAX_VALUES_PER_SERIES = 10_000;
|
|
7
|
+
const MAX_VALIDATION_ISSUES = 50;
|
|
8
|
+
const DEFAULT_PARAMETER_CODES = ["00060", "00065"];
|
|
9
|
+
const ISO_DURATION_PATTERN = /^P(?:(\d+(?:\.\d+)?)Y)?(?:(\d+(?:\.\d+)?)M)?(?:(\d+(?:\.\d+)?)W)?(?:(\d+(?:\.\d+)?)D)?(?:T(?:(\d+(?:\.\d+)?)H)?(?:(\d+(?:\.\d+)?)M)?(?:(\d+(?:\.\d+)?)S)?)?$/;
|
|
10
|
+
class IssueCollector {
|
|
11
|
+
count = 0;
|
|
12
|
+
issues = [];
|
|
13
|
+
add(path, message) {
|
|
14
|
+
this.count += 1;
|
|
15
|
+
if (this.issues.length < MAX_VALIDATION_ISSUES)
|
|
16
|
+
this.issues.push({ path, message });
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
export const usgsWaterInstantaneousValuesConnector = {
|
|
20
|
+
schemaVersion: DATA_MANIFEST_SCHEMA_VERSION,
|
|
21
|
+
capabilityId: "usgs.water-instantaneous-values",
|
|
22
|
+
capabilityVersion: "1.0.0",
|
|
23
|
+
minimumCliVersion: "0.0.55",
|
|
24
|
+
provider: {
|
|
25
|
+
providerId: "usgs",
|
|
26
|
+
name: "U.S. Geological Survey Water Data for the Nation",
|
|
27
|
+
},
|
|
28
|
+
sourceCategory: "surface-water-observations",
|
|
29
|
+
endpoints: [
|
|
30
|
+
{
|
|
31
|
+
endpointId: "usgs-water-services",
|
|
32
|
+
baseUrl: "https://waterservices.usgs.gov",
|
|
33
|
+
pathPrefixes: [ENDPOINT_PATH],
|
|
34
|
+
allowedMethods: ["GET"],
|
|
35
|
+
allowedContentTypes: ["application/json"],
|
|
36
|
+
},
|
|
37
|
+
],
|
|
38
|
+
license: {
|
|
39
|
+
name: "USGS-authored or produced data and information",
|
|
40
|
+
url: "https://www.usgs.gov/information-policies-and-instructions/copyrights-and-credits",
|
|
41
|
+
restrictions: [
|
|
42
|
+
"Most recent instantaneous values are provisional and may be revised.",
|
|
43
|
+
"USGS WaterServices is a legacy API scheduled for decommissioning in the first quarter of 2027.",
|
|
44
|
+
"Do not infer flood stage, hazard, or regulatory meaning from a measurement without separately governed context.",
|
|
45
|
+
],
|
|
46
|
+
},
|
|
47
|
+
credentials: [],
|
|
48
|
+
limits: {
|
|
49
|
+
timeoutMs: 45_000,
|
|
50
|
+
maxRequestBytes: 1_024,
|
|
51
|
+
maxResponseBytes: 25_000_000,
|
|
52
|
+
maxPages: 1,
|
|
53
|
+
maxRecords: 100_000,
|
|
54
|
+
maxRetries: 4,
|
|
55
|
+
maxRetryDelayMs: 120_000,
|
|
56
|
+
maxRedirects: 1,
|
|
57
|
+
},
|
|
58
|
+
diagnostics: { static: true, live: false },
|
|
59
|
+
freshness: {
|
|
60
|
+
kind: "near-real-time-provisional",
|
|
61
|
+
description: "Instantaneous time-series values may be recent and provisional; qualifiers and later revisions remain authoritative provider context.",
|
|
62
|
+
},
|
|
63
|
+
limitations: [
|
|
64
|
+
"This connector targets the legacy WaterServices Instantaneous Values endpoint, which USGS plans to decommission in the first quarter of 2027.",
|
|
65
|
+
"USGS warns that decommission preparation may include intentional service degradation or blackouts during the second half of 2026, so availability before final retirement is not guaranteed.",
|
|
66
|
+
"The endpoint exposes USGS-served regular time-series parameters; it is not a station catalog, daily-values service, or statistical service.",
|
|
67
|
+
"Some operational data that are not quality assured, commonly including temperature and precipitation, can be limited by the responsible USGS water science center to 120 days or less.",
|
|
68
|
+
"Bounding-box selection can omit sites whose coordinates are unavailable or not referenced as required by the legacy service.",
|
|
69
|
+
"The connector does not interpret flood thresholds, return periods, hydrologic causes, or policy implications.",
|
|
70
|
+
],
|
|
71
|
+
discovery: {
|
|
72
|
+
source: {
|
|
73
|
+
maintainedBy: "U.S. Geological Survey",
|
|
74
|
+
summary: "USGS WaterServices regular time-series measurements for streamflow, gage height, and other instantaneous parameters.",
|
|
75
|
+
description: "The legacy Instantaneous Values service returns recent or historical WaterML time series for selected monitoring sites and parameters. Values commonly include provisional status qualifiers and station metadata.",
|
|
76
|
+
coverage: {
|
|
77
|
+
geographic: "USGS Water Data for the Nation monitoring sites available through the selected site identifiers or legacy bounding-box filter, primarily in the United States.",
|
|
78
|
+
temporal: "Regular time-series data generally from October 1, 2007 to the present, subject to parameter, site, operational-data, and service availability limits.",
|
|
79
|
+
granularity: "One monitoring-site, parameter, and observation timestamp value.",
|
|
80
|
+
},
|
|
81
|
+
},
|
|
82
|
+
summary: "Retrieve bounded USGS instantaneous water observations for explicit sites or one bounding box.",
|
|
83
|
+
description: "This capability sends one bounded request to the legacy USGS WaterServices IV endpoint, validates its WaterML JSON envelope, and emits normalized station-parameter observations with qualifier and provisional-state lineage.",
|
|
84
|
+
provides: [
|
|
85
|
+
"Normalized site, location, parameter, unit, timestamp, value, qualifier, and provisional fields.",
|
|
86
|
+
"Selection by at most 100 explicit site identifiers or one bounding box whose span product is at most 25 square degrees.",
|
|
87
|
+
"Selection by one to eight five-digit parameter codes and a positive ISO-8601 period or explicit RFC3339 start/end window.",
|
|
88
|
+
"Explicit partial status when isolated provider rows or series cannot be normalized.",
|
|
89
|
+
],
|
|
90
|
+
doesNotProvide: [
|
|
91
|
+
"Station discovery by place name, watershed interpretation, geocoding, or cross-source fusion.",
|
|
92
|
+
"Daily values, annual or monthly statistics, discrete field measurements, or a complete site catalog.",
|
|
93
|
+
"Flood-stage classification, forecasts, alerts, hazard advice, or causal interpretation.",
|
|
94
|
+
"Guaranteed operation after the legacy WaterServices decommissioning window.",
|
|
95
|
+
],
|
|
96
|
+
selectionHints: [
|
|
97
|
+
"Choose this capability when the task already has USGS site identifiers or a small numeric bounding box and needs raw instantaneous observations.",
|
|
98
|
+
"Prefer explicit site identifiers over a bounding box when station identity is already known.",
|
|
99
|
+
"Treat qualifier P as provisional and do not use this capability alone to classify flood risk.",
|
|
100
|
+
"Plan migration to the modern api.waterdata.usgs.gov APIs for workflows that must operate beyond early 2027.",
|
|
101
|
+
],
|
|
102
|
+
typicalUseCases: [
|
|
103
|
+
"Retrieve recent discharge parameter 00060 for known streamgages.",
|
|
104
|
+
"Verify gage-height parameter 00065 observations within a small regional bounding box.",
|
|
105
|
+
],
|
|
106
|
+
sourceDocumentation: [
|
|
107
|
+
{
|
|
108
|
+
title: "USGS WaterServices Instantaneous Values service details",
|
|
109
|
+
url: "https://waterservices.usgs.gov/docs/instantaneous-values/instantaneous-values-details/",
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
title: "USGS Water Data APIs and WaterServices decommission notice",
|
|
113
|
+
url: "https://www.usgs.gov/tools/usgs-water-data-apis",
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
title: "USGS WaterServices decommissioning announcement",
|
|
117
|
+
url: "https://waterdata.usgs.gov/blog/api-waterservices-decom",
|
|
118
|
+
},
|
|
119
|
+
],
|
|
120
|
+
},
|
|
121
|
+
operations: [
|
|
122
|
+
{
|
|
123
|
+
operationId: "fetch",
|
|
124
|
+
operationVersion: "1.0.0",
|
|
125
|
+
summary: "Fetch one bounded USGS WaterServices IV response and normalize station time-series values.",
|
|
126
|
+
description: "Builds one deterministic legacy WaterServices query from an exclusive spatial selector and time selector, validates WaterML JSON, and preserves qualifier and provisional metadata under explicit series, value, byte, and record limits.",
|
|
127
|
+
inputSchema: USGS_WATER_IV_INPUT_SCHEMA,
|
|
128
|
+
outputSchema: USGS_WATER_IV_OUTPUT_SCHEMA,
|
|
129
|
+
execute: executeUsgsWaterInstantaneousValues,
|
|
130
|
+
},
|
|
131
|
+
],
|
|
132
|
+
};
|
|
133
|
+
async function executeUsgsWaterInstantaneousValues(context) {
|
|
134
|
+
const input = normalizeInput(context.input);
|
|
135
|
+
const response = await context.http.request({
|
|
136
|
+
endpointId: "usgs-water-services",
|
|
137
|
+
method: "GET",
|
|
138
|
+
path: ENDPOINT_PATH,
|
|
139
|
+
query: buildQuery(input),
|
|
140
|
+
});
|
|
141
|
+
const normalized = normalizeProviderPayload(response.json(), input, context.limits.maxRecords);
|
|
142
|
+
const partial = normalized.issueCount > 0;
|
|
143
|
+
const invalidPaths = normalized.issues.map((issue) => issue.path);
|
|
144
|
+
const errors = partial
|
|
145
|
+
? [
|
|
146
|
+
{
|
|
147
|
+
code: "partial-result",
|
|
148
|
+
message: "One or more USGS WaterServices series or value rows could not be normalized.",
|
|
149
|
+
retryable: false,
|
|
150
|
+
userActionRequired: false,
|
|
151
|
+
details: {
|
|
152
|
+
issueCount: normalized.issueCount,
|
|
153
|
+
invalidPaths,
|
|
154
|
+
},
|
|
155
|
+
},
|
|
156
|
+
]
|
|
157
|
+
: [];
|
|
158
|
+
return {
|
|
159
|
+
status: partial ? "partial" : "success",
|
|
160
|
+
data: {
|
|
161
|
+
source: {
|
|
162
|
+
providerId: "usgs",
|
|
163
|
+
service: "WaterServices Instantaneous Values",
|
|
164
|
+
endpoint: ENDPOINT_PATH,
|
|
165
|
+
provisionalPossible: true,
|
|
166
|
+
legacyService: true,
|
|
167
|
+
decommissionExpected: "2027-Q1",
|
|
168
|
+
officialReplacement: "https://api.waterdata.usgs.gov/ogcapi/",
|
|
169
|
+
},
|
|
170
|
+
request: input,
|
|
171
|
+
validation: {
|
|
172
|
+
issueCount: normalized.issueCount,
|
|
173
|
+
issues: normalized.issues,
|
|
174
|
+
},
|
|
175
|
+
series: normalized.series,
|
|
176
|
+
records: normalized.records,
|
|
177
|
+
stopReason: partial ? "partial" : normalized.truncated ? "max-records" : "completed",
|
|
178
|
+
},
|
|
179
|
+
summary: {
|
|
180
|
+
recordCount: normalized.records.length,
|
|
181
|
+
pageCount: 1,
|
|
182
|
+
chunkCount: 1,
|
|
183
|
+
truncated: normalized.truncated,
|
|
184
|
+
completeness: partial ? "partial" : "complete",
|
|
185
|
+
...(partial ? { missing: [{ kind: "range", identifiers: invalidPaths }] } : {}),
|
|
186
|
+
},
|
|
187
|
+
warnings: [
|
|
188
|
+
"USGS instantaneous values may be provisional; retain and evaluate provider qualifiers.",
|
|
189
|
+
"USGS plans to decommission the legacy WaterServices API in the first quarter of 2027.",
|
|
190
|
+
"USGS has warned that decommission preparation may cause intentional degradation or blackouts during the second half of 2026.",
|
|
191
|
+
...(normalized.truncated
|
|
192
|
+
? ["The normalized observation set reached the requested record limit."]
|
|
193
|
+
: []),
|
|
194
|
+
],
|
|
195
|
+
errors,
|
|
196
|
+
observations: [{ ...response.observation, sourceId: "instantaneous-values" }],
|
|
197
|
+
};
|
|
198
|
+
}
|
|
199
|
+
function normalizeInput(input) {
|
|
200
|
+
const selection = input.boundingBox
|
|
201
|
+
? {
|
|
202
|
+
kind: "bounding-box",
|
|
203
|
+
boundingBox: normalizeBoundingBox(input.boundingBox),
|
|
204
|
+
siteNumbers: null,
|
|
205
|
+
}
|
|
206
|
+
: {
|
|
207
|
+
kind: "sites",
|
|
208
|
+
boundingBox: null,
|
|
209
|
+
siteNumbers: [...(input.siteNumbers ?? [])].sort(codePointOrder),
|
|
210
|
+
};
|
|
211
|
+
const time = input.period
|
|
212
|
+
? {
|
|
213
|
+
kind: "period",
|
|
214
|
+
period: normalizePositivePeriod(input.period),
|
|
215
|
+
startDateTimeUtc: null,
|
|
216
|
+
endDateTimeUtc: null,
|
|
217
|
+
}
|
|
218
|
+
: normalizeWindow(input.startDateTimeUtc ?? "", input.endDateTimeUtc ?? "");
|
|
219
|
+
return {
|
|
220
|
+
selection,
|
|
221
|
+
time,
|
|
222
|
+
parameterCodes: [...(input.parameterCodes ?? DEFAULT_PARAMETER_CODES)].sort(codePointOrder),
|
|
223
|
+
siteType: (input.siteType ?? "ST").toUpperCase(),
|
|
224
|
+
siteStatus: input.siteStatus ?? "active",
|
|
225
|
+
agencyCode: input.agencyCode ? input.agencyCode.toUpperCase() : null,
|
|
226
|
+
};
|
|
227
|
+
}
|
|
228
|
+
function normalizePositivePeriod(value) {
|
|
229
|
+
const normalized = value.toUpperCase();
|
|
230
|
+
const match = ISO_DURATION_PATTERN.exec(normalized);
|
|
231
|
+
const components = match?.slice(1).map((component) => Number(component ?? 0)) ?? [];
|
|
232
|
+
const week = components[2] ?? 0;
|
|
233
|
+
const hasNonWeekComponent = components.some((component, index) => index !== 2 && component > 0);
|
|
234
|
+
if (!match ||
|
|
235
|
+
!components.some((component) => Number.isFinite(component) && component > 0) ||
|
|
236
|
+
(week > 0 && hasNonWeekComponent)) {
|
|
237
|
+
throw new DataRuntimeError("invalid-request", "USGS period must be a positive ISO-8601 duration; week notation cannot be mixed with other duration components.");
|
|
238
|
+
}
|
|
239
|
+
return normalized;
|
|
240
|
+
}
|
|
241
|
+
function normalizeBoundingBox(box) {
|
|
242
|
+
if (box.minLongitude >= box.maxLongitude || box.minLatitude >= box.maxLatitude) {
|
|
243
|
+
throw new DataRuntimeError("invalid-request", "USGS bounding-box minimums must be lower than maximums.");
|
|
244
|
+
}
|
|
245
|
+
const area = (box.maxLongitude - box.minLongitude) * (box.maxLatitude - box.minLatitude);
|
|
246
|
+
if (area > 25) {
|
|
247
|
+
throw new DataRuntimeError("invalid-request", "The USGS bounding-box coordinate-span product must not exceed 25 square degrees.", { details: { area, maximumArea: 25 } });
|
|
248
|
+
}
|
|
249
|
+
return { ...box };
|
|
250
|
+
}
|
|
251
|
+
function normalizeWindow(startValue, endValue) {
|
|
252
|
+
const start = parseInputInstant(startValue, "startDateTimeUtc");
|
|
253
|
+
const end = parseInputInstant(endValue, "endDateTimeUtc");
|
|
254
|
+
if (start.getTime() > end.getTime()) {
|
|
255
|
+
throw new DataRuntimeError("invalid-request", "USGS startDateTimeUtc must not follow endDateTimeUtc.");
|
|
256
|
+
}
|
|
257
|
+
return {
|
|
258
|
+
kind: "window",
|
|
259
|
+
period: null,
|
|
260
|
+
startDateTimeUtc: toUtcSecond(start),
|
|
261
|
+
endDateTimeUtc: toUtcSecond(end),
|
|
262
|
+
};
|
|
263
|
+
}
|
|
264
|
+
function parseInputInstant(value, field) {
|
|
265
|
+
const parsed = new Date(value);
|
|
266
|
+
if (!value || !Number.isFinite(parsed.getTime())) {
|
|
267
|
+
throw new DataRuntimeError("invalid-request", `${field} must be a valid RFC3339 instant.`);
|
|
268
|
+
}
|
|
269
|
+
return parsed;
|
|
270
|
+
}
|
|
271
|
+
function buildQuery(input) {
|
|
272
|
+
const query = {
|
|
273
|
+
format: "json",
|
|
274
|
+
parameterCd: input.parameterCodes.join(","),
|
|
275
|
+
siteType: input.siteType,
|
|
276
|
+
siteStatus: input.siteStatus,
|
|
277
|
+
};
|
|
278
|
+
if (input.selection.kind === "bounding-box") {
|
|
279
|
+
query.bBox = boundingBoxText(input.selection.boundingBox);
|
|
280
|
+
}
|
|
281
|
+
else {
|
|
282
|
+
query.sites = input.selection.siteNumbers.join(",");
|
|
283
|
+
}
|
|
284
|
+
if (input.time.kind === "period") {
|
|
285
|
+
query.period = input.time.period;
|
|
286
|
+
}
|
|
287
|
+
else {
|
|
288
|
+
query.startDT = input.time.startDateTimeUtc;
|
|
289
|
+
query.endDT = input.time.endDateTimeUtc;
|
|
290
|
+
}
|
|
291
|
+
if (input.agencyCode)
|
|
292
|
+
query.agencyCd = input.agencyCode;
|
|
293
|
+
return query;
|
|
294
|
+
}
|
|
295
|
+
function boundingBoxText(box) {
|
|
296
|
+
return [box.minLongitude, box.minLatitude, box.maxLongitude, box.maxLatitude]
|
|
297
|
+
.map((value) => value.toFixed(6))
|
|
298
|
+
.join(",");
|
|
299
|
+
}
|
|
300
|
+
function normalizeProviderPayload(payload, input, maxRecords) {
|
|
301
|
+
const top = recordValue(payload);
|
|
302
|
+
const value = recordValue(top?.value);
|
|
303
|
+
const timeSeries = value?.timeSeries;
|
|
304
|
+
if (!top || !value || !Array.isArray(timeSeries)) {
|
|
305
|
+
throw new DataRuntimeError("provider-response-invalid", "USGS WaterServices JSON must contain an array at $.value.timeSeries.");
|
|
306
|
+
}
|
|
307
|
+
if (timeSeries.length > MAX_TIME_SERIES) {
|
|
308
|
+
throw new DataRuntimeError("response-too-large", "The USGS WaterServices response exceeds the connector time-series limit.", { details: { timeSeriesCount: timeSeries.length, maximumTimeSeries: MAX_TIME_SERIES } });
|
|
309
|
+
}
|
|
310
|
+
const records = [];
|
|
311
|
+
const series = [];
|
|
312
|
+
const issues = new IssueCollector();
|
|
313
|
+
let truncated = false;
|
|
314
|
+
for (let seriesIndex = 0; seriesIndex < timeSeries.length; seriesIndex += 1) {
|
|
315
|
+
const path = `$.value.timeSeries[${seriesIndex}]`;
|
|
316
|
+
const parsed = normalizeSeries(timeSeries[seriesIndex], path, input, maxRecords - records.length, issues);
|
|
317
|
+
if (!parsed)
|
|
318
|
+
continue;
|
|
319
|
+
records.push(...parsed.records);
|
|
320
|
+
series.push(parsed.summary);
|
|
321
|
+
truncated ||= parsed.truncated;
|
|
322
|
+
}
|
|
323
|
+
return {
|
|
324
|
+
records,
|
|
325
|
+
series,
|
|
326
|
+
issues: issues.issues,
|
|
327
|
+
issueCount: issues.count,
|
|
328
|
+
truncated,
|
|
329
|
+
};
|
|
330
|
+
}
|
|
331
|
+
function normalizeSeries(rawSeries, path, input, remainingRecords, issues) {
|
|
332
|
+
const series = recordValue(rawSeries);
|
|
333
|
+
if (!series) {
|
|
334
|
+
issues.add(path, "The timeSeries item is not an object.");
|
|
335
|
+
return null;
|
|
336
|
+
}
|
|
337
|
+
const sourceInfo = recordValue(series.sourceInfo);
|
|
338
|
+
const variable = recordValue(series.variable);
|
|
339
|
+
const siteCode = firstRecord(sourceInfo?.siteCode);
|
|
340
|
+
const variableCode = firstRecord(variable?.variableCode);
|
|
341
|
+
const siteNumber = textValue(siteCode?.value);
|
|
342
|
+
const parameterCode = textValue(variableCode?.value);
|
|
343
|
+
if (!siteNumber || !parameterCode || !/^\d{5}$/.test(parameterCode)) {
|
|
344
|
+
issues.add(path, "The timeSeries item lacks a valid site or five-digit parameter code.");
|
|
345
|
+
return null;
|
|
346
|
+
}
|
|
347
|
+
if (!Array.isArray(series.values)) {
|
|
348
|
+
issues.add(`${path}.values`, "The timeSeries values field is not an array.");
|
|
349
|
+
return null;
|
|
350
|
+
}
|
|
351
|
+
const properties = siteProperties(sourceInfo);
|
|
352
|
+
const geography = recordValue(recordValue(sourceInfo?.geoLocation)?.geogLocation);
|
|
353
|
+
const identity = {
|
|
354
|
+
siteNumber,
|
|
355
|
+
siteName: textValue(sourceInfo?.siteName) ?? "",
|
|
356
|
+
agencyCode: textValue(siteCode?.agencyCode),
|
|
357
|
+
siteType: properties.get("siteTypeCd") ?? null,
|
|
358
|
+
stateCode: properties.get("stateCd") ?? null,
|
|
359
|
+
countyCode: properties.get("countyCd") ?? null,
|
|
360
|
+
hucCode: properties.get("hucCd") ?? null,
|
|
361
|
+
latitude: coordinateValue(geography?.latitude, -90, 90),
|
|
362
|
+
longitude: coordinateValue(geography?.longitude, -180, 180),
|
|
363
|
+
parameterCode,
|
|
364
|
+
variableName: textValue(variable?.variableName) ?? "",
|
|
365
|
+
variableDescription: textValue(variable?.variableDescription) ?? "",
|
|
366
|
+
statisticCode: statisticCode(variable),
|
|
367
|
+
unit: textValue(recordValue(variable?.unit)?.unitCode),
|
|
368
|
+
};
|
|
369
|
+
const noDataValue = numberValue(variable?.noDataValue);
|
|
370
|
+
const records = [];
|
|
371
|
+
let provisionalRecordCount = 0;
|
|
372
|
+
let firstObservedAtUtc = null;
|
|
373
|
+
let lastObservedAtUtc = null;
|
|
374
|
+
let truncated = false;
|
|
375
|
+
for (let sectionIndex = 0; sectionIndex < series.values.length; sectionIndex += 1) {
|
|
376
|
+
const sectionPath = `${path}.values[${sectionIndex}]`;
|
|
377
|
+
const section = recordValue(series.values[sectionIndex]);
|
|
378
|
+
if (!section || !Array.isArray(section.value)) {
|
|
379
|
+
issues.add(sectionPath, "The values section does not contain a value array.");
|
|
380
|
+
continue;
|
|
381
|
+
}
|
|
382
|
+
if (section.value.length > MAX_VALUES_PER_SERIES) {
|
|
383
|
+
throw new DataRuntimeError("response-too-large", "A USGS WaterServices time series exceeds the per-series value limit.", {
|
|
384
|
+
details: {
|
|
385
|
+
siteNumber,
|
|
386
|
+
parameterCode,
|
|
387
|
+
valueCount: section.value.length,
|
|
388
|
+
maximumValuesPerSeries: MAX_VALUES_PER_SERIES,
|
|
389
|
+
},
|
|
390
|
+
});
|
|
391
|
+
}
|
|
392
|
+
for (let valueIndex = 0; valueIndex < section.value.length; valueIndex += 1) {
|
|
393
|
+
const rowPath = `${sectionPath}.value[${valueIndex}]`;
|
|
394
|
+
if (records.length >= remainingRecords) {
|
|
395
|
+
truncated = true;
|
|
396
|
+
continue;
|
|
397
|
+
}
|
|
398
|
+
const row = recordValue(section.value[valueIndex]);
|
|
399
|
+
const value = numberValue(row?.value);
|
|
400
|
+
const observedAtUtc = providerInstant(row?.dateTime);
|
|
401
|
+
if (!row || value === null || observedAtUtc === null) {
|
|
402
|
+
issues.add(rowPath, "The value row lacks a finite numeric value or valid timestamp.");
|
|
403
|
+
continue;
|
|
404
|
+
}
|
|
405
|
+
if (noDataValue !== null && value === noDataValue)
|
|
406
|
+
continue;
|
|
407
|
+
if (!instantInsideWindow(observedAtUtc, input.time))
|
|
408
|
+
continue;
|
|
409
|
+
const qualifiers = Array.isArray(row.qualifiers)
|
|
410
|
+
? row.qualifiers.map(textValue).filter((item) => item !== null)
|
|
411
|
+
: [];
|
|
412
|
+
const provisional = qualifiers.some((item) => item.toUpperCase() === "P");
|
|
413
|
+
records.push({
|
|
414
|
+
...identity,
|
|
415
|
+
observedAtUtc,
|
|
416
|
+
value,
|
|
417
|
+
qualifiers,
|
|
418
|
+
provisional,
|
|
419
|
+
});
|
|
420
|
+
if (provisional)
|
|
421
|
+
provisionalRecordCount += 1;
|
|
422
|
+
firstObservedAtUtc = earlierInstant(firstObservedAtUtc, observedAtUtc);
|
|
423
|
+
lastObservedAtUtc = laterInstant(lastObservedAtUtc, observedAtUtc);
|
|
424
|
+
}
|
|
425
|
+
}
|
|
426
|
+
return {
|
|
427
|
+
records,
|
|
428
|
+
summary: {
|
|
429
|
+
...identity,
|
|
430
|
+
recordCount: records.length,
|
|
431
|
+
provisionalRecordCount,
|
|
432
|
+
firstObservedAtUtc,
|
|
433
|
+
lastObservedAtUtc,
|
|
434
|
+
},
|
|
435
|
+
truncated,
|
|
436
|
+
};
|
|
437
|
+
}
|
|
438
|
+
function recordValue(value) {
|
|
439
|
+
return value !== null && typeof value === "object" && !Array.isArray(value)
|
|
440
|
+
? value
|
|
441
|
+
: null;
|
|
442
|
+
}
|
|
443
|
+
function firstRecord(value) {
|
|
444
|
+
if (!Array.isArray(value))
|
|
445
|
+
return null;
|
|
446
|
+
for (const item of value) {
|
|
447
|
+
const record = recordValue(item);
|
|
448
|
+
if (record)
|
|
449
|
+
return record;
|
|
450
|
+
}
|
|
451
|
+
return null;
|
|
452
|
+
}
|
|
453
|
+
function textValue(value) {
|
|
454
|
+
if (value === null || value === undefined)
|
|
455
|
+
return null;
|
|
456
|
+
const text = String(value).trim().replace(/\s+/g, " ");
|
|
457
|
+
return text || null;
|
|
458
|
+
}
|
|
459
|
+
function numberValue(value) {
|
|
460
|
+
if (typeof value === "boolean" || value === null || value === undefined)
|
|
461
|
+
return null;
|
|
462
|
+
const text = typeof value === "number" ? null : textValue(value);
|
|
463
|
+
if (typeof value !== "number" && text === null)
|
|
464
|
+
return null;
|
|
465
|
+
const number = typeof value === "number" ? value : Number(text);
|
|
466
|
+
return Number.isFinite(number) ? number : null;
|
|
467
|
+
}
|
|
468
|
+
function coordinateValue(value, minimum, maximum) {
|
|
469
|
+
const number = numberValue(value);
|
|
470
|
+
return number !== null && number >= minimum && number <= maximum ? number : null;
|
|
471
|
+
}
|
|
472
|
+
function siteProperties(sourceInfo) {
|
|
473
|
+
const properties = new Map();
|
|
474
|
+
if (!Array.isArray(sourceInfo?.siteProperty))
|
|
475
|
+
return properties;
|
|
476
|
+
for (const item of sourceInfo.siteProperty) {
|
|
477
|
+
const property = recordValue(item);
|
|
478
|
+
const name = textValue(property?.name);
|
|
479
|
+
const value = textValue(property?.value);
|
|
480
|
+
if (name && value)
|
|
481
|
+
properties.set(name, value);
|
|
482
|
+
}
|
|
483
|
+
return properties;
|
|
484
|
+
}
|
|
485
|
+
function statisticCode(variable) {
|
|
486
|
+
const options = recordValue(variable?.options);
|
|
487
|
+
if (!Array.isArray(options?.option))
|
|
488
|
+
return null;
|
|
489
|
+
for (const item of options.option) {
|
|
490
|
+
const option = recordValue(item);
|
|
491
|
+
if (textValue(option?.name) === "Statistic")
|
|
492
|
+
return textValue(option?.optionCode);
|
|
493
|
+
}
|
|
494
|
+
return null;
|
|
495
|
+
}
|
|
496
|
+
function providerInstant(value) {
|
|
497
|
+
const text = textValue(value);
|
|
498
|
+
if (!text || !/(?:[zZ]|[+-]\d{2}:\d{2})$/.test(text))
|
|
499
|
+
return null;
|
|
500
|
+
const parsed = new Date(text);
|
|
501
|
+
return Number.isFinite(parsed.getTime()) ? toUtcSecond(parsed) : null;
|
|
502
|
+
}
|
|
503
|
+
function toUtcSecond(value) {
|
|
504
|
+
const copy = new Date(value.getTime());
|
|
505
|
+
copy.setUTCMilliseconds(0);
|
|
506
|
+
return copy.toISOString().replace(".000Z", "Z");
|
|
507
|
+
}
|
|
508
|
+
function instantInsideWindow(observedAtUtc, time) {
|
|
509
|
+
return (time.kind === "period" ||
|
|
510
|
+
(observedAtUtc >= time.startDateTimeUtc && observedAtUtc <= time.endDateTimeUtc));
|
|
511
|
+
}
|
|
512
|
+
function earlierInstant(current, candidate) {
|
|
513
|
+
return current === null || candidate < current ? candidate : current;
|
|
514
|
+
}
|
|
515
|
+
function laterInstant(current, candidate) {
|
|
516
|
+
return current === null || candidate > current ? candidate : current;
|
|
517
|
+
}
|
|
518
|
+
function codePointOrder(left, right) {
|
|
519
|
+
return left < right ? -1 : left > right ? 1 : 0;
|
|
520
|
+
}
|
|
521
|
+
//# sourceMappingURL=usgs-water-instantaneous-values.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usgs-water-instantaneous-values.js","sourceRoot":"","sources":["../../../src/data/connectors/usgs-water-instantaneous-values.ts"],"names":[],"mappings":"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"}
|