@devbro/pashmak 0.1.20 → 0.1.22
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/app/console/queue/queue_migration.tpl +1 -1
- package/dist/bin/app/console/DefaultCommand.cjs +76 -88
- package/dist/bin/app/console/KeyGenerateCommand.cjs +76 -88
- package/dist/bin/app/console/StartCommand.cjs +76 -88
- package/dist/bin/app/console/generate/GenerateControllerCommand.cjs +76 -88
- package/dist/bin/app/console/generate/index.cjs +76 -88
- package/dist/bin/app/console/index.cjs +76 -88
- package/dist/bin/app/console/migrate/GenerateMigrateCommand.cjs +76 -88
- package/dist/bin/app/console/migrate/MigrateCommand.cjs +76 -88
- package/dist/bin/app/console/migrate/MigrateRollbackCommand.cjs +76 -88
- package/dist/bin/app/console/migrate/index.cjs +76 -88
- package/dist/bin/app/console/queue/GenerateQueueMigrateCommand.cjs +76 -88
- package/dist/bin/cache.cjs +76 -88
- package/dist/bin/facades.cjs +76 -88
- package/dist/bin/factories.cjs +68 -84
- package/dist/bin/index.cjs +79 -91
- package/dist/bin/middlewares.cjs +76 -88
- package/dist/bin/queue.cjs +66 -78
- package/dist/facades.mjs +15 -10
- package/dist/facades.mjs.map +1 -1
- package/dist/factories.d.mts +1 -13
- package/dist/factories.mjs +13 -34
- package/dist/factories.mjs.map +1 -1
- package/dist/queue.d.mts +11 -5
- package/dist/queue.mjs +51 -45
- package/dist/queue.mjs.map +1 -1
- package/package.json +1 -1
package/dist/bin/index.cjs
CHANGED
|
@@ -566,17 +566,17 @@ var queue_exports = {};
|
|
|
566
566
|
__export(queue_exports, {
|
|
567
567
|
DatabaseTransport: () => DatabaseTransport
|
|
568
568
|
});
|
|
569
|
-
var DatabaseTransport;
|
|
569
|
+
var import_neko_helper, DatabaseTransport;
|
|
570
570
|
var init_queue = __esm({
|
|
571
571
|
"src/queue.mts"() {
|
|
572
572
|
"use strict";
|
|
573
573
|
__reExport(queue_exports, require("@devbro/neko-queue"));
|
|
574
574
|
init_facades();
|
|
575
|
+
import_neko_helper = require("@devbro/neko-helper");
|
|
575
576
|
DatabaseTransport = class {
|
|
576
577
|
static {
|
|
577
578
|
__name(this, "DatabaseTransport");
|
|
578
579
|
}
|
|
579
|
-
activeIntervals = /* @__PURE__ */ new Set();
|
|
580
580
|
config = {
|
|
581
581
|
queue_table: "queue_messages",
|
|
582
582
|
db_connection: "default",
|
|
@@ -585,14 +585,48 @@ var init_queue = __esm({
|
|
|
585
585
|
message_limit: 10
|
|
586
586
|
// messages per each fetch
|
|
587
587
|
};
|
|
588
|
-
|
|
588
|
+
channels = /* @__PURE__ */ new Map();
|
|
589
|
+
messageQueues = [];
|
|
590
|
+
repeater;
|
|
591
|
+
processMessage = /* @__PURE__ */ __name(async () => {
|
|
592
|
+
const conn = db(this.config.db_connection);
|
|
593
|
+
try {
|
|
594
|
+
await conn.connect();
|
|
595
|
+
let q = conn.getQuery();
|
|
596
|
+
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();
|
|
597
|
+
for (let msg of messages) {
|
|
598
|
+
try {
|
|
599
|
+
let callback = this.channels.get(msg.channel);
|
|
600
|
+
await callback(msg.message);
|
|
601
|
+
await q.table(this.config.queue_table).whereOp("id", "=", msg.id).update({
|
|
602
|
+
status: "processed",
|
|
603
|
+
updated_at: /* @__PURE__ */ new Date(),
|
|
604
|
+
last_tried_at: /* @__PURE__ */ new Date(),
|
|
605
|
+
retried_count: (msg.retried_count || 0) + 1
|
|
606
|
+
});
|
|
607
|
+
} catch (error) {
|
|
608
|
+
await q.table(this.config.queue_table).whereOp("id", "=", msg.id).update({
|
|
609
|
+
status: "failed",
|
|
610
|
+
last_tried_at: /* @__PURE__ */ new Date(),
|
|
611
|
+
retried_count: (msg.retried_count || 0) + 1,
|
|
612
|
+
process_message: error.message || "Error processing message"
|
|
613
|
+
});
|
|
614
|
+
}
|
|
615
|
+
}
|
|
616
|
+
} catch (error) {
|
|
617
|
+
logger().error("Error in DatabaseTransport listen interval:", {
|
|
618
|
+
error
|
|
619
|
+
});
|
|
620
|
+
} finally {
|
|
621
|
+
await conn.disconnect();
|
|
622
|
+
}
|
|
623
|
+
}, "processMessage");
|
|
624
|
+
constructor(config10 = {}) {
|
|
589
625
|
this.config = { ...this.config, ...config10 };
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
setMessageLimit(limit) {
|
|
595
|
-
this.config.message_limit = limit;
|
|
626
|
+
this.repeater = (0, import_neko_helper.createRepeater)(
|
|
627
|
+
this.processMessage,
|
|
628
|
+
this.config.listen_interval * 1e3
|
|
629
|
+
);
|
|
596
630
|
}
|
|
597
631
|
async dispatch(channel, message) {
|
|
598
632
|
const conn = db(this.config.db_connection);
|
|
@@ -610,57 +644,29 @@ var init_queue = __esm({
|
|
|
610
644
|
created_at: /* @__PURE__ */ new Date(),
|
|
611
645
|
updated_at: /* @__PURE__ */ new Date(),
|
|
612
646
|
last_tried_at: null,
|
|
613
|
-
process_message: ""
|
|
647
|
+
process_message: "",
|
|
648
|
+
retried_count: 0,
|
|
649
|
+
status: "pending"
|
|
614
650
|
});
|
|
615
651
|
} finally {
|
|
616
652
|
await conn.disconnect();
|
|
617
653
|
}
|
|
618
654
|
}
|
|
619
|
-
async
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
await conn.connect();
|
|
625
|
-
let q = conn.getQuery();
|
|
626
|
-
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();
|
|
627
|
-
for (let msg of messages) {
|
|
628
|
-
try {
|
|
629
|
-
await callback(msg.message);
|
|
630
|
-
await q.table(this.config.queue_table).whereOp("id", "=", msg.id).update({
|
|
631
|
-
processed: true,
|
|
632
|
-
updated_at: /* @__PURE__ */ new Date()
|
|
633
|
-
});
|
|
634
|
-
} catch (error) {
|
|
635
|
-
await q.table(this.config.queue_table).whereOp("id", "=", msg.id).update({
|
|
636
|
-
processed: false,
|
|
637
|
-
last_tried_at: /* @__PURE__ */ new Date(),
|
|
638
|
-
process_message: error.message || "Error processing message"
|
|
639
|
-
});
|
|
640
|
-
}
|
|
641
|
-
}
|
|
642
|
-
} catch (error) {
|
|
643
|
-
this.activeIntervals.delete(intervalId);
|
|
644
|
-
logger().error("Error in DatabaseTransport listen interval:", { error });
|
|
645
|
-
} finally {
|
|
646
|
-
await conn.disconnect();
|
|
647
|
-
}
|
|
648
|
-
}, this.config.listen_interval * 1e3);
|
|
649
|
-
this.activeIntervals.add(intervalId);
|
|
650
|
-
});
|
|
655
|
+
async registerListener(channel, callback) {
|
|
656
|
+
this.channels.set(channel, callback);
|
|
657
|
+
}
|
|
658
|
+
async startListening() {
|
|
659
|
+
this.repeater.start();
|
|
651
660
|
}
|
|
652
661
|
async stopListening() {
|
|
653
|
-
|
|
654
|
-
clearInterval(intervalId);
|
|
655
|
-
}
|
|
656
|
-
this.activeIntervals.clear();
|
|
662
|
+
this.repeater.stop();
|
|
657
663
|
}
|
|
658
664
|
};
|
|
659
665
|
}
|
|
660
666
|
});
|
|
661
667
|
|
|
662
668
|
// src/factories.mts
|
|
663
|
-
var import_neko_mailer, import_neko_queue, import_neko_queue2, import_neko_cache, import_neko_storage, FlexibleFactory,
|
|
669
|
+
var import_neko_mailer, import_neko_queue, import_neko_queue2, import_neko_cache, import_neko_storage, FlexibleFactory, CacheProviderFactory;
|
|
664
670
|
var init_factories = __esm({
|
|
665
671
|
"src/factories.mts"() {
|
|
666
672
|
"use strict";
|
|
@@ -687,19 +693,7 @@ var init_factories = __esm({
|
|
|
687
693
|
return ctor(...args);
|
|
688
694
|
}
|
|
689
695
|
};
|
|
690
|
-
|
|
691
|
-
static {
|
|
692
|
-
__name(this, "MailerFactory");
|
|
693
|
-
}
|
|
694
|
-
static instance = new FlexibleFactory();
|
|
695
|
-
static register(key, factory) {
|
|
696
|
-
_MailerFactory.instance.register(key, factory);
|
|
697
|
-
}
|
|
698
|
-
static create(key, ...args) {
|
|
699
|
-
return _MailerFactory.instance.create(key, ...args);
|
|
700
|
-
}
|
|
701
|
-
};
|
|
702
|
-
MailerFactory.register("logger", (opt) => {
|
|
696
|
+
import_neko_mailer.MailerProviderFactory.register("logger", (opt) => {
|
|
703
697
|
return new import_neko_mailer.FunctionProvider((mail) => {
|
|
704
698
|
logger().info({
|
|
705
699
|
msg: "Sending email",
|
|
@@ -707,32 +701,20 @@ var init_factories = __esm({
|
|
|
707
701
|
});
|
|
708
702
|
});
|
|
709
703
|
});
|
|
710
|
-
|
|
704
|
+
import_neko_mailer.MailerProviderFactory.register("ses", (opt) => {
|
|
711
705
|
return new import_neko_mailer.SESProvider(opt);
|
|
712
706
|
});
|
|
713
|
-
|
|
707
|
+
import_neko_mailer.MailerProviderFactory.register("smtp", (opt) => {
|
|
714
708
|
return new import_neko_mailer.SMTPProvider(opt);
|
|
715
709
|
});
|
|
716
|
-
|
|
710
|
+
import_neko_mailer.MailerProviderFactory.register("memory", (opt) => {
|
|
717
711
|
return new import_neko_mailer.MemoryProvider();
|
|
718
712
|
});
|
|
719
|
-
QueueTransportFactory
|
|
720
|
-
static {
|
|
721
|
-
__name(this, "QueueTransportFactory");
|
|
722
|
-
}
|
|
723
|
-
static instance = new FlexibleFactory();
|
|
724
|
-
static register(key, factory) {
|
|
725
|
-
_QueueTransportFactory.instance.register(key, factory);
|
|
726
|
-
}
|
|
727
|
-
static create(key, ...args) {
|
|
728
|
-
return _QueueTransportFactory.instance.create(key, ...args);
|
|
729
|
-
}
|
|
730
|
-
};
|
|
731
|
-
QueueTransportFactory.register("database", (opt) => {
|
|
713
|
+
import_neko_queue2.QueueTransportFactory.register("database", (opt) => {
|
|
732
714
|
let transport = new DatabaseTransport(opt);
|
|
733
715
|
return new import_neko_queue.QueueConnection(transport);
|
|
734
716
|
});
|
|
735
|
-
QueueTransportFactory.register("memory", (opt) => {
|
|
717
|
+
import_neko_queue2.QueueTransportFactory.register("memory", (opt) => {
|
|
736
718
|
let transport = new import_neko_queue2.MemoryTransport(opt);
|
|
737
719
|
return new import_neko_queue.QueueConnection(transport);
|
|
738
720
|
});
|
|
@@ -770,13 +752,13 @@ var init_factories = __esm({
|
|
|
770
752
|
});
|
|
771
753
|
|
|
772
754
|
// src/facades.mts
|
|
773
|
-
var import_neko_scheduler,
|
|
755
|
+
var import_neko_scheduler, import_neko_helper2, import_neko_context2, import_neko_storage2, import_neko_mailer2, import_neko_config, import_clipanion, yup, import_neko_logger, import_neko_cache2, import_neko_queue3, router, scheduler, db, storage, cli, httpServer, logger, mailer, queue, cache;
|
|
774
756
|
var init_facades = __esm({
|
|
775
757
|
"src/facades.mts"() {
|
|
776
758
|
"use strict";
|
|
777
759
|
init_router();
|
|
778
760
|
import_neko_scheduler = require("@devbro/neko-scheduler");
|
|
779
|
-
|
|
761
|
+
import_neko_helper2 = require("@devbro/neko-helper");
|
|
780
762
|
import_neko_context2 = require("@devbro/neko-context");
|
|
781
763
|
import_neko_storage2 = require("@devbro/neko-storage");
|
|
782
764
|
import_neko_mailer2 = require("@devbro/neko-mailer");
|
|
@@ -789,8 +771,8 @@ var init_facades = __esm({
|
|
|
789
771
|
init_factories();
|
|
790
772
|
import_neko_cache2 = require("@devbro/neko-cache");
|
|
791
773
|
import_neko_queue3 = require("@devbro/neko-queue");
|
|
792
|
-
router = (0,
|
|
793
|
-
scheduler = (0,
|
|
774
|
+
router = (0, import_neko_helper2.createSingleton)(() => new Router());
|
|
775
|
+
scheduler = (0, import_neko_helper2.createSingleton)(() => {
|
|
794
776
|
const rc = new import_neko_scheduler.Scheduler();
|
|
795
777
|
rc.setErrorHandler((err, job) => {
|
|
796
778
|
logger().error({
|
|
@@ -802,12 +784,15 @@ var init_facades = __esm({
|
|
|
802
784
|
return rc;
|
|
803
785
|
});
|
|
804
786
|
db = /* @__PURE__ */ __name((label = "default") => (0, import_neko_context2.ctx)().getOrThrow(["database", label]), "db");
|
|
805
|
-
storage = (0,
|
|
787
|
+
storage = (0, import_neko_helper2.createSingleton)((label = "default") => {
|
|
806
788
|
let storage_config = import_neko_config.config.get(["storages", label].join("."));
|
|
807
|
-
const provider = import_neko_storage2.StorageProviderFactory.create(
|
|
789
|
+
const provider = import_neko_storage2.StorageProviderFactory.create(
|
|
790
|
+
storage_config.provider,
|
|
791
|
+
storage_config.config
|
|
792
|
+
);
|
|
808
793
|
return new import_neko_storage2.Storage(provider);
|
|
809
794
|
});
|
|
810
|
-
cli = (0,
|
|
795
|
+
cli = (0, import_neko_helper2.createSingleton)(() => {
|
|
811
796
|
const [node, app, ...args] = process.argv;
|
|
812
797
|
return new import_clipanion.Cli({
|
|
813
798
|
binaryLabel: `My Application`,
|
|
@@ -815,7 +800,7 @@ var init_facades = __esm({
|
|
|
815
800
|
binaryVersion: `1.0.0`
|
|
816
801
|
});
|
|
817
802
|
});
|
|
818
|
-
httpServer = (0,
|
|
803
|
+
httpServer = (0, import_neko_helper2.createSingleton)(() => {
|
|
819
804
|
const server = new http_exports.HttpServer();
|
|
820
805
|
server.setErrorHandler(async (err, req, res) => {
|
|
821
806
|
if (err instanceof http_exports.HttpError) {
|
|
@@ -850,7 +835,7 @@ var init_facades = __esm({
|
|
|
850
835
|
server.setRouter(router());
|
|
851
836
|
return server;
|
|
852
837
|
});
|
|
853
|
-
logger = (0,
|
|
838
|
+
logger = (0, import_neko_helper2.createSingleton)((label) => {
|
|
854
839
|
const logger_config = import_neko_config.config.get(["loggers", label].join("."));
|
|
855
840
|
const rc = new import_neko_logger.Logger(logger_config);
|
|
856
841
|
rc.setExtrasFunction((message) => {
|
|
@@ -859,25 +844,28 @@ var init_facades = __esm({
|
|
|
859
844
|
});
|
|
860
845
|
return rc;
|
|
861
846
|
});
|
|
862
|
-
mailer = (0,
|
|
847
|
+
mailer = (0, import_neko_helper2.createSingleton)((label) => {
|
|
863
848
|
const mailer_config = import_neko_config.config.get(["mailer", label].join("."));
|
|
864
|
-
const provider =
|
|
849
|
+
const provider = import_neko_mailer2.MailerProviderFactory.create(
|
|
865
850
|
mailer_config.provider,
|
|
866
851
|
mailer_config.config
|
|
867
852
|
);
|
|
868
853
|
const rc = new import_neko_mailer2.Mailer(provider);
|
|
869
854
|
return rc;
|
|
870
855
|
});
|
|
871
|
-
queue = (0,
|
|
856
|
+
queue = (0, import_neko_helper2.createSingleton)((label) => {
|
|
872
857
|
const queue_config = import_neko_config.config.get(["queues", label].join("."));
|
|
873
858
|
if (!queue_config) {
|
|
874
859
|
throw new Error(`Queue configuration for '${label}' not found`);
|
|
875
860
|
}
|
|
876
|
-
const provider = QueueTransportFactory.create(
|
|
861
|
+
const provider = import_neko_queue3.QueueTransportFactory.create(
|
|
862
|
+
queue_config.provider,
|
|
863
|
+
queue_config.config
|
|
864
|
+
);
|
|
877
865
|
const rc = new import_neko_queue3.QueueConnection(provider);
|
|
878
866
|
return rc;
|
|
879
867
|
});
|
|
880
|
-
cache = (0,
|
|
868
|
+
cache = (0, import_neko_helper2.createSingleton)((label) => {
|
|
881
869
|
const cache_config = import_neko_config.config.get(["caches", label].join("."));
|
|
882
870
|
if (!cache_config) {
|
|
883
871
|
throw new Error(`Cache configuration for '${label}' not found`);
|
package/dist/bin/middlewares.cjs
CHANGED
|
@@ -455,7 +455,7 @@ var Router = class {
|
|
|
455
455
|
|
|
456
456
|
// src/facades.mts
|
|
457
457
|
var import_neko_scheduler = require("@devbro/neko-scheduler");
|
|
458
|
-
var
|
|
458
|
+
var import_neko_helper2 = require("@devbro/neko-helper");
|
|
459
459
|
var import_neko_context2 = require("@devbro/neko-context");
|
|
460
460
|
var import_neko_storage2 = require("@devbro/neko-storage");
|
|
461
461
|
var import_neko_mailer2 = require("@devbro/neko-mailer");
|
|
@@ -481,11 +481,11 @@ __export(queue_exports, {
|
|
|
481
481
|
DatabaseTransport: () => DatabaseTransport
|
|
482
482
|
});
|
|
483
483
|
__reExport(queue_exports, require("@devbro/neko-queue"));
|
|
484
|
+
var import_neko_helper = require("@devbro/neko-helper");
|
|
484
485
|
var DatabaseTransport = class {
|
|
485
486
|
static {
|
|
486
487
|
__name(this, "DatabaseTransport");
|
|
487
488
|
}
|
|
488
|
-
activeIntervals = /* @__PURE__ */ new Set();
|
|
489
489
|
config = {
|
|
490
490
|
queue_table: "queue_messages",
|
|
491
491
|
db_connection: "default",
|
|
@@ -494,14 +494,48 @@ var DatabaseTransport = class {
|
|
|
494
494
|
message_limit: 10
|
|
495
495
|
// messages per each fetch
|
|
496
496
|
};
|
|
497
|
-
|
|
497
|
+
channels = /* @__PURE__ */ new Map();
|
|
498
|
+
messageQueues = [];
|
|
499
|
+
repeater;
|
|
500
|
+
processMessage = /* @__PURE__ */ __name(async () => {
|
|
501
|
+
const conn = db(this.config.db_connection);
|
|
502
|
+
try {
|
|
503
|
+
await conn.connect();
|
|
504
|
+
let q = conn.getQuery();
|
|
505
|
+
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();
|
|
506
|
+
for (let msg of messages) {
|
|
507
|
+
try {
|
|
508
|
+
let callback = this.channels.get(msg.channel);
|
|
509
|
+
await callback(msg.message);
|
|
510
|
+
await q.table(this.config.queue_table).whereOp("id", "=", msg.id).update({
|
|
511
|
+
status: "processed",
|
|
512
|
+
updated_at: /* @__PURE__ */ new Date(),
|
|
513
|
+
last_tried_at: /* @__PURE__ */ new Date(),
|
|
514
|
+
retried_count: (msg.retried_count || 0) + 1
|
|
515
|
+
});
|
|
516
|
+
} catch (error) {
|
|
517
|
+
await q.table(this.config.queue_table).whereOp("id", "=", msg.id).update({
|
|
518
|
+
status: "failed",
|
|
519
|
+
last_tried_at: /* @__PURE__ */ new Date(),
|
|
520
|
+
retried_count: (msg.retried_count || 0) + 1,
|
|
521
|
+
process_message: error.message || "Error processing message"
|
|
522
|
+
});
|
|
523
|
+
}
|
|
524
|
+
}
|
|
525
|
+
} catch (error) {
|
|
526
|
+
logger().error("Error in DatabaseTransport listen interval:", {
|
|
527
|
+
error
|
|
528
|
+
});
|
|
529
|
+
} finally {
|
|
530
|
+
await conn.disconnect();
|
|
531
|
+
}
|
|
532
|
+
}, "processMessage");
|
|
533
|
+
constructor(config2 = {}) {
|
|
498
534
|
this.config = { ...this.config, ...config2 };
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
setMessageLimit(limit) {
|
|
504
|
-
this.config.message_limit = limit;
|
|
535
|
+
this.repeater = (0, import_neko_helper.createRepeater)(
|
|
536
|
+
this.processMessage,
|
|
537
|
+
this.config.listen_interval * 1e3
|
|
538
|
+
);
|
|
505
539
|
}
|
|
506
540
|
async dispatch(channel, message) {
|
|
507
541
|
const conn = db(this.config.db_connection);
|
|
@@ -519,50 +553,22 @@ var DatabaseTransport = class {
|
|
|
519
553
|
created_at: /* @__PURE__ */ new Date(),
|
|
520
554
|
updated_at: /* @__PURE__ */ new Date(),
|
|
521
555
|
last_tried_at: null,
|
|
522
|
-
process_message: ""
|
|
556
|
+
process_message: "",
|
|
557
|
+
retried_count: 0,
|
|
558
|
+
status: "pending"
|
|
523
559
|
});
|
|
524
560
|
} finally {
|
|
525
561
|
await conn.disconnect();
|
|
526
562
|
}
|
|
527
563
|
}
|
|
528
|
-
async
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
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
|
-
});
|
|
564
|
+
async registerListener(channel, callback) {
|
|
565
|
+
this.channels.set(channel, callback);
|
|
566
|
+
}
|
|
567
|
+
async startListening() {
|
|
568
|
+
this.repeater.start();
|
|
560
569
|
}
|
|
561
570
|
async stopListening() {
|
|
562
|
-
|
|
563
|
-
clearInterval(intervalId);
|
|
564
|
-
}
|
|
565
|
-
this.activeIntervals.clear();
|
|
571
|
+
this.repeater.stop();
|
|
566
572
|
}
|
|
567
573
|
};
|
|
568
574
|
|
|
@@ -585,19 +591,7 @@ var FlexibleFactory = class {
|
|
|
585
591
|
return ctor(...args);
|
|
586
592
|
}
|
|
587
593
|
};
|
|
588
|
-
|
|
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) => {
|
|
594
|
+
import_neko_mailer.MailerProviderFactory.register("logger", (opt) => {
|
|
601
595
|
return new import_neko_mailer.FunctionProvider((mail) => {
|
|
602
596
|
logger().info({
|
|
603
597
|
msg: "Sending email",
|
|
@@ -605,32 +599,20 @@ MailerFactory.register("logger", (opt) => {
|
|
|
605
599
|
});
|
|
606
600
|
});
|
|
607
601
|
});
|
|
608
|
-
|
|
602
|
+
import_neko_mailer.MailerProviderFactory.register("ses", (opt) => {
|
|
609
603
|
return new import_neko_mailer.SESProvider(opt);
|
|
610
604
|
});
|
|
611
|
-
|
|
605
|
+
import_neko_mailer.MailerProviderFactory.register("smtp", (opt) => {
|
|
612
606
|
return new import_neko_mailer.SMTPProvider(opt);
|
|
613
607
|
});
|
|
614
|
-
|
|
608
|
+
import_neko_mailer.MailerProviderFactory.register("memory", (opt) => {
|
|
615
609
|
return new import_neko_mailer.MemoryProvider();
|
|
616
610
|
});
|
|
617
|
-
|
|
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) => {
|
|
611
|
+
import_neko_queue2.QueueTransportFactory.register("database", (opt) => {
|
|
630
612
|
let transport = new DatabaseTransport(opt);
|
|
631
613
|
return new import_neko_queue.QueueConnection(transport);
|
|
632
614
|
});
|
|
633
|
-
QueueTransportFactory.register("memory", (opt) => {
|
|
615
|
+
import_neko_queue2.QueueTransportFactory.register("memory", (opt) => {
|
|
634
616
|
let transport = new import_neko_queue2.MemoryTransport(opt);
|
|
635
617
|
return new import_neko_queue.QueueConnection(transport);
|
|
636
618
|
});
|
|
@@ -668,8 +650,8 @@ import_neko_storage.StorageProviderFactory.register("s3", (opt) => {
|
|
|
668
650
|
// src/facades.mts
|
|
669
651
|
var import_neko_cache2 = require("@devbro/neko-cache");
|
|
670
652
|
var import_neko_queue3 = require("@devbro/neko-queue");
|
|
671
|
-
var router = (0,
|
|
672
|
-
var scheduler = (0,
|
|
653
|
+
var router = (0, import_neko_helper2.createSingleton)(() => new Router());
|
|
654
|
+
var scheduler = (0, import_neko_helper2.createSingleton)(() => {
|
|
673
655
|
const rc = new import_neko_scheduler.Scheduler();
|
|
674
656
|
rc.setErrorHandler((err, job) => {
|
|
675
657
|
logger().error({
|
|
@@ -681,12 +663,15 @@ var scheduler = (0, import_neko_helper.createSingleton)(() => {
|
|
|
681
663
|
return rc;
|
|
682
664
|
});
|
|
683
665
|
var db = /* @__PURE__ */ __name((label = "default") => (0, import_neko_context2.ctx)().getOrThrow(["database", label]), "db");
|
|
684
|
-
var storage = (0,
|
|
666
|
+
var storage = (0, import_neko_helper2.createSingleton)((label = "default") => {
|
|
685
667
|
let storage_config = import_neko_config.config.get(["storages", label].join("."));
|
|
686
|
-
const provider = import_neko_storage2.StorageProviderFactory.create(
|
|
668
|
+
const provider = import_neko_storage2.StorageProviderFactory.create(
|
|
669
|
+
storage_config.provider,
|
|
670
|
+
storage_config.config
|
|
671
|
+
);
|
|
687
672
|
return new import_neko_storage2.Storage(provider);
|
|
688
673
|
});
|
|
689
|
-
var cli = (0,
|
|
674
|
+
var cli = (0, import_neko_helper2.createSingleton)(() => {
|
|
690
675
|
const [node, app, ...args] = process.argv;
|
|
691
676
|
return new import_clipanion.Cli({
|
|
692
677
|
binaryLabel: `My Application`,
|
|
@@ -694,7 +679,7 @@ var cli = (0, import_neko_helper.createSingleton)(() => {
|
|
|
694
679
|
binaryVersion: `1.0.0`
|
|
695
680
|
});
|
|
696
681
|
});
|
|
697
|
-
var httpServer = (0,
|
|
682
|
+
var httpServer = (0, import_neko_helper2.createSingleton)(() => {
|
|
698
683
|
const server = new http_exports.HttpServer();
|
|
699
684
|
server.setErrorHandler(async (err, req, res) => {
|
|
700
685
|
if (err instanceof http_exports.HttpError) {
|
|
@@ -729,7 +714,7 @@ var httpServer = (0, import_neko_helper.createSingleton)(() => {
|
|
|
729
714
|
server.setRouter(router());
|
|
730
715
|
return server;
|
|
731
716
|
});
|
|
732
|
-
var logger = (0,
|
|
717
|
+
var logger = (0, import_neko_helper2.createSingleton)((label) => {
|
|
733
718
|
const logger_config = import_neko_config.config.get(["loggers", label].join("."));
|
|
734
719
|
const rc = new import_neko_logger.Logger(logger_config);
|
|
735
720
|
rc.setExtrasFunction((message) => {
|
|
@@ -738,25 +723,28 @@ var logger = (0, import_neko_helper.createSingleton)((label) => {
|
|
|
738
723
|
});
|
|
739
724
|
return rc;
|
|
740
725
|
});
|
|
741
|
-
var mailer = (0,
|
|
726
|
+
var mailer = (0, import_neko_helper2.createSingleton)((label) => {
|
|
742
727
|
const mailer_config = import_neko_config.config.get(["mailer", label].join("."));
|
|
743
|
-
const provider =
|
|
728
|
+
const provider = import_neko_mailer2.MailerProviderFactory.create(
|
|
744
729
|
mailer_config.provider,
|
|
745
730
|
mailer_config.config
|
|
746
731
|
);
|
|
747
732
|
const rc = new import_neko_mailer2.Mailer(provider);
|
|
748
733
|
return rc;
|
|
749
734
|
});
|
|
750
|
-
var queue = (0,
|
|
735
|
+
var queue = (0, import_neko_helper2.createSingleton)((label) => {
|
|
751
736
|
const queue_config = import_neko_config.config.get(["queues", label].join("."));
|
|
752
737
|
if (!queue_config) {
|
|
753
738
|
throw new Error(`Queue configuration for '${label}' not found`);
|
|
754
739
|
}
|
|
755
|
-
const provider = QueueTransportFactory.create(
|
|
740
|
+
const provider = import_neko_queue3.QueueTransportFactory.create(
|
|
741
|
+
queue_config.provider,
|
|
742
|
+
queue_config.config
|
|
743
|
+
);
|
|
756
744
|
const rc = new import_neko_queue3.QueueConnection(provider);
|
|
757
745
|
return rc;
|
|
758
746
|
});
|
|
759
|
-
var cache = (0,
|
|
747
|
+
var cache = (0, import_neko_helper2.createSingleton)((label) => {
|
|
760
748
|
const cache_config = import_neko_config.config.get(["caches", label].join("."));
|
|
761
749
|
if (!cache_config) {
|
|
762
750
|
throw new Error(`Cache configuration for '${label}' not found`);
|