better-auth-studio 1.0.20-beta.2 → 1.0.20-beta.5

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.
@@ -0,0 +1,226 @@
1
+ import { existsSync, readFileSync } from 'fs';
2
+ import maxmind from 'maxmind';
3
+ import { dirname, join } from 'path';
4
+ import { fileURLToPath } from 'url';
5
+ const __filename = fileURLToPath(import.meta.url);
6
+ const __dirname = dirname(__filename);
7
+ let lookup = null;
8
+ let geoDbPath = null;
9
+ let defaultDatabase = null;
10
+ export function setGeoDbPath(path) {
11
+ geoDbPath = path;
12
+ }
13
+ function loadDefaultDatabase() {
14
+ try {
15
+ const defaultDbPath = join(__dirname, '../data/default-geo.json');
16
+ if (existsSync(defaultDbPath)) {
17
+ const dbContent = readFileSync(defaultDbPath, 'utf-8');
18
+ defaultDatabase = JSON.parse(dbContent);
19
+ console.log(`✅ Default geolocation database loaded (${defaultDatabase?.countries} countries, ${defaultDatabase?.totalRanges} IP ranges)`);
20
+ }
21
+ else {
22
+ console.log('⚠️ Default geolocation database not found, using basic fallback');
23
+ }
24
+ }
25
+ catch (error) {
26
+ console.error('❌ Failed to load default geolocation database:', error);
27
+ }
28
+ }
29
+ export async function initializeGeoService() {
30
+ try {
31
+ const dbPath = geoDbPath || './data/GeoLite2-City.mmdb';
32
+ lookup = await maxmind.open(dbPath);
33
+ }
34
+ catch (error) {
35
+ lookup = null;
36
+ loadDefaultDatabase();
37
+ }
38
+ }
39
+ export function resolveIPLocation(ipAddress) {
40
+ if (lookup) {
41
+ try {
42
+ const result = lookup.get(ipAddress);
43
+ if (result) {
44
+ return {
45
+ country: result.country?.names?.en || 'Unknown',
46
+ countryCode: result.country?.iso_code || '',
47
+ city: result.city?.names?.en || 'Unknown',
48
+ region: result.subdivisions?.[0]?.names?.en || 'Unknown',
49
+ };
50
+ }
51
+ }
52
+ catch (error) {
53
+ console.error('MaxMind lookup failed:', error);
54
+ }
55
+ }
56
+ if (defaultDatabase) {
57
+ const location = findLocationInDefaultDatabase(ipAddress);
58
+ if (location) {
59
+ return location;
60
+ }
61
+ }
62
+ // Final fallback to basic IP range detection
63
+ return resolveIPFromRanges(ipAddress);
64
+ }
65
+ function findLocationInDefaultDatabase(ipAddress) {
66
+ if (!defaultDatabase)
67
+ return null;
68
+ const ipToNumber = (ip) => {
69
+ return ip.split('.').reduce((acc, part) => (acc << 8) + parseInt(part), 0) >>> 0;
70
+ };
71
+ const isIPInRange = (ip, minIP, maxIP) => {
72
+ const ipNum = ipToNumber(ip);
73
+ const minNum = ipToNumber(minIP);
74
+ const maxNum = ipToNumber(maxIP);
75
+ return ipNum >= minNum && ipNum <= maxNum;
76
+ };
77
+ for (const countryData of defaultDatabase.ranges) {
78
+ for (const range of countryData.ranges) {
79
+ if (isIPInRange(ipAddress, range.min, range.max)) {
80
+ return {
81
+ country: countryData.country,
82
+ countryCode: countryData.countryCode,
83
+ city: countryData.city,
84
+ region: countryData.region,
85
+ };
86
+ }
87
+ }
88
+ }
89
+ return null;
90
+ }
91
+ function resolveIPFromRanges(ipAddress) {
92
+ const countryIPRanges = [
93
+ {
94
+ country: 'United States',
95
+ countryCode: 'US',
96
+ city: 'New York',
97
+ region: 'New York',
98
+ ranges: [
99
+ { min: '8.0.0.0', max: '8.255.255.255' },
100
+ { min: '24.0.0.0', max: '24.255.255.255' },
101
+ ],
102
+ },
103
+ {
104
+ country: 'United Kingdom',
105
+ countryCode: 'GB',
106
+ city: 'London',
107
+ region: 'England',
108
+ ranges: [
109
+ { min: '2.0.0.0', max: '2.255.255.255' },
110
+ { min: '5.0.0.0', max: '5.255.255.255' },
111
+ ],
112
+ },
113
+ {
114
+ country: 'Germany',
115
+ countryCode: 'DE',
116
+ city: 'Berlin',
117
+ region: 'Berlin',
118
+ ranges: [
119
+ { min: '46.0.0.0', max: '46.255.255.255' },
120
+ { min: '62.0.0.0', max: '62.255.255.255' },
121
+ ],
122
+ },
123
+ {
124
+ country: 'France',
125
+ countryCode: 'FR',
126
+ city: 'Paris',
127
+ region: 'Île-de-France',
128
+ ranges: [
129
+ { min: '37.0.0.0', max: '37.255.255.255' },
130
+ { min: '62.0.0.0', max: '62.255.255.255' },
131
+ ],
132
+ },
133
+ {
134
+ country: 'Japan',
135
+ countryCode: 'JP',
136
+ city: 'Tokyo',
137
+ region: 'Tokyo',
138
+ ranges: [
139
+ { min: '126.0.0.0', max: '126.255.255.255' },
140
+ { min: '210.0.0.0', max: '210.255.255.255' },
141
+ ],
142
+ },
143
+ {
144
+ country: 'Canada',
145
+ countryCode: 'CA',
146
+ city: 'Toronto',
147
+ region: 'Ontario',
148
+ ranges: [
149
+ { min: '24.0.0.0', max: '24.255.255.255' },
150
+ { min: '70.0.0.0', max: '70.255.255.255' },
151
+ ],
152
+ },
153
+ {
154
+ country: 'Australia',
155
+ countryCode: 'AU',
156
+ city: 'Sydney',
157
+ region: 'New South Wales',
158
+ ranges: [
159
+ { min: '1.0.0.0', max: '1.255.255.255' },
160
+ { min: '27.0.0.0', max: '27.255.255.255' },
161
+ ],
162
+ },
163
+ {
164
+ country: 'Brazil',
165
+ countryCode: 'BR',
166
+ city: 'São Paulo',
167
+ region: 'São Paulo',
168
+ ranges: [
169
+ { min: '177.0.0.0', max: '177.255.255.255' },
170
+ { min: '201.0.0.0', max: '201.255.255.255' },
171
+ ],
172
+ },
173
+ {
174
+ country: 'India',
175
+ countryCode: 'IN',
176
+ city: 'Mumbai',
177
+ region: 'Maharashtra',
178
+ ranges: [
179
+ { min: '103.0.0.0', max: '103.255.255.255' },
180
+ { min: '117.0.0.0', max: '117.255.255.255' },
181
+ ],
182
+ },
183
+ {
184
+ country: 'China',
185
+ countryCode: 'CN',
186
+ city: 'Beijing',
187
+ region: 'Beijing',
188
+ ranges: [
189
+ { min: '1.0.0.0', max: '1.255.255.255' },
190
+ { min: '14.0.0.0', max: '14.255.255.255' },
191
+ ],
192
+ },
193
+ ];
194
+ const ipParts = ipAddress.split('.').map(Number);
195
+ if (ipParts.length !== 4 || ipParts.some((part) => isNaN(part) || part < 0 || part > 255)) {
196
+ return null;
197
+ }
198
+ for (const countryData of countryIPRanges) {
199
+ for (const range of countryData.ranges) {
200
+ if (isIPInRange(ipAddress, range.min, range.max)) {
201
+ return {
202
+ country: countryData.country,
203
+ countryCode: countryData.countryCode,
204
+ city: countryData.city,
205
+ region: countryData.region,
206
+ };
207
+ }
208
+ }
209
+ }
210
+ return {
211
+ country: 'Unknown',
212
+ countryCode: '',
213
+ city: 'Unknown',
214
+ region: 'Unknown',
215
+ };
216
+ }
217
+ function isIPInRange(ip, minIP, maxIP) {
218
+ const ipToNumber = (ip) => {
219
+ return ip.split('.').reduce((acc, part) => (acc << 8) + parseInt(part), 0) >>> 0;
220
+ };
221
+ const ipNum = ipToNumber(ip);
222
+ const minNum = ipToNumber(minIP);
223
+ const maxNum = ipToNumber(maxIP);
224
+ return ipNum >= minNum && ipNum <= maxNum;
225
+ }
226
+ //# sourceMappingURL=geo-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"geo-service.js","sourceRoot":"","sources":["../src/geo-service.ts"],"names":[],"mappings":"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"}
package/dist/routes.d.ts CHANGED
@@ -1,4 +1,5 @@
1
- import { AuthConfig } from './config.js';
1
+ import { Router } from 'express';
2
+ import type { AuthConfig } from './config.js';
2
3
  export declare function safeImportAuthConfig(authConfigPath: string): Promise<any>;
3
- export declare function createRoutes(authConfig: AuthConfig, configPath?: string): import("express-serve-static-core").Router;
4
+ export declare function createRoutes(authConfig: AuthConfig, configPath?: string, geoDbPath?: string): Router;
4
5
  //# sourceMappingURL=routes.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../src/routes.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAoCzC,wBAAsB,oBAAoB,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CA6J/E;AAwBD,wBAAgB,YAAY,CAAC,UAAU,EAAE,UAAU,EAAE,UAAU,CAAC,EAAE,MAAM,8CAskEvE"}
1
+ {"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../src/routes.ts"],"names":[],"mappings":"AAAA,OAAO,EAA+B,MAAM,EAAE,MAAM,SAAS,CAAC;AAY9D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAiC9C,wBAAsB,oBAAoB,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CA4J/E;AAyBD,wBAAgB,YAAY,CAC1B,UAAU,EAAE,UAAU,EACtB,UAAU,CAAC,EAAE,MAAM,EACnB,SAAS,CAAC,EAAE,MAAM,GACjB,MAAM,CAwsER"}