@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.
Files changed (174) 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 +24 -13
  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 +27 -3
  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 +8 -4
  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 +247 -153
  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 +109 -323
  26. package/content/extensions/components/authentication/api.md +489 -602
  27. package/content/extensions/components/authentication/errors.md +135 -498
  28. package/content/extensions/components/authentication/index.md +89 -801
  29. package/content/extensions/components/authentication/usage.md +231 -955
  30. package/content/extensions/components/authorization/api.md +991 -644
  31. package/content/extensions/components/authorization/errors.md +204 -208
  32. package/content/extensions/components/authorization/getting-started.md +227 -0
  33. package/content/extensions/components/authorization/index.md +88 -795
  34. package/content/extensions/components/authorization/usage.md +219 -528
  35. package/content/extensions/components/health-check.md +77 -243
  36. package/content/extensions/components/index.md +24 -90
  37. package/content/extensions/components/mail/api.md +553 -285
  38. package/content/extensions/components/mail/errors.md +76 -62
  39. package/content/extensions/components/mail/index.md +111 -463
  40. package/content/extensions/components/mail/usage.md +139 -173
  41. package/content/extensions/components/request-tracker.md +70 -173
  42. package/content/extensions/components/socket-io/api.md +462 -785
  43. package/content/extensions/components/socket-io/errors.md +49 -51
  44. package/content/extensions/components/socket-io/index.md +69 -372
  45. package/content/extensions/components/socket-io/usage.md +212 -105
  46. package/content/extensions/components/static-asset/api.md +461 -141
  47. package/content/extensions/components/static-asset/errors.md +121 -53
  48. package/content/extensions/components/static-asset/index.md +84 -606
  49. package/content/extensions/components/static-asset/usage.md +184 -299
  50. package/content/extensions/components/template/index.md +3 -3
  51. package/content/extensions/components/websocket/api.md +311 -404
  52. package/content/extensions/components/websocket/errors.md +47 -56
  53. package/content/extensions/components/websocket/index.md +75 -407
  54. package/content/extensions/components/websocket/usage.md +120 -338
  55. package/content/extensions/helpers/cron/index.md +52 -160
  56. package/content/extensions/helpers/crypto/index.md +67 -480
  57. package/content/extensions/helpers/crypto/reference.md +528 -0
  58. package/content/extensions/helpers/env/index.md +64 -178
  59. package/content/extensions/helpers/error/index.md +286 -196
  60. package/content/extensions/helpers/index.md +61 -47
  61. package/content/extensions/helpers/inversion/index.md +76 -550
  62. package/content/extensions/helpers/inversion/reference.md +530 -0
  63. package/content/extensions/helpers/kafka/admin.md +23 -3
  64. package/content/extensions/helpers/kafka/compile-binary.md +83 -52
  65. package/content/extensions/helpers/kafka/consumer.md +65 -28
  66. package/content/extensions/helpers/kafka/examples.md +46 -253
  67. package/content/extensions/helpers/kafka/index.md +55 -617
  68. package/content/extensions/helpers/kafka/producer.md +156 -22
  69. package/content/extensions/helpers/kafka/schema-registry.md +59 -79
  70. package/content/extensions/helpers/logger/hf-logger.md +220 -0
  71. package/content/extensions/helpers/logger/index.md +78 -552
  72. package/content/extensions/helpers/logger/pino.md +105 -0
  73. package/content/extensions/helpers/logger/reference.md +937 -0
  74. package/content/extensions/helpers/network/api.md +276 -195
  75. package/content/extensions/helpers/network/index.md +87 -524
  76. package/content/extensions/helpers/queue/index.md +80 -897
  77. package/content/extensions/helpers/queue/reference.md +494 -0
  78. package/content/extensions/helpers/redis/index.md +86 -640
  79. package/content/extensions/helpers/redis/reference.md +784 -0
  80. package/content/extensions/helpers/secrets/index.md +136 -0
  81. package/content/extensions/helpers/socket-io/api.md +325 -204
  82. package/content/extensions/helpers/socket-io/index.md +79 -429
  83. package/content/extensions/helpers/storage/api.md +584 -464
  84. package/content/extensions/helpers/storage/index.md +80 -573
  85. package/content/extensions/helpers/types/index.md +75 -495
  86. package/content/extensions/helpers/types/reference.md +689 -0
  87. package/content/extensions/helpers/uid/index.md +176 -189
  88. package/content/extensions/helpers/websocket/api.md +366 -214
  89. package/content/extensions/helpers/websocket/index.md +68 -503
  90. package/content/extensions/helpers/worker-thread/index.md +62 -396
  91. package/content/extensions/helpers/worker-thread/reference.md +428 -0
  92. package/content/extensions/index.md +38 -39
  93. package/content/extensions/src-details/mcp-server.md +96 -548
  94. package/content/guides/core-concepts/persistent/datasources.md +2 -2
  95. package/content/guides/core-concepts/persistent/index.md +5 -1
  96. package/content/guides/core-concepts/persistent/models.md +1 -1
  97. package/content/guides/core-concepts/persistent/pglite.md +218 -0
  98. package/content/guides/core-concepts/persistent/postgres-drivers.md +21 -15
  99. package/content/guides/core-concepts/persistent/search-meilisearch.md +22 -12
  100. package/content/guides/core-concepts/persistent/search-typesense.md +28 -16
  101. package/content/guides/core-concepts/persistent/sqlite.md +296 -0
  102. package/content/guides/core-concepts/persistent/transactions.md +12 -11
  103. package/content/guides/core-concepts/secrets-vault.md +177 -0
  104. package/content/guides/core-concepts/services.md +1 -1
  105. package/content/guides/get-started/5-minute-quickstart.md +59 -206
  106. package/content/guides/get-started/philosophy.md +135 -670
  107. package/content/guides/get-started/setup.md +53 -74
  108. package/content/guides/migrations/redis-helpers-migration.md +5 -4
  109. package/content/guides/migrations/scoped-rbac-migration.md +5 -5
  110. package/content/guides/migrations/unified-connectors-migration.md +8 -7
  111. package/content/guides/tutorials/ecommerce-api.md +3 -8
  112. package/content/guides/tutorials/realtime-chat.md +1 -1
  113. package/content/references/base/application.md +64 -22
  114. package/content/references/base/components.md +3 -3
  115. package/content/references/base/connectors.md +79 -136
  116. package/content/references/base/controllers.md +12 -12
  117. package/content/references/base/datasources-reference.md +600 -0
  118. package/content/references/base/datasources.md +84 -444
  119. package/content/references/base/dependency-injection.md +25 -46
  120. package/content/references/base/filter-system/application-usage.md +95 -123
  121. package/content/references/base/filter-system/array-operators.md +33 -43
  122. package/content/references/base/filter-system/comparison-operators.md +55 -63
  123. package/content/references/base/filter-system/default-filter.md +144 -350
  124. package/content/references/base/filter-system/fields-order-pagination.md +116 -148
  125. package/content/references/base/filter-system/index.md +114 -253
  126. package/content/references/base/filter-system/json-filtering.md +52 -181
  127. package/content/references/base/filter-system/list-operators.md +28 -44
  128. package/content/references/base/filter-system/logical-operators.md +69 -114
  129. package/content/references/base/filter-system/null-operators.md +41 -98
  130. package/content/references/base/filter-system/pattern-matching.md +48 -51
  131. package/content/references/base/filter-system/quick-reference.md +93 -196
  132. package/content/references/base/filter-system/range-operators.md +22 -38
  133. package/content/references/base/filter-system/tips.md +70 -133
  134. package/content/references/base/filter-system/use-cases.md +173 -232
  135. package/content/references/base/grpc-controllers.md +53 -17
  136. package/content/references/base/index.md +5 -3
  137. package/content/references/base/middlewares.md +43 -28
  138. package/content/references/base/models-reference.md +886 -0
  139. package/content/references/base/models.md +81 -1452
  140. package/content/references/base/providers.md +8 -8
  141. package/content/references/base/repositories/advanced.md +281 -419
  142. package/content/references/base/repositories/index.md +84 -644
  143. package/content/references/base/repositories/mixins.md +25 -21
  144. package/content/references/base/repositories/relations.md +194 -375
  145. package/content/references/base/repositories/soft-deletable.md +67 -55
  146. package/content/references/base/secrets.md +267 -0
  147. package/content/references/base/services.md +8 -6
  148. package/content/references/configuration/environment-variables.md +73 -21
  149. package/content/references/configuration/index.md +51 -31
  150. package/content/references/index.md +1 -1
  151. package/content/references/quick-reference.md +3 -16
  152. package/content/references/utilities/crypto.md +35 -76
  153. package/content/references/utilities/date.md +33 -73
  154. package/content/references/utilities/duration.md +85 -0
  155. package/content/references/utilities/index.md +6 -2
  156. package/content/references/utilities/jsx-reference.md +298 -0
  157. package/content/references/utilities/jsx.md +82 -525
  158. package/content/references/utilities/module.md +81 -61
  159. package/content/references/utilities/parse.md +34 -64
  160. package/content/references/utilities/performance.md +33 -58
  161. package/content/references/utilities/promise.md +28 -62
  162. package/content/references/utilities/request.md +58 -218
  163. package/content/references/utilities/retry.md +139 -0
  164. package/content/references/utilities/schema.md +43 -137
  165. package/content/references/utilities/statuses-reference.md +361 -0
  166. package/content/references/utilities/statuses.md +63 -667
  167. package/dist/mcp-server/index.js +0 -0
  168. package/dist/mcp-server/tools/github/list-project-files.tool.d.ts +1 -1
  169. package/dist/mcp-server/tools/github/list-project-files.tool.d.ts.map +1 -1
  170. package/dist/mcp-server/tools/github/list-project-files.tool.js +3 -3
  171. package/dist/mcp-server/tools/github/search-code.tool.js +1 -1
  172. package/dist/mcp-server/tools/github/verify-dependencies.tool.js +1 -1
  173. package/dist/mcp-server/tools/github/view-source-file.tool.js +1 -1
  174. package/package.json +24 -23
@@ -1,27 +1,14 @@
1
- # Cron
2
-
3
- Schedule and manage recurring tasks using cron expressions, with support for dynamic rescheduling and job duplication.
4
-
5
- ## Quick Reference
6
-
7
- | Item | Value |
8
- |------|-------|
9
- | **Package** | `@venizia/ignis-helpers` |
10
- | **Class** | `CronHelper` |
11
- | **Extends** | `BaseHelper` |
12
- | **Peer Dependency** | `cron` (^4.3.3, optional) |
13
- | **Runtimes** | Both |
1
+ ---
2
+ title: Cron
3
+ description: Schedule recurring tasks with cron expressions, plus runtime rescheduling and job duplication
4
+ difficulty: beginner
5
+ ---
14
6
 
15
- #### Import Paths
16
-
17
- ```typescript
18
- import { CronHelper } from '@venizia/ignis-helpers/cron';
19
- import type { ICronHelperOptions } from '@venizia/ignis-helpers/cron';
20
- ```
7
+ # Cron
21
8
 
22
- ## Creating an Instance
9
+ `CronHelper` wraps the `cron` package's `CronJob`. It adds scoped logging, and convenience methods for rescheduling and duplicating jobs.
23
10
 
24
- `CronHelper` wraps the `cron` package's `CronJob` class, adding scoped logging via `BaseHelper` and convenience methods for rescheduling and duplication.
11
+ ## In one example
25
12
 
26
13
  ```typescript
27
14
  import { CronHelper } from '@venizia/ignis-helpers/cron';
@@ -32,193 +19,98 @@ const job = new CronHelper({
32
19
  console.log('Running scheduled task');
33
20
  },
34
21
  autoStart: true,
35
- tz: 'America/New_York',
36
- errorHandler: (error) => {
37
- console.error('Cron job failed:', error);
38
- },
22
+ tz: 'Asia/Ho_Chi_Minh',
39
23
  });
40
24
  ```
41
25
 
42
- > [!TIP]
43
- > You can also use the static factory method `CronHelper.newInstance(opts)` which is equivalent to `new CronHelper(opts)`.
44
-
45
- #### ICronHelperOptions
46
-
47
- | Option | Type | Default | Description |
48
- |--------|------|---------|-------------|
49
- | `cronTime` | `string` | -- | Cron pattern defining when the job runs (e.g., `'0 */1 * * * *'`). Required, must be non-empty. |
50
- | `onTick` | `() => void \| Promise<void>` | -- | Function executed each time the cron job triggers. Required. |
51
- | `onCompleted` | `CronOnCompleteCommand \| null` | `undefined` | Callback executed when the job is stopped via `stop()`. |
52
- | `autoStart` | `boolean` | `false` | If `true`, the job starts running immediately after construction. |
53
- | `tz` | `string` | `undefined` | IANA timezone for the schedule (e.g., `'Asia/Ho_Chi_Minh'`). Uses server timezone if omitted. |
54
- | `errorHandler` | `(error: unknown) => void \| null` | `undefined` | Handler invoked if `onTick` throws during execution. |
55
-
56
- #### Common Cron Patterns
26
+ `autoStart: true` starts the job immediately. Leave it `false` (the default) and call `job.start()` when you are ready.
57
27
 
58
- | Pattern | Description |
59
- |---------|-------------|
60
- | `'0 */1 * * * *'` | Every minute |
61
- | `'0 */5 * * * *'` | Every 5 minutes |
62
- | `'0 0 * * * *'` | Every hour |
63
- | `'0 0 0 * * *'` | Every day at midnight |
64
- | `'0 0 9 * * 1-5'` | Weekdays at 9 AM |
65
- | `'0 0 0 * * 1'` | Every Monday at midnight |
28
+ ## How it works
66
29
 
67
- ## Usage
30
+ - **The constructor builds the job right away.** `buildInstance()` runs inside the constructor and creates a `CronJob` via `CronJob.from(...)`. An empty `cronTime`, or a malformed cron expression, throws immediately - `getError` never lets you hold a half-built job.
31
+ - **`start()` checks for a built job first.** If a prior `configure()` call failed, `buildInstance()` never produced a `CronJob`. `start()` then logs a warning and returns - it does not throw.
32
+ - **`stop()` is `async` on purpose.** The underlying `CronJob.stop()` resolves only once an in-flight tick finishes. Awaiting it stops a replacement job from starting while the old handler still runs.
33
+ - **`modifyCronTime()` reschedules in place.** It builds a new `CronTime`, calls `instance.setTime(...)`, and updates the stored `cronTime`. The same `CronJob` keeps running - it just fires on the new schedule.
34
+ - **`duplicate()` clones configuration, not state.** The new instance shares `onTick`, `onCompleted`, `autoStart`, `tz`, and `errorHandler`, with a different `cronTime`. Stopping or modifying one instance never touches the other.
35
+ - **`instance` is the raw `CronJob`.** Reach it for anything the wrapper skips - `isActive`, `lastDate()`, `fireOnTick()`. It comes from the [`cron`](https://github.com/kelektiv/node-cron) package, an optional peer dependency (`^4.3.3`).
68
36
 
69
- ### Scheduling Jobs
37
+ **`ICronHelperOptions`**
70
38
 
71
- Create a job with `autoStart: true` to begin execution immediately, or leave it as `false` (default) and call `start()` when ready.
39
+ | Option | Type | Default | Description |
40
+ |--------|------|---------|-------------|
41
+ | `cronTime` | `string` | -- (required) | Cron pattern defining when the job runs, e.g. `'0 */1 * * * *'` |
42
+ | `onTick` | `() => void \| Promise<void>` | -- (required) | Runs on every trigger |
43
+ | `onCompleted` | `CronOnCompleteCommand \| null` | `undefined` | Runs when the job is stopped via `stop()` |
44
+ | `autoStart` | `boolean` | `false` | Starts the job immediately after construction |
45
+ | `tz` | `string` | `undefined` | IANA timezone, e.g. `'Asia/Ho_Chi_Minh'`. Uses server timezone if omitted |
46
+ | `errorHandler` | `(error: unknown) => void \| null` | `undefined` | Runs if `onTick` throws |
72
47
 
73
- ```typescript
74
- // Auto-start: begins running on schedule immediately
75
- const autoJob = new CronHelper({
76
- cronTime: '0 */1 * * * *',
77
- onTick: () => {
78
- console.log('Runs every minute');
79
- },
80
- autoStart: true,
81
- });
82
- ```
48
+ ## Common tasks
83
49
 
84
- ### Starting Jobs Manually
50
+ ### Start a job manually
85
51
 
86
- When `autoStart` is `false`, the job is created but does not run until `start()` is called. This is useful when you need to set up dependencies before the job begins firing.
52
+ Leave `autoStart` unset (`false`) and call `start()` once dependencies are ready.
87
53
 
88
54
  ```typescript
89
55
  const job = new CronHelper({
90
56
  cronTime: '0 0 * * * *', // Every hour
91
- onTick: () => {
92
- console.log('Hourly task executed');
93
- },
57
+ onTick: () => runHourlyTask(),
94
58
  });
95
59
 
96
- // Start later when conditions are met
97
60
  job.start();
98
61
  ```
99
62
 
100
- If the internal `CronJob` instance does not exist (e.g., `configure()` failed), `start()` logs an error and returns without throwing.
101
-
102
- ### Modifying the Schedule
63
+ ### Reschedule at runtime
103
64
 
104
- Change a job's cron schedule at runtime with `modifyCronTime()`. The job continues running with the new schedule.
65
+ `modifyCronTime()` swaps the cron pattern without recreating the job. Set `shouldFireOnTick: true` to fire once immediately after the change. That fire is fire-and-forget - errors are logged, not thrown.
105
66
 
106
67
  ```typescript
107
- modifyCronTime(opts: { cronTime: string; shouldFireOnTick?: boolean }): void
108
- ```
109
-
110
- | Parameter | Type | Default | Description |
111
- |-----------|------|---------|-------------|
112
- | `cronTime` | `string` | -- | The new cron pattern to apply. |
113
- | `shouldFireOnTick` | `boolean` | `false` | If `true`, immediately fires the `onTick` function after changing the schedule. |
114
-
115
- ```typescript
116
- // Change the job to run every 5 minutes instead
117
- job.modifyCronTime({ cronTime: '0 */5 * * * *' });
118
-
119
- // Change schedule and immediately fire onTick
120
68
  job.modifyCronTime({ cronTime: '0 */10 * * * *', shouldFireOnTick: true });
121
69
  ```
122
70
 
123
- ### Duplicating Jobs
71
+ ### Duplicate a job onto a new schedule
124
72
 
125
- Create a new `CronHelper` instance that copies the current job's configuration (`onTick`, `onCompleted`, `autoStart`, `tz`, `errorHandler`) but uses a different `cronTime`.
126
-
127
- ```typescript
128
- duplicate(opts: { cronTime: string }): CronHelper
129
- ```
73
+ Reuse the same `onTick` logic on a second cron pattern.
130
74
 
131
75
  ```typescript
132
76
  const dailyJob = new CronHelper({
133
77
  cronTime: '0 0 0 * * *', // Daily at midnight
134
- onTick: async () => {
135
- await generateReport();
136
- },
137
- tz: 'America/New_York',
78
+ onTick: async () => generateReport(),
79
+ tz: 'Asia/Ho_Chi_Minh',
138
80
  });
139
81
 
140
- // Same logic, different schedule
141
82
  const hourlyJob = dailyJob.duplicate({ cronTime: '0 0 * * * *' });
142
83
  hourlyJob.start();
143
84
  ```
144
85
 
145
- > [!NOTE]
146
- > `duplicate()` copies all configuration except `cronTime`. The new instance is independent -- stopping or modifying one does not affect the other.
147
-
148
- ### Accessing the Underlying CronJob
86
+ ### Handle tick errors without crashing the process
149
87
 
150
- The `instance` property exposes the underlying `CronJob` from the `cron` package, giving access to the full API (e.g., `stop()`, `isActive`, `lastDate()`).
88
+ Pass `errorHandler` so a throwing `onTick` does not take down the job silently.
151
89
 
152
90
  ```typescript
153
91
  const job = new CronHelper({
154
92
  cronTime: '0 */1 * * * *',
155
- onTick: () => { /* ... */ },
156
- });
157
-
158
- job.start();
159
-
160
- // Access the underlying CronJob directly
161
- console.log(job.instance.isActive); // true
162
- job.instance.stop();
163
- ```
164
-
165
- ## Troubleshooting
166
-
167
- ### "[CronHelper][configure] Invalid cronTime to configure application cron!"
168
-
169
- **Cause:** The `cronTime` option is empty, undefined, or not provided.
170
-
171
- **Fix:** Provide a valid, non-empty cron pattern string:
172
-
173
- ```typescript
174
- const job = new CronHelper({
175
- cronTime: '0 */1 * * * *', // Must be a non-empty cron pattern
176
- onTick: () => { /* ... */ },
93
+ onTick: async () => riskyTask(),
94
+ errorHandler: error => logger.for('cron').error('Tick failed: %s', error),
177
95
  });
178
96
  ```
179
97
 
180
- ### "Invalid cron instance to start cronjob!"
181
-
182
- **Cause:** `start()` was called but the internal `CronJob` instance was not created. This typically means `configure()` threw an error during construction.
183
-
184
- **Fix:** Ensure the constructor completed without errors before calling `start()`. Wrap creation in a try/catch to detect configuration failures:
98
+ ### Reach the underlying `CronJob`
185
99
 
186
100
  ```typescript
187
- try {
188
- const job = new CronHelper({
189
- cronTime: '0 */1 * * * *',
190
- onTick: () => { /* ... */ },
191
- });
192
- job.start();
193
- } catch (error) {
194
- console.error('Failed to create cron job:', error);
195
- }
196
- ```
197
-
198
- ### Job does not fire at expected times
199
-
200
- **Cause:** The `tz` option is not set or uses an incorrect timezone identifier, causing the job to fire based on the server's local timezone.
201
-
202
- **Fix:** Set `tz` to the correct [IANA timezone identifier](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones):
203
-
204
- ```typescript
205
- const job = new CronHelper({
206
- cronTime: '0 0 9 * * *', // 9 AM
207
- onTick: () => { /* ... */ },
208
- tz: 'America/New_York', // Explicit timezone
209
- });
101
+ console.log(job.instance.isActive); // true
102
+ job.instance.stop();
210
103
  ```
211
104
 
212
- ## See Also
105
+ ## See also
213
106
 
214
- - **Related Concepts:**
215
- - [Services](/guides/core-concepts/services) -- Scheduling jobs within services
216
- - [Application](/guides/core-concepts/application/) -- Scheduling on application startup
107
+ - [Services](/guides/core-concepts/services) - scheduling jobs inside services
108
+ - [Application](/guides/core-concepts/application/) - scheduling on application startup
109
+ - [Helpers Overview](/extensions/helpers/) - all available helpers
110
+ - [Queue Helper](/extensions/helpers/queue/) - message queue processing
111
+ - [Cron Expression Guide](https://crontab.guru/) - interactive cron syntax reference
217
112
 
218
- - **Other Helpers:**
219
- - [Helpers Index](../index) -- All available helpers
220
- - [Queue Helper](../queue/) -- Message queue processing
113
+ **Files:**
221
114
 
222
- - **External Resources:**
223
- - [Cron Expression Guide](https://crontab.guru/) -- Interactive cron syntax reference
224
- - [`cron` npm package](https://github.com/kelektiv/node-cron) -- Underlying cron library
115
+ - [`packages/helpers/src/modules/cron/cron.helper.ts`](https://github.com/VENIZIA-AI/ignis/blob/main/packages/helpers/src/modules/cron/cron.helper.ts) - `CronHelper` class
116
+ - [`packages/helpers/src/modules/cron/index.ts`](https://github.com/VENIZIA-AI/ignis/blob/main/packages/helpers/src/modules/cron/index.ts) - module barrel