@serve.zone/dcrouter 11.0.8 → 11.0.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.
Files changed (88) hide show
  1. package/dist_serve/bundle.js +1 -1
  2. package/dist_ts/00_commitinfo_data.js +1 -1
  3. package/dist_ts_web/00_commitinfo_data.js +1 -1
  4. package/package.json +2 -2
  5. package/ts/00_commitinfo_data.ts +1 -1
  6. package/ts_web/00_commitinfo_data.ts +1 -1
  7. package/dist_ts/cache/classes.cache.cleaner.d.ts +0 -47
  8. package/dist_ts/cache/classes.cache.cleaner.js +0 -130
  9. package/dist_ts/cache/documents/classes.cached.ip.reputation.d.ts +0 -119
  10. package/dist_ts/cache/documents/classes.cached.ip.reputation.js +0 -323
  11. package/dist_ts/cache/documents/index.d.ts +0 -2
  12. package/dist_ts/cache/documents/index.js +0 -3
  13. package/dist_ts/cache/index.d.ts +0 -4
  14. package/dist_ts/cache/index.js +0 -7
  15. package/dist_ts/config/classes.api-token-manager.d.ts +0 -46
  16. package/dist_ts/config/classes.api-token-manager.js +0 -150
  17. package/dist_ts/config/classes.route-config-manager.d.ts +0 -35
  18. package/dist_ts/config/classes.route-config-manager.js +0 -231
  19. package/dist_ts/config/index.d.ts +0 -3
  20. package/dist_ts/config/index.js +0 -5
  21. package/dist_ts/config/validator.d.ts +0 -104
  22. package/dist_ts/config/validator.js +0 -152
  23. package/dist_ts/errors/base.errors.d.ts +0 -224
  24. package/dist_ts/errors/base.errors.js +0 -320
  25. package/dist_ts/errors/error.codes.d.ts +0 -115
  26. package/dist_ts/errors/error.codes.js +0 -136
  27. package/dist_ts/monitoring/classes.metricscache.d.ts +0 -32
  28. package/dist_ts/monitoring/classes.metricscache.js +0 -63
  29. package/dist_ts/monitoring/classes.metricsmanager.d.ts +0 -178
  30. package/dist_ts/monitoring/classes.metricsmanager.js +0 -642
  31. package/dist_ts/monitoring/index.d.ts +0 -1
  32. package/dist_ts/monitoring/index.js +0 -2
  33. package/dist_ts/opsserver/classes.opsserver.d.ts +0 -37
  34. package/dist_ts/opsserver/classes.opsserver.js +0 -85
  35. package/dist_ts/opsserver/handlers/admin.handler.d.ts +0 -31
  36. package/dist_ts/opsserver/handlers/admin.handler.js +0 -180
  37. package/dist_ts/opsserver/handlers/api-token.handler.d.ts +0 -6
  38. package/dist_ts/opsserver/handlers/api-token.handler.js +0 -62
  39. package/dist_ts/opsserver/handlers/certificate.handler.d.ts +0 -32
  40. package/dist_ts/opsserver/handlers/certificate.handler.js +0 -421
  41. package/dist_ts/opsserver/handlers/config.handler.d.ts +0 -7
  42. package/dist_ts/opsserver/handlers/config.handler.js +0 -192
  43. package/dist_ts/opsserver/handlers/email-ops.handler.d.ts +0 -30
  44. package/dist_ts/opsserver/handlers/email-ops.handler.js +0 -227
  45. package/dist_ts/opsserver/handlers/index.d.ts +0 -11
  46. package/dist_ts/opsserver/handlers/index.js +0 -12
  47. package/dist_ts/opsserver/handlers/logs.handler.d.ts +0 -25
  48. package/dist_ts/opsserver/handlers/logs.handler.js +0 -256
  49. package/dist_ts/opsserver/handlers/radius.handler.d.ts +0 -6
  50. package/dist_ts/opsserver/handlers/radius.handler.js +0 -295
  51. package/dist_ts/opsserver/handlers/remoteingress.handler.d.ts +0 -6
  52. package/dist_ts/opsserver/handlers/remoteingress.handler.js +0 -156
  53. package/dist_ts/opsserver/handlers/route-management.handler.d.ts +0 -14
  54. package/dist_ts/opsserver/handlers/route-management.handler.js +0 -117
  55. package/dist_ts/opsserver/handlers/security.handler.d.ts +0 -9
  56. package/dist_ts/opsserver/handlers/security.handler.js +0 -231
  57. package/dist_ts/opsserver/handlers/stats.handler.d.ts +0 -11
  58. package/dist_ts/opsserver/handlers/stats.handler.js +0 -399
  59. package/dist_ts/opsserver/helpers/guards.d.ts +0 -27
  60. package/dist_ts/opsserver/helpers/guards.js +0 -43
  61. package/dist_ts/opsserver/index.d.ts +0 -1
  62. package/dist_ts/opsserver/index.js +0 -2
  63. package/dist_ts/radius/classes.accounting.manager.d.ts +0 -218
  64. package/dist_ts/radius/classes.accounting.manager.js +0 -417
  65. package/dist_ts/radius/classes.radius.server.d.ts +0 -171
  66. package/dist_ts/radius/classes.radius.server.js +0 -385
  67. package/dist_ts/radius/classes.vlan.manager.d.ts +0 -128
  68. package/dist_ts/radius/classes.vlan.manager.js +0 -279
  69. package/dist_ts/radius/index.d.ts +0 -13
  70. package/dist_ts/radius/index.js +0 -14
  71. package/dist_ts/remoteingress/classes.remoteingress-manager.d.ts +0 -82
  72. package/dist_ts/remoteingress/classes.remoteingress-manager.js +0 -227
  73. package/dist_ts/remoteingress/classes.tunnel-manager.d.ts +0 -59
  74. package/dist_ts/remoteingress/classes.tunnel-manager.js +0 -165
  75. package/dist_ts/remoteingress/index.d.ts +0 -2
  76. package/dist_ts/remoteingress/index.js +0 -3
  77. package/dist_ts/security/classes.contentscanner.d.ts +0 -164
  78. package/dist_ts/security/classes.contentscanner.js +0 -642
  79. package/dist_ts/security/classes.ipreputationchecker.d.ts +0 -160
  80. package/dist_ts/security/classes.ipreputationchecker.js +0 -537
  81. package/dist_ts/security/classes.securitylogger.d.ts +0 -144
  82. package/dist_ts/security/classes.securitylogger.js +0 -233
  83. package/dist_ts/security/index.d.ts +0 -3
  84. package/dist_ts/security/index.js +0 -4
  85. package/dist_ts/storage/classes.storagemanager.d.ts +0 -83
  86. package/dist_ts/storage/classes.storagemanager.js +0 -350
  87. package/dist_ts/storage/index.d.ts +0 -1
  88. package/dist_ts/storage/index.js +0 -3
@@ -1,323 +0,0 @@
1
- var __esDecorate = (this && this.__esDecorate) || function (ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {
2
- function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; }
3
- var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value";
4
- var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null;
5
- var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});
6
- var _, done = false;
7
- for (var i = decorators.length - 1; i >= 0; i--) {
8
- var context = {};
9
- for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p];
10
- for (var p in contextIn.access) context.access[p] = contextIn.access[p];
11
- context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); };
12
- var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);
13
- if (kind === "accessor") {
14
- if (result === void 0) continue;
15
- if (result === null || typeof result !== "object") throw new TypeError("Object expected");
16
- if (_ = accept(result.get)) descriptor.get = _;
17
- if (_ = accept(result.set)) descriptor.set = _;
18
- if (_ = accept(result.init)) initializers.unshift(_);
19
- }
20
- else if (_ = accept(result)) {
21
- if (kind === "field") initializers.unshift(_);
22
- else descriptor[key] = _;
23
- }
24
- }
25
- if (target) Object.defineProperty(target, contextIn.name, descriptor);
26
- done = true;
27
- };
28
- var __runInitializers = (this && this.__runInitializers) || function (thisArg, initializers, value) {
29
- var useValue = arguments.length > 2;
30
- for (var i = 0; i < initializers.length; i++) {
31
- value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);
32
- }
33
- return useValue ? value : void 0;
34
- };
35
- import * as plugins from '../../plugins.js';
36
- import { CachedDocument, TTL } from '../classes.cached.document.js';
37
- import { CacheDb } from '../classes.cachedb.js';
38
- /**
39
- * Helper to get the smartdata database instance
40
- */
41
- const getDb = () => CacheDb.getInstance().getDb();
42
- /**
43
- * CachedIPReputation - Stores IP reputation lookup results
44
- *
45
- * Caches the results of IP reputation checks to avoid repeated
46
- * external API calls. Default TTL is 24 hours.
47
- */
48
- let CachedIPReputation = (() => {
49
- let _classDecorators = [plugins.smartdata.Collection(() => getDb())];
50
- let _classDescriptor;
51
- let _classExtraInitializers = [];
52
- let _classThis;
53
- let _classSuper = CachedDocument;
54
- let _createdAt_decorators;
55
- let _createdAt_initializers = [];
56
- let _createdAt_extraInitializers = [];
57
- let _expiresAt_decorators;
58
- let _expiresAt_initializers = [];
59
- let _expiresAt_extraInitializers = [];
60
- let _lastAccessedAt_decorators;
61
- let _lastAccessedAt_initializers = [];
62
- let _lastAccessedAt_extraInitializers = [];
63
- let _ipAddress_decorators;
64
- let _ipAddress_initializers = [];
65
- let _ipAddress_extraInitializers = [];
66
- let _score_decorators;
67
- let _score_initializers = [];
68
- let _score_extraInitializers = [];
69
- let _isSpam_decorators;
70
- let _isSpam_initializers = [];
71
- let _isSpam_extraInitializers = [];
72
- let _isProxy_decorators;
73
- let _isProxy_initializers = [];
74
- let _isProxy_extraInitializers = [];
75
- let _isTor_decorators;
76
- let _isTor_initializers = [];
77
- let _isTor_extraInitializers = [];
78
- let _isVPN_decorators;
79
- let _isVPN_initializers = [];
80
- let _isVPN_extraInitializers = [];
81
- let _country_decorators;
82
- let _country_initializers = [];
83
- let _country_extraInitializers = [];
84
- let _asn_decorators;
85
- let _asn_initializers = [];
86
- let _asn_extraInitializers = [];
87
- let _org_decorators;
88
- let _org_initializers = [];
89
- let _org_extraInitializers = [];
90
- let _blacklists_decorators;
91
- let _blacklists_initializers = [];
92
- let _blacklists_extraInitializers = [];
93
- let _checkCount_decorators;
94
- let _checkCount_initializers = [];
95
- let _checkCount_extraInitializers = [];
96
- let _connectionCount_decorators;
97
- let _connectionCount_initializers = [];
98
- let _connectionCount_extraInitializers = [];
99
- let _emailCount_decorators;
100
- let _emailCount_initializers = [];
101
- let _emailCount_extraInitializers = [];
102
- let _spamCount_decorators;
103
- let _spamCount_initializers = [];
104
- let _spamCount_extraInitializers = [];
105
- var CachedIPReputation = class extends _classSuper {
106
- static { _classThis = this; }
107
- static {
108
- const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
109
- _createdAt_decorators = [plugins.smartdata.svDb()];
110
- _expiresAt_decorators = [plugins.smartdata.svDb()];
111
- _lastAccessedAt_decorators = [plugins.smartdata.svDb()];
112
- _ipAddress_decorators = [plugins.smartdata.unI(), plugins.smartdata.svDb()];
113
- _score_decorators = [plugins.smartdata.svDb()];
114
- _isSpam_decorators = [plugins.smartdata.svDb()];
115
- _isProxy_decorators = [plugins.smartdata.svDb()];
116
- _isTor_decorators = [plugins.smartdata.svDb()];
117
- _isVPN_decorators = [plugins.smartdata.svDb()];
118
- _country_decorators = [plugins.smartdata.svDb()];
119
- _asn_decorators = [plugins.smartdata.svDb()];
120
- _org_decorators = [plugins.smartdata.svDb()];
121
- _blacklists_decorators = [plugins.smartdata.svDb()];
122
- _checkCount_decorators = [plugins.smartdata.svDb()];
123
- _connectionCount_decorators = [plugins.smartdata.svDb()];
124
- _emailCount_decorators = [plugins.smartdata.svDb()];
125
- _spamCount_decorators = [plugins.smartdata.svDb()];
126
- __esDecorate(null, null, _createdAt_decorators, { kind: "field", name: "createdAt", static: false, private: false, access: { has: obj => "createdAt" in obj, get: obj => obj.createdAt, set: (obj, value) => { obj.createdAt = value; } }, metadata: _metadata }, _createdAt_initializers, _createdAt_extraInitializers);
127
- __esDecorate(null, null, _expiresAt_decorators, { kind: "field", name: "expiresAt", static: false, private: false, access: { has: obj => "expiresAt" in obj, get: obj => obj.expiresAt, set: (obj, value) => { obj.expiresAt = value; } }, metadata: _metadata }, _expiresAt_initializers, _expiresAt_extraInitializers);
128
- __esDecorate(null, null, _lastAccessedAt_decorators, { kind: "field", name: "lastAccessedAt", static: false, private: false, access: { has: obj => "lastAccessedAt" in obj, get: obj => obj.lastAccessedAt, set: (obj, value) => { obj.lastAccessedAt = value; } }, metadata: _metadata }, _lastAccessedAt_initializers, _lastAccessedAt_extraInitializers);
129
- __esDecorate(null, null, _ipAddress_decorators, { kind: "field", name: "ipAddress", static: false, private: false, access: { has: obj => "ipAddress" in obj, get: obj => obj.ipAddress, set: (obj, value) => { obj.ipAddress = value; } }, metadata: _metadata }, _ipAddress_initializers, _ipAddress_extraInitializers);
130
- __esDecorate(null, null, _score_decorators, { kind: "field", name: "score", static: false, private: false, access: { has: obj => "score" in obj, get: obj => obj.score, set: (obj, value) => { obj.score = value; } }, metadata: _metadata }, _score_initializers, _score_extraInitializers);
131
- __esDecorate(null, null, _isSpam_decorators, { kind: "field", name: "isSpam", static: false, private: false, access: { has: obj => "isSpam" in obj, get: obj => obj.isSpam, set: (obj, value) => { obj.isSpam = value; } }, metadata: _metadata }, _isSpam_initializers, _isSpam_extraInitializers);
132
- __esDecorate(null, null, _isProxy_decorators, { kind: "field", name: "isProxy", static: false, private: false, access: { has: obj => "isProxy" in obj, get: obj => obj.isProxy, set: (obj, value) => { obj.isProxy = value; } }, metadata: _metadata }, _isProxy_initializers, _isProxy_extraInitializers);
133
- __esDecorate(null, null, _isTor_decorators, { kind: "field", name: "isTor", static: false, private: false, access: { has: obj => "isTor" in obj, get: obj => obj.isTor, set: (obj, value) => { obj.isTor = value; } }, metadata: _metadata }, _isTor_initializers, _isTor_extraInitializers);
134
- __esDecorate(null, null, _isVPN_decorators, { kind: "field", name: "isVPN", static: false, private: false, access: { has: obj => "isVPN" in obj, get: obj => obj.isVPN, set: (obj, value) => { obj.isVPN = value; } }, metadata: _metadata }, _isVPN_initializers, _isVPN_extraInitializers);
135
- __esDecorate(null, null, _country_decorators, { kind: "field", name: "country", static: false, private: false, access: { has: obj => "country" in obj, get: obj => obj.country, set: (obj, value) => { obj.country = value; } }, metadata: _metadata }, _country_initializers, _country_extraInitializers);
136
- __esDecorate(null, null, _asn_decorators, { kind: "field", name: "asn", static: false, private: false, access: { has: obj => "asn" in obj, get: obj => obj.asn, set: (obj, value) => { obj.asn = value; } }, metadata: _metadata }, _asn_initializers, _asn_extraInitializers);
137
- __esDecorate(null, null, _org_decorators, { kind: "field", name: "org", static: false, private: false, access: { has: obj => "org" in obj, get: obj => obj.org, set: (obj, value) => { obj.org = value; } }, metadata: _metadata }, _org_initializers, _org_extraInitializers);
138
- __esDecorate(null, null, _blacklists_decorators, { kind: "field", name: "blacklists", static: false, private: false, access: { has: obj => "blacklists" in obj, get: obj => obj.blacklists, set: (obj, value) => { obj.blacklists = value; } }, metadata: _metadata }, _blacklists_initializers, _blacklists_extraInitializers);
139
- __esDecorate(null, null, _checkCount_decorators, { kind: "field", name: "checkCount", static: false, private: false, access: { has: obj => "checkCount" in obj, get: obj => obj.checkCount, set: (obj, value) => { obj.checkCount = value; } }, metadata: _metadata }, _checkCount_initializers, _checkCount_extraInitializers);
140
- __esDecorate(null, null, _connectionCount_decorators, { kind: "field", name: "connectionCount", static: false, private: false, access: { has: obj => "connectionCount" in obj, get: obj => obj.connectionCount, set: (obj, value) => { obj.connectionCount = value; } }, metadata: _metadata }, _connectionCount_initializers, _connectionCount_extraInitializers);
141
- __esDecorate(null, null, _emailCount_decorators, { kind: "field", name: "emailCount", static: false, private: false, access: { has: obj => "emailCount" in obj, get: obj => obj.emailCount, set: (obj, value) => { obj.emailCount = value; } }, metadata: _metadata }, _emailCount_initializers, _emailCount_extraInitializers);
142
- __esDecorate(null, null, _spamCount_decorators, { kind: "field", name: "spamCount", static: false, private: false, access: { has: obj => "spamCount" in obj, get: obj => obj.spamCount, set: (obj, value) => { obj.spamCount = value; } }, metadata: _metadata }, _spamCount_initializers, _spamCount_extraInitializers);
143
- __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
144
- CachedIPReputation = _classThis = _classDescriptor.value;
145
- if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
146
- __runInitializers(_classThis, _classExtraInitializers);
147
- }
148
- // TTL fields from base class (decorators required on concrete class)
149
- createdAt = __runInitializers(this, _createdAt_initializers, new Date());
150
- expiresAt = (__runInitializers(this, _createdAt_extraInitializers), __runInitializers(this, _expiresAt_initializers, new Date(Date.now() + TTL.HOURS_24)));
151
- lastAccessedAt = (__runInitializers(this, _expiresAt_extraInitializers), __runInitializers(this, _lastAccessedAt_initializers, new Date()));
152
- /**
153
- * IP address (unique identifier)
154
- */
155
- ipAddress = (__runInitializers(this, _lastAccessedAt_extraInitializers), __runInitializers(this, _ipAddress_initializers, void 0));
156
- /**
157
- * Reputation score (0-100, higher = better)
158
- */
159
- score = (__runInitializers(this, _ipAddress_extraInitializers), __runInitializers(this, _score_initializers, void 0));
160
- /**
161
- * Whether the IP is flagged as spam source
162
- */
163
- isSpam = (__runInitializers(this, _score_extraInitializers), __runInitializers(this, _isSpam_initializers, void 0));
164
- /**
165
- * Whether the IP is a known proxy
166
- */
167
- isProxy = (__runInitializers(this, _isSpam_extraInitializers), __runInitializers(this, _isProxy_initializers, void 0));
168
- /**
169
- * Whether the IP is a Tor exit node
170
- */
171
- isTor = (__runInitializers(this, _isProxy_extraInitializers), __runInitializers(this, _isTor_initializers, void 0));
172
- /**
173
- * Whether the IP is a VPN endpoint
174
- */
175
- isVPN = (__runInitializers(this, _isTor_extraInitializers), __runInitializers(this, _isVPN_initializers, void 0));
176
- /**
177
- * Country code (ISO 3166-1 alpha-2)
178
- */
179
- country = (__runInitializers(this, _isVPN_extraInitializers), __runInitializers(this, _country_initializers, void 0));
180
- /**
181
- * Autonomous System Number
182
- */
183
- asn = (__runInitializers(this, _country_extraInitializers), __runInitializers(this, _asn_initializers, void 0));
184
- /**
185
- * Organization name
186
- */
187
- org = (__runInitializers(this, _asn_extraInitializers), __runInitializers(this, _org_initializers, void 0));
188
- /**
189
- * List of blacklists the IP appears on
190
- */
191
- blacklists = (__runInitializers(this, _org_extraInitializers), __runInitializers(this, _blacklists_initializers, void 0));
192
- /**
193
- * Number of times this IP has been checked
194
- */
195
- checkCount = (__runInitializers(this, _blacklists_extraInitializers), __runInitializers(this, _checkCount_initializers, 0));
196
- /**
197
- * Number of connections from this IP
198
- */
199
- connectionCount = (__runInitializers(this, _checkCount_extraInitializers), __runInitializers(this, _connectionCount_initializers, 0));
200
- /**
201
- * Number of emails received from this IP
202
- */
203
- emailCount = (__runInitializers(this, _connectionCount_extraInitializers), __runInitializers(this, _emailCount_initializers, 0));
204
- /**
205
- * Number of spam emails from this IP
206
- */
207
- spamCount = (__runInitializers(this, _emailCount_extraInitializers), __runInitializers(this, _spamCount_initializers, 0));
208
- constructor() {
209
- super();
210
- __runInitializers(this, _spamCount_extraInitializers);
211
- this.setTTL(TTL.HOURS_24); // Default 24-hour TTL
212
- this.blacklists = [];
213
- this.score = 50; // Default neutral score
214
- this.isSpam = false;
215
- this.isProxy = false;
216
- this.isTor = false;
217
- this.isVPN = false;
218
- }
219
- /**
220
- * Create from reputation data
221
- */
222
- static fromReputationData(ipAddress, data) {
223
- const cached = new CachedIPReputation();
224
- cached.ipAddress = ipAddress;
225
- cached.score = data.score;
226
- cached.isSpam = data.isSpam;
227
- cached.isProxy = data.isProxy;
228
- cached.isTor = data.isTor;
229
- cached.isVPN = data.isVPN;
230
- cached.country = data.country || '';
231
- cached.asn = data.asn || '';
232
- cached.org = data.org || '';
233
- cached.blacklists = data.blacklists || [];
234
- cached.checkCount = 1;
235
- return cached;
236
- }
237
- /**
238
- * Convert to reputation data object
239
- */
240
- toReputationData() {
241
- this.touch();
242
- return {
243
- score: this.score,
244
- isSpam: this.isSpam,
245
- isProxy: this.isProxy,
246
- isTor: this.isTor,
247
- isVPN: this.isVPN,
248
- country: this.country,
249
- asn: this.asn,
250
- org: this.org,
251
- blacklists: this.blacklists,
252
- };
253
- }
254
- /**
255
- * Find by IP address
256
- */
257
- static async findByIP(ipAddress) {
258
- return await CachedIPReputation.getInstance({
259
- ipAddress,
260
- });
261
- }
262
- /**
263
- * Find all IPs flagged as spam
264
- */
265
- static async findSpamIPs() {
266
- return await CachedIPReputation.getInstances({
267
- isSpam: true,
268
- });
269
- }
270
- /**
271
- * Find IPs with score below threshold
272
- */
273
- static async findLowScoreIPs(threshold) {
274
- return await CachedIPReputation.getInstances({
275
- score: { $lt: threshold },
276
- });
277
- }
278
- /**
279
- * Record a connection from this IP
280
- */
281
- recordConnection() {
282
- this.connectionCount++;
283
- this.touch();
284
- }
285
- /**
286
- * Record an email from this IP
287
- */
288
- recordEmail(isSpam = false) {
289
- this.emailCount++;
290
- if (isSpam) {
291
- this.spamCount++;
292
- }
293
- this.touch();
294
- }
295
- /**
296
- * Update the reputation data
297
- */
298
- updateReputation(data) {
299
- this.score = data.score;
300
- this.isSpam = data.isSpam;
301
- this.isProxy = data.isProxy;
302
- this.isTor = data.isTor;
303
- this.isVPN = data.isVPN;
304
- this.country = data.country || this.country;
305
- this.asn = data.asn || this.asn;
306
- this.org = data.org || this.org;
307
- this.blacklists = data.blacklists || this.blacklists;
308
- this.checkCount++;
309
- this.touch();
310
- // Refresh TTL on update
311
- this.setTTL(TTL.HOURS_24);
312
- }
313
- /**
314
- * Check if this IP should be blocked
315
- */
316
- shouldBlock() {
317
- return this.isSpam || this.score < 20 || this.blacklists.length > 2;
318
- }
319
- };
320
- return CachedIPReputation = _classThis;
321
- })();
322
- export { CachedIPReputation };
323
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5jYWNoZWQuaXAucmVwdXRhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3RzL2NhY2hlL2RvY3VtZW50cy9jbGFzc2VzLmNhY2hlZC5pcC5yZXB1dGF0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGtCQUFrQixDQUFDO0FBQzVDLE9BQU8sRUFBRSxjQUFjLEVBQUUsR0FBRyxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDcEUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRWhEOztHQUVHO0FBQ0gsTUFBTSxLQUFLLEdBQUcsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBaUJsRDs7Ozs7R0FLRztJQUVVLGtCQUFrQjs0QkFEOUIsT0FBTyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUM7Ozs7c0JBQ0osY0FBYzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztrQ0FBdEIsU0FBUSxXQUFrQzs7OztxQ0FFdkUsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUU7cUNBR3hCLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFOzBDQUd4QixPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRTtxQ0FNeEIsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsRUFDdkIsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUU7aUNBTXhCLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFO2tDQU14QixPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRTttQ0FNeEIsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUU7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
@@ -1,2 +0,0 @@
1
- export * from './classes.cached.email.js';
2
- export * from './classes.cached.ip.reputation.js';
@@ -1,3 +0,0 @@
1
- export * from './classes.cached.email.js';
2
- export * from './classes.cached.ip.reputation.js';
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90cy9jYWNoZS9kb2N1bWVudHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYywyQkFBMkIsQ0FBQztBQUMxQyxjQUFjLG1DQUFtQyxDQUFDIn0=
@@ -1,4 +0,0 @@
1
- export * from './classes.cachedb.js';
2
- export * from './classes.cached.document.js';
3
- export * from './classes.cache.cleaner.js';
4
- export * from './documents/index.js';
@@ -1,7 +0,0 @@
1
- // Core cache infrastructure
2
- export * from './classes.cachedb.js';
3
- export * from './classes.cached.document.js';
4
- export * from './classes.cache.cleaner.js';
5
- // Document classes
6
- export * from './documents/index.js';
7
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90cy9jYWNoZS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSw0QkFBNEI7QUFDNUIsY0FBYyxzQkFBc0IsQ0FBQztBQUNyQyxjQUFjLDhCQUE4QixDQUFDO0FBQzdDLGNBQWMsNEJBQTRCLENBQUM7QUFFM0MsbUJBQW1CO0FBQ25CLGNBQWMsc0JBQXNCLENBQUMifQ==
@@ -1,46 +0,0 @@
1
- import type { StorageManager } from '../storage/index.js';
2
- import type { IStoredApiToken, IApiTokenInfo, TApiTokenScope } from '../../dist_ts_interfaces/data/route-management.js';
3
- export declare class ApiTokenManager {
4
- private storageManager;
5
- private tokens;
6
- constructor(storageManager: StorageManager);
7
- initialize(): Promise<void>;
8
- /**
9
- * Create a new API token. Returns the raw token value (shown once).
10
- */
11
- createToken(name: string, scopes: TApiTokenScope[], expiresInDays: number | null, createdBy: string): Promise<{
12
- id: string;
13
- rawToken: string;
14
- }>;
15
- /**
16
- * Validate a raw token string. Returns the stored token if valid, null otherwise.
17
- * Also updates lastUsedAt.
18
- */
19
- validateToken(rawToken: string): Promise<IStoredApiToken | null>;
20
- /**
21
- * Check if a token has a specific scope.
22
- */
23
- hasScope(token: IStoredApiToken, scope: TApiTokenScope): boolean;
24
- /**
25
- * List all tokens (safe info only, no hashes).
26
- */
27
- listTokens(): IApiTokenInfo[];
28
- /**
29
- * Revoke (delete) a token.
30
- */
31
- revokeToken(id: string): Promise<boolean>;
32
- /**
33
- * Roll (regenerate) a token's secret while keeping its identity.
34
- * Returns the new raw token value (shown once).
35
- */
36
- rollToken(id: string): Promise<{
37
- id: string;
38
- rawToken: string;
39
- } | null>;
40
- /**
41
- * Enable or disable a token.
42
- */
43
- toggleToken(id: string, enabled: boolean): Promise<boolean>;
44
- private loadTokens;
45
- private persistToken;
46
- }
@@ -1,150 +0,0 @@
1
- import * as plugins from '../plugins.js';
2
- import { logger } from '../logger.js';
3
- const TOKENS_PREFIX = '/config-api/tokens/';
4
- const TOKEN_PREFIX_STR = 'dcr_';
5
- export class ApiTokenManager {
6
- storageManager;
7
- tokens = new Map();
8
- constructor(storageManager) {
9
- this.storageManager = storageManager;
10
- }
11
- async initialize() {
12
- await this.loadTokens();
13
- if (this.tokens.size > 0) {
14
- logger.log('info', `Loaded ${this.tokens.size} API token(s) from storage`);
15
- }
16
- }
17
- // =========================================================================
18
- // Token lifecycle
19
- // =========================================================================
20
- /**
21
- * Create a new API token. Returns the raw token value (shown once).
22
- */
23
- async createToken(name, scopes, expiresInDays, createdBy) {
24
- const id = plugins.uuid.v4();
25
- const randomBytes = plugins.crypto.randomBytes(32);
26
- const rawPayload = `${id}:${randomBytes.toString('base64url')}`;
27
- const rawToken = `${TOKEN_PREFIX_STR}${rawPayload}`;
28
- const tokenHash = plugins.crypto.createHash('sha256').update(rawToken).digest('hex');
29
- const now = Date.now();
30
- const stored = {
31
- id,
32
- name,
33
- tokenHash,
34
- scopes,
35
- createdAt: now,
36
- expiresAt: expiresInDays != null ? now + expiresInDays * 86400000 : null,
37
- lastUsedAt: null,
38
- createdBy,
39
- enabled: true,
40
- };
41
- this.tokens.set(id, stored);
42
- await this.persistToken(stored);
43
- logger.log('info', `API token '${name}' created (id: ${id})`);
44
- return { id, rawToken };
45
- }
46
- /**
47
- * Validate a raw token string. Returns the stored token if valid, null otherwise.
48
- * Also updates lastUsedAt.
49
- */
50
- async validateToken(rawToken) {
51
- if (!rawToken.startsWith(TOKEN_PREFIX_STR))
52
- return null;
53
- const hash = plugins.crypto.createHash('sha256').update(rawToken).digest('hex');
54
- for (const stored of this.tokens.values()) {
55
- if (stored.tokenHash === hash) {
56
- if (!stored.enabled)
57
- return null;
58
- if (stored.expiresAt !== null && stored.expiresAt < Date.now())
59
- return null;
60
- // Update lastUsedAt (fire and forget)
61
- stored.lastUsedAt = Date.now();
62
- this.persistToken(stored).catch(() => { });
63
- return stored;
64
- }
65
- }
66
- return null;
67
- }
68
- /**
69
- * Check if a token has a specific scope.
70
- */
71
- hasScope(token, scope) {
72
- return token.scopes.includes(scope);
73
- }
74
- /**
75
- * List all tokens (safe info only, no hashes).
76
- */
77
- listTokens() {
78
- const result = [];
79
- for (const stored of this.tokens.values()) {
80
- result.push({
81
- id: stored.id,
82
- name: stored.name,
83
- scopes: stored.scopes,
84
- createdAt: stored.createdAt,
85
- expiresAt: stored.expiresAt,
86
- lastUsedAt: stored.lastUsedAt,
87
- enabled: stored.enabled,
88
- });
89
- }
90
- return result;
91
- }
92
- /**
93
- * Revoke (delete) a token.
94
- */
95
- async revokeToken(id) {
96
- if (!this.tokens.has(id))
97
- return false;
98
- const token = this.tokens.get(id);
99
- this.tokens.delete(id);
100
- await this.storageManager.delete(`${TOKENS_PREFIX}${id}.json`);
101
- logger.log('info', `API token '${token.name}' revoked (id: ${id})`);
102
- return true;
103
- }
104
- /**
105
- * Roll (regenerate) a token's secret while keeping its identity.
106
- * Returns the new raw token value (shown once).
107
- */
108
- async rollToken(id) {
109
- const stored = this.tokens.get(id);
110
- if (!stored)
111
- return null;
112
- const randomBytes = plugins.crypto.randomBytes(32);
113
- const rawPayload = `${id}:${randomBytes.toString('base64url')}`;
114
- const rawToken = `${TOKEN_PREFIX_STR}${rawPayload}`;
115
- stored.tokenHash = plugins.crypto.createHash('sha256').update(rawToken).digest('hex');
116
- await this.persistToken(stored);
117
- logger.log('info', `API token '${stored.name}' rolled (id: ${id})`);
118
- return { id, rawToken };
119
- }
120
- /**
121
- * Enable or disable a token.
122
- */
123
- async toggleToken(id, enabled) {
124
- const stored = this.tokens.get(id);
125
- if (!stored)
126
- return false;
127
- stored.enabled = enabled;
128
- await this.persistToken(stored);
129
- logger.log('info', `API token '${stored.name}' ${enabled ? 'enabled' : 'disabled'} (id: ${id})`);
130
- return true;
131
- }
132
- // =========================================================================
133
- // Private
134
- // =========================================================================
135
- async loadTokens() {
136
- const keys = await this.storageManager.list(TOKENS_PREFIX);
137
- for (const key of keys) {
138
- if (!key.endsWith('.json'))
139
- continue;
140
- const stored = await this.storageManager.getJSON(key);
141
- if (stored?.id) {
142
- this.tokens.set(stored.id, stored);
143
- }
144
- }
145
- }
146
- async persistToken(stored) {
147
- await this.storageManager.setJSON(`${TOKENS_PREFIX}${stored.id}.json`, stored);
148
- }
149
- }
150
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5hcGktdG9rZW4tbWFuYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3RzL2NvbmZpZy9jbGFzc2VzLmFwaS10b2tlbi1tYW5hZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFRdEMsTUFBTSxhQUFhLEdBQUcscUJBQXFCLENBQUM7QUFDNUMsTUFBTSxnQkFBZ0IsR0FBRyxNQUFNLENBQUM7QUFFaEMsTUFBTSxPQUFPLGVBQWU7SUFHTjtJQUZaLE1BQU0sR0FBRyxJQUFJLEdBQUcsRUFBMkIsQ0FBQztJQUVwRCxZQUFvQixjQUE4QjtRQUE5QixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7SUFBRyxDQUFDO0lBRS9DLEtBQUssQ0FBQyxVQUFVO1FBQ3JCLE1BQU0sSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ3hCLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDekIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsVUFBVSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksNEJBQTRCLENBQUMsQ0FBQztRQUM3RSxDQUFDO0lBQ0gsQ0FBQztJQUVELDRFQUE0RTtJQUM1RSxrQkFBa0I7SUFDbEIsNEVBQTRFO0lBRTVFOztPQUVHO0lBQ0ksS0FBSyxDQUFDLFdBQVcsQ0FDdEIsSUFBWSxFQUNaLE1BQXdCLEVBQ3hCLGFBQTRCLEVBQzVCLFNBQWlCO1FBRWpCLE1BQU0sRUFBRSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDN0IsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDbkQsTUFBTSxVQUFVLEdBQUcsR0FBRyxFQUFFLElB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
@@ -1,35 +0,0 @@
1
- import * as plugins from '../plugins.js';
2
- import type { StorageManager } from '../storage/index.js';
3
- import type { IMergedRoute, IRouteWarning } from '../../dist_ts_interfaces/data/route-management.js';
4
- export declare class RouteConfigManager {
5
- private storageManager;
6
- private getHardcodedRoutes;
7
- private getSmartProxy;
8
- private storedRoutes;
9
- private overrides;
10
- private warnings;
11
- constructor(storageManager: StorageManager, getHardcodedRoutes: () => plugins.smartproxy.IRouteConfig[], getSmartProxy: () => plugins.smartproxy.SmartProxy | undefined);
12
- /**
13
- * Load persisted routes and overrides, compute warnings, apply to SmartProxy.
14
- */
15
- initialize(): Promise<void>;
16
- getMergedRoutes(): {
17
- routes: IMergedRoute[];
18
- warnings: IRouteWarning[];
19
- };
20
- createRoute(route: plugins.smartproxy.IRouteConfig, createdBy: string, enabled?: boolean): Promise<string>;
21
- updateRoute(id: string, patch: {
22
- route?: Partial<plugins.smartproxy.IRouteConfig>;
23
- enabled?: boolean;
24
- }): Promise<boolean>;
25
- deleteRoute(id: string): Promise<boolean>;
26
- toggleRoute(id: string, enabled: boolean): Promise<boolean>;
27
- setOverride(routeName: string, enabled: boolean, updatedBy: string): Promise<void>;
28
- removeOverride(routeName: string): Promise<boolean>;
29
- private loadStoredRoutes;
30
- private loadOverrides;
31
- private persistRoute;
32
- private computeWarnings;
33
- private logWarnings;
34
- private applyRoutes;
35
- }