@20syldev/api 4.8.0 → 5.0.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.
Files changed (126) hide show
  1. package/README.md +93 -55
  2. package/dist/config/versions.js +16 -0
  3. package/dist/config/versions.js.map +1 -1
  4. package/dist/constants.js +5 -0
  5. package/dist/constants.js.map +1 -1
  6. package/dist/modules/v5/chart.js +379 -0
  7. package/dist/modules/v5/chart.js.map +1 -0
  8. package/dist/modules/v5/evaluate.js +281 -0
  9. package/dist/modules/v5/evaluate.js.map +1 -0
  10. package/dist/modules/v5/matrix.js +238 -0
  11. package/dist/modules/v5/matrix.js.map +1 -0
  12. package/dist/modules/v5.js +5 -0
  13. package/dist/modules/v5.js.map +1 -0
  14. package/dist/routes/get.js +191 -162
  15. package/dist/routes/get.js.map +1 -1
  16. package/dist/routes/post.js +69 -0
  17. package/dist/routes/post.js.map +1 -1
  18. package/package.json +4 -2
  19. package/recap.md +98 -0
  20. package/.github/FUNDING.yml +0 -1
  21. package/.prettierrc +0 -7
  22. package/eslint.config.js +0 -24
  23. package/robots.txt +0 -74
  24. package/src/app.ts +0 -53
  25. package/src/config/env.ts +0 -87
  26. package/src/config/plans.ts +0 -61
  27. package/src/config/versions.ts +0 -121
  28. package/src/constants.ts +0 -61
  29. package/src/favicon.ico +0 -0
  30. package/src/middleware/cors.ts +0 -23
  31. package/src/middleware/error.ts +0 -16
  32. package/src/middleware/json.ts +0 -9
  33. package/src/middleware/logger.ts +0 -32
  34. package/src/middleware/ratelimit.ts +0 -89
  35. package/src/middleware/version.ts +0 -40
  36. package/src/modules/v3/algorithms.js +0 -218
  37. package/src/modules/v3/captcha.js +0 -60
  38. package/src/modules/v3/chat.js +0 -111
  39. package/src/modules/v3/color.js +0 -60
  40. package/src/modules/v3/convert.js +0 -39
  41. package/src/modules/v3/domain.js +0 -86
  42. package/src/modules/v3/hash.js +0 -16
  43. package/src/modules/v3/hyperplanning.js +0 -56
  44. package/src/modules/v3/levenshtein.js +0 -46
  45. package/src/modules/v3/personal.js +0 -139
  46. package/src/modules/v3/qrcode.js +0 -20
  47. package/src/modules/v3/tic_tac_toe.js +0 -242
  48. package/src/modules/v3/time.js +0 -98
  49. package/src/modules/v3/token.js +0 -54
  50. package/src/modules/v3/username.js +0 -94
  51. package/src/modules/v3/utils.js +0 -77
  52. package/src/modules/v3.js +0 -15
  53. package/src/modules/v4/address.ts +0 -412
  54. package/src/modules/v4/agent.ts +0 -104
  55. package/src/modules/v4/algorithms.ts +0 -276
  56. package/src/modules/v4/captcha.ts +0 -114
  57. package/src/modules/v4/chat.ts +0 -130
  58. package/src/modules/v4/color.ts +0 -75
  59. package/src/modules/v4/convert.ts +0 -127
  60. package/src/modules/v4/cron.ts +0 -221
  61. package/src/modules/v4/dice.ts +0 -46
  62. package/src/modules/v4/domain.ts +0 -86
  63. package/src/modules/v4/encode.ts +0 -241
  64. package/src/modules/v4/geo.ts +0 -64
  65. package/src/modules/v4/hash.ts +0 -32
  66. package/src/modules/v4/hyperplanning.ts +0 -93
  67. package/src/modules/v4/ip.ts +0 -134
  68. package/src/modules/v4/levenshtein.ts +0 -46
  69. package/src/modules/v4/palette.ts +0 -71
  70. package/src/modules/v4/password.ts +0 -379
  71. package/src/modules/v4/personal.ts +0 -140
  72. package/src/modules/v4/placeholder.ts +0 -197
  73. package/src/modules/v4/qrcode.ts +0 -121
  74. package/src/modules/v4/regex.ts +0 -67
  75. package/src/modules/v4/statistics.ts +0 -62
  76. package/src/modules/v4/text.ts +0 -330
  77. package/src/modules/v4/tic_tac_toe.ts +0 -264
  78. package/src/modules/v4/time.ts +0 -149
  79. package/src/modules/v4/token.ts +0 -53
  80. package/src/modules/v4/username.ts +0 -94
  81. package/src/modules/v4/validate.ts +0 -76
  82. package/src/modules/v4.ts +0 -29
  83. package/src/routes/delete.ts +0 -72
  84. package/src/routes/get.ts +0 -856
  85. package/src/routes/index.ts +0 -59
  86. package/src/routes/patch.ts +0 -45
  87. package/src/routes/post.ts +0 -209
  88. package/src/storage/index.ts +0 -16
  89. package/src/types/express.d.ts +0 -17
  90. package/src/types/storage.ts +0 -48
  91. package/src/utils/colors.ts +0 -91
  92. package/src/utils/helpers.ts +0 -90
  93. package/src/utils/response.ts +0 -28
  94. package/tests/integration/api.test.ts +0 -772
  95. package/tests/tsconfig.json +0 -3
  96. package/tests/unit/address.test.ts +0 -84
  97. package/tests/unit/agent.test.ts +0 -113
  98. package/tests/unit/algorithms.test.ts +0 -121
  99. package/tests/unit/captcha.test.ts +0 -62
  100. package/tests/unit/chat.test.ts +0 -54
  101. package/tests/unit/color.test.ts +0 -54
  102. package/tests/unit/convert.test.ts +0 -68
  103. package/tests/unit/cron.test.ts +0 -110
  104. package/tests/unit/dice.test.ts +0 -58
  105. package/tests/unit/domain.test.ts +0 -48
  106. package/tests/unit/encode.test.ts +0 -109
  107. package/tests/unit/geo.test.ts +0 -46
  108. package/tests/unit/hash.test.ts +0 -45
  109. package/tests/unit/hyperplanning.test.ts +0 -97
  110. package/tests/unit/ip.test.ts +0 -140
  111. package/tests/unit/levenshtein.test.ts +0 -35
  112. package/tests/unit/palette.test.ts +0 -54
  113. package/tests/unit/password.test.ts +0 -86
  114. package/tests/unit/personal.test.ts +0 -66
  115. package/tests/unit/placeholder.test.ts +0 -58
  116. package/tests/unit/qrcode.test.ts +0 -83
  117. package/tests/unit/regex.test.ts +0 -95
  118. package/tests/unit/statistics.test.ts +0 -58
  119. package/tests/unit/text.test.ts +0 -108
  120. package/tests/unit/tic_tac_toe.test.ts +0 -56
  121. package/tests/unit/time.test.ts +0 -115
  122. package/tests/unit/token.test.ts +0 -62
  123. package/tests/unit/username.test.ts +0 -35
  124. package/tests/unit/validate.test.ts +0 -72
  125. package/tsconfig.json +0 -17
  126. package/tsconfig.test.json +0 -9
@@ -4,6 +4,33 @@ import { chatStorage, ticTacToeStorage } from '../storage/index.js';
4
4
  import { since } from '../utils/helpers.js';
5
5
  import { error } from '../utils/response.js';
6
6
  const router = Router();
7
+ // Generate a chart as SVG
8
+ router.post('/:version/chart', (req, res) => {
9
+ const body = req.body || {};
10
+ const { type, data, title, width, height, colors, bg, legend, mode } = body;
11
+ const { version } = req.params;
12
+ const chartMod = req.module.chart;
13
+ if (!chartMod) {
14
+ error(res, 404, `Endpoint not available in ${version}.`, `${req.latest}/chart`);
15
+ return;
16
+ }
17
+ if (!type || typeof type !== 'string' || !Object.hasOwn(chartMod, type)) {
18
+ error(res, 400, 'Please provide a valid chart type (?type=bar|line|pie|donut)', `${version}/chart`);
19
+ return;
20
+ }
21
+ try {
22
+ const output = chartMod[type](data, { title, width, height, colors, bg, legend, mode });
23
+ if (output.contentType === 'application/json') {
24
+ res.jsonResponse(output.body);
25
+ }
26
+ else {
27
+ res.type(output.contentType).send(output.body);
28
+ }
29
+ }
30
+ catch (err) {
31
+ error(res, 400, err.message, `${req.version}/chart`);
32
+ }
33
+ });
7
34
  // Store chat messages
8
35
  router.post('/:version/chat', (req, res) => {
9
36
  const { username, message, timestamp, session, token } = req.body || {};
@@ -98,6 +125,48 @@ router.post('/:version/hyperplanning', async (req, res) => {
98
125
  error(res, 400, err.message, `${req.version}/hyperplanning`);
99
126
  }
100
127
  });
128
+ // Matrix operations
129
+ router.post('/:version/matrix', (req, res) => {
130
+ const body = req.body || {};
131
+ const { operation, matrix: m, matrix2, scalar } = body;
132
+ const { version } = req.params;
133
+ const matrixMod = req.module.matrix;
134
+ if (!matrixMod) {
135
+ error(res, 404, `Endpoint not available in ${version}.`, `${req.latest}/matrix`);
136
+ return;
137
+ }
138
+ if (!operation || typeof operation !== 'string' || !Object.hasOwn(matrixMod, operation)) {
139
+ error(res, 400, 'Please provide a valid operation (?operation=add|subtract|multiply|scalar|transpose|determinant|inverse|identity)', `${version}/matrix`);
140
+ return;
141
+ }
142
+ try {
143
+ let result;
144
+ switch (operation) {
145
+ case 'add':
146
+ case 'subtract':
147
+ case 'multiply':
148
+ result = matrixMod[operation](m, matrix2);
149
+ break;
150
+ case 'scalar':
151
+ result = matrixMod.scalar(m, scalar);
152
+ break;
153
+ case 'transpose':
154
+ case 'determinant':
155
+ case 'inverse':
156
+ result = matrixMod[operation](m);
157
+ break;
158
+ case 'identity':
159
+ result = matrixMod.identity(scalar);
160
+ break;
161
+ default:
162
+ throw new Error('Unknown operation');
163
+ }
164
+ res.jsonResponse(result);
165
+ }
166
+ catch (err) {
167
+ error(res, 400, err.message, `${req.version}/matrix`);
168
+ }
169
+ });
101
170
  // Store tic tac toe games
102
171
  router.post('/:version/tic-tac-toe', (req, res) => {
103
172
  const { username, move, session, game } = req.body || {};
@@ -1 +1 @@
1
- {"version":3,"file":"post.js","sourceRoot":"","sources":["../../src/routes/post.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"post.js","sourceRoot":"","sources":["../../src/routes/post.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,10 +1,11 @@
1
1
  {
2
- "version": "4.8.0",
2
+ "version": "5.0.0",
3
3
  "name": "@20syldev/api",
4
4
  "description": "Node.js API with multiple features. Check the documentation at https://docs.sylvain.sh",
5
5
  "main": "dist/app.js",
6
6
  "type": "module",
7
7
  "scripts": {
8
+ "prepare": "tsc",
8
9
  "dev": "tsx watch src/app.ts",
9
10
  "start": "node dist/app.js",
10
11
  "build": "tsc",
@@ -21,7 +22,8 @@
21
22
  "./v1": "./dist/modules/v1.js",
22
23
  "./v2": "./dist/modules/v2.js",
23
24
  "./v3": "./dist/modules/v3.js",
24
- "./v4": "./dist/modules/v4.js"
25
+ "./v4": "./dist/modules/v4.js",
26
+ "./v5": "./dist/modules/v5.js"
25
27
  },
26
28
  "dependencies": {
27
29
  "@20syldev/logger.ts": "^1.0.1",
package/recap.md ADDED
@@ -0,0 +1,98 @@
1
+ # Récap des changements — v5.0.0
2
+
3
+ ## Nouveaux fichiers
4
+
5
+ ### `src/modules/v5/evaluate.ts`
6
+ Parseur Pratt (sans `eval()`) pour évaluer des expressions mathématiques.
7
+ - Tokenizer → récursif avec binding powers → évaluateur AST
8
+ - Constantes : `pi`, `e`
9
+ - 14 fonctions : `sin`, `cos`, `tan`, `asin`, `acos`, `atan`, `sqrt`, `abs`, `floor`, `ceil`, `round`, `log`, `log2`, `log10`
10
+ - Opérateurs : `+` `-` `*` `/` `%` `^` (unaire `-`)
11
+ - Division par zéro et identifiants inconnus → exception
12
+ - Profondeur max : `MAX_EXPR_DEPTH = 100`
13
+ - Longueur max : `MAX_EXPR_LENGTH = 500`
14
+
15
+ ### `src/modules/v5/matrix.ts`
16
+ 8 opérations matricielles (namespace export).
17
+ - `add`, `subtract`, `multiply`, `scalar`, `transpose`, `determinant`, `inverse`, `identity`
18
+ - Déterminant : élimination gaussienne avec pivot partiel
19
+ - Inverse : Gauss-Jordan
20
+ - Validation : tableau 2D, longueurs uniformes, nombres finis, max `MAX_MATRIX_SIZE = 20`
21
+
22
+ ### `src/modules/v5/chart.ts`
23
+ Génération SVG de graphiques (bar, line, pie, donut).
24
+ - **Dimensions** : `width`/`height` optionnels → si fournis, `viewBox` adapté + attrs sur `<svg>` ; sinon pas d'attrs (SVG responsive qui remplit son conteneur)
25
+ - **`legend`** (bool, défaut `true`) : masque la légende si `false`
26
+ - **`mode`** (`"svg"` défaut ou `"data"`) : retourne le SVG ou les données brutes JSON
27
+ - `ChartOutput` : union type `image/svg+xml | application/json`
28
+ - Axes dessinés avant les données (points par-dessus les axes)
29
+ - Marges : `{ bottom: 40, left: 50, right: 40, top: 30 }`
30
+ - Max : `MAX_CHART_LABELS = 20`, `MAX_CHART_DATASETS = 5`
31
+ - Échappement XML des labels (`<`, `>`, `&`, `"`)
32
+
33
+ ### `src/modules/v5.ts`
34
+ Barrel v5 — exports nommés depuis le barrel v4 + v5-specifics.
35
+ ```ts
36
+ export { address, agent, ..., validate } from './v4.js'; // héritage sans ambiguïté
37
+ export * as chart from './v5/chart.js';
38
+ export { default as evaluate } from './v5/evaluate.js';
39
+ export * as matrix from './v5/matrix.js';
40
+ ```
41
+ Avantage : pour upgrader un endpoint v4 en v5, on retire son nom de la liste v4 et on ajoute un export v5.
42
+
43
+ ### `tests/unit/evaluate.test.ts`
44
+ ### `tests/unit/matrix.test.ts`
45
+ ### `tests/unit/chart.test.ts`
46
+ Tests unitaires avec `node:test` + `node:assert`. 654 tests au total, 0 échec.
47
+
48
+ ---
49
+
50
+ ## Fichiers modifiés
51
+
52
+ ### `package.json`
53
+ - Version `4.9.0` → `5.0.0`
54
+ - Ajout export `"./v5": "./dist/modules/v5.js"`
55
+ - Ajout script `prepare`
56
+
57
+ ### `src/constants.ts`
58
+ ```ts
59
+ MAX_CHART_DATASETS = 5
60
+ MAX_CHART_LABELS = 20
61
+ MAX_EXPR_DEPTH = 100
62
+ MAX_EXPR_LENGTH = 500
63
+ MAX_MATRIX_SIZE = 20
64
+ ```
65
+
66
+ ### `src/config/versions.ts`
67
+ - Import `apiv5`
68
+ - Config v5 : hérite des endpoints v4 + ajout `evaluate` (GET), `chart` (POST), `matrix` (POST)
69
+
70
+ ### `src/types/express.d.ts`
71
+ - Ajout `typeof apiv5` dans le type union de `req.module`
72
+
73
+ ### `src/routes/get.ts`
74
+ - Handler `GET /:version/evaluate` (v5 only, 404 en v4)
75
+ - Handlers 405 pour `GET /chart` et `GET /matrix`
76
+ - Tous les handlers triés alphabétiquement par endpoint (`:version` en tête, sous-routes après leur parent)
77
+ - Toutes les URLs de doc dans les erreurs 404 pointent sur `req.latest` (plus sur la version demandée)
78
+
79
+ ### `src/routes/post.ts`
80
+ - Handler `POST /:version/chart` : dispatch sur `mode` → SVG (`res.type().send()`) ou JSON (`res.jsonResponse()`) ; passe `legend` et `mode` à la fonction
81
+ - Handler `POST /:version/matrix` : switch sur `operation`
82
+ - Handlers triés alphabétiquement : chart → chat → chat/private → hash → hyperplanning → matrix → tic-tac-toe → token
83
+
84
+ ### `tests/integration/api.test.ts`
85
+ - Blocs `describe` pour `GET /v5/evaluate`, `POST /v5/matrix`, `POST /v5/chart`
86
+ - Tests `mode: "data"` (retour JSON), 404 sur v4, 405 GET sur endpoints POST-only
87
+
88
+ ---
89
+
90
+ ## Fixes
91
+
92
+ | Problème | Fix |
93
+ |---|---|
94
+ | URLs de doc 404 pointaient sur la version demandée | Remplacé `${version}/endpoint` par `${req.latest}/endpoint` partout |
95
+ | Donut/pie : légende coupée en bas | `chartAreaH` soustrait correctement `MARGIN.top` + gap |
96
+ | Line chart : point du premier label masqué par l'axe Y | Axes dessinés avant les données |
97
+ | `width`/`height` SVG : fond blanc s'agrandissait sans changer le dessin | `renderW`/`renderH` = dimensions réelles de dessin (= `viewBox`) ; `displayW`/`displayH` = attrs SVG uniquement si fournis |
98
+ | `export * from './v4.js'` dans v5.ts : ambiguïté si upgrade d'un endpoint | Remplacé par exports nommés explicites depuis `./v4.js` |
@@ -1 +0,0 @@
1
- github: [20syldev]
package/.prettierrc DELETED
@@ -1,7 +0,0 @@
1
- {
2
- "tabWidth": 4,
3
- "singleQuote": true,
4
- "semi": true,
5
- "printWidth": 120,
6
- "trailingComma": "all"
7
- }
package/eslint.config.js DELETED
@@ -1,24 +0,0 @@
1
- import eslint from '@eslint/js';
2
- import simpleImportSort from 'eslint-plugin-simple-import-sort';
3
- import tseslint from 'typescript-eslint';
4
- import eslintConfigPrettier from 'eslint-config-prettier';
5
-
6
- export default tseslint.config(
7
- eslint.configs.recommended,
8
- ...tseslint.configs.strict,
9
- eslintConfigPrettier,
10
- {
11
- plugins: { 'simple-import-sort': simpleImportSort },
12
- rules: {
13
- 'simple-import-sort/imports': 'error',
14
- 'simple-import-sort/exports': 'error',
15
- '@typescript-eslint/no-explicit-any': 'warn',
16
- '@typescript-eslint/no-unused-vars': ['error', { argsIgnorePattern: '^_' }],
17
- '@typescript-eslint/no-non-null-assertion': 'off',
18
- '@typescript-eslint/no-dynamic-delete': 'off',
19
- },
20
- },
21
- {
22
- ignores: ['dist/', 'node_modules/', 'src/modules/v3/'],
23
- },
24
- );
package/robots.txt DELETED
@@ -1,74 +0,0 @@
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/app.ts DELETED
@@ -1,53 +0,0 @@
1
- import express from 'express';
2
-
3
- import { env } from './config/env.js';
4
- import { setupCors } from './middleware/cors.js';
5
- import { errorHandler } from './middleware/error.js';
6
- import { jsonResponseMiddleware } from './middleware/json.js';
7
- import { loggerMiddleware } from './middleware/logger.js';
8
- import { rateLimitMiddleware } from './middleware/ratelimit.js';
9
- import { endpointCheckMiddleware, versionCheckMiddleware } from './middleware/version.js';
10
- import deleteRoutes from './routes/delete.js';
11
- import getRoutes from './routes/get.js';
12
- import indexRoutes from './routes/index.js';
13
- import patchRoutes from './routes/patch.js';
14
- import postRoutes from './routes/post.js';
15
-
16
- const app = express();
17
-
18
- // Setup CORS, body parsing, static files
19
- setupCors(app);
20
-
21
- // Custom JSON response
22
- app.use(jsonResponseMiddleware);
23
-
24
- // Rate limiting
25
- app.use(rateLimitMiddleware);
26
-
27
- // Request logging
28
- app.use(loggerMiddleware);
29
-
30
- // Error handling
31
- app.use(errorHandler);
32
-
33
- // Root routes (before version check)
34
- app.use(indexRoutes);
35
-
36
- // Version & endpoint validation
37
- app.use('/:version', versionCheckMiddleware);
38
- app.use('/:version/:endpoint', endpointCheckMiddleware);
39
-
40
- // Versioned routes
41
- app.use(getRoutes);
42
- app.use(postRoutes);
43
- app.use(patchRoutes);
44
- app.use(deleteRoutes);
45
-
46
- // Start server
47
- if (process.env.NODE_ENV !== 'test') {
48
- app.listen(env.PORT, () =>
49
- console.log(`API is running on\n - http://127.0.0.1:${env.PORT}\n - http://localhost:${env.PORT}`),
50
- );
51
- }
52
-
53
- export default app;
package/src/config/env.ts DELETED
@@ -1,87 +0,0 @@
1
- import dotenv from 'dotenv';
2
-
3
- import { DEFAULT_PORT } from '../constants.js';
4
-
5
- dotenv.config();
6
-
7
- function envList(key: string): string[] | null {
8
- const v = process.env[key];
9
- return v && v !== 'undefined' ? v.split(' ') : null;
10
- }
11
-
12
- function envNumber(key: string, fallback: number): number {
13
- const v = parseInt(process.env[key] ?? '', 10);
14
- return isNaN(v) ? fallback : v;
15
- }
16
-
17
- export const env = {
18
- PORT: envNumber('PORT', DEFAULT_PORT),
19
- GITHUB_TOKEN: process.env.GITHUB_TOKEN ?? '',
20
-
21
- DEFAULT_LIMIT: envNumber('DEFAULT_LIMIT', 2000),
22
- ADVANCED_LIMIT: envNumber('ADVANCED_LIMIT', 3500),
23
- PRO_LIMIT: envNumber('PRO_LIMIT', 6000),
24
- BUSINESS_LIMIT: envNumber('BUSINESS_LIMIT', 10000),
25
- GLOBAL_LIMIT: envNumber('GLOBAL_LIMIT', 50000),
26
-
27
- DEFAULT_BURST: envNumber('DEFAULT_BURST', 50),
28
- ADVANCED_BURST: envNumber('ADVANCED_BURST', 80),
29
- PRO_BURST: envNumber('PRO_BURST', 120),
30
- BUSINESS_BURST: envNumber('BUSINESS_BURST', 200),
31
-
32
- BUSINESS_TOKEN_LIST: envList('BUSINESS_TOKEN_LIST') ?? [],
33
- PRO_TOKEN_LIST: envList('PRO_TOKEN_LIST') ?? [],
34
- ADVANCED_TOKEN_LIST: envList('ADVANCED_TOKEN_LIST') ?? [],
35
-
36
- // Website endpoint env vars
37
- G_2048: process.env.G_2048,
38
- API: process.env.API,
39
- CDN: process.env.CDN,
40
- COOP_API: process.env.COOP_API,
41
- COOP_STATUS: process.env.COOP_STATUS,
42
- CHAT: process.env.CHAT,
43
- DIGIT: process.env.DIGIT,
44
- DOC_COOPBOT: process.env.DOC_COOPBOT,
45
- DOCS: process.env.DOCS,
46
- DONUT: process.env.DONUT,
47
- DRAWIO_PLUGIN: process.env.DRAWIO_PLUGIN,
48
- FLOWERS: process.env.FLOWERS,
49
- GEMSYNC: process.env.GEMSYNC,
50
- GFT: process.env.GFT,
51
- GITSITE: process.env.GITSITE,
52
- LEBONCHAR: process.env.LEBONCHAR,
53
- LOGGER: process.env.LOGGER,
54
- LOGS: process.env.LOGS,
55
- LOGVAULT: process.env.LOGVAULT,
56
- LYAH: process.env.LYAH,
57
- MINIFY: process.env.MINIFY,
58
- MN: process.env.MN,
59
- MONITORING: process.env.MONITORING,
60
- MORPION: process.env.MORPION,
61
- NITROGEN: process.env.NITROGEN,
62
- OLD_DATABASE: process.env.OLD_DATABASE,
63
- PASSWORD: process.env.PASSWORD,
64
- PHP: process.env.PHP,
65
- PLANNING: process.env.PLANNING,
66
- PING: process.env.PING,
67
- PORTFOLIO: process.env.PORTFOLIO,
68
- PYTHON_API: process.env.PYTHON_API,
69
- README: process.env.README,
70
- TIMESTAMP: process.env.TIMESTAMP,
71
- TERMINAL: process.env.TERMINAL,
72
- VALENTINE: process.env.VALENTINE,
73
- WRKIT: process.env.WRKIT,
74
- ZPKI: process.env.ZPKI,
75
-
76
- PATCH: envList('PATCH'),
77
- RECENT: envList('RECENT'),
78
- NEW: envList('NEW'),
79
- DOMAINS: envList('DOMAINS'),
80
-
81
- STATS1: process.env.STATS1,
82
- STATS2: process.env.STATS2,
83
- STATS3: process.env.STATS3,
84
- STATS4: process.env.STATS4,
85
- TAG: process.env.TAG,
86
- ACTIVE: process.env.ACTIVE === 'true',
87
- };
@@ -1,61 +0,0 @@
1
- import { env } from './env.js';
2
-
3
- /**
4
- * Rate limit plans configuration.
5
- *
6
- * hourly — max requests per hour (matches pricing page)
7
- * burst — max requests per 10-second window
8
- * tokens — list of bearer tokens for this tier
9
- *
10
- * To adjust limits, edit the values below or override via .env:
11
- * DEFAULT_LIMIT, ADVANCED_LIMIT, PRO_LIMIT, BUSINESS_LIMIT
12
- * DEFAULT_BURST, ADVANCED_BURST, PRO_BURST, BUSINESS_BURST
13
- */
14
-
15
- export interface Plan {
16
- hourly: number;
17
- burst: number;
18
- tokens: string[];
19
- }
20
-
21
- export const plans: Record<string, Plan> = {
22
- business: {
23
- hourly: env.BUSINESS_LIMIT,
24
- burst: env.BUSINESS_BURST,
25
- tokens: env.BUSINESS_TOKEN_LIST,
26
- },
27
- pro: {
28
- hourly: env.PRO_LIMIT,
29
- burst: env.PRO_BURST,
30
- tokens: env.PRO_TOKEN_LIST,
31
- },
32
- advanced: {
33
- hourly: env.ADVANCED_LIMIT,
34
- burst: env.ADVANCED_BURST,
35
- tokens: env.ADVANCED_TOKEN_LIST,
36
- },
37
- default: {
38
- hourly: env.DEFAULT_LIMIT,
39
- burst: env.DEFAULT_BURST,
40
- tokens: [],
41
- },
42
- };
43
-
44
- export const globalLimit = env.GLOBAL_LIMIT; // 50 000/h
45
-
46
- /**
47
- * Returns the plan matching a bearer token, or 'default'.
48
- * Returns null if the token is provided but invalid.
49
- */
50
- export function getPlan(token: string): { name: string; plan: Plan } | null {
51
- if (!token) return { name: 'default', plan: plans.default! };
52
- if (token === 'undefined') return null;
53
-
54
- for (const [name, plan] of Object.entries(plans)) {
55
- if (name === 'default') continue;
56
- if (plan.tokens.includes('undefined')) continue;
57
- if (plan.tokens.includes(token)) return { name, plan };
58
- }
59
-
60
- return null;
61
- }
@@ -1,121 +0,0 @@
1
- import * as apiv3 from '../modules/v3.js';
2
- import * as apiv4 from '../modules/v4.js';
3
-
4
- export interface Endpoint {
5
- name: string;
6
- path?: string;
7
- children?: Record<string, string>;
8
- }
9
-
10
- export interface VersionConfig {
11
- endpoints: {
12
- get: Endpoint[];
13
- post: Endpoint[];
14
- patch?: Endpoint[];
15
- delete?: Endpoint[];
16
- };
17
- modules: typeof apiv3 | typeof apiv4;
18
- }
19
-
20
- /**
21
- * Merges a base list of endpoints with additions, deduplicating by `name`.
22
- * If an addition has the same name as a base entry, it overrides it.
23
- */
24
- const merge = (base: Endpoint[], additions: Endpoint[]): Endpoint[] => {
25
- const map = new Map(base.map((e) => [e.name, e]));
26
- for (const e of additions) map.set(e.name, e);
27
- return [...map.values()];
28
- };
29
-
30
- const v1 = {
31
- get: [
32
- { name: 'algorithms', path: '/algorithms?method={algorithm}&value={value}(&value2={value2})' },
33
- { name: 'captcha', path: '/captcha?text={text}' },
34
- { name: 'color', path: '/color' },
35
- { name: 'convert', path: '/convert?value={value}&from={unit}&to={unit}' },
36
- { name: 'domain', path: '/domain' },
37
- { name: 'infos', path: '/infos' },
38
- { name: 'personal', path: '/personal' },
39
- { name: 'qrcode', path: '/qrcode?url={URL}' },
40
- { name: 'username', path: '/username' },
41
- { name: 'website', path: '/website' },
42
- ],
43
- post: [{ name: 'token', path: '/token' }],
44
- };
45
-
46
- const v2 = {
47
- get: merge(v1.get, [{ name: 'chat', path: '/chat' }]),
48
- post: merge(v1.post, [
49
- {
50
- name: 'chat',
51
- children: {
52
- chat: '/chat',
53
- private: '/chat/private',
54
- } as Record<string, string>,
55
- },
56
- { name: 'hash', path: '/hash' },
57
- {
58
- name: 'tic_tac_toe',
59
- children: {
60
- tic_tac_toe: '/tic-tac-toe',
61
- fetch: '/tic-tac-toe/fetch',
62
- list: '/tic-tac-toe/list',
63
- } as Record<string, string>,
64
- },
65
- ]),
66
- };
67
-
68
- const v3 = {
69
- get: merge(v2.get, [
70
- { name: 'levenshtein', path: '/levenshtein?str1={string}&str2={string}' },
71
- {
72
- name: 'time',
73
- path: '/time(?type={live|random|countdown}&target={date}&start={timestamp}&end={timestamp}&format={format}&timezone={timezone})',
74
- },
75
- ]),
76
- post: merge(v2.post, [{ name: 'hyperplanning', path: '/hyperplanning' }]),
77
- };
78
-
79
- const v4 = {
80
- get: merge(v3.get, [
81
- { name: 'address', path: '/address(&country={code}&count={n})' },
82
- { name: 'agent', path: '/agent(&ua={string})' },
83
- {
84
- name: 'captcha',
85
- path: '/captcha(&text={text}&length={n}&width={px}&height={px}&noise={low|medium|high}&bg={hex}&color={hex})',
86
- },
87
- { name: 'color', path: '/color(&hex={hex})' },
88
- { name: 'convert', path: '/convert?value={value}&from={unit}&to={unit}' },
89
- { name: 'cron', path: '/cron?expr={expression}(&count={n}&from={date}&timezone={timezone})' },
90
- { name: 'dice', path: '/dice?roll={NdX+M}' },
91
- { name: 'encode', path: '/encode?method={method}&text={text}(&shift={shift})' },
92
- { name: 'geo', path: '/geo?lat1={lat}&lon1={lon}&lat2={lat}&lon2={lon}' },
93
- { name: 'headers', path: '/headers(&filter={header1,header2})' },
94
- { name: 'ip', path: '/ip(&address={ip})' },
95
- { name: 'palette', path: '/palette?color={#hex}&type={type}' },
96
- {
97
- name: 'password',
98
- path: '/password(&type={random|passphrase}&length={n}&uppercase={bool}&lowercase={bool}&digits={bool}&symbols={bool}&exclude={chars}&count={n}&separator={char})',
99
- },
100
- {
101
- name: 'placeholder',
102
- path: '/placeholder?type={image|skeleton}&width={w}&height={h}(&bg={hex}&color={hex}&text={text}&rows={n}&avatar={bool})',
103
- },
104
- {
105
- name: 'qrcode',
106
- path: '/qrcode?url={URL}(&size={px}&margin={n}&correction={L|M|Q|H}&dark={hex}&light={hex}&icon={URL}&iconSize={px}&iconPadding={px}&iconRadius={px}&format={png|base64})',
107
- },
108
- { name: 'regex', path: '/regex?pattern={regex}&text={string}(&flags={flags})' },
109
- { name: 'statistics', path: '/statistics?values={n1,n2,n3,...}' },
110
- { name: 'text', path: '/text?method={method}(&value={value}&type={type}&count={count}&lang={lang})' },
111
- { name: 'validate', path: '/validate?type={type}&value={value}' },
112
- ]),
113
- post: [...v3.post],
114
- };
115
-
116
- export const versions: Record<string, VersionConfig> = {
117
- v1: { endpoints: v1, modules: apiv3 },
118
- v2: { endpoints: v2, modules: apiv3 },
119
- v3: { endpoints: v3, modules: apiv3 },
120
- v4: { endpoints: v4, modules: apiv4 },
121
- };