@rayondigital/nest-dapr 0.9.21 → 0.9.23
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 +6 -0
- package/dist/actors/actor-proxy-builder.js +30 -6
- package/dist/actors/actor-runtime.service.js +8 -3
- package/dist/actors/dapr-actor-client.service.d.ts +2 -0
- package/dist/actors/dapr-actor-client.service.js +10 -2
- package/dist/actors/nest-actor-manager.js +45 -29
- package/dist/dapr.loader.js +9 -8
- package/dist/dapr.module.d.ts +1 -0
- package/package.json +3 -2
|
@@ -4,13 +4,19 @@ import Class from '@dapr/dapr/types/Class';
|
|
|
4
4
|
import { DaprClientOptions } from '@dapr/dapr/types/DaprClientOptions';
|
|
5
5
|
import { ModuleRef } from '@nestjs/core';
|
|
6
6
|
import { DaprContextService } from '../dapr-context-service';
|
|
7
|
+
import { ActorRuntimeService } from './actor-runtime.service';
|
|
7
8
|
export declare class ActorProxyBuilder<T> {
|
|
8
9
|
moduleRef: ModuleRef;
|
|
9
10
|
daprContextService: DaprContextService;
|
|
11
|
+
actorRuntimeService: ActorRuntimeService;
|
|
10
12
|
actorClient: ActorClient;
|
|
11
13
|
actorTypeClass: Class<T>;
|
|
14
|
+
allowInternalCalls: boolean;
|
|
12
15
|
constructor(moduleRef: ModuleRef, actorTypeClass: Class<T>, daprClient: DaprClient);
|
|
13
16
|
constructor(moduleRef: ModuleRef, actorTypeClass: Class<T>, host: string, port: string, communicationProtocol: CommunicationProtocolEnum, clientOptions: DaprClientOptions);
|
|
14
17
|
build(actorId: ActorId, actorTypeName?: string): T;
|
|
18
|
+
private isInternalActor;
|
|
19
|
+
private callInternalActorMethod;
|
|
20
|
+
private callExternalActorMethod;
|
|
15
21
|
private prepareBody;
|
|
16
22
|
}
|
|
@@ -12,6 +12,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
12
12
|
exports.ActorProxyBuilder = void 0;
|
|
13
13
|
const common_1 = require("@nestjs/common");
|
|
14
14
|
const dapr_context_service_1 = require("../dapr-context-service");
|
|
15
|
+
const actor_runtime_service_1 = require("./actor-runtime.service");
|
|
15
16
|
const client_cache_1 = require("./client-cache");
|
|
16
17
|
class ActorProxyBuilder {
|
|
17
18
|
constructor(moduleRef, actorTypeClass, ...args) {
|
|
@@ -19,6 +20,9 @@ class ActorProxyBuilder {
|
|
|
19
20
|
this.daprContextService = moduleRef.get(dapr_context_service_1.DaprContextService, {
|
|
20
21
|
strict: false,
|
|
21
22
|
});
|
|
23
|
+
this.actorRuntimeService = moduleRef.get(actor_runtime_service_1.ActorRuntimeService, {
|
|
24
|
+
strict: false,
|
|
25
|
+
});
|
|
22
26
|
this.actorTypeClass = actorTypeClass;
|
|
23
27
|
if (args.length == 1) {
|
|
24
28
|
const [daprClient] = args;
|
|
@@ -32,21 +36,41 @@ class ActorProxyBuilder {
|
|
|
32
36
|
}
|
|
33
37
|
build(actorId, actorTypeName) {
|
|
34
38
|
const actorTypeClassName = actorTypeName !== null && actorTypeName !== void 0 ? actorTypeName : this.actorTypeClass.name;
|
|
35
|
-
const actorClient = this.actorClient;
|
|
36
39
|
const handler = {
|
|
37
40
|
get: (_target, propKey, _receiver) => {
|
|
38
41
|
return (...args) => __awaiter(this, void 0, void 0, function* () {
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
42
|
+
if (this.isInternalActor(actorId)) {
|
|
43
|
+
return yield this.callInternalActorMethod(actorTypeClassName, actorId, propKey, args);
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
return yield this.callExternalActorMethod(actorTypeClassName, actorId, propKey, args);
|
|
47
|
+
}
|
|
44
48
|
});
|
|
45
49
|
},
|
|
46
50
|
};
|
|
47
51
|
const proxy = new Proxy(this.actorTypeClass, handler);
|
|
48
52
|
return proxy;
|
|
49
53
|
}
|
|
54
|
+
isInternalActor(actorId) {
|
|
55
|
+
if (!this.allowInternalCalls)
|
|
56
|
+
return false;
|
|
57
|
+
return this.actorRuntimeService.hasActor(this.actorTypeClass, actorId.getId());
|
|
58
|
+
}
|
|
59
|
+
callInternalActorMethod(actorTypeClassName, actorId, methodName, args) {
|
|
60
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
61
|
+
const actorManager = this.actorRuntimeService.getActorManager(actorTypeClassName);
|
|
62
|
+
const requestBody = JSON.stringify(args);
|
|
63
|
+
return yield actorManager.invoke(actorId, methodName, Buffer.from(requestBody));
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
callExternalActorMethod(actorTypeClassName, actorId, methodName, args) {
|
|
67
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
68
|
+
const originalBody = args.length > 0 ? args : null;
|
|
69
|
+
const body = yield this.prepareBody(this.daprContextService, args, originalBody);
|
|
70
|
+
const correlationId = this.daprContextService.getCorrelationId(true);
|
|
71
|
+
return yield this.actorClient.actor.invoke(actorTypeClassName, actorId, methodName, body, correlationId);
|
|
72
|
+
});
|
|
73
|
+
}
|
|
50
74
|
prepareBody(daprContextService, args, body) {
|
|
51
75
|
return __awaiter(this, void 0, void 0, function* () {
|
|
52
76
|
try {
|
|
@@ -66,9 +66,14 @@ let ActorRuntimeService = class ActorRuntimeService {
|
|
|
66
66
|
}
|
|
67
67
|
hasActor(actorType, actorId) {
|
|
68
68
|
var _a;
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
69
|
+
try {
|
|
70
|
+
const typeName = (_a = actorType.name) !== null && _a !== void 0 ? _a : actorType.constructor.name;
|
|
71
|
+
const actorTypeName = this.actorClient.getActorTypeName(typeName);
|
|
72
|
+
return this.hasActorByTypeName(actorTypeName, actorId);
|
|
73
|
+
}
|
|
74
|
+
catch (error) {
|
|
75
|
+
return false;
|
|
76
|
+
}
|
|
72
77
|
}
|
|
73
78
|
hasActorByTypeName(actorTypeName, actorId) {
|
|
74
79
|
const manager = this.getActorManager(actorTypeName);
|
|
@@ -10,7 +10,9 @@ export declare class DaprActorClient {
|
|
|
10
10
|
private prefix;
|
|
11
11
|
private delimiter;
|
|
12
12
|
private typeNamePrefix;
|
|
13
|
+
private allowInternalCalls;
|
|
13
14
|
constructor(moduleRef: ModuleRef, daprClient: DaprClient);
|
|
15
|
+
setAllowInternalCalls(allowInternalCalls: boolean): void;
|
|
14
16
|
setPrefix(prefix: string, delimiter?: string): void;
|
|
15
17
|
setTypeNamePrefix(prefix: string): void;
|
|
16
18
|
register<T>(actorTypeName: string, actorType: Type<T> | Function, daprClient?: DaprClient): void;
|
|
@@ -24,6 +24,10 @@ let DaprActorClient = class DaprActorClient {
|
|
|
24
24
|
this.prefix = '';
|
|
25
25
|
this.delimiter = '-';
|
|
26
26
|
this.typeNamePrefix = '';
|
|
27
|
+
this.allowInternalCalls = process.env.DAPR_ACTOR_ALLOW_INTERNAL_CALLS === 'true';
|
|
28
|
+
}
|
|
29
|
+
setAllowInternalCalls(allowInternalCalls) {
|
|
30
|
+
this.allowInternalCalls = allowInternalCalls;
|
|
27
31
|
}
|
|
28
32
|
setPrefix(prefix, delimiter = '-') {
|
|
29
33
|
this.prefix = prefix;
|
|
@@ -34,7 +38,9 @@ let DaprActorClient = class DaprActorClient {
|
|
|
34
38
|
}
|
|
35
39
|
register(actorTypeName, actorType, daprClient) {
|
|
36
40
|
this.interfaces.set(this.formatActorTypeName(actorTypeName), actorType);
|
|
37
|
-
|
|
41
|
+
const proxyBuilder = new actor_proxy_builder_1.ActorProxyBuilder(this.moduleRef, actorType, daprClient !== null && daprClient !== void 0 ? daprClient : this.daprClient);
|
|
42
|
+
proxyBuilder.allowInternalCalls = this.allowInternalCalls;
|
|
43
|
+
this.actorProxyBuilders.set(this.formatActorTypeName(actorTypeName), proxyBuilder);
|
|
38
44
|
}
|
|
39
45
|
registerInterface(actorType, interfaceType, daprClient) {
|
|
40
46
|
var _a, _b;
|
|
@@ -42,7 +48,9 @@ let DaprActorClient = class DaprActorClient {
|
|
|
42
48
|
const actorTypeName = (_b = actorType.name) !== null && _b !== void 0 ? _b : actorType.constructor.name;
|
|
43
49
|
this.interfaceToActorTypeNames.set(interfaceTypeName, actorTypeName);
|
|
44
50
|
this.interfaces.set(this.formatActorTypeName(interfaceTypeName), actorType);
|
|
45
|
-
|
|
51
|
+
const proxyBuilder = new actor_proxy_builder_1.ActorProxyBuilder(this.moduleRef, actorType, daprClient !== null && daprClient !== void 0 ? daprClient : this.daprClient);
|
|
52
|
+
proxyBuilder.allowInternalCalls = this.allowInternalCalls;
|
|
53
|
+
this.actorProxyBuilders.set(this.formatActorTypeName(interfaceTypeName), proxyBuilder);
|
|
46
54
|
}
|
|
47
55
|
getActorId(actorId) {
|
|
48
56
|
var _a;
|
|
@@ -89,24 +89,34 @@ let NestActorManager = NestActorManager_1 = class NestActorManager {
|
|
|
89
89
|
ActorManager_1.default.prototype.callActorMethod = function (actorId, methodName, data) {
|
|
90
90
|
return __awaiter(this, void 0, void 0, function* () {
|
|
91
91
|
try {
|
|
92
|
-
|
|
93
|
-
var _a;
|
|
94
|
-
contextService.setIdIfNotDefined();
|
|
95
|
-
const context = NestActorManager_1.extractContext(data);
|
|
96
|
-
if (context) {
|
|
97
|
-
contextService.set(context);
|
|
98
|
-
const correlationId = (_a = context[dapr_context_service_1.DAPR_CORRELATION_ID_KEY]) !== null && _a !== void 0 ? _a : (0, crypto_1.randomUUID)();
|
|
99
|
-
if (correlationId) {
|
|
100
|
-
contextService.setCorrelationId(correlationId);
|
|
101
|
-
}
|
|
102
|
-
}
|
|
92
|
+
if (clsService.isActive()) {
|
|
103
93
|
if (invokeWrapperFn) {
|
|
104
94
|
return yield invokeWrapperFn(actorId, methodName, data, originalCallActor.bind(this));
|
|
105
95
|
}
|
|
106
96
|
else {
|
|
107
97
|
return yield originalCallActor.bind(this)(actorId, methodName, data);
|
|
108
98
|
}
|
|
109
|
-
}
|
|
99
|
+
}
|
|
100
|
+
else {
|
|
101
|
+
return yield clsService.run(() => __awaiter(this, void 0, void 0, function* () {
|
|
102
|
+
var _a;
|
|
103
|
+
contextService.setIdIfNotDefined();
|
|
104
|
+
const context = NestActorManager_1.extractContext(data);
|
|
105
|
+
if (context) {
|
|
106
|
+
contextService.set(context);
|
|
107
|
+
const correlationId = (_a = context[dapr_context_service_1.DAPR_CORRELATION_ID_KEY]) !== null && _a !== void 0 ? _a : (0, crypto_1.randomUUID)();
|
|
108
|
+
if (correlationId) {
|
|
109
|
+
contextService.setCorrelationId(correlationId);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
if (invokeWrapperFn) {
|
|
113
|
+
return yield invokeWrapperFn(actorId, methodName, data, originalCallActor.bind(this));
|
|
114
|
+
}
|
|
115
|
+
else {
|
|
116
|
+
return yield originalCallActor.bind(this)(actorId, methodName, data);
|
|
117
|
+
}
|
|
118
|
+
}));
|
|
119
|
+
}
|
|
110
120
|
}
|
|
111
121
|
catch (error) {
|
|
112
122
|
common_1.Logger.error(`Error invoking actor method ${actorId}/${methodName}`);
|
|
@@ -146,26 +156,32 @@ let NestActorManager = NestActorManager_1 = class NestActorManager {
|
|
|
146
156
|
});
|
|
147
157
|
}
|
|
148
158
|
static extractContext(data) {
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
159
|
+
try {
|
|
160
|
+
if (!data)
|
|
161
|
+
return undefined;
|
|
162
|
+
if (Array.isArray(data) && data.length > 0) {
|
|
163
|
+
const lastItem = data[data.length - 1];
|
|
164
|
+
if (lastItem['$t'] === 'ctx') {
|
|
165
|
+
data.pop();
|
|
166
|
+
return lastItem;
|
|
167
|
+
}
|
|
156
168
|
}
|
|
169
|
+
if (data['$t'] === 'ctx') {
|
|
170
|
+
const context = Object.assign({}, data);
|
|
171
|
+
data = undefined;
|
|
172
|
+
return context;
|
|
173
|
+
}
|
|
174
|
+
if (data['$ctx']) {
|
|
175
|
+
const context = Object.assign({}, data['$ctx']);
|
|
176
|
+
data['$ctx'] = undefined;
|
|
177
|
+
return context;
|
|
178
|
+
}
|
|
179
|
+
return undefined;
|
|
157
180
|
}
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
return context;
|
|
162
|
-
}
|
|
163
|
-
if (data['$ctx']) {
|
|
164
|
-
const context = Object.assign({}, data['$ctx']);
|
|
165
|
-
data['$ctx'] = undefined;
|
|
166
|
-
return context;
|
|
181
|
+
catch (error) {
|
|
182
|
+
console.error(error);
|
|
183
|
+
return undefined;
|
|
167
184
|
}
|
|
168
|
-
return undefined;
|
|
169
185
|
}
|
|
170
186
|
};
|
|
171
187
|
NestActorManager = NestActorManager_1 = __decorate([
|
package/dist/dapr.loader.js
CHANGED
|
@@ -50,7 +50,7 @@ let DaprLoader = DaprLoader_1 = class DaprLoader {
|
|
|
50
50
|
this.logger = new common_1.Logger(DaprLoader_1.name);
|
|
51
51
|
}
|
|
52
52
|
onApplicationBootstrap() {
|
|
53
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p;
|
|
53
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r;
|
|
54
54
|
return __awaiter(this, void 0, void 0, function* () {
|
|
55
55
|
if (this.options.disabled) {
|
|
56
56
|
this.logger.log('Dapr server is disabled');
|
|
@@ -63,6 +63,14 @@ let DaprLoader = DaprLoader_1 = class DaprLoader {
|
|
|
63
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
64
|
this.actorManager.setupReentrancy();
|
|
65
65
|
}
|
|
66
|
+
if (this.options.actorOptions) {
|
|
67
|
+
this.daprActorClient.setAllowInternalCalls((_e = (_d = this.options.actorOptions) === null || _d === void 0 ? void 0 : _d.allowInternalCalls) !== null && _e !== void 0 ? _e : false);
|
|
68
|
+
this.daprActorClient.setPrefix((_g = (_f = this.options.actorOptions) === null || _f === void 0 ? void 0 : _f.prefix) !== null && _g !== void 0 ? _g : '', (_j = (_h = this.options.actorOptions) === null || _h === void 0 ? void 0 : _h.delimiter) !== null && _j !== void 0 ? _j : '-');
|
|
69
|
+
this.daprActorClient.setTypeNamePrefix((_l = (_k = this.options.actorOptions) === null || _k === void 0 ? void 0 : _k.typeNamePrefix) !== null && _l !== void 0 ? _l : '');
|
|
70
|
+
if ((_m = this.options.actorOptions) === null || _m === void 0 ? void 0 : _m.prefix) {
|
|
71
|
+
this.logger.log(`Actors will be prefixed with ${(_p = (_o = this.options.actorOptions) === null || _o === void 0 ? void 0 : _o.prefix) !== null && _p !== void 0 ? _p : ''} and delimited with ${(_r = (_q = this.options.actorOptions) === null || _q === void 0 ? void 0 : _q.delimiter) !== null && _r !== void 0 ? _r : '-'}`);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
66
74
|
yield this.daprServer.actor.init();
|
|
67
75
|
this.loadDaprHandlers();
|
|
68
76
|
if (this.options.serverPort === '0') {
|
|
@@ -76,13 +84,6 @@ let DaprLoader = DaprLoader_1 = class DaprLoader {
|
|
|
76
84
|
if (resRegisteredActors.length > 0) {
|
|
77
85
|
this.logger.log(`Registered Actors: ${resRegisteredActors.join(', ')}`);
|
|
78
86
|
}
|
|
79
|
-
if (this.options.actorOptions) {
|
|
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 : '-'}`);
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
87
|
});
|
|
87
88
|
}
|
|
88
89
|
onApplicationShutdown() {
|
package/dist/dapr.module.d.ts
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rayondigital/nest-dapr",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.23",
|
|
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",
|
|
@@ -45,7 +45,8 @@
|
|
|
45
45
|
"typescript": "^4.7.4"
|
|
46
46
|
},
|
|
47
47
|
"dependencies": {
|
|
48
|
-
"@dapr/dapr": "^3.2.0"
|
|
48
|
+
"@dapr/dapr": "^3.2.0",
|
|
49
|
+
"async-lock": "^1.4.1"
|
|
49
50
|
},
|
|
50
51
|
"optionalDependencies": {
|
|
51
52
|
"nestjs-cls": "^3.6.0"
|