@neohm/nestend 3.3.4 → 3.3.5
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/README.md +3 -1
- package/dist/common/queue.module.d.ts +2 -0
- package/dist/common/queue.module.d.ts.map +1 -1
- package/dist/common/queue.module.js +10 -0
- package/dist/common/queue.module.js.map +1 -1
- package/dist/common/types/queue.types.d.ts +2 -0
- package/dist/common/types/queue.types.d.ts.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -54,6 +54,8 @@ import {
|
|
|
54
54
|
CommonModule, // global: encryption, cache, monitoring, audit
|
|
55
55
|
SystemPropertyModule, // sys_properties get/set + FeatureFlagService
|
|
56
56
|
QueueModule, // BullMQ queue + worker (BULL_* env vars)
|
|
57
|
+
// ...or own the Redis connection in your own config, keeping one instance:
|
|
58
|
+
// QueueModule.withConnection(queueConnection),
|
|
57
59
|
AuthModule, // JWT access/refresh auth + API keys
|
|
58
60
|
DocumentModule, // S3 / MinIO file storage
|
|
59
61
|
TenantModule, // multi-tenancy context + middleware
|
|
@@ -103,7 +105,7 @@ these are free to change without a breaking release.
|
|
|
103
105
|
| ----------------- | ------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
104
106
|
| Entities | `RootEntity`, `CommonEntity`, `CommonAdminEntity`, `UserEntity`, `AdminUserEntity`, `SystemRoleEntity`, `SystemAdminRoleEntity`, ... | uuid PK, soft deletes, `created_by`, jsonb `attributes`; entity-level `findOneOrNew`, `softDelete`, `hardDelete`, `restore`, `paginate` statics |
|
|
105
107
|
| Migrations | `MigrationUtility`, `SeederUtility` (the 26 table migrations ship in `dist/migrations` — glob them, they are not barrel exports) | fluent `this.string()`, `this.numeric()`, `addRecord()` seeding |
|
|
106
|
-
| Queue | `QueueModule`, `QueueService`, `CommonJob`
|
|
108
|
+
| Queue | `QueueModule`, `QueueModule.withConnection()`, `QueueService`, `CommonJob` | BullMQ `@Processor`/`WorkerHost` consumer; auto-discovered jobs, duplicate prevention, recurring schedulers, 1-day TTL, retries, failures persisted to `sys_failed_jobs`; connection from `BULL_REDIS_*` or supplied by the app — never register `BullModule.forRoot()` yourself, two roots race over the worker's connection |
|
|
107
109
|
| Scheduled events | `SystemScheduledTaskEntity`, `ScheduledEventEntity`, `ScheduleKind`, `ScheduleSpec`, `IsCronExpression` | schedule definitions in `sys_scheduled_tasks` → events in `sys_scheduled_events`; interval / cron / once specs with timezones, drift-free slots, horizon materialisation, catch-up + overlap policies, fire-once dispatch with backoff, cadence via `SCHEDULED_EVENT_MIN` |
|
|
108
110
|
| Auth | `AuthModule`, `AuthService.validateRole()`, `Auth`, `JwtMiddleware` | imperative auth (open by default); JwtMiddleware resolves the user into `Auth`'s AsyncLocalStorage context per request; access + rotating refresh tokens; session-based logout invalidation (`sys_auth_sessions`); Google SSO via ID token at `POST /auth/google`; impersonation — a tenantless `has_global_access` user signs into one organization at `POST /auth/impersonation/login` |
|
|
109
111
|
| Admin auth | `AdminAuthService.validateRole()`, `AdminAuth`, `AdminJwtMiddleware` (endpoints at `/admin/auth`) | fully separate stack for back-office admins — own users table (`sys_admin_users`), own roles (`sys_admin_roles`/`sys_auser_roles`), own sessions/refresh tokens (shared tables, `is_admin` flag) |
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { DynamicModule } from '@nestjs/common';
|
|
2
|
+
import { ConnectionOptions } from 'bullmq';
|
|
2
3
|
import { QueueModuleOptions } from './types/queue.types';
|
|
3
4
|
export declare class QueueModule {
|
|
5
|
+
static withConnection(connection: ConnectionOptions): typeof QueueModule;
|
|
4
6
|
static register(options?: QueueModuleOptions): DynamicModule;
|
|
5
7
|
}
|
|
6
8
|
//# sourceMappingURL=queue.module.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queue.module.d.ts","sourceRoot":"","sources":["../../src/common/queue.module.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EAId,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"queue.module.d.ts","sourceRoot":"","sources":["../../src/common/queue.module.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EAId,MAAM,gBAAgB,CAAC;AAIxB,OAAO,EAAE,iBAAiB,EAA4B,MAAM,QAAQ,CAAC;AAKrE,OAAO,EAAe,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAuItE,qBACa,WAAW;IActB,MAAM,CAAC,cAAc,CAAC,UAAU,EAAE,iBAAiB,GAAG,OAAO,WAAW;IAKxE,MAAM,CAAC,QAAQ,CAAC,OAAO,GAAE,kBAAuB,GAAG,aAAa;CAajE"}
|
|
@@ -21,12 +21,16 @@ const system_scheduled_task_subscriber_1 = require("./subscribers/system.schedul
|
|
|
21
21
|
function resolveQueueName(name) {
|
|
22
22
|
return name || process.env.BULL_QUEUE_NAME || queue_enum_1.QueueDefault.NAME;
|
|
23
23
|
}
|
|
24
|
+
let providedConnection;
|
|
24
25
|
function createQueueConnection() {
|
|
26
|
+
if (providedConnection)
|
|
27
|
+
return providedConnection;
|
|
25
28
|
return {
|
|
26
29
|
host: process.env.BULL_REDIS_HOST,
|
|
27
30
|
port: parseInt(process.env.BULL_REDIS_PORT, 10),
|
|
28
31
|
password: process.env.BULL_REDIS_PASSWORD || undefined,
|
|
29
32
|
db: parseInt(process.env.BULL_REDIS_DB, 10),
|
|
33
|
+
maxRetriesPerRequest: null,
|
|
30
34
|
};
|
|
31
35
|
}
|
|
32
36
|
function createDefaultJobOptions() {
|
|
@@ -83,7 +87,13 @@ function buildMetadata(queueName, dataSourceName, jobMaps) {
|
|
|
83
87
|
};
|
|
84
88
|
}
|
|
85
89
|
let QueueModule = QueueModule_1 = class QueueModule {
|
|
90
|
+
static withConnection(connection) {
|
|
91
|
+
providedConnection = connection;
|
|
92
|
+
return QueueModule_1;
|
|
93
|
+
}
|
|
86
94
|
static register(options = {}) {
|
|
95
|
+
if (options.connection)
|
|
96
|
+
providedConnection = options.connection;
|
|
87
97
|
return {
|
|
88
98
|
module: QueueModule_1,
|
|
89
99
|
...buildMetadata(resolveQueueName(options.queueName), options.dataSourceName, options.jobMaps),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queue.module.js","sourceRoot":"","sources":["../../src/common/queue.module.ts"],"names":[],"mappings":";;;;;;;;;;AAAA,2CAKwB;AACxB,2CAA2D;AAC3D,uCAAiE;AACjE,6CAAqD;AAGrD,mDAAkD;AAClD,2DAAuD;AACvD,4DAAwD;AAExD,oDAAoD;AACpD,gFAA0E;AAC1E,qGAA+F;AAE/F,SAAS,gBAAgB,CAAC,IAAa;IACrC,OAAO,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,yBAAY,CAAC,IAAI,CAAC;AAClE,CAAC;
|
|
1
|
+
{"version":3,"file":"queue.module.js","sourceRoot":"","sources":["../../src/common/queue.module.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { ConnectionOptions } from 'bullmq';
|
|
1
2
|
export interface AddJobOptions {
|
|
2
3
|
delay?: number;
|
|
3
4
|
priority?: number;
|
|
@@ -61,6 +62,7 @@ export interface JobPayloadEnvelope {
|
|
|
61
62
|
export interface QueueModuleOptions {
|
|
62
63
|
queueName?: string;
|
|
63
64
|
dataSourceName?: string;
|
|
65
|
+
connection?: ConnectionOptions;
|
|
64
66
|
jobMaps?: JobClassMap;
|
|
65
67
|
}
|
|
66
68
|
export type JobClass = (abstract new (...args: any[]) => any) & {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queue.types.d.ts","sourceRoot":"","sources":["../../../src/common/types/queue.types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,aAAa;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE;QAAE,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAC3D,gBAAgB,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IACpC,YAAY,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC5B,gBAAgB,CAAC,EAAE,GAAG,EAAE,CAAC;IACzB,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AACD,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,aAAa,CAAC;IACvB,OAAO,EAAE,GAAG,CAAC;CACd;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,UAAU;IACzB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ,EAAE,CAAC,EAAE,IAAI,CAAC;IACV,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAGD,MAAM,WAAW,aAAa;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAC;IAEb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,aAAa,CAAC;CACzB;AAMD,MAAM,WAAW,kBAAkB;IACjC,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,gBAAgB,EAAE,OAAO,EAAE,CAAC;IAC5B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC;AAED,MAAM,WAAW,kBAAkB;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"queue.types.d.ts","sourceRoot":"","sources":["../../../src/common/types/queue.types.ts"],"names":[],"mappings":"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"}
|