open-meteo-mcp-server 1.6.0 → 1.6.1
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/README.md +32 -1
- package/dist/client.d.ts +2 -0
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +85 -51
- package/dist/client.js.map +1 -1
- package/dist/security.d.ts +0 -10
- package/dist/security.d.ts.map +1 -1
- package/dist/security.js +7 -1
- package/dist/security.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -150,7 +150,8 @@ If you're using your own Open-Meteo instance:
|
|
|
150
150
|
"OPEN_METEO_SEASONAL_API_URL": "https://seasonal-api.example.com",
|
|
151
151
|
"OPEN_METEO_ENSEMBLE_API_URL": "https://ensemble-api.example.com",
|
|
152
152
|
"OPEN_METEO_GEOCODING_API_URL": "https://geocoding-api.example.com",
|
|
153
|
-
"OPEN_METEO_FLOOD_API_URL": "https://flood-api.example.com"
|
|
153
|
+
"OPEN_METEO_FLOOD_API_URL": "https://flood-api.example.com",
|
|
154
|
+
"OPEN_METEO_CLIMATE_API_URL": "https://climate-api.example.com"
|
|
154
155
|
}
|
|
155
156
|
}
|
|
156
157
|
}
|
|
@@ -303,6 +304,36 @@ All environment variables are optional and have sensible defaults:
|
|
|
303
304
|
- `RATE_LIMIT_RPM` - Maximum requests per minute per IP (default: `60`). HTTP transport only.
|
|
304
305
|
- `TRUSTED_PROXIES` - Comma-separated list of trusted proxy IPs or CIDR ranges (e.g. `10.0.0.0/8,172.16.0.0/12`). When set, `X-Forwarded-For` is honoured only for requests originating from these addresses. Leave unset to always use the direct connection IP.
|
|
305
306
|
|
|
307
|
+
## Skills
|
|
308
|
+
|
|
309
|
+
The `skills/` directory contains SKILL.md files that help AI assistants use this MCP server effectively. They act as contextual guides — the AI reads the relevant skill to know which tool to call and how to use its parameters.
|
|
310
|
+
|
|
311
|
+
### Available skills
|
|
312
|
+
|
|
313
|
+
| Skill | File | Best for |
|
|
314
|
+
|-------|------|----------|
|
|
315
|
+
| `open-meteo` | `skills/open-meteo/SKILL.md` | Everyday weather: forecasts, historical data, air quality, marine conditions, elevation |
|
|
316
|
+
| `open-meteo-advanced` | `skills/open-meteo-advanced/SKILL.md` | Specific models (ECMWF, GFS, DWD ICON…), ensemble uncertainty, seasonal outlooks, climate projections |
|
|
317
|
+
|
|
318
|
+
### Using with Claude Code (CLI)
|
|
319
|
+
|
|
320
|
+
Copy the skill(s) to your Claude skills directory:
|
|
321
|
+
|
|
322
|
+
```bash
|
|
323
|
+
cp -r skills/open-meteo ~/.claude/skills/
|
|
324
|
+
cp -r skills/open-meteo-advanced ~/.claude/skills/
|
|
325
|
+
```
|
|
326
|
+
|
|
327
|
+
This installs them at `~/.claude/skills/open-meteo/SKILL.md` and `~/.claude/skills/open-meteo-advanced/SKILL.md`. Claude Code will load the relevant skill automatically when you ask weather-related questions.
|
|
328
|
+
|
|
329
|
+
### Using with Claude Desktop
|
|
330
|
+
|
|
331
|
+
Upload the SKILL.md file directly as a document in your Claude Desktop conversation:
|
|
332
|
+
- For everyday weather questions: upload `skills/open-meteo/SKILL.md`
|
|
333
|
+
- For model selection, ensemble, or climate projections: upload `skills/open-meteo-advanced/SKILL.md`
|
|
334
|
+
|
|
335
|
+
Upload one skill per conversation. The AI will use it as a reference guide throughout the session.
|
|
336
|
+
|
|
306
337
|
## Usage Examples
|
|
307
338
|
|
|
308
339
|
### Geocoding and Location Search
|
package/dist/client.d.ts
CHANGED
|
@@ -10,6 +10,8 @@ export declare class OpenMeteoClient {
|
|
|
10
10
|
private floodClient;
|
|
11
11
|
private climateClient;
|
|
12
12
|
constructor(baseURL?: string, version?: string);
|
|
13
|
+
private setupErrorInterceptors;
|
|
14
|
+
private static mapHttpError;
|
|
13
15
|
private buildParams;
|
|
14
16
|
getForecast(params: ForecastParams): Promise<WeatherResponse>;
|
|
15
17
|
getArchive(params: ArchiveParams): Promise<WeatherResponse>;
|
package/dist/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,gBAAgB,EAChB,aAAa,EACb,aAAa,EACb,WAAW,EACX,eAAe,EACf,iBAAiB,EACjB,cAAc,EACd,WAAW,EACX,cAAc,EACd,eAAe,EACf,iBAAiB,EACjB,YAAY,EACZ,cAAc,EACd,eAAe,EAChB,MAAM,YAAY,CAAC;AAEpB,qBAAa,eAAe;IAC1B,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,gBAAgB,CAAgB;IACxC,OAAO,CAAC,YAAY,CAAgB;IACpC,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,cAAc,CAAgB;IACtC,OAAO,CAAC,cAAc,CAAgB;IACtC,OAAO,CAAC,eAAe,CAAgB;IACvC,OAAO,CAAC,WAAW,CAAgB;IACnC,OAAO,CAAC,aAAa,CAAgB;gBAGnC,OAAO,GAAE,MAAuE,EAChF,OAAO,SAAY;
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,gBAAgB,EAChB,aAAa,EACb,aAAa,EACb,WAAW,EACX,eAAe,EACf,iBAAiB,EACjB,cAAc,EACd,WAAW,EACX,cAAc,EACd,eAAe,EACf,iBAAiB,EACjB,YAAY,EACZ,cAAc,EACd,eAAe,EAChB,MAAM,YAAY,CAAC;AAEpB,qBAAa,eAAe;IAC1B,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,gBAAgB,CAAgB;IACxC,OAAO,CAAC,YAAY,CAAgB;IACpC,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,cAAc,CAAgB;IACtC,OAAO,CAAC,cAAc,CAAgB;IACtC,OAAO,CAAC,eAAe,CAAgB;IACvC,OAAO,CAAC,WAAW,CAAgB;IACnC,OAAO,CAAC,aAAa,CAAgB;gBAGnC,OAAO,GAAE,MAAuE,EAChF,OAAO,SAAY;IAuCrB,OAAO,CAAC,sBAAsB;IAgB9B,OAAO,CAAC,MAAM,CAAC,YAAY;IAkB3B,OAAO,CAAC,WAAW;IAgBb,WAAW,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC;IAO7D,UAAU,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,eAAe,CAAC;IAO3D,UAAU,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC;IAO5D,MAAM,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC;IAOxD,cAAc,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC;IAOhE,QAAQ,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,eAAe,CAAC;IAOvD,MAAM,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC;IAOxD,QAAQ,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC;IAO1D,MAAM,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC;IAOxD,aAAa,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC;IAOjE,SAAS,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,eAAe,CAAC;IAOzD,WAAW,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC;IAO7D,YAAY,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAOjE,QAAQ,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,eAAe,CAAC;IAOvD,WAAW,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC;IAO7D,UAAU,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,eAAe,CAAC;IAO3D,YAAY,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC;CAMxE"}
|
package/dist/client.js
CHANGED
|
@@ -35,6 +35,40 @@ export class OpenMeteoClient {
|
|
|
35
35
|
this.geocodingClient = axios.create({ baseURL: geocodingURL, ...config });
|
|
36
36
|
this.floodClient = axios.create({ baseURL: floodURL, ...config });
|
|
37
37
|
this.climateClient = axios.create({ baseURL: climateURL, ...config });
|
|
38
|
+
this.setupErrorInterceptors();
|
|
39
|
+
}
|
|
40
|
+
setupErrorInterceptors() {
|
|
41
|
+
for (const instance of [
|
|
42
|
+
this.client,
|
|
43
|
+
this.airQualityClient,
|
|
44
|
+
this.marineClient,
|
|
45
|
+
this.archiveClient,
|
|
46
|
+
this.seasonalClient,
|
|
47
|
+
this.ensembleClient,
|
|
48
|
+
this.geocodingClient,
|
|
49
|
+
this.floodClient,
|
|
50
|
+
this.climateClient,
|
|
51
|
+
]) {
|
|
52
|
+
instance.interceptors.response.use(undefined, OpenMeteoClient.mapHttpError);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
static mapHttpError(error) {
|
|
56
|
+
if (axios.isAxiosError(error)) {
|
|
57
|
+
const status = error.response?.status;
|
|
58
|
+
const data = error.response?.data;
|
|
59
|
+
const apiMessage = data?.reason ??
|
|
60
|
+
data?.error ??
|
|
61
|
+
error.message;
|
|
62
|
+
if (status === 400)
|
|
63
|
+
throw new Error(`Invalid request parameters: ${apiMessage}`);
|
|
64
|
+
if (status === 422)
|
|
65
|
+
throw new Error(`Invalid parameter value: ${apiMessage}`);
|
|
66
|
+
if (status === 429)
|
|
67
|
+
throw new Error('Open-Meteo rate limit reached. Please retry later.');
|
|
68
|
+
if (status !== undefined && status >= 500)
|
|
69
|
+
throw new Error(`Open-Meteo server error (${status}): ${apiMessage}`);
|
|
70
|
+
}
|
|
71
|
+
throw error;
|
|
38
72
|
}
|
|
39
73
|
buildParams(params) {
|
|
40
74
|
const result = {};
|
|
@@ -51,105 +85,105 @@ export class OpenMeteoClient {
|
|
|
51
85
|
return result;
|
|
52
86
|
}
|
|
53
87
|
async getForecast(params) {
|
|
54
|
-
const response = await this.client
|
|
55
|
-
params: this.buildParams(params)
|
|
56
|
-
|
|
88
|
+
const response = await this.client
|
|
89
|
+
.get('/v1/forecast', { params: this.buildParams(params) })
|
|
90
|
+
.catch(OpenMeteoClient.mapHttpError);
|
|
57
91
|
return response.data;
|
|
58
92
|
}
|
|
59
93
|
async getArchive(params) {
|
|
60
|
-
const response = await this.archiveClient
|
|
61
|
-
params: this.buildParams(params)
|
|
62
|
-
|
|
94
|
+
const response = await this.archiveClient
|
|
95
|
+
.get('/v1/archive', { params: this.buildParams(params) })
|
|
96
|
+
.catch(OpenMeteoClient.mapHttpError);
|
|
63
97
|
return response.data;
|
|
64
98
|
}
|
|
65
99
|
async getDwdIcon(params) {
|
|
66
|
-
const response = await this.client
|
|
67
|
-
params: this.buildParams(params)
|
|
68
|
-
|
|
100
|
+
const response = await this.client
|
|
101
|
+
.get('/v1/dwd-icon', { params: this.buildParams(params) })
|
|
102
|
+
.catch(OpenMeteoClient.mapHttpError);
|
|
69
103
|
return response.data;
|
|
70
104
|
}
|
|
71
105
|
async getGfs(params) {
|
|
72
|
-
const response = await this.client
|
|
73
|
-
params: this.buildParams(params)
|
|
74
|
-
|
|
106
|
+
const response = await this.client
|
|
107
|
+
.get('/v1/gfs', { params: this.buildParams(params) })
|
|
108
|
+
.catch(OpenMeteoClient.mapHttpError);
|
|
75
109
|
return response.data;
|
|
76
110
|
}
|
|
77
111
|
async getMeteoFrance(params) {
|
|
78
|
-
const response = await this.client
|
|
79
|
-
params: this.buildParams(params)
|
|
80
|
-
|
|
112
|
+
const response = await this.client
|
|
113
|
+
.get('/v1/meteofrance', { params: this.buildParams(params) })
|
|
114
|
+
.catch(OpenMeteoClient.mapHttpError);
|
|
81
115
|
return response.data;
|
|
82
116
|
}
|
|
83
117
|
async getEcmwf(params) {
|
|
84
|
-
const response = await this.client
|
|
85
|
-
params: this.buildParams(params)
|
|
86
|
-
|
|
118
|
+
const response = await this.client
|
|
119
|
+
.get('/v1/ecmwf', { params: this.buildParams(params) })
|
|
120
|
+
.catch(OpenMeteoClient.mapHttpError);
|
|
87
121
|
return response.data;
|
|
88
122
|
}
|
|
89
123
|
async getJma(params) {
|
|
90
|
-
const response = await this.client
|
|
91
|
-
params: this.buildParams(params)
|
|
92
|
-
|
|
124
|
+
const response = await this.client
|
|
125
|
+
.get('/v1/jma', { params: this.buildParams(params) })
|
|
126
|
+
.catch(OpenMeteoClient.mapHttpError);
|
|
93
127
|
return response.data;
|
|
94
128
|
}
|
|
95
129
|
async getMetno(params) {
|
|
96
|
-
const response = await this.client
|
|
97
|
-
params: this.buildParams(params)
|
|
98
|
-
|
|
130
|
+
const response = await this.client
|
|
131
|
+
.get('/v1/metno', { params: this.buildParams(params) })
|
|
132
|
+
.catch(OpenMeteoClient.mapHttpError);
|
|
99
133
|
return response.data;
|
|
100
134
|
}
|
|
101
135
|
async getGem(params) {
|
|
102
|
-
const response = await this.client
|
|
103
|
-
params: this.buildParams(params)
|
|
104
|
-
|
|
136
|
+
const response = await this.client
|
|
137
|
+
.get('/v1/gem', { params: this.buildParams(params) })
|
|
138
|
+
.catch(OpenMeteoClient.mapHttpError);
|
|
105
139
|
return response.data;
|
|
106
140
|
}
|
|
107
141
|
async getAirQuality(params) {
|
|
108
|
-
const response = await this.airQualityClient
|
|
109
|
-
params: this.buildParams(params)
|
|
110
|
-
|
|
142
|
+
const response = await this.airQualityClient
|
|
143
|
+
.get('/v1/air-quality', { params: this.buildParams(params) })
|
|
144
|
+
.catch(OpenMeteoClient.mapHttpError);
|
|
111
145
|
return response.data;
|
|
112
146
|
}
|
|
113
147
|
async getMarine(params) {
|
|
114
|
-
const response = await this.marineClient
|
|
115
|
-
params: this.buildParams(params)
|
|
116
|
-
|
|
148
|
+
const response = await this.marineClient
|
|
149
|
+
.get('/v1/marine', { params: this.buildParams(params) })
|
|
150
|
+
.catch(OpenMeteoClient.mapHttpError);
|
|
117
151
|
return response.data;
|
|
118
152
|
}
|
|
119
153
|
async getEnsemble(params) {
|
|
120
|
-
const response = await this.ensembleClient
|
|
121
|
-
params: this.buildParams(params)
|
|
122
|
-
|
|
154
|
+
const response = await this.ensembleClient
|
|
155
|
+
.get('/v1/ensemble', { params: this.buildParams(params) })
|
|
156
|
+
.catch(OpenMeteoClient.mapHttpError);
|
|
123
157
|
return response.data;
|
|
124
158
|
}
|
|
125
159
|
async getElevation(params) {
|
|
126
|
-
const response = await this.client
|
|
127
|
-
params: this.buildParams(params)
|
|
128
|
-
|
|
160
|
+
const response = await this.client
|
|
161
|
+
.get('/v1/elevation', { params: this.buildParams(params) })
|
|
162
|
+
.catch(OpenMeteoClient.mapHttpError);
|
|
129
163
|
return response.data;
|
|
130
164
|
}
|
|
131
165
|
async getFlood(params) {
|
|
132
|
-
const response = await this.floodClient
|
|
133
|
-
params: this.buildParams(params)
|
|
134
|
-
|
|
166
|
+
const response = await this.floodClient
|
|
167
|
+
.get('/v1/flood', { params: this.buildParams(params) })
|
|
168
|
+
.catch(OpenMeteoClient.mapHttpError);
|
|
135
169
|
return response.data;
|
|
136
170
|
}
|
|
137
171
|
async getSeasonal(params) {
|
|
138
|
-
const response = await this.seasonalClient
|
|
139
|
-
params: this.buildParams(params)
|
|
140
|
-
|
|
172
|
+
const response = await this.seasonalClient
|
|
173
|
+
.get('/v1/seasonal', { params: this.buildParams(params) })
|
|
174
|
+
.catch(OpenMeteoClient.mapHttpError);
|
|
141
175
|
return response.data;
|
|
142
176
|
}
|
|
143
177
|
async getClimate(params) {
|
|
144
|
-
const response = await this.climateClient
|
|
145
|
-
params: this.buildParams(params)
|
|
146
|
-
|
|
178
|
+
const response = await this.climateClient
|
|
179
|
+
.get('/v1/climate', { params: this.buildParams(params) })
|
|
180
|
+
.catch(OpenMeteoClient.mapHttpError);
|
|
147
181
|
return response.data;
|
|
148
182
|
}
|
|
149
183
|
async getGeocoding(params) {
|
|
150
|
-
const response = await this.geocodingClient
|
|
151
|
-
params: this.buildParams(params)
|
|
152
|
-
|
|
184
|
+
const response = await this.geocodingClient
|
|
185
|
+
.get('/v1/search', { params: this.buildParams(params) })
|
|
186
|
+
.catch(OpenMeteoClient.mapHttpError);
|
|
153
187
|
return response.data;
|
|
154
188
|
}
|
|
155
189
|
}
|
package/dist/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAA6B,MAAM,OAAO,CAAC;AAkBlD,MAAM,OAAO,eAAe;IAClB,MAAM,CAAgB;IACtB,gBAAgB,CAAgB;IAChC,YAAY,CAAgB;IAC5B,aAAa,CAAgB;IAC7B,cAAc,CAAgB;IAC9B,cAAc,CAAgB;IAC9B,eAAe,CAAgB;IAC/B,WAAW,CAAgB;IAC3B,aAAa,CAAgB;IAErC,YACE,UAAkB,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,4BAA4B,EAChF,OAAO,GAAG,SAAS;QAEnB,MAAM,MAAM,GAAG;YACb,OAAO,EAAE,KAAK;YACd,OAAO,EAAE;gBACP,MAAM,EAAE,kBAAkB;gBAC1B,YAAY,EAAE,yBAAyB,OAAO,EAAE;aACjD;SACF,CAAC;QAEF,wEAAwE;QACxE,MAAM,aAAa,GACjB,OAAO,CAAC,GAAG,CAAC,8BAA8B,IAAI,wCAAwC,CAAC;QACzF,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,yBAAyB,IAAI,mCAAmC,CAAC;QAC/F,MAAM,UAAU,GACd,OAAO,CAAC,GAAG,CAAC,0BAA0B,IAAI,oCAAoC,CAAC;QACjF,MAAM,WAAW,GACf,OAAO,CAAC,GAAG,CAAC,2BAA2B,IAAI,qCAAqC,CAAC;QACnF,MAAM,WAAW,GACf,OAAO,CAAC,GAAG,CAAC,2BAA2B,IAAI,qCAAqC,CAAC;QACnF,MAAM,YAAY,GAChB,OAAO,CAAC,GAAG,CAAC,4BAA4B,IAAI,sCAAsC,CAAC;QACrF,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,wBAAwB,IAAI,kCAAkC,CAAC;QAC5F,MAAM,UAAU,GACd,OAAO,CAAC,GAAG,CAAC,0BAA0B,IAAI,oCAAoC,CAAC;QAEjF,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC;QACnD,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,aAAa,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC;QAC5E,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC;QACpE,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC;QACtE,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC;QACxE,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC;QACxE,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,YAAY,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC;QAC1E,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC;QAClE,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
package/dist/security.d.ts
CHANGED
|
@@ -20,16 +20,6 @@ export declare function createAuthMiddleware(): (req: Request, res: Response, ne
|
|
|
20
20
|
* internal hostnames) to clients.
|
|
21
21
|
*/
|
|
22
22
|
export declare function sanitizeErrorMessage(_err: unknown): string;
|
|
23
|
-
/**
|
|
24
|
-
* Returns the real client IP, respecting X-Forwarded-For only when the
|
|
25
|
-
* direct connection comes from a trusted proxy (TRUSTED_PROXIES env var).
|
|
26
|
-
*
|
|
27
|
-
* TRUSTED_PROXIES: comma-separated list of IPs or CIDR ranges.
|
|
28
|
-
* e.g. "10.0.0.0/8,192.168.1.1"
|
|
29
|
-
*
|
|
30
|
-
* When TRUSTED_PROXIES is not set, X-Forwarded-For is always ignored to
|
|
31
|
-
* prevent IP spoofing.
|
|
32
|
-
*/
|
|
33
23
|
export declare function getClientIp(req: Request): string;
|
|
34
24
|
/**
|
|
35
25
|
* Creates an express-rate-limit middleware.
|
package/dist/security.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"security.d.ts","sourceRoot":"","sources":["../src/security.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAG/D;;;GAGG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C;AAED;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,KAC1B,KAAK,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,KAAG,IAAI,CAqB/D;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAE1D;
|
|
1
|
+
{"version":3,"file":"security.d.ts","sourceRoot":"","sources":["../src/security.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAG/D;;;GAGG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C;AAED;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,KAC1B,KAAK,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,KAAG,IAAI,CAqB/D;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAE1D;AAyCD,wBAAgB,WAAW,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAsBhD;AAMD;;;;GAIG;AACH,wBAAgB,iBAAiB,yDAWhC"}
|
package/dist/security.js
CHANGED
|
@@ -73,8 +73,14 @@ function isIpTrusted(ip, trustedList) {
|
|
|
73
73
|
* When TRUSTED_PROXIES is not set, X-Forwarded-For is always ignored to
|
|
74
74
|
* prevent IP spoofing.
|
|
75
75
|
*/
|
|
76
|
+
/** Normalizes an IPv4-mapped IPv6 address (::ffff:x.x.x.x) to plain IPv4. */
|
|
77
|
+
function normalizeIp(ip) {
|
|
78
|
+
const mapped = ip.match(/^::ffff:(\d+\.\d+\.\d+\.\d+)$/i);
|
|
79
|
+
return mapped ? (mapped[1] ?? ip) : ip;
|
|
80
|
+
}
|
|
76
81
|
export function getClientIp(req) {
|
|
77
|
-
const
|
|
82
|
+
const rawSocketIp = req.ip ?? req.socket?.remoteAddress ?? 'unknown';
|
|
83
|
+
const socketIp = rawSocketIp === 'unknown' ? rawSocketIp : normalizeIp(rawSocketIp);
|
|
78
84
|
const trustedProxies = process.env.TRUSTED_PROXIES;
|
|
79
85
|
if (trustedProxies) {
|
|
80
86
|
const trustedList = trustedProxies
|
package/dist/security.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"security.js","sourceRoot":"","sources":["../src/security.ts"],"names":[],"mappings":"AACA,OAAO,SAAS,MAAM,oBAAoB,CAAC;AAE3C;;;GAGG;AACH,MAAM,UAAU,iBAAiB;IAC/B,OAAO,MAAM,CAAC,UAAU,EAAE,CAAC;AAC7B,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,oBAAoB;IAClC,OAAO,CAAC,GAAY,EAAE,GAAa,EAAE,IAAkB,EAAQ,EAAE;QAC/D,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;QAEnC,kDAAkD;QAClD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,IAAI,EAAE,CAAC;YACP,OAAO;QACT,CAAC;QAED,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,aAAa,EAAE,UAAU,CAAC,SAAS,CAAC;YAC7D,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;YACpC,CAAC,CAAC,SAAS,CAAC;QACd,MAAM,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,WAAW,CAAuB,CAAC;QAEjE,IAAI,MAAM,KAAK,MAAM,IAAI,SAAS,KAAK,MAAM,EAAE,CAAC;YAC9C,IAAI,EAAE,CAAC;YACP,OAAO;QACT,CAAC;QAED,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,sCAAsC,EAAE,CAAC,CAAC;IAC1E,CAAC,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAAC,IAAa;IAChD,OAAO,uBAAuB,CAAC;AACjC,CAAC;AAED,8EAA8E;AAC9E,oCAAoC;AACpC,8EAA8E;AAE9E,2DAA2D;AAC3D,SAAS,OAAO,CAAC,EAAU;IACzB,OAAO,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;AACzF,CAAC;AAED,mFAAmF;AACnF,SAAS,aAAa,CAAC,EAAU,EAAE,IAAY;IAC7C,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IAC5C,MAAM,CAAC,OAAO,EAAE,SAAS,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC7C,IAAI,CAAC,OAAO,IAAI,SAAS,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IACtD,MAAM,MAAM,GAAG,QAAQ,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;IACvC,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,GAAG,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC;IAC5D,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;AAC5D,CAAC;AAED,SAAS,WAAW,CAAC,EAAU,EAAE,WAAqB;IACpD,OAAO,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,aAAa,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC;AAC7D,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,WAAW,CAAC,GAAY;IACtC,MAAM,
|
|
1
|
+
{"version":3,"file":"security.js","sourceRoot":"","sources":["../src/security.ts"],"names":[],"mappings":"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"}
|