@venizia/ignis-docs 0.2.0 → 0.2.1-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 (142) hide show
  1. package/README.md +14 -14
  2. package/content/best-practices/api-usage-examples.md +39 -19
  3. package/content/best-practices/architectural-patterns.md +22 -11
  4. package/content/best-practices/architecture-decisions.md +29 -16
  5. package/content/best-practices/code-style-standards/advanced-patterns.md +43 -31
  6. package/content/best-practices/code-style-standards/constants-configuration.md +19 -4
  7. package/content/best-practices/code-style-standards/control-flow.md +33 -1
  8. package/content/best-practices/code-style-standards/documentation.md +28 -8
  9. package/content/best-practices/code-style-standards/function-patterns.md +15 -4
  10. package/content/best-practices/code-style-standards/index.md +7 -2
  11. package/content/best-practices/code-style-standards/naming-conventions.md +26 -2
  12. package/content/best-practices/code-style-standards/route-definitions.md +9 -5
  13. package/content/best-practices/code-style-standards/tooling.md +14 -1
  14. package/content/best-practices/code-style-standards/type-safety.md +39 -6
  15. package/content/best-practices/common-pitfalls.md +59 -35
  16. package/content/best-practices/contribution-workflow.md +6 -2
  17. package/content/best-practices/data-modeling.md +78 -62
  18. package/content/best-practices/deployment-strategies.md +56 -19
  19. package/content/best-practices/error-handling.md +182 -93
  20. package/content/best-practices/index.md +6 -0
  21. package/content/best-practices/performance-optimization.md +26 -13
  22. package/content/best-practices/security-guidelines.md +35 -9
  23. package/content/best-practices/testing-strategies.md +7 -2
  24. package/content/best-practices/troubleshooting-tips.md +27 -17
  25. package/content/extensions/components/api-reference.md +107 -322
  26. package/content/extensions/components/authentication/api.md +454 -603
  27. package/content/extensions/components/authentication/errors.md +121 -498
  28. package/content/extensions/components/authentication/index.md +88 -801
  29. package/content/extensions/components/authentication/usage.md +207 -956
  30. package/content/extensions/components/authorization/api.md +736 -656
  31. package/content/extensions/components/authorization/errors.md +168 -206
  32. package/content/extensions/components/authorization/index.md +82 -797
  33. package/content/extensions/components/authorization/usage.md +194 -527
  34. package/content/extensions/components/health-check.md +71 -243
  35. package/content/extensions/components/mail/api.md +504 -287
  36. package/content/extensions/components/mail/errors.md +73 -61
  37. package/content/extensions/components/mail/index.md +96 -467
  38. package/content/extensions/components/mail/usage.md +130 -172
  39. package/content/extensions/components/request-tracker.md +66 -173
  40. package/content/extensions/components/socket-io/api.md +195 -13
  41. package/content/extensions/components/socket-io/errors.md +3 -3
  42. package/content/extensions/components/socket-io/index.md +50 -337
  43. package/content/extensions/components/socket-io/usage.md +143 -26
  44. package/content/extensions/components/static-asset/api.md +410 -142
  45. package/content/extensions/components/static-asset/errors.md +110 -53
  46. package/content/extensions/components/static-asset/index.md +79 -608
  47. package/content/extensions/components/static-asset/usage.md +180 -300
  48. package/content/extensions/components/websocket/api.md +275 -399
  49. package/content/extensions/components/websocket/errors.md +47 -56
  50. package/content/extensions/components/websocket/index.md +74 -407
  51. package/content/extensions/components/websocket/usage.md +110 -341
  52. package/content/extensions/helpers/cron/index.md +51 -160
  53. package/content/extensions/helpers/crypto/index.md +62 -483
  54. package/content/extensions/helpers/crypto/reference.md +456 -0
  55. package/content/extensions/helpers/env/index.md +60 -178
  56. package/content/extensions/helpers/error/index.md +221 -207
  57. package/content/extensions/helpers/inversion/index.md +65 -556
  58. package/content/extensions/helpers/inversion/reference.md +522 -0
  59. package/content/extensions/helpers/kafka/admin.md +20 -1
  60. package/content/extensions/helpers/kafka/compile-binary.md +41 -35
  61. package/content/extensions/helpers/kafka/consumer.md +54 -20
  62. package/content/extensions/helpers/kafka/examples.md +21 -16
  63. package/content/extensions/helpers/kafka/index.md +80 -610
  64. package/content/extensions/helpers/kafka/producer.md +134 -5
  65. package/content/extensions/helpers/kafka/schema-registry.md +45 -70
  66. package/content/extensions/helpers/logger/hf-logger.md +193 -0
  67. package/content/extensions/helpers/logger/index.md +64 -563
  68. package/content/extensions/helpers/logger/pino.md +85 -0
  69. package/content/extensions/helpers/logger/reference.md +746 -0
  70. package/content/extensions/helpers/network/api.md +241 -195
  71. package/content/extensions/helpers/network/index.md +72 -530
  72. package/content/extensions/helpers/queue/index.md +72 -900
  73. package/content/extensions/helpers/queue/reference.md +467 -0
  74. package/content/extensions/helpers/redis/index.md +73 -645
  75. package/content/extensions/helpers/redis/reference.md +727 -0
  76. package/content/extensions/helpers/secrets/index.md +66 -0
  77. package/content/extensions/helpers/socket-io/api.md +305 -203
  78. package/content/extensions/helpers/socket-io/index.md +66 -432
  79. package/content/extensions/helpers/storage/api.md +564 -462
  80. package/content/extensions/helpers/storage/index.md +77 -573
  81. package/content/extensions/helpers/types/index.md +66 -499
  82. package/content/extensions/helpers/types/reference.md +650 -0
  83. package/content/extensions/helpers/uid/index.md +58 -227
  84. package/content/extensions/helpers/websocket/api.md +329 -216
  85. package/content/extensions/helpers/websocket/index.md +65 -503
  86. package/content/extensions/helpers/worker-thread/index.md +58 -396
  87. package/content/extensions/helpers/worker-thread/reference.md +428 -0
  88. package/content/guides/core-concepts/persistent/models.md +1 -1
  89. package/content/guides/core-concepts/persistent/search-typesense.md +3 -3
  90. package/content/guides/core-concepts/persistent/transactions.md +1 -1
  91. package/content/guides/core-concepts/secrets-vault.md +177 -0
  92. package/content/guides/core-concepts/services.md +1 -1
  93. package/content/guides/migrations/redis-helpers-migration.md +1 -1
  94. package/content/guides/migrations/unified-connectors-migration.md +2 -2
  95. package/content/guides/tutorials/ecommerce-api.md +3 -8
  96. package/content/references/base/application.md +1 -1
  97. package/content/references/base/connectors.md +79 -136
  98. package/content/references/base/datasources-reference.md +599 -0
  99. package/content/references/base/datasources.md +84 -444
  100. package/content/references/base/dependency-injection.md +17 -39
  101. package/content/references/base/filter-system/application-usage.md +69 -121
  102. package/content/references/base/filter-system/array-operators.md +12 -0
  103. package/content/references/base/filter-system/comparison-operators.md +12 -0
  104. package/content/references/base/filter-system/default-filter.md +136 -348
  105. package/content/references/base/filter-system/fields-order-pagination.md +38 -16
  106. package/content/references/base/filter-system/index.md +106 -257
  107. package/content/references/base/filter-system/json-filtering.md +12 -2
  108. package/content/references/base/filter-system/list-operators.md +16 -2
  109. package/content/references/base/filter-system/logical-operators.md +13 -0
  110. package/content/references/base/filter-system/null-operators.md +13 -0
  111. package/content/references/base/filter-system/pattern-matching.md +12 -0
  112. package/content/references/base/filter-system/quick-reference.md +11 -2
  113. package/content/references/base/filter-system/range-operators.md +12 -0
  114. package/content/references/base/filter-system/tips.md +70 -133
  115. package/content/references/base/filter-system/use-cases.md +156 -233
  116. package/content/references/base/middlewares.md +35 -21
  117. package/content/references/base/models-reference.md +886 -0
  118. package/content/references/base/models.md +80 -1452
  119. package/content/references/base/repositories/advanced.md +156 -192
  120. package/content/references/base/repositories/index.md +77 -650
  121. package/content/references/base/repositories/mixins.md +22 -18
  122. package/content/references/base/repositories/relations.md +123 -171
  123. package/content/references/base/repositories/soft-deletable.md +58 -56
  124. package/content/references/base/secrets.md +263 -0
  125. package/content/references/base/services.md +2 -2
  126. package/content/references/configuration/environment-variables.md +48 -4
  127. package/content/references/configuration/index.md +49 -31
  128. package/content/references/quick-reference.md +3 -16
  129. package/content/references/utilities/crypto.md +35 -76
  130. package/content/references/utilities/date.md +33 -73
  131. package/content/references/utilities/index.md +1 -1
  132. package/content/references/utilities/jsx-reference.md +298 -0
  133. package/content/references/utilities/jsx.md +82 -525
  134. package/content/references/utilities/module.md +29 -62
  135. package/content/references/utilities/parse.md +34 -64
  136. package/content/references/utilities/performance.md +33 -58
  137. package/content/references/utilities/promise.md +28 -62
  138. package/content/references/utilities/request.md +57 -218
  139. package/content/references/utilities/schema.md +43 -137
  140. package/content/references/utilities/statuses-reference.md +361 -0
  141. package/content/references/utilities/statuses.md +63 -667
  142. package/package.json +8 -8
@@ -2,15 +2,15 @@
2
2
 
3
3
  > Complete error code reference and troubleshooting guide for the Mail component.
4
4
 
5
- ## Error Reference
5
+ ## Error reference
6
6
 
7
- All errors are created via `getError()` and include `statusCode`, `messageCode`, and `message` fields.
7
+ All errors are created via `getError()`. Only errors that pass `statusCode`/`messageCode` carry an `ApplicationError` identity with those fields -- the rows marked `--` throw a plain error with just a `message`. Read an error's code at `error.normalized.code`; there is no flat `error.messageCode`.
8
8
 
9
- ### MailService Errors
9
+ ### `MailService` errors
10
10
 
11
- | Condition | Status | Error Code | Message |
11
+ | Condition | Status | Error code | Message |
12
12
  |-----------|--------|-----------|---------|
13
- | `to` is missing or empty array | 400 | `core.mail.invalid_recipient` | `Recipient email address is required` |
13
+ | `to` is missing or an empty array | 400 | `core.mail.invalid_recipient` | `Recipient email address is required` |
14
14
  | `subject` is falsy | 400 | `core.mail.invalid_configuration` | `Email subject is required` |
15
15
  | Both `text` and `html` are falsy | 400 | `core.mail.invalid_configuration` | `Email must have either text or html content` |
16
16
  | Transport throws during `send()` | 500 | `core.mail.send_failed` | `Failed to send email: <error>` |
@@ -18,71 +18,89 @@ All errors are created via `getError()` and include `statusCode`, `messageCode`,
18
18
  | Template engine not configured for `sendTemplate()` | 500 | `core.mail.invalid_configuration` | `Template engine not configured` |
19
19
  | Transport throws during `verify()` | 500 | `core.mail.verification_failed` | `Mail transport verification failed: <error>` |
20
20
 
21
- ### MailComponent Errors
21
+ > [!NOTE]
22
+ > "Transport throws during `send()`/`verify()`" only fires for a **custom** transport. The built-in `NodemailerTransportHelper` and `MailgunTransportHelper` never throw from `send()` or `verify()` -- they catch internally and return `{ success: false, error }` (or `false` for `verify()`). A 400 validation error raised by `validateMessage()` is re-thrown unchanged, not wrapped as `SEND_FAILED`.
22
23
 
23
- | Condition | Status | Error Code | Message |
24
+ ### `MailComponent` errors
25
+
26
+ | Condition | Status | Error code | Message |
24
27
  |-----------|--------|-----------|---------|
25
- | `MAIL_OPTIONS` not bound | -- | -- | `Mail options not configured` |
28
+ | `MAIL_OPTIONS` not bound before `component(MailComponent)` | -- | -- | `Mail options not configured` |
26
29
 
27
- ### MailTransportProvider Errors
30
+ ### `MailTransportProvider` errors
28
31
 
29
- | Condition | Status | Error Code | Message |
32
+ | Condition | Status | Error code | Message |
30
33
  |-----------|--------|-----------|---------|
31
34
  | Unsupported provider string | 500 | `core.mail.invalid_configuration` | `Unsupported mail provider: <provider>` |
32
- | Nodemailer options fail type guard | 500 | `core.mail.invalid_configuration` | `Invalid Nodemailer configuration` |
33
- | Mailgun options fail type guard | 500 | `core.mail.invalid_configuration` | `Invalid Mailgun configuration` |
34
- | Custom options fail type guard | 500 | `core.mail.invalid_configuration` | `Invalid custom mail provider configuration` |
35
+ | Nodemailer options fail the type guard | 500 | `core.mail.invalid_configuration` | `Invalid Nodemailer configuration` |
36
+ | Mailgun options fail the type guard | 500 | `core.mail.invalid_configuration` | `Invalid Mailgun configuration` |
37
+ | Custom options fail the type guard | 500 | `core.mail.invalid_configuration` | `Invalid custom mail provider configuration` |
35
38
  | Custom config missing `send`/`verify` | 500 | `core.mail.invalid_configuration` | `Custom mail provider must implement IMailTransport interface. Missing methods: <methods>` |
36
39
 
37
- ### MailQueueExecutorProvider Errors
40
+ ### `MailgunTransportHelper` errors
41
+
42
+ | Condition | Status | Error code | Message |
43
+ |-----------|--------|-----------|---------|
44
+ | `config` is missing `username`, `key`, or `domain` | 500 | `core.mail.invalid_configuration` | `Invalid Mailgun configuration \| Missing required keys: <keys>` |
45
+
46
+ This check runs on `configure()`, one layer deeper than `MailTransportProvider`'s type guard -- a `config` object that passes the provider's guard (has *a* `config` property) can still fail this one if it is missing the specific keys Mailgun's client needs.
38
47
 
39
- | Condition | Status | Error Code | Message |
48
+ ### `MailQueueExecutorProvider` errors
49
+
50
+ | Condition | Status | Error code | Message |
40
51
  |-----------|--------|-----------|---------|
41
52
  | `config.internalQueue` missing for `internal-queue` type | -- | -- | `Internal queue configuration is missing` |
42
53
  | `config.bullmq` missing for `bullmq` type | -- | -- | `BullMQ configuration is missing` |
43
54
  | Unknown executor type | -- | -- | `Unknown mail queue executor type: <type>` |
44
55
 
45
- ### TemplateEngineService Errors
56
+ ### `TemplateEngineService` errors
46
57
 
47
- | Condition | Status | Error Code | Message |
58
+ | Condition | Status | Error code | Message |
48
59
  |-----------|--------|-----------|---------|
49
60
  | Neither `templateName` nor `templateData` provided | -- | -- | `Either templateName or templateData must be provided` |
50
61
  | Template name not found in registry | 404 | `core.mail.template_not_found` | `Template not found: <name>` |
51
62
  | Missing template data keys (with `requireValidate: true`) | 400 | `core.mail.invalid_configuration` | `Missing template data for keys: <keys>` |
52
63
 
53
- ### Queue Executor Errors
64
+ ### Queue executor errors
54
65
 
55
66
  | Condition | Executor | Message |
56
67
  |-----------|----------|---------|
57
- | Processor not set before enqueue | Direct, Internal Queue, BullMQ | `Processor not set. Call setProcessor() first.` |
58
- | Processor not set before adding worker | BullMQ | `Processor not set. Call setProcessor() first.` |
59
- | Enqueue in worker-only mode | BullMQ | `Cannot enqueue jobs in worker-only mode. Set mode to "queue-only" or "both".` |
60
- | Queue helper unexpectedly null | BullMQ | `Queue helper not initialized. This should not happen in queue-enabled mode.` |
68
+ | Processor not set before enqueue | Direct, Internal Queue -- always | `Processor not set. Call setProcessor() first.` |
69
+ | Processor not set before enqueue | BullMQ -- only outside `'queue-only'` mode | `Processor not set. Call setProcessor() first.` |
70
+ | Processor not set before adding a worker | BullMQ | `Processor not set. Call setProcessor() first.` |
71
+ | Enqueue attempted in `worker-only` mode | BullMQ | `Cannot enqueue jobs in worker-only mode. Set mode to "queue-only" or "both".` |
72
+ | Queue helper unexpectedly `null` | BullMQ | `Queue helper not initialized. This should not happen in queue-enabled mode.` |
61
73
 
62
74
  ## Troubleshooting
63
75
 
64
76
  ### "Mail options not configured"
65
77
 
66
- **Cause:** `MailKeys.MAIL_OPTIONS` was not bound in the DI container before `MailComponent` was registered. The component checks `isBound()` in its `binding()` phase and throws immediately.
67
-
68
- **Fix:** Ensure the options binding exists before calling `this.application.component(MailComponent)`:
78
+ - **Cause.** `MailKeys.MAIL_OPTIONS` was not bound before `MailComponent` was registered. `binding()` checks `isBound()` and throws immediately.
79
+ - **Fix.** Bind the options before calling `this.component(MailComponent)`:
69
80
 
70
81
  ```typescript
71
- this.application.bind({ key: MailKeys.MAIL_OPTIONS }).toValue({
82
+ this.bind({ key: MailKeys.MAIL_OPTIONS }).toValue({
72
83
  provider: MailProviders.NODEMAILER,
73
84
  from: 'noreply@example.com',
74
85
  config: { host: 'smtp.example.com', port: 587, secure: false, auth: { user: '...', pass: '...' } },
75
86
  });
76
87
 
77
- // Then register the component
78
- this.application.component(MailComponent);
88
+ this.component(MailComponent);
79
89
  ```
80
90
 
81
- ### "core.mail.template_not_found" when calling `sendTemplate()`
91
+ ### "Invalid Mailgun configuration | Missing required keys: ..."
92
+
93
+ - **Cause.** The Mailgun `config` object is missing `username`, `key`, or `domain`. A common mistake is naming the field `apiKey` instead of `key`.
94
+ - **Fix.** Use the exact field names `mailgun.js` expects:
95
+
96
+ ```typescript
97
+ config: { username: 'api', key: process.env.MAILGUN_API_KEY, domain: 'mg.example.com' }
98
+ ```
82
99
 
83
- **Cause:** The template name passed to `sendTemplate()` was never registered via `templateEngine.registerTemplate()`.
100
+ ### `core.mail.template_not_found` from `sendTemplate()`
84
101
 
85
- **Fix:** Register the template before sending. If templates are loaded from a database, ensure the sync runs before the first `sendTemplate()` call:
102
+ - **Cause.** The template name was never registered via `templateEngine.registerTemplate()` -- often because a database-backed sync runs after the first `sendTemplate()` call, not before it.
103
+ - **Fix.** Register the template first:
86
104
 
87
105
  ```typescript
88
106
  this.templateEngine.registerTemplate({
@@ -93,9 +111,8 @@ this.templateEngine.registerTemplate({
93
111
 
94
112
  ### Emails silently fail with `success: false`
95
113
 
96
- **Cause:** The transport connection is misconfigured (wrong credentials, blocked port, expired OAuth2 token). The `MailService.send()` method catches transport errors and returns `{ success: false, error: '...' }` rather than throwing.
97
-
98
- **Fix:** Check `result.error` for the specific transport error. Verify transport on startup:
114
+ - **Cause.** The transport connection is misconfigured (wrong credentials, blocked port, expired OAuth2 token). `MailService.send()` never throws for a built-in transport's connection failure -- it returns `{ success: false, error }`.
115
+ - **Fix.** Check `result.error` for the underlying transport error, and verify the connection at startup:
99
116
 
100
117
  ```typescript
101
118
  const isConnected = await this.mailService.verify();
@@ -104,28 +121,26 @@ if (!isConnected) {
104
121
  }
105
122
  ```
106
123
 
107
- ### BullMQ executor not processing jobs
108
-
109
- **Cause:** The `mode` is set to `'queue-only'` which only enqueues jobs without starting a worker, or the Redis connection is unreachable.
124
+ ### BullMQ executor is not processing jobs
110
125
 
111
- **Fix:** Ensure `mode` is `'both'` or `'worker-only'` on the instance that should process jobs. Verify Redis connectivity:
126
+ - **Cause.** Either `mode` is `'queue-only'` (enqueues but never starts a worker), or the Redis connection is unreachable.
127
+ - **Fix.** Run `mode: 'both'` or `'worker-only'` on the instance meant to process jobs, and confirm Redis connectivity:
112
128
 
113
129
  ```typescript
114
130
  {
115
131
  type: 'bullmq',
116
132
  bullmq: {
117
- redis: { host: 'localhost', port: 6379, /* ... */ },
133
+ redis: { host: 'localhost', port: 6379 /* ... */ },
118
134
  queue: { identifier: 'mail-queue', name: 'mail-queue' },
119
- mode: 'both', // Must be 'both' or 'worker-only' to process
135
+ mode: 'both', // must be 'both' or 'worker-only' to process
120
136
  },
121
137
  }
122
138
  ```
123
139
 
124
- ### Template variables not replaced (placeholders preserved)
140
+ ### Template placeholders show up literally in the output
125
141
 
126
- **Cause:** The `data` object passed to `render()` or `sendTemplate()` does not contain all <code v-pre>{{key}}</code> placeholders found in the template. When `requireValidate` is **not** set (or set to `false`), the template engine preserves the original placeholder text as-is (e.g., <code v-pre>{{missingKey}}</code> remains literally in the output). It does **not** replace missing variables with empty strings.
127
-
128
- **Fix:** Use `validateTemplateData()` to check which keys are missing before rendering:
142
+ - **Cause.** The `data` object passed to `render()`/`sendTemplate()` is missing a <code v-pre>{{key}}</code> the template uses. Without `requireValidate: true`, the engine preserves the original placeholder text -- it does **not** replace a missing value with an empty string.
143
+ - **Fix.** Check what is missing before rendering, or fail loudly instead:
129
144
 
130
145
  ```typescript
131
146
  const validation = this.templateEngine.validateTemplateData({ template, data });
@@ -134,43 +149,40 @@ if (!validation.isValid) {
134
149
  }
135
150
  ```
136
151
 
137
- Or set `requireValidate: true` to throw an error when keys are missing:
138
-
139
152
  ```typescript
140
153
  const html = this.templateEngine.render({
141
154
  templateName: 'welcome-email',
142
155
  data,
143
- requireValidate: true, // Throws if any placeholders are missing
156
+ requireValidate: true, // throws instead of leaving placeholders in the output
144
157
  });
145
158
  ```
146
159
 
147
160
  ### "Processor not set. Call setProcessor() first."
148
161
 
149
- **Cause:** The queue executor's `enqueueVerificationEmail()` was called before `setProcessor()`. All three executor types (Direct, Internal Queue, BullMQ) require a processor function to be registered first.
150
-
151
- **Fix:** Call `setProcessor()` before enqueuing any jobs:
162
+ - **Cause.** `enqueueVerificationEmail()` was called before `setProcessor()`. Direct and Internal Queue always require this; BullMQ requires it too, except in `'queue-only'` mode, where enqueueing does not need a processor.
163
+ - **Fix.** Register a processor before enqueuing:
152
164
 
153
165
  ```typescript
154
166
  executor.setProcessor(async (email: string) => {
155
- // Your email processing logic here
167
+ // Your email-sending logic, typically wrapping mailService.send()
156
168
  return { success: true, message: 'Verification email sent', expiresInMinutes: 10 };
157
169
  });
158
170
  ```
159
171
 
160
172
  ### "Cannot enqueue jobs in worker-only mode"
161
173
 
162
- **Cause:** The BullMQ executor is configured with `mode: 'worker-only'`, which does not initialize a queue and therefore cannot accept new jobs.
163
-
164
- **Fix:** Use `mode: 'both'` or `mode: 'queue-only'` on instances that need to enqueue jobs. Use `mode: 'worker-only'` only on dedicated worker processes.
174
+ - **Cause.** The BullMQ executor is running with `mode: 'worker-only'`, which never creates a queue and therefore cannot accept new jobs.
175
+ - **Fix.** Use `'both'` or `'queue-only'` on any instance that needs to enqueue. Reserve `'worker-only'` for dedicated worker processes that only consume.
165
176
 
166
- ### Credential logging at startup
177
+ ### Startup logs and credentials
167
178
 
168
- **Cause:** The `MailComponent.createAndBindInstances()` method logs the full `mailOptions` object (including credentials) at `info` level during initialization. This is by design for debugging, but it means sensitive values like API keys, passwords, and OAuth tokens will appear in logs.
179
+ `MailComponent.createAndBindInstances()` logs only `mailOptions.provider` and `queueExecutorConfig.type` at `info` level -- by design, it never logs the full config object, so SMTP passwords, OAuth2 secrets, Mailgun API keys, and Redis passwords are never written to the log by the component itself.
169
180
 
170
- **Fix:** In production, either use a log level higher than `info` for the mail component scope, or ensure your log pipeline redacts sensitive fields.
181
+ > [!WARNING]
182
+ > That guarantee is scoped to `MailComponent`'s own logging. If your wrapper component (or any other code) logs the `TMailOptions`/`IMailQueueExecutorConfig` object directly -- for example `logger.info('%j', mailOptions)` while debugging -- you reintroduce the leak yourself. Log individual safe fields instead of the whole object.
171
183
 
172
- ## See Also
184
+ ## See also
173
185
 
174
- - [Setup & Configuration](./) -- Quick reference, setup steps, configuration options, and binding keys
175
- - [Usage & Examples](./usage) -- Sending emails, templates, queue executors, and verification
176
- - [API Reference](./api) -- Architecture, interfaces, and internals
186
+ - [Overview](./) -- quick start, imports, common configuration tasks
187
+ - [Usage & Examples](./usage) -- sending emails, templates, queue executors, verification generators
188
+ - [API Reference](./api) -- architecture, binding keys, interfaces, and internals