@devbro/pashmak 0.1.21 → 0.1.22

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.
@@ -463,7 +463,7 @@ var Router = class {
463
463
 
464
464
  // src/facades.mts
465
465
  var import_neko_scheduler = require("@devbro/neko-scheduler");
466
- var import_neko_helper = require("@devbro/neko-helper");
466
+ var import_neko_helper2 = require("@devbro/neko-helper");
467
467
  var import_neko_context2 = require("@devbro/neko-context");
468
468
  var import_neko_storage2 = require("@devbro/neko-storage");
469
469
  var import_neko_mailer2 = require("@devbro/neko-mailer");
@@ -489,12 +489,7 @@ __export(queue_exports, {
489
489
  DatabaseTransport: () => DatabaseTransport
490
490
  });
491
491
  __reExport(queue_exports, require("@devbro/neko-queue"));
492
-
493
- // src/helper.mts
494
- var helper_exports = {};
495
- __reExport(helper_exports, require("@devbro/neko-helper"));
496
-
497
- // src/queue.mts
492
+ var import_neko_helper = require("@devbro/neko-helper");
498
493
  var DatabaseTransport = class {
499
494
  static {
500
495
  __name(this, "DatabaseTransport");
@@ -545,7 +540,7 @@ var DatabaseTransport = class {
545
540
  }, "processMessage");
546
541
  constructor(config2 = {}) {
547
542
  this.config = { ...this.config, ...config2 };
548
- this.repeater = (0, helper_exports.createRepeater)(
543
+ this.repeater = (0, import_neko_helper.createRepeater)(
549
544
  this.processMessage,
550
545
  this.config.listen_interval * 1e3
551
546
  );
@@ -663,8 +658,8 @@ import_neko_storage.StorageProviderFactory.register("s3", (opt) => {
663
658
  // src/facades.mts
664
659
  var import_neko_cache2 = require("@devbro/neko-cache");
665
660
  var import_neko_queue3 = require("@devbro/neko-queue");
666
- var router = (0, import_neko_helper.createSingleton)(() => new Router());
667
- var scheduler = (0, import_neko_helper.createSingleton)(() => {
661
+ var router = (0, import_neko_helper2.createSingleton)(() => new Router());
662
+ var scheduler = (0, import_neko_helper2.createSingleton)(() => {
668
663
  const rc = new import_neko_scheduler.Scheduler();
669
664
  rc.setErrorHandler((err, job) => {
670
665
  logger().error({
@@ -676,7 +671,7 @@ var scheduler = (0, import_neko_helper.createSingleton)(() => {
676
671
  return rc;
677
672
  });
678
673
  var db = /* @__PURE__ */ __name((label = "default") => (0, import_neko_context2.ctx)().getOrThrow(["database", label]), "db");
679
- var storage = (0, import_neko_helper.createSingleton)((label = "default") => {
674
+ var storage = (0, import_neko_helper2.createSingleton)((label = "default") => {
680
675
  let storage_config = import_neko_config.config.get(["storages", label].join("."));
681
676
  const provider = import_neko_storage2.StorageProviderFactory.create(
682
677
  storage_config.provider,
@@ -684,7 +679,7 @@ var storage = (0, import_neko_helper.createSingleton)((label = "default") => {
684
679
  );
685
680
  return new import_neko_storage2.Storage(provider);
686
681
  });
687
- var cli = (0, import_neko_helper.createSingleton)(() => {
682
+ var cli = (0, import_neko_helper2.createSingleton)(() => {
688
683
  const [node, app, ...args] = process.argv;
689
684
  return new import_clipanion.Cli({
690
685
  binaryLabel: `My Application`,
@@ -692,7 +687,7 @@ var cli = (0, import_neko_helper.createSingleton)(() => {
692
687
  binaryVersion: `1.0.0`
693
688
  });
694
689
  });
695
- var httpServer = (0, import_neko_helper.createSingleton)(() => {
690
+ var httpServer = (0, import_neko_helper2.createSingleton)(() => {
696
691
  const server = new http_exports.HttpServer();
697
692
  server.setErrorHandler(async (err, req, res) => {
698
693
  if (err instanceof http_exports.HttpError) {
@@ -727,7 +722,7 @@ var httpServer = (0, import_neko_helper.createSingleton)(() => {
727
722
  server.setRouter(router());
728
723
  return server;
729
724
  });
730
- var logger = (0, import_neko_helper.createSingleton)((label) => {
725
+ var logger = (0, import_neko_helper2.createSingleton)((label) => {
731
726
  const logger_config = import_neko_config.config.get(["loggers", label].join("."));
732
727
  const rc = new import_neko_logger.Logger(logger_config);
733
728
  rc.setExtrasFunction((message) => {
@@ -736,7 +731,7 @@ var logger = (0, import_neko_helper.createSingleton)((label) => {
736
731
  });
737
732
  return rc;
738
733
  });
739
- var mailer = (0, import_neko_helper.createSingleton)((label) => {
734
+ var mailer = (0, import_neko_helper2.createSingleton)((label) => {
740
735
  const mailer_config = import_neko_config.config.get(["mailer", label].join("."));
741
736
  const provider = import_neko_mailer2.MailerProviderFactory.create(
742
737
  mailer_config.provider,
@@ -745,7 +740,7 @@ var mailer = (0, import_neko_helper.createSingleton)((label) => {
745
740
  const rc = new import_neko_mailer2.Mailer(provider);
746
741
  return rc;
747
742
  });
748
- var queue = (0, import_neko_helper.createSingleton)((label) => {
743
+ var queue = (0, import_neko_helper2.createSingleton)((label) => {
749
744
  const queue_config = import_neko_config.config.get(["queues", label].join("."));
750
745
  if (!queue_config) {
751
746
  throw new Error(`Queue configuration for '${label}' not found`);
@@ -757,7 +752,7 @@ var queue = (0, import_neko_helper.createSingleton)((label) => {
757
752
  const rc = new import_neko_queue3.QueueConnection(provider);
758
753
  return rc;
759
754
  });
760
- var cache = (0, import_neko_helper.createSingleton)((label) => {
755
+ var cache = (0, import_neko_helper2.createSingleton)((label) => {
761
756
  const cache_config = import_neko_config.config.get(["caches", label].join("."));
762
757
  if (!cache_config) {
763
758
  throw new Error(`Cache configuration for '${label}' not found`);
@@ -588,12 +588,7 @@ __export(queue_exports, {
588
588
  DatabaseTransport: () => DatabaseTransport
589
589
  });
590
590
  __reExport(queue_exports, require("@devbro/neko-queue"));
591
-
592
- // src/helper.mts
593
- var helper_exports = {};
594
- __reExport(helper_exports, require("@devbro/neko-helper"));
595
-
596
- // src/queue.mts
591
+ var import_neko_helper2 = require("@devbro/neko-helper");
597
592
  var DatabaseTransport = class {
598
593
  static {
599
594
  __name(this, "DatabaseTransport");
@@ -644,7 +639,7 @@ var DatabaseTransport = class {
644
639
  }, "processMessage");
645
640
  constructor(config2 = {}) {
646
641
  this.config = { ...this.config, ...config2 };
647
- this.repeater = (0, helper_exports.createRepeater)(
642
+ this.repeater = (0, import_neko_helper2.createRepeater)(
648
643
  this.processMessage,
649
644
  this.config.listen_interval * 1e3
650
645
  );
@@ -561,27 +561,18 @@ var init_http = __esm({
561
561
  }
562
562
  });
563
563
 
564
- // src/helper.mts
565
- var helper_exports = {};
566
- var init_helper = __esm({
567
- "src/helper.mts"() {
568
- "use strict";
569
- __reExport(helper_exports, require("@devbro/neko-helper"));
570
- }
571
- });
572
-
573
564
  // src/queue.mts
574
565
  var queue_exports = {};
575
566
  __export(queue_exports, {
576
567
  DatabaseTransport: () => DatabaseTransport
577
568
  });
578
- var DatabaseTransport;
569
+ var import_neko_helper, DatabaseTransport;
579
570
  var init_queue = __esm({
580
571
  "src/queue.mts"() {
581
572
  "use strict";
582
573
  __reExport(queue_exports, require("@devbro/neko-queue"));
583
574
  init_facades();
584
- init_helper();
575
+ import_neko_helper = require("@devbro/neko-helper");
585
576
  DatabaseTransport = class {
586
577
  static {
587
578
  __name(this, "DatabaseTransport");
@@ -632,7 +623,7 @@ var init_queue = __esm({
632
623
  }, "processMessage");
633
624
  constructor(config10 = {}) {
634
625
  this.config = { ...this.config, ...config10 };
635
- this.repeater = (0, helper_exports.createRepeater)(
626
+ this.repeater = (0, import_neko_helper.createRepeater)(
636
627
  this.processMessage,
637
628
  this.config.listen_interval * 1e3
638
629
  );
@@ -761,13 +752,13 @@ var init_factories = __esm({
761
752
  });
762
753
 
763
754
  // src/facades.mts
764
- var import_neko_scheduler, import_neko_helper, import_neko_context2, import_neko_storage2, import_neko_mailer2, import_neko_config, import_clipanion, yup, import_neko_logger, import_neko_cache2, import_neko_queue3, router, scheduler, db, storage, cli, httpServer, logger, mailer, queue, cache;
755
+ var import_neko_scheduler, import_neko_helper2, import_neko_context2, import_neko_storage2, import_neko_mailer2, import_neko_config, import_clipanion, yup, import_neko_logger, import_neko_cache2, import_neko_queue3, router, scheduler, db, storage, cli, httpServer, logger, mailer, queue, cache;
765
756
  var init_facades = __esm({
766
757
  "src/facades.mts"() {
767
758
  "use strict";
768
759
  init_router();
769
760
  import_neko_scheduler = require("@devbro/neko-scheduler");
770
- import_neko_helper = require("@devbro/neko-helper");
761
+ import_neko_helper2 = require("@devbro/neko-helper");
771
762
  import_neko_context2 = require("@devbro/neko-context");
772
763
  import_neko_storage2 = require("@devbro/neko-storage");
773
764
  import_neko_mailer2 = require("@devbro/neko-mailer");
@@ -780,8 +771,8 @@ var init_facades = __esm({
780
771
  init_factories();
781
772
  import_neko_cache2 = require("@devbro/neko-cache");
782
773
  import_neko_queue3 = require("@devbro/neko-queue");
783
- router = (0, import_neko_helper.createSingleton)(() => new Router());
784
- scheduler = (0, import_neko_helper.createSingleton)(() => {
774
+ router = (0, import_neko_helper2.createSingleton)(() => new Router());
775
+ scheduler = (0, import_neko_helper2.createSingleton)(() => {
785
776
  const rc = new import_neko_scheduler.Scheduler();
786
777
  rc.setErrorHandler((err, job) => {
787
778
  logger().error({
@@ -793,7 +784,7 @@ var init_facades = __esm({
793
784
  return rc;
794
785
  });
795
786
  db = /* @__PURE__ */ __name((label = "default") => (0, import_neko_context2.ctx)().getOrThrow(["database", label]), "db");
796
- storage = (0, import_neko_helper.createSingleton)((label = "default") => {
787
+ storage = (0, import_neko_helper2.createSingleton)((label = "default") => {
797
788
  let storage_config = import_neko_config.config.get(["storages", label].join("."));
798
789
  const provider = import_neko_storage2.StorageProviderFactory.create(
799
790
  storage_config.provider,
@@ -801,7 +792,7 @@ var init_facades = __esm({
801
792
  );
802
793
  return new import_neko_storage2.Storage(provider);
803
794
  });
804
- cli = (0, import_neko_helper.createSingleton)(() => {
795
+ cli = (0, import_neko_helper2.createSingleton)(() => {
805
796
  const [node, app, ...args] = process.argv;
806
797
  return new import_clipanion.Cli({
807
798
  binaryLabel: `My Application`,
@@ -809,7 +800,7 @@ var init_facades = __esm({
809
800
  binaryVersion: `1.0.0`
810
801
  });
811
802
  });
812
- httpServer = (0, import_neko_helper.createSingleton)(() => {
803
+ httpServer = (0, import_neko_helper2.createSingleton)(() => {
813
804
  const server = new http_exports.HttpServer();
814
805
  server.setErrorHandler(async (err, req, res) => {
815
806
  if (err instanceof http_exports.HttpError) {
@@ -844,7 +835,7 @@ var init_facades = __esm({
844
835
  server.setRouter(router());
845
836
  return server;
846
837
  });
847
- logger = (0, import_neko_helper.createSingleton)((label) => {
838
+ logger = (0, import_neko_helper2.createSingleton)((label) => {
848
839
  const logger_config = import_neko_config.config.get(["loggers", label].join("."));
849
840
  const rc = new import_neko_logger.Logger(logger_config);
850
841
  rc.setExtrasFunction((message) => {
@@ -853,7 +844,7 @@ var init_facades = __esm({
853
844
  });
854
845
  return rc;
855
846
  });
856
- mailer = (0, import_neko_helper.createSingleton)((label) => {
847
+ mailer = (0, import_neko_helper2.createSingleton)((label) => {
857
848
  const mailer_config = import_neko_config.config.get(["mailer", label].join("."));
858
849
  const provider = import_neko_mailer2.MailerProviderFactory.create(
859
850
  mailer_config.provider,
@@ -862,7 +853,7 @@ var init_facades = __esm({
862
853
  const rc = new import_neko_mailer2.Mailer(provider);
863
854
  return rc;
864
855
  });
865
- queue = (0, import_neko_helper.createSingleton)((label) => {
856
+ queue = (0, import_neko_helper2.createSingleton)((label) => {
866
857
  const queue_config = import_neko_config.config.get(["queues", label].join("."));
867
858
  if (!queue_config) {
868
859
  throw new Error(`Queue configuration for '${label}' not found`);
@@ -874,7 +865,7 @@ var init_facades = __esm({
874
865
  const rc = new import_neko_queue3.QueueConnection(provider);
875
866
  return rc;
876
867
  });
877
- cache = (0, import_neko_helper.createSingleton)((label) => {
868
+ cache = (0, import_neko_helper2.createSingleton)((label) => {
878
869
  const cache_config = import_neko_config.config.get(["caches", label].join("."));
879
870
  if (!cache_config) {
880
871
  throw new Error(`Cache configuration for '${label}' not found`);
@@ -455,7 +455,7 @@ var Router = class {
455
455
 
456
456
  // src/facades.mts
457
457
  var import_neko_scheduler = require("@devbro/neko-scheduler");
458
- var import_neko_helper = require("@devbro/neko-helper");
458
+ var import_neko_helper2 = require("@devbro/neko-helper");
459
459
  var import_neko_context2 = require("@devbro/neko-context");
460
460
  var import_neko_storage2 = require("@devbro/neko-storage");
461
461
  var import_neko_mailer2 = require("@devbro/neko-mailer");
@@ -481,12 +481,7 @@ __export(queue_exports, {
481
481
  DatabaseTransport: () => DatabaseTransport
482
482
  });
483
483
  __reExport(queue_exports, require("@devbro/neko-queue"));
484
-
485
- // src/helper.mts
486
- var helper_exports = {};
487
- __reExport(helper_exports, require("@devbro/neko-helper"));
488
-
489
- // src/queue.mts
484
+ var import_neko_helper = require("@devbro/neko-helper");
490
485
  var DatabaseTransport = class {
491
486
  static {
492
487
  __name(this, "DatabaseTransport");
@@ -537,7 +532,7 @@ var DatabaseTransport = class {
537
532
  }, "processMessage");
538
533
  constructor(config2 = {}) {
539
534
  this.config = { ...this.config, ...config2 };
540
- this.repeater = (0, helper_exports.createRepeater)(
535
+ this.repeater = (0, import_neko_helper.createRepeater)(
541
536
  this.processMessage,
542
537
  this.config.listen_interval * 1e3
543
538
  );
@@ -655,8 +650,8 @@ import_neko_storage.StorageProviderFactory.register("s3", (opt) => {
655
650
  // src/facades.mts
656
651
  var import_neko_cache2 = require("@devbro/neko-cache");
657
652
  var import_neko_queue3 = require("@devbro/neko-queue");
658
- var router = (0, import_neko_helper.createSingleton)(() => new Router());
659
- var scheduler = (0, import_neko_helper.createSingleton)(() => {
653
+ var router = (0, import_neko_helper2.createSingleton)(() => new Router());
654
+ var scheduler = (0, import_neko_helper2.createSingleton)(() => {
660
655
  const rc = new import_neko_scheduler.Scheduler();
661
656
  rc.setErrorHandler((err, job) => {
662
657
  logger().error({
@@ -668,7 +663,7 @@ var scheduler = (0, import_neko_helper.createSingleton)(() => {
668
663
  return rc;
669
664
  });
670
665
  var db = /* @__PURE__ */ __name((label = "default") => (0, import_neko_context2.ctx)().getOrThrow(["database", label]), "db");
671
- var storage = (0, import_neko_helper.createSingleton)((label = "default") => {
666
+ var storage = (0, import_neko_helper2.createSingleton)((label = "default") => {
672
667
  let storage_config = import_neko_config.config.get(["storages", label].join("."));
673
668
  const provider = import_neko_storage2.StorageProviderFactory.create(
674
669
  storage_config.provider,
@@ -676,7 +671,7 @@ var storage = (0, import_neko_helper.createSingleton)((label = "default") => {
676
671
  );
677
672
  return new import_neko_storage2.Storage(provider);
678
673
  });
679
- var cli = (0, import_neko_helper.createSingleton)(() => {
674
+ var cli = (0, import_neko_helper2.createSingleton)(() => {
680
675
  const [node, app, ...args] = process.argv;
681
676
  return new import_clipanion.Cli({
682
677
  binaryLabel: `My Application`,
@@ -684,7 +679,7 @@ var cli = (0, import_neko_helper.createSingleton)(() => {
684
679
  binaryVersion: `1.0.0`
685
680
  });
686
681
  });
687
- var httpServer = (0, import_neko_helper.createSingleton)(() => {
682
+ var httpServer = (0, import_neko_helper2.createSingleton)(() => {
688
683
  const server = new http_exports.HttpServer();
689
684
  server.setErrorHandler(async (err, req, res) => {
690
685
  if (err instanceof http_exports.HttpError) {
@@ -719,7 +714,7 @@ var httpServer = (0, import_neko_helper.createSingleton)(() => {
719
714
  server.setRouter(router());
720
715
  return server;
721
716
  });
722
- var logger = (0, import_neko_helper.createSingleton)((label) => {
717
+ var logger = (0, import_neko_helper2.createSingleton)((label) => {
723
718
  const logger_config = import_neko_config.config.get(["loggers", label].join("."));
724
719
  const rc = new import_neko_logger.Logger(logger_config);
725
720
  rc.setExtrasFunction((message) => {
@@ -728,7 +723,7 @@ var logger = (0, import_neko_helper.createSingleton)((label) => {
728
723
  });
729
724
  return rc;
730
725
  });
731
- var mailer = (0, import_neko_helper.createSingleton)((label) => {
726
+ var mailer = (0, import_neko_helper2.createSingleton)((label) => {
732
727
  const mailer_config = import_neko_config.config.get(["mailer", label].join("."));
733
728
  const provider = import_neko_mailer2.MailerProviderFactory.create(
734
729
  mailer_config.provider,
@@ -737,7 +732,7 @@ var mailer = (0, import_neko_helper.createSingleton)((label) => {
737
732
  const rc = new import_neko_mailer2.Mailer(provider);
738
733
  return rc;
739
734
  });
740
- var queue = (0, import_neko_helper.createSingleton)((label) => {
735
+ var queue = (0, import_neko_helper2.createSingleton)((label) => {
741
736
  const queue_config = import_neko_config.config.get(["queues", label].join("."));
742
737
  if (!queue_config) {
743
738
  throw new Error(`Queue configuration for '${label}' not found`);
@@ -749,7 +744,7 @@ var queue = (0, import_neko_helper.createSingleton)((label) => {
749
744
  const rc = new import_neko_queue3.QueueConnection(provider);
750
745
  return rc;
751
746
  });
752
- var cache = (0, import_neko_helper.createSingleton)((label) => {
747
+ var cache = (0, import_neko_helper2.createSingleton)((label) => {
753
748
  const cache_config = import_neko_config.config.get(["caches", label].join("."));
754
749
  if (!cache_config) {
755
750
  throw new Error(`Cache configuration for '${label}' not found`);
@@ -657,11 +657,8 @@ var cache = (0, import_neko_helper.createSingleton)((label) => {
657
657
  return new import_neko_cache2.Cache(provider);
658
658
  });
659
659
 
660
- // src/helper.mts
661
- var helper_exports = {};
662
- __reExport(helper_exports, require("@devbro/neko-helper"));
663
-
664
660
  // src/queue.mts
661
+ var import_neko_helper2 = require("@devbro/neko-helper");
665
662
  var DatabaseTransport = class {
666
663
  static {
667
664
  __name(this, "DatabaseTransport");
@@ -712,7 +709,7 @@ var DatabaseTransport = class {
712
709
  }, "processMessage");
713
710
  constructor(config2 = {}) {
714
711
  this.config = { ...this.config, ...config2 };
715
- this.repeater = (0, helper_exports.createRepeater)(
712
+ this.repeater = (0, import_neko_helper2.createRepeater)(
716
713
  this.processMessage,
717
714
  this.config.listen_interval * 1e3
718
715
  );
package/dist/queue.mjs CHANGED
@@ -2,7 +2,7 @@ var __defProp = Object.defineProperty;
2
2
  var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
3
  export * from "@devbro/neko-queue";
4
4
  import { db, logger } from "./facades.mjs";
5
- import { createRepeater } from "./helper.mts";
5
+ import { createRepeater } from "@devbro/neko-helper";
6
6
  class DatabaseTransport {
7
7
  static {
8
8
  __name(this, "DatabaseTransport");
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/queue.mts"],"sourcesContent":["export * from \"@devbro/neko-queue\";\nimport { QueueTransportInterface } from \"@devbro/neko-queue\";\nimport { Query } from \"@devbro/neko-sql\";\nimport { db, logger } from \"./facades.mjs\";\nimport { createRepeater } from \"./helper.mts\";\n\ntype DatabaseTransportConfig = {\n queue_table: string;\n db_connection: string;\n listen_interval: number;\n message_limit: number;\n};\n\nexport class DatabaseTransport implements QueueTransportInterface {\n private config: DatabaseTransportConfig = {\n queue_table: \"queue_messages\",\n db_connection: \"default\",\n listen_interval: 60, // seconds\n message_limit: 10, // messages per each fetch\n };\n channels = new Map<string, (message: string) => Promise<void>>();\n messageQueues: { channel: string; message: string }[] = [];\n repeater: ReturnType<typeof createRepeater>;\n\n processMessage = async () => {\n const conn = db(this.config.db_connection);\n try {\n await conn.connect();\n let q: Query = conn.getQuery();\n let messages = await q\n .table(this.config.queue_table)\n .whereOp(\"channel\", \"in\", Array.from(this.channels.keys()))\n .whereOp(\"status\", \"in\", [\"pending\", \"failed\"])\n .limit(this.config.message_limit)\n .orderBy(\"last_tried_at\", \"asc\")\n .get();\n for (let msg of messages) {\n try {\n let callback = this.channels.get(msg.channel)!;\n await callback(msg.message);\n // mark message as processed\n await q\n .table(this.config.queue_table)\n .whereOp(\"id\", \"=\", msg.id)\n .update({\n status: \"processed\",\n updated_at: new Date(),\n last_tried_at: new Date(),\n retried_count: (msg.retried_count || 0) + 1,\n });\n } catch (error) {\n await q\n .table(this.config.queue_table)\n .whereOp(\"id\", \"=\", msg.id)\n .update({\n status: \"failed\",\n last_tried_at: new Date(),\n retried_count: (msg.retried_count || 0) + 1,\n process_message:\n (error as Error).message || \"Error processing message\",\n });\n }\n }\n } catch (error) {\n logger().error(\"Error in DatabaseTransport listen interval:\", {\n error,\n });\n } finally {\n await conn.disconnect();\n }\n };\n\n constructor(config: Partial<DatabaseTransportConfig> = {}) {\n this.config = { ...this.config, ...config };\n this.repeater = createRepeater(\n this.processMessage,\n this.config.listen_interval * 1000,\n );\n }\n\n async dispatch(channel: string, message: string): Promise<void> {\n const conn = db(this.config.db_connection);\n try {\n await conn.connect();\n let schema = conn.getSchema();\n if ((await schema.tableExists(this.config.queue_table)) === false) {\n return;\n }\n let q: Query = conn.getQuery();\n await q.table(this.config.queue_table).insert({\n channel: channel,\n message: message,\n processed: false,\n created_at: new Date(),\n updated_at: new Date(),\n last_tried_at: null,\n process_message: \"\",\n retried_count: 0,\n status: \"pending\",\n });\n } finally {\n await conn.disconnect();\n }\n }\n\n async registerListener(\n channel: string,\n callback: (message: string) => Promise<void>,\n ): Promise<void> {\n this.channels.set(channel, callback);\n }\n\n async startListening(): Promise<void> {\n this.repeater.start();\n }\n\n async stopListening(): Promise<void> {\n this.repeater.stop();\n }\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/queue.mts"],"sourcesContent":["export * from \"@devbro/neko-queue\";\nimport { QueueTransportInterface } from \"@devbro/neko-queue\";\nimport { Query } from \"@devbro/neko-sql\";\nimport { db, logger } from \"./facades.mjs\";\nimport { createRepeater } from \"@devbro/neko-helper\";\n\ntype DatabaseTransportConfig = {\n queue_table: string;\n db_connection: string;\n listen_interval: number;\n message_limit: number;\n};\n\nexport class DatabaseTransport implements QueueTransportInterface {\n private config: DatabaseTransportConfig = {\n queue_table: \"queue_messages\",\n db_connection: \"default\",\n listen_interval: 60, // seconds\n message_limit: 10, // messages per each fetch\n };\n channels = new Map<string, (message: string) => Promise<void>>();\n messageQueues: { channel: string; message: string }[] = [];\n repeater: ReturnType<typeof createRepeater>;\n\n processMessage = async () => {\n const conn = db(this.config.db_connection);\n try {\n await conn.connect();\n let q: Query = conn.getQuery();\n let messages = await q\n .table(this.config.queue_table)\n .whereOp(\"channel\", \"in\", Array.from(this.channels.keys()))\n .whereOp(\"status\", \"in\", [\"pending\", \"failed\"])\n .limit(this.config.message_limit)\n .orderBy(\"last_tried_at\", \"asc\")\n .get();\n for (let msg of messages) {\n try {\n let callback = this.channels.get(msg.channel)!;\n await callback(msg.message);\n // mark message as processed\n await q\n .table(this.config.queue_table)\n .whereOp(\"id\", \"=\", msg.id)\n .update({\n status: \"processed\",\n updated_at: new Date(),\n last_tried_at: new Date(),\n retried_count: (msg.retried_count || 0) + 1,\n });\n } catch (error) {\n await q\n .table(this.config.queue_table)\n .whereOp(\"id\", \"=\", msg.id)\n .update({\n status: \"failed\",\n last_tried_at: new Date(),\n retried_count: (msg.retried_count || 0) + 1,\n process_message:\n (error as Error).message || \"Error processing message\",\n });\n }\n }\n } catch (error) {\n logger().error(\"Error in DatabaseTransport listen interval:\", {\n error,\n });\n } finally {\n await conn.disconnect();\n }\n };\n\n constructor(config: Partial<DatabaseTransportConfig> = {}) {\n this.config = { ...this.config, ...config };\n this.repeater = createRepeater(\n this.processMessage,\n this.config.listen_interval * 1000,\n );\n }\n\n async dispatch(channel: string, message: string): Promise<void> {\n const conn = db(this.config.db_connection);\n try {\n await conn.connect();\n let schema = conn.getSchema();\n if ((await schema.tableExists(this.config.queue_table)) === false) {\n return;\n }\n let q: Query = conn.getQuery();\n await q.table(this.config.queue_table).insert({\n channel: channel,\n message: message,\n processed: false,\n created_at: new Date(),\n updated_at: new Date(),\n last_tried_at: null,\n process_message: \"\",\n retried_count: 0,\n status: \"pending\",\n });\n } finally {\n await conn.disconnect();\n }\n }\n\n async registerListener(\n channel: string,\n callback: (message: string) => Promise<void>,\n ): Promise<void> {\n this.channels.set(channel, callback);\n }\n\n async startListening(): Promise<void> {\n this.repeater.start();\n }\n\n async stopListening(): Promise<void> {\n this.repeater.stop();\n }\n}\n"],"mappings":"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","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@devbro/pashmak",
3
- "version": "0.1.21",
3
+ "version": "0.1.22",
4
4
  "description": "testing application for the entire repo",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.mjs",