@serve.zone/dcrouter 13.44.0 → 13.44.1
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/deno.json +1 -1
- package/dist_ts/00_commitinfo_data.js +1 -1
- package/dist_ts/db/documents/classes.cached.email.d.ts +2 -5
- package/dist_ts/db/documents/classes.cached.email.js +4 -23
- package/dist_ts/db/documents/classes.cached.ip.reputation.d.ts +2 -5
- package/dist_ts/db/documents/classes.cached.ip.reputation.js +4 -23
- package/dist_ts/db/index.d.ts +0 -1
- package/dist_ts/db/index.js +1 -3
- package/dist_ts_web/00_commitinfo_data.js +1 -1
- package/package.json +2 -2
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/db/documents/classes.cached.email.ts +3 -12
- package/ts/db/documents/classes.cached.ip.reputation.ts +3 -12
- package/ts/db/index.ts +0 -3
- package/ts_web/00_commitinfo_data.ts +1 -1
- package/dist_ts/db/classes.cached.document.d.ts +0 -76
- package/dist_ts/db/classes.cached.document.js +0 -100
- package/ts/db/classes.cached.document.ts +0 -111
package/deno.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
export const commitinfo = {
|
|
5
5
|
name: '@serve.zone/dcrouter',
|
|
6
|
-
version: '13.44.
|
|
6
|
+
version: '13.44.1',
|
|
7
7
|
description: 'A multifaceted routing service handling mail and SMS delivery functions.'
|
|
8
8
|
};
|
|
9
9
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vdHMvMDBfY29tbWl0aW5mb19kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHO0lBQ3hCLElBQUksRUFBRSxzQkFBc0I7SUFDNUIsT0FBTyxFQUFFLFNBQVM7SUFDbEIsV0FBVyxFQUFFLDBFQUEwRTtDQUN4RixDQUFBIn0=
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import * as plugins from '../../plugins.js';
|
|
2
2
|
/**
|
|
3
3
|
* Email status in the cache
|
|
4
4
|
*/
|
|
@@ -9,10 +9,7 @@ export type TCachedEmailStatus = 'pending' | 'processing' | 'delivered' | 'faile
|
|
|
9
9
|
* Used for persistent email queue storage, tracking delivery status,
|
|
10
10
|
* and maintaining email history for the configured TTL period.
|
|
11
11
|
*/
|
|
12
|
-
export declare class CachedEmail extends
|
|
13
|
-
createdAt: Date;
|
|
14
|
-
expiresAt: Date;
|
|
15
|
-
lastAccessedAt: Date;
|
|
12
|
+
export declare class CachedEmail extends plugins.smartdata.SmartdataCachedDocument<CachedEmail> {
|
|
16
13
|
/**
|
|
17
14
|
* Unique identifier for this email
|
|
18
15
|
*/
|
|
@@ -33,8 +33,8 @@ var __runInitializers = (this && this.__runInitializers) || function (thisArg, i
|
|
|
33
33
|
return useValue ? value : void 0;
|
|
34
34
|
};
|
|
35
35
|
import * as plugins from '../../plugins.js';
|
|
36
|
-
import { CachedDocument, TTL } from '../classes.cached.document.js';
|
|
37
36
|
import { DcRouterDb } from '../classes.dcrouter-db.js';
|
|
37
|
+
const TTL = plugins.smartdata.smartdataTtlValues;
|
|
38
38
|
/**
|
|
39
39
|
* Helper to get the smartdata database instance
|
|
40
40
|
*/
|
|
@@ -50,16 +50,7 @@ let CachedEmail = (() => {
|
|
|
50
50
|
let _classDescriptor;
|
|
51
51
|
let _classExtraInitializers = [];
|
|
52
52
|
let _classThis;
|
|
53
|
-
let _classSuper =
|
|
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 = [];
|
|
53
|
+
let _classSuper = plugins.smartdata.SmartdataCachedDocument;
|
|
63
54
|
let _id_decorators;
|
|
64
55
|
let _id_initializers = [];
|
|
65
56
|
let _id_extraInitializers = [];
|
|
@@ -118,9 +109,6 @@ let CachedEmail = (() => {
|
|
|
118
109
|
static { _classThis = this; }
|
|
119
110
|
static {
|
|
120
111
|
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
|
|
121
|
-
_createdAt_decorators = [plugins.smartdata.svDb()];
|
|
122
|
-
_expiresAt_decorators = [plugins.smartdata.svDb()];
|
|
123
|
-
_lastAccessedAt_decorators = [plugins.smartdata.svDb()];
|
|
124
112
|
_id_decorators = [plugins.smartdata.unI(), plugins.smartdata.svDb()];
|
|
125
113
|
_messageId_decorators = [plugins.smartdata.svDb()];
|
|
126
114
|
_from_decorators = [plugins.smartdata.svDb()];
|
|
@@ -139,9 +127,6 @@ let CachedEmail = (() => {
|
|
|
139
127
|
_priority_decorators = [plugins.smartdata.svDb()];
|
|
140
128
|
_routeData_decorators = [plugins.smartdata.svDb()];
|
|
141
129
|
_dkimSigned_decorators = [plugins.smartdata.svDb()];
|
|
142
|
-
__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);
|
|
143
|
-
__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);
|
|
144
|
-
__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);
|
|
145
130
|
__esDecorate(null, null, _id_decorators, { kind: "field", name: "id", static: false, private: false, access: { has: obj => "id" in obj, get: obj => obj.id, set: (obj, value) => { obj.id = value; } }, metadata: _metadata }, _id_initializers, _id_extraInitializers);
|
|
146
131
|
__esDecorate(null, null, _messageId_decorators, { kind: "field", name: "messageId", static: false, private: false, access: { has: obj => "messageId" in obj, get: obj => obj.messageId, set: (obj, value) => { obj.messageId = value; } }, metadata: _metadata }, _messageId_initializers, _messageId_extraInitializers);
|
|
147
132
|
__esDecorate(null, null, _from_decorators, { kind: "field", name: "from", static: false, private: false, access: { has: obj => "from" in obj, get: obj => obj.from, set: (obj, value) => { obj.from = value; } }, metadata: _metadata }, _from_initializers, _from_extraInitializers);
|
|
@@ -165,14 +150,10 @@ let CachedEmail = (() => {
|
|
|
165
150
|
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
166
151
|
__runInitializers(_classThis, _classExtraInitializers);
|
|
167
152
|
}
|
|
168
|
-
// TTL fields from base class (decorators required on concrete class)
|
|
169
|
-
createdAt = __runInitializers(this, _createdAt_initializers, new Date());
|
|
170
|
-
expiresAt = (__runInitializers(this, _createdAt_extraInitializers), __runInitializers(this, _expiresAt_initializers, new Date(Date.now() + TTL.DAYS_30)));
|
|
171
|
-
lastAccessedAt = (__runInitializers(this, _expiresAt_extraInitializers), __runInitializers(this, _lastAccessedAt_initializers, new Date()));
|
|
172
153
|
/**
|
|
173
154
|
* Unique identifier for this email
|
|
174
155
|
*/
|
|
175
|
-
id =
|
|
156
|
+
id = __runInitializers(this, _id_initializers, void 0);
|
|
176
157
|
/**
|
|
177
158
|
* Email message ID (RFC 822 Message-ID header)
|
|
178
159
|
*/
|
|
@@ -334,4 +315,4 @@ let CachedEmail = (() => {
|
|
|
334
315
|
return CachedEmail = _classThis;
|
|
335
316
|
})();
|
|
336
317
|
export { CachedEmail };
|
|
337
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
318
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5jYWNoZWQuZW1haWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90cy9kYi9kb2N1bWVudHMvY2xhc3Nlcy5jYWNoZWQuZW1haWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sa0JBQWtCLENBQUM7QUFDNUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRXZELE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsa0JBQWtCLENBQUM7QUFPakQ7O0dBRUc7QUFDSCxNQUFNLEtBQUssR0FBRyxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUM7QUFFckQ7Ozs7O0dBS0c7SUFFVSxXQUFXOzRCQUR2QixPQUFPLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQzs7OztzQkFDWCxPQUFPLENBQUMsU0FBUyxDQUFDLHVCQUF1Qjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsyQkFBakQsU0FBUSxXQUFzRDs7Ozs4QkFJcEYsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsRUFDdkIsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUU7cUNBTXhCLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFO2dDQU14QixPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRTs4QkFNeEIsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUU7OEJBTXhCLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFOytCQU14QixPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRTttQ0FNeEIsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVB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
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import * as plugins from '../../plugins.js';
|
|
2
2
|
/**
|
|
3
3
|
* IP reputation result data
|
|
4
4
|
*/
|
|
@@ -19,10 +19,7 @@ export interface IIPReputationData {
|
|
|
19
19
|
* Caches the results of IP reputation checks to avoid repeated
|
|
20
20
|
* external API calls. Default TTL is 24 hours.
|
|
21
21
|
*/
|
|
22
|
-
export declare class CachedIPReputation extends
|
|
23
|
-
createdAt: Date;
|
|
24
|
-
expiresAt: Date;
|
|
25
|
-
lastAccessedAt: Date;
|
|
22
|
+
export declare class CachedIPReputation extends plugins.smartdata.SmartdataCachedDocument<CachedIPReputation> {
|
|
26
23
|
/**
|
|
27
24
|
* IP address (unique identifier)
|
|
28
25
|
*/
|
|
@@ -33,8 +33,8 @@ var __runInitializers = (this && this.__runInitializers) || function (thisArg, i
|
|
|
33
33
|
return useValue ? value : void 0;
|
|
34
34
|
};
|
|
35
35
|
import * as plugins from '../../plugins.js';
|
|
36
|
-
import { CachedDocument, TTL } from '../classes.cached.document.js';
|
|
37
36
|
import { DcRouterDb } from '../classes.dcrouter-db.js';
|
|
37
|
+
const TTL = plugins.smartdata.smartdataTtlValues;
|
|
38
38
|
/**
|
|
39
39
|
* Helper to get the smartdata database instance
|
|
40
40
|
*/
|
|
@@ -50,16 +50,7 @@ let CachedIPReputation = (() => {
|
|
|
50
50
|
let _classDescriptor;
|
|
51
51
|
let _classExtraInitializers = [];
|
|
52
52
|
let _classThis;
|
|
53
|
-
let _classSuper =
|
|
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 = [];
|
|
53
|
+
let _classSuper = plugins.smartdata.SmartdataCachedDocument;
|
|
63
54
|
let _ipAddress_decorators;
|
|
64
55
|
let _ipAddress_initializers = [];
|
|
65
56
|
let _ipAddress_extraInitializers = [];
|
|
@@ -106,9 +97,6 @@ let CachedIPReputation = (() => {
|
|
|
106
97
|
static { _classThis = this; }
|
|
107
98
|
static {
|
|
108
99
|
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
100
|
_ipAddress_decorators = [plugins.smartdata.unI(), plugins.smartdata.svDb()];
|
|
113
101
|
_score_decorators = [plugins.smartdata.svDb()];
|
|
114
102
|
_isSpam_decorators = [plugins.smartdata.svDb()];
|
|
@@ -123,9 +111,6 @@ let CachedIPReputation = (() => {
|
|
|
123
111
|
_connectionCount_decorators = [plugins.smartdata.svDb()];
|
|
124
112
|
_emailCount_decorators = [plugins.smartdata.svDb()];
|
|
125
113
|
_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
114
|
__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
115
|
__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
116
|
__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);
|
|
@@ -145,14 +130,10 @@ let CachedIPReputation = (() => {
|
|
|
145
130
|
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
146
131
|
__runInitializers(_classThis, _classExtraInitializers);
|
|
147
132
|
}
|
|
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
133
|
/**
|
|
153
134
|
* IP address (unique identifier)
|
|
154
135
|
*/
|
|
155
|
-
ipAddress =
|
|
136
|
+
ipAddress = __runInitializers(this, _ipAddress_initializers, void 0);
|
|
156
137
|
/**
|
|
157
138
|
* Reputation score (0-100, higher = better)
|
|
158
139
|
*/
|
|
@@ -320,4 +301,4 @@ let CachedIPReputation = (() => {
|
|
|
320
301
|
return CachedIPReputation = _classThis;
|
|
321
302
|
})();
|
|
322
303
|
export { CachedIPReputation };
|
|
323
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
304
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5jYWNoZWQuaXAucmVwdXRhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3RzL2RiL2RvY3VtZW50cy9jbGFzc2VzLmNhY2hlZC5pcC5yZXB1dGF0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGtCQUFrQixDQUFDO0FBQzVDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUV2RCxNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLGtCQUFrQixDQUFDO0FBRWpEOztHQUVHO0FBQ0gsTUFBTSxLQUFLLEdBQUcsR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDLFdBQVcsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBaUJyRDs7Ozs7R0FLRztJQUVVLGtCQUFrQjs0QkFEOUIsT0FBTyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUM7Ozs7c0JBQ0osT0FBTyxDQUFDLFNBQVMsQ0FBQyx1QkFBdUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7a0NBQWpELFNBQVEsV0FBNkQ7Ozs7cUNBSWxHLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLEVBQ3ZCLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFO2lDQU14QixPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRTtrQ0FNeEIsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUU7bUNBTXhCLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFO2lDQU14QixPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRTtpQ0FNeEIsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUU7bUNBTXhCLE9BQU8sQ0FBQyxTQUFTLENBQUMs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
|
package/dist_ts/db/index.d.ts
CHANGED
package/dist_ts/db/index.js
CHANGED
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
// Unified database manager
|
|
2
2
|
export * from './classes.dcrouter-db.js';
|
|
3
|
-
// TTL base class and constants
|
|
4
|
-
export * from './classes.cached.document.js';
|
|
5
3
|
// Cache cleaner
|
|
6
4
|
export * from './classes.cache.cleaner.js';
|
|
7
5
|
// Document classes
|
|
8
6
|
export * from './documents/index.js';
|
|
9
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
7
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90cy9kYi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwyQkFBMkI7QUFDM0IsY0FBYywwQkFBMEIsQ0FBQztBQUV6QyxnQkFBZ0I7QUFDaEIsY0FBYyw0QkFBNEIsQ0FBQztBQUUzQyxtQkFBbUI7QUFDbkIsY0FBYyxzQkFBc0IsQ0FBQyJ9
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
export const commitinfo = {
|
|
5
5
|
name: '@serve.zone/dcrouter',
|
|
6
|
-
version: '13.44.
|
|
6
|
+
version: '13.44.1',
|
|
7
7
|
description: 'A multifaceted routing service handling mail and SMS delivery functions.'
|
|
8
8
|
};
|
|
9
9
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vdHNfd2ViLzAwX2NvbW1pdGluZm9fZGF0YS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRztJQUN4QixJQUFJLEVBQUUsc0JBQXNCO0lBQzVCLE9BQU8sRUFBRSxTQUFTO0lBQ2xCLFdBQVcsRUFBRSwwRUFBMEU7Q0FDeEYsQ0FBQSJ9
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@serve.zone/dcrouter",
|
|
3
3
|
"private": false,
|
|
4
|
-
"version": "13.44.
|
|
4
|
+
"version": "13.44.1",
|
|
5
5
|
"description": "A multifaceted routing service handling mail and SMS delivery functions.",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"bin": {
|
|
@@ -37,7 +37,7 @@
|
|
|
37
37
|
"@push.rocks/projectinfo": "^5.1.0",
|
|
38
38
|
"@push.rocks/qenv": "^6.1.4",
|
|
39
39
|
"@push.rocks/smartacme": "^9.5.0",
|
|
40
|
-
"@push.rocks/smartdata": "^7.
|
|
40
|
+
"@push.rocks/smartdata": "^7.2.0",
|
|
41
41
|
"@push.rocks/smartdb": "^2.10.2",
|
|
42
42
|
"@push.rocks/smartdns": "^7.9.3",
|
|
43
43
|
"@push.rocks/smartfs": "^1.5.1",
|
package/ts/00_commitinfo_data.ts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import * as plugins from '../../plugins.js';
|
|
2
|
-
import { CachedDocument, TTL } from '../classes.cached.document.js';
|
|
3
2
|
import { DcRouterDb } from '../classes.dcrouter-db.js';
|
|
4
3
|
|
|
4
|
+
const TTL = plugins.smartdata.smartdataTtlValues;
|
|
5
|
+
|
|
5
6
|
/**
|
|
6
7
|
* Email status in the cache
|
|
7
8
|
*/
|
|
@@ -19,17 +20,7 @@ const getDb = () => DcRouterDb.getInstance().getDb();
|
|
|
19
20
|
* and maintaining email history for the configured TTL period.
|
|
20
21
|
*/
|
|
21
22
|
@plugins.smartdata.Collection(() => getDb())
|
|
22
|
-
export class CachedEmail extends
|
|
23
|
-
// TTL fields from base class (decorators required on concrete class)
|
|
24
|
-
@plugins.smartdata.svDb()
|
|
25
|
-
public createdAt: Date = new Date();
|
|
26
|
-
|
|
27
|
-
@plugins.smartdata.svDb()
|
|
28
|
-
public expiresAt: Date = new Date(Date.now() + TTL.DAYS_30);
|
|
29
|
-
|
|
30
|
-
@plugins.smartdata.svDb()
|
|
31
|
-
public lastAccessedAt: Date = new Date();
|
|
32
|
-
|
|
23
|
+
export class CachedEmail extends plugins.smartdata.SmartdataCachedDocument<CachedEmail> {
|
|
33
24
|
/**
|
|
34
25
|
* Unique identifier for this email
|
|
35
26
|
*/
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import * as plugins from '../../plugins.js';
|
|
2
|
-
import { CachedDocument, TTL } from '../classes.cached.document.js';
|
|
3
2
|
import { DcRouterDb } from '../classes.dcrouter-db.js';
|
|
4
3
|
|
|
4
|
+
const TTL = plugins.smartdata.smartdataTtlValues;
|
|
5
|
+
|
|
5
6
|
/**
|
|
6
7
|
* Helper to get the smartdata database instance
|
|
7
8
|
*/
|
|
@@ -29,17 +30,7 @@ export interface IIPReputationData {
|
|
|
29
30
|
* external API calls. Default TTL is 24 hours.
|
|
30
31
|
*/
|
|
31
32
|
@plugins.smartdata.Collection(() => getDb())
|
|
32
|
-
export class CachedIPReputation extends
|
|
33
|
-
// TTL fields from base class (decorators required on concrete class)
|
|
34
|
-
@plugins.smartdata.svDb()
|
|
35
|
-
public createdAt: Date = new Date();
|
|
36
|
-
|
|
37
|
-
@plugins.smartdata.svDb()
|
|
38
|
-
public expiresAt: Date = new Date(Date.now() + TTL.HOURS_24);
|
|
39
|
-
|
|
40
|
-
@plugins.smartdata.svDb()
|
|
41
|
-
public lastAccessedAt: Date = new Date();
|
|
42
|
-
|
|
33
|
+
export class CachedIPReputation extends plugins.smartdata.SmartdataCachedDocument<CachedIPReputation> {
|
|
43
34
|
/**
|
|
44
35
|
* IP address (unique identifier)
|
|
45
36
|
*/
|
package/ts/db/index.ts
CHANGED
|
@@ -1,76 +0,0 @@
|
|
|
1
|
-
import * as plugins from '../plugins.js';
|
|
2
|
-
/**
|
|
3
|
-
* Base class for all cached documents with TTL support
|
|
4
|
-
*
|
|
5
|
-
* Extends smartdata's SmartDataDbDoc to add:
|
|
6
|
-
* - Automatic timestamps (createdAt, lastAccessedAt)
|
|
7
|
-
* - TTL/expiration support (expiresAt)
|
|
8
|
-
* - Helper methods for TTL management
|
|
9
|
-
*
|
|
10
|
-
* NOTE: Subclasses MUST add @svDb() decorators to createdAt, expiresAt, and lastAccessedAt
|
|
11
|
-
* since decorators on abstract classes don't propagate correctly.
|
|
12
|
-
*/
|
|
13
|
-
export declare abstract class CachedDocument<T extends CachedDocument<T>> extends plugins.smartdata.SmartDataDbDoc<T, T> {
|
|
14
|
-
/**
|
|
15
|
-
* Timestamp when the document was created
|
|
16
|
-
* NOTE: Subclasses must add @svDb() decorator
|
|
17
|
-
*/
|
|
18
|
-
createdAt: Date;
|
|
19
|
-
/**
|
|
20
|
-
* Timestamp when the document expires and should be cleaned up
|
|
21
|
-
* NOTE: Subclasses must add @svDb() decorator
|
|
22
|
-
*/
|
|
23
|
-
expiresAt: Date;
|
|
24
|
-
/**
|
|
25
|
-
* Timestamp of last access (for LRU-style eviction if needed)
|
|
26
|
-
* NOTE: Subclasses must add @svDb() decorator
|
|
27
|
-
*/
|
|
28
|
-
lastAccessedAt: Date;
|
|
29
|
-
/**
|
|
30
|
-
* Set the TTL (time to live) for this document
|
|
31
|
-
* @param ttlMs Time to live in milliseconds
|
|
32
|
-
*/
|
|
33
|
-
setTTL(ttlMs: number): void;
|
|
34
|
-
/**
|
|
35
|
-
* Set TTL using days
|
|
36
|
-
* @param days Number of days until expiration
|
|
37
|
-
*/
|
|
38
|
-
setTTLDays(days: number): void;
|
|
39
|
-
/**
|
|
40
|
-
* Set TTL using hours
|
|
41
|
-
* @param hours Number of hours until expiration
|
|
42
|
-
*/
|
|
43
|
-
setTTLHours(hours: number): void;
|
|
44
|
-
/**
|
|
45
|
-
* Check if this document has expired
|
|
46
|
-
*/
|
|
47
|
-
isExpired(): boolean;
|
|
48
|
-
/**
|
|
49
|
-
* Update the lastAccessedAt timestamp
|
|
50
|
-
*/
|
|
51
|
-
touch(): void;
|
|
52
|
-
/**
|
|
53
|
-
* Get remaining TTL in milliseconds
|
|
54
|
-
* Returns 0 if expired, -1 if no expiration set
|
|
55
|
-
*/
|
|
56
|
-
getRemainingTTL(): number;
|
|
57
|
-
/**
|
|
58
|
-
* Extend the TTL by the specified milliseconds from now
|
|
59
|
-
* @param ttlMs Additional time to live in milliseconds
|
|
60
|
-
*/
|
|
61
|
-
extendTTL(ttlMs: number): void;
|
|
62
|
-
/**
|
|
63
|
-
* Set the document to never expire (100 years in the future)
|
|
64
|
-
*/
|
|
65
|
-
setNeverExpires(): void;
|
|
66
|
-
}
|
|
67
|
-
/**
|
|
68
|
-
* TTL constants in milliseconds
|
|
69
|
-
*/
|
|
70
|
-
export declare const TTL: {
|
|
71
|
-
readonly HOURS_1: number;
|
|
72
|
-
readonly HOURS_24: number;
|
|
73
|
-
readonly DAYS_7: number;
|
|
74
|
-
readonly DAYS_30: number;
|
|
75
|
-
readonly DAYS_90: number;
|
|
76
|
-
};
|
|
@@ -1,100 +0,0 @@
|
|
|
1
|
-
import * as plugins from '../plugins.js';
|
|
2
|
-
/**
|
|
3
|
-
* Base class for all cached documents with TTL support
|
|
4
|
-
*
|
|
5
|
-
* Extends smartdata's SmartDataDbDoc to add:
|
|
6
|
-
* - Automatic timestamps (createdAt, lastAccessedAt)
|
|
7
|
-
* - TTL/expiration support (expiresAt)
|
|
8
|
-
* - Helper methods for TTL management
|
|
9
|
-
*
|
|
10
|
-
* NOTE: Subclasses MUST add @svDb() decorators to createdAt, expiresAt, and lastAccessedAt
|
|
11
|
-
* since decorators on abstract classes don't propagate correctly.
|
|
12
|
-
*/
|
|
13
|
-
export class CachedDocument extends plugins.smartdata.SmartDataDbDoc {
|
|
14
|
-
/**
|
|
15
|
-
* Timestamp when the document was created
|
|
16
|
-
* NOTE: Subclasses must add @svDb() decorator
|
|
17
|
-
*/
|
|
18
|
-
createdAt = new Date();
|
|
19
|
-
/**
|
|
20
|
-
* Timestamp when the document expires and should be cleaned up
|
|
21
|
-
* NOTE: Subclasses must add @svDb() decorator
|
|
22
|
-
*/
|
|
23
|
-
expiresAt;
|
|
24
|
-
/**
|
|
25
|
-
* Timestamp of last access (for LRU-style eviction if needed)
|
|
26
|
-
* NOTE: Subclasses must add @svDb() decorator
|
|
27
|
-
*/
|
|
28
|
-
lastAccessedAt = new Date();
|
|
29
|
-
/**
|
|
30
|
-
* Set the TTL (time to live) for this document
|
|
31
|
-
* @param ttlMs Time to live in milliseconds
|
|
32
|
-
*/
|
|
33
|
-
setTTL(ttlMs) {
|
|
34
|
-
this.expiresAt = new Date(Date.now() + ttlMs);
|
|
35
|
-
}
|
|
36
|
-
/**
|
|
37
|
-
* Set TTL using days
|
|
38
|
-
* @param days Number of days until expiration
|
|
39
|
-
*/
|
|
40
|
-
setTTLDays(days) {
|
|
41
|
-
this.setTTL(days * 24 * 60 * 60 * 1000);
|
|
42
|
-
}
|
|
43
|
-
/**
|
|
44
|
-
* Set TTL using hours
|
|
45
|
-
* @param hours Number of hours until expiration
|
|
46
|
-
*/
|
|
47
|
-
setTTLHours(hours) {
|
|
48
|
-
this.setTTL(hours * 60 * 60 * 1000);
|
|
49
|
-
}
|
|
50
|
-
/**
|
|
51
|
-
* Check if this document has expired
|
|
52
|
-
*/
|
|
53
|
-
isExpired() {
|
|
54
|
-
if (!this.expiresAt) {
|
|
55
|
-
return false; // No expiration set
|
|
56
|
-
}
|
|
57
|
-
return new Date() > this.expiresAt;
|
|
58
|
-
}
|
|
59
|
-
/**
|
|
60
|
-
* Update the lastAccessedAt timestamp
|
|
61
|
-
*/
|
|
62
|
-
touch() {
|
|
63
|
-
this.lastAccessedAt = new Date();
|
|
64
|
-
}
|
|
65
|
-
/**
|
|
66
|
-
* Get remaining TTL in milliseconds
|
|
67
|
-
* Returns 0 if expired, -1 if no expiration set
|
|
68
|
-
*/
|
|
69
|
-
getRemainingTTL() {
|
|
70
|
-
if (!this.expiresAt) {
|
|
71
|
-
return -1;
|
|
72
|
-
}
|
|
73
|
-
const remaining = this.expiresAt.getTime() - Date.now();
|
|
74
|
-
return remaining > 0 ? remaining : 0;
|
|
75
|
-
}
|
|
76
|
-
/**
|
|
77
|
-
* Extend the TTL by the specified milliseconds from now
|
|
78
|
-
* @param ttlMs Additional time to live in milliseconds
|
|
79
|
-
*/
|
|
80
|
-
extendTTL(ttlMs) {
|
|
81
|
-
this.expiresAt = new Date(Date.now() + ttlMs);
|
|
82
|
-
}
|
|
83
|
-
/**
|
|
84
|
-
* Set the document to never expire (100 years in the future)
|
|
85
|
-
*/
|
|
86
|
-
setNeverExpires() {
|
|
87
|
-
this.expiresAt = new Date(Date.now() + 100 * 365 * 24 * 60 * 60 * 1000);
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
/**
|
|
91
|
-
* TTL constants in milliseconds
|
|
92
|
-
*/
|
|
93
|
-
export const TTL = {
|
|
94
|
-
HOURS_1: 1 * 60 * 60 * 1000,
|
|
95
|
-
HOURS_24: 24 * 60 * 60 * 1000,
|
|
96
|
-
DAYS_7: 7 * 24 * 60 * 60 * 1000,
|
|
97
|
-
DAYS_30: 30 * 24 * 60 * 60 * 1000,
|
|
98
|
-
DAYS_90: 90 * 24 * 60 * 60 * 1000,
|
|
99
|
-
};
|
|
100
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5jYWNoZWQuZG9jdW1lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90cy9kYi9jbGFzc2VzLmNhY2hlZC5kb2N1bWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGVBQWUsQ0FBQztBQUV6Qzs7Ozs7Ozs7OztHQVVHO0FBQ0gsTUFBTSxPQUFnQixjQUE0QyxTQUFRLE9BQU8sQ0FBQyxTQUFTLENBQUMsY0FBb0I7SUFDOUc7OztPQUdHO0lBQ0ksU0FBUyxHQUFTLElBQUksSUFBSSxFQUFFLENBQUM7SUFFcEM7OztPQUdHO0lBQ0ksU0FBUyxDQUFRO0lBRXhCOzs7T0FHRztJQUNJLGNBQWMsR0FBUyxJQUFJLElBQUksRUFBRSxDQUFDO0lBRXpDOzs7T0FHRztJQUNJLE1BQU0sQ0FBQyxLQUFhO1FBQ3pCLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLEtBQUssQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFRDs7O09BR0c7SUFDSSxVQUFVLENBQUMsSUFBWTtRQUM1QixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksV0FBVyxDQUFDLEtBQWE7UUFDOUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQ7O09BRUc7SUFDSSxTQUFTO1FBQ2QsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNwQixPQUFPLEtBQUssQ0FBQyxDQUFDLG9CQUFvQjtRQUNwQyxDQUFDO1FBQ0QsT0FBTyxJQUFJLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDckMsQ0FBQztJQUVEOztPQUVHO0lBQ0ksS0FBSztRQUNWLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztJQUNuQyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksZUFBZTtRQUNwQixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ3BCLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFDWixDQUFDO1FBQ0QsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDeEQsT0FBTyxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksU0FBUyxDQUFDLEtBQWE7UUFDNUIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsS0FBSyxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVEOztPQUVHO0lBQ0ksZUFBZTtRQUNwQixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO0lBQzFFLENBQUM7Q0FDRjtBQUVEOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sR0FBRyxHQUFHO0lBQ2pCLE9BQU8sRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJO0lBQzNCLFFBQVEsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJO0lBQzdCLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSTtJQUMvQixPQUFPLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUk7SUFDakMsT0FBTyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJO0NBQ3pCLENBQUMifQ==
|
|
@@ -1,111 +0,0 @@
|
|
|
1
|
-
import * as plugins from '../plugins.js';
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Base class for all cached documents with TTL support
|
|
5
|
-
*
|
|
6
|
-
* Extends smartdata's SmartDataDbDoc to add:
|
|
7
|
-
* - Automatic timestamps (createdAt, lastAccessedAt)
|
|
8
|
-
* - TTL/expiration support (expiresAt)
|
|
9
|
-
* - Helper methods for TTL management
|
|
10
|
-
*
|
|
11
|
-
* NOTE: Subclasses MUST add @svDb() decorators to createdAt, expiresAt, and lastAccessedAt
|
|
12
|
-
* since decorators on abstract classes don't propagate correctly.
|
|
13
|
-
*/
|
|
14
|
-
export abstract class CachedDocument<T extends CachedDocument<T>> extends plugins.smartdata.SmartDataDbDoc<T, T> {
|
|
15
|
-
/**
|
|
16
|
-
* Timestamp when the document was created
|
|
17
|
-
* NOTE: Subclasses must add @svDb() decorator
|
|
18
|
-
*/
|
|
19
|
-
public createdAt: Date = new Date();
|
|
20
|
-
|
|
21
|
-
/**
|
|
22
|
-
* Timestamp when the document expires and should be cleaned up
|
|
23
|
-
* NOTE: Subclasses must add @svDb() decorator
|
|
24
|
-
*/
|
|
25
|
-
public expiresAt!: Date;
|
|
26
|
-
|
|
27
|
-
/**
|
|
28
|
-
* Timestamp of last access (for LRU-style eviction if needed)
|
|
29
|
-
* NOTE: Subclasses must add @svDb() decorator
|
|
30
|
-
*/
|
|
31
|
-
public lastAccessedAt: Date = new Date();
|
|
32
|
-
|
|
33
|
-
/**
|
|
34
|
-
* Set the TTL (time to live) for this document
|
|
35
|
-
* @param ttlMs Time to live in milliseconds
|
|
36
|
-
*/
|
|
37
|
-
public setTTL(ttlMs: number): void {
|
|
38
|
-
this.expiresAt = new Date(Date.now() + ttlMs);
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
/**
|
|
42
|
-
* Set TTL using days
|
|
43
|
-
* @param days Number of days until expiration
|
|
44
|
-
*/
|
|
45
|
-
public setTTLDays(days: number): void {
|
|
46
|
-
this.setTTL(days * 24 * 60 * 60 * 1000);
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
/**
|
|
50
|
-
* Set TTL using hours
|
|
51
|
-
* @param hours Number of hours until expiration
|
|
52
|
-
*/
|
|
53
|
-
public setTTLHours(hours: number): void {
|
|
54
|
-
this.setTTL(hours * 60 * 60 * 1000);
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
/**
|
|
58
|
-
* Check if this document has expired
|
|
59
|
-
*/
|
|
60
|
-
public isExpired(): boolean {
|
|
61
|
-
if (!this.expiresAt) {
|
|
62
|
-
return false; // No expiration set
|
|
63
|
-
}
|
|
64
|
-
return new Date() > this.expiresAt;
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
/**
|
|
68
|
-
* Update the lastAccessedAt timestamp
|
|
69
|
-
*/
|
|
70
|
-
public touch(): void {
|
|
71
|
-
this.lastAccessedAt = new Date();
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
/**
|
|
75
|
-
* Get remaining TTL in milliseconds
|
|
76
|
-
* Returns 0 if expired, -1 if no expiration set
|
|
77
|
-
*/
|
|
78
|
-
public getRemainingTTL(): number {
|
|
79
|
-
if (!this.expiresAt) {
|
|
80
|
-
return -1;
|
|
81
|
-
}
|
|
82
|
-
const remaining = this.expiresAt.getTime() - Date.now();
|
|
83
|
-
return remaining > 0 ? remaining : 0;
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
/**
|
|
87
|
-
* Extend the TTL by the specified milliseconds from now
|
|
88
|
-
* @param ttlMs Additional time to live in milliseconds
|
|
89
|
-
*/
|
|
90
|
-
public extendTTL(ttlMs: number): void {
|
|
91
|
-
this.expiresAt = new Date(Date.now() + ttlMs);
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
/**
|
|
95
|
-
* Set the document to never expire (100 years in the future)
|
|
96
|
-
*/
|
|
97
|
-
public setNeverExpires(): void {
|
|
98
|
-
this.expiresAt = new Date(Date.now() + 100 * 365 * 24 * 60 * 60 * 1000);
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
/**
|
|
103
|
-
* TTL constants in milliseconds
|
|
104
|
-
*/
|
|
105
|
-
export const TTL = {
|
|
106
|
-
HOURS_1: 1 * 60 * 60 * 1000,
|
|
107
|
-
HOURS_24: 24 * 60 * 60 * 1000,
|
|
108
|
-
DAYS_7: 7 * 24 * 60 * 60 * 1000,
|
|
109
|
-
DAYS_30: 30 * 24 * 60 * 60 * 1000,
|
|
110
|
-
DAYS_90: 90 * 24 * 60 * 60 * 1000,
|
|
111
|
-
} as const;
|