@moxon/api 6.0.0-pre
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/.prettierignore +5 -0
- package/LICENSE +28 -0
- package/README.md +277 -0
- package/dist/app.d.ts +2 -0
- package/dist/app.js +55 -0
- package/dist/app.js.map +1 -0
- package/dist/config/env.d.ts +22 -0
- package/dist/config/env.js +36 -0
- package/dist/config/env.js.map +1 -0
- package/dist/config/plans.d.ts +26 -0
- package/dist/config/plans.js +44 -0
- package/dist/config/plans.js.map +1 -0
- package/dist/config/versions.d.ts +18 -0
- package/dist/config/versions.js +248 -0
- package/dist/config/versions.js.map +1 -0
- package/dist/constants.d.ts +48 -0
- package/dist/constants.js +75 -0
- package/dist/constants.js.map +1 -0
- package/dist/middleware/cors.d.ts +2 -0
- package/dist/middleware/cors.js +31 -0
- package/dist/middleware/cors.js.map +1 -0
- package/dist/middleware/error.d.ts +4 -0
- package/dist/middleware/error.js +8 -0
- package/dist/middleware/error.js.map +1 -0
- package/dist/middleware/json.d.ts +2 -0
- package/dist/middleware/json.js +8 -0
- package/dist/middleware/json.js.map +1 -0
- package/dist/middleware/logger.d.ts +26 -0
- package/dist/middleware/logger.js +65 -0
- package/dist/middleware/logger.js.map +1 -0
- package/dist/middleware/ratelimit.d.ts +2 -0
- package/dist/middleware/ratelimit.js +83 -0
- package/dist/middleware/ratelimit.js.map +1 -0
- package/dist/middleware/version.d.ts +3 -0
- package/dist/middleware/version.js +30 -0
- package/dist/middleware/version.js.map +1 -0
- package/dist/modules/v4/address.d.ts +20 -0
- package/dist/modules/v4/address.js +381 -0
- package/dist/modules/v4/address.js.map +1 -0
- package/dist/modules/v4/agent.d.ts +30 -0
- package/dist/modules/v4/agent.js +92 -0
- package/dist/modules/v4/agent.js.map +1 -0
- package/dist/modules/v4/algorithms.d.ts +90 -0
- package/dist/modules/v4/algorithms.js +279 -0
- package/dist/modules/v4/algorithms.js.map +1 -0
- package/dist/modules/v4/avatar.d.ts +23 -0
- package/dist/modules/v4/avatar.js +136 -0
- package/dist/modules/v4/avatar.js.map +1 -0
- package/dist/modules/v4/barcode.d.ts +27 -0
- package/dist/modules/v4/barcode.js +440 -0
- package/dist/modules/v4/barcode.js.map +1 -0
- package/dist/modules/v4/captcha.d.ts +22 -0
- package/dist/modules/v4/captcha.js +79 -0
- package/dist/modules/v4/captcha.js.map +1 -0
- package/dist/modules/v4/chat.d.ts +21 -0
- package/dist/modules/v4/chat.js +100 -0
- package/dist/modules/v4/chat.js.map +1 -0
- package/dist/modules/v4/color.d.ts +16 -0
- package/dist/modules/v4/color.js +59 -0
- package/dist/modules/v4/color.js.map +1 -0
- package/dist/modules/v4/convert.d.ts +15 -0
- package/dist/modules/v4/convert.js +116 -0
- package/dist/modules/v4/convert.js.map +1 -0
- package/dist/modules/v4/credit.d.ts +22 -0
- package/dist/modules/v4/credit.js +104 -0
- package/dist/modules/v4/credit.js.map +1 -0
- package/dist/modules/v4/cron.d.ts +17 -0
- package/dist/modules/v4/cron.js +202 -0
- package/dist/modules/v4/cron.js.map +1 -0
- package/dist/modules/v4/dice.d.ts +16 -0
- package/dist/modules/v4/dice.js +37 -0
- package/dist/modules/v4/dice.js.map +1 -0
- package/dist/modules/v4/domain.d.ts +6 -0
- package/dist/modules/v4/domain.js +83 -0
- package/dist/modules/v4/domain.js.map +1 -0
- package/dist/modules/v4/encode.d.ts +81 -0
- package/dist/modules/v4/encode.js +236 -0
- package/dist/modules/v4/encode.js.map +1 -0
- package/dist/modules/v4/geo.d.ts +30 -0
- package/dist/modules/v4/geo.js +51 -0
- package/dist/modules/v4/geo.js.map +1 -0
- package/dist/modules/v4/hash.d.ts +15 -0
- package/dist/modules/v4/hash.js +25 -0
- package/dist/modules/v4/hash.js.map +1 -0
- package/dist/modules/v4/hyperplanning.d.ts +19 -0
- package/dist/modules/v4/hyperplanning.js +80 -0
- package/dist/modules/v4/hyperplanning.js.map +1 -0
- package/dist/modules/v4/ip.d.ts +19 -0
- package/dist/modules/v4/ip.js +132 -0
- package/dist/modules/v4/ip.js.map +1 -0
- package/dist/modules/v4/levenshtein.d.ts +13 -0
- package/dist/modules/v4/levenshtein.js +37 -0
- package/dist/modules/v4/levenshtein.js.map +1 -0
- package/dist/modules/v4/palette.d.ts +19 -0
- package/dist/modules/v4/palette.js +56 -0
- package/dist/modules/v4/palette.js.map +1 -0
- package/dist/modules/v4/password.d.ts +25 -0
- package/dist/modules/v4/password.js +343 -0
- package/dist/modules/v4/password.js.map +1 -0
- package/dist/modules/v4/personal.d.ts +6 -0
- package/dist/modules/v4/personal.js +121 -0
- package/dist/modules/v4/personal.js.map +1 -0
- package/dist/modules/v4/placeholder.d.ts +30 -0
- package/dist/modules/v4/placeholder.js +160 -0
- package/dist/modules/v4/placeholder.js.map +1 -0
- package/dist/modules/v4/qrcode.d.ts +25 -0
- package/dist/modules/v4/qrcode.js +92 -0
- package/dist/modules/v4/qrcode.js.map +1 -0
- package/dist/modules/v4/regex.d.ts +23 -0
- package/dist/modules/v4/regex.js +48 -0
- package/dist/modules/v4/regex.js.map +1 -0
- package/dist/modules/v4/statistics.d.ts +20 -0
- package/dist/modules/v4/statistics.js +48 -0
- package/dist/modules/v4/statistics.js.map +1 -0
- package/dist/modules/v4/text.d.ts +43 -0
- package/dist/modules/v4/text.js +323 -0
- package/dist/modules/v4/text.js.map +1 -0
- package/dist/modules/v4/tic_tac_toe.d.ts +19 -0
- package/dist/modules/v4/tic_tac_toe.js +214 -0
- package/dist/modules/v4/tic_tac_toe.js.map +1 -0
- package/dist/modules/v4/time.d.ts +15 -0
- package/dist/modules/v4/time.js +124 -0
- package/dist/modules/v4/time.js.map +1 -0
- package/dist/modules/v4/token.d.ts +9 -0
- package/dist/modules/v4/token.js +45 -0
- package/dist/modules/v4/token.js.map +1 -0
- package/dist/modules/v4/username.d.ts +6 -0
- package/dist/modules/v4/username.js +92 -0
- package/dist/modules/v4/username.js.map +1 -0
- package/dist/modules/v4/validate.d.ts +34 -0
- package/dist/modules/v4/validate.js +75 -0
- package/dist/modules/v4/validate.js.map +1 -0
- package/dist/modules/v4.d.ts +32 -0
- package/dist/modules/v4.js +33 -0
- package/dist/modules/v4.js.map +1 -0
- package/dist/modules/v5/address.d.ts +5 -0
- package/dist/modules/v5/address.js +20 -0
- package/dist/modules/v5/address.js.map +1 -0
- package/dist/modules/v5/algorithms.d.ts +9 -0
- package/dist/modules/v5/algorithms.js +39 -0
- package/dist/modules/v5/algorithms.js.map +1 -0
- package/dist/modules/v5/asymmetric.d.ts +26 -0
- package/dist/modules/v5/asymmetric.js +74 -0
- package/dist/modules/v5/asymmetric.js.map +1 -0
- package/dist/modules/v5/barcode.d.ts +27 -0
- package/dist/modules/v5/barcode.js +424 -0
- package/dist/modules/v5/barcode.js.map +1 -0
- package/dist/modules/v5/base.d.ts +16 -0
- package/dist/modules/v5/base.js +41 -0
- package/dist/modules/v5/base.js.map +1 -0
- package/dist/modules/v5/captcha.d.ts +27 -0
- package/dist/modules/v5/captcha.js +136 -0
- package/dist/modules/v5/captcha.js.map +1 -0
- package/dist/modules/v5/case.d.ts +10 -0
- package/dist/modules/v5/case.js +57 -0
- package/dist/modules/v5/case.js.map +1 -0
- package/dist/modules/v5/chart.d.ts +53 -0
- package/dist/modules/v5/chart.js +385 -0
- package/dist/modules/v5/chart.js.map +1 -0
- package/dist/modules/v5/chat.d.ts +21 -0
- package/dist/modules/v5/chat.js +107 -0
- package/dist/modules/v5/chat.js.map +1 -0
- package/dist/modules/v5/csv.d.ts +29 -0
- package/dist/modules/v5/csv.js +143 -0
- package/dist/modules/v5/csv.js.map +1 -0
- package/dist/modules/v5/diff.d.ts +20 -0
- package/dist/modules/v5/diff.js +81 -0
- package/dist/modules/v5/diff.js.map +1 -0
- package/dist/modules/v5/evaluate.d.ts +14 -0
- package/dist/modules/v5/evaluate.js +284 -0
- package/dist/modules/v5/evaluate.js.map +1 -0
- package/dist/modules/v5/jwt.d.ts +11 -0
- package/dist/modules/v5/jwt.js +42 -0
- package/dist/modules/v5/jwt.js.map +1 -0
- package/dist/modules/v5/matrix.d.ts +77 -0
- package/dist/modules/v5/matrix.js +239 -0
- package/dist/modules/v5/matrix.js.map +1 -0
- package/dist/modules/v5/otp.d.ts +30 -0
- package/dist/modules/v5/otp.js +117 -0
- package/dist/modules/v5/otp.js.map +1 -0
- package/dist/modules/v5/pow.d.ts +29 -0
- package/dist/modules/v5/pow.js +49 -0
- package/dist/modules/v5/pow.js.map +1 -0
- package/dist/modules/v5/read.d.ts +20 -0
- package/dist/modules/v5/read.js +59 -0
- package/dist/modules/v5/read.js.map +1 -0
- package/dist/modules/v5/semver.d.ts +33 -0
- package/dist/modules/v5/semver.js +99 -0
- package/dist/modules/v5/semver.js.map +1 -0
- package/dist/modules/v5/symmetric.d.ts +15 -0
- package/dist/modules/v5/symmetric.js +88 -0
- package/dist/modules/v5/symmetric.js.map +1 -0
- package/dist/modules/v5/text.d.ts +5 -0
- package/dist/modules/v5/text.js +12 -0
- package/dist/modules/v5/text.js.map +1 -0
- package/dist/modules/v5/tic_tac_toe.d.ts +19 -0
- package/dist/modules/v5/tic_tac_toe.js +226 -0
- package/dist/modules/v5/tic_tac_toe.js.map +1 -0
- package/dist/modules/v5/url.d.ts +18 -0
- package/dist/modules/v5/url.js +51 -0
- package/dist/modules/v5/url.js.map +1 -0
- package/dist/modules/v5/uuid.d.ts +25 -0
- package/dist/modules/v5/uuid.js +40 -0
- package/dist/modules/v5/uuid.js.map +1 -0
- package/dist/modules/v5.d.ts +24 -0
- package/dist/modules/v5.js +25 -0
- package/dist/modules/v5.js.map +1 -0
- package/dist/modules/v6.d.ts +1 -0
- package/dist/modules/v6.js +2 -0
- package/dist/modules/v6.js.map +1 -0
- package/dist/routes/delete.d.ts +2 -0
- package/dist/routes/delete.js +73 -0
- package/dist/routes/delete.js.map +1 -0
- package/dist/routes/get.d.ts +2 -0
- package/dist/routes/get.js +857 -0
- package/dist/routes/get.js.map +1 -0
- package/dist/routes/index.d.ts +2 -0
- package/dist/routes/index.js +95 -0
- package/dist/routes/index.js.map +1 -0
- package/dist/routes/patch.d.ts +2 -0
- package/dist/routes/patch.js +45 -0
- package/dist/routes/patch.js.map +1 -0
- package/dist/routes/post.d.ts +2 -0
- package/dist/routes/post.js +604 -0
- package/dist/routes/post.js.map +1 -0
- package/dist/storage/index.d.ts +5 -0
- package/dist/storage/index.js +14 -0
- package/dist/storage/index.js.map +1 -0
- package/dist/types/storage.d.ts +52 -0
- package/dist/types/storage.js +2 -0
- package/dist/types/storage.js.map +1 -0
- package/dist/utils/challenge.d.ts +40 -0
- package/dist/utils/challenge.js +75 -0
- package/dist/utils/challenge.js.map +1 -0
- package/dist/utils/colors.d.ts +44 -0
- package/dist/utils/colors.js +93 -0
- package/dist/utils/colors.js.map +1 -0
- package/dist/utils/helpers.d.ts +55 -0
- package/dist/utils/helpers.js +82 -0
- package/dist/utils/helpers.js.map +1 -0
- package/dist/utils/response.d.ts +9 -0
- package/dist/utils/response.js +24 -0
- package/dist/utils/response.js.map +1 -0
- package/package.json +90 -0
- package/robots.txt +74 -0
- package/src/favicon.ico +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ratelimit.js","sourceRoot":"","sources":["../../src/middleware/ratelimit.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { versions } from '../config/versions.js';
|
|
2
|
+
import { error } from '../utils/response.js';
|
|
3
|
+
export function versionCheckMiddleware(req, res, next) {
|
|
4
|
+
const version = req.params.version;
|
|
5
|
+
const latest = Object.keys(versions).pop();
|
|
6
|
+
req.version = version;
|
|
7
|
+
req.latest = latest;
|
|
8
|
+
if (!versions[version]) {
|
|
9
|
+
error(res, 404, `Invalid API version (${version}).`);
|
|
10
|
+
return;
|
|
11
|
+
}
|
|
12
|
+
req.module = versions[version].modules;
|
|
13
|
+
if (!req.module) {
|
|
14
|
+
error(res, 404, `Module not found for version ${version}.`);
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
17
|
+
next();
|
|
18
|
+
}
|
|
19
|
+
export function endpointCheckMiddleware(req, res, next) {
|
|
20
|
+
const version = req.params.version;
|
|
21
|
+
const endpoint = req.params.endpoint;
|
|
22
|
+
req.version = version;
|
|
23
|
+
req.endpoint = endpoint;
|
|
24
|
+
if (!endpoint) {
|
|
25
|
+
error(res, 404, `Endpoint '${endpoint}' does not exist in ${req.version}.`);
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
next();
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=version.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/middleware/version.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAE7C,MAAM,UAAU,sBAAsB,CAAC,GAAY,EAAE,GAAa,EAAE,IAAkB;IAClF,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,OAAiB,CAAC;IAC7C,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,EAAG,CAAC;IAE5C,GAAG,CAAC,OAAO,GAAG,OAAO,CAAC;IACtB,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC;IAEpB,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QACrB,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,wBAAwB,OAAO,IAAI,CAAC,CAAC;QACrD,OAAO;IACX,CAAC;IAED,GAAG,CAAC,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAE,CAAC,OAAO,CAAC;IAExC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;QACd,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,gCAAgC,OAAO,GAAG,CAAC,CAAC;QAC5D,OAAO;IACX,CAAC;IAED,IAAI,EAAE,CAAC;AACX,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,GAAY,EAAE,GAAa,EAAE,IAAkB;IACnF,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,OAAiB,CAAC;IAC7C,MAAM,QAAQ,GAAG,GAAG,CAAC,MAAM,CAAC,QAAkB,CAAC;IAE/C,GAAG,CAAC,OAAO,GAAG,OAAO,CAAC;IACtB,GAAG,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAExB,IAAI,CAAC,QAAQ,EAAE,CAAC;QACZ,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,aAAa,QAAQ,uBAAuB,GAAG,CAAC,OAAO,GAAG,CAAC,CAAC;QAC5E,OAAO;IACX,CAAC;IACD,IAAI,EAAE,CAAC;AACX,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export interface Address {
|
|
2
|
+
street: string;
|
|
3
|
+
city: string;
|
|
4
|
+
zip: string;
|
|
5
|
+
state: string;
|
|
6
|
+
country: string;
|
|
7
|
+
countryCode: string;
|
|
8
|
+
}
|
|
9
|
+
export interface AddressResult {
|
|
10
|
+
addresses: Address[];
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Generates one or more fictional postal addresses for a given country.
|
|
14
|
+
*
|
|
15
|
+
* @param countryCode - Country code: "fr", "us", "uk", "de", or "es" (random if omitted)
|
|
16
|
+
* @param count - Number of addresses to generate (1–10)
|
|
17
|
+
* @returns Array of addresses with street, city, zip, state, country, and countryCode
|
|
18
|
+
* @throws Error if the country code is invalid or count is out of range
|
|
19
|
+
*/
|
|
20
|
+
export default function address(countryCode?: string, count?: number): AddressResult;
|
|
@@ -0,0 +1,381 @@
|
|
|
1
|
+
import { MAX_ADDRESS_COUNT } from '../../constants.js';
|
|
2
|
+
import { random, randomNumber } from '../../utils/helpers.js';
|
|
3
|
+
function randomChar(chars) {
|
|
4
|
+
return chars[Math.floor(Math.random() * chars.length)];
|
|
5
|
+
}
|
|
6
|
+
const ALPHA = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
|
|
7
|
+
const countries = {
|
|
8
|
+
fr: {
|
|
9
|
+
name: 'France',
|
|
10
|
+
streetTypes: ['Rue', 'Avenue', 'Boulevard', 'Allée', 'Impasse', 'Place', 'Chemin', 'Route', 'Voie', 'Passage'],
|
|
11
|
+
streetNames: [
|
|
12
|
+
'de la Paix',
|
|
13
|
+
'Victor Hugo',
|
|
14
|
+
'Jean Jaurès',
|
|
15
|
+
'de la République',
|
|
16
|
+
'du Général de Gaulle',
|
|
17
|
+
'de la Liberté',
|
|
18
|
+
'des Fleurs',
|
|
19
|
+
'du Moulin',
|
|
20
|
+
'de la Forêt',
|
|
21
|
+
'des Lilas',
|
|
22
|
+
'du Château',
|
|
23
|
+
'de la Mairie',
|
|
24
|
+
'de la Gare',
|
|
25
|
+
'du Commerce',
|
|
26
|
+
'de la Fontaine',
|
|
27
|
+
'de la Croix',
|
|
28
|
+
'des Vignes',
|
|
29
|
+
'du Marché',
|
|
30
|
+
"de l'Église",
|
|
31
|
+
'des Acacias',
|
|
32
|
+
],
|
|
33
|
+
cities: [
|
|
34
|
+
'Paris',
|
|
35
|
+
'Lyon',
|
|
36
|
+
'Marseille',
|
|
37
|
+
'Toulouse',
|
|
38
|
+
'Nice',
|
|
39
|
+
'Nantes',
|
|
40
|
+
'Strasbourg',
|
|
41
|
+
'Montpellier',
|
|
42
|
+
'Bordeaux',
|
|
43
|
+
'Lille',
|
|
44
|
+
'Rennes',
|
|
45
|
+
'Reims',
|
|
46
|
+
'Le Havre',
|
|
47
|
+
'Saint-Étienne',
|
|
48
|
+
'Toulon',
|
|
49
|
+
'Grenoble',
|
|
50
|
+
'Dijon',
|
|
51
|
+
'Angers',
|
|
52
|
+
'Nîmes',
|
|
53
|
+
'Villeurbanne',
|
|
54
|
+
],
|
|
55
|
+
regions: [
|
|
56
|
+
'Île-de-France',
|
|
57
|
+
'Auvergne-Rhône-Alpes',
|
|
58
|
+
"Provence-Alpes-Côte d'Azur",
|
|
59
|
+
'Occitanie',
|
|
60
|
+
'Hauts-de-France',
|
|
61
|
+
'Nouvelle-Aquitaine',
|
|
62
|
+
'Grand Est',
|
|
63
|
+
'Pays de la Loire',
|
|
64
|
+
'Bretagne',
|
|
65
|
+
'Normandie',
|
|
66
|
+
'Bourgogne-Franche-Comté',
|
|
67
|
+
'Centre-Val de Loire',
|
|
68
|
+
],
|
|
69
|
+
zipFormat: () => String(randomNumber(10000, 99999)).padStart(5, '0'),
|
|
70
|
+
},
|
|
71
|
+
us: {
|
|
72
|
+
name: 'United States',
|
|
73
|
+
streetTypes: ['Street', 'Avenue', 'Boulevard', 'Drive', 'Road', 'Lane', 'Court', 'Way', 'Place', 'Circle'],
|
|
74
|
+
streetNames: [
|
|
75
|
+
'Main',
|
|
76
|
+
'Oak',
|
|
77
|
+
'Maple',
|
|
78
|
+
'Cedar',
|
|
79
|
+
'Pine',
|
|
80
|
+
'Elm',
|
|
81
|
+
'Washington',
|
|
82
|
+
'Lincoln',
|
|
83
|
+
'Park',
|
|
84
|
+
'Lake',
|
|
85
|
+
'Hill',
|
|
86
|
+
'River',
|
|
87
|
+
'Sunset',
|
|
88
|
+
'Forest',
|
|
89
|
+
'Meadow',
|
|
90
|
+
'Valley',
|
|
91
|
+
'Highland',
|
|
92
|
+
'Willow',
|
|
93
|
+
'Spring',
|
|
94
|
+
'Church',
|
|
95
|
+
],
|
|
96
|
+
cities: [
|
|
97
|
+
'New York',
|
|
98
|
+
'Los Angeles',
|
|
99
|
+
'Chicago',
|
|
100
|
+
'Houston',
|
|
101
|
+
'Phoenix',
|
|
102
|
+
'Philadelphia',
|
|
103
|
+
'San Antonio',
|
|
104
|
+
'San Diego',
|
|
105
|
+
'Dallas',
|
|
106
|
+
'San Jose',
|
|
107
|
+
'Austin',
|
|
108
|
+
'Jacksonville',
|
|
109
|
+
'Fort Worth',
|
|
110
|
+
'Columbus',
|
|
111
|
+
'Charlotte',
|
|
112
|
+
'Indianapolis',
|
|
113
|
+
'San Francisco',
|
|
114
|
+
'Seattle',
|
|
115
|
+
'Denver',
|
|
116
|
+
'Nashville',
|
|
117
|
+
],
|
|
118
|
+
regions: [
|
|
119
|
+
'California',
|
|
120
|
+
'Texas',
|
|
121
|
+
'Florida',
|
|
122
|
+
'New York',
|
|
123
|
+
'Pennsylvania',
|
|
124
|
+
'Illinois',
|
|
125
|
+
'Ohio',
|
|
126
|
+
'Georgia',
|
|
127
|
+
'North Carolina',
|
|
128
|
+
'Michigan',
|
|
129
|
+
'New Jersey',
|
|
130
|
+
'Virginia',
|
|
131
|
+
'Washington',
|
|
132
|
+
'Arizona',
|
|
133
|
+
'Massachusetts',
|
|
134
|
+
'Tennessee',
|
|
135
|
+
'Indiana',
|
|
136
|
+
'Colorado',
|
|
137
|
+
'Missouri',
|
|
138
|
+
'Maryland',
|
|
139
|
+
],
|
|
140
|
+
zipFormat: () => String(randomNumber(10000, 99999)).padStart(5, '0'),
|
|
141
|
+
},
|
|
142
|
+
uk: {
|
|
143
|
+
name: 'United Kingdom',
|
|
144
|
+
streetTypes: ['Street', 'Road', 'Avenue', 'Lane', 'Close', 'Drive', 'Way', 'Court', 'Grove', 'Place'],
|
|
145
|
+
streetNames: [
|
|
146
|
+
'High',
|
|
147
|
+
'Church',
|
|
148
|
+
'Station',
|
|
149
|
+
'Park',
|
|
150
|
+
'Manor',
|
|
151
|
+
'Mill',
|
|
152
|
+
'Victoria',
|
|
153
|
+
'King',
|
|
154
|
+
'Queen',
|
|
155
|
+
'Albert',
|
|
156
|
+
'George',
|
|
157
|
+
'York',
|
|
158
|
+
'Oxford',
|
|
159
|
+
'Cambridge',
|
|
160
|
+
'Windsor',
|
|
161
|
+
'Richmond',
|
|
162
|
+
'Elm',
|
|
163
|
+
'Oak',
|
|
164
|
+
'Ash',
|
|
165
|
+
'Rose',
|
|
166
|
+
],
|
|
167
|
+
cities: [
|
|
168
|
+
'London',
|
|
169
|
+
'Birmingham',
|
|
170
|
+
'Manchester',
|
|
171
|
+
'Glasgow',
|
|
172
|
+
'Liverpool',
|
|
173
|
+
'Bristol',
|
|
174
|
+
'Sheffield',
|
|
175
|
+
'Leeds',
|
|
176
|
+
'Edinburgh',
|
|
177
|
+
'Leicester',
|
|
178
|
+
'Coventry',
|
|
179
|
+
'Bradford',
|
|
180
|
+
'Cardiff',
|
|
181
|
+
'Belfast',
|
|
182
|
+
'Nottingham',
|
|
183
|
+
'Kingston upon Hull',
|
|
184
|
+
'Newcastle',
|
|
185
|
+
'Stoke-on-Trent',
|
|
186
|
+
'Southampton',
|
|
187
|
+
'Derby',
|
|
188
|
+
],
|
|
189
|
+
regions: [
|
|
190
|
+
'England',
|
|
191
|
+
'Scotland',
|
|
192
|
+
'Wales',
|
|
193
|
+
'Northern Ireland',
|
|
194
|
+
'Greater London',
|
|
195
|
+
'South East',
|
|
196
|
+
'North West',
|
|
197
|
+
'East of England',
|
|
198
|
+
'West Midlands',
|
|
199
|
+
'South West',
|
|
200
|
+
'Yorkshire',
|
|
201
|
+
'East Midlands',
|
|
202
|
+
'North East',
|
|
203
|
+
],
|
|
204
|
+
zipFormat: () => `${randomChar(ALPHA)}${randomChar(ALPHA)}${randomNumber(1, 9)} ${randomNumber(1, 9)}${randomChar(ALPHA)}${randomChar(ALPHA)}`,
|
|
205
|
+
},
|
|
206
|
+
de: {
|
|
207
|
+
name: 'Germany',
|
|
208
|
+
streetTypes: ['Straße', 'Allee', 'Weg', 'Platz', 'Gasse', 'Ring', 'Damm', 'Ufer', 'Stieg', 'Pfad'],
|
|
209
|
+
streetNames: [
|
|
210
|
+
'Haupt',
|
|
211
|
+
'Bahnhof',
|
|
212
|
+
'Schul',
|
|
213
|
+
'Kirch',
|
|
214
|
+
'Garten',
|
|
215
|
+
'Berg',
|
|
216
|
+
'Wald',
|
|
217
|
+
'Wiesen',
|
|
218
|
+
'Tal',
|
|
219
|
+
'See',
|
|
220
|
+
'Bismarck',
|
|
221
|
+
'Goethe',
|
|
222
|
+
'Schiller',
|
|
223
|
+
'Kant',
|
|
224
|
+
'Hegel',
|
|
225
|
+
'Mozart',
|
|
226
|
+
'Beethoven',
|
|
227
|
+
'Bach',
|
|
228
|
+
'Brahms',
|
|
229
|
+
'Handel',
|
|
230
|
+
],
|
|
231
|
+
cities: [
|
|
232
|
+
'Berlin',
|
|
233
|
+
'Hamburg',
|
|
234
|
+
'Munich',
|
|
235
|
+
'Cologne',
|
|
236
|
+
'Frankfurt',
|
|
237
|
+
'Stuttgart',
|
|
238
|
+
'Düsseldorf',
|
|
239
|
+
'Leipzig',
|
|
240
|
+
'Dortmund',
|
|
241
|
+
'Essen',
|
|
242
|
+
'Bremen',
|
|
243
|
+
'Dresden',
|
|
244
|
+
'Hanover',
|
|
245
|
+
'Nuremberg',
|
|
246
|
+
'Duisburg',
|
|
247
|
+
'Bochum',
|
|
248
|
+
'Wuppertal',
|
|
249
|
+
'Bielefeld',
|
|
250
|
+
'Bonn',
|
|
251
|
+
'Münster',
|
|
252
|
+
],
|
|
253
|
+
regions: [
|
|
254
|
+
'Bayern',
|
|
255
|
+
'Nordrhein-Westfalen',
|
|
256
|
+
'Baden-Württemberg',
|
|
257
|
+
'Niedersachsen',
|
|
258
|
+
'Hessen',
|
|
259
|
+
'Sachsen',
|
|
260
|
+
'Rheinland-Pfalz',
|
|
261
|
+
'Berlin',
|
|
262
|
+
'Schleswig-Holstein',
|
|
263
|
+
'Brandenburg',
|
|
264
|
+
'Sachsen-Anhalt',
|
|
265
|
+
'Thüringen',
|
|
266
|
+
'Hamburg',
|
|
267
|
+
'Mecklenburg-Vorpommern',
|
|
268
|
+
'Bremen',
|
|
269
|
+
'Saarland',
|
|
270
|
+
],
|
|
271
|
+
zipFormat: () => String(randomNumber(10000, 99999)).padStart(5, '0'),
|
|
272
|
+
},
|
|
273
|
+
es: {
|
|
274
|
+
name: 'Spain',
|
|
275
|
+
streetTypes: [
|
|
276
|
+
'Calle',
|
|
277
|
+
'Avenida',
|
|
278
|
+
'Plaza',
|
|
279
|
+
'Paseo',
|
|
280
|
+
'Rambla',
|
|
281
|
+
'Carretera',
|
|
282
|
+
'Camino',
|
|
283
|
+
'Vía',
|
|
284
|
+
'Travesía',
|
|
285
|
+
'Callejón',
|
|
286
|
+
],
|
|
287
|
+
streetNames: [
|
|
288
|
+
'Mayor',
|
|
289
|
+
'Real',
|
|
290
|
+
'Nueva',
|
|
291
|
+
'del Sol',
|
|
292
|
+
'de la Luna',
|
|
293
|
+
'del Rey',
|
|
294
|
+
'de la Reina',
|
|
295
|
+
'del Mar',
|
|
296
|
+
'de la Paz',
|
|
297
|
+
'de la Victoria',
|
|
298
|
+
'Cervantes',
|
|
299
|
+
'Goya',
|
|
300
|
+
'Velázquez',
|
|
301
|
+
'Picasso',
|
|
302
|
+
'Dalí',
|
|
303
|
+
'de España',
|
|
304
|
+
'de Colón',
|
|
305
|
+
'de la Constitución',
|
|
306
|
+
'del Prado',
|
|
307
|
+
'de las Flores',
|
|
308
|
+
],
|
|
309
|
+
cities: [
|
|
310
|
+
'Madrid',
|
|
311
|
+
'Barcelona',
|
|
312
|
+
'Valencia',
|
|
313
|
+
'Seville',
|
|
314
|
+
'Zaragoza',
|
|
315
|
+
'Málaga',
|
|
316
|
+
'Murcia',
|
|
317
|
+
'Palma',
|
|
318
|
+
'Las Palmas',
|
|
319
|
+
'Bilbao',
|
|
320
|
+
'Alicante',
|
|
321
|
+
'Córdoba',
|
|
322
|
+
'Valladolid',
|
|
323
|
+
'Vigo',
|
|
324
|
+
'Gijón',
|
|
325
|
+
'Hospitalet',
|
|
326
|
+
'A Coruña',
|
|
327
|
+
'Granada',
|
|
328
|
+
'Vitoria',
|
|
329
|
+
'Elche',
|
|
330
|
+
],
|
|
331
|
+
regions: [
|
|
332
|
+
'Andalucía',
|
|
333
|
+
'Cataluña',
|
|
334
|
+
'Madrid',
|
|
335
|
+
'Comunidad Valenciana',
|
|
336
|
+
'Galicia',
|
|
337
|
+
'Castilla y León',
|
|
338
|
+
'País Vasco',
|
|
339
|
+
'Castilla-La Mancha',
|
|
340
|
+
'Canarias',
|
|
341
|
+
'Murcia',
|
|
342
|
+
'Aragón',
|
|
343
|
+
'Extremadura',
|
|
344
|
+
'Asturias',
|
|
345
|
+
'Navarra',
|
|
346
|
+
'Cantabria',
|
|
347
|
+
'La Rioja',
|
|
348
|
+
'Baleares',
|
|
349
|
+
],
|
|
350
|
+
zipFormat: () => String(randomNumber(10000, 52999)).padStart(5, '0'),
|
|
351
|
+
},
|
|
352
|
+
};
|
|
353
|
+
const COUNTRY_KEYS = Object.keys(countries);
|
|
354
|
+
/**
|
|
355
|
+
* Generates one or more fictional postal addresses for a given country.
|
|
356
|
+
*
|
|
357
|
+
* @param countryCode - Country code: "fr", "us", "uk", "de", or "es" (random if omitted)
|
|
358
|
+
* @param count - Number of addresses to generate (1–10)
|
|
359
|
+
* @returns Array of addresses with street, city, zip, state, country, and countryCode
|
|
360
|
+
* @throws Error if the country code is invalid or count is out of range
|
|
361
|
+
*/
|
|
362
|
+
export default function address(countryCode, count = 1) {
|
|
363
|
+
if (count < 1 || count > MAX_ADDRESS_COUNT) {
|
|
364
|
+
throw new Error(`Count must be between 1 and ${MAX_ADDRESS_COUNT}`);
|
|
365
|
+
}
|
|
366
|
+
const code = (countryCode ?? random(COUNTRY_KEYS)).toLowerCase();
|
|
367
|
+
if (!countries[code]) {
|
|
368
|
+
throw new Error(`Unknown country code "${code}". Supported: ${COUNTRY_KEYS.join(', ')}`);
|
|
369
|
+
}
|
|
370
|
+
const data = countries[code];
|
|
371
|
+
const addresses = Array.from({ length: count }, () => ({
|
|
372
|
+
street: `${randomNumber(1, 200)} ${random(data.streetTypes)} ${random(data.streetNames)}`,
|
|
373
|
+
city: random(data.cities),
|
|
374
|
+
zip: data.zipFormat(),
|
|
375
|
+
state: random(data.regions),
|
|
376
|
+
country: data.name,
|
|
377
|
+
countryCode: code.toUpperCase(),
|
|
378
|
+
}));
|
|
379
|
+
return { addresses };
|
|
380
|
+
}
|
|
381
|
+
//# sourceMappingURL=address.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"address.js","sourceRoot":"","sources":["../../../src/modules/v4/address.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
export interface UserAgentResult {
|
|
2
|
+
raw: string;
|
|
3
|
+
browser: {
|
|
4
|
+
name: string;
|
|
5
|
+
version: string;
|
|
6
|
+
major: string;
|
|
7
|
+
};
|
|
8
|
+
os: {
|
|
9
|
+
name: string;
|
|
10
|
+
version: string;
|
|
11
|
+
};
|
|
12
|
+
device: {
|
|
13
|
+
type: 'mobile' | 'tablet' | 'desktop';
|
|
14
|
+
vendor: string;
|
|
15
|
+
};
|
|
16
|
+
engine: {
|
|
17
|
+
name: string;
|
|
18
|
+
version: string;
|
|
19
|
+
};
|
|
20
|
+
bot: boolean;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Parses a User-Agent string and extracts browser, OS, device, engine
|
|
24
|
+
* and bot information.
|
|
25
|
+
*
|
|
26
|
+
* @param ua - The User-Agent string to parse
|
|
27
|
+
* @returns Structured breakdown of the User-Agent
|
|
28
|
+
* @throws Error if the User-Agent string is missing or too long
|
|
29
|
+
*/
|
|
30
|
+
export default function agent(ua: string): UserAgentResult;
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { MAX_STRING_LENGTH } from '../../constants.js';
|
|
2
|
+
const WINDOWS_MAP = {
|
|
3
|
+
'10.0': 'Windows 10/11',
|
|
4
|
+
'6.3': 'Windows 8.1',
|
|
5
|
+
'6.2': 'Windows 8',
|
|
6
|
+
'6.1': 'Windows 7',
|
|
7
|
+
'6.0': 'Windows Vista',
|
|
8
|
+
'5.1': 'Windows XP',
|
|
9
|
+
};
|
|
10
|
+
/**
|
|
11
|
+
* Parses a User-Agent string and extracts browser, OS, device, engine
|
|
12
|
+
* and bot information.
|
|
13
|
+
*
|
|
14
|
+
* @param ua - The User-Agent string to parse
|
|
15
|
+
* @returns Structured breakdown of the User-Agent
|
|
16
|
+
* @throws Error if the User-Agent string is missing or too long
|
|
17
|
+
*/
|
|
18
|
+
export default function agent(ua) {
|
|
19
|
+
if (!ua || typeof ua !== 'string')
|
|
20
|
+
throw new Error('A User-Agent string is required');
|
|
21
|
+
if (ua.length > MAX_STRING_LENGTH)
|
|
22
|
+
throw new Error(`User-Agent must be less than ${MAX_STRING_LENGTH} characters`);
|
|
23
|
+
const unknown = { name: 'unknown', version: 'unknown', major: 'unknown' };
|
|
24
|
+
const bot = /bot|crawl|spider|lighthouse|headless|prerender|slurp|bingpreview/i.test(ua);
|
|
25
|
+
// Browser — order matters: Edge/Opera before Chrome
|
|
26
|
+
let browser = { ...unknown };
|
|
27
|
+
const browserRules = [
|
|
28
|
+
[/Edg\/(\d+[\d.]*)/i, 'Edge'],
|
|
29
|
+
[/OPR\/(\d+[\d.]*)/i, 'Opera'],
|
|
30
|
+
[/SamsungBrowser\/(\d+[\d.]*)/i, 'Samsung Internet'],
|
|
31
|
+
[/Chrome\/(\d+[\d.]*)/i, 'Chrome'],
|
|
32
|
+
[/Firefox\/(\d+[\d.]*)/i, 'Firefox'],
|
|
33
|
+
[/Version\/([\d.]+).*Safari/i, 'Safari'],
|
|
34
|
+
[/MSIE ([\d.]+)/i, 'Internet Explorer'],
|
|
35
|
+
[/Trident\/.*rv:([\d.]+)/i, 'Internet Explorer'],
|
|
36
|
+
];
|
|
37
|
+
for (const [re, name] of browserRules) {
|
|
38
|
+
const m = ua.match(re);
|
|
39
|
+
if (m) {
|
|
40
|
+
browser = { name, version: m[1], major: m[1].split('.')[0] };
|
|
41
|
+
break;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
// OS
|
|
45
|
+
let os = { name: 'unknown', version: 'unknown' };
|
|
46
|
+
const osRules = [
|
|
47
|
+
[/iPhone OS ([\d_]+)/i, (m) => ({ name: 'iOS', version: m[1].replace(/_/g, '.') })],
|
|
48
|
+
[/iPad.*OS ([\d_]+)/i, (m) => ({ name: 'iPadOS', version: m[1].replace(/_/g, '.') })],
|
|
49
|
+
[/Android ([\d.]+)/i, (m) => ({ name: 'Android', version: m[1] })],
|
|
50
|
+
[/Windows NT ([\d.]+)/i, (m) => ({ name: WINDOWS_MAP[m[1]] ?? 'Windows', version: m[1] })],
|
|
51
|
+
[/Mac OS X ([\d_.]+)/i, (m) => ({ name: 'macOS', version: m[1].replace(/_/g, '.') })],
|
|
52
|
+
[/Linux/i, () => ({ name: 'Linux', version: 'unknown' })],
|
|
53
|
+
];
|
|
54
|
+
for (const [re, build] of osRules) {
|
|
55
|
+
const m = ua.match(re);
|
|
56
|
+
if (m) {
|
|
57
|
+
os = build(m);
|
|
58
|
+
break;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
// Device
|
|
62
|
+
const isMobile = /Mobi|Android|iPhone|iPod/i.test(ua) && !/iPad/i.test(ua);
|
|
63
|
+
const isTablet = /iPad/i.test(ua) || (/Android/i.test(ua) && !/Mobile/i.test(ua));
|
|
64
|
+
const deviceType = isMobile ? 'mobile' : isTablet ? 'tablet' : 'desktop';
|
|
65
|
+
let vendor = 'unknown';
|
|
66
|
+
if (/iPhone|iPad|Macintosh/i.test(ua))
|
|
67
|
+
vendor = 'Apple';
|
|
68
|
+
else if (/Samsung/i.test(ua))
|
|
69
|
+
vendor = 'Samsung';
|
|
70
|
+
else if (/Pixel|Nexus/i.test(ua))
|
|
71
|
+
vendor = 'Google';
|
|
72
|
+
else if (/Huawei/i.test(ua))
|
|
73
|
+
vendor = 'Huawei';
|
|
74
|
+
// Engine
|
|
75
|
+
let engine = { name: 'unknown', version: 'unknown' };
|
|
76
|
+
const engineRules = [
|
|
77
|
+
[/AppleWebKit\/([\d.]+)/i, 'WebKit'],
|
|
78
|
+
[/Gecko\/([\d.]+)/i, 'Gecko'],
|
|
79
|
+
[/Trident\/([\d.]+)/i, 'Trident'],
|
|
80
|
+
];
|
|
81
|
+
for (const [re, name] of engineRules) {
|
|
82
|
+
const m = ua.match(re);
|
|
83
|
+
if (m) {
|
|
84
|
+
// Chrome and Edge use Blink, a WebKit fork
|
|
85
|
+
const engineName = name === 'WebKit' && /Chrome|Edg/i.test(ua) ? 'Blink' : name;
|
|
86
|
+
engine = { name: engineName, version: m[1] };
|
|
87
|
+
break;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
return { raw: ua, browser, os, device: { type: deviceType, vendor }, engine, bot };
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=agent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent.js","sourceRoot":"","sources":["../../../src/modules/v4/agent.ts"],"names":[],"mappings":"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"}
|