@rayondigital/nest-dapr 0.9.30 → 0.9.32
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/dapr.module.js +21 -2
- package/dist/index.d.ts +2 -1
- package/dist/index.js +3 -1
- package/dist/pubsub/dapr-pubsub-client.service.d.ts +25 -0
- package/dist/pubsub/dapr-pubsub-client.service.js +177 -0
- package/dist/pubsub/publish.message.d.ts +7 -0
- package/dist/pubsub/publish.message.js +2 -0
- package/package.json +3 -2
package/dist/dapr.module.js
CHANGED
|
@@ -27,6 +27,7 @@ const nest_actor_manager_1 = require("./actors/nest-actor-manager");
|
|
|
27
27
|
const dapr_context_service_1 = require("./dapr-context-service");
|
|
28
28
|
const dapr_metadata_accessor_1 = require("./dapr-metadata.accessor");
|
|
29
29
|
const dapr_loader_1 = require("./dapr.loader");
|
|
30
|
+
const dapr_pubsub_client_service_1 = require("./pubsub/dapr-pubsub-client.service");
|
|
30
31
|
exports.DAPR_MODULE_OPTIONS_TOKEN = 'DAPR_MODULE_OPTIONS_TOKEN';
|
|
31
32
|
var DaprContextProvider;
|
|
32
33
|
(function (DaprContextProvider) {
|
|
@@ -75,9 +76,18 @@ let DaprModule = DaprModule_1 = class DaprModule {
|
|
|
75
76
|
dapr_loader_1.DaprLoader,
|
|
76
77
|
dapr_metadata_accessor_1.DaprMetadataAccessor,
|
|
77
78
|
dapr_context_service_1.DaprContextService,
|
|
79
|
+
dapr_actor_client_service_1.DaprActorClient,
|
|
80
|
+
{
|
|
81
|
+
provide: dapr_pubsub_client_service_1.DaprPubSubClient,
|
|
82
|
+
scope: common_1.Scope.DEFAULT,
|
|
83
|
+
inject: [exports.DAPR_MODULE_OPTIONS_TOKEN, dapr_1.DaprClient],
|
|
84
|
+
useFactory: (options, daprClient) => {
|
|
85
|
+
return new dapr_pubsub_client_service_1.DaprPubSubClient(options, daprClient);
|
|
86
|
+
},
|
|
87
|
+
},
|
|
78
88
|
core_1.Reflector,
|
|
79
89
|
],
|
|
80
|
-
exports: [dapr_1.DaprClient],
|
|
90
|
+
exports: [dapr_1.DaprClient, dapr_pubsub_client_service_1.DaprPubSubClient, exports.DAPR_MODULE_OPTIONS_TOKEN],
|
|
81
91
|
};
|
|
82
92
|
}
|
|
83
93
|
static registerAsync(options) {
|
|
@@ -107,10 +117,19 @@ let DaprModule = DaprModule_1 = class DaprModule {
|
|
|
107
117
|
dapr_loader_1.DaprLoader,
|
|
108
118
|
dapr_metadata_accessor_1.DaprMetadataAccessor,
|
|
109
119
|
dapr_context_service_1.DaprContextService,
|
|
120
|
+
dapr_actor_client_service_1.DaprActorClient,
|
|
121
|
+
{
|
|
122
|
+
provide: dapr_pubsub_client_service_1.DaprPubSubClient,
|
|
123
|
+
scope: common_1.Scope.DEFAULT,
|
|
124
|
+
inject: [exports.DAPR_MODULE_OPTIONS_TOKEN, dapr_1.DaprClient],
|
|
125
|
+
useFactory: (options, daprClient) => {
|
|
126
|
+
return new dapr_pubsub_client_service_1.DaprPubSubClient(options, daprClient);
|
|
127
|
+
},
|
|
128
|
+
},
|
|
110
129
|
core_1.Reflector,
|
|
111
130
|
...(options.extraProviders || []),
|
|
112
131
|
],
|
|
113
|
-
exports: [dapr_1.DaprClient],
|
|
132
|
+
exports: [dapr_1.DaprClient, dapr_pubsub_client_service_1.DaprPubSubClient, exports.DAPR_MODULE_OPTIONS_TOKEN],
|
|
114
133
|
};
|
|
115
134
|
}
|
|
116
135
|
static createAsyncProviders(options) {
|
package/dist/index.d.ts
CHANGED
|
@@ -12,4 +12,5 @@ import { DaprMetadataAccessor } from './dapr-metadata.accessor';
|
|
|
12
12
|
import { DaprPubSub, DaprPubSubMetadata } from './dapr-pubsub.decorator';
|
|
13
13
|
import { DaprLoader } from './dapr.loader';
|
|
14
14
|
import { DaprContextProvider, DaprModule } from './dapr.module';
|
|
15
|
-
|
|
15
|
+
import { DaprPubSubClient } from './pubsub/dapr-pubsub-client.service';
|
|
16
|
+
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, DaprContextProvider, ActorRuntimeService, DaprPubSubClient, DaprClientCache, StatefulActor, StatefulActorOf, IState, };
|
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.DaprClientCache = exports.ActorRuntimeService = exports.DaprContextProvider = 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;
|
|
3
|
+
exports.StatefulActorOf = exports.StatefulActor = exports.DaprClientCache = exports.DaprPubSubClient = exports.ActorRuntimeService = exports.DaprContextProvider = 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 actor_runtime_service_1 = require("./actors/actor-runtime.service");
|
|
5
5
|
Object.defineProperty(exports, "ActorRuntimeService", { enumerable: true, get: function () { return actor_runtime_service_1.ActorRuntimeService; } });
|
|
6
6
|
const client_cache_1 = require("./actors/client-cache");
|
|
@@ -33,3 +33,5 @@ Object.defineProperty(exports, "DaprLoader", { enumerable: true, get: function (
|
|
|
33
33
|
const dapr_module_1 = require("./dapr.module");
|
|
34
34
|
Object.defineProperty(exports, "DaprContextProvider", { enumerable: true, get: function () { return dapr_module_1.DaprContextProvider; } });
|
|
35
35
|
Object.defineProperty(exports, "DaprModule", { enumerable: true, get: function () { return dapr_module_1.DaprModule; } });
|
|
36
|
+
const dapr_pubsub_client_service_1 = require("./pubsub/dapr-pubsub-client.service");
|
|
37
|
+
Object.defineProperty(exports, "DaprPubSubClient", { enumerable: true, get: function () { return dapr_pubsub_client_service_1.DaprPubSubClient; } });
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { DaprClient } from '@dapr/dapr';
|
|
2
|
+
import { OnApplicationShutdown } from '@nestjs/common';
|
|
3
|
+
import { DaprModuleOptions } from '../dapr.module';
|
|
4
|
+
import { PublishMessage } from './publish.message';
|
|
5
|
+
export declare class DaprPubSubClient implements OnApplicationShutdown {
|
|
6
|
+
private readonly options;
|
|
7
|
+
private readonly daprClient;
|
|
8
|
+
private readonly logger;
|
|
9
|
+
private readonly defaultName;
|
|
10
|
+
private readonly buffer;
|
|
11
|
+
private subscription;
|
|
12
|
+
private readonly bufferSize;
|
|
13
|
+
private readonly bufferTimeSpan;
|
|
14
|
+
private onError;
|
|
15
|
+
constructor(options: DaprModuleOptions, daprClient: DaprClient);
|
|
16
|
+
registerErrorHandler(handler: (message: PublishMessage, error: any) => void): void;
|
|
17
|
+
handleError(message: PublishMessage, error: any): Promise<void>;
|
|
18
|
+
onApplicationShutdown(signal?: string): Promise<void>;
|
|
19
|
+
private setupBufferSubscription;
|
|
20
|
+
private publishBulkDirectly;
|
|
21
|
+
private publishDirectly;
|
|
22
|
+
publish(name: string, producerId: string, topic: string, payload: any, buffer: boolean, metadata?: any): Promise<void>;
|
|
23
|
+
publish(producerId: string, topic: string, payload: any, buffer: boolean, metadata?: any): Promise<void>;
|
|
24
|
+
publish(producerId: string, topic: string, payload: any): Promise<void>;
|
|
25
|
+
}
|
|
@@ -0,0 +1,177 @@
|
|
|
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
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
12
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
13
|
+
};
|
|
14
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
15
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
16
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
17
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
18
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
19
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
20
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
21
|
+
});
|
|
22
|
+
};
|
|
23
|
+
var DaprPubSubClient_1;
|
|
24
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
25
|
+
exports.DaprPubSubClient = void 0;
|
|
26
|
+
const dapr_1 = require("@dapr/dapr");
|
|
27
|
+
const common_1 = require("@nestjs/common");
|
|
28
|
+
const rxjs_1 = require("rxjs");
|
|
29
|
+
const operators_1 = require("rxjs/operators");
|
|
30
|
+
const dapr_module_1 = require("../dapr.module");
|
|
31
|
+
let DaprPubSubClient = DaprPubSubClient_1 = class DaprPubSubClient {
|
|
32
|
+
constructor(options, daprClient) {
|
|
33
|
+
var _a, _b;
|
|
34
|
+
this.options = options;
|
|
35
|
+
this.daprClient = daprClient;
|
|
36
|
+
this.logger = new common_1.Logger(DaprPubSubClient_1.name);
|
|
37
|
+
this.buffer = new rxjs_1.Subject();
|
|
38
|
+
this.bufferSize = 10;
|
|
39
|
+
this.bufferTimeSpan = 1000;
|
|
40
|
+
this.defaultName = (_b = (_a = this.options.pubsubOptions) === null || _a === void 0 ? void 0 : _a.defaultName) !== null && _b !== void 0 ? _b : 'pubsub';
|
|
41
|
+
this.setupBufferSubscription();
|
|
42
|
+
}
|
|
43
|
+
registerErrorHandler(handler) {
|
|
44
|
+
this.onError = handler;
|
|
45
|
+
}
|
|
46
|
+
handleError(message, error) {
|
|
47
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
48
|
+
if (this.onError) {
|
|
49
|
+
yield this.onError(message, error);
|
|
50
|
+
}
|
|
51
|
+
this.logger.error(`Error publishing message to ${message.name}:${message.topic}`, error);
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
onApplicationShutdown(signal) {
|
|
55
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
56
|
+
this.subscription.unsubscribe();
|
|
57
|
+
const flushPromise = new Promise((resolve, reject) => {
|
|
58
|
+
const messages = [];
|
|
59
|
+
this.buffer.pipe((0, rxjs_1.toArray)()).subscribe({
|
|
60
|
+
next: (msgs) => messages.push(...msgs),
|
|
61
|
+
error: reject,
|
|
62
|
+
complete: () => __awaiter(this, void 0, void 0, function* () {
|
|
63
|
+
try {
|
|
64
|
+
yield this.publishBulkDirectly(messages);
|
|
65
|
+
resolve();
|
|
66
|
+
}
|
|
67
|
+
catch (error) {
|
|
68
|
+
reject(error);
|
|
69
|
+
}
|
|
70
|
+
}),
|
|
71
|
+
});
|
|
72
|
+
this.buffer.complete();
|
|
73
|
+
});
|
|
74
|
+
yield flushPromise;
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
setupBufferSubscription() {
|
|
78
|
+
if (this.subscription) {
|
|
79
|
+
this.subscription.unsubscribe();
|
|
80
|
+
}
|
|
81
|
+
this.subscription = this.buffer
|
|
82
|
+
.pipe((0, operators_1.bufferTime)(this.bufferTimeSpan, null, this.bufferSize))
|
|
83
|
+
.subscribe((messages) => __awaiter(this, void 0, void 0, function* () {
|
|
84
|
+
if (messages.length > 0) {
|
|
85
|
+
yield this.publishBulkDirectly(messages);
|
|
86
|
+
}
|
|
87
|
+
}));
|
|
88
|
+
}
|
|
89
|
+
publishBulkDirectly(messages) {
|
|
90
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
91
|
+
if (messages.length === 1) {
|
|
92
|
+
const message = messages[0];
|
|
93
|
+
yield this.publishDirectly(message.name, message.topic, message.payload, message.producerId, message.metadata);
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
const grouped = messages.reduce((acc, message) => {
|
|
97
|
+
const key = `${message.name}:${message.topic}:${message.producerId}`;
|
|
98
|
+
if (!acc[key]) {
|
|
99
|
+
acc[key] = [];
|
|
100
|
+
}
|
|
101
|
+
acc[key].push(message);
|
|
102
|
+
return acc;
|
|
103
|
+
}, {});
|
|
104
|
+
for (const key in grouped) {
|
|
105
|
+
const [name, topic, producerId] = key.split(':');
|
|
106
|
+
const messages = grouped[key];
|
|
107
|
+
if (messages.length === 1) {
|
|
108
|
+
yield this.publishDirectly(name, topic, messages[0].payload, producerId, messages[0].metadata);
|
|
109
|
+
continue;
|
|
110
|
+
}
|
|
111
|
+
try {
|
|
112
|
+
yield this.daprClient.pubsub.publishBulk(name, topic, messages.map((m) => m.payload), producerId ? { metadata: { partitionKey: producerId } } : undefined);
|
|
113
|
+
}
|
|
114
|
+
catch (error) {
|
|
115
|
+
for (const message of messages) {
|
|
116
|
+
yield this.handleError(message, error);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
publishDirectly(name, topic, payload, producerId, metadata, fireAndForget = false) {
|
|
123
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
124
|
+
try {
|
|
125
|
+
if (!name)
|
|
126
|
+
name = this.defaultName;
|
|
127
|
+
const options = {};
|
|
128
|
+
if (metadata) {
|
|
129
|
+
options['metadata'] = metadata;
|
|
130
|
+
}
|
|
131
|
+
if (producerId) {
|
|
132
|
+
options['metadata'] = Object.assign({ partitionKey: producerId }, metadata);
|
|
133
|
+
}
|
|
134
|
+
if (fireAndForget) {
|
|
135
|
+
setTimeout(() => __awaiter(this, void 0, void 0, function* () {
|
|
136
|
+
yield this.daprClient.pubsub.publish(name, topic, payload, options);
|
|
137
|
+
}));
|
|
138
|
+
return;
|
|
139
|
+
}
|
|
140
|
+
yield this.daprClient.pubsub.publish(name, topic, payload, options);
|
|
141
|
+
}
|
|
142
|
+
catch (error) {
|
|
143
|
+
yield this.handleError({ producerId, name, topic, payload, metadata }, error);
|
|
144
|
+
}
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
publish(...args) {
|
|
148
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
149
|
+
let name;
|
|
150
|
+
let producerId;
|
|
151
|
+
let topic;
|
|
152
|
+
let payload;
|
|
153
|
+
let buffer;
|
|
154
|
+
let metadata;
|
|
155
|
+
if (args.length === 6) {
|
|
156
|
+
[name, producerId, topic, payload, buffer, metadata] = args;
|
|
157
|
+
}
|
|
158
|
+
else {
|
|
159
|
+
[producerId, topic, payload, buffer, metadata] = args;
|
|
160
|
+
name = this.defaultName;
|
|
161
|
+
}
|
|
162
|
+
if (!name)
|
|
163
|
+
name = this.defaultName;
|
|
164
|
+
if (buffer === undefined || buffer) {
|
|
165
|
+
this.buffer.next({ name, producerId, topic, payload, metadata });
|
|
166
|
+
return;
|
|
167
|
+
}
|
|
168
|
+
yield this.publishDirectly(name, topic, payload, producerId, true);
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
};
|
|
172
|
+
DaprPubSubClient = DaprPubSubClient_1 = __decorate([
|
|
173
|
+
(0, common_1.Injectable)(),
|
|
174
|
+
__param(0, (0, common_1.Inject)(dapr_module_1.DAPR_MODULE_OPTIONS_TOKEN)),
|
|
175
|
+
__metadata("design:paramtypes", [Object, dapr_1.DaprClient])
|
|
176
|
+
], DaprPubSubClient);
|
|
177
|
+
exports.DaprPubSubClient = DaprPubSubClient;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rayondigital/nest-dapr",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.32",
|
|
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",
|
|
@@ -24,7 +24,8 @@
|
|
|
24
24
|
"peerDependencies": {
|
|
25
25
|
"@nestjs/common": "^10.0.0",
|
|
26
26
|
"@nestjs/core": "^10.0.0",
|
|
27
|
-
"nestjs-cls": "^3.0.0"
|
|
27
|
+
"nestjs-cls": "^3.0.0",
|
|
28
|
+
"rxjs": "^7.1.0"
|
|
28
29
|
},
|
|
29
30
|
"devDependencies": {
|
|
30
31
|
"@nestjs/platform-express": "^10.0.0",
|