@archlast/server 0.1.8 → 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/README.md +104 -100
- 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 +249 -301
- 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 +127 -125
- 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 +642 -0
- package/dist/controllers/introspection.controller.d.ts.map +1 -1
- package/dist/controllers/introspection.controller.js +611 -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 +5 -3
- package/dist/controllers/system.controller.d.ts.map +1 -1
- package/dist/controllers/system.controller.js +4 -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 +70 -15
- 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/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 +41 -3
- 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/relationship-types.d.ts +7 -2
- package/dist/schema/relationship-types.js +1 -1
- package/dist/schema/types.d.ts.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/SqliteGenerator.js +8 -8
- 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/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.map +1 -1
- package/dist/services/system.service.js +1 -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 +309 -11
- package/package.json +214 -210
- package/templates/.env.example +115 -55
- package/templates/archlast.config.js +51 -37
- package/templates/docker-compose.prod.yml +32 -15
- package/templates/docker-compose.yml +117 -33
|
@@ -0,0 +1,424 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.RedisCacheAdapter = void 0;
|
|
7
|
+
const crypto_1 = __importDefault(require("crypto"));
|
|
8
|
+
const os_1 = __importDefault(require("os"));
|
|
9
|
+
const ioredis_1 = __importDefault(require("ioredis"));
|
|
10
|
+
const circuit_breaker_js_1 = require("./circuit-breaker.js");
|
|
11
|
+
/**
|
|
12
|
+
* Redis L2 cache adapter using ioredis.
|
|
13
|
+
*
|
|
14
|
+
* Features:
|
|
15
|
+
* - Cache-aside pattern (check Redis, return null on miss)
|
|
16
|
+
* - Connection retry logic with exponential backoff
|
|
17
|
+
* - Graceful degradation (returns null if Redis unavailable)
|
|
18
|
+
* - Pub/sub for cross-instance cache invalidation
|
|
19
|
+
*/
|
|
20
|
+
class RedisCacheAdapter {
|
|
21
|
+
options;
|
|
22
|
+
redis = null;
|
|
23
|
+
subscriber = null;
|
|
24
|
+
enabled;
|
|
25
|
+
isConnectedFlag = false;
|
|
26
|
+
healthCheckInterval = null;
|
|
27
|
+
HEALTH_CHECK_INTERVAL_MS = 30000; // 30 seconds
|
|
28
|
+
circuitBreaker;
|
|
29
|
+
instanceId;
|
|
30
|
+
constructor(options) {
|
|
31
|
+
this.options = options;
|
|
32
|
+
this.enabled = options.enabled;
|
|
33
|
+
this.instanceId = `${os_1.default.hostname()}:${process.pid}:${Date.now()}`;
|
|
34
|
+
this.circuitBreaker = new circuit_breaker_js_1.CircuitBreaker({
|
|
35
|
+
failureThreshold: 5,
|
|
36
|
+
resetTimeoutMs: 30000,
|
|
37
|
+
name: "RedisCacheAdapter",
|
|
38
|
+
});
|
|
39
|
+
if (this.enabled) {
|
|
40
|
+
this.initializeRedis();
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
initializeRedis() {
|
|
44
|
+
try {
|
|
45
|
+
this.redis = new ioredis_1.default({
|
|
46
|
+
host: this.options.host,
|
|
47
|
+
port: this.options.port,
|
|
48
|
+
password: this.options.password,
|
|
49
|
+
db: this.options.db,
|
|
50
|
+
maxRetriesPerRequest: 3,
|
|
51
|
+
enableReadyCheck: true,
|
|
52
|
+
retryStrategy: (times) => {
|
|
53
|
+
// Exponential backoff: 2^times * 100ms, capped at 30 seconds
|
|
54
|
+
const baseDelay = Math.min(Math.pow(2, times) * 100, 30000);
|
|
55
|
+
// Add jitter: ±25% randomization to prevent thundering herd
|
|
56
|
+
const jitter = baseDelay * 0.25 * (Math.random() * 2 - 1);
|
|
57
|
+
return Math.floor(baseDelay + jitter);
|
|
58
|
+
},
|
|
59
|
+
reconnectOnError: (err) => {
|
|
60
|
+
const reconnectErrors = [
|
|
61
|
+
"ECONNREFUSED",
|
|
62
|
+
"ETIMEDOUT",
|
|
63
|
+
"ECONNRESET",
|
|
64
|
+
"ENOTFOUND",
|
|
65
|
+
"EPIPE",
|
|
66
|
+
"EAI_AGAIN",
|
|
67
|
+
];
|
|
68
|
+
const errorMessage = err.message.toUpperCase();
|
|
69
|
+
// Reconnect on all connection-related errors
|
|
70
|
+
if (reconnectErrors.some((code) => errorMessage.includes(code))) {
|
|
71
|
+
console.warn(`Redis reconnecting due to connection error: ${err.message}`);
|
|
72
|
+
return true;
|
|
73
|
+
}
|
|
74
|
+
// Also reconnect on READONLY errors (original behavior)
|
|
75
|
+
if (errorMessage.includes("READONLY")) {
|
|
76
|
+
console.warn(`Redis reconnecting due to READONLY error: ${err.message}`);
|
|
77
|
+
return true;
|
|
78
|
+
}
|
|
79
|
+
return false;
|
|
80
|
+
},
|
|
81
|
+
});
|
|
82
|
+
// Setup pub/sub subscriber for invalidation
|
|
83
|
+
this.subscriber = this.redis.duplicate();
|
|
84
|
+
this.subscriber.subscribe("cache:invalidate", (err) => {
|
|
85
|
+
if (err) {
|
|
86
|
+
console.error("Redis pub/sub subscribe failed:", err);
|
|
87
|
+
}
|
|
88
|
+
});
|
|
89
|
+
this.subscriber.on("message", (channel, message) => {
|
|
90
|
+
if (channel === "cache:invalidate" && this.options.onInvalidate) {
|
|
91
|
+
try {
|
|
92
|
+
const parsed = JSON.parse(message);
|
|
93
|
+
// Support both old format (array of keys) and new format
|
|
94
|
+
if (Array.isArray(parsed)) {
|
|
95
|
+
// Old format: just keys array
|
|
96
|
+
this.options.onInvalidate(parsed, undefined);
|
|
97
|
+
}
|
|
98
|
+
else if (parsed.version === "1.0") {
|
|
99
|
+
// New format: structured message
|
|
100
|
+
this.options.onInvalidate(parsed.keys || [], parsed.pattern);
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
// Legacy format: { keys, pattern } object
|
|
104
|
+
this.options.onInvalidate(parsed.keys || [], parsed.pattern);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
catch (err) {
|
|
108
|
+
console.error("[Cache] Failed to parse invalidation message:", err);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
});
|
|
112
|
+
// Log connection status and track connection state
|
|
113
|
+
this.redis.on("connect", () => {
|
|
114
|
+
console.log("Redis L2 cache connected");
|
|
115
|
+
this.isConnectedFlag = true;
|
|
116
|
+
});
|
|
117
|
+
this.redis.on("ready", () => {
|
|
118
|
+
console.log("Redis L2 cache ready");
|
|
119
|
+
this.isConnectedFlag = true;
|
|
120
|
+
this.startHealthCheck();
|
|
121
|
+
});
|
|
122
|
+
this.redis.on("error", (err) => {
|
|
123
|
+
console.error("Redis L2 cache error:", err.message);
|
|
124
|
+
this.isConnectedFlag = false;
|
|
125
|
+
});
|
|
126
|
+
this.redis.on("close", () => {
|
|
127
|
+
console.warn("Redis L2 cache connection closed");
|
|
128
|
+
this.isConnectedFlag = false;
|
|
129
|
+
this.stopHealthCheck();
|
|
130
|
+
});
|
|
131
|
+
this.redis.on("reconnecting", () => {
|
|
132
|
+
console.log("Redis L2 cache reconnecting...");
|
|
133
|
+
this.isConnectedFlag = false;
|
|
134
|
+
});
|
|
135
|
+
this.redis.on("end", () => {
|
|
136
|
+
console.warn("Redis L2 cache connection ended");
|
|
137
|
+
this.isConnectedFlag = false;
|
|
138
|
+
this.stopHealthCheck();
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
catch (err) {
|
|
142
|
+
console.error("Failed to initialize Redis:", err);
|
|
143
|
+
this.enabled = false;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Get value from Redis L2 cache
|
|
148
|
+
*/
|
|
149
|
+
async get(key) {
|
|
150
|
+
if (!this.enabled || !this.redis)
|
|
151
|
+
return null;
|
|
152
|
+
try {
|
|
153
|
+
return await this.circuitBreaker.execute(async () => {
|
|
154
|
+
const value = await this.redis.get(key);
|
|
155
|
+
return value ? JSON.parse(value) : null;
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
catch (err) {
|
|
159
|
+
if (err instanceof circuit_breaker_js_1.CircuitBreakerOpenError) {
|
|
160
|
+
console.warn("Redis circuit breaker is open, returning null");
|
|
161
|
+
return null; // Graceful degradation
|
|
162
|
+
}
|
|
163
|
+
console.warn(`Redis GET failed for key ${key}:`, err);
|
|
164
|
+
return null;
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Get remaining TTL for a key in milliseconds
|
|
169
|
+
* Returns null if key doesn't exist or has no TTL
|
|
170
|
+
*/
|
|
171
|
+
async getTtl(key) {
|
|
172
|
+
if (!this.enabled || !this.redis)
|
|
173
|
+
return null;
|
|
174
|
+
try {
|
|
175
|
+
return await this.circuitBreaker.execute(async () => {
|
|
176
|
+
const ttlSeconds = await this.redis.ttl(key);
|
|
177
|
+
if (ttlSeconds < 0) {
|
|
178
|
+
// -1 = key exists but has no TTL, -2 = key doesn't exist
|
|
179
|
+
return ttlSeconds === -1 ? null : null;
|
|
180
|
+
}
|
|
181
|
+
return ttlSeconds * 1000; // Convert to milliseconds
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
catch (err) {
|
|
185
|
+
if (err instanceof circuit_breaker_js_1.CircuitBreakerOpenError) {
|
|
186
|
+
console.warn("Redis circuit breaker is open, returning null TTL");
|
|
187
|
+
return null;
|
|
188
|
+
}
|
|
189
|
+
console.warn(`Redis TTL failed for key ${key}:`, err);
|
|
190
|
+
return null;
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Set value in Redis L2 cache with TTL
|
|
195
|
+
* Uses direct L2 TTL value (in milliseconds) from caller
|
|
196
|
+
*/
|
|
197
|
+
async set(key, value, ttlMs) {
|
|
198
|
+
if (!this.enabled || !this.redis)
|
|
199
|
+
return;
|
|
200
|
+
try {
|
|
201
|
+
await this.circuitBreaker.execute(async () => {
|
|
202
|
+
// Convert TTL from milliseconds to seconds for Redis
|
|
203
|
+
const ttlSeconds = Math.ceil(ttlMs / 1000);
|
|
204
|
+
await this.redis.set(key, JSON.stringify(value), "EX", ttlSeconds);
|
|
205
|
+
});
|
|
206
|
+
}
|
|
207
|
+
catch (err) {
|
|
208
|
+
if (err instanceof circuit_breaker_js_1.CircuitBreakerOpenError) {
|
|
209
|
+
console.warn("Redis circuit breaker is open, skipping SET");
|
|
210
|
+
return; // Graceful degradation
|
|
211
|
+
}
|
|
212
|
+
console.warn(`Redis SET failed for key ${key}:`, err);
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* Delete key from Redis L2 cache
|
|
217
|
+
*/
|
|
218
|
+
async delete(key) {
|
|
219
|
+
if (!this.enabled || !this.redis)
|
|
220
|
+
return;
|
|
221
|
+
try {
|
|
222
|
+
await this.circuitBreaker.execute(async () => {
|
|
223
|
+
await this.redis.del(key);
|
|
224
|
+
});
|
|
225
|
+
}
|
|
226
|
+
catch (err) {
|
|
227
|
+
if (err instanceof circuit_breaker_js_1.CircuitBreakerOpenError) {
|
|
228
|
+
console.warn("Redis circuit breaker is open, skipping DELETE");
|
|
229
|
+
return; // Graceful degradation
|
|
230
|
+
}
|
|
231
|
+
console.warn(`Redis DELETE failed for key ${key}:`, err);
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
/**
|
|
235
|
+
* Invalidate all keys matching pattern
|
|
236
|
+
*/
|
|
237
|
+
async invalidatePattern(pattern) {
|
|
238
|
+
if (!this.enabled || !this.redis)
|
|
239
|
+
return;
|
|
240
|
+
try {
|
|
241
|
+
await this.circuitBreaker.execute(async () => {
|
|
242
|
+
const keys = await this.redis.keys(pattern);
|
|
243
|
+
if (keys.length > 0) {
|
|
244
|
+
await this.redis.del(...keys);
|
|
245
|
+
}
|
|
246
|
+
});
|
|
247
|
+
}
|
|
248
|
+
catch (err) {
|
|
249
|
+
if (err instanceof circuit_breaker_js_1.CircuitBreakerOpenError) {
|
|
250
|
+
console.warn("Redis circuit breaker is open, skipping INVALIDATE_PATTERN");
|
|
251
|
+
return; // Graceful degradation
|
|
252
|
+
}
|
|
253
|
+
console.warn(`Redis INVALIDATE_PATTERN failed for ${pattern}:`, err);
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
/**
|
|
257
|
+
* Publish invalidation event to Redis pub/sub
|
|
258
|
+
* Uses structured message format with metadata for observability
|
|
259
|
+
*/
|
|
260
|
+
async publishInvalidation(keys, pattern) {
|
|
261
|
+
if (!this.enabled || !this.redis)
|
|
262
|
+
return;
|
|
263
|
+
try {
|
|
264
|
+
await this.circuitBreaker.execute(async () => {
|
|
265
|
+
const message = {
|
|
266
|
+
version: "1.0",
|
|
267
|
+
timestamp: new Date().toISOString(),
|
|
268
|
+
source: this.instanceId,
|
|
269
|
+
keys,
|
|
270
|
+
pattern,
|
|
271
|
+
metadata: {
|
|
272
|
+
correlationId: crypto_1.default.randomUUID(),
|
|
273
|
+
reason: pattern ? "pattern_invalidation" : "key_invalidation",
|
|
274
|
+
},
|
|
275
|
+
};
|
|
276
|
+
await this.redis.publish("cache:invalidate", JSON.stringify(message));
|
|
277
|
+
});
|
|
278
|
+
}
|
|
279
|
+
catch (err) {
|
|
280
|
+
if (err instanceof circuit_breaker_js_1.CircuitBreakerOpenError) {
|
|
281
|
+
console.warn("Redis circuit breaker is open, skipping PUBLISH");
|
|
282
|
+
return; // Graceful degradation
|
|
283
|
+
}
|
|
284
|
+
console.warn("Redis PUBLISH failed:", err);
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
/**
|
|
288
|
+
* Get Redis statistics
|
|
289
|
+
*/
|
|
290
|
+
async getStats() {
|
|
291
|
+
if (!this.enabled || !this.redis)
|
|
292
|
+
return null;
|
|
293
|
+
try {
|
|
294
|
+
return await this.circuitBreaker.execute(async () => {
|
|
295
|
+
const info = await this.redis.info("stats");
|
|
296
|
+
const memory = await this.redis.info("memory");
|
|
297
|
+
const clients = await this.redis.info("clients");
|
|
298
|
+
const hits = this.parseInfo(info, "keyspace_hits");
|
|
299
|
+
const misses = this.parseInfo(info, "keyspace_misses");
|
|
300
|
+
const total = hits + misses;
|
|
301
|
+
return {
|
|
302
|
+
connected: this.isConnected(),
|
|
303
|
+
hits,
|
|
304
|
+
misses,
|
|
305
|
+
hitRate: total > 0 ? hits / total : 0,
|
|
306
|
+
memoryUsed: this.parseInfo(memory, "used_memory"),
|
|
307
|
+
connectedClients: this.parseInfo(clients, "connected_clients"),
|
|
308
|
+
evictions: this.parseInfo(info, "evicted_keys"),
|
|
309
|
+
opsPerSec: this.parseInfo(info, "instantaneous_ops_per_sec"),
|
|
310
|
+
};
|
|
311
|
+
});
|
|
312
|
+
}
|
|
313
|
+
catch (err) {
|
|
314
|
+
if (err instanceof circuit_breaker_js_1.CircuitBreakerOpenError) {
|
|
315
|
+
console.warn("Redis circuit breaker is open, returning null stats");
|
|
316
|
+
return null; // Graceful degradation
|
|
317
|
+
}
|
|
318
|
+
console.warn("Redis getStats failed:", err);
|
|
319
|
+
return null;
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
/**
|
|
323
|
+
* Check if Redis client is connected
|
|
324
|
+
*/
|
|
325
|
+
isConnected() {
|
|
326
|
+
return this.isConnectedFlag && this.redis?.status === "ready";
|
|
327
|
+
}
|
|
328
|
+
/**
|
|
329
|
+
* Start periodic health check interval
|
|
330
|
+
*/
|
|
331
|
+
startHealthCheck() {
|
|
332
|
+
// Clear any existing interval first
|
|
333
|
+
this.stopHealthCheck();
|
|
334
|
+
this.healthCheckInterval = setInterval(async () => {
|
|
335
|
+
const isHealthy = await this.healthCheck();
|
|
336
|
+
if (!isHealthy) {
|
|
337
|
+
console.warn("Redis health check failed during periodic check");
|
|
338
|
+
this.isConnectedFlag = false;
|
|
339
|
+
// The reconnectOnError and retryStrategy will handle reconnection
|
|
340
|
+
}
|
|
341
|
+
else {
|
|
342
|
+
this.isConnectedFlag = true;
|
|
343
|
+
}
|
|
344
|
+
}, this.HEALTH_CHECK_INTERVAL_MS);
|
|
345
|
+
// Prevent the interval from keeping the process alive
|
|
346
|
+
if (this.healthCheckInterval.unref) {
|
|
347
|
+
this.healthCheckInterval.unref();
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
/**
|
|
351
|
+
* Stop periodic health check interval
|
|
352
|
+
*/
|
|
353
|
+
stopHealthCheck() {
|
|
354
|
+
if (this.healthCheckInterval) {
|
|
355
|
+
clearInterval(this.healthCheckInterval);
|
|
356
|
+
this.healthCheckInterval = null;
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
/**
|
|
360
|
+
* Health check for Redis connection with timeout
|
|
361
|
+
*
|
|
362
|
+
* Tests Redis connection using PING command with configurable timeout.
|
|
363
|
+
* Returns false if Redis is disabled, not connected, or times out.
|
|
364
|
+
*
|
|
365
|
+
* @param timeoutMs - Timeout in milliseconds (default: 5000)
|
|
366
|
+
* @returns true if Redis is responsive, false otherwise
|
|
367
|
+
*/
|
|
368
|
+
async healthCheck(timeoutMs = 5000) {
|
|
369
|
+
// Return false if Redis is disabled or not initialized
|
|
370
|
+
if (!this.enabled || !this.redis) {
|
|
371
|
+
console.warn("Redis health check failed: Redis is disabled or not initialized");
|
|
372
|
+
return false;
|
|
373
|
+
}
|
|
374
|
+
// Return false if client is not in ready state
|
|
375
|
+
if (!this.isConnected()) {
|
|
376
|
+
console.warn("Redis health check failed: Redis client is not connected");
|
|
377
|
+
return false;
|
|
378
|
+
}
|
|
379
|
+
try {
|
|
380
|
+
return await this.circuitBreaker.execute(async () => {
|
|
381
|
+
// Race between PING command and timeout
|
|
382
|
+
const pingPromise = this.redis.ping();
|
|
383
|
+
const timeoutPromise = new Promise((_, reject) => {
|
|
384
|
+
setTimeout(() => reject(new Error("Health check timeout")), timeoutMs);
|
|
385
|
+
});
|
|
386
|
+
await Promise.race([pingPromise, timeoutPromise]);
|
|
387
|
+
return true;
|
|
388
|
+
});
|
|
389
|
+
}
|
|
390
|
+
catch (err) {
|
|
391
|
+
if (err instanceof circuit_breaker_js_1.CircuitBreakerOpenError) {
|
|
392
|
+
console.warn("Redis health check skipped: circuit breaker is open");
|
|
393
|
+
return false; // Graceful degradation
|
|
394
|
+
}
|
|
395
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
396
|
+
console.warn(`Redis health check failed: ${message}`);
|
|
397
|
+
return false;
|
|
398
|
+
}
|
|
399
|
+
}
|
|
400
|
+
/**
|
|
401
|
+
* Parse Redis INFO response for specific key
|
|
402
|
+
*/
|
|
403
|
+
parseInfo(info, key) {
|
|
404
|
+
const match = info.match(new RegExp(`${key}:(\\d+)`));
|
|
405
|
+
return match ? parseInt(match[1], 10) : 0;
|
|
406
|
+
}
|
|
407
|
+
/**
|
|
408
|
+
* Close Redis connections
|
|
409
|
+
*/
|
|
410
|
+
async close() {
|
|
411
|
+
this.stopHealthCheck();
|
|
412
|
+
this.isConnectedFlag = false;
|
|
413
|
+
if (this.subscriber) {
|
|
414
|
+
await this.subscriber.quit();
|
|
415
|
+
this.subscriber = null;
|
|
416
|
+
}
|
|
417
|
+
if (this.redis) {
|
|
418
|
+
await this.redis.quit();
|
|
419
|
+
this.redis = null;
|
|
420
|
+
}
|
|
421
|
+
}
|
|
422
|
+
}
|
|
423
|
+
exports.RedisCacheAdapter = RedisCacheAdapter;
|
|
424
|
+
//# sourceMappingURL=redis-adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redis-adapter.js","sourceRoot":"","sources":["../../src/cache/redis-adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,10 +8,12 @@
|
|
|
8
8
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
9
|
const sidecar_server_js_1 = require("./sidecar-server.js");
|
|
10
10
|
const logger_js_1 = require("../logging/logger.js");
|
|
11
|
+
const service_js_1 = require("../config/service.js");
|
|
11
12
|
const path_1 = require("path");
|
|
12
13
|
const fs_1 = require("fs");
|
|
13
14
|
const SOCKET_PATH = process.env.CACHE_SOCKET_PATH || (0, path_1.join)(process.cwd(), "data", "cache.sock");
|
|
14
15
|
async function main() {
|
|
16
|
+
const config = (0, service_js_1.loadServerConfig)();
|
|
15
17
|
logger_js_1.logger.log({
|
|
16
18
|
timestamp: Date.now(),
|
|
17
19
|
level: "info",
|
|
@@ -33,7 +35,14 @@ async function main() {
|
|
|
33
35
|
// Directory creation is best-effort; listen will surface failures.
|
|
34
36
|
}
|
|
35
37
|
}
|
|
36
|
-
const server = new sidecar_server_js_1.CacheSidecarServer(SOCKET_PATH
|
|
38
|
+
const server = new sidecar_server_js_1.CacheSidecarServer(SOCKET_PATH, {
|
|
39
|
+
enabled: config.redis.enabled,
|
|
40
|
+
host: config.redis.host,
|
|
41
|
+
port: config.redis.port,
|
|
42
|
+
password: config.redis.password,
|
|
43
|
+
db: config.redis.db,
|
|
44
|
+
ttlMultiplier: config.redis.ttlMultiplier,
|
|
45
|
+
});
|
|
37
46
|
// Handle graceful shutdown
|
|
38
47
|
const shutdown = async () => {
|
|
39
48
|
logger_js_1.logger.log({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-sidecar.js","sourceRoot":"","sources":["../../src/cache/run-sidecar.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;AAEH,2DAAyD;AACzD,oDAA8C;
|
|
1
|
+
{"version":3,"file":"run-sidecar.js","sourceRoot":"","sources":["../../src/cache/run-sidecar.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,12 +5,62 @@
|
|
|
5
5
|
* Handles all cache operations via IPC.
|
|
6
6
|
*/
|
|
7
7
|
import { estimateSize } from "./store.js";
|
|
8
|
+
import { type RedisCacheAdapterOptions } from "./redis-adapter.js";
|
|
8
9
|
export { estimateSize };
|
|
9
10
|
export declare class CacheSidecarServer {
|
|
10
11
|
private server;
|
|
11
12
|
private cache;
|
|
12
13
|
private socketPath;
|
|
13
|
-
|
|
14
|
+
private redis;
|
|
15
|
+
private invalidationRetryQueue;
|
|
16
|
+
private l2AccessLog;
|
|
17
|
+
private recentlyDemoted;
|
|
18
|
+
private cleanupInterval;
|
|
19
|
+
private readonly PROMOTION_THRESHOLD;
|
|
20
|
+
private readonly PROMOTION_WINDOW_MS;
|
|
21
|
+
private readonly DEMOTION_COOLDOWN_MS;
|
|
22
|
+
private readonly MIN_TTL_REMAINING_MS;
|
|
23
|
+
private readonly CLEANUP_INTERVAL_MS;
|
|
24
|
+
constructor(socketPath: string, redisConfig?: RedisCacheAdapterOptions);
|
|
25
|
+
/**
|
|
26
|
+
* Start periodic cleanup of old access and demotion records
|
|
27
|
+
*/
|
|
28
|
+
private startCleanupInterval;
|
|
29
|
+
/**
|
|
30
|
+
* Stop periodic cleanup interval
|
|
31
|
+
*/
|
|
32
|
+
private stopCleanupInterval;
|
|
33
|
+
/**
|
|
34
|
+
* Cleanup old access records and demotion records
|
|
35
|
+
*/
|
|
36
|
+
private cleanupOldRecords;
|
|
37
|
+
/**
|
|
38
|
+
* Get partition for a key based on key prefix/pattern
|
|
39
|
+
* Keys are namespaced as "partition:key"
|
|
40
|
+
*/
|
|
41
|
+
private getPartitionForKey;
|
|
42
|
+
/**
|
|
43
|
+
* Record L2 access and determine if entry should be promoted to L1
|
|
44
|
+
*/
|
|
45
|
+
private recordL2AccessAndCheckPromotion;
|
|
46
|
+
/**
|
|
47
|
+
* Check if L1 partition has space for new entry
|
|
48
|
+
*/
|
|
49
|
+
private hasSpaceInPartition;
|
|
50
|
+
/**
|
|
51
|
+
* Get access count for a key
|
|
52
|
+
*/
|
|
53
|
+
private getAccessCount;
|
|
54
|
+
/**
|
|
55
|
+
* Mark a key as recently demoted to prevent immediate re-promotion
|
|
56
|
+
*/
|
|
57
|
+
private onL1Eviction;
|
|
58
|
+
/**
|
|
59
|
+
* Set up L1→L2 promotion handlers on LRU eviction
|
|
60
|
+
* When an entry is evicted from L1 due to space constraints,
|
|
61
|
+
* write it to L2 Redis before it's lost
|
|
62
|
+
*/
|
|
63
|
+
private setupL1EvictionHandlers;
|
|
14
64
|
private registerHandlers;
|
|
15
65
|
start(): Promise<void>;
|
|
16
66
|
stop(): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sidecar-server.d.ts","sourceRoot":"","sources":["../../src/cache/sidecar-server.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EAAc,YAAY,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"sidecar-server.d.ts","sourceRoot":"","sources":["../../src/cache/sidecar-server.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EAAc,YAAY,EAAE,MAAM,YAAY,CAAC;AAGtD,OAAO,EAAqB,KAAK,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AAGtF,OAAO,EAAE,YAAY,EAAE,CAAC;AAWxB,qBAAa,kBAAkB;IAC3B,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,KAAK,CAAa;IAC1B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,KAAK,CAAoB;IACjC,OAAO,CAAC,sBAAsB,CAAyB;IAGvD,OAAO,CAAC,WAAW,CAAwC;IAC3D,OAAO,CAAC,eAAe,CAAkC;IACzD,OAAO,CAAC,eAAe,CAA+B;IAEtD,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAK;IACzC,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAiB;IACrD,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAa;IAClD,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAa;IAClD,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAa;gBAErC,UAAU,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,wBAAwB;IA8CtE;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAW5B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAO3B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IA4BzB;;;OAGG;IACH,OAAO,CAAC,kBAAkB;IAU1B;;OAEG;IACH,OAAO,CAAC,+BAA+B;IAgDvC;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAa3B;;OAEG;IACH,OAAO,CAAC,cAAc;IAItB;;OAEG;IACH,OAAO,CAAC,YAAY;IAIpB;;;;OAIG;IACH,OAAO,CAAC,uBAAuB;IAqE/B,OAAO,CAAC,gBAAgB;IAgPlB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IActB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CAS9B"}
|