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