@neofinancial/chrono-mongo-datastore 0.1.0 → 0.1.2

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 ADDED
@@ -0,0 +1,277 @@
1
+ # @neofinancial/chrono-mongo-datastore
2
+
3
+ ⚠️ This project is pre-alpha, and not ready for production use. ⚠️
4
+
5
+ MongoDB datastore implementation for [@neofinancial/chrono](https://www.npmjs.com/package/@neofinancial/chrono) - a TypeScript task scheduling and processing system.
6
+
7
+ ## Features
8
+
9
+ - **MongoDB persistence**: Store tasks reliably in MongoDB
10
+ - **Production ready**: Designed for production workloads
11
+ - **Type-safe**: Full TypeScript support with generic task types
12
+ - **Configurable**: Customize collection names and database settings
13
+ - **Optimized queries**: Efficient task claiming and processing
14
+
15
+ ## Installation
16
+
17
+ ```bash
18
+ npm install @neofinancial/chrono-mongo-datastore
19
+ # or
20
+ pnpm add @neofinancial/chrono-mongo-datastore
21
+ # or
22
+ yarn add @neofinancial/chrono-mongo-datastore
23
+ ```
24
+
25
+ ## Peer Dependencies
26
+
27
+ `@neofinancial/chrono` and `mongodb`
28
+
29
+ ```bash
30
+ npm install @neofinancial/chrono mongodb
31
+ # or
32
+ pnpm add @neofinancial/chrono mongodb
33
+ # or
34
+ yarn add @neofinancial/chrono mongodb
35
+ ```
36
+
37
+ ## Requirements
38
+
39
+ - **Node.js**: >= 20.18.3
40
+ - **MongoDB**: >= 4.4
41
+ - **@neofinancial/chrono**: >= 0.1.1 (peer dependencies)
42
+ - **mongodb**: >= 6.15 (peer dependency)
43
+
44
+ ## Basic Usage
45
+
46
+ ```typescript
47
+ import { Chrono } from "@neofinancial/chrono";
48
+ import {
49
+ ChronoMongoDatastore,
50
+ type MongoDatastoreOptions,
51
+ } from "@neofinancial/chrono-mongo-datastore";
52
+ import { MongoClient } from "mongodb";
53
+
54
+ // Define your task types
55
+ type TaskMapping = {
56
+ "send-email": { to: string; subject: string; body: string };
57
+ "process-payment": { userId: string; amount: number };
58
+ };
59
+
60
+ // MongoDB connection
61
+ const client = new MongoClient("mongodb://localhost:27017");
62
+ await client.connect();
63
+ const db = client.db("my-app");
64
+
65
+ // Create MongoDB datastore (uses default collection name 'chrono-tasks')
66
+ const datastore = await ChronoMongoDatastore.create<TaskMapping>(db);
67
+
68
+ // Initialize Chrono with the MongoDB datastore
69
+ const chrono = new Chrono<TaskMapping, MongoDatastoreOptions>(datastore);
70
+
71
+ // Register task handlers
72
+ chrono.registerTaskHandler({
73
+ kind: "send-email",
74
+ handler: async (task) => {
75
+ console.log(
76
+ `Sending email to ${task.data.to} with subject "${task.data.subject}"`
77
+ );
78
+ // Your email sending logic here
79
+ },
80
+ });
81
+
82
+ chrono.registerTaskHandler({
83
+ kind: "process-payment",
84
+ handler: async (task) => {
85
+ console.log(
86
+ `Processing payment of ${task.data.amount} for user ${task.data.userId}`
87
+ );
88
+ // Your payment processing logic here
89
+ },
90
+ });
91
+
92
+ // Start processing tasks
93
+ await chrono.start();
94
+
95
+ // Schedule tasks
96
+ await chrono.scheduleTask({
97
+ kind: "send-email",
98
+ when: new Date(),
99
+ data: {
100
+ to: "user@example.com",
101
+ subject: "Welcome!",
102
+ body: "Welcome to our application!",
103
+ },
104
+ });
105
+
106
+ // Schedule a future task with idempotency
107
+ await chrono.scheduleTask({
108
+ kind: "process-payment",
109
+ when: new Date(Date.now() + 30 * 60 * 1000), // 30 minutes from now
110
+ data: {
111
+ userId: "user-123",
112
+ amount: 99.99,
113
+ },
114
+ idempotencyKey: "payment-user-123-session-abc", // Prevents duplicates
115
+ });
116
+
117
+ // Graceful shutdown
118
+ process.on("SIGINT", async () => {
119
+ await chrono.stop();
120
+ await client.close();
121
+ process.exit(0);
122
+ });
123
+ ```
124
+
125
+ ## Configuration
126
+
127
+ ### Configuration Options
128
+
129
+ ```typescript
130
+ interface ChronoMongoDatastoreConfig {
131
+ collectionName: string; // Collection name for storing tasks
132
+ completedDocumentTTL?: number; // TTL in seconds for completed tasks (optional)
133
+ }
134
+ ```
135
+
136
+ ### Example with Custom Configuration
137
+
138
+ ```typescript
139
+ import { MongoClient } from "mongodb";
140
+ import { ChronoMongoDatastore } from "@neofinancial/chrono-mongo-datastore";
141
+
142
+ const client = new MongoClient("mongodb://localhost:27017", {
143
+ maxPoolSize: 10,
144
+ serverSelectionTimeoutMS: 5000,
145
+ socketTimeoutMS: 45000,
146
+ });
147
+
148
+ await client.connect();
149
+ const db = client.db("production-app");
150
+
151
+ const datastore = await ChronoMongoDatastore.create<TaskMapping>(db, {
152
+ collectionName: "background-jobs", // Custom collection name
153
+ completedDocumentTTL: 86400, // Delete completed tasks after 24 hours
154
+ });
155
+ ```
156
+
157
+ ## MongoDB Schema
158
+
159
+ The datastore automatically creates the following indexes for optimal performance:
160
+
161
+ ```javascript
162
+ // Compound index for efficient task claiming
163
+ { kind: 1, status: 1, scheduledAt: 1, priority: -1, claimedAt: 1 }
164
+
165
+ // Index for idempotency key lookups
166
+ { idempotencyKey: 1 }
167
+
168
+ // Partial expression index using TTL to delete COMPLETED documents
169
+ { completedAt: -1 }
170
+ ```
171
+
172
+ ### Document Structure
173
+
174
+ Tasks are stored with the following structure:
175
+
176
+ ```typescript
177
+ interface TaskDocument {
178
+ _id: ObjectId;
179
+ kind: string;
180
+ status: "pending" | "claimed" | "completed" | "failed";
181
+ data: any;
182
+ priority?: number;
183
+ idempotencyKey?: string;
184
+ originalScheduleDate: Date;
185
+ scheduledAt: Date;
186
+ claimedAt?: Date;
187
+ completedAt?: Date;
188
+ lastExecutedAt?: Date;
189
+ retryCount: number;
190
+ }
191
+ ```
192
+
193
+ ## Production Considerations
194
+
195
+ ### Connection Management
196
+
197
+ ```typescript
198
+ // Use connection pooling for production
199
+ const client = new MongoClient(connectionString, {
200
+ maxPoolSize: 10,
201
+ minPoolSize: 5,
202
+ maxIdleTimeMS: 30000,
203
+ serverSelectionTimeoutMS: 5000,
204
+ });
205
+
206
+ // Handle connection errors
207
+ client.on("error", (error) => {
208
+ console.error("MongoDB connection error:", error);
209
+ });
210
+ ```
211
+
212
+ ### Database Indexes
213
+
214
+ The datastore will automatically create necessary indexes, but you may want to create them manually for production deployments:
215
+
216
+ ```javascript
217
+ // In MongoDB shell or your migration scripts
218
+ // Replace 'chrono-tasks' with your custom collection name if different
219
+ db.chrono_tasks.createIndex({ completedAt: -1 }, {
220
+ partialFilterExpression: {
221
+ completedAt: { $exists: true },
222
+ status: { $eq: "COMPLETED" }
223
+ },
224
+ expireAfterSeconds: 2592000, // 30 days
225
+ name: "chrono-completed-document-ttl-index"
226
+ });
227
+
228
+ db.chrono_tasks.createIndex({
229
+ kind: 1,
230
+ status: 1,
231
+ scheduledAt: 1,
232
+ priority: -1,
233
+ claimedAt: 1
234
+ }, {
235
+ name: "chrono-claim-document-index"
236
+ });
237
+
238
+ db.chrono_tasks.createIndex({
239
+ idempotencyKey: 1
240
+ }, {
241
+ name: "chrono-idempotency-key-index",
242
+ unique: true,
243
+ sparse: true
244
+ });
245
+
246
+ ### Monitoring
247
+
248
+ Monitor these key metrics:
249
+
250
+ - Task processing latency
251
+ - Failed task count
252
+ - MongoDB connection pool usage
253
+ - Collection size and growth
254
+
255
+ ## API Reference
256
+
257
+ ### ChronoMongoDatastore
258
+
259
+ The main datastore class implementing the Chrono datastore interface.
260
+
261
+ #### Methods
262
+
263
+ All methods are implemented from the base Chrono datastore interface. See [@neofinancial/chrono](https://www.npmjs.com/package/@neofinancial/chrono) documentation for the complete API.
264
+
265
+ ## License
266
+
267
+ MIT
268
+
269
+ ## Contributing
270
+
271
+ This package is part of the [chrono monorepo](https://github.com/neofinancial/chrono). Please see the main repository for contributing guidelines.
272
+
273
+ ## Related Packages
274
+
275
+ - **[@neofinancial/chrono](https://www.npmjs.com/package/@neofinancial/chrono)**: Core task scheduling functionality
276
+ - **[@neofinancial/chrono-memory-datastore](https://www.npmjs.com/package/@neofinancial/chrono-memory-datastore)**: In-memory datastore for development and testing
277
+ ```
@@ -1,4 +1,4 @@
1
- import { ClaimTaskInput, type Datastore, DeleteInput, DeleteOptions, type ScheduleInput, type Task, type TaskMappingBase } from '@neofinancial/chrono';
1
+ import { type ClaimTaskInput, type Datastore, type DeleteInput, type DeleteOptions, type ScheduleInput, type Task, type TaskMappingBase } from '@neofinancial/chrono';
2
2
  import { type ClientSession, type Db, type WithId } from 'mongodb';
3
3
  export type ChronoMongoDatastoreConfig = {
4
4
  completedDocumentTTL?: number;
@@ -16,7 +16,7 @@ export declare class ChronoMongoDatastore<TaskMapping extends TaskMappingBase> i
16
16
  schedule<TaskKind extends keyof TaskMapping>(input: ScheduleInput<TaskKind, TaskMapping[TaskKind], MongoDatastoreOptions>): Promise<Task<TaskKind, TaskMapping[TaskKind]>>;
17
17
  delete<TaskKind extends Extract<keyof TaskMapping, string>>(key: DeleteInput<TaskKind>, options?: DeleteOptions): Promise<Task<TaskKind, TaskMapping[TaskKind]> | undefined>;
18
18
  claim<TaskKind extends Extract<keyof TaskMapping, string>>(input: ClaimTaskInput<TaskKind>): Promise<Task<TaskKind, TaskMapping[TaskKind]> | undefined>;
19
- unclaim<TaskKind extends keyof TaskMapping>(taskId: string, nextScheduledAt: Date): Promise<Task<TaskKind, TaskMapping[TaskKind]>>;
19
+ retry<TaskKind extends keyof TaskMapping>(taskId: string, retryAt: Date): Promise<Task<TaskKind, TaskMapping[TaskKind]>>;
20
20
  complete<TaskKind extends keyof TaskMapping>(taskId: string): Promise<Task<TaskKind, TaskMapping[TaskKind]>>;
21
21
  fail<TaskKind extends keyof TaskMapping>(taskId: string): Promise<Task<TaskKind, TaskMapping[TaskKind]>>;
22
22
  private updateOrThrow;
@@ -100,11 +100,11 @@ class ChronoMongoDatastore {
100
100
  });
101
101
  return task ? this.toObject(task) : undefined;
102
102
  }
103
- async unclaim(taskId, nextScheduledAt) {
103
+ async retry(taskId, retryAt) {
104
104
  const taskDocument = await this.updateOrThrow(taskId, {
105
105
  $set: {
106
106
  status: chrono_1.TaskStatus.PENDING,
107
- scheduledAt: nextScheduledAt,
107
+ scheduledAt: retryAt,
108
108
  },
109
109
  $inc: {
110
110
  retryCount: 1,
@@ -1 +1 @@
1
- {"version":3,"file":"chrono-mongo-datastore.js","sourceRoot":"","sources":["../src/chrono-mongo-datastore.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"chrono-mongo-datastore.js","sourceRoot":"","sources":["../src/chrono-mongo-datastore.ts"],"names":[],"mappings":"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"}
package/build/index.d.ts CHANGED
@@ -1 +1 @@
1
- export { ChronoMongoDatastore, type MongoDatastoreOptions } from './chrono-mongo-datastore';
1
+ export { ChronoMongoDatastore, type MongoDatastoreOptions, type ChronoMongoDatastoreConfig, } from './chrono-mongo-datastore';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,mEAA4F;AAAnF,8HAAA,oBAAoB,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,mEAIkC;AAHhC,8HAAA,oBAAoB,OAAA"}
package/package.json CHANGED
@@ -1,27 +1,33 @@
1
1
  {
2
2
  "name": "@neofinancial/chrono-mongo-datastore",
3
- "version": "0.1.0",
4
- "description": "",
3
+ "version": "0.1.2",
4
+ "description": "MongoDB datastore implementation for Chrono task scheduling system",
5
5
  "private": false,
6
6
  "publishConfig": {
7
7
  "access": "public"
8
8
  },
9
+ "homepage": "https://github.com/neofinancial/chrono",
10
+ "repository": {
11
+ "type": "git",
12
+ "url": "https://github.com/neofinancial/chrono.git"
13
+ },
9
14
  "main": "build/index.js",
10
15
  "types": "build/index.d.ts",
11
16
  "keywords": [],
12
17
  "author": "Neo Financial Engineering <engineering@neofinancial.com>",
13
18
  "license": "MIT",
14
19
  "files": [
15
- "build/**"
20
+ "build/**",
21
+ "README.md"
16
22
  ],
17
23
  "devDependencies": {
18
24
  "mongodb": "^6.15",
19
25
  "mongodb-memory-server": "^10.1.4",
20
- "@neofinancial/chrono": "0.1.0"
26
+ "@neofinancial/chrono": "0.1.2"
21
27
  },
22
28
  "peerDependencies": {
23
29
  "mongodb": "^6.15",
24
- "@neofinancial/chrono": "0.1.0"
30
+ "@neofinancial/chrono": "0.1.2"
25
31
  },
26
32
  "scripts": {
27
33
  "clean": "rimraf ./build",
package/build/main.d.ts DELETED
@@ -1 +0,0 @@
1
- export {};
package/build/main.js DELETED
@@ -1,13 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const chrono_core_1 = require("@neofinancial/chrono-core");
4
- const mongo_task_1 = require("./mongo-task");
5
- async function main() {
6
- const task = new mongo_task_1.MongoTask();
7
- const scheduler = new chrono_core_1.Scheduler();
8
- await scheduler.schedule(task);
9
- await scheduler.run();
10
- console.log('Successfully ran MongoTask!');
11
- }
12
- main().catch(console.error);
13
- //# sourceMappingURL=main.js.map
package/build/main.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":";;AAAA,2DAAsD;AAEtD,6CAAyC;AAEzC,KAAK,UAAU,IAAI;IACjB,MAAM,IAAI,GAAG,IAAI,sBAAS,EAAE,CAAC;IAC7B,MAAM,SAAS,GAAG,IAAI,uBAAS,EAAE,CAAC;IAElC,MAAM,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC/B,MAAM,SAAS,CAAC,GAAG,EAAE,CAAC;IAEtB,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;AAC7C,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC"}
@@ -1,4 +0,0 @@
1
- import type { Task } from '@neofinancial/chrono-core';
2
- export declare class MongoTask implements Task<boolean> {
3
- run(): Promise<boolean>;
4
- }
@@ -1,11 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.MongoTask = void 0;
4
- class MongoTask {
5
- async run() {
6
- console.log('Running MongoTask');
7
- return true;
8
- }
9
- }
10
- exports.MongoTask = MongoTask;
11
- //# sourceMappingURL=mongo-task.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mongo-task.js","sourceRoot":"","sources":["../src/mongo-task.ts"],"names":[],"mappings":";;;AAEA,MAAa,SAAS;IACb,KAAK,CAAC,GAAG;QACd,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;QAEjC,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AAND,8BAMC"}