@shohaghinfo/aerojs 0.1.2 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +181 -7
- package/dist/cli/runner.d.ts.map +1 -1
- package/dist/cli/runner.js +16 -2
- package/dist/cli/runner.js.map +1 -1
- package/dist/http/http.d.ts +44 -0
- package/dist/http/http.d.ts.map +1 -0
- package/dist/http/http.js +132 -0
- package/dist/http/http.js.map +1 -0
- package/dist/http/index.d.ts +8 -0
- package/dist/http/index.d.ts.map +1 -0
- package/dist/http/index.js +8 -0
- package/dist/http/index.js.map +1 -0
- package/dist/http/request-builder.d.ts +48 -0
- package/dist/http/request-builder.d.ts.map +1 -0
- package/dist/http/request-builder.js +186 -0
- package/dist/http/request-builder.js.map +1 -0
- package/dist/http/response.d.ts +34 -0
- package/dist/http/response.d.ts.map +1 -0
- package/dist/http/response.js +77 -0
- package/dist/http/response.js.map +1 -0
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -2
- package/dist/index.js.map +1 -1
- package/dist/mail/drivers/smtp-mail-driver.d.ts +39 -0
- package/dist/mail/drivers/smtp-mail-driver.d.ts.map +1 -0
- package/dist/mail/drivers/smtp-mail-driver.js +318 -0
- package/dist/mail/drivers/smtp-mail-driver.js.map +1 -0
- package/dist/mail/index.d.ts +1 -0
- package/dist/mail/index.d.ts.map +1 -1
- package/dist/mail/index.js +1 -0
- package/dist/mail/index.js.map +1 -1
- package/dist/mail/mailer.d.ts +20 -3
- package/dist/mail/mailer.d.ts.map +1 -1
- package/dist/mail/mailer.js +28 -1
- package/dist/mail/mailer.js.map +1 -1
- package/dist/queue/drivers/redis-queue-driver.d.ts +20 -0
- package/dist/queue/drivers/redis-queue-driver.d.ts.map +1 -1
- package/dist/queue/drivers/redis-queue-driver.js +92 -33
- package/dist/queue/drivers/redis-queue-driver.js.map +1 -1
- package/dist/queue/queue-manager.d.ts +4 -1
- package/dist/queue/queue-manager.d.ts.map +1 -1
- package/dist/queue/queue-manager.js +8 -1
- package/dist/queue/queue-manager.js.map +1 -1
- package/dist/security/index.d.ts +1 -1
- package/dist/security/index.d.ts.map +1 -1
- package/dist/security/index.js +1 -1
- package/dist/security/index.js.map +1 -1
- package/dist/security/rate-limiter.d.ts +20 -0
- package/dist/security/rate-limiter.d.ts.map +1 -1
- package/dist/security/rate-limiter.js +85 -0
- package/dist/security/rate-limiter.js.map +1 -1
- package/package.json +6 -2
|
@@ -1,3 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file redis-queue-driver.ts
|
|
3
|
+
* @description Production-grade Redis Queue Driver for AeroJS.
|
|
4
|
+
* Supports FIFO queueing (LPUSH/RPOP), delayed dispatch (ZADD/ZRANGEBYSCORE),
|
|
5
|
+
* job reservation tracking (HSET), release with backoff retry, and DLQ (Dead Letter Queue).
|
|
6
|
+
*/
|
|
1
7
|
import { RedisClient } from '../../redis/redis-client.js';
|
|
2
8
|
import * as crypto from 'node:crypto';
|
|
3
9
|
export class RedisQueueDriver {
|
|
@@ -11,6 +17,12 @@ export class RedisQueueDriver {
|
|
|
11
17
|
delayedKey(queue) {
|
|
12
18
|
return `queue:${queue}:delayed`;
|
|
13
19
|
}
|
|
20
|
+
reservedKey(queue) {
|
|
21
|
+
return `queue:${queue}:reserved`;
|
|
22
|
+
}
|
|
23
|
+
failedKey(queue) {
|
|
24
|
+
return `queue:${queue}:failed`;
|
|
25
|
+
}
|
|
14
26
|
async push(payload, options) {
|
|
15
27
|
const queue = options?.queue || 'default';
|
|
16
28
|
const delay = options?.delay || 0;
|
|
@@ -22,14 +34,16 @@ export class RedisQueueDriver {
|
|
|
22
34
|
attempts: 0,
|
|
23
35
|
reservedAt: null,
|
|
24
36
|
availableAt: new Date(Date.now() + delay * 1000),
|
|
25
|
-
createdAt: new Date()
|
|
37
|
+
createdAt: new Date(),
|
|
26
38
|
};
|
|
27
39
|
const serialized = JSON.stringify(jobRecord);
|
|
28
40
|
if (delay > 0) {
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
41
|
+
await this.client.getRawConnection().sendCommand([
|
|
42
|
+
'ZADD',
|
|
43
|
+
this.delayedKey(queue),
|
|
44
|
+
jobRecord.availableAt.getTime(),
|
|
45
|
+
serialized,
|
|
46
|
+
]);
|
|
33
47
|
}
|
|
34
48
|
else {
|
|
35
49
|
await this.client.lpush(this.queueKey(queue), serialized);
|
|
@@ -37,56 +51,101 @@ export class RedisQueueDriver {
|
|
|
37
51
|
return id;
|
|
38
52
|
}
|
|
39
53
|
async pop(queue = 'default') {
|
|
40
|
-
//
|
|
54
|
+
// 1. Migrate delayed jobs that are ready to run
|
|
41
55
|
await this.migrateDelayedJobs(queue);
|
|
56
|
+
// 2. Pop next available job
|
|
42
57
|
const data = await this.client.rpop(this.queueKey(queue));
|
|
43
58
|
if (!data)
|
|
44
59
|
return null;
|
|
45
60
|
const job = JSON.parse(data);
|
|
46
61
|
job.attempts += 1;
|
|
47
62
|
job.reservedAt = new Date();
|
|
63
|
+
// 3. Track in reserved hash while worker is processing
|
|
64
|
+
await this.client.hset(this.reservedKey(queue), String(job.id), JSON.stringify(job));
|
|
48
65
|
return job;
|
|
49
66
|
}
|
|
50
67
|
async delete(id, queue = 'default') {
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
return true;
|
|
68
|
+
const deleted = await this.client.hdel(this.reservedKey(queue), String(id));
|
|
69
|
+
return deleted > 0;
|
|
54
70
|
}
|
|
55
71
|
async release(id, delaySeconds = 0, queue = 'default') {
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
//
|
|
60
|
-
|
|
61
|
-
|
|
72
|
+
const raw = await this.client.hget(this.reservedKey(queue), String(id));
|
|
73
|
+
if (!raw)
|
|
74
|
+
return false;
|
|
75
|
+
// Remove from reserved
|
|
76
|
+
await this.client.hdel(this.reservedKey(queue), String(id));
|
|
77
|
+
const job = JSON.parse(raw);
|
|
78
|
+
job.reservedAt = null;
|
|
79
|
+
job.availableAt = new Date(Date.now() + delaySeconds * 1000);
|
|
80
|
+
const serialized = JSON.stringify(job);
|
|
81
|
+
if (delaySeconds > 0) {
|
|
82
|
+
await this.client.getRawConnection().sendCommand([
|
|
83
|
+
'ZADD',
|
|
84
|
+
this.delayedKey(queue),
|
|
85
|
+
job.availableAt.getTime(),
|
|
86
|
+
serialized,
|
|
87
|
+
]);
|
|
88
|
+
}
|
|
89
|
+
else {
|
|
90
|
+
await this.client.lpush(this.queueKey(queue), serialized);
|
|
91
|
+
}
|
|
92
|
+
return true;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Moves a permanently failed job to Dead Letter Queue (DLQ).
|
|
96
|
+
*/
|
|
97
|
+
async fail(id, error, queue = 'default') {
|
|
98
|
+
const raw = await this.client.hget(this.reservedKey(queue), String(id));
|
|
99
|
+
if (!raw)
|
|
100
|
+
return false;
|
|
101
|
+
await this.client.hdel(this.reservedKey(queue), String(id));
|
|
102
|
+
const job = JSON.parse(raw);
|
|
103
|
+
const failedRecord = {
|
|
104
|
+
...job,
|
|
105
|
+
failedAt: new Date(),
|
|
106
|
+
error: error instanceof Error ? error.stack || error.message : String(error || 'Unknown error'),
|
|
107
|
+
};
|
|
108
|
+
await this.client.hset(this.failedKey(queue), String(id), JSON.stringify(failedRecord));
|
|
109
|
+
return true;
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Retrieves all failed jobs from the Dead Letter Queue.
|
|
113
|
+
*/
|
|
114
|
+
async getFailed(queue = 'default') {
|
|
115
|
+
const records = await this.client.hgetall(this.failedKey(queue));
|
|
116
|
+
return Object.values(records).map((r) => JSON.parse(r));
|
|
62
117
|
}
|
|
63
118
|
async size(queue = 'default') {
|
|
64
|
-
return this.client.llen(this.queueKey(queue));
|
|
119
|
+
return await this.client.llen(this.queueKey(queue));
|
|
65
120
|
}
|
|
66
121
|
async clear(queue = 'default') {
|
|
67
|
-
await this.client.del(this.queueKey(queue));
|
|
68
|
-
await this.client.del(this.delayedKey(queue));
|
|
122
|
+
await this.client.del(this.queueKey(queue), this.delayedKey(queue), this.reservedKey(queue), this.failedKey(queue));
|
|
69
123
|
}
|
|
70
124
|
async migrateDelayedJobs(queue) {
|
|
71
125
|
const now = Date.now();
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
126
|
+
try {
|
|
127
|
+
const readyJobs = await this.client.getRawConnection().sendCommand([
|
|
128
|
+
'ZRANGEBYSCORE',
|
|
129
|
+
this.delayedKey(queue),
|
|
130
|
+
'-inf',
|
|
131
|
+
now,
|
|
132
|
+
]);
|
|
133
|
+
if (readyJobs && readyJobs.length > 0) {
|
|
134
|
+
for (const job of readyJobs) {
|
|
135
|
+
const removed = await this.client.getRawConnection().sendCommand([
|
|
136
|
+
'ZREM',
|
|
137
|
+
this.delayedKey(queue),
|
|
138
|
+
job,
|
|
139
|
+
]);
|
|
140
|
+
if (removed === 1) {
|
|
141
|
+
await this.client.rpush(this.queueKey(queue), job);
|
|
142
|
+
}
|
|
87
143
|
}
|
|
88
144
|
}
|
|
89
145
|
}
|
|
146
|
+
catch {
|
|
147
|
+
// In case sorted set does not exist yet
|
|
148
|
+
}
|
|
90
149
|
}
|
|
91
150
|
}
|
|
92
151
|
//# sourceMappingURL=redis-queue-driver.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"redis-queue-driver.js","sourceRoot":"","sources":["../../../src/queue/drivers/redis-queue-driver.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"redis-queue-driver.js","sourceRoot":"","sources":["../../../src/queue/drivers/redis-queue-driver.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,10 +5,13 @@
|
|
|
5
5
|
import type { QueueDriver, PushOptions } from './drivers/queue-driver.js';
|
|
6
6
|
import { QueueWorker, type WorkerOptions } from './worker.js';
|
|
7
7
|
import { Job } from './job.js';
|
|
8
|
+
import { RedisClient } from '../redis/redis-client.js';
|
|
8
9
|
export interface QueueConnectionConfig {
|
|
9
|
-
driver: 'memory' | 'database' | string;
|
|
10
|
+
driver: 'memory' | 'database' | 'redis' | string;
|
|
10
11
|
table?: string;
|
|
11
12
|
connection?: string;
|
|
13
|
+
redis?: RedisClient;
|
|
14
|
+
redisOptions?: any;
|
|
12
15
|
}
|
|
13
16
|
export interface QueueConfig {
|
|
14
17
|
default?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queue-manager.d.ts","sourceRoot":"","sources":["../../src/queue/queue-manager.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAG1E,OAAO,EAAE,WAAW,EAAE,KAAK,aAAa,EAAE,MAAM,aAAa,CAAC;AAC9D,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAE/B,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,QAAQ,GAAG,UAAU,GAAG,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"queue-manager.d.ts","sourceRoot":"","sources":["../../src/queue/queue-manager.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAG1E,OAAO,EAAE,WAAW,EAAE,KAAK,aAAa,EAAE,MAAM,aAAa,CAAC;AAC9D,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAE/B,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAEvD,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,QAAQ,GAAG,UAAU,GAAG,OAAO,GAAG,MAAM,CAAC;IACjD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,YAAY,CAAC,EAAE,GAAG,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC;CACrD;AAED,qBAAa,YAAY;IACvB,OAAO,CAAC,iBAAiB,CAAY;IACrC,OAAO,CAAC,iBAAiB,CAA4C;IACrE,OAAO,CAAC,mBAAmB,CAAkC;IAC7D,OAAO,CAAC,WAAW,CAAkD;gBAEzD,MAAM,GAAE,WAAgB;IAI7B,SAAS,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI;IAYpC,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,GAAG,IAAI;IAKtE,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,WAAW;IAgCzC;;OAEG;IACU,QAAQ,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC;IAgB1F;;OAEG;IACU,YAAY,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;IAIjD;;OAEG;IACI,YAAY,CAAC,OAAO,GAAE,aAAkB,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,WAAW;IAY/E,KAAK,IAAI,IAAI;CAKrB;AAED,eAAO,MAAM,KAAK,cAAqB,CAAC"}
|
|
@@ -6,6 +6,8 @@ import { MemoryQueueDriver } from './drivers/memory-queue-driver.js';
|
|
|
6
6
|
import { DatabaseQueueDriver } from './drivers/database-queue-driver.js';
|
|
7
7
|
import { QueueWorker } from './worker.js';
|
|
8
8
|
import { Job } from './job.js';
|
|
9
|
+
import { RedisQueueDriver } from './drivers/redis-queue-driver.js';
|
|
10
|
+
import { RedisClient } from '../redis/redis-client.js';
|
|
9
11
|
export class QueueManager {
|
|
10
12
|
defaultConnection = 'memory';
|
|
11
13
|
connectionConfigs = new Map();
|
|
@@ -34,9 +36,14 @@ export class QueueManager {
|
|
|
34
36
|
if (this.instantiatedDrivers.has(connName)) {
|
|
35
37
|
return this.instantiatedDrivers.get(connName);
|
|
36
38
|
}
|
|
37
|
-
const cfg = this.connectionConfigs.get(connName) || { driver: connName === 'database' ? 'database' : 'memory' };
|
|
39
|
+
const cfg = this.connectionConfigs.get(connName) || { driver: connName === 'database' ? 'database' : (connName === 'redis' ? 'redis' : 'memory') };
|
|
38
40
|
let driverInstance;
|
|
39
41
|
switch (cfg.driver) {
|
|
42
|
+
case 'redis': {
|
|
43
|
+
const client = cfg.redis || new RedisClient(cfg.redisOptions);
|
|
44
|
+
driverInstance = new RedisQueueDriver(client);
|
|
45
|
+
break;
|
|
46
|
+
}
|
|
40
47
|
case 'database':
|
|
41
48
|
driverInstance = new DatabaseQueueDriver({
|
|
42
49
|
table: cfg.table,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queue-manager.js","sourceRoot":"","sources":["../../src/queue/queue-manager.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,EAAE,WAAW,EAAsB,MAAM,aAAa,CAAC;AAC9D,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"queue-manager.js","sourceRoot":"","sources":["../../src/queue/queue-manager.ts"],"names":[],"mappings":"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"}
|
package/dist/security/index.d.ts
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* @description Security modules for Aero Web Framework: JWT, Rate Limiter, Security Headers, and CSRF.
|
|
4
4
|
*/
|
|
5
5
|
export { jwt, sign, verify, decode, jwtAuth, parseTimespan, JsonWebTokenError, TokenExpiredError, NotBeforeError, type JwtAlgorithm, type JwtHeader, type JwtPayload, type JwtSignOptions, type JwtVerifyOptions, type JwtAuthOptions, } from './jwt.js';
|
|
6
|
-
export { rateLimit, MemoryRateLimitStore, TooManyRequestsError, type RateLimitOptions, type RateLimitStore, type RateLimitInfo, } from './rate-limiter.js';
|
|
6
|
+
export { rateLimit, MemoryRateLimitStore, RedisRateLimitStore, TooManyRequestsError, type RateLimitOptions, type RateLimitStore, type RateLimitInfo, type RedisRateLimitStoreOptions, } from './rate-limiter.js';
|
|
7
7
|
export { securityHeaders, type SecurityHeadersOptions, type HstsOptions, type ContentSecurityPolicyDirectives, } from './headers.js';
|
|
8
8
|
export { csrf, type CsrfOptions, } from './csrf.js';
|
|
9
9
|
export { Hash, hash, hashVerify, type ScryptOptions, } from './hash.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/security/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,GAAG,EACH,IAAI,EACJ,MAAM,EACN,MAAM,EACN,OAAO,EACP,aAAa,EACb,iBAAiB,EACjB,iBAAiB,EACjB,cAAc,EACd,KAAK,YAAY,EACjB,KAAK,SAAS,EACd,KAAK,UAAU,EACf,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACrB,KAAK,cAAc,GACpB,MAAM,UAAU,CAAC;AAElB,OAAO,EACL,SAAS,EACT,oBAAoB,EACpB,oBAAoB,EACpB,KAAK,gBAAgB,EACrB,KAAK,cAAc,EACnB,KAAK,aAAa,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/security/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,GAAG,EACH,IAAI,EACJ,MAAM,EACN,MAAM,EACN,OAAO,EACP,aAAa,EACb,iBAAiB,EACjB,iBAAiB,EACjB,cAAc,EACd,KAAK,YAAY,EACjB,KAAK,SAAS,EACd,KAAK,UAAU,EACf,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACrB,KAAK,cAAc,GACpB,MAAM,UAAU,CAAC;AAElB,OAAO,EACL,SAAS,EACT,oBAAoB,EACpB,mBAAmB,EACnB,oBAAoB,EACpB,KAAK,gBAAgB,EACrB,KAAK,cAAc,EACnB,KAAK,aAAa,EAClB,KAAK,0BAA0B,GAChC,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,eAAe,EACf,KAAK,sBAAsB,EAC3B,KAAK,WAAW,EAChB,KAAK,+BAA+B,GACrC,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,IAAI,EACJ,KAAK,WAAW,GACjB,MAAM,WAAW,CAAC;AAEnB,OAAO,EACL,IAAI,EACJ,IAAI,EACJ,UAAU,EACV,KAAK,aAAa,GACnB,MAAM,WAAW,CAAC;AAEnB,OAAO,EACL,IAAI,EACJ,KAAK,WAAW,GACjB,MAAM,uBAAuB,CAAC;AAE/B,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC"}
|
package/dist/security/index.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* @description Security modules for Aero Web Framework: JWT, Rate Limiter, Security Headers, and CSRF.
|
|
4
4
|
*/
|
|
5
5
|
export { jwt, sign, verify, decode, jwtAuth, parseTimespan, JsonWebTokenError, TokenExpiredError, NotBeforeError, } from './jwt.js';
|
|
6
|
-
export { rateLimit, MemoryRateLimitStore, TooManyRequestsError, } from './rate-limiter.js';
|
|
6
|
+
export { rateLimit, MemoryRateLimitStore, RedisRateLimitStore, TooManyRequestsError, } from './rate-limiter.js';
|
|
7
7
|
export { securityHeaders, } from './headers.js';
|
|
8
8
|
export { csrf, } from './csrf.js';
|
|
9
9
|
export { Hash, hash, hashVerify, } from './hash.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/security/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,GAAG,EACH,IAAI,EACJ,MAAM,EACN,MAAM,EACN,OAAO,EACP,aAAa,EACb,iBAAiB,EACjB,iBAAiB,EACjB,cAAc,GAOf,MAAM,UAAU,CAAC;AAElB,OAAO,EACL,SAAS,EACT,oBAAoB,EACpB,oBAAoB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/security/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,GAAG,EACH,IAAI,EACJ,MAAM,EACN,MAAM,EACN,OAAO,EACP,aAAa,EACb,iBAAiB,EACjB,iBAAiB,EACjB,cAAc,GAOf,MAAM,UAAU,CAAC;AAElB,OAAO,EACL,SAAS,EACT,oBAAoB,EACpB,mBAAmB,EACnB,oBAAoB,GAKrB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,eAAe,GAIhB,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,IAAI,GAEL,MAAM,WAAW,CAAC;AAEnB,OAAO,EACL,IAAI,EACJ,IAAI,EACJ,UAAU,GAEX,MAAM,WAAW,CAAC;AAEnB,OAAO,EACL,IAAI,GAEL,MAAM,uBAAuB,CAAC;AAE/B,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC"}
|
|
@@ -73,6 +73,26 @@ export declare class MemoryRateLimitStore implements RateLimitStore {
|
|
|
73
73
|
cleanup(): void;
|
|
74
74
|
destroy(): void;
|
|
75
75
|
}
|
|
76
|
+
export interface RedisRateLimitStoreOptions {
|
|
77
|
+
client: any;
|
|
78
|
+
prefix?: string;
|
|
79
|
+
fallbackToMemory?: boolean;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Distributed, multi-instance Rate Limiter Store backed by Redis.
|
|
83
|
+
* Uses atomic INCR and TTL expiration to synchronize rate limits across server clusters.
|
|
84
|
+
*/
|
|
85
|
+
export declare class RedisRateLimitStore implements RateLimitStore {
|
|
86
|
+
private client;
|
|
87
|
+
private prefix;
|
|
88
|
+
private fallbackStore?;
|
|
89
|
+
constructor(options: RedisRateLimitStoreOptions);
|
|
90
|
+
increment(key: string, windowMs: number): Promise<RateLimitInfo>;
|
|
91
|
+
decrement(key: string): Promise<void>;
|
|
92
|
+
resetKey(key: string): Promise<void>;
|
|
93
|
+
resetAll(): Promise<void>;
|
|
94
|
+
destroy(): void;
|
|
95
|
+
}
|
|
76
96
|
/**
|
|
77
97
|
* Creates a Rate Limiter middleware for Aero applications.
|
|
78
98
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rate-limiter.d.ts","sourceRoot":"","sources":["../../src/security/rate-limiter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACjE,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACpE,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAE9C,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,GAAG,aAAa,CAAC;IACjF,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAC7C,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAC5C,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IACjC,OAAO,CAAC,IAAI,IAAI,CAAC;CAClB;AAED,MAAM,WAAW,gBAAgB,CAAC,KAAK,GAAG,GAAG;IAC3C;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IAEb;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAE3C;;OAEG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB;;OAEG;IACH,YAAY,CAAC,EAAE,CAAC,GAAG,EAAE,WAAW,CAAC,KAAK,CAAC,KAAK,MAAM,CAAC;IAEnD;;OAEG;IACH,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,WAAW,CAAC,KAAK,CAAC,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAE/D;;OAEG;IACH,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,WAAW,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,YAAY,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAEhF;;OAEG;IACH,KAAK,CAAC,EAAE,cAAc,CAAC;CACxB;AAED,qBAAa,oBAAqB,SAAQ,SAAS;IACjC,IAAI,SAA0B;IACvC,UAAU,EAAE,MAAM,CAAC;gBAEd,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO;CAInE;AAED;;GAEG;AACH,qBAAa,oBAAqB,YAAW,cAAc;IACzD,OAAO,CAAC,IAAI,CAA2D;IACvE,OAAO,CAAC,aAAa,CAAC,CAAiB;gBAE3B,iBAAiB,SAAS;IAY/B,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,aAAa;IAcvD,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAO5B,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAI3B,QAAQ,IAAI,IAAI;IAIhB,OAAO,IAAI,IAAI;IASf,OAAO,IAAI,IAAI;CAOvB;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,KAAK,GAAG,YAAY,EAAE,OAAO,GAAE,gBAAgB,CAAC,KAAK,CAAM,GAAG,UAAU,CAAC,KAAK,CAAC,CA6DxG"}
|
|
1
|
+
{"version":3,"file":"rate-limiter.d.ts","sourceRoot":"","sources":["../../src/security/rate-limiter.ts"],"names":[],"mappings":"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"}
|
|
@@ -66,6 +66,91 @@ export class MemoryRateLimitStore {
|
|
|
66
66
|
this.hits.clear();
|
|
67
67
|
}
|
|
68
68
|
}
|
|
69
|
+
/**
|
|
70
|
+
* Distributed, multi-instance Rate Limiter Store backed by Redis.
|
|
71
|
+
* Uses atomic INCR and TTL expiration to synchronize rate limits across server clusters.
|
|
72
|
+
*/
|
|
73
|
+
export class RedisRateLimitStore {
|
|
74
|
+
client;
|
|
75
|
+
prefix;
|
|
76
|
+
fallbackStore;
|
|
77
|
+
constructor(options) {
|
|
78
|
+
this.client = options.client;
|
|
79
|
+
this.prefix = options.prefix ?? 'rl:';
|
|
80
|
+
if (options.fallbackToMemory) {
|
|
81
|
+
this.fallbackStore = new MemoryRateLimitStore();
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
async increment(key, windowMs) {
|
|
85
|
+
const fullKey = `${this.prefix}${key}`;
|
|
86
|
+
try {
|
|
87
|
+
const hits = await this.client.incr(fullKey);
|
|
88
|
+
let ttl = await this.client.ttl(fullKey);
|
|
89
|
+
if (ttl === -1 || ttl === null) {
|
|
90
|
+
const sec = Math.max(1, Math.ceil(windowMs / 1000));
|
|
91
|
+
await this.client.expire(fullKey, sec);
|
|
92
|
+
ttl = sec;
|
|
93
|
+
}
|
|
94
|
+
const resetTime = Date.now() + Math.max(1, ttl) * 1000;
|
|
95
|
+
return { totalHits: hits, resetTime };
|
|
96
|
+
}
|
|
97
|
+
catch (err) {
|
|
98
|
+
if (this.fallbackStore) {
|
|
99
|
+
return this.fallbackStore.increment(key, windowMs);
|
|
100
|
+
}
|
|
101
|
+
throw err;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
async decrement(key) {
|
|
105
|
+
const fullKey = `${this.prefix}${key}`;
|
|
106
|
+
try {
|
|
107
|
+
await this.client.decr(fullKey);
|
|
108
|
+
}
|
|
109
|
+
catch (err) {
|
|
110
|
+
if (this.fallbackStore) {
|
|
111
|
+
this.fallbackStore.decrement(key);
|
|
112
|
+
return;
|
|
113
|
+
}
|
|
114
|
+
throw err;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
async resetKey(key) {
|
|
118
|
+
const fullKey = `${this.prefix}${key}`;
|
|
119
|
+
try {
|
|
120
|
+
await this.client.del(fullKey);
|
|
121
|
+
}
|
|
122
|
+
catch (err) {
|
|
123
|
+
if (this.fallbackStore) {
|
|
124
|
+
this.fallbackStore.resetKey(key);
|
|
125
|
+
return;
|
|
126
|
+
}
|
|
127
|
+
throw err;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
async resetAll() {
|
|
131
|
+
try {
|
|
132
|
+
const connection = typeof this.client.getRawConnection === 'function'
|
|
133
|
+
? this.client.getRawConnection()
|
|
134
|
+
: this.client;
|
|
135
|
+
const keys = await connection.sendCommand(['KEYS', `${this.prefix}*`]);
|
|
136
|
+
if (keys && keys.length > 0) {
|
|
137
|
+
await this.client.del(...keys);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
catch (err) {
|
|
141
|
+
if (this.fallbackStore) {
|
|
142
|
+
this.fallbackStore.resetAll();
|
|
143
|
+
return;
|
|
144
|
+
}
|
|
145
|
+
throw err;
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
destroy() {
|
|
149
|
+
if (this.fallbackStore) {
|
|
150
|
+
this.fallbackStore.destroy();
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
}
|
|
69
154
|
/**
|
|
70
155
|
* Creates a Rate Limiter middleware for Aero applications.
|
|
71
156
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rate-limiter.js","sourceRoot":"","sources":["../../src/security/rate-limiter.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"rate-limiter.js","sourceRoot":"","sources":["../../src/security/rate-limiter.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@shohaghinfo/aerojs",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"description": "A minimal, blazing-fast, zero-dependency full-stack web framework for Node.js — supporting React, Vue 3, Inertia.js, and SSR monoliths.",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -82,6 +82,10 @@
|
|
|
82
82
|
"./diagnostics": {
|
|
83
83
|
"types": "./dist/diagnostics/index.d.ts",
|
|
84
84
|
"import": "./dist/diagnostics/index.js"
|
|
85
|
+
},
|
|
86
|
+
"./http": {
|
|
87
|
+
"types": "./dist/http/index.d.ts",
|
|
88
|
+
"import": "./dist/http/index.js"
|
|
85
89
|
}
|
|
86
90
|
},
|
|
87
91
|
"files": [
|
|
@@ -138,4 +142,4 @@
|
|
|
138
142
|
"dependencies": {
|
|
139
143
|
"reflect-metadata": "^0.2.2"
|
|
140
144
|
}
|
|
141
|
-
}
|
|
145
|
+
}
|