@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.
- package/AGENTS.md +22 -2
- package/README.md +200 -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 +71 -11
- package/dist/research/orchestration.js.map +1 -1
- package/dist/research/workspace/acquisition.js +70 -5
- 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 -4
- 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 +203 -76
- 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 +82 -23
- 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,578 @@
|
|
|
1
|
+
import { DATA_MANIFEST_SCHEMA_VERSION } from "../contracts.js";
|
|
2
|
+
import { CsvParseError, parseCsvRows } from "../runtime/csv.js";
|
|
3
|
+
import { DataRuntimeError } from "../runtime/errors.js";
|
|
4
|
+
import { NASA_FIRMS_FIRE_INPUT_SCHEMA, NASA_FIRMS_FIRE_OUTPUT_SCHEMA, } from "./nasa-firms-fire.schemas.js";
|
|
5
|
+
const CREDENTIAL_PLACEHOLDER = "{map-key}";
|
|
6
|
+
const MAX_WINDOW_DAYS = 31;
|
|
7
|
+
const MAX_CHUNK_DAYS = 5;
|
|
8
|
+
const MAX_BBOX_SQUARE_DEGREES = 3_600;
|
|
9
|
+
const MAX_ESTIMATED_TRANSACTIONS = 250;
|
|
10
|
+
const MAX_VALIDATION_ISSUES = 50;
|
|
11
|
+
const REQUIRED_COLUMNS = ["latitude", "longitude", "acq_date", "acq_time"];
|
|
12
|
+
class IssueCollector {
|
|
13
|
+
count = 0;
|
|
14
|
+
issues = [];
|
|
15
|
+
add(path, message) {
|
|
16
|
+
this.count += 1;
|
|
17
|
+
if (this.issues.length < MAX_VALIDATION_ISSUES)
|
|
18
|
+
this.issues.push({ path, message });
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
export const nasaFirmsFireConnector = {
|
|
22
|
+
schemaVersion: DATA_MANIFEST_SCHEMA_VERSION,
|
|
23
|
+
capabilityId: "nasa-firms.active-fire",
|
|
24
|
+
capabilityVersion: "1.0.0",
|
|
25
|
+
minimumCliVersion: "0.0.55",
|
|
26
|
+
provider: {
|
|
27
|
+
providerId: "nasa-firms",
|
|
28
|
+
name: "NASA Fire Information for Resource Management System",
|
|
29
|
+
},
|
|
30
|
+
sourceCategory: "satellite-active-fire-detections",
|
|
31
|
+
endpoints: [
|
|
32
|
+
{
|
|
33
|
+
endpointId: "nasa-firms-api",
|
|
34
|
+
baseUrl: "https://firms.modaps.eosdis.nasa.gov",
|
|
35
|
+
pathPrefixes: ["/api/"],
|
|
36
|
+
allowedMethods: ["GET"],
|
|
37
|
+
allowedContentTypes: [
|
|
38
|
+
"application/json",
|
|
39
|
+
"application/octet-stream",
|
|
40
|
+
"text/csv",
|
|
41
|
+
"text/plain",
|
|
42
|
+
],
|
|
43
|
+
},
|
|
44
|
+
],
|
|
45
|
+
license: {
|
|
46
|
+
name: "NASA ESDIS Data Use and Citation Guidance",
|
|
47
|
+
url: "https://www.earthdata.nasa.gov/engage/open-data-services-software/data-use-policy",
|
|
48
|
+
restrictions: [
|
|
49
|
+
"Acknowledge NASA FIRMS and cite the exact underlying active-fire dataset used in published work.",
|
|
50
|
+
"Do not use NASA material in a way that suggests NASA endorsement of a product, service, or conclusion.",
|
|
51
|
+
"Non-NASA data distributed through ESDIS remain subject to the sponsoring organization's license and attribution terms.",
|
|
52
|
+
],
|
|
53
|
+
},
|
|
54
|
+
credentials: [
|
|
55
|
+
{
|
|
56
|
+
credentialId: "map-key",
|
|
57
|
+
environmentVariable: "NASA_FIRMS_MAP_KEY",
|
|
58
|
+
required: true,
|
|
59
|
+
endpointIds: ["nasa-firms-api"],
|
|
60
|
+
injection: { kind: "path-segment", placeholder: CREDENTIAL_PLACEHOLDER },
|
|
61
|
+
},
|
|
62
|
+
],
|
|
63
|
+
limits: {
|
|
64
|
+
timeoutMs: 60_000,
|
|
65
|
+
maxRequestBytes: 2_048,
|
|
66
|
+
maxResponseBytes: 30_000_000,
|
|
67
|
+
maxPages: 7,
|
|
68
|
+
maxRecords: 50_000,
|
|
69
|
+
maxRetries: 3,
|
|
70
|
+
maxRetryDelayMs: 300_000,
|
|
71
|
+
maxRedirects: 1,
|
|
72
|
+
},
|
|
73
|
+
diagnostics: { static: true, live: false },
|
|
74
|
+
freshness: {
|
|
75
|
+
kind: "source-dependent-near-real-time-or-standard-processing",
|
|
76
|
+
description: "NRT products prioritize low latency and are later replaced by Standard Processing products; SP availability typically lags by months and varies by sensor.",
|
|
77
|
+
},
|
|
78
|
+
limitations: [
|
|
79
|
+
"Active-fire points are satellite thermal-anomaly detections, not fire perimeters, burned-area estimates, incident identities, or proof of wildfire cause.",
|
|
80
|
+
"Cloud, smoke, canopy, overpass timing, sensor resolution, saturation, and algorithm behavior can cause omissions, duplicates, or false positives.",
|
|
81
|
+
"NRT records are provisional and replaced by science-quality Standard Processing records when available.",
|
|
82
|
+
"Confidence encoding and available attributes differ between MODIS, VIIRS, and Landsat products.",
|
|
83
|
+
"The MAP_KEY is subject to a provider quota of 5,000 transactions per 10-minute interval; large areas can consume multiple transactions.",
|
|
84
|
+
],
|
|
85
|
+
discovery: {
|
|
86
|
+
source: {
|
|
87
|
+
maintainedBy: "NASA LANCE Fire Information for Resource Management System",
|
|
88
|
+
summary: "Satellite-derived MODIS, VIIRS, and Landsat active-fire and thermal-anomaly point detections distributed by NASA FIRMS.",
|
|
89
|
+
description: "FIRMS area products report sensor detections of thermal anomalies or hotspots at satellite overpass time. A point can indicate wildfire, agricultural burning, gas flaring, volcanic activity, or another heat source and does not delineate a fire event or perimeter.",
|
|
90
|
+
coverage: {
|
|
91
|
+
geographic: "Source-dependent: most MODIS and VIIRS products are global, while LANDSAT_NRT is limited to the United States and Canada.",
|
|
92
|
+
temporal: "Source-dependent availability exposed by the provider; NRT and Standard Processing windows differ and evolve.",
|
|
93
|
+
granularity: "One satellite active-fire detection point with UTC acquisition minute and sensor-specific attributes.",
|
|
94
|
+
},
|
|
95
|
+
},
|
|
96
|
+
summary: "Retrieve bounded NASA FIRMS active-fire detections for one source, area, and UTC date window.",
|
|
97
|
+
description: "This capability checks an optional source-availability window, splits at most 31 dates into provider-compliant five-day area requests, safely injects one logical MAP_KEY, and normalizes common MODIS, VIIRS, or Landsat detection fields with chunk-level partial coverage.",
|
|
98
|
+
provides: [
|
|
99
|
+
"Bounded active-fire point detections with coordinates, UTC acquisition minute, source, satellite, instrument, confidence, version, and day/night indicator.",
|
|
100
|
+
"Common sensor measurements when present, including fire radiative power, footprint scan/track, and MODIS or VIIRS brightness fields.",
|
|
101
|
+
"Optional source date-availability validation and explicit per-chunk request, row, issue, and transaction-estimate summaries.",
|
|
102
|
+
"Partial results when a later chunk, row, required field, or sensor-specific optional value cannot be normalized safely.",
|
|
103
|
+
],
|
|
104
|
+
doesNotProvide: [
|
|
105
|
+
"Fire perimeters, burned area, incident polygons or names, containment, severity, alerts, evacuation guidance, or emergency response advice.",
|
|
106
|
+
"Proof that a hotspot is a wildfire, ignition-cause attribution, smoke transport, emissions, air quality, weather, or hydrology context.",
|
|
107
|
+
"Geocoding, country/world scans, antimeridian-crossing boxes, recurring monitoring, multi-source fusion, or duplicate-event resolution.",
|
|
108
|
+
"A MAP_KEY, quota increase, automatic source substitution, or permission to ignore dataset-specific citation and license terms.",
|
|
109
|
+
],
|
|
110
|
+
selectionHints: [
|
|
111
|
+
"Choose an NRT source for recent situational awareness and preserve its provisional status; choose the matching SP source for a more consistent historical analysis when available.",
|
|
112
|
+
"Prefer VIIRS for finer nominal active-fire spatial resolution and MODIS for its longer historical record; verify the exact source documentation for the selected product.",
|
|
113
|
+
"Use checkAvailability for historical windows whose source coverage is uncertain, accepting the additional provider transaction.",
|
|
114
|
+
"Confirm important detections with incident, perimeter, imagery, or local-authority sources before making operational or safety claims.",
|
|
115
|
+
],
|
|
116
|
+
typicalUseCases: [
|
|
117
|
+
"Retrieve active-fire hotspots for a known study area and short UTC date window.",
|
|
118
|
+
"Collect candidate thermal-anomaly points for separately governed ecological or emissions verification.",
|
|
119
|
+
],
|
|
120
|
+
sourceDocumentation: [
|
|
121
|
+
{
|
|
122
|
+
title: "NASA FIRMS Area API",
|
|
123
|
+
url: "https://firms.modaps.eosdis.nasa.gov/api/area/",
|
|
124
|
+
},
|
|
125
|
+
{
|
|
126
|
+
title: "NASA FIRMS API tutorial and MAP_KEY quotas",
|
|
127
|
+
url: "https://firms.modaps.eosdis.nasa.gov/content/academy/data_api/firms_api_use.html",
|
|
128
|
+
},
|
|
129
|
+
{
|
|
130
|
+
title: "NASA Earthdata Data Use and Citation Guidance",
|
|
131
|
+
url: "https://www.earthdata.nasa.gov/engage/open-data-services-software/data-use-policy",
|
|
132
|
+
},
|
|
133
|
+
],
|
|
134
|
+
},
|
|
135
|
+
operations: [
|
|
136
|
+
{
|
|
137
|
+
operationId: "fetch-area",
|
|
138
|
+
operationVersion: "1.0.0",
|
|
139
|
+
summary: "Fetch one bounded UTC window of NASA FIRMS area active-fire detections.",
|
|
140
|
+
description: "Builds optional availability plus one to seven five-day-or-shorter CSV requests for a single reviewed source and bounded box, then normalizes common detection attributes under credential, byte, retry, transaction, chunk, and record limits.",
|
|
141
|
+
inputSchema: NASA_FIRMS_FIRE_INPUT_SCHEMA,
|
|
142
|
+
outputSchema: NASA_FIRMS_FIRE_OUTPUT_SCHEMA,
|
|
143
|
+
execute: executeNasaFirmsFire,
|
|
144
|
+
},
|
|
145
|
+
],
|
|
146
|
+
};
|
|
147
|
+
async function executeNasaFirmsFire(context) {
|
|
148
|
+
const input = normalizeInput(context.input, context.limits.maxPages);
|
|
149
|
+
const observations = [];
|
|
150
|
+
let availability = null;
|
|
151
|
+
if (input.checkAvailability) {
|
|
152
|
+
const response = await context.http.request({
|
|
153
|
+
endpointId: "nasa-firms-api",
|
|
154
|
+
method: "GET",
|
|
155
|
+
path: `/api/data_availability/csv/${CREDENTIAL_PLACEHOLDER}/${input.source}`,
|
|
156
|
+
credentialId: "map-key",
|
|
157
|
+
});
|
|
158
|
+
observations.push({ ...response.observation, sourceId: `availability:${input.source}` });
|
|
159
|
+
availability = parseAvailability(response.text(), input);
|
|
160
|
+
}
|
|
161
|
+
const collector = new IssueCollector();
|
|
162
|
+
const chunks = [];
|
|
163
|
+
const records = [];
|
|
164
|
+
const missingChunks = [];
|
|
165
|
+
const failures = [];
|
|
166
|
+
let canonicalHeader = null;
|
|
167
|
+
let truncated = false;
|
|
168
|
+
for (const plan of input.chunks) {
|
|
169
|
+
const range = `${plan.startDate}..${plan.endDate}`;
|
|
170
|
+
try {
|
|
171
|
+
const response = await context.http.request({
|
|
172
|
+
endpointId: "nasa-firms-api",
|
|
173
|
+
method: "GET",
|
|
174
|
+
path: areaPath(input, plan),
|
|
175
|
+
credentialId: "map-key",
|
|
176
|
+
});
|
|
177
|
+
observations.push({ ...response.observation, sourceId: `area:${range}` });
|
|
178
|
+
const parsed = parseFireChunk(response.text(), input, plan, collector, records.length);
|
|
179
|
+
const chunkIssues = [...parsed.issues];
|
|
180
|
+
if (canonicalHeader === null && parsed.validHeader)
|
|
181
|
+
canonicalHeader = parsed.header;
|
|
182
|
+
if (canonicalHeader !== null &&
|
|
183
|
+
parsed.validHeader &&
|
|
184
|
+
!sameStrings(canonicalHeader, parsed.header)) {
|
|
185
|
+
const path = `chunks[${plan.chunkIndex}].header`;
|
|
186
|
+
collector.add(path, "Chunk header differs from the first valid chunk header.");
|
|
187
|
+
chunkIssues.push("Chunk header differs from the first valid chunk header.");
|
|
188
|
+
}
|
|
189
|
+
const remaining = Math.max(0, context.limits.maxRecords - records.length);
|
|
190
|
+
const emitted = parsed.records.slice(0, remaining);
|
|
191
|
+
records.push(...emitted);
|
|
192
|
+
truncated ||= emitted.length < parsed.records.length;
|
|
193
|
+
chunks.push({
|
|
194
|
+
...plan,
|
|
195
|
+
status: parsed.validHeader ? "ok" : "invalid",
|
|
196
|
+
responseBytes: response.observation.responseBytes,
|
|
197
|
+
inputRows: parsed.inputRows,
|
|
198
|
+
emittedRecords: emitted.length,
|
|
199
|
+
issues: chunkIssues.slice(0, MAX_VALIDATION_ISSUES),
|
|
200
|
+
});
|
|
201
|
+
if (!parsed.validHeader)
|
|
202
|
+
missingChunks.push(range);
|
|
203
|
+
if (truncated || records.length >= context.limits.maxRecords)
|
|
204
|
+
break;
|
|
205
|
+
}
|
|
206
|
+
catch (error) {
|
|
207
|
+
if (error instanceof DataRuntimeError &&
|
|
208
|
+
["credential-invalid", "credential-missing", "provider-auth-blocked"].includes(error.code)) {
|
|
209
|
+
throw error;
|
|
210
|
+
}
|
|
211
|
+
failures.push(error);
|
|
212
|
+
missingChunks.push(range);
|
|
213
|
+
chunks.push({
|
|
214
|
+
...plan,
|
|
215
|
+
status: "failed",
|
|
216
|
+
responseBytes: 0,
|
|
217
|
+
inputRows: 0,
|
|
218
|
+
emittedRecords: 0,
|
|
219
|
+
issues: ["The FIRMS area chunk could not be retrieved or normalized."],
|
|
220
|
+
});
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
const invalidPaths = collector.issues.map((issue) => issue.path);
|
|
224
|
+
const partial = missingChunks.length > 0 || collector.count > 0;
|
|
225
|
+
const errors = partial
|
|
226
|
+
? [
|
|
227
|
+
{
|
|
228
|
+
code: "partial-result",
|
|
229
|
+
message: "One or more NASA FIRMS chunks, rows, required fields, or sensor attributes could not be normalized.",
|
|
230
|
+
retryable: failures.some((failure) => failure instanceof DataRuntimeError && (failure.options.retryable ?? false)),
|
|
231
|
+
userActionRequired: false,
|
|
232
|
+
details: { missingChunks, invalidPaths },
|
|
233
|
+
},
|
|
234
|
+
]
|
|
235
|
+
: [];
|
|
236
|
+
const stopReason = partial
|
|
237
|
+
? "partial"
|
|
238
|
+
: truncated
|
|
239
|
+
? "max-records"
|
|
240
|
+
: records.length === 0
|
|
241
|
+
? "no-results"
|
|
242
|
+
: "completed";
|
|
243
|
+
const missing = [
|
|
244
|
+
...(missingChunks.length > 0 ? [{ kind: "chunk", identifiers: missingChunks }] : []),
|
|
245
|
+
...(invalidPaths.length > 0 ? [{ kind: "field", identifiers: invalidPaths }] : []),
|
|
246
|
+
];
|
|
247
|
+
return {
|
|
248
|
+
status: partial ? "partial" : "success",
|
|
249
|
+
data: {
|
|
250
|
+
source: {
|
|
251
|
+
providerId: "nasa-firms",
|
|
252
|
+
service: "Fire Information for Resource Management System",
|
|
253
|
+
endpoint: "/api/area/csv",
|
|
254
|
+
activeFireDetections: true,
|
|
255
|
+
timezone: "UTC",
|
|
256
|
+
},
|
|
257
|
+
request: requestProjection(input),
|
|
258
|
+
availability,
|
|
259
|
+
validation: { issueCount: collector.count, issues: collector.issues },
|
|
260
|
+
chunks,
|
|
261
|
+
records,
|
|
262
|
+
stopReason,
|
|
263
|
+
},
|
|
264
|
+
summary: {
|
|
265
|
+
recordCount: records.length,
|
|
266
|
+
pageCount: input.checkAvailability ? 1 : 0,
|
|
267
|
+
chunkCount: chunks.length,
|
|
268
|
+
truncated,
|
|
269
|
+
completeness: partial ? "partial" : "complete",
|
|
270
|
+
...(missing.length > 0 ? { missing } : {}),
|
|
271
|
+
},
|
|
272
|
+
warnings: [
|
|
273
|
+
"NASA FIRMS points are satellite thermal-anomaly detections, not fire perimeters or confirmed incident identities.",
|
|
274
|
+
input.source.endsWith("_NRT")
|
|
275
|
+
? "The selected NRT source is provisional and is replaced by Standard Processing data when available."
|
|
276
|
+
: "The selected Standard Processing source is better calibrated but has a longer availability delay.",
|
|
277
|
+
"Acknowledge NASA FIRMS and cite the exact underlying active-fire dataset used.",
|
|
278
|
+
...(truncated ? ["The normalized detection set reached the record limit."] : []),
|
|
279
|
+
],
|
|
280
|
+
errors,
|
|
281
|
+
observations,
|
|
282
|
+
};
|
|
283
|
+
}
|
|
284
|
+
function normalizeInput(input, maxPages) {
|
|
285
|
+
const start = parseExactDate(input.startDate, "startDate");
|
|
286
|
+
const end = parseExactDate(input.endDate, "endDate");
|
|
287
|
+
if (start.getTime() > end.getTime()) {
|
|
288
|
+
throw new DataRuntimeError("invalid-request", "startDate must not follow endDate.");
|
|
289
|
+
}
|
|
290
|
+
const dayCount = Math.floor((end.getTime() - start.getTime()) / 86_400_000) + 1;
|
|
291
|
+
if (dayCount > MAX_WINDOW_DAYS) {
|
|
292
|
+
throw new DataRuntimeError("invalid-request", `The inclusive NASA FIRMS date window must not exceed ${MAX_WINDOW_DAYS} days.`, { details: { dayCount, maximumWindowDays: MAX_WINDOW_DAYS } });
|
|
293
|
+
}
|
|
294
|
+
const boundingBox = { ...input.boundingBox };
|
|
295
|
+
if (boundingBox.east <= boundingBox.west || boundingBox.north <= boundingBox.south) {
|
|
296
|
+
throw new DataRuntimeError("invalid-request", "NASA FIRMS bounding-box west/south values must be lower than east/north values.");
|
|
297
|
+
}
|
|
298
|
+
const squareDegrees = (boundingBox.east - boundingBox.west) * (boundingBox.north - boundingBox.south);
|
|
299
|
+
if (squareDegrees > MAX_BBOX_SQUARE_DEGREES) {
|
|
300
|
+
throw new DataRuntimeError("invalid-request", "NASA FIRMS world-scale or excessively broad bounding-box scans are not allowed.", { details: { squareDegrees, maximumSquareDegrees: MAX_BBOX_SQUARE_DEGREES } });
|
|
301
|
+
}
|
|
302
|
+
const chunks = planChunks(start, end, input.source, boundingBox);
|
|
303
|
+
if (chunks.length > Math.min(7, maxPages)) {
|
|
304
|
+
throw new DataRuntimeError("invalid-request", "The NASA FIRMS date window exceeds the effective chunk limit.", { details: { chunkCount: chunks.length, maximumChunks: Math.min(7, maxPages) } });
|
|
305
|
+
}
|
|
306
|
+
const estimatedTransactions = chunks.reduce((total, chunk) => total + chunk.estimatedTransactions, 0);
|
|
307
|
+
if (estimatedTransactions > MAX_ESTIMATED_TRANSACTIONS) {
|
|
308
|
+
throw new DataRuntimeError("invalid-request", "The estimated NASA FIRMS transaction weight exceeds the per-run safety limit.", {
|
|
309
|
+
details: {
|
|
310
|
+
estimatedTransactions,
|
|
311
|
+
maximumEstimatedTransactions: MAX_ESTIMATED_TRANSACTIONS,
|
|
312
|
+
},
|
|
313
|
+
});
|
|
314
|
+
}
|
|
315
|
+
return {
|
|
316
|
+
source: input.source,
|
|
317
|
+
boundingBox,
|
|
318
|
+
startDate: input.startDate,
|
|
319
|
+
endDate: input.endDate,
|
|
320
|
+
checkAvailability: input.checkAvailability,
|
|
321
|
+
dayCount,
|
|
322
|
+
chunkCount: chunks.length,
|
|
323
|
+
estimatedTransactions,
|
|
324
|
+
chunks,
|
|
325
|
+
};
|
|
326
|
+
}
|
|
327
|
+
function parseExactDate(value, field) {
|
|
328
|
+
const parsed = new Date(`${value}T00:00:00Z`);
|
|
329
|
+
if (!Number.isFinite(parsed.getTime()) || parsed.toISOString().slice(0, 10) !== value) {
|
|
330
|
+
throw new DataRuntimeError("invalid-request", `${field} must be a real YYYY-MM-DD date.`);
|
|
331
|
+
}
|
|
332
|
+
return parsed;
|
|
333
|
+
}
|
|
334
|
+
function planChunks(start, end, source, boundingBox) {
|
|
335
|
+
const chunks = [];
|
|
336
|
+
for (let cursor = start.getTime(); cursor <= end.getTime();) {
|
|
337
|
+
const endTime = Math.min(cursor + (MAX_CHUNK_DAYS - 1) * 86_400_000, end.getTime());
|
|
338
|
+
const dayCount = Math.floor((endTime - cursor) / 86_400_000) + 1;
|
|
339
|
+
chunks.push({
|
|
340
|
+
chunkIndex: chunks.length,
|
|
341
|
+
startDate: new Date(cursor).toISOString().slice(0, 10),
|
|
342
|
+
endDate: new Date(endTime).toISOString().slice(0, 10),
|
|
343
|
+
dayCount,
|
|
344
|
+
estimatedTransactions: estimateTransactions(source, boundingBox, dayCount),
|
|
345
|
+
});
|
|
346
|
+
cursor = endTime + 86_400_000;
|
|
347
|
+
}
|
|
348
|
+
return chunks;
|
|
349
|
+
}
|
|
350
|
+
function estimateTransactions(source, boundingBox, dayCount) {
|
|
351
|
+
const sourceWeight = source.includes("VIIRS") ? 2 : 0.5;
|
|
352
|
+
const longitudeTiles = Math.max(1, Math.ceil((boundingBox.east - boundingBox.west) / 60));
|
|
353
|
+
const latitudeTiles = Math.max(1, Math.ceil((boundingBox.north - boundingBox.south) / 60));
|
|
354
|
+
return Math.ceil(longitudeTiles * latitudeTiles * sourceWeight * dayCount);
|
|
355
|
+
}
|
|
356
|
+
function areaPath(input, chunk) {
|
|
357
|
+
const box = input.boundingBox;
|
|
358
|
+
const area = [box.west, box.south, box.east, box.north].map(formatCoordinate).join(",");
|
|
359
|
+
return `/api/area/csv/${CREDENTIAL_PLACEHOLDER}/${input.source}/${area}/${chunk.dayCount}/${chunk.startDate}`;
|
|
360
|
+
}
|
|
361
|
+
function formatCoordinate(value) {
|
|
362
|
+
return Object.is(value, -0) ? "0" : String(value);
|
|
363
|
+
}
|
|
364
|
+
function parseAvailability(text, input) {
|
|
365
|
+
assertCredentialAccepted(text);
|
|
366
|
+
const table = parseCsv(text, "NASA FIRMS availability");
|
|
367
|
+
if (table.length === 0) {
|
|
368
|
+
throw providerInvalid("NASA FIRMS availability response is empty.");
|
|
369
|
+
}
|
|
370
|
+
const header = normalizeHeader(table[0]);
|
|
371
|
+
for (const required of ["data_id", "min_date", "max_date"]) {
|
|
372
|
+
if (!header.includes(required)) {
|
|
373
|
+
throw providerInvalid(`NASA FIRMS availability response is missing ${required}.`);
|
|
374
|
+
}
|
|
375
|
+
}
|
|
376
|
+
const rows = table.slice(1).filter(nonEmptyRow);
|
|
377
|
+
const matches = rows.filter((row) => row[header.indexOf("data_id")] === input.source);
|
|
378
|
+
if (matches.length !== 1) {
|
|
379
|
+
throw providerInvalid("NASA FIRMS availability response did not identify one selected source.");
|
|
380
|
+
}
|
|
381
|
+
const row = matches[0];
|
|
382
|
+
const minDate = providerDate(row[header.indexOf("min_date")], "availability min_date");
|
|
383
|
+
const maxDate = providerDate(row[header.indexOf("max_date")], "availability max_date");
|
|
384
|
+
if (input.startDate < minDate || input.endDate > maxDate) {
|
|
385
|
+
throw new DataRuntimeError("invalid-request", "The requested NASA FIRMS window is outside the provider-advertised source availability.", { details: { source: input.source, minDate, maxDate } });
|
|
386
|
+
}
|
|
387
|
+
return { source: input.source, minDate, maxDate };
|
|
388
|
+
}
|
|
389
|
+
function parseFireChunk(text, input, plan, collector, recordOffset) {
|
|
390
|
+
assertCredentialAccepted(text);
|
|
391
|
+
const table = parseCsv(text, "NASA FIRMS area response");
|
|
392
|
+
if (table.length === 0)
|
|
393
|
+
throw providerInvalid("NASA FIRMS area CSV is empty.");
|
|
394
|
+
const header = normalizeHeader(table[0]);
|
|
395
|
+
const missingHeaders = REQUIRED_COLUMNS.filter((column) => !header.includes(column));
|
|
396
|
+
if (missingHeaders.length > 0) {
|
|
397
|
+
return {
|
|
398
|
+
records: [],
|
|
399
|
+
inputRows: Math.max(0, table.length - 1),
|
|
400
|
+
issues: [`Required CSV columns are missing: ${missingHeaders.join(", ")}.`],
|
|
401
|
+
validHeader: false,
|
|
402
|
+
header,
|
|
403
|
+
};
|
|
404
|
+
}
|
|
405
|
+
const issues = [];
|
|
406
|
+
const duplicateHeaders = [
|
|
407
|
+
...new Set(header.filter((name, index) => header.indexOf(name) !== index)),
|
|
408
|
+
]
|
|
409
|
+
.filter((name) => name.length > 0)
|
|
410
|
+
.sort();
|
|
411
|
+
if (duplicateHeaders.length > 0) {
|
|
412
|
+
const message = `CSV header has duplicate columns: ${duplicateHeaders.join(", ")}.`;
|
|
413
|
+
collector.add(`chunks[${plan.chunkIndex}].header`, message);
|
|
414
|
+
addIssue(issues, message);
|
|
415
|
+
}
|
|
416
|
+
const records = [];
|
|
417
|
+
const rows = table.slice(1).filter(nonEmptyRow);
|
|
418
|
+
for (let rowIndex = 0; rowIndex < rows.length; rowIndex += 1) {
|
|
419
|
+
const values = rows[rowIndex];
|
|
420
|
+
const rowPath = `chunks[${plan.chunkIndex}].rows[${rowIndex}]`;
|
|
421
|
+
if (values.length !== header.length) {
|
|
422
|
+
const message = `CSV row has ${values.length} values for ${header.length} headers.`;
|
|
423
|
+
collector.add(rowPath, message);
|
|
424
|
+
addIssue(issues, message);
|
|
425
|
+
continue;
|
|
426
|
+
}
|
|
427
|
+
const row = Object.fromEntries(header.map((name, index) => [name, values[index] ?? ""]));
|
|
428
|
+
const normalized = normalizeFireRow(row, rowPath, input, plan, recordOffset + records.length, collector, issues);
|
|
429
|
+
if (normalized)
|
|
430
|
+
records.push(normalized);
|
|
431
|
+
}
|
|
432
|
+
return { records, inputRows: rows.length, issues, validHeader: true, header };
|
|
433
|
+
}
|
|
434
|
+
function assertCredentialAccepted(text) {
|
|
435
|
+
if (!/map[_ ]?key.*(?:invalid|required)|invalid.*map[_ ]?key/i.test(text.slice(0, 512)))
|
|
436
|
+
return;
|
|
437
|
+
throw new DataRuntimeError("credential-invalid", "NASA FIRMS rejected the configured logical MAP_KEY credential.", { userActionRequired: true, details: { credentialId: "map-key" } });
|
|
438
|
+
}
|
|
439
|
+
function normalizeFireRow(row, path, input, plan, recordIndex, collector, issues) {
|
|
440
|
+
const latitude = requiredProviderNumber(row.latitude);
|
|
441
|
+
if (latitude === null ||
|
|
442
|
+
latitude < input.boundingBox.south ||
|
|
443
|
+
latitude > input.boundingBox.north) {
|
|
444
|
+
addFieldIssue(collector, issues, `${path}.latitude`, "Latitude is invalid or outside the requested bounding box.");
|
|
445
|
+
return null;
|
|
446
|
+
}
|
|
447
|
+
const longitude = requiredProviderNumber(row.longitude);
|
|
448
|
+
if (longitude === null ||
|
|
449
|
+
longitude < input.boundingBox.west ||
|
|
450
|
+
longitude > input.boundingBox.east) {
|
|
451
|
+
addFieldIssue(collector, issues, `${path}.longitude`, "Longitude is invalid or outside the requested bounding box.");
|
|
452
|
+
return null;
|
|
453
|
+
}
|
|
454
|
+
const acquisitionDate = exactProviderDate(row.acq_date);
|
|
455
|
+
if (acquisitionDate === null ||
|
|
456
|
+
acquisitionDate < input.startDate ||
|
|
457
|
+
acquisitionDate > input.endDate ||
|
|
458
|
+
acquisitionDate < plan.startDate ||
|
|
459
|
+
acquisitionDate > plan.endDate) {
|
|
460
|
+
addFieldIssue(collector, issues, `${path}.acq_date`, "Acquisition date is invalid or outside the requested chunk.");
|
|
461
|
+
return null;
|
|
462
|
+
}
|
|
463
|
+
const acquisitionTime = normalizeAcquisitionTime(row.acq_time);
|
|
464
|
+
if (acquisitionTime === null) {
|
|
465
|
+
addFieldIssue(collector, issues, `${path}.acq_time`, "Acquisition time must be a valid HHMM UTC minute.");
|
|
466
|
+
return null;
|
|
467
|
+
}
|
|
468
|
+
const optional = (field, label) => {
|
|
469
|
+
const value = optionalProviderNumber(row[field]);
|
|
470
|
+
if (value === "invalid") {
|
|
471
|
+
addFieldIssue(collector, issues, `${path}.${field}`, `${label} must be numeric when present.`);
|
|
472
|
+
return null;
|
|
473
|
+
}
|
|
474
|
+
return value;
|
|
475
|
+
};
|
|
476
|
+
const rawDayNight = cleanText(row.daynight);
|
|
477
|
+
const dayNight = rawDayNight === "D" || rawDayNight === "N" ? rawDayNight : null;
|
|
478
|
+
if (rawDayNight && dayNight === null) {
|
|
479
|
+
addFieldIssue(collector, issues, `${path}.daynight`, "daynight must be D or N when present.");
|
|
480
|
+
}
|
|
481
|
+
return {
|
|
482
|
+
recordIndex,
|
|
483
|
+
chunkIndex: plan.chunkIndex,
|
|
484
|
+
source: input.source,
|
|
485
|
+
latitude,
|
|
486
|
+
longitude,
|
|
487
|
+
acquiredAtUtc: `${acquisitionDate}T${acquisitionTime.slice(0, 2)}:${acquisitionTime.slice(2)}:00Z`,
|
|
488
|
+
satellite: nullableText(row.satellite),
|
|
489
|
+
instrument: nullableText(row.instrument),
|
|
490
|
+
confidence: nullableText(row.confidence),
|
|
491
|
+
version: nullableText(row.version),
|
|
492
|
+
dayNight,
|
|
493
|
+
fireRadiativePowerMw: optional("frp", "Fire radiative power"),
|
|
494
|
+
scanKm: optional("scan", "Scan footprint"),
|
|
495
|
+
trackKm: optional("track", "Track footprint"),
|
|
496
|
+
brightnessKelvin: optional("brightness", "MODIS brightness"),
|
|
497
|
+
brightT31Kelvin: optional("bright_t31", "MODIS band-31 brightness"),
|
|
498
|
+
brightTi4Kelvin: optional("bright_ti4", "VIIRS I4 brightness"),
|
|
499
|
+
brightTi5Kelvin: optional("bright_ti5", "VIIRS I5 brightness"),
|
|
500
|
+
};
|
|
501
|
+
}
|
|
502
|
+
function parseCsv(text, label) {
|
|
503
|
+
try {
|
|
504
|
+
return parseCsvRows(text);
|
|
505
|
+
}
|
|
506
|
+
catch (error) {
|
|
507
|
+
throw providerInvalid(error instanceof CsvParseError
|
|
508
|
+
? `${label}: ${error.message}`
|
|
509
|
+
: `${label} could not be parsed.`);
|
|
510
|
+
}
|
|
511
|
+
}
|
|
512
|
+
function normalizeHeader(values) {
|
|
513
|
+
return values.map((value, index) => (index === 0 ? value.replace(/^\uFEFF/, "") : value).trim().toLowerCase());
|
|
514
|
+
}
|
|
515
|
+
function nonEmptyRow(row) {
|
|
516
|
+
return row.some((value) => value.trim().length > 0);
|
|
517
|
+
}
|
|
518
|
+
function providerDate(value, label) {
|
|
519
|
+
const parsed = exactProviderDate(value);
|
|
520
|
+
if (parsed === null)
|
|
521
|
+
throw providerInvalid(`${label} must be a real YYYY-MM-DD date.`);
|
|
522
|
+
return parsed;
|
|
523
|
+
}
|
|
524
|
+
function exactProviderDate(value) {
|
|
525
|
+
const text = cleanText(value);
|
|
526
|
+
if (!/^\d{4}-\d{2}-\d{2}$/.test(text))
|
|
527
|
+
return null;
|
|
528
|
+
const parsed = new Date(`${text}T00:00:00Z`);
|
|
529
|
+
return Number.isFinite(parsed.getTime()) && parsed.toISOString().slice(0, 10) === text
|
|
530
|
+
? text
|
|
531
|
+
: null;
|
|
532
|
+
}
|
|
533
|
+
function normalizeAcquisitionTime(value) {
|
|
534
|
+
const text = cleanText(value);
|
|
535
|
+
if (!/^\d{1,4}$/.test(text))
|
|
536
|
+
return null;
|
|
537
|
+
const padded = text.padStart(4, "0");
|
|
538
|
+
const hour = Number(padded.slice(0, 2));
|
|
539
|
+
const minute = Number(padded.slice(2));
|
|
540
|
+
return hour <= 23 && minute <= 59 ? padded : null;
|
|
541
|
+
}
|
|
542
|
+
function requiredProviderNumber(value) {
|
|
543
|
+
const text = cleanText(value);
|
|
544
|
+
const parsed = Number(text);
|
|
545
|
+
return text.length > 0 && Number.isFinite(parsed) ? parsed : null;
|
|
546
|
+
}
|
|
547
|
+
function optionalProviderNumber(value) {
|
|
548
|
+
const text = cleanText(value);
|
|
549
|
+
if (!text)
|
|
550
|
+
return null;
|
|
551
|
+
const parsed = Number(text);
|
|
552
|
+
return Number.isFinite(parsed) ? parsed : "invalid";
|
|
553
|
+
}
|
|
554
|
+
function nullableText(value) {
|
|
555
|
+
return cleanText(value) || null;
|
|
556
|
+
}
|
|
557
|
+
function cleanText(value) {
|
|
558
|
+
return value?.trim() ?? "";
|
|
559
|
+
}
|
|
560
|
+
function addFieldIssue(collector, chunkIssues, path, message) {
|
|
561
|
+
collector.add(path, message);
|
|
562
|
+
addIssue(chunkIssues, message);
|
|
563
|
+
}
|
|
564
|
+
function addIssue(issues, message) {
|
|
565
|
+
if (issues.length < MAX_VALIDATION_ISSUES && !issues.includes(message))
|
|
566
|
+
issues.push(message);
|
|
567
|
+
}
|
|
568
|
+
function requestProjection(input) {
|
|
569
|
+
const { chunks: _chunks, ...projection } = input;
|
|
570
|
+
return projection;
|
|
571
|
+
}
|
|
572
|
+
function sameStrings(left, right) {
|
|
573
|
+
return left.length === right.length && left.every((value, index) => value === right[index]);
|
|
574
|
+
}
|
|
575
|
+
function providerInvalid(message) {
|
|
576
|
+
return new DataRuntimeError("provider-response-invalid", message);
|
|
577
|
+
}
|
|
578
|
+
//# sourceMappingURL=nasa-firms-fire.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nasa-firms-fire.js","sourceRoot":"","sources":["../../../src/data/connectors/nasa-firms-fire.ts"],"names":[],"mappings":"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"}
|