@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.
Files changed (40) hide show
  1. package/dist/app/console/project/base_project/package.json.tpl +1 -1
  2. package/dist/app/console/project/base_project/src/app/models/index.ts.tpl +1 -0
  3. package/dist/app/console/project/base_project/src/config/caches.ts.tpl +7 -0
  4. package/dist/app/console/project/base_project/src/config/databases.ts.tpl +10 -6
  5. package/dist/app/console/project/base_project/src/config/default.mts.tpl +35 -0
  6. package/dist/app/console/project/base_project/src/config/loggers.ts.tpl +11 -7
  7. package/dist/app/console/project/base_project/src/config/mailer.ts.tpl +21 -1
  8. package/dist/app/console/project/base_project/src/config/queues.ts.tpl +7 -0
  9. package/dist/app/console/project/base_project/src/config/storages.ts.tpl +8 -4
  10. package/dist/app/console/project/base_project/tsconfig.json.tpl +7 -4
  11. package/dist/app/console/queue/queue_migration.tpl +2 -1
  12. package/dist/bin/app/console/DefaultCommand.cjs +53 -34
  13. package/dist/bin/app/console/KeyGenerateCommand.cjs +53 -34
  14. package/dist/bin/app/console/StartCommand.cjs +55 -36
  15. package/dist/bin/app/console/generate/GenerateControllerCommand.cjs +53 -34
  16. package/dist/bin/app/console/generate/index.cjs +53 -34
  17. package/dist/bin/app/console/index.cjs +54 -36
  18. package/dist/bin/app/console/migrate/GenerateMigrateCommand.cjs +53 -34
  19. package/dist/bin/app/console/migrate/MigrateCommand.cjs +52 -34
  20. package/dist/bin/app/console/migrate/MigrateRollbackCommand.cjs +52 -34
  21. package/dist/bin/app/console/migrate/index.cjs +52 -34
  22. package/dist/bin/app/console/queue/GenerateQueueMigrateCommand.cjs +53 -34
  23. package/dist/bin/cache.cjs +53 -34
  24. package/dist/bin/facades.cjs +52 -34
  25. package/dist/bin/factories.cjs +58 -39
  26. package/dist/bin/index.cjs +62 -43
  27. package/dist/bin/middlewares.cjs +52 -34
  28. package/dist/bin/queue.cjs +675 -18
  29. package/dist/facades.d.mts +2 -1
  30. package/dist/facades.mjs +12 -8
  31. package/dist/facades.mjs.map +1 -1
  32. package/dist/factories.d.mts +5 -5
  33. package/dist/factories.mjs +17 -10
  34. package/dist/factories.mjs.map +1 -1
  35. package/dist/queue.d.mts +8 -4
  36. package/dist/queue.mjs +26 -18
  37. package/dist/queue.mjs.map +1 -1
  38. package/package.json +1 -1
  39. package/dist/app/console/project/base_project/src/app/models/README.md.tpl +0 -1
  40. package/dist/app/console/project/base_project/src/config/default.ts.tpl +0 -42
@@ -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.QueueConnection<any>;
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 { StorageFactory } from "@devbro/neko-storage";
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
- QueueFactory
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
- (label = "default") => StorageFactory.create(config.get(["storages", label].join(".")))
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
- let provider = MailerFactory.create(
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 rc = QueueFactory.create(queue_config.type, queue_config);
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.type,
116
+ cache_config.provider,
113
117
  cache_config.config
114
118
  );
115
119
  return new Cache(provider);
@@ -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, StorageFactory } 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 QueueFactory,\n} from \"./factories.mjs\";\nimport { Cache, CacheProviderInterface } from \"@devbro/neko-cache\";\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 StorageFactory.create(config.get([\"storages\", label].join(\".\"))),\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 let provider: MailerProvider | undefined =\n MailerFactory.create<MailerProvider>(\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 rc = QueueFactory.create(queue_config.type, queue_config);\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<CacheProviderInterface>(\n cache_config.type,\n cache_config.config,\n );\n\n return new Cache(provider);\n});\n"],"mappings":"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","names":[]}
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":[]}
@@ -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 QueueFactory {
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[]): QueueConnection<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<T>(key: string, factory: (...args: any[]) => CacheProviderInterface): void;
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, QueueFactory };
26
+ export { CacheProviderFactory, FlexibleFactory, MailerFactory, QueueTransportFactory };
@@ -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("SES", (opt) => {
56
+ MailerFactory.register("ses", (opt) => {
56
57
  return new SESProvider(opt);
57
58
  });
58
- MailerFactory.register("SMTP", (opt) => {
59
+ MailerFactory.register("smtp", (opt) => {
59
60
  return new SMTPProvider(opt);
60
61
  });
61
- MailerFactory.register("MEMORY", (opt) => {
62
+ MailerFactory.register("memory", (opt) => {
62
63
  return new MemoryProvider();
63
64
  });
64
- class QueueFactory {
65
+ class QueueTransportFactory {
65
66
  static {
66
- __name(this, "QueueFactory");
67
+ __name(this, "QueueTransportFactory");
67
68
  }
68
69
  static instance = new FlexibleFactory();
69
70
  static register(key, factory) {
70
- QueueFactory.instance.register(key, factory);
71
+ QueueTransportFactory.instance.register(key, factory);
71
72
  }
72
73
  static create(key, ...args) {
73
- return QueueFactory.instance.create(key, ...args);
74
+ return QueueTransportFactory.instance.create(key, ...args);
74
75
  }
75
76
  }
76
- QueueFactory.register("database", (opt) => {
77
+ QueueTransportFactory.register("database", (opt) => {
77
78
  let transport = new DatabaseTransport(opt);
78
79
  return new QueueConnection(transport);
79
80
  });
80
- QueueFactory.register("memory", (opt) => {
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
- QueueFactory
119
+ QueueTransportFactory
113
120
  };
114
121
  //# sourceMappingURL=factories.mjs.map
@@ -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(\"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 QueueFactory {\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 QueueFactory.instance.register(key, factory);\n }\n\n static create<T>(key: string, ...args: any[]): QueueConnection<any> {\n return QueueFactory.instance.create(key, ...args);\n }\n}\n\nQueueFactory.register(\"database\", (opt) => {\n let transport = new DatabaseTransport(opt);\n return new QueueConnection(transport);\n});\n\nQueueFactory.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<T>(\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"],"mappings":"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","names":[]}
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
- constructor(db_config: any);
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 { PostgresqlConnection } from "@devbro/neko-sql";
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.listenInterval = interval;
22
+ this.config.listen_interval = interval;
19
23
  }
20
24
  setMessageLimit(limit) {
21
- this.messageLimit = limit;
25
+ this.config.message_limit = limit;
22
26
  }
23
27
  async dispatch(channel, message) {
24
- const conn = new PostgresqlConnection(this.db_config);
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("queue_messages").insert({
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 = new PostgresqlConnection(this.db_config);
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("queue_messages").whereOp("channel", "=", channel).whereOp("processed", "=", false).limit(this.messageLimit).orderBy("last_tried_at", "asc").get();
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("queue_messages").whereOp("id", "=", msg.id).update({
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("queue_messages").whereOp("id", "=", msg.id).update({
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
- reject(error);
74
+ logger().error("Error in DatabaseTransport listen interval:", { error });
67
75
  } finally {
68
76
  await conn.disconnect();
69
77
  }
70
- }, this.listenInterval);
78
+ }, this.config.listen_interval * 1e3);
71
79
  this.activeIntervals.add(intervalId);
72
80
  });
73
81
  }
@@ -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\";\n\nexport class DatabaseTransport implements QueueTransportInterface {\n listenInterval = 60000; // default to 1 minute\n messageLimit = 100; // default to 100 messages per fetch\n private activeIntervals: Set<NodeJS.Timeout> = new Set();\n\n constructor(private db_config: any) {}\n\n setListenInterval(interval: number): void {\n this.listenInterval = interval;\n }\n\n setMessageLimit(limit: number): void {\n this.messageLimit = limit;\n }\n\n async dispatch(channel: string, message: string): Promise<void> {\n const conn = new PostgresqlConnection(this.db_config);\n try {\n await conn.connect();\n let q: Query = conn.getQuery();\n await q.table(\"queue_messages\").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 = new PostgresqlConnection(this.db_config);\n try {\n await conn.connect();\n let q: Query = conn.getQuery();\n let messages = await q\n .table(\"queue_messages\")\n .whereOp(\"channel\", \"=\", channel)\n .whereOp(\"processed\", \"=\", false)\n .limit(this.messageLimit)\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(\"queue_messages\")\n .whereOp(\"id\", \"=\", msg.id)\n .update({\n processed: true,\n updated_at: new Date(),\n });\n } catch (error) {\n await q\n .table(\"queue_messages\")\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 // If there's an error with the interval itself, remove it from tracking\n this.activeIntervals.delete(intervalId);\n reject(error);\n } finally {\n await conn.disconnect();\n }\n }, this.listenInterval);\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;AAEd,SAAS,4BAA4B;AAG9B,MAAM,kBAAqD;AAAA,EAKhE,YAAoB,WAAgB;AAAhB;AAAA,EAAiB;AAAA,EAVvC,OAKkE;AAAA;AAAA;AAAA,EAChE,iBAAiB;AAAA;AAAA,EACjB,eAAe;AAAA;AAAA,EACP,kBAAuC,oBAAI,IAAI;AAAA,EAIvD,kBAAkB,UAAwB;AACxC,SAAK,iBAAiB;AAAA,EACxB;AAAA,EAEA,gBAAgB,OAAqB;AACnC,SAAK,eAAe;AAAA,EACtB;AAAA,EAEA,MAAM,SAAS,SAAiB,SAAgC;AAC9D,UAAM,OAAO,IAAI,qBAAqB,KAAK,SAAS;AACpD,QAAI;AACF,YAAM,KAAK,QAAQ;AACnB,UAAI,IAAW,KAAK,SAAS;AAC7B,YAAM,EAAE,MAAM,gBAAgB,EAAE,OAAO;AAAA,QACrC;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,IAAI,qBAAqB,KAAK,SAAS;AACpD,YAAI;AACF,gBAAM,KAAK,QAAQ;AACnB,cAAI,IAAW,KAAK,SAAS;AAC7B,cAAI,WAAW,MAAM,EAClB,MAAM,gBAAgB,EACtB,QAAQ,WAAW,KAAK,OAAO,EAC/B,QAAQ,aAAa,KAAK,KAAK,EAC/B,MAAM,KAAK,YAAY,EACvB,QAAQ,iBAAiB,KAAK,EAC9B,IAAI;AACP,mBAAS,OAAO,UAAU;AACxB,gBAAI;AACF,oBAAM,SAAS,IAAI,OAAO;AAE1B,oBAAM,EACH,MAAM,gBAAgB,EACtB,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,gBAAgB,EACtB,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;AAEd,eAAK,gBAAgB,OAAO,UAAU;AACtC,iBAAO,KAAK;AAAA,QACd,UAAE;AACA,gBAAM,KAAK,WAAW;AAAA,QACxB;AAAA,MACF,GAAG,KAAK,cAAc;AAGtB,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":[]}
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,6 +1,6 @@
1
1
  {
2
2
  "name": "@devbro/pashmak",
3
- "version": "0.1.18",
3
+ "version": "0.1.19",
4
4
  "description": "testing application for the entire repo",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.mjs",
@@ -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
- };