@archlast/server 0.1.7 → 0.1.9
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/LICENSE +21 -21
- package/README.md +14 -10
- package/dist/admin/auth.d.ts +24 -5
- package/dist/admin/auth.js +49 -25
- package/dist/admin/schema.d.ts +122 -32
- package/dist/admin/schema.js +131 -95
- package/dist/admin/seed.d.ts +1 -1
- package/dist/admin/seed.js +79 -47
- package/dist/auth/api-key-resolver.d.ts +1 -1
- package/dist/auth/api-key-resolver.js +7 -3
- package/dist/auth/archlast-auth-adapter.d.ts +2 -5
- package/dist/auth/archlast-auth-adapter.js +1 -1
- package/dist/auth/better-auth-adapter.d.ts.map +1 -1
- package/dist/auth/better-auth-adapter.js +41 -26
- package/dist/auth/better-auth-adapter.js.map +1 -1
- package/dist/auth/better-auth-admin.d.ts.map +1 -1
- package/dist/auth/better-auth-admin.js +1 -1
- package/dist/auth/better-auth-admin.js.map +1 -1
- package/dist/auth/better-auth-api-key-resolver.js +1 -1
- package/dist/auth/better-auth-api-key-resolver.js.map +1 -1
- package/dist/auth/better-auth-instance.d.ts +247 -303
- package/dist/auth/better-auth-instance.d.ts.map +1 -1
- package/dist/auth/better-auth-instance.js +11 -0
- package/dist/auth/better-auth-instance.js.map +1 -1
- package/dist/auth/better-auth-seed.d.ts +5 -2
- package/dist/auth/better-auth-seed.js +31 -22
- package/dist/auth/better-auth-session-adapter.d.ts.map +1 -1
- package/dist/auth/better-auth-session-adapter.js +14 -10
- package/dist/auth/better-auth-session-adapter.js.map +1 -1
- package/dist/auth/errors.d.ts.map +1 -1
- package/dist/auth/errors.js +11 -11
- package/dist/auth/errors.js.map +1 -1
- package/dist/auth/oauth-proxy.d.ts +5 -2
- package/dist/auth/oauth-proxy.js +23 -27
- package/dist/auth/resolver.d.ts.map +1 -1
- package/dist/auth/resolver.js.map +1 -1
- package/dist/auth/role-helpers.d.ts +1 -1
- package/dist/auth/role-helpers.d.ts.map +1 -1
- package/dist/auth/role-helpers.js.map +1 -1
- package/dist/auth/session-manager.d.ts +2 -5
- package/dist/auth/session-manager.js +16 -6
- package/dist/auth/system/better-auth-schema.d.ts.map +1 -1
- package/dist/auth/system/better-auth-schema.js +6 -23
- package/dist/auth/system/better-auth-schema.js.map +1 -1
- package/dist/cache/circuit-breaker.d.ts +81 -0
- package/dist/cache/circuit-breaker.d.ts.map +1 -0
- package/dist/cache/circuit-breaker.js +170 -0
- package/dist/cache/circuit-breaker.js.map +1 -0
- package/dist/cache/client.d.ts +6 -3
- package/dist/cache/client.d.ts.map +1 -1
- package/dist/cache/client.js +12 -53
- package/dist/cache/client.js.map +1 -1
- package/dist/cache/index.d.ts +2 -0
- package/dist/cache/index.d.ts.map +1 -1
- package/dist/cache/index.js +5 -1
- package/dist/cache/index.js.map +1 -1
- package/dist/cache/invalidation-queue.d.ts +63 -0
- package/dist/cache/invalidation-queue.d.ts.map +1 -0
- package/dist/cache/invalidation-queue.js +196 -0
- package/dist/cache/invalidation-queue.js.map +1 -0
- package/dist/cache/layers.d.ts +14 -4
- package/dist/cache/layers.d.ts.map +1 -1
- package/dist/cache/layers.js +66 -72
- package/dist/cache/layers.js.map +1 -1
- package/dist/cache/manager.d.ts.map +1 -1
- package/dist/cache/manager.js +6 -41
- package/dist/cache/manager.js.map +1 -1
- package/dist/cache/protocol.d.ts +4 -39
- package/dist/cache/protocol.d.ts.map +1 -1
- package/dist/cache/protocol.js.map +1 -1
- package/dist/cache/redis-adapter.d.ts +103 -0
- package/dist/cache/redis-adapter.d.ts.map +1 -0
- package/dist/cache/redis-adapter.js +424 -0
- package/dist/cache/redis-adapter.js.map +1 -0
- package/dist/cache/run-sidecar.js +10 -1
- package/dist/cache/run-sidecar.js.map +1 -1
- package/dist/cache/sidecar-server.d.ts +51 -1
- package/dist/cache/sidecar-server.d.ts.map +1 -1
- package/dist/cache/sidecar-server.js +368 -22
- package/dist/cache/sidecar-server.js.map +1 -1
- package/dist/cache/store.d.ts +43 -0
- package/dist/cache/store.d.ts.map +1 -1
- package/dist/cache/store.js +69 -76
- package/dist/cache/store.js.map +1 -1
- package/dist/cache/strategies.d.ts +2 -9
- package/dist/cache/strategies.d.ts.map +1 -1
- package/dist/cache/types.d.ts +130 -0
- package/dist/cache/types.d.ts.map +1 -0
- package/dist/cache/types.js +60 -0
- package/dist/cache/types.js.map +1 -0
- package/dist/config/bullmq.d.ts +16 -0
- package/dist/config/bullmq.d.ts.map +1 -0
- package/dist/config/bullmq.js +103 -0
- package/dist/config/bullmq.js.map +1 -0
- package/dist/config/index.d.ts +1 -0
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +1 -0
- package/dist/config/index.js.map +1 -1
- package/dist/config/schema.d.ts +80 -6
- package/dist/config/schema.d.ts.map +1 -1
- package/dist/config/schema.js +71 -6
- package/dist/config/schema.js.map +1 -1
- package/dist/config/service.d.ts +54 -4
- package/dist/config/service.d.ts.map +1 -1
- package/dist/config/service.js +56 -2
- package/dist/config/service.js.map +1 -1
- package/dist/controllers/admin/admin-tokens.controller.d.ts +131 -115
- package/dist/controllers/admin/admin-tokens.controller.js +117 -98
- package/dist/controllers/admin/api-keys.controller.d.ts +1 -1
- package/dist/controllers/admin/api-keys.controller.d.ts.map +1 -1
- package/dist/controllers/admin/api-keys.controller.js.map +1 -1
- package/dist/controllers/admin/app-users.controller.d.ts +274 -243
- package/dist/controllers/admin/app-users.controller.js +301 -257
- package/dist/controllers/admin/auth.controller.d.ts +260 -236
- package/dist/controllers/admin/auth.controller.js +197 -174
- package/dist/controllers/admin/backup.controller.d.ts.map +1 -1
- package/dist/controllers/admin/backup.controller.js.map +1 -1
- package/dist/controllers/admin/settings.controller.d.ts +1 -1
- package/dist/controllers/admin/storage-stats.controller.d.ts +63 -0
- package/dist/controllers/admin/storage-stats.controller.d.ts.map +1 -0
- package/dist/controllers/admin/storage-stats.controller.js +33 -0
- package/dist/controllers/admin/storage-stats.controller.js.map +1 -0
- package/dist/controllers/admin/tenants.controller.d.ts.map +1 -1
- package/dist/controllers/admin/tenants.controller.js.map +1 -1
- package/dist/controllers/admin/users.controller.d.ts +1 -1
- package/dist/controllers/admin/users.controller.d.ts.map +1 -1
- package/dist/controllers/admin/users.controller.js.map +1 -1
- package/dist/controllers/auth.controller.d.ts +289 -271
- package/dist/controllers/auth.controller.js +275 -226
- package/dist/controllers/crud-generator.controller.d.ts.map +1 -1
- package/dist/controllers/crud-generator.controller.js +4 -2
- package/dist/controllers/crud-generator.controller.js.map +1 -1
- package/dist/controllers/index.d.ts +1 -1
- package/dist/controllers/index.d.ts.map +1 -1
- package/dist/controllers/index.js.map +1 -1
- package/dist/controllers/introspection.controller.d.ts +666 -0
- package/dist/controllers/introspection.controller.d.ts.map +1 -1
- package/dist/controllers/introspection.controller.js +628 -0
- package/dist/controllers/introspection.controller.js.map +1 -1
- package/dist/controllers/invite.controller.d.ts +190 -170
- package/dist/controllers/invite.controller.js +183 -164
- package/dist/controllers/mfa.controller.d.ts +205 -183
- package/dist/controllers/mfa.controller.js +131 -111
- package/dist/controllers/otp.controller.d.ts +194 -171
- package/dist/controllers/otp.controller.js +192 -175
- package/dist/controllers/storage.controller.d.ts.map +1 -1
- package/dist/controllers/storage.controller.js.map +1 -1
- package/dist/controllers/system.controller.d.ts +21 -3
- package/dist/controllers/system.controller.d.ts.map +1 -1
- package/dist/controllers/system.controller.js +32 -2
- package/dist/controllers/system.controller.js.map +1 -1
- package/dist/controllers/tenant.controller.d.ts +258 -227
- package/dist/controllers/tenant.controller.js +224 -200
- package/dist/db/cachedclient.d.ts +6 -11
- package/dist/db/cachedclient.d.ts.map +1 -1
- package/dist/db/cachedclient.js +79 -43
- package/dist/db/cachedclient.js.map +1 -1
- package/dist/db/distributed-client.d.ts +79 -24
- package/dist/db/distributed-client.js +23 -24
- package/dist/db/factory.d.ts +3 -8
- package/dist/db/factory.d.ts.map +1 -1
- package/dist/db/factory.js +3 -22
- package/dist/db/factory.js.map +1 -1
- package/dist/db/socket-client.d.ts +7 -0
- package/dist/db/socket-client.d.ts.map +1 -1
- package/dist/db/socket-client.js +140 -11
- package/dist/db/socket-client.js.map +1 -1
- package/dist/deployment/handler.d.ts +10 -2
- package/dist/deployment/handler.d.ts.map +1 -1
- package/dist/deployment/handler.js +103 -21
- package/dist/deployment/handler.js.map +1 -1
- package/dist/deployment/persistence.d.ts.map +1 -1
- package/dist/deployment/persistence.js +6 -1
- package/dist/deployment/persistence.js.map +1 -1
- package/dist/docker/compose.d.ts.map +1 -1
- package/dist/docker/compose.js +76 -0
- package/dist/docker/compose.js.map +1 -1
- package/dist/engine/runner.d.ts.map +1 -1
- package/dist/engine/runner.js +0 -43
- package/dist/engine/runner.js.map +1 -1
- package/dist/functions/built-in/auth-apikey.d.ts.map +1 -1
- package/dist/functions/built-in/auth-apikey.js.map +1 -1
- package/dist/functions/built-in/system-cache.d.ts.map +1 -1
- package/dist/functions/built-in/system-cache.js +6 -31
- package/dist/functions/built-in/system-cache.js.map +1 -1
- package/dist/functions/built-in/system-data.d.ts.map +1 -1
- package/dist/functions/built-in/system-data.js +4 -2
- package/dist/functions/built-in/system-data.js.map +1 -1
- package/dist/functions/definition.d.ts.map +1 -1
- package/dist/functions/definition.js +6 -2
- package/dist/functions/definition.js.map +1 -1
- package/dist/http/router.d.ts +1 -0
- package/dist/http/router.d.ts.map +1 -1
- package/dist/http/router.js +14 -3
- package/dist/http/router.js.map +1 -1
- package/dist/http/routes/metrics.d.ts +42 -0
- package/dist/http/routes/metrics.d.ts.map +1 -0
- package/dist/http/routes/metrics.js +29 -0
- package/dist/http/routes/metrics.js.map +1 -0
- package/dist/http/server.d.ts +1 -0
- package/dist/http/server.d.ts.map +1 -1
- package/dist/http/server.js +63 -22
- package/dist/http/server.js.map +1 -1
- package/dist/ipc/socket-bridge.d.ts +1 -0
- package/dist/ipc/socket-bridge.d.ts.map +1 -1
- package/dist/ipc/socket-bridge.js +5 -1
- package/dist/ipc/socket-bridge.js.map +1 -1
- package/dist/jobs/bullmq-adapter.d.ts +154 -0
- package/dist/jobs/bullmq-adapter.d.ts.map +1 -0
- package/dist/jobs/bullmq-adapter.js +688 -0
- package/dist/jobs/bullmq-adapter.js.map +1 -0
- package/dist/jobs/bullmq-circuit-breaker.d.ts +133 -0
- package/dist/jobs/bullmq-circuit-breaker.d.ts.map +1 -0
- package/dist/jobs/bullmq-circuit-breaker.js +323 -0
- package/dist/jobs/bullmq-circuit-breaker.js.map +1 -0
- package/dist/jobs/bullmq-dlq-manager.d.ts +155 -0
- package/dist/jobs/bullmq-dlq-manager.d.ts.map +1 -0
- package/dist/jobs/bullmq-dlq-manager.js +325 -0
- package/dist/jobs/bullmq-dlq-manager.js.map +1 -0
- package/dist/jobs/bullmq-metrics.d.ts +104 -0
- package/dist/jobs/bullmq-metrics.d.ts.map +1 -0
- package/dist/jobs/bullmq-metrics.js +323 -0
- package/dist/jobs/bullmq-metrics.js.map +1 -0
- package/dist/jobs/bullmq-priority-service.d.ts +173 -0
- package/dist/jobs/bullmq-priority-service.d.ts.map +1 -0
- package/dist/jobs/bullmq-priority-service.js +390 -0
- package/dist/jobs/bullmq-priority-service.js.map +1 -0
- package/dist/jobs/bullmq-scheduler.d.ts +111 -0
- package/dist/jobs/bullmq-scheduler.d.ts.map +1 -0
- package/dist/jobs/bullmq-scheduler.js +300 -0
- package/dist/jobs/bullmq-scheduler.js.map +1 -0
- package/dist/jobs/bullmq-worker.d.ts +155 -0
- package/dist/jobs/bullmq-worker.d.ts.map +1 -0
- package/dist/jobs/bullmq-worker.js +651 -0
- package/dist/jobs/bullmq-worker.js.map +1 -0
- package/dist/jobs/circuit-breaker.d.ts +120 -0
- package/dist/jobs/circuit-breaker.d.ts.map +1 -0
- package/dist/jobs/circuit-breaker.js +262 -0
- package/dist/jobs/circuit-breaker.js.map +1 -0
- package/dist/jobs/index.d.ts +1 -1
- package/dist/jobs/index.d.ts.map +1 -1
- package/dist/jobs/index.js.map +1 -1
- package/dist/jobs/queue.d.ts +120 -1
- package/dist/jobs/queue.d.ts.map +1 -1
- package/dist/jobs/queue.js +487 -9
- package/dist/jobs/queue.js.map +1 -1
- package/dist/jobs/redis-connection.d.ts +50 -0
- package/dist/jobs/redis-connection.d.ts.map +1 -0
- package/dist/jobs/redis-connection.js +123 -0
- package/dist/jobs/redis-connection.js.map +1 -0
- package/dist/jobs/run-scheduler.js +163 -10
- package/dist/jobs/run-scheduler.js.map +1 -1
- package/dist/jobs/run-worker.js +101 -9
- package/dist/jobs/run-worker.js.map +1 -1
- package/dist/jobs/worker-thread.d.ts +6 -0
- package/dist/jobs/worker-thread.d.ts.map +1 -1
- package/dist/jobs/worker-thread.js +37 -8
- package/dist/jobs/worker-thread.js.map +1 -1
- package/dist/jobs/worker.d.ts +33 -0
- package/dist/jobs/worker.d.ts.map +1 -1
- package/dist/jobs/worker.js +358 -115
- package/dist/jobs/worker.js.map +1 -1
- package/dist/linq/async-enumerable.d.ts.map +1 -1
- package/dist/linq/async-enumerable.js.map +1 -1
- package/dist/linq/enumerable.d.ts.map +1 -1
- package/dist/linq/enumerable.js +10 -10
- package/dist/linq/enumerable.js.map +1 -1
- package/dist/metrics/collector.d.ts +26 -0
- package/dist/metrics/collector.d.ts.map +1 -0
- package/dist/metrics/collector.js +103 -0
- package/dist/metrics/collector.js.map +1 -0
- package/dist/polling/updates.controller.d.ts +57 -0
- package/dist/polling/updates.controller.d.ts.map +1 -0
- package/dist/polling/updates.controller.js +70 -0
- package/dist/polling/updates.controller.js.map +1 -0
- package/dist/repository/db-set.d.ts.map +1 -1
- package/dist/repository/db-set.js +12 -8
- package/dist/repository/db-set.js.map +1 -1
- package/dist/repository/ef-core.d.ts.map +1 -1
- package/dist/repository/ef-core.js +6 -6
- package/dist/repository/ef-core.js.map +1 -1
- package/dist/repository/factory.d.ts +1 -1
- package/dist/repository/factory.d.ts.map +1 -1
- package/dist/repository/factory.js.map +1 -1
- package/dist/repository/interfaces.d.ts.map +1 -1
- package/dist/repository/interfaces.js.map +1 -1
- package/dist/repository/queryable.d.ts.map +1 -1
- package/dist/repository/queryable.js.map +1 -1
- package/dist/rpc/adapter.d.ts.map +1 -1
- package/dist/rpc/adapter.js.map +1 -1
- package/dist/rpc/router.d.ts +2 -2
- package/dist/rpc/router.d.ts.map +1 -1
- package/dist/rpc/router.js +1 -1
- package/dist/rpc/router.js.map +1 -1
- package/dist/schema/input-types.d.ts +1 -1
- package/dist/schema/input-types.d.ts.map +1 -1
- package/dist/schema/input-types.js +4 -3
- package/dist/schema/input-types.js.map +1 -1
- package/dist/schema/modifiers.d.ts +2 -1
- package/dist/schema/modifiers.d.ts.map +1 -1
- package/dist/schema/modifiers.js +41 -5
- package/dist/schema/modifiers.js.map +1 -1
- package/dist/schema/relationship-types.d.ts +7 -2
- package/dist/schema/relationship-types.js +1 -1
- package/dist/schema/type-helpers.d.ts +35 -0
- package/dist/schema/type-helpers.d.ts.map +1 -1
- package/dist/schema/type-helpers.js +32 -21
- package/dist/schema/type-helpers.js.map +1 -1
- package/dist/schema/types.d.ts.map +1 -1
- package/dist/schema/validators.d.ts +1 -1
- package/dist/schema/validators.d.ts.map +1 -1
- package/dist/schema/validators.js +27 -16
- package/dist/schema/validators.js.map +1 -1
- package/dist/services/admin/app-users.service.d.ts +1 -1
- package/dist/services/admin/app-users.service.js +31 -38
- package/dist/services/admin/auth.service.d.ts +1 -1
- package/dist/services/admin/auth.service.js +11 -5
- package/dist/services/admin/backup/BackupOrchestrator.d.ts.map +1 -1
- package/dist/services/admin/backup/BackupOrchestrator.js +4 -7
- package/dist/services/admin/backup/BackupOrchestrator.js.map +1 -1
- package/dist/services/admin/backup/StorageStreamer.d.ts +3 -3
- package/dist/services/admin/backup/StorageStreamer.d.ts.map +1 -1
- package/dist/services/admin/backup/StorageStreamer.js +16 -55
- package/dist/services/admin/backup/StorageStreamer.js.map +1 -1
- package/dist/services/admin/backup/ZipComposer.d.ts +2 -0
- package/dist/services/admin/backup/ZipComposer.d.ts.map +1 -1
- package/dist/services/admin/backup/ZipComposer.js +23 -0
- package/dist/services/admin/backup/ZipComposer.js.map +1 -1
- package/dist/services/admin/backup.service.d.ts.map +1 -1
- package/dist/services/admin/backup.service.js.map +1 -1
- package/dist/services/admin/data.service.d.ts.map +1 -1
- package/dist/services/admin/data.service.js +287 -286
- package/dist/services/admin/data.service.js.map +1 -1
- package/dist/services/admin/tenants.service.d.ts.map +1 -1
- package/dist/services/admin/tenants.service.js.map +1 -1
- package/dist/services/auth.service.d.ts +2 -3
- package/dist/services/auth.service.js +16 -16
- package/dist/services/introspection.service.d.ts.map +1 -1
- package/dist/services/introspection.service.js +6 -3
- package/dist/services/introspection.service.js.map +1 -1
- package/dist/services/invite.service.d.ts +1 -1
- package/dist/services/invite.service.js +17 -15
- package/dist/services/storage.service.d.ts.map +1 -1
- package/dist/services/storage.service.js +35 -4
- package/dist/services/storage.service.js.map +1 -1
- package/dist/services/system.service.d.ts +4 -0
- package/dist/services/system.service.d.ts.map +1 -1
- package/dist/services/system.service.js +43 -1
- package/dist/services/system.service.js.map +1 -1
- package/dist/services/tenant.service.d.ts +1 -1
- package/dist/services/tenant.service.js +43 -31
- package/dist/sse/subscriptions.controller.d.ts +57 -0
- package/dist/sse/subscriptions.controller.d.ts.map +1 -0
- package/dist/sse/subscriptions.controller.js +127 -0
- package/dist/sse/subscriptions.controller.js.map +1 -0
- package/dist/startup/bootstrap.d.ts +13 -2
- package/dist/startup/bootstrap.d.ts.map +1 -1
- package/dist/startup/bootstrap.js +85 -13
- package/dist/startup/bootstrap.js.map +1 -1
- package/dist/storage/s3-backend.d.ts.map +1 -1
- package/dist/storage/s3-backend.js +3 -3
- package/dist/storage/s3-backend.js.map +1 -1
- package/dist/websocket/server.d.ts.map +1 -1
- package/dist/websocket/server.js +14 -3
- package/dist/websocket/server.js.map +1 -1
- package/docker/README.md +299 -1
- package/package.json +5 -1
- package/templates/.env.example +76 -16
- package/templates/archlast.config.js +15 -1
- package/templates/docker-compose.dev.yml +8 -8
- package/templates/docker-compose.prod.yml +29 -12
- package/templates/docker-compose.yml +112 -28
|
@@ -0,0 +1,300 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.BullMQScheduler = exports.SchedulePreset = void 0;
|
|
4
|
+
const logger_js_1 = require("../logging/logger.js");
|
|
5
|
+
/**
|
|
6
|
+
* Schedule preset values for common scheduling intervals
|
|
7
|
+
*/
|
|
8
|
+
var SchedulePreset;
|
|
9
|
+
(function (SchedulePreset) {
|
|
10
|
+
SchedulePreset["RunNow"] = "RUN_NOW";
|
|
11
|
+
SchedulePreset["EveryMinute"] = "EVERY_MINUTE";
|
|
12
|
+
SchedulePreset["Every5Minutes"] = "EVERY_5_MINUTES";
|
|
13
|
+
SchedulePreset["Every10Minutes"] = "EVERY_10_MINUTES";
|
|
14
|
+
SchedulePreset["Every30Minutes"] = "EVERY_30_MINUTES";
|
|
15
|
+
SchedulePreset["Hourly"] = "HOURLY";
|
|
16
|
+
SchedulePreset["Every8Hours"] = "EVERY_8_HOURS";
|
|
17
|
+
SchedulePreset["Every16Hours"] = "EVERY_16_HOURS";
|
|
18
|
+
SchedulePreset["DailyMidnight"] = "DAILY_MIDNIGHT";
|
|
19
|
+
SchedulePreset["Weekly"] = "WEEKLY";
|
|
20
|
+
SchedulePreset["Monthly"] = "MONTHLY";
|
|
21
|
+
SchedulePreset["Quarterly"] = "QUARTERLY";
|
|
22
|
+
})(SchedulePreset || (exports.SchedulePreset = SchedulePreset = {}));
|
|
23
|
+
/**
|
|
24
|
+
* Mapping from schedule presets to cron expressions
|
|
25
|
+
*/
|
|
26
|
+
const PRESET_TO_CRON = {
|
|
27
|
+
[SchedulePreset.RunNow]: null, // Immediate one-time job
|
|
28
|
+
[SchedulePreset.EveryMinute]: "* * * * *",
|
|
29
|
+
[SchedulePreset.Every5Minutes]: "*/5 * * * *",
|
|
30
|
+
[SchedulePreset.Every10Minutes]: "*/10 * * * *",
|
|
31
|
+
[SchedulePreset.Every30Minutes]: "*/30 * * * *",
|
|
32
|
+
[SchedulePreset.Hourly]: "0 * * * *",
|
|
33
|
+
[SchedulePreset.Every8Hours]: "0 */8 * * *",
|
|
34
|
+
[SchedulePreset.Every16Hours]: "0 */16 * * *",
|
|
35
|
+
[SchedulePreset.DailyMidnight]: "0 0 * * *",
|
|
36
|
+
[SchedulePreset.Weekly]: "0 0 * * 0",
|
|
37
|
+
[SchedulePreset.Monthly]: "0 0 1 * *",
|
|
38
|
+
[SchedulePreset.Quarterly]: "0 0 1 */3 *",
|
|
39
|
+
};
|
|
40
|
+
/**
|
|
41
|
+
* BullMQ-based scheduler using JobSchedulers (v5.16+) for cron scheduling.
|
|
42
|
+
* Replaces setTimeout-based scheduling with persistent Redis-backed schedulers.
|
|
43
|
+
*/
|
|
44
|
+
class BullMQScheduler {
|
|
45
|
+
queue;
|
|
46
|
+
scheduledJobNames = new Set();
|
|
47
|
+
/**
|
|
48
|
+
* Creates a new BullMQScheduler instance
|
|
49
|
+
* @param jobQueue - BullMQJobQueue adapter instance
|
|
50
|
+
* @param _connection - Redis connection (kept for interface compatibility)
|
|
51
|
+
*/
|
|
52
|
+
constructor(jobQueue, _connection) {
|
|
53
|
+
// Access the internal BullMQ Queue from the adapter
|
|
54
|
+
this.queue = jobQueue.queue;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Resolves a schedule preset to its cron expression
|
|
58
|
+
* @param preset - The schedule preset to resolve
|
|
59
|
+
* @returns The cron expression or null for RunNow
|
|
60
|
+
*/
|
|
61
|
+
resolvePreset(preset) {
|
|
62
|
+
const cron = PRESET_TO_CRON[preset];
|
|
63
|
+
if (cron === undefined) {
|
|
64
|
+
throw new Error(`Unknown schedule preset '${preset}'.`);
|
|
65
|
+
}
|
|
66
|
+
return cron;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Validates and normalizes a scheduled job configuration
|
|
70
|
+
* @param job - The job configuration to validate
|
|
71
|
+
* @returns Normalized job configuration
|
|
72
|
+
*/
|
|
73
|
+
validateJobConfig(job) {
|
|
74
|
+
const name = typeof job.name === "string" ? job.name.trim() : "";
|
|
75
|
+
if (!name) {
|
|
76
|
+
throw new Error("Scheduled job name is required.");
|
|
77
|
+
}
|
|
78
|
+
const payload = job.payload;
|
|
79
|
+
const maxAttempts = job.maxAttempts;
|
|
80
|
+
if ("preset" in job) {
|
|
81
|
+
if (job.preset === SchedulePreset.RunNow) {
|
|
82
|
+
return { cron: null, name, payload, maxAttempts, runNow: true };
|
|
83
|
+
}
|
|
84
|
+
const cronFromPreset = this.resolvePreset(job.preset);
|
|
85
|
+
if (!cronFromPreset) {
|
|
86
|
+
throw new Error("Cron expression is required.");
|
|
87
|
+
}
|
|
88
|
+
return { cron: cronFromPreset, name, payload, maxAttempts, runNow: false };
|
|
89
|
+
}
|
|
90
|
+
const cron = typeof job.cron === "string"
|
|
91
|
+
? job.cron.trim()
|
|
92
|
+
: "";
|
|
93
|
+
if (!cron) {
|
|
94
|
+
throw new Error("Cron expression is required.");
|
|
95
|
+
}
|
|
96
|
+
return { cron, name, payload, maxAttempts, runNow: false };
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Schedules a job using either a cron expression or schedule preset.
|
|
100
|
+
* Uses BullMQ's upsertJobScheduler for persistent scheduling.
|
|
101
|
+
* @param job - The job configuration to schedule
|
|
102
|
+
*/
|
|
103
|
+
add(job) {
|
|
104
|
+
const { cron, name, payload, maxAttempts, runNow } = this.validateJobConfig(job);
|
|
105
|
+
if (runNow) {
|
|
106
|
+
// For RunNow, immediately add a job to the queue
|
|
107
|
+
void (async () => {
|
|
108
|
+
try {
|
|
109
|
+
await this.queue.add(name, payload, {
|
|
110
|
+
attempts: maxAttempts ?? 5,
|
|
111
|
+
removeOnComplete: 100,
|
|
112
|
+
});
|
|
113
|
+
logger_js_1.logger.log({
|
|
114
|
+
timestamp: Date.now(),
|
|
115
|
+
level: "info",
|
|
116
|
+
kind: "system",
|
|
117
|
+
message: "One-off scheduled job enqueued",
|
|
118
|
+
context: { name, preset: SchedulePreset.RunNow },
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
catch (err) {
|
|
122
|
+
logger_js_1.logger.log({
|
|
123
|
+
timestamp: Date.now(),
|
|
124
|
+
level: "error",
|
|
125
|
+
kind: "system",
|
|
126
|
+
message: "Failed to enqueue one-off scheduled job",
|
|
127
|
+
context: {
|
|
128
|
+
name,
|
|
129
|
+
preset: SchedulePreset.RunNow,
|
|
130
|
+
error: err instanceof Error ? err.message : String(err),
|
|
131
|
+
},
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
})();
|
|
135
|
+
return;
|
|
136
|
+
}
|
|
137
|
+
// Use BullMQ JobScheduler for recurring jobs
|
|
138
|
+
void (async () => {
|
|
139
|
+
try {
|
|
140
|
+
await this.queue.upsertJobScheduler(name, // Use job name as scheduler ID
|
|
141
|
+
{
|
|
142
|
+
pattern: cron, // Cron expression for scheduling
|
|
143
|
+
}, {
|
|
144
|
+
// Job template
|
|
145
|
+
name: name,
|
|
146
|
+
data: payload,
|
|
147
|
+
opts: {
|
|
148
|
+
attempts: maxAttempts ?? 5,
|
|
149
|
+
removeOnComplete: 100,
|
|
150
|
+
},
|
|
151
|
+
});
|
|
152
|
+
// Track this scheduled job
|
|
153
|
+
this.scheduledJobNames.add(name);
|
|
154
|
+
logger_js_1.logger.log({
|
|
155
|
+
timestamp: Date.now(),
|
|
156
|
+
level: "info",
|
|
157
|
+
kind: "system",
|
|
158
|
+
message: "Scheduled job created/updated via BullMQ JobScheduler",
|
|
159
|
+
context: { name, cron },
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
catch (err) {
|
|
163
|
+
logger_js_1.logger.log({
|
|
164
|
+
timestamp: Date.now(),
|
|
165
|
+
level: "error",
|
|
166
|
+
kind: "system",
|
|
167
|
+
message: "Failed to create scheduled job via BullMQ JobScheduler",
|
|
168
|
+
context: {
|
|
169
|
+
name,
|
|
170
|
+
cron,
|
|
171
|
+
error: err instanceof Error ? err.message : String(err),
|
|
172
|
+
},
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
})();
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Alias to schedule by functionName to align with function contexts.
|
|
179
|
+
* @param config - Configuration object with functionName and scheduling options
|
|
180
|
+
*/
|
|
181
|
+
schedule(config) {
|
|
182
|
+
const { functionName, payload, cron, preset, maxAttempts } = config;
|
|
183
|
+
const job = preset !== undefined
|
|
184
|
+
? {
|
|
185
|
+
name: functionName,
|
|
186
|
+
preset,
|
|
187
|
+
payload: payload ?? {},
|
|
188
|
+
maxAttempts,
|
|
189
|
+
}
|
|
190
|
+
: {
|
|
191
|
+
name: functionName,
|
|
192
|
+
cron: cron ?? "* * * * *",
|
|
193
|
+
payload: payload ?? {},
|
|
194
|
+
maxAttempts,
|
|
195
|
+
};
|
|
196
|
+
this.add(job);
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* Cancels a scheduled job by name.
|
|
200
|
+
* Removes the JobScheduler from BullMQ.
|
|
201
|
+
* @param name - The name of the scheduled job to cancel
|
|
202
|
+
*/
|
|
203
|
+
cancel(name) {
|
|
204
|
+
void (async () => {
|
|
205
|
+
try {
|
|
206
|
+
await this.queue.removeJobScheduler(name);
|
|
207
|
+
this.scheduledJobNames.delete(name);
|
|
208
|
+
logger_js_1.logger.log({
|
|
209
|
+
timestamp: Date.now(),
|
|
210
|
+
level: "info",
|
|
211
|
+
kind: "system",
|
|
212
|
+
message: "Scheduled job cancelled",
|
|
213
|
+
context: { name },
|
|
214
|
+
});
|
|
215
|
+
}
|
|
216
|
+
catch (err) {
|
|
217
|
+
logger_js_1.logger.log({
|
|
218
|
+
timestamp: Date.now(),
|
|
219
|
+
level: "error",
|
|
220
|
+
kind: "system",
|
|
221
|
+
message: "Failed to cancel scheduled job",
|
|
222
|
+
context: {
|
|
223
|
+
name,
|
|
224
|
+
error: err instanceof Error ? err.message : String(err),
|
|
225
|
+
},
|
|
226
|
+
});
|
|
227
|
+
}
|
|
228
|
+
})();
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* Stops all scheduled jobs.
|
|
232
|
+
* Removes all JobSchedulers from BullMQ.
|
|
233
|
+
*/
|
|
234
|
+
stopAll() {
|
|
235
|
+
void (async () => {
|
|
236
|
+
try {
|
|
237
|
+
// Get all scheduled jobs and cancel each one
|
|
238
|
+
const schedulers = await this.queue.getJobSchedulers();
|
|
239
|
+
for (const scheduler of schedulers) {
|
|
240
|
+
if (!scheduler.id)
|
|
241
|
+
continue;
|
|
242
|
+
await this.queue.removeJobScheduler(scheduler.id);
|
|
243
|
+
this.scheduledJobNames.delete(scheduler.id);
|
|
244
|
+
logger_js_1.logger.log({
|
|
245
|
+
timestamp: Date.now(),
|
|
246
|
+
level: "info",
|
|
247
|
+
kind: "system",
|
|
248
|
+
message: "Scheduled job cancelled",
|
|
249
|
+
context: { name: scheduler.id },
|
|
250
|
+
});
|
|
251
|
+
}
|
|
252
|
+
// Also clear any locally tracked jobs that might not be in BullMQ yet
|
|
253
|
+
this.scheduledJobNames.clear();
|
|
254
|
+
}
|
|
255
|
+
catch (err) {
|
|
256
|
+
logger_js_1.logger.log({
|
|
257
|
+
timestamp: Date.now(),
|
|
258
|
+
level: "error",
|
|
259
|
+
kind: "system",
|
|
260
|
+
message: "Failed to stop all scheduled jobs",
|
|
261
|
+
context: {
|
|
262
|
+
error: err instanceof Error ? err.message : String(err),
|
|
263
|
+
},
|
|
264
|
+
});
|
|
265
|
+
}
|
|
266
|
+
})();
|
|
267
|
+
}
|
|
268
|
+
/**
|
|
269
|
+
* Gets all scheduled job schedulers from BullMQ.
|
|
270
|
+
* @returns Array of scheduled job information
|
|
271
|
+
*/
|
|
272
|
+
async getScheduledJobs() {
|
|
273
|
+
try {
|
|
274
|
+
const schedulers = await this.queue.getJobSchedulers();
|
|
275
|
+
return schedulers
|
|
276
|
+
.filter((scheduler) => scheduler.id != null)
|
|
277
|
+
.map((scheduler) => ({
|
|
278
|
+
name: scheduler.id,
|
|
279
|
+
pattern: scheduler.pattern,
|
|
280
|
+
every: scheduler.every,
|
|
281
|
+
nextRun: scheduler.next,
|
|
282
|
+
}));
|
|
283
|
+
}
|
|
284
|
+
catch (err) {
|
|
285
|
+
logger_js_1.logger.log({
|
|
286
|
+
timestamp: Date.now(),
|
|
287
|
+
level: "error",
|
|
288
|
+
kind: "system",
|
|
289
|
+
message: "Failed to get scheduled jobs",
|
|
290
|
+
context: {
|
|
291
|
+
error: err instanceof Error ? err.message : String(err),
|
|
292
|
+
},
|
|
293
|
+
});
|
|
294
|
+
return [];
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
exports.BullMQScheduler = BullMQScheduler;
|
|
299
|
+
exports.default = BullMQScheduler;
|
|
300
|
+
//# sourceMappingURL=bullmq-scheduler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bullmq-scheduler.js","sourceRoot":"","sources":["../../src/jobs/bullmq-scheduler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
import { JobQueue } from "./queue.js";
|
|
2
|
+
import { WorkerPool } from "./worker-thread.js";
|
|
3
|
+
import type { IpcClient } from "../ipc/socket-bridge.js";
|
|
4
|
+
import { CircuitBreaker } from "./circuit-breaker.js";
|
|
5
|
+
/**
|
|
6
|
+
* Error thrown when a job exceeds its timeout duration
|
|
7
|
+
*/
|
|
8
|
+
export declare class JobTimeoutError extends Error {
|
|
9
|
+
constructor(jobName: string, timeoutMs: number);
|
|
10
|
+
}
|
|
11
|
+
type JobHandler<Payload = any> = (payload: Payload) => Promise<void | {
|
|
12
|
+
affectedQueries?: Set<string> | string[];
|
|
13
|
+
affectedKeys?: Set<string> | string[];
|
|
14
|
+
}>;
|
|
15
|
+
interface ExecutionEngineDispatcher {
|
|
16
|
+
runFunction: (name: string, payload: any, auth: any, queryId?: string) => Promise<any>;
|
|
17
|
+
}
|
|
18
|
+
interface BullMQWorkerOptions {
|
|
19
|
+
concurrency?: number;
|
|
20
|
+
lockDuration?: number;
|
|
21
|
+
threadPool?: WorkerPool;
|
|
22
|
+
engineDispatcher?: ExecutionEngineDispatcher;
|
|
23
|
+
circuitBreaker?: CircuitBreaker;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* BullMQ-based worker manager that processes jobs from Redis queues
|
|
27
|
+
*/
|
|
28
|
+
export declare class BullMQWorkerManager {
|
|
29
|
+
private worker;
|
|
30
|
+
private activeJobIds;
|
|
31
|
+
private shuttingDown;
|
|
32
|
+
private jobQueue;
|
|
33
|
+
private ipc;
|
|
34
|
+
private queueName;
|
|
35
|
+
private concurrency;
|
|
36
|
+
private lockDuration;
|
|
37
|
+
private threadPool;
|
|
38
|
+
private engineDispatcher;
|
|
39
|
+
private circuitBreaker;
|
|
40
|
+
constructor(queueName: string, jobQueue: JobQueue, options?: BullMQWorkerOptions);
|
|
41
|
+
/**
|
|
42
|
+
* Set the IPC client for revalidation notifications
|
|
43
|
+
*/
|
|
44
|
+
setIpcClient(ipcClient: IpcClient | null): void;
|
|
45
|
+
/**
|
|
46
|
+
* Initialize and start the BullMQ worker
|
|
47
|
+
*/
|
|
48
|
+
initialize(): Promise<void>;
|
|
49
|
+
/**
|
|
50
|
+
* Process a BullMQ job
|
|
51
|
+
*/
|
|
52
|
+
private processBullMQJob;
|
|
53
|
+
/**
|
|
54
|
+
* Normalize BullMQ Job payloads into the legacy JobRecord shape.
|
|
55
|
+
* Supports both wrapped payloads ({ name, payload, ... }) and raw payloads.
|
|
56
|
+
*/
|
|
57
|
+
private toJobRecord;
|
|
58
|
+
/**
|
|
59
|
+
* Execute job with circuit breaker protection
|
|
60
|
+
*/
|
|
61
|
+
private executeJobWithCircuitBreaker;
|
|
62
|
+
/**
|
|
63
|
+
* Execute job with registered handler
|
|
64
|
+
*/
|
|
65
|
+
private executeWithHandler;
|
|
66
|
+
/**
|
|
67
|
+
* Execute job with thread pool
|
|
68
|
+
*/
|
|
69
|
+
private executeWithThreadPool;
|
|
70
|
+
/**
|
|
71
|
+
* Execute job with engine dispatcher
|
|
72
|
+
*/
|
|
73
|
+
private executeWithEngineDispatcher;
|
|
74
|
+
/**
|
|
75
|
+
* Execute a function with timeout enforcement
|
|
76
|
+
*/
|
|
77
|
+
private executeWithTimeout;
|
|
78
|
+
/**
|
|
79
|
+
* Send revalidation notification via IPC
|
|
80
|
+
*/
|
|
81
|
+
private notifyRevalidation;
|
|
82
|
+
/**
|
|
83
|
+
* Categorize error for metrics
|
|
84
|
+
*/
|
|
85
|
+
private categorizeError;
|
|
86
|
+
/**
|
|
87
|
+
* Get the number of active jobs being processed
|
|
88
|
+
*/
|
|
89
|
+
getActiveJobsCount(): number;
|
|
90
|
+
/**
|
|
91
|
+
* Get the IDs of all active jobs being processed
|
|
92
|
+
*/
|
|
93
|
+
getActiveJobIds(): string[];
|
|
94
|
+
/**
|
|
95
|
+
* Graceful shutdown
|
|
96
|
+
*/
|
|
97
|
+
stop(gracePeriodMs?: number): Promise<void>;
|
|
98
|
+
/**
|
|
99
|
+
* Check if worker is stopped
|
|
100
|
+
*/
|
|
101
|
+
isStopped(): boolean;
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Initialize the worker with a job queue.
|
|
105
|
+
* Must be called before start().
|
|
106
|
+
*/
|
|
107
|
+
export declare function initWorker(queue: JobQueue, ipcClient?: IpcClient): void;
|
|
108
|
+
/**
|
|
109
|
+
* Register a job handler
|
|
110
|
+
*/
|
|
111
|
+
export declare function registerHandler<Payload = any>(name: string, handler: JobHandler<Payload>): void;
|
|
112
|
+
/**
|
|
113
|
+
* Remove a job handler
|
|
114
|
+
*/
|
|
115
|
+
export declare function removeHandler(name: string): void;
|
|
116
|
+
/**
|
|
117
|
+
* Get all registered handlers
|
|
118
|
+
*/
|
|
119
|
+
export declare function getHandlers(): Record<string, JobHandler<any>>;
|
|
120
|
+
/**
|
|
121
|
+
* Set the engine dispatcher for fallback job execution
|
|
122
|
+
*/
|
|
123
|
+
export declare function setEngineDispatcher(dispatcher: ExecutionEngineDispatcher): void;
|
|
124
|
+
/**
|
|
125
|
+
* Get the number of active jobs being processed
|
|
126
|
+
*/
|
|
127
|
+
export declare function getActiveJobsCount(): number;
|
|
128
|
+
/**
|
|
129
|
+
* Get the IDs of all active jobs being processed
|
|
130
|
+
*/
|
|
131
|
+
export declare function getActiveJobIds(): string[];
|
|
132
|
+
/**
|
|
133
|
+
* Stop the worker from claiming new jobs
|
|
134
|
+
* Used for graceful shutdown initiation
|
|
135
|
+
*/
|
|
136
|
+
export declare function stopWorker(): Promise<void>;
|
|
137
|
+
/**
|
|
138
|
+
* Start the worker
|
|
139
|
+
*/
|
|
140
|
+
export declare function start(): Promise<void>;
|
|
141
|
+
/**
|
|
142
|
+
* Get circuit breaker instance (for monitoring/management)
|
|
143
|
+
* Returns null if circuit breaker is disabled
|
|
144
|
+
*/
|
|
145
|
+
export declare function getCircuitBreaker(): CircuitBreaker | null;
|
|
146
|
+
/**
|
|
147
|
+
* Check if circuit breaker is enabled
|
|
148
|
+
*/
|
|
149
|
+
export declare function isCircuitBreakerEnabled(): boolean;
|
|
150
|
+
/**
|
|
151
|
+
* Check if worker is stopped
|
|
152
|
+
*/
|
|
153
|
+
export declare function isStopped(): boolean;
|
|
154
|
+
export type { JobHandler };
|
|
155
|
+
//# sourceMappingURL=bullmq-worker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bullmq-worker.d.ts","sourceRoot":"","sources":["../../src/jobs/bullmq-worker.ts"],"names":[],"mappings":"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"}
|