@serve.zone/dcrouter 8.0.0 → 9.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist_serve/bundle.js +2420 -1227
- package/dist_ts/00_commitinfo_data.js +1 -1
- package/dist_ts/classes.dcrouter.d.ts +9 -0
- package/dist_ts/classes.dcrouter.js +27 -1
- package/dist_ts/config/classes.api-token-manager.d.ts +38 -0
- package/dist_ts/config/classes.api-token-manager.js +134 -0
- package/dist_ts/config/classes.route-config-manager.d.ts +35 -0
- package/dist_ts/config/classes.route-config-manager.js +231 -0
- package/dist_ts/config/index.d.ts +2 -0
- package/dist_ts/config/index.js +3 -1
- package/dist_ts/opsserver/classes.opsserver.d.ts +2 -0
- package/dist_ts/opsserver/classes.opsserver.js +5 -1
- package/dist_ts/opsserver/handlers/{config.handler.d.ts → api-token.handler.d.ts} +5 -2
- package/dist_ts/opsserver/handlers/api-token.handler.js +66 -0
- package/dist_ts/opsserver/handlers/index.d.ts +2 -0
- package/dist_ts/opsserver/handlers/index.js +3 -1
- package/dist_ts/opsserver/handlers/route-management.handler.d.ts +13 -0
- package/dist_ts/opsserver/handlers/route-management.handler.js +117 -0
- package/dist_ts_interfaces/data/index.d.ts +1 -0
- package/dist_ts_interfaces/data/index.js +2 -1
- package/dist_ts_interfaces/data/route-management.d.ts +68 -0
- package/dist_ts_interfaces/data/route-management.js +2 -0
- package/dist_ts_interfaces/requests/api-tokens.d.ts +63 -0
- package/dist_ts_interfaces/requests/api-tokens.js +2 -0
- package/dist_ts_interfaces/requests/config.d.ts +77 -1
- package/dist_ts_interfaces/requests/index.d.ts +2 -0
- package/dist_ts_interfaces/requests/index.js +3 -1
- package/dist_ts_interfaces/requests/route-management.d.ts +114 -0
- package/dist_ts_interfaces/requests/route-management.js +2 -0
- package/dist_ts_web/00_commitinfo_data.js +1 -1
- package/dist_ts_web/appstate.d.ts +37 -1
- package/dist_ts_web/appstate.js +220 -2
- package/dist_ts_web/elements/index.d.ts +2 -0
- package/dist_ts_web/elements/index.js +3 -1
- package/dist_ts_web/elements/ops-dashboard.js +23 -3
- package/dist_ts_web/elements/ops-view-apitokens.d.ts +12 -0
- package/dist_ts_web/elements/ops-view-apitokens.js +310 -0
- package/dist_ts_web/elements/ops-view-config.d.ts +10 -8
- package/dist_ts_web/elements/ops-view-config.js +215 -297
- package/dist_ts_web/elements/ops-view-routes.d.ts +12 -0
- package/dist_ts_web/elements/ops-view-routes.js +404 -0
- package/dist_ts_web/router.d.ts +1 -1
- package/dist_ts_web/router.js +2 -2
- package/package.json +2 -2
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/classes.dcrouter.ts +37 -1
- package/ts/config/classes.api-token-manager.ts +155 -0
- package/ts/config/classes.route-config-manager.ts +271 -0
- package/ts/config/index.ts +3 -1
- package/ts/opsserver/classes.opsserver.ts +4 -0
- package/ts/opsserver/handlers/api-token.handler.ts +96 -0
- package/ts/opsserver/handlers/config.handler.ts +154 -72
- package/ts/opsserver/handlers/index.ts +3 -1
- package/ts/opsserver/handlers/route-management.handler.ts +163 -0
- package/ts_web/00_commitinfo_data.ts +1 -1
- package/ts_web/appstate.ts +309 -2
- package/ts_web/elements/index.ts +2 -0
- package/ts_web/elements/ops-dashboard.ts +22 -2
- package/ts_web/elements/ops-view-apitokens.ts +285 -0
- package/ts_web/elements/ops-view-config.ts +237 -299
- package/ts_web/elements/ops-view-routes.ts +389 -0
- package/ts_web/router.ts +1 -1
- package/dist_ts/cache/classes.cache.cleaner.d.ts +0 -47
- package/dist_ts/cache/classes.cache.cleaner.js +0 -130
- package/dist_ts/cache/classes.cached.document.d.ts +0 -76
- package/dist_ts/cache/classes.cached.document.js +0 -100
- package/dist_ts/cache/classes.cachedb.d.ts +0 -60
- package/dist_ts/cache/classes.cachedb.js +0 -126
- package/dist_ts/cache/documents/classes.cached.email.d.ts +0 -125
- package/dist_ts/cache/documents/classes.cached.email.js +0 -337
- package/dist_ts/cache/documents/classes.cached.ip.reputation.d.ts +0 -119
- package/dist_ts/cache/documents/classes.cached.ip.reputation.js +0 -323
- package/dist_ts/cache/documents/index.d.ts +0 -2
- package/dist_ts/cache/documents/index.js +0 -3
- package/dist_ts/cache/index.d.ts +0 -4
- package/dist_ts/cache/index.js +0 -7
- package/dist_ts/monitoring/classes.metricscache.d.ts +0 -32
- package/dist_ts/monitoring/classes.metricscache.js +0 -63
- package/dist_ts/opsserver/handlers/admin.handler.d.ts +0 -31
- package/dist_ts/opsserver/handlers/admin.handler.js +0 -180
- package/dist_ts/opsserver/handlers/config.handler.js +0 -67
- package/dist_ts/opsserver/handlers/logs.handler.d.ts +0 -17
- package/dist_ts/opsserver/handlers/logs.handler.js +0 -215
- package/dist_ts/security/classes.securitylogger.js +0 -235
- package/dist_ts/storage/classes.storagemanager.d.ts +0 -82
- package/dist_ts/storage/classes.storagemanager.js +0 -344
- package/dist_ts/storage/index.d.ts +0 -1
- package/dist_ts/storage/index.js +0 -3
|
@@ -1,235 +0,0 @@
|
|
|
1
|
-
import * as plugins from '../plugins.js';
|
|
2
|
-
import { logger } from '../logger.js';
|
|
3
|
-
/**
|
|
4
|
-
* Log level for security events
|
|
5
|
-
*/
|
|
6
|
-
export var SecurityLogLevel;
|
|
7
|
-
(function (SecurityLogLevel) {
|
|
8
|
-
SecurityLogLevel["INFO"] = "info";
|
|
9
|
-
SecurityLogLevel["WARN"] = "warn";
|
|
10
|
-
SecurityLogLevel["ERROR"] = "error";
|
|
11
|
-
SecurityLogLevel["CRITICAL"] = "critical";
|
|
12
|
-
})(SecurityLogLevel || (SecurityLogLevel = {}));
|
|
13
|
-
/**
|
|
14
|
-
* Security event types for categorization
|
|
15
|
-
*/
|
|
16
|
-
export var SecurityEventType;
|
|
17
|
-
(function (SecurityEventType) {
|
|
18
|
-
SecurityEventType["AUTHENTICATION"] = "authentication";
|
|
19
|
-
SecurityEventType["ACCESS_CONTROL"] = "access_control";
|
|
20
|
-
SecurityEventType["EMAIL_VALIDATION"] = "email_validation";
|
|
21
|
-
SecurityEventType["EMAIL_PROCESSING"] = "email_processing";
|
|
22
|
-
SecurityEventType["EMAIL_FORWARDING"] = "email_forwarding";
|
|
23
|
-
SecurityEventType["EMAIL_DELIVERY"] = "email_delivery";
|
|
24
|
-
SecurityEventType["DKIM"] = "dkim";
|
|
25
|
-
SecurityEventType["SPF"] = "spf";
|
|
26
|
-
SecurityEventType["DMARC"] = "dmarc";
|
|
27
|
-
SecurityEventType["RATE_LIMIT"] = "rate_limit";
|
|
28
|
-
SecurityEventType["RATE_LIMITING"] = "rate_limiting";
|
|
29
|
-
SecurityEventType["SPAM"] = "spam";
|
|
30
|
-
SecurityEventType["MALWARE"] = "malware";
|
|
31
|
-
SecurityEventType["CONNECTION"] = "connection";
|
|
32
|
-
SecurityEventType["DATA_EXPOSURE"] = "data_exposure";
|
|
33
|
-
SecurityEventType["CONFIGURATION"] = "configuration";
|
|
34
|
-
SecurityEventType["IP_REPUTATION"] = "ip_reputation";
|
|
35
|
-
SecurityEventType["REJECTED_CONNECTION"] = "rejected_connection";
|
|
36
|
-
})(SecurityEventType || (SecurityEventType = {}));
|
|
37
|
-
/**
|
|
38
|
-
* Security logger for enhanced security monitoring
|
|
39
|
-
*/
|
|
40
|
-
export class SecurityLogger {
|
|
41
|
-
static instance;
|
|
42
|
-
securityEvents = [];
|
|
43
|
-
maxEventHistory;
|
|
44
|
-
enableNotifications;
|
|
45
|
-
constructor(options) {
|
|
46
|
-
this.maxEventHistory = options?.maxEventHistory || 1000;
|
|
47
|
-
this.enableNotifications = options?.enableNotifications || false;
|
|
48
|
-
}
|
|
49
|
-
/**
|
|
50
|
-
* Get singleton instance
|
|
51
|
-
*/
|
|
52
|
-
static getInstance(options) {
|
|
53
|
-
if (!SecurityLogger.instance) {
|
|
54
|
-
SecurityLogger.instance = new SecurityLogger(options);
|
|
55
|
-
}
|
|
56
|
-
return SecurityLogger.instance;
|
|
57
|
-
}
|
|
58
|
-
/**
|
|
59
|
-
* Log a security event
|
|
60
|
-
* @param event The security event to log
|
|
61
|
-
*/
|
|
62
|
-
logEvent(event) {
|
|
63
|
-
const fullEvent = {
|
|
64
|
-
...event,
|
|
65
|
-
timestamp: Date.now()
|
|
66
|
-
};
|
|
67
|
-
// Store in memory buffer
|
|
68
|
-
this.securityEvents.push(fullEvent);
|
|
69
|
-
// Trim history if needed
|
|
70
|
-
if (this.securityEvents.length > this.maxEventHistory) {
|
|
71
|
-
this.securityEvents.shift();
|
|
72
|
-
}
|
|
73
|
-
// Log to regular logger with appropriate level
|
|
74
|
-
switch (event.level) {
|
|
75
|
-
case SecurityLogLevel.INFO:
|
|
76
|
-
logger.log('info', `[SECURITY:${event.type}] ${event.message}`, event.details);
|
|
77
|
-
break;
|
|
78
|
-
case SecurityLogLevel.WARN:
|
|
79
|
-
logger.log('warn', `[SECURITY:${event.type}] ${event.message}`, event.details);
|
|
80
|
-
break;
|
|
81
|
-
case SecurityLogLevel.ERROR:
|
|
82
|
-
case SecurityLogLevel.CRITICAL:
|
|
83
|
-
logger.log('error', `[SECURITY:${event.type}] ${event.message}`, event.details);
|
|
84
|
-
// Send notification for critical events if enabled
|
|
85
|
-
if (event.level === SecurityLogLevel.CRITICAL && this.enableNotifications) {
|
|
86
|
-
this.sendNotification(fullEvent);
|
|
87
|
-
}
|
|
88
|
-
break;
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
/**
|
|
92
|
-
* Get recent security events
|
|
93
|
-
* @param limit Maximum number of events to return
|
|
94
|
-
* @param filter Filter for specific event types
|
|
95
|
-
* @returns Recent security events
|
|
96
|
-
*/
|
|
97
|
-
getRecentEvents(limit = 100, filter) {
|
|
98
|
-
let filteredEvents = this.securityEvents;
|
|
99
|
-
// Apply filters
|
|
100
|
-
if (filter) {
|
|
101
|
-
if (filter.level) {
|
|
102
|
-
filteredEvents = filteredEvents.filter(event => event.level === filter.level);
|
|
103
|
-
}
|
|
104
|
-
if (filter.type) {
|
|
105
|
-
filteredEvents = filteredEvents.filter(event => event.type === filter.type);
|
|
106
|
-
}
|
|
107
|
-
if (filter.fromTimestamp) {
|
|
108
|
-
filteredEvents = filteredEvents.filter(event => event.timestamp >= filter.fromTimestamp);
|
|
109
|
-
}
|
|
110
|
-
if (filter.toTimestamp) {
|
|
111
|
-
filteredEvents = filteredEvents.filter(event => event.timestamp <= filter.toTimestamp);
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
// Return most recent events up to limit
|
|
115
|
-
return filteredEvents
|
|
116
|
-
.sort((a, b) => b.timestamp - a.timestamp)
|
|
117
|
-
.slice(0, limit);
|
|
118
|
-
}
|
|
119
|
-
/**
|
|
120
|
-
* Get events by security level
|
|
121
|
-
* @param level The security level to filter by
|
|
122
|
-
* @param limit Maximum number of events to return
|
|
123
|
-
* @returns Security events matching the level
|
|
124
|
-
*/
|
|
125
|
-
getEventsByLevel(level, limit = 100) {
|
|
126
|
-
return this.getRecentEvents(limit, { level });
|
|
127
|
-
}
|
|
128
|
-
/**
|
|
129
|
-
* Get events by security type
|
|
130
|
-
* @param type The event type to filter by
|
|
131
|
-
* @param limit Maximum number of events to return
|
|
132
|
-
* @returns Security events matching the type
|
|
133
|
-
*/
|
|
134
|
-
getEventsByType(type, limit = 100) {
|
|
135
|
-
return this.getRecentEvents(limit, { type });
|
|
136
|
-
}
|
|
137
|
-
/**
|
|
138
|
-
* Get security events for a specific IP address
|
|
139
|
-
* @param ipAddress The IP address to filter by
|
|
140
|
-
* @param limit Maximum number of events to return
|
|
141
|
-
* @returns Security events for the IP address
|
|
142
|
-
*/
|
|
143
|
-
getEventsByIP(ipAddress, limit = 100) {
|
|
144
|
-
return this.securityEvents
|
|
145
|
-
.filter(event => event.ipAddress === ipAddress)
|
|
146
|
-
.sort((a, b) => b.timestamp - a.timestamp)
|
|
147
|
-
.slice(0, limit);
|
|
148
|
-
}
|
|
149
|
-
/**
|
|
150
|
-
* Get security events for a specific domain
|
|
151
|
-
* @param domain The domain to filter by
|
|
152
|
-
* @param limit Maximum number of events to return
|
|
153
|
-
* @returns Security events for the domain
|
|
154
|
-
*/
|
|
155
|
-
getEventsByDomain(domain, limit = 100) {
|
|
156
|
-
return this.securityEvents
|
|
157
|
-
.filter(event => event.domain === domain)
|
|
158
|
-
.sort((a, b) => b.timestamp - a.timestamp)
|
|
159
|
-
.slice(0, limit);
|
|
160
|
-
}
|
|
161
|
-
/**
|
|
162
|
-
* Send a notification for critical security events
|
|
163
|
-
* @param event The security event to notify about
|
|
164
|
-
* @private
|
|
165
|
-
*/
|
|
166
|
-
sendNotification(event) {
|
|
167
|
-
// In a production environment, this would integrate with a notification service
|
|
168
|
-
// For now, we'll just log that we would send a notification
|
|
169
|
-
logger.log('error', `[SECURITY NOTIFICATION] ${event.message}`, {
|
|
170
|
-
...event,
|
|
171
|
-
notificationSent: true
|
|
172
|
-
});
|
|
173
|
-
// Future integration with alerting systems would go here
|
|
174
|
-
}
|
|
175
|
-
/**
|
|
176
|
-
* Clear event history
|
|
177
|
-
*/
|
|
178
|
-
clearEvents() {
|
|
179
|
-
this.securityEvents = [];
|
|
180
|
-
}
|
|
181
|
-
/**
|
|
182
|
-
* Get statistical summary of security events
|
|
183
|
-
* @param timeWindow Optional time window in milliseconds
|
|
184
|
-
* @returns Summary of security events
|
|
185
|
-
*/
|
|
186
|
-
getEventsSummary(timeWindow) {
|
|
187
|
-
// Filter by time window if provided
|
|
188
|
-
let events = this.securityEvents;
|
|
189
|
-
if (timeWindow) {
|
|
190
|
-
const cutoff = Date.now() - timeWindow;
|
|
191
|
-
events = events.filter(e => e.timestamp >= cutoff);
|
|
192
|
-
}
|
|
193
|
-
// Count by level
|
|
194
|
-
const byLevel = Object.values(SecurityLogLevel).reduce((acc, level) => {
|
|
195
|
-
acc[level] = events.filter(e => e.level === level).length;
|
|
196
|
-
return acc;
|
|
197
|
-
}, {});
|
|
198
|
-
// Count by type
|
|
199
|
-
const byType = Object.values(SecurityEventType).reduce((acc, type) => {
|
|
200
|
-
acc[type] = events.filter(e => e.type === type).length;
|
|
201
|
-
return acc;
|
|
202
|
-
}, {});
|
|
203
|
-
// Count by IP
|
|
204
|
-
const ipCounts = new Map();
|
|
205
|
-
events.forEach(e => {
|
|
206
|
-
if (e.ipAddress) {
|
|
207
|
-
ipCounts.set(e.ipAddress, (ipCounts.get(e.ipAddress) || 0) + 1);
|
|
208
|
-
}
|
|
209
|
-
});
|
|
210
|
-
// Count by domain
|
|
211
|
-
const domainCounts = new Map();
|
|
212
|
-
events.forEach(e => {
|
|
213
|
-
if (e.domain) {
|
|
214
|
-
domainCounts.set(e.domain, (domainCounts.get(e.domain) || 0) + 1);
|
|
215
|
-
}
|
|
216
|
-
});
|
|
217
|
-
// Sort and limit top entries
|
|
218
|
-
const topIPs = Array.from(ipCounts.entries())
|
|
219
|
-
.map(([ip, count]) => ({ ip, count }))
|
|
220
|
-
.sort((a, b) => b.count - a.count)
|
|
221
|
-
.slice(0, 10);
|
|
222
|
-
const topDomains = Array.from(domainCounts.entries())
|
|
223
|
-
.map(([domain, count]) => ({ domain, count }))
|
|
224
|
-
.sort((a, b) => b.count - a.count)
|
|
225
|
-
.slice(0, 10);
|
|
226
|
-
return {
|
|
227
|
-
total: events.length,
|
|
228
|
-
byLevel,
|
|
229
|
-
byType,
|
|
230
|
-
topIPs,
|
|
231
|
-
topDomains
|
|
232
|
-
};
|
|
233
|
-
}
|
|
234
|
-
}
|
|
235
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5zZWN1cml0eWxvZ2dlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3RzL3NlY3VyaXR5L2NsYXNzZXMuc2VjdXJpdHlsb2dnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUV0Qzs7R0FFRztBQUNILE1BQU0sQ0FBTixJQUFZLGdCQUtYO0FBTEQsV0FBWSxnQkFBZ0I7SUFDMUIsaUNBQWEsQ0FBQTtJQUNiLGlDQUFhLENBQUE7SUFDYixtQ0FBZSxDQUFBO0lBQ2YseUNBQXFCLENBQUE7QUFDdkIsQ0FBQyxFQUxXLGdCQUFnQixLQUFoQixnQkFBZ0IsUUFLM0I7QUFFRDs7R0FFRztBQUNILE1BQU0sQ0FBTixJQUFZLGlCQW1CWDtBQW5CRCxXQUFZLGlCQUFpQjtJQUMzQixzREFBaUMsQ0FBQTtJQUNqQyxzREFBaUMsQ0FBQTtJQUNqQywwREFBcUMsQ0FBQTtJQUNyQywwREFBcUMsQ0FBQTtJQUNyQywwREFBcUMsQ0FBQTtJQUNyQyxzREFBaUMsQ0FBQTtJQUNqQyxrQ0FBYSxDQUFBO0lBQ2IsZ0NBQVcsQ0FBQTtJQUNYLG9DQUFlLENBQUE7SUFDZiw4Q0FBeUIsQ0FBQTtJQUN6QixvREFBK0IsQ0FBQTtJQUMvQixrQ0FBYSxDQUFBO0lBQ2Isd0NBQW1CLENBQUE7SUFDbkIsOENBQXlCLENBQUE7SUFDekIsb0RBQStCLENBQUE7SUFDL0Isb0RBQStCLENBQUE7SUFDL0Isb0RBQStCLENBQUE7SUFDL0IsZ0VBQTJDLENBQUE7QUFDN0MsQ0FBQyxFQW5CVyxpQkFBaUIsS0FBakIsaUJBQWlCLFFBbUI1QjtBQXFCRDs7R0FFRztBQUNILE1BQU0sT0FBTyxjQUFjO0lBQ2pCLE1BQU0sQ0FBQyxRQUFRLENBQWlCO0lBQ2hDLGNBQWMsR0FBcUIsRUFBRSxDQUFDO0lBQ3RDLGVBQWUs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
|
|
@@ -1,82 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Storage configuration interface
|
|
3
|
-
*/
|
|
4
|
-
export interface IStorageConfig {
|
|
5
|
-
/** Filesystem path for storage */
|
|
6
|
-
fsPath?: string;
|
|
7
|
-
/** Custom read function */
|
|
8
|
-
readFunction?: (key: string) => Promise<string>;
|
|
9
|
-
/** Custom write function */
|
|
10
|
-
writeFunction?: (key: string, value: string) => Promise<void>;
|
|
11
|
-
}
|
|
12
|
-
/**
|
|
13
|
-
* Storage backend type
|
|
14
|
-
*/
|
|
15
|
-
export type StorageBackend = 'filesystem' | 'custom' | 'memory';
|
|
16
|
-
/**
|
|
17
|
-
* Central storage manager for DcRouter
|
|
18
|
-
* Provides unified key-value storage with multiple backend support
|
|
19
|
-
*/
|
|
20
|
-
export declare class StorageManager {
|
|
21
|
-
private backend;
|
|
22
|
-
private memoryStore;
|
|
23
|
-
private config;
|
|
24
|
-
private fsBasePath?;
|
|
25
|
-
constructor(config?: IStorageConfig);
|
|
26
|
-
/**
|
|
27
|
-
* Show warning when using memory backend
|
|
28
|
-
*/
|
|
29
|
-
private showMemoryWarning;
|
|
30
|
-
/**
|
|
31
|
-
* Ensure directory exists for filesystem backend
|
|
32
|
-
*/
|
|
33
|
-
private ensureDirectory;
|
|
34
|
-
/**
|
|
35
|
-
* Validate and sanitize storage key
|
|
36
|
-
*/
|
|
37
|
-
private validateKey;
|
|
38
|
-
/**
|
|
39
|
-
* Convert key to filesystem path
|
|
40
|
-
*/
|
|
41
|
-
private keyToPath;
|
|
42
|
-
/**
|
|
43
|
-
* Internal filesystem read function
|
|
44
|
-
*/
|
|
45
|
-
private fsRead;
|
|
46
|
-
/**
|
|
47
|
-
* Internal filesystem write function
|
|
48
|
-
*/
|
|
49
|
-
private fsWrite;
|
|
50
|
-
/**
|
|
51
|
-
* Get value by key
|
|
52
|
-
*/
|
|
53
|
-
get(key: string): Promise<string | null>;
|
|
54
|
-
/**
|
|
55
|
-
* Set value by key
|
|
56
|
-
*/
|
|
57
|
-
set(key: string, value: string): Promise<void>;
|
|
58
|
-
/**
|
|
59
|
-
* Delete value by key
|
|
60
|
-
*/
|
|
61
|
-
delete(key: string): Promise<void>;
|
|
62
|
-
/**
|
|
63
|
-
* List keys by prefix
|
|
64
|
-
*/
|
|
65
|
-
list(prefix?: string): Promise<string[]>;
|
|
66
|
-
/**
|
|
67
|
-
* Check if key exists
|
|
68
|
-
*/
|
|
69
|
-
exists(key: string): Promise<boolean>;
|
|
70
|
-
/**
|
|
71
|
-
* Get storage backend type
|
|
72
|
-
*/
|
|
73
|
-
getBackend(): StorageBackend;
|
|
74
|
-
/**
|
|
75
|
-
* JSON helper: Get and parse JSON value
|
|
76
|
-
*/
|
|
77
|
-
getJSON<T = any>(key: string): Promise<T | null>;
|
|
78
|
-
/**
|
|
79
|
-
* JSON helper: Set value as JSON
|
|
80
|
-
*/
|
|
81
|
-
setJSON(key: string, value: any): Promise<void>;
|
|
82
|
-
}
|