googlemaps-kit 0.2.0 → 0.2.2

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 CHANGED
@@ -1,5 +1,5 @@
1
1
  <p align="center">
2
- <img src="./assets/banner.png" alt="googlemaps-kit — TypeScript SDK for Google Maps consumer surfaces" width="1536" style="max-width: 100%; height: auto;">
2
+ <img src="https://raw.githubusercontent.com/KumarVandit/googlemaps-kit/main/assets/banner.png" alt="googlemaps-kit — TypeScript SDK for Google Maps consumer surfaces" width="100%">
3
3
  </p>
4
4
 
5
5
  # googlemaps-kit
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "googlemaps-kit",
3
- "version": "0.2.0",
3
+ "version": "0.2.2",
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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"}