googlemaps-kit 0.2.0 → 0.2.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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "googlemaps-kit",
3
- "version": "0.2.0",
3
+ "version": "0.2.1",
4
4
  "description": "TypeScript SDK for Google Maps consumer HTTP surfaces",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -20,7 +20,7 @@
20
20
  }
21
21
  },
22
22
  "bin": {
23
- "googlemaps-kit": "./dist/cli.js"
23
+ "googlemaps-kit": "dist/cli.js"
24
24
  },
25
25
  "files": [
26
26
  "dist",
@@ -37,7 +37,7 @@
37
37
  "dev": "tsc --watch",
38
38
  "clean": "rm -rf dist",
39
39
  "type-check": "tsc -p tsconfig.check.json --noEmit",
40
- "prepublishOnly": "npm run type-check && npm test && npm run build",
40
+ "prepublishOnly": "npm run clean && npm run build && npm run type-check && npm test",
41
41
  "test": "vitest run",
42
42
  "test:watch": "vitest",
43
43
  "preexample": "npm run build",
@@ -1,6 +0,0 @@
1
- /**
2
- * @deprecated Use `googlemaps-kit/advanced` — same exports.
3
- * Kept so existing `import from 'googlemaps-kit/internal'` keeps working.
4
- */
5
- export * from './advanced.js';
6
- //# sourceMappingURL=internal.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"internal.d.ts","sourceRoot":"","sources":["../src/internal.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,cAAc,eAAe,CAAC"}
package/dist/internal.js DELETED
@@ -1,6 +0,0 @@
1
- /**
2
- * @deprecated Use `googlemaps-kit/advanced` — same exports.
3
- * Kept so existing `import from 'googlemaps-kit/internal'` keeps working.
4
- */
5
- export * from './advanced.js';
6
- //# sourceMappingURL=internal.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"internal.js","sourceRoot":"","sources":["../src/internal.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,cAAc,eAAe,CAAC"}
@@ -1,9 +0,0 @@
1
- /**
2
- * Minimal HTTP façade implementing openapi/openapi.yaml using GMapsClient.
3
- * For Stainless-generated multi-language SDKs. No express dependency.
4
- *
5
- * Usage: npm run api:serve
6
- * Env: PORT (default 8787), GMAPS_HL, GMAPS_GL, GMAPS_COOKIES
7
- */
8
- export {};
9
- //# sourceMappingURL=api-server.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"api-server.d.ts","sourceRoot":"","sources":["../../src/server/api-server.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}
@@ -1,293 +0,0 @@
1
- /**
2
- * Minimal HTTP façade implementing openapi/openapi.yaml using GMapsClient.
3
- * For Stainless-generated multi-language SDKs. No express dependency.
4
- *
5
- * Usage: npm run api:serve
6
- * Env: PORT (default 8787), GMAPS_HL, GMAPS_GL, GMAPS_COOKIES
7
- */
8
- import { createServer } from 'node:http';
9
- import { loadProjectEnv } from '../utils/load-env.js';
10
- import { createGMapsClient } from '../client/gmaps-client.js';
11
- import { GMapsError, GMapsAuthError, GMapsThrottleError } from '../types/common.js';
12
- loadProjectEnv();
13
- const PORT = Number(process.env.PORT ?? 8787);
14
- const HOST = process.env.HOST ?? '127.0.0.1';
15
- function readBody(req) {
16
- return new Promise((resolve, reject) => {
17
- const chunks = [];
18
- req.on('data', (c) => chunks.push(Buffer.isBuffer(c) ? c : Buffer.from(c)));
19
- req.on('end', () => resolve(Buffer.concat(chunks).toString('utf8')));
20
- req.on('error', reject);
21
- });
22
- }
23
- function sendJson(res, status, body) {
24
- const payload = JSON.stringify(body);
25
- res.writeHead(status, {
26
- 'content-type': 'application/json; charset=utf-8',
27
- 'cache-control': 'no-store',
28
- 'x-content-type-options': 'nosniff',
29
- });
30
- res.end(payload);
31
- }
32
- function clientFromRequest(req) {
33
- const headerCookies = req.headers['x-gmaps-cookies'];
34
- const cookies = typeof headerCookies === 'string' && headerCookies.length > 0
35
- ? headerCookies
36
- : process.env.GMAPS_COOKIES;
37
- return createGMapsClient({
38
- hl: process.env.GMAPS_HL ?? 'en',
39
- gl: process.env.GMAPS_GL ?? 'us',
40
- cookies,
41
- concurrency: 8,
42
- requestDelayMs: 0,
43
- });
44
- }
45
- function toLatLng(value) {
46
- if (typeof value === 'string')
47
- return value;
48
- if (value && typeof value === 'object' && 'lat' in value && 'lng' in value) {
49
- const o = value;
50
- if (typeof o.lat === 'number' && typeof o.lng === 'number') {
51
- return { lat: o.lat, lng: o.lng };
52
- }
53
- }
54
- return undefined;
55
- }
56
- function mapError(res, error) {
57
- if (error instanceof GMapsThrottleError) {
58
- sendJson(res, 429, { error: error.message, code: 'throttle' });
59
- return;
60
- }
61
- if (error instanceof GMapsAuthError) {
62
- sendJson(res, 401, { error: error.message, code: 'auth' });
63
- return;
64
- }
65
- if (error instanceof GMapsError) {
66
- const status = error.statusCode && error.statusCode >= 400 ? error.statusCode : 502;
67
- sendJson(res, status, { error: error.message, code: 'upstream' });
68
- return;
69
- }
70
- const message = error instanceof Error ? error.message : String(error);
71
- sendJson(res, 502, { error: message, code: 'upstream' });
72
- }
73
- async function handle(req, res) {
74
- const url = new URL(req.url ?? '/', `http://${HOST}:${PORT}`);
75
- const path = url.pathname.replace(/\/$/, '') || '/';
76
- if (req.method === 'GET' && (path === '/v1/health' || path === '/health')) {
77
- sendJson(res, 200, { ok: true, version: '0.1.0' });
78
- return;
79
- }
80
- if (req.method === 'OPTIONS') {
81
- res.writeHead(204, {
82
- 'access-control-allow-origin': '*',
83
- 'access-control-allow-methods': 'GET,POST,OPTIONS',
84
- 'access-control-allow-headers': 'content-type,x-gmaps-cookies',
85
- });
86
- res.end();
87
- return;
88
- }
89
- if (req.method !== 'POST') {
90
- sendJson(res, 405, { error: 'Method not allowed', code: 'method' });
91
- return;
92
- }
93
- let body = {};
94
- try {
95
- const raw = await readBody(req);
96
- body = raw ? JSON.parse(raw) : {};
97
- }
98
- catch {
99
- sendJson(res, 400, { error: 'Invalid JSON body', code: 'bad_request' });
100
- return;
101
- }
102
- const maps = clientFromRequest(req);
103
- try {
104
- switch (path) {
105
- case '/v1/places/search_text': {
106
- const query = String(body.query ?? '');
107
- if (!query.trim()) {
108
- sendJson(res, 400, { error: 'query is required', code: 'bad_request' });
109
- return;
110
- }
111
- const location = toLatLng(body.location);
112
- const coords = typeof location === 'object'
113
- ? location
114
- : { lat: 20, lng: 0 };
115
- const result = await maps.search.searchText({
116
- query,
117
- location: coords,
118
- limit: typeof body.limit === 'number' ? body.limit : 20,
119
- fieldMask: 'enterprise',
120
- });
121
- sendJson(res, 200, {
122
- places: result.places.map((p) => ({
123
- name: p.name,
124
- address: p.address,
125
- place_id: p.placeId,
126
- hex_id: p.hexId,
127
- rating: p.rating,
128
- review_count: p.reviewCount,
129
- phone: p.internationalPhone ?? p.phone,
130
- latitude: p.latitude,
131
- longitude: p.longitude,
132
- open_status: p.openStatus,
133
- timezone: p.timezone,
134
- thumbnail_url: p.thumbnailUrl,
135
- })),
136
- request_count: result.requestCount,
137
- timing_ms: result.timingMs,
138
- });
139
- return;
140
- }
141
- case '/v1/places/get': {
142
- const hexId = String(body.hex_id ?? '');
143
- if (!hexId) {
144
- sendJson(res, 400, { error: 'hex_id is required', code: 'bad_request' });
145
- return;
146
- }
147
- const location = toLatLng(body.location);
148
- const place = await maps.places.get({
149
- hexId,
150
- name: typeof body.name === 'string' ? body.name : undefined,
151
- lat: typeof location === 'object' ? location.lat : undefined,
152
- lng: typeof location === 'object' ? location.lng : undefined,
153
- mode: body.mode === 'rich' || body.mode === 'detail' || body.mode === 'live'
154
- ? body.mode
155
- : 'live',
156
- });
157
- sendJson(res, 200, {
158
- name: place.name,
159
- address: place.address,
160
- place_id: place.placeId,
161
- hex_id: place.hexId,
162
- rating: place.rating,
163
- review_count: place.reviewCount,
164
- phone: place.phone,
165
- website: place.website,
166
- latitude: place.latitude,
167
- longitude: place.longitude,
168
- timezone: place.timezone,
169
- photos: place.photos,
170
- });
171
- return;
172
- }
173
- case '/v1/directions': {
174
- const origin = toLatLng(body.origin);
175
- const destination = toLatLng(body.destination);
176
- if (origin == null || destination == null) {
177
- sendJson(res, 400, { error: 'origin and destination are required', code: 'bad_request' });
178
- return;
179
- }
180
- const mode = (typeof body.mode === 'string' ? body.mode : 'driving');
181
- const result = await maps.directions.get({
182
- origin,
183
- destination,
184
- mode,
185
- metricsOnly: body.metrics_only === true,
186
- });
187
- sendJson(res, 200, {
188
- distance: result.distance,
189
- duration: result.duration,
190
- legs: result.legs,
191
- });
192
- return;
193
- }
194
- case '/v1/geocode': {
195
- const query = String(body.query ?? '');
196
- if (!query.trim()) {
197
- sendJson(res, 400, { error: 'query is required', code: 'bad_request' });
198
- return;
199
- }
200
- const location = toLatLng(body.location);
201
- const result = await maps.geocode.geocode(query, {
202
- lat: typeof location === 'object' ? location.lat : undefined,
203
- lng: typeof location === 'object' ? location.lng : undefined,
204
- });
205
- sendJson(res, 200, {
206
- result: result.result,
207
- alternatives: result.alternatives,
208
- });
209
- return;
210
- }
211
- case '/v1/timezone': {
212
- if (typeof body.lat !== 'number' || typeof body.lng !== 'number') {
213
- sendJson(res, 400, { error: 'lat and lng are required', code: 'bad_request' });
214
- return;
215
- }
216
- const result = await maps.timezone.get({
217
- lat: body.lat,
218
- lng: body.lng,
219
- source: body.source === 'geocode' ? 'geocode' : 'offline',
220
- });
221
- sendJson(res, 200, {
222
- lat: result.lat,
223
- lng: result.lng,
224
- status: result.status,
225
- time_zone_id: result.timeZoneId,
226
- total_offset_minutes: result.totalOffsetMinutes,
227
- timezone_source: result.timezoneSource,
228
- });
229
- return;
230
- }
231
- case '/v1/distance_matrix': {
232
- const origins = Array.isArray(body.origins)
233
- ? body.origins.map(toLatLng).filter((v) => v != null)
234
- : [];
235
- const destinations = Array.isArray(body.destinations)
236
- ? body.destinations.map(toLatLng).filter((v) => v != null)
237
- : [];
238
- if (origins.length === 0 || destinations.length === 0) {
239
- sendJson(res, 400, {
240
- error: 'origins and destinations are required',
241
- code: 'bad_request',
242
- });
243
- return;
244
- }
245
- const result = await maps.distanceMatrix.getMatrix({
246
- origins,
247
- destinations,
248
- mode: (typeof body.mode === 'string' ? body.mode : 'driving'),
249
- concurrency: typeof body.concurrency === 'number' ? body.concurrency : 8,
250
- requestDelayMs: 0,
251
- });
252
- sendJson(res, 200, {
253
- rows: result.rows,
254
- request_count: result.requestCount,
255
- implementation: result.implementation,
256
- timing_ms: result.timingMs,
257
- });
258
- return;
259
- }
260
- case '/v1/elevation': {
261
- if (typeof body.lat !== 'number' || typeof body.lng !== 'number') {
262
- sendJson(res, 400, { error: 'lat and lng are required', code: 'bad_request' });
263
- return;
264
- }
265
- const result = await maps.elevation.getAtPoint({ lat: body.lat, lng: body.lng });
266
- sendJson(res, 200, {
267
- lat: result.lat,
268
- lng: result.lng,
269
- status: result.status,
270
- elevation_meters: result.elevationMeters,
271
- timing_ms: result.timingMs,
272
- });
273
- return;
274
- }
275
- default: {
276
- sendJson(res, 404, { error: `Unknown path ${path}`, code: 'not_found' });
277
- }
278
- }
279
- }
280
- catch (error) {
281
- mapError(res, error);
282
- }
283
- }
284
- const server = createServer((req, res) => {
285
- void handle(req, res).catch((error) => {
286
- mapError(res, error);
287
- });
288
- });
289
- server.listen(PORT, HOST, () => {
290
- console.log(`gmaps-kit API façade listening on http://${HOST}:${PORT}`);
291
- console.log('OpenAPI: openapi/openapi.yaml · Stainless: openapi/stainless.yml');
292
- });
293
- //# sourceMappingURL=api-server.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"api-server.js","sourceRoot":"","sources":["../../src/server/api-server.ts"],"names":[],"mappings":"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"}