@synkro/nestjs 0.2.0 → 0.4.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 ADDED
@@ -0,0 +1,15 @@
1
+ ISC License
2
+
3
+ Copyright (c) 2026 buemura
4
+
5
+ Permission to use, copy, modify, and/or distribute this software for any
6
+ purpose with or without fee is hereby granted, provided that the above
7
+ copyright notice and this permission notice appear in all copies.
8
+
9
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10
+ WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11
+ MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12
+ ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13
+ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14
+ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15
+ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
package/README.md CHANGED
@@ -34,7 +34,7 @@ SynkroModule.forRootAsync({
34
34
  inject: [ConfigService],
35
35
  useFactory: (config: ConfigService) => ({
36
36
  transport: "redis",
37
- redisUrl: config.get("REDIS_URL"),
37
+ connectionUrl: config.get("REDIS_URL"),
38
38
  }),
39
39
  });
40
40
  ```
@@ -0,0 +1,2 @@
1
+ import "reflect-metadata";
2
+ //# sourceMappingURL=on-event.decorator.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"on-event.decorator.test.d.ts","sourceRoot":"","sources":["../../src/decorators/on-event.decorator.test.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC"}
@@ -0,0 +1,70 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ 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;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __metadata = (this && this.__metadata) || function (k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ };
10
+ import "reflect-metadata";
11
+ import { describe, it, expect } from "vitest";
12
+ import { OnEvent } from "./on-event.decorator.js";
13
+ import { ON_EVENT_METADATA } from "../synkro.constants.js";
14
+ describe("@OnEvent", () => {
15
+ it("should set metadata with event type", () => {
16
+ class TestHandler {
17
+ handle() { }
18
+ }
19
+ __decorate([
20
+ OnEvent("UserCreated"),
21
+ __metadata("design:type", Function),
22
+ __metadata("design:paramtypes", []),
23
+ __metadata("design:returntype", void 0)
24
+ ], TestHandler.prototype, "handle", null);
25
+ const metadata = Reflect.getMetadata(ON_EVENT_METADATA, TestHandler.prototype.handle);
26
+ expect(metadata).toEqual({
27
+ eventType: "UserCreated",
28
+ retry: undefined,
29
+ });
30
+ });
31
+ it("should set metadata with event type and retry config", () => {
32
+ class TestHandler {
33
+ handle() { }
34
+ }
35
+ __decorate([
36
+ OnEvent("OrderPlaced", { maxRetries: 3 }),
37
+ __metadata("design:type", Function),
38
+ __metadata("design:paramtypes", []),
39
+ __metadata("design:returntype", void 0)
40
+ ], TestHandler.prototype, "handle", null);
41
+ const metadata = Reflect.getMetadata(ON_EVENT_METADATA, TestHandler.prototype.handle);
42
+ expect(metadata).toEqual({
43
+ eventType: "OrderPlaced",
44
+ retry: { maxRetries: 3 },
45
+ });
46
+ });
47
+ it("should support multiple decorated methods on the same class", () => {
48
+ class TestHandler {
49
+ handleA() { }
50
+ handleB() { }
51
+ }
52
+ __decorate([
53
+ OnEvent("EventA"),
54
+ __metadata("design:type", Function),
55
+ __metadata("design:paramtypes", []),
56
+ __metadata("design:returntype", void 0)
57
+ ], TestHandler.prototype, "handleA", null);
58
+ __decorate([
59
+ OnEvent("EventB", { maxRetries: 1 }),
60
+ __metadata("design:type", Function),
61
+ __metadata("design:paramtypes", []),
62
+ __metadata("design:returntype", void 0)
63
+ ], TestHandler.prototype, "handleB", null);
64
+ const metadataA = Reflect.getMetadata(ON_EVENT_METADATA, TestHandler.prototype.handleA);
65
+ const metadataB = Reflect.getMetadata(ON_EVENT_METADATA, TestHandler.prototype.handleB);
66
+ expect(metadataA).toEqual({ eventType: "EventA", retry: undefined });
67
+ expect(metadataB).toEqual({ eventType: "EventB", retry: { maxRetries: 1 } });
68
+ });
69
+ });
70
+ //# sourceMappingURL=on-event.decorator.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"on-event.decorator.test.js","sourceRoot":"","sources":["../../src/decorators/on-event.decorator.test.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,kBAAkB,CAAC;AAC1B,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAE3D,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE;IACxB,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;QAC7C,MAAM,WAAW;YAEf,MAAM,KAAI,CAAC;SACZ;QADC;YADC,OAAO,CAAC,aAAa,CAAC;;;;iDACZ;QAGb,MAAM,QAAQ,GAAG,OAAO,CAAC,WAAW,CAClC,iBAAiB,EACjB,WAAW,CAAC,SAAS,CAAC,MAAM,CAC7B,CAAC;QACF,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC;YACvB,SAAS,EAAE,aAAa;YACxB,KAAK,EAAE,SAAS;SACjB,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE;QAC9D,MAAM,WAAW;YAEf,MAAM,KAAI,CAAC;SACZ;QADC;YADC,OAAO,CAAC,aAAa,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC;;;;iDAC/B;QAGb,MAAM,QAAQ,GAAG,OAAO,CAAC,WAAW,CAClC,iBAAiB,EACjB,WAAW,CAAC,SAAS,CAAC,MAAM,CAC7B,CAAC;QACF,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC;YACvB,SAAS,EAAE,aAAa;YACxB,KAAK,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE;SACzB,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6DAA6D,EAAE,GAAG,EAAE;QACrE,MAAM,WAAW;YAEf,OAAO,KAAI,CAAC;YAGZ,OAAO,KAAI,CAAC;SACb;QAJC;YADC,OAAO,CAAC,QAAQ,CAAC;;;;kDACN;QAGZ;YADC,OAAO,CAAC,QAAQ,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC;;;;kDACzB;QAGd,MAAM,SAAS,GAAG,OAAO,CAAC,WAAW,CACnC,iBAAiB,EACjB,WAAW,CAAC,SAAS,CAAC,OAAO,CAC9B,CAAC;QACF,MAAM,SAAS,GAAG,OAAO,CAAC,WAAW,CACnC,iBAAiB,EACjB,WAAW,CAAC,SAAS,CAAC,OAAO,CAC9B,CAAC;QAEF,MAAM,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;QACrE,MAAM,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;IAC/E,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ import "reflect-metadata";
2
+ //# sourceMappingURL=on-workflow-step.decorator.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"on-workflow-step.decorator.test.d.ts","sourceRoot":"","sources":["../../src/decorators/on-workflow-step.decorator.test.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC"}
@@ -0,0 +1,76 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ 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;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __metadata = (this && this.__metadata) || function (k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ };
10
+ import "reflect-metadata";
11
+ import { describe, it, expect } from "vitest";
12
+ import { OnWorkflowStep } from "./on-workflow-step.decorator.js";
13
+ import { ON_WORKFLOW_STEP_METADATA } from "../synkro.constants.js";
14
+ describe("@OnWorkflowStep", () => {
15
+ it("should set metadata with workflow name and step type", () => {
16
+ class TestHandler {
17
+ handle() { }
18
+ }
19
+ __decorate([
20
+ OnWorkflowStep("ProcessOrder", "ValidateStock"),
21
+ __metadata("design:type", Function),
22
+ __metadata("design:paramtypes", []),
23
+ __metadata("design:returntype", void 0)
24
+ ], TestHandler.prototype, "handle", null);
25
+ const metadata = Reflect.getMetadata(ON_WORKFLOW_STEP_METADATA, TestHandler.prototype.handle);
26
+ expect(metadata).toEqual({
27
+ workflowName: "ProcessOrder",
28
+ stepType: "ValidateStock",
29
+ });
30
+ });
31
+ it("should support multiple decorated methods on the same class", () => {
32
+ class TestHandler {
33
+ handleA() { }
34
+ handleB() { }
35
+ }
36
+ __decorate([
37
+ OnWorkflowStep("ProcessOrder", "StepA"),
38
+ __metadata("design:type", Function),
39
+ __metadata("design:paramtypes", []),
40
+ __metadata("design:returntype", void 0)
41
+ ], TestHandler.prototype, "handleA", null);
42
+ __decorate([
43
+ OnWorkflowStep("ProcessOrder", "StepB"),
44
+ __metadata("design:type", Function),
45
+ __metadata("design:paramtypes", []),
46
+ __metadata("design:returntype", void 0)
47
+ ], TestHandler.prototype, "handleB", null);
48
+ const metadataA = Reflect.getMetadata(ON_WORKFLOW_STEP_METADATA, TestHandler.prototype.handleA);
49
+ const metadataB = Reflect.getMetadata(ON_WORKFLOW_STEP_METADATA, TestHandler.prototype.handleB);
50
+ expect(metadataA).toEqual({ workflowName: "ProcessOrder", stepType: "StepA" });
51
+ expect(metadataB).toEqual({ workflowName: "ProcessOrder", stepType: "StepB" });
52
+ });
53
+ it("should support different workflow names", () => {
54
+ class TestHandler {
55
+ handleA() { }
56
+ handleB() { }
57
+ }
58
+ __decorate([
59
+ OnWorkflowStep("WorkflowA", "Step1"),
60
+ __metadata("design:type", Function),
61
+ __metadata("design:paramtypes", []),
62
+ __metadata("design:returntype", void 0)
63
+ ], TestHandler.prototype, "handleA", null);
64
+ __decorate([
65
+ OnWorkflowStep("WorkflowB", "Step1"),
66
+ __metadata("design:type", Function),
67
+ __metadata("design:paramtypes", []),
68
+ __metadata("design:returntype", void 0)
69
+ ], TestHandler.prototype, "handleB", null);
70
+ const metadataA = Reflect.getMetadata(ON_WORKFLOW_STEP_METADATA, TestHandler.prototype.handleA);
71
+ const metadataB = Reflect.getMetadata(ON_WORKFLOW_STEP_METADATA, TestHandler.prototype.handleB);
72
+ expect(metadataA).toEqual({ workflowName: "WorkflowA", stepType: "Step1" });
73
+ expect(metadataB).toEqual({ workflowName: "WorkflowB", stepType: "Step1" });
74
+ });
75
+ });
76
+ //# sourceMappingURL=on-workflow-step.decorator.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"on-workflow-step.decorator.test.js","sourceRoot":"","sources":["../../src/decorators/on-workflow-step.decorator.test.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,kBAAkB,CAAC;AAC1B,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACjE,OAAO,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AAEnE,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAC/B,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE;QAC9D,MAAM,WAAW;YAEf,MAAM,KAAI,CAAC;SACZ;QADC;YADC,cAAc,CAAC,cAAc,EAAE,eAAe,CAAC;;;;iDACrC;QAGb,MAAM,QAAQ,GAAG,OAAO,CAAC,WAAW,CAClC,yBAAyB,EACzB,WAAW,CAAC,SAAS,CAAC,MAAM,CAC7B,CAAC;QACF,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC;YACvB,YAAY,EAAE,cAAc;YAC5B,QAAQ,EAAE,eAAe;SAC1B,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6DAA6D,EAAE,GAAG,EAAE;QACrE,MAAM,WAAW;YAEf,OAAO,KAAI,CAAC;YAGZ,OAAO,KAAI,CAAC;SACb;QAJC;YADC,cAAc,CAAC,cAAc,EAAE,OAAO,CAAC;;;;kDAC5B;QAGZ;YADC,cAAc,CAAC,cAAc,EAAE,OAAO,CAAC;;;;kDAC5B;QAGd,MAAM,SAAS,GAAG,OAAO,CAAC,WAAW,CACnC,yBAAyB,EACzB,WAAW,CAAC,SAAS,CAAC,OAAO,CAC9B,CAAC;QACF,MAAM,SAAS,GAAG,OAAO,CAAC,WAAW,CACnC,yBAAyB,EACzB,WAAW,CAAC,SAAS,CAAC,OAAO,CAC9B,CAAC;QAEF,MAAM,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,EAAE,YAAY,EAAE,cAAc,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;QAC/E,MAAM,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,EAAE,YAAY,EAAE,cAAc,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;IACjF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;QACjD,MAAM,WAAW;YAEf,OAAO,KAAI,CAAC;YAGZ,OAAO,KAAI,CAAC;SACb;QAJC;YADC,cAAc,CAAC,WAAW,EAAE,OAAO,CAAC;;;;kDACzB;QAGZ;YADC,cAAc,CAAC,WAAW,EAAE,OAAO,CAAC;;;;kDACzB;QAGd,MAAM,SAAS,GAAG,OAAO,CAAC,WAAW,CACnC,yBAAyB,EACzB,WAAW,CAAC,SAAS,CAAC,OAAO,CAC9B,CAAC;QACF,MAAM,SAAS,GAAG,OAAO,CAAC,WAAW,CACnC,yBAAyB,EACzB,WAAW,CAAC,SAAS,CAAC,OAAO,CAC9B,CAAC;QAEF,MAAM,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,EAAE,YAAY,EAAE,WAAW,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;QAC5E,MAAM,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,EAAE,YAAY,EAAE,WAAW,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;IAC9E,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ import "reflect-metadata";
2
+ //# sourceMappingURL=synkro.explorer.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"synkro.explorer.test.d.ts","sourceRoot":"","sources":["../src/synkro.explorer.test.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC"}
@@ -0,0 +1,166 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ 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;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __metadata = (this && this.__metadata) || function (k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ };
10
+ import "reflect-metadata";
11
+ import { describe, it, expect } from "vitest";
12
+ import { Test } from "@nestjs/testing";
13
+ import { Injectable } from "@nestjs/common";
14
+ import { DiscoveryModule } from "@nestjs/core";
15
+ import { SynkroExplorer } from "./synkro.explorer.js";
16
+ import { OnEvent } from "./decorators/on-event.decorator.js";
17
+ import { OnWorkflowStep } from "./decorators/on-workflow-step.decorator.js";
18
+ let TestEventHandler = class TestEventHandler {
19
+ async handleUserCreated(ctx) {
20
+ return ctx.payload;
21
+ }
22
+ async handleOrderPlaced(ctx) {
23
+ return ctx.payload;
24
+ }
25
+ };
26
+ __decorate([
27
+ OnEvent("UserCreated", { maxRetries: 2 }),
28
+ __metadata("design:type", Function),
29
+ __metadata("design:paramtypes", [Object]),
30
+ __metadata("design:returntype", Promise)
31
+ ], TestEventHandler.prototype, "handleUserCreated", null);
32
+ __decorate([
33
+ OnEvent("OrderPlaced"),
34
+ __metadata("design:type", Function),
35
+ __metadata("design:paramtypes", [Object]),
36
+ __metadata("design:returntype", Promise)
37
+ ], TestEventHandler.prototype, "handleOrderPlaced", null);
38
+ TestEventHandler = __decorate([
39
+ Injectable()
40
+ ], TestEventHandler);
41
+ let TestWorkflowHandler = class TestWorkflowHandler {
42
+ async handleValidateStock(ctx) {
43
+ return ctx.payload;
44
+ }
45
+ async handleProcessPayment(ctx) {
46
+ return ctx.payload;
47
+ }
48
+ async handleShip(ctx) {
49
+ return ctx.payload;
50
+ }
51
+ };
52
+ __decorate([
53
+ OnWorkflowStep("ProcessOrder", "ValidateStock"),
54
+ __metadata("design:type", Function),
55
+ __metadata("design:paramtypes", [Object]),
56
+ __metadata("design:returntype", Promise)
57
+ ], TestWorkflowHandler.prototype, "handleValidateStock", null);
58
+ __decorate([
59
+ OnWorkflowStep("ProcessOrder", "ProcessPayment"),
60
+ __metadata("design:type", Function),
61
+ __metadata("design:paramtypes", [Object]),
62
+ __metadata("design:returntype", Promise)
63
+ ], TestWorkflowHandler.prototype, "handleProcessPayment", null);
64
+ __decorate([
65
+ OnWorkflowStep("StartShipment", "Ship"),
66
+ __metadata("design:type", Function),
67
+ __metadata("design:paramtypes", [Object]),
68
+ __metadata("design:returntype", Promise)
69
+ ], TestWorkflowHandler.prototype, "handleShip", null);
70
+ TestWorkflowHandler = __decorate([
71
+ Injectable()
72
+ ], TestWorkflowHandler);
73
+ let PlainService = class PlainService {
74
+ doSomething() {
75
+ return "no decorators here";
76
+ }
77
+ };
78
+ PlainService = __decorate([
79
+ Injectable()
80
+ ], PlainService);
81
+ describe("SynkroExplorer", () => {
82
+ async function createExplorer(providers) {
83
+ const module = await Test.createTestingModule({
84
+ imports: [DiscoveryModule],
85
+ providers: [SynkroExplorer, ...providers],
86
+ }).compile();
87
+ await module.init();
88
+ return module.get(SynkroExplorer);
89
+ }
90
+ describe("exploreEventHandlers", () => {
91
+ it("should discover @OnEvent decorated methods", async () => {
92
+ const explorer = await createExplorer([TestEventHandler]);
93
+ const handlers = explorer.exploreEventHandlers();
94
+ expect(handlers).toHaveLength(2);
95
+ expect(handlers).toEqual(expect.arrayContaining([
96
+ expect.objectContaining({
97
+ eventType: "UserCreated",
98
+ retry: { maxRetries: 2 },
99
+ }),
100
+ expect.objectContaining({
101
+ eventType: "OrderPlaced",
102
+ retry: undefined,
103
+ }),
104
+ ]));
105
+ });
106
+ it("should return bound handler functions", async () => {
107
+ const explorer = await createExplorer([TestEventHandler]);
108
+ const handlers = explorer.exploreEventHandlers();
109
+ for (const handler of handlers) {
110
+ expect(typeof handler.handler).toBe("function");
111
+ }
112
+ });
113
+ it("should return empty array when no handlers are registered", async () => {
114
+ const explorer = await createExplorer([PlainService]);
115
+ const handlers = explorer.exploreEventHandlers();
116
+ expect(handlers).toHaveLength(0);
117
+ });
118
+ });
119
+ describe("exploreWorkflowStepHandlers", () => {
120
+ it("should discover @OnWorkflowStep decorated methods", async () => {
121
+ const explorer = await createExplorer([TestWorkflowHandler]);
122
+ const handlers = explorer.exploreWorkflowStepHandlers();
123
+ expect(handlers).toHaveLength(3);
124
+ expect(handlers).toEqual(expect.arrayContaining([
125
+ expect.objectContaining({
126
+ workflowName: "ProcessOrder",
127
+ stepType: "ValidateStock",
128
+ }),
129
+ expect.objectContaining({
130
+ workflowName: "ProcessOrder",
131
+ stepType: "ProcessPayment",
132
+ }),
133
+ expect.objectContaining({
134
+ workflowName: "StartShipment",
135
+ stepType: "Ship",
136
+ }),
137
+ ]));
138
+ });
139
+ it("should return bound handler functions", async () => {
140
+ const explorer = await createExplorer([TestWorkflowHandler]);
141
+ const handlers = explorer.exploreWorkflowStepHandlers();
142
+ for (const handler of handlers) {
143
+ expect(typeof handler.handler).toBe("function");
144
+ }
145
+ });
146
+ it("should return empty array when no handlers are registered", async () => {
147
+ const explorer = await createExplorer([PlainService]);
148
+ const handlers = explorer.exploreWorkflowStepHandlers();
149
+ expect(handlers).toHaveLength(0);
150
+ });
151
+ });
152
+ describe("mixed providers", () => {
153
+ it("should discover handlers from multiple providers", async () => {
154
+ const explorer = await createExplorer([
155
+ TestEventHandler,
156
+ TestWorkflowHandler,
157
+ PlainService,
158
+ ]);
159
+ const eventHandlers = explorer.exploreEventHandlers();
160
+ const workflowHandlers = explorer.exploreWorkflowStepHandlers();
161
+ expect(eventHandlers).toHaveLength(2);
162
+ expect(workflowHandlers).toHaveLength(3);
163
+ });
164
+ });
165
+ });
166
+ //# sourceMappingURL=synkro.explorer.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"synkro.explorer.test.js","sourceRoot":"","sources":["../src/synkro.explorer.test.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import type { SynkroWorkflow } from "@synkro/core";
2
2
  export interface SynkroModuleOptions {
3
3
  transport: "redis" | "in-memory";
4
- redisUrl?: string;
4
+ connectionUrl?: string;
5
5
  debug?: boolean;
6
6
  workflows?: SynkroWorkflow[];
7
7
  }
@@ -1 +1 @@
1
- {"version":3,"file":"synkro.interfaces.d.ts","sourceRoot":"","sources":["../src/synkro.interfaces.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAEnD,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,OAAO,GAAG,WAAW,CAAC;IACjC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,SAAS,CAAC,EAAE,cAAc,EAAE,CAAC;CAC9B;AAED,MAAM,WAAW,wBAAwB;IACvC,OAAO,CAAC,EAAE,GAAG,EAAE,CAAC;IAChB,UAAU,EAAE,CACV,GAAG,IAAI,EAAE,GAAG,EAAE,KACX,OAAO,CAAC,mBAAmB,CAAC,GAAG,mBAAmB,CAAC;IACxD,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC;CAChB"}
1
+ {"version":3,"file":"synkro.interfaces.d.ts","sourceRoot":"","sources":["../src/synkro.interfaces.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAEnD,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,OAAO,GAAG,WAAW,CAAC;IACjC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,SAAS,CAAC,EAAE,cAAc,EAAE,CAAC;CAC9B;AAED,MAAM,WAAW,wBAAwB;IACvC,OAAO,CAAC,EAAE,GAAG,EAAE,CAAC;IAChB,UAAU,EAAE,CACV,GAAG,IAAI,EAAE,GAAG,EAAE,KACX,OAAO,CAAC,mBAAmB,CAAC,GAAG,mBAAmB,CAAC;IACxD,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC;CAChB"}
@@ -1,4 +1,4 @@
1
- import { DynamicModule } from "@nestjs/common";
1
+ import { type DynamicModule } from "@nestjs/common";
2
2
  import type { SynkroModuleAsyncOptions, SynkroModuleOptions } from "./synkro.interfaces.js";
3
3
  export declare class SynkroModule {
4
4
  static forRoot(options: SynkroModuleOptions): DynamicModule;
@@ -1 +1 @@
1
- {"version":3,"file":"synkro.module.d.ts","sourceRoot":"","sources":["../src/synkro.module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAU,MAAM,gBAAgB,CAAC;AAMvD,OAAO,KAAK,EACV,wBAAwB,EACxB,mBAAmB,EACpB,MAAM,wBAAwB,CAAC;AAEhC,qBACa,YAAY;IACvB,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,mBAAmB,GAAG,aAAa;IAiB3D,MAAM,CAAC,YAAY,CAAC,OAAO,EAAE,wBAAwB,GAAG,aAAa;CAiBtE"}
1
+ {"version":3,"file":"synkro.module.d.ts","sourceRoot":"","sources":["../src/synkro.module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,aAAa,EAAU,MAAM,gBAAgB,CAAC;AAM5D,OAAO,KAAK,EACV,wBAAwB,EACxB,mBAAmB,EACpB,MAAM,wBAAwB,CAAC;AAEhC,qBACa,YAAY;IACvB,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,mBAAmB,GAAG,aAAa;IAiB3D,MAAM,CAAC,YAAY,CAAC,OAAO,EAAE,wBAAwB,GAAG,aAAa;CAiBtE"}
@@ -1 +1 @@
1
- {"version":3,"file":"synkro.module.js","sourceRoot":"","sources":["../src/synkro.module.ts"],"names":[],"mappings":";;;;;;;AAAA,OAAO,EAAiB,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAE/C,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAO7C,IAAM,YAAY,oBAAlB,MAAM,YAAY;IACvB,MAAM,CAAC,OAAO,CAAC,OAA4B;QACzC,OAAO;YACL,MAAM,EAAE,cAAY;YACpB,OAAO,EAAE,CAAC,eAAe,CAAC;YAC1B,SAAS,EAAE;gBACT;oBACE,OAAO,EAAE,qBAAqB;oBAC9B,QAAQ,EAAE,OAAO;iBAClB;gBACD,cAAc;gBACd,aAAa;aACd;YACD,OAAO,EAAE,CAAC,aAAa,CAAC;YACxB,MAAM,EAAE,IAAI;SACb,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,YAAY,CAAC,OAAiC;QACnD,OAAO;YACL,MAAM,EAAE,cAAY;YACpB,OAAO,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE,eAAe,CAAC;YACtD,SAAS,EAAE;gBACT;oBACE,OAAO,EAAE,qBAAqB;oBAC9B,UAAU,EAAE,OAAO,CAAC,UAAU;oBAC9B,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,EAAE;iBAC7B;gBACD,cAAc;gBACd,aAAa;aACd;YACD,OAAO,EAAE,CAAC,aAAa,CAAC;YACxB,MAAM,EAAE,IAAI;SACb,CAAC;IACJ,CAAC;CACF,CAAA;AAnCY,YAAY;IADxB,MAAM,CAAC,EAAE,CAAC;GACE,YAAY,CAmCxB"}
1
+ {"version":3,"file":"synkro.module.js","sourceRoot":"","sources":["../src/synkro.module.ts"],"names":[],"mappings":";;;;;;;AAAA,OAAO,EAAsB,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAE/C,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAO7C,IAAM,YAAY,oBAAlB,MAAM,YAAY;IACvB,MAAM,CAAC,OAAO,CAAC,OAA4B;QACzC,OAAO;YACL,MAAM,EAAE,cAAY;YACpB,OAAO,EAAE,CAAC,eAAe,CAAC;YAC1B,SAAS,EAAE;gBACT;oBACE,OAAO,EAAE,qBAAqB;oBAC9B,QAAQ,EAAE,OAAO;iBAClB;gBACD,cAAc;gBACd,aAAa;aACd;YACD,OAAO,EAAE,CAAC,aAAa,CAAC;YACxB,MAAM,EAAE,IAAI;SACb,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,YAAY,CAAC,OAAiC;QACnD,OAAO;YACL,MAAM,EAAE,cAAY;YACpB,OAAO,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE,eAAe,CAAC;YACtD,SAAS,EAAE;gBACT;oBACE,OAAO,EAAE,qBAAqB;oBAC9B,UAAU,EAAE,OAAO,CAAC,UAAU;oBAC9B,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,EAAE;iBAC7B;gBACD,cAAc;gBACd,aAAa;aACd;YACD,OAAO,EAAE,CAAC,aAAa,CAAC;YACxB,MAAM,EAAE,IAAI;SACb,CAAC;IACJ,CAAC;CACF,CAAA;AAnCY,YAAY;IADxB,MAAM,CAAC,EAAE,CAAC;GACE,YAAY,CAmCxB"}
@@ -0,0 +1,2 @@
1
+ import "reflect-metadata";
2
+ //# sourceMappingURL=synkro.module.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"synkro.module.test.d.ts","sourceRoot":"","sources":["../src/synkro.module.test.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC"}
@@ -0,0 +1,189 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ 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;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __metadata = (this && this.__metadata) || function (k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ };
10
+ import "reflect-metadata";
11
+ import { describe, it, expect, vi } from "vitest";
12
+ import { Test } from "@nestjs/testing";
13
+ import { Injectable } from "@nestjs/common";
14
+ import { SynkroModule } from "./synkro.module.js";
15
+ import { SynkroService } from "./synkro.service.js";
16
+ import { OnEvent } from "./decorators/on-event.decorator.js";
17
+ import { OnWorkflowStep } from "./decorators/on-workflow-step.decorator.js";
18
+ let TestEventHandler = class TestEventHandler {
19
+ handleFn = vi.fn();
20
+ async handle(ctx) {
21
+ this.handleFn(ctx);
22
+ }
23
+ };
24
+ __decorate([
25
+ OnEvent("TestEvent", { maxRetries: 1 }),
26
+ __metadata("design:type", Function),
27
+ __metadata("design:paramtypes", [Object]),
28
+ __metadata("design:returntype", Promise)
29
+ ], TestEventHandler.prototype, "handle", null);
30
+ TestEventHandler = __decorate([
31
+ Injectable()
32
+ ], TestEventHandler);
33
+ const noop = async () => { };
34
+ let TestWorkflowHandler = class TestWorkflowHandler {
35
+ stockFn = vi.fn();
36
+ paymentFn = vi.fn();
37
+ async handleStockCheck(ctx) {
38
+ this.stockFn(ctx);
39
+ }
40
+ async handlePayment(ctx) {
41
+ this.paymentFn(ctx);
42
+ }
43
+ };
44
+ __decorate([
45
+ OnWorkflowStep("TestWorkflow", "StockCheck"),
46
+ __metadata("design:type", Function),
47
+ __metadata("design:paramtypes", [Object]),
48
+ __metadata("design:returntype", Promise)
49
+ ], TestWorkflowHandler.prototype, "handleStockCheck", null);
50
+ __decorate([
51
+ OnWorkflowStep("TestWorkflow", "Payment"),
52
+ __metadata("design:type", Function),
53
+ __metadata("design:paramtypes", [Object]),
54
+ __metadata("design:returntype", Promise)
55
+ ], TestWorkflowHandler.prototype, "handlePayment", null);
56
+ TestWorkflowHandler = __decorate([
57
+ Injectable()
58
+ ], TestWorkflowHandler);
59
+ describe("SynkroModule", () => {
60
+ describe("forRoot", () => {
61
+ it("should provide SynkroService", async () => {
62
+ const module = await Test.createTestingModule({
63
+ imports: [
64
+ SynkroModule.forRoot({
65
+ transport: "in-memory",
66
+ }),
67
+ ],
68
+ }).compile();
69
+ await module.init();
70
+ const service = module.get(SynkroService);
71
+ expect(service).toBeDefined();
72
+ expect(service).toBeInstanceOf(SynkroService);
73
+ await module.close();
74
+ });
75
+ it("should expose publish method", async () => {
76
+ const module = await Test.createTestingModule({
77
+ imports: [
78
+ SynkroModule.forRoot({
79
+ transport: "in-memory",
80
+ }),
81
+ ],
82
+ }).compile();
83
+ await module.init();
84
+ const service = module.get(SynkroService);
85
+ expect(typeof service.publish).toBe("function");
86
+ await module.close();
87
+ });
88
+ it("should expose on method", async () => {
89
+ const module = await Test.createTestingModule({
90
+ imports: [
91
+ SynkroModule.forRoot({
92
+ transport: "in-memory",
93
+ }),
94
+ ],
95
+ }).compile();
96
+ await module.init();
97
+ const service = module.get(SynkroService);
98
+ expect(typeof service.on).toBe("function");
99
+ await module.close();
100
+ });
101
+ });
102
+ describe("forRootAsync", () => {
103
+ it("should provide SynkroService with async config", async () => {
104
+ const module = await Test.createTestingModule({
105
+ imports: [
106
+ SynkroModule.forRootAsync({
107
+ useFactory: () => ({
108
+ transport: "in-memory",
109
+ }),
110
+ }),
111
+ ],
112
+ }).compile();
113
+ await module.init();
114
+ const service = module.get(SynkroService);
115
+ expect(service).toBeDefined();
116
+ expect(service).toBeInstanceOf(SynkroService);
117
+ await module.close();
118
+ });
119
+ });
120
+ describe("event handler discovery", () => {
121
+ it("should discover and register @OnEvent handlers", async () => {
122
+ const module = await Test.createTestingModule({
123
+ imports: [
124
+ SynkroModule.forRoot({
125
+ transport: "in-memory",
126
+ }),
127
+ ],
128
+ providers: [TestEventHandler],
129
+ }).compile();
130
+ await module.init();
131
+ const service = module.get(SynkroService);
132
+ // Publishing should invoke the discovered handler
133
+ await service.publish("TestEvent", { data: "hello" });
134
+ // Allow microtask queue to flush (in-memory transport uses queueMicrotask)
135
+ await new Promise((resolve) => setTimeout(resolve, 50));
136
+ const handler = module.get(TestEventHandler);
137
+ expect(handler.handleFn).toHaveBeenCalledTimes(1);
138
+ expect(handler.handleFn).toHaveBeenCalledWith(expect.objectContaining({
139
+ payload: { data: "hello" },
140
+ }));
141
+ await module.close();
142
+ });
143
+ });
144
+ describe("workflow step handler discovery", () => {
145
+ it("should discover and patch @OnWorkflowStep handlers into workflows", async () => {
146
+ const module = await Test.createTestingModule({
147
+ imports: [
148
+ SynkroModule.forRoot({
149
+ transport: "in-memory",
150
+ workflows: [
151
+ {
152
+ name: "TestWorkflow",
153
+ steps: [
154
+ { type: "StockCheck", handler: noop },
155
+ { type: "Payment", handler: noop },
156
+ ],
157
+ },
158
+ ],
159
+ }),
160
+ ],
161
+ providers: [TestWorkflowHandler],
162
+ }).compile();
163
+ await module.init();
164
+ const service = module.get(SynkroService);
165
+ await service.publish("TestWorkflow", { orderId: "123" });
166
+ // Allow workflow steps to complete
167
+ await new Promise((resolve) => setTimeout(resolve, 200));
168
+ const handler = module.get(TestWorkflowHandler);
169
+ expect(handler.stockFn).toHaveBeenCalledTimes(1);
170
+ expect(handler.paymentFn).toHaveBeenCalledTimes(1);
171
+ await module.close();
172
+ });
173
+ });
174
+ describe("lifecycle", () => {
175
+ it("should stop synkro on module destroy", async () => {
176
+ const module = await Test.createTestingModule({
177
+ imports: [
178
+ SynkroModule.forRoot({
179
+ transport: "in-memory",
180
+ }),
181
+ ],
182
+ }).compile();
183
+ await module.init();
184
+ // Should not throw
185
+ await module.close();
186
+ });
187
+ });
188
+ });
189
+ //# sourceMappingURL=synkro.module.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"synkro.module.test.js","sourceRoot":"","sources":["../src/synkro.module.test.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
- import { OnModuleDestroy, OnModuleInit } from "@nestjs/common";
1
+ import { type OnModuleDestroy, type OnModuleInit } from "@nestjs/common";
2
+ import { Synkro } from "@synkro/core";
2
3
  import type { HandlerFunction, RetryConfig } from "@synkro/core";
3
4
  import { SynkroExplorer } from "./synkro.explorer.js";
4
5
  import type { SynkroModuleOptions } from "./synkro.interfaces.js";
@@ -11,5 +12,6 @@ export declare class SynkroService implements OnModuleInit, OnModuleDestroy {
11
12
  onModuleDestroy(): Promise<void>;
12
13
  publish(event: string, payload?: unknown, requestId?: string): Promise<string>;
13
14
  on(eventType: string, handler: HandlerFunction, retry?: RetryConfig): void;
15
+ getInstance(): Synkro;
14
16
  }
15
17
  //# sourceMappingURL=synkro.service.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"synkro.service.d.ts","sourceRoot":"","sources":["../src/synkro.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,eAAe,EACf,YAAY,EACb,MAAM,gBAAgB,CAAC;AAExB,OAAO,KAAK,EACV,eAAe,EACf,WAAW,EAEZ,MAAM,cAAc,CAAC;AAGtB,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAElE,qBACa,aAAc,YAAW,YAAY,EAAE,eAAe;IAK/D,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAL3B,OAAO,CAAC,MAAM,CAAU;gBAIL,OAAO,EAAE,mBAAmB,EAC5B,QAAQ,EAAE,cAAc;IAGrC,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAmC7B,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;IAIhC,OAAO,CACX,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,OAAO,EACjB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,MAAM,CAAC;IAIlB,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,EAAE,KAAK,CAAC,EAAE,WAAW,GAAG,IAAI;CAG3E"}
1
+ {"version":3,"file":"synkro.service.d.ts","sourceRoot":"","sources":["../src/synkro.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,eAAe,EACpB,KAAK,YAAY,EAClB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,KAAK,EACV,eAAe,EACf,WAAW,EAEZ,MAAM,cAAc,CAAC;AAGtB,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAElE,qBACa,aAAc,YAAW,YAAY,EAAE,eAAe;IAK/D,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAL3B,OAAO,CAAC,MAAM,CAAU;gBAIL,OAAO,EAAE,mBAAmB,EAC5B,QAAQ,EAAE,cAAc;IAGrC,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAmC7B,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;IAIhC,OAAO,CACX,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,OAAO,EACjB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,MAAM,CAAC;IAIlB,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,EAAE,KAAK,CAAC,EAAE,WAAW,GAAG,IAAI;IAI1E,WAAW,IAAI,MAAM;CAGtB"}
@@ -39,7 +39,7 @@ let SynkroService = class SynkroService {
39
39
  }
40
40
  const synkroOptions = {
41
41
  transport: this.options.transport,
42
- redisUrl: this.options.redisUrl,
42
+ connectionUrl: this.options.connectionUrl,
43
43
  debug: this.options.debug,
44
44
  workflows,
45
45
  };
@@ -59,6 +59,9 @@ let SynkroService = class SynkroService {
59
59
  on(eventType, handler, retry) {
60
60
  this.synkro.on(eventType, handler, retry);
61
61
  }
62
+ getInstance() {
63
+ return this.synkro;
64
+ }
62
65
  };
63
66
  SynkroService = __decorate([
64
67
  Injectable(),
@@ -1 +1 @@
1
- {"version":3,"file":"synkro.service.js","sourceRoot":"","sources":["../src/synkro.service.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,OAAO,EACL,MAAM,EACN,UAAU,GAGX,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAOtC,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAI/C,IAAM,aAAa,GAAnB,MAAM,aAAa;IAKL;IACA;IALX,MAAM,CAAU;IAExB,YAEmB,OAA4B,EAC5B,QAAwB;QADxB,YAAO,GAAP,OAAO,CAAqB;QAC5B,aAAQ,GAAR,QAAQ,CAAgB;IACxC,CAAC;IAEJ,KAAK,CAAC,YAAY;QAChB,MAAM,SAAS,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC3D,GAAG,CAAC;YACJ,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;SACtC,CAAC,CAAC,CAAC;QAEJ,mEAAmE;QACnE,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,2BAA2B,EAAE,CAAC;QACjE,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;YACjC,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;gBAClC,MAAM,UAAU,GAAG,YAAY,CAAC,IAAI,CAClC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,KAAK,QAAQ,CAAC,IAAI,IAAI,CAAC,CAAC,QAAQ,KAAK,IAAI,CAAC,IAAI,CACpE,CAAC;gBACF,IAAI,UAAU,EAAE,CAAC;oBACf,IAAI,CAAC,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC;gBACpC,CAAC;YACH,CAAC;QACH,CAAC;QAED,MAAM,aAAa,GAAkB;YACnC,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS;YACjC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ;YAC/B,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK;YACzB,SAAS;SACV,CAAC;QAEF,IAAI,CAAC,MAAM,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QAEhD,qCAAqC;QACrC,MAAM,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC,oBAAoB,EAAE,CAAC;QAC3D,KAAK,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,aAAa,EAAE,CAAC;YAC1D,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC;IAED,KAAK,CAAC,eAAe;QACnB,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;IAC3B,CAAC;IAED,KAAK,CAAC,OAAO,CACX,KAAa,EACb,OAAiB,EACjB,SAAkB;QAElB,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;IACxD,CAAC;IAED,EAAE,CAAC,SAAiB,EAAE,OAAwB,EAAE,KAAmB;QACjE,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;IAC5C,CAAC;CACF,CAAA;AA3DY,aAAa;IADzB,UAAU,EAAE;IAKR,WAAA,MAAM,CAAC,qBAAqB,CAAC,CAAA;6CAEH,cAAc;GANhC,aAAa,CA2DzB"}
1
+ {"version":3,"file":"synkro.service.js","sourceRoot":"","sources":["../src/synkro.service.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,OAAO,EACL,MAAM,EACN,UAAU,GAGX,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAOtC,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAI/C,IAAM,aAAa,GAAnB,MAAM,aAAa;IAKL;IACA;IALX,MAAM,CAAU;IAExB,YAEmB,OAA4B,EAC5B,QAAwB;QADxB,YAAO,GAAP,OAAO,CAAqB;QAC5B,aAAQ,GAAR,QAAQ,CAAgB;IACxC,CAAC;IAEJ,KAAK,CAAC,YAAY;QAChB,MAAM,SAAS,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC3D,GAAG,CAAC;YACJ,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;SACtC,CAAC,CAAC,CAAC;QAEJ,mEAAmE;QACnE,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,2BAA2B,EAAE,CAAC;QACjE,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;YACjC,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;gBAClC,MAAM,UAAU,GAAG,YAAY,CAAC,IAAI,CAClC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,KAAK,QAAQ,CAAC,IAAI,IAAI,CAAC,CAAC,QAAQ,KAAK,IAAI,CAAC,IAAI,CACpE,CAAC;gBACF,IAAI,UAAU,EAAE,CAAC;oBACf,IAAI,CAAC,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC;gBACpC,CAAC;YACH,CAAC;QACH,CAAC;QAED,MAAM,aAAa,GAAkB;YACnC,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS;YACjC,aAAa,EAAE,IAAI,CAAC,OAAO,CAAC,aAAa;YACzC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK;YACzB,SAAS;SACV,CAAC;QAEF,IAAI,CAAC,MAAM,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QAEhD,qCAAqC;QACrC,MAAM,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC,oBAAoB,EAAE,CAAC;QAC3D,KAAK,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,aAAa,EAAE,CAAC;YAC1D,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC;IAED,KAAK,CAAC,eAAe;QACnB,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;IAC3B,CAAC;IAED,KAAK,CAAC,OAAO,CACX,KAAa,EACb,OAAiB,EACjB,SAAkB;QAElB,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;IACxD,CAAC;IAED,EAAE,CAAC,SAAiB,EAAE,OAAwB,EAAE,KAAmB;QACjE,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;IAC5C,CAAC;IAED,WAAW;QACT,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;CACF,CAAA;AA/DY,aAAa;IADzB,UAAU,EAAE;IAKR,WAAA,MAAM,CAAC,qBAAqB,CAAC,CAAA;6CAEH,cAAc;GANhC,aAAa,CA+DzB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@synkro/nestjs",
3
- "version": "0.2.0",
3
+ "version": "0.4.0",
4
4
  "description": "NestJS integration module for @synkro/core",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -15,10 +15,6 @@
15
15
  "dist"
16
16
  ],
17
17
  "type": "module",
18
- "scripts": {
19
- "build": "tsc",
20
- "type-check": "tsc --noEmit"
21
- },
22
18
  "keywords": [
23
19
  "workflow",
24
20
  "state-machine",
@@ -36,15 +32,26 @@
36
32
  "peerDependencies": {
37
33
  "@nestjs/common": "^10.0.0 || ^11.0.0",
38
34
  "@nestjs/core": "^10.0.0 || ^11.0.0",
39
- "@synkro/core": "^0.5.0",
35
+ "@synkro/core": "^0.7.0",
40
36
  "reflect-metadata": "^0.1.13 || ^0.2.0"
41
37
  },
42
38
  "devDependencies": {
43
39
  "@nestjs/common": "^11.0.0",
44
40
  "@nestjs/core": "^11.0.0",
45
- "@synkro/core": "file:../core",
41
+ "@nestjs/testing": "^11.1.15",
42
+ "@swc/core": "^1.15.18",
43
+ "ioredis": "^5.10.0",
46
44
  "reflect-metadata": "^0.2.0",
47
45
  "rxjs": "^7.8.0",
48
- "typescript": "^5.7.0"
46
+ "typescript": "^5.7.0",
47
+ "unplugin-swc": "^1.5.9",
48
+ "vitest": "^4.0.18",
49
+ "@synkro/core": "0.7.0"
50
+ },
51
+ "scripts": {
52
+ "build": "tsc",
53
+ "type-check": "tsc --noEmit",
54
+ "test": "vitest run",
55
+ "test:watch": "vitest"
49
56
  }
50
- }
57
+ }