@devbro/pashmak 0.1.18 → 0.1.19
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/project/base_project/package.json.tpl +1 -1
- package/dist/app/console/project/base_project/src/app/models/index.ts.tpl +1 -0
- package/dist/app/console/project/base_project/src/config/caches.ts.tpl +7 -0
- package/dist/app/console/project/base_project/src/config/databases.ts.tpl +10 -6
- package/dist/app/console/project/base_project/src/config/default.mts.tpl +35 -0
- package/dist/app/console/project/base_project/src/config/loggers.ts.tpl +11 -7
- package/dist/app/console/project/base_project/src/config/mailer.ts.tpl +21 -1
- package/dist/app/console/project/base_project/src/config/queues.ts.tpl +7 -0
- package/dist/app/console/project/base_project/src/config/storages.ts.tpl +8 -4
- package/dist/app/console/project/base_project/tsconfig.json.tpl +7 -4
- package/dist/app/console/queue/queue_migration.tpl +2 -1
- package/dist/bin/app/console/DefaultCommand.cjs +53 -34
- package/dist/bin/app/console/KeyGenerateCommand.cjs +53 -34
- package/dist/bin/app/console/StartCommand.cjs +55 -36
- package/dist/bin/app/console/generate/GenerateControllerCommand.cjs +53 -34
- package/dist/bin/app/console/generate/index.cjs +53 -34
- package/dist/bin/app/console/index.cjs +54 -36
- package/dist/bin/app/console/migrate/GenerateMigrateCommand.cjs +53 -34
- package/dist/bin/app/console/migrate/MigrateCommand.cjs +52 -34
- package/dist/bin/app/console/migrate/MigrateRollbackCommand.cjs +52 -34
- package/dist/bin/app/console/migrate/index.cjs +52 -34
- package/dist/bin/app/console/queue/GenerateQueueMigrateCommand.cjs +53 -34
- package/dist/bin/cache.cjs +53 -34
- package/dist/bin/facades.cjs +52 -34
- package/dist/bin/factories.cjs +58 -39
- package/dist/bin/index.cjs +62 -43
- package/dist/bin/middlewares.cjs +52 -34
- package/dist/bin/queue.cjs +675 -18
- package/dist/facades.d.mts +2 -1
- package/dist/facades.mjs +12 -8
- package/dist/facades.mjs.map +1 -1
- package/dist/factories.d.mts +5 -5
- package/dist/factories.mjs +17 -10
- package/dist/factories.mjs.map +1 -1
- package/dist/queue.d.mts +8 -4
- package/dist/queue.mjs +26 -18
- package/dist/queue.mjs.map +1 -1
- package/package.json +1 -1
- package/dist/app/console/project/base_project/src/app/models/README.md.tpl +0 -1
- package/dist/app/console/project/base_project/src/config/default.ts.tpl +0 -42
|
@@ -1611,7 +1611,7 @@ var Router = class {
|
|
|
1611
1611
|
var import_neko_scheduler = require("@devbro/neko-scheduler");
|
|
1612
1612
|
var import_neko_helper = require("@devbro/neko-helper");
|
|
1613
1613
|
var import_neko_context2 = require("@devbro/neko-context");
|
|
1614
|
-
var
|
|
1614
|
+
var import_neko_storage2 = require("@devbro/neko-storage");
|
|
1615
1615
|
var import_neko_mailer2 = require("@devbro/neko-mailer");
|
|
1616
1616
|
var import_neko_config = require("@devbro/neko-config");
|
|
1617
1617
|
var import_clipanion = require("clipanion");
|
|
@@ -1635,31 +1635,38 @@ __export(queue_exports, {
|
|
|
1635
1635
|
DatabaseTransport: () => DatabaseTransport
|
|
1636
1636
|
});
|
|
1637
1637
|
__reExport(queue_exports, require("@devbro/neko-queue"));
|
|
1638
|
-
var import_neko_sql = require("@devbro/neko-sql");
|
|
1639
1638
|
var DatabaseTransport = class {
|
|
1640
|
-
constructor(db_config) {
|
|
1641
|
-
this.db_config = db_config;
|
|
1642
|
-
}
|
|
1643
1639
|
static {
|
|
1644
1640
|
__name(this, "DatabaseTransport");
|
|
1645
1641
|
}
|
|
1646
|
-
listenInterval = 6e4;
|
|
1647
|
-
// default to 1 minute
|
|
1648
|
-
messageLimit = 100;
|
|
1649
|
-
// default to 100 messages per fetch
|
|
1650
1642
|
activeIntervals = /* @__PURE__ */ new Set();
|
|
1643
|
+
config = {
|
|
1644
|
+
queue_table: "queue_messages",
|
|
1645
|
+
db_connection: "default",
|
|
1646
|
+
listen_interval: 60,
|
|
1647
|
+
// seconds
|
|
1648
|
+
message_limit: 10
|
|
1649
|
+
// messages per each fetch
|
|
1650
|
+
};
|
|
1651
|
+
constructor(config3) {
|
|
1652
|
+
this.config = { ...this.config, ...config3 };
|
|
1653
|
+
}
|
|
1651
1654
|
setListenInterval(interval) {
|
|
1652
|
-
this.
|
|
1655
|
+
this.config.listen_interval = interval;
|
|
1653
1656
|
}
|
|
1654
1657
|
setMessageLimit(limit) {
|
|
1655
|
-
this.
|
|
1658
|
+
this.config.message_limit = limit;
|
|
1656
1659
|
}
|
|
1657
1660
|
async dispatch(channel, message) {
|
|
1658
|
-
const conn =
|
|
1661
|
+
const conn = db(this.config.db_connection);
|
|
1659
1662
|
try {
|
|
1660
1663
|
await conn.connect();
|
|
1664
|
+
let schema = conn.getSchema();
|
|
1665
|
+
if (await schema.tableExists(this.config.queue_table) === false) {
|
|
1666
|
+
return;
|
|
1667
|
+
}
|
|
1661
1668
|
let q = conn.getQuery();
|
|
1662
|
-
await q.table(
|
|
1669
|
+
await q.table(this.config.queue_table).insert({
|
|
1663
1670
|
channel,
|
|
1664
1671
|
message,
|
|
1665
1672
|
processed: false,
|
|
@@ -1675,20 +1682,20 @@ var DatabaseTransport = class {
|
|
|
1675
1682
|
async listen(channel, callback) {
|
|
1676
1683
|
return new Promise(async (resolve, reject) => {
|
|
1677
1684
|
const intervalId = setInterval(async () => {
|
|
1678
|
-
const conn =
|
|
1685
|
+
const conn = db(this.config.db_connection);
|
|
1679
1686
|
try {
|
|
1680
1687
|
await conn.connect();
|
|
1681
1688
|
let q = conn.getQuery();
|
|
1682
|
-
let messages = await q.table(
|
|
1689
|
+
let messages = await q.table(this.config.queue_table).whereOp("channel", "=", channel).whereOp("processed", "=", false).limit(this.config.message_limit).orderBy("last_tried_at", "asc").get();
|
|
1683
1690
|
for (let msg of messages) {
|
|
1684
1691
|
try {
|
|
1685
1692
|
await callback(msg.message);
|
|
1686
|
-
await q.table(
|
|
1693
|
+
await q.table(this.config.queue_table).whereOp("id", "=", msg.id).update({
|
|
1687
1694
|
processed: true,
|
|
1688
1695
|
updated_at: /* @__PURE__ */ new Date()
|
|
1689
1696
|
});
|
|
1690
1697
|
} catch (error) {
|
|
1691
|
-
await q.table(
|
|
1698
|
+
await q.table(this.config.queue_table).whereOp("id", "=", msg.id).update({
|
|
1692
1699
|
processed: false,
|
|
1693
1700
|
last_tried_at: /* @__PURE__ */ new Date(),
|
|
1694
1701
|
process_message: error.message || "Error processing message"
|
|
@@ -1697,11 +1704,11 @@ var DatabaseTransport = class {
|
|
|
1697
1704
|
}
|
|
1698
1705
|
} catch (error) {
|
|
1699
1706
|
this.activeIntervals.delete(intervalId);
|
|
1700
|
-
|
|
1707
|
+
logger().error("Error in DatabaseTransport listen interval:", { error });
|
|
1701
1708
|
} finally {
|
|
1702
1709
|
await conn.disconnect();
|
|
1703
1710
|
}
|
|
1704
|
-
}, this.
|
|
1711
|
+
}, this.config.listen_interval * 1e3);
|
|
1705
1712
|
this.activeIntervals.add(intervalId);
|
|
1706
1713
|
});
|
|
1707
1714
|
}
|
|
@@ -1715,6 +1722,7 @@ var DatabaseTransport = class {
|
|
|
1715
1722
|
|
|
1716
1723
|
// src/factories.mts
|
|
1717
1724
|
var import_neko_cache = require("@devbro/neko-cache");
|
|
1725
|
+
var import_neko_storage = require("@devbro/neko-storage");
|
|
1718
1726
|
var FlexibleFactory = class {
|
|
1719
1727
|
static {
|
|
1720
1728
|
__name(this, "FlexibleFactory");
|
|
@@ -1751,32 +1759,32 @@ MailerFactory.register("logger", (opt) => {
|
|
|
1751
1759
|
});
|
|
1752
1760
|
});
|
|
1753
1761
|
});
|
|
1754
|
-
MailerFactory.register("
|
|
1762
|
+
MailerFactory.register("ses", (opt) => {
|
|
1755
1763
|
return new import_neko_mailer.SESProvider(opt);
|
|
1756
1764
|
});
|
|
1757
|
-
MailerFactory.register("
|
|
1765
|
+
MailerFactory.register("smtp", (opt) => {
|
|
1758
1766
|
return new import_neko_mailer.SMTPProvider(opt);
|
|
1759
1767
|
});
|
|
1760
|
-
MailerFactory.register("
|
|
1768
|
+
MailerFactory.register("memory", (opt) => {
|
|
1761
1769
|
return new import_neko_mailer.MemoryProvider();
|
|
1762
1770
|
});
|
|
1763
|
-
var
|
|
1771
|
+
var QueueTransportFactory = class _QueueTransportFactory {
|
|
1764
1772
|
static {
|
|
1765
|
-
__name(this, "
|
|
1773
|
+
__name(this, "QueueTransportFactory");
|
|
1766
1774
|
}
|
|
1767
1775
|
static instance = new FlexibleFactory();
|
|
1768
1776
|
static register(key, factory) {
|
|
1769
|
-
|
|
1777
|
+
_QueueTransportFactory.instance.register(key, factory);
|
|
1770
1778
|
}
|
|
1771
1779
|
static create(key, ...args) {
|
|
1772
|
-
return
|
|
1780
|
+
return _QueueTransportFactory.instance.create(key, ...args);
|
|
1773
1781
|
}
|
|
1774
1782
|
};
|
|
1775
|
-
|
|
1783
|
+
QueueTransportFactory.register("database", (opt) => {
|
|
1776
1784
|
let transport = new DatabaseTransport(opt);
|
|
1777
1785
|
return new import_neko_queue.QueueConnection(transport);
|
|
1778
1786
|
});
|
|
1779
|
-
|
|
1787
|
+
QueueTransportFactory.register("memory", (opt) => {
|
|
1780
1788
|
let transport = new import_neko_queue2.MemoryTransport(opt);
|
|
1781
1789
|
return new import_neko_queue.QueueConnection(transport);
|
|
1782
1790
|
});
|
|
@@ -1804,9 +1812,16 @@ CacheProviderFactory.register("file", (opt) => {
|
|
|
1804
1812
|
CacheProviderFactory.register("disabled", (opt) => {
|
|
1805
1813
|
return new import_neko_cache.DisabledCacheProvider();
|
|
1806
1814
|
});
|
|
1815
|
+
import_neko_storage.StorageProviderFactory.register("local", (opt) => {
|
|
1816
|
+
return new import_neko_storage.LocalStorageProvider(opt);
|
|
1817
|
+
});
|
|
1818
|
+
import_neko_storage.StorageProviderFactory.register("s3", (opt) => {
|
|
1819
|
+
return new import_neko_storage.AWSS3StorageProvider(opt);
|
|
1820
|
+
});
|
|
1807
1821
|
|
|
1808
1822
|
// src/facades.mts
|
|
1809
1823
|
var import_neko_cache2 = require("@devbro/neko-cache");
|
|
1824
|
+
var import_neko_queue3 = require("@devbro/neko-queue");
|
|
1810
1825
|
var router = (0, import_neko_helper.createSingleton)(() => new Router());
|
|
1811
1826
|
var scheduler = (0, import_neko_helper.createSingleton)(() => {
|
|
1812
1827
|
const rc = new import_neko_scheduler.Scheduler();
|
|
@@ -1820,9 +1835,11 @@ var scheduler = (0, import_neko_helper.createSingleton)(() => {
|
|
|
1820
1835
|
return rc;
|
|
1821
1836
|
});
|
|
1822
1837
|
var db = /* @__PURE__ */ __name((label = "default") => (0, import_neko_context2.ctx)().getOrThrow(["database", label]), "db");
|
|
1823
|
-
var storage = (0, import_neko_helper.createSingleton)(
|
|
1824
|
-
|
|
1825
|
-
);
|
|
1838
|
+
var storage = (0, import_neko_helper.createSingleton)((label = "default") => {
|
|
1839
|
+
let storage_config = import_neko_config.config.get(["storages", label].join("."));
|
|
1840
|
+
const provider = import_neko_storage2.StorageProviderFactory.create(storage_config.provider, storage_config.config);
|
|
1841
|
+
return new import_neko_storage2.Storage(provider);
|
|
1842
|
+
});
|
|
1826
1843
|
var cli = (0, import_neko_helper.createSingleton)(() => {
|
|
1827
1844
|
const [node, app, ...args] = process.argv;
|
|
1828
1845
|
return new import_clipanion.Cli({
|
|
@@ -1877,7 +1894,7 @@ var logger = (0, import_neko_helper.createSingleton)((label) => {
|
|
|
1877
1894
|
});
|
|
1878
1895
|
var mailer = (0, import_neko_helper.createSingleton)((label) => {
|
|
1879
1896
|
const mailer_config = import_neko_config.config.get(["mailer", label].join("."));
|
|
1880
|
-
|
|
1897
|
+
const provider = MailerFactory.create(
|
|
1881
1898
|
mailer_config.provider,
|
|
1882
1899
|
mailer_config.config
|
|
1883
1900
|
);
|
|
@@ -1889,7 +1906,8 @@ var queue = (0, import_neko_helper.createSingleton)((label) => {
|
|
|
1889
1906
|
if (!queue_config) {
|
|
1890
1907
|
throw new Error(`Queue configuration for '${label}' not found`);
|
|
1891
1908
|
}
|
|
1892
|
-
const
|
|
1909
|
+
const provider = QueueTransportFactory.create(queue_config.provider, queue_config.config);
|
|
1910
|
+
const rc = new import_neko_queue3.QueueConnection(provider);
|
|
1893
1911
|
return rc;
|
|
1894
1912
|
});
|
|
1895
1913
|
var cache = (0, import_neko_helper.createSingleton)((label) => {
|
|
@@ -1898,7 +1916,7 @@ var cache = (0, import_neko_helper.createSingleton)((label) => {
|
|
|
1898
1916
|
throw new Error(`Cache configuration for '${label}' not found`);
|
|
1899
1917
|
}
|
|
1900
1918
|
const provider = CacheProviderFactory.create(
|
|
1901
|
-
cache_config.
|
|
1919
|
+
cache_config.provider,
|
|
1902
1920
|
cache_config.config
|
|
1903
1921
|
);
|
|
1904
1922
|
return new import_neko_cache2.Cache(provider);
|
|
@@ -1613,7 +1613,7 @@ var Router = class {
|
|
|
1613
1613
|
var import_neko_scheduler = require("@devbro/neko-scheduler");
|
|
1614
1614
|
var import_neko_helper = require("@devbro/neko-helper");
|
|
1615
1615
|
var import_neko_context2 = require("@devbro/neko-context");
|
|
1616
|
-
var
|
|
1616
|
+
var import_neko_storage2 = require("@devbro/neko-storage");
|
|
1617
1617
|
var import_neko_mailer2 = require("@devbro/neko-mailer");
|
|
1618
1618
|
var import_neko_config = require("@devbro/neko-config");
|
|
1619
1619
|
var import_clipanion = require("clipanion");
|
|
@@ -1637,31 +1637,38 @@ __export(queue_exports, {
|
|
|
1637
1637
|
DatabaseTransport: () => DatabaseTransport
|
|
1638
1638
|
});
|
|
1639
1639
|
__reExport(queue_exports, require("@devbro/neko-queue"));
|
|
1640
|
-
var import_neko_sql = require("@devbro/neko-sql");
|
|
1641
1640
|
var DatabaseTransport = class {
|
|
1642
|
-
constructor(db_config) {
|
|
1643
|
-
this.db_config = db_config;
|
|
1644
|
-
}
|
|
1645
1641
|
static {
|
|
1646
1642
|
__name(this, "DatabaseTransport");
|
|
1647
1643
|
}
|
|
1648
|
-
listenInterval = 6e4;
|
|
1649
|
-
// default to 1 minute
|
|
1650
|
-
messageLimit = 100;
|
|
1651
|
-
// default to 100 messages per fetch
|
|
1652
1644
|
activeIntervals = /* @__PURE__ */ new Set();
|
|
1645
|
+
config = {
|
|
1646
|
+
queue_table: "queue_messages",
|
|
1647
|
+
db_connection: "default",
|
|
1648
|
+
listen_interval: 60,
|
|
1649
|
+
// seconds
|
|
1650
|
+
message_limit: 10
|
|
1651
|
+
// messages per each fetch
|
|
1652
|
+
};
|
|
1653
|
+
constructor(config5) {
|
|
1654
|
+
this.config = { ...this.config, ...config5 };
|
|
1655
|
+
}
|
|
1653
1656
|
setListenInterval(interval) {
|
|
1654
|
-
this.
|
|
1657
|
+
this.config.listen_interval = interval;
|
|
1655
1658
|
}
|
|
1656
1659
|
setMessageLimit(limit) {
|
|
1657
|
-
this.
|
|
1660
|
+
this.config.message_limit = limit;
|
|
1658
1661
|
}
|
|
1659
1662
|
async dispatch(channel, message) {
|
|
1660
|
-
const conn =
|
|
1663
|
+
const conn = db(this.config.db_connection);
|
|
1661
1664
|
try {
|
|
1662
1665
|
await conn.connect();
|
|
1666
|
+
let schema = conn.getSchema();
|
|
1667
|
+
if (await schema.tableExists(this.config.queue_table) === false) {
|
|
1668
|
+
return;
|
|
1669
|
+
}
|
|
1663
1670
|
let q = conn.getQuery();
|
|
1664
|
-
await q.table(
|
|
1671
|
+
await q.table(this.config.queue_table).insert({
|
|
1665
1672
|
channel,
|
|
1666
1673
|
message,
|
|
1667
1674
|
processed: false,
|
|
@@ -1677,20 +1684,20 @@ var DatabaseTransport = class {
|
|
|
1677
1684
|
async listen(channel, callback) {
|
|
1678
1685
|
return new Promise(async (resolve, reject) => {
|
|
1679
1686
|
const intervalId = setInterval(async () => {
|
|
1680
|
-
const conn =
|
|
1687
|
+
const conn = db(this.config.db_connection);
|
|
1681
1688
|
try {
|
|
1682
1689
|
await conn.connect();
|
|
1683
1690
|
let q = conn.getQuery();
|
|
1684
|
-
let messages = await q.table(
|
|
1691
|
+
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();
|
|
1685
1692
|
for (let msg of messages) {
|
|
1686
1693
|
try {
|
|
1687
1694
|
await callback(msg.message);
|
|
1688
|
-
await q.table(
|
|
1695
|
+
await q.table(this.config.queue_table).whereOp("id", "=", msg.id).update({
|
|
1689
1696
|
processed: true,
|
|
1690
1697
|
updated_at: /* @__PURE__ */ new Date()
|
|
1691
1698
|
});
|
|
1692
1699
|
} catch (error) {
|
|
1693
|
-
await q.table(
|
|
1700
|
+
await q.table(this.config.queue_table).whereOp("id", "=", msg.id).update({
|
|
1694
1701
|
processed: false,
|
|
1695
1702
|
last_tried_at: /* @__PURE__ */ new Date(),
|
|
1696
1703
|
process_message: error.message || "Error processing message"
|
|
@@ -1699,11 +1706,11 @@ var DatabaseTransport = class {
|
|
|
1699
1706
|
}
|
|
1700
1707
|
} catch (error) {
|
|
1701
1708
|
this.activeIntervals.delete(intervalId);
|
|
1702
|
-
|
|
1709
|
+
logger().error("Error in DatabaseTransport listen interval:", { error });
|
|
1703
1710
|
} finally {
|
|
1704
1711
|
await conn.disconnect();
|
|
1705
1712
|
}
|
|
1706
|
-
}, this.
|
|
1713
|
+
}, this.config.listen_interval * 1e3);
|
|
1707
1714
|
this.activeIntervals.add(intervalId);
|
|
1708
1715
|
});
|
|
1709
1716
|
}
|
|
@@ -1717,6 +1724,7 @@ var DatabaseTransport = class {
|
|
|
1717
1724
|
|
|
1718
1725
|
// src/factories.mts
|
|
1719
1726
|
var import_neko_cache = require("@devbro/neko-cache");
|
|
1727
|
+
var import_neko_storage = require("@devbro/neko-storage");
|
|
1720
1728
|
var FlexibleFactory = class {
|
|
1721
1729
|
static {
|
|
1722
1730
|
__name(this, "FlexibleFactory");
|
|
@@ -1753,32 +1761,32 @@ MailerFactory.register("logger", (opt) => {
|
|
|
1753
1761
|
});
|
|
1754
1762
|
});
|
|
1755
1763
|
});
|
|
1756
|
-
MailerFactory.register("
|
|
1764
|
+
MailerFactory.register("ses", (opt) => {
|
|
1757
1765
|
return new import_neko_mailer.SESProvider(opt);
|
|
1758
1766
|
});
|
|
1759
|
-
MailerFactory.register("
|
|
1767
|
+
MailerFactory.register("smtp", (opt) => {
|
|
1760
1768
|
return new import_neko_mailer.SMTPProvider(opt);
|
|
1761
1769
|
});
|
|
1762
|
-
MailerFactory.register("
|
|
1770
|
+
MailerFactory.register("memory", (opt) => {
|
|
1763
1771
|
return new import_neko_mailer.MemoryProvider();
|
|
1764
1772
|
});
|
|
1765
|
-
var
|
|
1773
|
+
var QueueTransportFactory = class _QueueTransportFactory {
|
|
1766
1774
|
static {
|
|
1767
|
-
__name(this, "
|
|
1775
|
+
__name(this, "QueueTransportFactory");
|
|
1768
1776
|
}
|
|
1769
1777
|
static instance = new FlexibleFactory();
|
|
1770
1778
|
static register(key, factory) {
|
|
1771
|
-
|
|
1779
|
+
_QueueTransportFactory.instance.register(key, factory);
|
|
1772
1780
|
}
|
|
1773
1781
|
static create(key, ...args) {
|
|
1774
|
-
return
|
|
1782
|
+
return _QueueTransportFactory.instance.create(key, ...args);
|
|
1775
1783
|
}
|
|
1776
1784
|
};
|
|
1777
|
-
|
|
1785
|
+
QueueTransportFactory.register("database", (opt) => {
|
|
1778
1786
|
let transport = new DatabaseTransport(opt);
|
|
1779
1787
|
return new import_neko_queue.QueueConnection(transport);
|
|
1780
1788
|
});
|
|
1781
|
-
|
|
1789
|
+
QueueTransportFactory.register("memory", (opt) => {
|
|
1782
1790
|
let transport = new import_neko_queue2.MemoryTransport(opt);
|
|
1783
1791
|
return new import_neko_queue.QueueConnection(transport);
|
|
1784
1792
|
});
|
|
@@ -1806,9 +1814,16 @@ CacheProviderFactory.register("file", (opt) => {
|
|
|
1806
1814
|
CacheProviderFactory.register("disabled", (opt) => {
|
|
1807
1815
|
return new import_neko_cache.DisabledCacheProvider();
|
|
1808
1816
|
});
|
|
1817
|
+
import_neko_storage.StorageProviderFactory.register("local", (opt) => {
|
|
1818
|
+
return new import_neko_storage.LocalStorageProvider(opt);
|
|
1819
|
+
});
|
|
1820
|
+
import_neko_storage.StorageProviderFactory.register("s3", (opt) => {
|
|
1821
|
+
return new import_neko_storage.AWSS3StorageProvider(opt);
|
|
1822
|
+
});
|
|
1809
1823
|
|
|
1810
1824
|
// src/facades.mts
|
|
1811
1825
|
var import_neko_cache2 = require("@devbro/neko-cache");
|
|
1826
|
+
var import_neko_queue3 = require("@devbro/neko-queue");
|
|
1812
1827
|
var router = (0, import_neko_helper.createSingleton)(() => new Router());
|
|
1813
1828
|
var scheduler = (0, import_neko_helper.createSingleton)(() => {
|
|
1814
1829
|
const rc = new import_neko_scheduler.Scheduler();
|
|
@@ -1822,9 +1837,11 @@ var scheduler = (0, import_neko_helper.createSingleton)(() => {
|
|
|
1822
1837
|
return rc;
|
|
1823
1838
|
});
|
|
1824
1839
|
var db = /* @__PURE__ */ __name((label = "default") => (0, import_neko_context2.ctx)().getOrThrow(["database", label]), "db");
|
|
1825
|
-
var storage = (0, import_neko_helper.createSingleton)(
|
|
1826
|
-
|
|
1827
|
-
);
|
|
1840
|
+
var storage = (0, import_neko_helper.createSingleton)((label = "default") => {
|
|
1841
|
+
let storage_config = import_neko_config.config.get(["storages", label].join("."));
|
|
1842
|
+
const provider = import_neko_storage2.StorageProviderFactory.create(storage_config.provider, storage_config.config);
|
|
1843
|
+
return new import_neko_storage2.Storage(provider);
|
|
1844
|
+
});
|
|
1828
1845
|
var cli = (0, import_neko_helper.createSingleton)(() => {
|
|
1829
1846
|
const [node, app, ...args] = process.argv;
|
|
1830
1847
|
return new import_clipanion.Cli({
|
|
@@ -1879,7 +1896,7 @@ var logger = (0, import_neko_helper.createSingleton)((label) => {
|
|
|
1879
1896
|
});
|
|
1880
1897
|
var mailer = (0, import_neko_helper.createSingleton)((label) => {
|
|
1881
1898
|
const mailer_config = import_neko_config.config.get(["mailer", label].join("."));
|
|
1882
|
-
|
|
1899
|
+
const provider = MailerFactory.create(
|
|
1883
1900
|
mailer_config.provider,
|
|
1884
1901
|
mailer_config.config
|
|
1885
1902
|
);
|
|
@@ -1891,7 +1908,8 @@ var queue = (0, import_neko_helper.createSingleton)((label) => {
|
|
|
1891
1908
|
if (!queue_config) {
|
|
1892
1909
|
throw new Error(`Queue configuration for '${label}' not found`);
|
|
1893
1910
|
}
|
|
1894
|
-
const
|
|
1911
|
+
const provider = QueueTransportFactory.create(queue_config.provider, queue_config.config);
|
|
1912
|
+
const rc = new import_neko_queue3.QueueConnection(provider);
|
|
1895
1913
|
return rc;
|
|
1896
1914
|
});
|
|
1897
1915
|
var cache = (0, import_neko_helper.createSingleton)((label) => {
|
|
@@ -1900,7 +1918,7 @@ var cache = (0, import_neko_helper.createSingleton)((label) => {
|
|
|
1900
1918
|
throw new Error(`Cache configuration for '${label}' not found`);
|
|
1901
1919
|
}
|
|
1902
1920
|
const provider = CacheProviderFactory.create(
|
|
1903
|
-
cache_config.
|
|
1921
|
+
cache_config.provider,
|
|
1904
1922
|
cache_config.config
|
|
1905
1923
|
);
|
|
1906
1924
|
return new import_neko_cache2.Cache(provider);
|
|
@@ -456,7 +456,7 @@ var Router = class {
|
|
|
456
456
|
var import_neko_scheduler = require("@devbro/neko-scheduler");
|
|
457
457
|
var import_neko_helper = require("@devbro/neko-helper");
|
|
458
458
|
var import_neko_context2 = require("@devbro/neko-context");
|
|
459
|
-
var
|
|
459
|
+
var import_neko_storage2 = require("@devbro/neko-storage");
|
|
460
460
|
var import_neko_mailer2 = require("@devbro/neko-mailer");
|
|
461
461
|
var import_neko_config = require("@devbro/neko-config");
|
|
462
462
|
var import_clipanion = require("clipanion");
|
|
@@ -480,31 +480,38 @@ __export(queue_exports, {
|
|
|
480
480
|
DatabaseTransport: () => DatabaseTransport
|
|
481
481
|
});
|
|
482
482
|
__reExport(queue_exports, require("@devbro/neko-queue"));
|
|
483
|
-
var import_neko_sql = require("@devbro/neko-sql");
|
|
484
483
|
var DatabaseTransport = class {
|
|
485
|
-
constructor(db_config) {
|
|
486
|
-
this.db_config = db_config;
|
|
487
|
-
}
|
|
488
484
|
static {
|
|
489
485
|
__name(this, "DatabaseTransport");
|
|
490
486
|
}
|
|
491
|
-
listenInterval = 6e4;
|
|
492
|
-
// default to 1 minute
|
|
493
|
-
messageLimit = 100;
|
|
494
|
-
// default to 100 messages per fetch
|
|
495
487
|
activeIntervals = /* @__PURE__ */ new Set();
|
|
488
|
+
config = {
|
|
489
|
+
queue_table: "queue_messages",
|
|
490
|
+
db_connection: "default",
|
|
491
|
+
listen_interval: 60,
|
|
492
|
+
// seconds
|
|
493
|
+
message_limit: 10
|
|
494
|
+
// messages per each fetch
|
|
495
|
+
};
|
|
496
|
+
constructor(config3) {
|
|
497
|
+
this.config = { ...this.config, ...config3 };
|
|
498
|
+
}
|
|
496
499
|
setListenInterval(interval) {
|
|
497
|
-
this.
|
|
500
|
+
this.config.listen_interval = interval;
|
|
498
501
|
}
|
|
499
502
|
setMessageLimit(limit) {
|
|
500
|
-
this.
|
|
503
|
+
this.config.message_limit = limit;
|
|
501
504
|
}
|
|
502
505
|
async dispatch(channel, message) {
|
|
503
|
-
const conn =
|
|
506
|
+
const conn = db(this.config.db_connection);
|
|
504
507
|
try {
|
|
505
508
|
await conn.connect();
|
|
509
|
+
let schema = conn.getSchema();
|
|
510
|
+
if (await schema.tableExists(this.config.queue_table) === false) {
|
|
511
|
+
return;
|
|
512
|
+
}
|
|
506
513
|
let q = conn.getQuery();
|
|
507
|
-
await q.table(
|
|
514
|
+
await q.table(this.config.queue_table).insert({
|
|
508
515
|
channel,
|
|
509
516
|
message,
|
|
510
517
|
processed: false,
|
|
@@ -520,20 +527,20 @@ var DatabaseTransport = class {
|
|
|
520
527
|
async listen(channel, callback) {
|
|
521
528
|
return new Promise(async (resolve, reject) => {
|
|
522
529
|
const intervalId = setInterval(async () => {
|
|
523
|
-
const conn =
|
|
530
|
+
const conn = db(this.config.db_connection);
|
|
524
531
|
try {
|
|
525
532
|
await conn.connect();
|
|
526
533
|
let q = conn.getQuery();
|
|
527
|
-
let messages = await q.table(
|
|
534
|
+
let messages = await q.table(this.config.queue_table).whereOp("channel", "=", channel).whereOp("processed", "=", false).limit(this.config.message_limit).orderBy("last_tried_at", "asc").get();
|
|
528
535
|
for (let msg of messages) {
|
|
529
536
|
try {
|
|
530
537
|
await callback(msg.message);
|
|
531
|
-
await q.table(
|
|
538
|
+
await q.table(this.config.queue_table).whereOp("id", "=", msg.id).update({
|
|
532
539
|
processed: true,
|
|
533
540
|
updated_at: /* @__PURE__ */ new Date()
|
|
534
541
|
});
|
|
535
542
|
} catch (error) {
|
|
536
|
-
await q.table(
|
|
543
|
+
await q.table(this.config.queue_table).whereOp("id", "=", msg.id).update({
|
|
537
544
|
processed: false,
|
|
538
545
|
last_tried_at: /* @__PURE__ */ new Date(),
|
|
539
546
|
process_message: error.message || "Error processing message"
|
|
@@ -542,11 +549,11 @@ var DatabaseTransport = class {
|
|
|
542
549
|
}
|
|
543
550
|
} catch (error) {
|
|
544
551
|
this.activeIntervals.delete(intervalId);
|
|
545
|
-
|
|
552
|
+
logger().error("Error in DatabaseTransport listen interval:", { error });
|
|
546
553
|
} finally {
|
|
547
554
|
await conn.disconnect();
|
|
548
555
|
}
|
|
549
|
-
}, this.
|
|
556
|
+
}, this.config.listen_interval * 1e3);
|
|
550
557
|
this.activeIntervals.add(intervalId);
|
|
551
558
|
});
|
|
552
559
|
}
|
|
@@ -560,6 +567,7 @@ var DatabaseTransport = class {
|
|
|
560
567
|
|
|
561
568
|
// src/factories.mts
|
|
562
569
|
var import_neko_cache = require("@devbro/neko-cache");
|
|
570
|
+
var import_neko_storage = require("@devbro/neko-storage");
|
|
563
571
|
var FlexibleFactory = class {
|
|
564
572
|
static {
|
|
565
573
|
__name(this, "FlexibleFactory");
|
|
@@ -596,32 +604,32 @@ MailerFactory.register("logger", (opt) => {
|
|
|
596
604
|
});
|
|
597
605
|
});
|
|
598
606
|
});
|
|
599
|
-
MailerFactory.register("
|
|
607
|
+
MailerFactory.register("ses", (opt) => {
|
|
600
608
|
return new import_neko_mailer.SESProvider(opt);
|
|
601
609
|
});
|
|
602
|
-
MailerFactory.register("
|
|
610
|
+
MailerFactory.register("smtp", (opt) => {
|
|
603
611
|
return new import_neko_mailer.SMTPProvider(opt);
|
|
604
612
|
});
|
|
605
|
-
MailerFactory.register("
|
|
613
|
+
MailerFactory.register("memory", (opt) => {
|
|
606
614
|
return new import_neko_mailer.MemoryProvider();
|
|
607
615
|
});
|
|
608
|
-
var
|
|
616
|
+
var QueueTransportFactory = class _QueueTransportFactory {
|
|
609
617
|
static {
|
|
610
|
-
__name(this, "
|
|
618
|
+
__name(this, "QueueTransportFactory");
|
|
611
619
|
}
|
|
612
620
|
static instance = new FlexibleFactory();
|
|
613
621
|
static register(key, factory) {
|
|
614
|
-
|
|
622
|
+
_QueueTransportFactory.instance.register(key, factory);
|
|
615
623
|
}
|
|
616
624
|
static create(key, ...args) {
|
|
617
|
-
return
|
|
625
|
+
return _QueueTransportFactory.instance.create(key, ...args);
|
|
618
626
|
}
|
|
619
627
|
};
|
|
620
|
-
|
|
628
|
+
QueueTransportFactory.register("database", (opt) => {
|
|
621
629
|
let transport = new DatabaseTransport(opt);
|
|
622
630
|
return new import_neko_queue.QueueConnection(transport);
|
|
623
631
|
});
|
|
624
|
-
|
|
632
|
+
QueueTransportFactory.register("memory", (opt) => {
|
|
625
633
|
let transport = new import_neko_queue2.MemoryTransport(opt);
|
|
626
634
|
return new import_neko_queue.QueueConnection(transport);
|
|
627
635
|
});
|
|
@@ -649,9 +657,16 @@ CacheProviderFactory.register("file", (opt) => {
|
|
|
649
657
|
CacheProviderFactory.register("disabled", (opt) => {
|
|
650
658
|
return new import_neko_cache.DisabledCacheProvider();
|
|
651
659
|
});
|
|
660
|
+
import_neko_storage.StorageProviderFactory.register("local", (opt) => {
|
|
661
|
+
return new import_neko_storage.LocalStorageProvider(opt);
|
|
662
|
+
});
|
|
663
|
+
import_neko_storage.StorageProviderFactory.register("s3", (opt) => {
|
|
664
|
+
return new import_neko_storage.AWSS3StorageProvider(opt);
|
|
665
|
+
});
|
|
652
666
|
|
|
653
667
|
// src/facades.mts
|
|
654
668
|
var import_neko_cache2 = require("@devbro/neko-cache");
|
|
669
|
+
var import_neko_queue3 = require("@devbro/neko-queue");
|
|
655
670
|
var router = (0, import_neko_helper.createSingleton)(() => new Router());
|
|
656
671
|
var scheduler = (0, import_neko_helper.createSingleton)(() => {
|
|
657
672
|
const rc = new import_neko_scheduler.Scheduler();
|
|
@@ -664,9 +679,12 @@ var scheduler = (0, import_neko_helper.createSingleton)(() => {
|
|
|
664
679
|
});
|
|
665
680
|
return rc;
|
|
666
681
|
});
|
|
667
|
-
var
|
|
668
|
-
|
|
669
|
-
);
|
|
682
|
+
var db = /* @__PURE__ */ __name((label = "default") => (0, import_neko_context2.ctx)().getOrThrow(["database", label]), "db");
|
|
683
|
+
var storage = (0, import_neko_helper.createSingleton)((label = "default") => {
|
|
684
|
+
let storage_config = import_neko_config.config.get(["storages", label].join("."));
|
|
685
|
+
const provider = import_neko_storage2.StorageProviderFactory.create(storage_config.provider, storage_config.config);
|
|
686
|
+
return new import_neko_storage2.Storage(provider);
|
|
687
|
+
});
|
|
670
688
|
var cli = (0, import_neko_helper.createSingleton)(() => {
|
|
671
689
|
const [node, app, ...args] = process.argv;
|
|
672
690
|
return new import_clipanion.Cli({
|
|
@@ -721,7 +739,7 @@ var logger = (0, import_neko_helper.createSingleton)((label) => {
|
|
|
721
739
|
});
|
|
722
740
|
var mailer = (0, import_neko_helper.createSingleton)((label) => {
|
|
723
741
|
const mailer_config = import_neko_config.config.get(["mailer", label].join("."));
|
|
724
|
-
|
|
742
|
+
const provider = MailerFactory.create(
|
|
725
743
|
mailer_config.provider,
|
|
726
744
|
mailer_config.config
|
|
727
745
|
);
|
|
@@ -733,7 +751,8 @@ var queue = (0, import_neko_helper.createSingleton)((label) => {
|
|
|
733
751
|
if (!queue_config) {
|
|
734
752
|
throw new Error(`Queue configuration for '${label}' not found`);
|
|
735
753
|
}
|
|
736
|
-
const
|
|
754
|
+
const provider = QueueTransportFactory.create(queue_config.provider, queue_config.config);
|
|
755
|
+
const rc = new import_neko_queue3.QueueConnection(provider);
|
|
737
756
|
return rc;
|
|
738
757
|
});
|
|
739
758
|
var cache = (0, import_neko_helper.createSingleton)((label) => {
|
|
@@ -742,7 +761,7 @@ var cache = (0, import_neko_helper.createSingleton)((label) => {
|
|
|
742
761
|
throw new Error(`Cache configuration for '${label}' not found`);
|
|
743
762
|
}
|
|
744
763
|
const provider = CacheProviderFactory.create(
|
|
745
|
-
cache_config.
|
|
764
|
+
cache_config.provider,
|
|
746
765
|
cache_config.config
|
|
747
766
|
);
|
|
748
767
|
return new import_neko_cache2.Cache(provider);
|