Skip to content

Commit b102ec1

Browse files
feat: metar/taf endpoints
1 parent a0c0dc8 commit b102ec1

19 files changed

+284
-0
lines changed

packages/app/src/types.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,5 @@ export enum Scope {
33
"FMSDATA" = "fmsdata",
44
"TILES" = "tiles",
55
"AMDB" = "amdb",
6+
"WEATHER" = "weather",
67
}

packages/weather/CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
# @navigraph/weather
2+
3+
## 0.0.1

packages/weather/README.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
# @navigraph/weather
2+
3+
This package is part of the Navigraph SDK, and is intended to be used in conjuction with other SDK modules.
4+
See the [navigraph](https://www.npmjs.com/package/navigraph) package for usage.
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
{
2+
"replace": {
3+
"main": "dist/index.cjs.js",
4+
"module": "dist/index.esm.js",
5+
"types": "dist/index.d.ts",
6+
"exports": {
7+
".": {
8+
"import": "./dist/index.esm.js",
9+
"require": "./dist/index.cjs.js"
10+
},
11+
"./package.json": "./package.json"
12+
}
13+
}
14+
}

packages/weather/jest.config.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
/** @type {import("ts-jest").JestConfigWithTsJest} */
2+
module.exports = {
3+
displayName: "Charts",
4+
preset: "ts-jest",
5+
};

packages/weather/package.json

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
{
2+
"name": "@navigraph/weather",
3+
"version": "0.0.1",
4+
"license": "MIT",
5+
"description": "Allows interaction with the Navigraph Weather API as part of the Navigraph SDK",
6+
"author": "Navigraph <[email protected]> (https://navigraph.com)",
7+
"homepage": "https://navigraph.com",
8+
"repository": {
9+
"type": "git",
10+
"url": "https://github.com/Navigraph/navigraph-js-sdk",
11+
"directory": "packages/weather"
12+
},
13+
"keywords": [
14+
"navigraph",
15+
"weather",
16+
"sdk"
17+
],
18+
"main": "./src/index.ts",
19+
"private": false,
20+
"sideEffects": false,
21+
"files": [
22+
"dist/**"
23+
],
24+
"publishConfig": {
25+
"access": "public"
26+
},
27+
"scripts": {
28+
"build": "tsup src/index.ts --dts",
29+
"dev": "tsup src/index.ts --watch --sourcemap inline",
30+
"lint": "eslint \"src/**/*.ts\"",
31+
"clean": "rimraf .turbo node_modules dist",
32+
"prepack": "clean-package",
33+
"postpack": "clean-package restore"
34+
},
35+
"dependencies": {
36+
"@navigraph/app": "1.3.5",
37+
"@navigraph/auth": "2.5.1",
38+
"geojson": "^0.5.0",
39+
"metar-taf-parser": "^9.0.1"
40+
}
41+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
import { Logger } from "@navigraph/app"
2+
import { isAxiosError, navigraphRequest } from "@navigraph/auth"
3+
import { Position } from "geojson"
4+
import { getRouteApiRoot } from "../constants"
5+
import { Metar, Taf } from "./types"
6+
7+
export default async function getReportsAlongRoute<T extends "metar" | "taf">(
8+
path: Position[],
9+
type: T,
10+
range?: number,
11+
) {
12+
type ReportType = T extends "metar" ? Metar : T extends "taf" ? Taf : never
13+
14+
const result = await navigraphRequest
15+
.get<ReportType[]>(getRouteApiRoot(), {
16+
params: {
17+
path: path.map(position => position.join(",")).join(";"),
18+
type,
19+
range,
20+
},
21+
})
22+
.catch((e: unknown) =>
23+
Logger.err("Failed to fetch weather reports along route. Reason:", isAxiosError(e) ? e.message : e),
24+
)
25+
26+
return result?.data || null
27+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import { Logger } from "@navigraph/app"
2+
import { isAxiosError, navigraphRequest } from "@navigraph/auth"
3+
import { getMetarApiRoot } from "../../constants"
4+
import { Metar } from "../types"
5+
6+
export default async function getMetarAtAirport(icao: string) {
7+
const result = await navigraphRequest
8+
.get<Metar>(`${getMetarApiRoot()}/${icao}`)
9+
.catch((e: unknown) => Logger.err(`Failed to fetch METAR for ${icao}. Reason:`, isAxiosError(e) ? e.message : e))
10+
11+
return result?.data || null
12+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
import { Logger } from "@navigraph/app"
2+
import { isAxiosError, navigraphRequest } from "@navigraph/auth"
3+
import { getMetarApiRoot } from "../../constants"
4+
import { Metar } from "../types"
5+
6+
export default async function getMetarsAroundPoint(
7+
latitude: number,
8+
longitude: number,
9+
radius?: number,
10+
limit?: number,
11+
) {
12+
const result = await navigraphRequest
13+
.get<Metar[]>(`${getMetarApiRoot()}/around/${latitude}/${longitude}`, {
14+
params: {
15+
radius,
16+
limit,
17+
},
18+
})
19+
.catch((e: unknown) =>
20+
Logger.err(`Failed to fetch METARs around (${latitude}, ${longitude}). Reason:`, isAxiosError(e) ? e.message : e),
21+
)
22+
23+
return result?.data || null
24+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import { Logger } from "@navigraph/app"
2+
import { isAxiosError, navigraphRequest } from "@navigraph/auth"
3+
import { getMetarApiRoot } from "../../constants"
4+
import { Metar } from "../types"
5+
6+
export default async function getMetarsAtAirport(icao: string) {
7+
const result = await navigraphRequest
8+
.get<Metar[]>(`${getMetarApiRoot()}/multi/${icao}`)
9+
.catch((e: unknown) => Logger.err(`Failed to fetch METARs for ${icao}. Reason:`, isAxiosError(e) ? e.message : e))
10+
11+
return result?.data || null
12+
}

0 commit comments

Comments
 (0)