@20syldev/api 5.5.0 → 5.7.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/.prettierignore +5 -0
- package/README.md +204 -80
- package/dist/app.d.ts +2 -0
- package/dist/config/env.d.ts +21 -0
- package/dist/config/env.js +10 -2
- package/dist/config/env.js.map +1 -1
- package/dist/config/plans.d.ts +26 -0
- package/dist/config/versions.d.ts +18 -0
- package/dist/config/versions.js +6 -0
- package/dist/config/versions.js.map +1 -1
- package/dist/constants.d.ts +39 -0
- package/dist/constants.js +3 -1
- package/dist/constants.js.map +1 -1
- package/dist/middleware/cors.d.ts +2 -0
- package/dist/middleware/cors.js +2 -1
- package/dist/middleware/cors.js.map +1 -1
- package/dist/middleware/error.d.ts +4 -0
- package/dist/middleware/json.d.ts +2 -0
- package/dist/middleware/logger.d.ts +26 -0
- package/dist/middleware/logger.js +34 -1
- package/dist/middleware/logger.js.map +1 -1
- package/dist/middleware/ratelimit.d.ts +2 -0
- package/dist/middleware/version.d.ts +3 -0
- package/dist/middleware/version.js +2 -2
- package/dist/middleware/version.js.map +1 -1
- package/dist/modules/v3/algorithms.d.ts +82 -0
- package/dist/modules/v3/captcha.d.ts +8 -0
- package/dist/modules/v3/chat.d.ts +9 -0
- package/dist/modules/v3/chat.js +3 -3
- package/dist/modules/v3/chat.js.map +1 -1
- package/dist/modules/v3/color.d.ts +6 -0
- package/dist/modules/v3/convert.d.ts +10 -0
- package/dist/modules/v3/domain.d.ts +6 -0
- package/dist/modules/v3/hash.d.ts +8 -0
- package/dist/modules/v3/hyperplanning.d.ts +9 -0
- package/dist/modules/v3/levenshtein.d.ts +9 -0
- package/dist/modules/v3/personal.d.ts +6 -0
- package/dist/modules/v3/qrcode.d.ts +8 -0
- package/dist/modules/v3/tic_tac_toe.d.ts +9 -0
- package/dist/modules/v3/tic_tac_toe.js +3 -3
- package/dist/modules/v3/tic_tac_toe.js.map +1 -1
- package/dist/modules/v3/time.d.ts +12 -0
- package/dist/modules/v3/token.d.ts +9 -0
- package/dist/modules/v3/username.d.ts +6 -0
- package/dist/modules/v3/utils.d.ts +50 -0
- package/dist/modules/v3.d.ts +15 -0
- package/dist/modules/v4/address.d.ts +20 -0
- package/dist/modules/v4/agent.d.ts +30 -0
- package/dist/modules/v4/algorithms.d.ts +90 -0
- package/dist/modules/v4/avatar.d.ts +23 -0
- package/dist/modules/v4/barcode.d.ts +27 -0
- package/dist/modules/v4/captcha.d.ts +22 -0
- package/dist/modules/v4/chat.d.ts +21 -0
- package/dist/modules/v4/chat.js +3 -3
- package/dist/modules/v4/chat.js.map +1 -1
- package/dist/modules/v4/color.d.ts +16 -0
- package/dist/modules/v4/convert.d.ts +15 -0
- package/dist/modules/v4/credit.d.ts +22 -0
- package/dist/modules/v4/cron.d.ts +17 -0
- package/dist/modules/v4/dice.d.ts +16 -0
- package/dist/modules/v4/domain.d.ts +6 -0
- package/dist/modules/v4/encode.d.ts +81 -0
- package/dist/modules/v4/geo.d.ts +30 -0
- package/dist/modules/v4/hash.d.ts +15 -0
- package/dist/modules/v4/hyperplanning.d.ts +19 -0
- package/dist/modules/v4/ip.d.ts +19 -0
- package/dist/modules/v4/levenshtein.d.ts +13 -0
- package/dist/modules/v4/palette.d.ts +19 -0
- package/dist/modules/v4/password.d.ts +25 -0
- package/dist/modules/v4/personal.d.ts +6 -0
- package/dist/modules/v4/placeholder.d.ts +30 -0
- package/dist/modules/v4/qrcode.d.ts +25 -0
- package/dist/modules/v4/regex.d.ts +23 -0
- package/dist/modules/v4/statistics.d.ts +20 -0
- package/dist/modules/v4/text.d.ts +43 -0
- package/dist/modules/v4/tic_tac_toe.d.ts +19 -0
- package/dist/modules/v4/tic_tac_toe.js +3 -3
- package/dist/modules/v4/tic_tac_toe.js.map +1 -1
- package/dist/modules/v4/time.d.ts +15 -0
- package/dist/modules/v4/token.d.ts +9 -0
- package/dist/modules/v4/username.d.ts +6 -0
- package/dist/modules/v4/validate.d.ts +34 -0
- package/dist/modules/v4.d.ts +32 -0
- package/dist/modules/v5/address.d.ts +5 -0
- package/dist/modules/v5/algorithms.d.ts +9 -0
- package/dist/modules/v5/asymmetric.d.ts +26 -0
- package/dist/modules/v5/barcode.d.ts +27 -0
- package/dist/modules/v5/case.d.ts +10 -0
- package/dist/modules/v5/chart.d.ts +53 -0
- package/dist/modules/v5/chat.d.ts +21 -0
- package/dist/modules/v5/chat.js +3 -3
- package/dist/modules/v5/chat.js.map +1 -1
- 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/evaluate.d.ts +14 -0
- package/dist/modules/v5/jwt.d.ts +11 -0
- package/dist/modules/v5/matrix.d.ts +77 -0
- package/dist/modules/v5/otp.d.ts +30 -0
- package/dist/modules/v5/symmetric.d.ts +15 -0
- package/dist/modules/v5/text.d.ts +5 -0
- package/dist/modules/v5/tic_tac_toe.d.ts +19 -0
- package/dist/modules/v5/tic_tac_toe.js +3 -3
- package/dist/modules/v5/tic_tac_toe.js.map +1 -1
- 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.d.ts +17 -0
- package/dist/modules/v5.js +2 -0
- package/dist/modules/v5.js.map +1 -1
- package/dist/routes/delete.d.ts +2 -0
- package/dist/routes/delete.js +2 -2
- package/dist/routes/delete.js.map +1 -1
- package/dist/routes/get.d.ts +2 -0
- package/dist/routes/get.js +104 -82
- package/dist/routes/get.js.map +1 -1
- package/dist/routes/index.d.ts +2 -0
- package/dist/routes/index.js +8 -4
- package/dist/routes/index.js.map +1 -1
- package/dist/routes/patch.d.ts +2 -0
- package/dist/routes/patch.js +1 -1
- package/dist/routes/patch.js.map +1 -1
- package/dist/routes/post.d.ts +2 -0
- package/dist/routes/post.js +54 -29
- package/dist/routes/post.js.map +1 -1
- package/dist/storage/index.d.ts +4 -0
- package/dist/types/storage.d.ts +49 -0
- package/dist/utils/colors.d.ts +44 -0
- package/dist/utils/helpers.d.ts +55 -0
- package/dist/utils/response.d.ts +9 -0
- package/dist/utils/response.js +2 -4
- package/dist/utils/response.js.map +1 -1
- package/package.json +17 -16
- package/robots.txt +74 -0
- package/src/favicon.ico +0 -0
- package/dist/middleware/connection.js +0 -23
- package/dist/middleware/connection.js.map +0 -1
- package/dist/modules/v4/colors.js +0 -54
- package/dist/modules/v4/colors.js.map +0 -1
- package/dist/modules/v4/utils.js +0 -26
- package/dist/modules/v4/utils.js.map +0 -1
- package/dist/modules/v5/diff.js +0 -52
- package/dist/modules/v5/diff.js.map +0 -1
- package/dist/modules/v5/read.js +0 -39
- package/dist/modules/v5/read.js.map +0 -1
- package/dist/utils/version.js +0 -3
- package/dist/utils/version.js.map +0 -1
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tracks requests per user and throws if the rate limit is exceeded.
|
|
3
|
+
*
|
|
4
|
+
* @param rateLimits - Store of timestamps per user
|
|
5
|
+
* @param userId - Identifier of the requesting user
|
|
6
|
+
* @param timestamp - Current timestamp in milliseconds
|
|
7
|
+
* @param window - Time window in milliseconds
|
|
8
|
+
* @param limit - Maximum requests allowed in the window
|
|
9
|
+
* @returns false if within limits
|
|
10
|
+
* @throws Error if rate limit is exceeded
|
|
11
|
+
*/
|
|
12
|
+
export declare function checkRateLimit(rateLimits: Record<string, number[]>, userId: string, timestamp: number, window?: number, limit?: number): boolean;
|
|
13
|
+
/**
|
|
14
|
+
* Parses a space-separated environment variable into an array.
|
|
15
|
+
*
|
|
16
|
+
* @param key - The environment variable name
|
|
17
|
+
* @returns The parsed array, or null if not set
|
|
18
|
+
*/
|
|
19
|
+
export declare function envList(key: string): string[] | null;
|
|
20
|
+
/**
|
|
21
|
+
* Formats a Date to ISO string without timezone suffix.
|
|
22
|
+
*
|
|
23
|
+
* @param date - The date to format
|
|
24
|
+
* @returns ISO-formatted string without trailing Z
|
|
25
|
+
*/
|
|
26
|
+
export declare function formatDate(date: Date): string;
|
|
27
|
+
/**
|
|
28
|
+
* Generates a random IPv4 address.
|
|
29
|
+
*
|
|
30
|
+
* @returns A string in the format "X.X.X.X"
|
|
31
|
+
*/
|
|
32
|
+
export declare function genIP(): string;
|
|
33
|
+
/**
|
|
34
|
+
* Returns a random element from an array.
|
|
35
|
+
*
|
|
36
|
+
* @param arr - The source array
|
|
37
|
+
* @returns A random element
|
|
38
|
+
*/
|
|
39
|
+
export declare function random<T>(arr: T[]): T;
|
|
40
|
+
/**
|
|
41
|
+
* Returns a random integer between min and max (inclusive).
|
|
42
|
+
*
|
|
43
|
+
* @param min - Lower bound
|
|
44
|
+
* @param max - Upper bound
|
|
45
|
+
* @returns A random integer in [min, max]
|
|
46
|
+
*/
|
|
47
|
+
export declare function randomNumber(min: number, max: number): number;
|
|
48
|
+
/**
|
|
49
|
+
* Checks if a version string is at least the given minimum.
|
|
50
|
+
*
|
|
51
|
+
* @param version - Version string (e.g. "v4")
|
|
52
|
+
* @param min - Minimum version number
|
|
53
|
+
* @returns true if the version is >= min
|
|
54
|
+
*/
|
|
55
|
+
export declare function since(version: string, min: number): boolean;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { Response } from 'express';
|
|
2
|
+
/**
|
|
3
|
+
* Sends a standardized JSON error response.
|
|
4
|
+
*
|
|
5
|
+
* @param res - Express response object
|
|
6
|
+
* @param status - HTTP status code
|
|
7
|
+
* @param message - Error description
|
|
8
|
+
*/
|
|
9
|
+
export declare function error(res: Response, status: number, message: string): void;
|
package/dist/utils/response.js
CHANGED
|
@@ -1,17 +1,15 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { STATUS_MESSAGES } from '../constants.js';
|
|
2
2
|
/**
|
|
3
3
|
* Sends a standardized JSON error response.
|
|
4
4
|
*
|
|
5
5
|
* @param res - Express response object
|
|
6
6
|
* @param status - HTTP status code
|
|
7
7
|
* @param message - Error description
|
|
8
|
-
* @param docPath - Optional documentation path appended to the base URL
|
|
9
8
|
*/
|
|
10
|
-
export function error(res, status, message
|
|
9
|
+
export function error(res, status, message) {
|
|
11
10
|
const body = {
|
|
12
11
|
message: STATUS_MESSAGES[status] ?? 'Error',
|
|
13
12
|
error: message,
|
|
14
|
-
documentation: docPath ? `${DOCS_URL}/${docPath}` : DOCS_URL,
|
|
15
13
|
status: String(status),
|
|
16
14
|
};
|
|
17
15
|
if (typeof res.jsonResponse === 'function') {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"response.js","sourceRoot":"","sources":["../../src/utils/response.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"response.js","sourceRoot":"","sources":["../../src/utils/response.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAElD;;;;;;GAMG;AACH,MAAM,UAAU,KAAK,CAAC,GAAa,EAAE,MAAc,EAAE,OAAe;IAChE,MAAM,IAAI,GAAG;QACT,OAAO,EAAE,eAAe,CAAC,MAAM,CAAC,IAAI,OAAO;QAC3C,KAAK,EAAE,OAAO;QACd,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC;KACzB,CAAC;IAEF,IAAI,OAAO,GAAG,CAAC,YAAY,KAAK,UAAU,EAAE,CAAC;QACzC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IAC1C,CAAC;SAAM,CAAC;QACJ,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC;aACb,SAAS,CAAC,cAAc,EAAE,kBAAkB,CAAC;aAC7C,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC7C,CAAC;AACL,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,32 +1,36 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "5.
|
|
2
|
+
"version": "5.7.0",
|
|
3
3
|
"name": "@20syldev/api",
|
|
4
4
|
"description": "Node.js API with multiple features. Check the documentation at https://docs.sylvain.sh",
|
|
5
|
-
"main": "dist/
|
|
5
|
+
"main": "./dist/modules/v5.js",
|
|
6
|
+
"types": "./dist/modules/v5.d.ts",
|
|
6
7
|
"type": "module",
|
|
7
8
|
"scripts": {
|
|
8
9
|
"prepare": "tsc",
|
|
9
10
|
"dev": "tsx watch src/app.ts",
|
|
10
11
|
"start": "node dist/app.js",
|
|
11
12
|
"build": "tsc",
|
|
12
|
-
"check": "tsc --noEmit -p tsconfig.test.json && eslint src/ tests/",
|
|
13
|
-
"format": "prettier --write
|
|
14
|
-
"test": "NODE_ENV=test node --import tsx --test
|
|
15
|
-
"upgrade:minor": "npm upgrade",
|
|
16
|
-
"upgrade:major": "npx npm-check-updates -u && npm install"
|
|
13
|
+
"check": "tsc --noEmit -p tsconfig.test.json && eslint src/ tests/ && prettier --check .",
|
|
14
|
+
"format": "prettier --write . && eslint --fix src/ tests/",
|
|
15
|
+
"test": "NODE_ENV=test DOCS_URL=https://docs.example.test node --import tsx --test tests/unit/*.test.ts tests/integration/*.test.ts"
|
|
17
16
|
},
|
|
18
17
|
"engines": {
|
|
19
|
-
"node": ">=22.
|
|
18
|
+
"node": ">=22.12.0"
|
|
20
19
|
},
|
|
21
20
|
"exports": {
|
|
22
|
-
"./
|
|
23
|
-
"./
|
|
24
|
-
"./v3": "./dist/modules/v3.js",
|
|
25
|
-
"./
|
|
26
|
-
"./
|
|
21
|
+
".": { "types": "./dist/modules/v5.d.ts", "default": "./dist/modules/v5.js" },
|
|
22
|
+
"./server": { "types": "./dist/app.d.ts", "default": "./dist/app.js" },
|
|
23
|
+
"./v1": { "types": "./dist/modules/v3.d.ts", "default": "./dist/modules/v3.js" },
|
|
24
|
+
"./v2": { "types": "./dist/modules/v3.d.ts", "default": "./dist/modules/v3.js" },
|
|
25
|
+
"./v3": { "types": "./dist/modules/v3.d.ts", "default": "./dist/modules/v3.js" },
|
|
26
|
+
"./v4": { "types": "./dist/modules/v4.d.ts", "default": "./dist/modules/v4.js" },
|
|
27
|
+
"./v5": { "types": "./dist/modules/v5.d.ts", "default": "./dist/modules/v5.js" },
|
|
28
|
+
"./package.json": "./package.json"
|
|
27
29
|
},
|
|
28
30
|
"dependencies": {
|
|
29
31
|
"@20syldev/logger.ts": "^1.0.1",
|
|
32
|
+
"@types/express": "^5.0.0",
|
|
33
|
+
"@types/node": "^22.19.17",
|
|
30
34
|
"canvas": "^3.1.0",
|
|
31
35
|
"cors": "^2.8.5",
|
|
32
36
|
"dotenv": "^16.4.7",
|
|
@@ -39,14 +43,11 @@
|
|
|
39
43
|
"devDependencies": {
|
|
40
44
|
"@eslint/js": "^9.24.0",
|
|
41
45
|
"@types/cors": "^2.8.17",
|
|
42
|
-
"@types/express": "^5.0.0",
|
|
43
|
-
"@types/node": "^22.19.17",
|
|
44
46
|
"@types/qrcode": "^1.5.6",
|
|
45
47
|
"@types/uuid": "^10.0.0",
|
|
46
48
|
"eslint": "^9.24.0",
|
|
47
49
|
"eslint-config-prettier": "^10.1.1",
|
|
48
50
|
"eslint-plugin-simple-import-sort": "^13.0.0",
|
|
49
|
-
"npm-check-updates": "^18.0.1",
|
|
50
51
|
"prettier": "^3.5.3",
|
|
51
52
|
"tsx": "^4.19.0",
|
|
52
53
|
"typescript": "^5.7.0",
|
package/robots.txt
ADDED
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
User-agent: 360Spider
|
|
2
|
+
User-agent: 360Spider-Image
|
|
3
|
+
User-agent: 360Spider-Video
|
|
4
|
+
User-agent: AdsBot-Google
|
|
5
|
+
User-agent: AdsBot-Google-Mobile
|
|
6
|
+
User-agent: AdsBot-Google-Mobile-Apps
|
|
7
|
+
User-agent: adidxbot
|
|
8
|
+
User-agent: Applebot
|
|
9
|
+
User-agent: AppleNewsBot
|
|
10
|
+
User-agent: Baiduspider
|
|
11
|
+
User-agent: Baiduspider-image
|
|
12
|
+
User-agent: Baiduspider-news
|
|
13
|
+
User-agent: Baiduspider-video
|
|
14
|
+
User-agent: bingbot
|
|
15
|
+
User-agent: BingPreview
|
|
16
|
+
User-agent: BublupBot
|
|
17
|
+
User-agent: CCBot
|
|
18
|
+
User-agent: Cliqzbot
|
|
19
|
+
User-agent: coccoc
|
|
20
|
+
User-agent: coccocbot-image
|
|
21
|
+
User-agent: coccocbot-web
|
|
22
|
+
User-agent: Daumoa
|
|
23
|
+
User-agent: Dazoobot
|
|
24
|
+
User-agent: DeuSu
|
|
25
|
+
User-agent: DuckDuckBot
|
|
26
|
+
User-agent: DuckDuckGo-Favicons-Bot
|
|
27
|
+
User-agent: EuripBot
|
|
28
|
+
User-agent: Exploratodo
|
|
29
|
+
User-agent: Facebot
|
|
30
|
+
User-agent: Feedly
|
|
31
|
+
User-agent: Findxbot
|
|
32
|
+
User-agent: Googlebot
|
|
33
|
+
User-agent: Googlebot-Image
|
|
34
|
+
User-agent: Googlebot-Mobile
|
|
35
|
+
User-agent: Googlebot-News
|
|
36
|
+
User-agent: Googlebot-Video
|
|
37
|
+
User-agent: HaoSouSpider
|
|
38
|
+
User-agent: ichiro
|
|
39
|
+
User-agent: istellabot
|
|
40
|
+
User-agent: JikeSpider
|
|
41
|
+
User-agent: Lycos
|
|
42
|
+
User-agent: Mail.Ru
|
|
43
|
+
User-agent: Mediapartners-Google
|
|
44
|
+
User-agent: MojeekBot
|
|
45
|
+
User-agent: msnbot
|
|
46
|
+
User-agent: msnbot-media
|
|
47
|
+
User-agent: OrangeBot
|
|
48
|
+
User-agent: Pinterest
|
|
49
|
+
User-agent: Plukkie
|
|
50
|
+
User-agent: Qwantify
|
|
51
|
+
User-agent: Rambler
|
|
52
|
+
User-agent: SeznamBot
|
|
53
|
+
User-agent: Sosospider
|
|
54
|
+
User-agent: Slurp
|
|
55
|
+
User-agent: Sogou blog
|
|
56
|
+
User-agent: Sogou inst spider
|
|
57
|
+
User-agent: Sogou News Spider
|
|
58
|
+
User-agent: Sogou Orion spider
|
|
59
|
+
User-agent: Sogou spider2
|
|
60
|
+
User-agent: Sogou web spider
|
|
61
|
+
User-agent: SputnikBot
|
|
62
|
+
User-agent: Teoma
|
|
63
|
+
User-agent: Twitterbot
|
|
64
|
+
User-agent: wotbox
|
|
65
|
+
User-agent: yacybot
|
|
66
|
+
User-agent: Yandex
|
|
67
|
+
User-agent: YandexMobileBot
|
|
68
|
+
User-agent: Yeti
|
|
69
|
+
User-agent: YioopBot
|
|
70
|
+
User-agent: yoozBot
|
|
71
|
+
User-agent: YoudaoBot
|
|
72
|
+
Disallow:
|
|
73
|
+
User-agent: *
|
|
74
|
+
Disallow: /
|
package/src/favicon.ico
ADDED
|
Binary file
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import { getPlan, plans } from '../config/plans.js';
|
|
2
|
-
import { error } from '../utils/response.js';
|
|
3
|
-
const active = new Map();
|
|
4
|
-
export function connectionLimiter(req, res, next) {
|
|
5
|
-
const ip = req.ip || req.socket.remoteAddress || '';
|
|
6
|
-
const token = req.headers.authorization?.split(' ')[1] || '';
|
|
7
|
-
const plan = getPlan(token)?.plan ?? plans.default;
|
|
8
|
-
const count = active.get(ip) ?? 0;
|
|
9
|
-
if (count >= plan.burst) {
|
|
10
|
-
error(res, 503, 'Too many concurrent requests, please slow down.');
|
|
11
|
-
return;
|
|
12
|
-
}
|
|
13
|
-
active.set(ip, count + 1);
|
|
14
|
-
res.on('close', () => {
|
|
15
|
-
const current = active.get(ip) ?? 1;
|
|
16
|
-
if (current <= 1)
|
|
17
|
-
active.delete(ip);
|
|
18
|
-
else
|
|
19
|
-
active.set(ip, current - 1);
|
|
20
|
-
});
|
|
21
|
-
next();
|
|
22
|
-
}
|
|
23
|
-
//# sourceMappingURL=connection.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"connection.js","sourceRoot":"","sources":["../../src/middleware/connection.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAE7C,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;AAEzC,MAAM,UAAU,iBAAiB,CAAC,GAAY,EAAE,GAAa,EAAE,IAAkB;IAC7E,MAAM,EAAE,GAAG,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,MAAM,CAAC,aAAa,IAAI,EAAE,CAAC;IACpD,MAAM,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC,aAAa,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC7D,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,EAAE,IAAI,IAAI,KAAK,CAAC,OAAQ,CAAC;IAEpD,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;IAClC,IAAI,KAAK,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QACtB,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,iDAAiD,CAAC,CAAC;QACnE,OAAO;IACX,CAAC;IAED,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;IAC1B,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;QACjB,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;QACpC,IAAI,OAAO,IAAI,CAAC;YAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;;YAC/B,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,GAAG,CAAC,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,IAAI,EAAE,CAAC;AACX,CAAC"}
|
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
export function hexToRgb(hex) {
|
|
2
|
-
const clean = hex.replace('#', '');
|
|
3
|
-
if (!/^[0-9a-fA-F]{6}$/.test(clean))
|
|
4
|
-
throw new Error('Invalid HEX color (use #RRGGBB)');
|
|
5
|
-
return [parseInt(clean.slice(0, 2), 16), parseInt(clean.slice(2, 4), 16), parseInt(clean.slice(4, 6), 16)];
|
|
6
|
-
}
|
|
7
|
-
export function rgbToHsl(r, g, b) {
|
|
8
|
-
const r1 = r / 255, g1 = g / 255, b1 = b / 255;
|
|
9
|
-
const max = Math.max(r1, g1, b1), min = Math.min(r1, g1, b1);
|
|
10
|
-
const l = (max + min) / 2;
|
|
11
|
-
if (max === min)
|
|
12
|
-
return [0, 0, l];
|
|
13
|
-
const d = max - min;
|
|
14
|
-
const s = l > 0.5 ? d / (2 - max - min) : d / (max + min);
|
|
15
|
-
let h = 0;
|
|
16
|
-
if (max === r1)
|
|
17
|
-
h = (g1 - b1) / d + (g1 < b1 ? 6 : 0);
|
|
18
|
-
else if (max === g1)
|
|
19
|
-
h = (b1 - r1) / d + 2;
|
|
20
|
-
else
|
|
21
|
-
h = (r1 - g1) / d + 4;
|
|
22
|
-
return [(h * 60 + 360) % 360, s, l];
|
|
23
|
-
}
|
|
24
|
-
export function hslToRgb(h, s, l) {
|
|
25
|
-
const c = (1 - Math.abs(2 * l - 1)) * s;
|
|
26
|
-
const x = c * (1 - Math.abs(((h / 60) % 2) - 1));
|
|
27
|
-
const m = l - c / 2;
|
|
28
|
-
let r1 = 0, g1 = 0, b1 = 0;
|
|
29
|
-
if (h < 60)
|
|
30
|
-
[r1, g1, b1] = [c, x, 0];
|
|
31
|
-
else if (h < 120)
|
|
32
|
-
[r1, g1, b1] = [x, c, 0];
|
|
33
|
-
else if (h < 180)
|
|
34
|
-
[r1, g1, b1] = [0, c, x];
|
|
35
|
-
else if (h < 240)
|
|
36
|
-
[r1, g1, b1] = [0, x, c];
|
|
37
|
-
else if (h < 300)
|
|
38
|
-
[r1, g1, b1] = [x, 0, c];
|
|
39
|
-
else
|
|
40
|
-
[r1, g1, b1] = [c, 0, x];
|
|
41
|
-
return [Math.round((r1 + m) * 255), Math.round((g1 + m) * 255), Math.round((b1 + m) * 255)];
|
|
42
|
-
}
|
|
43
|
-
export function rgbToHex(r, g, b) {
|
|
44
|
-
return `#${[r, g, b].map((x) => x.toString(16).padStart(2, '0')).join('')}`;
|
|
45
|
-
}
|
|
46
|
-
export function normalizeColor(value, def) {
|
|
47
|
-
if (!value)
|
|
48
|
-
return def;
|
|
49
|
-
const clean = value.startsWith('#') ? value : `#${value}`;
|
|
50
|
-
if (!/^#([0-9a-fA-F]{3}){1,2}$/.test(clean))
|
|
51
|
-
throw new Error('Invalid color (use hex like ff6600)');
|
|
52
|
-
return clean;
|
|
53
|
-
}
|
|
54
|
-
//# sourceMappingURL=colors.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"colors.js","sourceRoot":"","sources":["../../../src/modules/v4/colors.ts"],"names":[],"mappings":"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"}
|
package/dist/modules/v4/utils.js
DELETED
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
export function random(arr) {
|
|
2
|
-
return arr[Math.floor(Math.random() * arr.length)];
|
|
3
|
-
}
|
|
4
|
-
export function randomNumber(min, max) {
|
|
5
|
-
return Math.floor(Math.random() * (max - min + 1)) + min;
|
|
6
|
-
}
|
|
7
|
-
export function genIP() {
|
|
8
|
-
return `${randomNumber(0, 255)}.${randomNumber(0, 255)}.${randomNumber(0, 255)}.${randomNumber(0, 255)}`;
|
|
9
|
-
}
|
|
10
|
-
export function formatDate(date) {
|
|
11
|
-
return new Date(date.getTime() - date.getTimezoneOffset() * 60000).toISOString().replace('Z', '');
|
|
12
|
-
}
|
|
13
|
-
export function envList(key) {
|
|
14
|
-
const v = process.env[key];
|
|
15
|
-
return v && v !== 'undefined' ? v.split(' ') : null;
|
|
16
|
-
}
|
|
17
|
-
export function checkRateLimit(rateLimits, userId, timestamp, window = 10000, limit = 50) {
|
|
18
|
-
rateLimits[userId] = (rateLimits[userId] ?? []).filter((ts) => timestamp - ts < window);
|
|
19
|
-
if (rateLimits[userId].length > limit) {
|
|
20
|
-
const remainingTime = Math.ceil((rateLimits[userId][0] + window - timestamp) / 1000);
|
|
21
|
-
throw new Error(`Rate limit exceeded. Try again in ${remainingTime} seconds.`);
|
|
22
|
-
}
|
|
23
|
-
rateLimits[userId].push(timestamp);
|
|
24
|
-
return false;
|
|
25
|
-
}
|
|
26
|
-
//# sourceMappingURL=utils.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/modules/v4/utils.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,MAAM,CAAI,GAAQ;IAC9B,OAAO,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC,CAAE,CAAC;AACxD,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,GAAW,EAAE,GAAW;IACjD,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;AAC7D,CAAC;AAED,MAAM,UAAU,KAAK;IACjB,OAAO,GAAG,YAAY,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,YAAY,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,YAAY,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,YAAY,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;AAC7G,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,IAAU;IACjC,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,iBAAiB,EAAE,GAAG,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;AACtG,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,GAAW;IAC/B,MAAM,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC3B,OAAO,CAAC,IAAI,CAAC,KAAK,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACxD,CAAC;AAED,MAAM,UAAU,cAAc,CAC1B,UAAoC,EACpC,MAAc,EACd,SAAiB,EACjB,MAAM,GAAG,KAAK,EACd,KAAK,GAAG,EAAE;IAEV,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,SAAS,GAAG,EAAE,GAAG,MAAM,CAAC,CAAC;IAExF,IAAI,UAAU,CAAC,MAAM,CAAE,CAAC,MAAM,GAAG,KAAK,EAAE,CAAC;QACrC,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,MAAM,CAAE,CAAC,CAAC,CAAE,GAAG,MAAM,GAAG,SAAS,CAAC,GAAG,IAAI,CAAC,CAAC;QACvF,MAAM,IAAI,KAAK,CAAC,qCAAqC,aAAa,WAAW,CAAC,CAAC;IACnF,CAAC;IAED,UAAU,CAAC,MAAM,CAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACpC,OAAO,KAAK,CAAC;AACjB,CAAC"}
|
package/dist/modules/v5/diff.js
DELETED
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
import { MAX_DIFF_LENGTH } from '../../constants.js';
|
|
2
|
-
const VALID_MODES = ['line', 'word'];
|
|
3
|
-
/**
|
|
4
|
-
* Computes a line-by-line or word-by-word diff between two texts using LCS.
|
|
5
|
-
*/
|
|
6
|
-
export default function diff(a, b, mode = 'line') {
|
|
7
|
-
if (!VALID_MODES.includes(mode))
|
|
8
|
-
throw new Error('Invalid mode. Valid values: line, word');
|
|
9
|
-
if (a.length > MAX_DIFF_LENGTH)
|
|
10
|
-
throw new Error(`Text a cannot exceed ${MAX_DIFF_LENGTH} characters`);
|
|
11
|
-
if (b.length > MAX_DIFF_LENGTH)
|
|
12
|
-
throw new Error(`Text b cannot exceed ${MAX_DIFF_LENGTH} characters`);
|
|
13
|
-
const tokensA = mode === 'word' ? a.split(/\s+/).filter(Boolean) : a.split('\n');
|
|
14
|
-
const tokensB = mode === 'word' ? b.split(/\s+/).filter(Boolean) : b.split('\n');
|
|
15
|
-
const m = tokensA.length;
|
|
16
|
-
const n = tokensB.length;
|
|
17
|
-
// LCS dynamic programming table
|
|
18
|
-
const dp = Array.from({ length: m + 1 }, () => new Array(n + 1).fill(0));
|
|
19
|
-
for (let i = 1; i <= m; i++) {
|
|
20
|
-
for (let j = 1; j <= n; j++) {
|
|
21
|
-
if (tokensA[i - 1] === tokensB[j - 1]) {
|
|
22
|
-
dp[i][j] = dp[i - 1][j - 1] + 1;
|
|
23
|
-
}
|
|
24
|
-
else {
|
|
25
|
-
dp[i][j] = Math.max(dp[i - 1][j], dp[i][j - 1]);
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
// Backtrack to build the change list
|
|
30
|
-
const changes = [];
|
|
31
|
-
let i = m;
|
|
32
|
-
let j = n;
|
|
33
|
-
while (i > 0 || j > 0) {
|
|
34
|
-
if (i > 0 && j > 0 && tokensA[i - 1] === tokensB[j - 1]) {
|
|
35
|
-
changes.unshift({ type: 'equal', value: tokensA[i - 1] });
|
|
36
|
-
i--;
|
|
37
|
-
j--;
|
|
38
|
-
}
|
|
39
|
-
else if (j > 0 && (i === 0 || dp[i][j - 1] >= dp[i - 1][j])) {
|
|
40
|
-
changes.unshift({ type: 'add', value: tokensB[j - 1] });
|
|
41
|
-
j--;
|
|
42
|
-
}
|
|
43
|
-
else {
|
|
44
|
-
changes.unshift({ type: 'del', value: tokensA[i - 1] });
|
|
45
|
-
i--;
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
const added = changes.filter((c) => c.type === 'add').length;
|
|
49
|
-
const removed = changes.filter((c) => c.type === 'del').length;
|
|
50
|
-
return { mode, added, removed, changes };
|
|
51
|
-
}
|
|
52
|
-
//# sourceMappingURL=diff.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"diff.js","sourceRoot":"","sources":["../../../src/modules/v5/diff.ts"],"names":[],"mappings":"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"}
|
package/dist/modules/v5/read.js
DELETED
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
import { MAX_READ_LENGTH } from '../../constants.js';
|
|
2
|
-
/**
|
|
3
|
-
* Counts syllables in a single word using an English heuristic.
|
|
4
|
-
*/
|
|
5
|
-
const countSyllables = (w) => {
|
|
6
|
-
const cleaned = w
|
|
7
|
-
.toLowerCase()
|
|
8
|
-
.replace(/[^a-z]/g, '')
|
|
9
|
-
.replace(/e$/, '');
|
|
10
|
-
const groups = cleaned.match(/[aeiouy]+/g);
|
|
11
|
-
return Math.max(1, groups ? groups.length : 1);
|
|
12
|
-
};
|
|
13
|
-
/**
|
|
14
|
-
* Calculates Flesch readability scores for the given text.
|
|
15
|
-
* NOTE: Syllable heuristic is designed for English. Scores may be inaccurate for other languages.
|
|
16
|
-
*/
|
|
17
|
-
export default function read(text) {
|
|
18
|
-
if (!text || !text.trim())
|
|
19
|
-
throw new Error('Please provide a text (?text={text})');
|
|
20
|
-
if (text.length > MAX_READ_LENGTH)
|
|
21
|
-
throw new Error(`Text cannot exceed ${MAX_READ_LENGTH} characters`);
|
|
22
|
-
const wordList = text.trim().split(/\s+/).filter(Boolean);
|
|
23
|
-
const wordCount = wordList.length;
|
|
24
|
-
const sentenceCount = text.split(/[.!?]+/).filter((s) => s.trim().length > 0).length || 1;
|
|
25
|
-
const syllableCount = wordList.reduce((sum, w) => sum + countSyllables(w), 0);
|
|
26
|
-
const fre = 206.835 - 1.015 * (wordCount / sentenceCount) - 84.6 * (syllableCount / wordCount);
|
|
27
|
-
const fkg = 0.39 * (wordCount / sentenceCount) + 11.8 * (syllableCount / wordCount) - 15.59;
|
|
28
|
-
const minutes = wordCount / 200;
|
|
29
|
-
const readingTime = minutes < 1 ? `${Math.max(1, Math.round(minutes * 60))}s` : `${Math.round(minutes)}min`;
|
|
30
|
-
return {
|
|
31
|
-
words: wordCount,
|
|
32
|
-
sentences: sentenceCount,
|
|
33
|
-
syllables: syllableCount,
|
|
34
|
-
fleschReadingEase: Math.round(fre * 100) / 100,
|
|
35
|
-
fleschKincaidGrade: Math.round(fkg * 100) / 100,
|
|
36
|
-
readingTime,
|
|
37
|
-
};
|
|
38
|
-
}
|
|
39
|
-
//# sourceMappingURL=read.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"read.js","sourceRoot":"","sources":["../../../src/modules/v5/read.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAWrD;;GAEG;AACH,MAAM,cAAc,GAAG,CAAC,CAAS,EAAU,EAAE;IACzC,MAAM,OAAO,GAAG,CAAC;SACZ,WAAW,EAAE;SACb,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC;SACtB,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IACvB,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IAC3C,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACnD,CAAC,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,OAAO,UAAU,IAAI,CAAC,IAAY;IACrC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;IACnF,IAAI,IAAI,CAAC,MAAM,GAAG,eAAe;QAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,eAAe,aAAa,CAAC,CAAC;IAEvG,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC1D,MAAM,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC;IAClC,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC;IAC1F,MAAM,aAAa,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAE9E,MAAM,GAAG,GAAG,OAAO,GAAG,KAAK,GAAG,CAAC,SAAS,GAAG,aAAa,CAAC,GAAG,IAAI,GAAG,CAAC,aAAa,GAAG,SAAS,CAAC,CAAC;IAC/F,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,SAAS,GAAG,aAAa,CAAC,GAAG,IAAI,GAAG,CAAC,aAAa,GAAG,SAAS,CAAC,GAAG,KAAK,CAAC;IAE5F,MAAM,OAAO,GAAG,SAAS,GAAG,GAAG,CAAC;IAChC,MAAM,WAAW,GAAG,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;IAE5G,OAAO;QACH,KAAK,EAAE,SAAS;QAChB,SAAS,EAAE,aAAa;QACxB,SAAS,EAAE,aAAa;QACxB,iBAAiB,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG;QAC9C,kBAAkB,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG;QAC/C,WAAW;KACd,CAAC;AACN,CAAC"}
|
package/dist/utils/version.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/utils/version.ts"],"names":[],"mappings":"AAEA,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AAEtC,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,GAAY,EAAW,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC"}
|