@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 +277 -0
- package/build/chrono-mongo-datastore.d.ts +2 -2
- package/build/chrono-mongo-datastore.js +2 -2
- package/build/chrono-mongo-datastore.js.map +1 -1
- package/build/index.d.ts +1 -1
- package/build/index.js.map +1 -1
- package/package.json +11 -5
- package/build/main.d.ts +0 -1
- package/build/main.js +0 -13
- package/build/main.js.map +0 -1
- package/build/mongo-task.d.ts +0 -4
- package/build/mongo-task.js +0 -11
- package/build/mongo-task.js.map +0 -1
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
|
-
|
|
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
|
|
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:
|
|
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":";;;AAAA,iDAS8B;AAC9B,qCAQiB;AACjB,mDAA4D;AAE5D,MAAM,uBAAuB,GAAG,cAAc,CAAC;AAa/C,MAAa,oBAAoB;IAGvB,MAAM,CAA6B;IACnC,QAAQ,CAAK;IAErB,YAAoB,QAAY,EAAE,MAA4C;QAC5E,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,MAAM,GAAG;YACZ,oBAAoB,EAAE,MAAM,EAAE,oBAAoB;YAClD,cAAc,EAAE,MAAM,EAAE,cAAc,IAAI,uBAAuB;SAClE,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,MAAM,CACjB,QAAY,EACZ,MAA4C;QAE5C,MAAM,SAAS,GAAG,IAAI,oBAAoB,CAAc,QAAQ,EAAE,MAAM,CAAC,CAAC;QAE1E,MAAM,IAAA,6BAAa,EAAC,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC,MAAM,CAAC,cAAc,CAAC,EAAE;YAClF,oBAAoB,EAAE,SAAS,CAAC,MAAM,CAAC,oBAAoB;SAC5D,CAAC,CAAC;QAEH,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,KAAK,CAAC,QAAQ,CACZ,KAA4E;QAE5E,MAAM,WAAW,GAA8D;YAC7E,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,MAAM,EAAE,mBAAU,CAAC,OAAO;YAC1B,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,cAAc,EAAE,KAAK,CAAC,cAAc;YACpC,oBAAoB,EAAE,KAAK,CAAC,IAAI;YAChC,WAAW,EAAE,KAAK,CAAC,IAAI;YACvB,UAAU,EAAE,CAAC;SACd,CAAC;QAEF,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,SAAS,CAAC,WAAW,EAAE;gBAChG,GAAG,CAAC,KAAK,EAAE,gBAAgB,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;gBAC/F,eAAe,EAAE,IAAI;aACtB,CAAC,CAAC;YAEH,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;gBACzB,OAAO,IAAI,CAAC,QAAQ,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,UAAU,EAAE,GAAG,WAAW,EAAE,CAAC,CAAC;YACpE,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IACE,KAAK,CAAC,cAAc;gBACpB,KAAK,YAAY,KAAK;gBACtB,MAAM,IAAI,KAAK;gBACf,CAAC,KAAK,CAAC,IAAI,KAAK,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,EAC9C,CAAC;gBACD,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,UAAU,EAAY,CAAC,OAAO,CAC5D;oBACE,cAAc,EAAE,KAAK,CAAC,cAAc;iBACrC,EACD;oBACE,IAAI,EAAE,0BAAU,CAAC,qBAAqB;oBACtC,GAAG,CAAC,KAAK,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;iBAC/F,CACF,CAAC;gBAEF,IAAI,YAAY,EAAE,CAAC;oBACjB,OAAO,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;gBACrC,CAAC;gBAED,MAAM,IAAI,KAAK,CACb,qDAAqD,KAAK,CAAC,cAAc,6BAA6B,CACvG,CAAC;YACJ,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;QAED,MAAM,IAAI,KAAK,CAAC,oBAAoB,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACrE,CAAC;IAED,KAAK,CAAC,MAAM,CACV,GAA0B,EAC1B,OAAuB;QAEvB,MAAM,MAAM,GACV,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,kBAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,cAAc,EAAE,GAAG,CAAC,cAAc,EAAE,CAAC;QAChH,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,UAAU,EAAY,CAAC,gBAAgB,CAAC;YAC9D,GAAG,MAAM;YACT,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,mBAAU,CAAC,OAAO,EAAE,CAAC;SAC1D,CAAC,CAAC;QAEH,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,IAAI,OAAO,EAAE,KAAK,EAAE,CAAC;gBACnB,OAAO;YACT,CAAC;YAED,MAAM,WAAW,GACf,OAAO,GAAG,KAAK,QAAQ;gBACrB,CAAC,CAAC,WAAW,GAAG,EAAE;gBAClB,CAAC,CAAC,aAAa,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,uBAAuB,GAAG,CAAC,cAAc,EAAE,CAAC;YAE/E,MAAM,IAAI,KAAK,CAAC,QAAQ,WAAW,wEAAwE,CAAC,CAAC;QAC/G,CAAC;QAED,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;IAED,KAAK,CAAC,KAAK,CACT,KAA+B;QAE/B,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,UAAU,EAAY,CAAC,gBAAgB,CAC7D;YACE,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,WAAW,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE;YAC1B,GAAG,EAAE;gBACH,EAAE,MAAM,EAAE,mBAAU,CAAC,OAAO,EAAE;gBAC9B;oBACE,MAAM,EAAE,mBAAU,CAAC,OAAO;oBAC1B,SAAS,EAAE;wBACT,IAAI,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,KAAK,CAAC,mBAAmB,CAAC;qBAC1D;iBACF;aACF;SACF,EACD,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,mBAAU,CAAC,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,EAAE,EACxD;YACE,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE;YACtC,gEAAgE;YAChE,cAAc,EAAE,OAAO;SACxB,CACF,CAAC;QAEF,OAAO,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAChD,CAAC;IAED,KAAK,CAAC,KAAK,CACT,MAAc,EACd,OAAa;QAEb,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,aAAa,CAAW,MAAM,EAAE;YAC9D,IAAI,EAAE;gBACJ,MAAM,EAAE,mBAAU,CAAC,OAAO;gBAC1B,WAAW,EAAE,OAAO;aACrB;YACD,IAAI,EAAE;gBACJ,UAAU,EAAE,CAAC;aACd;SACF,CAAC,CAAC;QAEH,OAAO,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;IACrC,CAAC;IAED,KAAK,CAAC,QAAQ,CAAqC,MAAc;QAC/D,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;QAEvB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,aAAa,CAAW,MAAM,EAAE;YACtD,IAAI,EAAE;gBACJ,MAAM,EAAE,mBAAU,CAAC,SAAS;gBAC5B,WAAW,EAAE,GAAG;gBAChB,cAAc,EAAE,GAAG;aACpB;SACF,CAAC,CAAC;QAEH,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;IAED,KAAK,CAAC,IAAI,CAAqC,MAAc;QAC3D,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;QAEvB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,aAAa,CAAW,MAAM,EAAE;YACtD,IAAI,EAAE;gBACJ,MAAM,EAAE,mBAAU,CAAC,MAAM;gBACzB,cAAc,EAAE,GAAG;aACpB;SACF,CAAC,CAAC;QAEH,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;IAEO,KAAK,CAAC,aAAa,CACzB,MAAc,EACd,MAAmE;QAEnE,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,UAAU,EAAY,CAAC,gBAAgB,CAAC,EAAE,GAAG,EAAE,IAAI,kBAAQ,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE;YACzG,cAAc,EAAE,OAAO;SACxB,CAAC,CAAC;QACH,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CAAC,gBAAgB,MAAM,YAAY,CAAC,CAAC;QACtD,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAEO,UAAU;QAChB,OAAO,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAgD,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;IAC7G,CAAC;IAEO,QAAQ,CACd,QAAuD;QAEvD,OAAO;YACL,EAAE,EAAE,QAAQ,CAAC,GAAG,CAAC,WAAW,EAAE;YAC9B,IAAI,EAAE,QAAQ,CAAC,IAAI;YACnB,IAAI,EAAE,QAAQ,CAAC,IAAI;YACnB,MAAM,EAAE,QAAQ,CAAC,MAAM;YACvB,QAAQ,EAAE,QAAQ,CAAC,QAAQ,IAAI,SAAS;YACxC,cAAc,EAAE,QAAQ,CAAC,cAAc,IAAI,SAAS;YACpD,oBAAoB,EAAE,QAAQ,CAAC,oBAAoB;YACnD,WAAW,EAAE,QAAQ,CAAC,WAAW;YACjC,SAAS,EAAE,QAAQ,CAAC,SAAS,IAAI,SAAS;YAC1C,WAAW,EAAE,QAAQ,CAAC,WAAW,IAAI,SAAS;YAC9C,UAAU,EAAE,QAAQ,CAAC,UAAU;SAChC,CAAC;IACJ,CAAC;CACF;AAvND,oDAuNC"}
|
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';
|
package/build/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,
|
|
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.
|
|
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.
|
|
26
|
+
"@neofinancial/chrono": "0.1.2"
|
|
21
27
|
},
|
|
22
28
|
"peerDependencies": {
|
|
23
29
|
"mongodb": "^6.15",
|
|
24
|
-
"@neofinancial/chrono": "0.1.
|
|
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"}
|
package/build/mongo-task.d.ts
DELETED
package/build/mongo-task.js
DELETED
|
@@ -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
|
package/build/mongo-task.js.map
DELETED
|
@@ -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"}
|