@rayondigital/nest-dapr 0.9.8 → 0.9.9

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.
@@ -2,10 +2,15 @@ import { ActorId, CommunicationProtocolEnum, DaprClient } from '@dapr/dapr';
2
2
  import ActorClient from '@dapr/dapr/actors/client/ActorClient/ActorClient';
3
3
  import Class from '@dapr/dapr/types/Class';
4
4
  import { DaprClientOptions } from '@dapr/dapr/types/DaprClientOptions';
5
+ import { ModuleRef } from '@nestjs/core';
6
+ import { DaprContextService } from '../dapr-context-service';
5
7
  export declare class ActorProxyBuilder<T> {
8
+ moduleRef: ModuleRef;
9
+ daprContextService: DaprContextService;
6
10
  actorClient: ActorClient;
7
11
  actorTypeClass: Class<T>;
8
- constructor(actorTypeClass: Class<T>, daprClient: DaprClient);
9
- constructor(actorTypeClass: Class<T>, host: string, port: string, communicationProtocol: CommunicationProtocolEnum, clientOptions: DaprClientOptions);
12
+ constructor(moduleRef: ModuleRef, actorTypeClass: Class<T>, daprClient: DaprClient);
13
+ constructor(moduleRef: ModuleRef, actorTypeClass: Class<T>, host: string, port: string, communicationProtocol: CommunicationProtocolEnum, clientOptions: DaprClientOptions);
10
14
  build(actorId: ActorId, actorTypeName?: string): T;
15
+ private prepareBody;
11
16
  }
@@ -14,8 +14,13 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
14
14
  Object.defineProperty(exports, "__esModule", { value: true });
15
15
  exports.ActorProxyBuilder = void 0;
16
16
  const ActorClient_1 = __importDefault(require("@dapr/dapr/actors/client/ActorClient/ActorClient"));
17
+ const dapr_context_service_1 = require("../dapr-context-service");
17
18
  class ActorProxyBuilder {
18
- constructor(actorTypeClass, ...args) {
19
+ constructor(moduleRef, actorTypeClass, ...args) {
20
+ this.moduleRef = moduleRef;
21
+ this.daprContextService = moduleRef.get(dapr_context_service_1.DaprContextService, {
22
+ strict: false,
23
+ });
19
24
  this.actorTypeClass = actorTypeClass;
20
25
  if (args.length == 1) {
21
26
  const [daprClient] = args;
@@ -30,18 +35,46 @@ class ActorProxyBuilder {
30
35
  const actorTypeClassName = actorTypeName !== null && actorTypeName !== void 0 ? actorTypeName : this.actorTypeClass.name;
31
36
  const actorClient = this.actorClient;
32
37
  const handler = {
33
- get(_target, propKey, _receiver) {
34
- return function (...args) {
35
- return __awaiter(this, void 0, void 0, function* () {
36
- const body = args.length > 0 ? args : null;
37
- const res = yield actorClient.actor.invoke(actorTypeClassName, actorId, propKey, body);
38
- return res;
39
- });
40
- };
38
+ get: (_target, propKey, _receiver) => {
39
+ return (...args) => __awaiter(this, void 0, void 0, function* () {
40
+ const originalBody = args.length > 0 ? args : null;
41
+ const body = yield this.prepareBody(this.daprContextService, args, originalBody);
42
+ const res = yield actorClient.actor.invoke(actorTypeClassName, actorId, propKey, body);
43
+ return res;
44
+ });
41
45
  },
42
46
  };
43
47
  const proxy = new Proxy(this.actorTypeClass, handler);
44
48
  return proxy;
45
49
  }
50
+ prepareBody(daprContextService, args, body) {
51
+ return __awaiter(this, void 0, void 0, function* () {
52
+ try {
53
+ if (!daprContextService)
54
+ return body;
55
+ const context = daprContextService.get();
56
+ if (context) {
57
+ context['$t'] = 'ctx';
58
+ if (Array.isArray(body)) {
59
+ body.push(context);
60
+ if (args.length === 0 && body.length === 2 && body[0] === null) {
61
+ return [context];
62
+ }
63
+ return body;
64
+ }
65
+ else {
66
+ if (args.length === 0) {
67
+ return context;
68
+ }
69
+ return [body, context];
70
+ }
71
+ }
72
+ return body;
73
+ }
74
+ catch (error) {
75
+ return body;
76
+ }
77
+ });
78
+ }
46
79
  }
47
80
  exports.ActorProxyBuilder = ActorProxyBuilder;
@@ -1,6 +1,8 @@
1
1
  import { ActorId, DaprClient } from '@dapr/dapr';
2
2
  import { Type } from '@nestjs/common';
3
+ import { ModuleRef } from '@nestjs/core';
3
4
  export declare class DaprActorClient {
5
+ private readonly moduleRef;
4
6
  private readonly daprClient;
5
7
  private actorClients;
6
8
  private interfaces;
@@ -8,7 +10,7 @@ export declare class DaprActorClient {
8
10
  private prefix;
9
11
  private delimiter;
10
12
  private typeNamePrefix;
11
- constructor(daprClient: DaprClient);
13
+ constructor(moduleRef: ModuleRef, daprClient: DaprClient);
12
14
  setPrefix(prefix: string, delimiter?: string): void;
13
15
  setTypeNamePrefix(prefix: string): void;
14
16
  register<T>(actorTypeName: string, actorType: Type<T> | Function, daprClient?: DaprClient): void;
@@ -12,9 +12,11 @@ Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.DaprActorClient = void 0;
13
13
  const dapr_1 = require("@dapr/dapr");
14
14
  const common_1 = require("@nestjs/common");
15
+ const core_1 = require("@nestjs/core");
15
16
  const actor_proxy_builder_1 = require("./actor-proxy-builder");
16
17
  let DaprActorClient = class DaprActorClient {
17
- constructor(daprClient) {
18
+ constructor(moduleRef, daprClient) {
19
+ this.moduleRef = moduleRef;
18
20
  this.daprClient = daprClient;
19
21
  this.actorClients = new Map();
20
22
  this.interfaces = new Map();
@@ -32,7 +34,7 @@ let DaprActorClient = class DaprActorClient {
32
34
  }
33
35
  register(actorTypeName, actorType, daprClient) {
34
36
  this.interfaces.set(this.formatActorTypeName(actorTypeName), actorType);
35
- this.actorClients.set(this.formatActorTypeName(actorTypeName), new actor_proxy_builder_1.ActorProxyBuilder(actorType, daprClient !== null && daprClient !== void 0 ? daprClient : this.daprClient));
37
+ this.actorClients.set(this.formatActorTypeName(actorTypeName), new actor_proxy_builder_1.ActorProxyBuilder(this.moduleRef, actorType, daprClient !== null && daprClient !== void 0 ? daprClient : this.daprClient));
36
38
  }
37
39
  registerInterface(actorType, interfaceType, daprClient) {
38
40
  var _a, _b;
@@ -40,7 +42,7 @@ let DaprActorClient = class DaprActorClient {
40
42
  const actorTypeName = (_b = actorType.name) !== null && _b !== void 0 ? _b : actorType.constructor.name;
41
43
  this.interfaceToActorTypeNames.set(interfaceTypeName, actorTypeName);
42
44
  this.interfaces.set(this.formatActorTypeName(interfaceTypeName), actorType);
43
- this.actorClients.set(this.formatActorTypeName(interfaceTypeName), new actor_proxy_builder_1.ActorProxyBuilder(actorType, daprClient !== null && daprClient !== void 0 ? daprClient : this.daprClient));
45
+ this.actorClients.set(this.formatActorTypeName(interfaceTypeName), new actor_proxy_builder_1.ActorProxyBuilder(this.moduleRef, actorType, daprClient !== null && daprClient !== void 0 ? daprClient : this.daprClient));
44
46
  }
45
47
  getActorId(actorId) {
46
48
  var _a;
@@ -104,6 +106,7 @@ let DaprActorClient = class DaprActorClient {
104
106
  };
105
107
  DaprActorClient = __decorate([
106
108
  (0, common_1.Injectable)(),
107
- __metadata("design:paramtypes", [dapr_1.DaprClient])
109
+ __metadata("design:paramtypes", [core_1.ModuleRef,
110
+ dapr_1.DaprClient])
108
111
  ], DaprActorClient);
109
112
  exports.DaprActorClient = DaprActorClient;
@@ -1,7 +1,14 @@
1
- import { ActorId } from '@dapr/dapr';
1
+ import { AbstractActor, ActorId } from '@dapr/dapr';
2
2
  import { ModuleRef } from '@nestjs/core';
3
+ import { DaprContextService } from '../dapr-context-service';
3
4
  import { DaprModuleActorOptions } from '../dapr.module';
4
- export declare function patchActorManagerForNest(moduleRef: ModuleRef, options: DaprModuleActorOptions, invokeWrapperFn?: (actorId: ActorId, methodName: string, data: any, method: (actorId: ActorId, methodName: string, data: any) => Promise<any>) => Promise<any>): void;
5
+ export declare class NestActorManager {
6
+ setup(moduleRef: ModuleRef, options: DaprModuleActorOptions, onActivateFn?: (actorId: ActorId, instance: AbstractActor) => Promise<void>): void;
7
+ private resolveDependencies;
8
+ setupCSLWrapper(contextService: DaprContextService, invokeWrapperFn?: (actorId: ActorId, methodName: string, data: any, method: (actorId: ActorId, methodName: string, data: any) => Promise<any>) => Promise<any>): void;
9
+ private static extractContext;
10
+ private static removeContext;
11
+ }
5
12
  export interface ActorMethodInvocation {
6
13
  actorId: ActorId;
7
14
  method: string;
@@ -1,4 +1,10 @@
1
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
+ };
2
8
  var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
9
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
10
  return new (P || (P = Promise))(function (resolve, reject) {
@@ -11,65 +17,132 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
11
17
  var __importDefault = (this && this.__importDefault) || function (mod) {
12
18
  return (mod && mod.__esModule) ? mod : { "default": mod };
13
19
  };
20
+ var NestActorManager_1;
14
21
  Object.defineProperty(exports, "__esModule", { value: true });
15
- exports.patchActorManagerForNest = void 0;
22
+ exports.NestActorManager = void 0;
23
+ const crypto_1 = require("crypto");
16
24
  const ActorManager_1 = __importDefault(require("@dapr/dapr/actors/runtime/ActorManager"));
17
25
  const common_1 = require("@nestjs/common");
18
26
  const instance_wrapper_1 = require("@nestjs/core/injector/instance-wrapper");
19
- function patchActorManagerForNest(moduleRef, options, invokeWrapperFn) {
20
- const originalCreateActor = ActorManager_1.default.prototype.createActor;
21
- const originalCallActor = ActorManager_1.default.prototype.callActorMethod;
22
- ActorManager_1.default.prototype.createActor = function (actorId) {
27
+ const nestjs_cls_1 = require("nestjs-cls");
28
+ let NestActorManager = NestActorManager_1 = class NestActorManager {
29
+ setup(moduleRef, options, onActivateFn) {
30
+ const originalCreateActor = ActorManager_1.default.prototype.createActor;
31
+ const resolveDependencies = this.resolveDependencies;
32
+ ActorManager_1.default.prototype.createActor = function (actorId) {
33
+ return __awaiter(this, void 0, void 0, function* () {
34
+ const instance = (yield originalCreateActor.bind(this)(actorId));
35
+ if (options === null || options === void 0 ? void 0 : options.typeNamePrefix) {
36
+ instance['actorType'] = `${options.typeNamePrefix}${instance.actorType}`;
37
+ }
38
+ try {
39
+ yield resolveDependencies(moduleRef, instance);
40
+ if (onActivateFn) {
41
+ yield onActivateFn(actorId, instance);
42
+ }
43
+ }
44
+ catch (error) {
45
+ console.error(error);
46
+ throw error;
47
+ }
48
+ return instance;
49
+ });
50
+ };
51
+ }
52
+ resolveDependencies(moduleRef, instance) {
23
53
  return __awaiter(this, void 0, void 0, function* () {
24
- const instance = (yield originalCreateActor.bind(this)(actorId));
25
- if (options === null || options === void 0 ? void 0 : options.typeNamePrefix) {
26
- instance['actorType'] = `${options.typeNamePrefix}${instance.actorType}`;
27
- }
54
+ const type = instance.constructor;
28
55
  try {
29
- yield resolveDependencies(moduleRef, instance);
56
+ const injector = moduleRef['injector'];
57
+ const wrapper = new instance_wrapper_1.InstanceWrapper({
58
+ name: type && type.name,
59
+ metatype: type,
60
+ isResolved: false,
61
+ scope: common_1.Scope.TRANSIENT,
62
+ durable: true,
63
+ });
64
+ const properties = injector.reflectProperties(wrapper.metatype);
65
+ for (const item of properties) {
66
+ if ('type' in item && item.type) {
67
+ const propertyType = item.type;
68
+ const resolved = yield moduleRef.get(propertyType, { strict: false });
69
+ if (resolved) {
70
+ instance[item.key] = resolved;
71
+ }
72
+ }
73
+ }
30
74
  }
31
75
  catch (error) {
32
76
  console.error(error);
33
77
  throw error;
34
78
  }
35
- return instance;
36
79
  });
37
- };
38
- if (invokeWrapperFn) {
80
+ }
81
+ setupCSLWrapper(contextService, invokeWrapperFn) {
82
+ const clsService = contextService.getService();
83
+ if (!clsService) {
84
+ throw new Error(`Unable to resolve a CLS from the NestJS DI container`);
85
+ }
86
+ const originalCallActor = ActorManager_1.default.prototype.callActorMethod;
39
87
  ActorManager_1.default.prototype.callActorMethod = function (actorId, methodName, data) {
40
88
  return __awaiter(this, void 0, void 0, function* () {
41
- return yield invokeWrapperFn(actorId, methodName, data, originalCallActor.bind(this));
89
+ try {
90
+ return yield clsService.run(() => __awaiter(this, void 0, void 0, function* () {
91
+ clsService.setIfUndefined(nestjs_cls_1.CLS_ID, (0, crypto_1.randomUUID)());
92
+ const context = NestActorManager_1.extractContext(data);
93
+ if (context) {
94
+ contextService.set(context);
95
+ data = NestActorManager_1.removeContext(data);
96
+ }
97
+ if (invokeWrapperFn) {
98
+ return yield invokeWrapperFn(actorId, methodName, data, originalCallActor.bind(this));
99
+ }
100
+ else {
101
+ return yield originalCallActor.bind(this)(actorId, methodName, data);
102
+ }
103
+ }));
104
+ }
105
+ catch (error) {
106
+ common_1.Logger.error(`Error invoking actor method ${actorId}/${methodName}`);
107
+ common_1.Logger.error(error);
108
+ throw error;
109
+ }
42
110
  });
43
111
  };
44
112
  }
45
- }
46
- exports.patchActorManagerForNest = patchActorManagerForNest;
47
- function resolveDependencies(moduleRef, instance) {
48
- return __awaiter(this, void 0, void 0, function* () {
49
- const type = instance.constructor;
50
- try {
51
- const injector = moduleRef['injector'];
52
- const wrapper = new instance_wrapper_1.InstanceWrapper({
53
- name: type && type.name,
54
- metatype: type,
55
- isResolved: false,
56
- scope: common_1.Scope.TRANSIENT,
57
- durable: true,
58
- });
59
- const properties = injector.reflectProperties(wrapper.metatype);
60
- for (const item of properties) {
61
- if ('type' in item && item.type) {
62
- const propertyType = item.type;
63
- const resolved = yield moduleRef.get(propertyType, { strict: false });
64
- if (resolved) {
65
- instance[item.key] = resolved;
66
- }
67
- }
113
+ static extractContext(data) {
114
+ if (!data)
115
+ return undefined;
116
+ if (Array.isArray(data)) {
117
+ const lastItem = data[data.length - 1];
118
+ if (lastItem['$t'] === 'ctx') {
119
+ return lastItem;
68
120
  }
69
121
  }
70
- catch (error) {
71
- console.error(error);
72
- throw error;
122
+ if (data['$t'] === 'ctx') {
123
+ return data;
73
124
  }
74
- });
75
- }
125
+ return data['$ctx'];
126
+ }
127
+ static removeContext(data) {
128
+ if (!data)
129
+ return undefined;
130
+ if (Array.isArray(data)) {
131
+ const lastItem = data[data.length - 1];
132
+ if (lastItem['$t'] === 'ctx') {
133
+ return data.slice(0, data.length - 1);
134
+ }
135
+ }
136
+ if (data['$t'] === 'ctx') {
137
+ return undefined;
138
+ }
139
+ if (data['$ctx']) {
140
+ data['$ctx'] = undefined;
141
+ }
142
+ return data;
143
+ }
144
+ };
145
+ NestActorManager = NestActorManager_1 = __decorate([
146
+ (0, common_1.Injectable)()
147
+ ], NestActorManager);
148
+ exports.NestActorManager = NestActorManager;
@@ -0,0 +1,11 @@
1
+ import { ClsService } from 'nestjs-cls';
2
+ export declare const DAPR_CONTEXT_KEY = "context";
3
+ export declare class DaprContextService {
4
+ private readonly cls;
5
+ constructor(cls: ClsService);
6
+ getService(): ClsService;
7
+ setByKey<T>(key: string, value: T): void;
8
+ set<T>(value: T): void;
9
+ getByKey<T>(key: string): T | undefined;
10
+ get<T>(): T | undefined;
11
+ }
@@ -0,0 +1,52 @@
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.DaprContextService = exports.DAPR_CONTEXT_KEY = void 0;
13
+ const common_1 = require("@nestjs/common");
14
+ const nestjs_cls_1 = require("nestjs-cls");
15
+ exports.DAPR_CONTEXT_KEY = 'context';
16
+ let DaprContextService = class DaprContextService {
17
+ constructor(cls) {
18
+ this.cls = cls;
19
+ }
20
+ getService() {
21
+ var _a;
22
+ return (_a = this.cls) !== null && _a !== void 0 ? _a : nestjs_cls_1.ClsServiceManager.getClsService();
23
+ }
24
+ setByKey(key, value) {
25
+ this.getService().set(key, value);
26
+ }
27
+ set(value) {
28
+ this.setByKey(exports.DAPR_CONTEXT_KEY, value);
29
+ }
30
+ getByKey(key) {
31
+ var _a;
32
+ try {
33
+ return (_a = this.getService().get(key)) !== null && _a !== void 0 ? _a : undefined;
34
+ }
35
+ catch (error) {
36
+ return undefined;
37
+ }
38
+ }
39
+ get() {
40
+ try {
41
+ return this.getByKey(exports.DAPR_CONTEXT_KEY);
42
+ }
43
+ catch (error) {
44
+ return undefined;
45
+ }
46
+ }
47
+ };
48
+ DaprContextService = __decorate([
49
+ (0, common_1.Injectable)(),
50
+ __metadata("design:paramtypes", [nestjs_cls_1.ClsService])
51
+ ], DaprContextService);
52
+ exports.DaprContextService = DaprContextService;
@@ -2,6 +2,8 @@ import { DaprServer } from '@dapr/dapr';
2
2
  import { OnApplicationBootstrap, OnApplicationShutdown } from '@nestjs/common';
3
3
  import { DiscoveryService, MetadataScanner, ModuleRef } from '@nestjs/core';
4
4
  import { DaprActorClient } from './actors/dapr-actor-client.service';
5
+ import { NestActorManager } from './actors/nest-actor-manager';
6
+ import { DaprContextService } from './dapr-context-service';
5
7
  import { DaprMetadataAccessor } from './dapr-metadata.accessor';
6
8
  import { DaprModuleOptions } from './dapr.module';
7
9
  export declare class DaprLoader implements OnApplicationBootstrap, OnApplicationShutdown {
@@ -12,8 +14,10 @@ export declare class DaprLoader implements OnApplicationBootstrap, OnApplication
12
14
  private readonly options;
13
15
  private readonly daprActorClient;
14
16
  private readonly moduleRef;
17
+ private readonly contextService;
18
+ private readonly actorManager;
15
19
  private readonly logger;
16
- constructor(discoveryService: DiscoveryService, metadataScanner: MetadataScanner, daprServer: DaprServer, daprMetadataAccessor: DaprMetadataAccessor, options: DaprModuleOptions, daprActorClient: DaprActorClient, moduleRef: ModuleRef);
20
+ constructor(discoveryService: DiscoveryService, metadataScanner: MetadataScanner, daprServer: DaprServer, daprMetadataAccessor: DaprMetadataAccessor, options: DaprModuleOptions, daprActorClient: DaprActorClient, moduleRef: ModuleRef, contextService: DaprContextService, actorManager: NestActorManager);
17
21
  onApplicationBootstrap(): Promise<void>;
18
22
  onApplicationShutdown(): Promise<void>;
19
23
  loadDaprHandlers(): void;
@@ -33,10 +33,11 @@ const common_1 = require("@nestjs/common");
33
33
  const core_1 = require("@nestjs/core");
34
34
  const dapr_actor_client_service_1 = require("./actors/dapr-actor-client.service");
35
35
  const nest_actor_manager_1 = require("./actors/nest-actor-manager");
36
+ const dapr_context_service_1 = require("./dapr-context-service");
36
37
  const dapr_metadata_accessor_1 = require("./dapr-metadata.accessor");
37
38
  const dapr_module_1 = require("./dapr.module");
38
39
  let DaprLoader = DaprLoader_1 = class DaprLoader {
39
- constructor(discoveryService, metadataScanner, daprServer, daprMetadataAccessor, options, daprActorClient, moduleRef) {
40
+ constructor(discoveryService, metadataScanner, daprServer, daprMetadataAccessor, options, daprActorClient, moduleRef, contextService, actorManager) {
40
41
  this.discoveryService = discoveryService;
41
42
  this.metadataScanner = metadataScanner;
42
43
  this.daprServer = daprServer;
@@ -44,6 +45,8 @@ let DaprLoader = DaprLoader_1 = class DaprLoader {
44
45
  this.options = options;
45
46
  this.daprActorClient = daprActorClient;
46
47
  this.moduleRef = moduleRef;
48
+ this.contextService = contextService;
49
+ this.actorManager = actorManager;
47
50
  this.logger = new common_1.Logger(DaprLoader_1.name);
48
51
  }
49
52
  onApplicationBootstrap() {
@@ -53,7 +56,10 @@ let DaprLoader = DaprLoader_1 = class DaprLoader {
53
56
  this.logger.log('Dapr server is disabled');
54
57
  return;
55
58
  }
56
- (0, nest_actor_manager_1.patchActorManagerForNest)(this.moduleRef, this.options.actorOptions);
59
+ this.actorManager.setup(this.moduleRef, this.options.actorOptions);
60
+ if (this.options.contextProvider !== dapr_module_1.DaprContextProvider.None) {
61
+ this.actorManager.setupCSLWrapper(this.contextService);
62
+ }
57
63
  yield this.daprServer.actor.init();
58
64
  this.loadDaprHandlers();
59
65
  if (this.options.serverPort === '0') {
@@ -186,6 +192,8 @@ DaprLoader = DaprLoader_1 = __decorate([
186
192
  core_1.MetadataScanner,
187
193
  dapr_1.DaprServer,
188
194
  dapr_metadata_accessor_1.DaprMetadataAccessor, Object, dapr_actor_client_service_1.DaprActorClient,
189
- core_1.ModuleRef])
195
+ core_1.ModuleRef,
196
+ dapr_context_service_1.DaprContextService,
197
+ nest_actor_manager_1.NestActorManager])
190
198
  ], DaprLoader);
191
199
  exports.DaprLoader = DaprLoader;
@@ -10,12 +10,18 @@ export interface DaprModuleOptions {
10
10
  onError?: (name: string, topicName: string, error: any) => DaprPubSubStatusEnum;
11
11
  actorOptions?: DaprModuleActorOptions;
12
12
  disabled?: boolean;
13
+ contextProvider?: DaprContextProvider;
13
14
  }
14
15
  export interface DaprModuleActorOptions {
15
16
  prefix?: string;
16
17
  delimiter?: string;
17
18
  typeNamePrefix?: string;
18
19
  }
20
+ export declare enum DaprContextProvider {
21
+ None = "none",
22
+ ALS = "als",
23
+ NestCLS = "nest-cls"
24
+ }
19
25
  export interface DaprModuleOptionsFactory {
20
26
  createDaprModuleOptions(): Promise<DaprModuleOptions> | DaprModuleOptions;
21
27
  }
@@ -16,14 +16,22 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
16
16
  };
17
17
  var DaprModule_1;
18
18
  Object.defineProperty(exports, "__esModule", { value: true });
19
- exports.DaprModule = exports.createOptionsProvider = exports.DAPR_MODULE_OPTIONS_TOKEN = void 0;
19
+ exports.DaprModule = exports.createOptionsProvider = exports.DaprContextProvider = exports.DAPR_MODULE_OPTIONS_TOKEN = void 0;
20
20
  const dapr_1 = require("@dapr/dapr");
21
21
  const common_1 = require("@nestjs/common");
22
22
  const core_1 = require("@nestjs/core");
23
23
  const dapr_actor_client_service_1 = require("./actors/dapr-actor-client.service");
24
+ const nest_actor_manager_1 = require("./actors/nest-actor-manager");
25
+ const dapr_context_service_1 = require("./dapr-context-service");
24
26
  const dapr_metadata_accessor_1 = require("./dapr-metadata.accessor");
25
27
  const dapr_loader_1 = require("./dapr.loader");
26
28
  exports.DAPR_MODULE_OPTIONS_TOKEN = 'DAPR_MODULE_OPTIONS_TOKEN';
29
+ var DaprContextProvider;
30
+ (function (DaprContextProvider) {
31
+ DaprContextProvider["None"] = "none";
32
+ DaprContextProvider["ALS"] = "als";
33
+ DaprContextProvider["NestCLS"] = "nest-cls";
34
+ })(DaprContextProvider = exports.DaprContextProvider || (exports.DaprContextProvider = {}));
27
35
  function createOptionsProvider(options) {
28
36
  if (!options.clientOptions.actor) {
29
37
  options.clientOptions.actor = {
@@ -62,6 +70,7 @@ let DaprModule = DaprModule_1 = class DaprModule {
62
70
  },
63
71
  dapr_loader_1.DaprLoader,
64
72
  dapr_metadata_accessor_1.DaprMetadataAccessor,
73
+ dapr_context_service_1.DaprContextService,
65
74
  core_1.Reflector,
66
75
  ],
67
76
  exports: [dapr_1.DaprClient],
@@ -91,6 +100,7 @@ let DaprModule = DaprModule_1 = class DaprModule {
91
100
  },
92
101
  dapr_loader_1.DaprLoader,
93
102
  dapr_metadata_accessor_1.DaprMetadataAccessor,
103
+ dapr_context_service_1.DaprContextService,
94
104
  core_1.Reflector,
95
105
  ...(options.extraProviders || []),
96
106
  ],
@@ -126,8 +136,8 @@ let DaprModule = DaprModule_1 = class DaprModule {
126
136
  };
127
137
  DaprModule = DaprModule_1 = __decorate([
128
138
  (0, common_1.Module)({
129
- providers: [dapr_actor_client_service_1.DaprActorClient],
130
- exports: [dapr_actor_client_service_1.DaprActorClient],
139
+ providers: [dapr_actor_client_service_1.DaprActorClient, nest_actor_manager_1.NestActorManager, dapr_context_service_1.DaprContextService],
140
+ exports: [dapr_actor_client_service_1.DaprActorClient, dapr_context_service_1.DaprContextService],
131
141
  })
132
142
  ], DaprModule);
133
143
  exports.DaprModule = DaprModule;
package/dist/index.d.ts CHANGED
@@ -5,8 +5,9 @@ import { DAPR_BINDING_METADATA, DAPR_PUBSUB_METADATA, DAPR_ACTOR_METADATA, DAPR_
5
5
  import { State } from './dapr-actor-state.decorator';
6
6
  import { DaprActor, DaprActorMetadata } from './dapr-actor.decorator';
7
7
  import { DaprBinding, DaprBindingMetadata } from './dapr-binding.decorator';
8
+ import { DaprContextService } from './dapr-context-service';
8
9
  import { DaprMetadataAccessor } from './dapr-metadata.accessor';
9
10
  import { DaprPubSub, DaprPubSubMetadata } from './dapr-pubsub.decorator';
10
11
  import { DaprLoader } from './dapr.loader';
11
12
  import { DaprModule } from './dapr.module';
12
- export { DAPR_BINDING_METADATA, DAPR_PUBSUB_METADATA, DAPR_ACTOR_METADATA, DAPR_ACTOR_STATE_METADATA, DaprMetadataAccessor, DaprBindingMetadata, DaprBinding, DaprPubSubMetadata, DaprPubSub, DaprActorMetadata, State, DaprActor, DaprLoader, DaprModule, DaprActorClient, StatefulActor, StatefulActorOf, };
13
+ export { DAPR_BINDING_METADATA, DAPR_PUBSUB_METADATA, DAPR_ACTOR_METADATA, DAPR_ACTOR_STATE_METADATA, DaprMetadataAccessor, DaprBindingMetadata, DaprBinding, DaprPubSubMetadata, DaprPubSub, DaprActorMetadata, State, DaprActor, DaprLoader, DaprModule, DaprActorClient, DaprContextService, StatefulActor, StatefulActorOf, };
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.StatefulActorOf = exports.StatefulActor = exports.DaprActorClient = exports.DaprModule = exports.DaprLoader = exports.DaprActor = exports.State = exports.DaprPubSub = exports.DaprBinding = exports.DaprMetadataAccessor = exports.DAPR_ACTOR_STATE_METADATA = exports.DAPR_ACTOR_METADATA = exports.DAPR_PUBSUB_METADATA = exports.DAPR_BINDING_METADATA = void 0;
3
+ exports.StatefulActorOf = exports.StatefulActor = exports.DaprContextService = exports.DaprActorClient = exports.DaprModule = exports.DaprLoader = exports.DaprActor = exports.State = exports.DaprPubSub = exports.DaprBinding = exports.DaprMetadataAccessor = exports.DAPR_ACTOR_STATE_METADATA = exports.DAPR_ACTOR_METADATA = exports.DAPR_PUBSUB_METADATA = exports.DAPR_BINDING_METADATA = void 0;
4
4
  const dapr_actor_client_service_1 = require("./actors/dapr-actor-client.service");
5
5
  Object.defineProperty(exports, "DaprActorClient", { enumerable: true, get: function () { return dapr_actor_client_service_1.DaprActorClient; } });
6
6
  const stateful_actor_of_1 = require("./actors/stateful-actor-of");
@@ -18,6 +18,8 @@ const dapr_actor_decorator_1 = require("./dapr-actor.decorator");
18
18
  Object.defineProperty(exports, "DaprActor", { enumerable: true, get: function () { return dapr_actor_decorator_1.DaprActor; } });
19
19
  const dapr_binding_decorator_1 = require("./dapr-binding.decorator");
20
20
  Object.defineProperty(exports, "DaprBinding", { enumerable: true, get: function () { return dapr_binding_decorator_1.DaprBinding; } });
21
+ const dapr_context_service_1 = require("./dapr-context-service");
22
+ Object.defineProperty(exports, "DaprContextService", { enumerable: true, get: function () { return dapr_context_service_1.DaprContextService; } });
21
23
  const dapr_metadata_accessor_1 = require("./dapr-metadata.accessor");
22
24
  Object.defineProperty(exports, "DaprMetadataAccessor", { enumerable: true, get: function () { return dapr_metadata_accessor_1.DaprMetadataAccessor; } });
23
25
  const dapr_pubsub_decorator_1 = require("./dapr-pubsub.decorator");
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rayondigital/nest-dapr",
3
- "version": "0.9.8",
3
+ "version": "0.9.9",
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",
@@ -23,7 +23,8 @@
23
23
  "homepage": "https://github.com/rayondigital/nest-dapr#readme",
24
24
  "peerDependencies": {
25
25
  "@nestjs/common": "^10.0.0",
26
- "@nestjs/core": "^10.0.0"
26
+ "@nestjs/core": "^10.0.0",
27
+ "nestjs-cls": "^3.0.0"
27
28
  },
28
29
  "devDependencies": {
29
30
  "@nestjs/platform-express": "^10.0.0",
@@ -46,6 +47,9 @@
46
47
  "dependencies": {
47
48
  "@dapr/dapr": "^3.2.0"
48
49
  },
50
+ "optionalDependencies": {
51
+ "nestjs-cls": "^3.6.0"
52
+ },
49
53
  "publishConfig": {
50
54
  "access": "public",
51
55
  "registry": "https://registry.npmjs.org/"