@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.
@@ -11,7 +11,7 @@ export default class {{className}} extends Migration {
11
11
  table.datetimeTz('last_tried_at').nullable(true);
12
12
  table.text('process_message').default('');
13
13
  table.string('status').default('pending');
14
- table.number('retried_count').default(0);
14
+ table.integer('retried_count').default(0);
15
15
  });
16
16
  }
17
17
 
@@ -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
  });
@@ -484,11 +484,16 @@ __export(queue_exports, {
484
484
  DatabaseTransport: () => DatabaseTransport
485
485
  });
486
486
  __reExport(queue_exports, require("@devbro/neko-queue"));
487
+
488
+ // src/helper.mts
489
+ var helper_exports = {};
490
+ __reExport(helper_exports, require("@devbro/neko-helper"));
491
+
492
+ // src/queue.mts
487
493
  var DatabaseTransport = class {
488
494
  static {
489
495
  __name(this, "DatabaseTransport");
490
496
  }
491
- activeIntervals = /* @__PURE__ */ new Set();
492
497
  config = {
493
498
  queue_table: "queue_messages",
494
499
  db_connection: "default",
@@ -497,14 +502,48 @@ var DatabaseTransport = class {
497
502
  message_limit: 10
498
503
  // messages per each fetch
499
504
  };
500
- constructor(config2) {
505
+ channels = /* @__PURE__ */ new Map();
506
+ messageQueues = [];
507
+ repeater;
508
+ processMessage = /* @__PURE__ */ __name(async () => {
509
+ const conn = db(this.config.db_connection);
510
+ try {
511
+ await conn.connect();
512
+ let q = conn.getQuery();
513
+ 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();
514
+ for (let msg of messages) {
515
+ try {
516
+ let callback = this.channels.get(msg.channel);
517
+ await callback(msg.message);
518
+ await q.table(this.config.queue_table).whereOp("id", "=", msg.id).update({
519
+ status: "processed",
520
+ updated_at: /* @__PURE__ */ new Date(),
521
+ last_tried_at: /* @__PURE__ */ new Date(),
522
+ retried_count: (msg.retried_count || 0) + 1
523
+ });
524
+ } catch (error) {
525
+ await q.table(this.config.queue_table).whereOp("id", "=", msg.id).update({
526
+ status: "failed",
527
+ last_tried_at: /* @__PURE__ */ new Date(),
528
+ retried_count: (msg.retried_count || 0) + 1,
529
+ process_message: error.message || "Error processing message"
530
+ });
531
+ }
532
+ }
533
+ } catch (error) {
534
+ logger().error("Error in DatabaseTransport listen interval:", {
535
+ error
536
+ });
537
+ } finally {
538
+ await conn.disconnect();
539
+ }
540
+ }, "processMessage");
541
+ constructor(config2 = {}) {
501
542
  this.config = { ...this.config, ...config2 };
502
- }
503
- setListenInterval(interval) {
504
- this.config.listen_interval = interval;
505
- }
506
- setMessageLimit(limit) {
507
- this.config.message_limit = limit;
543
+ this.repeater = (0, helper_exports.createRepeater)(
544
+ this.processMessage,
545
+ this.config.listen_interval * 1e3
546
+ );
508
547
  }
509
548
  async dispatch(channel, message) {
510
549
  const conn = db(this.config.db_connection);
@@ -522,50 +561,22 @@ var DatabaseTransport = class {
522
561
  created_at: /* @__PURE__ */ new Date(),
523
562
  updated_at: /* @__PURE__ */ new Date(),
524
563
  last_tried_at: null,
525
- process_message: ""
564
+ process_message: "",
565
+ retried_count: 0,
566
+ status: "pending"
526
567
  });
527
568
  } finally {
528
569
  await conn.disconnect();
529
570
  }
530
571
  }
531
- async listen(channel, callback) {
532
- return new Promise(async (resolve, reject) => {
533
- const intervalId = setInterval(async () => {
534
- const conn = db(this.config.db_connection);
535
- try {
536
- await conn.connect();
537
- let q = conn.getQuery();
538
- 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();
539
- for (let msg of messages) {
540
- try {
541
- await callback(msg.message);
542
- await q.table(this.config.queue_table).whereOp("id", "=", msg.id).update({
543
- processed: true,
544
- updated_at: /* @__PURE__ */ new Date()
545
- });
546
- } catch (error) {
547
- await q.table(this.config.queue_table).whereOp("id", "=", msg.id).update({
548
- processed: false,
549
- last_tried_at: /* @__PURE__ */ new Date(),
550
- process_message: error.message || "Error processing message"
551
- });
552
- }
553
- }
554
- } catch (error) {
555
- this.activeIntervals.delete(intervalId);
556
- logger().error("Error in DatabaseTransport listen interval:", { error });
557
- } finally {
558
- await conn.disconnect();
559
- }
560
- }, this.config.listen_interval * 1e3);
561
- this.activeIntervals.add(intervalId);
562
- });
572
+ async registerListener(channel, callback) {
573
+ this.channels.set(channel, callback);
574
+ }
575
+ async startListening() {
576
+ this.repeater.start();
563
577
  }
564
578
  async stopListening() {
565
- for (const intervalId of this.activeIntervals) {
566
- clearInterval(intervalId);
567
- }
568
- this.activeIntervals.clear();
579
+ this.repeater.stop();
569
580
  }
570
581
  };
571
582
 
@@ -588,19 +599,7 @@ var FlexibleFactory = class {
588
599
  return ctor(...args);
589
600
  }
590
601
  };
591
- var MailerFactory = class _MailerFactory {
592
- static {
593
- __name(this, "MailerFactory");
594
- }
595
- static instance = new FlexibleFactory();
596
- static register(key, factory) {
597
- _MailerFactory.instance.register(key, factory);
598
- }
599
- static create(key, ...args) {
600
- return _MailerFactory.instance.create(key, ...args);
601
- }
602
- };
603
- MailerFactory.register("logger", (opt) => {
602
+ import_neko_mailer.MailerProviderFactory.register("logger", (opt) => {
604
603
  return new import_neko_mailer.FunctionProvider((mail) => {
605
604
  logger().info({
606
605
  msg: "Sending email",
@@ -608,32 +607,20 @@ MailerFactory.register("logger", (opt) => {
608
607
  });
609
608
  });
610
609
  });
611
- MailerFactory.register("ses", (opt) => {
610
+ import_neko_mailer.MailerProviderFactory.register("ses", (opt) => {
612
611
  return new import_neko_mailer.SESProvider(opt);
613
612
  });
614
- MailerFactory.register("smtp", (opt) => {
613
+ import_neko_mailer.MailerProviderFactory.register("smtp", (opt) => {
615
614
  return new import_neko_mailer.SMTPProvider(opt);
616
615
  });
617
- MailerFactory.register("memory", (opt) => {
616
+ import_neko_mailer.MailerProviderFactory.register("memory", (opt) => {
618
617
  return new import_neko_mailer.MemoryProvider();
619
618
  });
620
- var QueueTransportFactory = class _QueueTransportFactory {
621
- static {
622
- __name(this, "QueueTransportFactory");
623
- }
624
- static instance = new FlexibleFactory();
625
- static register(key, factory) {
626
- _QueueTransportFactory.instance.register(key, factory);
627
- }
628
- static create(key, ...args) {
629
- return _QueueTransportFactory.instance.create(key, ...args);
630
- }
631
- };
632
- QueueTransportFactory.register("database", (opt) => {
619
+ import_neko_queue2.QueueTransportFactory.register("database", (opt) => {
633
620
  let transport = new DatabaseTransport(opt);
634
621
  return new import_neko_queue.QueueConnection(transport);
635
622
  });
636
- QueueTransportFactory.register("memory", (opt) => {
623
+ import_neko_queue2.QueueTransportFactory.register("memory", (opt) => {
637
624
  let transport = new import_neko_queue2.MemoryTransport(opt);
638
625
  return new import_neko_queue.QueueConnection(transport);
639
626
  });
@@ -686,7 +673,10 @@ var scheduler = (0, import_neko_helper.createSingleton)(() => {
686
673
  var db = /* @__PURE__ */ __name((label = "default") => (0, import_neko_context2.ctx)().getOrThrow(["database", label]), "db");
687
674
  var storage = (0, import_neko_helper.createSingleton)((label = "default") => {
688
675
  let storage_config = import_neko_config.config.get(["storages", label].join("."));
689
- const provider = import_neko_storage2.StorageProviderFactory.create(storage_config.provider, storage_config.config);
676
+ const provider = import_neko_storage2.StorageProviderFactory.create(
677
+ storage_config.provider,
678
+ storage_config.config
679
+ );
690
680
  return new import_neko_storage2.Storage(provider);
691
681
  });
692
682
  var cli = (0, import_neko_helper.createSingleton)(() => {
@@ -743,7 +733,7 @@ var logger = (0, import_neko_helper.createSingleton)((label) => {
743
733
  });
744
734
  var mailer = (0, import_neko_helper.createSingleton)((label) => {
745
735
  const mailer_config = import_neko_config.config.get(["mailer", label].join("."));
746
- const provider = MailerFactory.create(
736
+ const provider = import_neko_mailer2.MailerProviderFactory.create(
747
737
  mailer_config.provider,
748
738
  mailer_config.config
749
739
  );
@@ -755,7 +745,10 @@ var queue = (0, import_neko_helper.createSingleton)((label) => {
755
745
  if (!queue_config) {
756
746
  throw new Error(`Queue configuration for '${label}' not found`);
757
747
  }
758
- const provider = QueueTransportFactory.create(queue_config.provider, queue_config.config);
748
+ const provider = import_neko_queue3.QueueTransportFactory.create(
749
+ queue_config.provider,
750
+ queue_config.config
751
+ );
759
752
  const rc = new import_neko_queue3.QueueConnection(provider);
760
753
  return rc;
761
754
  });
@@ -482,11 +482,16 @@ __export(queue_exports, {
482
482
  DatabaseTransport: () => DatabaseTransport
483
483
  });
484
484
  __reExport(queue_exports, require("@devbro/neko-queue"));
485
+
486
+ // src/helper.mts
487
+ var helper_exports = {};
488
+ __reExport(helper_exports, require("@devbro/neko-helper"));
489
+
490
+ // src/queue.mts
485
491
  var DatabaseTransport = class {
486
492
  static {
487
493
  __name(this, "DatabaseTransport");
488
494
  }
489
- activeIntervals = /* @__PURE__ */ new Set();
490
495
  config = {
491
496
  queue_table: "queue_messages",
492
497
  db_connection: "default",
@@ -495,14 +500,48 @@ var DatabaseTransport = class {
495
500
  message_limit: 10
496
501
  // messages per each fetch
497
502
  };
498
- constructor(config3) {
503
+ channels = /* @__PURE__ */ new Map();
504
+ messageQueues = [];
505
+ repeater;
506
+ processMessage = /* @__PURE__ */ __name(async () => {
507
+ const conn = db(this.config.db_connection);
508
+ try {
509
+ await conn.connect();
510
+ let q = conn.getQuery();
511
+ 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();
512
+ for (let msg of messages) {
513
+ try {
514
+ let callback = this.channels.get(msg.channel);
515
+ await callback(msg.message);
516
+ await q.table(this.config.queue_table).whereOp("id", "=", msg.id).update({
517
+ status: "processed",
518
+ updated_at: /* @__PURE__ */ new Date(),
519
+ last_tried_at: /* @__PURE__ */ new Date(),
520
+ retried_count: (msg.retried_count || 0) + 1
521
+ });
522
+ } catch (error) {
523
+ await q.table(this.config.queue_table).whereOp("id", "=", msg.id).update({
524
+ status: "failed",
525
+ last_tried_at: /* @__PURE__ */ new Date(),
526
+ retried_count: (msg.retried_count || 0) + 1,
527
+ process_message: error.message || "Error processing message"
528
+ });
529
+ }
530
+ }
531
+ } catch (error) {
532
+ logger().error("Error in DatabaseTransport listen interval:", {
533
+ error
534
+ });
535
+ } finally {
536
+ await conn.disconnect();
537
+ }
538
+ }, "processMessage");
539
+ constructor(config3 = {}) {
499
540
  this.config = { ...this.config, ...config3 };
500
- }
501
- setListenInterval(interval) {
502
- this.config.listen_interval = interval;
503
- }
504
- setMessageLimit(limit) {
505
- this.config.message_limit = limit;
541
+ this.repeater = (0, helper_exports.createRepeater)(
542
+ this.processMessage,
543
+ this.config.listen_interval * 1e3
544
+ );
506
545
  }
507
546
  async dispatch(channel, message) {
508
547
  const conn = db(this.config.db_connection);
@@ -520,50 +559,22 @@ var DatabaseTransport = class {
520
559
  created_at: /* @__PURE__ */ new Date(),
521
560
  updated_at: /* @__PURE__ */ new Date(),
522
561
  last_tried_at: null,
523
- process_message: ""
562
+ process_message: "",
563
+ retried_count: 0,
564
+ status: "pending"
524
565
  });
525
566
  } finally {
526
567
  await conn.disconnect();
527
568
  }
528
569
  }
529
- async listen(channel, callback) {
530
- return new Promise(async (resolve, reject) => {
531
- const intervalId = setInterval(async () => {
532
- const conn = db(this.config.db_connection);
533
- try {
534
- await conn.connect();
535
- let q = conn.getQuery();
536
- 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();
537
- for (let msg of messages) {
538
- try {
539
- await callback(msg.message);
540
- await q.table(this.config.queue_table).whereOp("id", "=", msg.id).update({
541
- processed: true,
542
- updated_at: /* @__PURE__ */ new Date()
543
- });
544
- } catch (error) {
545
- await q.table(this.config.queue_table).whereOp("id", "=", msg.id).update({
546
- processed: false,
547
- last_tried_at: /* @__PURE__ */ new Date(),
548
- process_message: error.message || "Error processing message"
549
- });
550
- }
551
- }
552
- } catch (error) {
553
- this.activeIntervals.delete(intervalId);
554
- logger().error("Error in DatabaseTransport listen interval:", { error });
555
- } finally {
556
- await conn.disconnect();
557
- }
558
- }, this.config.listen_interval * 1e3);
559
- this.activeIntervals.add(intervalId);
560
- });
570
+ async registerListener(channel, callback) {
571
+ this.channels.set(channel, callback);
572
+ }
573
+ async startListening() {
574
+ this.repeater.start();
561
575
  }
562
576
  async stopListening() {
563
- for (const intervalId of this.activeIntervals) {
564
- clearInterval(intervalId);
565
- }
566
- this.activeIntervals.clear();
577
+ this.repeater.stop();
567
578
  }
568
579
  };
569
580
 
@@ -586,19 +597,7 @@ var FlexibleFactory = class {
586
597
  return ctor(...args);
587
598
  }
588
599
  };
589
- var MailerFactory = class _MailerFactory {
590
- static {
591
- __name(this, "MailerFactory");
592
- }
593
- static instance = new FlexibleFactory();
594
- static register(key, factory) {
595
- _MailerFactory.instance.register(key, factory);
596
- }
597
- static create(key, ...args) {
598
- return _MailerFactory.instance.create(key, ...args);
599
- }
600
- };
601
- MailerFactory.register("logger", (opt) => {
600
+ import_neko_mailer.MailerProviderFactory.register("logger", (opt) => {
602
601
  return new import_neko_mailer.FunctionProvider((mail) => {
603
602
  logger().info({
604
603
  msg: "Sending email",
@@ -606,32 +605,20 @@ MailerFactory.register("logger", (opt) => {
606
605
  });
607
606
  });
608
607
  });
609
- MailerFactory.register("ses", (opt) => {
608
+ import_neko_mailer.MailerProviderFactory.register("ses", (opt) => {
610
609
  return new import_neko_mailer.SESProvider(opt);
611
610
  });
612
- MailerFactory.register("smtp", (opt) => {
611
+ import_neko_mailer.MailerProviderFactory.register("smtp", (opt) => {
613
612
  return new import_neko_mailer.SMTPProvider(opt);
614
613
  });
615
- MailerFactory.register("memory", (opt) => {
614
+ import_neko_mailer.MailerProviderFactory.register("memory", (opt) => {
616
615
  return new import_neko_mailer.MemoryProvider();
617
616
  });
618
- var QueueTransportFactory = class _QueueTransportFactory {
619
- static {
620
- __name(this, "QueueTransportFactory");
621
- }
622
- static instance = new FlexibleFactory();
623
- static register(key, factory) {
624
- _QueueTransportFactory.instance.register(key, factory);
625
- }
626
- static create(key, ...args) {
627
- return _QueueTransportFactory.instance.create(key, ...args);
628
- }
629
- };
630
- QueueTransportFactory.register("database", (opt) => {
617
+ import_neko_queue2.QueueTransportFactory.register("database", (opt) => {
631
618
  let transport = new DatabaseTransport(opt);
632
619
  return new import_neko_queue.QueueConnection(transport);
633
620
  });
634
- QueueTransportFactory.register("memory", (opt) => {
621
+ import_neko_queue2.QueueTransportFactory.register("memory", (opt) => {
635
622
  let transport = new import_neko_queue2.MemoryTransport(opt);
636
623
  return new import_neko_queue.QueueConnection(transport);
637
624
  });
@@ -684,7 +671,10 @@ var scheduler = (0, import_neko_helper.createSingleton)(() => {
684
671
  var db = /* @__PURE__ */ __name((label = "default") => (0, import_neko_context2.ctx)().getOrThrow(["database", label]), "db");
685
672
  var storage = (0, import_neko_helper.createSingleton)((label = "default") => {
686
673
  let storage_config = import_neko_config.config.get(["storages", label].join("."));
687
- const provider = import_neko_storage2.StorageProviderFactory.create(storage_config.provider, storage_config.config);
674
+ const provider = import_neko_storage2.StorageProviderFactory.create(
675
+ storage_config.provider,
676
+ storage_config.config
677
+ );
688
678
  return new import_neko_storage2.Storage(provider);
689
679
  });
690
680
  var cli = (0, import_neko_helper.createSingleton)(() => {
@@ -741,7 +731,7 @@ var logger = (0, import_neko_helper.createSingleton)((label) => {
741
731
  });
742
732
  var mailer = (0, import_neko_helper.createSingleton)((label) => {
743
733
  const mailer_config = import_neko_config.config.get(["mailer", label].join("."));
744
- const provider = MailerFactory.create(
734
+ const provider = import_neko_mailer2.MailerProviderFactory.create(
745
735
  mailer_config.provider,
746
736
  mailer_config.config
747
737
  );
@@ -753,7 +743,10 @@ var queue = (0, import_neko_helper.createSingleton)((label) => {
753
743
  if (!queue_config) {
754
744
  throw new Error(`Queue configuration for '${label}' not found`);
755
745
  }
756
- const provider = QueueTransportFactory.create(queue_config.provider, queue_config.config);
746
+ const provider = import_neko_queue3.QueueTransportFactory.create(
747
+ queue_config.provider,
748
+ queue_config.config
749
+ );
757
750
  const rc = new import_neko_queue3.QueueConnection(provider);
758
751
  return rc;
759
752
  });