@mondart/nestjs-common-module-bottleneck 3.2.9 → 3.2.11

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.
@@ -1 +1 @@
1
- {"version":3,"file":"queued-command-bus.d.ts","sourceRoot":"","sources":["../../src/cqrs-wrapper/queued-command-bus.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AASnE,qBACa,gBAAgB;IAEzB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,iBAAiB;gBADjB,UAAU,EAAE,UAAU,EACtB,iBAAiB,EAAE,iBAAiB;IAIjD,OAAO,CAAC,QAAQ,EAAE,OAAO,GAAG,GAAG,EAAE,OAAO,EAAE,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC;CAS5E"}
1
+ {"version":3,"file":"queued-command-bus.d.ts","sourceRoot":"","sources":["../../src/cqrs-wrapper/queued-command-bus.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAUnE,qBACa,gBAAgB;IAEzB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,iBAAiB;gBADjB,UAAU,EAAE,UAAU,EACtB,iBAAiB,EAAE,iBAAiB;IAIjD,OAAO,CAAC,QAAQ,EAAE,OAAO,GAAG,GAAG,EAAE,OAAO,EAAE,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC;CAQ5E"}
@@ -13,13 +13,14 @@ exports.QueuedCommandBus = void 0;
13
13
  const common_1 = require("@nestjs/common");
14
14
  const cqrs_1 = require("@nestjs/cqrs");
15
15
  const bottleneck_service_1 = require("../services/bottleneck.service");
16
+ const generate_queue_key_helper_1 = require("../helpers/generate-queue-key.helper");
16
17
  let QueuedCommandBus = class QueuedCommandBus {
17
18
  constructor(commandBus, bottleneckService) {
18
19
  this.commandBus = commandBus;
19
20
  this.bottleneckService = bottleneckService;
20
21
  }
21
22
  async execute(command) {
22
- const key = `${command.constructor.name}:${JSON.stringify(command)}`;
23
+ const key = (0, generate_queue_key_helper_1.generateQueueKey)(command);
23
24
  return this.bottleneckService.runQueuedTask(key, async () => this.commandBus.execute(command));
24
25
  }
25
26
  };
@@ -1 +1 @@
1
- {"version":3,"file":"queued-command-bus.js","sourceRoot":"","sources":["../../src/cqrs-wrapper/queued-command-bus.ts"],"names":[],"mappings":";;;;;;;;;;;;AACA,2CAA4C;AAC5C,uCAA0C;AAC1C,uEAAmE;AAU5D,IAAM,gBAAgB,GAAtB,MAAM,gBAAgB;IAC3B,YACmB,UAAsB,EACtB,iBAAoC;QADpC,eAAU,GAAV,UAAU,CAAY;QACtB,sBAAiB,GAAjB,iBAAiB,CAAmB;IACpD,CAAC;IAGJ,KAAK,CAAC,OAAO,CAA0B,OAAiB;QAEtD,MAAM,GAAG,GAAG,GAAG,OAAO,CAAC,WAAW,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;QAGrE,OAAO,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,GAAG,EAAE,KAAK,IAAI,EAAE,CAC1D,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,CACjC,CAAC;IACJ,CAAC;CACF,CAAA;AAhBY,4CAAgB;2BAAhB,gBAAgB;IAD5B,IAAA,mBAAU,GAAE;qCAGoB,iBAAU;QACH,sCAAiB;GAH5C,gBAAgB,CAgB5B"}
1
+ {"version":3,"file":"queued-command-bus.js","sourceRoot":"","sources":["../../src/cqrs-wrapper/queued-command-bus.ts"],"names":[],"mappings":";;;;;;;;;;;;AACA,2CAA4C;AAC5C,uCAA0C;AAC1C,uEAAmE;AACnE,oFAAwE;AAUjE,IAAM,gBAAgB,GAAtB,MAAM,gBAAgB;IAC3B,YACmB,UAAsB,EACtB,iBAAoC;QADpC,eAAU,GAAV,UAAU,CAAY;QACtB,sBAAiB,GAAjB,iBAAiB,CAAmB;IACpD,CAAC;IAGJ,KAAK,CAAC,OAAO,CAA0B,OAAiB;QACtD,MAAM,GAAG,GAAG,IAAA,4CAAgB,EAAC,OAAiB,CAAC,CAAC;QAGhD,OAAO,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,GAAG,EAAE,KAAK,IAAI,EAAE,CAC1D,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,CACjC,CAAC;IACJ,CAAC;CACF,CAAA;AAfY,4CAAgB;2BAAhB,gBAAgB;IAD5B,IAAA,mBAAU,GAAE;qCAGoB,iBAAU;QACH,sCAAiB;GAH5C,gBAAgB,CAe5B"}
@@ -1 +1 @@
1
- {"version":3,"file":"queued-query-bus.d.ts","sourceRoot":"","sources":["../../src/cqrs-wrapper/queued-query-bus.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AASnE,qBACa,cAAc;IAEvB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,iBAAiB;gBADjB,QAAQ,EAAE,QAAQ,EAClB,iBAAiB,EAAE,iBAAiB;IAIjD,OAAO,CAAC,QAAQ,EAAE,OAAO,GAAG,GAAG,EAAE,OAAO,EAAE,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC;CAS5E"}
1
+ {"version":3,"file":"queued-query-bus.d.ts","sourceRoot":"","sources":["../../src/cqrs-wrapper/queued-query-bus.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAUnE,qBACa,cAAc;IAEvB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,iBAAiB;gBADjB,QAAQ,EAAE,QAAQ,EAClB,iBAAiB,EAAE,iBAAiB;IAIjD,OAAO,CAAC,QAAQ,EAAE,OAAO,GAAG,GAAG,EAAE,OAAO,EAAE,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC;CAQ5E"}
@@ -13,13 +13,14 @@ exports.QueuedQueryBus = void 0;
13
13
  const common_1 = require("@nestjs/common");
14
14
  const cqrs_1 = require("@nestjs/cqrs");
15
15
  const bottleneck_service_1 = require("../services/bottleneck.service");
16
+ const generate_queue_key_helper_1 = require("../helpers/generate-queue-key.helper");
16
17
  let QueuedQueryBus = class QueuedQueryBus {
17
18
  constructor(queryBus, bottleneckService) {
18
19
  this.queryBus = queryBus;
19
20
  this.bottleneckService = bottleneckService;
20
21
  }
21
22
  async execute(command) {
22
- const key = `${command.constructor.name}:${JSON.stringify(command)}`;
23
+ const key = (0, generate_queue_key_helper_1.generateQueueKey)(command);
23
24
  return this.bottleneckService.runQueuedTask(key, async () => this.queryBus.execute(command));
24
25
  }
25
26
  };
@@ -1 +1 @@
1
- {"version":3,"file":"queued-query-bus.js","sourceRoot":"","sources":["../../src/cqrs-wrapper/queued-query-bus.ts"],"names":[],"mappings":";;;;;;;;;;;;AACA,2CAA4C;AAC5C,uCAAwC;AACxC,uEAAmE;AAU5D,IAAM,cAAc,GAApB,MAAM,cAAc;IACzB,YACmB,QAAkB,EAClB,iBAAoC;QADpC,aAAQ,GAAR,QAAQ,CAAU;QAClB,sBAAiB,GAAjB,iBAAiB,CAAmB;IACpD,CAAC;IAGJ,KAAK,CAAC,OAAO,CAA0B,OAAiB;QAEtD,MAAM,GAAG,GAAG,GAAG,OAAO,CAAC,WAAW,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;QAGrE,OAAO,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,GAAG,EAAE,KAAK,IAAI,EAAE,CAC1D,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAC/B,CAAC;IACJ,CAAC;CACF,CAAA;AAhBY,wCAAc;yBAAd,cAAc;IAD1B,IAAA,mBAAU,GAAE;qCAGkB,eAAQ;QACC,sCAAiB;GAH5C,cAAc,CAgB1B"}
1
+ {"version":3,"file":"queued-query-bus.js","sourceRoot":"","sources":["../../src/cqrs-wrapper/queued-query-bus.ts"],"names":[],"mappings":";;;;;;;;;;;;AACA,2CAA4C;AAC5C,uCAAwC;AACxC,uEAAmE;AACnE,oFAAwE;AAUjE,IAAM,cAAc,GAApB,MAAM,cAAc;IACzB,YACmB,QAAkB,EAClB,iBAAoC;QADpC,aAAQ,GAAR,QAAQ,CAAU;QAClB,sBAAiB,GAAjB,iBAAiB,CAAmB;IACpD,CAAC;IAGJ,KAAK,CAAC,OAAO,CAA0B,OAAiB;QACtD,MAAM,GAAG,GAAG,IAAA,4CAAgB,EAAC,OAAiB,CAAC,CAAC;QAGhD,OAAO,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,GAAG,EAAE,KAAK,IAAI,EAAE,CAC1D,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAC/B,CAAC;IACJ,CAAC;CACF,CAAA;AAfY,wCAAc;yBAAd,cAAc;IAD1B,IAAA,mBAAU,GAAE;qCAGkB,eAAQ;QACC,sCAAiB;GAH5C,cAAc,CAe1B"}
@@ -0,0 +1,2 @@
1
+ export declare function generateQueueKey(message: object): string;
2
+ //# sourceMappingURL=generate-queue-key.helper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-queue-key.helper.d.ts","sourceRoot":"","sources":["../../src/helpers/generate-queue-key.helper.ts"],"names":[],"mappings":"AAGA,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAOxD"}
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.generateQueueKey = generateQueueKey;
4
+ const node_crypto_1 = require("node:crypto");
5
+ function generateQueueKey(message) {
6
+ const type = message.constructor?.name || 'AnonymousMessage';
7
+ const digest = (0, node_crypto_1.createHash)('sha256')
8
+ .update(JSON.stringify(message))
9
+ .digest('hex');
10
+ return `${type}:${digest}`;
11
+ }
12
+ //# sourceMappingURL=generate-queue-key.helper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-queue-key.helper.js","sourceRoot":"","sources":["../../src/helpers/generate-queue-key.helper.ts"],"names":[],"mappings":";;AAGA,4CAOC;AAVD,6CAAyC;AAGzC,SAAgB,gBAAgB,CAAC,OAAe;IAC9C,MAAM,IAAI,GAAG,OAAO,CAAC,WAAW,EAAE,IAAI,IAAI,kBAAkB,CAAC;IAC7D,MAAM,MAAM,GAAG,IAAA,wBAAU,EAAC,QAAQ,CAAC;SAChC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;SAC/B,MAAM,CAAC,KAAK,CAAC,CAAC;IAEjB,OAAO,GAAG,IAAI,IAAI,MAAM,EAAE,CAAC;AAC7B,CAAC"}
@@ -8,6 +8,7 @@ export interface BottleneckModuleOptions {
8
8
  value: string;
9
9
  } | null;
10
10
  useGlobal?: boolean;
11
+ clearDatastore?: boolean;
11
12
  maxConcurrent?: number | null;
12
13
  minTime?: number | null;
13
14
  highWater?: number | null;
@@ -1 +1 @@
1
- {"version":3,"file":"bottleneck-options.interface.d.ts","sourceRoot":"","sources":["../../src/interfaces/bottleneck-options.interface.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAEtD,eAAO,MAAM,yBAAyB,8BAA8B,CAAC;AAOrE,MAAM,WAAW,uBAAuB;IAEtC,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAOlB,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAEjE,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,wBAAwB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzC,sBAAsB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvC,uBAAuB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxC,yBAAyB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1C,wBAAwB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzC,YAAY,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IAC9B,eAAe,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IAEjC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE;QACN,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,GAAG,CAAC,EAAE,OAAO,CAAC;KACf,CAAC;CACH;AAED,MAAM,WAAW,uBAAuB;IACtC,mBAAmB,EAAE,MACjB,OAAO,CAAC,uBAAuB,CAAC,GAChC,uBAAuB,CAAC;CAC7B;AAED,MAAM,WAAW,4BAA6B,SAAQ,IAAI,CACxD,cAAc,EACd,SAAS,CACV;IACC,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC;IACf,QAAQ,CAAC,EAAE,IAAI,CAAC,uBAAuB,CAAC,CAAC;IACzC,WAAW,CAAC,EAAE,IAAI,CAAC,uBAAuB,CAAC,CAAC;IAC5C,UAAU,CAAC,EAAE,CACX,GAAG,IAAI,EAAE,GAAG,EAAE,KACX,OAAO,CAAC,uBAAuB,CAAC,GAAG,uBAAuB,CAAC;CACjE"}
1
+ {"version":3,"file":"bottleneck-options.interface.d.ts","sourceRoot":"","sources":["../../src/interfaces/bottleneck-options.interface.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAEtD,eAAO,MAAM,yBAAyB,8BAA8B,CAAC;AAOrE,MAAM,WAAW,uBAAuB;IAEtC,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAOlB,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAEjE,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,wBAAwB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzC,sBAAsB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvC,uBAAuB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxC,yBAAyB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1C,wBAAwB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzC,YAAY,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IAC9B,eAAe,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IAEjC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE;QACN,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,GAAG,CAAC,EAAE,OAAO,CAAC;KACf,CAAC;CACH;AAED,MAAM,WAAW,uBAAuB;IACtC,mBAAmB,EAAE,MACnB,OAAO,CAAC,uBAAuB,CAAC,GAAG,uBAAuB,CAAC;CAC9D;AAED,MAAM,WAAW,4BAA6B,SAAQ,IAAI,CACxD,cAAc,EACd,SAAS,CACV;IACC,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC;IACf,QAAQ,CAAC,EAAE,IAAI,CAAC,uBAAuB,CAAC,CAAC;IACzC,WAAW,CAAC,EAAE,IAAI,CAAC,uBAAuB,CAAC,CAAC;IAC5C,UAAU,CAAC,EAAE,CACX,GAAG,IAAI,EAAE,GAAG,EAAE,KACX,OAAO,CAAC,uBAAuB,CAAC,GAAG,uBAAuB,CAAC;CACjE"}
@@ -8,6 +8,8 @@ export declare class BottleneckService implements OnModuleDestroy {
8
8
  private readonly cache;
9
9
  constructor(options: BottleneckModuleOptions);
10
10
  private getLimiter;
11
+ private isMissingSettingsKeyError;
12
+ private scheduleWithSettingsRecovery;
11
13
  scheduleForKey<T>(key: string, task: () => Promise<T>, opts?: Bottleneck.ConstructorOptions): Promise<T>;
12
14
  runQueuedTask<T>(key: string, fn: () => Promise<T>): Promise<T>;
13
15
  onModuleDestroy(): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"bottleneck.service.d.ts","sourceRoot":"","sources":["../../src/services/bottleneck.service.ts"],"names":[],"mappings":"AACA,OAAO,EAA8B,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAC7E,OAAO,UAAU,MAAM,YAAY,CAAC;AACpC,OAAO,EAEL,uBAAuB,EACxB,MAAM,4CAA4C,CAAC;AAWpD,qBACa,iBAAkB,YAAW,eAAe;IASrD,OAAO,CAAC,QAAQ,CAAC,OAAO;IAR1B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAEpB;IACH,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAmB;IACzC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAmC;gBAItC,OAAO,EAAE,uBAAuB;IAsCnD,OAAO,CAAC,UAAU;IAYlB,cAAc,CAAC,CAAC,EACd,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACtB,IAAI,CAAC,EAAE,UAAU,CAAC,kBAAkB,GACnC,OAAO,CAAC,CAAC,CAAC;IAYP,aAAa,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAqB/D,eAAe;CAGtB"}
1
+ {"version":3,"file":"bottleneck.service.d.ts","sourceRoot":"","sources":["../../src/services/bottleneck.service.ts"],"names":[],"mappings":"AACA,OAAO,EAA8B,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAC7E,OAAO,UAAU,MAAM,YAAY,CAAC;AACpC,OAAO,EAEL,uBAAuB,EACxB,MAAM,4CAA4C,CAAC;AAWpD,qBACa,iBAAkB,YAAW,eAAe;IASrD,OAAO,CAAC,QAAQ,CAAC,OAAO;IAR1B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAEpB;IACH,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAmB;IACzC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAmC;gBAItC,OAAO,EAAE,uBAAuB;YAwCrC,UAAU;IAsBxB,OAAO,CAAC,yBAAyB;YAOnB,4BAA4B;IAwBpC,cAAc,CAAC,CAAC,EACpB,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACtB,IAAI,CAAC,EAAE,UAAU,CAAC,kBAAkB,GACnC,OAAO,CAAC,CAAC,CAAC;IAWP,aAAa,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAmB/D,eAAe;CAGtB"}
@@ -28,7 +28,7 @@ let BottleneckService = BottleneckService_1 = class BottleneckService {
28
28
  timestamp: true,
29
29
  });
30
30
  this.cache = new Map();
31
- const { useRedis, redis, appName, ...rest } = this.options;
31
+ const { useRedis, redis, appName, clearDatastore = false, ...rest } = this.options;
32
32
  const redisOptions = useRedis && redis
33
33
  ? {
34
34
  datastore: 'ioredis',
@@ -48,40 +48,53 @@ let BottleneckService = BottleneckService_1 = class BottleneckService {
48
48
  id: `bottleneck-${appName ?? 'app'}`,
49
49
  maxConcurrent: 1,
50
50
  minTime: 0,
51
- clearDatastore: true,
51
+ clearDatastore,
52
52
  ...redisOptions,
53
53
  ...rest,
54
54
  });
55
- this.group.on('idle', (key) => {
56
- setTimeout(() => this.group.deleteKey(key).catch(() => { }), 30_000);
57
- });
58
55
  }
59
- getLimiter(key, opts) {
56
+ async getLimiter(key, opts) {
60
57
  const limiter = this.group.key(key);
61
- if (opts)
62
- limiter.updateSettings(opts);
58
+ if (opts) {
59
+ const updateResult = limiter.updateSettings(opts);
60
+ await updateResult;
61
+ }
63
62
  return limiter;
64
63
  }
65
- scheduleForKey(key, task, opts) {
66
- const limiter = this.getLimiter(key, opts);
64
+ isMissingSettingsKeyError(error) {
65
+ return (error instanceof Error &&
66
+ /(?:^|\s)SETTINGS_KEY_NOT_FOUND$/.test(error.message));
67
+ }
68
+ async scheduleWithSettingsRecovery(key, task, opts) {
69
+ try {
70
+ const limiter = await this.getLimiter(key, opts);
71
+ return await limiter.schedule(task);
72
+ }
73
+ catch (error) {
74
+ if (!this.isMissingSettingsKeyError(error))
75
+ throw error;
76
+ this.logger.warn(`Recreating limiter for key ${key} after its Redis settings key disappeared`);
77
+ await this.group.deleteKey(key);
78
+ const limiter = await this.getLimiter(key, opts);
79
+ return limiter.schedule(task);
80
+ }
81
+ }
82
+ async scheduleForKey(key, task, opts) {
67
83
  this.logger.debug(`Scheduling task for key ${key}`);
68
- return limiter.schedule(task);
84
+ return this.scheduleWithSettingsRecovery(key, task, opts);
69
85
  }
70
86
  async runQueuedTask(key, fn) {
71
87
  if (this.cache.has(key)) {
72
88
  this.logger.debug(`Cache hit for key ${key}`);
73
89
  return this.cache.get(key);
74
90
  }
75
- const limiter = this.getLimiter(key);
76
- const taskPromise = limiter.schedule(async () => {
77
- try {
78
- return await fn();
79
- }
80
- finally {
81
- this.cache.delete(key);
82
- }
83
- });
91
+ const taskPromise = this.scheduleWithSettingsRecovery(key, fn);
84
92
  this.cache.set(key, taskPromise);
93
+ const clearCachedTask = () => {
94
+ if (this.cache.get(key) === taskPromise)
95
+ this.cache.delete(key);
96
+ };
97
+ void taskPromise.then(clearCachedTask).catch(clearCachedTask);
85
98
  return taskPromise;
86
99
  }
87
100
  async onModuleDestroy() {
@@ -1 +1 @@
1
- {"version":3,"file":"bottleneck.service.js","sourceRoot":"","sources":["../../src/services/bottleneck.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bottleneck.service.js","sourceRoot":"","sources":["../../src/services/bottleneck.service.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mondart/nestjs-common-module-bottleneck",
3
- "version": "3.2.9",
3
+ "version": "3.2.11",
4
4
  "description": "Bottleneck throttling and queue utilities for NestJS.",
5
5
  "author": {
6
6
  "name": "Mondart"
@@ -17,7 +17,7 @@
17
17
  "build": "tsc -p tsconfig.json"
18
18
  },
19
19
  "dependencies": {
20
- "@mondart/nestjs-common-module-core": "3.2.8",
20
+ "@mondart/nestjs-common-module-core": "3.2.9",
21
21
  "@nestjs/cqrs": "^11.0.1",
22
22
  "bottleneck": "^2.19.5",
23
23
  "ioredis": "^5.11.1"