@globalart/nestjs-typeorm-outbox 1.0.6 → 1.0.7
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/index.cjs +73 -7
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +65 -1
- package/dist/index.d.mts +65 -1
- package/dist/index.mjs +71 -6
- package/dist/index.mjs.map +1 -1
- package/package.json +2 -3
package/dist/index.cjs
CHANGED
|
@@ -4,7 +4,6 @@ let typeorm = require("typeorm");
|
|
|
4
4
|
let rxjs = require("rxjs");
|
|
5
5
|
let _nestjs_microservices = require("@nestjs/microservices");
|
|
6
6
|
let cron = require("cron");
|
|
7
|
-
let _nestjs_schedule = require("@nestjs/schedule");
|
|
8
7
|
let _nestjs_typeorm = require("@nestjs/typeorm");
|
|
9
8
|
|
|
10
9
|
//#region src/core/typeorm-outbox.di-tokens.ts
|
|
@@ -18,13 +17,13 @@ const InjectTypeormOutboxService = () => (0, _nestjs_common.Inject)(TYPEORM_OUTB
|
|
|
18
17
|
const InjectTypeormOutboxBroker = () => (0, _nestjs_common.Inject)(TYPEORM_OUTBOX_BROKER_TOKEN);
|
|
19
18
|
|
|
20
19
|
//#endregion
|
|
21
|
-
//#region \0@oxc-project+runtime@0.
|
|
20
|
+
//#region \0@oxc-project+runtime@0.110.0/helpers/decorateMetadata.js
|
|
22
21
|
function __decorateMetadata(k, v) {
|
|
23
22
|
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
24
23
|
}
|
|
25
24
|
|
|
26
25
|
//#endregion
|
|
27
|
-
//#region \0@oxc-project+runtime@0.
|
|
26
|
+
//#region \0@oxc-project+runtime@0.110.0/helpers/decorate.js
|
|
28
27
|
function __decorate(decorators, target, key, desc) {
|
|
29
28
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
30
29
|
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
@@ -53,19 +52,85 @@ __decorate([(0, typeorm.Column)("jsonb", { nullable: true }), __decorateMetadata
|
|
|
53
52
|
__decorate([(0, typeorm.Column)("jsonb"), __decorateMetadata("design:type", typeof (_ref5 = typeof Record !== "undefined" && Record) === "function" ? _ref5 : Object)], TypeormOutboxEntity.prototype, "payload", void 0);
|
|
54
53
|
TypeormOutboxEntity = __decorate([(0, typeorm.Entity)("outbox")], TypeormOutboxEntity);
|
|
55
54
|
|
|
55
|
+
//#endregion
|
|
56
|
+
//#region src/core/typeorm-outbox.enums.ts
|
|
57
|
+
let CronExpression = /* @__PURE__ */ function(CronExpression) {
|
|
58
|
+
CronExpression["EVERY_1_SECOND"] = "* * * * * *";
|
|
59
|
+
CronExpression["EVERY_2_SECONDS"] = "*/2 * * * * *";
|
|
60
|
+
CronExpression["EVERY_3_SECONDS"] = "*/3 * * * * *";
|
|
61
|
+
CronExpression["EVERY_4_SECONDS"] = "*/4 * * * * *";
|
|
62
|
+
CronExpression["EVERY_5_SECONDS"] = "*/5 * * * * *";
|
|
63
|
+
CronExpression["EVERY_6_SECONDS"] = "*/6 * * * * *";
|
|
64
|
+
CronExpression["EVERY_7_SECONDS"] = "*/7 * * * * *";
|
|
65
|
+
CronExpression["EVERY_8_SECONDS"] = "*/8 * * * * *";
|
|
66
|
+
CronExpression["EVERY_9_SECONDS"] = "*/9 * * * * *";
|
|
67
|
+
CronExpression["EVERY_10_SECONDS"] = "*/10 * * * * *";
|
|
68
|
+
CronExpression["EVERY_11_SECONDS"] = "*/11 * * * * *";
|
|
69
|
+
CronExpression["EVERY_12_SECONDS"] = "*/12 * * * * *";
|
|
70
|
+
CronExpression["EVERY_13_SECONDS"] = "*/13 * * * * *";
|
|
71
|
+
CronExpression["EVERY_14_SECONDS"] = "*/14 * * * * *";
|
|
72
|
+
CronExpression["EVERY_15_SECONDS"] = "*/15 * * * * *";
|
|
73
|
+
CronExpression["EVERY_16_SECONDS"] = "*/16 * * * * *";
|
|
74
|
+
CronExpression["EVERY_17_SECONDS"] = "*/17 * * * * *";
|
|
75
|
+
CronExpression["EVERY_18_SECONDS"] = "*/18 * * * * *";
|
|
76
|
+
CronExpression["EVERY_19_SECONDS"] = "*/19 * * * * *";
|
|
77
|
+
CronExpression["EVERY_20_SECONDS"] = "*/20 * * * * *";
|
|
78
|
+
CronExpression["EVERY_21_SECONDS"] = "*/21 * * * * *";
|
|
79
|
+
CronExpression["EVERY_22_SECONDS"] = "*/22 * * * * *";
|
|
80
|
+
CronExpression["EVERY_23_SECONDS"] = "*/23 * * * * *";
|
|
81
|
+
CronExpression["EVERY_24_SECONDS"] = "*/24 * * * * *";
|
|
82
|
+
CronExpression["EVERY_25_SECONDS"] = "*/25 * * * * *";
|
|
83
|
+
CronExpression["EVERY_26_SECONDS"] = "*/26 * * * * *";
|
|
84
|
+
CronExpression["EVERY_27_SECONDS"] = "*/27 * * * * *";
|
|
85
|
+
CronExpression["EVERY_28_SECONDS"] = "*/28 * * * * *";
|
|
86
|
+
CronExpression["EVERY_29_SECONDS"] = "*/29 * * * * *";
|
|
87
|
+
CronExpression["EVERY_30_SECONDS"] = "*/30 * * * * *";
|
|
88
|
+
CronExpression["EVERY_31_SECONDS"] = "*/31 * * * * *";
|
|
89
|
+
CronExpression["EVERY_32_SECONDS"] = "*/32 * * * * *";
|
|
90
|
+
CronExpression["EVERY_33_SECONDS"] = "*/33 * * * * *";
|
|
91
|
+
CronExpression["EVERY_34_SECONDS"] = "*/34 * * * * *";
|
|
92
|
+
CronExpression["EVERY_35_SECONDS"] = "*/35 * * * * *";
|
|
93
|
+
CronExpression["EVERY_36_SECONDS"] = "*/36 * * * * *";
|
|
94
|
+
CronExpression["EVERY_37_SECONDS"] = "*/37 * * * * *";
|
|
95
|
+
CronExpression["EVERY_38_SECONDS"] = "*/38 * * * * *";
|
|
96
|
+
CronExpression["EVERY_39_SECONDS"] = "*/39 * * * * *";
|
|
97
|
+
CronExpression["EVERY_40_SECONDS"] = "*/40 * * * * *";
|
|
98
|
+
CronExpression["EVERY_41_SECONDS"] = "*/41 * * * * *";
|
|
99
|
+
CronExpression["EVERY_42_SECONDS"] = "*/42 * * * * *";
|
|
100
|
+
CronExpression["EVERY_43_SECONDS"] = "*/43 * * * * *";
|
|
101
|
+
CronExpression["EVERY_44_SECONDS"] = "*/44 * * * * *";
|
|
102
|
+
CronExpression["EVERY_45_SECONDS"] = "*/45 * * * * *";
|
|
103
|
+
CronExpression["EVERY_46_SECONDS"] = "*/46 * * * * *";
|
|
104
|
+
CronExpression["EVERY_47_SECONDS"] = "*/47 * * * * *";
|
|
105
|
+
CronExpression["EVERY_48_SECONDS"] = "*/48 * * * * *";
|
|
106
|
+
CronExpression["EVERY_49_SECONDS"] = "*/49 * * * * *";
|
|
107
|
+
CronExpression["EVERY_50_SECONDS"] = "*/50 * * * * *";
|
|
108
|
+
CronExpression["EVERY_51_SECONDS"] = "*/51 * * * * *";
|
|
109
|
+
CronExpression["EVERY_52_SECONDS"] = "*/52 * * * * *";
|
|
110
|
+
CronExpression["EVERY_53_SECONDS"] = "*/53 * * * * *";
|
|
111
|
+
CronExpression["EVERY_54_SECONDS"] = "*/54 * * * * *";
|
|
112
|
+
CronExpression["EVERY_55_SECONDS"] = "*/55 * * * * *";
|
|
113
|
+
CronExpression["EVERY_56_SECONDS"] = "*/56 * * * * *";
|
|
114
|
+
CronExpression["EVERY_57_SECONDS"] = "*/57 * * * * *";
|
|
115
|
+
CronExpression["EVERY_58_SECONDS"] = "*/58 * * * * *";
|
|
116
|
+
CronExpression["EVERY_59_SECONDS"] = "*/59 * * * * *";
|
|
117
|
+
CronExpression["EVERY_MINUTE"] = "0 * * * * *";
|
|
118
|
+
return CronExpression;
|
|
119
|
+
}({});
|
|
120
|
+
|
|
56
121
|
//#endregion
|
|
57
122
|
//#region src/core/typeorm-outbox.interfaces.ts
|
|
58
123
|
var TypeormOutboxRegisterCronModuleOptions = class {
|
|
59
124
|
typeOrmConnectionName = "default";
|
|
60
125
|
kafkaConfig = {};
|
|
61
|
-
cronExpression =
|
|
126
|
+
cronExpression = CronExpression.EVERY_10_SECONDS;
|
|
62
127
|
};
|
|
63
128
|
var TypeormOutboxModuleOptions = class {
|
|
64
129
|
typeOrmConnectionName = "default";
|
|
65
130
|
};
|
|
66
131
|
|
|
67
132
|
//#endregion
|
|
68
|
-
//#region \0@oxc-project+runtime@0.
|
|
133
|
+
//#region \0@oxc-project+runtime@0.110.0/helpers/decorateParam.js
|
|
69
134
|
function __decorateParam(paramIndex, decorator) {
|
|
70
135
|
return function(target, key) {
|
|
71
136
|
decorator(target, key, paramIndex);
|
|
@@ -82,7 +147,7 @@ let TypeormOutboxCronService = class TypeormOutboxCronService {
|
|
|
82
147
|
this.dataSource = dataSource;
|
|
83
148
|
}
|
|
84
149
|
onModuleInit() {
|
|
85
|
-
new cron.CronJob(this.moduleConfig.cronExpression ??
|
|
150
|
+
new cron.CronJob(this.moduleConfig.cronExpression ?? CronExpression.EVERY_10_SECONDS, () => {
|
|
86
151
|
this.executeCronJob();
|
|
87
152
|
}).start();
|
|
88
153
|
}
|
|
@@ -263,7 +328,7 @@ let TypeormOutboxModule = _TypeormOutboxModule = class TypeormOutboxModule {
|
|
|
263
328
|
return {
|
|
264
329
|
module: _TypeormOutboxModule,
|
|
265
330
|
global: true,
|
|
266
|
-
imports: [
|
|
331
|
+
imports: [this.createTypeOrmFeature()],
|
|
267
332
|
providers: [
|
|
268
333
|
TypeormOutboxCronService,
|
|
269
334
|
configProvider,
|
|
@@ -281,6 +346,7 @@ let TypeormOutboxModule = _TypeormOutboxModule = class TypeormOutboxModule {
|
|
|
281
346
|
TypeormOutboxModule = _TypeormOutboxModule = __decorate([(0, _nestjs_common.Module)({})], TypeormOutboxModule);
|
|
282
347
|
|
|
283
348
|
//#endregion
|
|
349
|
+
exports.CronExpression = CronExpression;
|
|
284
350
|
exports.InjectTypeormOutboxBroker = InjectTypeormOutboxBroker;
|
|
285
351
|
exports.InjectTypeormOutboxCronConfig = InjectTypeormOutboxCronConfig;
|
|
286
352
|
exports.InjectTypeormOutboxModuleConfig = InjectTypeormOutboxModuleConfig;
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","names":["CronExpression","CronJob","CronExpression","TypeOrmModule","ClientProxyFactory","ScheduleModule"],"sources":["../src/core/typeorm-outbox.di-tokens.ts","../src/core/typeorm-outbox.entity.ts","../src/core/typeorm-outbox.interfaces.ts","../src/core/typeorm-outbox-cron.service.ts","../src/core/typeorm-outbox.service.ts","../src/core/typeorm-outbox.module.ts"],"sourcesContent":["import { Inject } from \"@nestjs/common\";\n\nexport const TYPEORM_OUTBOX_CRON_CONFIG_TOKEN = Symbol(\n \"TYPEORM_OUTBOX_CRON_CONFIG_TOKEN\",\n);\nexport const TYPEORM_OUTBOX_MODULE_CONFIG_TOKEN = Symbol(\n \"TYPEORM_OUTBOX_MODULE_CONFIG_TOKEN\",\n);\nexport const TYPEORM_OUTBOX_SERVICE_TOKEN = Symbol(\n \"TYPEORM_OUTBOX_SERVICE_TOKEN\",\n);\nexport const TYPEORM_OUTBOX_BROKER_TOKEN = Symbol(\n \"TYPEORM_OUTBOX_BROKER_TOKEN\",\n);\n\nexport const InjectTypeormOutboxCronConfig = () =>\n Inject(TYPEORM_OUTBOX_CRON_CONFIG_TOKEN);\nexport const InjectTypeormOutboxModuleConfig = () =>\n Inject(TYPEORM_OUTBOX_MODULE_CONFIG_TOKEN);\nexport const InjectTypeormOutboxService = () =>\n Inject(TYPEORM_OUTBOX_SERVICE_TOKEN);\nexport const InjectTypeormOutboxBroker = () =>\n Inject(TYPEORM_OUTBOX_BROKER_TOKEN);\n","import {\n Column,\n CreateDateColumn,\n Entity,\n PrimaryGeneratedColumn,\n UpdateDateColumn,\n} from \"typeorm\";\n\n@Entity('outbox')\nexport class TypeormOutboxEntity {\n @PrimaryGeneratedColumn()\n id!: number;\n\n @CreateDateColumn({ name: 'created_at' })\n createdAt!: Date;\n\n @UpdateDateColumn({ name: 'updated_at' })\n updatedAt!: Date;\n\n @Column(\"character varying\", { name: 'destination_topic' })\n destinationTopic!: string;\n\n @Column(\"jsonb\", { nullable: true })\n headers!: Record<string, string>;\n\n @Column(\"jsonb\", { nullable: true })\n keys!: Record<string, unknown>;\n\n @Column(\"jsonb\")\n payload!: Record<string, any>;\n}\n","import { KafkaOptions } from \"@nestjs/microservices\";\nimport { InjectionToken, ModuleMetadata, Type } from \"@nestjs/common\";\nimport { CronExpression } from \"@nestjs/schedule\";\n\nexport class TypeormOutboxRegisterCronModuleOptions {\n typeOrmConnectionName?: string = \"default\";\n kafkaConfig?: KafkaOptions = {};\n cronExpression?: string = CronExpression.EVERY_10_SECONDS;\n}\n\nexport interface TypeormOutboxRegisterCronAsyncOptions\n extends Pick<ModuleMetadata, \"imports\"> {\n inject?: InjectionToken[];\n useExisting?: Type<TypeormOutboxRegisterCronModuleOptions>;\n useClass?: Type<TypeormOutboxRegisterCronModuleOptions>;\n useFactory?: (\n ...args: unknown[]\n ) =>\n | Promise<TypeormOutboxRegisterCronModuleOptions>\n | TypeormOutboxRegisterCronModuleOptions;\n}\n\nexport class TypeormOutboxModuleOptions {\n typeOrmConnectionName?: string = \"default\";\n}\n\nexport interface TypeormOutboxModuleAsyncOptions\n extends Pick<ModuleMetadata, \"imports\"> {\n inject?: InjectionToken[];\n useFactory?: (\n ...args: unknown[]\n ) => Promise<TypeormOutboxModuleOptions> | TypeormOutboxModuleOptions;\n}\n","import { Injectable, OnModuleInit } from \"@nestjs/common\";\nimport { InjectTypeormOutboxBroker, InjectTypeormOutboxCronConfig, InjectTypeormOutboxModuleConfig } from \"./typeorm-outbox.di-tokens\";\nimport { hashStringToInt } from \"@globalart/text-utils\";\nimport { TypeormOutboxEntity } from \"./typeorm-outbox.entity\";\nimport { firstValueFrom } from \"rxjs\";\nimport { ClientProxy } from \"@nestjs/microservices\";\nimport { CronJob } from \"cron\";\nimport { TypeormOutboxRegisterCronModuleOptions } from \"./typeorm-outbox.interfaces\";\nimport { CronExpression } from \"@nestjs/schedule\";\nimport { DataSource } from \"typeorm\";\n\n@Injectable()\nexport class TypeormOutboxCronService implements OnModuleInit {\n constructor(\n @InjectTypeormOutboxBroker()\n private readonly brokerClient: ClientProxy,\n @InjectTypeormOutboxCronConfig()\n private readonly moduleConfig: TypeormOutboxRegisterCronModuleOptions,\n private readonly dataSource: DataSource,\n ) { }\n\n onModuleInit() {\n const cronJob = new CronJob(this.moduleConfig.cronExpression ?? CronExpression.EVERY_10_SECONDS, () => {\n this.executeCronJob();\n });\n cronJob.start();\n }\n\n async executeCronJob() {\n const queryRunner = this.dataSource.createQueryRunner();\n await queryRunner.connect();\n const lockKey = hashStringToInt('typeorm-outbox-cron-lock');\n\n try {\n const lockResult = await queryRunner.query(\n 'SELECT pg_try_advisory_lock($1) as locked',\n [lockKey],\n );\n\n if (!lockResult[0].locked) {\n return;\n }\n try {\n await queryRunner.startTransaction('REPEATABLE READ');\n \n const entities = await queryRunner.manager.find(TypeormOutboxEntity);\n \n for (const entity of entities) {\n await firstValueFrom(\n this.brokerClient.emit(entity.destinationTopic, {\n key: entity.keys,\n value: entity.payload,\n headers: entity.headers,\n }),\n );\n await queryRunner.manager.delete(TypeormOutboxEntity, entity.id);\n }\n\n await queryRunner.commitTransaction();\n } catch (error) {\n await queryRunner.rollbackTransaction();\n throw error;\n } finally {\n await queryRunner.query('SELECT pg_advisory_unlock($1)', [lockKey]);\n }\n } finally {\n await queryRunner.release();\n }\n }\n}\n","import { Injectable } from \"@nestjs/common\";\nimport { InjectRepository } from \"@nestjs/typeorm\";\nimport { TypeormOutboxEntity } from \"./typeorm-outbox.entity\";\nimport { Repository } from \"typeorm\";\n\nexport interface CreateOutboxOptions {\n destinationTopic: string;\n payload: Record<string, unknown>;\n headers?: Record<string, string>;\n keys?: Record<string, unknown>;\n}\n\n@Injectable()\nexport class TypeormOutboxService {\n constructor(\n @InjectRepository(TypeormOutboxEntity)\n private readonly outboxRepository: Repository<TypeormOutboxEntity>,\n ) {}\n\n async create(options: CreateOutboxOptions): Promise<TypeormOutboxEntity> {\n return this.outboxRepository.save({\n destinationTopic: options.destinationTopic,\n headers: options.headers,\n keys: options.keys,\n payload: options.payload,\n });\n }\n}\n","import { TypeOrmModule } from \"@nestjs/typeorm\";\nimport { DynamicModule, Module, Provider } from \"@nestjs/common\";\nimport {\n TypeormOutboxRegisterCronAsyncOptions,\n TypeormOutboxRegisterCronModuleOptions,\n TypeormOutboxModuleOptions,\n TypeormOutboxModuleAsyncOptions,\n} from \"./typeorm-outbox.interfaces\";\nimport {\n TYPEORM_OUTBOX_BROKER_TOKEN,\n TYPEORM_OUTBOX_CRON_CONFIG_TOKEN,\n TYPEORM_OUTBOX_MODULE_CONFIG_TOKEN,\n TYPEORM_OUTBOX_SERVICE_TOKEN,\n} from \"./typeorm-outbox.di-tokens\";\nimport { TypeormOutboxEntity } from \"./typeorm-outbox.entity\";\nimport { TypeormOutboxService } from \"./typeorm-outbox.service\";\nimport { ScheduleModule } from \"@nestjs/schedule\";\nimport { ClientProxyFactory } from \"@nestjs/microservices\";\nimport { TypeormOutboxCronService } from \"./typeorm-outbox-cron.service\";\n\n@Module({})\nexport class TypeormOutboxModule {\n private static createServiceProvider(): Provider {\n return {\n provide: TYPEORM_OUTBOX_SERVICE_TOKEN,\n useClass: TypeormOutboxService,\n };\n }\n\n private static createBrokerProvider(useValue: unknown = null): Provider {\n return {\n provide: TYPEORM_OUTBOX_BROKER_TOKEN,\n useValue,\n };\n }\n\n private static createTypeOrmFeature(connectionName?: string) {\n return TypeOrmModule.forFeature(\n [TypeormOutboxEntity],\n connectionName || \"default\",\n );\n }\n\n private static createModuleConfigProvider(\n options: TypeormOutboxModuleOptions,\n ): Provider {\n return {\n provide: TYPEORM_OUTBOX_MODULE_CONFIG_TOKEN,\n useValue: {\n ...new TypeormOutboxModuleOptions(),\n ...options,\n },\n };\n }\n\n private static createAsyncModuleConfigProvider(\n options: TypeormOutboxModuleAsyncOptions,\n ): Provider {\n return {\n provide: TYPEORM_OUTBOX_MODULE_CONFIG_TOKEN,\n useFactory: async (...args: unknown[]) => {\n const moduleOptions = (await options.useFactory?.(...args)) as\n | TypeormOutboxModuleOptions;\n \n return {\n ...new TypeormOutboxModuleOptions(),\n ...moduleOptions,\n };\n },\n inject: options.inject || [],\n };\n }\n\n private static createCronConfigProvider(\n options: TypeormOutboxRegisterCronAsyncOptions,\n ): Provider {\n return {\n provide: TYPEORM_OUTBOX_CRON_CONFIG_TOKEN,\n useFactory: async (...args: unknown[]) => {\n const moduleOptions = await options.useFactory?.(...args);\n return {\n ...new TypeormOutboxRegisterCronModuleOptions(),\n ...moduleOptions,\n };\n },\n inject: options.inject || [],\n };\n }\n\n private static createCronBrokerProvider(\n options: TypeormOutboxRegisterCronAsyncOptions,\n ): Provider {\n return {\n provide: TYPEORM_OUTBOX_BROKER_TOKEN,\n useFactory: async (...args: unknown[]) => {\n const moduleOptions = await options.useFactory?.(...args);\n const config = {\n ...new TypeormOutboxRegisterCronModuleOptions(),\n ...moduleOptions,\n };\n return ClientProxyFactory.create(config?.kafkaConfig ?? {});\n },\n inject: options.inject || [],\n };\n }\n\n static forRoot(options: TypeormOutboxModuleOptions = {}): DynamicModule {\n const configProvider = this.createModuleConfigProvider(options);\n const serviceProvider = this.createServiceProvider();\n const brokerProvider = this.createBrokerProvider();\n\n return {\n module: TypeormOutboxModule,\n global: true,\n imports: [this.createTypeOrmFeature(options.typeOrmConnectionName)],\n providers: [configProvider, serviceProvider, brokerProvider],\n exports: [configProvider, serviceProvider, brokerProvider],\n };\n }\n\n static forRootAsync(\n options: TypeormOutboxModuleAsyncOptions,\n ): DynamicModule {\n const configProvider = this.createAsyncModuleConfigProvider(options);\n const serviceProvider = this.createServiceProvider();\n const brokerProvider = this.createBrokerProvider();\n\n return {\n module: TypeormOutboxModule,\n global: true,\n imports: [this.createTypeOrmFeature()],\n providers: [configProvider, serviceProvider, brokerProvider],\n exports: [configProvider, serviceProvider, brokerProvider],\n };\n }\n\n static registerCronAsync(\n options: TypeormOutboxRegisterCronAsyncOptions,\n ): DynamicModule {\n const configProvider = this.createCronConfigProvider(options);\n const brokerProvider = this.createCronBrokerProvider(options);\n const serviceProvider = this.createServiceProvider();\n\n return {\n module: TypeormOutboxModule,\n global: true,\n imports: [\n ScheduleModule.forRoot(),\n this.createTypeOrmFeature(),\n ],\n providers: [\n TypeormOutboxCronService,\n configProvider,\n brokerProvider,\n serviceProvider,\n ],\n exports: [configProvider, brokerProvider, serviceProvider],\n };\n }\n}\n"],"mappings":";;;;;;;;;;AAEA,MAAa,mCAAmC,OAC9C,mCACD;AACD,MAAa,qCAAqC,OAChD,qCACD;AACD,MAAa,+BAA+B,OAC1C,+BACD;AACD,MAAa,8BAA8B,OACzC,8BACD;AAED,MAAa,iEACJ,iCAAiC;AAC1C,MAAa,mEACJ,mCAAmC;AAC5C,MAAa,8DACJ,6BAA6B;AACtC,MAAa,6DACJ,4BAA4B;;;;;;;;;;;;;;;;;;;;ACb9B,gCAAM,oBAAoB;CAC/B,AACA;CAEA,AACA;CAEA,AACA;CAEA,AACA;CAEA,AACA;CAEA,AACA;CAEA,AACA;;iDAnByB;0CAGP,EAAE,MAAM,cAAc,CAAC;0CAGvB,EAAE,MAAM,cAAc,CAAC;gCAGjC,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;gCAGnD,SAAS,EAAE,UAAU,MAAM,CAAC;gCAG5B,SAAS,EAAE,UAAU,MAAM,CAAC;gCAG5B,QAAQ;sDApBV,SAAS;;;;ACJjB,IAAa,yCAAb,MAAoD;CAClD,wBAAiC;CACjC,cAA6B,EAAE;CAC/B,iBAA0BA,gCAAe;;AAe3C,IAAa,6BAAb,MAAwC;CACtC,wBAAiC;;;;;;;;;;;;;;ACX5B,qCAAM,yBAAiD;CAC5D,YACE,AACiB,cACjB,AACiB,cACjB,AAAiB,YACjB;EAJiB;EAEA;EACA;;CAGnB,eAAe;AAIb,EAHgB,IAAIC,aAAQ,KAAK,aAAa,kBAAkBC,gCAAe,wBAAwB;AACrG,QAAK,gBAAgB;IACrB,CACM,OAAO;;CAGjB,MAAM,iBAAiB;EACrB,MAAM,cAAc,KAAK,WAAW,mBAAmB;AACvD,QAAM,YAAY,SAAS;EAC3B,MAAM,qDAA0B,2BAA2B;AAE3D,MAAI;AAMF,OAAI,EALe,MAAM,YAAY,MACnC,6CACA,CAAC,QAAQ,CACV,EAEe,GAAG,OACjB;AAEF,OAAI;AACF,UAAM,YAAY,iBAAiB,kBAAkB;IAErD,MAAM,WAAW,MAAM,YAAY,QAAQ,KAAK,oBAAoB;AAEpE,SAAK,MAAM,UAAU,UAAU;AAC7B,oCACE,KAAK,aAAa,KAAK,OAAO,kBAAkB;MAC9C,KAAK,OAAO;MACZ,OAAO,OAAO;MACd,SAAS,OAAO;MACjB,CAAC,CACH;AACD,WAAM,YAAY,QAAQ,OAAO,qBAAqB,OAAO,GAAG;;AAGlE,UAAM,YAAY,mBAAmB;YAC9B,OAAO;AACd,UAAM,YAAY,qBAAqB;AACvC,UAAM;aACE;AACR,UAAM,YAAY,MAAM,iCAAiC,CAAC,QAAQ,CAAC;;YAE7D;AACR,SAAM,YAAY,SAAS;;;;;iCAvDpB;oBAGR,2BAA2B;oBAE3B,+BAA+B;;;;;;;;;;;ACH7B,iCAAM,qBAAqB;CAChC,YACE,AACiB,kBACjB;EADiB;;CAGnB,MAAM,OAAO,SAA4D;AACvE,SAAO,KAAK,iBAAiB,KAAK;GAChC,kBAAkB,QAAQ;GAC1B,SAAS,QAAQ;GACjB,MAAM,QAAQ;GACd,SAAS,QAAQ;GAClB,CAAC;;;;iCAbO;0DAGS,oBAAoB;;;;;;;ACMnC,uDAAM,oBAAoB;CAC/B,OAAe,wBAAkC;AAC/C,SAAO;GACL,SAAS;GACT,UAAU;GACX;;CAGH,OAAe,qBAAqB,WAAoB,MAAgB;AACtE,SAAO;GACL,SAAS;GACT;GACD;;CAGH,OAAe,qBAAqB,gBAAyB;AAC3D,SAAOC,8BAAc,WACnB,CAAC,oBAAoB,EACrB,kBAAkB,UACnB;;CAGH,OAAe,2BACb,SACU;AACV,SAAO;GACL,SAAS;GACT,UAAU;IACR,GAAG,IAAI,4BAA4B;IACnC,GAAG;IACJ;GACF;;CAGH,OAAe,gCACb,SACU;AACV,SAAO;GACL,SAAS;GACT,YAAY,OAAO,GAAG,SAAoB;IACxC,MAAM,gBAAiB,MAAM,QAAQ,aAAa,GAAG,KAAK;AAG1D,WAAO;KACL,GAAG,IAAI,4BAA4B;KACnC,GAAG;KACJ;;GAEH,QAAQ,QAAQ,UAAU,EAAE;GAC7B;;CAGH,OAAe,yBACb,SACU;AACV,SAAO;GACL,SAAS;GACT,YAAY,OAAO,GAAG,SAAoB;IACxC,MAAM,gBAAgB,MAAM,QAAQ,aAAa,GAAG,KAAK;AACzD,WAAO;KACL,GAAG,IAAI,wCAAwC;KAC/C,GAAG;KACJ;;GAEH,QAAQ,QAAQ,UAAU,EAAE;GAC7B;;CAGH,OAAe,yBACb,SACU;AACV,SAAO;GACL,SAAS;GACT,YAAY,OAAO,GAAG,SAAoB;IACxC,MAAM,gBAAgB,MAAM,QAAQ,aAAa,GAAG,KAAK;IACzD,MAAM,SAAS;KACb,GAAG,IAAI,wCAAwC;KAC/C,GAAG;KACJ;AACD,WAAOC,yCAAmB,OAAO,QAAQ,eAAe,EAAE,CAAC;;GAE7D,QAAQ,QAAQ,UAAU,EAAE;GAC7B;;CAGH,OAAO,QAAQ,UAAsC,EAAE,EAAiB;EACtE,MAAM,iBAAiB,KAAK,2BAA2B,QAAQ;EAC/D,MAAM,kBAAkB,KAAK,uBAAuB;EACpD,MAAM,iBAAiB,KAAK,sBAAsB;AAElD,SAAO;GACL;GACA,QAAQ;GACR,SAAS,CAAC,KAAK,qBAAqB,QAAQ,sBAAsB,CAAC;GACnE,WAAW;IAAC;IAAgB;IAAiB;IAAe;GAC5D,SAAS;IAAC;IAAgB;IAAiB;IAAe;GAC3D;;CAGH,OAAO,aACL,SACe;EACf,MAAM,iBAAiB,KAAK,gCAAgC,QAAQ;EACpE,MAAM,kBAAkB,KAAK,uBAAuB;EACpD,MAAM,iBAAiB,KAAK,sBAAsB;AAElD,SAAO;GACL;GACA,QAAQ;GACR,SAAS,CAAC,KAAK,sBAAsB,CAAC;GACtC,WAAW;IAAC;IAAgB;IAAiB;IAAe;GAC5D,SAAS;IAAC;IAAgB;IAAiB;IAAe;GAC3D;;CAGH,OAAO,kBACL,SACe;EACf,MAAM,iBAAiB,KAAK,yBAAyB,QAAQ;EAC7D,MAAM,iBAAiB,KAAK,yBAAyB,QAAQ;EAC7D,MAAM,kBAAkB,KAAK,uBAAuB;AAEpD,SAAO;GACL;GACA,QAAQ;GACR,SAAS,CACPC,gCAAe,SAAS,EACxB,KAAK,sBAAsB,CAC5B;GACD,WAAW;IACT;IACA;IACA;IACA;IACD;GACD,SAAS;IAAC;IAAgB;IAAgB;IAAgB;GAC3D;;;oFAzIG,EAAE,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.cjs","names":["CronJob","TypeOrmModule","ClientProxyFactory"],"sources":["../src/core/typeorm-outbox.di-tokens.ts","../src/core/typeorm-outbox.entity.ts","../src/core/typeorm-outbox.enums.ts","../src/core/typeorm-outbox.interfaces.ts","../src/core/typeorm-outbox-cron.service.ts","../src/core/typeorm-outbox.service.ts","../src/core/typeorm-outbox.module.ts"],"sourcesContent":["import { Inject } from \"@nestjs/common\";\n\nexport const TYPEORM_OUTBOX_CRON_CONFIG_TOKEN = Symbol(\n \"TYPEORM_OUTBOX_CRON_CONFIG_TOKEN\",\n);\nexport const TYPEORM_OUTBOX_MODULE_CONFIG_TOKEN = Symbol(\n \"TYPEORM_OUTBOX_MODULE_CONFIG_TOKEN\",\n);\nexport const TYPEORM_OUTBOX_SERVICE_TOKEN = Symbol(\n \"TYPEORM_OUTBOX_SERVICE_TOKEN\",\n);\nexport const TYPEORM_OUTBOX_BROKER_TOKEN = Symbol(\n \"TYPEORM_OUTBOX_BROKER_TOKEN\",\n);\n\nexport const InjectTypeormOutboxCronConfig = () =>\n Inject(TYPEORM_OUTBOX_CRON_CONFIG_TOKEN);\nexport const InjectTypeormOutboxModuleConfig = () =>\n Inject(TYPEORM_OUTBOX_MODULE_CONFIG_TOKEN);\nexport const InjectTypeormOutboxService = () =>\n Inject(TYPEORM_OUTBOX_SERVICE_TOKEN);\nexport const InjectTypeormOutboxBroker = () =>\n Inject(TYPEORM_OUTBOX_BROKER_TOKEN);\n","import {\n Column,\n CreateDateColumn,\n Entity,\n PrimaryGeneratedColumn,\n UpdateDateColumn,\n} from \"typeorm\";\n\n@Entity('outbox')\nexport class TypeormOutboxEntity {\n @PrimaryGeneratedColumn()\n id!: number;\n\n @CreateDateColumn({ name: 'created_at' })\n createdAt!: Date;\n\n @UpdateDateColumn({ name: 'updated_at' })\n updatedAt!: Date;\n\n @Column(\"character varying\", { name: 'destination_topic' })\n destinationTopic!: string;\n\n @Column(\"jsonb\", { nullable: true })\n headers!: Record<string, string>;\n\n @Column(\"jsonb\", { nullable: true })\n keys!: Record<string, unknown>;\n\n @Column(\"jsonb\")\n payload!: Record<string, any>;\n}\n","export enum CronExpression {\n EVERY_1_SECOND = \"* * * * * *\",\n EVERY_2_SECONDS = \"*/2 * * * * *\",\n EVERY_3_SECONDS = \"*/3 * * * * *\",\n EVERY_4_SECONDS = \"*/4 * * * * *\",\n EVERY_5_SECONDS = \"*/5 * * * * *\",\n EVERY_6_SECONDS = \"*/6 * * * * *\",\n EVERY_7_SECONDS = \"*/7 * * * * *\",\n EVERY_8_SECONDS = \"*/8 * * * * *\",\n EVERY_9_SECONDS = \"*/9 * * * * *\",\n EVERY_10_SECONDS = \"*/10 * * * * *\",\n EVERY_11_SECONDS = \"*/11 * * * * *\",\n EVERY_12_SECONDS = \"*/12 * * * * *\",\n EVERY_13_SECONDS = \"*/13 * * * * *\",\n EVERY_14_SECONDS = \"*/14 * * * * *\",\n EVERY_15_SECONDS = \"*/15 * * * * *\",\n EVERY_16_SECONDS = \"*/16 * * * * *\",\n EVERY_17_SECONDS = \"*/17 * * * * *\",\n EVERY_18_SECONDS = \"*/18 * * * * *\",\n EVERY_19_SECONDS = \"*/19 * * * * *\",\n EVERY_20_SECONDS = \"*/20 * * * * *\",\n EVERY_21_SECONDS = \"*/21 * * * * *\",\n EVERY_22_SECONDS = \"*/22 * * * * *\",\n EVERY_23_SECONDS = \"*/23 * * * * *\",\n EVERY_24_SECONDS = \"*/24 * * * * *\",\n EVERY_25_SECONDS = \"*/25 * * * * *\",\n EVERY_26_SECONDS = \"*/26 * * * * *\",\n EVERY_27_SECONDS = \"*/27 * * * * *\",\n EVERY_28_SECONDS = \"*/28 * * * * *\",\n EVERY_29_SECONDS = \"*/29 * * * * *\",\n EVERY_30_SECONDS = \"*/30 * * * * *\",\n EVERY_31_SECONDS = \"*/31 * * * * *\",\n EVERY_32_SECONDS = \"*/32 * * * * *\",\n EVERY_33_SECONDS = \"*/33 * * * * *\",\n EVERY_34_SECONDS = \"*/34 * * * * *\",\n EVERY_35_SECONDS = \"*/35 * * * * *\",\n EVERY_36_SECONDS = \"*/36 * * * * *\",\n EVERY_37_SECONDS = \"*/37 * * * * *\",\n EVERY_38_SECONDS = \"*/38 * * * * *\",\n EVERY_39_SECONDS = \"*/39 * * * * *\",\n EVERY_40_SECONDS = \"*/40 * * * * *\",\n EVERY_41_SECONDS = \"*/41 * * * * *\",\n EVERY_42_SECONDS = \"*/42 * * * * *\",\n EVERY_43_SECONDS = \"*/43 * * * * *\",\n EVERY_44_SECONDS = \"*/44 * * * * *\",\n EVERY_45_SECONDS = \"*/45 * * * * *\",\n EVERY_46_SECONDS = \"*/46 * * * * *\",\n EVERY_47_SECONDS = \"*/47 * * * * *\",\n EVERY_48_SECONDS = \"*/48 * * * * *\",\n EVERY_49_SECONDS = \"*/49 * * * * *\",\n EVERY_50_SECONDS = \"*/50 * * * * *\",\n EVERY_51_SECONDS = \"*/51 * * * * *\",\n EVERY_52_SECONDS = \"*/52 * * * * *\",\n EVERY_53_SECONDS = \"*/53 * * * * *\",\n EVERY_54_SECONDS = \"*/54 * * * * *\",\n EVERY_55_SECONDS = \"*/55 * * * * *\",\n EVERY_56_SECONDS = \"*/56 * * * * *\",\n EVERY_57_SECONDS = \"*/57 * * * * *\",\n EVERY_58_SECONDS = \"*/58 * * * * *\",\n EVERY_59_SECONDS = \"*/59 * * * * *\",\n EVERY_MINUTE = \"0 * * * * *\",\n}","import { KafkaOptions } from \"@nestjs/microservices\";\nimport { InjectionToken, ModuleMetadata, Type } from \"@nestjs/common\";\nimport { CronExpression } from \"./typeorm-outbox.enums\";\n\nexport class TypeormOutboxRegisterCronModuleOptions {\n typeOrmConnectionName?: string = \"default\";\n kafkaConfig?: KafkaOptions = {};\n cronExpression?: string = CronExpression.EVERY_10_SECONDS;\n}\n\nexport interface TypeormOutboxRegisterCronAsyncOptions\n extends Pick<ModuleMetadata, \"imports\"> {\n inject?: InjectionToken[];\n useExisting?: Type<TypeormOutboxRegisterCronModuleOptions>;\n useClass?: Type<TypeormOutboxRegisterCronModuleOptions>;\n useFactory?: (\n ...args: unknown[]\n ) =>\n | Promise<TypeormOutboxRegisterCronModuleOptions>\n | TypeormOutboxRegisterCronModuleOptions;\n}\n\nexport class TypeormOutboxModuleOptions {\n typeOrmConnectionName?: string = \"default\";\n}\n\nexport interface TypeormOutboxModuleAsyncOptions\n extends Pick<ModuleMetadata, \"imports\"> {\n inject?: InjectionToken[];\n useFactory?: (\n ...args: unknown[]\n ) => Promise<TypeormOutboxModuleOptions> | TypeormOutboxModuleOptions;\n}\n","import { Injectable, OnModuleInit } from \"@nestjs/common\";\nimport { InjectTypeormOutboxBroker, InjectTypeormOutboxCronConfig, InjectTypeormOutboxModuleConfig } from \"./typeorm-outbox.di-tokens\";\nimport { hashStringToInt } from \"@globalart/text-utils\";\nimport { TypeormOutboxEntity } from \"./typeorm-outbox.entity\";\nimport { firstValueFrom } from \"rxjs\";\nimport { ClientProxy } from \"@nestjs/microservices\";\nimport { CronJob } from \"cron\";\nimport { TypeormOutboxRegisterCronModuleOptions } from \"./typeorm-outbox.interfaces\";\nimport { DataSource } from \"typeorm\";\nimport { CronExpression } from \"./typeorm-outbox.enums\";\n\n@Injectable()\nexport class TypeormOutboxCronService implements OnModuleInit {\n constructor(\n @InjectTypeormOutboxBroker()\n private readonly brokerClient: ClientProxy,\n @InjectTypeormOutboxCronConfig()\n private readonly moduleConfig: TypeormOutboxRegisterCronModuleOptions,\n private readonly dataSource: DataSource,\n ) { }\n\n onModuleInit() {\n const cronJob = new CronJob(this.moduleConfig.cronExpression ?? CronExpression.EVERY_10_SECONDS, () => {\n this.executeCronJob();\n });\n cronJob.start();\n }\n\n async executeCronJob() {\n const queryRunner = this.dataSource.createQueryRunner();\n await queryRunner.connect();\n const lockKey = hashStringToInt('typeorm-outbox-cron-lock');\n\n try {\n const lockResult = await queryRunner.query(\n 'SELECT pg_try_advisory_lock($1) as locked',\n [lockKey],\n );\n\n if (!lockResult[0].locked) {\n return;\n }\n try {\n await queryRunner.startTransaction('REPEATABLE READ');\n \n const entities = await queryRunner.manager.find(TypeormOutboxEntity);\n \n for (const entity of entities) {\n await firstValueFrom(\n this.brokerClient.emit(entity.destinationTopic, {\n key: entity.keys,\n value: entity.payload,\n headers: entity.headers,\n }),\n );\n await queryRunner.manager.delete(TypeormOutboxEntity, entity.id);\n }\n\n await queryRunner.commitTransaction();\n } catch (error) {\n await queryRunner.rollbackTransaction();\n throw error;\n } finally {\n await queryRunner.query('SELECT pg_advisory_unlock($1)', [lockKey]);\n }\n } finally {\n await queryRunner.release();\n }\n }\n}\n","import { Injectable } from \"@nestjs/common\";\nimport { InjectRepository } from \"@nestjs/typeorm\";\nimport { TypeormOutboxEntity } from \"./typeorm-outbox.entity\";\nimport { Repository } from \"typeorm\";\n\nexport interface CreateOutboxOptions {\n destinationTopic: string;\n payload: Record<string, unknown>;\n headers?: Record<string, string>;\n keys?: Record<string, unknown>;\n}\n\n@Injectable()\nexport class TypeormOutboxService {\n constructor(\n @InjectRepository(TypeormOutboxEntity)\n private readonly outboxRepository: Repository<TypeormOutboxEntity>,\n ) {}\n\n async create(options: CreateOutboxOptions): Promise<TypeormOutboxEntity> {\n return this.outboxRepository.save({\n destinationTopic: options.destinationTopic,\n headers: options.headers,\n keys: options.keys,\n payload: options.payload,\n });\n }\n}\n","import { TypeOrmModule } from \"@nestjs/typeorm\";\nimport { DynamicModule, Module, Provider } from \"@nestjs/common\";\nimport {\n TypeormOutboxRegisterCronAsyncOptions,\n TypeormOutboxRegisterCronModuleOptions,\n TypeormOutboxModuleOptions,\n TypeormOutboxModuleAsyncOptions,\n} from \"./typeorm-outbox.interfaces\";\nimport {\n TYPEORM_OUTBOX_BROKER_TOKEN,\n TYPEORM_OUTBOX_CRON_CONFIG_TOKEN,\n TYPEORM_OUTBOX_MODULE_CONFIG_TOKEN,\n TYPEORM_OUTBOX_SERVICE_TOKEN,\n} from \"./typeorm-outbox.di-tokens\";\nimport { TypeormOutboxEntity } from \"./typeorm-outbox.entity\";\nimport { TypeormOutboxService } from \"./typeorm-outbox.service\";\nimport { ClientProxyFactory } from \"@nestjs/microservices\";\nimport { TypeormOutboxCronService } from \"./typeorm-outbox-cron.service\";\n\n@Module({})\nexport class TypeormOutboxModule {\n private static createServiceProvider(): Provider {\n return {\n provide: TYPEORM_OUTBOX_SERVICE_TOKEN,\n useClass: TypeormOutboxService,\n };\n }\n\n private static createBrokerProvider(useValue: unknown = null): Provider {\n return {\n provide: TYPEORM_OUTBOX_BROKER_TOKEN,\n useValue,\n };\n }\n\n private static createTypeOrmFeature(connectionName?: string) {\n return TypeOrmModule.forFeature(\n [TypeormOutboxEntity],\n connectionName || \"default\",\n );\n }\n\n private static createModuleConfigProvider(\n options: TypeormOutboxModuleOptions,\n ): Provider {\n return {\n provide: TYPEORM_OUTBOX_MODULE_CONFIG_TOKEN,\n useValue: {\n ...new TypeormOutboxModuleOptions(),\n ...options,\n },\n };\n }\n\n private static createAsyncModuleConfigProvider(\n options: TypeormOutboxModuleAsyncOptions,\n ): Provider {\n return {\n provide: TYPEORM_OUTBOX_MODULE_CONFIG_TOKEN,\n useFactory: async (...args: unknown[]) => {\n const moduleOptions = (await options.useFactory?.(...args)) as\n | TypeormOutboxModuleOptions;\n \n return {\n ...new TypeormOutboxModuleOptions(),\n ...moduleOptions,\n };\n },\n inject: options.inject || [],\n };\n }\n\n private static createCronConfigProvider(\n options: TypeormOutboxRegisterCronAsyncOptions,\n ): Provider {\n return {\n provide: TYPEORM_OUTBOX_CRON_CONFIG_TOKEN,\n useFactory: async (...args: unknown[]) => {\n const moduleOptions = await options.useFactory?.(...args);\n return {\n ...new TypeormOutboxRegisterCronModuleOptions(),\n ...moduleOptions,\n };\n },\n inject: options.inject || [],\n };\n }\n\n private static createCronBrokerProvider(\n options: TypeormOutboxRegisterCronAsyncOptions,\n ): Provider {\n return {\n provide: TYPEORM_OUTBOX_BROKER_TOKEN,\n useFactory: async (...args: unknown[]) => {\n const moduleOptions = await options.useFactory?.(...args);\n const config = {\n ...new TypeormOutboxRegisterCronModuleOptions(),\n ...moduleOptions,\n };\n return ClientProxyFactory.create(config?.kafkaConfig ?? {});\n },\n inject: options.inject || [],\n };\n }\n\n static forRoot(options: TypeormOutboxModuleOptions = {}): DynamicModule {\n const configProvider = this.createModuleConfigProvider(options);\n const serviceProvider = this.createServiceProvider();\n const brokerProvider = this.createBrokerProvider();\n\n return {\n module: TypeormOutboxModule,\n global: true,\n imports: [this.createTypeOrmFeature(options.typeOrmConnectionName)],\n providers: [configProvider, serviceProvider, brokerProvider],\n exports: [configProvider, serviceProvider, brokerProvider],\n };\n }\n\n static forRootAsync(\n options: TypeormOutboxModuleAsyncOptions,\n ): DynamicModule {\n const configProvider = this.createAsyncModuleConfigProvider(options);\n const serviceProvider = this.createServiceProvider();\n const brokerProvider = this.createBrokerProvider();\n\n return {\n module: TypeormOutboxModule,\n global: true,\n imports: [this.createTypeOrmFeature()],\n providers: [configProvider, serviceProvider, brokerProvider],\n exports: [configProvider, serviceProvider, brokerProvider],\n };\n }\n\n static registerCronAsync(\n options: TypeormOutboxRegisterCronAsyncOptions,\n ): DynamicModule {\n const configProvider = this.createCronConfigProvider(options);\n const brokerProvider = this.createCronBrokerProvider(options);\n const serviceProvider = this.createServiceProvider();\n\n return {\n module: TypeormOutboxModule,\n global: true,\n imports: [\n this.createTypeOrmFeature(),\n ],\n providers: [\n TypeormOutboxCronService,\n configProvider,\n brokerProvider,\n serviceProvider,\n ],\n exports: [configProvider, brokerProvider, serviceProvider],\n };\n }\n}\n"],"mappings":";;;;;;;;;AAEA,MAAa,mCAAmC,OAC9C,mCACD;AACD,MAAa,qCAAqC,OAChD,qCACD;AACD,MAAa,+BAA+B,OAC1C,+BACD;AACD,MAAa,8BAA8B,OACzC,8BACD;AAED,MAAa,iEACJ,iCAAiC;AAC1C,MAAa,mEACJ,mCAAmC;AAC5C,MAAa,8DACJ,6BAA6B;AACtC,MAAa,6DACJ,4BAA4B;;;;;;;;;;;;;;;;;;;;ACb9B,gCAAM,oBAAoB;CAC/B,AACA;CAEA,AACA;CAEA,AACA;CAEA,AACA;CAEA,AACA;CAEA,AACA;CAEA,AACA;;iDAnByB;0CAGP,EAAE,MAAM,cAAc,CAAC;0CAGvB,EAAE,MAAM,cAAc,CAAC;gCAGjC,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;gCAGnD,SAAS,EAAE,UAAU,MAAM,CAAC;gCAG5B,SAAS,EAAE,UAAU,MAAM,CAAC;gCAG5B,QAAQ;sDApBV,SAAS;;;;ACRjB,IAAY,0DAAL;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACxDF,IAAa,yCAAb,MAAoD;CAClD,wBAAiC;CACjC,cAA6B,EAAE;CAC/B,iBAA0B,eAAe;;AAe3C,IAAa,6BAAb,MAAwC;CACtC,wBAAiC;;;;;;;;;;;;;;ACX5B,qCAAM,yBAAiD;CAC5D,YACE,AACiB,cACjB,AACiB,cACjB,AAAiB,YACjB;EAJiB;EAEA;EACA;;CAGnB,eAAe;AAIb,EAHgB,IAAIA,aAAQ,KAAK,aAAa,kBAAkB,eAAe,wBAAwB;AACrG,QAAK,gBAAgB;IACrB,CACM,OAAO;;CAGjB,MAAM,iBAAiB;EACrB,MAAM,cAAc,KAAK,WAAW,mBAAmB;AACvD,QAAM,YAAY,SAAS;EAC3B,MAAM,qDAA0B,2BAA2B;AAE3D,MAAI;AAMF,OAAI,EALe,MAAM,YAAY,MACnC,6CACA,CAAC,QAAQ,CACV,EAEe,GAAG,OACjB;AAEF,OAAI;AACF,UAAM,YAAY,iBAAiB,kBAAkB;IAErD,MAAM,WAAW,MAAM,YAAY,QAAQ,KAAK,oBAAoB;AAEpE,SAAK,MAAM,UAAU,UAAU;AAC7B,oCACE,KAAK,aAAa,KAAK,OAAO,kBAAkB;MAC9C,KAAK,OAAO;MACZ,OAAO,OAAO;MACd,SAAS,OAAO;MACjB,CAAC,CACH;AACD,WAAM,YAAY,QAAQ,OAAO,qBAAqB,OAAO,GAAG;;AAGlE,UAAM,YAAY,mBAAmB;YAC9B,OAAO;AACd,UAAM,YAAY,qBAAqB;AACvC,UAAM;aACE;AACR,UAAM,YAAY,MAAM,iCAAiC,CAAC,QAAQ,CAAC;;YAE7D;AACR,SAAM,YAAY,SAAS;;;;;iCAvDpB;oBAGR,2BAA2B;oBAE3B,+BAA+B;;;;;;;;;;;ACH7B,iCAAM,qBAAqB;CAChC,YACE,AACiB,kBACjB;EADiB;;CAGnB,MAAM,OAAO,SAA4D;AACvE,SAAO,KAAK,iBAAiB,KAAK;GAChC,kBAAkB,QAAQ;GAC1B,SAAS,QAAQ;GACjB,MAAM,QAAQ;GACd,SAAS,QAAQ;GAClB,CAAC;;;;iCAbO;0DAGS,oBAAoB;;;;;;;ACKnC,uDAAM,oBAAoB;CAC/B,OAAe,wBAAkC;AAC/C,SAAO;GACL,SAAS;GACT,UAAU;GACX;;CAGH,OAAe,qBAAqB,WAAoB,MAAgB;AACtE,SAAO;GACL,SAAS;GACT;GACD;;CAGH,OAAe,qBAAqB,gBAAyB;AAC3D,SAAOC,8BAAc,WACnB,CAAC,oBAAoB,EACrB,kBAAkB,UACnB;;CAGH,OAAe,2BACb,SACU;AACV,SAAO;GACL,SAAS;GACT,UAAU;IACR,GAAG,IAAI,4BAA4B;IACnC,GAAG;IACJ;GACF;;CAGH,OAAe,gCACb,SACU;AACV,SAAO;GACL,SAAS;GACT,YAAY,OAAO,GAAG,SAAoB;IACxC,MAAM,gBAAiB,MAAM,QAAQ,aAAa,GAAG,KAAK;AAG1D,WAAO;KACL,GAAG,IAAI,4BAA4B;KACnC,GAAG;KACJ;;GAEH,QAAQ,QAAQ,UAAU,EAAE;GAC7B;;CAGH,OAAe,yBACb,SACU;AACV,SAAO;GACL,SAAS;GACT,YAAY,OAAO,GAAG,SAAoB;IACxC,MAAM,gBAAgB,MAAM,QAAQ,aAAa,GAAG,KAAK;AACzD,WAAO;KACL,GAAG,IAAI,wCAAwC;KAC/C,GAAG;KACJ;;GAEH,QAAQ,QAAQ,UAAU,EAAE;GAC7B;;CAGH,OAAe,yBACb,SACU;AACV,SAAO;GACL,SAAS;GACT,YAAY,OAAO,GAAG,SAAoB;IACxC,MAAM,gBAAgB,MAAM,QAAQ,aAAa,GAAG,KAAK;IACzD,MAAM,SAAS;KACb,GAAG,IAAI,wCAAwC;KAC/C,GAAG;KACJ;AACD,WAAOC,yCAAmB,OAAO,QAAQ,eAAe,EAAE,CAAC;;GAE7D,QAAQ,QAAQ,UAAU,EAAE;GAC7B;;CAGH,OAAO,QAAQ,UAAsC,EAAE,EAAiB;EACtE,MAAM,iBAAiB,KAAK,2BAA2B,QAAQ;EAC/D,MAAM,kBAAkB,KAAK,uBAAuB;EACpD,MAAM,iBAAiB,KAAK,sBAAsB;AAElD,SAAO;GACL;GACA,QAAQ;GACR,SAAS,CAAC,KAAK,qBAAqB,QAAQ,sBAAsB,CAAC;GACnE,WAAW;IAAC;IAAgB;IAAiB;IAAe;GAC5D,SAAS;IAAC;IAAgB;IAAiB;IAAe;GAC3D;;CAGH,OAAO,aACL,SACe;EACf,MAAM,iBAAiB,KAAK,gCAAgC,QAAQ;EACpE,MAAM,kBAAkB,KAAK,uBAAuB;EACpD,MAAM,iBAAiB,KAAK,sBAAsB;AAElD,SAAO;GACL;GACA,QAAQ;GACR,SAAS,CAAC,KAAK,sBAAsB,CAAC;GACtC,WAAW;IAAC;IAAgB;IAAiB;IAAe;GAC5D,SAAS;IAAC;IAAgB;IAAiB;IAAe;GAC3D;;CAGH,OAAO,kBACL,SACe;EACf,MAAM,iBAAiB,KAAK,yBAAyB,QAAQ;EAC7D,MAAM,iBAAiB,KAAK,yBAAyB,QAAQ;EAC7D,MAAM,kBAAkB,KAAK,uBAAuB;AAEpD,SAAO;GACL;GACA,QAAQ;GACR,SAAS,CACP,KAAK,sBAAsB,CAC5B;GACD,WAAW;IACT;IACA;IACA;IACA;IACD;GACD,SAAS;IAAC;IAAgB;IAAgB;IAAgB;GAC3D;;;oFAxIG,EAAE,CAAC"}
|
package/dist/index.d.cts
CHANGED
|
@@ -80,5 +80,69 @@ declare class TypeormOutboxService {
|
|
|
80
80
|
create(options: CreateOutboxOptions): Promise<TypeormOutboxEntity>;
|
|
81
81
|
}
|
|
82
82
|
//#endregion
|
|
83
|
-
|
|
83
|
+
//#region src/core/typeorm-outbox.enums.d.ts
|
|
84
|
+
declare enum CronExpression {
|
|
85
|
+
EVERY_1_SECOND = "* * * * * *",
|
|
86
|
+
EVERY_2_SECONDS = "*/2 * * * * *",
|
|
87
|
+
EVERY_3_SECONDS = "*/3 * * * * *",
|
|
88
|
+
EVERY_4_SECONDS = "*/4 * * * * *",
|
|
89
|
+
EVERY_5_SECONDS = "*/5 * * * * *",
|
|
90
|
+
EVERY_6_SECONDS = "*/6 * * * * *",
|
|
91
|
+
EVERY_7_SECONDS = "*/7 * * * * *",
|
|
92
|
+
EVERY_8_SECONDS = "*/8 * * * * *",
|
|
93
|
+
EVERY_9_SECONDS = "*/9 * * * * *",
|
|
94
|
+
EVERY_10_SECONDS = "*/10 * * * * *",
|
|
95
|
+
EVERY_11_SECONDS = "*/11 * * * * *",
|
|
96
|
+
EVERY_12_SECONDS = "*/12 * * * * *",
|
|
97
|
+
EVERY_13_SECONDS = "*/13 * * * * *",
|
|
98
|
+
EVERY_14_SECONDS = "*/14 * * * * *",
|
|
99
|
+
EVERY_15_SECONDS = "*/15 * * * * *",
|
|
100
|
+
EVERY_16_SECONDS = "*/16 * * * * *",
|
|
101
|
+
EVERY_17_SECONDS = "*/17 * * * * *",
|
|
102
|
+
EVERY_18_SECONDS = "*/18 * * * * *",
|
|
103
|
+
EVERY_19_SECONDS = "*/19 * * * * *",
|
|
104
|
+
EVERY_20_SECONDS = "*/20 * * * * *",
|
|
105
|
+
EVERY_21_SECONDS = "*/21 * * * * *",
|
|
106
|
+
EVERY_22_SECONDS = "*/22 * * * * *",
|
|
107
|
+
EVERY_23_SECONDS = "*/23 * * * * *",
|
|
108
|
+
EVERY_24_SECONDS = "*/24 * * * * *",
|
|
109
|
+
EVERY_25_SECONDS = "*/25 * * * * *",
|
|
110
|
+
EVERY_26_SECONDS = "*/26 * * * * *",
|
|
111
|
+
EVERY_27_SECONDS = "*/27 * * * * *",
|
|
112
|
+
EVERY_28_SECONDS = "*/28 * * * * *",
|
|
113
|
+
EVERY_29_SECONDS = "*/29 * * * * *",
|
|
114
|
+
EVERY_30_SECONDS = "*/30 * * * * *",
|
|
115
|
+
EVERY_31_SECONDS = "*/31 * * * * *",
|
|
116
|
+
EVERY_32_SECONDS = "*/32 * * * * *",
|
|
117
|
+
EVERY_33_SECONDS = "*/33 * * * * *",
|
|
118
|
+
EVERY_34_SECONDS = "*/34 * * * * *",
|
|
119
|
+
EVERY_35_SECONDS = "*/35 * * * * *",
|
|
120
|
+
EVERY_36_SECONDS = "*/36 * * * * *",
|
|
121
|
+
EVERY_37_SECONDS = "*/37 * * * * *",
|
|
122
|
+
EVERY_38_SECONDS = "*/38 * * * * *",
|
|
123
|
+
EVERY_39_SECONDS = "*/39 * * * * *",
|
|
124
|
+
EVERY_40_SECONDS = "*/40 * * * * *",
|
|
125
|
+
EVERY_41_SECONDS = "*/41 * * * * *",
|
|
126
|
+
EVERY_42_SECONDS = "*/42 * * * * *",
|
|
127
|
+
EVERY_43_SECONDS = "*/43 * * * * *",
|
|
128
|
+
EVERY_44_SECONDS = "*/44 * * * * *",
|
|
129
|
+
EVERY_45_SECONDS = "*/45 * * * * *",
|
|
130
|
+
EVERY_46_SECONDS = "*/46 * * * * *",
|
|
131
|
+
EVERY_47_SECONDS = "*/47 * * * * *",
|
|
132
|
+
EVERY_48_SECONDS = "*/48 * * * * *",
|
|
133
|
+
EVERY_49_SECONDS = "*/49 * * * * *",
|
|
134
|
+
EVERY_50_SECONDS = "*/50 * * * * *",
|
|
135
|
+
EVERY_51_SECONDS = "*/51 * * * * *",
|
|
136
|
+
EVERY_52_SECONDS = "*/52 * * * * *",
|
|
137
|
+
EVERY_53_SECONDS = "*/53 * * * * *",
|
|
138
|
+
EVERY_54_SECONDS = "*/54 * * * * *",
|
|
139
|
+
EVERY_55_SECONDS = "*/55 * * * * *",
|
|
140
|
+
EVERY_56_SECONDS = "*/56 * * * * *",
|
|
141
|
+
EVERY_57_SECONDS = "*/57 * * * * *",
|
|
142
|
+
EVERY_58_SECONDS = "*/58 * * * * *",
|
|
143
|
+
EVERY_59_SECONDS = "*/59 * * * * *",
|
|
144
|
+
EVERY_MINUTE = "0 * * * * *"
|
|
145
|
+
}
|
|
146
|
+
//#endregion
|
|
147
|
+
export { CreateOutboxOptions, CronExpression, InjectTypeormOutboxBroker, InjectTypeormOutboxCronConfig, InjectTypeormOutboxModuleConfig, InjectTypeormOutboxService, TYPEORM_OUTBOX_BROKER_TOKEN, TYPEORM_OUTBOX_CRON_CONFIG_TOKEN, TYPEORM_OUTBOX_MODULE_CONFIG_TOKEN, TYPEORM_OUTBOX_SERVICE_TOKEN, TypeormOutboxCronService, TypeormOutboxEntity, TypeormOutboxModule, TypeormOutboxModuleAsyncOptions, TypeormOutboxModuleOptions, TypeormOutboxRegisterCronAsyncOptions, TypeormOutboxRegisterCronModuleOptions, TypeormOutboxService };
|
|
84
148
|
//# sourceMappingURL=index.d.cts.map
|
package/dist/index.d.mts
CHANGED
|
@@ -80,5 +80,69 @@ declare class TypeormOutboxService {
|
|
|
80
80
|
create(options: CreateOutboxOptions): Promise<TypeormOutboxEntity>;
|
|
81
81
|
}
|
|
82
82
|
//#endregion
|
|
83
|
-
|
|
83
|
+
//#region src/core/typeorm-outbox.enums.d.ts
|
|
84
|
+
declare enum CronExpression {
|
|
85
|
+
EVERY_1_SECOND = "* * * * * *",
|
|
86
|
+
EVERY_2_SECONDS = "*/2 * * * * *",
|
|
87
|
+
EVERY_3_SECONDS = "*/3 * * * * *",
|
|
88
|
+
EVERY_4_SECONDS = "*/4 * * * * *",
|
|
89
|
+
EVERY_5_SECONDS = "*/5 * * * * *",
|
|
90
|
+
EVERY_6_SECONDS = "*/6 * * * * *",
|
|
91
|
+
EVERY_7_SECONDS = "*/7 * * * * *",
|
|
92
|
+
EVERY_8_SECONDS = "*/8 * * * * *",
|
|
93
|
+
EVERY_9_SECONDS = "*/9 * * * * *",
|
|
94
|
+
EVERY_10_SECONDS = "*/10 * * * * *",
|
|
95
|
+
EVERY_11_SECONDS = "*/11 * * * * *",
|
|
96
|
+
EVERY_12_SECONDS = "*/12 * * * * *",
|
|
97
|
+
EVERY_13_SECONDS = "*/13 * * * * *",
|
|
98
|
+
EVERY_14_SECONDS = "*/14 * * * * *",
|
|
99
|
+
EVERY_15_SECONDS = "*/15 * * * * *",
|
|
100
|
+
EVERY_16_SECONDS = "*/16 * * * * *",
|
|
101
|
+
EVERY_17_SECONDS = "*/17 * * * * *",
|
|
102
|
+
EVERY_18_SECONDS = "*/18 * * * * *",
|
|
103
|
+
EVERY_19_SECONDS = "*/19 * * * * *",
|
|
104
|
+
EVERY_20_SECONDS = "*/20 * * * * *",
|
|
105
|
+
EVERY_21_SECONDS = "*/21 * * * * *",
|
|
106
|
+
EVERY_22_SECONDS = "*/22 * * * * *",
|
|
107
|
+
EVERY_23_SECONDS = "*/23 * * * * *",
|
|
108
|
+
EVERY_24_SECONDS = "*/24 * * * * *",
|
|
109
|
+
EVERY_25_SECONDS = "*/25 * * * * *",
|
|
110
|
+
EVERY_26_SECONDS = "*/26 * * * * *",
|
|
111
|
+
EVERY_27_SECONDS = "*/27 * * * * *",
|
|
112
|
+
EVERY_28_SECONDS = "*/28 * * * * *",
|
|
113
|
+
EVERY_29_SECONDS = "*/29 * * * * *",
|
|
114
|
+
EVERY_30_SECONDS = "*/30 * * * * *",
|
|
115
|
+
EVERY_31_SECONDS = "*/31 * * * * *",
|
|
116
|
+
EVERY_32_SECONDS = "*/32 * * * * *",
|
|
117
|
+
EVERY_33_SECONDS = "*/33 * * * * *",
|
|
118
|
+
EVERY_34_SECONDS = "*/34 * * * * *",
|
|
119
|
+
EVERY_35_SECONDS = "*/35 * * * * *",
|
|
120
|
+
EVERY_36_SECONDS = "*/36 * * * * *",
|
|
121
|
+
EVERY_37_SECONDS = "*/37 * * * * *",
|
|
122
|
+
EVERY_38_SECONDS = "*/38 * * * * *",
|
|
123
|
+
EVERY_39_SECONDS = "*/39 * * * * *",
|
|
124
|
+
EVERY_40_SECONDS = "*/40 * * * * *",
|
|
125
|
+
EVERY_41_SECONDS = "*/41 * * * * *",
|
|
126
|
+
EVERY_42_SECONDS = "*/42 * * * * *",
|
|
127
|
+
EVERY_43_SECONDS = "*/43 * * * * *",
|
|
128
|
+
EVERY_44_SECONDS = "*/44 * * * * *",
|
|
129
|
+
EVERY_45_SECONDS = "*/45 * * * * *",
|
|
130
|
+
EVERY_46_SECONDS = "*/46 * * * * *",
|
|
131
|
+
EVERY_47_SECONDS = "*/47 * * * * *",
|
|
132
|
+
EVERY_48_SECONDS = "*/48 * * * * *",
|
|
133
|
+
EVERY_49_SECONDS = "*/49 * * * * *",
|
|
134
|
+
EVERY_50_SECONDS = "*/50 * * * * *",
|
|
135
|
+
EVERY_51_SECONDS = "*/51 * * * * *",
|
|
136
|
+
EVERY_52_SECONDS = "*/52 * * * * *",
|
|
137
|
+
EVERY_53_SECONDS = "*/53 * * * * *",
|
|
138
|
+
EVERY_54_SECONDS = "*/54 * * * * *",
|
|
139
|
+
EVERY_55_SECONDS = "*/55 * * * * *",
|
|
140
|
+
EVERY_56_SECONDS = "*/56 * * * * *",
|
|
141
|
+
EVERY_57_SECONDS = "*/57 * * * * *",
|
|
142
|
+
EVERY_58_SECONDS = "*/58 * * * * *",
|
|
143
|
+
EVERY_59_SECONDS = "*/59 * * * * *",
|
|
144
|
+
EVERY_MINUTE = "0 * * * * *"
|
|
145
|
+
}
|
|
146
|
+
//#endregion
|
|
147
|
+
export { CreateOutboxOptions, CronExpression, InjectTypeormOutboxBroker, InjectTypeormOutboxCronConfig, InjectTypeormOutboxModuleConfig, InjectTypeormOutboxService, TYPEORM_OUTBOX_BROKER_TOKEN, TYPEORM_OUTBOX_CRON_CONFIG_TOKEN, TYPEORM_OUTBOX_MODULE_CONFIG_TOKEN, TYPEORM_OUTBOX_SERVICE_TOKEN, TypeormOutboxCronService, TypeormOutboxEntity, TypeormOutboxModule, TypeormOutboxModuleAsyncOptions, TypeormOutboxModuleOptions, TypeormOutboxRegisterCronAsyncOptions, TypeormOutboxRegisterCronModuleOptions, TypeormOutboxService };
|
|
84
148
|
//# sourceMappingURL=index.d.mts.map
|
package/dist/index.mjs
CHANGED
|
@@ -4,7 +4,6 @@ import { Column, CreateDateColumn, DataSource, Entity, PrimaryGeneratedColumn, R
|
|
|
4
4
|
import { firstValueFrom } from "rxjs";
|
|
5
5
|
import { ClientProxy, ClientProxyFactory } from "@nestjs/microservices";
|
|
6
6
|
import { CronJob } from "cron";
|
|
7
|
-
import { CronExpression, ScheduleModule } from "@nestjs/schedule";
|
|
8
7
|
import { InjectRepository, TypeOrmModule } from "@nestjs/typeorm";
|
|
9
8
|
|
|
10
9
|
//#region src/core/typeorm-outbox.di-tokens.ts
|
|
@@ -18,13 +17,13 @@ const InjectTypeormOutboxService = () => Inject(TYPEORM_OUTBOX_SERVICE_TOKEN);
|
|
|
18
17
|
const InjectTypeormOutboxBroker = () => Inject(TYPEORM_OUTBOX_BROKER_TOKEN);
|
|
19
18
|
|
|
20
19
|
//#endregion
|
|
21
|
-
//#region \0@oxc-project+runtime@0.
|
|
20
|
+
//#region \0@oxc-project+runtime@0.110.0/helpers/decorateMetadata.js
|
|
22
21
|
function __decorateMetadata(k, v) {
|
|
23
22
|
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
24
23
|
}
|
|
25
24
|
|
|
26
25
|
//#endregion
|
|
27
|
-
//#region \0@oxc-project+runtime@0.
|
|
26
|
+
//#region \0@oxc-project+runtime@0.110.0/helpers/decorate.js
|
|
28
27
|
function __decorate(decorators, target, key, desc) {
|
|
29
28
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
30
29
|
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
@@ -53,6 +52,72 @@ __decorate([Column("jsonb", { nullable: true }), __decorateMetadata("design:type
|
|
|
53
52
|
__decorate([Column("jsonb"), __decorateMetadata("design:type", typeof (_ref5 = typeof Record !== "undefined" && Record) === "function" ? _ref5 : Object)], TypeormOutboxEntity.prototype, "payload", void 0);
|
|
54
53
|
TypeormOutboxEntity = __decorate([Entity("outbox")], TypeormOutboxEntity);
|
|
55
54
|
|
|
55
|
+
//#endregion
|
|
56
|
+
//#region src/core/typeorm-outbox.enums.ts
|
|
57
|
+
let CronExpression = /* @__PURE__ */ function(CronExpression) {
|
|
58
|
+
CronExpression["EVERY_1_SECOND"] = "* * * * * *";
|
|
59
|
+
CronExpression["EVERY_2_SECONDS"] = "*/2 * * * * *";
|
|
60
|
+
CronExpression["EVERY_3_SECONDS"] = "*/3 * * * * *";
|
|
61
|
+
CronExpression["EVERY_4_SECONDS"] = "*/4 * * * * *";
|
|
62
|
+
CronExpression["EVERY_5_SECONDS"] = "*/5 * * * * *";
|
|
63
|
+
CronExpression["EVERY_6_SECONDS"] = "*/6 * * * * *";
|
|
64
|
+
CronExpression["EVERY_7_SECONDS"] = "*/7 * * * * *";
|
|
65
|
+
CronExpression["EVERY_8_SECONDS"] = "*/8 * * * * *";
|
|
66
|
+
CronExpression["EVERY_9_SECONDS"] = "*/9 * * * * *";
|
|
67
|
+
CronExpression["EVERY_10_SECONDS"] = "*/10 * * * * *";
|
|
68
|
+
CronExpression["EVERY_11_SECONDS"] = "*/11 * * * * *";
|
|
69
|
+
CronExpression["EVERY_12_SECONDS"] = "*/12 * * * * *";
|
|
70
|
+
CronExpression["EVERY_13_SECONDS"] = "*/13 * * * * *";
|
|
71
|
+
CronExpression["EVERY_14_SECONDS"] = "*/14 * * * * *";
|
|
72
|
+
CronExpression["EVERY_15_SECONDS"] = "*/15 * * * * *";
|
|
73
|
+
CronExpression["EVERY_16_SECONDS"] = "*/16 * * * * *";
|
|
74
|
+
CronExpression["EVERY_17_SECONDS"] = "*/17 * * * * *";
|
|
75
|
+
CronExpression["EVERY_18_SECONDS"] = "*/18 * * * * *";
|
|
76
|
+
CronExpression["EVERY_19_SECONDS"] = "*/19 * * * * *";
|
|
77
|
+
CronExpression["EVERY_20_SECONDS"] = "*/20 * * * * *";
|
|
78
|
+
CronExpression["EVERY_21_SECONDS"] = "*/21 * * * * *";
|
|
79
|
+
CronExpression["EVERY_22_SECONDS"] = "*/22 * * * * *";
|
|
80
|
+
CronExpression["EVERY_23_SECONDS"] = "*/23 * * * * *";
|
|
81
|
+
CronExpression["EVERY_24_SECONDS"] = "*/24 * * * * *";
|
|
82
|
+
CronExpression["EVERY_25_SECONDS"] = "*/25 * * * * *";
|
|
83
|
+
CronExpression["EVERY_26_SECONDS"] = "*/26 * * * * *";
|
|
84
|
+
CronExpression["EVERY_27_SECONDS"] = "*/27 * * * * *";
|
|
85
|
+
CronExpression["EVERY_28_SECONDS"] = "*/28 * * * * *";
|
|
86
|
+
CronExpression["EVERY_29_SECONDS"] = "*/29 * * * * *";
|
|
87
|
+
CronExpression["EVERY_30_SECONDS"] = "*/30 * * * * *";
|
|
88
|
+
CronExpression["EVERY_31_SECONDS"] = "*/31 * * * * *";
|
|
89
|
+
CronExpression["EVERY_32_SECONDS"] = "*/32 * * * * *";
|
|
90
|
+
CronExpression["EVERY_33_SECONDS"] = "*/33 * * * * *";
|
|
91
|
+
CronExpression["EVERY_34_SECONDS"] = "*/34 * * * * *";
|
|
92
|
+
CronExpression["EVERY_35_SECONDS"] = "*/35 * * * * *";
|
|
93
|
+
CronExpression["EVERY_36_SECONDS"] = "*/36 * * * * *";
|
|
94
|
+
CronExpression["EVERY_37_SECONDS"] = "*/37 * * * * *";
|
|
95
|
+
CronExpression["EVERY_38_SECONDS"] = "*/38 * * * * *";
|
|
96
|
+
CronExpression["EVERY_39_SECONDS"] = "*/39 * * * * *";
|
|
97
|
+
CronExpression["EVERY_40_SECONDS"] = "*/40 * * * * *";
|
|
98
|
+
CronExpression["EVERY_41_SECONDS"] = "*/41 * * * * *";
|
|
99
|
+
CronExpression["EVERY_42_SECONDS"] = "*/42 * * * * *";
|
|
100
|
+
CronExpression["EVERY_43_SECONDS"] = "*/43 * * * * *";
|
|
101
|
+
CronExpression["EVERY_44_SECONDS"] = "*/44 * * * * *";
|
|
102
|
+
CronExpression["EVERY_45_SECONDS"] = "*/45 * * * * *";
|
|
103
|
+
CronExpression["EVERY_46_SECONDS"] = "*/46 * * * * *";
|
|
104
|
+
CronExpression["EVERY_47_SECONDS"] = "*/47 * * * * *";
|
|
105
|
+
CronExpression["EVERY_48_SECONDS"] = "*/48 * * * * *";
|
|
106
|
+
CronExpression["EVERY_49_SECONDS"] = "*/49 * * * * *";
|
|
107
|
+
CronExpression["EVERY_50_SECONDS"] = "*/50 * * * * *";
|
|
108
|
+
CronExpression["EVERY_51_SECONDS"] = "*/51 * * * * *";
|
|
109
|
+
CronExpression["EVERY_52_SECONDS"] = "*/52 * * * * *";
|
|
110
|
+
CronExpression["EVERY_53_SECONDS"] = "*/53 * * * * *";
|
|
111
|
+
CronExpression["EVERY_54_SECONDS"] = "*/54 * * * * *";
|
|
112
|
+
CronExpression["EVERY_55_SECONDS"] = "*/55 * * * * *";
|
|
113
|
+
CronExpression["EVERY_56_SECONDS"] = "*/56 * * * * *";
|
|
114
|
+
CronExpression["EVERY_57_SECONDS"] = "*/57 * * * * *";
|
|
115
|
+
CronExpression["EVERY_58_SECONDS"] = "*/58 * * * * *";
|
|
116
|
+
CronExpression["EVERY_59_SECONDS"] = "*/59 * * * * *";
|
|
117
|
+
CronExpression["EVERY_MINUTE"] = "0 * * * * *";
|
|
118
|
+
return CronExpression;
|
|
119
|
+
}({});
|
|
120
|
+
|
|
56
121
|
//#endregion
|
|
57
122
|
//#region src/core/typeorm-outbox.interfaces.ts
|
|
58
123
|
var TypeormOutboxRegisterCronModuleOptions = class {
|
|
@@ -65,7 +130,7 @@ var TypeormOutboxModuleOptions = class {
|
|
|
65
130
|
};
|
|
66
131
|
|
|
67
132
|
//#endregion
|
|
68
|
-
//#region \0@oxc-project+runtime@0.
|
|
133
|
+
//#region \0@oxc-project+runtime@0.110.0/helpers/decorateParam.js
|
|
69
134
|
function __decorateParam(paramIndex, decorator) {
|
|
70
135
|
return function(target, key) {
|
|
71
136
|
decorator(target, key, paramIndex);
|
|
@@ -263,7 +328,7 @@ let TypeormOutboxModule = _TypeormOutboxModule = class TypeormOutboxModule {
|
|
|
263
328
|
return {
|
|
264
329
|
module: _TypeormOutboxModule,
|
|
265
330
|
global: true,
|
|
266
|
-
imports: [
|
|
331
|
+
imports: [this.createTypeOrmFeature()],
|
|
267
332
|
providers: [
|
|
268
333
|
TypeormOutboxCronService,
|
|
269
334
|
configProvider,
|
|
@@ -281,5 +346,5 @@ let TypeormOutboxModule = _TypeormOutboxModule = class TypeormOutboxModule {
|
|
|
281
346
|
TypeormOutboxModule = _TypeormOutboxModule = __decorate([Module({})], TypeormOutboxModule);
|
|
282
347
|
|
|
283
348
|
//#endregion
|
|
284
|
-
export { InjectTypeormOutboxBroker, InjectTypeormOutboxCronConfig, InjectTypeormOutboxModuleConfig, InjectTypeormOutboxService, TYPEORM_OUTBOX_BROKER_TOKEN, TYPEORM_OUTBOX_CRON_CONFIG_TOKEN, TYPEORM_OUTBOX_MODULE_CONFIG_TOKEN, TYPEORM_OUTBOX_SERVICE_TOKEN, TypeormOutboxCronService, TypeormOutboxEntity, TypeormOutboxModule, TypeormOutboxModuleOptions, TypeormOutboxRegisterCronModuleOptions, TypeormOutboxService };
|
|
349
|
+
export { CronExpression, InjectTypeormOutboxBroker, InjectTypeormOutboxCronConfig, InjectTypeormOutboxModuleConfig, InjectTypeormOutboxService, TYPEORM_OUTBOX_BROKER_TOKEN, TYPEORM_OUTBOX_CRON_CONFIG_TOKEN, TYPEORM_OUTBOX_MODULE_CONFIG_TOKEN, TYPEORM_OUTBOX_SERVICE_TOKEN, TypeormOutboxCronService, TypeormOutboxEntity, TypeormOutboxModule, TypeormOutboxModuleOptions, TypeormOutboxRegisterCronModuleOptions, TypeormOutboxService };
|
|
285
350
|
//# sourceMappingURL=index.mjs.map
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","names":[],"sources":["../src/core/typeorm-outbox.di-tokens.ts","../src/core/typeorm-outbox.entity.ts","../src/core/typeorm-outbox.interfaces.ts","../src/core/typeorm-outbox-cron.service.ts","../src/core/typeorm-outbox.service.ts","../src/core/typeorm-outbox.module.ts"],"sourcesContent":["import { Inject } from \"@nestjs/common\";\n\nexport const TYPEORM_OUTBOX_CRON_CONFIG_TOKEN = Symbol(\n \"TYPEORM_OUTBOX_CRON_CONFIG_TOKEN\",\n);\nexport const TYPEORM_OUTBOX_MODULE_CONFIG_TOKEN = Symbol(\n \"TYPEORM_OUTBOX_MODULE_CONFIG_TOKEN\",\n);\nexport const TYPEORM_OUTBOX_SERVICE_TOKEN = Symbol(\n \"TYPEORM_OUTBOX_SERVICE_TOKEN\",\n);\nexport const TYPEORM_OUTBOX_BROKER_TOKEN = Symbol(\n \"TYPEORM_OUTBOX_BROKER_TOKEN\",\n);\n\nexport const InjectTypeormOutboxCronConfig = () =>\n Inject(TYPEORM_OUTBOX_CRON_CONFIG_TOKEN);\nexport const InjectTypeormOutboxModuleConfig = () =>\n Inject(TYPEORM_OUTBOX_MODULE_CONFIG_TOKEN);\nexport const InjectTypeormOutboxService = () =>\n Inject(TYPEORM_OUTBOX_SERVICE_TOKEN);\nexport const InjectTypeormOutboxBroker = () =>\n Inject(TYPEORM_OUTBOX_BROKER_TOKEN);\n","import {\n Column,\n CreateDateColumn,\n Entity,\n PrimaryGeneratedColumn,\n UpdateDateColumn,\n} from \"typeorm\";\n\n@Entity('outbox')\nexport class TypeormOutboxEntity {\n @PrimaryGeneratedColumn()\n id!: number;\n\n @CreateDateColumn({ name: 'created_at' })\n createdAt!: Date;\n\n @UpdateDateColumn({ name: 'updated_at' })\n updatedAt!: Date;\n\n @Column(\"character varying\", { name: 'destination_topic' })\n destinationTopic!: string;\n\n @Column(\"jsonb\", { nullable: true })\n headers!: Record<string, string>;\n\n @Column(\"jsonb\", { nullable: true })\n keys!: Record<string, unknown>;\n\n @Column(\"jsonb\")\n payload!: Record<string, any>;\n}\n","import { KafkaOptions } from \"@nestjs/microservices\";\nimport { InjectionToken, ModuleMetadata, Type } from \"@nestjs/common\";\nimport { CronExpression } from \"@nestjs/schedule\";\n\nexport class TypeormOutboxRegisterCronModuleOptions {\n typeOrmConnectionName?: string = \"default\";\n kafkaConfig?: KafkaOptions = {};\n cronExpression?: string = CronExpression.EVERY_10_SECONDS;\n}\n\nexport interface TypeormOutboxRegisterCronAsyncOptions\n extends Pick<ModuleMetadata, \"imports\"> {\n inject?: InjectionToken[];\n useExisting?: Type<TypeormOutboxRegisterCronModuleOptions>;\n useClass?: Type<TypeormOutboxRegisterCronModuleOptions>;\n useFactory?: (\n ...args: unknown[]\n ) =>\n | Promise<TypeormOutboxRegisterCronModuleOptions>\n | TypeormOutboxRegisterCronModuleOptions;\n}\n\nexport class TypeormOutboxModuleOptions {\n typeOrmConnectionName?: string = \"default\";\n}\n\nexport interface TypeormOutboxModuleAsyncOptions\n extends Pick<ModuleMetadata, \"imports\"> {\n inject?: InjectionToken[];\n useFactory?: (\n ...args: unknown[]\n ) => Promise<TypeormOutboxModuleOptions> | TypeormOutboxModuleOptions;\n}\n","import { Injectable, OnModuleInit } from \"@nestjs/common\";\nimport { InjectTypeormOutboxBroker, InjectTypeormOutboxCronConfig, InjectTypeormOutboxModuleConfig } from \"./typeorm-outbox.di-tokens\";\nimport { hashStringToInt } from \"@globalart/text-utils\";\nimport { TypeormOutboxEntity } from \"./typeorm-outbox.entity\";\nimport { firstValueFrom } from \"rxjs\";\nimport { ClientProxy } from \"@nestjs/microservices\";\nimport { CronJob } from \"cron\";\nimport { TypeormOutboxRegisterCronModuleOptions } from \"./typeorm-outbox.interfaces\";\nimport { CronExpression } from \"@nestjs/schedule\";\nimport { DataSource } from \"typeorm\";\n\n@Injectable()\nexport class TypeormOutboxCronService implements OnModuleInit {\n constructor(\n @InjectTypeormOutboxBroker()\n private readonly brokerClient: ClientProxy,\n @InjectTypeormOutboxCronConfig()\n private readonly moduleConfig: TypeormOutboxRegisterCronModuleOptions,\n private readonly dataSource: DataSource,\n ) { }\n\n onModuleInit() {\n const cronJob = new CronJob(this.moduleConfig.cronExpression ?? CronExpression.EVERY_10_SECONDS, () => {\n this.executeCronJob();\n });\n cronJob.start();\n }\n\n async executeCronJob() {\n const queryRunner = this.dataSource.createQueryRunner();\n await queryRunner.connect();\n const lockKey = hashStringToInt('typeorm-outbox-cron-lock');\n\n try {\n const lockResult = await queryRunner.query(\n 'SELECT pg_try_advisory_lock($1) as locked',\n [lockKey],\n );\n\n if (!lockResult[0].locked) {\n return;\n }\n try {\n await queryRunner.startTransaction('REPEATABLE READ');\n \n const entities = await queryRunner.manager.find(TypeormOutboxEntity);\n \n for (const entity of entities) {\n await firstValueFrom(\n this.brokerClient.emit(entity.destinationTopic, {\n key: entity.keys,\n value: entity.payload,\n headers: entity.headers,\n }),\n );\n await queryRunner.manager.delete(TypeormOutboxEntity, entity.id);\n }\n\n await queryRunner.commitTransaction();\n } catch (error) {\n await queryRunner.rollbackTransaction();\n throw error;\n } finally {\n await queryRunner.query('SELECT pg_advisory_unlock($1)', [lockKey]);\n }\n } finally {\n await queryRunner.release();\n }\n }\n}\n","import { Injectable } from \"@nestjs/common\";\nimport { InjectRepository } from \"@nestjs/typeorm\";\nimport { TypeormOutboxEntity } from \"./typeorm-outbox.entity\";\nimport { Repository } from \"typeorm\";\n\nexport interface CreateOutboxOptions {\n destinationTopic: string;\n payload: Record<string, unknown>;\n headers?: Record<string, string>;\n keys?: Record<string, unknown>;\n}\n\n@Injectable()\nexport class TypeormOutboxService {\n constructor(\n @InjectRepository(TypeormOutboxEntity)\n private readonly outboxRepository: Repository<TypeormOutboxEntity>,\n ) {}\n\n async create(options: CreateOutboxOptions): Promise<TypeormOutboxEntity> {\n return this.outboxRepository.save({\n destinationTopic: options.destinationTopic,\n headers: options.headers,\n keys: options.keys,\n payload: options.payload,\n });\n }\n}\n","import { TypeOrmModule } from \"@nestjs/typeorm\";\nimport { DynamicModule, Module, Provider } from \"@nestjs/common\";\nimport {\n TypeormOutboxRegisterCronAsyncOptions,\n TypeormOutboxRegisterCronModuleOptions,\n TypeormOutboxModuleOptions,\n TypeormOutboxModuleAsyncOptions,\n} from \"./typeorm-outbox.interfaces\";\nimport {\n TYPEORM_OUTBOX_BROKER_TOKEN,\n TYPEORM_OUTBOX_CRON_CONFIG_TOKEN,\n TYPEORM_OUTBOX_MODULE_CONFIG_TOKEN,\n TYPEORM_OUTBOX_SERVICE_TOKEN,\n} from \"./typeorm-outbox.di-tokens\";\nimport { TypeormOutboxEntity } from \"./typeorm-outbox.entity\";\nimport { TypeormOutboxService } from \"./typeorm-outbox.service\";\nimport { ScheduleModule } from \"@nestjs/schedule\";\nimport { ClientProxyFactory } from \"@nestjs/microservices\";\nimport { TypeormOutboxCronService } from \"./typeorm-outbox-cron.service\";\n\n@Module({})\nexport class TypeormOutboxModule {\n private static createServiceProvider(): Provider {\n return {\n provide: TYPEORM_OUTBOX_SERVICE_TOKEN,\n useClass: TypeormOutboxService,\n };\n }\n\n private static createBrokerProvider(useValue: unknown = null): Provider {\n return {\n provide: TYPEORM_OUTBOX_BROKER_TOKEN,\n useValue,\n };\n }\n\n private static createTypeOrmFeature(connectionName?: string) {\n return TypeOrmModule.forFeature(\n [TypeormOutboxEntity],\n connectionName || \"default\",\n );\n }\n\n private static createModuleConfigProvider(\n options: TypeormOutboxModuleOptions,\n ): Provider {\n return {\n provide: TYPEORM_OUTBOX_MODULE_CONFIG_TOKEN,\n useValue: {\n ...new TypeormOutboxModuleOptions(),\n ...options,\n },\n };\n }\n\n private static createAsyncModuleConfigProvider(\n options: TypeormOutboxModuleAsyncOptions,\n ): Provider {\n return {\n provide: TYPEORM_OUTBOX_MODULE_CONFIG_TOKEN,\n useFactory: async (...args: unknown[]) => {\n const moduleOptions = (await options.useFactory?.(...args)) as\n | TypeormOutboxModuleOptions;\n \n return {\n ...new TypeormOutboxModuleOptions(),\n ...moduleOptions,\n };\n },\n inject: options.inject || [],\n };\n }\n\n private static createCronConfigProvider(\n options: TypeormOutboxRegisterCronAsyncOptions,\n ): Provider {\n return {\n provide: TYPEORM_OUTBOX_CRON_CONFIG_TOKEN,\n useFactory: async (...args: unknown[]) => {\n const moduleOptions = await options.useFactory?.(...args);\n return {\n ...new TypeormOutboxRegisterCronModuleOptions(),\n ...moduleOptions,\n };\n },\n inject: options.inject || [],\n };\n }\n\n private static createCronBrokerProvider(\n options: TypeormOutboxRegisterCronAsyncOptions,\n ): Provider {\n return {\n provide: TYPEORM_OUTBOX_BROKER_TOKEN,\n useFactory: async (...args: unknown[]) => {\n const moduleOptions = await options.useFactory?.(...args);\n const config = {\n ...new TypeormOutboxRegisterCronModuleOptions(),\n ...moduleOptions,\n };\n return ClientProxyFactory.create(config?.kafkaConfig ?? {});\n },\n inject: options.inject || [],\n };\n }\n\n static forRoot(options: TypeormOutboxModuleOptions = {}): DynamicModule {\n const configProvider = this.createModuleConfigProvider(options);\n const serviceProvider = this.createServiceProvider();\n const brokerProvider = this.createBrokerProvider();\n\n return {\n module: TypeormOutboxModule,\n global: true,\n imports: [this.createTypeOrmFeature(options.typeOrmConnectionName)],\n providers: [configProvider, serviceProvider, brokerProvider],\n exports: [configProvider, serviceProvider, brokerProvider],\n };\n }\n\n static forRootAsync(\n options: TypeormOutboxModuleAsyncOptions,\n ): DynamicModule {\n const configProvider = this.createAsyncModuleConfigProvider(options);\n const serviceProvider = this.createServiceProvider();\n const brokerProvider = this.createBrokerProvider();\n\n return {\n module: TypeormOutboxModule,\n global: true,\n imports: [this.createTypeOrmFeature()],\n providers: [configProvider, serviceProvider, brokerProvider],\n exports: [configProvider, serviceProvider, brokerProvider],\n };\n }\n\n static registerCronAsync(\n options: TypeormOutboxRegisterCronAsyncOptions,\n ): DynamicModule {\n const configProvider = this.createCronConfigProvider(options);\n const brokerProvider = this.createCronBrokerProvider(options);\n const serviceProvider = this.createServiceProvider();\n\n return {\n module: TypeormOutboxModule,\n global: true,\n imports: [\n ScheduleModule.forRoot(),\n this.createTypeOrmFeature(),\n ],\n providers: [\n TypeormOutboxCronService,\n configProvider,\n brokerProvider,\n serviceProvider,\n ],\n exports: [configProvider, brokerProvider, serviceProvider],\n };\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.mjs","names":[],"sources":["../src/core/typeorm-outbox.di-tokens.ts","../src/core/typeorm-outbox.entity.ts","../src/core/typeorm-outbox.enums.ts","../src/core/typeorm-outbox.interfaces.ts","../src/core/typeorm-outbox-cron.service.ts","../src/core/typeorm-outbox.service.ts","../src/core/typeorm-outbox.module.ts"],"sourcesContent":["import { Inject } from \"@nestjs/common\";\n\nexport const TYPEORM_OUTBOX_CRON_CONFIG_TOKEN = Symbol(\n \"TYPEORM_OUTBOX_CRON_CONFIG_TOKEN\",\n);\nexport const TYPEORM_OUTBOX_MODULE_CONFIG_TOKEN = Symbol(\n \"TYPEORM_OUTBOX_MODULE_CONFIG_TOKEN\",\n);\nexport const TYPEORM_OUTBOX_SERVICE_TOKEN = Symbol(\n \"TYPEORM_OUTBOX_SERVICE_TOKEN\",\n);\nexport const TYPEORM_OUTBOX_BROKER_TOKEN = Symbol(\n \"TYPEORM_OUTBOX_BROKER_TOKEN\",\n);\n\nexport const InjectTypeormOutboxCronConfig = () =>\n Inject(TYPEORM_OUTBOX_CRON_CONFIG_TOKEN);\nexport const InjectTypeormOutboxModuleConfig = () =>\n Inject(TYPEORM_OUTBOX_MODULE_CONFIG_TOKEN);\nexport const InjectTypeormOutboxService = () =>\n Inject(TYPEORM_OUTBOX_SERVICE_TOKEN);\nexport const InjectTypeormOutboxBroker = () =>\n Inject(TYPEORM_OUTBOX_BROKER_TOKEN);\n","import {\n Column,\n CreateDateColumn,\n Entity,\n PrimaryGeneratedColumn,\n UpdateDateColumn,\n} from \"typeorm\";\n\n@Entity('outbox')\nexport class TypeormOutboxEntity {\n @PrimaryGeneratedColumn()\n id!: number;\n\n @CreateDateColumn({ name: 'created_at' })\n createdAt!: Date;\n\n @UpdateDateColumn({ name: 'updated_at' })\n updatedAt!: Date;\n\n @Column(\"character varying\", { name: 'destination_topic' })\n destinationTopic!: string;\n\n @Column(\"jsonb\", { nullable: true })\n headers!: Record<string, string>;\n\n @Column(\"jsonb\", { nullable: true })\n keys!: Record<string, unknown>;\n\n @Column(\"jsonb\")\n payload!: Record<string, any>;\n}\n","export enum CronExpression {\n EVERY_1_SECOND = \"* * * * * *\",\n EVERY_2_SECONDS = \"*/2 * * * * *\",\n EVERY_3_SECONDS = \"*/3 * * * * *\",\n EVERY_4_SECONDS = \"*/4 * * * * *\",\n EVERY_5_SECONDS = \"*/5 * * * * *\",\n EVERY_6_SECONDS = \"*/6 * * * * *\",\n EVERY_7_SECONDS = \"*/7 * * * * *\",\n EVERY_8_SECONDS = \"*/8 * * * * *\",\n EVERY_9_SECONDS = \"*/9 * * * * *\",\n EVERY_10_SECONDS = \"*/10 * * * * *\",\n EVERY_11_SECONDS = \"*/11 * * * * *\",\n EVERY_12_SECONDS = \"*/12 * * * * *\",\n EVERY_13_SECONDS = \"*/13 * * * * *\",\n EVERY_14_SECONDS = \"*/14 * * * * *\",\n EVERY_15_SECONDS = \"*/15 * * * * *\",\n EVERY_16_SECONDS = \"*/16 * * * * *\",\n EVERY_17_SECONDS = \"*/17 * * * * *\",\n EVERY_18_SECONDS = \"*/18 * * * * *\",\n EVERY_19_SECONDS = \"*/19 * * * * *\",\n EVERY_20_SECONDS = \"*/20 * * * * *\",\n EVERY_21_SECONDS = \"*/21 * * * * *\",\n EVERY_22_SECONDS = \"*/22 * * * * *\",\n EVERY_23_SECONDS = \"*/23 * * * * *\",\n EVERY_24_SECONDS = \"*/24 * * * * *\",\n EVERY_25_SECONDS = \"*/25 * * * * *\",\n EVERY_26_SECONDS = \"*/26 * * * * *\",\n EVERY_27_SECONDS = \"*/27 * * * * *\",\n EVERY_28_SECONDS = \"*/28 * * * * *\",\n EVERY_29_SECONDS = \"*/29 * * * * *\",\n EVERY_30_SECONDS = \"*/30 * * * * *\",\n EVERY_31_SECONDS = \"*/31 * * * * *\",\n EVERY_32_SECONDS = \"*/32 * * * * *\",\n EVERY_33_SECONDS = \"*/33 * * * * *\",\n EVERY_34_SECONDS = \"*/34 * * * * *\",\n EVERY_35_SECONDS = \"*/35 * * * * *\",\n EVERY_36_SECONDS = \"*/36 * * * * *\",\n EVERY_37_SECONDS = \"*/37 * * * * *\",\n EVERY_38_SECONDS = \"*/38 * * * * *\",\n EVERY_39_SECONDS = \"*/39 * * * * *\",\n EVERY_40_SECONDS = \"*/40 * * * * *\",\n EVERY_41_SECONDS = \"*/41 * * * * *\",\n EVERY_42_SECONDS = \"*/42 * * * * *\",\n EVERY_43_SECONDS = \"*/43 * * * * *\",\n EVERY_44_SECONDS = \"*/44 * * * * *\",\n EVERY_45_SECONDS = \"*/45 * * * * *\",\n EVERY_46_SECONDS = \"*/46 * * * * *\",\n EVERY_47_SECONDS = \"*/47 * * * * *\",\n EVERY_48_SECONDS = \"*/48 * * * * *\",\n EVERY_49_SECONDS = \"*/49 * * * * *\",\n EVERY_50_SECONDS = \"*/50 * * * * *\",\n EVERY_51_SECONDS = \"*/51 * * * * *\",\n EVERY_52_SECONDS = \"*/52 * * * * *\",\n EVERY_53_SECONDS = \"*/53 * * * * *\",\n EVERY_54_SECONDS = \"*/54 * * * * *\",\n EVERY_55_SECONDS = \"*/55 * * * * *\",\n EVERY_56_SECONDS = \"*/56 * * * * *\",\n EVERY_57_SECONDS = \"*/57 * * * * *\",\n EVERY_58_SECONDS = \"*/58 * * * * *\",\n EVERY_59_SECONDS = \"*/59 * * * * *\",\n EVERY_MINUTE = \"0 * * * * *\",\n}","import { KafkaOptions } from \"@nestjs/microservices\";\nimport { InjectionToken, ModuleMetadata, Type } from \"@nestjs/common\";\nimport { CronExpression } from \"./typeorm-outbox.enums\";\n\nexport class TypeormOutboxRegisterCronModuleOptions {\n typeOrmConnectionName?: string = \"default\";\n kafkaConfig?: KafkaOptions = {};\n cronExpression?: string = CronExpression.EVERY_10_SECONDS;\n}\n\nexport interface TypeormOutboxRegisterCronAsyncOptions\n extends Pick<ModuleMetadata, \"imports\"> {\n inject?: InjectionToken[];\n useExisting?: Type<TypeormOutboxRegisterCronModuleOptions>;\n useClass?: Type<TypeormOutboxRegisterCronModuleOptions>;\n useFactory?: (\n ...args: unknown[]\n ) =>\n | Promise<TypeormOutboxRegisterCronModuleOptions>\n | TypeormOutboxRegisterCronModuleOptions;\n}\n\nexport class TypeormOutboxModuleOptions {\n typeOrmConnectionName?: string = \"default\";\n}\n\nexport interface TypeormOutboxModuleAsyncOptions\n extends Pick<ModuleMetadata, \"imports\"> {\n inject?: InjectionToken[];\n useFactory?: (\n ...args: unknown[]\n ) => Promise<TypeormOutboxModuleOptions> | TypeormOutboxModuleOptions;\n}\n","import { Injectable, OnModuleInit } from \"@nestjs/common\";\nimport { InjectTypeormOutboxBroker, InjectTypeormOutboxCronConfig, InjectTypeormOutboxModuleConfig } from \"./typeorm-outbox.di-tokens\";\nimport { hashStringToInt } from \"@globalart/text-utils\";\nimport { TypeormOutboxEntity } from \"./typeorm-outbox.entity\";\nimport { firstValueFrom } from \"rxjs\";\nimport { ClientProxy } from \"@nestjs/microservices\";\nimport { CronJob } from \"cron\";\nimport { TypeormOutboxRegisterCronModuleOptions } from \"./typeorm-outbox.interfaces\";\nimport { DataSource } from \"typeorm\";\nimport { CronExpression } from \"./typeorm-outbox.enums\";\n\n@Injectable()\nexport class TypeormOutboxCronService implements OnModuleInit {\n constructor(\n @InjectTypeormOutboxBroker()\n private readonly brokerClient: ClientProxy,\n @InjectTypeormOutboxCronConfig()\n private readonly moduleConfig: TypeormOutboxRegisterCronModuleOptions,\n private readonly dataSource: DataSource,\n ) { }\n\n onModuleInit() {\n const cronJob = new CronJob(this.moduleConfig.cronExpression ?? CronExpression.EVERY_10_SECONDS, () => {\n this.executeCronJob();\n });\n cronJob.start();\n }\n\n async executeCronJob() {\n const queryRunner = this.dataSource.createQueryRunner();\n await queryRunner.connect();\n const lockKey = hashStringToInt('typeorm-outbox-cron-lock');\n\n try {\n const lockResult = await queryRunner.query(\n 'SELECT pg_try_advisory_lock($1) as locked',\n [lockKey],\n );\n\n if (!lockResult[0].locked) {\n return;\n }\n try {\n await queryRunner.startTransaction('REPEATABLE READ');\n \n const entities = await queryRunner.manager.find(TypeormOutboxEntity);\n \n for (const entity of entities) {\n await firstValueFrom(\n this.brokerClient.emit(entity.destinationTopic, {\n key: entity.keys,\n value: entity.payload,\n headers: entity.headers,\n }),\n );\n await queryRunner.manager.delete(TypeormOutboxEntity, entity.id);\n }\n\n await queryRunner.commitTransaction();\n } catch (error) {\n await queryRunner.rollbackTransaction();\n throw error;\n } finally {\n await queryRunner.query('SELECT pg_advisory_unlock($1)', [lockKey]);\n }\n } finally {\n await queryRunner.release();\n }\n }\n}\n","import { Injectable } from \"@nestjs/common\";\nimport { InjectRepository } from \"@nestjs/typeorm\";\nimport { TypeormOutboxEntity } from \"./typeorm-outbox.entity\";\nimport { Repository } from \"typeorm\";\n\nexport interface CreateOutboxOptions {\n destinationTopic: string;\n payload: Record<string, unknown>;\n headers?: Record<string, string>;\n keys?: Record<string, unknown>;\n}\n\n@Injectable()\nexport class TypeormOutboxService {\n constructor(\n @InjectRepository(TypeormOutboxEntity)\n private readonly outboxRepository: Repository<TypeormOutboxEntity>,\n ) {}\n\n async create(options: CreateOutboxOptions): Promise<TypeormOutboxEntity> {\n return this.outboxRepository.save({\n destinationTopic: options.destinationTopic,\n headers: options.headers,\n keys: options.keys,\n payload: options.payload,\n });\n }\n}\n","import { TypeOrmModule } from \"@nestjs/typeorm\";\nimport { DynamicModule, Module, Provider } from \"@nestjs/common\";\nimport {\n TypeormOutboxRegisterCronAsyncOptions,\n TypeormOutboxRegisterCronModuleOptions,\n TypeormOutboxModuleOptions,\n TypeormOutboxModuleAsyncOptions,\n} from \"./typeorm-outbox.interfaces\";\nimport {\n TYPEORM_OUTBOX_BROKER_TOKEN,\n TYPEORM_OUTBOX_CRON_CONFIG_TOKEN,\n TYPEORM_OUTBOX_MODULE_CONFIG_TOKEN,\n TYPEORM_OUTBOX_SERVICE_TOKEN,\n} from \"./typeorm-outbox.di-tokens\";\nimport { TypeormOutboxEntity } from \"./typeorm-outbox.entity\";\nimport { TypeormOutboxService } from \"./typeorm-outbox.service\";\nimport { ClientProxyFactory } from \"@nestjs/microservices\";\nimport { TypeormOutboxCronService } from \"./typeorm-outbox-cron.service\";\n\n@Module({})\nexport class TypeormOutboxModule {\n private static createServiceProvider(): Provider {\n return {\n provide: TYPEORM_OUTBOX_SERVICE_TOKEN,\n useClass: TypeormOutboxService,\n };\n }\n\n private static createBrokerProvider(useValue: unknown = null): Provider {\n return {\n provide: TYPEORM_OUTBOX_BROKER_TOKEN,\n useValue,\n };\n }\n\n private static createTypeOrmFeature(connectionName?: string) {\n return TypeOrmModule.forFeature(\n [TypeormOutboxEntity],\n connectionName || \"default\",\n );\n }\n\n private static createModuleConfigProvider(\n options: TypeormOutboxModuleOptions,\n ): Provider {\n return {\n provide: TYPEORM_OUTBOX_MODULE_CONFIG_TOKEN,\n useValue: {\n ...new TypeormOutboxModuleOptions(),\n ...options,\n },\n };\n }\n\n private static createAsyncModuleConfigProvider(\n options: TypeormOutboxModuleAsyncOptions,\n ): Provider {\n return {\n provide: TYPEORM_OUTBOX_MODULE_CONFIG_TOKEN,\n useFactory: async (...args: unknown[]) => {\n const moduleOptions = (await options.useFactory?.(...args)) as\n | TypeormOutboxModuleOptions;\n \n return {\n ...new TypeormOutboxModuleOptions(),\n ...moduleOptions,\n };\n },\n inject: options.inject || [],\n };\n }\n\n private static createCronConfigProvider(\n options: TypeormOutboxRegisterCronAsyncOptions,\n ): Provider {\n return {\n provide: TYPEORM_OUTBOX_CRON_CONFIG_TOKEN,\n useFactory: async (...args: unknown[]) => {\n const moduleOptions = await options.useFactory?.(...args);\n return {\n ...new TypeormOutboxRegisterCronModuleOptions(),\n ...moduleOptions,\n };\n },\n inject: options.inject || [],\n };\n }\n\n private static createCronBrokerProvider(\n options: TypeormOutboxRegisterCronAsyncOptions,\n ): Provider {\n return {\n provide: TYPEORM_OUTBOX_BROKER_TOKEN,\n useFactory: async (...args: unknown[]) => {\n const moduleOptions = await options.useFactory?.(...args);\n const config = {\n ...new TypeormOutboxRegisterCronModuleOptions(),\n ...moduleOptions,\n };\n return ClientProxyFactory.create(config?.kafkaConfig ?? {});\n },\n inject: options.inject || [],\n };\n }\n\n static forRoot(options: TypeormOutboxModuleOptions = {}): DynamicModule {\n const configProvider = this.createModuleConfigProvider(options);\n const serviceProvider = this.createServiceProvider();\n const brokerProvider = this.createBrokerProvider();\n\n return {\n module: TypeormOutboxModule,\n global: true,\n imports: [this.createTypeOrmFeature(options.typeOrmConnectionName)],\n providers: [configProvider, serviceProvider, brokerProvider],\n exports: [configProvider, serviceProvider, brokerProvider],\n };\n }\n\n static forRootAsync(\n options: TypeormOutboxModuleAsyncOptions,\n ): DynamicModule {\n const configProvider = this.createAsyncModuleConfigProvider(options);\n const serviceProvider = this.createServiceProvider();\n const brokerProvider = this.createBrokerProvider();\n\n return {\n module: TypeormOutboxModule,\n global: true,\n imports: [this.createTypeOrmFeature()],\n providers: [configProvider, serviceProvider, brokerProvider],\n exports: [configProvider, serviceProvider, brokerProvider],\n };\n }\n\n static registerCronAsync(\n options: TypeormOutboxRegisterCronAsyncOptions,\n ): DynamicModule {\n const configProvider = this.createCronConfigProvider(options);\n const brokerProvider = this.createCronBrokerProvider(options);\n const serviceProvider = this.createServiceProvider();\n\n return {\n module: TypeormOutboxModule,\n global: true,\n imports: [\n this.createTypeOrmFeature(),\n ],\n providers: [\n TypeormOutboxCronService,\n configProvider,\n brokerProvider,\n serviceProvider,\n ],\n exports: [configProvider, brokerProvider, serviceProvider],\n };\n }\n}\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@globalart/nestjs-typeorm-outbox",
|
|
3
3
|
"description": "TypeORM Outbox integration for NestJS",
|
|
4
|
-
"version": "1.0.
|
|
4
|
+
"version": "1.0.7",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.mjs",
|
|
7
7
|
"module": "dist/index.mjs",
|
|
@@ -47,7 +47,6 @@
|
|
|
47
47
|
"dependencies": {
|
|
48
48
|
"@nestjs/common": "11.1.12",
|
|
49
49
|
"cron": "^4.4.0",
|
|
50
|
-
"@nestjs/schedule": "^6.1.0",
|
|
51
50
|
"@nestjs/core": "11.1.12",
|
|
52
51
|
"@nestjs/microservices": "^11.1.12",
|
|
53
52
|
"@nestjs/typeorm": "^11.0.0",
|
|
@@ -61,7 +60,7 @@
|
|
|
61
60
|
"@types/node": "25.0.10",
|
|
62
61
|
"reflect-metadata": "^0.2.2",
|
|
63
62
|
"release-it": "19.2.4",
|
|
64
|
-
"tsdown": "0.20.
|
|
63
|
+
"tsdown": "0.20.1",
|
|
65
64
|
"typescript": "^5.9.3",
|
|
66
65
|
"prettier": "^3.8.1"
|
|
67
66
|
}
|