@serve.zone/dcrouter 11.0.23 → 11.0.25

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (124) hide show
  1. package/dist_serve/bundle.js +1 -1
  2. package/dist_ts_web/00_commitinfo_data.js +1 -1
  3. package/package.json +1 -1
  4. package/ts/00_commitinfo_data.ts +1 -1
  5. package/ts/logger.ts +1 -1
  6. package/ts_web/00_commitinfo_data.ts +1 -1
  7. package/dist_ts/00_commitinfo_data.d.ts +0 -8
  8. package/dist_ts/00_commitinfo_data.js +0 -9
  9. package/dist_ts/cache/classes.cache.cleaner.d.ts +0 -47
  10. package/dist_ts/cache/classes.cache.cleaner.js +0 -130
  11. package/dist_ts/cache/classes.cached.document.d.ts +0 -76
  12. package/dist_ts/cache/classes.cached.document.js +0 -100
  13. package/dist_ts/cache/classes.cachedb.d.ts +0 -60
  14. package/dist_ts/cache/classes.cachedb.js +0 -126
  15. package/dist_ts/cache/documents/classes.cached.email.d.ts +0 -125
  16. package/dist_ts/cache/documents/classes.cached.email.js +0 -337
  17. package/dist_ts/cache/documents/classes.cached.ip.reputation.d.ts +0 -119
  18. package/dist_ts/cache/documents/classes.cached.ip.reputation.js +0 -323
  19. package/dist_ts/cache/documents/index.d.ts +0 -2
  20. package/dist_ts/cache/documents/index.js +0 -3
  21. package/dist_ts/cache/index.d.ts +0 -4
  22. package/dist_ts/cache/index.js +0 -7
  23. package/dist_ts/classes.cert-provision-scheduler.d.ts +0 -53
  24. package/dist_ts/classes.cert-provision-scheduler.js +0 -110
  25. package/dist_ts/classes.dcrouter.d.ts +0 -337
  26. package/dist_ts/classes.dcrouter.js +0 -1405
  27. package/dist_ts/classes.storage-cert-manager.d.ts +0 -18
  28. package/dist_ts/classes.storage-cert-manager.js +0 -43
  29. package/dist_ts/config/classes.api-token-manager.d.ts +0 -46
  30. package/dist_ts/config/classes.api-token-manager.js +0 -150
  31. package/dist_ts/config/classes.route-config-manager.d.ts +0 -35
  32. package/dist_ts/config/classes.route-config-manager.js +0 -231
  33. package/dist_ts/config/index.d.ts +0 -3
  34. package/dist_ts/config/index.js +0 -5
  35. package/dist_ts/config/validator.d.ts +0 -104
  36. package/dist_ts/config/validator.js +0 -152
  37. package/dist_ts/errors/base.errors.d.ts +0 -224
  38. package/dist_ts/errors/base.errors.js +0 -320
  39. package/dist_ts/errors/error-handler.d.ts +0 -98
  40. package/dist_ts/errors/error-handler.js +0 -282
  41. package/dist_ts/errors/error.codes.d.ts +0 -115
  42. package/dist_ts/errors/error.codes.js +0 -136
  43. package/dist_ts/errors/index.d.ts +0 -54
  44. package/dist_ts/errors/index.js +0 -136
  45. package/dist_ts/errors/reputation.errors.d.ts +0 -183
  46. package/dist_ts/errors/reputation.errors.js +0 -292
  47. package/dist_ts/index.d.ts +0 -7
  48. package/dist_ts/index.js +0 -11
  49. package/dist_ts/logger.d.ts +0 -21
  50. package/dist_ts/logger.js +0 -81
  51. package/dist_ts/monitoring/classes.metricscache.d.ts +0 -32
  52. package/dist_ts/monitoring/classes.metricscache.js +0 -63
  53. package/dist_ts/monitoring/classes.metricsmanager.d.ts +0 -178
  54. package/dist_ts/monitoring/classes.metricsmanager.js +0 -642
  55. package/dist_ts/monitoring/index.d.ts +0 -1
  56. package/dist_ts/monitoring/index.js +0 -2
  57. package/dist_ts/opsserver/classes.opsserver.d.ts +0 -37
  58. package/dist_ts/opsserver/classes.opsserver.js +0 -85
  59. package/dist_ts/opsserver/handlers/admin.handler.d.ts +0 -31
  60. package/dist_ts/opsserver/handlers/admin.handler.js +0 -180
  61. package/dist_ts/opsserver/handlers/api-token.handler.d.ts +0 -6
  62. package/dist_ts/opsserver/handlers/api-token.handler.js +0 -62
  63. package/dist_ts/opsserver/handlers/certificate.handler.d.ts +0 -32
  64. package/dist_ts/opsserver/handlers/certificate.handler.js +0 -421
  65. package/dist_ts/opsserver/handlers/config.handler.d.ts +0 -7
  66. package/dist_ts/opsserver/handlers/config.handler.js +0 -192
  67. package/dist_ts/opsserver/handlers/email-ops.handler.d.ts +0 -30
  68. package/dist_ts/opsserver/handlers/email-ops.handler.js +0 -227
  69. package/dist_ts/opsserver/handlers/index.d.ts +0 -11
  70. package/dist_ts/opsserver/handlers/index.js +0 -12
  71. package/dist_ts/opsserver/handlers/logs.handler.d.ts +0 -25
  72. package/dist_ts/opsserver/handlers/logs.handler.js +0 -256
  73. package/dist_ts/opsserver/handlers/radius.handler.d.ts +0 -6
  74. package/dist_ts/opsserver/handlers/radius.handler.js +0 -295
  75. package/dist_ts/opsserver/handlers/remoteingress.handler.d.ts +0 -6
  76. package/dist_ts/opsserver/handlers/remoteingress.handler.js +0 -156
  77. package/dist_ts/opsserver/handlers/route-management.handler.d.ts +0 -14
  78. package/dist_ts/opsserver/handlers/route-management.handler.js +0 -117
  79. package/dist_ts/opsserver/handlers/security.handler.d.ts +0 -9
  80. package/dist_ts/opsserver/handlers/security.handler.js +0 -231
  81. package/dist_ts/opsserver/handlers/stats.handler.d.ts +0 -11
  82. package/dist_ts/opsserver/handlers/stats.handler.js +0 -399
  83. package/dist_ts/opsserver/helpers/guards.d.ts +0 -27
  84. package/dist_ts/opsserver/helpers/guards.js +0 -43
  85. package/dist_ts/opsserver/index.d.ts +0 -1
  86. package/dist_ts/opsserver/index.js +0 -2
  87. package/dist_ts/paths.d.ts +0 -26
  88. package/dist_ts/paths.js +0 -45
  89. package/dist_ts/plugins.d.ts +0 -79
  90. package/dist_ts/plugins.js +0 -113
  91. package/dist_ts/radius/classes.accounting.manager.d.ts +0 -218
  92. package/dist_ts/radius/classes.accounting.manager.js +0 -417
  93. package/dist_ts/radius/classes.radius.server.d.ts +0 -171
  94. package/dist_ts/radius/classes.radius.server.js +0 -385
  95. package/dist_ts/radius/classes.vlan.manager.d.ts +0 -128
  96. package/dist_ts/radius/classes.vlan.manager.js +0 -279
  97. package/dist_ts/radius/index.d.ts +0 -13
  98. package/dist_ts/radius/index.js +0 -14
  99. package/dist_ts/remoteingress/classes.remoteingress-manager.d.ts +0 -82
  100. package/dist_ts/remoteingress/classes.remoteingress-manager.js +0 -227
  101. package/dist_ts/remoteingress/classes.tunnel-manager.d.ts +0 -59
  102. package/dist_ts/remoteingress/classes.tunnel-manager.js +0 -165
  103. package/dist_ts/remoteingress/index.d.ts +0 -2
  104. package/dist_ts/remoteingress/index.js +0 -3
  105. package/dist_ts/security/classes.contentscanner.d.ts +0 -164
  106. package/dist_ts/security/classes.contentscanner.js +0 -642
  107. package/dist_ts/security/classes.ipreputationchecker.d.ts +0 -160
  108. package/dist_ts/security/classes.ipreputationchecker.js +0 -537
  109. package/dist_ts/security/classes.securitylogger.d.ts +0 -144
  110. package/dist_ts/security/classes.securitylogger.js +0 -233
  111. package/dist_ts/security/index.d.ts +0 -3
  112. package/dist_ts/security/index.js +0 -4
  113. package/dist_ts/sms/classes.smsservice.d.ts +0 -15
  114. package/dist_ts/sms/classes.smsservice.js +0 -72
  115. package/dist_ts/sms/config/sms.config.d.ts +0 -93
  116. package/dist_ts/sms/config/sms.config.js +0 -2
  117. package/dist_ts/sms/config/sms.schema.d.ts +0 -5
  118. package/dist_ts/sms/config/sms.schema.js +0 -121
  119. package/dist_ts/sms/index.d.ts +0 -1
  120. package/dist_ts/sms/index.js +0 -2
  121. package/dist_ts/storage/classes.storagemanager.d.ts +0 -83
  122. package/dist_ts/storage/classes.storagemanager.js +0 -350
  123. package/dist_ts/storage/index.d.ts +0 -1
  124. package/dist_ts/storage/index.js +0 -3
@@ -1,121 +0,0 @@
1
- /**
2
- * SMS service configuration schema
3
- */
4
- export const smsConfigSchema = {
5
- apiGatewayApiToken: {
6
- type: 'string',
7
- required: true
8
- },
9
- defaultSender: {
10
- type: 'string',
11
- required: false
12
- },
13
- rateLimit: {
14
- type: 'object',
15
- required: false,
16
- schema: {
17
- enabled: {
18
- type: 'boolean',
19
- required: false,
20
- default: true
21
- },
22
- maxPerPeriod: {
23
- type: 'number',
24
- required: false,
25
- default: 100,
26
- min: 1
27
- },
28
- periodMs: {
29
- type: 'number',
30
- required: false,
31
- default: 60000, // 1 minute
32
- min: 1000
33
- },
34
- perKey: {
35
- type: 'boolean',
36
- required: false,
37
- default: true
38
- },
39
- burstTokens: {
40
- type: 'number',
41
- required: false,
42
- default: 5,
43
- min: 0
44
- },
45
- maxPerRecipientPerDay: {
46
- type: 'number',
47
- required: false,
48
- default: 10,
49
- min: 1
50
- }
51
- }
52
- },
53
- provider: {
54
- type: 'object',
55
- required: false,
56
- schema: {
57
- type: {
58
- type: 'string',
59
- required: false,
60
- enum: ['gateway', 'twilio', 'other'],
61
- default: 'gateway'
62
- },
63
- config: {
64
- type: 'object',
65
- required: false
66
- },
67
- fallback: {
68
- type: 'object',
69
- required: false,
70
- schema: {
71
- enabled: {
72
- type: 'boolean',
73
- required: false,
74
- default: false
75
- },
76
- type: {
77
- type: 'string',
78
- required: false,
79
- enum: ['gateway', 'twilio', 'other']
80
- },
81
- config: {
82
- type: 'object',
83
- required: false
84
- }
85
- }
86
- }
87
- }
88
- },
89
- verification: {
90
- type: 'object',
91
- required: false,
92
- schema: {
93
- codeLength: {
94
- type: 'number',
95
- required: false,
96
- default: 6,
97
- min: 4,
98
- max: 10
99
- },
100
- expirationSeconds: {
101
- type: 'number',
102
- required: false,
103
- default: 300, // 5 minutes
104
- min: 60
105
- },
106
- maxAttempts: {
107
- type: 'number',
108
- required: false,
109
- default: 3,
110
- min: 1
111
- },
112
- cooldownSeconds: {
113
- type: 'number',
114
- required: false,
115
- default: 60, // 1 minute
116
- min: 0
117
- }
118
- }
119
- }
120
- };
121
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21zLnNjaGVtYS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3RzL3Ntcy9jb25maWcvc21zLnNjaGVtYS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQTs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBcUI7SUFDL0Msa0JBQWtCLEVBQUU7UUFDbEIsSUFBSSxFQUFFLFFBQVE7UUFDZCxRQUFRLEVBQUUsSUFBSTtLQUNmO0lBQ0QsYUFBYSxFQUFFO1FBQ2IsSUFBSSxFQUFFLFFBQVE7UUFDZCxRQUFRLEVBQUUsS0FBSztLQUNoQjtJQUNELFNBQVMsRUFBRTtRQUNULElBQUksRUFBRSxRQUFRO1FBQ2QsUUFBUSxFQUFFLEtBQUs7UUFDZixNQUFNLEVBQUU7WUFDTixPQUFPLEVBQUU7Z0JBQ1AsSUFBSSxFQUFFLFNBQVM7Z0JBQ2YsUUFBUSxFQUFFLEtBQUs7Z0JBQ2YsT0FBTyxFQUFFLElBQUk7YUFDZDtZQUNELFlBQVksRUFBRTtnQkFDWixJQUFJLEVBQUUsUUFBUTtnQkFDZCxRQUFRLEVBQUUsS0FBSztnQkFDZixPQUFPLEVBQUUsR0FBRztnQkFDWixHQUFHLEVBQUUsQ0FBQzthQUNQO1lBQ0QsUUFBUSxFQUFFO2dCQUNSLElBQUksRUFBRSxRQUFRO2dCQUNkLFFBQVEsRUFBRSxLQUFLO2dCQUNmLE9BQU8sRUFBRSxLQUFLLEVBQUUsV0FBVztnQkFDM0IsR0FBRyxFQUFFLElBQUk7YUFDVjtZQUNELE1BQU0sRUFBRTtnQkFDTixJQUFJLEVBQUUsU0FBUztnQkFDZixRQUFRLEVBQUUsS0FBSztnQkFDZixPQUFPLEVBQUUsSUFBSTthQUNkO1lBQ0QsV0FBVyxFQUFFO2dCQUNYLElBQUksRUFBRSxRQUFRO2dCQUNkLFFBQVEsRUFBRSxLQUFLO2dCQUNmLE9BQU8sRUFBRSxDQUFDO2dCQUNWLEdBQUcsRUFBRSxDQUFDO2FBQ1A7WUFDRCxxQkFBcUIsRUFBRTtnQkFDckIsSUFBSSxFQUFFLFFBQVE7Z0JBQ2QsUUFBUSxFQUFFLEtBQUs7Z0JBQ2YsT0FBTyxFQUFFLEVBQUU7Z0JBQ1gsR0FBRyxFQUFFLENBQUM7YUFDUDtTQUNGO0tBQ0Y7SUFDRCxRQUFRLEVBQUU7UUFDUixJQUFJLEVBQUUsUUFBUTtRQUNkLFFBQVEsRUFBRSxLQUFLO1FBQ2YsTUFBTSxFQUFFO1lBQ04sSUFBSSxFQUFFO2dCQUNKLElBQUksRUFBRSxRQUFRO2dCQUNkLFFBQVEsRUFBRSxLQUFLO2dCQUNmLElBQUksRUFBRSxDQUFDLFNBQVMsRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFDO2dCQUNwQyxPQUFPLEVBQUUsU0FBUzthQUNuQjtZQUNELE1BQU0sRUFBRTtnQkFDTixJQUFJLEVBQUUsUUFBUTtnQkFDZCxRQUFRLEVBQUUsS0FBSzthQUNoQjtZQUNELFFBQVEsRUFBRTtnQkFDUixJQUFJLEVBQUUsUUFBUTtnQkFDZCxRQUFRLEVBQUUsS0FBSztnQkFDZixNQUFNLEVBQUU7b0JBQ04sT0FBTyxFQUFFO3dCQUNQLElBQUksRUFBRSxTQUFTO3dCQUNmLFFBQVEsRUFBRSxLQUFLO3dCQUNmLE9BQU8sRUFBRSxLQUFLO3FCQUNmO29CQUNELElBQUksRUFBRTt3QkFDSixJQUFJLEVBQUUsUUFBUTt3QkFDZCxRQUFRLEVBQUUsS0FBSzt3QkFDZixJQUFJLEVBQUUsQ0FBQyxTQUFTLEVBQUUsUUFBUSxFQUFFLE9BQU8sQ0FBQztxQkFDckM7b0JBQ0QsTUFBTSxFQUFFO3dCQUNOLElBQUksRUFBRSxRQUFRO3dCQUNkLFFBQVEsRUFBRSxLQUFLO3FCQUNoQjtpQkFDRjthQUNGO1NBQ0Y7S0FDRjtJQUNELFlBQVksRUFBRTtRQUNaLElBQUksRUFBRSxRQUFRO1FBQ2QsUUFBUSxFQUFFLEtBQUs7UUFDZixNQUFNLEVBQUU7WUFDTixVQUFVLEVBQUU7Z0JBQ1YsSUFBSSxFQUFFLFFBQVE7Z0JBQ2QsUUFBUSxFQUFFLEtBQUs7Z0JBQ2YsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsR0FBRyxFQUFFLENBQUM7Z0JBQ04sR0FBRyxFQUFFLEVBQUU7YUFDUjtZQUNELGlCQUFpQixFQUFFO2dCQUNqQixJQUFJLEVBQUUsUUFBUTtnQkFDZCxRQUFRLEVBQUUsS0FBSztnQkFDZixPQUFPLEVBQUUsR0FBRyxFQUFFLFlBQVk7Z0JBQzFCLEdBQUcsRUFBRSxFQUFFO2FBQ1I7WUFDRCxXQUFXLEVBQUU7Z0JBQ1gsSUFBSSxFQUFFLFFBQVE7Z0JBQ2QsUUFBUSxFQUFFLEtBQUs7Z0JBQ2YsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsR0FBRyxFQUFFLENBQUM7YUFDUDtZQUNELGVBQWUsRUFBRTtnQkFDZixJQUFJLEVBQUUsUUFBUTtnQkFDZCxRQUFRLEVBQUUsS0FBSztnQkFDZixPQUFPLEVBQUUsRUFBRSxFQUFFLFdBQVc7Z0JBQ3hCLEdBQUcsRUFBRSxDQUFDO2FBQ1A7U0FDRjtLQUNGO0NBQ0YsQ0FBQyJ9
@@ -1 +0,0 @@
1
- export * from './classes.smsservice.js';
@@ -1,2 +0,0 @@
1
- export * from './classes.smsservice.js';
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90cy9zbXMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyx5QkFBeUIsQ0FBQyJ9
@@ -1,83 +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 static readonly MAX_MEMORY_ENTRIES;
22
- private backend;
23
- private memoryStore;
24
- private config;
25
- private fsBasePath?;
26
- constructor(config?: IStorageConfig);
27
- /**
28
- * Show warning when using memory backend
29
- */
30
- private showMemoryWarning;
31
- /**
32
- * Ensure directory exists for filesystem backend
33
- */
34
- private ensureDirectory;
35
- /**
36
- * Validate and sanitize storage key
37
- */
38
- private validateKey;
39
- /**
40
- * Convert key to filesystem path
41
- */
42
- private keyToPath;
43
- /**
44
- * Internal filesystem read function
45
- */
46
- private fsRead;
47
- /**
48
- * Internal filesystem write function
49
- */
50
- private fsWrite;
51
- /**
52
- * Get value by key
53
- */
54
- get(key: string): Promise<string | null>;
55
- /**
56
- * Set value by key
57
- */
58
- set(key: string, value: string): Promise<void>;
59
- /**
60
- * Delete value by key
61
- */
62
- delete(key: string): Promise<void>;
63
- /**
64
- * List keys by prefix
65
- */
66
- list(prefix?: string): Promise<string[]>;
67
- /**
68
- * Check if key exists
69
- */
70
- exists(key: string): Promise<boolean>;
71
- /**
72
- * Get storage backend type
73
- */
74
- getBackend(): StorageBackend;
75
- /**
76
- * JSON helper: Get and parse JSON value
77
- */
78
- getJSON<T = any>(key: string): Promise<T | null>;
79
- /**
80
- * JSON helper: Set value as JSON
81
- */
82
- setJSON(key: string, value: any): Promise<void>;
83
- }
@@ -1,350 +0,0 @@
1
- import * as plugins from '../plugins.js';
2
- import { logger } from '../logger.js';
3
- // Promisify filesystem operations
4
- const readFile = plugins.util.promisify(plugins.fs.readFile);
5
- const writeFile = plugins.util.promisify(plugins.fs.writeFile);
6
- const unlink = plugins.util.promisify(plugins.fs.unlink);
7
- const rename = plugins.util.promisify(plugins.fs.rename);
8
- const readdir = plugins.util.promisify(plugins.fs.readdir);
9
- /**
10
- * Central storage manager for DcRouter
11
- * Provides unified key-value storage with multiple backend support
12
- */
13
- export class StorageManager {
14
- static MAX_MEMORY_ENTRIES = 10_000;
15
- backend;
16
- memoryStore = new Map();
17
- config;
18
- fsBasePath;
19
- constructor(config) {
20
- this.config = config || {};
21
- // Check if both fsPath and custom functions are provided
22
- if (config?.fsPath && (config?.readFunction || config?.writeFunction)) {
23
- console.warn('⚠️ WARNING: Both fsPath and custom read/write functions are configured.\n' +
24
- ' Using custom read/write functions. fsPath will be ignored.');
25
- }
26
- // Determine backend based on configuration
27
- if (config?.readFunction && config?.writeFunction) {
28
- this.backend = 'custom';
29
- }
30
- else if (config?.fsPath) {
31
- // Set up internal read/write functions for filesystem
32
- this.backend = 'custom'; // Use custom backend with internal functions
33
- this.fsBasePath = plugins.path.resolve(config.fsPath);
34
- this.ensureDirectory(this.fsBasePath);
35
- // Set up internal filesystem read/write functions
36
- this.config.readFunction = async (key) => {
37
- return this.fsRead(key);
38
- };
39
- this.config.writeFunction = async (key, value) => {
40
- await this.fsWrite(key, value);
41
- };
42
- }
43
- else {
44
- this.backend = 'memory';
45
- this.showMemoryWarning();
46
- }
47
- logger.log('info', `StorageManager initialized with ${this.backend} backend`);
48
- }
49
- /**
50
- * Show warning when using memory backend
51
- */
52
- showMemoryWarning() {
53
- console.warn('⚠️ WARNING: StorageManager is using in-memory storage.\n' +
54
- ' Data will be lost when the process restarts.\n' +
55
- ' Configure storage.fsPath or storage functions for persistence.');
56
- }
57
- /**
58
- * Ensure directory exists for filesystem backend
59
- */
60
- async ensureDirectory(dirPath) {
61
- try {
62
- await plugins.fsUtils.ensureDir(dirPath);
63
- }
64
- catch (error) {
65
- logger.log('error', `Failed to create storage directory: ${error.message}`);
66
- throw error;
67
- }
68
- }
69
- /**
70
- * Validate and sanitize storage key
71
- */
72
- validateKey(key) {
73
- if (!key || typeof key !== 'string') {
74
- throw new Error('Storage key must be a non-empty string');
75
- }
76
- // Ensure key starts with /
77
- if (!key.startsWith('/')) {
78
- key = '/' + key;
79
- }
80
- // Remove any dangerous path elements
81
- key = key.replace(/\.\./g, '').replace(/\/+/g, '/');
82
- return key;
83
- }
84
- /**
85
- * Convert key to filesystem path
86
- */
87
- keyToPath(key) {
88
- if (!this.fsBasePath) {
89
- throw new Error('Filesystem base path not configured');
90
- }
91
- // Remove leading slash and convert to path
92
- const relativePath = key.substring(1);
93
- return plugins.path.join(this.fsBasePath, relativePath);
94
- }
95
- /**
96
- * Internal filesystem read function
97
- */
98
- async fsRead(key) {
99
- const filePath = this.keyToPath(key);
100
- try {
101
- const content = await readFile(filePath, 'utf8');
102
- return content;
103
- }
104
- catch (error) {
105
- if (error.code === 'ENOENT') {
106
- return null;
107
- }
108
- throw error;
109
- }
110
- }
111
- /**
112
- * Internal filesystem write function
113
- */
114
- async fsWrite(key, value) {
115
- const filePath = this.keyToPath(key);
116
- const dir = plugins.path.dirname(filePath);
117
- // Ensure directory exists
118
- await plugins.fsUtils.ensureDir(dir);
119
- // Write atomically with temp file
120
- const tempPath = `${filePath}.tmp`;
121
- await writeFile(tempPath, value, 'utf8');
122
- await rename(tempPath, filePath);
123
- }
124
- /**
125
- * Get value by key
126
- */
127
- async get(key) {
128
- key = this.validateKey(key);
129
- try {
130
- switch (this.backend) {
131
- case 'custom': {
132
- if (!this.config.readFunction) {
133
- throw new Error('Read function not configured');
134
- }
135
- try {
136
- return await this.config.readFunction(key);
137
- }
138
- catch (error) {
139
- // Assume null if read fails (key doesn't exist)
140
- return null;
141
- }
142
- }
143
- case 'memory': {
144
- return this.memoryStore.get(key) || null;
145
- }
146
- default:
147
- throw new Error(`Unknown backend: ${this.backend}`);
148
- }
149
- }
150
- catch (error) {
151
- logger.log('error', `Storage get error for key ${key}: ${error.message}`);
152
- throw error;
153
- }
154
- }
155
- /**
156
- * Set value by key
157
- */
158
- async set(key, value) {
159
- key = this.validateKey(key);
160
- if (typeof value !== 'string') {
161
- throw new Error('Storage value must be a string');
162
- }
163
- try {
164
- switch (this.backend) {
165
- case 'filesystem': {
166
- const filePath = this.keyToPath(key);
167
- const dirPath = plugins.path.dirname(filePath);
168
- // Ensure directory exists
169
- await plugins.fsUtils.ensureDir(dirPath);
170
- // Write atomically
171
- const tempPath = filePath + '.tmp';
172
- await writeFile(tempPath, value, 'utf8');
173
- await rename(tempPath, filePath);
174
- break;
175
- }
176
- case 'custom': {
177
- if (!this.config.writeFunction) {
178
- throw new Error('Write function not configured');
179
- }
180
- await this.config.writeFunction(key, value);
181
- break;
182
- }
183
- case 'memory': {
184
- this.memoryStore.set(key, value);
185
- // Evict oldest entries if memory store exceeds limit
186
- while (this.memoryStore.size > StorageManager.MAX_MEMORY_ENTRIES) {
187
- const firstKey = this.memoryStore.keys().next().value;
188
- this.memoryStore.delete(firstKey);
189
- }
190
- break;
191
- }
192
- default:
193
- throw new Error(`Unknown backend: ${this.backend}`);
194
- }
195
- }
196
- catch (error) {
197
- logger.log('error', `Storage set error for key ${key}: ${error.message}`);
198
- throw error;
199
- }
200
- }
201
- /**
202
- * Delete value by key
203
- */
204
- async delete(key) {
205
- key = this.validateKey(key);
206
- try {
207
- switch (this.backend) {
208
- case 'filesystem': {
209
- const filePath = this.keyToPath(key);
210
- try {
211
- await unlink(filePath);
212
- }
213
- catch (error) {
214
- if (error.code !== 'ENOENT') {
215
- throw error;
216
- }
217
- }
218
- break;
219
- }
220
- case 'custom': {
221
- // Try to delete by setting empty value
222
- if (this.config.writeFunction) {
223
- await this.config.writeFunction(key, '');
224
- }
225
- break;
226
- }
227
- case 'memory': {
228
- this.memoryStore.delete(key);
229
- break;
230
- }
231
- default:
232
- throw new Error(`Unknown backend: ${this.backend}`);
233
- }
234
- }
235
- catch (error) {
236
- logger.log('error', `Storage delete error for key ${key}: ${error.message}`);
237
- throw error;
238
- }
239
- }
240
- /**
241
- * List keys by prefix
242
- */
243
- async list(prefix) {
244
- prefix = prefix ? this.validateKey(prefix) : '/';
245
- try {
246
- switch (this.backend) {
247
- case 'custom': {
248
- // If we have fsBasePath, this is actually filesystem backend
249
- if (this.fsBasePath) {
250
- const basePath = this.keyToPath(prefix);
251
- const keys = [];
252
- const walkDir = async (dir, baseDir) => {
253
- try {
254
- const entries = await readdir(dir, { withFileTypes: true });
255
- for (const entry of entries) {
256
- const fullPath = plugins.path.join(dir, entry.name);
257
- if (entry.isDirectory()) {
258
- await walkDir(fullPath, baseDir);
259
- }
260
- else if (entry.isFile()) {
261
- // Convert path back to key
262
- const relativePath = plugins.path.relative(this.fsBasePath, fullPath);
263
- const key = '/' + relativePath.replace(/\\/g, '/');
264
- if (key.startsWith(prefix)) {
265
- keys.push(key);
266
- }
267
- }
268
- }
269
- }
270
- catch (error) {
271
- if (error.code !== 'ENOENT') {
272
- throw error;
273
- }
274
- }
275
- };
276
- await walkDir(basePath, basePath);
277
- return keys.sort();
278
- }
279
- else {
280
- // True custom backends need to implement their own listing
281
- logger.log('warn', 'List operation not supported for custom backend');
282
- return [];
283
- }
284
- }
285
- case 'memory': {
286
- const keys = [];
287
- for (const key of this.memoryStore.keys()) {
288
- if (key.startsWith(prefix)) {
289
- keys.push(key);
290
- }
291
- }
292
- return keys.sort();
293
- }
294
- default:
295
- throw new Error(`Unknown backend: ${this.backend}`);
296
- }
297
- }
298
- catch (error) {
299
- logger.log('error', `Storage list error for prefix ${prefix}: ${error.message}`);
300
- throw error;
301
- }
302
- }
303
- /**
304
- * Check if key exists
305
- */
306
- async exists(key) {
307
- key = this.validateKey(key);
308
- try {
309
- const value = await this.get(key);
310
- return value !== null;
311
- }
312
- catch (error) {
313
- return false;
314
- }
315
- }
316
- /**
317
- * Get storage backend type
318
- */
319
- getBackend() {
320
- // If we're using custom backend with fsBasePath, report it as filesystem
321
- if (this.backend === 'custom' && this.fsBasePath) {
322
- return 'filesystem';
323
- }
324
- return this.backend;
325
- }
326
- /**
327
- * JSON helper: Get and parse JSON value
328
- */
329
- async getJSON(key) {
330
- const value = await this.get(key);
331
- if (value === null || value.trim() === '') {
332
- return null;
333
- }
334
- try {
335
- return JSON.parse(value);
336
- }
337
- catch (error) {
338
- logger.log('error', `Failed to parse JSON for key ${key}: ${error.message}`);
339
- throw error;
340
- }
341
- }
342
- /**
343
- * JSON helper: Set value as JSON
344
- */
345
- async setJSON(key, value) {
346
- const jsonString = JSON.stringify(value, null, 2);
347
- await this.set(key, jsonString);
348
- }
349
- }
350
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5zdG9yYWdlbWFuYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3RzL3N0b3JhZ2UvY2xhc3Nlcy5zdG9yYWdlbWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBRXRDLGtDQUFrQztBQUNsQyxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQzdELE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDL0QsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUN6RCxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3pELE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUM7QUFtQjNEOzs7R0FHRztBQUNILE1BQU0sT0FBTyxjQUFjO0lBQ2pCLE1BQU0sQ0FBVSxrQkFBa0IsR0FBRyxNQUFNLENBQUM7SUFDNUMsT0FBTyxDQUFpQjtJQUN4QixXQUFXLEdBQXdCLElBQUksR0FBRyxFQUFFLENBQUM7SUFDN0MsTUFBTSxDQUFpQjtJQUN2QixVQUFVLENBQVU7SUFFNUIsWUFBWSxNQUF1QjtRQUNqQyxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sSUFBSSxFQUFFLENBQUM7UUFFM0IseURBQXlE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
@@ -1 +0,0 @@
1
- export * from './classes.storagemanager.js';
@@ -1,3 +0,0 @@
1
- // Storage module exports
2
- export * from './classes.storagemanager.js';
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90cy9zdG9yYWdlL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHlCQUF5QjtBQUN6QixjQUFjLDZCQUE2QixDQUFDIn0=