@devbro/pashmak 0.1.48 → 0.1.49

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.
Files changed (38) hide show
  1. package/dist/DatabaseServiceProvider.d.mts +4 -1
  2. package/dist/DatabaseServiceProvider.mjs +5 -2
  3. package/dist/DatabaseServiceProvider.mjs.map +1 -1
  4. package/dist/app/console/StartCommand.d.mts +1 -0
  5. package/dist/app/console/StartCommand.mjs +5 -2
  6. package/dist/app/console/StartCommand.mjs.map +1 -1
  7. package/dist/app/console/generate/GenerateApiDocsCommand.d.mts +34 -2
  8. package/dist/app/console/generate/GenerateApiDocsCommand.mjs +183 -100
  9. package/dist/app/console/generate/GenerateApiDocsCommand.mjs.map +1 -1
  10. package/dist/app/console/project/base_project/src/config/storages.ts.tpl +2 -2
  11. package/dist/bin/DatabaseServiceProvider.cjs +8 -2
  12. package/dist/bin/app/console/DefaultCommand.cjs +45 -17
  13. package/dist/bin/app/console/KeyGenerateCommand.cjs +45 -17
  14. package/dist/bin/app/console/StartCommand.cjs +50 -19
  15. package/dist/bin/app/console/generate/GenerateApiDocsCommand.cjs +229 -118
  16. package/dist/bin/app/console/generate/GenerateControllerCommand.cjs +45 -17
  17. package/dist/bin/app/console/generate/index.cjs +229 -118
  18. package/dist/bin/app/console/index.cjs +234 -120
  19. package/dist/bin/app/console/migrate/GenerateMigrateCommand.cjs +45 -17
  20. package/dist/bin/app/console/migrate/MigrateCommand.cjs +45 -17
  21. package/dist/bin/app/console/migrate/MigrateRollbackCommand.cjs +45 -17
  22. package/dist/bin/app/console/migrate/index.cjs +45 -17
  23. package/dist/bin/app/console/queue/GenerateQueueMigrateCommand.cjs +45 -17
  24. package/dist/bin/cache.cjs +45 -17
  25. package/dist/bin/facades.cjs +45 -17
  26. package/dist/bin/factories.cjs +45 -17
  27. package/dist/bin/http.cjs +45 -17
  28. package/dist/bin/index.cjs +243 -126
  29. package/dist/bin/middlewares.cjs +45 -17
  30. package/dist/bin/queue.cjs +45 -17
  31. package/dist/bin/router.cjs +3 -5
  32. package/dist/factories.mjs +45 -2
  33. package/dist/factories.mjs.map +1 -1
  34. package/dist/http.mjs +1 -1
  35. package/dist/http.mjs.map +1 -1
  36. package/dist/queue.d.mts +1 -1
  37. package/dist/queue.mjs.map +1 -1
  38. package/package.json +1 -1
@@ -75,6 +75,7 @@ var MiddlewareFactory = class {
75
75
  };
76
76
 
77
77
  // ../neko-router/dist/CompiledRoute.mjs
78
+ var import_neko_helper = require("@devbro/neko-helper");
78
79
  var CompiledRoute = class {
79
80
  static {
80
81
  __name(this, "CompiledRoute");
@@ -95,7 +96,7 @@ var CompiledRoute = class {
95
96
  for (const middleware of [...this.globalMiddlewares, ...this.route.getMiddlewares()]) {
96
97
  if (middleware instanceof Middleware) {
97
98
  this.middlewares.push(middleware);
98
- } else if (this.isClass(middleware)) {
99
+ } else if ((0, import_neko_helper.isClass)(middleware)) {
99
100
  this.middlewares.push(middleware.getInstance({}));
100
101
  } else if (typeof middleware === "function") {
101
102
  this.middlewares.push(MiddlewareFactory.create(middleware));
@@ -104,9 +105,6 @@ var CompiledRoute = class {
104
105
  }
105
106
  }
106
107
  }
107
- isClass(func) {
108
- return typeof func === "function" && /^class\s/.test(Function.prototype.toString.call(func));
109
- }
110
108
  async run() {
111
109
  return await this.runMiddlewares(this.middlewares, this.request, this.response);
112
110
  }
@@ -242,7 +240,7 @@ var Route = class {
242
240
  i = start;
243
241
  } else if (char === "*") {
244
242
  let start = i + 1;
245
- while (start < path2.length && /[a-zA-Z0-9_\.]/.test(path2[start])) {
243
+ while (start < path2.length && /[a-zA-Z0-9_]/.test(path2[start])) {
246
244
  start++;
247
245
  }
248
246
  tokens.push({ type: "WILDCARD", value: path2.slice(i + 1, start) });
@@ -457,7 +455,7 @@ var import_errors = require("@devbro/neko-http/errors");
457
455
 
458
456
  // src/facades.mts
459
457
  var import_neko_scheduler = require("@devbro/neko-scheduler");
460
- var import_neko_helper2 = require("@devbro/neko-helper");
458
+ var import_neko_helper3 = require("@devbro/neko-helper");
461
459
  var import_neko_context3 = require("@devbro/neko-context");
462
460
  var import_neko_storage2 = require("@devbro/neko-storage");
463
461
  var import_neko_mailer2 = require("@devbro/neko-mailer");
@@ -498,7 +496,7 @@ __export(queue_exports, {
498
496
  DatabaseTransport: () => DatabaseTransport
499
497
  });
500
498
  __reExport(queue_exports, require("@devbro/neko-queue"));
501
- var import_neko_helper = require("@devbro/neko-helper");
499
+ var import_neko_helper2 = require("@devbro/neko-helper");
502
500
  var import_neko_context2 = require("@devbro/neko-context");
503
501
  var DatabaseTransport = class {
504
502
  static {
@@ -559,7 +557,7 @@ var DatabaseTransport = class {
559
557
  }, "processMessage");
560
558
  constructor(config2 = {}) {
561
559
  this.config = { ...this.config, ...config2 };
562
- this.repeater = (0, import_neko_helper.createRepeater)(
560
+ this.repeater = (0, import_neko_helper2.createRepeater)(
563
561
  this.processMessage,
564
562
  this.config.listen_interval * 1e3
565
563
  );
@@ -627,6 +625,24 @@ import_neko_queue.QueueTransportFactory.register("database", (opt) => {
627
625
  import_neko_queue.QueueTransportFactory.register("memory", (opt) => {
628
626
  return new import_neko_queue.MemoryTransport(opt);
629
627
  });
628
+ import_neko_queue.QueueTransportFactory.register("sqs", (opt) => {
629
+ return new import_neko_queue.AwsSqsTransport(opt);
630
+ });
631
+ import_neko_queue.QueueTransportFactory.register("amqp", (opt) => {
632
+ return new import_neko_queue.AmqpTransport(opt);
633
+ });
634
+ import_neko_queue.QueueTransportFactory.register("redis", (opt) => {
635
+ return new import_neko_queue.RedisTransport(opt);
636
+ });
637
+ import_neko_queue.QueueTransportFactory.register("async", (opt) => {
638
+ return new import_neko_queue.AsyncTransport();
639
+ });
640
+ import_neko_queue.QueueTransportFactory.register("azure_service_bus", (opt) => {
641
+ return new import_neko_queue.AzureServiceBusTransport(opt);
642
+ });
643
+ import_neko_queue.QueueTransportFactory.register("google_pubsub", (opt) => {
644
+ return new import_neko_queue.GooglePubSubTransport(opt);
645
+ });
630
646
  var CacheProviderFactory = class _CacheProviderFactory {
631
647
  static {
632
648
  __name(this, "CacheProviderFactory");
@@ -657,12 +673,24 @@ import_neko_storage.StorageProviderFactory.register("local", (opt) => {
657
673
  import_neko_storage.StorageProviderFactory.register("s3", (opt) => {
658
674
  return new import_neko_storage.AWSS3StorageProvider(opt);
659
675
  });
676
+ import_neko_storage.StorageProviderFactory.register("gcp", (opt) => {
677
+ return new import_neko_storage.GCPStorageProvider(opt);
678
+ });
679
+ import_neko_storage.StorageProviderFactory.register("azure", (opt) => {
680
+ return new import_neko_storage.AzureBlobStorageProvider(opt);
681
+ });
682
+ import_neko_storage.StorageProviderFactory.register("ftp", (opt) => {
683
+ return new import_neko_storage.FTPStorageProvider(opt);
684
+ });
685
+ import_neko_storage.StorageProviderFactory.register("sftp", (opt) => {
686
+ return new import_neko_storage.SFTPStorageProvider(opt);
687
+ });
660
688
 
661
689
  // src/facades.mts
662
690
  var import_neko_cache2 = require("@devbro/neko-cache");
663
691
  var import_neko_queue2 = require("@devbro/neko-queue");
664
- var router = (0, import_neko_helper2.createSingleton)(() => new Router());
665
- var scheduler = (0, import_neko_helper2.createSingleton)(() => {
692
+ var router = (0, import_neko_helper3.createSingleton)(() => new Router());
693
+ var scheduler = (0, import_neko_helper3.createSingleton)(() => {
666
694
  const rc = new import_neko_scheduler.Scheduler();
667
695
  rc.setErrorHandler((err, job) => {
668
696
  logger().error({
@@ -674,7 +702,7 @@ var scheduler = (0, import_neko_helper2.createSingleton)(() => {
674
702
  return rc;
675
703
  });
676
704
  var db = /* @__PURE__ */ __name((label = "default") => (0, import_neko_context3.ctx)().getOrThrow(["database", label]), "db");
677
- var storage = (0, import_neko_helper2.createSingleton)((label = "default") => {
705
+ var storage = (0, import_neko_helper3.createSingleton)((label = "default") => {
678
706
  let storage_config = import_neko_config.config.get(["storages", label].join("."));
679
707
  const provider = import_neko_storage2.StorageProviderFactory.create(
680
708
  storage_config.provider,
@@ -682,7 +710,7 @@ var storage = (0, import_neko_helper2.createSingleton)((label = "default") => {
682
710
  );
683
711
  return new import_neko_storage2.Storage(provider);
684
712
  });
685
- var cli = (0, import_neko_helper2.createSingleton)(() => {
713
+ var cli = (0, import_neko_helper3.createSingleton)(() => {
686
714
  const [node, app, ...args] = process.argv;
687
715
  return new import_clipanion.Cli({
688
716
  binaryLabel: `My Application`,
@@ -690,13 +718,13 @@ var cli = (0, import_neko_helper2.createSingleton)(() => {
690
718
  binaryVersion: `1.0.0`
691
719
  });
692
720
  });
693
- var httpServer = (0, import_neko_helper2.createSingleton)(() => {
721
+ var httpServer = (0, import_neko_helper3.createSingleton)(() => {
694
722
  const server = new http_exports.HttpServer();
695
723
  server.setErrorHandler(handleHttpErrors);
696
724
  server.setRouter(router());
697
725
  return server;
698
726
  });
699
- var logger = (0, import_neko_helper2.createSingleton)((label) => {
727
+ var logger = (0, import_neko_helper3.createSingleton)((label) => {
700
728
  const logger_config = import_neko_config.config.get(["loggers", label].join("."));
701
729
  const rc = new import_neko_logger.Logger(logger_config);
702
730
  rc.setExtrasFunction((message) => {
@@ -705,7 +733,7 @@ var logger = (0, import_neko_helper2.createSingleton)((label) => {
705
733
  });
706
734
  return rc;
707
735
  });
708
- var mailer = (0, import_neko_helper2.createSingleton)((label) => {
736
+ var mailer = (0, import_neko_helper3.createSingleton)((label) => {
709
737
  const mailer_config = import_neko_config.config.get(["mailer", label].join("."));
710
738
  const provider = import_neko_mailer2.MailerProviderFactory.create(
711
739
  mailer_config.provider,
@@ -714,7 +742,7 @@ var mailer = (0, import_neko_helper2.createSingleton)((label) => {
714
742
  const rc = new import_neko_mailer2.Mailer(provider);
715
743
  return rc;
716
744
  });
717
- var queue = (0, import_neko_helper2.createSingleton)((label) => {
745
+ var queue = (0, import_neko_helper3.createSingleton)((label) => {
718
746
  const queue_config = import_neko_config.config.get(["queues", label].join("."));
719
747
  if (!queue_config) {
720
748
  throw new Error(`Queue configuration for '${label}' not found`);
@@ -725,7 +753,7 @@ var queue = (0, import_neko_helper2.createSingleton)((label) => {
725
753
  );
726
754
  return new import_neko_queue2.QueueConnection(provider);
727
755
  });
728
- var cache = (0, import_neko_helper2.createSingleton)((label) => {
756
+ var cache = (0, import_neko_helper3.createSingleton)((label) => {
729
757
  const cache_config = import_neko_config.config.get(["caches", label].join("."));
730
758
  if (!cache_config) {
731
759
  throw new Error(`Cache configuration for '${label}' not found`);
@@ -78,6 +78,7 @@ var MiddlewareFactory = class {
78
78
  };
79
79
 
80
80
  // ../neko-router/dist/CompiledRoute.mjs
81
+ var import_neko_helper = require("@devbro/neko-helper");
81
82
  var CompiledRoute = class {
82
83
  static {
83
84
  __name(this, "CompiledRoute");
@@ -98,7 +99,7 @@ var CompiledRoute = class {
98
99
  for (const middleware of [...this.globalMiddlewares, ...this.route.getMiddlewares()]) {
99
100
  if (middleware instanceof Middleware) {
100
101
  this.middlewares.push(middleware);
101
- } else if (this.isClass(middleware)) {
102
+ } else if ((0, import_neko_helper.isClass)(middleware)) {
102
103
  this.middlewares.push(middleware.getInstance({}));
103
104
  } else if (typeof middleware === "function") {
104
105
  this.middlewares.push(MiddlewareFactory.create(middleware));
@@ -107,9 +108,6 @@ var CompiledRoute = class {
107
108
  }
108
109
  }
109
110
  }
110
- isClass(func) {
111
- return typeof func === "function" && /^class\s/.test(Function.prototype.toString.call(func));
112
- }
113
111
  async run() {
114
112
  return await this.runMiddlewares(this.middlewares, this.request, this.response);
115
113
  }
@@ -245,7 +243,7 @@ var Route = class {
245
243
  i = start;
246
244
  } else if (char === "*") {
247
245
  let start = i + 1;
248
- while (start < path2.length && /[a-zA-Z0-9_\.]/.test(path2[start])) {
246
+ while (start < path2.length && /[a-zA-Z0-9_]/.test(path2[start])) {
249
247
  start++;
250
248
  }
251
249
  tokens.push({ type: "WILDCARD", value: path2.slice(i + 1, start) });
@@ -456,7 +454,7 @@ var Router = class {
456
454
 
457
455
  // src/facades.mts
458
456
  var import_neko_scheduler = require("@devbro/neko-scheduler");
459
- var import_neko_helper = require("@devbro/neko-helper");
457
+ var import_neko_helper2 = require("@devbro/neko-helper");
460
458
  var import_neko_context2 = require("@devbro/neko-context");
461
459
  var import_neko_storage2 = require("@devbro/neko-storage");
462
460
  var import_neko_mailer2 = require("@devbro/neko-mailer");
@@ -523,6 +521,24 @@ import_neko_queue.QueueTransportFactory.register("database", (opt) => {
523
521
  import_neko_queue.QueueTransportFactory.register("memory", (opt) => {
524
522
  return new import_neko_queue.MemoryTransport(opt);
525
523
  });
524
+ import_neko_queue.QueueTransportFactory.register("sqs", (opt) => {
525
+ return new import_neko_queue.AwsSqsTransport(opt);
526
+ });
527
+ import_neko_queue.QueueTransportFactory.register("amqp", (opt) => {
528
+ return new import_neko_queue.AmqpTransport(opt);
529
+ });
530
+ import_neko_queue.QueueTransportFactory.register("redis", (opt) => {
531
+ return new import_neko_queue.RedisTransport(opt);
532
+ });
533
+ import_neko_queue.QueueTransportFactory.register("async", (opt) => {
534
+ return new import_neko_queue.AsyncTransport();
535
+ });
536
+ import_neko_queue.QueueTransportFactory.register("azure_service_bus", (opt) => {
537
+ return new import_neko_queue.AzureServiceBusTransport(opt);
538
+ });
539
+ import_neko_queue.QueueTransportFactory.register("google_pubsub", (opt) => {
540
+ return new import_neko_queue.GooglePubSubTransport(opt);
541
+ });
526
542
  var CacheProviderFactory = class _CacheProviderFactory {
527
543
  static {
528
544
  __name(this, "CacheProviderFactory");
@@ -553,12 +569,24 @@ import_neko_storage.StorageProviderFactory.register("local", (opt) => {
553
569
  import_neko_storage.StorageProviderFactory.register("s3", (opt) => {
554
570
  return new import_neko_storage.AWSS3StorageProvider(opt);
555
571
  });
572
+ import_neko_storage.StorageProviderFactory.register("gcp", (opt) => {
573
+ return new import_neko_storage.GCPStorageProvider(opt);
574
+ });
575
+ import_neko_storage.StorageProviderFactory.register("azure", (opt) => {
576
+ return new import_neko_storage.AzureBlobStorageProvider(opt);
577
+ });
578
+ import_neko_storage.StorageProviderFactory.register("ftp", (opt) => {
579
+ return new import_neko_storage.FTPStorageProvider(opt);
580
+ });
581
+ import_neko_storage.StorageProviderFactory.register("sftp", (opt) => {
582
+ return new import_neko_storage.SFTPStorageProvider(opt);
583
+ });
556
584
 
557
585
  // src/facades.mts
558
586
  var import_neko_cache2 = require("@devbro/neko-cache");
559
587
  var import_neko_queue2 = require("@devbro/neko-queue");
560
- var router = (0, import_neko_helper.createSingleton)(() => new Router());
561
- var scheduler = (0, import_neko_helper.createSingleton)(() => {
588
+ var router = (0, import_neko_helper2.createSingleton)(() => new Router());
589
+ var scheduler = (0, import_neko_helper2.createSingleton)(() => {
562
590
  const rc = new import_neko_scheduler.Scheduler();
563
591
  rc.setErrorHandler((err, job) => {
564
592
  logger().error({
@@ -570,7 +598,7 @@ var scheduler = (0, import_neko_helper.createSingleton)(() => {
570
598
  return rc;
571
599
  });
572
600
  var db = /* @__PURE__ */ __name((label = "default") => (0, import_neko_context2.ctx)().getOrThrow(["database", label]), "db");
573
- var storage = (0, import_neko_helper.createSingleton)((label = "default") => {
601
+ var storage = (0, import_neko_helper2.createSingleton)((label = "default") => {
574
602
  let storage_config = import_neko_config.config.get(["storages", label].join("."));
575
603
  const provider = import_neko_storage2.StorageProviderFactory.create(
576
604
  storage_config.provider,
@@ -578,7 +606,7 @@ var storage = (0, import_neko_helper.createSingleton)((label = "default") => {
578
606
  );
579
607
  return new import_neko_storage2.Storage(provider);
580
608
  });
581
- var cli = (0, import_neko_helper.createSingleton)(() => {
609
+ var cli = (0, import_neko_helper2.createSingleton)(() => {
582
610
  const [node, app, ...args] = process.argv;
583
611
  return new import_clipanion.Cli({
584
612
  binaryLabel: `My Application`,
@@ -586,13 +614,13 @@ var cli = (0, import_neko_helper.createSingleton)(() => {
586
614
  binaryVersion: `1.0.0`
587
615
  });
588
616
  });
589
- var httpServer = (0, import_neko_helper.createSingleton)(() => {
617
+ var httpServer = (0, import_neko_helper2.createSingleton)(() => {
590
618
  const server = new http_exports.HttpServer();
591
619
  server.setErrorHandler(handleHttpErrors);
592
620
  server.setRouter(router());
593
621
  return server;
594
622
  });
595
- var logger = (0, import_neko_helper.createSingleton)((label) => {
623
+ var logger = (0, import_neko_helper2.createSingleton)((label) => {
596
624
  const logger_config = import_neko_config.config.get(["loggers", label].join("."));
597
625
  const rc = new import_neko_logger.Logger(logger_config);
598
626
  rc.setExtrasFunction((message) => {
@@ -601,7 +629,7 @@ var logger = (0, import_neko_helper.createSingleton)((label) => {
601
629
  });
602
630
  return rc;
603
631
  });
604
- var mailer = (0, import_neko_helper.createSingleton)((label) => {
632
+ var mailer = (0, import_neko_helper2.createSingleton)((label) => {
605
633
  const mailer_config = import_neko_config.config.get(["mailer", label].join("."));
606
634
  const provider = import_neko_mailer2.MailerProviderFactory.create(
607
635
  mailer_config.provider,
@@ -610,7 +638,7 @@ var mailer = (0, import_neko_helper.createSingleton)((label) => {
610
638
  const rc = new import_neko_mailer2.Mailer(provider);
611
639
  return rc;
612
640
  });
613
- var queue = (0, import_neko_helper.createSingleton)((label) => {
641
+ var queue = (0, import_neko_helper2.createSingleton)((label) => {
614
642
  const queue_config = import_neko_config.config.get(["queues", label].join("."));
615
643
  if (!queue_config) {
616
644
  throw new Error(`Queue configuration for '${label}' not found`);
@@ -621,7 +649,7 @@ var queue = (0, import_neko_helper.createSingleton)((label) => {
621
649
  );
622
650
  return new import_neko_queue2.QueueConnection(provider);
623
651
  });
624
- var cache = (0, import_neko_helper.createSingleton)((label) => {
652
+ var cache = (0, import_neko_helper2.createSingleton)((label) => {
625
653
  const cache_config = import_neko_config.config.get(["caches", label].join("."));
626
654
  if (!cache_config) {
627
655
  throw new Error(`Cache configuration for '${label}' not found`);
@@ -634,7 +662,7 @@ var cache = (0, import_neko_helper.createSingleton)((label) => {
634
662
  });
635
663
 
636
664
  // src/queue.mts
637
- var import_neko_helper2 = require("@devbro/neko-helper");
665
+ var import_neko_helper3 = require("@devbro/neko-helper");
638
666
  var import_neko_context3 = require("@devbro/neko-context");
639
667
  var DatabaseTransport = class {
640
668
  static {
@@ -695,7 +723,7 @@ var DatabaseTransport = class {
695
723
  }, "processMessage");
696
724
  constructor(config2 = {}) {
697
725
  this.config = { ...this.config, ...config2 };
698
- this.repeater = (0, import_neko_helper2.createRepeater)(
726
+ this.repeater = (0, import_neko_helper3.createRepeater)(
699
727
  this.processMessage,
700
728
  this.config.listen_interval * 1e3
701
729
  );
@@ -91,6 +91,7 @@ var MiddlewareFactory = class {
91
91
  };
92
92
 
93
93
  // ../neko-router/dist/CompiledRoute.mjs
94
+ var import_neko_helper = require("@devbro/neko-helper");
94
95
  var CompiledRoute = class {
95
96
  static {
96
97
  __name(this, "CompiledRoute");
@@ -111,7 +112,7 @@ var CompiledRoute = class {
111
112
  for (const middleware of [...this.globalMiddlewares, ...this.route.getMiddlewares()]) {
112
113
  if (middleware instanceof Middleware) {
113
114
  this.middlewares.push(middleware);
114
- } else if (this.isClass(middleware)) {
115
+ } else if ((0, import_neko_helper.isClass)(middleware)) {
115
116
  this.middlewares.push(middleware.getInstance({}));
116
117
  } else if (typeof middleware === "function") {
117
118
  this.middlewares.push(MiddlewareFactory.create(middleware));
@@ -120,9 +121,6 @@ var CompiledRoute = class {
120
121
  }
121
122
  }
122
123
  }
123
- isClass(func) {
124
- return typeof func === "function" && /^class\s/.test(Function.prototype.toString.call(func));
125
- }
126
124
  async run() {
127
125
  return await this.runMiddlewares(this.middlewares, this.request, this.response);
128
126
  }
@@ -361,7 +359,7 @@ var Route = class {
361
359
  i = start;
362
360
  } else if (char === "*") {
363
361
  let start = i + 1;
364
- while (start < path2.length && /[a-zA-Z0-9_\.]/.test(path2[start])) {
362
+ while (start < path2.length && /[a-zA-Z0-9_]/.test(path2[start])) {
365
363
  start++;
366
364
  }
367
365
  tokens.push({ type: "WILDCARD", value: path2.slice(i + 1, start) });
@@ -6,7 +6,16 @@ import {
6
6
  MemoryProvider,
7
7
  MailerProviderFactory
8
8
  } from "@devbro/neko-mailer";
9
- import { MemoryTransport, QueueTransportFactory } from "@devbro/neko-queue";
9
+ import {
10
+ MemoryTransport,
11
+ QueueTransportFactory,
12
+ AwsSqsTransport,
13
+ AmqpTransport,
14
+ RedisTransport,
15
+ AsyncTransport,
16
+ AzureServiceBusTransport,
17
+ GooglePubSubTransport
18
+ } from "@devbro/neko-queue";
10
19
  import { DatabaseTransport } from "./queue.mjs";
11
20
  import {
12
21
  MemoryCacheProvider,
@@ -17,7 +26,11 @@ import {
17
26
  import {
18
27
  AWSS3StorageProvider,
19
28
  LocalStorageProvider,
20
- StorageProviderFactory
29
+ StorageProviderFactory,
30
+ GCPStorageProvider,
31
+ AzureBlobStorageProvider,
32
+ FTPStorageProvider,
33
+ SFTPStorageProvider
21
34
  } from "@devbro/neko-storage";
22
35
  class FlexibleFactory {
23
36
  static {
@@ -50,6 +63,24 @@ QueueTransportFactory.register("database", (opt) => {
50
63
  QueueTransportFactory.register("memory", (opt) => {
51
64
  return new MemoryTransport(opt);
52
65
  });
66
+ QueueTransportFactory.register("sqs", (opt) => {
67
+ return new AwsSqsTransport(opt);
68
+ });
69
+ QueueTransportFactory.register("amqp", (opt) => {
70
+ return new AmqpTransport(opt);
71
+ });
72
+ QueueTransportFactory.register("redis", (opt) => {
73
+ return new RedisTransport(opt);
74
+ });
75
+ QueueTransportFactory.register("async", (opt) => {
76
+ return new AsyncTransport();
77
+ });
78
+ QueueTransportFactory.register("azure_service_bus", (opt) => {
79
+ return new AzureServiceBusTransport(opt);
80
+ });
81
+ QueueTransportFactory.register("google_pubsub", (opt) => {
82
+ return new GooglePubSubTransport(opt);
83
+ });
53
84
  class CacheProviderFactory {
54
85
  static {
55
86
  __name(this, "CacheProviderFactory");
@@ -80,6 +111,18 @@ StorageProviderFactory.register("local", (opt) => {
80
111
  StorageProviderFactory.register("s3", (opt) => {
81
112
  return new AWSS3StorageProvider(opt);
82
113
  });
114
+ StorageProviderFactory.register("gcp", (opt) => {
115
+ return new GCPStorageProvider(opt);
116
+ });
117
+ StorageProviderFactory.register("azure", (opt) => {
118
+ return new AzureBlobStorageProvider(opt);
119
+ });
120
+ StorageProviderFactory.register("ftp", (opt) => {
121
+ return new FTPStorageProvider(opt);
122
+ });
123
+ StorageProviderFactory.register("sftp", (opt) => {
124
+ return new SFTPStorageProvider(opt);
125
+ });
83
126
  export {
84
127
  CacheProviderFactory,
85
128
  FlexibleFactory
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/factories.mts"],"sourcesContent":["import {\n SESProvider,\n SMTPProvider,\n MemoryProvider,\n MailerProviderFactory,\n} from \"@devbro/neko-mailer\";\nimport { MemoryTransport, QueueTransportFactory } from \"@devbro/neko-queue\";\nimport { DatabaseTransport } from \"./queue.mjs\";\nimport {\n CacheProviderInterface,\n MemoryCacheProvider,\n RedisCacheProvider,\n FileCacheProvider,\n DisabledCacheProvider,\n} from \"@devbro/neko-cache\";\nimport {\n AWSS3StorageProvider,\n LocalStorageProvider,\n StorageProviderFactory,\n} from \"@devbro/neko-storage\";\n\nexport class FlexibleFactory<T> {\n registry: Map<string, any> = new Map();\n\n register<T>(key: string, ctor: (...args: any[]) => T) {\n this.registry.set(key, ctor);\n }\n\n create<T>(key: string, ...args: any[]): T {\n const ctor = this.registry.get(key);\n if (!ctor) {\n throw new Error(`No factory registered for key: ${key}`);\n }\n return ctor(...args);\n }\n}\n\nMailerProviderFactory.register(\"ses\", (opt) => {\n return new SESProvider(opt);\n});\n\nMailerProviderFactory.register(\"smtp\", (opt) => {\n return new SMTPProvider(opt);\n});\n\nMailerProviderFactory.register(\"memory\", (opt) => {\n return new MemoryProvider();\n});\n\nQueueTransportFactory.register(\"database\", (opt) => {\n return new DatabaseTransport(opt);\n});\n\nQueueTransportFactory.register(\"memory\", (opt) => {\n return new MemoryTransport(opt);\n});\n\n// CACHE\nexport class CacheProviderFactory {\n static instance: FlexibleFactory<CacheProviderInterface> =\n new FlexibleFactory<CacheProviderInterface>();\n\n static register(\n key: string,\n factory: (...args: any[]) => CacheProviderInterface,\n ): void {\n CacheProviderFactory.instance.register(key, factory);\n }\n\n static create<T>(key: string, ...args: any[]): CacheProviderInterface {\n return CacheProviderFactory.instance.create(key, ...args);\n }\n}\n\nCacheProviderFactory.register(\"memory\", (opt) => {\n return new MemoryCacheProvider(opt);\n});\n\nCacheProviderFactory.register(\"redis\", (opt) => {\n return new RedisCacheProvider(opt);\n});\n\nCacheProviderFactory.register(\"file\", (opt) => {\n return new FileCacheProvider(opt);\n});\n\nCacheProviderFactory.register(\"disabled\", (opt) => {\n return new DisabledCacheProvider();\n});\n\nStorageProviderFactory.register(\"local\", (opt) => {\n return new LocalStorageProvider(opt);\n});\n\nStorageProviderFactory.register(\"s3\", (opt) => {\n return new AWSS3StorageProvider(opt);\n});\n"],"mappings":";;AAAA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,iBAAiB,6BAA6B;AACvD,SAAS,yBAAyB;AAClC;AAAA,EAEE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAEA,MAAM,gBAAmB;AAAA,EArBhC,OAqBgC;AAAA;AAAA;AAAA,EAC9B,WAA6B,oBAAI,IAAI;AAAA,EAErC,SAAY,KAAa,MAA6B;AACpD,SAAK,SAAS,IAAI,KAAK,IAAI;AAAA,EAC7B;AAAA,EAEA,OAAU,QAAgB,MAAgB;AACxC,UAAM,OAAO,KAAK,SAAS,IAAI,GAAG;AAClC,QAAI,CAAC,MAAM;AACT,YAAM,IAAI,MAAM,kCAAkC,GAAG,EAAE;AAAA,IACzD;AACA,WAAO,KAAK,GAAG,IAAI;AAAA,EACrB;AACF;AAEA,sBAAsB,SAAS,OAAO,CAAC,QAAQ;AAC7C,SAAO,IAAI,YAAY,GAAG;AAC5B,CAAC;AAED,sBAAsB,SAAS,QAAQ,CAAC,QAAQ;AAC9C,SAAO,IAAI,aAAa,GAAG;AAC7B,CAAC;AAED,sBAAsB,SAAS,UAAU,CAAC,QAAQ;AAChD,SAAO,IAAI,eAAe;AAC5B,CAAC;AAED,sBAAsB,SAAS,YAAY,CAAC,QAAQ;AAClD,SAAO,IAAI,kBAAkB,GAAG;AAClC,CAAC;AAED,sBAAsB,SAAS,UAAU,CAAC,QAAQ;AAChD,SAAO,IAAI,gBAAgB,GAAG;AAChC,CAAC;AAGM,MAAM,qBAAqB;AAAA,EA1DlC,OA0DkC;AAAA;AAAA;AAAA,EAChC,OAAO,WACL,IAAI,gBAAwC;AAAA,EAE9C,OAAO,SACL,KACA,SACM;AACN,yBAAqB,SAAS,SAAS,KAAK,OAAO;AAAA,EACrD;AAAA,EAEA,OAAO,OAAU,QAAgB,MAAqC;AACpE,WAAO,qBAAqB,SAAS,OAAO,KAAK,GAAG,IAAI;AAAA,EAC1D;AACF;AAEA,qBAAqB,SAAS,UAAU,CAAC,QAAQ;AAC/C,SAAO,IAAI,oBAAoB,GAAG;AACpC,CAAC;AAED,qBAAqB,SAAS,SAAS,CAAC,QAAQ;AAC9C,SAAO,IAAI,mBAAmB,GAAG;AACnC,CAAC;AAED,qBAAqB,SAAS,QAAQ,CAAC,QAAQ;AAC7C,SAAO,IAAI,kBAAkB,GAAG;AAClC,CAAC;AAED,qBAAqB,SAAS,YAAY,CAAC,QAAQ;AACjD,SAAO,IAAI,sBAAsB;AACnC,CAAC;AAED,uBAAuB,SAAS,SAAS,CAAC,QAAQ;AAChD,SAAO,IAAI,qBAAqB,GAAG;AACrC,CAAC;AAED,uBAAuB,SAAS,MAAM,CAAC,QAAQ;AAC7C,SAAO,IAAI,qBAAqB,GAAG;AACrC,CAAC;","names":[]}
1
+ {"version":3,"sources":["../src/factories.mts"],"sourcesContent":["import {\n SESProvider,\n SMTPProvider,\n MemoryProvider,\n MailerProviderFactory,\n} from \"@devbro/neko-mailer\";\nimport {\n MemoryTransport,\n QueueTransportFactory,\n AwsSqsTransport,\n AmqpTransport,\n RedisTransport,\n AsyncTransport,\n AzureServiceBusTransport,\n GooglePubSubTransport,\n} from \"@devbro/neko-queue\";\nimport { DatabaseTransport } from \"./queue.mjs\";\nimport {\n CacheProviderInterface,\n MemoryCacheProvider,\n RedisCacheProvider,\n FileCacheProvider,\n DisabledCacheProvider,\n} from \"@devbro/neko-cache\";\nimport {\n AWSS3StorageProvider,\n LocalStorageProvider,\n StorageProviderFactory,\n GCPStorageProvider,\n AzureBlobStorageProvider,\n FTPStorageProvider,\n SFTPStorageProvider,\n} from \"@devbro/neko-storage\";\n\nexport class FlexibleFactory<T> {\n registry: Map<string, any> = new Map();\n\n register<T>(key: string, ctor: (...args: any[]) => T) {\n this.registry.set(key, ctor);\n }\n\n create<T>(key: string, ...args: any[]): T {\n const ctor = this.registry.get(key);\n if (!ctor) {\n throw new Error(`No factory registered for key: ${key}`);\n }\n return ctor(...args);\n }\n}\n\nMailerProviderFactory.register(\"ses\", (opt) => {\n return new SESProvider(opt);\n});\n\nMailerProviderFactory.register(\"smtp\", (opt) => {\n return new SMTPProvider(opt);\n});\n\nMailerProviderFactory.register(\"memory\", (opt) => {\n return new MemoryProvider();\n});\n\n// Queue\n\nQueueTransportFactory.register(\"database\", (opt) => {\n return new DatabaseTransport(opt);\n});\n\nQueueTransportFactory.register(\"memory\", (opt) => {\n return new MemoryTransport(opt);\n});\n\nQueueTransportFactory.register(\"sqs\", (opt) => {\n return new AwsSqsTransport(opt);\n});\n\nQueueTransportFactory.register(\"amqp\", (opt) => {\n return new AmqpTransport(opt);\n});\n\nQueueTransportFactory.register(\"redis\", (opt) => {\n return new RedisTransport(opt);\n});\n\nQueueTransportFactory.register(\"async\", (opt) => {\n return new AsyncTransport();\n});\n\nQueueTransportFactory.register(\"azure_service_bus\", (opt) => {\n return new AzureServiceBusTransport(opt);\n});\n\nQueueTransportFactory.register(\"google_pubsub\", (opt) => {\n return new GooglePubSubTransport(opt);\n});\n\n// CACHE\nexport class CacheProviderFactory {\n static instance: FlexibleFactory<CacheProviderInterface> =\n new FlexibleFactory<CacheProviderInterface>();\n\n static register(\n key: string,\n factory: (...args: any[]) => CacheProviderInterface,\n ): void {\n CacheProviderFactory.instance.register(key, factory);\n }\n\n static create<T>(key: string, ...args: any[]): CacheProviderInterface {\n return CacheProviderFactory.instance.create(key, ...args);\n }\n}\n\nCacheProviderFactory.register(\"memory\", (opt) => {\n return new MemoryCacheProvider(opt);\n});\n\nCacheProviderFactory.register(\"redis\", (opt) => {\n return new RedisCacheProvider(opt);\n});\n\nCacheProviderFactory.register(\"file\", (opt) => {\n return new FileCacheProvider(opt);\n});\n\nCacheProviderFactory.register(\"disabled\", (opt) => {\n return new DisabledCacheProvider();\n});\n\nStorageProviderFactory.register(\"local\", (opt) => {\n return new LocalStorageProvider(opt);\n});\n\nStorageProviderFactory.register(\"s3\", (opt) => {\n return new AWSS3StorageProvider(opt);\n});\n\nStorageProviderFactory.register(\"gcp\", (opt) => {\n return new GCPStorageProvider(opt);\n});\n\nStorageProviderFactory.register(\"azure\", (opt) => {\n return new AzureBlobStorageProvider(opt);\n});\n\nStorageProviderFactory.register(\"ftp\", (opt) => {\n return new FTPStorageProvider(opt);\n});\n\nStorageProviderFactory.register(\"sftp\", (opt) => {\n return new SFTPStorageProvider(opt);\n});\n"],"mappings":"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","names":[]}
package/dist/http.mjs CHANGED
@@ -1,7 +1,7 @@
1
1
  var __defProp = Object.defineProperty;
2
2
  var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
3
  import { HttpError } from "@devbro/neko-http";
4
- import { logger } from "./facades.mts";
4
+ import { logger } from "./facades.mjs";
5
5
  export * from "@devbro/neko-http";
6
6
  async function handleHttpErrors(err, req, res) {
7
7
  if (err instanceof HttpError) {
package/dist/http.mjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/http.mts"],"sourcesContent":["import { HttpError } from \"@devbro/neko-http\";\nimport { logger } from \"./facades.mts\";\n\nexport * from \"@devbro/neko-http\";\n\nexport async function handleHttpErrors(\n err: Error,\n req: any,\n res: any,\n): Promise<void> {\n if (err instanceof HttpError) {\n res.writeHead(err.statusCode, { \"Content-Type\": \"application/json\" });\n res.write(JSON.stringify({ message: err.message, error: err.code }));\n logger().warn({ msg: \"HttpError: \" + err.message, err });\n return;\n } else {\n logger().error({ msg: \"Error: \" + err.message, err });\n }\n res.writeHead(500, { \"Content-Type\": \"application/json\" });\n res.write(JSON.stringify({ error: \"Internal Server Error\" }));\n}\n"],"mappings":";;AAAA,SAAS,iBAAiB;AAC1B,SAAS,cAAc;AAEvB,cAAc;AAEd,eAAsB,iBACpB,KACA,KACA,KACe;AACf,MAAI,eAAe,WAAW;AAC5B,QAAI,UAAU,IAAI,YAAY,EAAE,gBAAgB,mBAAmB,CAAC;AACpE,QAAI,MAAM,KAAK,UAAU,EAAE,SAAS,IAAI,SAAS,OAAO,IAAI,KAAK,CAAC,CAAC;AACnE,WAAO,EAAE,KAAK,EAAE,KAAK,gBAAgB,IAAI,SAAS,IAAI,CAAC;AACvD;AAAA,EACF,OAAO;AACL,WAAO,EAAE,MAAM,EAAE,KAAK,YAAY,IAAI,SAAS,IAAI,CAAC;AAAA,EACtD;AACA,MAAI,UAAU,KAAK,EAAE,gBAAgB,mBAAmB,CAAC;AACzD,MAAI,MAAM,KAAK,UAAU,EAAE,OAAO,wBAAwB,CAAC,CAAC;AAC9D;AAfsB;","names":[]}
1
+ {"version":3,"sources":["../src/http.mts"],"sourcesContent":["import { HttpError } from \"@devbro/neko-http\";\nimport { logger } from \"./facades.mjs\";\n\nexport * from \"@devbro/neko-http\";\n\nexport async function handleHttpErrors(\n err: Error,\n req: any,\n res: any,\n): Promise<void> {\n if (err instanceof HttpError) {\n res.writeHead(err.statusCode, { \"Content-Type\": \"application/json\" });\n res.write(JSON.stringify({ message: err.message, error: err.code }));\n logger().warn({ msg: \"HttpError: \" + err.message, err });\n return;\n } else {\n logger().error({ msg: \"Error: \" + err.message, err });\n }\n res.writeHead(500, { \"Content-Type\": \"application/json\" });\n res.write(JSON.stringify({ error: \"Internal Server Error\" }));\n}\n"],"mappings":";;AAAA,SAAS,iBAAiB;AAC1B,SAAS,cAAc;AAEvB,cAAc;AAEd,eAAsB,iBACpB,KACA,KACA,KACe;AACf,MAAI,eAAe,WAAW;AAC5B,QAAI,UAAU,IAAI,YAAY,EAAE,gBAAgB,mBAAmB,CAAC;AACpE,QAAI,MAAM,KAAK,UAAU,EAAE,SAAS,IAAI,SAAS,OAAO,IAAI,KAAK,CAAC,CAAC;AACnE,WAAO,EAAE,KAAK,EAAE,KAAK,gBAAgB,IAAI,SAAS,IAAI,CAAC;AACvD;AAAA,EACF,OAAO;AACL,WAAO,EAAE,MAAM,EAAE,KAAK,YAAY,IAAI,SAAS,IAAI,CAAC;AAAA,EACtD;AACA,MAAI,UAAU,KAAK,EAAE,gBAAgB,mBAAmB,CAAC;AACzD,MAAI,MAAM,KAAK,UAAU,EAAE,OAAO,wBAAwB,CAAC,CAAC;AAC9D;AAfsB;","names":[]}
package/dist/queue.d.mts CHANGED
@@ -25,4 +25,4 @@ declare class DatabaseTransport implements QueueTransportInterface {
25
25
  stopListening(): Promise<void>;
26
26
  }
27
27
 
28
- export { DatabaseTransport };
28
+ export { DatabaseTransport, type DatabaseTransportConfig };
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/queue.mts"],"sourcesContent":["export * from \"@devbro/neko-queue\";\nimport { QueueTransportInterface } from \"@devbro/neko-queue\";\nimport { Query } from \"@devbro/neko-sql\";\nimport { db, logger } from \"./facades.mjs\";\nimport { createRepeater } from \"@devbro/neko-helper\";\nimport { context_provider } from \"@devbro/neko-context\";\n\ntype DatabaseTransportConfig = {\n queue_table: string;\n db_connection: string;\n listen_interval: number;\n message_limit: number;\n max_retry_count: number;\n};\n\nexport class DatabaseTransport implements QueueTransportInterface {\n private config: DatabaseTransportConfig = {\n queue_table: \"queue_messages\",\n db_connection: \"default\",\n listen_interval: 60, // seconds\n message_limit: 10, // messages per each fetch\n max_retry_count: 5, // maximum retry count for failed messages\n };\n channels = new Map<string, (message: string) => Promise<void>>();\n messageQueues: { channel: string; message: string }[] = [];\n repeater: ReturnType<typeof createRepeater>;\n\n processMessage = async () => {\n await context_provider.run(async () => {\n const conn = db(this.config.db_connection);\n try {\n let q: Query = conn.getQuery();\n let messages = await conn\n .getQuery()\n .table(this.config.queue_table)\n .whereOp(\"channel\", \"in\", Array.from(this.channels.keys()))\n .whereOp(\"status\", \"in\", [\"pending\", \"failed\"])\n .whereOp(\"retried_count\", \"<\", this.config.max_retry_count)\n .limit(this.config.message_limit)\n .orderBy(\"last_tried_at\", \"asc\")\n .get();\n for (let msg of messages) {\n try {\n await conn\n .getQuery()\n .table(this.config.queue_table)\n .whereOp(\"id\", \"=\", msg.id)\n .update({\n status: \"processing\",\n updated_at: new Date(),\n last_tried_at: new Date(),\n retried_count: (msg.retried_count || 0) + 1,\n });\n let callback = this.channels.get(msg.channel)!;\n await callback(msg.message);\n // mark message as processed\n await conn\n .getQuery()\n .table(this.config.queue_table)\n .whereOp(\"id\", \"=\", msg.id)\n .update({\n status: \"processed\",\n updated_at: new Date(),\n });\n } catch (error) {\n logger().error(\"Error processing message:\", {\n error,\n message_id: msg.id,\n channel: msg.channel,\n });\n\n await q\n .table(this.config.queue_table)\n .whereOp(\"id\", \"=\", msg.id)\n .update({\n status: \"failed\",\n updated_at: new Date(),\n process_message:\n (error as Error).message || \"Error processing message\",\n });\n }\n }\n } catch (error) {\n logger().error(\"Error in DatabaseTransport listen interval:\", {\n error,\n });\n }\n });\n };\n\n constructor(config: Partial<DatabaseTransportConfig> = {}) {\n this.config = { ...this.config, ...config };\n this.repeater = createRepeater(\n this.processMessage,\n this.config.listen_interval * 1000,\n );\n }\n\n async dispatch(channel: string, message: string): Promise<void> {\n const conn = db(this.config.db_connection);\n let schema = conn.getSchema();\n if ((await schema.tableExists(this.config.queue_table)) === false) {\n return;\n }\n let q: Query = conn.getQuery();\n await q.table(this.config.queue_table).insert({\n channel: channel,\n message: message,\n created_at: new Date(),\n updated_at: new Date(),\n last_tried_at: null,\n process_message: \"\",\n retried_count: 0,\n status: \"pending\",\n });\n }\n\n async registerListener(\n channel: string,\n callback: (message: string) => Promise<void>,\n ): Promise<void> {\n this.channels.set(channel, callback);\n }\n\n async startListening(): Promise<void> {\n this.repeater.start();\n }\n\n async stopListening(): Promise<void> {\n this.repeater.stop();\n }\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/queue.mts"],"sourcesContent":["export * from \"@devbro/neko-queue\";\nimport { QueueTransportInterface } from \"@devbro/neko-queue\";\nimport { Query } from \"@devbro/neko-sql\";\nimport { db, logger } from \"./facades.mjs\";\nimport { createRepeater } from \"@devbro/neko-helper\";\nimport { context_provider } from \"@devbro/neko-context\";\n\nexport type DatabaseTransportConfig = {\n queue_table: string;\n db_connection: string;\n listen_interval: number;\n message_limit: number;\n max_retry_count: number;\n};\n\nexport class DatabaseTransport implements QueueTransportInterface {\n private config: DatabaseTransportConfig = {\n queue_table: \"queue_messages\",\n db_connection: \"default\",\n listen_interval: 60, // seconds\n message_limit: 10, // messages per each fetch\n max_retry_count: 5, // maximum retry count for failed messages\n };\n channels = new Map<string, (message: string) => Promise<void>>();\n messageQueues: { channel: string; message: string }[] = [];\n repeater: ReturnType<typeof createRepeater>;\n\n processMessage = async () => {\n await context_provider.run(async () => {\n const conn = db(this.config.db_connection);\n try {\n let q: Query = conn.getQuery();\n let messages = await conn\n .getQuery()\n .table(this.config.queue_table)\n .whereOp(\"channel\", \"in\", Array.from(this.channels.keys()))\n .whereOp(\"status\", \"in\", [\"pending\", \"failed\"])\n .whereOp(\"retried_count\", \"<\", this.config.max_retry_count)\n .limit(this.config.message_limit)\n .orderBy(\"last_tried_at\", \"asc\")\n .get();\n for (let msg of messages) {\n try {\n await conn\n .getQuery()\n .table(this.config.queue_table)\n .whereOp(\"id\", \"=\", msg.id)\n .update({\n status: \"processing\",\n updated_at: new Date(),\n last_tried_at: new Date(),\n retried_count: (msg.retried_count || 0) + 1,\n });\n let callback = this.channels.get(msg.channel)!;\n await callback(msg.message);\n // mark message as processed\n await conn\n .getQuery()\n .table(this.config.queue_table)\n .whereOp(\"id\", \"=\", msg.id)\n .update({\n status: \"processed\",\n updated_at: new Date(),\n });\n } catch (error) {\n logger().error(\"Error processing message:\", {\n error,\n message_id: msg.id,\n channel: msg.channel,\n });\n\n await q\n .table(this.config.queue_table)\n .whereOp(\"id\", \"=\", msg.id)\n .update({\n status: \"failed\",\n updated_at: new Date(),\n process_message:\n (error as Error).message || \"Error processing message\",\n });\n }\n }\n } catch (error) {\n logger().error(\"Error in DatabaseTransport listen interval:\", {\n error,\n });\n }\n });\n };\n\n constructor(config: Partial<DatabaseTransportConfig> = {}) {\n this.config = { ...this.config, ...config };\n this.repeater = createRepeater(\n this.processMessage,\n this.config.listen_interval * 1000,\n );\n }\n\n async dispatch(channel: string, message: string): Promise<void> {\n const conn = db(this.config.db_connection);\n let schema = conn.getSchema();\n if ((await schema.tableExists(this.config.queue_table)) === false) {\n return;\n }\n let q: Query = conn.getQuery();\n await q.table(this.config.queue_table).insert({\n channel: channel,\n message: message,\n created_at: new Date(),\n updated_at: new Date(),\n last_tried_at: null,\n process_message: \"\",\n retried_count: 0,\n status: \"pending\",\n });\n }\n\n async registerListener(\n channel: string,\n callback: (message: string) => Promise<void>,\n ): Promise<void> {\n this.channels.set(channel, callback);\n }\n\n async startListening(): Promise<void> {\n this.repeater.start();\n }\n\n async stopListening(): Promise<void> {\n this.repeater.stop();\n }\n}\n"],"mappings":"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","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@devbro/pashmak",
3
- "version": "0.1.48",
3
+ "version": "0.1.49",
4
4
  "description": "testing application for the entire repo",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.mjs",