@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.
- package/README.md +14 -14
- package/content/best-practices/api-usage-examples.md +39 -19
- package/content/best-practices/architectural-patterns.md +22 -11
- 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 +26 -2
- 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 +6 -2
- 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 +182 -93
- 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 +107 -322
- package/content/extensions/components/authentication/api.md +454 -603
- package/content/extensions/components/authentication/errors.md +121 -498
- package/content/extensions/components/authentication/index.md +88 -801
- package/content/extensions/components/authentication/usage.md +207 -956
- package/content/extensions/components/authorization/api.md +736 -656
- package/content/extensions/components/authorization/errors.md +168 -206
- package/content/extensions/components/authorization/index.md +82 -797
- package/content/extensions/components/authorization/usage.md +194 -527
- package/content/extensions/components/health-check.md +71 -243
- package/content/extensions/components/mail/api.md +504 -287
- package/content/extensions/components/mail/errors.md +73 -61
- package/content/extensions/components/mail/index.md +96 -467
- package/content/extensions/components/mail/usage.md +130 -172
- package/content/extensions/components/request-tracker.md +66 -173
- package/content/extensions/components/socket-io/api.md +195 -13
- package/content/extensions/components/socket-io/errors.md +3 -3
- package/content/extensions/components/socket-io/index.md +50 -337
- package/content/extensions/components/socket-io/usage.md +143 -26
- package/content/extensions/components/static-asset/api.md +410 -142
- package/content/extensions/components/static-asset/errors.md +110 -53
- package/content/extensions/components/static-asset/index.md +79 -608
- package/content/extensions/components/static-asset/usage.md +180 -300
- package/content/extensions/components/websocket/api.md +275 -399
- package/content/extensions/components/websocket/errors.md +47 -56
- package/content/extensions/components/websocket/index.md +74 -407
- package/content/extensions/components/websocket/usage.md +110 -341
- package/content/extensions/helpers/cron/index.md +51 -160
- package/content/extensions/helpers/crypto/index.md +62 -483
- package/content/extensions/helpers/crypto/reference.md +456 -0
- package/content/extensions/helpers/env/index.md +60 -178
- package/content/extensions/helpers/error/index.md +221 -207
- package/content/extensions/helpers/inversion/index.md +65 -556
- package/content/extensions/helpers/inversion/reference.md +522 -0
- package/content/extensions/helpers/kafka/admin.md +20 -1
- package/content/extensions/helpers/kafka/compile-binary.md +41 -35
- package/content/extensions/helpers/kafka/consumer.md +54 -20
- package/content/extensions/helpers/kafka/examples.md +21 -16
- package/content/extensions/helpers/kafka/index.md +80 -610
- package/content/extensions/helpers/kafka/producer.md +134 -5
- package/content/extensions/helpers/kafka/schema-registry.md +45 -70
- package/content/extensions/helpers/logger/hf-logger.md +193 -0
- package/content/extensions/helpers/logger/index.md +64 -563
- package/content/extensions/helpers/logger/pino.md +85 -0
- package/content/extensions/helpers/logger/reference.md +746 -0
- package/content/extensions/helpers/network/api.md +241 -195
- package/content/extensions/helpers/network/index.md +72 -530
- package/content/extensions/helpers/queue/index.md +72 -900
- package/content/extensions/helpers/queue/reference.md +467 -0
- package/content/extensions/helpers/redis/index.md +73 -645
- package/content/extensions/helpers/redis/reference.md +727 -0
- package/content/extensions/helpers/secrets/index.md +66 -0
- package/content/extensions/helpers/socket-io/api.md +305 -203
- package/content/extensions/helpers/socket-io/index.md +66 -432
- package/content/extensions/helpers/storage/api.md +564 -462
- package/content/extensions/helpers/storage/index.md +77 -573
- package/content/extensions/helpers/types/index.md +66 -499
- package/content/extensions/helpers/types/reference.md +650 -0
- package/content/extensions/helpers/uid/index.md +58 -227
- package/content/extensions/helpers/websocket/api.md +329 -216
- package/content/extensions/helpers/websocket/index.md +65 -503
- package/content/extensions/helpers/worker-thread/index.md +58 -396
- package/content/extensions/helpers/worker-thread/reference.md +428 -0
- package/content/guides/core-concepts/persistent/models.md +1 -1
- package/content/guides/core-concepts/persistent/search-typesense.md +3 -3
- package/content/guides/core-concepts/persistent/transactions.md +1 -1
- package/content/guides/core-concepts/secrets-vault.md +177 -0
- package/content/guides/core-concepts/services.md +1 -1
- package/content/guides/migrations/redis-helpers-migration.md +1 -1
- package/content/guides/migrations/unified-connectors-migration.md +2 -2
- package/content/guides/tutorials/ecommerce-api.md +3 -8
- package/content/references/base/application.md +1 -1
- package/content/references/base/connectors.md +79 -136
- package/content/references/base/datasources-reference.md +599 -0
- package/content/references/base/datasources.md +84 -444
- package/content/references/base/dependency-injection.md +17 -39
- package/content/references/base/filter-system/application-usage.md +69 -121
- package/content/references/base/filter-system/array-operators.md +12 -0
- package/content/references/base/filter-system/comparison-operators.md +12 -0
- package/content/references/base/filter-system/default-filter.md +136 -348
- package/content/references/base/filter-system/fields-order-pagination.md +38 -16
- package/content/references/base/filter-system/index.md +106 -257
- package/content/references/base/filter-system/json-filtering.md +12 -2
- package/content/references/base/filter-system/list-operators.md +16 -2
- package/content/references/base/filter-system/logical-operators.md +13 -0
- package/content/references/base/filter-system/null-operators.md +13 -0
- package/content/references/base/filter-system/pattern-matching.md +12 -0
- package/content/references/base/filter-system/quick-reference.md +11 -2
- package/content/references/base/filter-system/range-operators.md +12 -0
- package/content/references/base/filter-system/tips.md +70 -133
- package/content/references/base/filter-system/use-cases.md +156 -233
- package/content/references/base/middlewares.md +35 -21
- package/content/references/base/models-reference.md +886 -0
- package/content/references/base/models.md +80 -1452
- package/content/references/base/repositories/advanced.md +156 -192
- package/content/references/base/repositories/index.md +77 -650
- package/content/references/base/repositories/mixins.md +22 -18
- package/content/references/base/repositories/relations.md +123 -171
- package/content/references/base/repositories/soft-deletable.md +58 -56
- package/content/references/base/secrets.md +263 -0
- package/content/references/base/services.md +2 -2
- package/content/references/configuration/environment-variables.md +48 -4
- package/content/references/configuration/index.md +49 -31
- 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/index.md +1 -1
- package/content/references/utilities/jsx-reference.md +298 -0
- package/content/references/utilities/jsx.md +82 -525
- package/content/references/utilities/module.md +29 -62
- 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 +57 -218
- 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/package.json +8 -8
|
@@ -1,34 +1,38 @@
|
|
|
1
|
-
|
|
1
|
+
---
|
|
2
|
+
title: WebSocket Component - Error Reference
|
|
3
|
+
description: Error conditions, close codes, and troubleshooting for the WebSocket component
|
|
4
|
+
difficulty: intermediate
|
|
5
|
+
---
|
|
2
6
|
|
|
3
|
-
|
|
7
|
+
# Error Reference
|
|
4
8
|
|
|
5
|
-
|
|
9
|
+
Every error condition the WebSocket component and helper can raise, plus fixes for the ones you'll actually hit.
|
|
6
10
|
|
|
7
|
-
|
|
11
|
+
## Error conditions
|
|
8
12
|
|
|
9
13
|
| Error Message / Close Code | Trigger | Event Type |
|
|
10
14
|
|---------------------------|---------|------------|
|
|
11
15
|
| `"Invalid message format"` | Client sent non-JSON data | `error` event |
|
|
12
|
-
| `"Already authenticated"` | Client sent `authenticate`
|
|
16
|
+
| `"Already authenticated"` | Client sent `authenticate` while state was not `UNAUTHORIZED` | `error` event |
|
|
13
17
|
| `"Not authenticated"` | Client sent a non-`authenticate`, non-`heartbeat` event while unauthenticated | `error` event |
|
|
14
18
|
| `"Authentication failed"` | `authenticateFn` returned `null`/`false` | `error` event + close `4003` |
|
|
15
|
-
| `"Authentication error"` | `authenticateFn` threw
|
|
19
|
+
| `"Authentication error"` | `authenticateFn` threw | `error` event + close `4003` |
|
|
16
20
|
| `"Encryption handshake failed"` | `handshakeFn` returned `null`/`false` | `error` event + close `4004` |
|
|
17
21
|
| Close `4004` (no error event) | `requireEncryption: true` but no `handshakeFn` configured | close `4004` only |
|
|
18
|
-
| Close `4001` | Auth timeout
|
|
19
|
-
| Close `4001` | Auth in-progress timeout
|
|
20
|
-
| Close `4002` | Heartbeat timeout
|
|
22
|
+
| Close `4001` | Auth timeout - no `authenticate` sent within `authTimeout` | close `4001` only |
|
|
23
|
+
| Close `4001` | Auth in-progress timeout - `authenticateFn`/`handshakeFn` slower than `authTimeout * 3` | close `4001` only |
|
|
24
|
+
| Close `4002` | Heartbeat timeout - no messages within `heartbeatTimeout` | close `4002` only |
|
|
21
25
|
| Close `1001` | Server shutdown (`wsHelper.shutdown()`) | close `1001` only |
|
|
22
26
|
| `"Invalid redis connection!"` | Constructor: `redisConnection` is falsy | thrown `Error` (startup) |
|
|
23
27
|
| `"WebSocket upgrade failed"` | `server.upgrade()` returned `false` | HTTP `500` response |
|
|
24
28
|
|
|
25
|
-
### Component
|
|
29
|
+
### Component-level errors
|
|
26
30
|
|
|
27
31
|
| Method | Condition | Error Message |
|
|
28
32
|
|--------|-----------|---------------|
|
|
29
33
|
| `binding()` | `application` is falsy | `"[binding] Invalid application to bind WebSocketComponent"` |
|
|
30
34
|
| `binding()` | Node.js runtime detected | `"[WebSocketComponent] Node.js runtime is not supported yet. Please use Bun runtime."` |
|
|
31
|
-
| `resolveBindings()` | `REDIS_CONNECTION` not instanceof
|
|
35
|
+
| `resolveBindings()` | `REDIS_CONNECTION` not `instanceof AbstractRedisHelper` | `"[WebSocketComponent][resolveBindings] Invalid instance of redisConnection ..."` |
|
|
32
36
|
| `resolveBindings()` | `AUTHENTICATE_HANDLER` is falsy | `"[WebSocketComponent] Invalid authenticateFn to setup WebSocket server!"` |
|
|
33
37
|
| `registerBunHook()` | Bun server instance not available | `"[WebSocketComponent] Bun server instance not available!"` |
|
|
34
38
|
|
|
@@ -36,15 +40,13 @@ The server can send `error` events or close the connection under the following c
|
|
|
36
40
|
|
|
37
41
|
### "WebSocket not initialized"
|
|
38
42
|
|
|
39
|
-
**Cause
|
|
40
|
-
|
|
41
|
-
**Fix**: Use the lazy getter pattern shown in [Usage & Examples](./usage). Never `@inject` `WEBSOCKET_INSTANCE` directly in a constructor -- it does not exist yet at construction time.
|
|
43
|
+
- **Cause:** `WebSocketServerHelper` was accessed before the server started - e.g. during DI construction.
|
|
44
|
+
- **Fix:** Use the lazy getter pattern from [Usage & Examples](./usage). Never `@inject` `WEBSOCKET_INSTANCE` in a constructor - it does not exist yet at that point.
|
|
42
45
|
|
|
43
46
|
### "Invalid instance of redisConnection"
|
|
44
47
|
|
|
45
|
-
**Cause
|
|
46
|
-
|
|
47
|
-
**Fix**: Use one of the concrete topology helpers:
|
|
48
|
+
- **Cause:** The value bound to `REDIS_CONNECTION` is not an `AbstractRedisHelper` instance - i.e. not a `RedisSingleHelper`, `RedisClusterHelper`, or `RedisSentinelHelper`.
|
|
49
|
+
- **Fix:** Bind one of the concrete topology helpers, not a raw `ioredis` client.
|
|
48
50
|
|
|
49
51
|
```typescript
|
|
50
52
|
import { WebSocketBindingKeys } from '@venizia/ignis/websocket';
|
|
@@ -53,71 +55,60 @@ import { WebSocketBindingKeys } from '@venizia/ignis/websocket';
|
|
|
53
55
|
this.bind({ key: WebSocketBindingKeys.REDIS_CONNECTION })
|
|
54
56
|
.toValue(new RedisSingleHelper({ name: 'websocket', host, port, password }));
|
|
55
57
|
|
|
56
|
-
// Wrong
|
|
57
|
-
this.bind({ key: WebSocketBindingKeys.REDIS_CONNECTION })
|
|
58
|
-
.toValue(new Redis(6379)); // This is NOT an AbstractRedisHelper!
|
|
58
|
+
// Wrong: raw ioredis client, not an AbstractRedisHelper
|
|
59
|
+
this.bind({ key: WebSocketBindingKeys.REDIS_CONNECTION }).toValue(new Redis(6379));
|
|
59
60
|
```
|
|
60
61
|
|
|
61
62
|
### "Invalid authenticateFn to setup WebSocket server!"
|
|
62
63
|
|
|
63
|
-
**Cause
|
|
64
|
-
|
|
65
|
-
**Fix**: Bind a valid authentication function before registering the component:
|
|
64
|
+
- **Cause:** No function bound to `AUTHENTICATE_HANDLER`, or it was bound as `null`.
|
|
65
|
+
- **Fix:** Bind a valid authentication function before registering the component.
|
|
66
66
|
|
|
67
67
|
```typescript
|
|
68
68
|
import { WebSocketBindingKeys } from '@venizia/ignis/websocket';
|
|
69
69
|
|
|
70
|
-
this.bind<TWebSocketAuthenticateFn>({
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
});
|
|
70
|
+
this.bind<TWebSocketAuthenticateFn>({ key: WebSocketBindingKeys.AUTHENTICATE_HANDLER }).toValue(
|
|
71
|
+
async data => {
|
|
72
|
+
const user = await verifyJWT(data.token as string);
|
|
73
|
+
return user ? { userId: user.id } : null;
|
|
74
|
+
},
|
|
75
|
+
);
|
|
77
76
|
```
|
|
78
77
|
|
|
79
78
|
### "Node.js runtime is not supported yet"
|
|
80
79
|
|
|
81
|
-
**Cause
|
|
82
|
-
|
|
83
|
-
**Fix**: Either switch to Bun runtime, or use the [Socket.IO Component](../socket-io/) which supports both Node.js and Bun.
|
|
80
|
+
- **Cause:** Running on Node.js. The WebSocket component only supports Bun.
|
|
81
|
+
- **Fix:** Switch to Bun, or use the [Socket.IO Component](../socket-io/) instead - it supports both runtimes.
|
|
84
82
|
|
|
85
83
|
### "Bun server instance not available!"
|
|
86
84
|
|
|
87
|
-
**Cause
|
|
88
|
-
|
|
89
|
-
**Fix**: Check server startup logs for errors. Ensure `start()` completes successfully before post-start hooks run.
|
|
85
|
+
- **Cause:** The post-start hook ran but could not obtain the Bun server instance - typically the server failed to start.
|
|
86
|
+
- **Fix:** Check server startup logs. Confirm `start()` completes successfully before post-start hooks run.
|
|
90
87
|
|
|
91
|
-
### WebSocket connects but messages
|
|
88
|
+
### WebSocket connects but no messages arrive
|
|
92
89
|
|
|
93
|
-
**Cause
|
|
94
|
-
|
|
95
|
-
**Fix**: Ensure your client authenticates immediately after connection:
|
|
90
|
+
- **Cause:** The client never sent `{ event: 'authenticate', data: { ... } }`. Unauthenticated clients are disconnected after `authTimeout` (5s default) and receive only `error` events.
|
|
91
|
+
- **Fix:** Authenticate immediately after the connection opens.
|
|
96
92
|
|
|
97
93
|
```javascript
|
|
98
94
|
const ws = new WebSocket('wss://example.com/ws');
|
|
99
95
|
|
|
100
96
|
ws.onopen = () => {
|
|
101
|
-
ws.send(JSON.stringify({
|
|
102
|
-
event: 'authenticate',
|
|
103
|
-
data: { type: 'Bearer', token: 'your-jwt-token' },
|
|
104
|
-
}));
|
|
97
|
+
ws.send(JSON.stringify({ event: 'authenticate', data: { type: 'Bearer', token: 'your-jwt-token' } }));
|
|
105
98
|
};
|
|
106
99
|
|
|
107
|
-
ws.onmessage =
|
|
100
|
+
ws.onmessage = event => {
|
|
108
101
|
const msg = JSON.parse(event.data);
|
|
109
102
|
if (msg.event === 'connected') {
|
|
110
103
|
console.log('Authenticated! Client ID:', msg.data.id);
|
|
111
|
-
// Now ready to send/receive events
|
|
112
104
|
}
|
|
113
105
|
};
|
|
114
106
|
```
|
|
115
107
|
|
|
116
108
|
### Client disconnected with code 4002
|
|
117
109
|
|
|
118
|
-
**Cause
|
|
119
|
-
|
|
120
|
-
**Fix**: Implement a heartbeat on the client side:
|
|
110
|
+
- **Cause:** No message (including `heartbeat`) arrived within `heartbeatTimeout` (90s default).
|
|
111
|
+
- **Fix:** Send a heartbeat on an interval shorter than the timeout.
|
|
121
112
|
|
|
122
113
|
```javascript
|
|
123
114
|
setInterval(() => {
|
|
@@ -127,11 +118,11 @@ setInterval(() => {
|
|
|
127
118
|
}, 30000);
|
|
128
119
|
```
|
|
129
120
|
|
|
130
|
-
## See
|
|
121
|
+
## See also
|
|
131
122
|
|
|
132
|
-
- [
|
|
133
|
-
- [Usage & Examples](./usage) -
|
|
134
|
-
- [
|
|
135
|
-
- [WebSocketServerHelper](/extensions/helpers/websocket/) -
|
|
136
|
-
- [Socket.IO Component](../socket-io/) - Node.js-compatible alternative
|
|
137
|
-
- [Bun WebSocket Documentation](https://bun.sh/docs/api/websockets) -
|
|
123
|
+
- [Overview](./) - quick start, imports, common configuration tasks
|
|
124
|
+
- [Usage & Examples](./usage) - injecting the helper, `WebSocketEmitter`, wire protocol, client tracking, delivery strategy
|
|
125
|
+
- [Full Reference](./api) - binding keys, configuration options, `WebSocketEmitter` API, internals
|
|
126
|
+
- [WebSocketServerHelper](/extensions/helpers/websocket/) - helper API documentation
|
|
127
|
+
- [Socket.IO Component](../socket-io/) - Node.js-compatible alternative
|
|
128
|
+
- [Bun WebSocket Documentation](https://bun.sh/docs/api/websockets) - official Bun WebSocket API reference
|