@venizia/ignis-docs 0.2.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/README.md +14 -14
- package/content/best-practices/api-usage-examples.md +39 -19
- package/content/best-practices/architectural-patterns.md +24 -13
- package/content/best-practices/architecture-decisions.md +29 -16
- package/content/best-practices/code-style-standards/advanced-patterns.md +43 -31
- package/content/best-practices/code-style-standards/constants-configuration.md +19 -4
- package/content/best-practices/code-style-standards/control-flow.md +33 -1
- package/content/best-practices/code-style-standards/documentation.md +28 -8
- package/content/best-practices/code-style-standards/function-patterns.md +15 -4
- package/content/best-practices/code-style-standards/index.md +7 -2
- package/content/best-practices/code-style-standards/naming-conventions.md +27 -3
- package/content/best-practices/code-style-standards/route-definitions.md +9 -5
- package/content/best-practices/code-style-standards/tooling.md +14 -1
- package/content/best-practices/code-style-standards/type-safety.md +39 -6
- package/content/best-practices/common-pitfalls.md +59 -35
- package/content/best-practices/contribution-workflow.md +8 -4
- package/content/best-practices/data-modeling.md +78 -62
- package/content/best-practices/deployment-strategies.md +56 -19
- package/content/best-practices/error-handling.md +247 -153
- package/content/best-practices/index.md +6 -0
- package/content/best-practices/performance-optimization.md +26 -13
- package/content/best-practices/security-guidelines.md +35 -9
- package/content/best-practices/testing-strategies.md +7 -2
- package/content/best-practices/troubleshooting-tips.md +27 -17
- package/content/extensions/components/api-reference.md +109 -323
- package/content/extensions/components/authentication/api.md +489 -602
- package/content/extensions/components/authentication/errors.md +135 -498
- package/content/extensions/components/authentication/index.md +89 -801
- package/content/extensions/components/authentication/usage.md +231 -955
- package/content/extensions/components/authorization/api.md +991 -644
- package/content/extensions/components/authorization/errors.md +204 -208
- package/content/extensions/components/authorization/getting-started.md +227 -0
- package/content/extensions/components/authorization/index.md +88 -795
- package/content/extensions/components/authorization/usage.md +219 -528
- package/content/extensions/components/health-check.md +77 -243
- package/content/extensions/components/index.md +24 -90
- package/content/extensions/components/mail/api.md +553 -285
- package/content/extensions/components/mail/errors.md +76 -62
- package/content/extensions/components/mail/index.md +111 -463
- package/content/extensions/components/mail/usage.md +139 -173
- package/content/extensions/components/request-tracker.md +70 -173
- package/content/extensions/components/socket-io/api.md +462 -785
- package/content/extensions/components/socket-io/errors.md +49 -51
- package/content/extensions/components/socket-io/index.md +69 -372
- package/content/extensions/components/socket-io/usage.md +212 -105
- package/content/extensions/components/static-asset/api.md +461 -141
- package/content/extensions/components/static-asset/errors.md +121 -53
- package/content/extensions/components/static-asset/index.md +84 -606
- package/content/extensions/components/static-asset/usage.md +184 -299
- package/content/extensions/components/template/index.md +3 -3
- package/content/extensions/components/websocket/api.md +311 -404
- package/content/extensions/components/websocket/errors.md +47 -56
- package/content/extensions/components/websocket/index.md +75 -407
- package/content/extensions/components/websocket/usage.md +120 -338
- package/content/extensions/helpers/cron/index.md +52 -160
- package/content/extensions/helpers/crypto/index.md +67 -480
- package/content/extensions/helpers/crypto/reference.md +528 -0
- package/content/extensions/helpers/env/index.md +64 -178
- package/content/extensions/helpers/error/index.md +286 -196
- package/content/extensions/helpers/index.md +61 -47
- package/content/extensions/helpers/inversion/index.md +76 -550
- package/content/extensions/helpers/inversion/reference.md +530 -0
- package/content/extensions/helpers/kafka/admin.md +23 -3
- package/content/extensions/helpers/kafka/compile-binary.md +83 -52
- package/content/extensions/helpers/kafka/consumer.md +65 -28
- package/content/extensions/helpers/kafka/examples.md +46 -253
- package/content/extensions/helpers/kafka/index.md +55 -617
- package/content/extensions/helpers/kafka/producer.md +156 -22
- package/content/extensions/helpers/kafka/schema-registry.md +59 -79
- package/content/extensions/helpers/logger/hf-logger.md +220 -0
- package/content/extensions/helpers/logger/index.md +78 -552
- package/content/extensions/helpers/logger/pino.md +105 -0
- package/content/extensions/helpers/logger/reference.md +937 -0
- package/content/extensions/helpers/network/api.md +276 -195
- package/content/extensions/helpers/network/index.md +87 -524
- package/content/extensions/helpers/queue/index.md +80 -897
- package/content/extensions/helpers/queue/reference.md +494 -0
- package/content/extensions/helpers/redis/index.md +86 -640
- package/content/extensions/helpers/redis/reference.md +784 -0
- package/content/extensions/helpers/secrets/index.md +136 -0
- package/content/extensions/helpers/socket-io/api.md +325 -204
- package/content/extensions/helpers/socket-io/index.md +79 -429
- package/content/extensions/helpers/storage/api.md +584 -464
- package/content/extensions/helpers/storage/index.md +80 -573
- package/content/extensions/helpers/types/index.md +75 -495
- package/content/extensions/helpers/types/reference.md +689 -0
- package/content/extensions/helpers/uid/index.md +176 -189
- package/content/extensions/helpers/websocket/api.md +366 -214
- package/content/extensions/helpers/websocket/index.md +68 -503
- package/content/extensions/helpers/worker-thread/index.md +62 -396
- package/content/extensions/helpers/worker-thread/reference.md +428 -0
- 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/models.md +1 -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 +28 -16
- package/content/guides/core-concepts/persistent/sqlite.md +296 -0
- package/content/guides/core-concepts/persistent/transactions.md +12 -11
- package/content/guides/core-concepts/secrets-vault.md +177 -0
- package/content/guides/core-concepts/services.md +1 -1
- 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 +5 -4
- package/content/guides/migrations/scoped-rbac-migration.md +5 -5
- package/content/guides/migrations/unified-connectors-migration.md +8 -7
- package/content/guides/tutorials/ecommerce-api.md +3 -8
- package/content/guides/tutorials/realtime-chat.md +1 -1
- package/content/references/base/application.md +64 -22
- package/content/references/base/components.md +3 -3
- package/content/references/base/connectors.md +79 -136
- package/content/references/base/controllers.md +12 -12
- package/content/references/base/datasources-reference.md +600 -0
- package/content/references/base/datasources.md +84 -444
- package/content/references/base/dependency-injection.md +25 -46
- package/content/references/base/filter-system/application-usage.md +95 -123
- package/content/references/base/filter-system/array-operators.md +33 -43
- package/content/references/base/filter-system/comparison-operators.md +55 -63
- package/content/references/base/filter-system/default-filter.md +144 -350
- package/content/references/base/filter-system/fields-order-pagination.md +116 -148
- package/content/references/base/filter-system/index.md +114 -253
- package/content/references/base/filter-system/json-filtering.md +52 -181
- package/content/references/base/filter-system/list-operators.md +28 -44
- package/content/references/base/filter-system/logical-operators.md +69 -114
- package/content/references/base/filter-system/null-operators.md +41 -98
- package/content/references/base/filter-system/pattern-matching.md +48 -51
- package/content/references/base/filter-system/quick-reference.md +93 -196
- package/content/references/base/filter-system/range-operators.md +22 -38
- package/content/references/base/filter-system/tips.md +70 -133
- package/content/references/base/filter-system/use-cases.md +173 -232
- package/content/references/base/grpc-controllers.md +53 -17
- package/content/references/base/index.md +5 -3
- package/content/references/base/middlewares.md +43 -28
- package/content/references/base/models-reference.md +886 -0
- package/content/references/base/models.md +81 -1452
- package/content/references/base/providers.md +8 -8
- package/content/references/base/repositories/advanced.md +281 -419
- package/content/references/base/repositories/index.md +84 -644
- package/content/references/base/repositories/mixins.md +25 -21
- package/content/references/base/repositories/relations.md +194 -375
- package/content/references/base/repositories/soft-deletable.md +67 -55
- package/content/references/base/secrets.md +267 -0
- package/content/references/base/services.md +8 -6
- package/content/references/configuration/environment-variables.md +73 -21
- package/content/references/configuration/index.md +51 -31
- package/content/references/index.md +1 -1
- package/content/references/quick-reference.md +3 -16
- package/content/references/utilities/crypto.md +35 -76
- package/content/references/utilities/date.md +33 -73
- package/content/references/utilities/duration.md +85 -0
- package/content/references/utilities/index.md +6 -2
- package/content/references/utilities/jsx-reference.md +298 -0
- package/content/references/utilities/jsx.md +82 -525
- package/content/references/utilities/module.md +81 -61
- package/content/references/utilities/parse.md +34 -64
- package/content/references/utilities/performance.md +33 -58
- package/content/references/utilities/promise.md +28 -62
- package/content/references/utilities/request.md +58 -218
- package/content/references/utilities/retry.md +139 -0
- package/content/references/utilities/schema.md +43 -137
- package/content/references/utilities/statuses-reference.md +361 -0
- package/content/references/utilities/statuses.md +63 -667
- 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 +24 -23
|
@@ -1,91 +1,159 @@
|
|
|
1
|
-
|
|
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
|
+
| <code v-pre>[upload] Invalid folder path \| depth: {n} \| max: {m}</code> | `helper.upload()`'s own check found more `folderPath` segments than `maxFolderDepth` allows | `400` (default) |
|
|
25
|
+
| `[upload] Invalid folder path` | `helper.upload()`'s own `isValidPath()` check failed for any other reason | `400` (default) |
|
|
26
|
+
| <code v-pre>[upload] Invalid file size \| size: {size}</code> | A file's `size` is `undefined`, `null`, or negative | `400` (default) |
|
|
27
|
+
| <code v-pre>[upload] Invalid normalized object name \| name: {name}</code> | The name returned by `normalizeNameFn` fails `isValidPath()` | `400` (default) |
|
|
28
|
+
| `[createBucket] Invalid name to create bucket!` | `createBucket()` called with a name failing `isValidName()` - only reachable calling a helper directly, the controller validates first | `400` (default) |
|
|
29
|
+
| <code v-pre>[createBucket] Bucket already exists \| name: {name}</code> | `DiskHelper.createBucket()` called with a name that already exists on disk. `MinioHelper` and `BunS3Helper` throw their own SDK/S3 error text for the same case instead | `400` (default) |
|
|
30
|
+
| `[removeBucket] Invalid name to remove bucket!` | `removeBucket()` called with a name failing `isValidName()` - only reachable calling a helper directly | `400` (default) |
|
|
31
|
+
| <code v-pre>[removeBucket] Bucket does not exist \| name: {name}</code> | `DiskHelper.removeBucket()` - no directory at that bucket name | `400` (default) |
|
|
32
|
+
| <code v-pre>[removeBucket] Bucket is not empty \| name: {name}</code> | `DiskHelper.removeBucket()` - the bucket directory still has files in it | `400` (default) |
|
|
33
|
+
| <code v-pre>[getFile] File not found \| bucket: {bucket} \| name: {name}</code> (also `[getStat]`, `[removeObject]`) | `DiskHelper` - no file at that bucket/object path | `400` (default) |
|
|
34
|
+
| <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
35
|
|
|
3
|
-
>
|
|
36
|
+
> [!NOTE]
|
|
37
|
+
> Entries marked "default" pass no explicit `statusCode` to `getError()`. `ApplicationError` defaults `statusCode` to `400` in that case.
|
|
4
38
|
|
|
5
|
-
## Name
|
|
39
|
+
## Name validation rules
|
|
6
40
|
|
|
7
|
-
Bucket names are validated with `
|
|
41
|
+
Bucket names are validated with `isValidName()` (single segment, no path separators). Object names, which may include folder segments (for example `2026/uploads/report.pdf`), are validated with `isValidPath()` - every segment still runs through `isValidName()`.
|
|
8
42
|
|
|
9
43
|
| Pattern | Example | Reason |
|
|
10
44
|
|---------|---------|--------|
|
|
11
45
|
| Path traversal | `../etc/passwd` | Contains `..`, `/`, or `\` |
|
|
12
46
|
| Hidden files | `.hidden` | Starts with `.` |
|
|
13
|
-
| Shell
|
|
14
|
-
|
|
|
15
|
-
| Long names | 256+
|
|
47
|
+
| Shell metacharacters | `file;rm -rf /` | Contains `;`, `\|`, `&`, `$`, `` ` ``, `<`, `>`, `{`, `}`, `[`, `]`, `!`, or `#` |
|
|
48
|
+
| Control characters | `file\ninjected` | Contains `\n`, `\r`, or `\0` |
|
|
49
|
+
| Long names | 256+ characters | Exceeds the 255-character limit |
|
|
16
50
|
| Empty names | `""`, `" "` | Empty or whitespace-only |
|
|
17
|
-
|
|
18
|
-
|
|
51
|
+
| Double slashes (path only) | `a//b.png` | `isValidPath()` rejects empty segments |
|
|
52
|
+
| Excess folder depth (path only) | `a/b/c/d.png` with `maxFolderDepth: 2` | `folderDepth = segments.length - 1` exceeds the limit |
|
|
53
|
+
| Long paths (path only) | 1025+ characters | Exceeds the 1024-character normalized-path limit |
|
|
19
54
|
|
|
20
55
|
## Troubleshooting
|
|
21
56
|
|
|
22
|
-
### "Invalid bucket/object name"
|
|
57
|
+
### "Invalid bucket name" / "Invalid object name or path"
|
|
23
58
|
|
|
24
|
-
**Cause:**
|
|
59
|
+
- **Cause:** the name fails the rules above.
|
|
60
|
+
- **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.
|
|
25
61
|
|
|
26
|
-
|
|
27
|
-
-
|
|
28
|
-
|
|
29
|
-
- No shell special characters (`;`, `|`, `&`, `$`, `` ` ``, `<`, `>`, `{`, `}`, `[`, `]`, `!`, `#`)
|
|
30
|
-
- No control characters (`\n`, `\r`, `\0`)
|
|
31
|
-
- 255 characters or fewer
|
|
32
|
-
- Not empty or whitespace-only
|
|
33
|
-
|
|
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.
|
|
62
|
+
```typescript
|
|
63
|
+
// Wrong - contains a path separator, rejected by isValidName()
|
|
64
|
+
await fetch('/assets/buckets/user/uploads', { method: 'POST' });
|
|
36
65
|
|
|
37
|
-
|
|
66
|
+
// Right - one segment
|
|
67
|
+
await fetch('/assets/buckets/user-uploads', { method: 'POST' });
|
|
68
|
+
```
|
|
38
69
|
|
|
39
|
-
|
|
70
|
+
### "Folder path exceeds max depth" / "Invalid folder path segment"
|
|
40
71
|
|
|
41
|
-
**
|
|
72
|
+
- **Cause:** the upload's `folderPath` query parameter has more segments than `maxFolderDepth` allows (default `2`), or one segment fails `isValidName()`.
|
|
73
|
+
- **Fix:** flatten the folder structure, or raise the limit via `extra.maxFolderDepth` when registering the backend.
|
|
42
74
|
|
|
43
75
|
```typescript
|
|
44
|
-
import { StaticAssetStorageTypes } from '@venizia/ignis/static-asset';
|
|
45
|
-
|
|
46
76
|
{
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
helper: IStorageHelper,
|
|
51
|
-
extra: {}
|
|
52
|
-
}
|
|
77
|
+
storage: StaticAssetStorageTypes.DISK,
|
|
78
|
+
helper: new DiskHelper({ basePath: './uploads' }),
|
|
79
|
+
extra: { maxFolderDepth: 4 },
|
|
53
80
|
}
|
|
54
81
|
```
|
|
55
82
|
|
|
56
|
-
### "
|
|
83
|
+
### "Empty file content"
|
|
84
|
+
|
|
85
|
+
- **Cause:** the uploaded file's buffer is empty - either the client sent a zero-byte file field, or `parseMultipartBody` produced no readable content.
|
|
86
|
+
- **Fix:** verify the `FormData` field actually carries file bytes before submitting. A zero-byte file is rejected - this is not a size-limit issue.
|
|
87
|
+
|
|
88
|
+
### "Invalid maxKeys"
|
|
57
89
|
|
|
58
|
-
**Cause:**
|
|
90
|
+
- **Cause:** `listObjects`'s `maxKeys` query string does not parse to a positive integer via `Number(maxKeys)` + `Number.isInteger()` - for example `maxKeys=abc` or `maxKeys=-1`.
|
|
91
|
+
- **Fix:** only send positive integer strings, or omit the parameter entirely.
|
|
59
92
|
|
|
60
|
-
|
|
93
|
+
```typescript
|
|
94
|
+
url.searchParams.set('maxKeys', '50'); // OK
|
|
95
|
+
// url.searchParams.set('maxKeys', 'all'); // 400
|
|
96
|
+
```
|
|
61
97
|
|
|
62
|
-
### "
|
|
98
|
+
### "[upload] Bucket does not exist"
|
|
63
99
|
|
|
64
|
-
**Cause:**
|
|
100
|
+
- **Cause:** `helper.upload()` checked `isBucketExists()` and found no match - the bucket was never created, or was deleted between requests.
|
|
101
|
+
- **Fix:** create the bucket first with `POST /buckets/:bucketName`, or check `GET /buckets/:bucketName` before uploading.
|
|
65
102
|
|
|
66
|
-
|
|
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
|
|
103
|
+
### "Bucket already exists"
|
|
71
104
|
|
|
72
|
-
|
|
105
|
+
- **Cause:** `POST /buckets/:bucketName` was called for a bucket that already exists. `createBucket()` throws rather than returning `null` - it does not silently succeed on a duplicate.
|
|
106
|
+
- **Fix:** check `GET /buckets/:bucketName` first, or treat the throw as "already there" and continue.
|
|
73
107
|
|
|
74
|
-
|
|
108
|
+
### Controller not registering / no routes appear
|
|
75
109
|
|
|
76
|
-
**
|
|
110
|
+
- **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.
|
|
111
|
+
- **Fix:** bind a non-empty options object before `this.component(StaticAssetComponent)`:
|
|
77
112
|
|
|
78
113
|
```typescript
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
114
|
+
this.bind<TStaticAssetsComponentOptions>({
|
|
115
|
+
key: StaticAssetComponentBindingKeys.STATIC_ASSET_COMPONENT_OPTIONS,
|
|
116
|
+
}).toValue({
|
|
117
|
+
[uniqueKey]: {
|
|
118
|
+
controller: { name: 'AssetController', basePath: '/assets' },
|
|
119
|
+
storage: StaticAssetStorageTypes.DISK,
|
|
120
|
+
helper: new DiskHelper({ basePath: './uploads' }),
|
|
83
121
|
},
|
|
122
|
+
});
|
|
123
|
+
this.component(StaticAssetComponent);
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
### Files not uploading (`DiskHelper`)
|
|
127
|
+
|
|
128
|
+
- **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.
|
|
129
|
+
- **Fix:** verify the process has read/write permissions to the target path and enough free space.
|
|
130
|
+
|
|
131
|
+
### Files not uploading (`MinioHelper`)
|
|
132
|
+
|
|
133
|
+
- **Cause:** MinIO server connectivity or authentication failure.
|
|
134
|
+
- **Fix:**
|
|
135
|
+
- Confirm the MinIO server is reachable at `endPoint`/`port`.
|
|
136
|
+
- Verify `accessKey`/`secretKey`.
|
|
137
|
+
- Check `useSSL` matches the server's actual TLS configuration.
|
|
138
|
+
|
|
139
|
+
### Large file uploads failing or timing out
|
|
140
|
+
|
|
141
|
+
- **Cause:** `parseMultipartBody: { storage: 'memory' }` (the default) buffers the entire file in process memory before writing it to the backend.
|
|
142
|
+
- **Fix:** switch to disk-based spooling:
|
|
143
|
+
|
|
144
|
+
```typescript
|
|
145
|
+
extra: {
|
|
146
|
+
parseMultipartBody: { storage: 'disk', uploadDir: './tmp/uploads' },
|
|
84
147
|
}
|
|
85
148
|
```
|
|
86
149
|
|
|
87
|
-
|
|
150
|
+
### `BunS3Helper` fails to construct or import
|
|
151
|
+
|
|
152
|
+
- **Cause:** running on Node.js. `BunS3Helper` imports `S3Client` from the `bun` builtin module, which only resolves under the Bun runtime.
|
|
153
|
+
- **Fix:** use `MinioHelper` (also S3-compatible) on Node.js, or run the app under Bun.
|
|
154
|
+
|
|
155
|
+
## See also
|
|
88
156
|
|
|
89
|
-
- [
|
|
90
|
-
- [Usage & Examples](./usage) -
|
|
91
|
-
- [
|
|
157
|
+
- [Overview](./) - quick start, imports, and common configuration tasks
|
|
158
|
+
- [Usage & Examples](./usage) - task-oriented walkthroughs for every endpoint and MetaLink setup
|
|
159
|
+
- [Full Reference](./api) - controller factory, `IStorageHelper` interface, MetaLink schema, internals
|