@truelab/trueserver 0.2.0 → 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.
package/CHANGELOG.md CHANGED
@@ -6,6 +6,23 @@ 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
+
9
26
  ## [0.2.0] - 2026-07-06
10
27
 
11
28
  ### Breaking
package/MIGRATION.md CHANGED
@@ -1,6 +1,7 @@
1
1
  # Migration
2
2
 
3
- - [0.1.4 → 0.2.0](#migration-014--020) (последнее)
3
+ - [0.2.0 → 0.3.0](#migration-020--030) (последнее)
4
+ - [0.1.4 → 0.2.0](#migration-014--020)
4
5
  - [0.0.7 → 0.1.0](#migration-007--010)
5
6
  - [0.0.6 → 0.0.7](#migration-006--007)
6
7
  - [0.0.5 → 0.0.6](#migration-005--006)
@@ -8,6 +9,76 @@
8
9
 
9
10
  ---
10
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
+
11
82
  ## Migration: 0.1.4 → 0.2.0
12
83
 
13
84
  Единственное ломающее изменение — удалена опция `new Application({ envPath })` (вместе с типом `TApplicationOptions`). Приоритетный env-файл теперь задаётся CLI-флагом `--env` при запуске процесса.
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,22 +168,41 @@ 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 |
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.
183
202
 
184
203
  `.env` is loaded automatically from the process working directory (`dotenv.config()` runs at import time).
185
204
 
186
- To load a specific `.env` **with priority** — independent of the working directory and early enough to affect `LOG_LEVEL` — pass the `--env` flag as an application argument:
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:
187
206
 
188
207
  ```sh
189
208
  node ./dist/index.js --env ./path/to/.env # or --env=./path/to/.env
@@ -197,12 +216,12 @@ pm2 start ./server/dist/index.js --name <proc> --cwd ${FOLDER_PATH} -- --env ./s
197
216
 
198
217
  ## Swagger
199
218
 
200
- Swagger UI is enabled for `APP_ENV=dev` and `APP_ENV=release` (staging).
219
+ Swagger UI is enabled only for `GS_APP_ENV=dev`.
201
220
 
202
221
  - `GET /` redirects to `/docs`
203
222
  - `GET /docs` serves Swagger UI
204
223
 
205
- `master` (production) disables Swagger UI.
224
+ `release` (staging) and `master` (production) disable Swagger UI.
206
225
 
207
226
  ## Advanced Validation
208
227
 
@@ -211,7 +230,7 @@ The package validates both requests and replies via TypeBox schemas and runs gam
211
230
  - `/config` checks stake modes, the `hasChoice ⇒ hasMeta` invariant, the `hasVariableLevels ⇔ {variableLevels, defaultLevel}` pair, and `hasMultiStake=true ⇒ freeroundsAllowed=false` and `hasValidate=true`.
212
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`).
213
232
  - `/validate` is available only when `hasValidate=true`. Returns `{ valid: boolean, reason?: string }`.
214
- - `test` field is rejected on production (`APP_ENV=master` or unset).
233
+ - `test` field is rejected on production (`GS_APP_ENV=master` or unset).
215
234
 
216
235
  ## Money-value precision
217
236
 
@@ -1,4 +1,20 @@
1
1
  export declare function getenv<T = string>(name: string, def: T): T;
2
2
  /** Вариации значений в зависимости от окружения */
3
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
+ };
4
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":"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"}
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,6 +3,7 @@ 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.env = void 0;
6
7
  exports.getenv = getenv;
7
8
  exports.variation = variation;
8
9
  const node_path_1 = __importDefault(require("node:path"));
@@ -41,9 +42,25 @@ function variation(devBranch, releaseBranch, masterBranch) {
41
42
  release: releaseBranch,
42
43
  master: masterBranch,
43
44
  };
44
- if (process.env.APP_ENV && process.env.APP_ENV in variations) {
45
- 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];
46
47
  }
47
48
  return masterBranch;
48
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
+ };
49
66
  //# sourceMappingURL=env.helper.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"env.helper.js","sourceRoot":"","sources":["../../helpers/env.helper.ts"],"names":[],"mappings":";;;;;AAsBA,wBAYC;AAGD,8BAYC;AAjDD,0DAA4B;AAE5B,oDAA2B;AAC3B,wDAA+B;AAE/B,6EAA6E;AAC7E,gBAAM,CAAC,MAAM,EAAE,CAAA;AAEf,yEAAyE;AACzE,kGAAkG;AAClG,kGAAkG;AAClG,6EAA6E;AAC7E,MAAM,UAAU,GAAY,IAAA,kBAAQ,EAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAA;AAC/D,IAAI,OAAO,UAAU,KAAK,QAAQ,IAAI,UAAU,EAAE,CAAC;IAC/C,iFAAiF;IACjF,MAAM,EAAE,KAAK,EAAE,GAAG,gBAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,mBAAI,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAA;IACnF,IAAI,KAAK,EAAE,CAAC;QACR,4DAA4D;QAC5D,OAAO,CAAC,IAAI,CAAC,uBAAuB,UAAU,iBAAiB,KAAK,CAAC,OAAO,EAAE,CAAC,CAAA;IACnF,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":";;;;;;AAsBA,wBAYC;AAGD,8BAYC;AAjDD,0DAA4B;AAE5B,oDAA2B;AAC3B,wDAA+B;AAE/B,6EAA6E;AAC7E,gBAAM,CAAC,MAAM,EAAE,CAAA;AAEf,yEAAyE;AACzE,kGAAkG;AAClG,kGAAkG;AAClG,6EAA6E;AAC7E,MAAM,UAAU,GAAY,IAAA,kBAAQ,EAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAA;AAC/D,IAAI,OAAO,UAAU,KAAK,QAAQ,IAAI,UAAU,EAAE,CAAC;IAC/C,iFAAiF;IACjF,MAAM,EAAE,KAAK,EAAE,GAAG,gBAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,mBAAI,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAA;IACnF,IAAI,KAAK,EAAE,CAAC;QACR,4DAA4D;QAC5D,OAAO,CAAC,IAAI,CAAC,uBAAuB,UAAU,iBAAiB,KAAK,CAAC,OAAO,EAAE,CAAC,CAAA;IACnF,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,UAAU,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,UAAU,EAAE,CAAC;QACjE,OAAO,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;IAC7C,CAAC;IAED,OAAO,YAAY,CAAA;AACvB,CAAC;AAED;;;;GAIG;AACU,QAAA,GAAG,GAAG;IACf,IAAI,IAAI,KAAK,OAAO,MAAM,CAAC,SAAS,EAAE,WAAW,CAAC,CAAA,CAAC,CAAC;IACpD,IAAI,IAAI,KAAK,OAAO,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,CAAA,CAAC,CAAC;IACpE,IAAI,WAAW,KAAK,OAAO,MAAM,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAA,CAAC,CAAC;IAC1D,IAAI,SAAS,KAAK,OAAO,MAAM,CAAC,eAAe,EAAE,WAAW,CAAC,CAAA,CAAC,CAAC;IAC/D,IAAI,MAAM,KAAK,OAAO,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,CAAA,CAAC,CAAC;IACpD,IAAI,QAAQ,KAAK,OAAO,MAAM,CAAC,cAAc,EAAE,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA,CAAC,CAAC;IACpF,IAAI,MAAM,KAAK,OAAO,MAAM,CAAqB,YAAY,EAAE,SAAS,CAAC,CAAA,CAAC,CAAC;IAC3E,IAAI,SAAS,KAAK,OAAO,MAAM,CAAqB,eAAe,EAAE,SAAS,CAAC,CAAA,CAAC,CAAC;IACjF,IAAI,UAAU,KAAK,OAAO,UAAU,CAAC,MAAM,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC,CAAA,CAAC,CAAC;CAC3E,CAAA"}
@@ -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.2.0",
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",