@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
@@ -1,91 +1,148 @@
1
- # Static Asset -- Error Reference
1
+ ---
2
+ title: Static Asset Component - Error Reference
3
+ description: Every error condition StaticAssetComponent and its storage helpers can raise, plus fixes
4
+ difficulty: intermediate
5
+ ---
6
+
7
+ # Error Reference
8
+
9
+ Every error condition the static asset controller and storage helpers can raise, with cause and fix.
10
+
11
+ ## Error conditions
12
+
13
+ | Message | Cause | HTTP Status |
14
+ |---------|-------|-------------|
15
+ | `"Invalid bucket name"` | `bucketName` fails `isValidName()` | `400` |
16
+ | `"Invalid object name or path"` | `objectName` fails `isValidPath()` | `400` |
17
+ | `"Invalid folder path"` | Upload's `folderPath` query param is empty after trimming leading/trailing slashes | `400` |
18
+ | <code v-pre>"Folder path exceeds max depth of {n}"</code> | Upload's `folderPath` has more segments than `maxFolderDepth` (default `2`) | `400` |
19
+ | <code v-pre>"Invalid folder path segment: {segment}"</code> | One `folderPath` segment fails `isValidName()` | `400` |
20
+ | <code v-pre>"Empty file content \| name: {originalName}"</code> | The uploaded file's buffer is empty after multipart parsing (or after re-reading a disk-spooled file) | `400` |
21
+ | <code v-pre>"Invalid maxKeys \| Expected a positive integer \| value: {value}"</code> | `listObjects`'s `maxKeys` query param does not parse to a positive integer | `400` |
22
+ | <code v-pre>[upload] Bucket does not exist \| name: {bucket}</code> | `helper.upload()` found no matching bucket via `isBucketExists()` | `400` (default) |
23
+ | `[upload] Invalid original file name` | A file's `originalName` fails `isValidName()`, checked inside `helper.upload()` | `400` (default) |
24
+ | `[upload] Invalid folder path` | `helper.upload()`'s own `folderPath` depth/`isValidPath()` check failed | `400` (default) |
25
+ | <code v-pre>[upload] Invalid file size \| size: {size}</code> | A file's `size` is `undefined`, `null`, or negative | `400` (default) |
26
+ | <code v-pre>[upload] Invalid normalized object name \| name: {name}</code> | The name returned by `normalizeNameFn` fails `isValidPath()` | `400` (default) |
27
+ | `[createBucket] Invalid name to create bucket!` | `MinioHelper.createBucket()` called with a name failing `isValidName()` - only reachable calling the helper directly, the controller validates first | `400` (default) |
28
+ | <code v-pre>[parseMultipartBody] storage: {storage} \| Invalid storage type \| Valids: ['memory', 'disk']</code> | `extra.parseMultipartBody.storage` set to something other than `'memory'`/`'disk'` - a configuration error, not user input | `400` (default) |
2
29
 
3
- > Name validation rules and troubleshooting guide for common issues.
30
+ > [!NOTE]
31
+ > Entries marked "default" pass no explicit `statusCode` to `getError()`; `ApplicationError` defaults `statusCode` to `400` in that case.
4
32
 
5
- ## Name Validation
33
+ ## Name validation rules
6
34
 
7
- Bucket names are validated with `helper.isValidName()` (single segment - no path separators allowed). Object names, which may include folder segments (e.g., `2025/uploads/report.pdf`), are validated with `helper.isValidPath()`. The validation blocks:
35
+ Bucket names are validated with `isValidName()` (single segment, no path separators). Object names, which may include folder segments (e.g. `2026/uploads/report.pdf`), are validated with `isValidPath()` - every segment still runs through `isValidName()`.
8
36
 
9
37
  | Pattern | Example | Reason |
10
38
  |---------|---------|--------|
11
39
  | Path traversal | `../etc/passwd` | Contains `..`, `/`, or `\` |
12
40
  | Hidden files | `.hidden` | Starts with `.` |
13
- | Shell injection | `file;rm -rf /` | Contains `;`, `\|`, `&`, `$`, etc. |
14
- | Header injection | `file\ninjected` | Contains `\n`, `\r`, or `\0` |
15
- | Long names | 256+ chars | Exceeds 255 character limit |
41
+ | Shell metacharacters | `file;rm -rf /` | Contains `;`, `\|`, `&`, `$`, `` ` ``, `<`, `>`, `{`, `}`, `[`, `]`, `!`, or `#` |
42
+ | Control characters | `file\ninjected` | Contains `\n`, `\r`, or `\0` |
43
+ | Long names | 256+ characters | Exceeds the 255-character limit |
16
44
  | Empty names | `""`, `" "` | Empty or whitespace-only |
17
-
18
- Every endpoint that accepts `bucketName` validates it and returns HTTP 400 `"Invalid bucket name"` on failure. Every endpoint that accepts `objectName` validates it separately and returns HTTP 400 `"Invalid object name or path"` on failure.
45
+ | Double slashes (path only) | `a//b.png` | `isValidPath()` rejects empty segments |
46
+ | Excess folder depth (path only) | `a/b/c/d.png` with `maxFolderDepth: 2` | `folderDepth = segments.length - 1` exceeds the limit |
47
+ | Long paths (path only) | 1025+ characters | Exceeds the 1024-character normalized-path limit |
19
48
 
20
49
  ## Troubleshooting
21
50
 
22
- ### "Invalid bucket/object name"
23
-
24
- **Cause:** Bucket name validation: fails `isValidName()` - bucket names are single segments and cannot contain `..`, `/`, or `\`, shell special characters, or start with `.`, and must be <= 255 characters. Object name validation: fails `isValidPath()` - object names may contain `/` for folder structure but each segment must pass the same single-segment rules, and the folder depth must not exceed the configured limit.
51
+ ### "Invalid bucket name" / "Invalid object name or path"
25
52
 
26
- **Fix:** Ensure names follow these rules:
27
- - No path separators (`..`, `/`, `\`)
28
- - No leading dot (`.hidden`)
29
- - No shell special characters (`;`, `|`, `&`, `$`, `` ` ``, `<`, `>`, `{`, `}`, `[`, `]`, `!`, `#`)
30
- - No control characters (`\n`, `\r`, `\0`)
31
- - 255 characters or fewer
32
- - Not empty or whitespace-only
53
+ - **Cause:** the name fails the rules above.
54
+ - **Fix:** strip path separators, leading dots, shell metacharacters, and control characters; keep names under 255 characters (1024 for a full object path); never send an empty or whitespace-only value.
33
55
 
34
- > [!NOTE]
35
- > Every bucket-related endpoint (`GET`, `POST`, `DELETE` on `/buckets/:bucketName`) validates the bucket name and returns HTTP 400 with `"Invalid bucket name"` if validation fails. Object-related endpoints validate both bucket and object names.
56
+ ```typescript
57
+ // Wrong - contains a path separator, rejected by isValidName()
58
+ await fetch('/assets/buckets/user/uploads', { method: 'POST' });
36
59
 
37
- ### "Controller not registering"
60
+ // Right - one segment
61
+ await fetch('/assets/buckets/user-uploads', { method: 'POST' });
62
+ ```
38
63
 
39
- **Cause:** Configuration key might be invalid or missing required fields.
64
+ ### "Folder path exceeds max depth" / "Invalid folder path segment"
40
65
 
41
- **Fix:** Ensure each storage configuration has all required fields:
66
+ - **Cause:** the upload's `folderPath` query parameter has more segments than `maxFolderDepth` allows (default `2`), or one segment fails `isValidName()`.
67
+ - **Fix:** flatten the folder structure, or raise the limit via `extra.maxFolderDepth` when registering the backend.
42
68
 
43
69
  ```typescript
44
- import { StaticAssetStorageTypes } from '@venizia/ignis/static-asset';
45
-
46
70
  {
47
- [uniqueKey]: {
48
- controller: { name, basePath, isStrict },
49
- storage: StaticAssetStorageTypes.DISK | StaticAssetStorageTypes.MINIO | StaticAssetStorageTypes.BUN_S3,
50
- helper: IStorageHelper,
51
- extra: {}
52
- }
71
+ storage: StaticAssetStorageTypes.DISK,
72
+ helper: new DiskHelper({ basePath: './uploads' }),
73
+ extra: { maxFolderDepth: 4 },
53
74
  }
54
75
  ```
55
76
 
56
- ### "Files not uploading (DiskHelper)"
77
+ ### "Empty file content"
57
78
 
58
- **Cause:** The `basePath` directory does not exist or the process lacks filesystem permissions.
79
+ - **Cause:** the uploaded file's buffer is empty - either the client sent a zero-byte file field, or `parseMultipartBody` produced no readable content.
80
+ - **Fix:** verify the `FormData` field actually carries file bytes before submitting; a zero-byte file is rejected, this is not a size-limit issue.
59
81
 
60
- **Fix:** Ensure the `basePath` directory exists or can be created, and verify the process has read/write permissions to the target path.
82
+ ### "Invalid maxKeys"
61
83
 
62
- ### "Files not uploading (MinioHelper)"
84
+ - **Cause:** `listObjects`'s `maxKeys` query string does not parse to a positive integer via `Number(maxKeys)` + `Number.isInteger()` - e.g. `maxKeys=abc` or `maxKeys=-1`.
85
+ - **Fix:** only send positive integer strings, or omit the parameter entirely.
63
86
 
64
- **Cause:** MinIO server connectivity or authentication failure.
87
+ ```typescript
88
+ url.searchParams.set('maxKeys', '50'); // OK
89
+ // url.searchParams.set('maxKeys', 'all'); // 400
90
+ ```
65
91
 
66
- **Fix:**
67
- - Verify MinIO server is running
68
- - Check credentials (`accessKey`, `secretKey`)
69
- - Verify network connectivity (`endPoint`, `port`)
70
- - Check if `useSSL` matches your server configuration
92
+ ### "[upload] Bucket does not exist"
71
93
 
72
- ### "Large file uploads failing"
94
+ - **Cause:** `helper.upload()` checked `isBucketExists()` and found no match - the bucket was never created, or was deleted between requests.
95
+ - **Fix:** create the bucket first with `POST /buckets/:bucketName`, or check `GET /buckets/:bucketName` before uploading.
73
96
 
74
- **Cause:** Memory-based multipart parsing cannot handle the file size.
97
+ ### Controller not registering / no routes appear
75
98
 
76
- **Fix:** Switch to disk-based multipart parsing:
99
+ - **Cause:** `STATIC_ASSET_COMPONENT_OPTIONS` was never bound, or was bound to `{}` - the component's default. `binding()` iterates the options object and produces zero controllers for an empty map, without throwing.
100
+ - **Fix:** bind a non-empty options object before `this.component(StaticAssetComponent)`:
77
101
 
78
102
  ```typescript
79
- extra: {
80
- parseMultipartBody: {
81
- storage: 'disk',
82
- uploadDir: './uploads',
103
+ this.bind<TStaticAssetsComponentOptions>({
104
+ key: StaticAssetComponentBindingKeys.STATIC_ASSET_COMPONENT_OPTIONS,
105
+ }).toValue({
106
+ [uniqueKey]: {
107
+ controller: { name: 'AssetController', basePath: '/assets' },
108
+ storage: StaticAssetStorageTypes.DISK,
109
+ helper: new DiskHelper({ basePath: './uploads' }),
83
110
  },
111
+ });
112
+ this.component(StaticAssetComponent);
113
+ ```
114
+
115
+ ### Files not uploading (`DiskHelper`)
116
+
117
+ - **Cause:** the process lacks filesystem permissions on `basePath`, or the disk is out of space. `DiskHelper`'s constructor already creates `basePath` if it does not exist, so a missing directory is rarely the issue.
118
+ - **Fix:** verify the process has read/write permissions to the target path and enough free space.
119
+
120
+ ### Files not uploading (`MinioHelper`)
121
+
122
+ - **Cause:** MinIO server connectivity or authentication failure.
123
+ - **Fix:**
124
+ - Confirm the MinIO server is reachable at `endPoint`/`port`.
125
+ - Verify `accessKey`/`secretKey`.
126
+ - Check `useSSL` matches the server's actual TLS configuration.
127
+
128
+ ### Large file uploads failing or timing out
129
+
130
+ - **Cause:** `parseMultipartBody: { storage: 'memory' }` (the default) buffers the entire file in process memory before writing it to the backend.
131
+ - **Fix:** switch to disk-based spooling:
132
+
133
+ ```typescript
134
+ extra: {
135
+ parseMultipartBody: { storage: 'disk', uploadDir: './tmp/uploads' },
84
136
  }
85
137
  ```
86
138
 
87
- ## See Also
139
+ ### `BunS3Helper` fails to construct or import
140
+
141
+ - **Cause:** running on Node.js. `BunS3Helper` imports `S3Client` from the `bun` builtin module, which only resolves under the Bun runtime.
142
+ - **Fix:** use `MinioHelper` (also S3-compatible) on Node.js, or run the app under Bun.
143
+
144
+ ## See also
88
145
 
89
- - [Setup & Configuration](./) - Quick Reference, Setup Steps, Configuration Options
90
- - [Usage & Examples](./usage) - API Endpoints and Frontend Integration
91
- - [API Reference](./api) - Controller Factory, Storage Interface, MetaLink Schema
146
+ - [Overview](./) - quick start, imports, and common configuration tasks
147
+ - [Usage & Examples](./usage) - task-oriented walkthroughs for every endpoint and MetaLink setup
148
+ - [Full Reference](./api) - controller factory, `IStorageHelper` interface, MetaLink schema, internals