Skip to content

Commit 579fd7f

Browse files
committed
chore(core): bump version to 0.1.53 and update @intentjs/hyper-express dependency
- Updated package version to 0.1.53. - Bumped @intentjs/hyper-express dependency version to 0.0.11. - Enhanced delay calculation in PayloadBuilder to return both delay and net delay in seconds. - Updated SqsQueueDriver to use net delay in seconds for message pushing. - Added netDelayInSeconds property to InternalMessage interface.
1 parent c1e6bd2 commit 579fd7f

File tree

8 files changed

+35
-25
lines changed

8 files changed

+35
-25
lines changed

packages/core/lib/queue/core/payloadBuilder.ts

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,17 +9,18 @@ type Complete<T> = {
99
: T[P] | undefined;
1010
};
1111

12-
const calculateDelay = (delay: number | string | Date): number => {
12+
const calculateDelay = (delay: number | string | Date): [number, number] => {
1313
const now = Date.now();
1414
if (delay instanceof Date) {
1515
const time = delay.getTime();
16-
return now > time ? now : time;
16+
const netDelayInSeconds = (time - now) / 1000;
17+
return now > time ? [now, 0] : [time, netDelayInSeconds];
1718
}
1819

1920
const delayInMs = typeof delay === 'string' ? ms(delay) : delay * 1000;
2021
const calculatedDelay = now + delayInMs;
21-
if (calculatedDelay < now) return now;
22-
return calculatedDelay;
22+
if (calculatedDelay < now) return [now, 0];
23+
return [calculatedDelay, (calculatedDelay - now) / 1000];
2324
};
2425

2526
export class PayloadBuilder {
@@ -37,7 +38,9 @@ export class PayloadBuilder {
3738
...message,
3839
} as Complete<InternalMessage>;
3940

40-
payload.delay = calculateDelay(payload.delay || 0);
41+
const [delay, netDelayInSeconds] = calculateDelay(payload.delay || 0);
42+
payload.delay = delay;
43+
payload.netDelayInSeconds = netDelayInSeconds;
4144
payload.connection = payload.connection || defaultOptions.connection;
4245

4346
if (!payload.queue) {

packages/core/lib/queue/drivers/redis.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,11 +70,13 @@ export class RedisQueueDriver implements PollQueueDriver {
7070
}
7171

7272
async purge(options: Record<string, any>): Promise<void> {
73+
await this.initializeModules();
7374
await this.client.del(this.getQueue(options.queue));
7475
await this.client.del(this.getDelayedQueue(options.queue));
7576
}
7677

7778
async count(options: Record<string, any>): Promise<number> {
79+
await this.initializeModules();
7880
return await this.client.llen(this.getQueue(options.queue));
7981
}
8082

@@ -97,6 +99,7 @@ export class RedisQueueDriver implements PollQueueDriver {
9799
}
98100

99101
async scheduledTask(options: Record<string, any>): Promise<void> {
102+
await this.initializeModules();
100103
await (this.client as any).findDelayedJob(
101104
this.getDelayedQueue(options.queue),
102105
this.getQueue(options.queue),

packages/core/lib/queue/drivers/sqs.ts

Lines changed: 17 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -11,25 +11,15 @@ export class SqsQueueDriver implements PollQueueDriver {
1111

1212
constructor(private options: Record<string, any>) {
1313
validateOptions(options, SqsQueueOptionsDto, { cls: SqsQueueDriver.name });
14-
this.initializeModules().then(() => {
15-
this.client = new this.AWS.SQS({
16-
region: options.region,
17-
apiVersion: options.apiVersion,
18-
credentials: options.credentials || {
19-
accessKeyId: options.accessKey,
20-
secretAccessKey: options.secretKey,
21-
},
22-
});
23-
});
14+
this.initializeModules();
2415
}
2516

26-
init(): Promise<void> {
27-
throw new Error('Method not implemented.');
28-
}
17+
async init(): Promise<void> {}
2918

3019
async push(message: string, rawPayload: InternalMessage): Promise<void> {
20+
await this.initializeModules();
3121
const params = {
32-
DelaySeconds: rawPayload.delay,
22+
DelaySeconds: rawPayload.netDelayInSeconds,
3323
MessageBody: message,
3424
QueueUrl: joinUrl(this.options.prefix, rawPayload.queue),
3525
};
@@ -39,6 +29,7 @@ export class SqsQueueDriver implements PollQueueDriver {
3929
}
4030

4131
async pull(options: Record<string, any>): Promise<SqsJob[] | null> {
32+
await this.initializeModules();
4233
const params = {
4334
MaxNumberOfMessages: 10,
4435
MessageAttributeNames: ['All'],
@@ -53,6 +44,7 @@ export class SqsQueueDriver implements PollQueueDriver {
5344
}
5445

5546
async remove(job: SqsJob, options: Record<string, any>): Promise<void> {
47+
await this.initializeModules();
5648
const params = {
5749
QueueUrl: joinUrl(this.options.prefix, options.queue),
5850
ReceiptHandle: job.data.ReceiptHandle,
@@ -64,6 +56,7 @@ export class SqsQueueDriver implements PollQueueDriver {
6456
}
6557

6658
async purge(options: Record<string, any>): Promise<void> {
59+
await this.initializeModules();
6760
const params = {
6861
QueueUrl: joinUrl(this.options.prefix, options.queue),
6962
};
@@ -74,6 +67,7 @@ export class SqsQueueDriver implements PollQueueDriver {
7467
}
7568

7669
async count(options: Record<string, any>): Promise<number> {
70+
await this.initializeModules();
7771
const params = {
7872
QueueUrl: joinUrl(this.options.prefix, options.queue),
7973
AttributeNames: ['ApproximateNumberOfMessages'],
@@ -84,6 +78,15 @@ export class SqsQueueDriver implements PollQueueDriver {
8478
}
8579

8680
async initializeModules(): Promise<void> {
81+
if (this.AWS && this.client) return Promise.resolve();
8782
this.AWS = await Package.load('@aws-sdk/client-sqs');
83+
this.client = new this.AWS.SQS({
84+
region: this.options.region,
85+
apiVersion: this.options.apiVersion,
86+
credentials: this.options.credentials || {
87+
accessKeyId: this.options.accessKey,
88+
secretAccessKey: this.options.secretKey,
89+
},
90+
});
8891
}
8992
}

packages/core/lib/queue/strategy/message.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,4 +17,5 @@ export interface InternalMessage extends Message {
1717
attemptCount: number;
1818
id: string;
1919
delay?: number;
20+
netDelayInSeconds?: number;
2021
}

packages/core/lib/queue/workers/pollQueue.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -173,7 +173,7 @@ export class PollQueueWorker extends BaseQueueWorker {
173173
this.emitEvent(new JobMaxRetriesExceeed(message, job));
174174
return;
175175
}
176-
await Dispatch(message);
176+
await Dispatch({ ...message, delay: message.netDelayInSeconds });
177177
this.emitEvent(new JobFailed(message, job));
178178
}
179179

packages/core/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@intentjs/core",
3-
"version": "0.1.50",
3+
"version": "0.1.53",
44
"description": "Core module for Intent",
55
"repository": {
66
"type": "git",
@@ -131,7 +131,7 @@
131131
"typescript": "^5.5.2"
132132
},
133133
"dependencies": {
134-
"@intentjs/hyper-express": "^0.0.10",
134+
"@intentjs/hyper-express": "^0.0.11",
135135
"@nestjs/common": "^11.0.12",
136136
"@nestjs/core": "^11.0.12",
137137
"@react-email/components": "^0.0.32",

packages/hyper-express/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@intentjs/hyper-express",
3-
"version": "0.0.10",
3+
"version": "0.0.11",
44
"description": "A fork of hyper-express to suit IntentJS requirements. High performance Node.js webserver with a simple-to-use API powered by uWebsockets.js under the hood.",
55
"main": "index.js",
66
"types": "./types/index.d.ts",

packages/hyper-express/src/shared/uploaded-file.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,11 +28,11 @@ class UploadedFile {
2828
}
2929

3030
get extension() {
31-
return this.filename;
31+
return this._filename.split('.').pop();
3232
}
3333

3434
async toBuffer() {
35-
return fs.readFileSync(this.tempPath);
35+
return fs.readFileSync(this._tempPath);
3636
}
3737
}
3838

0 commit comments

Comments
 (0)