quantaroute-geocoding 1.0.4 β†’ 1.2.0

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
@@ -4,13 +4,19 @@ A **unique** Node.js/TypeScript library for geocoding addresses to DigiPin codes
4
4
 
5
5
  ## πŸš€ Unique Features
6
6
 
7
+ ### πŸ”’ **Enterprise-Grade Security** - *Runtime Protection & Code Security*
8
+ - πŸ›‘οΈ **RASP Protection**: Runtime Application Self-Protection with anti-debugging, integrity checks, and behavior monitoring
9
+ - πŸ” **Secure API Key Storage**: Encrypted storage with Symbol-based properties
10
+ - πŸ” **Request Signing**: HMAC-SHA256 signatures prevent tampering
11
+ - πŸ”’ **Code Obfuscation**: Production builds are automatically obfuscated
12
+
7
13
  ### 🎯 **NEW: Location Lookup API** - *Service that even government doesn't provide!*
8
14
  - πŸ—ΊοΈ **Administrative Boundary Lookup**: Get state, division, locality, pincode, district, delivery status from coordinates
9
- - πŸ“Š **Population Density Data**: Mean, min, and max population density from Meta's 30-meter gridded data
10
- - πŸ“ **36,000+ Postal Boundaries**: Complete coverage across India
15
+ - πŸ“ **19,000+ Pincode Boundaries (with 154,000 post offices)**: Complete coverage across India
11
16
  - ⚑ **Sub-100ms Response**: Cached responses with database fallback
12
17
  - 🎯 **Government-Level Precision**: Accuracy that official services don't offer
13
18
  - πŸ”„ **Batch Processing**: Up to 100 locations per request
19
+ - πŸ“Š **Population Density Data**: Mean, min, and max population density from Meta's 30-meter gridded data. [Deprecated]
14
20
 
15
21
  ### 🌟 **Core Features**
16
22
  - 🌐 **Online API Integration**: Full access to QuantaRoute Geocoding API
@@ -27,11 +33,13 @@ A **unique** Node.js/TypeScript library for geocoding addresses to DigiPin codes
27
33
  npm install quantaroute-geocoding
28
34
  ```
29
35
 
30
- For offline DigiPin processing, also install the DigiPin library:
31
-
32
- ```bash
33
- npm install digipin
34
- ```
36
+ **What's included:**
37
+ - βœ… Official India Post DigiPin algorithm (vendored, no external dependencies)
38
+ - βœ… Complete offline DigiPin processing
39
+ - βœ… Location Lookup API client
40
+ - βœ… Geocoding & Reverse Geocoding
41
+ - βœ… Enterprise-grade security (RASP, code obfuscation)
42
+ - βœ… Full TypeScript support
35
43
 
36
44
  ## Quick Start
37
45
 
@@ -53,7 +61,6 @@ console.log(`Division: ${result.administrative_info.division}`); // New
53
61
  console.log(`Locality: ${result.administrative_info.locality}`); // Nirman Bhawan SO
54
62
  console.log(`District: ${result.administrative_info.district}`); // New Delhi
55
63
  console.log(`Delivery: ${result.administrative_info.delivery}`); // Delivery
56
- console.log(`Pop Density: ${result.administrative_info.mean_population_density}`); // 11234.56
57
64
  console.log(`DigiPin: ${result.digipin}`); // 39J-438-TJC7
58
65
  console.log(`Response Time: ${result.response_time_ms}ms`); // <100ms
59
66
 
@@ -65,7 +72,7 @@ console.log(`Division: ${digipinResult.administrative_info.division}`);
65
72
  console.log(`Locality: ${digipinResult.administrative_info.locality}`);
66
73
  console.log(`District: ${digipinResult.administrative_info.district}`);
67
74
 
68
- // πŸ“Š Get live statistics (36,000+ boundaries)
75
+ // πŸ“Š Get live statistics (19,000+ boundaries with 154,000 post offices)
69
76
  const stats = await client.getLocationStatistics();
70
77
  console.log(`Total Boundaries: ${stats.totalBoundaries.toLocaleString()}`);
71
78
  console.log(`Total States: ${stats.totalStates}`);
@@ -95,29 +102,78 @@ console.log(`House Name: ${reverseResult.addressComponents.amenity || reverseRes
95
102
 
96
103
  ### Offline Processing
97
104
 
105
+ **NEW: Official India Post DigiPin Algorithm Vendored!** πŸŽ‰
106
+
107
+ `quantaroute-geocoding` now includes the **official DigiPin algorithm** directly - no external dependencies needed!
108
+
109
+ #### Using OfflineProcessor Class
110
+
98
111
  ```typescript
99
112
  import { OfflineProcessor } from 'quantaroute-geocoding';
100
113
 
101
- // Initialize offline processor
114
+ // Initialize offline processor (no dependencies needed!)
102
115
  const processor = new OfflineProcessor();
103
116
 
104
- // Convert coordinates to DigiPin (offline)
117
+ // Convert coordinates to DigiPin (offline, 100% accurate)
105
118
  const offlineResult = processor.coordinatesToDigiPin(28.6139, 77.2090);
106
- console.log(`DigiPin: ${offlineResult.digipin}`);
119
+ console.log(`DigiPin: ${offlineResult.digipin}`); // "39J-438-TJC7"
120
+ console.log(`Source: ${offlineResult.source}`); // "offline"
107
121
 
108
122
  // Convert DigiPin to coordinates (offline)
109
123
  const coordsResult = processor.digiPinToCoordinates("39J-438-TJC7");
110
- console.log(`Coordinates: ${coordsResult.coordinates}`);
124
+ console.log(`Latitude: ${coordsResult.coordinates.latitude}`);
125
+ console.log(`Longitude: ${coordsResult.coordinates.longitude}`);
111
126
 
112
127
  // Validate DigiPin format
113
128
  const validation = processor.validateDigiPin("39J-438-TJC7");
114
129
  console.log(`Valid: ${validation.isValid}`);
130
+ if (!validation.isValid) {
131
+ console.log(`Errors: ${validation.errors.join(', ')}`);
132
+ }
115
133
 
116
134
  // Calculate distance between coordinates
117
135
  const distance = processor.calculateDistance(28.6139, 77.2090, 28.6150, 77.2100);
118
136
  console.log(`Distance: ${distance.toFixed(2)} km`);
119
137
  ```
120
138
 
139
+ #### Using Core DigiPin Functions Directly
140
+
141
+ For simple use cases, you can use the core functions directly:
142
+
143
+ ```typescript
144
+ import {
145
+ getDigiPin,
146
+ getLatLngFromDigiPin,
147
+ isValidDigiPinFormat,
148
+ getBounds
149
+ } from 'quantaroute-geocoding';
150
+
151
+ // Convert coordinates to DigiPin
152
+ const digipin = getDigiPin(28.6139, 77.2090);
153
+ console.log('DigiPin:', digipin); // "39J-438-TJC7"
154
+
155
+ // Convert DigiPin to coordinates
156
+ const coords = getLatLngFromDigiPin("39J-438-TJC7");
157
+ console.log('Latitude:', coords.latitude); // "28.613900"
158
+ console.log('Longitude:', coords.longitude); // "77.209000"
159
+
160
+ // Validate DigiPin
161
+ const isValid = isValidDigiPinFormat("39J-438-TJC7");
162
+ console.log('Valid:', isValid); // true
163
+
164
+ // Get India bounds covered by DigiPin
165
+ const bounds = getBounds();
166
+ console.log('Bounds:', bounds);
167
+ // { minLat: 2.5, maxLat: 38.5, minLon: 63.5, maxLon: 99.5 }
168
+ ```
169
+
170
+ **Why This Matters:**
171
+ - βœ… **Zero Dependencies**: No need to install separate `digipin` packages
172
+ - βœ… **100% Offline**: Works without internet or API calls
173
+ - βœ… **Official Algorithm**: Same code as India Post's official implementation
174
+ - βœ… **Apache 2.0 License**: Open source from Government of India
175
+ - βœ… **Type-Safe**: Full TypeScript definitions included
176
+
121
177
  ### πŸ”” Webhook Management
122
178
 
123
179
  ```typescript
@@ -263,9 +319,6 @@ interface LocationLookupResult {
263
319
  country: string; // "India"
264
320
  delivery?: string; // "Delivery"
265
321
  district?: string; // "New Delhi"
266
- mean_population_density?: number; // 11234.56
267
- min_population_density?: number; // 5678.90
268
- max_population_density?: number; // 15234.67
269
322
  };
270
323
  coordinates: {
271
324
  latitude: number; // 28.6139
@@ -282,7 +335,7 @@ interface LocationLookupResult {
282
335
 
283
336
  🎯 **Government-Level Precision**: Access to administrative boundaries that even government APIs don't provide at this level of detail and accessibility.
284
337
 
285
- πŸ“ **36,000+ Boundaries**: Complete coverage of Indian postal boundaries with sub-district level precision.
338
+ πŸ“ **19,000+ Boundaries (with 154,000 post offices)**: Complete coverage of Indian postal boundaries with sub-district level precision.
286
339
 
287
340
  ⚑ **Performance**: Sub-100ms cached responses, <500ms database queries.
288
341
 
@@ -404,9 +457,9 @@ const result: LocationLookupResult = await client.lookupLocationFromCoordinates(
404
457
 
405
458
  | Tier | Requests/Minute | Monthly Limit | Batch Size | Boundaries |
406
459
  |------|----------------|---------------|------------|------------|
407
- | Free | 20 | 2,000 | 50 | 36,000+ |
408
- | Paid | 200 | 20,000 | 100 | 36,000+ |
409
- | Enterprise | 2,000 | Unlimited | 100 | 36,000+ |
460
+ | Free | 20 | 25,000 | 50 | 19,000+ (with 154,000 post offices) |
461
+ | Paid | 200 | 50,000 | 100 | 19,000+ (with 154,000 post offices) |
462
+ | Enterprise | 10,000,000 | Unlimited | 100 | 19,000+ (with 154,000 post offices) |
410
463
 
411
464
  **Performance Guarantees:**
412
465
  - ⚑ Cached responses: <100ms
@@ -438,7 +491,7 @@ Check out the `examples/` directory for more comprehensive examples:
438
491
 
439
492
  ✨ **Government-Level Precision**: Administrative boundary data that even government APIs don't provide at this level of detail and accessibility.
440
493
 
441
- πŸ“ **Complete Coverage**: 36,000+ postal boundaries across India with sub-district precision.
494
+ πŸ“ **Complete Coverage**: 19,000+ postal boundaries (with 154,000 post offices) across India with sub-district precision.
442
495
 
443
496
  ⚑ **Blazing Performance**: Sub-100ms cached responses, guaranteed <500ms database queries.
444
497
 
@@ -450,6 +503,19 @@ Check out the `examples/` directory for more comprehensive examples:
450
503
 
451
504
  ## Changelog
452
505
 
506
+ ### [1.1.0] - 2025-11-25
507
+ #### πŸ”’ Security Enhancements (Major Update)
508
+ - πŸ›‘οΈ **RASP Protection**: Runtime Application Self-Protection with anti-debugging, integrity checks, and behavior monitoring
509
+ - πŸ” **Secure API Key Storage**: Encrypted storage with Symbol-based properties
510
+ - πŸ” **Request Signing**: HMAC-SHA256 signatures prevent tampering
511
+ - πŸ”’ **Code Obfuscation**: Production builds automatically obfuscated
512
+ - 🚫 **Source Map Removal**: Prevents reverse engineering
513
+
514
+ ### [1.0.4] - 2025-11-23
515
+ #### Added
516
+ - Enhanced reverse geocoding with detailed address components
517
+ - `address`, `displayName`, and `addressComponents` fields
518
+
453
519
  ### [1.0.3] - 2025-11-10
454
520
  #### Added
455
521
  - πŸ”” **Webhook Management**: Register, list, delete, and test webhook endpoints
@@ -463,14 +529,13 @@ Check out the `examples/` directory for more comprehensive examples:
463
529
 
464
530
  ### [1.0.2] - 2025-11-01
465
531
  #### Added
466
- - πŸŽ‰ **Population Density Data**: Added mean, min, and max population density fields from Meta's 30-meter gridded data
532
+ - πŸŽ‰ **Population Density Data**: Added mean, min, and max population density fields from Meta's 30-meter gridded data [Deprecated]
467
533
  - πŸ“ **District Information**: Added district field for Indian district division as per official records
468
534
  - βœ… **Delivery Status**: Added delivery field for pincode delivery status
469
535
  - 🌍 **Complete Geographic Data**: Added state and country fields for comprehensive location information
470
536
 
471
537
  #### Enhanced
472
- - Improved administrative boundary data with complete coverage (36,000+ postal boundaries)
473
- - All Location Lookup API responses now include population density and district information
538
+ - Improved administrative boundary data with complete coverage (19,000+ postal boundaries with 154,000 post offices)
474
539
 
475
540
  ### [1.0.1] - Previous Release
476
541
  - Initial stable release with Location Lookup API
package/dist/client.d.ts CHANGED
@@ -1,72 +1,29 @@
1
1
  import { ClientConfig, GeocodeResult, ReverseGeocodeResult, LocationLookupResult, LocationStatistics, BatchLocationRequest, BatchLocationResult, WebhookEndpoint, CreateWebhookRequest, CreateWebhookResponse, TestWebhookResponse } from './types';
2
- /**
3
- * QuantaRoute Geocoding Client
4
- *
5
- * Revolutionary Node.js SDK for QuantaRoute Geocoding API with Location Lookup
6
- */
2
+ declare const CONFIG_SYMBOL: unique symbol;
3
+ declare const KEY_STORAGE_SYMBOL: unique symbol;
7
4
  export declare class QuantaRouteClient {
8
5
  private client;
9
- private config;
6
+ private [CONFIG_SYMBOL];
7
+ private [KEY_STORAGE_SYMBOL];
10
8
  constructor(config: ClientConfig);
11
9
  private setupInterceptors;
10
+ private setupRequestSigning;
12
11
  private makeRequest;
13
- /**
14
- * Geocode an address to DigiPin
15
- */
16
12
  geocode(address: string): Promise<GeocodeResult>;
17
- /**
18
- * Convert coordinates to DigiPin
19
- */
20
13
  coordinatesToDigiPin(latitude: number, longitude: number): Promise<GeocodeResult>;
21
- /**
22
- * Reverse geocode DigiPin to coordinates
23
- */
24
14
  reverseGeocode(digipin: string): Promise<ReverseGeocodeResult>;
25
- /**
26
- * πŸš€ REVOLUTIONARY: Get administrative boundaries from coordinates
27
- */
28
15
  lookupLocationFromCoordinates(latitude: number, longitude: number): Promise<LocationLookupResult>;
29
- /**
30
- * πŸš€ REVOLUTIONARY: Get administrative boundaries from DigiPin
31
- */
32
16
  lookupLocationFromDigiPin(digipin: string): Promise<LocationLookupResult>;
33
- /**
34
- * πŸš€ REVOLUTIONARY: Batch location lookup
35
- */
36
17
  batchLocationLookup(locations: BatchLocationRequest[]): Promise<BatchLocationResult>;
37
- /**
38
- * πŸ“Š Get live location statistics
39
- */
40
18
  getLocationStatistics(): Promise<LocationStatistics>;
41
- /**
42
- * Check API usage and limits
43
- */
44
19
  getUsage(): Promise<any>;
45
- /**
46
- * Get API health status
47
- */
48
20
  getHealth(): Promise<any>;
49
- /**
50
- * πŸ”” Register a webhook endpoint
51
- */
52
21
  registerWebhook(webhook: CreateWebhookRequest): Promise<CreateWebhookResponse>;
53
- /**
54
- * πŸ”” List all webhook endpoints
55
- */
56
22
  listWebhooks(): Promise<WebhookEndpoint[]>;
57
- /**
58
- * πŸ”” Get a specific webhook endpoint (by finding it in the list)
59
- */
60
23
  getWebhook(webhookId: string): Promise<WebhookEndpoint>;
61
- /**
62
- * πŸ”” Delete a webhook endpoint
63
- */
64
24
  deleteWebhook(webhookId: string): Promise<void>;
65
- /**
66
- * πŸ”” Test a webhook endpoint
67
- */
68
25
  testWebhook(webhookId: string): Promise<TestWebhookResponse>;
69
26
  private validateCoordinates;
70
27
  private validateDigiPin;
71
28
  }
72
- //# sourceMappingURL=client.d.ts.map
29
+ export {};