@truelab/trueserver 0.1.4 → 0.3.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 (38) hide show
  1. package/CHANGELOG.md +27 -0
  2. package/MIGRATION.md +114 -1
  3. package/README.md +51 -20
  4. package/dist/application.d.ts +1 -5
  5. package/dist/application.d.ts.map +1 -1
  6. package/dist/application.js +1 -3
  7. package/dist/application.js.map +1 -1
  8. package/dist/helpers/env.helper.d.ts +16 -2
  9. package/dist/helpers/env.helper.d.ts.map +1 -1
  10. package/dist/helpers/env.helper.js +33 -9
  11. package/dist/helpers/env.helper.js.map +1 -1
  12. package/dist/helpers/fastify.helper.js +1 -1
  13. package/dist/helpers/fastify.helper.js.map +1 -1
  14. package/dist/helpers/logger.helper.d.ts.map +1 -1
  15. package/dist/helpers/logger.helper.js +34 -8
  16. package/dist/helpers/logger.helper.js.map +1 -1
  17. package/dist/helpers/tests.helper.d.ts +2 -1
  18. package/dist/helpers/tests.helper.d.ts.map +1 -1
  19. package/dist/helpers/tests.helper.js +1 -1
  20. package/dist/helpers/tests.helper.js.map +1 -1
  21. package/dist/index.d.ts +1 -1
  22. package/dist/index.d.ts.map +1 -1
  23. package/dist/index.js +2 -1
  24. package/dist/index.js.map +1 -1
  25. package/dist/plugins/apikey.plugin.js +2 -2
  26. package/dist/plugins/apikey.plugin.js.map +1 -1
  27. package/dist/plugins/logger.plugin.d.ts.map +1 -1
  28. package/dist/plugins/logger.plugin.js +8 -6
  29. package/dist/plugins/logger.plugin.js.map +1 -1
  30. package/dist/plugins/sentry.plugin.js +2 -2
  31. package/dist/plugins/sentry.plugin.js.map +1 -1
  32. package/dist/plugins/swagger.plugin.js +1 -1
  33. package/dist/plugins/swagger.plugin.js.map +1 -1
  34. package/dist/schemas/shared.d.ts +2 -1
  35. package/dist/schemas/shared.d.ts.map +1 -1
  36. package/dist/schemas/shared.js +1 -1
  37. package/dist/schemas/shared.js.map +1 -1
  38. package/package.json +3 -1
package/CHANGELOG.md CHANGED
@@ -6,6 +6,33 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
6
6
 
7
7
  ## [Unreleased]
8
8
 
9
+ ## [0.3.0] - 2026-07-22
10
+
11
+ ### Breaking
12
+
13
+ - Все env-переменные пакета получили префикс `GS_` (Game Server) — во избежание конфликтов с переменными других сервисов в общем окружении: `HOST`→`GS_HOST`, `PORT`→`GS_PORT`, `ROUTE_PREFIX`→`GS_ROUTE_PREFIX`, `API_HEADER`→`GS_API_HEADER`, `API_KEY`→`GS_API_KEY`, `LOG_LEVEL`→`GS_LOG_LEVEL`, `APP_ENV`→`GS_APP_ENV`, `SENTRY_DSN`→`GS_SENTRY_DSN`, `SENTRY_RATE`→`GS_SENTRY_RATE`. См. [MIGRATION](MIGRATION.md#migration-020--030).
14
+
15
+ ### Added
16
+
17
+ - Типизированный объект `env` (экспорт из корня пакета) — свойства `host`, `port`, `routePrefix`, `apiHeader`, `apiKey`, `logLevel`, `appEnv`, `sentryDsn`, `sentryRate` с уже прописанными дефолтами и корректными типами (`port`/`sentryRate` — `number`). Заменяет разбросанные по коду вызовы `getenv('GS_X', <дефолт>)` единой типизированной точкой доступа. Низкоуровневые `getenv`/`variation` остаются экспортированными — для собственных переменных потребителя.
18
+ - Логгер маскирует секреты (`authorization`/`cookie` заголовки, `token`/`password`/`signature` поля) в выводимых записях — значение заменяется на `[redacted]`, структура записи сохраняется.
19
+
20
+ ### Changed
21
+
22
+ - Swagger UI (`/docs`) снова доступен только на `GS_APP_ENV=dev` — откат изменения из 0.1.3, включавшего его и на staging (`release`).
23
+ - `pino-pretty` включён только для `GS_APP_ENV=dev`; на `release`/`master` логгер пишет сырой NDJSON в stdout.
24
+ - Хуки request-логирования (`onRequest`/`onResponse`/`preHandler`/`preSerialization`) гейтятся по уровню уже сконфигурированного логгера, а не повторным чтением `GS_LOG_LEVEL`.
25
+
26
+ ## [0.2.0] - 2026-07-06
27
+
28
+ ### Breaking
29
+
30
+ - Удалена опция `new Application({ envPath })` и тип `TApplicationOptions`. Приоритетный env-файл теперь задаётся CLI-флагом `--env` при запуске процесса (см. Added). В проде `envPath` использовала только battle-rage, уже переведённая на штатный вариант, поэтому удаление безопасно. Рекомендуется minor-релиз **0.2.0**. См. [MIGRATION](MIGRATION.md#migration-014--020).
31
+
32
+ ### Added
33
+
34
+ - CLI-флаг `--env <path>` | `--env=<path>` (аргумент приложения, парсится из `process.argv`) — загружает указанный `.env` **с приоритетом** (`override: true`) поверх `./.env` из cwd и уже присутствующих `process.env`. Флаг обрабатывается на верхнем уровне `env.helper` (при импорте), т.е. **до** вычисления `loggerOptions` в `logger.helper`, поэтому влияет и на `LOG_LEVEL` (раньше `envPath` применялся позже и `LOG_LEVEL` терялся). Относительный путь резолвится от cwd процесса; несуществующий файл → `console.warn` без падения. Разбор аргумента — через `minimist`.
35
+
9
36
  ## [0.1.4] - 2026-07-06
10
37
 
11
38
  ### Changed
package/MIGRATION.md CHANGED
@@ -1,12 +1,125 @@
1
1
  # Migration
2
2
 
3
- - [0.0.7 → 0.1.0](#migration-007--010) (последнее)
3
+ - [0.2.0 → 0.3.0](#migration-020--030) (последнее)
4
+ - [0.1.4 → 0.2.0](#migration-014--020)
5
+ - [0.0.7 → 0.1.0](#migration-007--010)
4
6
  - [0.0.6 → 0.0.7](#migration-006--007)
5
7
  - [0.0.5 → 0.0.6](#migration-005--006)
6
8
  - [0.0.4 → 0.0.5](#migration-004--005)
7
9
 
8
10
  ---
9
11
 
12
+ ## Migration: 0.2.0 → 0.3.0
13
+
14
+ Ломающее изменение — все env-переменные пакета получили префикс `GS_` (Game Server), чтобы не конфликтовать с переменными других сервисов в общем окружении.
15
+
16
+ > **TL;DR:**
17
+ > - Переименуйте переменные в `.env`/секретах/деплое (pm2, CI) согласно таблице ниже.
18
+ > - Опционально: замените ручные `getenv('GS_PORT', '2980')` и подобные вызовы в коде игры на новый типизированный объект `env` — дефолты уже прописаны, тип уже правильный.
19
+
20
+ ### 1. Переименование переменных
21
+
22
+ | Старое | Новое |
23
+ |---|---|
24
+ | `HOST` | `GS_HOST` |
25
+ | `PORT` | `GS_PORT` |
26
+ | `ROUTE_PREFIX` | `GS_ROUTE_PREFIX` |
27
+ | `API_HEADER` | `GS_API_HEADER` |
28
+ | `API_KEY` | `GS_API_KEY` |
29
+ | `LOG_LEVEL` | `GS_LOG_LEVEL` |
30
+ | `APP_ENV` | `GS_APP_ENV` |
31
+ | `SENTRY_DSN` | `GS_SENTRY_DSN` |
32
+ | `SENTRY_RATE` | `GS_SENTRY_RATE` |
33
+
34
+ ```diff
35
+ -HOST=0.0.0.0
36
+ -PORT=2980
37
+ -ROUTE_PREFIX=/api/v1
38
+ -API_HEADER=x-api-key
39
+ -API_KEY=super-secret
40
+ -LOG_LEVEL=info
41
+ -APP_ENV=release
42
+ -SENTRY_DSN=https://...
43
+ -SENTRY_RATE=0.05
44
+ +GS_HOST=0.0.0.0
45
+ +GS_PORT=2980
46
+ +GS_ROUTE_PREFIX=/api/v1
47
+ +GS_API_HEADER=x-api-key
48
+ +GS_API_KEY=super-secret
49
+ +GS_LOG_LEVEL=info
50
+ +GS_APP_ENV=release
51
+ +GS_SENTRY_DSN=https://...
52
+ +GS_SENTRY_RATE=0.05
53
+ ```
54
+
55
+ Незамеченные старые (непрефиксованные) переменные больше не читаются пакетом — тихого фолбэка нет, применяются дефолты из таблицы в README.
56
+
57
+ ### 2. Новое: типизированный `env`
58
+
59
+ ```diff
60
+ -import { getenv, logger } from '@truelab/trueserver'
61
+ +import { env, logger } from '@truelab/trueserver'
62
+
63
+ await server.listen({
64
+ - host: getenv('HOST', 'localhost'),
65
+ - port: Number.parseInt(getenv('PORT', '2980'), 10),
66
+ + host: env.host,
67
+ + port: env.port,
68
+ })
69
+ ```
70
+
71
+ `getenv`/`variation` продолжают экспортироваться — используйте их для собственных, не связанных с Game Server переменных окружения игры.
72
+
73
+ ### Чек-лист
74
+
75
+ 1. `npm install @truelab/trueserver@0.3.0`.
76
+ 2. Переименовать переменные в инфраструктуре запуска (`.env`, pm2/systemd/докер-entrypoint, CI-секреты) согласно таблице в п. 1.
77
+ 3. Опционально: перевести код игры на `env.*` вместо ручных `getenv('GS_X', ...)`.
78
+ 4. Прогнать тесты и проверить, что сервис поднимается с ожидаемым `HOST`/`PORT`/`LOG_LEVEL`.
79
+
80
+ ---
81
+
82
+ ## Migration: 0.1.4 → 0.2.0
83
+
84
+ Единственное ломающее изменение — удалена опция `new Application({ envPath })` (вместе с типом `TApplicationOptions`). Приоритетный env-файл теперь задаётся CLI-флагом `--env` при запуске процесса.
85
+
86
+ > **TL;DR:**
87
+ > - Использовали `new Application({ envPath })` — уберите опцию: `new Application()`.
88
+ > - Конкретный env-файл теперь передавайте флагом `--env <path>` в команде запуска. Он не зависит от cwd и применяется **до** создания логгера, поэтому влияет и на `LOG_LEVEL`.
89
+ > - Ничего не передавали в `Application()` — менять нечего.
90
+
91
+ ### 1. `new Application({ envPath })` → `new Application()`
92
+
93
+ ```diff
94
+ -const app = new Application({ envPath: './server/.env' })
95
+ +const app = new Application()
96
+ ```
97
+
98
+ Передачу конкретного env-файла перенесите в команду запуска процесса:
99
+
100
+ ```sh
101
+ pm2 start ./server/dist/index.js --name <proc> --cwd ${FOLDER_PATH} -- --env ./server/.env
102
+ ```
103
+
104
+ Флаг `--env`:
105
+ - поддерживает формы `--env <path>` и `--env=<path>`;
106
+ - применяет файл с `override: true` — он перекрывает и `./.env` из cwd, и уже выставленные `process.env`;
107
+ - резолвит относительный путь от cwd процесса (абсолютный — как есть);
108
+ - на несуществующий файл пишет `console.warn` и не роняет процесс.
109
+
110
+ ### Почему
111
+
112
+ `envPath` применялся в конструкторе `Application` — уже **после** того, как `logger.helper` на этапе импорта прочитал `LOG_LEVEL`. Поэтому `PORT/HOST/API_KEY` из переданного файла применялись, а `LOG_LEVEL` — нет: сервер, запущенный не из корня воркспейса, молча терял `info`/startup-логи. Флаг `--env` парсится на верхнем уровне `env.helper`, гарантированно раньше чтения `LOG_LEVEL`, поэтому логи и env корректны из любого cwd.
113
+
114
+ ### Чек-лист
115
+
116
+ 1. `npm install @truelab/trueserver@0.2.0`.
117
+ 2. Убрать аргумент из `new Application({ envPath })` → `new Application()`.
118
+ 3. Если нужен конкретный env-файл на деплое — добавить `-- --env <path>` в команду запуска (pm2/systemd/докер-entrypoint).
119
+ 4. Прогнать тесты и проверить, что startup-логи присутствуют.
120
+
121
+ ---
122
+
10
123
  ## Migration: 0.0.7 → 0.1.0
11
124
 
12
125
  Ломающий релиз. Приводит пакет в полное соответствие контракту Game Server API v1.0.0.
package/README.md CHANGED
@@ -21,8 +21,8 @@ npm install @truelab/trueserver
21
21
  import {
22
22
  Application,
23
23
  EStakeType,
24
+ env,
24
25
  handlers,
25
- getenv,
26
26
  logger,
27
27
  registerGameConfig,
28
28
  type TChecksumReply,
@@ -103,8 +103,8 @@ async function main() {
103
103
  const server = await app.build()
104
104
 
105
105
  await server.listen({
106
- host: getenv('HOST', 'localhost'),
107
- port: Number.parseInt(getenv('PORT', '2980'), 10),
106
+ host: env.host,
107
+ port: env.port,
108
108
  })
109
109
  }
110
110
 
@@ -129,9 +129,9 @@ main().catch((error) => {
129
129
  | `POST` | `/:rtpVersion/play` | `handlers.register('play', ...)` | One step of a round |
130
130
  | `POST` | `/:rtpVersion/validate` | `handlers.register('validate', ...)` | Pre-round stake validation — returns `{ valid, reason? }` (enabled when `hasValidate=true`) |
131
131
 
132
- Every request must carry the API key header. By default it is `x-api-key: test`; override with `API_HEADER` and `API_KEY`.
132
+ Every request must carry the API key header. By default it is `x-api-key: test`; override with `GS_API_HEADER` and `GS_API_KEY`.
133
133
 
134
- `ROUTE_PREFIX` is prepended to every route. For `ROUTE_PREFIX=/api/v1`, the play endpoint becomes `POST /api/v1/96/play`. `/healthcheck` is always mounted directly under the prefix (no `{rtpVersion}` segment).
134
+ `GS_ROUTE_PREFIX` is prepended to every route. For `GS_ROUTE_PREFIX=/api/v1`, the play endpoint becomes `POST /api/v1/96/play`. `/healthcheck` is always mounted directly under the prefix (no `{rtpVersion}` segment).
135
135
 
136
136
  ## Error envelope
137
137
 
@@ -168,29 +168,60 @@ import {
168
168
 
169
169
  ## Environment variables
170
170
 
171
+ All package-owned environment variables are prefixed with `GS_` (Game Server) to avoid collisions with other services sharing the same environment. They are available both as raw `process.env.GS_*` entries and through the typed `env` object exported by the package (see below).
172
+
171
173
  | Variable | Default | Description |
172
174
  | -------- | ------- | ----------- |
173
- | `HOST` | `localhost` | Listen host |
174
- | `PORT` | `2980` | Listen port |
175
- | `ROUTE_PREFIX` | empty | Prefix for all routes |
176
- | `API_HEADER` | `x-api-key` | Header name used by API-key plugin |
177
- | `API_KEY` | `test` | Expected API key value |
178
- | `LOG_LEVEL` | `error` | Pino log level |
179
- | `APP_ENV` | unset | `dev`, `release`, `master`; controls Swagger and environment mapping |
180
- | `SENTRY_DSN` | unset | Sentry DSN |
181
- | `SENTRY_RATE` | `0.01` | Sentry traces sample rate |
182
- | `GAME_ID` | `0001` | Sentry `game.id` tag fallback |
183
-
184
- The environment helper imports `dotenv/config`, so `.env` is loaded automatically.
175
+ | `GS_HOST` | `localhost` | Listen host |
176
+ | `GS_PORT` | `2980` | Listen port |
177
+ | `GS_ROUTE_PREFIX` | empty | Prefix for all routes |
178
+ | `GS_API_HEADER` | `x-api-key` | Header name used by API-key plugin |
179
+ | `GS_API_KEY` | `test` | Expected API key value |
180
+ | `GS_LOG_LEVEL` | `debug` (dev) / `info` (release, master) | Pino log level |
181
+ | `GS_APP_ENV` | unset | `dev`, `release`, `master`; controls Swagger and environment mapping |
182
+ | `GS_SENTRY_DSN` | unset | Sentry DSN |
183
+ | `GS_SENTRY_RATE` | `0.01` | Sentry traces sample rate |
184
+
185
+ ### Typed access
186
+
187
+ ```typescript
188
+ import { env } from '@truelab/trueserver'
189
+
190
+ env.host // GS_HOST, default 'localhost'
191
+ env.port // GS_PORT, default 2980 (number)
192
+ env.routePrefix // GS_ROUTE_PREFIX, default ''
193
+ env.apiHeader // GS_API_HEADER, default 'x-api-key'
194
+ env.apiKey // GS_API_KEY, default 'test'
195
+ env.logLevel // GS_LOG_LEVEL, default per environment
196
+ env.appEnv // GS_APP_ENV, undefined by default
197
+ env.sentryDsn // GS_SENTRY_DSN, undefined by default
198
+ env.sentryRate // GS_SENTRY_RATE, default 0.01 (number)
199
+ ```
200
+
201
+ Each property re-reads `process.env` on access — useful for tests that mutate `process.env` at runtime. For your own, non-`GS_`-prefixed environment variables, use the lower-level `getenv(name, def)` / `variation(dev, release, master)` helpers, also exported from the package root.
202
+
203
+ `.env` is loaded automatically from the process working directory (`dotenv.config()` runs at import time).
204
+
205
+ To load a specific `.env` **with priority** — independent of the working directory and early enough to affect `GS_LOG_LEVEL` — pass the `--env` flag as an application argument:
206
+
207
+ ```sh
208
+ node ./dist/index.js --env ./path/to/.env # or --env=./path/to/.env
209
+ ```
210
+
211
+ The file is applied with `override: true` (it wins over the cwd `.env` and any already-set `process.env`), a relative path resolves against the process cwd, and a missing file only logs a `console.warn` without crashing. This is useful when the process starts outside the workspace root, e.g. pm2 with a custom `--cwd`:
212
+
213
+ ```sh
214
+ pm2 start ./server/dist/index.js --name <proc> --cwd ${FOLDER_PATH} -- --env ./server/.env
215
+ ```
185
216
 
186
217
  ## Swagger
187
218
 
188
- Swagger UI is enabled for `APP_ENV=dev` and `APP_ENV=release` (staging).
219
+ Swagger UI is enabled only for `GS_APP_ENV=dev`.
189
220
 
190
221
  - `GET /` redirects to `/docs`
191
222
  - `GET /docs` serves Swagger UI
192
223
 
193
- `master` (production) disables Swagger UI.
224
+ `release` (staging) and `master` (production) disable Swagger UI.
194
225
 
195
226
  ## Advanced Validation
196
227
 
@@ -199,7 +230,7 @@ The package validates both requests and replies via TypeBox schemas and runs gam
199
230
  - `/config` checks stake modes, the `hasChoice ⇒ hasMeta` invariant, the `hasVariableLevels ⇔ {variableLevels, defaultLevel}` pair, and `hasMultiStake=true ⇒ freeroundsAllowed=false` and `hasValidate=true`.
200
231
  - `/play` checks stakes (uniqueness, qty, level in `variableLevels`, parametric/params), `stepIndex` consistency (opening vs continuation), `choice`/`meta` presence per flags, and reply shape (`finished`, `choices`, `meta`, `hasMaxWin`).
201
232
  - `/validate` is available only when `hasValidate=true`. Returns `{ valid: boolean, reason?: string }`.
202
- - `test` field is rejected on production (`APP_ENV=master` or unset).
233
+ - `test` field is rejected on production (`GS_APP_ENV=master` or unset).
203
234
 
204
235
  ## Money-value precision
205
236
 
@@ -1,11 +1,7 @@
1
1
  import { FastifyTypebox } from './helpers/fastify.helper';
2
- export type TApplicationOptions = {
3
- /** Optional env file to load (overriding the default ./.env), e.g. a per-version file at deploy time */
4
- envPath?: string;
5
- };
6
2
  export default class Application {
7
3
  server: FastifyTypebox;
8
- constructor(options?: TApplicationOptions);
4
+ constructor();
9
5
  build(): Promise<FastifyTypebox>;
10
6
  }
11
7
  //# sourceMappingURL=application.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"application.d.ts","sourceRoot":"","sources":["../application.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,cAAc,EAAkB,MAAM,0BAA0B,CAAA;AAGzE,MAAM,MAAM,mBAAmB,GAAG;IAC9B,wGAAwG;IACxG,OAAO,CAAC,EAAE,MAAM,CAAA;CACnB,CAAA;AAED,MAAM,CAAC,OAAO,OAAO,WAAW;IAC5B,MAAM,EAAE,cAAc,CAAA;gBAEV,OAAO,GAAE,mBAAwB;IAcvC,KAAK,IAAI,OAAO,CAAC,cAAc,CAAC;CAuBzC"}
1
+ {"version":3,"file":"application.d.ts","sourceRoot":"","sources":["../application.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,cAAc,EAAkB,MAAM,0BAA0B,CAAA;AAGzE,MAAM,CAAC,OAAO,OAAO,WAAW;IAC5B,MAAM,EAAE,cAAc,CAAA;;IAchB,KAAK,IAAI,OAAO,CAAC,cAAc,CAAC;CAuBzC"}
@@ -6,12 +6,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  const autoload_1 = __importDefault(require("@fastify/autoload"));
7
7
  const fastify_1 = __importDefault(require("fastify"));
8
8
  const path_1 = __importDefault(require("path"));
9
- const env_helper_1 = require("./helpers/env.helper");
10
9
  const fastify_helper_1 = require("./helpers/fastify.helper");
11
10
  const logger_helper_1 = require("./helpers/logger.helper");
12
11
  class Application {
13
- constructor(options = {}) {
14
- (0, env_helper_1.loadEnv)(options.envPath);
12
+ constructor() {
15
13
  this.server = (0, fastify_1.default)({
16
14
  ajv: {
17
15
  customOptions: {
@@ -1 +1 @@
1
- {"version":3,"file":"application.js","sourceRoot":"","sources":["../application.ts"],"names":[],"mappings":";;;;;AAAA,iEAA+C;AAE/C,sDAA6B;AAC7B,gDAAuB;AAEvB,qDAA8C;AAC9C,6DAAyE;AACzE,2DAAuD;AAOvD,MAAqB,WAAW;IAG5B,YAAY,UAA+B,EAAE;QACzC,IAAA,oBAAO,EAAC,OAAO,CAAC,OAAO,CAAC,CAAA;QAExB,IAAI,CAAC,MAAM,GAAG,IAAA,iBAAO,EAAC;YAClB,GAAG,EAAE;gBACD,aAAa,EAAE;oBACX,QAAQ,EAAE,CAAC,YAAY,CAAC;iBAC3B;aACJ;YACD,MAAM,EAAE,6BAAa;YACrB,qBAAqB,EAAE,IAAI;SAC9B,CAAC,CAAC,gBAAgB,EAAuB,CAAA;IAC9C,CAAC;IAED,KAAK,CAAC,KAAK;QACP,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,kBAAe,EAAE;YACxC,GAAG,EAAE,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC;SACvC,CAAC,CAAA;QAEF,MAAM,MAAM,GAAG,IAAA,+BAAc,GAAE,CAAA;QAE/B,wCAAwC;QACxC,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,kBAAe,EAAE;YACxC,GAAG,EAAE,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,eAAe,CAAC;YAC1C,OAAO,EAAE,EAAE,MAAM,EAAE;YACnB,kBAAkB,EAAE,KAAK;SAC5B,CAAC,CAAA;QAEF,mEAAmE;QACnE,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,kBAAe,EAAE;YACxC,GAAG,EAAE,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC;YACnC,OAAO,EAAE,EAAE,MAAM,EAAE,GAAG,MAAM,cAAc,EAAE;YAC5C,kBAAkB,EAAE,KAAK;SAC5B,CAAC,CAAA;QAEF,OAAO,IAAI,CAAC,MAAM,CAAA;IACtB,CAAC;CACJ;AAxCD,8BAwCC"}
1
+ {"version":3,"file":"application.js","sourceRoot":"","sources":["../application.ts"],"names":[],"mappings":";;;;;AAAA,iEAA+C;AAE/C,sDAA6B;AAC7B,gDAAuB;AAEvB,6DAAyE;AACzE,2DAAuD;AAEvD,MAAqB,WAAW;IAG5B;QACI,IAAI,CAAC,MAAM,GAAG,IAAA,iBAAO,EAAC;YAClB,GAAG,EAAE;gBACD,aAAa,EAAE;oBACX,QAAQ,EAAE,CAAC,YAAY,CAAC;iBAC3B;aACJ;YACD,MAAM,EAAE,6BAAa;YACrB,qBAAqB,EAAE,IAAI;SAC9B,CAAC,CAAC,gBAAgB,EAAuB,CAAA;IAC9C,CAAC;IAED,KAAK,CAAC,KAAK;QACP,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,kBAAe,EAAE;YACxC,GAAG,EAAE,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC;SACvC,CAAC,CAAA;QAEF,MAAM,MAAM,GAAG,IAAA,+BAAc,GAAE,CAAA;QAE/B,wCAAwC;QACxC,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,kBAAe,EAAE;YACxC,GAAG,EAAE,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,eAAe,CAAC;YAC1C,OAAO,EAAE,EAAE,MAAM,EAAE;YACnB,kBAAkB,EAAE,KAAK;SAC5B,CAAC,CAAA;QAEF,mEAAmE;QACnE,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,kBAAe,EAAE;YACxC,GAAG,EAAE,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC;YACnC,OAAO,EAAE,EAAE,MAAM,EAAE,GAAG,MAAM,cAAc,EAAE;YAC5C,kBAAkB,EAAE,KAAK;SAC5B,CAAC,CAAA;QAEF,OAAO,IAAI,CAAC,MAAM,CAAA;IACtB,CAAC;CACJ;AAtCD,8BAsCC"}
@@ -1,6 +1,20 @@
1
- /** Load an additional env file, overriding already-defined vars. */
2
- export declare function loadEnv(path?: string): void;
3
1
  export declare function getenv<T = string>(name: string, def: T): T;
4
2
  /** Вариации значений в зависимости от окружения */
5
3
  export declare function variation<T>(devBranch: T, releaseBranch: T, masterBranch: T): T;
4
+ /**
5
+ * Типизированный доступ ко всем env-переменным пакета (префикс `GS_`) с уже прописанными
6
+ * дефолтами. Геттеры читают `process.env` при каждом обращении (не кешируют) — так значение
7
+ * можно переопределить в рантайме (актуально для тестов).
8
+ */
9
+ export declare const env: {
10
+ readonly host: string;
11
+ readonly port: number;
12
+ readonly routePrefix: string;
13
+ readonly apiHeader: string;
14
+ readonly apiKey: string;
15
+ readonly logLevel: "debug" | "info";
16
+ readonly appEnv: string;
17
+ readonly sentryDsn: string;
18
+ readonly sentryRate: number;
19
+ };
6
20
  //# sourceMappingURL=env.helper.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"env.helper.d.ts","sourceRoot":"","sources":["../../helpers/env.helper.ts"],"names":[],"mappings":"AAMA,oEAAoE;AACpE,wBAAgB,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAI3C;AAED,wBAAgB,MAAM,CAAC,CAAC,GAAG,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAY1D;AAED,mDAAmD;AACnD,wBAAgB,SAAS,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,GAAG,CAAC,CAY/E"}
1
+ {"version":3,"file":"env.helper.d.ts","sourceRoot":"","sources":["../../helpers/env.helper.ts"],"names":[],"mappings":"AAsBA,wBAAgB,MAAM,CAAC,CAAC,GAAG,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAY1D;AAED,mDAAmD;AACnD,wBAAgB,SAAS,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,GAAG,CAAC,CAY/E;AAED;;;;GAIG;AACH,eAAO,MAAM,GAAG;;;;;;;;;;CAUf,CAAA"}
@@ -3,17 +3,25 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.loadEnv = loadEnv;
6
+ exports.env = void 0;
7
7
  exports.getenv = getenv;
8
8
  exports.variation = variation;
9
+ const node_path_1 = __importDefault(require("node:path"));
9
10
  const dotenv_1 = __importDefault(require("dotenv"));
10
- // Load the default ./.env (relative to the process cwd). A game that needs a specific env file
11
- // can pass it at startup via `new Application({ envPath })`, which calls loadEnv() below.
11
+ const minimist_1 = __importDefault(require("minimist"));
12
+ // 1) Default: load ./.env relative to the process cwd (unchanged behaviour).
12
13
  dotenv_1.default.config();
13
- /** Load an additional env file, overriding already-defined vars. */
14
- function loadEnv(path) {
15
- if (path) {
16
- dotenv_1.default.config({ path, override: true });
14
+ // 2) Priority override via the CLI flag `--env <path>` | `--env=<path>`.
15
+ // Applied HERE, on module import — before logger.helper reads LOG_LEVEL. This is intentionally
16
+ // an app-level flag parsed from process.argv (not Node's `--env-file`), which gives us control
17
+ // over both the timing and `override` across all supported Node versions.
18
+ const cliEnvPath = (0, minimist_1.default)(process.argv.slice(2)).env;
19
+ if (typeof cliEnvPath === 'string' && cliEnvPath) {
20
+ // Relative paths resolve against the process cwd; absolute paths are used as-is.
21
+ const { error } = dotenv_1.default.config({ path: node_path_1.default.resolve(cliEnvPath), override: true });
22
+ if (error) {
23
+ // The logger is not created yet — write straight to stderr.
24
+ console.warn(`[trueserver] --env "${cliEnvPath}" not loaded: ${error.message}`);
17
25
  }
18
26
  }
19
27
  function getenv(name, def) {
@@ -34,9 +42,25 @@ function variation(devBranch, releaseBranch, masterBranch) {
34
42
  release: releaseBranch,
35
43
  master: masterBranch,
36
44
  };
37
- if (process.env.APP_ENV && process.env.APP_ENV in variations) {
38
- return variations[process.env.APP_ENV];
45
+ if (process.env.GS_APP_ENV && process.env.GS_APP_ENV in variations) {
46
+ return variations[process.env.GS_APP_ENV];
39
47
  }
40
48
  return masterBranch;
41
49
  }
50
+ /**
51
+ * Типизированный доступ ко всем env-переменным пакета (префикс `GS_`) с уже прописанными
52
+ * дефолтами. Геттеры читают `process.env` при каждом обращении (не кешируют) — так значение
53
+ * можно переопределить в рантайме (актуально для тестов).
54
+ */
55
+ exports.env = {
56
+ get host() { return getenv('GS_HOST', 'localhost'); },
57
+ get port() { return Number.parseInt(getenv('GS_PORT', '2980'), 10); },
58
+ get routePrefix() { return getenv('GS_ROUTE_PREFIX', ''); },
59
+ get apiHeader() { return getenv('GS_API_HEADER', 'x-api-key'); },
60
+ get apiKey() { return getenv('GS_API_KEY', 'test'); },
61
+ get logLevel() { return getenv('GS_LOG_LEVEL', variation('debug', 'info', 'info')); },
62
+ get appEnv() { return getenv('GS_APP_ENV', undefined); },
63
+ get sentryDsn() { return getenv('GS_SENTRY_DSN', undefined); },
64
+ get sentryRate() { return parseFloat(getenv('GS_SENTRY_RATE', '0.01')); },
65
+ };
42
66
  //# sourceMappingURL=env.helper.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"env.helper.js","sourceRoot":"","sources":["../../helpers/env.helper.ts"],"names":[],"mappings":";;;;;AAOA,0BAIC;AAED,wBAYC;AAGD,8BAYC;AAxCD,oDAA2B;AAE3B,+FAA+F;AAC/F,0FAA0F;AAC1F,gBAAM,CAAC,MAAM,EAAE,CAAA;AAEf,oEAAoE;AACpE,SAAgB,OAAO,CAAC,IAAa;IACjC,IAAI,IAAI,EAAE,CAAC;QACP,gBAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAA;IAC3C,CAAC;AACL,CAAC;AAED,SAAgB,MAAM,CAAa,IAAY,EAAE,GAAM;IACnD,IAAI,IAAI,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QACtB,MAAM,KAAK,GAAY,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QAExC,QAAQ,KAAK,EAAE,CAAC;YACZ,KAAK,MAAM,CAAC,CAAC,OAAO,IAAoB,CAAA;YACxC,KAAK,OAAO,CAAC,CAAC,OAAO,KAAqB,CAAA;YAC1C,OAAO,CAAC,CAAC,OAAO,KAAU,CAAA;QAC9B,CAAC;IACL,CAAC;IAED,OAAO,GAAG,CAAA;AACd,CAAC;AAED,mDAAmD;AACnD,SAAgB,SAAS,CAAI,SAAY,EAAE,aAAgB,EAAE,YAAe;IACxE,MAAM,UAAU,GAAyB;QACrC,GAAG,EAAE,SAAS;QACd,OAAO,EAAE,aAAa;QACtB,MAAM,EAAE,YAAY;KACvB,CAAA;IAED,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,UAAU,EAAE,CAAC;QAC3D,OAAO,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;IAC1C,CAAC;IAED,OAAO,YAAY,CAAA;AACvB,CAAC"}
1
+ {"version":3,"file":"env.helper.js","sourceRoot":"","sources":["../../helpers/env.helper.ts"],"names":[],"mappings":"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"}
@@ -18,7 +18,7 @@ function registerPlugin(callback) {
18
18
  return (0, fastify_plugin_1.default)(callback);
19
19
  }
20
20
  function getRoutePrefix() {
21
- return (0, env_helper_1.getenv)('ROUTE_PREFIX', '');
21
+ return env_helper_1.env.routePrefix;
22
22
  }
23
23
  /** Public Swagger UI mount point — shared by the swagger plugin and the apikey allowlist */
24
24
  exports.DOCS_ROUTE_PREFIX = '/docs';
@@ -1 +1 @@
1
- {"version":3,"file":"fastify.helper.js","sourceRoot":"","sources":["../../helpers/fastify.helper.ts"],"names":[],"mappings":";;;;;;AAoBA,sCAEC;AAED,wCAEC;AAED,wCAEC;AAMD,8BAUC;AAzCD,oEAA0C;AAE1C,6CAAqC;AACrC,mDAAwD;AAYxD,SAAgB,aAAa,CAAC,QAAqD;IAC/E,OAAO,QAAQ,CAAA;AACnB,CAAC;AAED,SAAgB,cAAc,CAAC,QAAqD;IAChF,OAAO,IAAA,wBAAa,EAAC,QAAQ,CAAC,CAAA;AAClC,CAAC;AAED,SAAgB,cAAc;IAC1B,OAAO,IAAA,mBAAM,EAAC,cAAc,EAAE,EAAE,CAAC,CAAA;AACrC,CAAC;AAED,4FAA4F;AAC/E,QAAA,iBAAiB,GAAG,OAAO,CAAA;AAExC,yCAAyC;AACzC,SAAgB,SAAS,CACrB,OAAe,EACf,aAAqB,GAAG,EACxB,OAAmB,0BAAU,CAAC,SAAS;IAEvC,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,OAAO,CAAuB,CAAA;IACtD,KAAK,CAAC,UAAU,GAAG,UAAU,CAAA;IAC7B,KAAK,CAAC,SAAS,GAAG,IAAI,CAAA;IAEtB,OAAO,KAAK,CAAA;AAChB,CAAC"}
1
+ {"version":3,"file":"fastify.helper.js","sourceRoot":"","sources":["../../helpers/fastify.helper.ts"],"names":[],"mappings":";;;;;;AAoBA,sCAEC;AAED,wCAEC;AAED,wCAEC;AAMD,8BAUC;AAzCD,oEAA0C;AAE1C,6CAAkC;AAClC,mDAAwD;AAYxD,SAAgB,aAAa,CAAC,QAAqD;IAC/E,OAAO,QAAQ,CAAA;AACnB,CAAC;AAED,SAAgB,cAAc,CAAC,QAAqD;IAChF,OAAO,IAAA,wBAAa,EAAC,QAAQ,CAAC,CAAA;AAClC,CAAC;AAED,SAAgB,cAAc;IAC1B,OAAO,gBAAG,CAAC,WAAW,CAAA;AAC1B,CAAC;AAED,4FAA4F;AAC/E,QAAA,iBAAiB,GAAG,OAAO,CAAA;AAExC,yCAAyC;AACzC,SAAgB,SAAS,CACrB,OAAe,EACf,aAAqB,GAAG,EACxB,OAAmB,0BAAU,CAAC,SAAS;IAEvC,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,OAAO,CAAuB,CAAA;IACtD,KAAK,CAAC,UAAU,GAAG,UAAU,CAAA;IAC7B,KAAK,CAAC,SAAS,GAAG,IAAI,CAAA;IAEtB,OAAO,KAAK,CAAA;AAChB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"logger.helper.d.ts","sourceRoot":"","sources":["../../helpers/logger.helper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAC7D,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AAK3E,eAAO,MAAM,aAAa,EAC1B,OAAO,GACP,oBAAoB,CAAC,aAAa,CAAC,GAAG,iBAAiB,GACvD,iBAUC,CAAA;AAED,eAAO,MAAM,MAAM,8BAA6B,CAAA"}
1
+ {"version":3,"file":"logger.helper.d.ts","sourceRoot":"","sources":["../../helpers/logger.helper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAC7D,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AAc3E,eAAO,MAAM,aAAa,EAC1B,OAAO,GACP,oBAAoB,CAAC,aAAa,CAAC,GAAG,iBAAiB,GACvD,iBA6BC,CAAA;AAED,eAAO,MAAM,MAAM,8BAA6B,CAAA"}
@@ -6,16 +6,42 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.logger = exports.loggerOptions = void 0;
7
7
  const pino_1 = __importDefault(require("pino"));
8
8
  const env_helper_1 = require("./env.helper");
9
+ // Pretty-печать только для локальной разработки (GS_APP_ENV=dev). В release/master
10
+ // (staging/production) логгер пишет сырой NDJSON в stdout — это быстрее (без воркер-треда
11
+ // pino-pretty) и корректно парсится агрегаторами логов (Loki/ELK/Datadog/CloudWatch).
12
+ const isDev = (0, env_helper_1.variation)(true, false, false);
13
+ // Единый уровень по умолчанию, зависящий от окружения; всегда переопределяем через GS_LOG_LEVEL.
14
+ // dev → debug (шумно, но удобно локально), release/master → info.
15
+ const level = env_helper_1.env.logLevel;
9
16
  exports.loggerOptions = {
10
- level: (0, env_helper_1.getenv)('LOG_LEVEL', 'error'),
11
- transport: {
12
- target: 'pino-pretty',
13
- options: {
14
- translateTime: 'UTC:yyyy-mm-dd HH:MM:ss.l',
15
- colorize: true,
16
- singleLine: true,
17
- },
17
+ level,
18
+ // Скрываем секреты из логов (заголовки авторизации, cookie, токены/подписи в payload).
19
+ // Структуру не удаляем — заменяем значение, чтобы не ломать форму записей.
20
+ redact: {
21
+ paths: [
22
+ 'req.headers.authorization',
23
+ 'req.headers.cookie',
24
+ 'headers.authorization',
25
+ 'headers.cookie',
26
+ 'token',
27
+ 'password',
28
+ 'signature',
29
+ '*.token',
30
+ '*.password',
31
+ '*.signature',
32
+ ],
33
+ censor: '[redacted]',
18
34
  },
35
+ ...(isDev && {
36
+ transport: {
37
+ target: 'pino-pretty',
38
+ options: {
39
+ translateTime: 'UTC:yyyy-mm-dd HH:MM:ss.l',
40
+ colorize: true,
41
+ singleLine: true,
42
+ },
43
+ },
44
+ }),
19
45
  };
20
46
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
21
47
  exports.logger = (0, pino_1.default)(exports.loggerOptions);
@@ -1 +1 @@
1
- {"version":3,"file":"logger.helper.js","sourceRoot":"","sources":["../../helpers/logger.helper.ts"],"names":[],"mappings":";;;;;;AAEA,gDAAuB;AAEvB,6CAAqC;AAExB,QAAA,aAAa,GAGN;IAChB,KAAK,EAAE,IAAA,mBAAM,EAAC,WAAW,EAAE,OAAO,CAAC;IACnC,SAAS,EAAE;QACP,MAAM,EAAE,aAAa;QACrB,OAAO,EAAE;YACL,aAAa,EAAE,2BAA2B;YAC1C,QAAQ,EAAE,IAAI;YACd,UAAU,EAAE,IAAI;SACnB;KACJ;CACJ,CAAA;AACD,8DAA8D;AACjD,QAAA,MAAM,GAAG,IAAA,cAAI,EAAC,qBAAoB,CAAC,CAAA"}
1
+ {"version":3,"file":"logger.helper.js","sourceRoot":"","sources":["../../helpers/logger.helper.ts"],"names":[],"mappings":";;;;;;AAEA,gDAAuB;AAEvB,6CAA6C;AAE7C,mFAAmF;AACnF,0FAA0F;AAC1F,sFAAsF;AACtF,MAAM,KAAK,GAAG,IAAA,sBAAS,EAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,CAAA;AAE3C,iGAAiG;AACjG,kEAAkE;AAClE,MAAM,KAAK,GAAG,gBAAG,CAAC,QAAQ,CAAA;AAEb,QAAA,aAAa,GAGN;IAChB,KAAK;IACL,uFAAuF;IACvF,2EAA2E;IAC3E,MAAM,EAAE;QACJ,KAAK,EAAE;YACH,2BAA2B;YAC3B,oBAAoB;YACpB,uBAAuB;YACvB,gBAAgB;YAChB,OAAO;YACP,UAAU;YACV,WAAW;YACX,SAAS;YACT,YAAY;YACZ,aAAa;SAChB;QACD,MAAM,EAAE,YAAY;KACvB;IACD,GAAG,CAAC,KAAK,IAAI;QACT,SAAS,EAAE;YACP,MAAM,EAAE,aAAa;YACrB,OAAO,EAAE;gBACL,aAAa,EAAE,2BAA2B;gBAC1C,QAAQ,EAAE,IAAI;gBACd,UAAU,EAAE,IAAI;aACnB;SACJ;KACJ,CAAC;CACL,CAAA;AACD,8DAA8D;AACjD,QAAA,MAAM,GAAG,IAAA,cAAI,EAAC,qBAAoB,CAAC,CAAA"}
@@ -1,8 +1,9 @@
1
1
  import { Schema, ValidateFunction } from 'ajv';
2
+ import { env } from './env.helper';
2
3
  import { FastifyTypebox } from './fastify.helper';
3
4
  export declare function testBuild(): FastifyTypebox;
4
5
  export declare const testHeaders: {
5
- "x-api-key": string;
6
+ [env.apiHeader]: string;
6
7
  };
7
8
  export declare function validator(schema: Schema): ValidateFunction;
8
9
  export declare function checkSchemaPropertyDescriptions(props: Record<string, any>): void;
@@ -1 +1 @@
1
- {"version":3,"file":"tests.helper.d.ts","sourceRoot":"","sources":["../../helpers/tests.helper.ts"],"names":[],"mappings":"AACA,OAAY,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,KAAK,CAAA;AAInD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAEjD,wBAAgB,SAAS,IAAI,cAAc,CAQ1C;AAED,eAAO,MAAM,WAAW;;CAEvB,CAAA;AAED,wBAAgB,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,gBAAgB,CAK1D;AAED,wBAAgB,+BAA+B,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,QAgBzE"}
1
+ {"version":3,"file":"tests.helper.d.ts","sourceRoot":"","sources":["../../helpers/tests.helper.ts"],"names":[],"mappings":"AACA,OAAY,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,KAAK,CAAA;AAGnD,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAA;AAClC,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAEjD,wBAAgB,SAAS,IAAI,cAAc,CAQ1C;AAED,eAAO,MAAM,WAAW;IACpB,CAAC,GAAG,CAAC,SAAS,CAAC,SAAY;CAC9B,CAAA;AAED,wBAAgB,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,gBAAgB,CAK1D;AAED,wBAAgB,+BAA+B,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,QAgBzE"}
@@ -20,7 +20,7 @@ function testBuild() {
20
20
  }).withTypeProvider();
21
21
  }
22
22
  exports.testHeaders = {
23
- [(0, env_helper_1.getenv)('API_HEADER', 'x-api-key')]: (0, env_helper_1.getenv)('API_KEY', 'test'),
23
+ [env_helper_1.env.apiHeader]: env_helper_1.env.apiKey,
24
24
  };
25
25
  function validator(schema) {
26
26
  const ajv = new ajv_1.default({
@@ -1 +1 @@
1
- {"version":3,"file":"tests.helper.js","sourceRoot":"","sources":["../../helpers/tests.helper.ts"],"names":[],"mappings":";;;;;;AAOA,8BAQC;AAMD,8BAKC;AAED,0EAgBC;AA3CD,8CAAmD;AACnD,sDAA6B;AAE7B,6CAAqC;AAGrC,SAAgB,SAAS;IACrB,OAAO,IAAA,iBAAO,EAAC;QACX,GAAG,EAAE;YACD,aAAa,EAAE;gBACX,QAAQ,EAAE,CAAC,YAAY,CAAC;aAC3B;SACJ;KACJ,CAAC,CAAC,gBAAgB,EAAuB,CAAA;AAC9C,CAAC;AAEY,QAAA,WAAW,GAAG;IACvB,CAAC,IAAA,mBAAM,EAAC,YAAY,EAAE,WAAW,CAAC,CAAC,EAAE,IAAA,mBAAM,EAAC,SAAS,EAAE,MAAM,CAAC;CACjE,CAAA;AAED,SAAgB,SAAS,CAAC,MAAc;IACpC,MAAM,GAAG,GAAG,IAAI,aAAG,CAAC;QAChB,QAAQ,EAAE,CAAC,YAAY,CAAC;KAC3B,CAAC,CAAA;IACF,OAAO,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;AAC9B,CAAC;AAED,SAAgB,+BAA+B,CAAC,KAA0B;IACtE,MAAM,QAAQ,GAAa,EAAE,CAAA;IAC7B,MAAM,aAAa,GAAa,EAAE,CAAA;IAElC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,UAAU,CAAC,EAAE,EAAE;QACjD,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACnB,IAAI,UAAU,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;YACvC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAC5B,CAAC;QAED,IAAI,UAAU,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC/B,+BAA+B,CAAC,UAAU,CAAC,UAAU,CAAC,CAAA;QAC1D,CAAC;IACL,CAAC,CAAC,CAAA;IAEF,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,CAAA;AAC3C,CAAC"}
1
+ {"version":3,"file":"tests.helper.js","sourceRoot":"","sources":["../../helpers/tests.helper.ts"],"names":[],"mappings":";;;;;;AAOA,8BAQC;AAMD,8BAKC;AAED,0EAgBC;AA3CD,8CAAmD;AACnD,sDAA6B;AAE7B,6CAAkC;AAGlC,SAAgB,SAAS;IACrB,OAAO,IAAA,iBAAO,EAAC;QACX,GAAG,EAAE;YACD,aAAa,EAAE;gBACX,QAAQ,EAAE,CAAC,YAAY,CAAC;aAC3B;SACJ;KACJ,CAAC,CAAC,gBAAgB,EAAuB,CAAA;AAC9C,CAAC;AAEY,QAAA,WAAW,GAAG;IACvB,CAAC,gBAAG,CAAC,SAAS,CAAC,EAAE,gBAAG,CAAC,MAAM;CAC9B,CAAA;AAED,SAAgB,SAAS,CAAC,MAAc;IACpC,MAAM,GAAG,GAAG,IAAI,aAAG,CAAC;QAChB,QAAQ,EAAE,CAAC,YAAY,CAAC;KAC3B,CAAC,CAAA;IACF,OAAO,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;AAC9B,CAAC;AAED,SAAgB,+BAA+B,CAAC,KAA0B;IACtE,MAAM,QAAQ,GAAa,EAAE,CAAA;IAC7B,MAAM,aAAa,GAAa,EAAE,CAAA;IAElC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,UAAU,CAAC,EAAE,EAAE;QACjD,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACnB,IAAI,UAAU,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;YACvC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAC5B,CAAC;QAED,IAAI,UAAU,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC/B,+BAA+B,CAAC,UAAU,CAAC,UAAU,CAAC,CAAA;QAC1D,CAAC;IACL,CAAC,CAAC,CAAA;IAEF,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,CAAA;AAC3C,CAAC"}
package/dist/index.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  export { default as Application } from './application';
2
2
  export { getGameConfig, registerGameConfig, type TGameConfig, } from './helpers/config.helper';
3
- export { getenv, variation } from './helpers/env.helper';
3
+ export { env, getenv, variation } from './helpers/env.helper';
4
4
  export { EErrorCode, type TErrorCode, } from './helpers/errors.helper';
5
5
  export { type FastifyTypebox, type FastifyError$Coded, getRoutePrefix, httpError, registerPlugin, registerRoute, } from './helpers/fastify.helper';
6
6
  export { type RouteHandler, type TRtpParams, HandlersHelper, handlers, } from './helpers/handlers.helper';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,eAAe,CAAA;AACtD,OAAO,EACH,aAAa,EACb,kBAAkB,EAClB,KAAK,WAAW,GACnB,MAAM,yBAAyB,CAAA;AAChC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAA;AACxD,OAAO,EACH,UAAU,EACV,KAAK,UAAU,GAClB,MAAM,yBAAyB,CAAA;AAChC,OAAO,EACH,KAAK,cAAc,EACnB,KAAK,kBAAkB,EACvB,cAAc,EACd,SAAS,EACT,cAAc,EACd,aAAa,GAChB,MAAM,0BAA0B,CAAA;AACjC,OAAO,EACH,KAAK,YAAY,EACjB,KAAK,UAAU,EACf,cAAc,EACd,QAAQ,GACX,MAAM,2BAA2B,CAAA;AAClC,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAA;AAC/D,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AACxE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AAEvE,OAAO,EACH,mBAAmB,EACnB,qBAAqB,EACrB,KAAK,cAAc,EACnB,KAAK,gBAAgB,GACxB,MAAM,2BAA2B,CAAA;AAClC,OAAO,EACH,iBAAiB,EACjB,mBAAmB,EACnB,KAAK,YAAY,EACjB,KAAK,cAAc,GACtB,MAAM,yBAAyB,CAAA;AAChC,OAAO,EACH,iBAAiB,EACjB,mBAAmB,EACnB,KAAK,YAAY,EACjB,KAAK,cAAc,GACtB,MAAM,yBAAyB,CAAA;AAChC,OAAO,EACH,sBAAsB,EACtB,wBAAwB,EACxB,KAAK,iBAAiB,EACtB,KAAK,mBAAmB,GAC3B,MAAM,8BAA8B,CAAA;AACrC,OAAO,EACH,eAAe,EACf,iBAAiB,EACjB,KAAK,UAAU,EACf,KAAK,YAAY,GACpB,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EACH,iBAAiB,EACjB,YAAY,EACZ,UAAU,EACV,aAAa,EACb,mBAAmB,EACnB,UAAU,EACV,kBAAkB,EAClB,eAAe,EACf,WAAW,EACX,KAAK,YAAY,EACjB,KAAK,SAAS,EACd,KAAK,cAAc,EACnB,KAAK,KAAK,EACV,KAAK,aAAa,EAClB,KAAK,MAAM,EACX,KAAK,UAAU,GAClB,MAAM,kBAAkB,CAAA;AACzB,OAAO,EACH,mBAAmB,EACnB,qBAAqB,EACrB,KAAK,cAAc,EACnB,KAAK,gBAAgB,GACxB,MAAM,2BAA2B,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,eAAe,CAAA;AACtD,OAAO,EACH,aAAa,EACb,kBAAkB,EAClB,KAAK,WAAW,GACnB,MAAM,yBAAyB,CAAA;AAChC,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAA;AAC7D,OAAO,EACH,UAAU,EACV,KAAK,UAAU,GAClB,MAAM,yBAAyB,CAAA;AAChC,OAAO,EACH,KAAK,cAAc,EACnB,KAAK,kBAAkB,EACvB,cAAc,EACd,SAAS,EACT,cAAc,EACd,aAAa,GAChB,MAAM,0BAA0B,CAAA;AACjC,OAAO,EACH,KAAK,YAAY,EACjB,KAAK,UAAU,EACf,cAAc,EACd,QAAQ,GACX,MAAM,2BAA2B,CAAA;AAClC,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAA;AAC/D,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AACxE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AAEvE,OAAO,EACH,mBAAmB,EACnB,qBAAqB,EACrB,KAAK,cAAc,EACnB,KAAK,gBAAgB,GACxB,MAAM,2BAA2B,CAAA;AAClC,OAAO,EACH,iBAAiB,EACjB,mBAAmB,EACnB,KAAK,YAAY,EACjB,KAAK,cAAc,GACtB,MAAM,yBAAyB,CAAA;AAChC,OAAO,EACH,iBAAiB,EACjB,mBAAmB,EACnB,KAAK,YAAY,EACjB,KAAK,cAAc,GACtB,MAAM,yBAAyB,CAAA;AAChC,OAAO,EACH,sBAAsB,EACtB,wBAAwB,EACxB,KAAK,iBAAiB,EACtB,KAAK,mBAAmB,GAC3B,MAAM,8BAA8B,CAAA;AACrC,OAAO,EACH,eAAe,EACf,iBAAiB,EACjB,KAAK,UAAU,EACf,KAAK,YAAY,GACpB,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EACH,iBAAiB,EACjB,YAAY,EACZ,UAAU,EACV,aAAa,EACb,mBAAmB,EACnB,UAAU,EACV,kBAAkB,EAClB,eAAe,EACf,WAAW,EACX,KAAK,YAAY,EACjB,KAAK,SAAS,EACd,KAAK,cAAc,EACnB,KAAK,KAAK,EACV,KAAK,aAAa,EAClB,KAAK,MAAM,EACX,KAAK,UAAU,GAClB,MAAM,kBAAkB,CAAA;AACzB,OAAO,EACH,mBAAmB,EACnB,qBAAqB,EACrB,KAAK,cAAc,EACnB,KAAK,gBAAgB,GACxB,MAAM,2BAA2B,CAAA"}
package/dist/index.js CHANGED
@@ -3,13 +3,14 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.ValidateRequestSchema = exports.ValidateReplySchema = exports.StakeSchema = exports.StakeModeSchema = exports.RequestErrorSchema = exports.MetaSchema = exports.InternalErrorSchema = exports.HeadersSchema = exports.EStakeType = exports.EEnvironment = exports.AccessErrorSchema = exports.PlayRequestSchema = exports.PlayReplySchema = exports.HealthcheckRequestSchema = exports.HealthcheckReplySchema = exports.ConfigRequestSchema = exports.ConfigReplySchema = exports.ClientRequestSchema = exports.ClientReplySchema = exports.ChecksumRequestSchema = exports.ChecksumReplySchema = exports.randomOf = exports.random = exports.getByChance = exports.isExactDecimal = exports.roundMoney = exports.Big = exports.loggerOptions = exports.logger = exports.handlers = exports.HandlersHelper = exports.registerRoute = exports.registerPlugin = exports.httpError = exports.getRoutePrefix = exports.EErrorCode = exports.variation = exports.getenv = exports.registerGameConfig = exports.getGameConfig = exports.Application = void 0;
6
+ exports.ValidateRequestSchema = exports.ValidateReplySchema = exports.StakeSchema = exports.StakeModeSchema = exports.RequestErrorSchema = exports.MetaSchema = exports.InternalErrorSchema = exports.HeadersSchema = exports.EStakeType = exports.EEnvironment = exports.AccessErrorSchema = exports.PlayRequestSchema = exports.PlayReplySchema = exports.HealthcheckRequestSchema = exports.HealthcheckReplySchema = exports.ConfigRequestSchema = exports.ConfigReplySchema = exports.ClientRequestSchema = exports.ClientReplySchema = exports.ChecksumRequestSchema = exports.ChecksumReplySchema = exports.randomOf = exports.random = exports.getByChance = exports.isExactDecimal = exports.roundMoney = exports.Big = exports.loggerOptions = exports.logger = exports.handlers = exports.HandlersHelper = exports.registerRoute = exports.registerPlugin = exports.httpError = exports.getRoutePrefix = exports.EErrorCode = exports.variation = exports.getenv = exports.env = exports.registerGameConfig = exports.getGameConfig = exports.Application = void 0;
7
7
  var application_1 = require("./application");
8
8
  Object.defineProperty(exports, "Application", { enumerable: true, get: function () { return __importDefault(application_1).default; } });
9
9
  var config_helper_1 = require("./helpers/config.helper");
10
10
  Object.defineProperty(exports, "getGameConfig", { enumerable: true, get: function () { return config_helper_1.getGameConfig; } });
11
11
  Object.defineProperty(exports, "registerGameConfig", { enumerable: true, get: function () { return config_helper_1.registerGameConfig; } });
12
12
  var env_helper_1 = require("./helpers/env.helper");
13
+ Object.defineProperty(exports, "env", { enumerable: true, get: function () { return env_helper_1.env; } });
13
14
  Object.defineProperty(exports, "getenv", { enumerable: true, get: function () { return env_helper_1.getenv; } });
14
15
  Object.defineProperty(exports, "variation", { enumerable: true, get: function () { return env_helper_1.variation; } });
15
16
  var errors_helper_1 = require("./helpers/errors.helper");
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":";;;;;;AAAA,6CAAsD;AAA7C,2HAAA,OAAO,OAAe;AAC/B,yDAIgC;AAH5B,8GAAA,aAAa,OAAA;AACb,mHAAA,kBAAkB,OAAA;AAGtB,mDAAwD;AAA/C,oGAAA,MAAM,OAAA;AAAE,uGAAA,SAAS,OAAA;AAC1B,yDAGgC;AAF5B,2GAAA,UAAU,OAAA;AAGd,2DAOiC;AAJ7B,gHAAA,cAAc,OAAA;AACd,2GAAA,SAAS,OAAA;AACT,gHAAA,cAAc,OAAA;AACd,+GAAA,aAAa,OAAA;AAEjB,6DAKkC;AAF9B,iHAAA,cAAc,OAAA;AACd,2GAAA,QAAQ,OAAA;AAEZ,yDAA+D;AAAtD,uGAAA,MAAM,OAAA;AAAE,8GAAA,aAAa,OAAA;AAC9B,uDAAwE;AAA/D,mGAAA,GAAG,OAAA;AAAE,0GAAA,UAAU,OAAA;AAAE,8GAAA,cAAc,OAAA;AACxC,yDAAuE;AAA9D,4GAAA,WAAW,OAAA;AAAE,uGAAA,MAAM,OAAA;AAAE,yGAAA,QAAQ,OAAA;AAEtC,6DAKkC;AAJ9B,sHAAA,mBAAmB,OAAA;AACnB,wHAAA,qBAAqB,OAAA;AAIzB,yDAKgC;AAJ5B,kHAAA,iBAAiB,OAAA;AACjB,oHAAA,mBAAmB,OAAA;AAIvB,yDAKgC;AAJ5B,kHAAA,iBAAiB,OAAA;AACjB,oHAAA,mBAAmB,OAAA;AAIvB,mEAKqC;AAJjC,4HAAA,sBAAsB,OAAA;AACtB,8HAAA,wBAAwB,OAAA;AAI5B,qDAK8B;AAJ1B,8GAAA,eAAe,OAAA;AACf,gHAAA,iBAAiB,OAAA;AAIrB,2CAiByB;AAhBrB,2GAAA,iBAAiB,OAAA;AACjB,sGAAA,YAAY,OAAA;AACZ,oGAAA,UAAU,OAAA;AACV,uGAAA,aAAa,OAAA;AACb,6GAAA,mBAAmB,OAAA;AACnB,oGAAA,UAAU,OAAA;AACV,4GAAA,kBAAkB,OAAA;AAClB,yGAAA,eAAe,OAAA;AACf,qGAAA,WAAW,OAAA;AASf,6DAKkC;AAJ9B,sHAAA,mBAAmB,OAAA;AACnB,wHAAA,qBAAqB,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":";;;;;;AAAA,6CAAsD;AAA7C,2HAAA,OAAO,OAAe;AAC/B,yDAIgC;AAH5B,8GAAA,aAAa,OAAA;AACb,mHAAA,kBAAkB,OAAA;AAGtB,mDAA6D;AAApD,iGAAA,GAAG,OAAA;AAAE,oGAAA,MAAM,OAAA;AAAE,uGAAA,SAAS,OAAA;AAC/B,yDAGgC;AAF5B,2GAAA,UAAU,OAAA;AAGd,2DAOiC;AAJ7B,gHAAA,cAAc,OAAA;AACd,2GAAA,SAAS,OAAA;AACT,gHAAA,cAAc,OAAA;AACd,+GAAA,aAAa,OAAA;AAEjB,6DAKkC;AAF9B,iHAAA,cAAc,OAAA;AACd,2GAAA,QAAQ,OAAA;AAEZ,yDAA+D;AAAtD,uGAAA,MAAM,OAAA;AAAE,8GAAA,aAAa,OAAA;AAC9B,uDAAwE;AAA/D,mGAAA,GAAG,OAAA;AAAE,0GAAA,UAAU,OAAA;AAAE,8GAAA,cAAc,OAAA;AACxC,yDAAuE;AAA9D,4GAAA,WAAW,OAAA;AAAE,uGAAA,MAAM,OAAA;AAAE,yGAAA,QAAQ,OAAA;AAEtC,6DAKkC;AAJ9B,sHAAA,mBAAmB,OAAA;AACnB,wHAAA,qBAAqB,OAAA;AAIzB,yDAKgC;AAJ5B,kHAAA,iBAAiB,OAAA;AACjB,oHAAA,mBAAmB,OAAA;AAIvB,yDAKgC;AAJ5B,kHAAA,iBAAiB,OAAA;AACjB,oHAAA,mBAAmB,OAAA;AAIvB,mEAKqC;AAJjC,4HAAA,sBAAsB,OAAA;AACtB,8HAAA,wBAAwB,OAAA;AAI5B,qDAK8B;AAJ1B,8GAAA,eAAe,OAAA;AACf,gHAAA,iBAAiB,OAAA;AAIrB,2CAiByB;AAhBrB,2GAAA,iBAAiB,OAAA;AACjB,sGAAA,YAAY,OAAA;AACZ,oGAAA,UAAU,OAAA;AACV,uGAAA,aAAa,OAAA;AACb,6GAAA,mBAAmB,OAAA;AACnB,oGAAA,UAAU,OAAA;AACV,4GAAA,kBAAkB,OAAA;AAClB,yGAAA,eAAe,OAAA;AACf,qGAAA,WAAW,OAAA;AASf,6DAKkC;AAJ9B,sHAAA,mBAAmB,OAAA;AACnB,wHAAA,qBAAqB,OAAA"}
@@ -12,8 +12,8 @@ const apikeyPlugin = (0, fastify_helper_1.registerPlugin)(async (fastify) => {
12
12
  done();
13
13
  return;
14
14
  }
15
- const currentKey = request.headers[(0, env_helper_1.getenv)('API_HEADER', 'x-api-key')];
16
- const expectedKey = (0, env_helper_1.getenv)('API_KEY', 'test');
15
+ const currentKey = request.headers[env_helper_1.env.apiHeader];
16
+ const expectedKey = env_helper_1.env.apiKey;
17
17
  if (currentKey !== expectedKey) {
18
18
  throw (0, fastify_helper_1.httpError)("API_KEY doesn't match", 403, errors_helper_1.EErrorCode.ApiKey);
19
19
  }
@@ -1 +1 @@
1
- {"version":3,"file":"apikey.plugin.js","sourceRoot":"","sources":["../../plugins/apikey.plugin.ts"],"names":[],"mappings":";;AAAA,sDAA8C;AAC9C,4DAAqD;AACrD,8DAAwF;AAExF,MAAM,YAAY,GAAG,IAAA,+BAAc,EAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IAClD,OAAO,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE;QACpD,6FAA6F;QAC7F,wEAAwE;QACxE,MAAM,QAAQ,GAAG,OAAO,CAAC,YAAY,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAA;QACxD,IAAI,QAAQ,KAAK,GAAG,IAAI,QAAQ,KAAK,kCAAiB,IAAI,QAAQ,CAAC,UAAU,CAAC,GAAG,kCAAiB,GAAG,CAAC,EAAE,CAAC;YACrG,IAAI,EAAE,CAAA;YACN,OAAM;QACV,CAAC;QAED,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,IAAA,mBAAM,EAAC,YAAY,EAAE,WAAW,CAAC,CAAC,CAAA;QACrE,MAAM,WAAW,GAAG,IAAA,mBAAM,EAAC,SAAS,EAAE,MAAM,CAAC,CAAA;QAE7C,IAAI,UAAU,KAAK,WAAW,EAAE,CAAC;YAC7B,MAAM,IAAA,0BAAS,EAAC,uBAAuB,EAAE,GAAG,EAAE,0BAAU,CAAC,MAAM,CAAC,CAAA;QACpE,CAAC;QAED,IAAI,EAAE,CAAA;IACV,CAAC,CAAC,CAAA;AACN,CAAC,CAAC,CAAA;AAEF,kBAAe,YAAY,CAAA"}
1
+ {"version":3,"file":"apikey.plugin.js","sourceRoot":"","sources":["../../plugins/apikey.plugin.ts"],"names":[],"mappings":";;AAAA,sDAA2C;AAC3C,4DAAqD;AACrD,8DAAwF;AAExF,MAAM,YAAY,GAAG,IAAA,+BAAc,EAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IAClD,OAAO,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE;QACpD,6FAA6F;QAC7F,wEAAwE;QACxE,MAAM,QAAQ,GAAG,OAAO,CAAC,YAAY,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAA;QACxD,IAAI,QAAQ,KAAK,GAAG,IAAI,QAAQ,KAAK,kCAAiB,IAAI,QAAQ,CAAC,UAAU,CAAC,GAAG,kCAAiB,GAAG,CAAC,EAAE,CAAC;YACrG,IAAI,EAAE,CAAA;YACN,OAAM;QACV,CAAC;QAED,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,gBAAG,CAAC,SAAS,CAAC,CAAA;QACjD,MAAM,WAAW,GAAG,gBAAG,CAAC,MAAM,CAAA;QAE9B,IAAI,UAAU,KAAK,WAAW,EAAE,CAAC;YAC7B,MAAM,IAAA,0BAAS,EAAC,uBAAuB,EAAE,GAAG,EAAE,0BAAU,CAAC,MAAM,CAAC,CAAA;QACpE,CAAC;QAED,IAAI,EAAE,CAAA;IACV,CAAC,CAAC,CAAA;AACN,CAAC,CAAC,CAAA;AAEF,kBAAe,YAAY,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"logger.plugin.d.ts","sourceRoot":"","sources":["../../plugins/logger.plugin.ts"],"names":[],"mappings":";AAOA,wBA6CE"}
1
+ {"version":3,"file":"logger.plugin.d.ts","sourceRoot":"","sources":["../../plugins/logger.plugin.ts"],"names":[],"mappings":";AAIA,wBAkDE"}
@@ -1,12 +1,14 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const pino_1 = require("pino");
4
- const env_helper_1 = require("../helpers/env.helper");
5
4
  const fastify_helper_1 = require("../helpers/fastify.helper");
6
- const level = (0, env_helper_1.getenv)('LOG_LEVEL', 'error');
7
5
  exports.default = (0, fastify_helper_1.registerPlugin)(async (fastify) => {
6
+ // Единый источник истины — реальный уровень уже сконфигурированного логгера,
7
+ // а не повторное чтение GS_LOG_LEVEL (иначе гейтинг хуков может разъехаться с логгером).
8
+ // Невалидный уровень трактуем как info.
9
+ const level = pino_1.levels.values[fastify.log.level] ?? pino_1.levels.values.info;
8
10
  // Override due to {"disableRequestLogging": true}
9
- if (pino_1.levels.values[level] <= pino_1.levels.values.info) {
11
+ if (level <= pino_1.levels.values.info) {
10
12
  fastify.addHook('onRequest', (request, _reply, done) => {
11
13
  request.log.info({
12
14
  url: request.raw.url,
@@ -15,7 +17,7 @@ exports.default = (0, fastify_helper_1.registerPlugin)(async (fastify) => {
15
17
  });
16
18
  }
17
19
  // Override due to {"disableRequestLogging": true}
18
- if (pino_1.levels.values[level] <= pino_1.levels.values.info) {
20
+ if (level <= pino_1.levels.values.info) {
19
21
  fastify.addHook('onResponse', (request, reply, done) => {
20
22
  request.log.info({
21
23
  statusCode: reply.raw.statusCode,
@@ -24,7 +26,7 @@ exports.default = (0, fastify_helper_1.registerPlugin)(async (fastify) => {
24
26
  done();
25
27
  });
26
28
  }
27
- if (pino_1.levels.values[level] <= pino_1.levels.values.trace) {
29
+ if (level <= pino_1.levels.values.trace) {
28
30
  fastify.addHook('preHandler', (request, _reply, done) => {
29
31
  request.log.trace({
30
32
  payload: request.body,
@@ -32,7 +34,7 @@ exports.default = (0, fastify_helper_1.registerPlugin)(async (fastify) => {
32
34
  done();
33
35
  });
34
36
  }
35
- if (pino_1.levels.values[level] <= pino_1.levels.values.trace) {
37
+ if (level <= pino_1.levels.values.trace) {
36
38
  fastify.addHook('preSerialization', (request, _reply, payload, done) => {
37
39
  try {
38
40
  request.log.trace({
@@ -1 +1 @@
1
- {"version":3,"file":"logger.plugin.js","sourceRoot":"","sources":["../../plugins/logger.plugin.ts"],"names":[],"mappings":";;AAAA,+BAA6B;AAE7B,sDAA8C;AAC9C,8DAA0D;AAE1D,MAAM,KAAK,GAAG,IAAA,mBAAM,EAAC,WAAW,EAAE,OAAO,CAAC,CAAA;AAE1C,kBAAe,IAAA,+BAAc,EAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IAC5C,kDAAkD;IAClD,IAAI,aAAM,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,aAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QAC7C,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE;YACnD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;gBACb,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,GAAG;aACvB,EAAE,kBAAkB,CAAC,CAAA;YACtB,IAAI,EAAE,CAAA;QACV,CAAC,CAAC,CAAA;IACN,CAAC;IAED,kDAAkD;IAClD,IAAI,aAAM,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,aAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QAC7C,OAAO,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;YACnD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;gBACb,UAAU,EAAE,KAAK,CAAC,GAAG,CAAC,UAAU;gBAChC,YAAY,EAAE,KAAK,CAAC,WAAW;aAClC,EAAE,mBAAmB,CAAC,CAAA;YACvB,IAAI,EAAE,CAAA;QACV,CAAC,CAAC,CAAA;IACN,CAAC;IAED,IAAI,aAAM,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,aAAM,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QAC9C,OAAO,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE;YACpD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;gBACd,OAAO,EAAE,OAAO,CAAC,IAAI;aACxB,EAAE,iBAAiB,CAAC,CAAA;YACrB,IAAI,EAAE,CAAA;QACV,CAAC,CAAC,CAAA;IACN,CAAC;IAED,IAAI,aAAM,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,aAAM,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QAC9C,OAAO,CAAC,OAAO,CAAC,kBAAkB,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;YACnE,IAAI,CAAC;gBACD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;oBACd,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,OAAiB,CAAC;iBACzC,EAAE,eAAe,CAAC,CAAA;YACvB,CAAC;YAAC,OAAO,EAAE,EAAE,CAAC;gBACV,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;oBACd,OAAO;iBACV,EAAE,eAAe,CAAC,CAAA;YACvB,CAAC;YACD,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;QACvB,CAAC,CAAC,CAAA;IACN,CAAC;AACL,CAAC,CAAC,CAAA"}
1
+ {"version":3,"file":"logger.plugin.js","sourceRoot":"","sources":["../../plugins/logger.plugin.ts"],"names":[],"mappings":";;AAAA,+BAA6B;AAE7B,8DAA0D;AAE1D,kBAAe,IAAA,+BAAc,EAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IAC5C,6EAA6E;IAC7E,yFAAyF;IACzF,wCAAwC;IACxC,MAAM,KAAK,GAAG,aAAM,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,aAAM,CAAC,MAAM,CAAC,IAAI,CAAA;IAEpE,kDAAkD;IAClD,IAAI,KAAK,IAAI,aAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QAC9B,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE;YACnD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;gBACb,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,GAAG;aACvB,EAAE,kBAAkB,CAAC,CAAA;YACtB,IAAI,EAAE,CAAA;QACV,CAAC,CAAC,CAAA;IACN,CAAC;IAED,kDAAkD;IAClD,IAAI,KAAK,IAAI,aAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QAC9B,OAAO,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;YACnD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;gBACb,UAAU,EAAE,KAAK,CAAC,GAAG,CAAC,UAAU;gBAChC,YAAY,EAAE,KAAK,CAAC,WAAW;aAClC,EAAE,mBAAmB,CAAC,CAAA;YACvB,IAAI,EAAE,CAAA;QACV,CAAC,CAAC,CAAA;IACN,CAAC;IAED,IAAI,KAAK,IAAI,aAAM,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QAC/B,OAAO,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE;YACpD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;gBACd,OAAO,EAAE,OAAO,CAAC,IAAI;aACxB,EAAE,iBAAiB,CAAC,CAAA;YACrB,IAAI,EAAE,CAAA;QACV,CAAC,CAAC,CAAA;IACN,CAAC;IAED,IAAI,KAAK,IAAI,aAAM,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QAC/B,OAAO,CAAC,OAAO,CAAC,kBAAkB,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;YACnE,IAAI,CAAC;gBACD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;oBACd,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,OAAiB,CAAC;iBACzC,EAAE,eAAe,CAAC,CAAA;YACvB,CAAC;YAAC,OAAO,EAAE,EAAE,CAAC;gBACV,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;oBACd,OAAO;iBACV,EAAE,eAAe,CAAC,CAAA;YACvB,CAAC;YACD,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;QACvB,CAAC,CAAC,CAAA;IACN,CAAC;AACL,CAAC,CAAC,CAAA"}
@@ -10,9 +10,9 @@ const fastify_helper_1 = require("../helpers/fastify.helper");
10
10
  const sentryPlugin = (0, fastify_helper_1.registerPlugin)(async (fastify) => {
11
11
  const gameConfig = (0, config_helper_1.getGameConfig)();
12
12
  fastify.register(fastify_sentry_1.default, {
13
- dsn: (0, env_helper_1.getenv)('SENTRY_DSN', undefined),
13
+ dsn: env_helper_1.env.sentryDsn,
14
14
  environment: (0, env_helper_1.variation)('development', 'staging', 'production'),
15
- tracesSampleRate: parseFloat((0, env_helper_1.getenv)('SENTRY_RATE', '0.01')), // 1% by default
15
+ tracesSampleRate: env_helper_1.env.sentryRate, // 1% by default
16
16
  setErrorHandler: false,
17
17
  });
18
18
  fastify.addHook('onReady', () => {
@@ -1 +1 @@
1
- {"version":3,"file":"sentry.plugin.js","sourceRoot":"","sources":["../../plugins/sentry.plugin.ts"],"names":[],"mappings":";;;;;AAAA,qFAA2D;AAE3D,4DAAwD;AACxD,sDAAyD;AACzD,8DAA0D;AAE1D,MAAM,YAAY,GAAG,IAAA,+BAAc,EAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IAClD,MAAM,UAAU,GAAG,IAAA,6BAAa,GAAE,CAAA;IAElC,OAAO,CAAC,QAAQ,CAAC,wBAAa,EAAE;QAC5B,GAAG,EAAE,IAAA,mBAAM,EAAC,YAAY,EAAE,SAAS,CAAC;QACpC,WAAW,EAAE,IAAA,sBAAS,EAAC,aAAa,EAAE,SAAS,EAAE,YAAY,CAAC;QAC9D,gBAAgB,EAAE,UAAU,CAAC,IAAA,mBAAM,EAAC,aAAa,EAAE,MAAM,CAAC,CAAC,EAAE,gBAAgB;QAC7E,eAAe,EAAE,KAAK;KACzB,CAAC,CAAA;IAEF,OAAO,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,EAAE;QAC5B,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,UAAU,CAAC,MAAM,CAAC,CAAA;IACvD,CAAC,CAAC,CAAA;AACN,CAAC,CAAC,CAAA;AAEF,kBAAe,YAAY,CAAA"}
1
+ {"version":3,"file":"sentry.plugin.js","sourceRoot":"","sources":["../../plugins/sentry.plugin.ts"],"names":[],"mappings":";;;;;AAAA,qFAA2D;AAE3D,4DAAwD;AACxD,sDAAsD;AACtD,8DAA0D;AAE1D,MAAM,YAAY,GAAG,IAAA,+BAAc,EAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IAClD,MAAM,UAAU,GAAG,IAAA,6BAAa,GAAE,CAAA;IAElC,OAAO,CAAC,QAAQ,CAAC,wBAAa,EAAE;QAC5B,GAAG,EAAE,gBAAG,CAAC,SAAS;QAClB,WAAW,EAAE,IAAA,sBAAS,EAAC,aAAa,EAAE,SAAS,EAAE,YAAY,CAAC;QAC9D,gBAAgB,EAAE,gBAAG,CAAC,UAAU,EAAE,gBAAgB;QAClD,eAAe,EAAE,KAAK;KACzB,CAAC,CAAA;IAEF,OAAO,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,EAAE;QAC5B,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,UAAU,CAAC,MAAM,CAAC,CAAA;IACvD,CAAC,CAAC,CAAA;AACN,CAAC,CAAC,CAAA;AAEF,kBAAe,YAAY,CAAA"}
@@ -16,7 +16,7 @@ const play_schema_1 = require("../schemas/play.schema");
16
16
  const shared_1 = require("../schemas/shared");
17
17
  const validate_schema_1 = require("../schemas/validate.schema");
18
18
  const swaggerPlugin = (0, fastify_helper_1.registerPlugin)(async (fastify) => {
19
- if ((0, env_helper_1.variation)(false, false, true))
19
+ if ((0, env_helper_1.variation)(false, true, true))
20
20
  return;
21
21
  const gameConfig = (0, config_helper_1.getGameConfig)();
22
22
  const routePrefix = fastify_helper_1.DOCS_ROUTE_PREFIX;
@@ -1 +1 @@
1
- {"version":3,"file":"swagger.plugin.js","sourceRoot":"","sources":["../../plugins/swagger.plugin.ts"],"names":[],"mappings":";;;;;AAAA,+DAA6C;AAC7C,qEAAkD;AAElD,4DAAwD;AACxD,sDAAiD;AACjD,8DAA6E;AAC7E,sEAAiE;AACjE,gEAAuF;AACvF,4DAAiF;AACjF,4DAAiF;AACjF,wDAA2E;AAC3E,8CAE0B;AAC1B,gEAAuF;AAEvF,MAAM,aAAa,GAAG,IAAA,+BAAc,EAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACnD,IAAI,IAAA,sBAAS,EAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC;QAAE,OAAM;IAEzC,MAAM,UAAU,GAAG,IAAA,6BAAa,GAAE,CAAA;IAClC,MAAM,WAAW,GAAG,kCAAiB,CAAA;IAErC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE;QACjC,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAA;IAC/B,CAAC,CAAC,CAAA;IAEF,OAAO,CAAC,QAAQ,CAAC,iBAAc,EAAE;QAC7B,OAAO,EAAE;YACL,IAAI,EAAE;gBACF,KAAK,EAAE,qBAAqB;gBAC5B,OAAO,EAAE,IAAA,sCAAiB,GAAE;aAC/B;SACJ;KACJ,CAAC,CAAA;IAEF,OAAO,CAAC,QAAQ,CAAC,oBAAgB,EAAE;QAC/B,WAAW;QACX,QAAQ,EAAE;YACN,YAAY,EAAE,MAAM;YACpB,WAAW,EAAE,KAAK;SACrB;QACD,KAAK,EAAE;YACH,KAAK,EAAE,aAAa,UAAU,CAAC,MAAM,EAAE;SAC1C;KACJ,CAAC,CAAA;IAEF,OAAO,CAAC,SAAS,CAAC,oBAAW,CAAC,CAAA;IAC9B,OAAO,CAAC,SAAS,CAAC,wBAAe,CAAC,CAAA;IAClC,OAAO,CAAC,SAAS,CAAC,mBAAU,CAAC,CAAA;IAC7B,OAAO,CAAC,SAAS,CAAC,2BAAkB,CAAC,CAAA;IACrC,OAAO,CAAC,SAAS,CAAC,0BAAiB,CAAC,CAAA;IACpC,OAAO,CAAC,SAAS,CAAC,4BAAmB,CAAC,CAAA;IACtC,OAAO,CAAC,SAAS,CAAC,+BAAiB,CAAC,CAAA;IACpC,OAAO,CAAC,SAAS,CAAC,6BAAe,CAAC,CAAA;IAClC,OAAO,CAAC,SAAS,CAAC,uCAAqB,CAAC,CAAA;IACxC,OAAO,CAAC,SAAS,CAAC,qCAAmB,CAAC,CAAA;IACtC,OAAO,CAAC,SAAS,CAAC,mCAAmB,CAAC,CAAA;IACtC,OAAO,CAAC,SAAS,CAAC,iCAAiB,CAAC,CAAA;IACpC,OAAO,CAAC,SAAS,CAAC,mCAAmB,CAAC,CAAA;IACtC,OAAO,CAAC,SAAS,CAAC,iCAAiB,CAAC,CAAA;IACpC,OAAO,CAAC,SAAS,CAAC,uCAAqB,CAAC,CAAA;IACxC,OAAO,CAAC,SAAS,CAAC,qCAAmB,CAAC,CAAA;AAC1C,CAAC,CAAC,CAAA;AAEF,kBAAe,aAAa,CAAA"}
1
+ {"version":3,"file":"swagger.plugin.js","sourceRoot":"","sources":["../../plugins/swagger.plugin.ts"],"names":[],"mappings":";;;;;AAAA,+DAA6C;AAC7C,qEAAkD;AAElD,4DAAwD;AACxD,sDAAiD;AACjD,8DAA6E;AAC7E,sEAAiE;AACjE,gEAAuF;AACvF,4DAAiF;AACjF,4DAAiF;AACjF,wDAA2E;AAC3E,8CAE0B;AAC1B,gEAAuF;AAEvF,MAAM,aAAa,GAAG,IAAA,+BAAc,EAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACnD,IAAI,IAAA,sBAAS,EAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC;QAAE,OAAM;IAExC,MAAM,UAAU,GAAG,IAAA,6BAAa,GAAE,CAAA;IAClC,MAAM,WAAW,GAAG,kCAAiB,CAAA;IAErC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE;QACjC,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAA;IAC/B,CAAC,CAAC,CAAA;IAEF,OAAO,CAAC,QAAQ,CAAC,iBAAc,EAAE;QAC7B,OAAO,EAAE;YACL,IAAI,EAAE;gBACF,KAAK,EAAE,qBAAqB;gBAC5B,OAAO,EAAE,IAAA,sCAAiB,GAAE;aAC/B;SACJ;KACJ,CAAC,CAAA;IAEF,OAAO,CAAC,QAAQ,CAAC,oBAAgB,EAAE;QAC/B,WAAW;QACX,QAAQ,EAAE;YACN,YAAY,EAAE,MAAM;YACpB,WAAW,EAAE,KAAK;SACrB;QACD,KAAK,EAAE;YACH,KAAK,EAAE,aAAa,UAAU,CAAC,MAAM,EAAE;SAC1C;KACJ,CAAC,CAAA;IAEF,OAAO,CAAC,SAAS,CAAC,oBAAW,CAAC,CAAA;IAC9B,OAAO,CAAC,SAAS,CAAC,wBAAe,CAAC,CAAA;IAClC,OAAO,CAAC,SAAS,CAAC,mBAAU,CAAC,CAAA;IAC7B,OAAO,CAAC,SAAS,CAAC,2BAAkB,CAAC,CAAA;IACrC,OAAO,CAAC,SAAS,CAAC,0BAAiB,CAAC,CAAA;IACpC,OAAO,CAAC,SAAS,CAAC,4BAAmB,CAAC,CAAA;IACtC,OAAO,CAAC,SAAS,CAAC,+BAAiB,CAAC,CAAA;IACpC,OAAO,CAAC,SAAS,CAAC,6BAAe,CAAC,CAAA;IAClC,OAAO,CAAC,SAAS,CAAC,uCAAqB,CAAC,CAAA;IACxC,OAAO,CAAC,SAAS,CAAC,qCAAmB,CAAC,CAAA;IACtC,OAAO,CAAC,SAAS,CAAC,mCAAmB,CAAC,CAAA;IACtC,OAAO,CAAC,SAAS,CAAC,iCAAiB,CAAC,CAAA;IACpC,OAAO,CAAC,SAAS,CAAC,mCAAmB,CAAC,CAAA;IACtC,OAAO,CAAC,SAAS,CAAC,iCAAiB,CAAC,CAAA;IACpC,OAAO,CAAC,SAAS,CAAC,uCAAqB,CAAC,CAAA;IACxC,OAAO,CAAC,SAAS,CAAC,qCAAmB,CAAC,CAAA;AAC1C,CAAC,CAAC,CAAA;AAEF,kBAAe,aAAa,CAAA"}
@@ -1,4 +1,5 @@
1
1
  import { Static } from '@sinclair/typebox';
2
+ import { env } from '../helpers/env.helper';
2
3
  export declare enum EStakeType {
3
4
  default = "default",
4
5
  buy = "buy",
@@ -37,7 +38,7 @@ export declare const MetaSchema: import("@sinclair/typebox").TObject<{
37
38
  private: import("@sinclair/typebox").TAny;
38
39
  }>;
39
40
  export declare const HeadersSchema: import("@sinclair/typebox").TObject<{
40
- "x-api-key": import("@sinclair/typebox").TString;
41
+ [env.apiHeader]: import("@sinclair/typebox").TString;
41
42
  }>;
42
43
  export declare const InternalErrorSchema: import("@sinclair/typebox").TObject<{
43
44
  status: import("@sinclair/typebox").TLiteral<false>;
@@ -1 +1 @@
1
- {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../schemas/shared.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAQ,MAAM,mBAAmB,CAAA;AAIhD,oBAAY,UAAU;IAClB,OAAO,YAAY;IACnB,GAAG,QAAQ;IACX,QAAQ,aAAa;CACxB;AAED,oBAAY,YAAY;IACpB,WAAW,gBAAgB;IAC3B,OAAO,YAAY;IACnB,UAAU,eAAe;CAC5B;AAED,MAAM,MAAM,SAAS,GAAG;IACpB,CAAC,GAAG,EAAE,MAAM,GAAG;QACX,KAAK,EAAE,GAAG,CAAC;QACX,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,WAAW,CAAC,EAAE,MAAM,CAAA;KACvB,CAAA;CACJ,CAAA;AAED,eAAO,MAAM,WAAW;;;;;;;EA2BtB,CAAA;AAEF,eAAO,MAAM,eAAe;;;;;;;EAyB1B,CAAA;AAEF,eAAO,MAAM,UAAU;;;EAWrB,CAAA;AAEF,eAAO,MAAM,aAAa;;EAKxB,CAAA;AAcF,eAAO,MAAM,mBAAmB;;;;EAS9B,CAAA;AAEF,eAAO,MAAM,kBAAkB;;;;EAS7B,CAAA;AAEF,eAAO,MAAM,iBAAiB;;;;EAS5B,CAAA;AAEF,MAAM,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,WAAW,CAAC,CAAA;AAC/C,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,eAAe,CAAC,CAAA;AACvD,MAAM,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,UAAU,CAAC,CAAA;AAC7C,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,OAAO,mBAAmB,CAAC,CAAA;AAC/D,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC,OAAO,kBAAkB,CAAC,CAAA;AAC7D,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC,OAAO,iBAAiB,CAAC,CAAA"}
1
+ {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../schemas/shared.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAQ,MAAM,mBAAmB,CAAA;AAEhD,OAAO,EAAE,GAAG,EAAE,MAAM,uBAAuB,CAAA;AAE3C,oBAAY,UAAU;IAClB,OAAO,YAAY;IACnB,GAAG,QAAQ;IACX,QAAQ,aAAa;CACxB;AAED,oBAAY,YAAY;IACpB,WAAW,gBAAgB;IAC3B,OAAO,YAAY;IACnB,UAAU,eAAe;CAC5B;AAED,MAAM,MAAM,SAAS,GAAG;IACpB,CAAC,GAAG,EAAE,MAAM,GAAG;QACX,KAAK,EAAE,GAAG,CAAC;QACX,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,WAAW,CAAC,EAAE,MAAM,CAAA;KACvB,CAAA;CACJ,CAAA;AAED,eAAO,MAAM,WAAW;;;;;;;EA2BtB,CAAA;AAEF,eAAO,MAAM,eAAe;;;;;;;EAyB1B,CAAA;AAEF,eAAO,MAAM,UAAU;;;EAWrB,CAAA;AAEF,eAAO,MAAM,aAAa;IACtB,CAAC,GAAG,CAAC,SAAS,CAAC,sCAGb;EACJ,CAAA;AAcF,eAAO,MAAM,mBAAmB;;;;EAS9B,CAAA;AAEF,eAAO,MAAM,kBAAkB;;;;EAS7B,CAAA;AAEF,eAAO,MAAM,iBAAiB;;;;EAS5B,CAAA;AAEF,MAAM,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,WAAW,CAAC,CAAA;AAC/C,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,eAAe,CAAC,CAAA;AACvD,MAAM,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,UAAU,CAAC,CAAA;AAC7C,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,OAAO,mBAAmB,CAAC,CAAA;AAC/D,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC,OAAO,kBAAkB,CAAC,CAAA;AAC7D,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC,OAAO,iBAAiB,CAAC,CAAA"}
@@ -82,7 +82,7 @@ exports.MetaSchema = typebox_1.Type.Object({
82
82
  additionalProperties: false,
83
83
  });
84
84
  exports.HeadersSchema = typebox_1.Type.Object({
85
- [(0, env_helper_1.getenv)('API_HEADER', 'x-api-key')]: typebox_1.Type.String({
85
+ [env_helper_1.env.apiHeader]: typebox_1.Type.String({
86
86
  description: 'Shared API key used to authenticate all RGS → Game Server calls',
87
87
  examples: ['test'],
88
88
  }),
@@ -1 +1 @@
1
- {"version":3,"file":"shared.js","sourceRoot":"","sources":["../../schemas/shared.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"shared.js","sourceRoot":"","sources":["../../schemas/shared.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@truelab/trueserver",
3
- "version": "0.1.4",
3
+ "version": "0.3.0",
4
4
  "description": "TrueLab Fastify server package: routes, schemas, and plugins for TrueLab game backends",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",
@@ -74,11 +74,13 @@
74
74
  "dotenv": "^16.6.1",
75
75
  "fastify": "^4.29.1",
76
76
  "fastify-plugin": "^4.5.1",
77
+ "minimist": "^1.2.8",
77
78
  "pino": "^8.21.0",
78
79
  "pino-pretty": "^10.3.1"
79
80
  },
80
81
  "devDependencies": {
81
82
  "@types/big.js": "^6.2.2",
83
+ "@types/minimist": "^1.2.5",
82
84
  "@types/node": "^16.18.126",
83
85
  "typescript": "^5.9.3",
84
86
  "vitest": "^4.1.9"