nest-scheduler-engine 1.0.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 +21 -0
- package/README.md +374 -0
- package/dist/decorators/event-handler.decorator.d.ts +2 -0
- package/dist/decorators/event-handler.decorator.js +12 -0
- package/dist/decorators/event-handler.decorator.js.map +1 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.js +25 -0
- package/dist/index.js.map +1 -0
- package/dist/interfaces/cache-adapter.interface.d.ts +7 -0
- package/dist/interfaces/cache-adapter.interface.js +3 -0
- package/dist/interfaces/cache-adapter.interface.js.map +1 -0
- package/dist/interfaces/config.interface.d.ts +43 -0
- package/dist/interfaces/config.interface.js +3 -0
- package/dist/interfaces/config.interface.js.map +1 -0
- package/dist/interfaces/database-adapter.interface.d.ts +8 -0
- package/dist/interfaces/database-adapter.interface.js +3 -0
- package/dist/interfaces/database-adapter.interface.js.map +1 -0
- package/dist/interfaces/event-handler.interface.d.ts +15 -0
- package/dist/interfaces/event-handler.interface.js +3 -0
- package/dist/interfaces/event-handler.interface.js.map +1 -0
- package/dist/interfaces/index.d.ts +6 -0
- package/dist/interfaces/index.js +23 -0
- package/dist/interfaces/index.js.map +1 -0
- package/dist/interfaces/logger-adapter.interface.d.ts +6 -0
- package/dist/interfaces/logger-adapter.interface.js +3 -0
- package/dist/interfaces/logger-adapter.interface.js.map +1 -0
- package/dist/interfaces/queue-adapter.interface.d.ts +14 -0
- package/dist/interfaces/queue-adapter.interface.js +3 -0
- package/dist/interfaces/queue-adapter.interface.js.map +1 -0
- package/dist/migrations/index.d.ts +9 -0
- package/dist/migrations/index.js +142 -0
- package/dist/migrations/index.js.map +1 -0
- package/dist/models/dead-letter.model.d.ts +8 -0
- package/dist/models/dead-letter.model.js +10 -0
- package/dist/models/dead-letter.model.js.map +1 -0
- package/dist/models/event-execution.model.d.ts +13 -0
- package/dist/models/event-execution.model.js +19 -0
- package/dist/models/event-execution.model.js.map +1 -0
- package/dist/models/event-instance.model.d.ts +22 -0
- package/dist/models/event-instance.model.js +22 -0
- package/dist/models/event-instance.model.js.map +1 -0
- package/dist/models/event-type.model.d.ts +14 -0
- package/dist/models/event-type.model.js +17 -0
- package/dist/models/event-type.model.js.map +1 -0
- package/dist/models/index.d.ts +4 -0
- package/dist/models/index.js +21 -0
- package/dist/models/index.js.map +1 -0
- package/dist/registry/handler.registry.d.ts +18 -0
- package/dist/registry/handler.registry.js +69 -0
- package/dist/registry/handler.registry.js.map +1 -0
- package/dist/scheduler.module.d.ts +10 -0
- package/dist/scheduler.module.js +183 -0
- package/dist/scheduler.module.js.map +1 -0
- package/dist/services/dispatcher.service.d.ts +26 -0
- package/dist/services/dispatcher.service.js +250 -0
- package/dist/services/dispatcher.service.js.map +1 -0
- package/dist/services/event-manager.service.d.ts +31 -0
- package/dist/services/event-manager.service.js +319 -0
- package/dist/services/event-manager.service.js.map +1 -0
- package/dist/services/polling-engine.service.d.ts +23 -0
- package/dist/services/polling-engine.service.js +162 -0
- package/dist/services/polling-engine.service.js.map +1 -0
- package/dist/services/scheduler.service.d.ts +24 -0
- package/dist/services/scheduler.service.js +67 -0
- package/dist/services/scheduler.service.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/dist/types/enums.d.ts +21 -0
- package/dist/types/enums.js +29 -0
- package/dist/types/enums.js.map +1 -0
- package/dist/types/index.d.ts +2 -0
- package/dist/types/index.js +19 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/inputs.d.ts +33 -0
- package/dist/types/inputs.js +3 -0
- package/dist/types/inputs.js.map +1 -0
- package/dist/utils/console-logger.d.ts +7 -0
- package/dist/utils/console-logger.js +19 -0
- package/dist/utils/console-logger.js.map +1 -0
- package/dist/utils/retry-helper.d.ts +3 -0
- package/dist/utils/retry-helper.js +16 -0
- package/dist/utils/retry-helper.js.map +1 -0
- package/dist/utils/rrule-helper.d.ts +2 -0
- package/dist/utils/rrule-helper.js +24 -0
- package/dist/utils/rrule-helper.js.map +1 -0
- package/package.json +50 -0
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getMigrations = getMigrations;
|
|
4
|
+
function getMigrations(options = {}) {
|
|
5
|
+
const prefix = options.tablePrefix || "";
|
|
6
|
+
return [
|
|
7
|
+
{
|
|
8
|
+
version: "001_create_event_types",
|
|
9
|
+
up: getCreateEventTypesUp(prefix),
|
|
10
|
+
down: getCreateEventTypesDown(prefix),
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
version: "002_create_event_instances",
|
|
14
|
+
up: getCreateEventInstancesUp(prefix),
|
|
15
|
+
down: getCreateEventInstancesDown(prefix),
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
version: "003_create_event_executions",
|
|
19
|
+
up: getCreateEventExecutionsUp(prefix),
|
|
20
|
+
down: getCreateEventExecutionsDown(prefix),
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
version: "004_create_dead_letters",
|
|
24
|
+
up: getCreateDeadLettersUp(prefix),
|
|
25
|
+
down: getCreateDeadLettersDown(prefix),
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
version: "005_create_indexes",
|
|
29
|
+
up: getCreateIndexesUp(prefix),
|
|
30
|
+
down: getCreateIndexesDown(prefix),
|
|
31
|
+
},
|
|
32
|
+
];
|
|
33
|
+
}
|
|
34
|
+
function getCreateEventTypesUp(prefix) {
|
|
35
|
+
return `
|
|
36
|
+
CREATE TABLE IF NOT EXISTS ${prefix}event_types (
|
|
37
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
38
|
+
name VARCHAR(100) UNIQUE NOT NULL,
|
|
39
|
+
description TEXT,
|
|
40
|
+
retry_max INTEGER DEFAULT 3,
|
|
41
|
+
retry_delay_ms INTEGER DEFAULT 5000,
|
|
42
|
+
retry_backoff VARCHAR(20) DEFAULT 'exponential',
|
|
43
|
+
created_at TIMESTAMPTZ DEFAULT NOW(),
|
|
44
|
+
updated_at TIMESTAMPTZ DEFAULT NOW()
|
|
45
|
+
);
|
|
46
|
+
`.trim();
|
|
47
|
+
}
|
|
48
|
+
function getCreateEventTypesDown(prefix) {
|
|
49
|
+
return `DROP TABLE IF EXISTS ${prefix}event_types CASCADE;`;
|
|
50
|
+
}
|
|
51
|
+
function getCreateEventInstancesUp(prefix) {
|
|
52
|
+
return `
|
|
53
|
+
CREATE TABLE IF NOT EXISTS ${prefix}event_instances (
|
|
54
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
55
|
+
event_type_id UUID NOT NULL REFERENCES ${prefix}event_types(id) ON DELETE CASCADE,
|
|
56
|
+
payload JSONB NOT NULL DEFAULT '{}',
|
|
57
|
+
schedule_type VARCHAR(20) NOT NULL,
|
|
58
|
+
scheduled_at TIMESTAMPTZ,
|
|
59
|
+
rrule TEXT,
|
|
60
|
+
next_run_at TIMESTAMPTZ NOT NULL,
|
|
61
|
+
status VARCHAR(20) NOT NULL DEFAULT 'ACTIVE',
|
|
62
|
+
retry_count INTEGER DEFAULT 0,
|
|
63
|
+
max_retries INTEGER DEFAULT 3,
|
|
64
|
+
locked_by VARCHAR(100),
|
|
65
|
+
locked_until TIMESTAMPTZ,
|
|
66
|
+
created_at TIMESTAMPTZ DEFAULT NOW(),
|
|
67
|
+
updated_at TIMESTAMPTZ DEFAULT NOW(),
|
|
68
|
+
|
|
69
|
+
CONSTRAINT chk_schedule_type CHECK (schedule_type IN ('ONE_TIME', 'RECURRING')),
|
|
70
|
+
CONSTRAINT chk_status CHECK (status IN ('ACTIVE', 'EXECUTING', 'PAUSED', 'COMPLETED', 'FAILED', 'DEAD'))
|
|
71
|
+
);
|
|
72
|
+
`.trim();
|
|
73
|
+
}
|
|
74
|
+
function getCreateEventInstancesDown(prefix) {
|
|
75
|
+
return `DROP TABLE IF EXISTS ${prefix}event_instances CASCADE;`;
|
|
76
|
+
}
|
|
77
|
+
function getCreateEventExecutionsUp(prefix) {
|
|
78
|
+
return `
|
|
79
|
+
CREATE TABLE IF NOT EXISTS ${prefix}event_executions (
|
|
80
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
81
|
+
event_instance_id UUID NOT NULL REFERENCES ${prefix}event_instances(id) ON DELETE CASCADE,
|
|
82
|
+
status VARCHAR(20) NOT NULL,
|
|
83
|
+
started_at TIMESTAMPTZ NOT NULL,
|
|
84
|
+
completed_at TIMESTAMPTZ,
|
|
85
|
+
error TEXT,
|
|
86
|
+
duration_ms INTEGER,
|
|
87
|
+
|
|
88
|
+
CONSTRAINT chk_execution_status CHECK (status IN ('SUCCESS', 'FAILURE', 'TIMEOUT'))
|
|
89
|
+
);
|
|
90
|
+
`.trim();
|
|
91
|
+
}
|
|
92
|
+
function getCreateEventExecutionsDown(prefix) {
|
|
93
|
+
return `DROP TABLE IF EXISTS ${prefix}event_executions CASCADE;`;
|
|
94
|
+
}
|
|
95
|
+
function getCreateDeadLettersUp(prefix) {
|
|
96
|
+
return `
|
|
97
|
+
CREATE TABLE IF NOT EXISTS ${prefix}dead_letters (
|
|
98
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
99
|
+
event_instance_id UUID NOT NULL REFERENCES ${prefix}event_instances(id) ON DELETE CASCADE,
|
|
100
|
+
last_error TEXT NOT NULL,
|
|
101
|
+
retry_count INTEGER NOT NULL,
|
|
102
|
+
dead_at TIMESTAMPTZ DEFAULT NOW()
|
|
103
|
+
);
|
|
104
|
+
`.trim();
|
|
105
|
+
}
|
|
106
|
+
function getCreateDeadLettersDown(prefix) {
|
|
107
|
+
return `DROP TABLE IF EXISTS ${prefix}dead_letters CASCADE;`;
|
|
108
|
+
}
|
|
109
|
+
function getCreateIndexesUp(prefix) {
|
|
110
|
+
return `
|
|
111
|
+
-- Partial index for polling performance
|
|
112
|
+
CREATE INDEX IF NOT EXISTS idx_${prefix}event_instances_due
|
|
113
|
+
ON ${prefix}event_instances (next_run_at)
|
|
114
|
+
WHERE status = 'ACTIVE';
|
|
115
|
+
|
|
116
|
+
-- Index for event type lookups
|
|
117
|
+
CREATE INDEX IF NOT EXISTS idx_${prefix}event_instances_type
|
|
118
|
+
ON ${prefix}event_instances (event_type_id);
|
|
119
|
+
|
|
120
|
+
-- Index for execution lookups
|
|
121
|
+
CREATE INDEX IF NOT EXISTS idx_${prefix}event_executions_instance
|
|
122
|
+
ON ${prefix}event_executions (event_instance_id);
|
|
123
|
+
|
|
124
|
+
-- Index for dead letter lookups
|
|
125
|
+
CREATE INDEX IF NOT EXISTS idx_${prefix}dead_letters_instance
|
|
126
|
+
ON ${prefix}dead_letters (event_instance_id);
|
|
127
|
+
|
|
128
|
+
-- Index for status queries
|
|
129
|
+
CREATE INDEX IF NOT EXISTS idx_${prefix}event_instances_status
|
|
130
|
+
ON ${prefix}event_instances (status);
|
|
131
|
+
`.trim();
|
|
132
|
+
}
|
|
133
|
+
function getCreateIndexesDown(prefix) {
|
|
134
|
+
return `
|
|
135
|
+
DROP INDEX IF EXISTS idx_${prefix}event_instances_due;
|
|
136
|
+
DROP INDEX IF EXISTS idx_${prefix}event_instances_type;
|
|
137
|
+
DROP INDEX IF EXISTS idx_${prefix}event_executions_instance;
|
|
138
|
+
DROP INDEX IF EXISTS idx_${prefix}dead_letters_instance;
|
|
139
|
+
DROP INDEX IF EXISTS idx_${prefix}event_instances_status;
|
|
140
|
+
`.trim();
|
|
141
|
+
}
|
|
142
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/migrations/index.ts"],"names":[],"mappings":";;AAmBA,sCA8BC;AA9BD,SAAgB,aAAa,CAAC,UAA4B,EAAE;IAC1D,MAAM,MAAM,GAAG,OAAO,CAAC,WAAW,IAAI,EAAE,CAAC;IAEzC,OAAO;QACL;YACE,OAAO,EAAE,wBAAwB;YACjC,EAAE,EAAE,qBAAqB,CAAC,MAAM,CAAC;YACjC,IAAI,EAAE,uBAAuB,CAAC,MAAM,CAAC;SACtC;QACD;YACE,OAAO,EAAE,4BAA4B;YACrC,EAAE,EAAE,yBAAyB,CAAC,MAAM,CAAC;YACrC,IAAI,EAAE,2BAA2B,CAAC,MAAM,CAAC;SAC1C;QACD;YACE,OAAO,EAAE,6BAA6B;YACtC,EAAE,EAAE,0BAA0B,CAAC,MAAM,CAAC;YACtC,IAAI,EAAE,4BAA4B,CAAC,MAAM,CAAC;SAC3C;QACD;YACE,OAAO,EAAE,yBAAyB;YAClC,EAAE,EAAE,sBAAsB,CAAC,MAAM,CAAC;YAClC,IAAI,EAAE,wBAAwB,CAAC,MAAM,CAAC;SACvC;QACD;YACE,OAAO,EAAE,oBAAoB;YAC7B,EAAE,EAAE,kBAAkB,CAAC,MAAM,CAAC;YAC9B,IAAI,EAAE,oBAAoB,CAAC,MAAM,CAAC;SACnC;KACF,CAAC;AACJ,CAAC;AAGD,SAAS,qBAAqB,CAAC,MAAc;IAC3C,OAAO;6BACoB,MAAM;;;;;;;;;;CAUlC,CAAC,IAAI,EAAE,CAAC;AACT,CAAC;AAED,SAAS,uBAAuB,CAAC,MAAc;IAC7C,OAAO,wBAAwB,MAAM,sBAAsB,CAAC;AAC9D,CAAC;AAGD,SAAS,yBAAyB,CAAC,MAAc;IAC/C,OAAO;6BACoB,MAAM;;2CAEQ,MAAM;;;;;;;;;;;;;;;;;CAiBhD,CAAC,IAAI,EAAE,CAAC;AACT,CAAC;AAED,SAAS,2BAA2B,CAAC,MAAc;IACjD,OAAO,wBAAwB,MAAM,0BAA0B,CAAC;AAClE,CAAC;AAGD,SAAS,0BAA0B,CAAC,MAAc;IAChD,OAAO;6BACoB,MAAM;;+CAEY,MAAM;;;;;;;;;CASpD,CAAC,IAAI,EAAE,CAAC;AACT,CAAC;AAED,SAAS,4BAA4B,CAAC,MAAc;IAClD,OAAO,wBAAwB,MAAM,2BAA2B,CAAC;AACnE,CAAC;AAGD,SAAS,sBAAsB,CAAC,MAAc;IAC5C,OAAO;6BACoB,MAAM;;+CAEY,MAAM;;;;;CAKpD,CAAC,IAAI,EAAE,CAAC;AACT,CAAC;AAED,SAAS,wBAAwB,CAAC,MAAc;IAC9C,OAAO,wBAAwB,MAAM,uBAAuB,CAAC;AAC/D,CAAC;AAGD,SAAS,kBAAkB,CAAC,MAAc;IACxC,OAAO;;iCAEwB,MAAM;OAChC,MAAM;;;;iCAIoB,MAAM;OAChC,MAAM;;;iCAGoB,MAAM;OAChC,MAAM;;;iCAGoB,MAAM;OAChC,MAAM;;;iCAGoB,MAAM;OAChC,MAAM;CACZ,CAAC,IAAI,EAAE,CAAC;AACT,CAAC;AAED,SAAS,oBAAoB,CAAC,MAAc;IAC1C,OAAO;2BACkB,MAAM;2BACN,MAAM;2BACN,MAAM;2BACN,MAAM;2BACN,MAAM;CAChC,CAAC,IAAI,EAAE,CAAC;AACT,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DeadLetter = void 0;
|
|
4
|
+
class DeadLetter {
|
|
5
|
+
constructor(data) {
|
|
6
|
+
Object.assign(this, data);
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
exports.DeadLetter = DeadLetter;
|
|
10
|
+
//# sourceMappingURL=dead-letter.model.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dead-letter.model.js","sourceRoot":"","sources":["../../src/models/dead-letter.model.ts"],"names":[],"mappings":";;;AAGA,MAAa,UAAU;IAOrB,YAAY,IAAyB;QACnC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC5B,CAAC;CACF;AAVD,gCAUC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { ExecutionStatus } from '../types/enums';
|
|
2
|
+
export declare class EventExecution {
|
|
3
|
+
id: string;
|
|
4
|
+
eventInstanceId: string;
|
|
5
|
+
status: ExecutionStatus;
|
|
6
|
+
startedAt: Date;
|
|
7
|
+
completedAt: Date | null;
|
|
8
|
+
error: string | null;
|
|
9
|
+
durationMs: number | null;
|
|
10
|
+
constructor(data: Partial<EventExecution>);
|
|
11
|
+
isComplete(): boolean;
|
|
12
|
+
calculateDuration(): number | null;
|
|
13
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.EventExecution = void 0;
|
|
4
|
+
class EventExecution {
|
|
5
|
+
constructor(data) {
|
|
6
|
+
Object.assign(this, data);
|
|
7
|
+
}
|
|
8
|
+
isComplete() {
|
|
9
|
+
return this.completedAt !== null;
|
|
10
|
+
}
|
|
11
|
+
calculateDuration() {
|
|
12
|
+
if (this.completedAt && this.startedAt) {
|
|
13
|
+
return this.completedAt.getTime() - this.startedAt.getTime();
|
|
14
|
+
}
|
|
15
|
+
return null;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
exports.EventExecution = EventExecution;
|
|
19
|
+
//# sourceMappingURL=event-execution.model.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event-execution.model.js","sourceRoot":"","sources":["../../src/models/event-execution.model.ts"],"names":[],"mappings":";;;AAKA,MAAa,cAAc;IASzB,YAAY,IAA6B;QACvC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC5B,CAAC;IAKD,UAAU;QACR,OAAO,IAAI,CAAC,WAAW,KAAK,IAAI,CAAC;IACnC,CAAC;IAKD,iBAAiB;QACf,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACvC,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;QAC/D,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AA7BD,wCA6BC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { EventStatus, ScheduleType } from '../types/enums';
|
|
2
|
+
export declare class EventInstance {
|
|
3
|
+
id: string;
|
|
4
|
+
eventTypeId: string;
|
|
5
|
+
payload: Record<string, any>;
|
|
6
|
+
scheduleType: ScheduleType;
|
|
7
|
+
scheduledAt: Date | null;
|
|
8
|
+
rrule: string | null;
|
|
9
|
+
nextRunAt: Date;
|
|
10
|
+
status: EventStatus;
|
|
11
|
+
retryCount: number;
|
|
12
|
+
maxRetries: number;
|
|
13
|
+
lockedBy: string | null;
|
|
14
|
+
lockedUntil: Date | null;
|
|
15
|
+
createdAt: Date;
|
|
16
|
+
updatedAt: Date;
|
|
17
|
+
eventTypeName?: string;
|
|
18
|
+
constructor(data: Partial<EventInstance>);
|
|
19
|
+
isLocked(): boolean;
|
|
20
|
+
canRetry(): boolean;
|
|
21
|
+
isDue(): boolean;
|
|
22
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.EventInstance = void 0;
|
|
4
|
+
const enums_1 = require("../types/enums");
|
|
5
|
+
class EventInstance {
|
|
6
|
+
constructor(data) {
|
|
7
|
+
Object.assign(this, data);
|
|
8
|
+
}
|
|
9
|
+
isLocked() {
|
|
10
|
+
if (!this.lockedUntil)
|
|
11
|
+
return false;
|
|
12
|
+
return new Date() < this.lockedUntil;
|
|
13
|
+
}
|
|
14
|
+
canRetry() {
|
|
15
|
+
return this.retryCount < this.maxRetries;
|
|
16
|
+
}
|
|
17
|
+
isDue() {
|
|
18
|
+
return this.status === enums_1.EventStatus.ACTIVE && new Date() >= this.nextRunAt;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
exports.EventInstance = EventInstance;
|
|
22
|
+
//# sourceMappingURL=event-instance.model.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event-instance.model.js","sourceRoot":"","sources":["../../src/models/event-instance.model.ts"],"names":[],"mappings":";;;AAAA,0CAA2D;AAK3D,MAAa,aAAa;IAmBxB,YAAY,IAA4B;QACtC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC5B,CAAC;IAKD,QAAQ;QACN,IAAI,CAAC,IAAI,CAAC,WAAW;YAAE,OAAO,KAAK,CAAC;QACpC,OAAO,IAAI,IAAI,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC;IACvC,CAAC;IAKD,QAAQ;QACN,OAAO,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;IAC3C,CAAC;IAKD,KAAK;QACH,OAAO,IAAI,CAAC,MAAM,KAAK,mBAAW,CAAC,MAAM,IAAI,IAAI,IAAI,EAAE,IAAI,IAAI,CAAC,SAAS,CAAC;IAC5E,CAAC;CACF;AA5CD,sCA4CC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { RetryBackoff } from '../types/enums';
|
|
2
|
+
import { RetryPolicy } from '../types/inputs';
|
|
3
|
+
export declare class EventType {
|
|
4
|
+
id: string;
|
|
5
|
+
name: string;
|
|
6
|
+
description: string;
|
|
7
|
+
retryMax: number;
|
|
8
|
+
retryDelayMs: number;
|
|
9
|
+
retryBackoff: RetryBackoff;
|
|
10
|
+
createdAt: Date;
|
|
11
|
+
updatedAt: Date;
|
|
12
|
+
constructor(data: Partial<EventType>);
|
|
13
|
+
get retryPolicy(): RetryPolicy;
|
|
14
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.EventType = void 0;
|
|
4
|
+
class EventType {
|
|
5
|
+
constructor(data) {
|
|
6
|
+
Object.assign(this, data);
|
|
7
|
+
}
|
|
8
|
+
get retryPolicy() {
|
|
9
|
+
return {
|
|
10
|
+
maxRetries: this.retryMax,
|
|
11
|
+
delayMs: this.retryDelayMs,
|
|
12
|
+
backoff: this.retryBackoff,
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
exports.EventType = EventType;
|
|
17
|
+
//# sourceMappingURL=event-type.model.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event-type.model.js","sourceRoot":"","sources":["../../src/models/event-type.model.ts"],"names":[],"mappings":";;;AAMA,MAAa,SAAS;IAUpB,YAAY,IAAwB;QAClC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC5B,CAAC;IAED,IAAI,WAAW;QACb,OAAO;YACL,UAAU,EAAE,IAAI,CAAC,QAAQ;YACzB,OAAO,EAAE,IAAI,CAAC,YAAY;YAC1B,OAAO,EAAE,IAAI,CAAC,YAAY;SAC3B,CAAC;IACJ,CAAC;CACF;AArBD,8BAqBC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./event-type.model"), exports);
|
|
18
|
+
__exportStar(require("./event-instance.model"), exports);
|
|
19
|
+
__exportStar(require("./event-execution.model"), exports);
|
|
20
|
+
__exportStar(require("./dead-letter.model"), exports);
|
|
21
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/models/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,qDAAmC;AACnC,yDAAuC;AACvC,0DAAwC;AACxC,sDAAoC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { OnModuleInit } from "@nestjs/common";
|
|
2
|
+
import { DiscoveryService, MetadataScanner, Reflector } from "@nestjs/core";
|
|
3
|
+
import { IEventHandler } from "../interfaces/event-handler.interface";
|
|
4
|
+
export declare class HandlerRegistry implements OnModuleInit {
|
|
5
|
+
private readonly discoveryService;
|
|
6
|
+
private readonly metadataScanner;
|
|
7
|
+
private readonly reflector;
|
|
8
|
+
private readonly handlers;
|
|
9
|
+
constructor(discoveryService: DiscoveryService, metadataScanner: MetadataScanner, reflector: Reflector);
|
|
10
|
+
onModuleInit(): Promise<void>;
|
|
11
|
+
private discoverHandlers;
|
|
12
|
+
private isEventHandler;
|
|
13
|
+
register(eventType: string, handler: IEventHandler): void;
|
|
14
|
+
get(eventType: string): IEventHandler | undefined;
|
|
15
|
+
has(eventType: string): boolean;
|
|
16
|
+
getEventTypes(): string[];
|
|
17
|
+
getAll(): Map<string, IEventHandler>;
|
|
18
|
+
}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.HandlerRegistry = void 0;
|
|
13
|
+
const common_1 = require("@nestjs/common");
|
|
14
|
+
const core_1 = require("@nestjs/core");
|
|
15
|
+
const event_handler_decorator_1 = require("../decorators/event-handler.decorator");
|
|
16
|
+
let HandlerRegistry = class HandlerRegistry {
|
|
17
|
+
constructor(discoveryService, metadataScanner, reflector) {
|
|
18
|
+
this.discoveryService = discoveryService;
|
|
19
|
+
this.metadataScanner = metadataScanner;
|
|
20
|
+
this.reflector = reflector;
|
|
21
|
+
this.handlers = new Map();
|
|
22
|
+
}
|
|
23
|
+
async onModuleInit() {
|
|
24
|
+
await this.discoverHandlers();
|
|
25
|
+
}
|
|
26
|
+
async discoverHandlers() {
|
|
27
|
+
const providers = this.discoveryService.getProviders();
|
|
28
|
+
for (const wrapper of providers) {
|
|
29
|
+
const { instance } = wrapper;
|
|
30
|
+
if (!instance || typeof instance !== "object") {
|
|
31
|
+
continue;
|
|
32
|
+
}
|
|
33
|
+
const eventType = this.reflector.get(event_handler_decorator_1.EVENT_HANDLER_METADATA, instance.constructor);
|
|
34
|
+
if (eventType && this.isEventHandler(instance)) {
|
|
35
|
+
this.register(eventType, instance);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
isEventHandler(instance) {
|
|
40
|
+
return (typeof instance.handle === "function" &&
|
|
41
|
+
typeof instance.eventType === "string");
|
|
42
|
+
}
|
|
43
|
+
register(eventType, handler) {
|
|
44
|
+
if (this.handlers.has(eventType)) {
|
|
45
|
+
throw new Error(`Event handler for type "${eventType}" is already registered`);
|
|
46
|
+
}
|
|
47
|
+
this.handlers.set(eventType, handler);
|
|
48
|
+
}
|
|
49
|
+
get(eventType) {
|
|
50
|
+
return this.handlers.get(eventType);
|
|
51
|
+
}
|
|
52
|
+
has(eventType) {
|
|
53
|
+
return this.handlers.has(eventType);
|
|
54
|
+
}
|
|
55
|
+
getEventTypes() {
|
|
56
|
+
return Array.from(this.handlers.keys());
|
|
57
|
+
}
|
|
58
|
+
getAll() {
|
|
59
|
+
return new Map(this.handlers);
|
|
60
|
+
}
|
|
61
|
+
};
|
|
62
|
+
exports.HandlerRegistry = HandlerRegistry;
|
|
63
|
+
exports.HandlerRegistry = HandlerRegistry = __decorate([
|
|
64
|
+
(0, common_1.Injectable)(),
|
|
65
|
+
__metadata("design:paramtypes", [core_1.DiscoveryService,
|
|
66
|
+
core_1.MetadataScanner,
|
|
67
|
+
core_1.Reflector])
|
|
68
|
+
], HandlerRegistry);
|
|
69
|
+
//# sourceMappingURL=handler.registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handler.registry.js","sourceRoot":"","sources":["../../src/registry/handler.registry.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAA0D;AAC1D,uCAA4E;AAG5E,mFAA+E;AAOxE,IAAM,eAAe,GAArB,MAAM,eAAe;IAG1B,YACmB,gBAAkC,EAClC,eAAgC,EAChC,SAAoB;QAFpB,qBAAgB,GAAhB,gBAAgB,CAAkB;QAClC,oBAAe,GAAf,eAAe,CAAiB;QAChC,cAAS,GAAT,SAAS,CAAW;QALtB,aAAQ,GAAG,IAAI,GAAG,EAAyB,CAAC;IAM1D,CAAC;IAEJ,KAAK,CAAC,YAAY;QAChB,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;IAChC,CAAC;IAKO,KAAK,CAAC,gBAAgB;QAC5B,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,YAAY,EAAE,CAAC;QAEvD,KAAK,MAAM,OAAO,IAAI,SAAS,EAAE,CAAC;YAChC,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC;YAC7B,IAAI,CAAC,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;gBAC9C,SAAS;YACX,CAAC;YAED,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAClC,gDAAsB,EACtB,QAAQ,CAAC,WAAW,CACrB,CAAC;YAEF,IAAI,SAAS,IAAI,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC/C,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,QAAyB,CAAC,CAAC;YACtD,CAAC;QACH,CAAC;IACH,CAAC;IAKO,cAAc,CAAC,QAAa;QAClC,OAAO,CACL,OAAO,QAAQ,CAAC,MAAM,KAAK,UAAU;YACrC,OAAO,QAAQ,CAAC,SAAS,KAAK,QAAQ,CACvC,CAAC;IACJ,CAAC;IAKD,QAAQ,CAAC,SAAiB,EAAE,OAAsB;QAChD,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;YACjC,MAAM,IAAI,KAAK,CACb,2BAA2B,SAAS,yBAAyB,CAC9D,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IACxC,CAAC;IAKD,GAAG,CAAC,SAAiB;QACnB,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACtC,CAAC;IAKD,GAAG,CAAC,SAAiB;QACnB,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACtC,CAAC;IAKD,aAAa;QACX,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;IAC1C,CAAC;IAKD,MAAM;QACJ,OAAO,IAAI,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAChC,CAAC;CACF,CAAA;AArFY,0CAAe;0BAAf,eAAe;IAD3B,IAAA,mBAAU,GAAE;qCAK0B,uBAAgB;QACjB,sBAAe;QACrB,gBAAS;GAN5B,eAAe,CAqF3B"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { DynamicModule } from '@nestjs/common';
|
|
2
|
+
import { SchedulerModuleOptions, SchedulerModuleAsyncOptions } from './interfaces/config.interface';
|
|
3
|
+
export declare class SchedulerModule {
|
|
4
|
+
static forRoot(options: SchedulerModuleOptions): DynamicModule;
|
|
5
|
+
static forRootAsync(options: SchedulerModuleAsyncOptions): DynamicModule;
|
|
6
|
+
private static createProviders;
|
|
7
|
+
private static createAsyncProviders;
|
|
8
|
+
private static createAdapterProvider;
|
|
9
|
+
private static resolveAdapter;
|
|
10
|
+
}
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var SchedulerModule_1;
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.SchedulerModule = void 0;
|
|
11
|
+
const common_1 = require("@nestjs/common");
|
|
12
|
+
const core_1 = require("@nestjs/core");
|
|
13
|
+
const console_logger_1 = require("./utils/console-logger");
|
|
14
|
+
const event_manager_service_1 = require("./services/event-manager.service");
|
|
15
|
+
const polling_engine_service_1 = require("./services/polling-engine.service");
|
|
16
|
+
const dispatcher_service_1 = require("./services/dispatcher.service");
|
|
17
|
+
const scheduler_service_1 = require("./services/scheduler.service");
|
|
18
|
+
const handler_registry_1 = require("./registry/handler.registry");
|
|
19
|
+
const DEFAULT_CONFIG = {
|
|
20
|
+
pollingIntervalMs: 5000,
|
|
21
|
+
lockDurationMs: 30000,
|
|
22
|
+
batchSize: 50,
|
|
23
|
+
concurrency: 10,
|
|
24
|
+
deadLetterEnabled: true,
|
|
25
|
+
tablePrefix: '',
|
|
26
|
+
workerMode: true,
|
|
27
|
+
pollerOnly: false,
|
|
28
|
+
};
|
|
29
|
+
let SchedulerModule = SchedulerModule_1 = class SchedulerModule {
|
|
30
|
+
static forRoot(options) {
|
|
31
|
+
const providers = this.createProviders(options);
|
|
32
|
+
return {
|
|
33
|
+
module: SchedulerModule_1,
|
|
34
|
+
imports: [core_1.DiscoveryModule],
|
|
35
|
+
providers,
|
|
36
|
+
exports: [scheduler_service_1.SchedulerService, event_manager_service_1.EventManager, handler_registry_1.HandlerRegistry],
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
static forRootAsync(options) {
|
|
40
|
+
const providers = this.createAsyncProviders(options);
|
|
41
|
+
return {
|
|
42
|
+
module: SchedulerModule_1,
|
|
43
|
+
imports: [...(options.imports || []), core_1.DiscoveryModule],
|
|
44
|
+
providers,
|
|
45
|
+
exports: [scheduler_service_1.SchedulerService, event_manager_service_1.EventManager, handler_registry_1.HandlerRegistry],
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
static createProviders(options) {
|
|
49
|
+
const config = {
|
|
50
|
+
...DEFAULT_CONFIG,
|
|
51
|
+
...options.config,
|
|
52
|
+
};
|
|
53
|
+
const hooks = options.hooks || {};
|
|
54
|
+
return [
|
|
55
|
+
{
|
|
56
|
+
provide: 'SCHEDULER_CONFIG',
|
|
57
|
+
useValue: config,
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
provide: 'TABLE_PREFIX',
|
|
61
|
+
useValue: config.tablePrefix || '',
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
provide: 'SCHEDULER_HOOKS',
|
|
65
|
+
useValue: hooks,
|
|
66
|
+
},
|
|
67
|
+
this.createAdapterProvider('DATABASE_ADAPTER', options.database),
|
|
68
|
+
this.createAdapterProvider('QUEUE_ADAPTER', options.queue),
|
|
69
|
+
options.logger
|
|
70
|
+
? this.createAdapterProvider('LOGGER_ADAPTER', options.logger)
|
|
71
|
+
: {
|
|
72
|
+
provide: 'LOGGER_ADAPTER',
|
|
73
|
+
useClass: console_logger_1.ConsoleLogger,
|
|
74
|
+
},
|
|
75
|
+
...(options.cache
|
|
76
|
+
? [this.createAdapterProvider('CACHE_ADAPTER', options.cache)]
|
|
77
|
+
: []),
|
|
78
|
+
handler_registry_1.HandlerRegistry,
|
|
79
|
+
event_manager_service_1.EventManager,
|
|
80
|
+
polling_engine_service_1.PollingEngine,
|
|
81
|
+
dispatcher_service_1.Dispatcher,
|
|
82
|
+
scheduler_service_1.SchedulerService,
|
|
83
|
+
];
|
|
84
|
+
}
|
|
85
|
+
static createAsyncProviders(options) {
|
|
86
|
+
return [
|
|
87
|
+
{
|
|
88
|
+
provide: 'SCHEDULER_OPTIONS',
|
|
89
|
+
useFactory: options.useFactory,
|
|
90
|
+
inject: options.inject || [],
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
provide: 'SCHEDULER_CONFIG',
|
|
94
|
+
useFactory: (opts) => ({
|
|
95
|
+
...DEFAULT_CONFIG,
|
|
96
|
+
...opts.config,
|
|
97
|
+
}),
|
|
98
|
+
inject: ['SCHEDULER_OPTIONS'],
|
|
99
|
+
},
|
|
100
|
+
{
|
|
101
|
+
provide: 'TABLE_PREFIX',
|
|
102
|
+
useFactory: (opts) => opts.config?.tablePrefix || '',
|
|
103
|
+
inject: ['SCHEDULER_OPTIONS'],
|
|
104
|
+
},
|
|
105
|
+
{
|
|
106
|
+
provide: 'SCHEDULER_HOOKS',
|
|
107
|
+
useFactory: (opts) => opts.hooks || {},
|
|
108
|
+
inject: ['SCHEDULER_OPTIONS'],
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
provide: 'DATABASE_ADAPTER',
|
|
112
|
+
useFactory: async (opts) => {
|
|
113
|
+
return this.resolveAdapter(opts.database);
|
|
114
|
+
},
|
|
115
|
+
inject: ['SCHEDULER_OPTIONS', ...(options.inject || [])],
|
|
116
|
+
},
|
|
117
|
+
{
|
|
118
|
+
provide: 'QUEUE_ADAPTER',
|
|
119
|
+
useFactory: async (opts) => {
|
|
120
|
+
return this.resolveAdapter(opts.queue);
|
|
121
|
+
},
|
|
122
|
+
inject: ['SCHEDULER_OPTIONS', ...(options.inject || [])],
|
|
123
|
+
},
|
|
124
|
+
{
|
|
125
|
+
provide: 'LOGGER_ADAPTER',
|
|
126
|
+
useFactory: async (opts) => {
|
|
127
|
+
if (opts.logger) {
|
|
128
|
+
return this.resolveAdapter(opts.logger);
|
|
129
|
+
}
|
|
130
|
+
return new console_logger_1.ConsoleLogger();
|
|
131
|
+
},
|
|
132
|
+
inject: ['SCHEDULER_OPTIONS'],
|
|
133
|
+
},
|
|
134
|
+
handler_registry_1.HandlerRegistry,
|
|
135
|
+
event_manager_service_1.EventManager,
|
|
136
|
+
polling_engine_service_1.PollingEngine,
|
|
137
|
+
dispatcher_service_1.Dispatcher,
|
|
138
|
+
scheduler_service_1.SchedulerService,
|
|
139
|
+
];
|
|
140
|
+
}
|
|
141
|
+
static createAdapterProvider(token, config) {
|
|
142
|
+
if (config.useClass) {
|
|
143
|
+
return {
|
|
144
|
+
provide: token,
|
|
145
|
+
useClass: config.useClass,
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
if (config.useFactory) {
|
|
149
|
+
return {
|
|
150
|
+
provide: token,
|
|
151
|
+
useFactory: config.useFactory,
|
|
152
|
+
inject: config.inject || [],
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
if (config.useExisting) {
|
|
156
|
+
return {
|
|
157
|
+
provide: token,
|
|
158
|
+
useExisting: config.useExisting,
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
throw new Error(`Invalid adapter provider configuration for ${token}`);
|
|
162
|
+
}
|
|
163
|
+
static async resolveAdapter(config) {
|
|
164
|
+
if (config.useFactory) {
|
|
165
|
+
const factory = config.useFactory;
|
|
166
|
+
const result = factory();
|
|
167
|
+
return result instanceof Promise ? await result : result;
|
|
168
|
+
}
|
|
169
|
+
if (config.useClass) {
|
|
170
|
+
return new config.useClass();
|
|
171
|
+
}
|
|
172
|
+
if (config.useExisting) {
|
|
173
|
+
return config.useExisting;
|
|
174
|
+
}
|
|
175
|
+
throw new Error('Invalid adapter configuration');
|
|
176
|
+
}
|
|
177
|
+
};
|
|
178
|
+
exports.SchedulerModule = SchedulerModule;
|
|
179
|
+
exports.SchedulerModule = SchedulerModule = SchedulerModule_1 = __decorate([
|
|
180
|
+
(0, common_1.Global)(),
|
|
181
|
+
(0, common_1.Module)({})
|
|
182
|
+
], SchedulerModule);
|
|
183
|
+
//# sourceMappingURL=scheduler.module.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scheduler.module.js","sourceRoot":"","sources":["../src/scheduler.module.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { OnModuleInit } from '@nestjs/common';
|
|
2
|
+
import { IDatabaseAdapter } from '../interfaces/database-adapter.interface';
|
|
3
|
+
import { IQueueAdapter } from '../interfaces/queue-adapter.interface';
|
|
4
|
+
import { ILoggerAdapter } from '../interfaces/logger-adapter.interface';
|
|
5
|
+
import { HandlerRegistry } from '../registry/handler.registry';
|
|
6
|
+
export declare class Dispatcher implements OnModuleInit {
|
|
7
|
+
private readonly db;
|
|
8
|
+
private readonly queue;
|
|
9
|
+
private readonly logger;
|
|
10
|
+
private readonly tablePrefix;
|
|
11
|
+
private readonly config;
|
|
12
|
+
private readonly hooks;
|
|
13
|
+
private readonly handlerRegistry;
|
|
14
|
+
constructor(db: IDatabaseAdapter, queue: IQueueAdapter, logger: ILoggerAdapter, tablePrefix: string, config: any, hooks: any, handlerRegistry: HandlerRegistry);
|
|
15
|
+
onModuleInit(): Promise<void>;
|
|
16
|
+
private handleMessage;
|
|
17
|
+
private executeEvent;
|
|
18
|
+
private handleSuccess;
|
|
19
|
+
private handleFailure;
|
|
20
|
+
private markEventFailed;
|
|
21
|
+
private recordExecutionStart;
|
|
22
|
+
private recordExecutionSuccess;
|
|
23
|
+
private recordExecutionFailure;
|
|
24
|
+
private getEventInstance;
|
|
25
|
+
private getEventType;
|
|
26
|
+
}
|