@rayondigital/nest-dapr 0.9.8 → 0.9.10
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/dist/actors/actor-proxy-builder.d.ts +7 -2
- package/dist/actors/actor-proxy-builder.js +45 -9
- package/dist/actors/dapr-actor-client.service.d.ts +3 -1
- package/dist/actors/dapr-actor-client.service.js +7 -4
- package/dist/actors/nest-actor-manager.d.ts +9 -2
- package/dist/actors/nest-actor-manager.js +130 -46
- package/dist/dapr-context-service.d.ts +18 -0
- package/dist/dapr-context-service.js +97 -0
- package/dist/dapr.loader.d.ts +5 -1
- package/dist/dapr.loader.js +19 -8
- package/dist/dapr.module.d.ts +6 -0
- package/dist/dapr.module.js +13 -3
- package/dist/index.d.ts +2 -1
- package/dist/index.js +3 -1
- package/package.json +6 -2
|
@@ -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,14 @@ 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");
|
|
18
|
+
const common_1 = require("@nestjs/common");
|
|
17
19
|
class ActorProxyBuilder {
|
|
18
|
-
constructor(actorTypeClass, ...args) {
|
|
20
|
+
constructor(moduleRef, actorTypeClass, ...args) {
|
|
21
|
+
this.moduleRef = moduleRef;
|
|
22
|
+
this.daprContextService = moduleRef.get(dapr_context_service_1.DaprContextService, {
|
|
23
|
+
strict: false,
|
|
24
|
+
});
|
|
19
25
|
this.actorTypeClass = actorTypeClass;
|
|
20
26
|
if (args.length == 1) {
|
|
21
27
|
const [daprClient] = args;
|
|
@@ -30,18 +36,48 @@ class ActorProxyBuilder {
|
|
|
30
36
|
const actorTypeClassName = actorTypeName !== null && actorTypeName !== void 0 ? actorTypeName : this.actorTypeClass.name;
|
|
31
37
|
const actorClient = this.actorClient;
|
|
32
38
|
const handler = {
|
|
33
|
-
get(_target, propKey, _receiver) {
|
|
34
|
-
return
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
};
|
|
39
|
+
get: (_target, propKey, _receiver) => {
|
|
40
|
+
return (...args) => __awaiter(this, void 0, void 0, function* () {
|
|
41
|
+
const originalBody = args.length > 0 ? args : null;
|
|
42
|
+
const body = yield this.prepareBody(this.daprContextService, args, originalBody);
|
|
43
|
+
const correlationId = this.daprContextService.getCorrelationId(true);
|
|
44
|
+
const response = yield actorClient.actor.invoke(actorTypeClassName, actorId, propKey, body, correlationId);
|
|
45
|
+
return response;
|
|
46
|
+
});
|
|
41
47
|
},
|
|
42
48
|
};
|
|
43
49
|
const proxy = new Proxy(this.actorTypeClass, handler);
|
|
44
50
|
return proxy;
|
|
45
51
|
}
|
|
52
|
+
prepareBody(daprContextService, args, body) {
|
|
53
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
54
|
+
try {
|
|
55
|
+
if (!daprContextService)
|
|
56
|
+
return body;
|
|
57
|
+
const context = daprContextService.get();
|
|
58
|
+
if (context) {
|
|
59
|
+
context['$t'] = 'ctx';
|
|
60
|
+
if (Array.isArray(body)) {
|
|
61
|
+
body.push(context);
|
|
62
|
+
if (args.length === 0 && body.length === 2 && body[0] === null) {
|
|
63
|
+
return [context];
|
|
64
|
+
}
|
|
65
|
+
return body;
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
if (args.length === 0) {
|
|
69
|
+
return context;
|
|
70
|
+
}
|
|
71
|
+
return [body, context];
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
return body;
|
|
75
|
+
}
|
|
76
|
+
catch (error) {
|
|
77
|
+
common_1.Logger.error(error);
|
|
78
|
+
return body;
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
}
|
|
46
82
|
}
|
|
47
83
|
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", [
|
|
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
|
|
5
|
+
export declare class NestActorManager {
|
|
6
|
+
setup(moduleRef: ModuleRef, options: DaprModuleActorOptions, onActivateFn?: (actorId: ActorId, instance: AbstractActor) => Promise<void>): void;
|
|
7
|
+
setupReentrancy(): void;
|
|
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 resolveDependencies;
|
|
10
|
+
private static extractContext;
|
|
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,143 @@ 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.
|
|
22
|
+
exports.NestActorManager = void 0;
|
|
23
|
+
const crypto_1 = require("crypto");
|
|
24
|
+
const ActorClientHTTP_1 = __importDefault(require("@dapr/dapr/actors/client/ActorClient/ActorClientHTTP"));
|
|
16
25
|
const ActorManager_1 = __importDefault(require("@dapr/dapr/actors/runtime/ActorManager"));
|
|
17
26
|
const common_1 = require("@nestjs/common");
|
|
18
27
|
const instance_wrapper_1 = require("@nestjs/core/injector/instance-wrapper");
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
28
|
+
const dapr_context_service_1 = require("../dapr-context-service");
|
|
29
|
+
let NestActorManager = NestActorManager_1 = class NestActorManager {
|
|
30
|
+
setup(moduleRef, options, onActivateFn) {
|
|
31
|
+
const originalCreateActor = ActorManager_1.default.prototype.createActor;
|
|
32
|
+
const resolveDependencies = this.resolveDependencies;
|
|
33
|
+
ActorManager_1.default.prototype.createActor = function (actorId) {
|
|
34
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
35
|
+
const instance = (yield originalCreateActor.bind(this)(actorId));
|
|
36
|
+
if (options === null || options === void 0 ? void 0 : options.typeNamePrefix) {
|
|
37
|
+
instance['actorType'] = `${options.typeNamePrefix}${instance.actorType}`;
|
|
38
|
+
}
|
|
39
|
+
try {
|
|
40
|
+
yield resolveDependencies(moduleRef, instance);
|
|
41
|
+
if (onActivateFn) {
|
|
42
|
+
yield onActivateFn(actorId, instance);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
catch (error) {
|
|
46
|
+
console.error(error);
|
|
47
|
+
throw error;
|
|
48
|
+
}
|
|
49
|
+
return instance;
|
|
50
|
+
});
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
setupReentrancy() {
|
|
54
|
+
ActorClientHTTP_1.default.prototype.invoke = function (actorType, actorId, methodName, body, reentrancyId) {
|
|
55
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
56
|
+
const urlSafeId = encodeURIComponent(actorId.getId());
|
|
57
|
+
const result = yield this.client.execute(`/actors/${actorType}/${urlSafeId}/method/${methodName}`, {
|
|
58
|
+
method: 'POST',
|
|
59
|
+
body,
|
|
60
|
+
headers: {
|
|
61
|
+
'Dapr-Reentrancy-Id': reentrancyId,
|
|
62
|
+
},
|
|
63
|
+
});
|
|
64
|
+
return result;
|
|
65
|
+
});
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
setupCSLWrapper(contextService, invokeWrapperFn) {
|
|
69
|
+
const clsService = contextService.getService();
|
|
70
|
+
if (!clsService) {
|
|
71
|
+
throw new Error(`Unable to resolve a CLS from the NestJS DI container`);
|
|
72
|
+
}
|
|
73
|
+
const originalCallActor = ActorManager_1.default.prototype.callActorMethod;
|
|
74
|
+
ActorManager_1.default.prototype.callActorMethod = function (actorId, methodName, data) {
|
|
75
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
76
|
+
try {
|
|
77
|
+
return yield clsService.run(() => __awaiter(this, void 0, void 0, function* () {
|
|
78
|
+
var _a;
|
|
79
|
+
contextService.setIdIfNotDefined();
|
|
80
|
+
const context = NestActorManager_1.extractContext(data);
|
|
81
|
+
if (context) {
|
|
82
|
+
contextService.set(context);
|
|
83
|
+
const correlationId = (_a = context[dapr_context_service_1.DAPR_CORRELATION_ID_KEY]) !== null && _a !== void 0 ? _a : (0, crypto_1.randomUUID)();
|
|
84
|
+
if (correlationId) {
|
|
85
|
+
contextService.setCorrelationId(correlationId);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
if (invokeWrapperFn) {
|
|
89
|
+
return yield invokeWrapperFn(actorId, methodName, data, originalCallActor.bind(this));
|
|
90
|
+
}
|
|
91
|
+
else {
|
|
92
|
+
return yield originalCallActor.bind(this)(actorId, methodName, data);
|
|
93
|
+
}
|
|
94
|
+
}));
|
|
95
|
+
}
|
|
96
|
+
catch (error) {
|
|
97
|
+
common_1.Logger.error(`Error invoking actor method ${actorId}/${methodName}`);
|
|
98
|
+
common_1.Logger.error(error);
|
|
99
|
+
throw error;
|
|
100
|
+
}
|
|
101
|
+
});
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
resolveDependencies(moduleRef, instance) {
|
|
23
105
|
return __awaiter(this, void 0, void 0, function* () {
|
|
24
|
-
const
|
|
25
|
-
if (options === null || options === void 0 ? void 0 : options.typeNamePrefix) {
|
|
26
|
-
instance['actorType'] = `${options.typeNamePrefix}${instance.actorType}`;
|
|
27
|
-
}
|
|
106
|
+
const type = instance.constructor;
|
|
28
107
|
try {
|
|
29
|
-
|
|
108
|
+
const injector = moduleRef['injector'];
|
|
109
|
+
const wrapper = new instance_wrapper_1.InstanceWrapper({
|
|
110
|
+
name: type && type.name,
|
|
111
|
+
metatype: type,
|
|
112
|
+
isResolved: false,
|
|
113
|
+
scope: common_1.Scope.TRANSIENT,
|
|
114
|
+
durable: true,
|
|
115
|
+
});
|
|
116
|
+
const properties = injector.reflectProperties(wrapper.metatype);
|
|
117
|
+
for (const item of properties) {
|
|
118
|
+
if ('type' in item && item.type) {
|
|
119
|
+
const propertyType = item.type;
|
|
120
|
+
const resolved = yield moduleRef.get(propertyType, { strict: false });
|
|
121
|
+
if (resolved) {
|
|
122
|
+
instance[item.key] = resolved;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
}
|
|
30
126
|
}
|
|
31
127
|
catch (error) {
|
|
32
128
|
console.error(error);
|
|
33
129
|
throw error;
|
|
34
130
|
}
|
|
35
|
-
return instance;
|
|
36
131
|
});
|
|
37
|
-
};
|
|
38
|
-
if (invokeWrapperFn) {
|
|
39
|
-
ActorManager_1.default.prototype.callActorMethod = function (actorId, methodName, data) {
|
|
40
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
41
|
-
return yield invokeWrapperFn(actorId, methodName, data, originalCallActor.bind(this));
|
|
42
|
-
});
|
|
43
|
-
};
|
|
44
132
|
}
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
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
|
-
}
|
|
133
|
+
static extractContext(data) {
|
|
134
|
+
if (!data)
|
|
135
|
+
return undefined;
|
|
136
|
+
if (Array.isArray(data)) {
|
|
137
|
+
const lastItem = data[data.length - 1];
|
|
138
|
+
if (lastItem['$t'] === 'ctx') {
|
|
139
|
+
data.pop();
|
|
140
|
+
return lastItem;
|
|
68
141
|
}
|
|
69
142
|
}
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
143
|
+
if (data['$t'] === 'ctx') {
|
|
144
|
+
const context = Object.assign({}, data);
|
|
145
|
+
data = undefined;
|
|
146
|
+
return context;
|
|
73
147
|
}
|
|
74
|
-
|
|
75
|
-
}
|
|
148
|
+
if (data['$ctx']) {
|
|
149
|
+
const context = Object.assign({}, data['$ctx']);
|
|
150
|
+
data['$ctx'] = undefined;
|
|
151
|
+
return context;
|
|
152
|
+
}
|
|
153
|
+
return undefined;
|
|
154
|
+
}
|
|
155
|
+
};
|
|
156
|
+
NestActorManager = NestActorManager_1 = __decorate([
|
|
157
|
+
(0, common_1.Injectable)()
|
|
158
|
+
], NestActorManager);
|
|
159
|
+
exports.NestActorManager = NestActorManager;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { ClsService } from 'nestjs-cls';
|
|
2
|
+
export declare const DAPR_CONTEXT_KEY = "context";
|
|
3
|
+
export declare const DAPR_CORRELATION_ID_KEY = "correlationId";
|
|
4
|
+
export declare class DaprContextService {
|
|
5
|
+
private readonly cls;
|
|
6
|
+
constructor(cls: ClsService);
|
|
7
|
+
getService(): ClsService;
|
|
8
|
+
getId(): string;
|
|
9
|
+
setIdIfNotDefined(id?: string): void;
|
|
10
|
+
getCorrelationId(createIfNotDefined?: boolean): any;
|
|
11
|
+
setCorrelationId(value?: string): void;
|
|
12
|
+
setCorrelationIdIfNotDefined(value?: string): string;
|
|
13
|
+
setByKey<T>(key: string | symbol, value: T): void;
|
|
14
|
+
setByKeyIfNotDefined<T>(key: string | symbol, value: T): any;
|
|
15
|
+
set<T>(value: T): void;
|
|
16
|
+
getByKey<T>(key: string): T | undefined;
|
|
17
|
+
get<T>(): T | undefined;
|
|
18
|
+
}
|
|
@@ -0,0 +1,97 @@
|
|
|
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_CORRELATION_ID_KEY = exports.DAPR_CONTEXT_KEY = void 0;
|
|
13
|
+
const crypto_1 = require("crypto");
|
|
14
|
+
const common_1 = require("@nestjs/common");
|
|
15
|
+
const nestjs_cls_1 = require("nestjs-cls");
|
|
16
|
+
exports.DAPR_CONTEXT_KEY = 'context';
|
|
17
|
+
exports.DAPR_CORRELATION_ID_KEY = 'correlationId';
|
|
18
|
+
let DaprContextService = class DaprContextService {
|
|
19
|
+
constructor(cls) {
|
|
20
|
+
this.cls = cls;
|
|
21
|
+
}
|
|
22
|
+
getService() {
|
|
23
|
+
var _a;
|
|
24
|
+
return (_a = this.cls) !== null && _a !== void 0 ? _a : nestjs_cls_1.ClsServiceManager.getClsService();
|
|
25
|
+
}
|
|
26
|
+
getId() {
|
|
27
|
+
try {
|
|
28
|
+
return this.getService().getId();
|
|
29
|
+
}
|
|
30
|
+
catch (error) {
|
|
31
|
+
return undefined;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
setIdIfNotDefined(id) {
|
|
35
|
+
this.setByKeyIfNotDefined(nestjs_cls_1.CLS_ID, id !== null && id !== void 0 ? id : (0, crypto_1.randomUUID)().toString());
|
|
36
|
+
}
|
|
37
|
+
getCorrelationId(createIfNotDefined = false) {
|
|
38
|
+
const byKey = this.getByKey(exports.DAPR_CORRELATION_ID_KEY);
|
|
39
|
+
if (byKey)
|
|
40
|
+
return byKey;
|
|
41
|
+
const context = this.get();
|
|
42
|
+
if (context)
|
|
43
|
+
return context[exports.DAPR_CORRELATION_ID_KEY];
|
|
44
|
+
if (createIfNotDefined)
|
|
45
|
+
return this.setCorrelationIdIfNotDefined();
|
|
46
|
+
return undefined;
|
|
47
|
+
}
|
|
48
|
+
setCorrelationId(value) {
|
|
49
|
+
this.setByKey(exports.DAPR_CORRELATION_ID_KEY, value !== null && value !== void 0 ? value : (0, crypto_1.randomUUID)().toString());
|
|
50
|
+
}
|
|
51
|
+
setCorrelationIdIfNotDefined(value) {
|
|
52
|
+
if (!value)
|
|
53
|
+
value = (0, crypto_1.randomUUID)().toString();
|
|
54
|
+
this.setByKeyIfNotDefined(exports.DAPR_CORRELATION_ID_KEY, value);
|
|
55
|
+
return value;
|
|
56
|
+
}
|
|
57
|
+
setByKey(key, value) {
|
|
58
|
+
this.getService().set(key, value);
|
|
59
|
+
}
|
|
60
|
+
setByKeyIfNotDefined(key, value) {
|
|
61
|
+
try {
|
|
62
|
+
this.getService().setIfUndefined(key, value);
|
|
63
|
+
}
|
|
64
|
+
catch (error) {
|
|
65
|
+
return undefined;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
set(value) {
|
|
69
|
+
this.setByKey(exports.DAPR_CONTEXT_KEY, value);
|
|
70
|
+
}
|
|
71
|
+
getByKey(key) {
|
|
72
|
+
var _a;
|
|
73
|
+
try {
|
|
74
|
+
return (_a = this.getService().get(key)) !== null && _a !== void 0 ? _a : undefined;
|
|
75
|
+
}
|
|
76
|
+
catch (error) {
|
|
77
|
+
return undefined;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
get() {
|
|
81
|
+
try {
|
|
82
|
+
const contextObject = this.getByKey(exports.DAPR_CONTEXT_KEY);
|
|
83
|
+
if (!contextObject[exports.DAPR_CORRELATION_ID_KEY]) {
|
|
84
|
+
contextObject[exports.DAPR_CORRELATION_ID_KEY] = this.getByKey(exports.DAPR_CORRELATION_ID_KEY);
|
|
85
|
+
}
|
|
86
|
+
return contextObject;
|
|
87
|
+
}
|
|
88
|
+
catch (error) {
|
|
89
|
+
return undefined;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
};
|
|
93
|
+
DaprContextService = __decorate([
|
|
94
|
+
(0, common_1.Injectable)(),
|
|
95
|
+
__metadata("design:paramtypes", [nestjs_cls_1.ClsService])
|
|
96
|
+
], DaprContextService);
|
|
97
|
+
exports.DaprContextService = DaprContextService;
|
package/dist/dapr.loader.d.ts
CHANGED
|
@@ -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;
|
package/dist/dapr.loader.js
CHANGED
|
@@ -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,16 +45,24 @@ 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() {
|
|
50
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;
|
|
53
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p;
|
|
51
54
|
return __awaiter(this, void 0, void 0, function* () {
|
|
52
55
|
if (this.options.disabled) {
|
|
53
56
|
this.logger.log('Dapr server is disabled');
|
|
54
57
|
return;
|
|
55
58
|
}
|
|
56
|
-
|
|
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
|
+
}
|
|
63
|
+
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) {
|
|
64
|
+
this.actorManager.setupReentrancy();
|
|
65
|
+
}
|
|
57
66
|
yield this.daprServer.actor.init();
|
|
58
67
|
this.loadDaprHandlers();
|
|
59
68
|
if (this.options.serverPort === '0') {
|
|
@@ -68,10 +77,10 @@ let DaprLoader = DaprLoader_1 = class DaprLoader {
|
|
|
68
77
|
this.logger.log(`Registered Actors: ${resRegisteredActors.join(', ')}`);
|
|
69
78
|
}
|
|
70
79
|
if (this.options.actorOptions) {
|
|
71
|
-
this.daprActorClient.setPrefix((
|
|
72
|
-
this.daprActorClient.setTypeNamePrefix((
|
|
73
|
-
if ((
|
|
74
|
-
this.logger.log(`Actors will be prefixed with ${(
|
|
80
|
+
this.daprActorClient.setPrefix((_e = (_d = this.options.actorOptions) === null || _d === void 0 ? void 0 : _d.prefix) !== null && _e !== void 0 ? _e : '', (_g = (_f = this.options.actorOptions) === null || _f === void 0 ? void 0 : _f.delimiter) !== null && _g !== void 0 ? _g : '-');
|
|
81
|
+
this.daprActorClient.setTypeNamePrefix((_j = (_h = this.options.actorOptions) === null || _h === void 0 ? void 0 : _h.typeNamePrefix) !== null && _j !== void 0 ? _j : '');
|
|
82
|
+
if ((_k = this.options.actorOptions) === null || _k === void 0 ? void 0 : _k.prefix) {
|
|
83
|
+
this.logger.log(`Actors will be prefixed with ${(_m = (_l = this.options.actorOptions) === null || _l === void 0 ? void 0 : _l.prefix) !== null && _m !== void 0 ? _m : ''} and delimited with ${(_p = (_o = this.options.actorOptions) === null || _o === void 0 ? void 0 : _o.delimiter) !== null && _p !== void 0 ? _p : '-'}`);
|
|
75
84
|
}
|
|
76
85
|
}
|
|
77
86
|
});
|
|
@@ -186,6 +195,8 @@ DaprLoader = DaprLoader_1 = __decorate([
|
|
|
186
195
|
core_1.MetadataScanner,
|
|
187
196
|
dapr_1.DaprServer,
|
|
188
197
|
dapr_metadata_accessor_1.DaprMetadataAccessor, Object, dapr_actor_client_service_1.DaprActorClient,
|
|
189
|
-
core_1.ModuleRef
|
|
198
|
+
core_1.ModuleRef,
|
|
199
|
+
dapr_context_service_1.DaprContextService,
|
|
200
|
+
nest_actor_manager_1.NestActorManager])
|
|
190
201
|
], DaprLoader);
|
|
191
202
|
exports.DaprLoader = DaprLoader;
|
package/dist/dapr.module.d.ts
CHANGED
|
@@ -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
|
}
|
package/dist/dapr.module.js
CHANGED
|
@@ -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.
|
|
3
|
+
"version": "0.9.10",
|
|
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/"
|