@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
package/dist/facades.d.mts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import * as _devbro_neko_queue from '@devbro/neko-queue';
|
|
2
|
+
import { QueueConnection } from '@devbro/neko-queue';
|
|
2
3
|
import * as clipanion from 'clipanion';
|
|
3
4
|
import { Cli } from 'clipanion';
|
|
4
5
|
import { Router } from '@devbro/neko-router';
|
|
@@ -18,7 +19,7 @@ declare const cli: (label?: string, ...args: any[]) => Cli<clipanion.BaseContext
|
|
|
18
19
|
declare const httpServer: (label?: string, ...args: any[]) => HttpServer;
|
|
19
20
|
declare const logger: (label?: string, ...args: any[]) => Logger;
|
|
20
21
|
declare const mailer: (label?: string, ...args: any[]) => Mailer;
|
|
21
|
-
declare const queue: (label?: string, ...args: any[]) => _devbro_neko_queue.
|
|
22
|
+
declare const queue: (label?: string, ...args: any[]) => QueueConnection<Record<string, _devbro_neko_queue.QueueMessageInterface>>;
|
|
22
23
|
declare const cache: (label?: string, ...args: any[]) => Cache;
|
|
23
24
|
|
|
24
25
|
export { cache, cli, db, httpServer, logger, mailer, queue, router, scheduler, storage };
|
package/dist/facades.mjs
CHANGED
|
@@ -4,7 +4,7 @@ import { Router } from "./router.mjs";
|
|
|
4
4
|
import { Scheduler } from "@devbro/neko-scheduler";
|
|
5
5
|
import { createSingleton } from "@devbro/neko-helper";
|
|
6
6
|
import { ctx, ctxSafe } from "@devbro/neko-context";
|
|
7
|
-
import {
|
|
7
|
+
import { Storage, StorageProviderFactory } from "@devbro/neko-storage";
|
|
8
8
|
import { Mailer } from "@devbro/neko-mailer";
|
|
9
9
|
import { config } from "@devbro/neko-config";
|
|
10
10
|
import { Cli } from "clipanion";
|
|
@@ -15,9 +15,10 @@ import { Logger } from "@devbro/neko-logger";
|
|
|
15
15
|
import {
|
|
16
16
|
CacheProviderFactory,
|
|
17
17
|
MailerFactory,
|
|
18
|
-
|
|
18
|
+
QueueTransportFactory
|
|
19
19
|
} from "./factories.mjs";
|
|
20
20
|
import { Cache } from "@devbro/neko-cache";
|
|
21
|
+
import { QueueConnection } from "@devbro/neko-queue";
|
|
21
22
|
const router = createSingleton(() => new Router());
|
|
22
23
|
const scheduler = createSingleton(() => {
|
|
23
24
|
const rc = new Scheduler();
|
|
@@ -31,9 +32,11 @@ const scheduler = createSingleton(() => {
|
|
|
31
32
|
return rc;
|
|
32
33
|
});
|
|
33
34
|
const db = /* @__PURE__ */ __name((label = "default") => ctx().getOrThrow(["database", label]), "db");
|
|
34
|
-
const storage = createSingleton(
|
|
35
|
-
|
|
36
|
-
);
|
|
35
|
+
const storage = createSingleton((label = "default") => {
|
|
36
|
+
let storage_config = config.get(["storages", label].join("."));
|
|
37
|
+
const provider = StorageProviderFactory.create(storage_config.provider, storage_config.config);
|
|
38
|
+
return new Storage(provider);
|
|
39
|
+
});
|
|
37
40
|
const cli = createSingleton(() => {
|
|
38
41
|
const [node, app, ...args] = process.argv;
|
|
39
42
|
return new Cli({
|
|
@@ -88,7 +91,7 @@ const logger = createSingleton((label) => {
|
|
|
88
91
|
});
|
|
89
92
|
const mailer = createSingleton((label) => {
|
|
90
93
|
const mailer_config = config.get(["mailer", label].join("."));
|
|
91
|
-
|
|
94
|
+
const provider = MailerFactory.create(
|
|
92
95
|
mailer_config.provider,
|
|
93
96
|
mailer_config.config
|
|
94
97
|
);
|
|
@@ -100,7 +103,8 @@ const queue = createSingleton((label) => {
|
|
|
100
103
|
if (!queue_config) {
|
|
101
104
|
throw new Error(`Queue configuration for '${label}' not found`);
|
|
102
105
|
}
|
|
103
|
-
const
|
|
106
|
+
const provider = QueueTransportFactory.create(queue_config.provider, queue_config.config);
|
|
107
|
+
const rc = new QueueConnection(provider);
|
|
104
108
|
return rc;
|
|
105
109
|
});
|
|
106
110
|
const cache = createSingleton((label) => {
|
|
@@ -109,7 +113,7 @@ const cache = createSingleton((label) => {
|
|
|
109
113
|
throw new Error(`Cache configuration for '${label}' not found`);
|
|
110
114
|
}
|
|
111
115
|
const provider = CacheProviderFactory.create(
|
|
112
|
-
cache_config.
|
|
116
|
+
cache_config.provider,
|
|
113
117
|
cache_config.config
|
|
114
118
|
);
|
|
115
119
|
return new Cache(provider);
|
package/dist/facades.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/facades.mts"],"sourcesContent":["import { Router } from \"./router.mjs\";\nimport { Schedule, Scheduler } from \"@devbro/neko-scheduler\";\nimport { createSingleton } from \"@devbro/neko-helper\";\nimport { ctx, ctxSafe } from \"@devbro/neko-context\";\nimport { Connection } from \"@devbro/neko-sql\";\nimport { Storage,
|
|
1
|
+
{"version":3,"sources":["../src/facades.mts"],"sourcesContent":["import { Router } from \"./router.mjs\";\nimport { Schedule, Scheduler } from \"@devbro/neko-scheduler\";\nimport { createSingleton } from \"@devbro/neko-helper\";\nimport { ctx, ctxSafe } from \"@devbro/neko-context\";\nimport { Connection } from \"@devbro/neko-sql\";\nimport { Storage, StorageProviderFactory } from \"@devbro/neko-storage\";\nimport { Mailer, MailerProvider } from \"@devbro/neko-mailer\";\nimport { config } from \"@devbro/neko-config\";\nimport { Cli } from \"clipanion\";\nimport { HttpServer } from \"./http.mjs\";\nimport { HttpError } from \"./http.mjs\";\nimport * as yup from \"yup\";\nimport { Logger } from \"@devbro/neko-logger\";\nimport {\n CacheProviderFactory,\n MailerFactory,\n QueueTransportFactory,\n} from \"./factories.mjs\";\nimport { Cache, CacheProviderInterface } from \"@devbro/neko-cache\";\nimport { QueueConnection } from \"@devbro/neko-queue\";\n\nexport const router = createSingleton<Router>(() => new Router());\nexport const scheduler = createSingleton<Scheduler>(() => {\n const rc = new Scheduler();\n rc.setErrorHandler((err: any, job: Schedule) => {\n logger().error({\n msg: \"Scheduled job error\",\n err,\n job_name: job.getName(),\n });\n });\n return rc;\n});\nexport const db = (label = \"default\") =>\n ctx().getOrThrow<Connection>([\"database\", label]);\n\nexport const storage = createSingleton<Storage>((label: string = \"default\") => {\n let storage_config: any = config.get([\"storages\", label].join(\".\"));\n\n const provider = StorageProviderFactory.create(storage_config.provider, storage_config.config);\n\n return new Storage(provider);\n});\n\nexport const cli = createSingleton<Cli>(() => {\n const [node, app, ...args] = process.argv;\n return new Cli({\n binaryLabel: `My Application`,\n binaryName: `${node} ${app}`,\n binaryVersion: `1.0.0`,\n });\n});\n\nexport const httpServer = createSingleton<HttpServer>(() => {\n const server = new HttpServer();\n\n server.setErrorHandler(async (err: Error, req: any, res: any) => {\n if (err instanceof HttpError) {\n res.writeHead(err.statusCode, { \"Content-Type\": \"application/json\" });\n res.end(JSON.stringify({ message: err.message, error: err.code }));\n logger().warn({ msg: \"HttpError: \" + err.message, err });\n return;\n } else if (err instanceof yup.ValidationError) {\n res.writeHead(422, { \"Content-Type\": \"application/json\" });\n const errs: any = {};\n err.inner.forEach((e: yup.ValidationError) => {\n // Sanitize sensitive fields\n const sanitizedParams = { ...e.params };\n if (/passw/i.test(e.path!)) {\n sanitizedParams.value = \"******\";\n sanitizedParams.originalValue = \"******\";\n }\n\n errs[e.path!] = {\n type: e.type,\n message: e.message,\n params: sanitizedParams,\n };\n });\n\n res.end(JSON.stringify({ message: \"validation error\", errors: errs }));\n logger().warn({ msg: \"ValidationError: \" + err.message, err });\n return;\n } else {\n logger().error({ msg: \"Error: \" + err.message, err });\n }\n res.writeHead(500, { \"Content-Type\": \"\" });\n res.end(JSON.stringify({ error: \"Internal Server Error\" }));\n });\n server.setRouter(router());\n\n return server;\n});\n\nexport const logger = createSingleton<Logger>((label) => {\n const logger_config: any = config.get([\"loggers\", label].join(\".\"));\n const rc = new Logger(logger_config);\n rc.setExtrasFunction((message: any) => {\n message.requestId = ctxSafe()?.get(\"requestId\") || \"N/A\";\n return message;\n });\n\n return rc;\n});\n\nexport const mailer = createSingleton((label) => {\n const mailer_config: any = config.get([\"mailer\", label].join(\".\"));\n\n const provider: MailerProvider = MailerFactory.create(\n mailer_config.provider,\n mailer_config.config,\n );\n\n const rc = new Mailer(provider);\n return rc;\n});\n\nexport const queue = createSingleton((label) => {\n const queue_config: any = config.get([\"queues\", label].join(\".\"));\n if (!queue_config) {\n throw new Error(`Queue configuration for '${label}' not found`);\n }\n const provider = QueueTransportFactory.create(queue_config.provider, queue_config.config);\n const rc = new QueueConnection(provider);\n return rc;\n});\n\nexport const cache = createSingleton((label) => {\n const cache_config: any = config.get([\"caches\", label].join(\".\"));\n if (!cache_config) {\n throw new Error(`Cache configuration for '${label}' not found`);\n }\n const provider = CacheProviderFactory.create(\n cache_config.provider,\n cache_config.config,\n );\n\n return new Cache(provider);\n});\n"],"mappings":"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","names":[]}
|
package/dist/factories.d.mts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { MailerProvider } from '@devbro/neko-mailer';
|
|
2
|
-
import { QueueConnection } from '@devbro/neko-queue';
|
|
2
|
+
import { QueueConnection, QueueTransportInterface } from '@devbro/neko-queue';
|
|
3
3
|
import { CacheProviderInterface } from '@devbro/neko-cache';
|
|
4
4
|
|
|
5
5
|
declare class FlexibleFactory<T> {
|
|
@@ -12,15 +12,15 @@ declare class MailerFactory {
|
|
|
12
12
|
static register<T>(key: string, factory: (...args: any[]) => MailerProvider): void;
|
|
13
13
|
static create<T>(key: string, ...args: any[]): MailerProvider;
|
|
14
14
|
}
|
|
15
|
-
declare class
|
|
15
|
+
declare class QueueTransportFactory {
|
|
16
16
|
static instance: FlexibleFactory<QueueConnection<any>>;
|
|
17
17
|
static register<T>(key: string, factory: (...args: any[]) => T): void;
|
|
18
|
-
static create<T>(key: string, ...args: any[]):
|
|
18
|
+
static create<T>(key: string, ...args: any[]): QueueTransportInterface;
|
|
19
19
|
}
|
|
20
20
|
declare class CacheProviderFactory {
|
|
21
21
|
static instance: FlexibleFactory<CacheProviderInterface>;
|
|
22
|
-
static register
|
|
22
|
+
static register(key: string, factory: (...args: any[]) => CacheProviderInterface): void;
|
|
23
23
|
static create<T>(key: string, ...args: any[]): CacheProviderInterface;
|
|
24
24
|
}
|
|
25
25
|
|
|
26
|
-
export { CacheProviderFactory, FlexibleFactory, MailerFactory,
|
|
26
|
+
export { CacheProviderFactory, FlexibleFactory, MailerFactory, QueueTransportFactory };
|
package/dist/factories.mjs
CHANGED
|
@@ -16,6 +16,7 @@ import {
|
|
|
16
16
|
FileCacheProvider,
|
|
17
17
|
DisabledCacheProvider
|
|
18
18
|
} from "@devbro/neko-cache";
|
|
19
|
+
import { AWSS3StorageProvider, LocalStorageProvider, StorageProviderFactory } from "@devbro/neko-storage";
|
|
19
20
|
class FlexibleFactory {
|
|
20
21
|
static {
|
|
21
22
|
__name(this, "FlexibleFactory");
|
|
@@ -52,32 +53,32 @@ MailerFactory.register("logger", (opt) => {
|
|
|
52
53
|
});
|
|
53
54
|
});
|
|
54
55
|
});
|
|
55
|
-
MailerFactory.register("
|
|
56
|
+
MailerFactory.register("ses", (opt) => {
|
|
56
57
|
return new SESProvider(opt);
|
|
57
58
|
});
|
|
58
|
-
MailerFactory.register("
|
|
59
|
+
MailerFactory.register("smtp", (opt) => {
|
|
59
60
|
return new SMTPProvider(opt);
|
|
60
61
|
});
|
|
61
|
-
MailerFactory.register("
|
|
62
|
+
MailerFactory.register("memory", (opt) => {
|
|
62
63
|
return new MemoryProvider();
|
|
63
64
|
});
|
|
64
|
-
class
|
|
65
|
+
class QueueTransportFactory {
|
|
65
66
|
static {
|
|
66
|
-
__name(this, "
|
|
67
|
+
__name(this, "QueueTransportFactory");
|
|
67
68
|
}
|
|
68
69
|
static instance = new FlexibleFactory();
|
|
69
70
|
static register(key, factory) {
|
|
70
|
-
|
|
71
|
+
QueueTransportFactory.instance.register(key, factory);
|
|
71
72
|
}
|
|
72
73
|
static create(key, ...args) {
|
|
73
|
-
return
|
|
74
|
+
return QueueTransportFactory.instance.create(key, ...args);
|
|
74
75
|
}
|
|
75
76
|
}
|
|
76
|
-
|
|
77
|
+
QueueTransportFactory.register("database", (opt) => {
|
|
77
78
|
let transport = new DatabaseTransport(opt);
|
|
78
79
|
return new QueueConnection(transport);
|
|
79
80
|
});
|
|
80
|
-
|
|
81
|
+
QueueTransportFactory.register("memory", (opt) => {
|
|
81
82
|
let transport = new MemoryTransport(opt);
|
|
82
83
|
return new QueueConnection(transport);
|
|
83
84
|
});
|
|
@@ -105,10 +106,16 @@ CacheProviderFactory.register("file", (opt) => {
|
|
|
105
106
|
CacheProviderFactory.register("disabled", (opt) => {
|
|
106
107
|
return new DisabledCacheProvider();
|
|
107
108
|
});
|
|
109
|
+
StorageProviderFactory.register("local", (opt) => {
|
|
110
|
+
return new LocalStorageProvider(opt);
|
|
111
|
+
});
|
|
112
|
+
StorageProviderFactory.register("s3", (opt) => {
|
|
113
|
+
return new AWSS3StorageProvider(opt);
|
|
114
|
+
});
|
|
108
115
|
export {
|
|
109
116
|
CacheProviderFactory,
|
|
110
117
|
FlexibleFactory,
|
|
111
118
|
MailerFactory,
|
|
112
|
-
|
|
119
|
+
QueueTransportFactory
|
|
113
120
|
};
|
|
114
121
|
//# sourceMappingURL=factories.mjs.map
|
package/dist/factories.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/factories.mts"],"sourcesContent":["import {\n Mailer,\n Mailable,\n MailerProvider,\n FunctionProvider,\n SESProvider,\n SMTPProvider,\n MemoryProvider,\n} from \"@devbro/neko-mailer\";\nimport { logger } from \"./facades.mjs\";\nimport { QueueConnection } from \"@devbro/neko-queue\";\nimport { MemoryTransport } 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\";\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\nexport class MailerFactory {\n static instance: FlexibleFactory<MailerProvider> =\n new FlexibleFactory<MailerProvider>();\n\n static register<T>(\n key: string,\n factory: (...args: any[]) => MailerProvider,\n ): void {\n MailerFactory.instance.register(key, factory);\n }\n\n static create<T>(key: string, ...args: any[]): MailerProvider {\n return MailerFactory.instance.create(key, ...args);\n }\n}\n\nMailerFactory.register(\"logger\", (opt) => {\n return new FunctionProvider((mail: Mailable) => {\n logger().info({\n msg: \"Sending email\",\n mail,\n });\n });\n});\n\nMailerFactory.register(\"
|
|
1
|
+
{"version":3,"sources":["../src/factories.mts"],"sourcesContent":["import {\n Mailer,\n Mailable,\n MailerProvider,\n FunctionProvider,\n SESProvider,\n SMTPProvider,\n MemoryProvider,\n} from \"@devbro/neko-mailer\";\nimport { logger } from \"./facades.mjs\";\nimport { QueueConnection, QueueTransportInterface } from \"@devbro/neko-queue\";\nimport { MemoryTransport } 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 { AWSS3StorageProvider, LocalStorageProvider, StorageProviderFactory } 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\nexport class MailerFactory {\n static instance: FlexibleFactory<MailerProvider> =\n new FlexibleFactory<MailerProvider>();\n\n static register<T>(\n key: string,\n factory: (...args: any[]) => MailerProvider,\n ): void {\n MailerFactory.instance.register(key, factory);\n }\n\n static create<T>(key: string, ...args: any[]): MailerProvider {\n return MailerFactory.instance.create(key, ...args);\n }\n}\n\nMailerFactory.register(\"logger\", (opt) => {\n return new FunctionProvider((mail: Mailable) => {\n logger().info({\n msg: \"Sending email\",\n mail,\n });\n });\n});\n\nMailerFactory.register(\"ses\", (opt) => {\n return new SESProvider(opt);\n});\n\nMailerFactory.register(\"smtp\", (opt) => {\n return new SMTPProvider(opt);\n});\n\nMailerFactory.register(\"memory\", (opt) => {\n return new MemoryProvider();\n});\n\nexport class QueueTransportFactory {\n static instance: FlexibleFactory<QueueConnection<any>> = new FlexibleFactory<\n QueueConnection<any>\n >();\n\n static register<T>(key: string, factory: (...args: any[]) => T): void {\n QueueTransportFactory.instance.register(key, factory);\n }\n\n static create<T>(key: string, ...args: any[]): QueueTransportInterface {\n return QueueTransportFactory.instance.create(key, ...args);\n }\n}\n\nQueueTransportFactory.register(\"database\", (opt) => {\n let transport = new DatabaseTransport(opt);\n return new QueueConnection(transport);\n});\n\nQueueTransportFactory.register(\"memory\", (opt) => {\n let transport = new MemoryTransport(opt);\n return new QueueConnection(transport);\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});"],"mappings":"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","names":[]}
|
package/dist/queue.d.mts
CHANGED
|
@@ -1,12 +1,16 @@
|
|
|
1
1
|
import { QueueTransportInterface } from '@devbro/neko-queue';
|
|
2
2
|
export * from '@devbro/neko-queue';
|
|
3
3
|
|
|
4
|
+
type DatabaseTransportConfig = {
|
|
5
|
+
queue_table: string;
|
|
6
|
+
db_connection: string;
|
|
7
|
+
listen_interval: number;
|
|
8
|
+
message_limit: number;
|
|
9
|
+
};
|
|
4
10
|
declare class DatabaseTransport implements QueueTransportInterface {
|
|
5
|
-
private db_config;
|
|
6
|
-
listenInterval: number;
|
|
7
|
-
messageLimit: number;
|
|
8
11
|
private activeIntervals;
|
|
9
|
-
|
|
12
|
+
private config;
|
|
13
|
+
constructor(config: Partial<DatabaseTransportConfig>);
|
|
10
14
|
setListenInterval(interval: number): void;
|
|
11
15
|
setMessageLimit(limit: number): void;
|
|
12
16
|
dispatch(channel: string, message: string): Promise<void>;
|
package/dist/queue.mjs
CHANGED
|
@@ -1,31 +1,39 @@
|
|
|
1
1
|
var __defProp = Object.defineProperty;
|
|
2
2
|
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
3
3
|
export * from "@devbro/neko-queue";
|
|
4
|
-
import {
|
|
4
|
+
import { db, logger } from "./facades.mts";
|
|
5
5
|
class DatabaseTransport {
|
|
6
|
-
constructor(db_config) {
|
|
7
|
-
this.db_config = db_config;
|
|
8
|
-
}
|
|
9
6
|
static {
|
|
10
7
|
__name(this, "DatabaseTransport");
|
|
11
8
|
}
|
|
12
|
-
listenInterval = 6e4;
|
|
13
|
-
// default to 1 minute
|
|
14
|
-
messageLimit = 100;
|
|
15
|
-
// default to 100 messages per fetch
|
|
16
9
|
activeIntervals = /* @__PURE__ */ new Set();
|
|
10
|
+
config = {
|
|
11
|
+
queue_table: "queue_messages",
|
|
12
|
+
db_connection: "default",
|
|
13
|
+
listen_interval: 60,
|
|
14
|
+
// seconds
|
|
15
|
+
message_limit: 10
|
|
16
|
+
// messages per each fetch
|
|
17
|
+
};
|
|
18
|
+
constructor(config) {
|
|
19
|
+
this.config = { ...this.config, ...config };
|
|
20
|
+
}
|
|
17
21
|
setListenInterval(interval) {
|
|
18
|
-
this.
|
|
22
|
+
this.config.listen_interval = interval;
|
|
19
23
|
}
|
|
20
24
|
setMessageLimit(limit) {
|
|
21
|
-
this.
|
|
25
|
+
this.config.message_limit = limit;
|
|
22
26
|
}
|
|
23
27
|
async dispatch(channel, message) {
|
|
24
|
-
const conn =
|
|
28
|
+
const conn = db(this.config.db_connection);
|
|
25
29
|
try {
|
|
26
30
|
await conn.connect();
|
|
31
|
+
let schema = conn.getSchema();
|
|
32
|
+
if (await schema.tableExists(this.config.queue_table) === false) {
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
27
35
|
let q = conn.getQuery();
|
|
28
|
-
await q.table(
|
|
36
|
+
await q.table(this.config.queue_table).insert({
|
|
29
37
|
channel,
|
|
30
38
|
message,
|
|
31
39
|
processed: false,
|
|
@@ -41,20 +49,20 @@ class DatabaseTransport {
|
|
|
41
49
|
async listen(channel, callback) {
|
|
42
50
|
return new Promise(async (resolve, reject) => {
|
|
43
51
|
const intervalId = setInterval(async () => {
|
|
44
|
-
const conn =
|
|
52
|
+
const conn = db(this.config.db_connection);
|
|
45
53
|
try {
|
|
46
54
|
await conn.connect();
|
|
47
55
|
let q = conn.getQuery();
|
|
48
|
-
let messages = await q.table(
|
|
56
|
+
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();
|
|
49
57
|
for (let msg of messages) {
|
|
50
58
|
try {
|
|
51
59
|
await callback(msg.message);
|
|
52
|
-
await q.table(
|
|
60
|
+
await q.table(this.config.queue_table).whereOp("id", "=", msg.id).update({
|
|
53
61
|
processed: true,
|
|
54
62
|
updated_at: /* @__PURE__ */ new Date()
|
|
55
63
|
});
|
|
56
64
|
} catch (error) {
|
|
57
|
-
await q.table(
|
|
65
|
+
await q.table(this.config.queue_table).whereOp("id", "=", msg.id).update({
|
|
58
66
|
processed: false,
|
|
59
67
|
last_tried_at: /* @__PURE__ */ new Date(),
|
|
60
68
|
process_message: error.message || "Error processing message"
|
|
@@ -63,11 +71,11 @@ class DatabaseTransport {
|
|
|
63
71
|
}
|
|
64
72
|
} catch (error) {
|
|
65
73
|
this.activeIntervals.delete(intervalId);
|
|
66
|
-
|
|
74
|
+
logger().error("Error in DatabaseTransport listen interval:", { error });
|
|
67
75
|
} finally {
|
|
68
76
|
await conn.disconnect();
|
|
69
77
|
}
|
|
70
|
-
}, this.
|
|
78
|
+
}, this.config.listen_interval * 1e3);
|
|
71
79
|
this.activeIntervals.add(intervalId);
|
|
72
80
|
});
|
|
73
81
|
}
|
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 { PostgresqlConnection } from \"@devbro/neko-sql\";\nimport { Query } from \"@devbro/neko-sql\";\
|
|
1
|
+
{"version":3,"sources":["../src/queue.mts"],"sourcesContent":["export * from \"@devbro/neko-queue\";\nimport { QueueTransportInterface } from \"@devbro/neko-queue\";\nimport { PostgresqlConnection } from \"@devbro/neko-sql\";\nimport { Query } from \"@devbro/neko-sql\";\nimport { db, logger } from \"./facades.mts\";\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 activeIntervals: Set<NodeJS.Timeout> = new Set();\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\n constructor(config: Partial<DatabaseTransportConfig>) {\n this.config = { ...this.config, ...config };\n }\n\n setListenInterval(interval: number): void {\n this.config.listen_interval = interval;\n }\n\n setMessageLimit(limit: number): void {\n this.config.message_limit = limit;\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 });\n } finally {\n await conn.disconnect();\n }\n }\n\n async listen(\n channel: string,\n callback: (message: string) => Promise<void>,\n ): Promise<void> {\n // create a promise that runs every minute\n return new Promise(async (resolve, reject) => {\n const intervalId = setInterval(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\", \"=\", channel)\n .whereOp(\"processed\", \"=\", false)\n .limit(this.config.message_limit)\n .orderBy(\"last_tried_at\", \"asc\")\n .get();\n for (let msg of messages) {\n try {\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 processed: true,\n updated_at: new Date(),\n });\n } catch (error) {\n await q\n .table(this.config.queue_table)\n .whereOp(\"id\", \"=\", msg.id)\n .update({\n processed: false,\n last_tried_at: new Date(),\n process_message:\n (error as Error).message || \"Error processing message\",\n });\n }\n }\n } catch (error) {\n this.activeIntervals.delete(intervalId);\n logger().error(\"Error in DatabaseTransport listen interval:\", { error });\n } finally {\n await conn.disconnect();\n }\n }, this.config.listen_interval * 1000);\n\n // Track this interval\n this.activeIntervals.add(intervalId);\n });\n }\n\n async stopListening(): Promise<void> {\n // Clear all active intervals\n for (const intervalId of this.activeIntervals) {\n clearInterval(intervalId);\n }\n // Clear the set\n this.activeIntervals.clear();\n }\n}\n"],"mappings":";;AAAA,cAAc;AAId,SAAS,IAAI,cAAc;AASpB,MAAM,kBAAqD;AAAA,EAblE,OAakE;AAAA;AAAA;AAAA,EACxD,kBAAuC,oBAAI,IAAI;AAAA,EAC/C,SAAkC;AAAA,IACxC,aAAa;AAAA,IACb,eAAe;AAAA,IACf,iBAAiB;AAAA;AAAA,IACjB,eAAe;AAAA;AAAA,EACjB;AAAA,EAEA,YAAY,QAA0C;AACpD,SAAK,SAAS,EAAE,GAAG,KAAK,QAAQ,GAAG,OAAO;AAAA,EAC5C;AAAA,EAEA,kBAAkB,UAAwB;AACxC,SAAK,OAAO,kBAAkB;AAAA,EAChC;AAAA,EAEA,gBAAgB,OAAqB;AACnC,SAAK,OAAO,gBAAgB;AAAA,EAC9B;AAAA,EAEA,MAAM,SAAS,SAAiB,SAAgC;AAC9D,UAAM,OAAO,GAAG,KAAK,OAAO,aAAa;AACzC,QAAI;AACF,YAAM,KAAK,QAAQ;AACnB,UAAI,SAAS,KAAK,UAAU;AAC5B,UAAG,MAAM,OAAO,YAAY,KAAK,OAAO,WAAW,MAAM,OAAO;AAC9D;AAAA,MACF;AACA,UAAI,IAAW,KAAK,SAAS;AAC7B,YAAM,EAAE,MAAM,KAAK,OAAO,WAAW,EAAE,OAAO;AAAA,QAC5C;AAAA,QACA;AAAA,QACA,WAAW;AAAA,QACX,YAAY,oBAAI,KAAK;AAAA,QACrB,YAAY,oBAAI,KAAK;AAAA,QACrB,eAAe;AAAA,QACf,iBAAiB;AAAA,MACnB,CAAC;AAAA,IACH,UAAE;AACA,YAAM,KAAK,WAAW;AAAA,IACxB;AAAA,EACF;AAAA,EAEA,MAAM,OACJ,SACA,UACe;AAEf,WAAO,IAAI,QAAQ,OAAO,SAAS,WAAW;AAC5C,YAAM,aAAa,YAAY,YAAY;AACzC,cAAM,OAAO,GAAG,KAAK,OAAO,aAAa;AACzC,YAAI;AACF,gBAAM,KAAK,QAAQ;AACnB,cAAI,IAAW,KAAK,SAAS;AAC7B,cAAI,WAAW,MAAM,EAClB,MAAM,KAAK,OAAO,WAAW,EAC7B,QAAQ,WAAW,KAAK,OAAO,EAC/B,QAAQ,aAAa,KAAK,KAAK,EAC/B,MAAM,KAAK,OAAO,aAAa,EAC/B,QAAQ,iBAAiB,KAAK,EAC9B,IAAI;AACP,mBAAS,OAAO,UAAU;AACxB,gBAAI;AACF,oBAAM,SAAS,IAAI,OAAO;AAE1B,oBAAM,EACH,MAAM,KAAK,OAAO,WAAW,EAC7B,QAAQ,MAAM,KAAK,IAAI,EAAE,EACzB,OAAO;AAAA,gBACN,WAAW;AAAA,gBACX,YAAY,oBAAI,KAAK;AAAA,cACvB,CAAC;AAAA,YACL,SAAS,OAAO;AACd,oBAAM,EACH,MAAM,KAAK,OAAO,WAAW,EAC7B,QAAQ,MAAM,KAAK,IAAI,EAAE,EACzB,OAAO;AAAA,gBACN,WAAW;AAAA,gBACX,eAAe,oBAAI,KAAK;AAAA,gBACxB,iBACG,MAAgB,WAAW;AAAA,cAChC,CAAC;AAAA,YACL;AAAA,UACF;AAAA,QACF,SAAS,OAAO;AACd,eAAK,gBAAgB,OAAO,UAAU;AACtC,iBAAO,EAAE,MAAM,+CAA+C,EAAE,MAAM,CAAC;AAAA,QACzE,UAAE;AACA,gBAAM,KAAK,WAAW;AAAA,QACxB;AAAA,MACF,GAAG,KAAK,OAAO,kBAAkB,GAAI;AAGrC,WAAK,gBAAgB,IAAI,UAAU;AAAA,IACrC,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,gBAA+B;AAEnC,eAAW,cAAc,KAAK,iBAAiB;AAC7C,oBAAc,UAAU;AAAA,IAC1B;AAEA,SAAK,gBAAgB,MAAM;AAAA,EAC7B;AACF;","names":[]}
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
all models associated in our db
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
import path from "path";
|
|
2
|
-
import os from "os";
|
|
3
|
-
import { getEnv } from "@devbro/pashmak/helper";
|
|
4
|
-
import { dirname } from "path";
|
|
5
|
-
import { fileURLToPath } from "url";
|
|
6
|
-
|
|
7
|
-
const __filename = fileURLToPath(import.meta.url);
|
|
8
|
-
const __dirname = dirname(__filename);
|
|
9
|
-
|
|
10
|
-
export default {
|
|
11
|
-
databases: await import("./databases"),
|
|
12
|
-
storages: await import("./storages"),
|
|
13
|
-
mailer: await import("./mailer"),
|
|
14
|
-
port: getEnv("PORT", 3000),
|
|
15
|
-
file_upload_path: path.join(os.tmpdir(), ""),
|
|
16
|
-
migration: {
|
|
17
|
-
path: path.join(__dirname, "..", "database/migrations"),
|
|
18
|
-
},
|
|
19
|
-
loggers: await import("./loggers"),
|
|
20
|
-
jwt: {
|
|
21
|
-
options: {
|
|
22
|
-
algorithm: "RS256",
|
|
23
|
-
expiresIn: 8 * 3600,
|
|
24
|
-
},
|
|
25
|
-
refresh_options: {
|
|
26
|
-
algorithm: "RS256",
|
|
27
|
-
expiresIn: 3 * 24 * 3600,
|
|
28
|
-
},
|
|
29
|
-
secret:
|
|
30
|
-
"-----BEGIN PRIVATE KEY-----\n" +
|
|
31
|
-
process.env.jwt_secret_private +
|
|
32
|
-
"\n-----END PRIVATE KEY-----\n",
|
|
33
|
-
public:
|
|
34
|
-
"-----BEGIN PUBLIC KEY-----\n" +
|
|
35
|
-
process.env.jwt_secret_public +
|
|
36
|
-
"\n-----END PUBLIC KEY-----\n",
|
|
37
|
-
public_retired:
|
|
38
|
-
"-----BEGIN PUBLIC KEY-----\n" +
|
|
39
|
-
process.env.jwt_secret_public_retired +
|
|
40
|
-
"\n-----END PUBLIC KEY-----\n",
|
|
41
|
-
},
|
|
42
|
-
};
|