@venizia/ignis-docs 0.2.1-0 → 0.2.1-1
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/content/best-practices/architectural-patterns.md +3 -3
- package/content/best-practices/code-style-standards/naming-conventions.md +1 -1
- package/content/best-practices/contribution-workflow.md +2 -2
- package/content/best-practices/error-handling.md +94 -89
- package/content/best-practices/security-guidelines.md +5 -5
- package/content/extensions/components/api-reference.md +22 -21
- package/content/extensions/components/authentication/api.md +64 -28
- package/content/extensions/components/authentication/errors.md +19 -5
- package/content/extensions/components/authentication/index.md +19 -18
- package/content/extensions/components/authentication/usage.md +55 -30
- package/content/extensions/components/authorization/api.md +351 -84
- package/content/extensions/components/authorization/errors.md +51 -17
- package/content/extensions/components/authorization/getting-started.md +227 -0
- package/content/extensions/components/authorization/index.md +24 -16
- package/content/extensions/components/authorization/usage.md +45 -21
- package/content/extensions/components/health-check.md +15 -9
- package/content/extensions/components/index.md +24 -90
- package/content/extensions/components/mail/api.md +105 -54
- package/content/extensions/components/mail/errors.md +12 -10
- package/content/extensions/components/mail/index.md +32 -13
- package/content/extensions/components/mail/usage.md +26 -18
- package/content/extensions/components/request-tracker.md +18 -14
- package/content/extensions/components/socket-io/api.md +377 -882
- package/content/extensions/components/socket-io/errors.md +49 -51
- package/content/extensions/components/socket-io/index.md +72 -88
- package/content/extensions/components/socket-io/usage.md +107 -117
- package/content/extensions/components/static-asset/api.md +83 -31
- package/content/extensions/components/static-asset/errors.md +18 -7
- package/content/extensions/components/static-asset/index.md +18 -11
- package/content/extensions/components/static-asset/usage.md +11 -6
- package/content/extensions/components/template/index.md +3 -3
- package/content/extensions/components/websocket/api.md +58 -27
- package/content/extensions/components/websocket/errors.md +3 -3
- package/content/extensions/components/websocket/index.md +8 -7
- package/content/extensions/components/websocket/usage.md +21 -8
- package/content/extensions/helpers/cron/index.md +8 -7
- package/content/extensions/helpers/crypto/index.md +16 -8
- package/content/extensions/helpers/crypto/reference.md +96 -24
- package/content/extensions/helpers/env/index.md +14 -10
- package/content/extensions/helpers/error/index.md +99 -23
- package/content/extensions/helpers/index.md +61 -47
- package/content/extensions/helpers/inversion/index.md +23 -6
- package/content/extensions/helpers/inversion/reference.md +30 -22
- package/content/extensions/helpers/kafka/admin.md +3 -2
- package/content/extensions/helpers/kafka/compile-binary.md +69 -44
- package/content/extensions/helpers/kafka/consumer.md +24 -21
- package/content/extensions/helpers/kafka/examples.md +22 -234
- package/content/extensions/helpers/kafka/index.md +30 -62
- package/content/extensions/helpers/kafka/producer.md +31 -26
- package/content/extensions/helpers/kafka/schema-registry.md +19 -14
- package/content/extensions/helpers/logger/hf-logger.md +49 -22
- package/content/extensions/helpers/logger/index.md +37 -12
- package/content/extensions/helpers/logger/pino.md +31 -11
- package/content/extensions/helpers/logger/reference.md +243 -52
- package/content/extensions/helpers/network/api.md +65 -30
- package/content/extensions/helpers/network/index.md +32 -11
- package/content/extensions/helpers/queue/index.md +17 -6
- package/content/extensions/helpers/queue/reference.md +52 -25
- package/content/extensions/helpers/redis/index.md +29 -11
- package/content/extensions/helpers/redis/reference.md +85 -28
- package/content/extensions/helpers/secrets/index.md +82 -12
- package/content/extensions/helpers/socket-io/api.md +40 -21
- package/content/extensions/helpers/socket-io/index.md +26 -10
- package/content/extensions/helpers/storage/api.md +42 -24
- package/content/extensions/helpers/storage/index.md +10 -7
- package/content/extensions/helpers/types/index.md +20 -7
- package/content/extensions/helpers/types/reference.md +53 -14
- package/content/extensions/helpers/uid/index.md +166 -10
- package/content/extensions/helpers/websocket/api.md +52 -13
- package/content/extensions/helpers/websocket/index.md +7 -4
- package/content/extensions/helpers/worker-thread/index.md +9 -5
- package/content/extensions/helpers/worker-thread/reference.md +20 -20
- package/content/extensions/index.md +38 -39
- package/content/extensions/src-details/mcp-server.md +96 -548
- package/content/guides/core-concepts/persistent/datasources.md +2 -2
- package/content/guides/core-concepts/persistent/index.md +5 -1
- package/content/guides/core-concepts/persistent/pglite.md +218 -0
- package/content/guides/core-concepts/persistent/postgres-drivers.md +21 -15
- package/content/guides/core-concepts/persistent/search-meilisearch.md +22 -12
- package/content/guides/core-concepts/persistent/search-typesense.md +26 -14
- package/content/guides/core-concepts/persistent/sqlite.md +296 -0
- package/content/guides/core-concepts/persistent/transactions.md +12 -11
- package/content/guides/get-started/5-minute-quickstart.md +59 -206
- package/content/guides/get-started/philosophy.md +135 -670
- package/content/guides/get-started/setup.md +53 -74
- package/content/guides/migrations/redis-helpers-migration.md +4 -3
- package/content/guides/migrations/scoped-rbac-migration.md +5 -5
- package/content/guides/migrations/unified-connectors-migration.md +7 -6
- package/content/guides/tutorials/realtime-chat.md +1 -1
- package/content/references/base/application.md +63 -21
- package/content/references/base/components.md +3 -3
- package/content/references/base/connectors.md +14 -14
- package/content/references/base/controllers.md +12 -12
- package/content/references/base/datasources-reference.md +32 -31
- package/content/references/base/datasources.md +6 -6
- package/content/references/base/dependency-injection.md +12 -11
- package/content/references/base/filter-system/application-usage.md +54 -30
- package/content/references/base/filter-system/array-operators.md +24 -46
- package/content/references/base/filter-system/comparison-operators.md +47 -67
- package/content/references/base/filter-system/default-filter.md +59 -53
- package/content/references/base/filter-system/fields-order-pagination.md +92 -146
- package/content/references/base/filter-system/index.md +25 -13
- package/content/references/base/filter-system/json-filtering.md +45 -184
- package/content/references/base/filter-system/list-operators.md +23 -53
- package/content/references/base/filter-system/logical-operators.md +63 -121
- package/content/references/base/filter-system/null-operators.md +34 -104
- package/content/references/base/filter-system/pattern-matching.md +40 -55
- package/content/references/base/filter-system/quick-reference.md +86 -198
- package/content/references/base/filter-system/range-operators.md +18 -46
- package/content/references/base/filter-system/tips.md +6 -6
- package/content/references/base/filter-system/use-cases.md +33 -15
- package/content/references/base/grpc-controllers.md +53 -17
- package/content/references/base/index.md +5 -3
- package/content/references/base/middlewares.md +11 -10
- package/content/references/base/models-reference.md +17 -17
- package/content/references/base/models.md +4 -3
- package/content/references/base/providers.md +8 -8
- package/content/references/base/repositories/advanced.md +224 -326
- package/content/references/base/repositories/index.md +19 -6
- package/content/references/base/repositories/mixins.md +5 -5
- package/content/references/base/repositories/relations.md +160 -293
- package/content/references/base/repositories/soft-deletable.md +16 -6
- package/content/references/base/secrets.md +17 -13
- package/content/references/base/services.md +6 -4
- package/content/references/configuration/environment-variables.md +31 -23
- package/content/references/configuration/index.md +6 -4
- package/content/references/index.md +1 -1
- package/content/references/utilities/duration.md +85 -0
- package/content/references/utilities/index.md +5 -1
- package/content/references/utilities/jsx-reference.md +11 -11
- package/content/references/utilities/jsx.md +2 -2
- package/content/references/utilities/module.md +78 -25
- package/content/references/utilities/request.md +2 -1
- package/content/references/utilities/retry.md +139 -0
- package/content/references/utilities/schema.md +2 -2
- package/content/references/utilities/statuses-reference.md +4 -4
- package/content/references/utilities/statuses.md +5 -5
- package/dist/mcp-server/index.js +0 -0
- package/dist/mcp-server/tools/github/list-project-files.tool.d.ts +1 -1
- package/dist/mcp-server/tools/github/list-project-files.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/github/list-project-files.tool.js +3 -3
- package/dist/mcp-server/tools/github/search-code.tool.js +1 -1
- package/dist/mcp-server/tools/github/verify-dependencies.tool.js +1 -1
- package/dist/mcp-server/tools/github/view-source-file.tool.js +1 -1
- package/package.json +17 -16
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Mail
|
|
1
|
+
# Mail - Usage & Examples
|
|
2
2
|
|
|
3
3
|
> Practical examples for sending emails, using templates, queue executors, and verification generators.
|
|
4
4
|
|
|
@@ -72,7 +72,7 @@ async sendBulkNotifications(users: Array<{ email: string; name: string }>) {
|
|
|
72
72
|
|
|
73
73
|
### Message validation
|
|
74
74
|
|
|
75
|
-
`MailService.validateMessage()` runs before every send
|
|
75
|
+
`MailService.validateMessage()` runs before every send. It throws immediately - before the transport is ever called - if any of these hold:
|
|
76
76
|
|
|
77
77
|
| Condition | Error code | Message |
|
|
78
78
|
|-----------|-----------|---------|
|
|
@@ -144,19 +144,19 @@ export class NotificationService extends BaseService {
|
|
|
144
144
|
}
|
|
145
145
|
```
|
|
146
146
|
|
|
147
|
-
- **Subject resolution order.** `options.subject`
|
|
148
|
-
- **`sendTemplate()` requires the template engine binding.** It throws `INVALID_CONFIGURATION` ("Template engine not configured") if `MailKeys.MAIL_TEMPLATE_ENGINE` was never injected
|
|
147
|
+
- **Subject resolution order.** `options.subject` wins if you pass it. Otherwise the template's own `subject` wins, rendered through the same engine. If neither is set, the subject falls back to the literal `'No Subject'`.
|
|
148
|
+
- **`sendTemplate()` requires the template engine binding.** It throws `INVALID_CONFIGURATION` ("Template engine not configured") if `MailKeys.MAIL_TEMPLATE_ENGINE` was never injected. The constructor parameter is `isOptional: true`, so a service still compiles without it - but the first `sendTemplate()` call then fails.
|
|
149
149
|
|
|
150
150
|
### How rendering works
|
|
151
151
|
|
|
152
|
-
`TemplateEngineService` keeps templates in an in-memory `Map<string, ITemplate
|
|
152
|
+
`TemplateEngineService` keeps templates in an in-memory `Map<string, ITemplate>`. It substitutes <code v-pre>{{variable}}</code> placeholders using the regex `/\{\{(\s*[\w.]+\s*)\}\}/g`.
|
|
153
153
|
|
|
154
154
|
- **Nested lookup.** A key is trimmed, then resolved by splitting on `.` and walking the data object (`user.profile.name`).
|
|
155
|
-
- **Missing values are preserved, not blanked.** If a resolved value is `undefined` or `null`, the original <code v-pre>{{placeholder}}</code> text stays in the output and a warning is logged
|
|
156
|
-
- **String coercion.**
|
|
155
|
+
- **Missing values are preserved, not blanked.** If a resolved value is `undefined` or `null`, the original <code v-pre>{{placeholder}}</code> text stays in the output, and a warning is logged. The engine never replaces it with an empty string.
|
|
156
|
+
- **String coercion.** The engine converts a resolved value with `String(value)`.
|
|
157
157
|
|
|
158
158
|
> [!IMPORTANT]
|
|
159
|
-
> Missing template variables are **not** replaced with empty strings. This makes debugging easier
|
|
159
|
+
> Missing template variables are **not** replaced with empty strings. This makes debugging easier: the rendered output shows you exactly which variables did not resolve.
|
|
160
160
|
|
|
161
161
|
### Validate template data before sending
|
|
162
162
|
|
|
@@ -221,7 +221,7 @@ async syncTemplatesFromDatabase() {
|
|
|
221
221
|
|
|
222
222
|
## Queue executors
|
|
223
223
|
|
|
224
|
-
`IMailQueueExecutor` is a separate subsystem from `MailService
|
|
224
|
+
`IMailQueueExecutor` is a separate subsystem from `MailService`. It only exposes `enqueueVerificationEmail()` and `setProcessor()`, and it never calls `send()` on its own. You provide the processor function - typically one that wraps `mailService.send()`. The executor's job is timing, retry, and delivery guarantees around calling that function.
|
|
225
225
|
|
|
226
226
|
| Executor | Class | Backing |
|
|
227
227
|
|----------|-------|---------|
|
|
@@ -231,17 +231,25 @@ async syncTemplatesFromDatabase() {
|
|
|
231
231
|
|
|
232
232
|
### Direct executor
|
|
233
233
|
|
|
234
|
-
|
|
234
|
+
The direct executor calls the processor immediately, with no queueing. It returns `{ queued: false, ... }`. If `enqueueVerificationEmail()` runs before `setProcessor()`, it throws `Processor not set. Call setProcessor() first.` Use it for development, or whenever a caller needs a synchronous result.
|
|
235
235
|
|
|
236
236
|
### Internal queue executor
|
|
237
237
|
|
|
238
|
-
|
|
238
|
+
The internal queue executor is in-memory and single-instance, backed by `SequentialQueueHelper` from `@venizia/ignis-helpers` with `autoDispatch: true`.
|
|
239
239
|
|
|
240
240
|
- Job IDs follow `job_<counter>_<timestamp>`.
|
|
241
241
|
- A `delay` option schedules the enqueue itself via `setTimeout`, tracked in a `delayedJobs` map.
|
|
242
|
-
- On failure
|
|
242
|
+
- On failure - a thrown error, or the processor returning `{ success: false }` - it retries up to `options.attempts` (default `3`).
|
|
243
243
|
- Does not persist jobs across restarts. `close()` clears every pending delayed/retry timer.
|
|
244
244
|
|
|
245
|
+
Retry backoff:
|
|
246
|
+
|
|
247
|
+
| `backoff` config | Delay |
|
|
248
|
+
|---|---|
|
|
249
|
+
| `{ type: 'exponential', delay }` | `delay * 2^(attempt - 1)` |
|
|
250
|
+
| `{ type: 'fixed', delay }` | the raw `delay` |
|
|
251
|
+
| Not set | `1000ms` |
|
|
252
|
+
|
|
245
253
|
### BullMQ executor
|
|
246
254
|
|
|
247
255
|
Redis-backed, distributed, backed by `BullMQHelper`. Job persistence, worker concurrency, prioritization, and delayed execution come from BullMQ itself. `removeOnComplete: true`, `removeOnFail: false` (failed jobs stay for debugging). Default enqueue options: `attempts: 3`, `backoff: { type: 'exponential', delay: 1000 }`.
|
|
@@ -255,9 +263,9 @@ Redis-backed, distributed, backed by `BullMQHelper`. Job persistence, worker con
|
|
|
255
263
|
| `'both'` | Yes | Yes | Yes (requires `setProcessor()` first) | Yes |
|
|
256
264
|
|
|
257
265
|
> [!IMPORTANT]
|
|
258
|
-
> `'queue-only'` mode is the one exception to "call `setProcessor()` before you enqueue"
|
|
266
|
+
> `'queue-only'` mode is the one exception to "call `setProcessor()` before you enqueue." In that mode, `enqueueVerificationEmail()` does not need a processor. A producer instance can enqueue jobs that a separate `worker-only` instance later processes.
|
|
259
267
|
|
|
260
|
-
**Dynamic worker management
|
|
268
|
+
**Dynamic worker management.** Get the bound instance and manage workers at runtime - no restart required:
|
|
261
269
|
|
|
262
270
|
```typescript
|
|
263
271
|
const executor = this.application.get<BullMQMailExecutorHelper>({
|
|
@@ -273,7 +281,7 @@ await executor.removeWorker(1); // remove by array index
|
|
|
273
281
|
await executor.clearWorkers(); // close and remove every worker
|
|
274
282
|
```
|
|
275
283
|
|
|
276
|
-
`setProcessor()` on the BullMQ executor is `async` and takes an optional second argument for worker configuration
|
|
284
|
+
`setProcessor()` on the BullMQ executor is `async` and takes an optional second argument for worker configuration. It clears all existing workers before creating new ones:
|
|
277
285
|
|
|
278
286
|
```typescript
|
|
279
287
|
await executor.setProcessor(
|
|
@@ -291,7 +299,7 @@ await executor.setProcessor(
|
|
|
291
299
|
|
|
292
300
|
## Verification generators
|
|
293
301
|
|
|
294
|
-
`MailComponent` binds three generators
|
|
302
|
+
`MailComponent` binds three generators. All are **transient** - a fresh instance per resolution, since none is registered with `.setScope('singleton')`:
|
|
295
303
|
|
|
296
304
|
| Generator | Implements | Behavior |
|
|
297
305
|
|-----------|-----------|----------|
|
|
@@ -350,10 +358,10 @@ export class AuthService extends BaseService {
|
|
|
350
358
|
|
|
351
359
|
## Logging and credentials
|
|
352
360
|
|
|
353
|
-
`MailComponent.createAndBindInstances()` logs only `mailOptions.provider` and `queueExecutorConfig.type
|
|
361
|
+
`MailComponent.createAndBindInstances()` logs only `mailOptions.provider` and `queueExecutorConfig.type`, at `info` level. It never logs the full config objects, by design. That keeps SMTP passwords, OAuth2 secrets, API keys, and Redis passwords out of the log sink - at least through the component itself.
|
|
354
362
|
|
|
355
363
|
> [!WARNING]
|
|
356
|
-
> That guarantee only covers what `MailComponent` logs internally. If your own wrapper component or bootstrap code logs the `TMailOptions` or `IMailQueueExecutorConfig` object directly
|
|
364
|
+
> That guarantee only covers what `MailComponent` logs internally. If your own wrapper component or bootstrap code logs the `TMailOptions` or `IMailQueueExecutorConfig` object directly, you reintroduce the leak yourself. This commonly happens while debugging a binding. Log individual safe fields (`provider`, `type`) instead of the whole object.
|
|
357
365
|
|
|
358
366
|
## See also
|
|
359
367
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Request Tracker
|
|
2
2
|
|
|
3
|
-
Automatic request logging middleware that assigns a UUID request ID to every request
|
|
3
|
+
Automatic request logging middleware that assigns a UUID request ID to every request. It logs method, path, client IP, and timing on the way in and out.
|
|
4
4
|
|
|
5
5
|
> [!IMPORTANT]
|
|
6
6
|
> This component is **auto-registered** by `BaseApplication` during `initialize()`. No manual registration is needed.
|
|
@@ -12,7 +12,7 @@ Automatic request logging middleware that assigns a UUID request ID to every req
|
|
|
12
12
|
| **Package** | `@venizia/ignis` |
|
|
13
13
|
| **Component** | `RequestTrackerComponent` |
|
|
14
14
|
| **Middleware** | `RequestSpyMiddleware` |
|
|
15
|
-
| **Utility** | `getIncomingIp()` |
|
|
15
|
+
| **Utility** | `NetworkUtility.getIncomingIp()` |
|
|
16
16
|
| **Runtimes** | Both (Bun and Node.js) |
|
|
17
17
|
|
|
18
18
|
#### Import Paths
|
|
@@ -29,7 +29,8 @@ Nothing to configure - once the application starts, every request is logged auto
|
|
|
29
29
|
[SpyMW] [<request-id>][127.0.0.1][<=] GET /hello | Took: 1.23 (ms)
|
|
30
30
|
```
|
|
31
31
|
|
|
32
|
-
|
|
32
|
+
Bodies are logged only in a development environment. Everywhere else - including when `NODE_ENV` is
|
|
33
|
+
unset - the body is omitted and query is still logged:
|
|
33
34
|
|
|
34
35
|
```
|
|
35
36
|
[SpyMW] [<request-id>][127.0.0.1][=>] GET /hello | query: {}
|
|
@@ -45,14 +46,17 @@ The HTTP method is padded to 8 characters for consistent alignment.
|
|
|
45
46
|
|
|
46
47
|
## How it works
|
|
47
48
|
|
|
48
|
-
- **
|
|
49
|
-
- **IP resolution is best-effort, never fatal.** The middleware
|
|
50
|
-
- **Body logging is environment-gated.** `RequestSpyMiddleware` reads `NODE_ENV` once in its constructor
|
|
51
|
-
|
|
52
|
-
|
|
49
|
+
- **One middleware, and an ID it does not install.** `requestId()` comes from `RestApplication.registerDefaultMiddlewares()`, which runs before any component, so it is already in place when `binding()` resolves `RequestSpyMiddleware` from the DI container and registers it. The generator is IGNIS's `RequestIdGenerator`, not hono's `crypto.randomUUID` default - that keeps a server and a browser-Worker BFF stamping the same format.
|
|
50
|
+
- **IP resolution is best-effort, never fatal.** The middleware falls through several sources before giving up - see the resolution order below. An unresolved IP never fails the request; this middleware observes traffic, it does not gate it.
|
|
51
|
+
- **Body logging is environment-gated, and it fails closed.** `RequestSpyMiddleware` reads `NODE_ENV` once in its constructor and logs the body only when the value is one of `local`, `debug`, `development`, `dev`, `sit`. Anything else - `staging`, `uat`, `production`, or `NODE_ENV` unset entirely - logs query only. Query is always logged in every environment.
|
|
52
|
+
|
|
53
|
+
> [!WARNING]
|
|
54
|
+
> This rule used to be "anything that is not `production`", which logged full request bodies in `staging`, `uat` and with `NODE_ENV` unset. If you relied on bodies appearing outside a development environment, set `NODE_ENV` to one of the five values above.
|
|
55
|
+
- **Body parsing follows Content-Type.** See the outcomes table below for what each Content-Type resolves to. A parse failure throws `'Malformed Body Payload'` (HTTP 400).
|
|
56
|
+
- **The middleware is an `IProvider`, not a plain function.** `RequestSpyMiddleware` implements `IProvider<MiddlewareHandler>` from `@venizia/ignis-inversion`. The container instantiates the class, so it can hold `isDebugMode` state as an instance field. It then calls `.value()` to obtain the actual Hono handler.
|
|
53
57
|
|
|
54
58
|
> [!TIP]
|
|
55
|
-
> The request ID is also available in the framework's error handlers (`notFoundHandler`, `AppErrorMiddleware`)
|
|
59
|
+
> The request ID is also available in the framework's error handlers (`notFoundHandler`, `AppErrorMiddleware`) - the same ID correlates error logs with the original request.
|
|
56
60
|
|
|
57
61
|
## Common tasks
|
|
58
62
|
|
|
@@ -73,7 +77,7 @@ async parseBody(opts: { req: TContext['req'] }): Promise<unknown>
|
|
|
73
77
|
### Understand the client IP resolution order
|
|
74
78
|
| Priority | Source | Notes |
|
|
75
79
|
|----------|--------|-------|
|
|
76
|
-
| 1 | `getIncomingIp(context)` | Native connection info - `hono/bun` on Bun, `@hono/node-server/conninfo` on Node.js |
|
|
80
|
+
| 1 | `NetworkUtility.getIncomingIp(context)` | Native connection info - `hono/bun` on Bun, `@hono/node-server/conninfo` on Node.js |
|
|
77
81
|
| 2 | `x-real-ip` header | Set by reverse proxies (e.g., Nginx `proxy_set_header X-Real-IP`) |
|
|
78
82
|
| 3 | `x-forwarded-for` header | Standard proxy header |
|
|
79
83
|
| 4 | `'unknown'` | Logged when none of the above resolve - the request still proceeds |
|
|
@@ -116,7 +120,7 @@ class RequestSpyMiddleware extends BaseHelper implements IProvider<MiddlewareHan
|
|
|
116
120
|
|
|
117
121
|
### Component lifecycle
|
|
118
122
|
1. **`constructor()`** - Receives `BaseApplication` via DI. Defines the middleware binding as a singleton provider.
|
|
119
|
-
2. **`binding()`** -
|
|
123
|
+
2. **`binding()`** - Resolves the `RequestSpyMiddleware` binding, throwing if it cannot be resolved. Registers the resolved middleware on the server. The request ID is already installed by the application's default stack.
|
|
120
124
|
|
|
121
125
|
## Troubleshooting
|
|
122
126
|
|
|
@@ -143,6 +147,6 @@ class RequestSpyMiddleware extends BaseHelper implements IProvider<MiddlewareHan
|
|
|
143
147
|
|
|
144
148
|
**Files:**
|
|
145
149
|
|
|
146
|
-
- [`packages/core/src/components/request-tracker/component.ts`](https://github.com/VENIZIA-AI/ignis/blob/main/packages/core/src/components/request-tracker/component.ts) - `RequestTrackerComponent`
|
|
147
|
-
- [`packages/core/src/base/middlewares/request-spy/request-spy.middleware.ts`](https://github.com/VENIZIA-AI/ignis/blob/main/packages/core/src/base/middlewares/request-spy/request-spy.middleware.ts) - `RequestSpyMiddleware`
|
|
148
|
-
- [`packages/core/src/utilities/network.utility.ts`](https://github.com/VENIZIA-AI/ignis/blob/main/packages/core/src/utilities/network.utility.ts) - `getIncomingIp()`
|
|
150
|
+
- [`packages/core-server/src/components/request-tracker/component.ts`](https://github.com/VENIZIA-AI/ignis/blob/main/packages/core-server/src/components/request-tracker/component.ts) - `RequestTrackerComponent`
|
|
151
|
+
- [`packages/core-server/src/base/middlewares/request-spy/request-spy.middleware.ts`](https://github.com/VENIZIA-AI/ignis/blob/main/packages/core-server/src/base/middlewares/request-spy/request-spy.middleware.ts) - `RequestSpyMiddleware`
|
|
152
|
+
- [`packages/core-server/src/utilities/network.utility.ts`](https://github.com/VENIZIA-AI/ignis/blob/main/packages/core-server/src/utilities/network.utility.ts) - `NetworkUtility.getIncomingIp()`
|