@supergrowthai/tq 1.0.11 → 1.0.13
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 +338 -20
- package/dist/AsyncActions-BOO1ikWz.cjs +241 -0
- package/dist/AsyncActions-BOO1ikWz.cjs.map +1 -0
- package/dist/AsyncActions-CZYO8ShR.js +242 -0
- package/dist/AsyncActions-CZYO8ShR.js.map +1 -0
- package/dist/{PrismaAdapter-CvM_XNtE.cjs → PrismaAdapter-CUIWhjms.cjs} +57 -81
- package/dist/PrismaAdapter-CUIWhjms.cjs.map +1 -0
- package/dist/{PrismaAdapter-Dy7MV090.js → PrismaAdapter-D5ACKPbS.js} +57 -81
- package/dist/PrismaAdapter-D5ACKPbS.js.map +1 -0
- package/dist/adapters/index.cjs +1 -1
- package/dist/adapters/index.mjs +1 -1
- package/dist/client-BxG7LzLv.cjs +90 -0
- package/dist/client-BxG7LzLv.cjs.map +1 -0
- package/dist/client-dvHNt8qU.js +91 -0
- package/dist/client-dvHNt8qU.js.map +1 -0
- package/dist/core/Actions.cjs +184 -16
- package/dist/core/Actions.cjs.map +1 -1
- package/dist/core/Actions.mjs +184 -16
- package/dist/core/Actions.mjs.map +1 -1
- package/dist/core/async/AsyncActions.cjs +4 -98
- package/dist/core/async/AsyncActions.cjs.map +1 -1
- package/dist/core/async/AsyncActions.mjs +4 -98
- package/dist/core/async/AsyncActions.mjs.map +1 -1
- package/dist/core/async/AsyncTaskManager.cjs +133 -22
- package/dist/core/async/AsyncTaskManager.cjs.map +1 -1
- package/dist/core/async/AsyncTaskManager.mjs +133 -22
- package/dist/core/async/AsyncTaskManager.mjs.map +1 -1
- package/dist/index.cjs +517 -35
- package/dist/index.cjs.map +1 -1
- package/dist/index.mjs +517 -35
- package/dist/index.mjs.map +1 -1
- package/dist/src/adapters/ITaskStorageAdapter.d.cts +0 -5
- package/dist/src/adapters/ITaskStorageAdapter.d.ts +0 -5
- package/dist/src/adapters/InMemoryAdapter.d.cts +0 -2
- package/dist/src/adapters/InMemoryAdapter.d.ts +0 -2
- package/dist/src/adapters/MongoDbAdapter.d.cts +0 -2
- package/dist/src/adapters/MongoDbAdapter.d.ts +0 -2
- package/dist/src/adapters/PrismaAdapter.d.cts +0 -2
- package/dist/src/adapters/PrismaAdapter.d.ts +0 -2
- package/dist/src/adapters/types.d.cts +7 -0
- package/dist/src/adapters/types.d.ts +7 -0
- package/dist/src/core/Actions.d.cts +25 -2
- package/dist/src/core/Actions.d.ts +25 -2
- package/dist/src/core/TaskHandler.d.cts +13 -5
- package/dist/src/core/TaskHandler.d.ts +13 -5
- package/dist/src/core/TaskRunner.d.cts +16 -1
- package/dist/src/core/TaskRunner.d.ts +16 -1
- package/dist/src/core/async/AsyncActions.d.cts +20 -1
- package/dist/src/core/async/AsyncActions.d.ts +20 -1
- package/dist/src/core/async/AsyncTaskManager.d.cts +36 -4
- package/dist/src/core/async/AsyncTaskManager.d.ts +36 -4
- package/dist/src/core/async/async-task-manager.d.cts +21 -3
- package/dist/src/core/async/async-task-manager.d.ts +21 -3
- package/dist/src/core/async/retry-utils.d.cts +15 -0
- package/dist/src/core/async/retry-utils.d.ts +15 -0
- package/dist/src/core/base/interfaces.d.cts +10 -2
- package/dist/src/core/base/interfaces.d.ts +10 -2
- package/dist/src/core/entity/IEntityProjectionProvider.d.cts +45 -0
- package/dist/src/core/entity/IEntityProjectionProvider.d.ts +45 -0
- package/dist/src/core/entity/index.d.cts +1 -0
- package/dist/src/core/entity/index.d.ts +1 -0
- package/dist/src/core/flow/FlowMiddleware.d.cts +26 -0
- package/dist/src/core/flow/FlowMiddleware.d.ts +26 -0
- package/dist/src/core/flow/IFlowBarrierProvider.d.cts +46 -0
- package/dist/src/core/flow/IFlowBarrierProvider.d.ts +46 -0
- package/dist/src/core/flow/InMemoryFlowBarrierProvider.d.cts +10 -0
- package/dist/src/core/flow/InMemoryFlowBarrierProvider.d.ts +10 -0
- package/dist/src/core/flow/index.d.cts +4 -0
- package/dist/src/core/flow/index.d.ts +4 -0
- package/dist/src/core/flow/types.d.cts +82 -0
- package/dist/src/core/flow/types.d.ts +82 -0
- package/dist/src/core/lifecycle.d.cts +9 -4
- package/dist/src/core/lifecycle.d.ts +9 -4
- package/dist/src/core/log-context.d.cts +10 -0
- package/dist/src/core/log-context.d.ts +10 -0
- package/dist/src/index.d.cts +4 -0
- package/dist/src/index.d.ts +4 -0
- package/dist/src/test/adapter-consistency.test.d.cts +11 -0
- package/dist/src/test/adapter-consistency.test.d.ts +11 -0
- package/dist/src/test/immediate-mode-bugs.test.d.cts +11 -0
- package/dist/src/test/immediate-mode-bugs.test.d.ts +11 -0
- package/dist/src/test/rfc-001-result-persistence.test.d.cts +17 -0
- package/dist/src/test/rfc-001-result-persistence.test.d.ts +17 -0
- package/dist/src/test/rfc-002-flow-orchestration.test.d.cts +24 -0
- package/dist/src/test/rfc-002-flow-orchestration.test.d.ts +24 -0
- package/dist/src/test/rfc-003-entity-projection.test.d.cts +14 -0
- package/dist/src/test/rfc-003-entity-projection.test.d.ts +14 -0
- package/dist/src/test/rfc-004-async-hardening.test.d.cts +14 -0
- package/dist/src/test/rfc-004-async-hardening.test.d.ts +14 -0
- package/dist/src/test/rfc-005-log-context.test.d.cts +14 -0
- package/dist/src/test/rfc-005-log-context.test.d.ts +14 -0
- package/dist/src/test/tq-fixes.test.d.cts +17 -0
- package/dist/src/test/tq-fixes.test.d.ts +17 -0
- package/package.json +2 -2
- package/dist/PrismaAdapter-CvM_XNtE.cjs.map +0 -1
- package/dist/PrismaAdapter-Dy7MV090.js.map +0 -1
- package/dist/client-BAiCkZv7.js +0 -52
- package/dist/client-BAiCkZv7.js.map +0 -1
- package/dist/client-DgdG7pT6.cjs +0 -51
- package/dist/client-DgdG7pT6.cjs.map +0 -1
package/dist/src/index.d.cts
CHANGED
|
@@ -12,5 +12,9 @@ export * from './core/base/interfaces.js';
|
|
|
12
12
|
export * from './core/ITaskNotificationProvider.js';
|
|
13
13
|
export * from './core/lifecycle.js';
|
|
14
14
|
export * from './core/task-processor-types.js';
|
|
15
|
+
export { runWithLogContext, getLogContext } from './core/log-context.js';
|
|
16
|
+
export type { LogStore } from './core/log-context.js';
|
|
17
|
+
export * from './core/entity/index.js';
|
|
18
|
+
export * from './core/flow/index.js';
|
|
15
19
|
export * from './utils/task-id-gen.js';
|
|
16
20
|
export * from './providers/index.js';
|
package/dist/src/index.d.ts
CHANGED
|
@@ -12,5 +12,9 @@ export * from './core/base/interfaces.js';
|
|
|
12
12
|
export * from './core/ITaskNotificationProvider.js';
|
|
13
13
|
export * from './core/lifecycle.js';
|
|
14
14
|
export * from './core/task-processor-types.js';
|
|
15
|
+
export { runWithLogContext, getLogContext } from './core/log-context.js';
|
|
16
|
+
export type { LogStore } from './core/log-context.js';
|
|
17
|
+
export * from './core/entity/index.js';
|
|
18
|
+
export * from './core/flow/index.js';
|
|
15
19
|
export * from './utils/task-id-gen.js';
|
|
16
20
|
export * from './providers/index.js';
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
declare module "@supergrowthai/mq" {
|
|
2
|
+
interface QueueRegistry {
|
|
3
|
+
"rfc001-queue": "rfc001-queue";
|
|
4
|
+
}
|
|
5
|
+
interface MessagePayloadRegistry {
|
|
6
|
+
"rfc001-task": {
|
|
7
|
+
input: string;
|
|
8
|
+
};
|
|
9
|
+
"rfc001-task-b": {
|
|
10
|
+
input: string;
|
|
11
|
+
};
|
|
12
|
+
"rfc001-task-c": {
|
|
13
|
+
input: string;
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
export {};
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
declare module "@supergrowthai/mq" {
|
|
2
|
+
interface QueueRegistry {
|
|
3
|
+
"rfc001-queue": "rfc001-queue";
|
|
4
|
+
}
|
|
5
|
+
interface MessagePayloadRegistry {
|
|
6
|
+
"rfc001-task": {
|
|
7
|
+
input: string;
|
|
8
|
+
};
|
|
9
|
+
"rfc001-task-b": {
|
|
10
|
+
input: string;
|
|
11
|
+
};
|
|
12
|
+
"rfc001-task-c": {
|
|
13
|
+
input: string;
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
export {};
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
declare module "@supergrowthai/mq" {
|
|
2
|
+
interface QueueRegistry {
|
|
3
|
+
"test-flow-queue": "test-flow-queue";
|
|
4
|
+
}
|
|
5
|
+
interface MessagePayloadRegistry {
|
|
6
|
+
"step-task": {
|
|
7
|
+
data: string;
|
|
8
|
+
};
|
|
9
|
+
"step-task-b": {
|
|
10
|
+
data: string;
|
|
11
|
+
};
|
|
12
|
+
"step-task-c": {
|
|
13
|
+
data: string;
|
|
14
|
+
};
|
|
15
|
+
"join-task": {
|
|
16
|
+
flow_results: any;
|
|
17
|
+
};
|
|
18
|
+
"_flow.timeout": {
|
|
19
|
+
flow_id: string;
|
|
20
|
+
is_timeout: boolean;
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
export {};
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
declare module "@supergrowthai/mq" {
|
|
2
|
+
interface QueueRegistry {
|
|
3
|
+
"test-flow-queue": "test-flow-queue";
|
|
4
|
+
}
|
|
5
|
+
interface MessagePayloadRegistry {
|
|
6
|
+
"step-task": {
|
|
7
|
+
data: string;
|
|
8
|
+
};
|
|
9
|
+
"step-task-b": {
|
|
10
|
+
data: string;
|
|
11
|
+
};
|
|
12
|
+
"step-task-c": {
|
|
13
|
+
data: string;
|
|
14
|
+
};
|
|
15
|
+
"join-task": {
|
|
16
|
+
flow_results: any;
|
|
17
|
+
};
|
|
18
|
+
"_flow.timeout": {
|
|
19
|
+
flow_id: string;
|
|
20
|
+
is_timeout: boolean;
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
export {};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
declare module "@supergrowthai/mq" {
|
|
2
|
+
interface QueueRegistry {
|
|
3
|
+
"test-entity-queue": "test-entity-queue";
|
|
4
|
+
}
|
|
5
|
+
interface MessagePayloadRegistry {
|
|
6
|
+
"entity-task": {
|
|
7
|
+
data: string;
|
|
8
|
+
};
|
|
9
|
+
"entity-task-b": {
|
|
10
|
+
data: string;
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
export {};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
declare module "@supergrowthai/mq" {
|
|
2
|
+
interface QueueRegistry {
|
|
3
|
+
"test-entity-queue": "test-entity-queue";
|
|
4
|
+
}
|
|
5
|
+
interface MessagePayloadRegistry {
|
|
6
|
+
"entity-task": {
|
|
7
|
+
data: string;
|
|
8
|
+
};
|
|
9
|
+
"entity-task-b": {
|
|
10
|
+
data: string;
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
export {};
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
declare module "@supergrowthai/mq" {
|
|
2
|
+
interface QueueRegistry {
|
|
3
|
+
"test-fix-queue": "test-fix-queue";
|
|
4
|
+
}
|
|
5
|
+
interface MessagePayloadRegistry {
|
|
6
|
+
"crash-task": {
|
|
7
|
+
data: string;
|
|
8
|
+
};
|
|
9
|
+
"normal-task": {
|
|
10
|
+
value: number;
|
|
11
|
+
};
|
|
12
|
+
"pk-task": {
|
|
13
|
+
entity_id: string;
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
export {};
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
declare module "@supergrowthai/mq" {
|
|
2
|
+
interface QueueRegistry {
|
|
3
|
+
"test-fix-queue": "test-fix-queue";
|
|
4
|
+
}
|
|
5
|
+
interface MessagePayloadRegistry {
|
|
6
|
+
"crash-task": {
|
|
7
|
+
data: string;
|
|
8
|
+
};
|
|
9
|
+
"normal-task": {
|
|
10
|
+
value: number;
|
|
11
|
+
};
|
|
12
|
+
"pk-task": {
|
|
13
|
+
entity_id: string;
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
export {};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@supergrowthai/tq",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.13",
|
|
4
4
|
"description": "Task queue management library with multiple executor types and async task handling",
|
|
5
5
|
"repository": "git+https://github.com/captadexp/next-blog.git",
|
|
6
6
|
"homepage": "https://github.com/captadexp/next-blog/tree/main#readme",
|
|
@@ -107,7 +107,7 @@
|
|
|
107
107
|
"author": "Capt ADExp <tech@developer.toys>",
|
|
108
108
|
"license": "MIT",
|
|
109
109
|
"dependencies": {
|
|
110
|
-
"@supergrowthai/mq": "1.0.
|
|
110
|
+
"@supergrowthai/mq": "1.0.13",
|
|
111
111
|
"lodash": "^4.17.23",
|
|
112
112
|
"moment": "^2.30.1",
|
|
113
113
|
"mongodb": "^7.1.0"
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"PrismaAdapter-CvM_XNtE.cjs","sources":["../src/adapters/MongoDbAdapter.ts","../src/adapters/InMemoryAdapter.ts","../src/adapters/PrismaAdapter.ts"],"sourcesContent":["import {Collection, ObjectId} from \"mongodb\";\nimport {ITaskStorageAdapter, TaskStorageLifecycleConfig} from \"./ITaskStorageAdapter.js\";\nimport {CronTask} from \"./types.js\";\nimport {Logger, LogLevel} from \"@supergrowthai/utils\";\nimport type {ITaskLifecycleProvider} from \"../core/lifecycle.js\";\n\nconst logger = new Logger('MongoDbAdapter', LogLevel.INFO);\n\nconst TWO_DAYS_MS = 2 * 24 * 60 * 60 * 1000;\n\n/**\n * Convert MongoDB document with _id to CronTask with id\n */\nfunction toPublicTask<T>({_id, ...rest}: Omit<CronTask<T>, 'id'> & { _id: T }): CronTask<T> {\n return {...rest, id: _id} as CronTask<T>;\n}\n\n/**\n * MongoDB task storage adapter for @supergrowthai/tq.\n *\n * @description Persists scheduled tasks to MongoDB collection with status tracking.\n * Uses application-level locking designed for single-instance deployments.\n *\n * @use-case Single-instance production deployments\n * @multi-instance NOT SAFE - designed for single-instance use.\n * For multi-instance deployments, implement a distributed locking strategy\n * or use a Kinesis-based solution with Redis lock provider.\n * @persistence Full - tasks stored in MongoDB until processed/expired\n * @requires MongoDB connection via abstract `collection` getter\n *\n * @features\n * - Stale task recovery: tasks stuck in 'processing' for >2 days are reset\n * - Bulk operations for efficiency\n * - Task expiration cleanup\n *\n * @example\n * ```typescript\n * class MyTaskStorage extends MongoDbAdapter {\n * get collection() { return db.collection('scheduled_tasks'); }\n * }\n * const adapter = new MyTaskStorage();\n * ```\n */\nexport abstract class MongoDbAdapter implements ITaskStorageAdapter<ObjectId> {\n private lifecycleProvider?: ITaskLifecycleProvider;\n private lifecycleMode: 'sync' | 'async' = 'async';\n\n protected constructor() {\n }\n\n setLifecycleConfig(config: TaskStorageLifecycleConfig): void {\n this.lifecycleProvider = config.lifecycleProvider;\n this.lifecycleMode = config.mode || 'async';\n }\n\n private emitLifecycleEvent<T>(\n callback: ((ctx: T) => void | Promise<void>) | undefined,\n ctx: T\n ): void {\n if (!callback) return;\n try {\n const result = callback(ctx);\n if (result instanceof Promise) {\n result.catch(err => logger.error(`[TQ] Lifecycle callback error: ${err}`));\n }\n } catch (err) {\n logger.error(`[TQ] Lifecycle callback error: ${err}`);\n }\n }\n\n abstract get collection(): Promise<Collection<Omit<CronTask<ObjectId>, 'id'> & { _id?: ObjectId; }>> ;\n\n async addTasksToScheduled(tasks: CronTask<ObjectId>[]): Promise<CronTask<ObjectId>[]> {\n if (!tasks.length) return [];\n\n const collection = await this.collection;\n\n const transformedTasks = tasks.map((task) => ({\n _id: task.id,\n type: task.type,\n payload: task.payload,\n execute_at: task.execute_at,\n status: task.status || 'scheduled',\n retries: task.retries || 0,\n created_at: task.created_at || new Date(),\n updated_at: new Date(),\n queue_id: task.queue_id,\n processing_started_at: task.processing_started_at || new Date(),\n expires_at: task.expires_at,\n task_group: task.task_group,\n task_hash: task.task_hash,\n retry_after: task.retry_after,\n execution_stats: task.execution_stats,\n force_store: task.force_store\n }));\n\n try {\n await collection.insertMany(transformedTasks, {ordered: false});\n return transformedTasks.map(toPublicTask);\n } catch (error: unknown) {\n if (error && typeof error === 'object' && 'writeErrors' in error) {\n const mongoError = error as { writeErrors: Array<{ index: number }> };\n const successfulTasks = transformedTasks.filter((_, index) =>\n !mongoError.writeErrors.some((e) => e.index === index)\n );\n return successfulTasks.map(toPublicTask);\n }\n throw error;\n }\n }\n\n async getMatureTasks(timestamp: number): Promise<CronTask<ObjectId>[]> {\n const collection = await this.collection;\n\n // Phase 1: Reset stale processing tasks\n const staleTimestamp = Date.now() - TWO_DAYS_MS;\n await collection.updateMany(\n {\n status: 'processing',\n processing_started_at: {$lt: new Date(staleTimestamp)}\n },\n {\n $set: {status: 'scheduled'}\n }\n );\n\n // Phase 2: Fetch and mark mature tasks\n const filter = {\n status: 'scheduled' as const,\n execute_at: {$lte: new Date(timestamp)}\n };\n\n const tasks = await collection\n .find(filter)\n .limit(1000)\n .toArray();\n\n if (tasks.length > 0) {\n const taskIds = tasks.map(t => t._id);\n await collection.updateMany(\n {_id: {$in: taskIds}},\n {\n $set: {\n status: 'processing',\n processing_started_at: new Date()\n }\n }\n );\n }\n\n return tasks.map(toPublicTask);\n }\n\n async markTasksAsProcessing(tasks: CronTask<ObjectId>[], processingStartedAt: Date): Promise<void> {\n const collection = await this.collection;\n const taskIds = tasks.map(t => t.id).filter(Boolean) as ObjectId[];\n\n await collection.updateMany(\n {_id: {$in: taskIds}},\n {\n $set: {\n status: 'processing',\n processing_started_at: processingStartedAt,\n updated_at: new Date()\n }\n }\n );\n }\n\n async markTasksAsExecuted(tasks: CronTask<ObjectId>[]): Promise<void> {\n const collection = await this.collection;\n const taskIds = tasks.map(t => t.id).filter(Boolean) as ObjectId[];\n\n\n await collection.updateMany(\n {_id: {$in: taskIds}},\n {\n $set: {\n status: 'executed',\n updated_at: new Date()\n }\n }\n );\n }\n\n async markTasksAsFailed(tasks: CronTask<ObjectId>[]): Promise<void> {\n const collection = await this.collection;\n const taskIds = tasks.map(t => t.id).filter(Boolean) as ObjectId[];\n\n\n await collection.updateMany(\n {_id: {$in: taskIds}},\n {\n $set: {\n status: 'failed',\n updated_at: new Date()\n }\n }\n );\n }\n\n async getTasksByIds(taskIds: ObjectId[]): Promise<CronTask<ObjectId>[]> {\n const collection = await this.collection;\n\n return collection\n .find({_id: {$in: taskIds}})\n .toArray()\n .then(result => result.map(toPublicTask));\n }\n\n async getCleanupStats(): Promise<{ orphanedTasks: number; expiredTasks: number }> {\n const collection = await this.collection;\n\n const orphanedBefore = new Date(Date.now() - TWO_DAYS_MS);\n const orphanedTasks = await collection.countDocuments({\n status: 'processing',\n processing_started_at: {$lt: orphanedBefore}\n });\n\n const expiredTasks = await collection.countDocuments({\n expires_at: {$lt: new Date()}\n });\n\n return {orphanedTasks, expiredTasks};\n }\n\n async cleanupTasks(orphanedBefore: Date, expiredBefore: Date): Promise<void> {\n const collection = await this.collection;\n\n // Clean up orphaned tasks\n await collection.deleteMany({\n status: 'processing',\n processing_started_at: {$lt: orphanedBefore}\n });\n\n // Clean up expired tasks\n await collection.deleteMany({\n expires_at: {$lt: expiredBefore}\n });\n }\n\n async updateTasks(updates: Array<{ id: ObjectId; updates: Partial<CronTask<ObjectId>> }>): Promise<void> {\n const collection = await this.collection;\n\n const bulkOps = updates.map(({id, updates}) => ({\n updateOne: {\n filter: {_id: id},\n update: {\n $set: {\n ...updates,\n updated_at: new Date()\n }\n }\n }\n }));\n\n if (bulkOps.length > 0) {\n // ordered: false allows remaining ops to continue if one fails (e.g., duplicate key)\n await collection.bulkWrite(bulkOps, {ordered: false});\n }\n }\n\n async upsertTasks(tasks: CronTask<ObjectId>[]): Promise<void> {\n if (!tasks.length) return;\n const collection = await this.collection;\n const now = new Date();\n\n const bulkOps = tasks.map(task => {\n const id = task.id || this.generateId();\n const {id: _id, status, execute_at, execution_stats, updated_at, ...rest} = task;\n return {\n updateOne: {\n filter: {_id: id},\n update: {\n $set: {\n status: task.status,\n execute_at: task.execute_at,\n execution_stats: task.execution_stats,\n updated_at: now\n },\n $setOnInsert: {\n ...rest,\n created_at: task.created_at || now,\n processing_started_at: task.processing_started_at || now\n }\n },\n upsert: true\n }\n };\n });\n\n // ordered: false allows remaining ops to continue if one fails\n await collection.bulkWrite(bulkOps, {ordered: false});\n }\n\n generateId() {\n return new ObjectId();\n }\n\n async close() {\n }\n\n async initialize() {\n }\n\n async markTasksAsIgnored(tasks: CronTask<ObjectId>[]): Promise<void> {\n const collection = await this.collection;\n const taskIds = tasks.map(t => t.id).filter(Boolean) as ObjectId[];\n\n\n await collection.updateMany(\n {_id: {$in: taskIds}},\n {\n $set: {\n status: 'ignored',\n //update execution_stats\n updated_at: new Date()\n },\n }\n );\n }\n}","import {ITaskStorageAdapter, TaskStorageLifecycleConfig} from \"./ITaskStorageAdapter\";\nimport {CronTask} from \"./types\";\nimport type {ITaskLifecycleProvider} from \"../core/lifecycle.js\";\n\n/**\n * In-memory task storage adapter for @supergrowthai/tq.\n *\n * @description Stores scheduled tasks in memory using a Map.\n * Data is lost on process restart - use for development and testing only.\n *\n * @use-case Development, testing, and prototyping\n * @multi-instance NOT SAFE - data is not shared between processes\n * @persistence NONE - all tasks lost on restart\n *\n * @features\n * - Fast in-memory operations\n * - Simple cleanup implementation\n * - Auto-generated string IDs\n *\n * @example\n * ```typescript\n * const adapter = new InMemoryAdapter();\n * const taskHandler = new TaskHandler(queue, taskQueue, adapter, cache);\n * ```\n */\nclass InMemoryAdapter implements ITaskStorageAdapter<string> {\n private scheduledTasks: Map<string, CronTask<string>> = new Map();\n private lifecycleProvider?: ITaskLifecycleProvider;\n private lifecycleMode: 'sync' | 'async' = 'async';\n\n setLifecycleConfig(config: TaskStorageLifecycleConfig): void {\n this.lifecycleProvider = config.lifecycleProvider;\n this.lifecycleMode = config.mode || 'async';\n }\n\n private emitLifecycleEvent<T>(\n callback: ((ctx: T) => void | Promise<void>) | undefined,\n ctx: T\n ): void {\n if (!callback) return;\n try {\n const result = callback(ctx);\n if (result instanceof Promise) {\n result.catch(err => console.error(`[TQ] Lifecycle callback error: ${err}`));\n }\n } catch (err) {\n console.error(`[TQ] Lifecycle callback error: ${err}`);\n }\n }\n\n async addTasksToScheduled(tasks: CronTask<string>[]): Promise<CronTask<string>[]> {\n const addedTasks = tasks.map(task => {\n const id = task.id || this.generateId();\n const taskWithId = {...task, id};\n this.scheduledTasks.set(id, taskWithId);\n return taskWithId;\n });\n return addedTasks;\n }\n\n async getMatureTasks(timestamp: number): Promise<CronTask<string>[]> {\n const matureTasks: CronTask<string>[] = [];\n for (const [id, task] of Array.from(this.scheduledTasks.entries())) {\n if (task.execute_at.getTime() <= timestamp && task.status !== 'processing' && task.status !== 'executed') {\n matureTasks.push(task);\n }\n }\n return matureTasks;\n }\n\n async markTasksAsProcessing(tasks: CronTask<string>[], processingStartedAt: Date): Promise<void> {\n for (const task of tasks) {\n const existingTask = this.scheduledTasks.get(task.id!);\n if (existingTask) {\n existingTask.status = 'processing';\n existingTask.processing_started_at = processingStartedAt;\n this.scheduledTasks.set(task.id!, existingTask);\n }\n }\n }\n\n async markTasksAsExecuted(tasks: CronTask<string>[]): Promise<void> {\n for (const task of tasks) {\n const existingTask = this.scheduledTasks.get(task.id!);\n if (existingTask) {\n existingTask.status = 'executed';\n existingTask.execute_at = new Date();\n this.scheduledTasks.set(task.id!, existingTask);\n }\n }\n }\n\n async markTasksAsFailed(tasks: CronTask<string>[]): Promise<void> {\n for (const task of tasks) {\n const existingTask = this.scheduledTasks.get(task.id!);\n if (existingTask) {\n existingTask.status = 'failed';\n existingTask.execution_stats = {...existingTask.execution_stats, failed_at: new Date()};\n this.scheduledTasks.set(task.id!, existingTask);\n }\n }\n }\n\n async getTasksByIds(taskIds: string[]): Promise<CronTask<string>[]> {\n return taskIds.map(id => this.scheduledTasks.get(id)).filter(Boolean) as CronTask<string>[];\n }\n\n async updateTasks(updates: Array<{ id: string; updates: Partial<CronTask<string>> }>): Promise<void> {\n for (const {id, updates: taskUpdates} of updates) {\n const task = this.scheduledTasks.get(id);\n if (task) {\n Object.assign(task, taskUpdates);\n this.scheduledTasks.set(id, task);\n }\n }\n }\n\n async upsertTasks(tasks: CronTask<string>[]): Promise<void> {\n for (const task of tasks) {\n const id = task.id || this.generateId();\n const existing = this.scheduledTasks.get(id);\n if (existing) {\n Object.assign(existing, {\n status: task.status,\n execute_at: task.execute_at,\n execution_stats: task.execution_stats,\n updated_at: new Date()\n });\n } else {\n this.scheduledTasks.set(id, {...task, id});\n }\n }\n }\n\n async getCleanupStats(): Promise<{ orphanedTasks: number; expiredTasks: number }> {\n let orphanedTasks = 0;\n let expiredTasks = 0;\n const now = Date.now();\n\n for (const task of Array.from(this.scheduledTasks.values())) {\n if (task.status === 'processing' && task.processing_started_at && (now - task.processing_started_at.getTime()) > 300000) {\n orphanedTasks++;\n }\n if (task.expires_at && now > task.expires_at.getTime()) {\n expiredTasks++;\n }\n }\n\n return {orphanedTasks, expiredTasks};\n }\n\n async cleanupTasks(orphanedBefore: Date, expiredBefore: Date): Promise<void> {\n for (const [id, task] of Array.from(this.scheduledTasks.entries())) {\n const shouldDelete =\n (task.status === 'processing' && task.processing_started_at && task.processing_started_at < orphanedBefore) ||\n (task.expires_at && task.expires_at < expiredBefore);\n\n if (shouldDelete) {\n this.scheduledTasks.delete(id);\n }\n }\n }\n\n async initialize(): Promise<void> {\n // No initialization needed for memory adapter\n }\n\n async close(): Promise<void> {\n this.scheduledTasks.clear();\n }\n\n generateId(): string {\n return `${Date.now()}-${Math.random().toString(36).substring(2, 9)}`;\n }\n\n async markTasksAsIgnored(tasks: CronTask<string>[]) {\n for (const task of tasks) {\n const existingTask = this.scheduledTasks.get(task.id!);\n if (existingTask) {\n existingTask.status = 'ignored';\n existingTask.execution_stats = {...existingTask.execution_stats, ignore_reason: \"unknown type\"};\n this.scheduledTasks.set(task.id!, existingTask);\n }\n }\n }\n}\n\nexport {InMemoryAdapter}","import {ITaskStorageAdapter, TaskStorageLifecycleConfig} from \"./ITaskStorageAdapter.js\";\nimport {CronTask} from \"./types.js\";\nimport {Logger, LogLevel} from \"@supergrowthai/utils\";\nimport {PrismaClient} from \"@prisma/client/extension\";\nimport type {ITaskLifecycleProvider} from \"../core/lifecycle.js\";\n\nconst logger = new Logger('PrismaAdapter', LogLevel.INFO);\nconst TWO_DAYS_MS = 2 * 24 * 60 * 60 * 1000;\n\n\n// ---- Type utilities ----\n\n/** A Prisma client that is guaranteed to have model delegate K. */\nexport type ClientWithModel<K extends keyof PrismaClient> =\n Pick<PrismaClient, K>;\n\n/** Extract the entity (row) type from a model delegate. */\ntype EntityOf<D> =\n D extends { findUnique(args: any): Promise<infer U | null> } ? U :\n D extends { findFirst(args: any): Promise<infer U | null> } ? U :\n D extends { findMany(args?: any): Promise<(infer U)[]> } ? U :\n never;\n\n/** Compile-time guard: model's entity must be compatible with the shape you require. */\ntype EnsureModelShape<Delegate, Needed> =\n EntityOf<Delegate> extends Needed ? unknown : never;\n\n/**\n * Prisma task storage adapter for @supergrowthai/tq.\n *\n * @description Persists scheduled tasks to any Prisma model with status tracking.\n * Uses application-level locking designed for single-instance deployments.\n *\n * @use-case Single-instance production deployments with Prisma ORM\n * @multi-instance NOT SAFE - designed for single-instance use.\n * For multi-instance deployments, implement a distributed locking strategy\n * or use a Kinesis-based solution with Redis lock provider.\n * @persistence Full - tasks stored in database until processed/expired\n * @requires Prisma client with a model matching CronTask structure\n *\n * @features\n * - Stale task recovery: tasks stuck in 'processing' for >2 days are reset\n * - Transaction support for batch updates\n * - Task expiration cleanup\n *\n * @typeParam TId - The ID type (string, number, etc.)\n * @typeParam K - The Prisma model key (e.g. 'scheduledTask')\n * @typeParam Msg - The task type extending CronTask<TId>\n *\n * @example\n * ```typescript\n * const adapter = new PrismaAdapter({\n * prismaClient: prisma,\n * messageModel: 'scheduledTask'\n * });\n * ```\n */\nexport class PrismaAdapter<\n TId = any,\n K extends keyof PrismaClient = never,\n Msg extends CronTask<TId> = CronTask<TId>\n> implements ITaskStorageAdapter<TId> {\n private lifecycleProvider?: ITaskLifecycleProvider;\n private lifecycleMode: 'sync' | 'async' = 'async';\n\n constructor(\n private config: {\n prismaClient: ClientWithModel<K>;\n messageModel: K;\n /**\n * Phantom type param that enforces:\n * - client has model K\n * - entity type of client[K] extends Msg (which extends BaseMessage<TId>)\n * Do not pass at runtime.\n */\n _shapeCheck?: EnsureModelShape<PrismaClient[K], Msg> & (Msg extends CronTask<TId> & {\n id: TId\n } ? unknown : never);\n }\n ) {\n }\n\n setLifecycleConfig(config: TaskStorageLifecycleConfig): void {\n this.lifecycleProvider = config.lifecycleProvider;\n this.lifecycleMode = config.mode || 'async';\n }\n\n private emitLifecycleEvent<T>(\n callback: ((ctx: T) => void | Promise<void>) | undefined,\n ctx: T\n ): void {\n if (!callback) return;\n try {\n const result = callback(ctx);\n if (result instanceof Promise) {\n result.catch(err => logger.error(`[TQ] Lifecycle callback error: ${err}`));\n }\n } catch (err) {\n logger.error(`[TQ] Lifecycle callback error: ${err}`);\n }\n }\n\n get prismaClient(): PrismaClient {\n return this.config.prismaClient;\n }\n\n get taskTableName(): string {\n return String(this.config.messageModel);\n }\n\n protected get delegate(): PrismaClient[K] {\n return this.config.prismaClient[this.config.messageModel];\n }\n\n /**\n * Persist tasks to the database as scheduled.\n *\n * **Default implementation:** Uses individual creates with duplicate detection\n * for maximum database compatibility (SQLite, Postgres, MySQL, etc.).\n *\n * **Performance note:** This is O(n) database round-trips. For high-throughput\n * scenarios (100+ tasks/batch), override this method with a batch implementation:\n *\n * @example PostgreSQL/MySQL optimization:\n * ```typescript\n * class OptimizedPrismaAdapter extends PrismaAdapter {\n * async addTasksToScheduled(tasks) {\n * if (!tasks.length) return [];\n * await this.delegate.createMany({\n * data: tasks.map(t => ({ ...t, id: t.id || this.generateId() })),\n * skipDuplicates: true\n * });\n * return tasks;\n * }\n * }\n * ```\n */\n async addTasksToScheduled(tasks: CronTask<TId>[]): Promise<CronTask<TId>[]> {\n if (!tasks.length) return [];\n\n // Performance hint for high-throughput scenarios\n if (tasks.length > 50) {\n logger.warn(`[PrismaAdapter] Processing ${tasks.length} tasks sequentially (O(n) round-trips). For Postgres/MySQL, override addTasksToScheduled with createMany for better performance.`);\n }\n\n // Sequential creates for broad DB compatibility (SQLite, CockroachDB, etc.)\n // Override this method for batch optimization on Postgres/MySQL\n const results: CronTask<TId>[] = [];\n for (const task of tasks) {\n try {\n await this.delegate.create({\n data: {\n ...task,\n id: task.id || this.generateId(),\n status: task.status || 'scheduled',\n retries: task.retries || 0,\n created_at: task.created_at || new Date(),\n updated_at: new Date(),\n processing_started_at: task.processing_started_at || new Date()\n }\n });\n results.push(task);\n } catch (error: unknown) {\n logger.warn(`Task skipped (likely duplicate): ${error}`);\n }\n }\n return results;\n }\n\n async getMatureTasks(timestamp: number): Promise<CronTask<TId>[]> {\n const staleTimestamp = Date.now() - TWO_DAYS_MS;\n\n await this.delegate.updateMany({\n where: {\n status: 'processing',\n processing_started_at: {lt: new Date(staleTimestamp)}\n },\n data: {status: 'scheduled'}\n });\n\n const tasks = await this.delegate.findMany({\n where: {\n status: 'scheduled',\n execute_at: {lte: new Date(timestamp)}\n },\n take: 1000,\n orderBy: {execute_at: 'asc'}\n });\n\n if (tasks.length > 0) {\n const taskIds = tasks.map((t: any) => t.id);\n await this.delegate.updateMany({\n where: {id: {in: taskIds}},\n data: {\n status: 'processing',\n processing_started_at: new Date()\n }\n });\n }\n\n return tasks;\n }\n\n async markTasksAsProcessing(tasks: CronTask<TId>[], processingStartedAt: Date): Promise<void> {\n const taskIds = tasks.map(t => t.id).filter(Boolean);\n if (!taskIds.length) return;\n\n await this.delegate.updateMany({\n where: {id: {in: taskIds}},\n data: {\n status: 'processing',\n processing_started_at: processingStartedAt,\n updated_at: new Date()\n }\n });\n }\n\n async markTasksAsExecuted(tasks: CronTask<TId>[]): Promise<void> {\n const taskIds = tasks.map(t => t.id).filter(Boolean);\n if (!taskIds.length) return;\n\n await this.delegate.updateMany({\n where: {id: {in: taskIds}},\n data: {status: 'executed', updated_at: new Date()}\n });\n }\n\n async markTasksAsFailed(tasks: CronTask<TId>[]): Promise<void> {\n const taskIds = tasks.map(t => t.id).filter(Boolean);\n if (!taskIds.length) return;\n\n await this.delegate.updateMany({\n where: {id: {in: taskIds}},\n data: {status: 'failed', updated_at: new Date()}\n });\n }\n\n async markTasksAsIgnored(tasks: CronTask<TId>[]): Promise<void> {\n const taskIds = tasks.map(t => t.id).filter(Boolean);\n if (!taskIds.length) return;\n\n await this.delegate.updateMany({\n where: {id: {in: taskIds}},\n data: {status: 'ignored', updated_at: new Date()}\n });\n }\n\n async getTasksByIds(taskIds: TId[]): Promise<CronTask<TId>[]> {\n if (!taskIds.length) return [];\n\n return this.delegate.findMany({\n where: {id: {in: taskIds}}\n });\n }\n\n async updateTasks(updatesList: Array<{ id: TId; updates: Partial<CronTask<TId>> }>): Promise<void> {\n //fixme do we need a transaction. good but defo ?\n await this.prismaClient\n .$transaction(async (prisma) => {\n for (const {id, updates} of updatesList) {\n await (prisma as any)[this.taskTableName]\n .update({\n where: {id: id},\n data: {...updates, updated_at: new Date()}\n });\n }\n });\n }\n\n async upsertTasks(tasks: CronTask<TId>[]): Promise<void> {\n if (!tasks.length) return;\n\n const now = new Date();\n const delegate = this.delegate;\n\n // Each task may have different status/execute_at/execution_stats,\n // so per-task upsert is unavoidable. Wrapped in a transaction for atomicity.\n await this.prismaClient\n .$transaction(\n tasks.map(task => delegate.upsert({\n where: {id: task.id},\n create: {\n ...task,\n created_at: task.created_at || now,\n updated_at: now,\n processing_started_at: task.processing_started_at || now\n },\n update: {\n status: task.status,\n execute_at: task.execute_at,\n execution_stats: task.execution_stats,\n updated_at: now\n }\n }))\n );\n }\n\n async getCleanupStats(): Promise<{ orphanedTasks: number; expiredTasks: number }> {\n const orphanedBefore = new Date(Date.now() - TWO_DAYS_MS);\n\n const [orphanedTasks, expiredTasks] = await Promise.all([\n this.delegate.count({\n where: {\n status: 'processing',\n processing_started_at: {lt: orphanedBefore}\n }\n }),\n this.delegate.count({\n where: {expires_at: {lt: new Date()}}\n })\n ]);\n\n return {orphanedTasks, expiredTasks};\n }\n\n async cleanupTasks(orphanedBefore: Date, expiredBefore: Date): Promise<void> {\n await Promise.all([\n this.delegate.deleteMany({\n where: {\n status: 'processing',\n processing_started_at: {lt: orphanedBefore}\n }\n }),\n this.delegate.deleteMany({\n where: {expires_at: {lt: expiredBefore}}\n })\n ]);\n }\n\n generateId(): TId {\n //needs to be overriden when prisma client is of mongodb\n return crypto.randomUUID() as TId;\n }\n\n async initialize(): Promise<void> {\n }\n\n async close(): Promise<void> {\n }\n}"],"names":["logger","Logger","LogLevel","TWO_DAYS_MS","updates","ObjectId"],"mappings":";;;AAMA,MAAMA,WAAS,IAAIC,OAAAA,OAAO,kBAAkBC,OAAAA,SAAS,IAAI;AAEzD,MAAMC,gBAAc,IAAI,KAAK,KAAK,KAAK;AAKvC,SAAS,aAAgB,EAAC,KAAK,GAAG,QAA0D;AACxF,SAAO,EAAC,GAAG,MAAM,IAAI,IAAA;AACzB;AA4BO,MAAe,eAAwD;AAAA,EAIhE,cAAc;AAFxB,SAAQ,gBAAkC;AAAA,EAG1C;AAAA,EAEA,mBAAmB,QAA0C;AACzD,SAAK,oBAAoB,OAAO;AAChC,SAAK,gBAAgB,OAAO,QAAQ;AAAA,EACxC;AAAA,EAEQ,mBACJ,UACA,KACI;AACJ,QAAI,CAAC,SAAU;AACf,QAAI;AACA,YAAM,SAAS,SAAS,GAAG;AAC3B,UAAI,kBAAkB,SAAS;AAC3B,eAAO,MAAM,CAAA,QAAOH,SAAO,MAAM,kCAAkC,GAAG,EAAE,CAAC;AAAA,MAC7E;AAAA,IACJ,SAAS,KAAK;AACVA,eAAO,MAAM,kCAAkC,GAAG,EAAE;AAAA,IACxD;AAAA,EACJ;AAAA,EAIA,MAAM,oBAAoB,OAA4D;AAClF,QAAI,CAAC,MAAM,OAAQ,QAAO,CAAA;AAE1B,UAAM,aAAa,MAAM,KAAK;AAE9B,UAAM,mBAAmB,MAAM,IAAI,CAAC,UAAU;AAAA,MAC1C,KAAK,KAAK;AAAA,MACV,MAAM,KAAK;AAAA,MACX,SAAS,KAAK;AAAA,MACd,YAAY,KAAK;AAAA,MACjB,QAAQ,KAAK,UAAU;AAAA,MACvB,SAAS,KAAK,WAAW;AAAA,MACzB,YAAY,KAAK,cAAc,oBAAI,KAAA;AAAA,MACnC,gCAAgB,KAAA;AAAA,MAChB,UAAU,KAAK;AAAA,MACf,uBAAuB,KAAK,yBAAyB,oBAAI,KAAA;AAAA,MACzD,YAAY,KAAK;AAAA,MACjB,YAAY,KAAK;AAAA,MACjB,WAAW,KAAK;AAAA,MAChB,aAAa,KAAK;AAAA,MAClB,iBAAiB,KAAK;AAAA,MACtB,aAAa,KAAK;AAAA,IAAA,EACpB;AAEF,QAAI;AACA,YAAM,WAAW,WAAW,kBAAkB,EAAC,SAAS,OAAM;AAC9D,aAAO,iBAAiB,IAAI,YAAY;AAAA,IAC5C,SAAS,OAAgB;AACrB,UAAI,SAAS,OAAO,UAAU,YAAY,iBAAiB,OAAO;AAC9D,cAAM,aAAa;AACnB,cAAM,kBAAkB,iBAAiB;AAAA,UAAO,CAAC,GAAG,UAChD,CAAC,WAAW,YAAY,KAAK,CAAC,MAAM,EAAE,UAAU,KAAK;AAAA,QAAA;AAEzD,eAAO,gBAAgB,IAAI,YAAY;AAAA,MAC3C;AACA,YAAM;AAAA,IACV;AAAA,EACJ;AAAA,EAEA,MAAM,eAAe,WAAkD;AACnE,UAAM,aAAa,MAAM,KAAK;AAG9B,UAAM,iBAAiB,KAAK,IAAA,IAAQG;AACpC,UAAM,WAAW;AAAA,MACb;AAAA,QACI,QAAQ;AAAA,QACR,uBAAuB,EAAC,KAAK,IAAI,KAAK,cAAc,EAAA;AAAA,MAAC;AAAA,MAEzD;AAAA,QACI,MAAM,EAAC,QAAQ,YAAA;AAAA,MAAW;AAAA,IAC9B;AAIJ,UAAM,SAAS;AAAA,MACX,QAAQ;AAAA,MACR,YAAY,EAAC,MAAM,IAAI,KAAK,SAAS,EAAA;AAAA,IAAC;AAG1C,UAAM,QAAQ,MAAM,WACf,KAAK,MAAM,EACX,MAAM,GAAI,EACV,QAAA;AAEL,QAAI,MAAM,SAAS,GAAG;AAClB,YAAM,UAAU,MAAM,IAAI,CAAA,MAAK,EAAE,GAAG;AACpC,YAAM,WAAW;AAAA,QACb,EAAC,KAAK,EAAC,KAAK,UAAO;AAAA,QACnB;AAAA,UACI,MAAM;AAAA,YACF,QAAQ;AAAA,YACR,2CAA2B,KAAA;AAAA,UAAK;AAAA,QACpC;AAAA,MACJ;AAAA,IAER;AAEA,WAAO,MAAM,IAAI,YAAY;AAAA,EACjC;AAAA,EAEA,MAAM,sBAAsB,OAA6B,qBAA0C;AAC/F,UAAM,aAAa,MAAM,KAAK;AAC9B,UAAM,UAAU,MAAM,IAAI,CAAA,MAAK,EAAE,EAAE,EAAE,OAAO,OAAO;AAEnD,UAAM,WAAW;AAAA,MACb,EAAC,KAAK,EAAC,KAAK,UAAO;AAAA,MACnB;AAAA,QACI,MAAM;AAAA,UACF,QAAQ;AAAA,UACR,uBAAuB;AAAA,UACvB,gCAAgB,KAAA;AAAA,QAAK;AAAA,MACzB;AAAA,IACJ;AAAA,EAER;AAAA,EAEA,MAAM,oBAAoB,OAA4C;AAClE,UAAM,aAAa,MAAM,KAAK;AAC9B,UAAM,UAAU,MAAM,IAAI,CAAA,MAAK,EAAE,EAAE,EAAE,OAAO,OAAO;AAGnD,UAAM,WAAW;AAAA,MACb,EAAC,KAAK,EAAC,KAAK,UAAO;AAAA,MACnB;AAAA,QACI,MAAM;AAAA,UACF,QAAQ;AAAA,UACR,gCAAgB,KAAA;AAAA,QAAK;AAAA,MACzB;AAAA,IACJ;AAAA,EAER;AAAA,EAEA,MAAM,kBAAkB,OAA4C;AAChE,UAAM,aAAa,MAAM,KAAK;AAC9B,UAAM,UAAU,MAAM,IAAI,CAAA,MAAK,EAAE,EAAE,EAAE,OAAO,OAAO;AAGnD,UAAM,WAAW;AAAA,MACb,EAAC,KAAK,EAAC,KAAK,UAAO;AAAA,MACnB;AAAA,QACI,MAAM;AAAA,UACF,QAAQ;AAAA,UACR,gCAAgB,KAAA;AAAA,QAAK;AAAA,MACzB;AAAA,IACJ;AAAA,EAER;AAAA,EAEA,MAAM,cAAc,SAAoD;AACpE,UAAM,aAAa,MAAM,KAAK;AAE9B,WAAO,WACF,KAAK,EAAC,KAAK,EAAC,KAAK,UAAO,CAAE,EAC1B,UACA,KAAK,YAAU,OAAO,IAAI,YAAY,CAAC;AAAA,EAChD;AAAA,EAEA,MAAM,kBAA4E;AAC9E,UAAM,aAAa,MAAM,KAAK;AAE9B,UAAM,iBAAiB,IAAI,KAAK,KAAK,IAAA,IAAQA,aAAW;AACxD,UAAM,gBAAgB,MAAM,WAAW,eAAe;AAAA,MAClD,QAAQ;AAAA,MACR,uBAAuB,EAAC,KAAK,eAAA;AAAA,IAAc,CAC9C;AAED,UAAM,eAAe,MAAM,WAAW,eAAe;AAAA,MACjD,YAAY,EAAC,KAAK,oBAAI,OAAK;AAAA,IAAC,CAC/B;AAED,WAAO,EAAC,eAAe,aAAA;AAAA,EAC3B;AAAA,EAEA,MAAM,aAAa,gBAAsB,eAAoC;AACzE,UAAM,aAAa,MAAM,KAAK;AAG9B,UAAM,WAAW,WAAW;AAAA,MACxB,QAAQ;AAAA,MACR,uBAAuB,EAAC,KAAK,eAAA;AAAA,IAAc,CAC9C;AAGD,UAAM,WAAW,WAAW;AAAA,MACxB,YAAY,EAAC,KAAK,cAAA;AAAA,IAAa,CAClC;AAAA,EACL;AAAA,EAEA,MAAM,YAAY,SAAuF;AACrG,UAAM,aAAa,MAAM,KAAK;AAE9B,UAAM,UAAU,QAAQ,IAAI,CAAC,EAAC,IAAI,SAAAC,gBAAc;AAAA,MAC5C,WAAW;AAAA,QACP,QAAQ,EAAC,KAAK,GAAA;AAAA,QACd,QAAQ;AAAA,UACJ,MAAM;AAAA,YACF,GAAGA;AAAAA,YACH,gCAAgB,KAAA;AAAA,UAAK;AAAA,QACzB;AAAA,MACJ;AAAA,IACJ,EACF;AAEF,QAAI,QAAQ,SAAS,GAAG;AAEpB,YAAM,WAAW,UAAU,SAAS,EAAC,SAAS,OAAM;AAAA,IACxD;AAAA,EACJ;AAAA,EAEA,MAAM,YAAY,OAA4C;AAC1D,QAAI,CAAC,MAAM,OAAQ;AACnB,UAAM,aAAa,MAAM,KAAK;AAC9B,UAAM,0BAAU,KAAA;AAEhB,UAAM,UAAU,MAAM,IAAI,CAAA,SAAQ;AAC9B,YAAM,KAAK,KAAK,MAAM,KAAK,WAAA;AAC3B,YAAM,EAAC,IAAI,KAAK,QAAQ,YAAY,iBAAiB,YAAY,GAAG,KAAA,IAAQ;AAC5E,aAAO;AAAA,QACH,WAAW;AAAA,UACP,QAAQ,EAAC,KAAK,GAAA;AAAA,UACd,QAAQ;AAAA,YACJ,MAAM;AAAA,cACF,QAAQ,KAAK;AAAA,cACb,YAAY,KAAK;AAAA,cACjB,iBAAiB,KAAK;AAAA,cACtB,YAAY;AAAA,YAAA;AAAA,YAEhB,cAAc;AAAA,cACV,GAAG;AAAA,cACH,YAAY,KAAK,cAAc;AAAA,cAC/B,uBAAuB,KAAK,yBAAyB;AAAA,YAAA;AAAA,UACzD;AAAA,UAEJ,QAAQ;AAAA,QAAA;AAAA,MACZ;AAAA,IAER,CAAC;AAGD,UAAM,WAAW,UAAU,SAAS,EAAC,SAAS,OAAM;AAAA,EACxD;AAAA,EAEA,aAAa;AACT,WAAO,IAAIC,QAAAA,SAAA;AAAA,EACf;AAAA,EAEA,MAAM,QAAQ;AAAA,EACd;AAAA,EAEA,MAAM,aAAa;AAAA,EACnB;AAAA,EAEA,MAAM,mBAAmB,OAA4C;AACjE,UAAM,aAAa,MAAM,KAAK;AAC9B,UAAM,UAAU,MAAM,IAAI,CAAA,MAAK,EAAE,EAAE,EAAE,OAAO,OAAO;AAGnD,UAAM,WAAW;AAAA,MACb,EAAC,KAAK,EAAC,KAAK,UAAO;AAAA,MACnB;AAAA,QACI,MAAM;AAAA,UACF,QAAQ;AAAA;AAAA,UAER,gCAAgB,KAAA;AAAA,QAAK;AAAA,MACzB;AAAA,IACJ;AAAA,EAER;AACJ;ACxSA,MAAM,gBAAuD;AAAA,EAA7D,cAAA;AACI,SAAQ,qCAAoD,IAAA;AAE5D,SAAQ,gBAAkC;AAAA,EAAA;AAAA,EAE1C,mBAAmB,QAA0C;AACzD,SAAK,oBAAoB,OAAO;AAChC,SAAK,gBAAgB,OAAO,QAAQ;AAAA,EACxC;AAAA,EAEQ,mBACJ,UACA,KACI;AACJ,QAAI,CAAC,SAAU;AACf,QAAI;AACA,YAAM,SAAS,SAAS,GAAG;AAC3B,UAAI,kBAAkB,SAAS;AAC3B,eAAO,MAAM,CAAA,QAAO,QAAQ,MAAM,kCAAkC,GAAG,EAAE,CAAC;AAAA,MAC9E;AAAA,IACJ,SAAS,KAAK;AACV,cAAQ,MAAM,kCAAkC,GAAG,EAAE;AAAA,IACzD;AAAA,EACJ;AAAA,EAEA,MAAM,oBAAoB,OAAwD;AAC9E,UAAM,aAAa,MAAM,IAAI,CAAA,SAAQ;AACjC,YAAM,KAAK,KAAK,MAAM,KAAK,WAAA;AAC3B,YAAM,aAAa,EAAC,GAAG,MAAM,GAAA;AAC7B,WAAK,eAAe,IAAI,IAAI,UAAU;AACtC,aAAO;AAAA,IACX,CAAC;AACD,WAAO;AAAA,EACX;AAAA,EAEA,MAAM,eAAe,WAAgD;AACjE,UAAM,cAAkC,CAAA;AACxC,eAAW,CAAC,IAAI,IAAI,KAAK,MAAM,KAAK,KAAK,eAAe,QAAA,CAAS,GAAG;AAChE,UAAI,KAAK,WAAW,QAAA,KAAa,aAAa,KAAK,WAAW,gBAAgB,KAAK,WAAW,YAAY;AACtG,oBAAY,KAAK,IAAI;AAAA,MACzB;AAAA,IACJ;AACA,WAAO;AAAA,EACX;AAAA,EAEA,MAAM,sBAAsB,OAA2B,qBAA0C;AAC7F,eAAW,QAAQ,OAAO;AACtB,YAAM,eAAe,KAAK,eAAe,IAAI,KAAK,EAAG;AACrD,UAAI,cAAc;AACd,qBAAa,SAAS;AACtB,qBAAa,wBAAwB;AACrC,aAAK,eAAe,IAAI,KAAK,IAAK,YAAY;AAAA,MAClD;AAAA,IACJ;AAAA,EACJ;AAAA,EAEA,MAAM,oBAAoB,OAA0C;AAChE,eAAW,QAAQ,OAAO;AACtB,YAAM,eAAe,KAAK,eAAe,IAAI,KAAK,EAAG;AACrD,UAAI,cAAc;AACd,qBAAa,SAAS;AACtB,qBAAa,iCAAiB,KAAA;AAC9B,aAAK,eAAe,IAAI,KAAK,IAAK,YAAY;AAAA,MAClD;AAAA,IACJ;AAAA,EACJ;AAAA,EAEA,MAAM,kBAAkB,OAA0C;AAC9D,eAAW,QAAQ,OAAO;AACtB,YAAM,eAAe,KAAK,eAAe,IAAI,KAAK,EAAG;AACrD,UAAI,cAAc;AACd,qBAAa,SAAS;AACtB,qBAAa,kBAAkB,EAAC,GAAG,aAAa,iBAAiB,WAAW,oBAAI,OAAK;AACrF,aAAK,eAAe,IAAI,KAAK,IAAK,YAAY;AAAA,MAClD;AAAA,IACJ;AAAA,EACJ;AAAA,EAEA,MAAM,cAAc,SAAgD;AAChE,WAAO,QAAQ,IAAI,CAAA,OAAM,KAAK,eAAe,IAAI,EAAE,CAAC,EAAE,OAAO,OAAO;AAAA,EACxE;AAAA,EAEA,MAAM,YAAY,SAAmF;AACjG,eAAW,EAAC,IAAI,SAAS,YAAA,KAAgB,SAAS;AAC9C,YAAM,OAAO,KAAK,eAAe,IAAI,EAAE;AACvC,UAAI,MAAM;AACN,eAAO,OAAO,MAAM,WAAW;AAC/B,aAAK,eAAe,IAAI,IAAI,IAAI;AAAA,MACpC;AAAA,IACJ;AAAA,EACJ;AAAA,EAEA,MAAM,YAAY,OAA0C;AACxD,eAAW,QAAQ,OAAO;AACtB,YAAM,KAAK,KAAK,MAAM,KAAK,WAAA;AAC3B,YAAM,WAAW,KAAK,eAAe,IAAI,EAAE;AAC3C,UAAI,UAAU;AACV,eAAO,OAAO,UAAU;AAAA,UACpB,QAAQ,KAAK;AAAA,UACb,YAAY,KAAK;AAAA,UACjB,iBAAiB,KAAK;AAAA,UACtB,gCAAgB,KAAA;AAAA,QAAK,CACxB;AAAA,MACL,OAAO;AACH,aAAK,eAAe,IAAI,IAAI,EAAC,GAAG,MAAM,IAAG;AAAA,MAC7C;AAAA,IACJ;AAAA,EACJ;AAAA,EAEA,MAAM,kBAA4E;AAC9E,QAAI,gBAAgB;AACpB,QAAI,eAAe;AACnB,UAAM,MAAM,KAAK,IAAA;AAEjB,eAAW,QAAQ,MAAM,KAAK,KAAK,eAAe,OAAA,CAAQ,GAAG;AACzD,UAAI,KAAK,WAAW,gBAAgB,KAAK,yBAA0B,MAAM,KAAK,sBAAsB,QAAA,IAAa,KAAQ;AACrH;AAAA,MACJ;AACA,UAAI,KAAK,cAAc,MAAM,KAAK,WAAW,WAAW;AACpD;AAAA,MACJ;AAAA,IACJ;AAEA,WAAO,EAAC,eAAe,aAAA;AAAA,EAC3B;AAAA,EAEA,MAAM,aAAa,gBAAsB,eAAoC;AACzE,eAAW,CAAC,IAAI,IAAI,KAAK,MAAM,KAAK,KAAK,eAAe,QAAA,CAAS,GAAG;AAChE,YAAM,eACD,KAAK,WAAW,gBAAgB,KAAK,yBAAyB,KAAK,wBAAwB,kBAC3F,KAAK,cAAc,KAAK,aAAa;AAE1C,UAAI,cAAc;AACd,aAAK,eAAe,OAAO,EAAE;AAAA,MACjC;AAAA,IACJ;AAAA,EACJ;AAAA,EAEA,MAAM,aAA4B;AAAA,EAElC;AAAA,EAEA,MAAM,QAAuB;AACzB,SAAK,eAAe,MAAA;AAAA,EACxB;AAAA,EAEA,aAAqB;AACjB,WAAO,GAAG,KAAK,IAAA,CAAK,IAAI,KAAK,OAAA,EAAS,SAAS,EAAE,EAAE,UAAU,GAAG,CAAC,CAAC;AAAA,EACtE;AAAA,EAEA,MAAM,mBAAmB,OAA2B;AAChD,eAAW,QAAQ,OAAO;AACtB,YAAM,eAAe,KAAK,eAAe,IAAI,KAAK,EAAG;AACrD,UAAI,cAAc;AACd,qBAAa,SAAS;AACtB,qBAAa,kBAAkB,EAAC,GAAG,aAAa,iBAAiB,eAAe,eAAA;AAChF,aAAK,eAAe,IAAI,KAAK,IAAK,YAAY;AAAA,MAClD;AAAA,IACJ;AAAA,EACJ;AACJ;ACnLA,MAAM,SAAS,IAAIJ,OAAAA,OAAO,iBAAiBC,OAAAA,SAAS,IAAI;AACxD,MAAM,cAAc,IAAI,KAAK,KAAK,KAAK;AAkDhC,MAAM,cAIyB;AAAA,EAIlC,YACY,QAaV;AAbU,SAAA,SAAA;AAHZ,SAAQ,gBAAkC;AAAA,EAiB1C;AAAA,EAEA,mBAAmB,QAA0C;AACzD,SAAK,oBAAoB,OAAO;AAChC,SAAK,gBAAgB,OAAO,QAAQ;AAAA,EACxC;AAAA,EAEQ,mBACJ,UACA,KACI;AACJ,QAAI,CAAC,SAAU;AACf,QAAI;AACA,YAAM,SAAS,SAAS,GAAG;AAC3B,UAAI,kBAAkB,SAAS;AAC3B,eAAO,MAAM,CAAA,QAAO,OAAO,MAAM,kCAAkC,GAAG,EAAE,CAAC;AAAA,MAC7E;AAAA,IACJ,SAAS,KAAK;AACV,aAAO,MAAM,kCAAkC,GAAG,EAAE;AAAA,IACxD;AAAA,EACJ;AAAA,EAEA,IAAI,eAA6B;AAC7B,WAAO,KAAK,OAAO;AAAA,EACvB;AAAA,EAEA,IAAI,gBAAwB;AACxB,WAAO,OAAO,KAAK,OAAO,YAAY;AAAA,EAC1C;AAAA,EAEA,IAAc,WAA4B;AACtC,WAAO,KAAK,OAAO,aAAa,KAAK,OAAO,YAAY;AAAA,EAC5D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAyBA,MAAM,oBAAoB,OAAkD;AACxE,QAAI,CAAC,MAAM,OAAQ,QAAO,CAAA;AAG1B,QAAI,MAAM,SAAS,IAAI;AACnB,aAAO,KAAK,8BAA8B,MAAM,MAAM,kIAAkI;AAAA,IAC5L;AAIA,UAAM,UAA2B,CAAA;AACjC,eAAW,QAAQ,OAAO;AACtB,UAAI;AACA,cAAM,KAAK,SAAS,OAAO;AAAA,UACvB,MAAM;AAAA,YACF,GAAG;AAAA,YACH,IAAI,KAAK,MAAM,KAAK,WAAA;AAAA,YACpB,QAAQ,KAAK,UAAU;AAAA,YACvB,SAAS,KAAK,WAAW;AAAA,YACzB,YAAY,KAAK,cAAc,oBAAI,KAAA;AAAA,YACnC,gCAAgB,KAAA;AAAA,YAChB,uBAAuB,KAAK,yBAAyB,oBAAI,KAAA;AAAA,UAAK;AAAA,QAClE,CACH;AACD,gBAAQ,KAAK,IAAI;AAAA,MACrB,SAAS,OAAgB;AACrB,eAAO,KAAK,oCAAoC,KAAK,EAAE;AAAA,MAC3D;AAAA,IACJ;AACA,WAAO;AAAA,EACX;AAAA,EAEA,MAAM,eAAe,WAA6C;AAC9D,UAAM,iBAAiB,KAAK,IAAA,IAAQ;AAEpC,UAAM,KAAK,SAAS,WAAW;AAAA,MAC3B,OAAO;AAAA,QACH,QAAQ;AAAA,QACR,uBAAuB,EAAC,IAAI,IAAI,KAAK,cAAc,EAAA;AAAA,MAAC;AAAA,MAExD,MAAM,EAAC,QAAQ,YAAA;AAAA,IAAW,CAC7B;AAED,UAAM,QAAQ,MAAM,KAAK,SAAS,SAAS;AAAA,MACvC,OAAO;AAAA,QACH,QAAQ;AAAA,QACR,YAAY,EAAC,KAAK,IAAI,KAAK,SAAS,EAAA;AAAA,MAAC;AAAA,MAEzC,MAAM;AAAA,MACN,SAAS,EAAC,YAAY,MAAA;AAAA,IAAK,CAC9B;AAED,QAAI,MAAM,SAAS,GAAG;AAClB,YAAM,UAAU,MAAM,IAAI,CAAC,MAAW,EAAE,EAAE;AAC1C,YAAM,KAAK,SAAS,WAAW;AAAA,QAC3B,OAAO,EAAC,IAAI,EAAC,IAAI,UAAO;AAAA,QACxB,MAAM;AAAA,UACF,QAAQ;AAAA,UACR,2CAA2B,KAAA;AAAA,QAAK;AAAA,MACpC,CACH;AAAA,IACL;AAEA,WAAO;AAAA,EACX;AAAA,EAEA,MAAM,sBAAsB,OAAwB,qBAA0C;AAC1F,UAAM,UAAU,MAAM,IAAI,CAAA,MAAK,EAAE,EAAE,EAAE,OAAO,OAAO;AACnD,QAAI,CAAC,QAAQ,OAAQ;AAErB,UAAM,KAAK,SAAS,WAAW;AAAA,MAC3B,OAAO,EAAC,IAAI,EAAC,IAAI,UAAO;AAAA,MACxB,MAAM;AAAA,QACF,QAAQ;AAAA,QACR,uBAAuB;AAAA,QACvB,gCAAgB,KAAA;AAAA,MAAK;AAAA,IACzB,CACH;AAAA,EACL;AAAA,EAEA,MAAM,oBAAoB,OAAuC;AAC7D,UAAM,UAAU,MAAM,IAAI,CAAA,MAAK,EAAE,EAAE,EAAE,OAAO,OAAO;AACnD,QAAI,CAAC,QAAQ,OAAQ;AAErB,UAAM,KAAK,SAAS,WAAW;AAAA,MAC3B,OAAO,EAAC,IAAI,EAAC,IAAI,UAAO;AAAA,MACxB,MAAM,EAAC,QAAQ,YAAY,YAAY,oBAAI,OAAK;AAAA,IAAC,CACpD;AAAA,EACL;AAAA,EAEA,MAAM,kBAAkB,OAAuC;AAC3D,UAAM,UAAU,MAAM,IAAI,CAAA,MAAK,EAAE,EAAE,EAAE,OAAO,OAAO;AACnD,QAAI,CAAC,QAAQ,OAAQ;AAErB,UAAM,KAAK,SAAS,WAAW;AAAA,MAC3B,OAAO,EAAC,IAAI,EAAC,IAAI,UAAO;AAAA,MACxB,MAAM,EAAC,QAAQ,UAAU,YAAY,oBAAI,OAAK;AAAA,IAAC,CAClD;AAAA,EACL;AAAA,EAEA,MAAM,mBAAmB,OAAuC;AAC5D,UAAM,UAAU,MAAM,IAAI,CAAA,MAAK,EAAE,EAAE,EAAE,OAAO,OAAO;AACnD,QAAI,CAAC,QAAQ,OAAQ;AAErB,UAAM,KAAK,SAAS,WAAW;AAAA,MAC3B,OAAO,EAAC,IAAI,EAAC,IAAI,UAAO;AAAA,MACxB,MAAM,EAAC,QAAQ,WAAW,YAAY,oBAAI,OAAK;AAAA,IAAC,CACnD;AAAA,EACL;AAAA,EAEA,MAAM,cAAc,SAA0C;AAC1D,QAAI,CAAC,QAAQ,OAAQ,QAAO,CAAA;AAE5B,WAAO,KAAK,SAAS,SAAS;AAAA,MAC1B,OAAO,EAAC,IAAI,EAAC,IAAI,UAAO;AAAA,IAAC,CAC5B;AAAA,EACL;AAAA,EAEA,MAAM,YAAY,aAAiF;AAE/F,UAAM,KAAK,aACN,aAAa,OAAO,WAAW;AAC5B,iBAAW,EAAC,IAAI,QAAA,KAAY,aAAa;AACrC,cAAO,OAAe,KAAK,aAAa,EACnC,OAAO;AAAA,UACJ,OAAO,EAAC,GAAA;AAAA,UACR,MAAM,EAAC,GAAG,SAAS,YAAY,oBAAI,OAAK;AAAA,QAAC,CAC5C;AAAA,MACT;AAAA,IACJ,CAAC;AAAA,EACT;AAAA,EAEA,MAAM,YAAY,OAAuC;AACrD,QAAI,CAAC,MAAM,OAAQ;AAEnB,UAAM,0BAAU,KAAA;AAChB,UAAM,WAAW,KAAK;AAItB,UAAM,KAAK,aACN;AAAA,MACG,MAAM,IAAI,CAAA,SAAQ,SAAS,OAAO;AAAA,QAC9B,OAAO,EAAC,IAAI,KAAK,GAAA;AAAA,QACjB,QAAQ;AAAA,UACJ,GAAG;AAAA,UACH,YAAY,KAAK,cAAc;AAAA,UAC/B,YAAY;AAAA,UACZ,uBAAuB,KAAK,yBAAyB;AAAA,QAAA;AAAA,QAEzD,QAAQ;AAAA,UACJ,QAAQ,KAAK;AAAA,UACb,YAAY,KAAK;AAAA,UACjB,iBAAiB,KAAK;AAAA,UACtB,YAAY;AAAA,QAAA;AAAA,MAChB,CACH,CAAC;AAAA,IAAA;AAAA,EAEd;AAAA,EAEA,MAAM,kBAA4E;AAC9E,UAAM,iBAAiB,IAAI,KAAK,KAAK,IAAA,IAAQ,WAAW;AAExD,UAAM,CAAC,eAAe,YAAY,IAAI,MAAM,QAAQ,IAAI;AAAA,MACpD,KAAK,SAAS,MAAM;AAAA,QAChB,OAAO;AAAA,UACH,QAAQ;AAAA,UACR,uBAAuB,EAAC,IAAI,eAAA;AAAA,QAAc;AAAA,MAC9C,CACH;AAAA,MACD,KAAK,SAAS,MAAM;AAAA,QAChB,OAAO,EAAC,YAAY,EAAC,IAAI,oBAAI,KAAA,IAAM;AAAA,MAAC,CACvC;AAAA,IAAA,CACJ;AAED,WAAO,EAAC,eAAe,aAAA;AAAA,EAC3B;AAAA,EAEA,MAAM,aAAa,gBAAsB,eAAoC;AACzE,UAAM,QAAQ,IAAI;AAAA,MACd,KAAK,SAAS,WAAW;AAAA,QACrB,OAAO;AAAA,UACH,QAAQ;AAAA,UACR,uBAAuB,EAAC,IAAI,eAAA;AAAA,QAAc;AAAA,MAC9C,CACH;AAAA,MACD,KAAK,SAAS,WAAW;AAAA,QACrB,OAAO,EAAC,YAAY,EAAC,IAAI,gBAAa;AAAA,MAAC,CAC1C;AAAA,IAAA,CACJ;AAAA,EACL;AAAA,EAEA,aAAkB;AAEd,WAAO,OAAO,WAAA;AAAA,EAClB;AAAA,EAEA,MAAM,aAA4B;AAAA,EAClC;AAAA,EAEA,MAAM,QAAuB;AAAA,EAC7B;AACJ;;;;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"PrismaAdapter-Dy7MV090.js","sources":["../src/adapters/MongoDbAdapter.ts","../src/adapters/InMemoryAdapter.ts","../src/adapters/PrismaAdapter.ts"],"sourcesContent":["import {Collection, ObjectId} from \"mongodb\";\nimport {ITaskStorageAdapter, TaskStorageLifecycleConfig} from \"./ITaskStorageAdapter.js\";\nimport {CronTask} from \"./types.js\";\nimport {Logger, LogLevel} from \"@supergrowthai/utils\";\nimport type {ITaskLifecycleProvider} from \"../core/lifecycle.js\";\n\nconst logger = new Logger('MongoDbAdapter', LogLevel.INFO);\n\nconst TWO_DAYS_MS = 2 * 24 * 60 * 60 * 1000;\n\n/**\n * Convert MongoDB document with _id to CronTask with id\n */\nfunction toPublicTask<T>({_id, ...rest}: Omit<CronTask<T>, 'id'> & { _id: T }): CronTask<T> {\n return {...rest, id: _id} as CronTask<T>;\n}\n\n/**\n * MongoDB task storage adapter for @supergrowthai/tq.\n *\n * @description Persists scheduled tasks to MongoDB collection with status tracking.\n * Uses application-level locking designed for single-instance deployments.\n *\n * @use-case Single-instance production deployments\n * @multi-instance NOT SAFE - designed for single-instance use.\n * For multi-instance deployments, implement a distributed locking strategy\n * or use a Kinesis-based solution with Redis lock provider.\n * @persistence Full - tasks stored in MongoDB until processed/expired\n * @requires MongoDB connection via abstract `collection` getter\n *\n * @features\n * - Stale task recovery: tasks stuck in 'processing' for >2 days are reset\n * - Bulk operations for efficiency\n * - Task expiration cleanup\n *\n * @example\n * ```typescript\n * class MyTaskStorage extends MongoDbAdapter {\n * get collection() { return db.collection('scheduled_tasks'); }\n * }\n * const adapter = new MyTaskStorage();\n * ```\n */\nexport abstract class MongoDbAdapter implements ITaskStorageAdapter<ObjectId> {\n private lifecycleProvider?: ITaskLifecycleProvider;\n private lifecycleMode: 'sync' | 'async' = 'async';\n\n protected constructor() {\n }\n\n setLifecycleConfig(config: TaskStorageLifecycleConfig): void {\n this.lifecycleProvider = config.lifecycleProvider;\n this.lifecycleMode = config.mode || 'async';\n }\n\n private emitLifecycleEvent<T>(\n callback: ((ctx: T) => void | Promise<void>) | undefined,\n ctx: T\n ): void {\n if (!callback) return;\n try {\n const result = callback(ctx);\n if (result instanceof Promise) {\n result.catch(err => logger.error(`[TQ] Lifecycle callback error: ${err}`));\n }\n } catch (err) {\n logger.error(`[TQ] Lifecycle callback error: ${err}`);\n }\n }\n\n abstract get collection(): Promise<Collection<Omit<CronTask<ObjectId>, 'id'> & { _id?: ObjectId; }>> ;\n\n async addTasksToScheduled(tasks: CronTask<ObjectId>[]): Promise<CronTask<ObjectId>[]> {\n if (!tasks.length) return [];\n\n const collection = await this.collection;\n\n const transformedTasks = tasks.map((task) => ({\n _id: task.id,\n type: task.type,\n payload: task.payload,\n execute_at: task.execute_at,\n status: task.status || 'scheduled',\n retries: task.retries || 0,\n created_at: task.created_at || new Date(),\n updated_at: new Date(),\n queue_id: task.queue_id,\n processing_started_at: task.processing_started_at || new Date(),\n expires_at: task.expires_at,\n task_group: task.task_group,\n task_hash: task.task_hash,\n retry_after: task.retry_after,\n execution_stats: task.execution_stats,\n force_store: task.force_store\n }));\n\n try {\n await collection.insertMany(transformedTasks, {ordered: false});\n return transformedTasks.map(toPublicTask);\n } catch (error: unknown) {\n if (error && typeof error === 'object' && 'writeErrors' in error) {\n const mongoError = error as { writeErrors: Array<{ index: number }> };\n const successfulTasks = transformedTasks.filter((_, index) =>\n !mongoError.writeErrors.some((e) => e.index === index)\n );\n return successfulTasks.map(toPublicTask);\n }\n throw error;\n }\n }\n\n async getMatureTasks(timestamp: number): Promise<CronTask<ObjectId>[]> {\n const collection = await this.collection;\n\n // Phase 1: Reset stale processing tasks\n const staleTimestamp = Date.now() - TWO_DAYS_MS;\n await collection.updateMany(\n {\n status: 'processing',\n processing_started_at: {$lt: new Date(staleTimestamp)}\n },\n {\n $set: {status: 'scheduled'}\n }\n );\n\n // Phase 2: Fetch and mark mature tasks\n const filter = {\n status: 'scheduled' as const,\n execute_at: {$lte: new Date(timestamp)}\n };\n\n const tasks = await collection\n .find(filter)\n .limit(1000)\n .toArray();\n\n if (tasks.length > 0) {\n const taskIds = tasks.map(t => t._id);\n await collection.updateMany(\n {_id: {$in: taskIds}},\n {\n $set: {\n status: 'processing',\n processing_started_at: new Date()\n }\n }\n );\n }\n\n return tasks.map(toPublicTask);\n }\n\n async markTasksAsProcessing(tasks: CronTask<ObjectId>[], processingStartedAt: Date): Promise<void> {\n const collection = await this.collection;\n const taskIds = tasks.map(t => t.id).filter(Boolean) as ObjectId[];\n\n await collection.updateMany(\n {_id: {$in: taskIds}},\n {\n $set: {\n status: 'processing',\n processing_started_at: processingStartedAt,\n updated_at: new Date()\n }\n }\n );\n }\n\n async markTasksAsExecuted(tasks: CronTask<ObjectId>[]): Promise<void> {\n const collection = await this.collection;\n const taskIds = tasks.map(t => t.id).filter(Boolean) as ObjectId[];\n\n\n await collection.updateMany(\n {_id: {$in: taskIds}},\n {\n $set: {\n status: 'executed',\n updated_at: new Date()\n }\n }\n );\n }\n\n async markTasksAsFailed(tasks: CronTask<ObjectId>[]): Promise<void> {\n const collection = await this.collection;\n const taskIds = tasks.map(t => t.id).filter(Boolean) as ObjectId[];\n\n\n await collection.updateMany(\n {_id: {$in: taskIds}},\n {\n $set: {\n status: 'failed',\n updated_at: new Date()\n }\n }\n );\n }\n\n async getTasksByIds(taskIds: ObjectId[]): Promise<CronTask<ObjectId>[]> {\n const collection = await this.collection;\n\n return collection\n .find({_id: {$in: taskIds}})\n .toArray()\n .then(result => result.map(toPublicTask));\n }\n\n async getCleanupStats(): Promise<{ orphanedTasks: number; expiredTasks: number }> {\n const collection = await this.collection;\n\n const orphanedBefore = new Date(Date.now() - TWO_DAYS_MS);\n const orphanedTasks = await collection.countDocuments({\n status: 'processing',\n processing_started_at: {$lt: orphanedBefore}\n });\n\n const expiredTasks = await collection.countDocuments({\n expires_at: {$lt: new Date()}\n });\n\n return {orphanedTasks, expiredTasks};\n }\n\n async cleanupTasks(orphanedBefore: Date, expiredBefore: Date): Promise<void> {\n const collection = await this.collection;\n\n // Clean up orphaned tasks\n await collection.deleteMany({\n status: 'processing',\n processing_started_at: {$lt: orphanedBefore}\n });\n\n // Clean up expired tasks\n await collection.deleteMany({\n expires_at: {$lt: expiredBefore}\n });\n }\n\n async updateTasks(updates: Array<{ id: ObjectId; updates: Partial<CronTask<ObjectId>> }>): Promise<void> {\n const collection = await this.collection;\n\n const bulkOps = updates.map(({id, updates}) => ({\n updateOne: {\n filter: {_id: id},\n update: {\n $set: {\n ...updates,\n updated_at: new Date()\n }\n }\n }\n }));\n\n if (bulkOps.length > 0) {\n // ordered: false allows remaining ops to continue if one fails (e.g., duplicate key)\n await collection.bulkWrite(bulkOps, {ordered: false});\n }\n }\n\n async upsertTasks(tasks: CronTask<ObjectId>[]): Promise<void> {\n if (!tasks.length) return;\n const collection = await this.collection;\n const now = new Date();\n\n const bulkOps = tasks.map(task => {\n const id = task.id || this.generateId();\n const {id: _id, status, execute_at, execution_stats, updated_at, ...rest} = task;\n return {\n updateOne: {\n filter: {_id: id},\n update: {\n $set: {\n status: task.status,\n execute_at: task.execute_at,\n execution_stats: task.execution_stats,\n updated_at: now\n },\n $setOnInsert: {\n ...rest,\n created_at: task.created_at || now,\n processing_started_at: task.processing_started_at || now\n }\n },\n upsert: true\n }\n };\n });\n\n // ordered: false allows remaining ops to continue if one fails\n await collection.bulkWrite(bulkOps, {ordered: false});\n }\n\n generateId() {\n return new ObjectId();\n }\n\n async close() {\n }\n\n async initialize() {\n }\n\n async markTasksAsIgnored(tasks: CronTask<ObjectId>[]): Promise<void> {\n const collection = await this.collection;\n const taskIds = tasks.map(t => t.id).filter(Boolean) as ObjectId[];\n\n\n await collection.updateMany(\n {_id: {$in: taskIds}},\n {\n $set: {\n status: 'ignored',\n //update execution_stats\n updated_at: new Date()\n },\n }\n );\n }\n}","import {ITaskStorageAdapter, TaskStorageLifecycleConfig} from \"./ITaskStorageAdapter\";\nimport {CronTask} from \"./types\";\nimport type {ITaskLifecycleProvider} from \"../core/lifecycle.js\";\n\n/**\n * In-memory task storage adapter for @supergrowthai/tq.\n *\n * @description Stores scheduled tasks in memory using a Map.\n * Data is lost on process restart - use for development and testing only.\n *\n * @use-case Development, testing, and prototyping\n * @multi-instance NOT SAFE - data is not shared between processes\n * @persistence NONE - all tasks lost on restart\n *\n * @features\n * - Fast in-memory operations\n * - Simple cleanup implementation\n * - Auto-generated string IDs\n *\n * @example\n * ```typescript\n * const adapter = new InMemoryAdapter();\n * const taskHandler = new TaskHandler(queue, taskQueue, adapter, cache);\n * ```\n */\nclass InMemoryAdapter implements ITaskStorageAdapter<string> {\n private scheduledTasks: Map<string, CronTask<string>> = new Map();\n private lifecycleProvider?: ITaskLifecycleProvider;\n private lifecycleMode: 'sync' | 'async' = 'async';\n\n setLifecycleConfig(config: TaskStorageLifecycleConfig): void {\n this.lifecycleProvider = config.lifecycleProvider;\n this.lifecycleMode = config.mode || 'async';\n }\n\n private emitLifecycleEvent<T>(\n callback: ((ctx: T) => void | Promise<void>) | undefined,\n ctx: T\n ): void {\n if (!callback) return;\n try {\n const result = callback(ctx);\n if (result instanceof Promise) {\n result.catch(err => console.error(`[TQ] Lifecycle callback error: ${err}`));\n }\n } catch (err) {\n console.error(`[TQ] Lifecycle callback error: ${err}`);\n }\n }\n\n async addTasksToScheduled(tasks: CronTask<string>[]): Promise<CronTask<string>[]> {\n const addedTasks = tasks.map(task => {\n const id = task.id || this.generateId();\n const taskWithId = {...task, id};\n this.scheduledTasks.set(id, taskWithId);\n return taskWithId;\n });\n return addedTasks;\n }\n\n async getMatureTasks(timestamp: number): Promise<CronTask<string>[]> {\n const matureTasks: CronTask<string>[] = [];\n for (const [id, task] of Array.from(this.scheduledTasks.entries())) {\n if (task.execute_at.getTime() <= timestamp && task.status !== 'processing' && task.status !== 'executed') {\n matureTasks.push(task);\n }\n }\n return matureTasks;\n }\n\n async markTasksAsProcessing(tasks: CronTask<string>[], processingStartedAt: Date): Promise<void> {\n for (const task of tasks) {\n const existingTask = this.scheduledTasks.get(task.id!);\n if (existingTask) {\n existingTask.status = 'processing';\n existingTask.processing_started_at = processingStartedAt;\n this.scheduledTasks.set(task.id!, existingTask);\n }\n }\n }\n\n async markTasksAsExecuted(tasks: CronTask<string>[]): Promise<void> {\n for (const task of tasks) {\n const existingTask = this.scheduledTasks.get(task.id!);\n if (existingTask) {\n existingTask.status = 'executed';\n existingTask.execute_at = new Date();\n this.scheduledTasks.set(task.id!, existingTask);\n }\n }\n }\n\n async markTasksAsFailed(tasks: CronTask<string>[]): Promise<void> {\n for (const task of tasks) {\n const existingTask = this.scheduledTasks.get(task.id!);\n if (existingTask) {\n existingTask.status = 'failed';\n existingTask.execution_stats = {...existingTask.execution_stats, failed_at: new Date()};\n this.scheduledTasks.set(task.id!, existingTask);\n }\n }\n }\n\n async getTasksByIds(taskIds: string[]): Promise<CronTask<string>[]> {\n return taskIds.map(id => this.scheduledTasks.get(id)).filter(Boolean) as CronTask<string>[];\n }\n\n async updateTasks(updates: Array<{ id: string; updates: Partial<CronTask<string>> }>): Promise<void> {\n for (const {id, updates: taskUpdates} of updates) {\n const task = this.scheduledTasks.get(id);\n if (task) {\n Object.assign(task, taskUpdates);\n this.scheduledTasks.set(id, task);\n }\n }\n }\n\n async upsertTasks(tasks: CronTask<string>[]): Promise<void> {\n for (const task of tasks) {\n const id = task.id || this.generateId();\n const existing = this.scheduledTasks.get(id);\n if (existing) {\n Object.assign(existing, {\n status: task.status,\n execute_at: task.execute_at,\n execution_stats: task.execution_stats,\n updated_at: new Date()\n });\n } else {\n this.scheduledTasks.set(id, {...task, id});\n }\n }\n }\n\n async getCleanupStats(): Promise<{ orphanedTasks: number; expiredTasks: number }> {\n let orphanedTasks = 0;\n let expiredTasks = 0;\n const now = Date.now();\n\n for (const task of Array.from(this.scheduledTasks.values())) {\n if (task.status === 'processing' && task.processing_started_at && (now - task.processing_started_at.getTime()) > 300000) {\n orphanedTasks++;\n }\n if (task.expires_at && now > task.expires_at.getTime()) {\n expiredTasks++;\n }\n }\n\n return {orphanedTasks, expiredTasks};\n }\n\n async cleanupTasks(orphanedBefore: Date, expiredBefore: Date): Promise<void> {\n for (const [id, task] of Array.from(this.scheduledTasks.entries())) {\n const shouldDelete =\n (task.status === 'processing' && task.processing_started_at && task.processing_started_at < orphanedBefore) ||\n (task.expires_at && task.expires_at < expiredBefore);\n\n if (shouldDelete) {\n this.scheduledTasks.delete(id);\n }\n }\n }\n\n async initialize(): Promise<void> {\n // No initialization needed for memory adapter\n }\n\n async close(): Promise<void> {\n this.scheduledTasks.clear();\n }\n\n generateId(): string {\n return `${Date.now()}-${Math.random().toString(36).substring(2, 9)}`;\n }\n\n async markTasksAsIgnored(tasks: CronTask<string>[]) {\n for (const task of tasks) {\n const existingTask = this.scheduledTasks.get(task.id!);\n if (existingTask) {\n existingTask.status = 'ignored';\n existingTask.execution_stats = {...existingTask.execution_stats, ignore_reason: \"unknown type\"};\n this.scheduledTasks.set(task.id!, existingTask);\n }\n }\n }\n}\n\nexport {InMemoryAdapter}","import {ITaskStorageAdapter, TaskStorageLifecycleConfig} from \"./ITaskStorageAdapter.js\";\nimport {CronTask} from \"./types.js\";\nimport {Logger, LogLevel} from \"@supergrowthai/utils\";\nimport {PrismaClient} from \"@prisma/client/extension\";\nimport type {ITaskLifecycleProvider} from \"../core/lifecycle.js\";\n\nconst logger = new Logger('PrismaAdapter', LogLevel.INFO);\nconst TWO_DAYS_MS = 2 * 24 * 60 * 60 * 1000;\n\n\n// ---- Type utilities ----\n\n/** A Prisma client that is guaranteed to have model delegate K. */\nexport type ClientWithModel<K extends keyof PrismaClient> =\n Pick<PrismaClient, K>;\n\n/** Extract the entity (row) type from a model delegate. */\ntype EntityOf<D> =\n D extends { findUnique(args: any): Promise<infer U | null> } ? U :\n D extends { findFirst(args: any): Promise<infer U | null> } ? U :\n D extends { findMany(args?: any): Promise<(infer U)[]> } ? U :\n never;\n\n/** Compile-time guard: model's entity must be compatible with the shape you require. */\ntype EnsureModelShape<Delegate, Needed> =\n EntityOf<Delegate> extends Needed ? unknown : never;\n\n/**\n * Prisma task storage adapter for @supergrowthai/tq.\n *\n * @description Persists scheduled tasks to any Prisma model with status tracking.\n * Uses application-level locking designed for single-instance deployments.\n *\n * @use-case Single-instance production deployments with Prisma ORM\n * @multi-instance NOT SAFE - designed for single-instance use.\n * For multi-instance deployments, implement a distributed locking strategy\n * or use a Kinesis-based solution with Redis lock provider.\n * @persistence Full - tasks stored in database until processed/expired\n * @requires Prisma client with a model matching CronTask structure\n *\n * @features\n * - Stale task recovery: tasks stuck in 'processing' for >2 days are reset\n * - Transaction support for batch updates\n * - Task expiration cleanup\n *\n * @typeParam TId - The ID type (string, number, etc.)\n * @typeParam K - The Prisma model key (e.g. 'scheduledTask')\n * @typeParam Msg - The task type extending CronTask<TId>\n *\n * @example\n * ```typescript\n * const adapter = new PrismaAdapter({\n * prismaClient: prisma,\n * messageModel: 'scheduledTask'\n * });\n * ```\n */\nexport class PrismaAdapter<\n TId = any,\n K extends keyof PrismaClient = never,\n Msg extends CronTask<TId> = CronTask<TId>\n> implements ITaskStorageAdapter<TId> {\n private lifecycleProvider?: ITaskLifecycleProvider;\n private lifecycleMode: 'sync' | 'async' = 'async';\n\n constructor(\n private config: {\n prismaClient: ClientWithModel<K>;\n messageModel: K;\n /**\n * Phantom type param that enforces:\n * - client has model K\n * - entity type of client[K] extends Msg (which extends BaseMessage<TId>)\n * Do not pass at runtime.\n */\n _shapeCheck?: EnsureModelShape<PrismaClient[K], Msg> & (Msg extends CronTask<TId> & {\n id: TId\n } ? unknown : never);\n }\n ) {\n }\n\n setLifecycleConfig(config: TaskStorageLifecycleConfig): void {\n this.lifecycleProvider = config.lifecycleProvider;\n this.lifecycleMode = config.mode || 'async';\n }\n\n private emitLifecycleEvent<T>(\n callback: ((ctx: T) => void | Promise<void>) | undefined,\n ctx: T\n ): void {\n if (!callback) return;\n try {\n const result = callback(ctx);\n if (result instanceof Promise) {\n result.catch(err => logger.error(`[TQ] Lifecycle callback error: ${err}`));\n }\n } catch (err) {\n logger.error(`[TQ] Lifecycle callback error: ${err}`);\n }\n }\n\n get prismaClient(): PrismaClient {\n return this.config.prismaClient;\n }\n\n get taskTableName(): string {\n return String(this.config.messageModel);\n }\n\n protected get delegate(): PrismaClient[K] {\n return this.config.prismaClient[this.config.messageModel];\n }\n\n /**\n * Persist tasks to the database as scheduled.\n *\n * **Default implementation:** Uses individual creates with duplicate detection\n * for maximum database compatibility (SQLite, Postgres, MySQL, etc.).\n *\n * **Performance note:** This is O(n) database round-trips. For high-throughput\n * scenarios (100+ tasks/batch), override this method with a batch implementation:\n *\n * @example PostgreSQL/MySQL optimization:\n * ```typescript\n * class OptimizedPrismaAdapter extends PrismaAdapter {\n * async addTasksToScheduled(tasks) {\n * if (!tasks.length) return [];\n * await this.delegate.createMany({\n * data: tasks.map(t => ({ ...t, id: t.id || this.generateId() })),\n * skipDuplicates: true\n * });\n * return tasks;\n * }\n * }\n * ```\n */\n async addTasksToScheduled(tasks: CronTask<TId>[]): Promise<CronTask<TId>[]> {\n if (!tasks.length) return [];\n\n // Performance hint for high-throughput scenarios\n if (tasks.length > 50) {\n logger.warn(`[PrismaAdapter] Processing ${tasks.length} tasks sequentially (O(n) round-trips). For Postgres/MySQL, override addTasksToScheduled with createMany for better performance.`);\n }\n\n // Sequential creates for broad DB compatibility (SQLite, CockroachDB, etc.)\n // Override this method for batch optimization on Postgres/MySQL\n const results: CronTask<TId>[] = [];\n for (const task of tasks) {\n try {\n await this.delegate.create({\n data: {\n ...task,\n id: task.id || this.generateId(),\n status: task.status || 'scheduled',\n retries: task.retries || 0,\n created_at: task.created_at || new Date(),\n updated_at: new Date(),\n processing_started_at: task.processing_started_at || new Date()\n }\n });\n results.push(task);\n } catch (error: unknown) {\n logger.warn(`Task skipped (likely duplicate): ${error}`);\n }\n }\n return results;\n }\n\n async getMatureTasks(timestamp: number): Promise<CronTask<TId>[]> {\n const staleTimestamp = Date.now() - TWO_DAYS_MS;\n\n await this.delegate.updateMany({\n where: {\n status: 'processing',\n processing_started_at: {lt: new Date(staleTimestamp)}\n },\n data: {status: 'scheduled'}\n });\n\n const tasks = await this.delegate.findMany({\n where: {\n status: 'scheduled',\n execute_at: {lte: new Date(timestamp)}\n },\n take: 1000,\n orderBy: {execute_at: 'asc'}\n });\n\n if (tasks.length > 0) {\n const taskIds = tasks.map((t: any) => t.id);\n await this.delegate.updateMany({\n where: {id: {in: taskIds}},\n data: {\n status: 'processing',\n processing_started_at: new Date()\n }\n });\n }\n\n return tasks;\n }\n\n async markTasksAsProcessing(tasks: CronTask<TId>[], processingStartedAt: Date): Promise<void> {\n const taskIds = tasks.map(t => t.id).filter(Boolean);\n if (!taskIds.length) return;\n\n await this.delegate.updateMany({\n where: {id: {in: taskIds}},\n data: {\n status: 'processing',\n processing_started_at: processingStartedAt,\n updated_at: new Date()\n }\n });\n }\n\n async markTasksAsExecuted(tasks: CronTask<TId>[]): Promise<void> {\n const taskIds = tasks.map(t => t.id).filter(Boolean);\n if (!taskIds.length) return;\n\n await this.delegate.updateMany({\n where: {id: {in: taskIds}},\n data: {status: 'executed', updated_at: new Date()}\n });\n }\n\n async markTasksAsFailed(tasks: CronTask<TId>[]): Promise<void> {\n const taskIds = tasks.map(t => t.id).filter(Boolean);\n if (!taskIds.length) return;\n\n await this.delegate.updateMany({\n where: {id: {in: taskIds}},\n data: {status: 'failed', updated_at: new Date()}\n });\n }\n\n async markTasksAsIgnored(tasks: CronTask<TId>[]): Promise<void> {\n const taskIds = tasks.map(t => t.id).filter(Boolean);\n if (!taskIds.length) return;\n\n await this.delegate.updateMany({\n where: {id: {in: taskIds}},\n data: {status: 'ignored', updated_at: new Date()}\n });\n }\n\n async getTasksByIds(taskIds: TId[]): Promise<CronTask<TId>[]> {\n if (!taskIds.length) return [];\n\n return this.delegate.findMany({\n where: {id: {in: taskIds}}\n });\n }\n\n async updateTasks(updatesList: Array<{ id: TId; updates: Partial<CronTask<TId>> }>): Promise<void> {\n //fixme do we need a transaction. good but defo ?\n await this.prismaClient\n .$transaction(async (prisma) => {\n for (const {id, updates} of updatesList) {\n await (prisma as any)[this.taskTableName]\n .update({\n where: {id: id},\n data: {...updates, updated_at: new Date()}\n });\n }\n });\n }\n\n async upsertTasks(tasks: CronTask<TId>[]): Promise<void> {\n if (!tasks.length) return;\n\n const now = new Date();\n const delegate = this.delegate;\n\n // Each task may have different status/execute_at/execution_stats,\n // so per-task upsert is unavoidable. Wrapped in a transaction for atomicity.\n await this.prismaClient\n .$transaction(\n tasks.map(task => delegate.upsert({\n where: {id: task.id},\n create: {\n ...task,\n created_at: task.created_at || now,\n updated_at: now,\n processing_started_at: task.processing_started_at || now\n },\n update: {\n status: task.status,\n execute_at: task.execute_at,\n execution_stats: task.execution_stats,\n updated_at: now\n }\n }))\n );\n }\n\n async getCleanupStats(): Promise<{ orphanedTasks: number; expiredTasks: number }> {\n const orphanedBefore = new Date(Date.now() - TWO_DAYS_MS);\n\n const [orphanedTasks, expiredTasks] = await Promise.all([\n this.delegate.count({\n where: {\n status: 'processing',\n processing_started_at: {lt: orphanedBefore}\n }\n }),\n this.delegate.count({\n where: {expires_at: {lt: new Date()}}\n })\n ]);\n\n return {orphanedTasks, expiredTasks};\n }\n\n async cleanupTasks(orphanedBefore: Date, expiredBefore: Date): Promise<void> {\n await Promise.all([\n this.delegate.deleteMany({\n where: {\n status: 'processing',\n processing_started_at: {lt: orphanedBefore}\n }\n }),\n this.delegate.deleteMany({\n where: {expires_at: {lt: expiredBefore}}\n })\n ]);\n }\n\n generateId(): TId {\n //needs to be overriden when prisma client is of mongodb\n return crypto.randomUUID() as TId;\n }\n\n async initialize(): Promise<void> {\n }\n\n async close(): Promise<void> {\n }\n}"],"names":["logger","TWO_DAYS_MS","updates"],"mappings":";;AAMA,MAAMA,WAAS,IAAI,OAAO,kBAAkB,SAAS,IAAI;AAEzD,MAAMC,gBAAc,IAAI,KAAK,KAAK,KAAK;AAKvC,SAAS,aAAgB,EAAC,KAAK,GAAG,QAA0D;AACxF,SAAO,EAAC,GAAG,MAAM,IAAI,IAAA;AACzB;AA4BO,MAAe,eAAwD;AAAA,EAIhE,cAAc;AAFxB,SAAQ,gBAAkC;AAAA,EAG1C;AAAA,EAEA,mBAAmB,QAA0C;AACzD,SAAK,oBAAoB,OAAO;AAChC,SAAK,gBAAgB,OAAO,QAAQ;AAAA,EACxC;AAAA,EAEQ,mBACJ,UACA,KACI;AACJ,QAAI,CAAC,SAAU;AACf,QAAI;AACA,YAAM,SAAS,SAAS,GAAG;AAC3B,UAAI,kBAAkB,SAAS;AAC3B,eAAO,MAAM,CAAA,QAAOD,SAAO,MAAM,kCAAkC,GAAG,EAAE,CAAC;AAAA,MAC7E;AAAA,IACJ,SAAS,KAAK;AACVA,eAAO,MAAM,kCAAkC,GAAG,EAAE;AAAA,IACxD;AAAA,EACJ;AAAA,EAIA,MAAM,oBAAoB,OAA4D;AAClF,QAAI,CAAC,MAAM,OAAQ,QAAO,CAAA;AAE1B,UAAM,aAAa,MAAM,KAAK;AAE9B,UAAM,mBAAmB,MAAM,IAAI,CAAC,UAAU;AAAA,MAC1C,KAAK,KAAK;AAAA,MACV,MAAM,KAAK;AAAA,MACX,SAAS,KAAK;AAAA,MACd,YAAY,KAAK;AAAA,MACjB,QAAQ,KAAK,UAAU;AAAA,MACvB,SAAS,KAAK,WAAW;AAAA,MACzB,YAAY,KAAK,cAAc,oBAAI,KAAA;AAAA,MACnC,gCAAgB,KAAA;AAAA,MAChB,UAAU,KAAK;AAAA,MACf,uBAAuB,KAAK,yBAAyB,oBAAI,KAAA;AAAA,MACzD,YAAY,KAAK;AAAA,MACjB,YAAY,KAAK;AAAA,MACjB,WAAW,KAAK;AAAA,MAChB,aAAa,KAAK;AAAA,MAClB,iBAAiB,KAAK;AAAA,MACtB,aAAa,KAAK;AAAA,IAAA,EACpB;AAEF,QAAI;AACA,YAAM,WAAW,WAAW,kBAAkB,EAAC,SAAS,OAAM;AAC9D,aAAO,iBAAiB,IAAI,YAAY;AAAA,IAC5C,SAAS,OAAgB;AACrB,UAAI,SAAS,OAAO,UAAU,YAAY,iBAAiB,OAAO;AAC9D,cAAM,aAAa;AACnB,cAAM,kBAAkB,iBAAiB;AAAA,UAAO,CAAC,GAAG,UAChD,CAAC,WAAW,YAAY,KAAK,CAAC,MAAM,EAAE,UAAU,KAAK;AAAA,QAAA;AAEzD,eAAO,gBAAgB,IAAI,YAAY;AAAA,MAC3C;AACA,YAAM;AAAA,IACV;AAAA,EACJ;AAAA,EAEA,MAAM,eAAe,WAAkD;AACnE,UAAM,aAAa,MAAM,KAAK;AAG9B,UAAM,iBAAiB,KAAK,IAAA,IAAQC;AACpC,UAAM,WAAW;AAAA,MACb;AAAA,QACI,QAAQ;AAAA,QACR,uBAAuB,EAAC,KAAK,IAAI,KAAK,cAAc,EAAA;AAAA,MAAC;AAAA,MAEzD;AAAA,QACI,MAAM,EAAC,QAAQ,YAAA;AAAA,MAAW;AAAA,IAC9B;AAIJ,UAAM,SAAS;AAAA,MACX,QAAQ;AAAA,MACR,YAAY,EAAC,MAAM,IAAI,KAAK,SAAS,EAAA;AAAA,IAAC;AAG1C,UAAM,QAAQ,MAAM,WACf,KAAK,MAAM,EACX,MAAM,GAAI,EACV,QAAA;AAEL,QAAI,MAAM,SAAS,GAAG;AAClB,YAAM,UAAU,MAAM,IAAI,CAAA,MAAK,EAAE,GAAG;AACpC,YAAM,WAAW;AAAA,QACb,EAAC,KAAK,EAAC,KAAK,UAAO;AAAA,QACnB;AAAA,UACI,MAAM;AAAA,YACF,QAAQ;AAAA,YACR,2CAA2B,KAAA;AAAA,UAAK;AAAA,QACpC;AAAA,MACJ;AAAA,IAER;AAEA,WAAO,MAAM,IAAI,YAAY;AAAA,EACjC;AAAA,EAEA,MAAM,sBAAsB,OAA6B,qBAA0C;AAC/F,UAAM,aAAa,MAAM,KAAK;AAC9B,UAAM,UAAU,MAAM,IAAI,CAAA,MAAK,EAAE,EAAE,EAAE,OAAO,OAAO;AAEnD,UAAM,WAAW;AAAA,MACb,EAAC,KAAK,EAAC,KAAK,UAAO;AAAA,MACnB;AAAA,QACI,MAAM;AAAA,UACF,QAAQ;AAAA,UACR,uBAAuB;AAAA,UACvB,gCAAgB,KAAA;AAAA,QAAK;AAAA,MACzB;AAAA,IACJ;AAAA,EAER;AAAA,EAEA,MAAM,oBAAoB,OAA4C;AAClE,UAAM,aAAa,MAAM,KAAK;AAC9B,UAAM,UAAU,MAAM,IAAI,CAAA,MAAK,EAAE,EAAE,EAAE,OAAO,OAAO;AAGnD,UAAM,WAAW;AAAA,MACb,EAAC,KAAK,EAAC,KAAK,UAAO;AAAA,MACnB;AAAA,QACI,MAAM;AAAA,UACF,QAAQ;AAAA,UACR,gCAAgB,KAAA;AAAA,QAAK;AAAA,MACzB;AAAA,IACJ;AAAA,EAER;AAAA,EAEA,MAAM,kBAAkB,OAA4C;AAChE,UAAM,aAAa,MAAM,KAAK;AAC9B,UAAM,UAAU,MAAM,IAAI,CAAA,MAAK,EAAE,EAAE,EAAE,OAAO,OAAO;AAGnD,UAAM,WAAW;AAAA,MACb,EAAC,KAAK,EAAC,KAAK,UAAO;AAAA,MACnB;AAAA,QACI,MAAM;AAAA,UACF,QAAQ;AAAA,UACR,gCAAgB,KAAA;AAAA,QAAK;AAAA,MACzB;AAAA,IACJ;AAAA,EAER;AAAA,EAEA,MAAM,cAAc,SAAoD;AACpE,UAAM,aAAa,MAAM,KAAK;AAE9B,WAAO,WACF,KAAK,EAAC,KAAK,EAAC,KAAK,UAAO,CAAE,EAC1B,UACA,KAAK,YAAU,OAAO,IAAI,YAAY,CAAC;AAAA,EAChD;AAAA,EAEA,MAAM,kBAA4E;AAC9E,UAAM,aAAa,MAAM,KAAK;AAE9B,UAAM,iBAAiB,IAAI,KAAK,KAAK,IAAA,IAAQA,aAAW;AACxD,UAAM,gBAAgB,MAAM,WAAW,eAAe;AAAA,MAClD,QAAQ;AAAA,MACR,uBAAuB,EAAC,KAAK,eAAA;AAAA,IAAc,CAC9C;AAED,UAAM,eAAe,MAAM,WAAW,eAAe;AAAA,MACjD,YAAY,EAAC,KAAK,oBAAI,OAAK;AAAA,IAAC,CAC/B;AAED,WAAO,EAAC,eAAe,aAAA;AAAA,EAC3B;AAAA,EAEA,MAAM,aAAa,gBAAsB,eAAoC;AACzE,UAAM,aAAa,MAAM,KAAK;AAG9B,UAAM,WAAW,WAAW;AAAA,MACxB,QAAQ;AAAA,MACR,uBAAuB,EAAC,KAAK,eAAA;AAAA,IAAc,CAC9C;AAGD,UAAM,WAAW,WAAW;AAAA,MACxB,YAAY,EAAC,KAAK,cAAA;AAAA,IAAa,CAClC;AAAA,EACL;AAAA,EAEA,MAAM,YAAY,SAAuF;AACrG,UAAM,aAAa,MAAM,KAAK;AAE9B,UAAM,UAAU,QAAQ,IAAI,CAAC,EAAC,IAAI,SAAAC,gBAAc;AAAA,MAC5C,WAAW;AAAA,QACP,QAAQ,EAAC,KAAK,GAAA;AAAA,QACd,QAAQ;AAAA,UACJ,MAAM;AAAA,YACF,GAAGA;AAAAA,YACH,gCAAgB,KAAA;AAAA,UAAK;AAAA,QACzB;AAAA,MACJ;AAAA,IACJ,EACF;AAEF,QAAI,QAAQ,SAAS,GAAG;AAEpB,YAAM,WAAW,UAAU,SAAS,EAAC,SAAS,OAAM;AAAA,IACxD;AAAA,EACJ;AAAA,EAEA,MAAM,YAAY,OAA4C;AAC1D,QAAI,CAAC,MAAM,OAAQ;AACnB,UAAM,aAAa,MAAM,KAAK;AAC9B,UAAM,0BAAU,KAAA;AAEhB,UAAM,UAAU,MAAM,IAAI,CAAA,SAAQ;AAC9B,YAAM,KAAK,KAAK,MAAM,KAAK,WAAA;AAC3B,YAAM,EAAC,IAAI,KAAK,QAAQ,YAAY,iBAAiB,YAAY,GAAG,KAAA,IAAQ;AAC5E,aAAO;AAAA,QACH,WAAW;AAAA,UACP,QAAQ,EAAC,KAAK,GAAA;AAAA,UACd,QAAQ;AAAA,YACJ,MAAM;AAAA,cACF,QAAQ,KAAK;AAAA,cACb,YAAY,KAAK;AAAA,cACjB,iBAAiB,KAAK;AAAA,cACtB,YAAY;AAAA,YAAA;AAAA,YAEhB,cAAc;AAAA,cACV,GAAG;AAAA,cACH,YAAY,KAAK,cAAc;AAAA,cAC/B,uBAAuB,KAAK,yBAAyB;AAAA,YAAA;AAAA,UACzD;AAAA,UAEJ,QAAQ;AAAA,QAAA;AAAA,MACZ;AAAA,IAER,CAAC;AAGD,UAAM,WAAW,UAAU,SAAS,EAAC,SAAS,OAAM;AAAA,EACxD;AAAA,EAEA,aAAa;AACT,WAAO,IAAI,SAAA;AAAA,EACf;AAAA,EAEA,MAAM,QAAQ;AAAA,EACd;AAAA,EAEA,MAAM,aAAa;AAAA,EACnB;AAAA,EAEA,MAAM,mBAAmB,OAA4C;AACjE,UAAM,aAAa,MAAM,KAAK;AAC9B,UAAM,UAAU,MAAM,IAAI,CAAA,MAAK,EAAE,EAAE,EAAE,OAAO,OAAO;AAGnD,UAAM,WAAW;AAAA,MACb,EAAC,KAAK,EAAC,KAAK,UAAO;AAAA,MACnB;AAAA,QACI,MAAM;AAAA,UACF,QAAQ;AAAA;AAAA,UAER,gCAAgB,KAAA;AAAA,QAAK;AAAA,MACzB;AAAA,IACJ;AAAA,EAER;AACJ;ACxSA,MAAM,gBAAuD;AAAA,EAA7D,cAAA;AACI,SAAQ,qCAAoD,IAAA;AAE5D,SAAQ,gBAAkC;AAAA,EAAA;AAAA,EAE1C,mBAAmB,QAA0C;AACzD,SAAK,oBAAoB,OAAO;AAChC,SAAK,gBAAgB,OAAO,QAAQ;AAAA,EACxC;AAAA,EAEQ,mBACJ,UACA,KACI;AACJ,QAAI,CAAC,SAAU;AACf,QAAI;AACA,YAAM,SAAS,SAAS,GAAG;AAC3B,UAAI,kBAAkB,SAAS;AAC3B,eAAO,MAAM,CAAA,QAAO,QAAQ,MAAM,kCAAkC,GAAG,EAAE,CAAC;AAAA,MAC9E;AAAA,IACJ,SAAS,KAAK;AACV,cAAQ,MAAM,kCAAkC,GAAG,EAAE;AAAA,IACzD;AAAA,EACJ;AAAA,EAEA,MAAM,oBAAoB,OAAwD;AAC9E,UAAM,aAAa,MAAM,IAAI,CAAA,SAAQ;AACjC,YAAM,KAAK,KAAK,MAAM,KAAK,WAAA;AAC3B,YAAM,aAAa,EAAC,GAAG,MAAM,GAAA;AAC7B,WAAK,eAAe,IAAI,IAAI,UAAU;AACtC,aAAO;AAAA,IACX,CAAC;AACD,WAAO;AAAA,EACX;AAAA,EAEA,MAAM,eAAe,WAAgD;AACjE,UAAM,cAAkC,CAAA;AACxC,eAAW,CAAC,IAAI,IAAI,KAAK,MAAM,KAAK,KAAK,eAAe,QAAA,CAAS,GAAG;AAChE,UAAI,KAAK,WAAW,QAAA,KAAa,aAAa,KAAK,WAAW,gBAAgB,KAAK,WAAW,YAAY;AACtG,oBAAY,KAAK,IAAI;AAAA,MACzB;AAAA,IACJ;AACA,WAAO;AAAA,EACX;AAAA,EAEA,MAAM,sBAAsB,OAA2B,qBAA0C;AAC7F,eAAW,QAAQ,OAAO;AACtB,YAAM,eAAe,KAAK,eAAe,IAAI,KAAK,EAAG;AACrD,UAAI,cAAc;AACd,qBAAa,SAAS;AACtB,qBAAa,wBAAwB;AACrC,aAAK,eAAe,IAAI,KAAK,IAAK,YAAY;AAAA,MAClD;AAAA,IACJ;AAAA,EACJ;AAAA,EAEA,MAAM,oBAAoB,OAA0C;AAChE,eAAW,QAAQ,OAAO;AACtB,YAAM,eAAe,KAAK,eAAe,IAAI,KAAK,EAAG;AACrD,UAAI,cAAc;AACd,qBAAa,SAAS;AACtB,qBAAa,iCAAiB,KAAA;AAC9B,aAAK,eAAe,IAAI,KAAK,IAAK,YAAY;AAAA,MAClD;AAAA,IACJ;AAAA,EACJ;AAAA,EAEA,MAAM,kBAAkB,OAA0C;AAC9D,eAAW,QAAQ,OAAO;AACtB,YAAM,eAAe,KAAK,eAAe,IAAI,KAAK,EAAG;AACrD,UAAI,cAAc;AACd,qBAAa,SAAS;AACtB,qBAAa,kBAAkB,EAAC,GAAG,aAAa,iBAAiB,WAAW,oBAAI,OAAK;AACrF,aAAK,eAAe,IAAI,KAAK,IAAK,YAAY;AAAA,MAClD;AAAA,IACJ;AAAA,EACJ;AAAA,EAEA,MAAM,cAAc,SAAgD;AAChE,WAAO,QAAQ,IAAI,CAAA,OAAM,KAAK,eAAe,IAAI,EAAE,CAAC,EAAE,OAAO,OAAO;AAAA,EACxE;AAAA,EAEA,MAAM,YAAY,SAAmF;AACjG,eAAW,EAAC,IAAI,SAAS,YAAA,KAAgB,SAAS;AAC9C,YAAM,OAAO,KAAK,eAAe,IAAI,EAAE;AACvC,UAAI,MAAM;AACN,eAAO,OAAO,MAAM,WAAW;AAC/B,aAAK,eAAe,IAAI,IAAI,IAAI;AAAA,MACpC;AAAA,IACJ;AAAA,EACJ;AAAA,EAEA,MAAM,YAAY,OAA0C;AACxD,eAAW,QAAQ,OAAO;AACtB,YAAM,KAAK,KAAK,MAAM,KAAK,WAAA;AAC3B,YAAM,WAAW,KAAK,eAAe,IAAI,EAAE;AAC3C,UAAI,UAAU;AACV,eAAO,OAAO,UAAU;AAAA,UACpB,QAAQ,KAAK;AAAA,UACb,YAAY,KAAK;AAAA,UACjB,iBAAiB,KAAK;AAAA,UACtB,gCAAgB,KAAA;AAAA,QAAK,CACxB;AAAA,MACL,OAAO;AACH,aAAK,eAAe,IAAI,IAAI,EAAC,GAAG,MAAM,IAAG;AAAA,MAC7C;AAAA,IACJ;AAAA,EACJ;AAAA,EAEA,MAAM,kBAA4E;AAC9E,QAAI,gBAAgB;AACpB,QAAI,eAAe;AACnB,UAAM,MAAM,KAAK,IAAA;AAEjB,eAAW,QAAQ,MAAM,KAAK,KAAK,eAAe,OAAA,CAAQ,GAAG;AACzD,UAAI,KAAK,WAAW,gBAAgB,KAAK,yBAA0B,MAAM,KAAK,sBAAsB,QAAA,IAAa,KAAQ;AACrH;AAAA,MACJ;AACA,UAAI,KAAK,cAAc,MAAM,KAAK,WAAW,WAAW;AACpD;AAAA,MACJ;AAAA,IACJ;AAEA,WAAO,EAAC,eAAe,aAAA;AAAA,EAC3B;AAAA,EAEA,MAAM,aAAa,gBAAsB,eAAoC;AACzE,eAAW,CAAC,IAAI,IAAI,KAAK,MAAM,KAAK,KAAK,eAAe,QAAA,CAAS,GAAG;AAChE,YAAM,eACD,KAAK,WAAW,gBAAgB,KAAK,yBAAyB,KAAK,wBAAwB,kBAC3F,KAAK,cAAc,KAAK,aAAa;AAE1C,UAAI,cAAc;AACd,aAAK,eAAe,OAAO,EAAE;AAAA,MACjC;AAAA,IACJ;AAAA,EACJ;AAAA,EAEA,MAAM,aAA4B;AAAA,EAElC;AAAA,EAEA,MAAM,QAAuB;AACzB,SAAK,eAAe,MAAA;AAAA,EACxB;AAAA,EAEA,aAAqB;AACjB,WAAO,GAAG,KAAK,IAAA,CAAK,IAAI,KAAK,OAAA,EAAS,SAAS,EAAE,EAAE,UAAU,GAAG,CAAC,CAAC;AAAA,EACtE;AAAA,EAEA,MAAM,mBAAmB,OAA2B;AAChD,eAAW,QAAQ,OAAO;AACtB,YAAM,eAAe,KAAK,eAAe,IAAI,KAAK,EAAG;AACrD,UAAI,cAAc;AACd,qBAAa,SAAS;AACtB,qBAAa,kBAAkB,EAAC,GAAG,aAAa,iBAAiB,eAAe,eAAA;AAChF,aAAK,eAAe,IAAI,KAAK,IAAK,YAAY;AAAA,MAClD;AAAA,IACJ;AAAA,EACJ;AACJ;ACnLA,MAAM,SAAS,IAAI,OAAO,iBAAiB,SAAS,IAAI;AACxD,MAAM,cAAc,IAAI,KAAK,KAAK,KAAK;AAkDhC,MAAM,cAIyB;AAAA,EAIlC,YACY,QAaV;AAbU,SAAA,SAAA;AAHZ,SAAQ,gBAAkC;AAAA,EAiB1C;AAAA,EAEA,mBAAmB,QAA0C;AACzD,SAAK,oBAAoB,OAAO;AAChC,SAAK,gBAAgB,OAAO,QAAQ;AAAA,EACxC;AAAA,EAEQ,mBACJ,UACA,KACI;AACJ,QAAI,CAAC,SAAU;AACf,QAAI;AACA,YAAM,SAAS,SAAS,GAAG;AAC3B,UAAI,kBAAkB,SAAS;AAC3B,eAAO,MAAM,CAAA,QAAO,OAAO,MAAM,kCAAkC,GAAG,EAAE,CAAC;AAAA,MAC7E;AAAA,IACJ,SAAS,KAAK;AACV,aAAO,MAAM,kCAAkC,GAAG,EAAE;AAAA,IACxD;AAAA,EACJ;AAAA,EAEA,IAAI,eAA6B;AAC7B,WAAO,KAAK,OAAO;AAAA,EACvB;AAAA,EAEA,IAAI,gBAAwB;AACxB,WAAO,OAAO,KAAK,OAAO,YAAY;AAAA,EAC1C;AAAA,EAEA,IAAc,WAA4B;AACtC,WAAO,KAAK,OAAO,aAAa,KAAK,OAAO,YAAY;AAAA,EAC5D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAyBA,MAAM,oBAAoB,OAAkD;AACxE,QAAI,CAAC,MAAM,OAAQ,QAAO,CAAA;AAG1B,QAAI,MAAM,SAAS,IAAI;AACnB,aAAO,KAAK,8BAA8B,MAAM,MAAM,kIAAkI;AAAA,IAC5L;AAIA,UAAM,UAA2B,CAAA;AACjC,eAAW,QAAQ,OAAO;AACtB,UAAI;AACA,cAAM,KAAK,SAAS,OAAO;AAAA,UACvB,MAAM;AAAA,YACF,GAAG;AAAA,YACH,IAAI,KAAK,MAAM,KAAK,WAAA;AAAA,YACpB,QAAQ,KAAK,UAAU;AAAA,YACvB,SAAS,KAAK,WAAW;AAAA,YACzB,YAAY,KAAK,cAAc,oBAAI,KAAA;AAAA,YACnC,gCAAgB,KAAA;AAAA,YAChB,uBAAuB,KAAK,yBAAyB,oBAAI,KAAA;AAAA,UAAK;AAAA,QAClE,CACH;AACD,gBAAQ,KAAK,IAAI;AAAA,MACrB,SAAS,OAAgB;AACrB,eAAO,KAAK,oCAAoC,KAAK,EAAE;AAAA,MAC3D;AAAA,IACJ;AACA,WAAO;AAAA,EACX;AAAA,EAEA,MAAM,eAAe,WAA6C;AAC9D,UAAM,iBAAiB,KAAK,IAAA,IAAQ;AAEpC,UAAM,KAAK,SAAS,WAAW;AAAA,MAC3B,OAAO;AAAA,QACH,QAAQ;AAAA,QACR,uBAAuB,EAAC,IAAI,IAAI,KAAK,cAAc,EAAA;AAAA,MAAC;AAAA,MAExD,MAAM,EAAC,QAAQ,YAAA;AAAA,IAAW,CAC7B;AAED,UAAM,QAAQ,MAAM,KAAK,SAAS,SAAS;AAAA,MACvC,OAAO;AAAA,QACH,QAAQ;AAAA,QACR,YAAY,EAAC,KAAK,IAAI,KAAK,SAAS,EAAA;AAAA,MAAC;AAAA,MAEzC,MAAM;AAAA,MACN,SAAS,EAAC,YAAY,MAAA;AAAA,IAAK,CAC9B;AAED,QAAI,MAAM,SAAS,GAAG;AAClB,YAAM,UAAU,MAAM,IAAI,CAAC,MAAW,EAAE,EAAE;AAC1C,YAAM,KAAK,SAAS,WAAW;AAAA,QAC3B,OAAO,EAAC,IAAI,EAAC,IAAI,UAAO;AAAA,QACxB,MAAM;AAAA,UACF,QAAQ;AAAA,UACR,2CAA2B,KAAA;AAAA,QAAK;AAAA,MACpC,CACH;AAAA,IACL;AAEA,WAAO;AAAA,EACX;AAAA,EAEA,MAAM,sBAAsB,OAAwB,qBAA0C;AAC1F,UAAM,UAAU,MAAM,IAAI,CAAA,MAAK,EAAE,EAAE,EAAE,OAAO,OAAO;AACnD,QAAI,CAAC,QAAQ,OAAQ;AAErB,UAAM,KAAK,SAAS,WAAW;AAAA,MAC3B,OAAO,EAAC,IAAI,EAAC,IAAI,UAAO;AAAA,MACxB,MAAM;AAAA,QACF,QAAQ;AAAA,QACR,uBAAuB;AAAA,QACvB,gCAAgB,KAAA;AAAA,MAAK;AAAA,IACzB,CACH;AAAA,EACL;AAAA,EAEA,MAAM,oBAAoB,OAAuC;AAC7D,UAAM,UAAU,MAAM,IAAI,CAAA,MAAK,EAAE,EAAE,EAAE,OAAO,OAAO;AACnD,QAAI,CAAC,QAAQ,OAAQ;AAErB,UAAM,KAAK,SAAS,WAAW;AAAA,MAC3B,OAAO,EAAC,IAAI,EAAC,IAAI,UAAO;AAAA,MACxB,MAAM,EAAC,QAAQ,YAAY,YAAY,oBAAI,OAAK;AAAA,IAAC,CACpD;AAAA,EACL;AAAA,EAEA,MAAM,kBAAkB,OAAuC;AAC3D,UAAM,UAAU,MAAM,IAAI,CAAA,MAAK,EAAE,EAAE,EAAE,OAAO,OAAO;AACnD,QAAI,CAAC,QAAQ,OAAQ;AAErB,UAAM,KAAK,SAAS,WAAW;AAAA,MAC3B,OAAO,EAAC,IAAI,EAAC,IAAI,UAAO;AAAA,MACxB,MAAM,EAAC,QAAQ,UAAU,YAAY,oBAAI,OAAK;AAAA,IAAC,CAClD;AAAA,EACL;AAAA,EAEA,MAAM,mBAAmB,OAAuC;AAC5D,UAAM,UAAU,MAAM,IAAI,CAAA,MAAK,EAAE,EAAE,EAAE,OAAO,OAAO;AACnD,QAAI,CAAC,QAAQ,OAAQ;AAErB,UAAM,KAAK,SAAS,WAAW;AAAA,MAC3B,OAAO,EAAC,IAAI,EAAC,IAAI,UAAO;AAAA,MACxB,MAAM,EAAC,QAAQ,WAAW,YAAY,oBAAI,OAAK;AAAA,IAAC,CACnD;AAAA,EACL;AAAA,EAEA,MAAM,cAAc,SAA0C;AAC1D,QAAI,CAAC,QAAQ,OAAQ,QAAO,CAAA;AAE5B,WAAO,KAAK,SAAS,SAAS;AAAA,MAC1B,OAAO,EAAC,IAAI,EAAC,IAAI,UAAO;AAAA,IAAC,CAC5B;AAAA,EACL;AAAA,EAEA,MAAM,YAAY,aAAiF;AAE/F,UAAM,KAAK,aACN,aAAa,OAAO,WAAW;AAC5B,iBAAW,EAAC,IAAI,QAAA,KAAY,aAAa;AACrC,cAAO,OAAe,KAAK,aAAa,EACnC,OAAO;AAAA,UACJ,OAAO,EAAC,GAAA;AAAA,UACR,MAAM,EAAC,GAAG,SAAS,YAAY,oBAAI,OAAK;AAAA,QAAC,CAC5C;AAAA,MACT;AAAA,IACJ,CAAC;AAAA,EACT;AAAA,EAEA,MAAM,YAAY,OAAuC;AACrD,QAAI,CAAC,MAAM,OAAQ;AAEnB,UAAM,0BAAU,KAAA;AAChB,UAAM,WAAW,KAAK;AAItB,UAAM,KAAK,aACN;AAAA,MACG,MAAM,IAAI,CAAA,SAAQ,SAAS,OAAO;AAAA,QAC9B,OAAO,EAAC,IAAI,KAAK,GAAA;AAAA,QACjB,QAAQ;AAAA,UACJ,GAAG;AAAA,UACH,YAAY,KAAK,cAAc;AAAA,UAC/B,YAAY;AAAA,UACZ,uBAAuB,KAAK,yBAAyB;AAAA,QAAA;AAAA,QAEzD,QAAQ;AAAA,UACJ,QAAQ,KAAK;AAAA,UACb,YAAY,KAAK;AAAA,UACjB,iBAAiB,KAAK;AAAA,UACtB,YAAY;AAAA,QAAA;AAAA,MAChB,CACH,CAAC;AAAA,IAAA;AAAA,EAEd;AAAA,EAEA,MAAM,kBAA4E;AAC9E,UAAM,iBAAiB,IAAI,KAAK,KAAK,IAAA,IAAQ,WAAW;AAExD,UAAM,CAAC,eAAe,YAAY,IAAI,MAAM,QAAQ,IAAI;AAAA,MACpD,KAAK,SAAS,MAAM;AAAA,QAChB,OAAO;AAAA,UACH,QAAQ;AAAA,UACR,uBAAuB,EAAC,IAAI,eAAA;AAAA,QAAc;AAAA,MAC9C,CACH;AAAA,MACD,KAAK,SAAS,MAAM;AAAA,QAChB,OAAO,EAAC,YAAY,EAAC,IAAI,oBAAI,KAAA,IAAM;AAAA,MAAC,CACvC;AAAA,IAAA,CACJ;AAED,WAAO,EAAC,eAAe,aAAA;AAAA,EAC3B;AAAA,EAEA,MAAM,aAAa,gBAAsB,eAAoC;AACzE,UAAM,QAAQ,IAAI;AAAA,MACd,KAAK,SAAS,WAAW;AAAA,QACrB,OAAO;AAAA,UACH,QAAQ;AAAA,UACR,uBAAuB,EAAC,IAAI,eAAA;AAAA,QAAc;AAAA,MAC9C,CACH;AAAA,MACD,KAAK,SAAS,WAAW;AAAA,QACrB,OAAO,EAAC,YAAY,EAAC,IAAI,gBAAa;AAAA,MAAC,CAC1C;AAAA,IAAA,CACJ;AAAA,EACL;AAAA,EAEA,aAAkB;AAEd,WAAO,OAAO,WAAA;AAAA,EAClB;AAAA,EAEA,MAAM,aAA4B;AAAA,EAClC;AAAA,EAEA,MAAM,QAAuB;AAAA,EAC7B;AACJ;"}
|
package/dist/client-BAiCkZv7.js
DELETED
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
var LogLevel = /* @__PURE__ */ ((LogLevel2) => {
|
|
2
|
-
LogLevel2[LogLevel2["DEBUG"] = 0] = "DEBUG";
|
|
3
|
-
LogLevel2[LogLevel2["INFO"] = 1] = "INFO";
|
|
4
|
-
LogLevel2[LogLevel2["WARN"] = 2] = "WARN";
|
|
5
|
-
LogLevel2[LogLevel2["ERROR"] = 3] = "ERROR";
|
|
6
|
-
return LogLevel2;
|
|
7
|
-
})(LogLevel || {});
|
|
8
|
-
class Logger {
|
|
9
|
-
constructor(prefix, initialLogLevel = 1) {
|
|
10
|
-
this.prefix = prefix;
|
|
11
|
-
this.logLevel = initialLogLevel;
|
|
12
|
-
}
|
|
13
|
-
getLogLevel() {
|
|
14
|
-
return this.logLevel;
|
|
15
|
-
}
|
|
16
|
-
setLogLevel(level) {
|
|
17
|
-
this.logLevel = level;
|
|
18
|
-
}
|
|
19
|
-
debug(message, ...args) {
|
|
20
|
-
if (this.logLevel === 0) {
|
|
21
|
-
console.debug(`[${this.prefix}] ${message}`, ...args);
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
info(message, ...args) {
|
|
25
|
-
if (this.logLevel <= 1) {
|
|
26
|
-
console.info(`[${this.prefix}] ${message}`, ...args);
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
error(message, ...args) {
|
|
30
|
-
console.error(`[${this.prefix}] ${message}`, ...args);
|
|
31
|
-
}
|
|
32
|
-
warn(message, ...args) {
|
|
33
|
-
if (this.logLevel <= 2) {
|
|
34
|
-
console.warn(`[${this.prefix}] ${message}`, ...args);
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
time(message) {
|
|
38
|
-
if (this.logLevel < 1) {
|
|
39
|
-
console.time(`[${this.prefix}] ${message}`);
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
timeEnd(message) {
|
|
43
|
-
if (this.logLevel < 1) {
|
|
44
|
-
console.timeEnd(`[${this.prefix}] ${message}`);
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
export {
|
|
49
|
-
Logger as L,
|
|
50
|
-
LogLevel as a
|
|
51
|
-
};
|
|
52
|
-
//# sourceMappingURL=client-BAiCkZv7.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"client-BAiCkZv7.js","sources":["../../../packages/utils/dist/client.mjs"],"sourcesContent":["var LogLevel = /* @__PURE__ */ ((LogLevel2) => {\n LogLevel2[LogLevel2[\"DEBUG\"] = 0] = \"DEBUG\";\n LogLevel2[LogLevel2[\"INFO\"] = 1] = \"INFO\";\n LogLevel2[LogLevel2[\"WARN\"] = 2] = \"WARN\";\n LogLevel2[LogLevel2[\"ERROR\"] = 3] = \"ERROR\";\n return LogLevel2;\n})(LogLevel || {});\nclass Logger {\n constructor(prefix, initialLogLevel = 1) {\n this.prefix = prefix;\n this.logLevel = initialLogLevel;\n }\n getLogLevel() {\n return this.logLevel;\n }\n setLogLevel(level) {\n this.logLevel = level;\n }\n debug(message, ...args) {\n if (this.logLevel === 0) {\n console.debug(`[${this.prefix}] ${message}`, ...args);\n }\n }\n info(message, ...args) {\n if (this.logLevel <= 1) {\n console.info(`[${this.prefix}] ${message}`, ...args);\n }\n }\n error(message, ...args) {\n console.error(`[${this.prefix}] ${message}`, ...args);\n }\n warn(message, ...args) {\n if (this.logLevel <= 2) {\n console.warn(`[${this.prefix}] ${message}`, ...args);\n }\n }\n time(message) {\n if (this.logLevel < 1) {\n console.time(`[${this.prefix}] ${message}`);\n }\n }\n timeEnd(message) {\n if (this.logLevel < 1) {\n console.timeEnd(`[${this.prefix}] ${message}`);\n }\n }\n}\nexport {\n LogLevel,\n Logger\n};\n//# sourceMappingURL=client.mjs.map\n"],"names":[],"mappings":"AAAG,IAAC,WAA4B,kBAAC,cAAc;AAC7C,YAAU,UAAU,OAAO,IAAI,CAAC,IAAI;AACpC,YAAU,UAAU,MAAM,IAAI,CAAC,IAAI;AACnC,YAAU,UAAU,MAAM,IAAI,CAAC,IAAI;AACnC,YAAU,UAAU,OAAO,IAAI,CAAC,IAAI;AACpC,SAAO;AACT,GAAG,YAAY,CAAA,CAAE;AACjB,MAAM,OAAO;AAAA,EACX,YAAY,QAAQ,kBAAkB,GAAG;AACvC,SAAK,SAAS;AACd,SAAK,WAAW;AAAA,EAClB;AAAA,EACA,cAAc;AACZ,WAAO,KAAK;AAAA,EACd;AAAA,EACA,YAAY,OAAO;AACjB,SAAK,WAAW;AAAA,EAClB;AAAA,EACA,MAAM,YAAY,MAAM;AACtB,QAAI,KAAK,aAAa,GAAG;AACvB,cAAQ,MAAM,IAAI,KAAK,MAAM,KAAK,OAAO,IAAI,GAAG,IAAI;AAAA,IACtD;AAAA,EACF;AAAA,EACA,KAAK,YAAY,MAAM;AACrB,QAAI,KAAK,YAAY,GAAG;AACtB,cAAQ,KAAK,IAAI,KAAK,MAAM,KAAK,OAAO,IAAI,GAAG,IAAI;AAAA,IACrD;AAAA,EACF;AAAA,EACA,MAAM,YAAY,MAAM;AACtB,YAAQ,MAAM,IAAI,KAAK,MAAM,KAAK,OAAO,IAAI,GAAG,IAAI;AAAA,EACtD;AAAA,EACA,KAAK,YAAY,MAAM;AACrB,QAAI,KAAK,YAAY,GAAG;AACtB,cAAQ,KAAK,IAAI,KAAK,MAAM,KAAK,OAAO,IAAI,GAAG,IAAI;AAAA,IACrD;AAAA,EACF;AAAA,EACA,KAAK,SAAS;AACZ,QAAI,KAAK,WAAW,GAAG;AACrB,cAAQ,KAAK,IAAI,KAAK,MAAM,KAAK,OAAO,EAAE;AAAA,IAC5C;AAAA,EACF;AAAA,EACA,QAAQ,SAAS;AACf,QAAI,KAAK,WAAW,GAAG;AACrB,cAAQ,QAAQ,IAAI,KAAK,MAAM,KAAK,OAAO,EAAE;AAAA,IAC/C;AAAA,EACF;AACF;"}
|
package/dist/client-DgdG7pT6.cjs
DELETED
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var LogLevel = /* @__PURE__ */ ((LogLevel2) => {
|
|
3
|
-
LogLevel2[LogLevel2["DEBUG"] = 0] = "DEBUG";
|
|
4
|
-
LogLevel2[LogLevel2["INFO"] = 1] = "INFO";
|
|
5
|
-
LogLevel2[LogLevel2["WARN"] = 2] = "WARN";
|
|
6
|
-
LogLevel2[LogLevel2["ERROR"] = 3] = "ERROR";
|
|
7
|
-
return LogLevel2;
|
|
8
|
-
})(LogLevel || {});
|
|
9
|
-
class Logger {
|
|
10
|
-
constructor(prefix, initialLogLevel = 1) {
|
|
11
|
-
this.prefix = prefix;
|
|
12
|
-
this.logLevel = initialLogLevel;
|
|
13
|
-
}
|
|
14
|
-
getLogLevel() {
|
|
15
|
-
return this.logLevel;
|
|
16
|
-
}
|
|
17
|
-
setLogLevel(level) {
|
|
18
|
-
this.logLevel = level;
|
|
19
|
-
}
|
|
20
|
-
debug(message, ...args) {
|
|
21
|
-
if (this.logLevel === 0) {
|
|
22
|
-
console.debug(`[${this.prefix}] ${message}`, ...args);
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
info(message, ...args) {
|
|
26
|
-
if (this.logLevel <= 1) {
|
|
27
|
-
console.info(`[${this.prefix}] ${message}`, ...args);
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
error(message, ...args) {
|
|
31
|
-
console.error(`[${this.prefix}] ${message}`, ...args);
|
|
32
|
-
}
|
|
33
|
-
warn(message, ...args) {
|
|
34
|
-
if (this.logLevel <= 2) {
|
|
35
|
-
console.warn(`[${this.prefix}] ${message}`, ...args);
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
time(message) {
|
|
39
|
-
if (this.logLevel < 1) {
|
|
40
|
-
console.time(`[${this.prefix}] ${message}`);
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
timeEnd(message) {
|
|
44
|
-
if (this.logLevel < 1) {
|
|
45
|
-
console.timeEnd(`[${this.prefix}] ${message}`);
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
exports.LogLevel = LogLevel;
|
|
50
|
-
exports.Logger = Logger;
|
|
51
|
-
//# sourceMappingURL=client-DgdG7pT6.cjs.map
|