duron 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +7 -0
- package/README.md +140 -0
- package/dist/action-job.d.ts +24 -0
- package/dist/action-job.d.ts.map +1 -0
- package/dist/action-job.js +108 -0
- package/dist/action-manager.d.ts +21 -0
- package/dist/action-manager.d.ts.map +1 -0
- package/dist/action-manager.js +78 -0
- package/dist/action.d.ts +129 -0
- package/dist/action.d.ts.map +1 -0
- package/dist/action.js +87 -0
- package/dist/adapters/adapter.d.ts +92 -0
- package/dist/adapters/adapter.d.ts.map +1 -0
- package/dist/adapters/adapter.js +424 -0
- package/dist/adapters/postgres/drizzle.config.d.ts +3 -0
- package/dist/adapters/postgres/drizzle.config.d.ts.map +1 -0
- package/dist/adapters/postgres/drizzle.config.js +10 -0
- package/dist/adapters/postgres/pglite.d.ts +13 -0
- package/dist/adapters/postgres/pglite.d.ts.map +1 -0
- package/dist/adapters/postgres/pglite.js +36 -0
- package/dist/adapters/postgres/postgres.d.ts +51 -0
- package/dist/adapters/postgres/postgres.d.ts.map +1 -0
- package/dist/adapters/postgres/postgres.js +867 -0
- package/dist/adapters/postgres/schema.d.ts +581 -0
- package/dist/adapters/postgres/schema.d.ts.map +1 -0
- package/dist/adapters/postgres/schema.default.d.ts +577 -0
- package/dist/adapters/postgres/schema.default.d.ts.map +1 -0
- package/dist/adapters/postgres/schema.default.js +3 -0
- package/dist/adapters/postgres/schema.js +87 -0
- package/dist/adapters/schemas.d.ts +516 -0
- package/dist/adapters/schemas.d.ts.map +1 -0
- package/dist/adapters/schemas.js +184 -0
- package/dist/client.d.ts +85 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +416 -0
- package/dist/constants.d.ts +14 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +22 -0
- package/dist/errors.d.ts +43 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +75 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +6 -0
- package/dist/server.d.ts +1193 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +516 -0
- package/dist/step-manager.d.ts +46 -0
- package/dist/step-manager.d.ts.map +1 -0
- package/dist/step-manager.js +216 -0
- package/dist/utils/checksum.d.ts +2 -0
- package/dist/utils/checksum.d.ts.map +1 -0
- package/dist/utils/checksum.js +6 -0
- package/dist/utils/p-retry.d.ts +19 -0
- package/dist/utils/p-retry.d.ts.map +1 -0
- package/dist/utils/p-retry.js +130 -0
- package/dist/utils/wait-for-abort.d.ts +5 -0
- package/dist/utils/wait-for-abort.d.ts.map +1 -0
- package/dist/utils/wait-for-abort.js +32 -0
- package/migrations/postgres/0000_lethal_speed_demon.sql +64 -0
- package/migrations/postgres/meta/0000_snapshot.json +606 -0
- package/migrations/postgres/meta/_journal.json +13 -0
- package/package.json +88 -0
- package/src/action-job.ts +201 -0
- package/src/action-manager.ts +166 -0
- package/src/action.ts +247 -0
- package/src/adapters/adapter.ts +969 -0
- package/src/adapters/postgres/drizzle.config.ts +11 -0
- package/src/adapters/postgres/pglite.ts +86 -0
- package/src/adapters/postgres/postgres.ts +1346 -0
- package/src/adapters/postgres/schema.default.ts +5 -0
- package/src/adapters/postgres/schema.ts +119 -0
- package/src/adapters/schemas.ts +320 -0
- package/src/client.ts +859 -0
- package/src/constants.ts +37 -0
- package/src/errors.ts +205 -0
- package/src/index.ts +14 -0
- package/src/server.ts +718 -0
- package/src/step-manager.ts +471 -0
- package/src/utils/checksum.ts +7 -0
- package/src/utils/p-retry.ts +213 -0
- package/src/utils/wait-for-abort.ts +40 -0
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { EventEmitter } from 'node:events';
|
|
2
|
+
import type { Logger } from 'pino';
|
|
3
|
+
import { type JobStatus, type StepStatus } from '../constants.js';
|
|
4
|
+
import type { CancelJobOptions, CancelJobStepOptions, CompleteJobOptions, CompleteJobStepOptions, CreateJobOptions, CreateOrRecoverJobStepOptions, CreateOrRecoverJobStepResult, DelayJobStepOptions, DeleteJobOptions, DeleteJobsOptions, FailJobOptions, FailJobStepOptions, FetchOptions, GetActionsResult, GetJobStepsOptions, GetJobStepsResult, GetJobsOptions, GetJobsResult, Job, JobStatusResult, JobStep, JobStepStatusResult, RecoverJobsOptions, RetryJobOptions } from './schemas.js';
|
|
5
|
+
export type { ActionStats, CancelJobOptions, CancelJobStepOptions, CompleteJobOptions, CompleteJobStepOptions, CreateJobOptions, CreateOrRecoverJobStepOptions, CreateOrRecoverJobStepResult, DelayJobStepOptions, DeleteJobOptions, DeleteJobsOptions, FailJobOptions, FailJobStepOptions, FetchOptions, GetActionsResult, GetJobStepsOptions, GetJobStepsResult, GetJobsOptions, GetJobsResult, Job, JobFilters, JobSort, JobSortField, JobStatusResult, JobStep, JobStepStatusResult, RecoverJobsOptions, RetryJobOptions, SortOrder, } from './schemas.js';
|
|
6
|
+
export interface AdapterEvents {
|
|
7
|
+
'job-status-changed': [
|
|
8
|
+
{
|
|
9
|
+
jobId: string;
|
|
10
|
+
status: JobStatus | 'retried';
|
|
11
|
+
ownerId: string;
|
|
12
|
+
}
|
|
13
|
+
];
|
|
14
|
+
'job-available': [
|
|
15
|
+
{
|
|
16
|
+
jobId: string;
|
|
17
|
+
}
|
|
18
|
+
];
|
|
19
|
+
'step-status-changed': [
|
|
20
|
+
{
|
|
21
|
+
jobId: string;
|
|
22
|
+
stepId: string;
|
|
23
|
+
status: StepStatus;
|
|
24
|
+
error: any | null;
|
|
25
|
+
ownerId: string;
|
|
26
|
+
}
|
|
27
|
+
];
|
|
28
|
+
'step-delayed': [
|
|
29
|
+
{
|
|
30
|
+
jobId: string;
|
|
31
|
+
stepId: string;
|
|
32
|
+
delayedMs: number;
|
|
33
|
+
error: any;
|
|
34
|
+
ownerId: string;
|
|
35
|
+
}
|
|
36
|
+
];
|
|
37
|
+
}
|
|
38
|
+
export declare abstract class Adapter extends EventEmitter<AdapterEvents> {
|
|
39
|
+
#private;
|
|
40
|
+
start(): Promise<boolean>;
|
|
41
|
+
stop(): Promise<boolean>;
|
|
42
|
+
setId(id: string): void;
|
|
43
|
+
setLogger(logger: Logger): void;
|
|
44
|
+
get id(): string;
|
|
45
|
+
get logger(): Logger | null;
|
|
46
|
+
createJob(options: CreateJobOptions): Promise<string | null>;
|
|
47
|
+
completeJob(options: CompleteJobOptions): Promise<boolean>;
|
|
48
|
+
failJob(options: FailJobOptions): Promise<boolean>;
|
|
49
|
+
cancelJob(options: CancelJobOptions): Promise<boolean>;
|
|
50
|
+
retryJob(options: RetryJobOptions): Promise<string | null>;
|
|
51
|
+
deleteJob(options: DeleteJobOptions): Promise<boolean>;
|
|
52
|
+
deleteJobs(options?: DeleteJobsOptions): Promise<number>;
|
|
53
|
+
fetch(options: FetchOptions): Promise<Job[]>;
|
|
54
|
+
recoverJobs(options: RecoverJobsOptions): Promise<number>;
|
|
55
|
+
createOrRecoverJobStep(options: CreateOrRecoverJobStepOptions): Promise<CreateOrRecoverJobStepResult | null>;
|
|
56
|
+
completeJobStep(options: CompleteJobStepOptions): Promise<boolean>;
|
|
57
|
+
failJobStep(options: FailJobStepOptions): Promise<boolean>;
|
|
58
|
+
delayJobStep(options: DelayJobStepOptions): Promise<boolean>;
|
|
59
|
+
cancelJobStep(options: CancelJobStepOptions): Promise<boolean>;
|
|
60
|
+
protected abstract _createJob(options: CreateJobOptions): Promise<string | null>;
|
|
61
|
+
protected abstract _completeJob(options: CompleteJobOptions): Promise<boolean>;
|
|
62
|
+
protected abstract _failJob(options: FailJobOptions): Promise<boolean>;
|
|
63
|
+
protected abstract _cancelJob(options: CancelJobOptions): Promise<boolean>;
|
|
64
|
+
protected abstract _retryJob(options: RetryJobOptions): Promise<string | null>;
|
|
65
|
+
protected abstract _deleteJob(options: DeleteJobOptions): Promise<boolean>;
|
|
66
|
+
protected abstract _deleteJobs(options?: DeleteJobsOptions): Promise<number>;
|
|
67
|
+
protected abstract _fetch(options: FetchOptions): Promise<Job[]>;
|
|
68
|
+
protected abstract _recoverJobs(options: RecoverJobsOptions): Promise<number>;
|
|
69
|
+
protected abstract _createOrRecoverJobStep(options: CreateOrRecoverJobStepOptions): Promise<CreateOrRecoverJobStepResult | null>;
|
|
70
|
+
protected abstract _completeJobStep(options: CompleteJobStepOptions): Promise<boolean>;
|
|
71
|
+
protected abstract _failJobStep(options: FailJobStepOptions): Promise<boolean>;
|
|
72
|
+
protected abstract _delayJobStep(options: DelayJobStepOptions): Promise<boolean>;
|
|
73
|
+
protected abstract _cancelJobStep(options: CancelJobStepOptions): Promise<boolean>;
|
|
74
|
+
getJobById(jobId: string): Promise<Job | null>;
|
|
75
|
+
getJobSteps(options: GetJobStepsOptions): Promise<GetJobStepsResult>;
|
|
76
|
+
getJobs(options?: GetJobsOptions): Promise<GetJobsResult>;
|
|
77
|
+
getJobStepById(stepId: string): Promise<JobStep | null>;
|
|
78
|
+
getJobStatus(jobId: string): Promise<JobStatusResult | null>;
|
|
79
|
+
getJobStepStatus(stepId: string): Promise<JobStepStatusResult | null>;
|
|
80
|
+
getActions(): Promise<GetActionsResult>;
|
|
81
|
+
protected abstract _getJobById(jobId: string): Promise<Job | null>;
|
|
82
|
+
protected abstract _getJobSteps(options: GetJobStepsOptions): Promise<GetJobStepsResult>;
|
|
83
|
+
protected abstract _getJobs(options?: GetJobsOptions): Promise<GetJobsResult>;
|
|
84
|
+
protected abstract _getJobStepById(stepId: string): Promise<JobStep | null>;
|
|
85
|
+
protected abstract _getJobStatus(jobId: string): Promise<JobStatusResult | null>;
|
|
86
|
+
protected abstract _getJobStepStatus(stepId: string): Promise<JobStepStatusResult | null>;
|
|
87
|
+
protected abstract _getActions(): Promise<GetActionsResult>;
|
|
88
|
+
protected abstract _start(): Promise<void>;
|
|
89
|
+
protected abstract _stop(): Promise<void>;
|
|
90
|
+
protected abstract _notify(event: string, data: any): Promise<void>;
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../src/adapters/adapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAE1C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAA;AAGlC,OAAO,EAIL,KAAK,SAAS,EAId,KAAK,UAAU,EAChB,MAAM,iBAAiB,CAAA;AACxB,OAAO,KAAK,EACV,gBAAgB,EAChB,oBAAoB,EACpB,kBAAkB,EAClB,sBAAsB,EACtB,gBAAgB,EAChB,6BAA6B,EAC7B,4BAA4B,EAC5B,mBAAmB,EACnB,gBAAgB,EAChB,iBAAiB,EACjB,cAAc,EACd,kBAAkB,EAClB,YAAY,EACZ,gBAAgB,EAChB,kBAAkB,EAClB,iBAAiB,EACjB,cAAc,EACd,aAAa,EACb,GAAG,EACH,eAAe,EACf,OAAO,EACP,mBAAmB,EACnB,kBAAkB,EAClB,eAAe,EAChB,MAAM,cAAc,CAAA;AAiCrB,YAAY,EACV,WAAW,EACX,gBAAgB,EAChB,oBAAoB,EACpB,kBAAkB,EAClB,sBAAsB,EACtB,gBAAgB,EAChB,6BAA6B,EAC7B,4BAA4B,EAC5B,mBAAmB,EACnB,gBAAgB,EAChB,iBAAiB,EACjB,cAAc,EACd,kBAAkB,EAClB,YAAY,EACZ,gBAAgB,EAChB,kBAAkB,EAClB,iBAAiB,EACjB,cAAc,EACd,aAAa,EACb,GAAG,EACH,UAAU,EACV,OAAO,EACP,YAAY,EACZ,eAAe,EACf,OAAO,EACP,mBAAmB,EACnB,kBAAkB,EAClB,eAAe,EACf,SAAS,GACV,MAAM,cAAc,CAAA;AAMrB,MAAM,WAAW,aAAa;IAC5B,oBAAoB,EAAE;QACpB;YACE,KAAK,EAAE,MAAM,CAAA;YACb,MAAM,EAAE,SAAS,GAAG,SAAS,CAAA;YAC7B,OAAO,EAAE,MAAM,CAAA;SAChB;KACF,CAAA;IACD,eAAe,EAAE;QACf;YACE,KAAK,EAAE,MAAM,CAAA;SACd;KACF,CAAA;IACD,qBAAqB,EAAE;QACrB;YACE,KAAK,EAAE,MAAM,CAAA;YACb,MAAM,EAAE,MAAM,CAAA;YACd,MAAM,EAAE,UAAU,CAAA;YAClB,KAAK,EAAE,GAAG,GAAG,IAAI,CAAA;YACjB,OAAO,EAAE,MAAM,CAAA;SAChB;KACF,CAAA;IACD,cAAc,EAAE;QACd;YACE,KAAK,EAAE,MAAM,CAAA;YACb,MAAM,EAAE,MAAM,CAAA;YACd,SAAS,EAAE,MAAM,CAAA;YACjB,KAAK,EAAE,GAAG,CAAA;YACV,OAAO,EAAE,MAAM,CAAA;SAChB;KACF,CAAA;CACF;AAUD,8BAAsB,OAAQ,SAAQ,YAAY,CAAC,aAAa,CAAC;;IAkBzD,KAAK;IAsCL,IAAI;IAkCV,KAAK,CAAC,EAAE,EAAE,MAAM;IAchB,SAAS,CAAC,MAAM,EAAE,MAAM;IAcxB,IAAI,EAAE,IAAI,MAAM,CAEf;IAOD,IAAI,MAAM,IAAI,MAAM,GAAG,IAAI,CAE1B;IAWK,SAAS,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAqB5D,WAAW,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,OAAO,CAAC;IAyB1D,OAAO,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC;IAyBlD,SAAS,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC;IAyBtD,QAAQ,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAsB1D,SAAS,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC;IAkBtD,UAAU,CAAC,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,MAAM,CAAC;IAiBxD,KAAK,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAiB5C,WAAW,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,MAAM,CAAC;IAqBzD,sBAAsB,CAAC,OAAO,EAAE,6BAA6B,GAAG,OAAO,CAAC,4BAA4B,GAAG,IAAI,CAAC;IAiB5G,eAAe,CAAC,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,OAAO,CAAC;IA+BlE,WAAW,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,OAAO,CAAC;IA+B1D,YAAY,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,OAAO,CAAC;IA+B5D,aAAa,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,OAAO,CAAC;IAoCpE,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAQhF,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,OAAO,CAAC;IAQ9E,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC;IAQtE,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC;IAQ1E,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAS9E,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC;IAS1E,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,MAAM,CAAC;IAQ5E,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAQhE,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,MAAM,CAAC;IAY7E,SAAS,CAAC,QAAQ,CAAC,uBAAuB,CACxC,OAAO,EAAE,6BAA6B,GACrC,OAAO,CAAC,4BAA4B,GAAG,IAAI,CAAC;IAQ/C,SAAS,CAAC,QAAQ,CAAC,gBAAgB,CAAC,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,OAAO,CAAC;IAQtF,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,OAAO,CAAC;IAQ9E,SAAS,CAAC,QAAQ,CAAC,aAAa,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,OAAO,CAAC;IAQhF,SAAS,CAAC,QAAQ,CAAC,cAAc,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,OAAO,CAAC;IAY5E,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC;IAsB9C,WAAW,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAkBpE,OAAO,CAAC,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC;IAiBzD,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAoBvD,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC;IAoB5D,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC;IAmBrE,UAAU,IAAI,OAAO,CAAC,gBAAgB,CAAC;IAoB7C,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC;IAUlE,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IASxF,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC;IAQ7E,SAAS,CAAC,QAAQ,CAAC,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAQ3E,SAAS,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC;IAQhF,SAAS,CAAC,QAAQ,CAAC,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC;IAOzF,SAAS,CAAC,QAAQ,CAAC,WAAW,IAAI,OAAO,CAAC,gBAAgB,CAAC;IAY3D,SAAS,CAAC,QAAQ,CAAC,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAQ1C,SAAS,CAAC,QAAQ,CAAC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAUzC,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;CACpE"}
|
|
@@ -0,0 +1,424 @@
|
|
|
1
|
+
import { EventEmitter } from 'node:events';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { JOB_STATUS_CANCELLED, JOB_STATUS_COMPLETED, JOB_STATUS_FAILED, STEP_STATUS_CANCELLED, STEP_STATUS_COMPLETED, STEP_STATUS_FAILED, } from '../constants.js';
|
|
4
|
+
import { BooleanResultSchema, CancelJobOptionsSchema, CancelJobStepOptionsSchema, CompleteJobOptionsSchema, CompleteJobStepOptionsSchema, CreateJobOptionsSchema, CreateOrRecoverJobStepOptionsSchema, CreateOrRecoverJobStepResultNullableSchema, DelayJobStepOptionsSchema, DeleteJobOptionsSchema, DeleteJobsOptionsSchema, FailJobOptionsSchema, FailJobStepOptionsSchema, FetchOptionsSchema, GetActionsResultSchema, GetJobStepsOptionsSchema, GetJobStepsResultSchema, GetJobsOptionsSchema, GetJobsResultSchema, JobIdResultSchema, JobSchema, JobStatusResultSchema, JobStepSchema, JobStepStatusResultSchema, JobsArrayResultSchema, NumberResultSchema, RecoverJobsOptionsSchema, RetryJobOptionsSchema, } from './schemas.js';
|
|
5
|
+
export class Adapter extends EventEmitter {
|
|
6
|
+
#id;
|
|
7
|
+
#started = false;
|
|
8
|
+
#stopped = false;
|
|
9
|
+
#starting = null;
|
|
10
|
+
#stopping = null;
|
|
11
|
+
#logger = null;
|
|
12
|
+
async start() {
|
|
13
|
+
try {
|
|
14
|
+
if (!this.#id) {
|
|
15
|
+
throw new Error('Adapter ID is not set');
|
|
16
|
+
}
|
|
17
|
+
if (this.#stopping || this.#stopped) {
|
|
18
|
+
return false;
|
|
19
|
+
}
|
|
20
|
+
if (this.#started) {
|
|
21
|
+
return true;
|
|
22
|
+
}
|
|
23
|
+
if (this.#starting) {
|
|
24
|
+
return this.#starting;
|
|
25
|
+
}
|
|
26
|
+
this.#starting = (async () => {
|
|
27
|
+
await this._start();
|
|
28
|
+
this.#started = true;
|
|
29
|
+
this.#starting = null;
|
|
30
|
+
return true;
|
|
31
|
+
})();
|
|
32
|
+
return this.#starting;
|
|
33
|
+
}
|
|
34
|
+
catch (error) {
|
|
35
|
+
this.#logger?.error(error, 'Error in Adapter.start()');
|
|
36
|
+
throw error;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
async stop() {
|
|
40
|
+
try {
|
|
41
|
+
if (this.#stopped) {
|
|
42
|
+
return true;
|
|
43
|
+
}
|
|
44
|
+
if (this.#stopping) {
|
|
45
|
+
return this.#stopping;
|
|
46
|
+
}
|
|
47
|
+
this.#stopping = (async () => {
|
|
48
|
+
await this._stop();
|
|
49
|
+
this.#stopped = true;
|
|
50
|
+
this.#stopping = null;
|
|
51
|
+
return true;
|
|
52
|
+
})();
|
|
53
|
+
return this.#stopping;
|
|
54
|
+
}
|
|
55
|
+
catch (error) {
|
|
56
|
+
this.#logger?.error(error, 'Error in Adapter.stop()');
|
|
57
|
+
throw error;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
setId(id) {
|
|
61
|
+
try {
|
|
62
|
+
this.#id = id;
|
|
63
|
+
}
|
|
64
|
+
catch (error) {
|
|
65
|
+
this.#logger?.error(error, 'Error in Adapter.setId()');
|
|
66
|
+
throw error;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
setLogger(logger) {
|
|
70
|
+
try {
|
|
71
|
+
this.#logger = logger;
|
|
72
|
+
}
|
|
73
|
+
catch (error) {
|
|
74
|
+
this.#logger?.error(error, 'Error in Adapter.setLogger()');
|
|
75
|
+
throw error;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
get id() {
|
|
79
|
+
return this.#id;
|
|
80
|
+
}
|
|
81
|
+
get logger() {
|
|
82
|
+
return this.#logger;
|
|
83
|
+
}
|
|
84
|
+
async createJob(options) {
|
|
85
|
+
try {
|
|
86
|
+
await this.start();
|
|
87
|
+
const parsedOptions = CreateJobOptionsSchema.parse(options);
|
|
88
|
+
const result = await this._createJob(parsedOptions);
|
|
89
|
+
const jobId = JobIdResultSchema.parse(result);
|
|
90
|
+
if (jobId !== null) {
|
|
91
|
+
await this._notify('job-available', { jobId });
|
|
92
|
+
}
|
|
93
|
+
return jobId;
|
|
94
|
+
}
|
|
95
|
+
catch (error) {
|
|
96
|
+
this.#logger?.error(error, 'Error in Adapter.createJob()');
|
|
97
|
+
throw error;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
async completeJob(options) {
|
|
101
|
+
try {
|
|
102
|
+
await this.start();
|
|
103
|
+
const parsedOptions = CompleteJobOptionsSchema.parse(options);
|
|
104
|
+
const result = await this._completeJob(parsedOptions);
|
|
105
|
+
const success = BooleanResultSchema.parse(result);
|
|
106
|
+
if (success) {
|
|
107
|
+
await this._notify('job-status-changed', {
|
|
108
|
+
jobId: parsedOptions.jobId,
|
|
109
|
+
status: JOB_STATUS_COMPLETED,
|
|
110
|
+
ownerId: this.id,
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
return success;
|
|
114
|
+
}
|
|
115
|
+
catch (error) {
|
|
116
|
+
this.#logger?.error(error, 'Error in Adapter.completeJob()');
|
|
117
|
+
throw error;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
async failJob(options) {
|
|
121
|
+
try {
|
|
122
|
+
await this.start();
|
|
123
|
+
const parsedOptions = FailJobOptionsSchema.parse(options);
|
|
124
|
+
const result = await this._failJob(parsedOptions);
|
|
125
|
+
const success = BooleanResultSchema.parse(result);
|
|
126
|
+
if (success) {
|
|
127
|
+
await this._notify('job-status-changed', {
|
|
128
|
+
jobId: parsedOptions.jobId,
|
|
129
|
+
status: JOB_STATUS_FAILED,
|
|
130
|
+
ownerId: this.id,
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
return success;
|
|
134
|
+
}
|
|
135
|
+
catch (error) {
|
|
136
|
+
this.#logger?.error(error, 'Error in Adapter.failJob()');
|
|
137
|
+
throw error;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
async cancelJob(options) {
|
|
141
|
+
try {
|
|
142
|
+
await this.start();
|
|
143
|
+
const parsedOptions = CancelJobOptionsSchema.parse(options);
|
|
144
|
+
const result = await this._cancelJob(parsedOptions);
|
|
145
|
+
const success = BooleanResultSchema.parse(result);
|
|
146
|
+
if (success) {
|
|
147
|
+
await this._notify('job-status-changed', {
|
|
148
|
+
jobId: parsedOptions.jobId,
|
|
149
|
+
status: JOB_STATUS_CANCELLED,
|
|
150
|
+
ownerId: this.id,
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
return success;
|
|
154
|
+
}
|
|
155
|
+
catch (error) {
|
|
156
|
+
this.#logger?.error(error, 'Error in Adapter.cancelJob()');
|
|
157
|
+
throw error;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
async retryJob(options) {
|
|
161
|
+
try {
|
|
162
|
+
await this.start();
|
|
163
|
+
const parsedOptions = RetryJobOptionsSchema.parse(options);
|
|
164
|
+
const result = await this._retryJob(parsedOptions);
|
|
165
|
+
const jobId = JobIdResultSchema.parse(result);
|
|
166
|
+
if (jobId !== null) {
|
|
167
|
+
await this._notify('job-available', { jobId });
|
|
168
|
+
}
|
|
169
|
+
return jobId;
|
|
170
|
+
}
|
|
171
|
+
catch (error) {
|
|
172
|
+
this.#logger?.error(error, 'Error in Adapter.retryJob()');
|
|
173
|
+
throw error;
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
async deleteJob(options) {
|
|
177
|
+
try {
|
|
178
|
+
await this.start();
|
|
179
|
+
const parsedOptions = DeleteJobOptionsSchema.parse(options);
|
|
180
|
+
const result = await this._deleteJob(parsedOptions);
|
|
181
|
+
return BooleanResultSchema.parse(result);
|
|
182
|
+
}
|
|
183
|
+
catch (error) {
|
|
184
|
+
this.#logger?.error(error, 'Error in Adapter.deleteJob()');
|
|
185
|
+
throw error;
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
async deleteJobs(options) {
|
|
189
|
+
try {
|
|
190
|
+
await this.start();
|
|
191
|
+
const parsedOptions = options ? DeleteJobsOptionsSchema.parse(options) : undefined;
|
|
192
|
+
const result = await this._deleteJobs(parsedOptions);
|
|
193
|
+
return NumberResultSchema.parse(result);
|
|
194
|
+
}
|
|
195
|
+
catch (error) {
|
|
196
|
+
this.#logger?.error(error, 'Error in Adapter.deleteJobs()');
|
|
197
|
+
throw error;
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
async fetch(options) {
|
|
201
|
+
try {
|
|
202
|
+
await this.start();
|
|
203
|
+
const parsedOptions = FetchOptionsSchema.parse(options);
|
|
204
|
+
const result = await this._fetch(parsedOptions);
|
|
205
|
+
return JobsArrayResultSchema.parse(result);
|
|
206
|
+
}
|
|
207
|
+
catch (error) {
|
|
208
|
+
this.#logger?.error(error, 'Error in Adapter.fetch()');
|
|
209
|
+
throw error;
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
async recoverJobs(options) {
|
|
213
|
+
try {
|
|
214
|
+
await this.start();
|
|
215
|
+
const parsedOptions = RecoverJobsOptionsSchema.parse(options);
|
|
216
|
+
const result = await this._recoverJobs(parsedOptions);
|
|
217
|
+
return NumberResultSchema.parse(result);
|
|
218
|
+
}
|
|
219
|
+
catch (error) {
|
|
220
|
+
this.#logger?.error(error, 'Error in Adapter.recoverJobs()');
|
|
221
|
+
throw error;
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
async createOrRecoverJobStep(options) {
|
|
225
|
+
try {
|
|
226
|
+
await this.start();
|
|
227
|
+
const parsedOptions = CreateOrRecoverJobStepOptionsSchema.parse(options);
|
|
228
|
+
const result = await this._createOrRecoverJobStep(parsedOptions);
|
|
229
|
+
return CreateOrRecoverJobStepResultNullableSchema.parse(result);
|
|
230
|
+
}
|
|
231
|
+
catch (error) {
|
|
232
|
+
this.#logger?.error(error, 'Error in Adapter.createOrRecoverJobStep()');
|
|
233
|
+
throw error;
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
async completeJobStep(options) {
|
|
237
|
+
try {
|
|
238
|
+
await this.start();
|
|
239
|
+
const parsedOptions = CompleteJobStepOptionsSchema.parse(options);
|
|
240
|
+
const result = await this._completeJobStep(parsedOptions);
|
|
241
|
+
const success = BooleanResultSchema.parse(result);
|
|
242
|
+
if (success) {
|
|
243
|
+
const step = await this._getJobStepById(parsedOptions.stepId);
|
|
244
|
+
if (step) {
|
|
245
|
+
await this._notify('step-status-changed', {
|
|
246
|
+
jobId: step.jobId,
|
|
247
|
+
stepId: parsedOptions.stepId,
|
|
248
|
+
status: STEP_STATUS_COMPLETED,
|
|
249
|
+
error: null,
|
|
250
|
+
ownerId: this.id,
|
|
251
|
+
});
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
return success;
|
|
255
|
+
}
|
|
256
|
+
catch (error) {
|
|
257
|
+
this.#logger?.error(error, 'Error in Adapter.completeJobStep()');
|
|
258
|
+
throw error;
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
async failJobStep(options) {
|
|
262
|
+
try {
|
|
263
|
+
await this.start();
|
|
264
|
+
const parsedOptions = FailJobStepOptionsSchema.parse(options);
|
|
265
|
+
const result = await this._failJobStep(parsedOptions);
|
|
266
|
+
const success = BooleanResultSchema.parse(result);
|
|
267
|
+
if (success) {
|
|
268
|
+
const step = await this._getJobStepById(parsedOptions.stepId);
|
|
269
|
+
if (step) {
|
|
270
|
+
await this._notify('step-status-changed', {
|
|
271
|
+
jobId: step.jobId,
|
|
272
|
+
stepId: parsedOptions.stepId,
|
|
273
|
+
status: STEP_STATUS_FAILED,
|
|
274
|
+
error: parsedOptions.error,
|
|
275
|
+
ownerId: this.id,
|
|
276
|
+
});
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
return success;
|
|
280
|
+
}
|
|
281
|
+
catch (error) {
|
|
282
|
+
this.#logger?.error(error, 'Error in Adapter.failJobStep()');
|
|
283
|
+
throw error;
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
async delayJobStep(options) {
|
|
287
|
+
try {
|
|
288
|
+
await this.start();
|
|
289
|
+
const parsedOptions = DelayJobStepOptionsSchema.parse(options);
|
|
290
|
+
const result = await this._delayJobStep(parsedOptions);
|
|
291
|
+
const success = BooleanResultSchema.parse(result);
|
|
292
|
+
if (success) {
|
|
293
|
+
const step = await this._getJobStepById(parsedOptions.stepId);
|
|
294
|
+
if (step) {
|
|
295
|
+
await this._notify('step-delayed', {
|
|
296
|
+
jobId: step.jobId,
|
|
297
|
+
stepId: parsedOptions.stepId,
|
|
298
|
+
delayedMs: parsedOptions.delayMs,
|
|
299
|
+
error: parsedOptions.error,
|
|
300
|
+
ownerId: this.id,
|
|
301
|
+
});
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
return success;
|
|
305
|
+
}
|
|
306
|
+
catch (error) {
|
|
307
|
+
this.#logger?.error(error, 'Error in Adapter.delayJobStep()');
|
|
308
|
+
throw error;
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
async cancelJobStep(options) {
|
|
312
|
+
try {
|
|
313
|
+
await this.start();
|
|
314
|
+
const parsedOptions = CancelJobStepOptionsSchema.parse(options);
|
|
315
|
+
const result = await this._cancelJobStep(parsedOptions);
|
|
316
|
+
const success = BooleanResultSchema.parse(result);
|
|
317
|
+
if (success) {
|
|
318
|
+
const step = await this._getJobStepById(parsedOptions.stepId);
|
|
319
|
+
if (step) {
|
|
320
|
+
await this._notify('step-status-changed', {
|
|
321
|
+
jobId: step.jobId,
|
|
322
|
+
stepId: parsedOptions.stepId,
|
|
323
|
+
status: STEP_STATUS_CANCELLED,
|
|
324
|
+
error: null,
|
|
325
|
+
ownerId: this.id,
|
|
326
|
+
});
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
return success;
|
|
330
|
+
}
|
|
331
|
+
catch (error) {
|
|
332
|
+
this.#logger?.error(error, 'Error in Adapter.cancelJobStep()');
|
|
333
|
+
throw error;
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
async getJobById(jobId) {
|
|
337
|
+
try {
|
|
338
|
+
const parsedJobId = z.string().parse(jobId);
|
|
339
|
+
const result = await this._getJobById(parsedJobId);
|
|
340
|
+
if (result === null) {
|
|
341
|
+
return null;
|
|
342
|
+
}
|
|
343
|
+
return JobSchema.parse(result);
|
|
344
|
+
}
|
|
345
|
+
catch (error) {
|
|
346
|
+
this.#logger?.error(error, 'Error in Adapter.getJobById()');
|
|
347
|
+
throw error;
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
async getJobSteps(options) {
|
|
351
|
+
try {
|
|
352
|
+
const parsedOptions = GetJobStepsOptionsSchema.parse(options);
|
|
353
|
+
const result = await this._getJobSteps(parsedOptions);
|
|
354
|
+
return GetJobStepsResultSchema.parse(result);
|
|
355
|
+
}
|
|
356
|
+
catch (error) {
|
|
357
|
+
this.#logger?.error(error, 'Error in Adapter.getJobSteps()');
|
|
358
|
+
throw error;
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
async getJobs(options) {
|
|
362
|
+
try {
|
|
363
|
+
const parsedOptions = options ? GetJobsOptionsSchema.parse(options) : undefined;
|
|
364
|
+
const result = await this._getJobs(parsedOptions);
|
|
365
|
+
return GetJobsResultSchema.parse(result);
|
|
366
|
+
}
|
|
367
|
+
catch (error) {
|
|
368
|
+
this.#logger?.error(error, 'Error in Adapter.getJobs()');
|
|
369
|
+
throw error;
|
|
370
|
+
}
|
|
371
|
+
}
|
|
372
|
+
async getJobStepById(stepId) {
|
|
373
|
+
try {
|
|
374
|
+
const parsedStepId = z.string().parse(stepId);
|
|
375
|
+
const result = await this._getJobStepById(parsedStepId);
|
|
376
|
+
if (result === null) {
|
|
377
|
+
return null;
|
|
378
|
+
}
|
|
379
|
+
return JobStepSchema.parse(result);
|
|
380
|
+
}
|
|
381
|
+
catch (error) {
|
|
382
|
+
this.#logger?.error(error, 'Error in Adapter.getJobStepById()');
|
|
383
|
+
throw error;
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
async getJobStatus(jobId) {
|
|
387
|
+
try {
|
|
388
|
+
const parsedJobId = z.string().parse(jobId);
|
|
389
|
+
const result = await this._getJobStatus(parsedJobId);
|
|
390
|
+
if (result === null) {
|
|
391
|
+
return null;
|
|
392
|
+
}
|
|
393
|
+
return JobStatusResultSchema.parse(result);
|
|
394
|
+
}
|
|
395
|
+
catch (error) {
|
|
396
|
+
this.#logger?.error(error, 'Error in Adapter.getJobStatus()');
|
|
397
|
+
throw error;
|
|
398
|
+
}
|
|
399
|
+
}
|
|
400
|
+
async getJobStepStatus(stepId) {
|
|
401
|
+
try {
|
|
402
|
+
const parsedStepId = z.string().parse(stepId);
|
|
403
|
+
const result = await this._getJobStepStatus(parsedStepId);
|
|
404
|
+
if (result === null) {
|
|
405
|
+
return null;
|
|
406
|
+
}
|
|
407
|
+
return JobStepStatusResultSchema.parse(result);
|
|
408
|
+
}
|
|
409
|
+
catch (error) {
|
|
410
|
+
this.#logger?.error(error, 'Error in Adapter.getJobStepStatus()');
|
|
411
|
+
throw error;
|
|
412
|
+
}
|
|
413
|
+
}
|
|
414
|
+
async getActions() {
|
|
415
|
+
try {
|
|
416
|
+
const result = await this._getActions();
|
|
417
|
+
return GetActionsResultSchema.parse(result);
|
|
418
|
+
}
|
|
419
|
+
catch (error) {
|
|
420
|
+
this.#logger?.error(error, 'Error in Adapter.getActions()');
|
|
421
|
+
throw error;
|
|
422
|
+
}
|
|
423
|
+
}
|
|
424
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"drizzle.config.d.ts","sourceRoot":"","sources":["../../../src/adapters/postgres/drizzle.config.ts"],"names":[],"mappings":";AAEA,wBAQE"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { PostgresAdapterOptions } from './postgres.js';
|
|
2
|
+
import { PostgresAdapter } from './postgres.js';
|
|
3
|
+
export declare class PGLiteAdapter extends PostgresAdapter {
|
|
4
|
+
_stop(): Promise<void>;
|
|
5
|
+
protected _map(result: any): any;
|
|
6
|
+
protected _initDb(): void;
|
|
7
|
+
protected _notify(event: string, data: any): Promise<void>;
|
|
8
|
+
protected _listen(event: string, callback: (payload: string) => void): Promise<{
|
|
9
|
+
unlisten: () => void;
|
|
10
|
+
}>;
|
|
11
|
+
}
|
|
12
|
+
export declare const pgliteAdapter: (options: PostgresAdapterOptions) => PGLiteAdapter;
|
|
13
|
+
//# sourceMappingURL=pglite.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pglite.d.ts","sourceRoot":"","sources":["../../../src/adapters/postgres/pglite.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAA;AAC3D,OAAO,EAAW,eAAe,EAAE,MAAM,eAAe,CAAA;AAUxD,qBAAa,aAAc,SAAQ,eAAe;IACjC,KAAK;cAWD,IAAI,CAAC,MAAM,EAAE,GAAG;cAQhB,OAAO;cAoBD,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;cAahD,OAAO,CAC9B,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,GAClC,OAAO,CAAC;QAAE,QAAQ,EAAE,MAAM,IAAI,CAAA;KAAE,CAAC;CAYrC;AAED,eAAO,MAAM,aAAa,GAAI,SAAS,sBAAsB,kBAE5D,CAAA"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { drizzle } from 'drizzle-orm/pglite';
|
|
2
|
+
import { PostgresAdapter } from './postgres.js';
|
|
3
|
+
export class PGLiteAdapter extends PostgresAdapter {
|
|
4
|
+
async _stop() {
|
|
5
|
+
await this.db.$client.close();
|
|
6
|
+
}
|
|
7
|
+
_map(result) {
|
|
8
|
+
return result.rows;
|
|
9
|
+
}
|
|
10
|
+
_initDb() {
|
|
11
|
+
let connection = ':memory:';
|
|
12
|
+
if (typeof this.options.connection === 'string' && !this.options.connection.startsWith('postgres://')) {
|
|
13
|
+
connection = this.options.connection;
|
|
14
|
+
}
|
|
15
|
+
if (connection === ':memory:') {
|
|
16
|
+
this.db = drizzle();
|
|
17
|
+
}
|
|
18
|
+
else {
|
|
19
|
+
this.db = drizzle(connection);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
async _notify(event, data) {
|
|
23
|
+
await this.db.$client.query(`NOTIFY "${this.options.schema}.${event}", '${JSON.stringify(data)}'`);
|
|
24
|
+
}
|
|
25
|
+
async _listen(event, callback) {
|
|
26
|
+
const unlisten = await this.db.$client.listen(`"${this.options.schema}.${event}"`, (payload) => {
|
|
27
|
+
callback(payload);
|
|
28
|
+
});
|
|
29
|
+
return {
|
|
30
|
+
unlisten,
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
export const pgliteAdapter = (options) => {
|
|
35
|
+
return new PGLiteAdapter(options);
|
|
36
|
+
};
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { drizzle } from 'drizzle-orm/postgres-js';
|
|
2
|
+
import type { Options as PostgresOptions } from 'postgres';
|
|
3
|
+
import { Adapter, type CancelJobOptions, type CancelJobStepOptions, type CompleteJobOptions, type CompleteJobStepOptions, type CreateJobOptions, type CreateOrRecoverJobStepOptions, type CreateOrRecoverJobStepResult, type DelayJobStepOptions, type DeleteJobOptions, type DeleteJobsOptions, type FailJobOptions, type FailJobStepOptions, type FetchOptions, type GetActionsResult, type GetJobStepsOptions, type GetJobStepsResult, type GetJobsOptions, type GetJobsResult, type Job, type JobStatusResult, type JobStep, type JobStepStatusResult, type RecoverJobsOptions, type RetryJobOptions } from '../adapter.js';
|
|
4
|
+
import createSchema from './schema.js';
|
|
5
|
+
type Schema = ReturnType<typeof createSchema>;
|
|
6
|
+
export type { Job, JobStep } from '../adapter.js';
|
|
7
|
+
export interface PostgresAdapterOptions {
|
|
8
|
+
connection: PostgresOptions<any> | string;
|
|
9
|
+
schema?: string;
|
|
10
|
+
migrateOnStart?: boolean;
|
|
11
|
+
}
|
|
12
|
+
export type DB = ReturnType<typeof drizzle<Schema>>;
|
|
13
|
+
export declare class PostgresAdapter extends Adapter {
|
|
14
|
+
#private;
|
|
15
|
+
protected options: Required<PostgresAdapterOptions>;
|
|
16
|
+
protected db: DB;
|
|
17
|
+
protected tables: Schema;
|
|
18
|
+
constructor(options: PostgresAdapterOptions);
|
|
19
|
+
protected _initDb(): void;
|
|
20
|
+
_start(): Promise<void>;
|
|
21
|
+
_stop(): Promise<void>;
|
|
22
|
+
protected _createJob({ queue, groupKey, input, timeoutMs, checksum, concurrencyLimit }: CreateJobOptions): Promise<string | null>;
|
|
23
|
+
protected _completeJob({ jobId, output }: CompleteJobOptions): Promise<boolean>;
|
|
24
|
+
protected _failJob({ jobId, error }: FailJobOptions): Promise<boolean>;
|
|
25
|
+
protected _cancelJob({ jobId }: CancelJobOptions): Promise<boolean>;
|
|
26
|
+
protected _retryJob({ jobId }: RetryJobOptions): Promise<string | null>;
|
|
27
|
+
protected _deleteJob({ jobId }: DeleteJobOptions): Promise<boolean>;
|
|
28
|
+
protected _deleteJobs(options?: DeleteJobsOptions): Promise<number>;
|
|
29
|
+
protected _fetch({ batch }: FetchOptions): Promise<any>;
|
|
30
|
+
protected _recoverJobs(options: RecoverJobsOptions): Promise<number>;
|
|
31
|
+
protected _createOrRecoverJobStep({ jobId, name, timeoutMs, retriesLimit, }: CreateOrRecoverJobStepOptions): Promise<CreateOrRecoverJobStepResult | null>;
|
|
32
|
+
protected _completeJobStep({ stepId, output }: CompleteJobStepOptions): Promise<boolean>;
|
|
33
|
+
protected _failJobStep({ stepId, error }: FailJobStepOptions): Promise<boolean>;
|
|
34
|
+
protected _delayJobStep({ stepId, delayMs, error }: DelayJobStepOptions): Promise<boolean>;
|
|
35
|
+
protected _cancelJobStep({ stepId }: CancelJobStepOptions): Promise<boolean>;
|
|
36
|
+
protected _getJobById(jobId: string): Promise<Job | null>;
|
|
37
|
+
protected _getJobSteps(options: GetJobStepsOptions): Promise<GetJobStepsResult>;
|
|
38
|
+
protected _buildJobsWhereClause(filters: GetJobsOptions['filters']): import("drizzle-orm").SQL<unknown> | undefined;
|
|
39
|
+
protected _getJobs(options?: GetJobsOptions): Promise<GetJobsResult>;
|
|
40
|
+
protected _getJobStepById(stepId: string): Promise<JobStep | null>;
|
|
41
|
+
protected _getJobStatus(jobId: string): Promise<JobStatusResult | null>;
|
|
42
|
+
protected _getJobStepStatus(stepId: string): Promise<JobStepStatusResult | null>;
|
|
43
|
+
protected _getActions(): Promise<GetActionsResult>;
|
|
44
|
+
protected _notify(event: string, data: any): Promise<void>;
|
|
45
|
+
protected _listen(event: string, callback: (payload: string) => void): Promise<{
|
|
46
|
+
unlisten: () => void;
|
|
47
|
+
}>;
|
|
48
|
+
protected _map(result: any): any;
|
|
49
|
+
}
|
|
50
|
+
export declare const postgresAdapter: (options: PostgresAdapterOptions) => PostgresAdapter;
|
|
51
|
+
//# sourceMappingURL=postgres.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"postgres.d.ts","sourceRoot":"","sources":["../../../src/adapters/postgres/postgres.ts"],"names":[],"mappings":"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"}
|