@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,34 +1,38 @@
1
- # WebSocket -- Error Reference
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
- > Error conditions table and troubleshooting guide for the WebSocket component.
7
+ # Error Reference
4
8
 
5
- ## Error Conditions
9
+ Every error condition the WebSocket component and helper can raise, plus fixes for the ones you'll actually hit.
6
10
 
7
- The server can send `error` events or close the connection under the following conditions:
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` when state is not `UNAUTHORIZED` | `error` event |
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 an exception | `error` event + close `4003` |
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 (initial: no `authenticate` sent) | close `4001` only |
19
- | Close `4001` | Auth in-progress timeout (`authenticateFn`/`handshakeFn` too slow) | close `4001` only |
20
- | Close `4002` | Heartbeat timeout (no messages within `heartbeatTimeout`) | close `4002` only |
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 Errors
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 `AbstractRedisHelper` | `"[WebSocketComponent][resolveBindings] Invalid instance of redisConnection | Please init connection with RedisSingleHelper (single), RedisClusterHelper (cluster), or RedisSentinelHelper (sentinel)"` |
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**: You are trying to use `WebSocketServerHelper` before the server has started (e.g., during DI construction).
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**: The value bound to `REDIS_CONNECTION` is not an instance of `AbstractRedisHelper` (i.e. not a `RedisSingleHelper`, `RedisClusterHelper`, or `RedisSentinelHelper`).
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 -- raw ioredis client
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**: No authentication function was bound to `AUTHENTICATE_HANDLER`, or it was bound as `null`.
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
- key: WebSocketBindingKeys.AUTHENTICATE_HANDLER,
72
- }).toValue(async (data) => {
73
- const token = data.token as string;
74
- const user = await verifyJWT(token);
75
- return user ? { userId: user.id } : null;
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**: Running the application on Node.js. The WebSocket component only supports Bun.
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**: The post-start hook executed but could not obtain the Bun server instance. This typically means the server failed to start.
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 are not received
88
+ ### WebSocket connects but no messages arrive
92
89
 
93
- **Cause**: Clients must send <code v-pre>{ event: 'authenticate', data: { type: '...', token: '...', publicKey?: '...' } }</code> after connecting. Unauthenticated clients are disconnected after the timeout (default: 5 seconds) and cannot receive messages other than `error` events.
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 = (event) => {
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**: The client did not send any messages (including heartbeat) within the `heartbeatTimeout` period (default: 90 seconds).
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 Also
121
+ ## See also
131
122
 
132
- - [Setup & Configuration](./) - Quick reference, imports, setup steps, configuration, and binding keys
133
- - [Usage & Examples](./usage) - Server-side usage, emitter, wire protocol, client tracking, and delivery strategy
134
- - [API Reference](./api) - Architecture, WebSocketEmitter API, and internals
135
- - [WebSocketServerHelper](/extensions/helpers/websocket/) - Helper API documentation
136
- - [Socket.IO Component](../socket-io/) - Node.js-compatible alternative with Socket.IO
137
- - [Bun WebSocket Documentation](https://bun.sh/docs/api/websockets) - Official Bun WebSocket API reference
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