@devbro/pashmak 0.1.19 → 0.1.21

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.
@@ -1637,11 +1637,16 @@ __export(queue_exports, {
1637
1637
  DatabaseTransport: () => DatabaseTransport
1638
1638
  });
1639
1639
  __reExport(queue_exports, require("@devbro/neko-queue"));
1640
+
1641
+ // src/helper.mts
1642
+ var helper_exports = {};
1643
+ __reExport(helper_exports, require("@devbro/neko-helper"));
1644
+
1645
+ // src/queue.mts
1640
1646
  var DatabaseTransport = class {
1641
1647
  static {
1642
1648
  __name(this, "DatabaseTransport");
1643
1649
  }
1644
- activeIntervals = /* @__PURE__ */ new Set();
1645
1650
  config = {
1646
1651
  queue_table: "queue_messages",
1647
1652
  db_connection: "default",
@@ -1650,14 +1655,48 @@ var DatabaseTransport = class {
1650
1655
  message_limit: 10
1651
1656
  // messages per each fetch
1652
1657
  };
1653
- constructor(config5) {
1658
+ channels = /* @__PURE__ */ new Map();
1659
+ messageQueues = [];
1660
+ repeater;
1661
+ processMessage = /* @__PURE__ */ __name(async () => {
1662
+ const conn = db(this.config.db_connection);
1663
+ try {
1664
+ await conn.connect();
1665
+ let q = conn.getQuery();
1666
+ let messages = await q.table(this.config.queue_table).whereOp("channel", "in", Array.from(this.channels.keys())).whereOp("status", "in", ["pending", "failed"]).limit(this.config.message_limit).orderBy("last_tried_at", "asc").get();
1667
+ for (let msg of messages) {
1668
+ try {
1669
+ let callback = this.channels.get(msg.channel);
1670
+ await callback(msg.message);
1671
+ await q.table(this.config.queue_table).whereOp("id", "=", msg.id).update({
1672
+ status: "processed",
1673
+ updated_at: /* @__PURE__ */ new Date(),
1674
+ last_tried_at: /* @__PURE__ */ new Date(),
1675
+ retried_count: (msg.retried_count || 0) + 1
1676
+ });
1677
+ } catch (error) {
1678
+ await q.table(this.config.queue_table).whereOp("id", "=", msg.id).update({
1679
+ status: "failed",
1680
+ last_tried_at: /* @__PURE__ */ new Date(),
1681
+ retried_count: (msg.retried_count || 0) + 1,
1682
+ process_message: error.message || "Error processing message"
1683
+ });
1684
+ }
1685
+ }
1686
+ } catch (error) {
1687
+ logger().error("Error in DatabaseTransport listen interval:", {
1688
+ error
1689
+ });
1690
+ } finally {
1691
+ await conn.disconnect();
1692
+ }
1693
+ }, "processMessage");
1694
+ constructor(config5 = {}) {
1654
1695
  this.config = { ...this.config, ...config5 };
1655
- }
1656
- setListenInterval(interval) {
1657
- this.config.listen_interval = interval;
1658
- }
1659
- setMessageLimit(limit) {
1660
- this.config.message_limit = limit;
1696
+ this.repeater = (0, helper_exports.createRepeater)(
1697
+ this.processMessage,
1698
+ this.config.listen_interval * 1e3
1699
+ );
1661
1700
  }
1662
1701
  async dispatch(channel, message) {
1663
1702
  const conn = db(this.config.db_connection);
@@ -1675,50 +1714,22 @@ var DatabaseTransport = class {
1675
1714
  created_at: /* @__PURE__ */ new Date(),
1676
1715
  updated_at: /* @__PURE__ */ new Date(),
1677
1716
  last_tried_at: null,
1678
- process_message: ""
1717
+ process_message: "",
1718
+ retried_count: 0,
1719
+ status: "pending"
1679
1720
  });
1680
1721
  } finally {
1681
1722
  await conn.disconnect();
1682
1723
  }
1683
1724
  }
1684
- async listen(channel, callback) {
1685
- return new Promise(async (resolve, reject) => {
1686
- const intervalId = setInterval(async () => {
1687
- const conn = db(this.config.db_connection);
1688
- try {
1689
- await conn.connect();
1690
- let q = conn.getQuery();
1691
- let messages = await q.table(this.config.queue_table).whereOp("channel", "=", channel).whereOp("processed", "=", false).limit(this.config.message_limit).orderBy("last_tried_at", "asc").get();
1692
- for (let msg of messages) {
1693
- try {
1694
- await callback(msg.message);
1695
- await q.table(this.config.queue_table).whereOp("id", "=", msg.id).update({
1696
- processed: true,
1697
- updated_at: /* @__PURE__ */ new Date()
1698
- });
1699
- } catch (error) {
1700
- await q.table(this.config.queue_table).whereOp("id", "=", msg.id).update({
1701
- processed: false,
1702
- last_tried_at: /* @__PURE__ */ new Date(),
1703
- process_message: error.message || "Error processing message"
1704
- });
1705
- }
1706
- }
1707
- } catch (error) {
1708
- this.activeIntervals.delete(intervalId);
1709
- logger().error("Error in DatabaseTransport listen interval:", { error });
1710
- } finally {
1711
- await conn.disconnect();
1712
- }
1713
- }, this.config.listen_interval * 1e3);
1714
- this.activeIntervals.add(intervalId);
1715
- });
1725
+ async registerListener(channel, callback) {
1726
+ this.channels.set(channel, callback);
1727
+ }
1728
+ async startListening() {
1729
+ this.repeater.start();
1716
1730
  }
1717
1731
  async stopListening() {
1718
- for (const intervalId of this.activeIntervals) {
1719
- clearInterval(intervalId);
1720
- }
1721
- this.activeIntervals.clear();
1732
+ this.repeater.stop();
1722
1733
  }
1723
1734
  };
1724
1735
 
@@ -1741,19 +1752,7 @@ var FlexibleFactory = class {
1741
1752
  return ctor(...args);
1742
1753
  }
1743
1754
  };
1744
- var MailerFactory = class _MailerFactory {
1745
- static {
1746
- __name(this, "MailerFactory");
1747
- }
1748
- static instance = new FlexibleFactory();
1749
- static register(key, factory) {
1750
- _MailerFactory.instance.register(key, factory);
1751
- }
1752
- static create(key, ...args) {
1753
- return _MailerFactory.instance.create(key, ...args);
1754
- }
1755
- };
1756
- MailerFactory.register("logger", (opt) => {
1755
+ import_neko_mailer.MailerProviderFactory.register("logger", (opt) => {
1757
1756
  return new import_neko_mailer.FunctionProvider((mail) => {
1758
1757
  logger().info({
1759
1758
  msg: "Sending email",
@@ -1761,32 +1760,20 @@ MailerFactory.register("logger", (opt) => {
1761
1760
  });
1762
1761
  });
1763
1762
  });
1764
- MailerFactory.register("ses", (opt) => {
1763
+ import_neko_mailer.MailerProviderFactory.register("ses", (opt) => {
1765
1764
  return new import_neko_mailer.SESProvider(opt);
1766
1765
  });
1767
- MailerFactory.register("smtp", (opt) => {
1766
+ import_neko_mailer.MailerProviderFactory.register("smtp", (opt) => {
1768
1767
  return new import_neko_mailer.SMTPProvider(opt);
1769
1768
  });
1770
- MailerFactory.register("memory", (opt) => {
1769
+ import_neko_mailer.MailerProviderFactory.register("memory", (opt) => {
1771
1770
  return new import_neko_mailer.MemoryProvider();
1772
1771
  });
1773
- var QueueTransportFactory = class _QueueTransportFactory {
1774
- static {
1775
- __name(this, "QueueTransportFactory");
1776
- }
1777
- static instance = new FlexibleFactory();
1778
- static register(key, factory) {
1779
- _QueueTransportFactory.instance.register(key, factory);
1780
- }
1781
- static create(key, ...args) {
1782
- return _QueueTransportFactory.instance.create(key, ...args);
1783
- }
1784
- };
1785
- QueueTransportFactory.register("database", (opt) => {
1772
+ import_neko_queue2.QueueTransportFactory.register("database", (opt) => {
1786
1773
  let transport = new DatabaseTransport(opt);
1787
1774
  return new import_neko_queue.QueueConnection(transport);
1788
1775
  });
1789
- QueueTransportFactory.register("memory", (opt) => {
1776
+ import_neko_queue2.QueueTransportFactory.register("memory", (opt) => {
1790
1777
  let transport = new import_neko_queue2.MemoryTransport(opt);
1791
1778
  return new import_neko_queue.QueueConnection(transport);
1792
1779
  });
@@ -1839,7 +1826,10 @@ var scheduler = (0, import_neko_helper.createSingleton)(() => {
1839
1826
  var db = /* @__PURE__ */ __name((label = "default") => (0, import_neko_context2.ctx)().getOrThrow(["database", label]), "db");
1840
1827
  var storage = (0, import_neko_helper.createSingleton)((label = "default") => {
1841
1828
  let storage_config = import_neko_config.config.get(["storages", label].join("."));
1842
- const provider = import_neko_storage2.StorageProviderFactory.create(storage_config.provider, storage_config.config);
1829
+ const provider = import_neko_storage2.StorageProviderFactory.create(
1830
+ storage_config.provider,
1831
+ storage_config.config
1832
+ );
1843
1833
  return new import_neko_storage2.Storage(provider);
1844
1834
  });
1845
1835
  var cli = (0, import_neko_helper.createSingleton)(() => {
@@ -1896,7 +1886,7 @@ var logger = (0, import_neko_helper.createSingleton)((label) => {
1896
1886
  });
1897
1887
  var mailer = (0, import_neko_helper.createSingleton)((label) => {
1898
1888
  const mailer_config = import_neko_config.config.get(["mailer", label].join("."));
1899
- const provider = MailerFactory.create(
1889
+ const provider = import_neko_mailer2.MailerProviderFactory.create(
1900
1890
  mailer_config.provider,
1901
1891
  mailer_config.config
1902
1892
  );
@@ -1908,7 +1898,10 @@ var queue = (0, import_neko_helper.createSingleton)((label) => {
1908
1898
  if (!queue_config) {
1909
1899
  throw new Error(`Queue configuration for '${label}' not found`);
1910
1900
  }
1911
- const provider = QueueTransportFactory.create(queue_config.provider, queue_config.config);
1901
+ const provider = import_neko_queue3.QueueTransportFactory.create(
1902
+ queue_config.provider,
1903
+ queue_config.config
1904
+ );
1912
1905
  const rc = new import_neko_queue3.QueueConnection(provider);
1913
1906
  return rc;
1914
1907
  });
@@ -480,11 +480,16 @@ __export(queue_exports, {
480
480
  DatabaseTransport: () => DatabaseTransport
481
481
  });
482
482
  __reExport(queue_exports, require("@devbro/neko-queue"));
483
+
484
+ // src/helper.mts
485
+ var helper_exports = {};
486
+ __reExport(helper_exports, require("@devbro/neko-helper"));
487
+
488
+ // src/queue.mts
483
489
  var DatabaseTransport = class {
484
490
  static {
485
491
  __name(this, "DatabaseTransport");
486
492
  }
487
- activeIntervals = /* @__PURE__ */ new Set();
488
493
  config = {
489
494
  queue_table: "queue_messages",
490
495
  db_connection: "default",
@@ -493,14 +498,48 @@ var DatabaseTransport = class {
493
498
  message_limit: 10
494
499
  // messages per each fetch
495
500
  };
496
- constructor(config3) {
501
+ channels = /* @__PURE__ */ new Map();
502
+ messageQueues = [];
503
+ repeater;
504
+ processMessage = /* @__PURE__ */ __name(async () => {
505
+ const conn = db(this.config.db_connection);
506
+ try {
507
+ await conn.connect();
508
+ let q = conn.getQuery();
509
+ let messages = await q.table(this.config.queue_table).whereOp("channel", "in", Array.from(this.channels.keys())).whereOp("status", "in", ["pending", "failed"]).limit(this.config.message_limit).orderBy("last_tried_at", "asc").get();
510
+ for (let msg of messages) {
511
+ try {
512
+ let callback = this.channels.get(msg.channel);
513
+ await callback(msg.message);
514
+ await q.table(this.config.queue_table).whereOp("id", "=", msg.id).update({
515
+ status: "processed",
516
+ updated_at: /* @__PURE__ */ new Date(),
517
+ last_tried_at: /* @__PURE__ */ new Date(),
518
+ retried_count: (msg.retried_count || 0) + 1
519
+ });
520
+ } catch (error) {
521
+ await q.table(this.config.queue_table).whereOp("id", "=", msg.id).update({
522
+ status: "failed",
523
+ last_tried_at: /* @__PURE__ */ new Date(),
524
+ retried_count: (msg.retried_count || 0) + 1,
525
+ process_message: error.message || "Error processing message"
526
+ });
527
+ }
528
+ }
529
+ } catch (error) {
530
+ logger().error("Error in DatabaseTransport listen interval:", {
531
+ error
532
+ });
533
+ } finally {
534
+ await conn.disconnect();
535
+ }
536
+ }, "processMessage");
537
+ constructor(config3 = {}) {
497
538
  this.config = { ...this.config, ...config3 };
498
- }
499
- setListenInterval(interval) {
500
- this.config.listen_interval = interval;
501
- }
502
- setMessageLimit(limit) {
503
- this.config.message_limit = limit;
539
+ this.repeater = (0, helper_exports.createRepeater)(
540
+ this.processMessage,
541
+ this.config.listen_interval * 1e3
542
+ );
504
543
  }
505
544
  async dispatch(channel, message) {
506
545
  const conn = db(this.config.db_connection);
@@ -518,50 +557,22 @@ var DatabaseTransport = class {
518
557
  created_at: /* @__PURE__ */ new Date(),
519
558
  updated_at: /* @__PURE__ */ new Date(),
520
559
  last_tried_at: null,
521
- process_message: ""
560
+ process_message: "",
561
+ retried_count: 0,
562
+ status: "pending"
522
563
  });
523
564
  } finally {
524
565
  await conn.disconnect();
525
566
  }
526
567
  }
527
- async listen(channel, callback) {
528
- return new Promise(async (resolve, reject) => {
529
- const intervalId = setInterval(async () => {
530
- const conn = db(this.config.db_connection);
531
- try {
532
- await conn.connect();
533
- let q = conn.getQuery();
534
- let messages = await q.table(this.config.queue_table).whereOp("channel", "=", channel).whereOp("processed", "=", false).limit(this.config.message_limit).orderBy("last_tried_at", "asc").get();
535
- for (let msg of messages) {
536
- try {
537
- await callback(msg.message);
538
- await q.table(this.config.queue_table).whereOp("id", "=", msg.id).update({
539
- processed: true,
540
- updated_at: /* @__PURE__ */ new Date()
541
- });
542
- } catch (error) {
543
- await q.table(this.config.queue_table).whereOp("id", "=", msg.id).update({
544
- processed: false,
545
- last_tried_at: /* @__PURE__ */ new Date(),
546
- process_message: error.message || "Error processing message"
547
- });
548
- }
549
- }
550
- } catch (error) {
551
- this.activeIntervals.delete(intervalId);
552
- logger().error("Error in DatabaseTransport listen interval:", { error });
553
- } finally {
554
- await conn.disconnect();
555
- }
556
- }, this.config.listen_interval * 1e3);
557
- this.activeIntervals.add(intervalId);
558
- });
568
+ async registerListener(channel, callback) {
569
+ this.channels.set(channel, callback);
570
+ }
571
+ async startListening() {
572
+ this.repeater.start();
559
573
  }
560
574
  async stopListening() {
561
- for (const intervalId of this.activeIntervals) {
562
- clearInterval(intervalId);
563
- }
564
- this.activeIntervals.clear();
575
+ this.repeater.stop();
565
576
  }
566
577
  };
567
578
 
@@ -584,19 +595,7 @@ var FlexibleFactory = class {
584
595
  return ctor(...args);
585
596
  }
586
597
  };
587
- var MailerFactory = class _MailerFactory {
588
- static {
589
- __name(this, "MailerFactory");
590
- }
591
- static instance = new FlexibleFactory();
592
- static register(key, factory) {
593
- _MailerFactory.instance.register(key, factory);
594
- }
595
- static create(key, ...args) {
596
- return _MailerFactory.instance.create(key, ...args);
597
- }
598
- };
599
- MailerFactory.register("logger", (opt) => {
598
+ import_neko_mailer.MailerProviderFactory.register("logger", (opt) => {
600
599
  return new import_neko_mailer.FunctionProvider((mail) => {
601
600
  logger().info({
602
601
  msg: "Sending email",
@@ -604,32 +603,20 @@ MailerFactory.register("logger", (opt) => {
604
603
  });
605
604
  });
606
605
  });
607
- MailerFactory.register("ses", (opt) => {
606
+ import_neko_mailer.MailerProviderFactory.register("ses", (opt) => {
608
607
  return new import_neko_mailer.SESProvider(opt);
609
608
  });
610
- MailerFactory.register("smtp", (opt) => {
609
+ import_neko_mailer.MailerProviderFactory.register("smtp", (opt) => {
611
610
  return new import_neko_mailer.SMTPProvider(opt);
612
611
  });
613
- MailerFactory.register("memory", (opt) => {
612
+ import_neko_mailer.MailerProviderFactory.register("memory", (opt) => {
614
613
  return new import_neko_mailer.MemoryProvider();
615
614
  });
616
- var QueueTransportFactory = class _QueueTransportFactory {
617
- static {
618
- __name(this, "QueueTransportFactory");
619
- }
620
- static instance = new FlexibleFactory();
621
- static register(key, factory) {
622
- _QueueTransportFactory.instance.register(key, factory);
623
- }
624
- static create(key, ...args) {
625
- return _QueueTransportFactory.instance.create(key, ...args);
626
- }
627
- };
628
- QueueTransportFactory.register("database", (opt) => {
615
+ import_neko_queue2.QueueTransportFactory.register("database", (opt) => {
629
616
  let transport = new DatabaseTransport(opt);
630
617
  return new import_neko_queue.QueueConnection(transport);
631
618
  });
632
- QueueTransportFactory.register("memory", (opt) => {
619
+ import_neko_queue2.QueueTransportFactory.register("memory", (opt) => {
633
620
  let transport = new import_neko_queue2.MemoryTransport(opt);
634
621
  return new import_neko_queue.QueueConnection(transport);
635
622
  });
@@ -682,7 +669,10 @@ var scheduler = (0, import_neko_helper.createSingleton)(() => {
682
669
  var db = /* @__PURE__ */ __name((label = "default") => (0, import_neko_context2.ctx)().getOrThrow(["database", label]), "db");
683
670
  var storage = (0, import_neko_helper.createSingleton)((label = "default") => {
684
671
  let storage_config = import_neko_config.config.get(["storages", label].join("."));
685
- const provider = import_neko_storage2.StorageProviderFactory.create(storage_config.provider, storage_config.config);
672
+ const provider = import_neko_storage2.StorageProviderFactory.create(
673
+ storage_config.provider,
674
+ storage_config.config
675
+ );
686
676
  return new import_neko_storage2.Storage(provider);
687
677
  });
688
678
  var cli = (0, import_neko_helper.createSingleton)(() => {
@@ -739,7 +729,7 @@ var logger = (0, import_neko_helper.createSingleton)((label) => {
739
729
  });
740
730
  var mailer = (0, import_neko_helper.createSingleton)((label) => {
741
731
  const mailer_config = import_neko_config.config.get(["mailer", label].join("."));
742
- const provider = MailerFactory.create(
732
+ const provider = import_neko_mailer2.MailerProviderFactory.create(
743
733
  mailer_config.provider,
744
734
  mailer_config.config
745
735
  );
@@ -751,7 +741,10 @@ var queue = (0, import_neko_helper.createSingleton)((label) => {
751
741
  if (!queue_config) {
752
742
  throw new Error(`Queue configuration for '${label}' not found`);
753
743
  }
754
- const provider = QueueTransportFactory.create(queue_config.provider, queue_config.config);
744
+ const provider = import_neko_queue3.QueueTransportFactory.create(
745
+ queue_config.provider,
746
+ queue_config.config
747
+ );
755
748
  const rc = new import_neko_queue3.QueueConnection(provider);
756
749
  return rc;
757
750
  });
@@ -481,11 +481,16 @@ __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
490
  var DatabaseTransport = class {
485
491
  static {
486
492
  __name(this, "DatabaseTransport");
487
493
  }
488
- activeIntervals = /* @__PURE__ */ new Set();
489
494
  config = {
490
495
  queue_table: "queue_messages",
491
496
  db_connection: "default",
@@ -494,14 +499,48 @@ var DatabaseTransport = class {
494
499
  message_limit: 10
495
500
  // messages per each fetch
496
501
  };
497
- constructor(config2) {
502
+ channels = /* @__PURE__ */ new Map();
503
+ messageQueues = [];
504
+ repeater;
505
+ processMessage = /* @__PURE__ */ __name(async () => {
506
+ const conn = db(this.config.db_connection);
507
+ try {
508
+ await conn.connect();
509
+ let q = conn.getQuery();
510
+ let messages = await q.table(this.config.queue_table).whereOp("channel", "in", Array.from(this.channels.keys())).whereOp("status", "in", ["pending", "failed"]).limit(this.config.message_limit).orderBy("last_tried_at", "asc").get();
511
+ for (let msg of messages) {
512
+ try {
513
+ let callback = this.channels.get(msg.channel);
514
+ await callback(msg.message);
515
+ await q.table(this.config.queue_table).whereOp("id", "=", msg.id).update({
516
+ status: "processed",
517
+ updated_at: /* @__PURE__ */ new Date(),
518
+ last_tried_at: /* @__PURE__ */ new Date(),
519
+ retried_count: (msg.retried_count || 0) + 1
520
+ });
521
+ } catch (error) {
522
+ await q.table(this.config.queue_table).whereOp("id", "=", msg.id).update({
523
+ status: "failed",
524
+ last_tried_at: /* @__PURE__ */ new Date(),
525
+ retried_count: (msg.retried_count || 0) + 1,
526
+ process_message: error.message || "Error processing message"
527
+ });
528
+ }
529
+ }
530
+ } catch (error) {
531
+ logger().error("Error in DatabaseTransport listen interval:", {
532
+ error
533
+ });
534
+ } finally {
535
+ await conn.disconnect();
536
+ }
537
+ }, "processMessage");
538
+ constructor(config2 = {}) {
498
539
  this.config = { ...this.config, ...config2 };
499
- }
500
- setListenInterval(interval) {
501
- this.config.listen_interval = interval;
502
- }
503
- setMessageLimit(limit) {
504
- this.config.message_limit = limit;
540
+ this.repeater = (0, helper_exports.createRepeater)(
541
+ this.processMessage,
542
+ this.config.listen_interval * 1e3
543
+ );
505
544
  }
506
545
  async dispatch(channel, message) {
507
546
  const conn = db(this.config.db_connection);
@@ -519,50 +558,22 @@ var DatabaseTransport = class {
519
558
  created_at: /* @__PURE__ */ new Date(),
520
559
  updated_at: /* @__PURE__ */ new Date(),
521
560
  last_tried_at: null,
522
- process_message: ""
561
+ process_message: "",
562
+ retried_count: 0,
563
+ status: "pending"
523
564
  });
524
565
  } finally {
525
566
  await conn.disconnect();
526
567
  }
527
568
  }
528
- async listen(channel, callback) {
529
- return new Promise(async (resolve, reject) => {
530
- const intervalId = setInterval(async () => {
531
- const conn = db(this.config.db_connection);
532
- try {
533
- await conn.connect();
534
- let q = conn.getQuery();
535
- let messages = await q.table(this.config.queue_table).whereOp("channel", "=", channel).whereOp("processed", "=", false).limit(this.config.message_limit).orderBy("last_tried_at", "asc").get();
536
- for (let msg of messages) {
537
- try {
538
- await callback(msg.message);
539
- await q.table(this.config.queue_table).whereOp("id", "=", msg.id).update({
540
- processed: true,
541
- updated_at: /* @__PURE__ */ new Date()
542
- });
543
- } catch (error) {
544
- await q.table(this.config.queue_table).whereOp("id", "=", msg.id).update({
545
- processed: false,
546
- last_tried_at: /* @__PURE__ */ new Date(),
547
- process_message: error.message || "Error processing message"
548
- });
549
- }
550
- }
551
- } catch (error) {
552
- this.activeIntervals.delete(intervalId);
553
- logger().error("Error in DatabaseTransport listen interval:", { error });
554
- } finally {
555
- await conn.disconnect();
556
- }
557
- }, this.config.listen_interval * 1e3);
558
- this.activeIntervals.add(intervalId);
559
- });
569
+ async registerListener(channel, callback) {
570
+ this.channels.set(channel, callback);
571
+ }
572
+ async startListening() {
573
+ this.repeater.start();
560
574
  }
561
575
  async stopListening() {
562
- for (const intervalId of this.activeIntervals) {
563
- clearInterval(intervalId);
564
- }
565
- this.activeIntervals.clear();
576
+ this.repeater.stop();
566
577
  }
567
578
  };
568
579
 
@@ -585,19 +596,7 @@ var FlexibleFactory = class {
585
596
  return ctor(...args);
586
597
  }
587
598
  };
588
- var MailerFactory = class _MailerFactory {
589
- static {
590
- __name(this, "MailerFactory");
591
- }
592
- static instance = new FlexibleFactory();
593
- static register(key, factory) {
594
- _MailerFactory.instance.register(key, factory);
595
- }
596
- static create(key, ...args) {
597
- return _MailerFactory.instance.create(key, ...args);
598
- }
599
- };
600
- MailerFactory.register("logger", (opt) => {
599
+ import_neko_mailer.MailerProviderFactory.register("logger", (opt) => {
601
600
  return new import_neko_mailer.FunctionProvider((mail) => {
602
601
  logger().info({
603
602
  msg: "Sending email",
@@ -605,32 +604,20 @@ MailerFactory.register("logger", (opt) => {
605
604
  });
606
605
  });
607
606
  });
608
- MailerFactory.register("ses", (opt) => {
607
+ import_neko_mailer.MailerProviderFactory.register("ses", (opt) => {
609
608
  return new import_neko_mailer.SESProvider(opt);
610
609
  });
611
- MailerFactory.register("smtp", (opt) => {
610
+ import_neko_mailer.MailerProviderFactory.register("smtp", (opt) => {
612
611
  return new import_neko_mailer.SMTPProvider(opt);
613
612
  });
614
- MailerFactory.register("memory", (opt) => {
613
+ import_neko_mailer.MailerProviderFactory.register("memory", (opt) => {
615
614
  return new import_neko_mailer.MemoryProvider();
616
615
  });
617
- var QueueTransportFactory = class _QueueTransportFactory {
618
- static {
619
- __name(this, "QueueTransportFactory");
620
- }
621
- static instance = new FlexibleFactory();
622
- static register(key, factory) {
623
- _QueueTransportFactory.instance.register(key, factory);
624
- }
625
- static create(key, ...args) {
626
- return _QueueTransportFactory.instance.create(key, ...args);
627
- }
628
- };
629
- QueueTransportFactory.register("database", (opt) => {
616
+ import_neko_queue2.QueueTransportFactory.register("database", (opt) => {
630
617
  let transport = new DatabaseTransport(opt);
631
618
  return new import_neko_queue.QueueConnection(transport);
632
619
  });
633
- QueueTransportFactory.register("memory", (opt) => {
620
+ import_neko_queue2.QueueTransportFactory.register("memory", (opt) => {
634
621
  let transport = new import_neko_queue2.MemoryTransport(opt);
635
622
  return new import_neko_queue.QueueConnection(transport);
636
623
  });
@@ -683,7 +670,10 @@ var scheduler = (0, import_neko_helper.createSingleton)(() => {
683
670
  var db = /* @__PURE__ */ __name((label = "default") => (0, import_neko_context2.ctx)().getOrThrow(["database", label]), "db");
684
671
  var storage = (0, import_neko_helper.createSingleton)((label = "default") => {
685
672
  let storage_config = import_neko_config.config.get(["storages", label].join("."));
686
- const provider = import_neko_storage2.StorageProviderFactory.create(storage_config.provider, storage_config.config);
673
+ const provider = import_neko_storage2.StorageProviderFactory.create(
674
+ storage_config.provider,
675
+ storage_config.config
676
+ );
687
677
  return new import_neko_storage2.Storage(provider);
688
678
  });
689
679
  var cli = (0, import_neko_helper.createSingleton)(() => {
@@ -740,7 +730,7 @@ var logger = (0, import_neko_helper.createSingleton)((label) => {
740
730
  });
741
731
  var mailer = (0, import_neko_helper.createSingleton)((label) => {
742
732
  const mailer_config = import_neko_config.config.get(["mailer", label].join("."));
743
- const provider = MailerFactory.create(
733
+ const provider = import_neko_mailer2.MailerProviderFactory.create(
744
734
  mailer_config.provider,
745
735
  mailer_config.config
746
736
  );
@@ -752,7 +742,10 @@ var queue = (0, import_neko_helper.createSingleton)((label) => {
752
742
  if (!queue_config) {
753
743
  throw new Error(`Queue configuration for '${label}' not found`);
754
744
  }
755
- const provider = QueueTransportFactory.create(queue_config.provider, queue_config.config);
745
+ const provider = import_neko_queue3.QueueTransportFactory.create(
746
+ queue_config.provider,
747
+ queue_config.config
748
+ );
756
749
  const rc = new import_neko_queue3.QueueConnection(provider);
757
750
  return rc;
758
751
  });