@devbro/pashmak 0.1.23 → 0.1.25
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/bin/app/console/DefaultCommand.cjs +33 -32
- package/dist/bin/app/console/KeyGenerateCommand.cjs +33 -32
- package/dist/bin/app/console/StartCommand.cjs +33 -32
- package/dist/bin/app/console/generate/GenerateControllerCommand.cjs +33 -32
- package/dist/bin/app/console/generate/index.cjs +33 -32
- package/dist/bin/app/console/index.cjs +37 -36
- package/dist/bin/app/console/migrate/GenerateMigrateCommand.cjs +33 -32
- package/dist/bin/app/console/migrate/MigrateCommand.cjs +35 -34
- package/dist/bin/app/console/migrate/MigrateRollbackCommand.cjs +35 -34
- package/dist/bin/app/console/migrate/index.cjs +37 -36
- package/dist/bin/app/console/queue/GenerateQueueMigrateCommand.cjs +33 -32
- package/dist/bin/cache.cjs +33 -32
- package/dist/bin/facades.cjs +33 -32
- package/dist/bin/factories.cjs +30 -29
- package/dist/bin/index.cjs +47 -46
- package/dist/bin/middlewares.cjs +33 -32
- package/dist/bin/queue.cjs +30 -29
- package/dist/queue.mjs +30 -29
- package/dist/queue.mjs.map +1 -1
- package/package.json +1 -1
package/dist/bin/middlewares.cjs
CHANGED
|
@@ -456,7 +456,7 @@ var Router = class {
|
|
|
456
456
|
// src/facades.mts
|
|
457
457
|
var import_neko_scheduler = require("@devbro/neko-scheduler");
|
|
458
458
|
var import_neko_helper2 = require("@devbro/neko-helper");
|
|
459
|
-
var
|
|
459
|
+
var import_neko_context3 = require("@devbro/neko-context");
|
|
460
460
|
var import_neko_storage2 = require("@devbro/neko-storage");
|
|
461
461
|
var import_neko_mailer2 = require("@devbro/neko-mailer");
|
|
462
462
|
var import_neko_config = require("@devbro/neko-config");
|
|
@@ -481,6 +481,7 @@ __export(queue_exports, {
|
|
|
481
481
|
});
|
|
482
482
|
__reExport(queue_exports, require("@devbro/neko-queue"));
|
|
483
483
|
var import_neko_helper = require("@devbro/neko-helper");
|
|
484
|
+
var import_neko_context2 = require("@devbro/neko-context");
|
|
484
485
|
var DatabaseTransport = class {
|
|
485
486
|
static {
|
|
486
487
|
__name(this, "DatabaseTransport");
|
|
@@ -497,37 +498,37 @@ var DatabaseTransport = class {
|
|
|
497
498
|
messageQueues = [];
|
|
498
499
|
repeater;
|
|
499
500
|
processMessage = /* @__PURE__ */ __name(async () => {
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
501
|
+
await import_neko_context2.context_provider.run(async () => {
|
|
502
|
+
const conn = db(this.config.db_connection);
|
|
503
|
+
try {
|
|
504
|
+
await conn.connect();
|
|
505
|
+
let q = conn.getQuery();
|
|
506
|
+
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();
|
|
507
|
+
for (let msg of messages) {
|
|
508
|
+
try {
|
|
509
|
+
let callback = this.channels.get(msg.channel);
|
|
510
|
+
await callback(msg.message);
|
|
511
|
+
await q.table(this.config.queue_table).whereOp("id", "=", msg.id).update({
|
|
512
|
+
status: "processed",
|
|
513
|
+
updated_at: /* @__PURE__ */ new Date(),
|
|
514
|
+
last_tried_at: /* @__PURE__ */ new Date(),
|
|
515
|
+
retried_count: (msg.retried_count || 0) + 1
|
|
516
|
+
});
|
|
517
|
+
} catch (error) {
|
|
518
|
+
await q.table(this.config.queue_table).whereOp("id", "=", msg.id).update({
|
|
519
|
+
status: "failed",
|
|
520
|
+
last_tried_at: /* @__PURE__ */ new Date(),
|
|
521
|
+
retried_count: (msg.retried_count || 0) + 1,
|
|
522
|
+
process_message: error.message || "Error processing message"
|
|
523
|
+
});
|
|
524
|
+
}
|
|
522
525
|
}
|
|
526
|
+
} catch (error) {
|
|
527
|
+
logger().error("Error in DatabaseTransport listen interval:", {
|
|
528
|
+
error
|
|
529
|
+
});
|
|
523
530
|
}
|
|
524
|
-
}
|
|
525
|
-
logger().error("Error in DatabaseTransport listen interval:", {
|
|
526
|
-
error
|
|
527
|
-
});
|
|
528
|
-
} finally {
|
|
529
|
-
await conn.disconnect();
|
|
530
|
-
}
|
|
531
|
+
});
|
|
531
532
|
}, "processMessage");
|
|
532
533
|
constructor(config2 = {}) {
|
|
533
534
|
this.config = { ...this.config, ...config2 };
|
|
@@ -651,7 +652,7 @@ var scheduler = (0, import_neko_helper2.createSingleton)(() => {
|
|
|
651
652
|
});
|
|
652
653
|
return rc;
|
|
653
654
|
});
|
|
654
|
-
var db = /* @__PURE__ */ __name((label = "default") => (0,
|
|
655
|
+
var db = /* @__PURE__ */ __name((label = "default") => (0, import_neko_context3.ctx)().getOrThrow(["database", label]), "db");
|
|
655
656
|
var storage = (0, import_neko_helper2.createSingleton)((label = "default") => {
|
|
656
657
|
let storage_config = import_neko_config.config.get(["storages", label].join("."));
|
|
657
658
|
const provider = import_neko_storage2.StorageProviderFactory.create(
|
|
@@ -707,7 +708,7 @@ var logger = (0, import_neko_helper2.createSingleton)((label) => {
|
|
|
707
708
|
const logger_config = import_neko_config.config.get(["loggers", label].join("."));
|
|
708
709
|
const rc = new import_neko_logger.Logger(logger_config);
|
|
709
710
|
rc.setExtrasFunction((message) => {
|
|
710
|
-
message.requestId = (0,
|
|
711
|
+
message.requestId = (0, import_neko_context3.ctxSafe)()?.get("requestId") || "N/A";
|
|
711
712
|
return message;
|
|
712
713
|
});
|
|
713
714
|
return rc;
|
package/dist/bin/queue.cjs
CHANGED
|
@@ -648,6 +648,7 @@ var cache = (0, import_neko_helper.createSingleton)((label) => {
|
|
|
648
648
|
|
|
649
649
|
// src/queue.mts
|
|
650
650
|
var import_neko_helper2 = require("@devbro/neko-helper");
|
|
651
|
+
var import_neko_context3 = require("@devbro/neko-context");
|
|
651
652
|
var DatabaseTransport = class {
|
|
652
653
|
static {
|
|
653
654
|
__name(this, "DatabaseTransport");
|
|
@@ -664,37 +665,37 @@ var DatabaseTransport = class {
|
|
|
664
665
|
messageQueues = [];
|
|
665
666
|
repeater;
|
|
666
667
|
processMessage = /* @__PURE__ */ __name(async () => {
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
|
|
668
|
+
await import_neko_context3.context_provider.run(async () => {
|
|
669
|
+
const conn = db(this.config.db_connection);
|
|
670
|
+
try {
|
|
671
|
+
await conn.connect();
|
|
672
|
+
let q = conn.getQuery();
|
|
673
|
+
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();
|
|
674
|
+
for (let msg of messages) {
|
|
675
|
+
try {
|
|
676
|
+
let callback = this.channels.get(msg.channel);
|
|
677
|
+
await callback(msg.message);
|
|
678
|
+
await q.table(this.config.queue_table).whereOp("id", "=", msg.id).update({
|
|
679
|
+
status: "processed",
|
|
680
|
+
updated_at: /* @__PURE__ */ new Date(),
|
|
681
|
+
last_tried_at: /* @__PURE__ */ new Date(),
|
|
682
|
+
retried_count: (msg.retried_count || 0) + 1
|
|
683
|
+
});
|
|
684
|
+
} catch (error) {
|
|
685
|
+
await q.table(this.config.queue_table).whereOp("id", "=", msg.id).update({
|
|
686
|
+
status: "failed",
|
|
687
|
+
last_tried_at: /* @__PURE__ */ new Date(),
|
|
688
|
+
retried_count: (msg.retried_count || 0) + 1,
|
|
689
|
+
process_message: error.message || "Error processing message"
|
|
690
|
+
});
|
|
691
|
+
}
|
|
689
692
|
}
|
|
693
|
+
} catch (error) {
|
|
694
|
+
logger().error("Error in DatabaseTransport listen interval:", {
|
|
695
|
+
error
|
|
696
|
+
});
|
|
690
697
|
}
|
|
691
|
-
}
|
|
692
|
-
logger().error("Error in DatabaseTransport listen interval:", {
|
|
693
|
-
error
|
|
694
|
-
});
|
|
695
|
-
} finally {
|
|
696
|
-
await conn.disconnect();
|
|
697
|
-
}
|
|
698
|
+
});
|
|
698
699
|
}, "processMessage");
|
|
699
700
|
constructor(config2 = {}) {
|
|
700
701
|
this.config = { ...this.config, ...config2 };
|
package/dist/queue.mjs
CHANGED
|
@@ -3,6 +3,7 @@ var __name = (target, value) => __defProp(target, "name", { value, configurable:
|
|
|
3
3
|
export * from "@devbro/neko-queue";
|
|
4
4
|
import { db, logger } from "./facades.mjs";
|
|
5
5
|
import { createRepeater } from "@devbro/neko-helper";
|
|
6
|
+
import { context_provider } from "@devbro/neko-context";
|
|
6
7
|
class DatabaseTransport {
|
|
7
8
|
static {
|
|
8
9
|
__name(this, "DatabaseTransport");
|
|
@@ -19,37 +20,37 @@ class DatabaseTransport {
|
|
|
19
20
|
messageQueues = [];
|
|
20
21
|
repeater;
|
|
21
22
|
processMessage = /* @__PURE__ */ __name(async () => {
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
23
|
+
await context_provider.run(async () => {
|
|
24
|
+
const conn = db(this.config.db_connection);
|
|
25
|
+
try {
|
|
26
|
+
await conn.connect();
|
|
27
|
+
let q = conn.getQuery();
|
|
28
|
+
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();
|
|
29
|
+
for (let msg of messages) {
|
|
30
|
+
try {
|
|
31
|
+
let callback = this.channels.get(msg.channel);
|
|
32
|
+
await callback(msg.message);
|
|
33
|
+
await q.table(this.config.queue_table).whereOp("id", "=", msg.id).update({
|
|
34
|
+
status: "processed",
|
|
35
|
+
updated_at: /* @__PURE__ */ new Date(),
|
|
36
|
+
last_tried_at: /* @__PURE__ */ new Date(),
|
|
37
|
+
retried_count: (msg.retried_count || 0) + 1
|
|
38
|
+
});
|
|
39
|
+
} catch (error) {
|
|
40
|
+
await q.table(this.config.queue_table).whereOp("id", "=", msg.id).update({
|
|
41
|
+
status: "failed",
|
|
42
|
+
last_tried_at: /* @__PURE__ */ new Date(),
|
|
43
|
+
retried_count: (msg.retried_count || 0) + 1,
|
|
44
|
+
process_message: error.message || "Error processing message"
|
|
45
|
+
});
|
|
46
|
+
}
|
|
44
47
|
}
|
|
48
|
+
} catch (error) {
|
|
49
|
+
logger().error("Error in DatabaseTransport listen interval:", {
|
|
50
|
+
error
|
|
51
|
+
});
|
|
45
52
|
}
|
|
46
|
-
}
|
|
47
|
-
logger().error("Error in DatabaseTransport listen interval:", {
|
|
48
|
-
error
|
|
49
|
-
});
|
|
50
|
-
} finally {
|
|
51
|
-
await conn.disconnect();
|
|
52
|
-
}
|
|
53
|
+
});
|
|
53
54
|
}, "processMessage");
|
|
54
55
|
constructor(config = {}) {
|
|
55
56
|
this.config = { ...this.config, ...config };
|
package/dist/queue.mjs.map
CHANGED
|
@@ -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\";\n\ntype DatabaseTransportConfig = {\n queue_table: string;\n db_connection: string;\n listen_interval: number;\n message_limit: 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 };\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 const conn = db(this.config.db_connection);\n
|
|
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};\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 };\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 await conn.connect();\n let q: Query = conn.getQuery();\n let messages = await q\n .table(this.config.queue_table)\n .whereOp(\"channel\", \"in\", Array.from(this.channels.keys()))\n .whereOp(\"status\", \"in\", [\"pending\", \"failed\"])\n .limit(this.config.message_limit)\n .orderBy(\"last_tried_at\", \"asc\")\n .get();\n for (let msg of messages) {\n try {\n let callback = this.channels.get(msg.channel)!;\n await callback(msg.message);\n // mark message as processed\n await q\n .table(this.config.queue_table)\n .whereOp(\"id\", \"=\", msg.id)\n .update({\n status: \"processed\",\n updated_at: new Date(),\n last_tried_at: new Date(),\n retried_count: (msg.retried_count || 0) + 1,\n });\n } catch (error) {\n await q\n .table(this.config.queue_table)\n .whereOp(\"id\", \"=\", msg.id)\n .update({\n status: \"failed\",\n last_tried_at: new Date(),\n retried_count: (msg.retried_count || 0) + 1,\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 try {\n await conn.connect();\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 processed: false,\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 } finally {\n await conn.disconnect();\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":[]}
|