@flowerforce/flowerbase 1.6.2 → 1.6.3-beta.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 (42) hide show
  1. package/README.md +49 -87
  2. package/dist/auth/controller.d.ts.map +1 -1
  3. package/dist/auth/controller.js +15 -3
  4. package/dist/auth/providers/anon-user/controller.d.ts.map +1 -1
  5. package/dist/auth/providers/anon-user/controller.js +5 -1
  6. package/dist/auth/providers/custom-function/schema.d.ts +1 -0
  7. package/dist/auth/providers/custom-function/schema.d.ts.map +1 -1
  8. package/dist/auth/providers/custom-function/schema.js +1 -0
  9. package/dist/auth/utils.d.ts +7 -0
  10. package/dist/auth/utils.d.ts.map +1 -1
  11. package/dist/auth/utils.js +6 -0
  12. package/dist/constants.d.ts +12 -0
  13. package/dist/constants.d.ts.map +1 -1
  14. package/dist/constants.js +26 -5
  15. package/dist/features/endpoints/utils.d.ts.map +1 -1
  16. package/dist/features/endpoints/utils.js +18 -0
  17. package/dist/features/functions/controller.d.ts.map +1 -1
  18. package/dist/features/functions/controller.js +10 -2
  19. package/dist/index.d.ts.map +1 -1
  20. package/dist/index.js +11 -1
  21. package/dist/monitoring/plugin.d.ts +7 -0
  22. package/dist/monitoring/plugin.d.ts.map +1 -0
  23. package/dist/monitoring/plugin.js +1347 -0
  24. package/dist/utils/initializer/exposeRoutes.d.ts.map +1 -1
  25. package/dist/utils/initializer/exposeRoutes.js +10 -2
  26. package/dist/utils/initializer/registerPlugins.d.ts.map +1 -1
  27. package/dist/utils/initializer/registerPlugins.js +10 -1
  28. package/package.json +5 -3
  29. package/src/auth/controller.ts +15 -1
  30. package/src/auth/providers/anon-user/controller.ts +5 -0
  31. package/src/auth/providers/custom-function/schema.ts +23 -24
  32. package/src/auth/utils.ts +6 -0
  33. package/src/constants.ts +22 -0
  34. package/src/features/endpoints/utils.ts +18 -0
  35. package/src/features/functions/controller.ts +10 -2
  36. package/src/index.ts +10 -1
  37. package/src/monitoring/plugin.ts +1528 -0
  38. package/src/monitoring/ui.css +983 -0
  39. package/src/monitoring/ui.html +289 -0
  40. package/src/monitoring/ui.js +1826 -0
  41. package/src/utils/initializer/exposeRoutes.ts +10 -2
  42. package/src/utils/initializer/registerPlugins.ts +13 -2
package/README.md CHANGED
@@ -64,7 +64,7 @@ Add `tsconfig.json` file
64
64
  npx tsc --init
65
65
  ```
66
66
 
67
- In your `packages.json`, inside the script section add this:
67
+ In your `package.json`, inside the script section add this:
68
68
 
69
69
  ```json
70
70
  {
@@ -85,46 +85,7 @@ touch src/index.ts
85
85
  ```
86
86
 
87
87
  ## 🌿 3. Environment Variables
88
- Ensure the following environment variables are set in your .env file or deployment environment:
89
-
90
-
91
- | Variable | Description | Example |
92
- | ---------------------- | --------------------------------------------------------------------------- | -------------------------------------------------- |
93
- | `PROJECT_ID` | A unique ID to identify your project. This value can be freely invented — it's preserved mainly for compatibility with the old Realm-style project structure. | `my-flowerbase-app` |
94
- | `PORT` | The port on which the server will run. | `3000` |
95
- | `MONGODB_URL` | MongoDB connection URI, including username, password, and database name. | `mongodb+srv://user:pass@cluster.mongodb.net/mydb` |
96
- | `JWT_SECRET` | Secret used to sign and verify JWT tokens (choose a strong secret). | `supersecretkey123!` |
97
- | `HOST` | The host address the server binds to (usually `0.0.0.0` for public access). | `0.0.0.0` |
98
- | `HTTPS_SCHEMA` | The schema for your server requests (usually `https` or `http`). | `http` |
99
- | `RESET_PASSWORD_TTL_SECONDS` | Time-to-live for password reset tokens (in seconds). | `3600` |
100
- | `AUTH_RATE_LIMIT_WINDOW_MS` | Rate limit window for auth endpoints (in ms). | `900000` |
101
- | `AUTH_LOGIN_MAX_ATTEMPTS` | Max login attempts per window. | `10` |
102
- | `AUTH_RESET_MAX_ATTEMPTS` | Max reset requests per window. | `5` |
103
- | `REFRESH_TOKEN_TTL_DAYS` | Refresh token time-to-live (in days). | `60` |
104
- | `SWAGGER_ENABLED` | Enable Swagger UI and spec routes (disabled by default). | `true` |
105
- | `SWAGGER_UI_USER` | Basic Auth username for Swagger UI (optional). | `admin` |
106
- | `SWAGGER_UI_PASSWORD` | Basic Auth password for Swagger UI (optional). | `change-me` |
107
-
108
-
109
- Example:
110
- ```env
111
- PROJECT_ID=your-project-id
112
- PORT=3000
113
- MONGODB_URL=mongodb+srv://username:password@cluster.mongodb.net/dbname
114
- JWT_SECRET=your-jwt-secret
115
- HOST=0.0.0.0
116
- HTTPS_SCHEMA=http
117
- RESET_PASSWORD_TTL_SECONDS=3600
118
- AUTH_RATE_LIMIT_WINDOW_MS=900000
119
- AUTH_LOGIN_MAX_ATTEMPTS=10
120
- AUTH_RESET_MAX_ATTEMPTS=5
121
- REFRESH_TOKEN_TTL_DAYS=60
122
- SWAGGER_ENABLED=true
123
- SWAGGER_UI_USER=admin
124
- SWAGGER_UI_PASSWORD=change-me
125
- ```
126
-
127
- 🛡️ Note: Never commit .env files to source control. Use a .gitignore file to exclude it.
88
+ Ensure the same environment variables described in the "Environment Variables" section above are set in your .env file or deployment environment.
128
89
 
129
90
 
130
91
  ## 🧩 4. Initialize Flowerbase
@@ -258,12 +219,13 @@ The authentication modes currently re-implemented in `@flowerforce/flowerbase` a
258
219
  }
259
220
  ```
260
221
 
261
- You can specify the MongoDB collection used to store authentication users by configuring the `auth_collection` field inside the `auth/providers.json` file.
222
+ You can specify the MongoDB collection used to store authentication users by setting `auth_collection` at the root of `auth/providers.json`.
262
223
 
263
224
  #### 📁 auth/providers.json
264
225
  Example
265
226
  ```json
266
227
  {
228
+ "auth_collection": "my-users-collection",
267
229
  "api-key": {
268
230
  "name": "api-key",
269
231
  "type": "api-key",
@@ -273,12 +235,13 @@ Example
273
235
  "name": "local-userpass",
274
236
  "type": "local-userpass",
275
237
  "disabled": false,
276
- "auth_collection": "my-users-collection", //custom collection name
277
238
  "config": {
278
239
  "autoConfirm": true,
279
- "resetPasswordSubject": "reset",
240
+ "confirmationFunctionName": "",
241
+ "resetFunctionName": "",
280
242
  "resetPasswordUrl": "https://my.app.url/password-reset",
281
- "runConfirmationFunction": false
243
+ "runConfirmationFunction": false,
244
+ "runResetFunction": false
282
245
  }
283
246
  },
284
247
  "anon-user": {
@@ -354,49 +317,9 @@ This will download a `.zip` file containing your Realm app's full structure and
354
317
 
355
318
  ✅ You are now ready to migrate or inspect your Realm app locally!
356
319
 
357
- 1) In your existing project folder, initialize a new Node.js project, Run:
358
-
359
- ```bash
360
- npm init -y
361
- ```
362
- 2) Install Flowerbase
320
+ 1) Reuse the same project setup steps from "Creating a New Project from Scratch" (init, install, tsconfig, scripts).
363
321
 
364
- ```bash
365
- npm install @flowerforce/flowerbase
366
- ```
367
-
368
- 3) Add Typescript
369
-
370
- ```bash
371
- npm install --save-dev typescript @types/node ts-node
372
- ```
373
-
374
-
375
- 4) Add `tsconfig.json` file
376
-
377
- ```bash
378
- npx tsc --init
379
- ```
380
-
381
- 5) Create an index.ts file
382
-
383
- Inside your project, create index.ts:
384
-
385
- ```bash
386
- touch index.ts
387
- ```
388
-
389
- 6) In your `packages.json`, inside the script section add this:
390
-
391
- ```json
392
- {
393
- "start": "ts-node index.ts"
394
- }
395
- ```
396
-
397
- Initialize the Flowerbase App
398
-
399
- In index.ts, add:
322
+ Initialize the Flowerbase App in `index.ts`:
400
323
 
401
324
  ```ts
402
325
  import { initialize } from '@flowerforce/flowerbase';
@@ -427,15 +350,31 @@ Ensure the following environment variables are set in your .env file or deployme
427
350
  | `MONGODB_URL` | MongoDB connection URI, including username, password, and database name. | `mongodb+srv://user:pass@cluster.mongodb.net/mydb` |
428
351
  | `JWT_SECRET` | Secret used to sign and verify JWT tokens (choose a strong secret). | `supersecretkey123!` |
429
352
  | `HOST` | The host address the server binds to (usually `0.0.0.0` for public access). | `0.0.0.0` |
353
+ | `API_VERSION` | API version used in client base path. | `v2.0` |
430
354
  | `HTTPS_SCHEMA` | The schema for your server requests (usually `https` or `http`). | `http` |
355
+ | `ENABLE_LOGGER` | Enable Fastify logger (any truthy value). | `true` |
431
356
  | `RESET_PASSWORD_TTL_SECONDS` | Time-to-live for password reset tokens (in seconds). | `3600` |
432
357
  | `AUTH_RATE_LIMIT_WINDOW_MS` | Rate limit window for auth endpoints (in ms). | `900000` |
433
358
  | `AUTH_LOGIN_MAX_ATTEMPTS` | Max login attempts per window. | `10` |
359
+ | `AUTH_REGISTER_MAX_ATTEMPTS` | Max register attempts per window. | `5` |
434
360
  | `AUTH_RESET_MAX_ATTEMPTS` | Max reset requests per window. | `5` |
435
361
  | `REFRESH_TOKEN_TTL_DAYS` | Refresh token time-to-live (in days). | `60` |
362
+ | `ANON_USER_TTL_SECONDS` | Anonymous user time-to-live (in seconds). | `10800` |
436
363
  | `SWAGGER_ENABLED` | Enable Swagger UI and spec routes (disabled by default). | `true` |
437
364
  | `SWAGGER_UI_USER` | Basic Auth username for Swagger UI (optional). | `admin` |
438
365
  | `SWAGGER_UI_PASSWORD` | Basic Auth password for Swagger UI (optional). | `change-me` |
366
+ | `MONIT_ENABLED` | Enable monitoring UI at `/monit`. Must be `true` for monit to run (credentials alone are not enough). | `true` |
367
+ | `MONIT_USER` | Basic Auth username for `/monit`. | `monit` |
368
+ | `MONIT_PASSWORD` | Basic Auth password for `/monit`. | `change-me` |
369
+ | `MONIT_CACHE_HOURS` | Cache duration for monitoring events (hours). | `24` |
370
+ | `MONIT_MAX_EVENTS` | Maximum number of cached monitoring events. | `5000` |
371
+ | `MONIT_CAPTURE_CONSOLE`| Capture console log/warn/error into monitoring events. | `true` |
372
+ | `MONIT_REDACT_ERROR_DETAILS` | Redact error message/stack in monitoring output. | `true` |
373
+ | `MONIT_ALLOWED_IPS` | Comma-separated allowlist for `/monit` (uses `req.ip`). Use `0.0.0.0` or `*` to allow all. | `127.0.0.1,10.0.0.10` |
374
+ | `MONIT_RATE_LIMIT_WINDOW_MS` | Rate limit window for `/monit` (ms). | `60000` |
375
+ | `MONIT_RATE_LIMIT_MAX` | Max requests per window for `/monit`. | `120` |
376
+ | `MONIT_ALLOW_INVOKE` | Allow function invoke from monit UI. | `true` |
377
+ | `MONIT_ALLOW_EDIT` | Allow function code access/override from monit UI. | `true` |
439
378
 
440
379
 
441
380
  Example:
@@ -445,19 +384,42 @@ PORT=3000
445
384
  MONGODB_URL=mongodb+srv://username:password@cluster.mongodb.net/dbname
446
385
  JWT_SECRET=your-jwt-secret
447
386
  HOST=0.0.0.0
387
+ API_VERSION=v2.0
448
388
  HTTPS_SCHEMA=http
389
+ ENABLE_LOGGER=true
449
390
  RESET_PASSWORD_TTL_SECONDS=3600
450
391
  AUTH_RATE_LIMIT_WINDOW_MS=900000
451
392
  AUTH_LOGIN_MAX_ATTEMPTS=10
393
+ AUTH_REGISTER_MAX_ATTEMPTS=5
452
394
  AUTH_RESET_MAX_ATTEMPTS=5
453
395
  REFRESH_TOKEN_TTL_DAYS=60
396
+ ANON_USER_TTL_SECONDS=10800
454
397
  SWAGGER_ENABLED=true
455
398
  SWAGGER_UI_USER=admin
456
399
  SWAGGER_UI_PASSWORD=change-me
400
+ MONIT_ENABLED=true
401
+ MONIT_USER=monit
402
+ MONIT_PASSWORD=change-me
403
+ MONIT_CACHE_HOURS=24
404
+ MONIT_MAX_EVENTS=5000
405
+ MONIT_CAPTURE_CONSOLE=true
406
+ MONIT_REDACT_ERROR_DETAILS=true
407
+ MONIT_ALLOWED_IPS=127.0.0.1,10.0.0.10
408
+ MONIT_RATE_LIMIT_WINDOW_MS=60000
409
+ MONIT_RATE_LIMIT_MAX=120
410
+ MONIT_ALLOW_INVOKE=true
411
+ MONIT_ALLOW_EDIT=true
457
412
  ```
458
413
 
459
414
  🛡️ Note: Never commit .env files to source control. Use a .gitignore file to exclude it.
460
415
 
416
+ ### 🔎 Monitoring (Monit UI)
417
+
418
+ - The monitoring UI lives at `/monit` and is protected by Basic Auth.
419
+ - Monit routes are registered **only** when `MONIT_ENABLED=true` (credentials alone are not enough).
420
+ - If `MONIT_ALLOWED_IPS` is set, only those IPs can reach `/monit` (ensure `req.ip` reflects your proxy setup / `trustProxy`).
421
+ - You can disable **invoke** or **edit** with `MONIT_ALLOW_INVOKE=false` and/or `MONIT_ALLOW_EDIT=false`.
422
+
461
423
 
462
424
  <a id="build"></a>
463
425
  ## 🚀 Build & Deploy the Server
@@ -1 +1 @@
1
- {"version":3,"file":"controller.d.ts","sourceRoot":"","sources":["../../src/auth/controller.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAQzC;;;;GAIG;AACH,wBAAsB,cAAc,CAAC,GAAG,EAAE,eAAe,iBA0JxD"}
1
+ {"version":3,"file":"controller.d.ts","sourceRoot":"","sources":["../../src/auth/controller.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAQzC;;;;GAIG;AACH,wBAAsB,cAAc,CAAC,GAAG,EAAE,eAAe,iBAwKxD"}
@@ -47,7 +47,11 @@ function authController(app) {
47
47
  * @param {import('fastify').FastifyRequest} req - The request object.
48
48
  * @returns {Promise<Object>} A promise resolving with the user's profile data.
49
49
  */
50
- app.get(utils_1.AUTH_ENDPOINTS.PROFILE, function (req) {
50
+ app.get(utils_1.AUTH_ENDPOINTS.PROFILE, {
51
+ schema: {
52
+ tags: ['Auth']
53
+ }
54
+ }, function (req) {
51
55
  return __awaiter(this, void 0, void 0, function* () {
52
56
  if (req.user.typ !== 'access') {
53
57
  throw new Error('Access token required');
@@ -75,7 +79,11 @@ function authController(app) {
75
79
  * @param {import('fastify').FastifyReply} res - The response object.
76
80
  * @returns {Promise<SessionCreatedDto>} A promise resolving with the newly created session data.
77
81
  */
78
- app.post(utils_1.AUTH_ENDPOINTS.SESSION, function (req, res) {
82
+ app.post(utils_1.AUTH_ENDPOINTS.SESSION, {
83
+ schema: {
84
+ tags: ['Auth']
85
+ }
86
+ }, function (req, res) {
79
87
  return __awaiter(this, void 0, void 0, function* () {
80
88
  if (req.user.typ !== 'refresh') {
81
89
  throw new Error(utils_1.AUTH_ERRORS.INVALID_TOKEN);
@@ -110,7 +118,11 @@ function authController(app) {
110
118
  /**
111
119
  * Endpoint to destroy the existing session.
112
120
  */
113
- app.delete(utils_1.AUTH_ENDPOINTS.SESSION, function (req, res) {
121
+ app.delete(utils_1.AUTH_ENDPOINTS.SESSION, {
122
+ schema: {
123
+ tags: ['Auth']
124
+ }
125
+ }, function (req, res) {
114
126
  return __awaiter(this, void 0, void 0, function* () {
115
127
  var _a, _b;
116
128
  const authHeader = req.headers.authorization;
@@ -1 +1 @@
1
- {"version":3,"file":"controller.d.ts","sourceRoot":"","sources":["../../../../src/auth/providers/anon-user/controller.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAOzC;;;;GAIG;AACH,wBAAsB,kBAAkB,CAAC,GAAG,EAAE,eAAe,iBAmE5D"}
1
+ {"version":3,"file":"controller.d.ts","sourceRoot":"","sources":["../../../../src/auth/providers/anon-user/controller.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAOzC;;;;GAIG;AACH,wBAAsB,kBAAkB,CAAC,GAAG,EAAE,eAAe,iBAwE5D"}
@@ -35,7 +35,11 @@ function anonUserController(app) {
35
35
  catch (error) {
36
36
  console.error('Failed to ensure anonymous user TTL index', error);
37
37
  }
38
- app.post(utils_1.AUTH_ENDPOINTS.LOGIN, function () {
38
+ app.post(utils_1.AUTH_ENDPOINTS.LOGIN, {
39
+ schema: {
40
+ tags: ['Auth']
41
+ }
42
+ }, function () {
39
43
  return __awaiter(this, void 0, void 0, function* () {
40
44
  var _a;
41
45
  const anonProvider = (_a = constants_1.AUTH_CONFIG.authProviders) === null || _a === void 0 ? void 0 : _a['anon-user'];
@@ -1,4 +1,5 @@
1
1
  export declare const LOGIN_SCHEMA: {
2
+ tags: string[];
2
3
  body: {
3
4
  type: string;
4
5
  properties: {
@@ -1 +1 @@
1
- {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../../src/auth/providers/custom-function/schema.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwBxB,CAAA"}
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../../src/auth/providers/custom-function/schema.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuBxB,CAAA"}
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.LOGIN_SCHEMA = void 0;
4
4
  exports.LOGIN_SCHEMA = {
5
+ tags: ['Auth'],
5
6
  body: {
6
7
  type: 'object',
7
8
  properties: {
@@ -1,4 +1,5 @@
1
1
  export declare const LOGIN_SCHEMA: {
2
+ tags: string[];
2
3
  body: {
3
4
  type: string;
4
5
  properties: {
@@ -18,6 +19,7 @@ export declare const LOGIN_SCHEMA: {
18
19
  };
19
20
  };
20
21
  export declare const RESET_SEND_SCHEMA: {
22
+ tags: string[];
21
23
  body: {
22
24
  type: string;
23
25
  properties: {
@@ -32,6 +34,7 @@ export declare const RESET_SEND_SCHEMA: {
32
34
  };
33
35
  };
34
36
  export declare const RESET_CALL_SCHEMA: {
37
+ tags: string[];
35
38
  body: {
36
39
  type: string;
37
40
  properties: {
@@ -54,6 +57,7 @@ export declare const RESET_CALL_SCHEMA: {
54
57
  };
55
58
  };
56
59
  export declare const CONFIRM_RESET_SCHEMA: {
60
+ tags: string[];
57
61
  body: {
58
62
  type: string;
59
63
  properties: {
@@ -73,6 +77,7 @@ export declare const CONFIRM_RESET_SCHEMA: {
73
77
  };
74
78
  };
75
79
  export declare const CONFIRM_USER_SCHEMA: {
80
+ tags: string[];
76
81
  body: {
77
82
  type: string;
78
83
  properties: {
@@ -87,6 +92,7 @@ export declare const CONFIRM_USER_SCHEMA: {
87
92
  };
88
93
  };
89
94
  export declare const RESET_SCHEMA: {
95
+ tags: string[];
90
96
  body: {
91
97
  type: string;
92
98
  properties: {
@@ -101,6 +107,7 @@ export declare const RESET_SCHEMA: {
101
107
  };
102
108
  };
103
109
  export declare const REGISTRATION_SCHEMA: {
110
+ tags: string[];
104
111
  body: {
105
112
  type: string;
106
113
  properties: {
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/auth/utils.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;CAcxB,CAAA;AAED,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;CAa7B,CAAA;AAED,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;CAe7B,CAAA;AAED,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;CAUhC,CAAA;AAED,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;CAS/B,CAAA;AAED,eAAO,MAAM,YAAY;;;;;;;;;;;;;CAAoB,CAAA;AAE7C,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;CAc/B,CAAA;AAED,oBAAY,cAAc;IACxB,KAAK,WAAW;IAChB,YAAY,cAAc;IAC1B,OAAO,aAAa;IACpB,OAAO,aAAa;IACpB,OAAO,aAAa;IACpB,KAAK,gBAAgB;IACrB,UAAU,gBAAgB;IAC1B,aAAa,WAAW;IACxB,UAAU,sBAAsB;CACjC;AAED,oBAAY,WAAW;IACrB,mBAAmB,wBAAwB;IAC3C,aAAa,mCAAmC;IAChD,oBAAoB,sCAAsC;IAC1D,sBAAsB,2BAA2B;IACjD,kBAAkB,uBAAuB;CAC1C;AAED,MAAM,WAAW,UAAU;IACzB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,SAAS,EAAE,MAAM,CAAA;IACjB,gBAAgB,EAAE,aAAa,CAAA;IAC/B,iBAAiB,EAAE,cAAc,CAAA;IACjC,WAAW,CAAC,EAAE,QAAQ,CAAA;CACvB;AAED,UAAU,MAAM;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,OAAO,CAAA;CAClB;AACD,UAAU,aAAa;IACrB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,OAAO,CAAA;IACjB,MAAM,EAAE,MAAM,CAAA;CACf;AAED,UAAU,cAAc;IACtB,IAAI,EAAE,iBAAiB,CAAC;IACxB,IAAI,EAAE,iBAAiB,CAAC;IACxB,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE;QACN,kBAAkB,EAAE,MAAM,CAAA;KAC3B,CAAA;CACF;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,WAAW,CAAA;IACjB,IAAI,EAAE,WAAW,CAAA;IACjB,QAAQ,EAAE,OAAO,CAAA;CAClB;AAED,MAAM,WAAW,MAAM;IACrB,WAAW,EAAE,OAAO,CAAA;IACpB,wBAAwB,CAAC,EAAE,MAAM,CAAA;IACjC,iBAAiB,EAAE,MAAM,CAAA;IACzB,gBAAgB,EAAE,MAAM,CAAA;IACxB,uBAAuB,EAAE,OAAO,CAAA;IAChC,gBAAgB,EAAE,OAAO,CAAA;CAC1B;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,OAAO,CAAA;IAChB,kBAAkB,EAAE,MAAM,CAAA;IAC1B,aAAa,EAAE,MAAM,CAAA;IACrB,eAAe,EAAE,MAAM,CAAA;IACvB,aAAa,EAAE,MAAM,CAAA;IACrB,8BAA8B,EAAE,MAAM,CAAA;CACvC;AAMD;;;GAGG;AACH,eAAO,MAAM,cAAc,QAAO,UAuCjC,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,kBAAkB,QAAO,oBAarC,CAAA;AAED,eAAO,MAAM,gBAAgB,GAAI,eAAW,WAG3C,CAAA"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/auth/utils.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;CAexB,CAAA;AAED,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;CAc7B,CAAA;AAED,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;CAgB7B,CAAA;AAED,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;CAWhC,CAAA;AAED,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;CAU/B,CAAA;AAED,eAAO,MAAM,YAAY;;;;;;;;;;;;;;CAAoB,CAAA;AAE7C,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;CAe/B,CAAA;AAED,oBAAY,cAAc;IACxB,KAAK,WAAW;IAChB,YAAY,cAAc;IAC1B,OAAO,aAAa;IACpB,OAAO,aAAa;IACpB,OAAO,aAAa;IACpB,KAAK,gBAAgB;IACrB,UAAU,gBAAgB;IAC1B,aAAa,WAAW;IACxB,UAAU,sBAAsB;CACjC;AAED,oBAAY,WAAW;IACrB,mBAAmB,wBAAwB;IAC3C,aAAa,mCAAmC;IAChD,oBAAoB,sCAAsC;IAC1D,sBAAsB,2BAA2B;IACjD,kBAAkB,uBAAuB;CAC1C;AAED,MAAM,WAAW,UAAU;IACzB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,SAAS,EAAE,MAAM,CAAA;IACjB,gBAAgB,EAAE,aAAa,CAAA;IAC/B,iBAAiB,EAAE,cAAc,CAAA;IACjC,WAAW,CAAC,EAAE,QAAQ,CAAA;CACvB;AAED,UAAU,MAAM;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,OAAO,CAAA;CAClB;AACD,UAAU,aAAa;IACrB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,OAAO,CAAA;IACjB,MAAM,EAAE,MAAM,CAAA;CACf;AAED,UAAU,cAAc;IACtB,IAAI,EAAE,iBAAiB,CAAC;IACxB,IAAI,EAAE,iBAAiB,CAAC;IACxB,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE;QACN,kBAAkB,EAAE,MAAM,CAAA;KAC3B,CAAA;CACF;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,WAAW,CAAA;IACjB,IAAI,EAAE,WAAW,CAAA;IACjB,QAAQ,EAAE,OAAO,CAAA;CAClB;AAED,MAAM,WAAW,MAAM;IACrB,WAAW,EAAE,OAAO,CAAA;IACpB,wBAAwB,CAAC,EAAE,MAAM,CAAA;IACjC,iBAAiB,EAAE,MAAM,CAAA;IACzB,gBAAgB,EAAE,MAAM,CAAA;IACxB,uBAAuB,EAAE,OAAO,CAAA;IAChC,gBAAgB,EAAE,OAAO,CAAA;CAC1B;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,OAAO,CAAA;IAChB,kBAAkB,EAAE,MAAM,CAAA;IAC1B,aAAa,EAAE,MAAM,CAAA;IACrB,eAAe,EAAE,MAAM,CAAA;IACvB,aAAa,EAAE,MAAM,CAAA;IACrB,8BAA8B,EAAE,MAAM,CAAA;CACvC;AAMD;;;GAGG;AACH,eAAO,MAAM,cAAc,QAAO,UAuCjC,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,kBAAkB,QAAO,oBAarC,CAAA;AAED,eAAO,MAAM,gBAAgB,GAAI,eAAW,WAG3C,CAAA"}
@@ -9,6 +9,7 @@ const fs_1 = __importDefault(require("fs"));
9
9
  const path_1 = __importDefault(require("path"));
10
10
  const CHARSET = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()-_=+[]{};:,.<>?";
11
11
  exports.LOGIN_SCHEMA = {
12
+ tags: ['Auth'],
12
13
  body: {
13
14
  type: 'object',
14
15
  properties: {
@@ -24,6 +25,7 @@ exports.LOGIN_SCHEMA = {
24
25
  }
25
26
  };
26
27
  exports.RESET_SEND_SCHEMA = {
28
+ tags: ['Auth'],
27
29
  body: {
28
30
  type: 'object',
29
31
  properties: {
@@ -38,6 +40,7 @@ exports.RESET_SEND_SCHEMA = {
38
40
  }
39
41
  };
40
42
  exports.RESET_CALL_SCHEMA = {
43
+ tags: ['Auth'],
41
44
  body: {
42
45
  type: 'object',
43
46
  properties: {
@@ -54,6 +57,7 @@ exports.RESET_CALL_SCHEMA = {
54
57
  }
55
58
  };
56
59
  exports.CONFIRM_RESET_SCHEMA = {
60
+ tags: ['Auth'],
57
61
  body: {
58
62
  type: 'object',
59
63
  properties: {
@@ -65,6 +69,7 @@ exports.CONFIRM_RESET_SCHEMA = {
65
69
  }
66
70
  };
67
71
  exports.CONFIRM_USER_SCHEMA = {
72
+ tags: ['Auth'],
68
73
  body: {
69
74
  type: 'object',
70
75
  properties: {
@@ -76,6 +81,7 @@ exports.CONFIRM_USER_SCHEMA = {
76
81
  };
77
82
  exports.RESET_SCHEMA = exports.RESET_SEND_SCHEMA;
78
83
  exports.REGISTRATION_SCHEMA = {
84
+ tags: ['Auth'],
79
85
  body: {
80
86
  type: 'object',
81
87
  properties: {
@@ -17,6 +17,18 @@ export declare const DEFAULT_CONFIG: {
17
17
  SWAGGER_ENABLED: boolean;
18
18
  SWAGGER_UI_USER: string;
19
19
  SWAGGER_UI_PASSWORD: string;
20
+ MONIT_ENABLED: boolean;
21
+ MONIT_USER: string;
22
+ MONIT_PASSWORD: string;
23
+ MONIT_CACHE_HOURS: number;
24
+ MONIT_MAX_EVENTS: number;
25
+ MONIT_CAPTURE_CONSOLE: boolean;
26
+ MONIT_REDACT_ERROR_DETAILS: boolean;
27
+ MONIT_ALLOWED_IPS: string[];
28
+ MONIT_RATE_LIMIT_WINDOW_MS: number;
29
+ MONIT_RATE_LIMIT_MAX: number;
30
+ MONIT_ALLOW_INVOKE: boolean;
31
+ MONIT_ALLOW_EDIT: boolean;
20
32
  CORS_OPTIONS: {
21
33
  origin: string;
22
34
  methods: ALLOWED_METHODS[];
@@ -1 +1 @@
1
- {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,IAAI,CAAA;AAepC,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;iBAoBsB,eAAe,EAAE;;CAEjE,CAAA;AACD,eAAO,MAAM,WAAW,QAA8C,CAAA;AACtE,eAAO,MAAM,YAAY,QAA8B,CAAA;AACvD,eAAO,MAAM,OAAO,QAAgB,CAAA;AAEpC,KAAK,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE;IAAE,QAAQ,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC,CAAA;AAE7E,eAAO,MAAM,WAAW;;;;;;;mBAOqB,aAAa;;;;;;;;;CAOzD,CAAA;AAID,eAAO,MAAM,SAAS;;;CAGrB,CAAA"}
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,IAAI,CAAA;AAsBpC,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAmCsB,eAAe,EAAE;;CAEjE,CAAA;AACD,eAAO,MAAM,WAAW,QAA8C,CAAA;AACtE,eAAO,MAAM,YAAY,QAA8B,CAAA;AACvD,eAAO,MAAM,OAAO,QAAgB,CAAA;AAEpC,KAAK,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE;IAAE,QAAQ,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC,CAAA;AAE7E,eAAO,MAAM,WAAW;;;;;;;mBAOqB,aAAa;;;;;;;;;CAOzD,CAAA;AAID,eAAO,MAAM,SAAS;;;CAGrB,CAAA"}
package/dist/constants.js CHANGED
@@ -10,7 +10,7 @@ var __rest = (this && this.__rest) || function (s, e) {
10
10
  }
11
11
  return t;
12
12
  };
13
- var _a, _b, _c;
13
+ var _a, _b, _c, _d, _e, _f, _g, _h;
14
14
  Object.defineProperty(exports, "__esModule", { value: true });
15
15
  exports.S3_CONFIG = exports.AUTH_CONFIG = exports.DB_NAME = exports.HTTPS_SCHEMA = exports.API_VERSION = exports.DEFAULT_CONFIG = void 0;
16
16
  const utils_1 = require("./auth/utils");
@@ -19,8 +19,14 @@ const parseBoolean = (value) => {
19
19
  return false;
20
20
  return ['1', 'true', 'yes', 'on'].includes(value.toLowerCase());
21
21
  };
22
+ const monitUser = process.env.MONIT_USER || process.env.SWAGGER_UI_USER || '';
23
+ const monitPassword = process.env.MONIT_PASSWORD || process.env.SWAGGER_UI_PASSWORD || '';
24
+ const monitEnabledEnv = process.env.MONIT_ENABLED;
25
+ const monitEnabled = typeof monitEnabledEnv === 'string'
26
+ ? parseBoolean(monitEnabledEnv)
27
+ : false;
22
28
  const { database_name, collection_name = 'users', user_id_field = 'id', on_user_creation_function_name } = (0, utils_1.loadCustomUserData)();
23
- const _d = (0, utils_1.loadAuthConfig)(), { auth_collection = 'auth_users' } = _d, configuration = __rest(_d, ["auth_collection"]);
29
+ const _j = (0, utils_1.loadAuthConfig)(), { auth_collection = 'auth_users' } = _j, configuration = __rest(_j, ["auth_collection"]);
24
30
  exports.DEFAULT_CONFIG = {
25
31
  PORT: Number(process.env.PORT) || 3000,
26
32
  MONGODB_URL: process.env.MONGODB_URL || '',
@@ -39,6 +45,21 @@ exports.DEFAULT_CONFIG = {
39
45
  SWAGGER_ENABLED: parseBoolean(process.env.SWAGGER_ENABLED),
40
46
  SWAGGER_UI_USER: process.env.SWAGGER_UI_USER || '',
41
47
  SWAGGER_UI_PASSWORD: process.env.SWAGGER_UI_PASSWORD || '',
48
+ MONIT_ENABLED: monitEnabled,
49
+ MONIT_USER: monitUser,
50
+ MONIT_PASSWORD: monitPassword,
51
+ MONIT_CACHE_HOURS: Number(process.env.MONIT_CACHE_HOURS) || 24,
52
+ MONIT_MAX_EVENTS: Number(process.env.MONIT_MAX_EVENTS) || 5000,
53
+ MONIT_CAPTURE_CONSOLE: parseBoolean((_a = process.env.MONIT_CAPTURE_CONSOLE) !== null && _a !== void 0 ? _a : 'true'),
54
+ MONIT_REDACT_ERROR_DETAILS: parseBoolean((_b = process.env.MONIT_REDACT_ERROR_DETAILS) !== null && _b !== void 0 ? _b : 'true'),
55
+ MONIT_ALLOWED_IPS: ((_c = process.env.MONIT_ALLOWED_IPS) !== null && _c !== void 0 ? _c : '')
56
+ .split(',')
57
+ .map((item) => item.trim())
58
+ .filter(Boolean),
59
+ MONIT_RATE_LIMIT_WINDOW_MS: Number(process.env.MONIT_RATE_LIMIT_WINDOW_MS) || 60000,
60
+ MONIT_RATE_LIMIT_MAX: Number(process.env.MONIT_RATE_LIMIT_MAX) || 120,
61
+ MONIT_ALLOW_INVOKE: parseBoolean((_d = process.env.MONIT_ALLOW_INVOKE) !== null && _d !== void 0 ? _d : 'true'),
62
+ MONIT_ALLOW_EDIT: parseBoolean((_e = process.env.MONIT_ALLOW_EDIT) !== null && _e !== void 0 ? _e : 'true'),
42
63
  CORS_OPTIONS: {
43
64
  origin: "*",
44
65
  methods: ["GET", "POST", "PUT", "DELETE"]
@@ -53,13 +74,13 @@ exports.AUTH_CONFIG = {
53
74
  userCollection: collection_name,
54
75
  resetPasswordCollection: 'reset_password_requests',
55
76
  refreshTokensCollection: 'auth_refresh_tokens',
56
- resetPasswordConfig: (_a = configuration['local-userpass']) === null || _a === void 0 ? void 0 : _a.config,
57
- localUserpassConfig: (_b = configuration['local-userpass']) === null || _b === void 0 ? void 0 : _b.config,
77
+ resetPasswordConfig: (_f = configuration['local-userpass']) === null || _f === void 0 ? void 0 : _f.config,
78
+ localUserpassConfig: (_g = configuration['local-userpass']) === null || _g === void 0 ? void 0 : _g.config,
58
79
  authProviders: configuration,
59
80
  user_id_field,
60
81
  on_user_creation_function_name,
61
82
  providers: {
62
- "custom-function": (_c = configuration['custom-function']) === null || _c === void 0 ? void 0 : _c.config,
83
+ "custom-function": (_h = configuration['custom-function']) === null || _h === void 0 ? void 0 : _h.config,
63
84
  "anon-user": configuration['anon-user']
64
85
  }
65
86
  };
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/features/endpoints/utils.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAKvE,OAAO,EAAE,SAAS,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAA;AAE9D;;;GAGG;AACH,eAAO,MAAM,aAAa,GAAU,gBAAuB,KAAG,OAAO,CAAC,SAAS,CA+B9E,CAAA;AAED;;;;;;GAMG;AACH,eAAO,MAAM,gBAAgB,GAC3B,KAAK,eAAe,EACpB,SAAS,UAAU,CAAC,OAAO,eAAe,CAAC,EAC3C,UAAU,MAAM;;;;;;;CAgChB,CAAA;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,eAAe,GAAI,oDAK7B,qBAAqB,MACR,KAAK,cAAc,EAAE,KAAK,YAAY,gBA4CrD,CAAA"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/features/endpoints/utils.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAKvE,OAAO,EAAE,SAAS,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAA;AAE9D;;;GAGG;AACH,eAAO,MAAM,aAAa,GAAU,gBAAuB,KAAG,OAAO,CAAC,SAAS,CA+B9E,CAAA;AAED;;;;;;GAMG;AACH,eAAO,MAAM,gBAAgB,GAC3B,KAAK,eAAe,EACpB,SAAS,UAAU,CAAC,OAAO,eAAe,CAAC,EAC3C,UAAU,MAAM;;;;;;;CAkDhB,CAAA;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,eAAe,GAAI,oDAK7B,qBAAqB,MACR,KAAK,cAAc,EAAE,KAAK,YAAY,gBA4CrD,CAAA"}
@@ -66,31 +66,49 @@ const getMethodsConfig = (app, handler, endpoint) => ({
66
66
  config: {
67
67
  rawBody: true
68
68
  },
69
+ schema: {
70
+ tags: ['Endpoints']
71
+ }
69
72
  }, handler),
70
73
  GET: () => app.get(endpoint, {
71
74
  config: {
72
75
  rawBody: true
73
76
  },
77
+ schema: {
78
+ tags: ['Endpoints']
79
+ }
74
80
  }, handler),
75
81
  POST: () => app.post(endpoint, {
76
82
  config: {
77
83
  rawBody: true
78
84
  },
85
+ schema: {
86
+ tags: ['Endpoints']
87
+ }
79
88
  }, handler),
80
89
  PUT: () => app.put(endpoint, {
81
90
  config: {
82
91
  rawBody: true
83
92
  },
93
+ schema: {
94
+ tags: ['Endpoints']
95
+ }
84
96
  }, handler),
85
97
  PATCH: () => app.patch(endpoint, {
86
98
  config: {
87
99
  rawBody: true
88
100
  },
101
+ schema: {
102
+ tags: ['Endpoints']
103
+ }
89
104
  }, handler),
90
105
  DELETE: () => app.delete(endpoint, {
91
106
  config: {
92
107
  rawBody: true
93
108
  },
109
+ schema: {
110
+ tags: ['Endpoints']
111
+ }
94
112
  }, handler)
95
113
  });
96
114
  exports.getMethodsConfig = getMethodsConfig;
@@ -1 +1 @@
1
- {"version":3,"file":"controller.d.ts","sourceRoot":"","sources":["../../../src/features/functions/controller.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AA2ChD;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,EAAE,kBA0JjC,CAAA"}
1
+ {"version":3,"file":"controller.d.ts","sourceRoot":"","sources":["../../../src/features/functions/controller.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AA2ChD;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,EAAE,kBAkKjC,CAAA"}
@@ -55,7 +55,11 @@ const isReturnedError = (value) => {
55
55
  const functionsController = (app_1, _a) => __awaiter(void 0, [app_1, _a], void 0, function* (app, { functionsList, rules }) {
56
56
  app.addHook('preHandler', app.jwtAuthentication);
57
57
  const streams = {};
58
- app.post('/call', (req, res) => __awaiter(void 0, void 0, void 0, function* () {
58
+ app.post('/call', {
59
+ schema: {
60
+ tags: ['Functions']
61
+ }
62
+ }, (req, res) => __awaiter(void 0, void 0, void 0, function* () {
59
63
  const user = getRequestUser(req);
60
64
  if (!user || user.typ !== 'access') {
61
65
  throw new Error('Access token required');
@@ -121,7 +125,11 @@ const functionsController = (app_1, _a) => __awaiter(void 0, [app_1, _a], void 0
121
125
  });
122
126
  }
123
127
  }));
124
- app.get('/call', (req, res) => __awaiter(void 0, void 0, void 0, function* () {
128
+ app.get('/call', {
129
+ schema: {
130
+ tags: ['Functions']
131
+ }
132
+ }, (req, res) => __awaiter(void 0, void 0, void 0, function* () {
125
133
  const { query } = req;
126
134
  const user = getRequestUser(req);
127
135
  if (!user || user.typ !== 'access') {
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,CAAA;AActB,cAAc,SAAS,CAAA;AAGvB,MAAM,MAAM,eAAe,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,CAAA;AAE/D,MAAM,MAAM,UAAU,GAAG;IACvB,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,eAAe,EAAE,CAAA;CAC3B,CAAA;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC7B,SAAS,EAAE,MAAM,CAAA;IACjB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,UAAU,CAAC,EAAE,UAAU,CAAA;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB,CAAA;AAED;;;;;;;GAOG;AACH,wBAAsB,UAAU,CAAC,EAC/B,SAAS,EACT,IAA0B,EAC1B,SAAqC,EACrC,IAA0B,EAC1B,UAAuC,EACvC,UAAwC,EACxC,QAAQ,EACT,EAAE,gBAAgB,iBA+GlB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,CAAA;AActB,cAAc,SAAS,CAAA;AAGvB,MAAM,MAAM,eAAe,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,CAAA;AAE/D,MAAM,MAAM,UAAU,GAAG;IACvB,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,eAAe,EAAE,CAAA;CAC3B,CAAA;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC7B,SAAS,EAAE,MAAM,CAAA;IACjB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,UAAU,CAAC,EAAE,UAAU,CAAA;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB,CAAA;AAED;;;;;;;GAOG;AACH,wBAAsB,UAAU,CAAC,EAC/B,SAAS,EACT,IAA0B,EAC1B,SAAqC,EACrC,IAA0B,EAC1B,UAAuC,EACvC,UAAwC,EACxC,QAAQ,EACT,EAAE,gBAAgB,iBAwHlB"}
package/dist/index.js CHANGED
@@ -148,7 +148,17 @@ function initialize(_a) {
148
148
  },
149
149
  staticCSP: true,
150
150
  transformStaticCSP: (header) => header,
151
- transformSpecification: (swaggerObject) => { return swaggerObject; },
151
+ transformSpecification: (swaggerObject) => {
152
+ if (!swaggerObject || !swaggerObject.paths)
153
+ return swaggerObject;
154
+ const filteredPaths = Object.assign({}, swaggerObject.paths);
155
+ Object.keys(filteredPaths).forEach((path) => {
156
+ if (path === '/monit' || path.startsWith('/monit/')) {
157
+ delete filteredPaths[path];
158
+ }
159
+ });
160
+ return Object.assign(Object.assign({}, swaggerObject), { paths: filteredPaths });
161
+ },
152
162
  transformSpecificationClone: true
153
163
  });
154
164
  }
@@ -0,0 +1,7 @@
1
+ import '@fastify/websocket';
2
+ import type { FastifyInstance } from 'fastify';
3
+ declare const createMonitoringPlugin: (app: FastifyInstance, opts?: {
4
+ basePath?: string;
5
+ }) => Promise<void>;
6
+ export default createMonitoringPlugin;
7
+ //# sourceMappingURL=plugin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../src/monitoring/plugin.ts"],"names":[],"mappings":"AAEA,OAAO,oBAAoB,CAAA;AAG3B,OAAO,KAAK,EAAE,eAAe,EAAgC,MAAM,SAAS,CAAA;AAslB5E,QAAA,MAAM,sBAAsB,QACrB,eAAe,SACd;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,kBAw5BH,CAAA;AAE1B,eAAe,sBAAsB,CAAA"}