@rayondigital/nest-dapr 0.9.73 → 0.9.74

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.
@@ -4,3 +4,5 @@ export declare const DAPR_ACTOR_PUBSUB_METADATA = "DAPR_PUBSUB_METADATA";
4
4
  export declare const DAPR_ACTOR_EVENT_METADATA = "DAPR_ACTOR_EVENT_METADATA";
5
5
  export declare const DAPR_ACTOR_METADATA = "DAPR_ACTOR_METADATA";
6
6
  export declare const DAPR_ACTOR_STATE_METADATA = "DAPR_ACTOR_STATE_METADATA";
7
+ export declare const DAPR_ACTIVITY_METADATA = "DAPR_ACTIVITY_METADATA";
8
+ export declare const DAPR_WORKFLOW_METADATA = "DAPR_WORKFLOW_METADATA";
package/dist/constants.js CHANGED
@@ -1,9 +1,11 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.DAPR_ACTOR_STATE_METADATA = exports.DAPR_ACTOR_METADATA = exports.DAPR_ACTOR_EVENT_METADATA = exports.DAPR_ACTOR_PUBSUB_METADATA = exports.DAPR_PUBSUB_METADATA = exports.DAPR_BINDING_METADATA = void 0;
3
+ exports.DAPR_WORKFLOW_METADATA = exports.DAPR_ACTIVITY_METADATA = exports.DAPR_ACTOR_STATE_METADATA = exports.DAPR_ACTOR_METADATA = exports.DAPR_ACTOR_EVENT_METADATA = exports.DAPR_ACTOR_PUBSUB_METADATA = exports.DAPR_PUBSUB_METADATA = exports.DAPR_BINDING_METADATA = void 0;
4
4
  exports.DAPR_BINDING_METADATA = 'DAPR_BINDING_METADATA';
5
5
  exports.DAPR_PUBSUB_METADATA = 'DAPR_PUBSUB_METADATA';
6
6
  exports.DAPR_ACTOR_PUBSUB_METADATA = 'DAPR_PUBSUB_METADATA';
7
7
  exports.DAPR_ACTOR_EVENT_METADATA = 'DAPR_ACTOR_EVENT_METADATA';
8
8
  exports.DAPR_ACTOR_METADATA = 'DAPR_ACTOR_METADATA';
9
9
  exports.DAPR_ACTOR_STATE_METADATA = 'DAPR_ACTOR_STATE_METADATA';
10
+ exports.DAPR_ACTIVITY_METADATA = 'DAPR_ACTIVITY_METADATA';
11
+ exports.DAPR_WORKFLOW_METADATA = 'DAPR_WORKFLOW_METADATA';
@@ -0,0 +1,6 @@
1
+ import { Type } from '@nestjs/common';
2
+ export interface DaprActivityMetadata {
3
+ name?: string;
4
+ }
5
+ export declare function DaprActivity(options?: DaprActivityMetadata): ClassDecorator;
6
+ export declare function getActivityMetadata(target: Type<any>): DaprActivityMetadata;
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getActivityMetadata = exports.DaprActivity = void 0;
4
+ const common_1 = require("@nestjs/common");
5
+ const constants_1 = require("./constants");
6
+ function DaprActivity(options) {
7
+ return (target) => {
8
+ (0, common_1.SetMetadata)(constants_1.DAPR_ACTIVITY_METADATA, {
9
+ name: options === null || options === void 0 ? void 0 : options.name,
10
+ })(target);
11
+ (0, common_1.Injectable)({ scope: common_1.Scope.DEFAULT })(target);
12
+ };
13
+ }
14
+ exports.DaprActivity = DaprActivity;
15
+ function getActivityMetadata(target) {
16
+ return Reflect.getMetadata(constants_1.DAPR_ACTIVITY_METADATA, target);
17
+ }
18
+ exports.getActivityMetadata = getActivityMetadata;
@@ -1,14 +1,18 @@
1
1
  import { Type } from '@nestjs/common';
2
2
  import { Reflector } from '@nestjs/core';
3
+ import { DaprActivityMetadata } from './dapr-activity.decorator';
3
4
  import { DaprActorOnEventMetadata } from './dapr-actor-on-event.decorator';
4
5
  import { DaprActorMetadata } from './dapr-actor.decorator';
5
6
  import { DaprBindingMetadata } from './dapr-binding.decorator';
6
7
  import { DaprPubSubMetadata } from './dapr-pubsub.decorator';
8
+ import { DaprWorkflowMetadata } from './dapr-workflow.decorator';
7
9
  export declare class DaprMetadataAccessor {
8
10
  private readonly reflector;
9
11
  constructor(reflector: Reflector);
10
12
  getDaprPubSubHandlerMetadata(target: Type<unknown>): DaprPubSubMetadata | undefined;
11
13
  getDaprBindingHandlerMetadata(target: Type<unknown>): DaprBindingMetadata | undefined;
12
14
  getDaprActorMetadata(target: Function | Type<unknown>): DaprActorMetadata | undefined;
15
+ getDaprActivityMetadata(target: Function | Type<unknown>): DaprActivityMetadata | undefined;
16
+ getDaprWorkflowMetadata(target: Function | Type<unknown>): DaprWorkflowMetadata | undefined;
13
17
  getDaprEventHandlerMetadata(target: Type<unknown>): DaprActorOnEventMetadata<any>[] | undefined;
14
18
  }
@@ -26,6 +26,12 @@ let DaprMetadataAccessor = class DaprMetadataAccessor {
26
26
  getDaprActorMetadata(target) {
27
27
  return this.reflector.get(constants_1.DAPR_ACTOR_METADATA, target);
28
28
  }
29
+ getDaprActivityMetadata(target) {
30
+ return this.reflector.get(constants_1.DAPR_ACTIVITY_METADATA, target);
31
+ }
32
+ getDaprWorkflowMetadata(target) {
33
+ return this.reflector.get(constants_1.DAPR_WORKFLOW_METADATA, target);
34
+ }
29
35
  getDaprEventHandlerMetadata(target) {
30
36
  if (!target || (typeof target !== 'function' && typeof target !== 'object')) {
31
37
  return undefined;
@@ -0,0 +1,6 @@
1
+ import { Type } from '@nestjs/common';
2
+ export interface DaprWorkflowMetadata {
3
+ name?: string;
4
+ }
5
+ export declare function DaprWorkflow(options?: DaprWorkflowMetadata): ClassDecorator;
6
+ export declare function getWorkflowMetadata(target: Type<any>): DaprWorkflowMetadata;
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getWorkflowMetadata = exports.DaprWorkflow = void 0;
4
+ const common_1 = require("@nestjs/common");
5
+ const constants_1 = require("./constants");
6
+ function DaprWorkflow(options) {
7
+ return (target) => {
8
+ (0, common_1.SetMetadata)(constants_1.DAPR_WORKFLOW_METADATA, {
9
+ name: options === null || options === void 0 ? void 0 : options.name,
10
+ })(target);
11
+ (0, common_1.Injectable)({ scope: common_1.Scope.DEFAULT })(target);
12
+ };
13
+ }
14
+ exports.DaprWorkflow = DaprWorkflow;
15
+ function getWorkflowMetadata(target) {
16
+ return Reflect.getMetadata(constants_1.DAPR_WORKFLOW_METADATA, target);
17
+ }
18
+ exports.getWorkflowMetadata = getWorkflowMetadata;
@@ -7,6 +7,7 @@ import { DaprContextService } from './dapr-context-service';
7
7
  import { DaprMetadataAccessor } from './dapr-metadata.accessor';
8
8
  import { DaprModuleOptions } from './dapr.module';
9
9
  import { DaprPubSubClient } from './pubsub/dapr-pubsub-client.service';
10
+ import { DaprWorkflowClient } from './workflow/dapr-workflow-client.service';
10
11
  export declare class DaprLoader implements OnApplicationBootstrap, OnApplicationShutdown {
11
12
  private readonly discoveryService;
12
13
  private readonly metadataScanner;
@@ -17,13 +18,17 @@ export declare class DaprLoader implements OnApplicationBootstrap, OnApplication
17
18
  private readonly moduleRef;
18
19
  private readonly contextService;
19
20
  private readonly pubSubClient;
21
+ private readonly workflowClient;
20
22
  private readonly actorManager;
21
23
  private readonly logger;
22
- constructor(discoveryService: DiscoveryService, metadataScanner: MetadataScanner, daprServer: DaprServer, daprMetadataAccessor: DaprMetadataAccessor, options: DaprModuleOptions, daprActorClient: DaprActorClient, moduleRef: ModuleRef, contextService: DaprContextService, pubSubClient: DaprPubSubClient, actorManager: NestActorManager);
24
+ private workflowRuntime;
25
+ constructor(discoveryService: DiscoveryService, metadataScanner: MetadataScanner, daprServer: DaprServer, daprMetadataAccessor: DaprMetadataAccessor, options: DaprModuleOptions, daprActorClient: DaprActorClient, moduleRef: ModuleRef, contextService: DaprContextService, pubSubClient: DaprPubSubClient, workflowClient: DaprWorkflowClient, actorManager: NestActorManager);
23
26
  onApplicationBootstrap(): Promise<void>;
24
27
  onApplicationShutdown(): Promise<void>;
25
- loadDaprHandlers(): void;
28
+ loadDaprHandlers(isActorsEnabled: boolean, isWorkflowEnabled: boolean): void;
26
29
  private subscribeToDaprPubSubEventIfListener;
27
30
  private subscribeToDaprBindingEventIfListener;
31
+ private registerActivity;
32
+ private registerWorkflow;
28
33
  private registerActor;
29
34
  }
@@ -37,8 +37,11 @@ const dapr_context_service_1 = require("./dapr-context-service");
37
37
  const dapr_metadata_accessor_1 = require("./dapr-metadata.accessor");
38
38
  const dapr_module_1 = require("./dapr.module");
39
39
  const dapr_pubsub_client_service_1 = require("./pubsub/dapr-pubsub-client.service");
40
+ const dapr_workflow_client_service_1 = require("./workflow/dapr-workflow-client.service");
41
+ const workflow_1 = require("./workflow/workflow");
42
+ const workflow_activity_1 = require("./workflow/workflow-activity");
40
43
  let DaprLoader = DaprLoader_1 = class DaprLoader {
41
- constructor(discoveryService, metadataScanner, daprServer, daprMetadataAccessor, options, daprActorClient, moduleRef, contextService, pubSubClient, actorManager) {
44
+ constructor(discoveryService, metadataScanner, daprServer, daprMetadataAccessor, options, daprActorClient, moduleRef, contextService, pubSubClient, workflowClient, actorManager) {
42
45
  this.discoveryService = discoveryService;
43
46
  this.metadataScanner = metadataScanner;
44
47
  this.daprServer = daprServer;
@@ -48,76 +51,120 @@ let DaprLoader = DaprLoader_1 = class DaprLoader {
48
51
  this.moduleRef = moduleRef;
49
52
  this.contextService = contextService;
50
53
  this.pubSubClient = pubSubClient;
54
+ this.workflowClient = workflowClient;
51
55
  this.actorManager = actorManager;
52
56
  this.logger = new common_1.Logger(DaprLoader_1.name);
53
57
  }
54
58
  onApplicationBootstrap() {
55
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s;
59
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y;
56
60
  return __awaiter(this, void 0, void 0, function* () {
57
- if (this.options.disabled) {
58
- this.logger.log('Dapr server is disabled');
59
- return;
60
- }
61
- this.actorManager.setup(this.moduleRef, this.options);
62
- if (this.options.contextProvider !== dapr_module_1.DaprContextProvider.None) {
63
- this.actorManager.setupCSLWrapper(this.options, this.contextService);
61
+ this.logger.log('Dapr initializing');
62
+ const isEnabled = !this.options.disabled;
63
+ const isActorsEnabled = (_b = (_a = this.options.actorOptions) === null || _a === void 0 ? void 0 : _a.enabled) !== null && _b !== void 0 ? _b : true;
64
+ const isWorkflowEnabled = (_d = (_c = this.options.workflowOptions) === null || _c === void 0 ? void 0 : _c.enabled) !== null && _d !== void 0 ? _d : true;
65
+ if (isWorkflowEnabled) {
66
+ this.workflowRuntime = new dapr_1.WorkflowRuntime({
67
+ daprHost: this.options.serverHost,
68
+ daprPort: (_e = this.options.workflowOptions.daprPort) !== null && _e !== void 0 ? _e : '3501',
69
+ });
64
70
  }
65
- if ((_c = (_b = (_a = this.options.clientOptions) === null || _a === void 0 ? void 0 : _a.actor) === null || _b === void 0 ? void 0 : _b.reentrancy) === null || _c === void 0 ? void 0 : _c.enabled) {
66
- this.actorManager.setupReentrancy(this.options);
71
+ if (isActorsEnabled) {
72
+ this.actorManager.setup(this.moduleRef, this.options);
73
+ if (this.options.contextProvider !== dapr_module_1.DaprContextProvider.None) {
74
+ this.actorManager.setupCSLWrapper(this.options, this.contextService);
75
+ }
76
+ if ((_h = (_g = (_f = this.options.clientOptions) === null || _f === void 0 ? void 0 : _f.actor) === null || _g === void 0 ? void 0 : _g.reentrancy) === null || _h === void 0 ? void 0 : _h.enabled) {
77
+ this.actorManager.setupReentrancy(this.options);
78
+ }
67
79
  }
68
- if ((_d = this.options.pubsubOptions) === null || _d === void 0 ? void 0 : _d.defaultName) {
80
+ if ((_j = this.options.pubsubOptions) === null || _j === void 0 ? void 0 : _j.defaultName) {
69
81
  this.pubSubClient.setDefaultName(this.options.pubsubOptions.defaultName);
70
82
  }
71
- if (this.options.actorOptions) {
72
- this.daprActorClient.setAllowInternalCalls((_f = (_e = this.options.actorOptions) === null || _e === void 0 ? void 0 : _e.allowInternalCalls) !== null && _f !== void 0 ? _f : false);
73
- this.daprActorClient.setPrefix((_h = (_g = this.options.actorOptions) === null || _g === void 0 ? void 0 : _g.prefix) !== null && _h !== void 0 ? _h : '', (_k = (_j = this.options.actorOptions) === null || _j === void 0 ? void 0 : _j.delimiter) !== null && _k !== void 0 ? _k : '-');
74
- this.daprActorClient.setTypeNamePrefix((_m = (_l = this.options.actorOptions) === null || _l === void 0 ? void 0 : _l.typeNamePrefix) !== null && _m !== void 0 ? _m : '');
75
- if ((_o = this.options.actorOptions) === null || _o === void 0 ? void 0 : _o.prefix) {
76
- this.logger.log(`Actors will be prefixed with ${(_q = (_p = this.options.actorOptions) === null || _p === void 0 ? void 0 : _p.prefix) !== null && _q !== void 0 ? _q : ''} and delimited with ${(_s = (_r = this.options.actorOptions) === null || _r === void 0 ? void 0 : _r.delimiter) !== null && _s !== void 0 ? _s : '-'}`);
83
+ if (isActorsEnabled) {
84
+ if (this.options.actorOptions) {
85
+ this.daprActorClient.setAllowInternalCalls((_l = (_k = this.options.actorOptions) === null || _k === void 0 ? void 0 : _k.allowInternalCalls) !== null && _l !== void 0 ? _l : false);
86
+ this.daprActorClient.setPrefix((_o = (_m = this.options.actorOptions) === null || _m === void 0 ? void 0 : _m.prefix) !== null && _o !== void 0 ? _o : '', (_q = (_p = this.options.actorOptions) === null || _p === void 0 ? void 0 : _p.delimiter) !== null && _q !== void 0 ? _q : '-');
87
+ this.daprActorClient.setTypeNamePrefix((_s = (_r = this.options.actorOptions) === null || _r === void 0 ? void 0 : _r.typeNamePrefix) !== null && _s !== void 0 ? _s : '');
88
+ if ((_t = this.options.actorOptions) === null || _t === void 0 ? void 0 : _t.prefix) {
89
+ this.logger.log(`Actors will be prefixed with ${(_v = (_u = this.options.actorOptions) === null || _u === void 0 ? void 0 : _u.prefix) !== null && _v !== void 0 ? _v : ''} and delimited with ${(_x = (_w = this.options.actorOptions) === null || _w === void 0 ? void 0 : _w.delimiter) !== null && _x !== void 0 ? _x : '-'}`);
90
+ }
91
+ }
92
+ if (isEnabled) {
93
+ this.logger.log('Registering Dapr actors');
94
+ yield this.daprServer.actor.init();
77
95
  }
78
96
  }
79
- yield this.daprServer.actor.init();
80
- this.loadDaprHandlers();
81
- if (this.options.serverPort === '0') {
82
- this.logger.log('Dapr server will not be started');
83
- return;
84
- }
85
- this.logger.log('Starting Dapr server');
86
- if (this.options.catchErrors) {
87
- const server = this.daprServer.daprServer.getServer();
88
- if (server) {
89
- server.use((err, req, res, next) => {
90
- if (err) {
91
- this.logger.error(err, err.stack, 'DaprServer');
92
- res.status(500).send(err);
93
- }
94
- });
97
+ this.loadDaprHandlers(isActorsEnabled, isWorkflowEnabled);
98
+ if (isEnabled && this.options.serverPort !== '0') {
99
+ this.logger.log('Starting Dapr server');
100
+ if (this.options.catchErrors) {
101
+ const server = this.daprServer.daprServer.getServer();
102
+ if (server) {
103
+ server.use((err, req, res, next) => {
104
+ if (err) {
105
+ this.logger.error(err, err.stack, 'DaprServer');
106
+ res.status(500).send(err);
107
+ }
108
+ });
109
+ }
95
110
  }
111
+ yield this.daprServer.start();
112
+ this.logger.log('Dapr server started');
96
113
  }
97
- yield this.daprServer.start();
98
- this.logger.log('Dapr server started');
99
- const resRegisteredActors = yield this.daprServer.actor.getRegisteredActors();
100
- if (resRegisteredActors.length > 0) {
101
- this.logger.log(`Registered Actors: ${resRegisteredActors.join(', ')}`);
114
+ if (isEnabled && this.options.workflowOptions.enabled) {
115
+ this.logger.log('Starting Dapr workflow runtime');
116
+ yield this.workflowRuntime.start();
117
+ yield this.workflowClient.start({
118
+ daprHost: this.options.serverHost,
119
+ daprPort: (_y = this.options.workflowOptions.daprPort) !== null && _y !== void 0 ? _y : '3501',
120
+ });
121
+ }
122
+ if (!isActorsEnabled || !isEnabled)
123
+ return;
124
+ const registeredActors = yield this.daprServer.actor.getRegisteredActors();
125
+ if (registeredActors.length > 0) {
126
+ this.logger.log(`Registered Actors: ${registeredActors.join(', ')}`);
102
127
  }
103
128
  });
104
129
  }
105
130
  onApplicationShutdown() {
106
131
  return __awaiter(this, void 0, void 0, function* () {
132
+ if (this.workflowRuntime && this.options.workflowOptions.enabled) {
133
+ this.logger.log('Stopping Dapr workflow runtime');
134
+ try {
135
+ yield this.workflowRuntime.stop();
136
+ yield this.workflowClient.stop();
137
+ }
138
+ catch (_a) {
139
+ }
140
+ finally {
141
+ this.logger.log('Dapr workflow runtime stopped');
142
+ }
143
+ }
107
144
  this.logger.log('Stopping Dapr server');
108
- yield this.daprServer.stop();
109
- this.logger.log('Dapr server stopped');
145
+ try {
146
+ if (!this.options.disabled) {
147
+ yield this.daprServer.stop();
148
+ }
149
+ }
150
+ catch (_b) {
151
+ }
152
+ finally {
153
+ this.logger.log('Dapr server stopped');
154
+ }
110
155
  });
111
156
  }
112
- loadDaprHandlers() {
157
+ loadDaprHandlers(isActorsEnabled, isWorkflowEnabled) {
113
158
  const providers = this.discoveryService.getProviders();
114
- providers
115
- .filter((wrapper) => wrapper.isDependencyTreeStatic() &&
116
- wrapper.metatype &&
117
- this.daprMetadataAccessor.getDaprActorMetadata(wrapper.metatype))
118
- .forEach((wrapper) => __awaiter(this, void 0, void 0, function* () {
119
- yield this.registerActor(wrapper.metatype);
120
- }));
159
+ if (isActorsEnabled) {
160
+ providers
161
+ .filter((wrapper) => wrapper.isDependencyTreeStatic() &&
162
+ wrapper.metatype &&
163
+ this.daprMetadataAccessor.getDaprActorMetadata(wrapper.metatype))
164
+ .forEach((wrapper) => __awaiter(this, void 0, void 0, function* () {
165
+ yield this.registerActor(wrapper.metatype);
166
+ }));
167
+ }
121
168
  const controllers = this.discoveryService.getControllers();
122
169
  [...providers, ...controllers]
123
170
  .filter((wrapper) => wrapper.isDependencyTreeStatic())
@@ -130,6 +177,22 @@ let DaprLoader = DaprLoader_1 = class DaprLoader {
130
177
  yield this.subscribeToDaprBindingEventIfListener(instance, methodKey);
131
178
  }));
132
179
  }));
180
+ if (isWorkflowEnabled) {
181
+ providers
182
+ .filter((wrapper) => wrapper.isDependencyTreeStatic() &&
183
+ wrapper.metatype &&
184
+ this.daprMetadataAccessor.getDaprActivityMetadata(wrapper.metatype))
185
+ .forEach((wrapper) => __awaiter(this, void 0, void 0, function* () {
186
+ yield this.registerActivity(wrapper.metatype);
187
+ }));
188
+ providers
189
+ .filter((wrapper) => wrapper.isDependencyTreeStatic() &&
190
+ wrapper.metatype &&
191
+ this.daprMetadataAccessor.getDaprWorkflowMetadata(wrapper.metatype))
192
+ .forEach((wrapper) => __awaiter(this, void 0, void 0, function* () {
193
+ yield this.registerWorkflow(wrapper.metatype);
194
+ }));
195
+ }
133
196
  }
134
197
  subscribeToDaprPubSubEventIfListener(instance, methodKey) {
135
198
  var _a, _b;
@@ -181,6 +244,36 @@ let DaprLoader = DaprLoader_1 = class DaprLoader {
181
244
  }));
182
245
  });
183
246
  }
247
+ registerActivity(activityType) {
248
+ var _a, _b;
249
+ return __awaiter(this, void 0, void 0, function* () {
250
+ if (!activityType)
251
+ return;
252
+ const metadata = this.daprMetadataAccessor.getDaprActivityMetadata(activityType);
253
+ const activityTypeName = (_b = (_a = metadata.name) !== null && _a !== void 0 ? _a : activityType.name) !== null && _b !== void 0 ? _b : activityType.constructor.name;
254
+ if (!activityType.prototype.run) {
255
+ this.logger.error(`Activity ${activityTypeName} does not have a run method`);
256
+ return;
257
+ }
258
+ this.logger.log(`Registering Dapr Activity: ${activityTypeName}`);
259
+ this.workflowRuntime.registerActivityWithName(activityTypeName, (0, workflow_activity_1.lazyActivity)(this.moduleRef, activityType));
260
+ });
261
+ }
262
+ registerWorkflow(workflowType) {
263
+ var _a, _b;
264
+ return __awaiter(this, void 0, void 0, function* () {
265
+ if (!workflowType)
266
+ return;
267
+ const metadata = this.daprMetadataAccessor.getDaprWorkflowMetadata(workflowType);
268
+ const workflowTypeName = (_b = (_a = metadata.name) !== null && _a !== void 0 ? _a : workflowType.name) !== null && _b !== void 0 ? _b : workflowType.constructor.name;
269
+ if (!workflowType.prototype.run) {
270
+ this.logger.error(`Workflow ${workflowTypeName} does not have a run method`);
271
+ return;
272
+ }
273
+ this.logger.log(`Registering Dapr Workflow: ${workflowTypeName}`);
274
+ this.workflowRuntime.registerWorkflowWithName(workflowTypeName, (0, workflow_1.lazyWorkflow)(this.moduleRef, workflowType));
275
+ });
276
+ }
184
277
  registerActor(actorType) {
185
278
  var _a, _b, _c, _d, _e;
186
279
  return __awaiter(this, void 0, void 0, function* () {
@@ -224,6 +317,7 @@ DaprLoader = DaprLoader_1 = __decorate([
224
317
  core_1.ModuleRef,
225
318
  dapr_context_service_1.DaprContextService,
226
319
  dapr_pubsub_client_service_1.DaprPubSubClient,
320
+ dapr_workflow_client_service_1.DaprWorkflowClient,
227
321
  nest_actor_manager_1.NestActorManager])
228
322
  ], DaprLoader);
229
323
  exports.DaprLoader = DaprLoader;
@@ -5,9 +5,11 @@ export declare const DAPR_MODULE_OPTIONS_TOKEN = "DAPR_MODULE_OPTIONS_TOKEN";
5
5
  export interface DaprModuleOptions {
6
6
  serverHost?: string;
7
7
  serverPort?: string;
8
+ serverGrpcPort?: string;
8
9
  communicationProtocol?: CommunicationProtocolEnum;
9
10
  clientOptions?: DaprClientOptions;
10
11
  actorOptions?: DaprModuleActorOptions;
12
+ workflowOptions?: DaprModuleWorkflowOptions;
11
13
  pubsubOptions?: DaprModulePubSubOptions;
12
14
  disabled?: boolean;
13
15
  contextProvider?: DaprContextProvider;
@@ -19,11 +21,16 @@ export interface DaprModuleLoggingOptions {
19
21
  enabled: boolean;
20
22
  }
21
23
  export interface DaprModuleActorOptions {
24
+ enabled: boolean;
22
25
  prefix?: string;
23
26
  delimiter?: string;
24
27
  typeNamePrefix?: string;
25
28
  allowInternalCalls?: boolean;
26
29
  }
30
+ export interface DaprModuleWorkflowOptions {
31
+ enabled: boolean;
32
+ daprPort?: string;
33
+ }
27
34
  export interface DaprModulePubSubOptions {
28
35
  defaultName?: string;
29
36
  onError?: (name: string, topicName: string, error: any) => DaprPubSubStatusEnum;
@@ -30,6 +30,7 @@ const dapr_event_subscriber_loader_1 = require("./dapr-event-subscriber.loader")
30
30
  const dapr_metadata_accessor_1 = require("./dapr-metadata.accessor");
31
31
  const dapr_loader_1 = require("./dapr.loader");
32
32
  const dapr_pubsub_client_service_1 = require("./pubsub/dapr-pubsub-client.service");
33
+ const dapr_workflow_client_service_1 = require("./workflow/dapr-workflow-client.service");
33
34
  exports.DAPR_MODULE_OPTIONS_TOKEN = 'DAPR_MODULE_OPTIONS_TOKEN';
34
35
  var DaprContextProvider;
35
36
  (function (DaprContextProvider) {
@@ -48,6 +49,11 @@ function createOptionsProvider(options) {
48
49
  actorScanInterval: '1m',
49
50
  };
50
51
  }
52
+ if (!options.workflowOptions) {
53
+ options.workflowOptions = {
54
+ enabled: true,
55
+ };
56
+ }
51
57
  return { provide: exports.DAPR_MODULE_OPTIONS_TOKEN, useValue: options || {} };
52
58
  }
53
59
  exports.createOptionsProvider = createOptionsProvider;
@@ -82,6 +88,7 @@ let DaprModule = DaprModule_1 = class DaprModule {
82
88
  dapr_context_service_1.DaprContextService,
83
89
  dapr_actor_client_service_1.DaprActorClient,
84
90
  dapr_pubsub_client_service_1.DaprPubSubClient,
91
+ dapr_workflow_client_service_1.DaprWorkflowClient,
85
92
  dapr_event_emitter_service_1.DaprEventEmitter,
86
93
  actor_runtime_service_1.ActorRuntimeService,
87
94
  core_1.Reflector,
@@ -94,6 +101,7 @@ let DaprModule = DaprModule_1 = class DaprModule {
94
101
  dapr_context_service_1.DaprContextService,
95
102
  actor_runtime_service_1.ActorRuntimeService,
96
103
  dapr_actor_client_service_1.DaprActorClient,
104
+ dapr_workflow_client_service_1.DaprWorkflowClient,
97
105
  dapr_event_subscriber_loader_1.DaprEventSubscriberLoader,
98
106
  dapr_event_emitter_service_1.DaprEventEmitter,
99
107
  ],
@@ -130,6 +138,7 @@ let DaprModule = DaprModule_1 = class DaprModule {
130
138
  dapr_context_service_1.DaprContextService,
131
139
  dapr_actor_client_service_1.DaprActorClient,
132
140
  dapr_pubsub_client_service_1.DaprPubSubClient,
141
+ dapr_workflow_client_service_1.DaprWorkflowClient,
133
142
  dapr_event_emitter_service_1.DaprEventEmitter,
134
143
  actor_runtime_service_1.ActorRuntimeService,
135
144
  core_1.Reflector,
@@ -142,6 +151,7 @@ let DaprModule = DaprModule_1 = class DaprModule {
142
151
  dapr_context_service_1.DaprContextService,
143
152
  actor_runtime_service_1.ActorRuntimeService,
144
153
  dapr_actor_client_service_1.DaprActorClient,
154
+ dapr_workflow_client_service_1.DaprWorkflowClient,
145
155
  dapr_event_subscriber_loader_1.DaprEventSubscriberLoader,
146
156
  dapr_event_emitter_service_1.DaprEventEmitter,
147
157
  ],
@@ -0,0 +1 @@
1
+ export declare function fromJson(json: any): any;
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.fromJson = void 0;
4
+ function fromJson(json) {
5
+ try {
6
+ if (typeof json === 'string') {
7
+ const isJson = json.includes('{') || json.includes('[');
8
+ if (isJson)
9
+ return JSON.parse(json);
10
+ }
11
+ return json;
12
+ }
13
+ catch (error) {
14
+ return json;
15
+ }
16
+ }
17
+ exports.fromJson = fromJson;
@@ -0,0 +1,19 @@
1
+ import { DaprWorkflowClient as WorkflowClient, WorkflowState } from '@dapr/dapr';
2
+ import { WorkflowClientOptions } from '@dapr/dapr/types/workflow/WorkflowClientOption';
3
+ import { Type } from '@nestjs/common';
4
+ import { WorkflowInput } from './workflow';
5
+ export declare class DaprWorkflowClient {
6
+ client?: WorkflowClient;
7
+ start(options?: Partial<WorkflowClientOptions>): Promise<void>;
8
+ scheduleNewWorkflow(workflowName: string, input?: any, instanceId?: string, startAt?: Date): Promise<string>;
9
+ scheduleNewWorkflow<C extends Type<any>>(workflowClass: C, input: WorkflowInput<C>, instanceId?: string, startAt?: Date): Promise<string>;
10
+ terminateWorkflow(workflowInstanceId: string, output: any): Promise<void>;
11
+ getWorkflowState(workflowInstanceId: string, getInputsAndOutputs: boolean): Promise<WorkflowState | undefined>;
12
+ waitForWorkflowStart(workflowInstanceId: string, fetchPayloads?: boolean, timeoutInSeconds?: number): Promise<WorkflowState | undefined>;
13
+ waitForWorkflowCompletion(workflowInstanceId: string, fetchPayloads?: boolean, timeoutInSeconds?: number): Promise<WorkflowState | undefined>;
14
+ raiseEvent(workflowInstanceId: string, eventName: string, eventPayload?: any): Promise<void>;
15
+ purgeWorkflow(workflowInstanceId: string): Promise<boolean>;
16
+ suspendWorkflow(workflowInstanceId: string): Promise<void>;
17
+ resumeWorkflow(workflowInstanceId: string): Promise<void>;
18
+ stop(): Promise<void>;
19
+ }
@@ -0,0 +1,90 @@
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 __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
9
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
10
+ return new (P || (P = Promise))(function (resolve, reject) {
11
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
12
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
13
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
14
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
15
+ });
16
+ };
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ exports.DaprWorkflowClient = void 0;
19
+ const dapr_1 = require("@dapr/dapr");
20
+ const common_1 = require("@nestjs/common");
21
+ let DaprWorkflowClient = class DaprWorkflowClient {
22
+ start(options) {
23
+ return __awaiter(this, void 0, void 0, function* () {
24
+ this.client = new dapr_1.DaprWorkflowClient(options);
25
+ });
26
+ }
27
+ scheduleNewWorkflow(wf, input, instanceId, startAt) {
28
+ return __awaiter(this, void 0, void 0, function* () {
29
+ return this.client.scheduleNewWorkflow(wf, input, instanceId, startAt);
30
+ });
31
+ }
32
+ terminateWorkflow(workflowInstanceId, output) {
33
+ var _a;
34
+ return __awaiter(this, void 0, void 0, function* () {
35
+ yield ((_a = this.client) === null || _a === void 0 ? void 0 : _a.terminateWorkflow(workflowInstanceId, output));
36
+ });
37
+ }
38
+ getWorkflowState(workflowInstanceId, getInputsAndOutputs) {
39
+ var _a;
40
+ return __awaiter(this, void 0, void 0, function* () {
41
+ return (_a = this.client) === null || _a === void 0 ? void 0 : _a.getWorkflowState(workflowInstanceId, getInputsAndOutputs);
42
+ });
43
+ }
44
+ waitForWorkflowStart(workflowInstanceId, fetchPayloads, timeoutInSeconds) {
45
+ var _a;
46
+ return __awaiter(this, void 0, void 0, function* () {
47
+ return (_a = this.client) === null || _a === void 0 ? void 0 : _a.waitForWorkflowStart(workflowInstanceId, fetchPayloads, timeoutInSeconds);
48
+ });
49
+ }
50
+ waitForWorkflowCompletion(workflowInstanceId, fetchPayloads, timeoutInSeconds) {
51
+ var _a;
52
+ return __awaiter(this, void 0, void 0, function* () {
53
+ return (_a = this.client) === null || _a === void 0 ? void 0 : _a.waitForWorkflowCompletion(workflowInstanceId, fetchPayloads, timeoutInSeconds);
54
+ });
55
+ }
56
+ raiseEvent(workflowInstanceId, eventName, eventPayload) {
57
+ var _a;
58
+ return __awaiter(this, void 0, void 0, function* () {
59
+ yield ((_a = this.client) === null || _a === void 0 ? void 0 : _a.raiseEvent(workflowInstanceId, eventName, eventPayload));
60
+ });
61
+ }
62
+ purgeWorkflow(workflowInstanceId) {
63
+ var _a;
64
+ return __awaiter(this, void 0, void 0, function* () {
65
+ return (_a = this.client) === null || _a === void 0 ? void 0 : _a.purgeWorkflow(workflowInstanceId);
66
+ });
67
+ }
68
+ suspendWorkflow(workflowInstanceId) {
69
+ var _a;
70
+ return __awaiter(this, void 0, void 0, function* () {
71
+ yield ((_a = this.client) === null || _a === void 0 ? void 0 : _a.suspendWorkflow(workflowInstanceId));
72
+ });
73
+ }
74
+ resumeWorkflow(workflowInstanceId) {
75
+ var _a;
76
+ return __awaiter(this, void 0, void 0, function* () {
77
+ yield ((_a = this.client) === null || _a === void 0 ? void 0 : _a.resumeWorkflow(workflowInstanceId));
78
+ });
79
+ }
80
+ stop() {
81
+ var _a;
82
+ return __awaiter(this, void 0, void 0, function* () {
83
+ yield ((_a = this.client) === null || _a === void 0 ? void 0 : _a.stop());
84
+ });
85
+ }
86
+ };
87
+ DaprWorkflowClient = __decorate([
88
+ (0, common_1.Injectable)()
89
+ ], DaprWorkflowClient);
90
+ exports.DaprWorkflowClient = DaprWorkflowClient;
@@ -0,0 +1,10 @@
1
+ import { WorkflowActivityContext } from '@dapr/dapr';
2
+ import { TWorkflowActivity } from '@dapr/dapr/types/workflow/Activity.type';
3
+ import { Type } from '@nestjs/common';
4
+ import { ModuleRef } from '@nestjs/core';
5
+ export interface WorkflowActivity<TInput = unknown, TResult = unknown> {
6
+ run(context: WorkflowActivityContext, input: TInput): Promise<TResult>;
7
+ }
8
+ export declare function lazyActivity<TInput = unknown, TResult = unknown, TClass extends {
9
+ run(ctx: WorkflowActivityContext, input: TInput): Promise<TResult>;
10
+ } = any>(moduleRef: ModuleRef, klass: Type<TClass>): TWorkflowActivity<TInput, TResult>;
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.lazyActivity = void 0;
13
+ function lazyActivity(moduleRef, klass) {
14
+ let instance;
15
+ return function (ctx, input) {
16
+ return __awaiter(this, void 0, void 0, function* () {
17
+ if (!instance) {
18
+ instance = moduleRef.get(klass, { strict: false });
19
+ }
20
+ return instance.run(ctx, input);
21
+ });
22
+ };
23
+ }
24
+ exports.lazyActivity = lazyActivity;
@@ -0,0 +1,22 @@
1
+ import { TWorkflow, WorkflowContext, WorkflowState } from '@dapr/dapr';
2
+ import { Type } from '@nestjs/common';
3
+ import { ModuleRef } from '@nestjs/core';
4
+ import { WorkflowActivity } from './workflow-activity';
5
+ export interface Workflow<TResult = unknown, TInput = unknown> {
6
+ run(context: WorkflowContext, input: TInput): AsyncGenerator<unknown, TResult> | TResult;
7
+ }
8
+ export declare function lazyWorkflow<TInput = unknown, TResult = unknown, TClass extends {
9
+ run(context: WorkflowContext, input: TInput): AsyncGenerator<unknown, TResult> | TResult;
10
+ } = any>(moduleRef: ModuleRef, klass: Type<TClass>): TWorkflow;
11
+ export type WorkflowInput<C extends Type<any>> = Parameters<InstanceType<C>['run']> extends [any, infer P, ...any[]] ? P : void;
12
+ export type WorkflowReturn<C extends Type<any>> = ReturnType<InstanceType<C>['run']> extends AsyncGenerator<any, infer R, any> ? R : Awaited<ReturnType<InstanceType<C>['run']>>;
13
+ export type ActivityInput<C extends Type<WorkflowActivity>> = Parameters<InstanceType<C>['run']>[1];
14
+ export type ActivityOutput<C extends Type<WorkflowActivity>> = Awaited<ReturnType<InstanceType<C>['run']>>;
15
+ declare module '@dapr/dapr' {
16
+ interface WorkflowContext {
17
+ callActivity<C extends Type<WorkflowActivity>>(activityClass: C, input: ActivityInput<C>): Promise<ActivityOutput<C>>;
18
+ }
19
+ }
20
+ export declare function expect<T>(value: unknown): T;
21
+ export declare function workflowOutput<C extends Type<any>>(workflowType: C, state: WorkflowState): WorkflowReturn<C>;
22
+ export declare function workflowInput<C extends Type<any>>(workflowType: C, state: WorkflowState): WorkflowInput<C>;
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.workflowInput = exports.workflowOutput = exports.expect = exports.lazyWorkflow = void 0;
4
+ function lazyWorkflow(moduleRef, klass) {
5
+ let instance;
6
+ return function (ctx, input) {
7
+ if (!instance) {
8
+ instance = moduleRef.get(klass, { strict: false });
9
+ }
10
+ return instance.run(ctx, input);
11
+ };
12
+ }
13
+ exports.lazyWorkflow = lazyWorkflow;
14
+ function expect(value) {
15
+ return value;
16
+ }
17
+ exports.expect = expect;
18
+ function workflowOutput(workflowType, state) {
19
+ const raw = state.serializedOutput;
20
+ return raw
21
+ ? JSON.parse(raw)
22
+ : undefined;
23
+ }
24
+ exports.workflowOutput = workflowOutput;
25
+ function workflowInput(workflowType, state) {
26
+ const raw = state.serializedInput;
27
+ return raw
28
+ ? JSON.parse(raw)
29
+ : undefined;
30
+ }
31
+ exports.workflowInput = workflowInput;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rayondigital/nest-dapr",
3
- "version": "0.9.73",
3
+ "version": "0.9.74",
4
4
  "description": "Develop NestJs microservices using Dapr pubsub, actors and other bindings",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",
@@ -30,12 +30,12 @@
30
30
  "@opentelemetry/core": "^1.0.0",
31
31
  "@opentelemetry/sdk-trace-base": "^1.0.0",
32
32
  "eventemitter2": "^6.0.0",
33
- "nestjs-cls": "^3.6.0",
33
+ "nestjs-cls": "^5.0.0",
34
34
  "rxjs": "^7.1.0",
35
35
  "node-fetch": "^3.0.0"
36
36
  },
37
37
  "dependencies": {
38
- "@dapr/dapr": "^3.4.1",
38
+ "@dapr/dapr": "^3.5.2",
39
39
  "async-lock": "^1.4.1",
40
40
  "node-fetch": "^3.0.0",
41
41
  "whatwg-url": "^14.0.0"
@@ -62,7 +62,7 @@
62
62
  "typescript": "^4.8.4"
63
63
  },
64
64
  "optionalDependencies": {
65
- "nestjs-cls": "^3.6.0",
65
+ "nestjs-cls": "^5.0.0",
66
66
  "eventemitter2": "^6.0.0"
67
67
  },
68
68
  "publishConfig": {