@devbro/pashmak 0.1.20 → 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.
@@ -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
  });
@@ -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
  });
@@ -1635,11 +1635,16 @@ __export(queue_exports, {
1635
1635
  DatabaseTransport: () => DatabaseTransport
1636
1636
  });
1637
1637
  __reExport(queue_exports, require("@devbro/neko-queue"));
1638
+
1639
+ // src/helper.mts
1640
+ var helper_exports = {};
1641
+ __reExport(helper_exports, require("@devbro/neko-helper"));
1642
+
1643
+ // src/queue.mts
1638
1644
  var DatabaseTransport = class {
1639
1645
  static {
1640
1646
  __name(this, "DatabaseTransport");
1641
1647
  }
1642
- activeIntervals = /* @__PURE__ */ new Set();
1643
1648
  config = {
1644
1649
  queue_table: "queue_messages",
1645
1650
  db_connection: "default",
@@ -1648,14 +1653,48 @@ var DatabaseTransport = class {
1648
1653
  message_limit: 10
1649
1654
  // messages per each fetch
1650
1655
  };
1651
- constructor(config3) {
1656
+ channels = /* @__PURE__ */ new Map();
1657
+ messageQueues = [];
1658
+ repeater;
1659
+ processMessage = /* @__PURE__ */ __name(async () => {
1660
+ const conn = db(this.config.db_connection);
1661
+ try {
1662
+ await conn.connect();
1663
+ let q = conn.getQuery();
1664
+ 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();
1665
+ for (let msg of messages) {
1666
+ try {
1667
+ let callback = this.channels.get(msg.channel);
1668
+ await callback(msg.message);
1669
+ await q.table(this.config.queue_table).whereOp("id", "=", msg.id).update({
1670
+ status: "processed",
1671
+ updated_at: /* @__PURE__ */ new Date(),
1672
+ last_tried_at: /* @__PURE__ */ new Date(),
1673
+ retried_count: (msg.retried_count || 0) + 1
1674
+ });
1675
+ } catch (error) {
1676
+ await q.table(this.config.queue_table).whereOp("id", "=", msg.id).update({
1677
+ status: "failed",
1678
+ last_tried_at: /* @__PURE__ */ new Date(),
1679
+ retried_count: (msg.retried_count || 0) + 1,
1680
+ process_message: error.message || "Error processing message"
1681
+ });
1682
+ }
1683
+ }
1684
+ } catch (error) {
1685
+ logger().error("Error in DatabaseTransport listen interval:", {
1686
+ error
1687
+ });
1688
+ } finally {
1689
+ await conn.disconnect();
1690
+ }
1691
+ }, "processMessage");
1692
+ constructor(config3 = {}) {
1652
1693
  this.config = { ...this.config, ...config3 };
1653
- }
1654
- setListenInterval(interval) {
1655
- this.config.listen_interval = interval;
1656
- }
1657
- setMessageLimit(limit) {
1658
- this.config.message_limit = limit;
1694
+ this.repeater = (0, helper_exports.createRepeater)(
1695
+ this.processMessage,
1696
+ this.config.listen_interval * 1e3
1697
+ );
1659
1698
  }
1660
1699
  async dispatch(channel, message) {
1661
1700
  const conn = db(this.config.db_connection);
@@ -1673,50 +1712,22 @@ var DatabaseTransport = class {
1673
1712
  created_at: /* @__PURE__ */ new Date(),
1674
1713
  updated_at: /* @__PURE__ */ new Date(),
1675
1714
  last_tried_at: null,
1676
- process_message: ""
1715
+ process_message: "",
1716
+ retried_count: 0,
1717
+ status: "pending"
1677
1718
  });
1678
1719
  } finally {
1679
1720
  await conn.disconnect();
1680
1721
  }
1681
1722
  }
1682
- async listen(channel, callback) {
1683
- return new Promise(async (resolve, reject) => {
1684
- const intervalId = setInterval(async () => {
1685
- const conn = db(this.config.db_connection);
1686
- try {
1687
- await conn.connect();
1688
- let q = conn.getQuery();
1689
- 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();
1690
- for (let msg of messages) {
1691
- try {
1692
- await callback(msg.message);
1693
- await q.table(this.config.queue_table).whereOp("id", "=", msg.id).update({
1694
- processed: true,
1695
- updated_at: /* @__PURE__ */ new Date()
1696
- });
1697
- } catch (error) {
1698
- await q.table(this.config.queue_table).whereOp("id", "=", msg.id).update({
1699
- processed: false,
1700
- last_tried_at: /* @__PURE__ */ new Date(),
1701
- process_message: error.message || "Error processing message"
1702
- });
1703
- }
1704
- }
1705
- } catch (error) {
1706
- this.activeIntervals.delete(intervalId);
1707
- logger().error("Error in DatabaseTransport listen interval:", { error });
1708
- } finally {
1709
- await conn.disconnect();
1710
- }
1711
- }, this.config.listen_interval * 1e3);
1712
- this.activeIntervals.add(intervalId);
1713
- });
1723
+ async registerListener(channel, callback) {
1724
+ this.channels.set(channel, callback);
1725
+ }
1726
+ async startListening() {
1727
+ this.repeater.start();
1714
1728
  }
1715
1729
  async stopListening() {
1716
- for (const intervalId of this.activeIntervals) {
1717
- clearInterval(intervalId);
1718
- }
1719
- this.activeIntervals.clear();
1730
+ this.repeater.stop();
1720
1731
  }
1721
1732
  };
1722
1733
 
@@ -1739,19 +1750,7 @@ var FlexibleFactory = class {
1739
1750
  return ctor(...args);
1740
1751
  }
1741
1752
  };
1742
- var MailerFactory = class _MailerFactory {
1743
- static {
1744
- __name(this, "MailerFactory");
1745
- }
1746
- static instance = new FlexibleFactory();
1747
- static register(key, factory) {
1748
- _MailerFactory.instance.register(key, factory);
1749
- }
1750
- static create(key, ...args) {
1751
- return _MailerFactory.instance.create(key, ...args);
1752
- }
1753
- };
1754
- MailerFactory.register("logger", (opt) => {
1753
+ import_neko_mailer.MailerProviderFactory.register("logger", (opt) => {
1755
1754
  return new import_neko_mailer.FunctionProvider((mail) => {
1756
1755
  logger().info({
1757
1756
  msg: "Sending email",
@@ -1759,32 +1758,20 @@ MailerFactory.register("logger", (opt) => {
1759
1758
  });
1760
1759
  });
1761
1760
  });
1762
- MailerFactory.register("ses", (opt) => {
1761
+ import_neko_mailer.MailerProviderFactory.register("ses", (opt) => {
1763
1762
  return new import_neko_mailer.SESProvider(opt);
1764
1763
  });
1765
- MailerFactory.register("smtp", (opt) => {
1764
+ import_neko_mailer.MailerProviderFactory.register("smtp", (opt) => {
1766
1765
  return new import_neko_mailer.SMTPProvider(opt);
1767
1766
  });
1768
- MailerFactory.register("memory", (opt) => {
1767
+ import_neko_mailer.MailerProviderFactory.register("memory", (opt) => {
1769
1768
  return new import_neko_mailer.MemoryProvider();
1770
1769
  });
1771
- var QueueTransportFactory = class _QueueTransportFactory {
1772
- static {
1773
- __name(this, "QueueTransportFactory");
1774
- }
1775
- static instance = new FlexibleFactory();
1776
- static register(key, factory) {
1777
- _QueueTransportFactory.instance.register(key, factory);
1778
- }
1779
- static create(key, ...args) {
1780
- return _QueueTransportFactory.instance.create(key, ...args);
1781
- }
1782
- };
1783
- QueueTransportFactory.register("database", (opt) => {
1770
+ import_neko_queue2.QueueTransportFactory.register("database", (opt) => {
1784
1771
  let transport = new DatabaseTransport(opt);
1785
1772
  return new import_neko_queue.QueueConnection(transport);
1786
1773
  });
1787
- QueueTransportFactory.register("memory", (opt) => {
1774
+ import_neko_queue2.QueueTransportFactory.register("memory", (opt) => {
1788
1775
  let transport = new import_neko_queue2.MemoryTransport(opt);
1789
1776
  return new import_neko_queue.QueueConnection(transport);
1790
1777
  });
@@ -1837,7 +1824,10 @@ var scheduler = (0, import_neko_helper.createSingleton)(() => {
1837
1824
  var db = /* @__PURE__ */ __name((label = "default") => (0, import_neko_context2.ctx)().getOrThrow(["database", label]), "db");
1838
1825
  var storage = (0, import_neko_helper.createSingleton)((label = "default") => {
1839
1826
  let storage_config = import_neko_config.config.get(["storages", label].join("."));
1840
- const provider = import_neko_storage2.StorageProviderFactory.create(storage_config.provider, storage_config.config);
1827
+ const provider = import_neko_storage2.StorageProviderFactory.create(
1828
+ storage_config.provider,
1829
+ storage_config.config
1830
+ );
1841
1831
  return new import_neko_storage2.Storage(provider);
1842
1832
  });
1843
1833
  var cli = (0, import_neko_helper.createSingleton)(() => {
@@ -1894,7 +1884,7 @@ var logger = (0, import_neko_helper.createSingleton)((label) => {
1894
1884
  });
1895
1885
  var mailer = (0, import_neko_helper.createSingleton)((label) => {
1896
1886
  const mailer_config = import_neko_config.config.get(["mailer", label].join("."));
1897
- const provider = MailerFactory.create(
1887
+ const provider = import_neko_mailer2.MailerProviderFactory.create(
1898
1888
  mailer_config.provider,
1899
1889
  mailer_config.config
1900
1890
  );
@@ -1906,7 +1896,10 @@ var queue = (0, import_neko_helper.createSingleton)((label) => {
1906
1896
  if (!queue_config) {
1907
1897
  throw new Error(`Queue configuration for '${label}' not found`);
1908
1898
  }
1909
- const provider = QueueTransportFactory.create(queue_config.provider, queue_config.config);
1899
+ const provider = import_neko_queue3.QueueTransportFactory.create(
1900
+ queue_config.provider,
1901
+ queue_config.config
1902
+ );
1910
1903
  const rc = new import_neko_queue3.QueueConnection(provider);
1911
1904
  return rc;
1912
1905
  });