
Research
Security News
Lazarus Strikes npm Again with New Wave of Malicious Packages
The Socket Research Team has discovered six new malicious npm packages linked to North Korea’s Lazarus Group, designed to steal credentials and deploy backdoors.
@macfja/nestjs-queue
Advanced tools
A Nestjs module to create queues and actions that need to check freshness of a data.
A Nestjs module to create queues and actions that need to check freshness of a data.
npm install @macfja/nestjs-queue
# or
pnpm add --save @macfja/nestjs-queue
# or
yarn add --save @macfja/nestjs-queue
# or
bun add --save @macfja/nestjs-queue
In your main module
import { QueueModule } from "@macfja/nestjs-queue"
import { Module } from "@nestjs/common"
import { Oauth2Needed } from "./oauth2need.service.ts" // See below
@Module({
imports: [
QueueModule.register({
needs: [{ name: 'oauth2', needed: Oauth2Needed }],
queues: ['oldServer']
})
]
})
export class MainModule {}
Create a need checker support class
// ./oauth2need.service.ts
import { type NeedCheckerInterface } from "@macfja/nestjs-queue"
export type TokenType = {
exp: number;
val: string;
}
@Injectable()
export class Oauth2Needed implements NeedCheckerInterface<TokenType> {
isFresh(token) {
return Promise.resolve(token.exp < Date.now())
}
fetcher() {
return fetch('https://myTokenEndpoint/token').then(response => response.text())
}
}
import { InjectNeed, InjectQueue, NeedService, QueueService } from "@macfja/nestjs-queue"
import { type TokenType } from "./oauth2need.service.ts"
@Injectable()
export class MyService {
constructor(
@InjectNeed('oauth2') private readonly oauth2: NeedService<TokenType>,
@InjectQueue('oldServer') private readonly queue: QueueService,
) {}
async myNeedAction() {
/*
* Get a the token from the NeedChecker.
* The value if refresh if needed.
*/
const token = await this.oauth2.with();
// Use the token
const response = await fetch('https://myServer/', { headers: {
authorization: `Bearer ${token.val}`
}})
return response.json()
}
myNeedAction2() {
// Same as before, but in the Promise.then() form instead of the async/await
return this.oauth2.with()
.then(token => fetch('https://myServer/', { headers: { authorization: `Bearer ${token.token}` } }))
.then(response => response.json())
}
async myQueueAction3() {
/*
* All previous task will first be runned.
* Then this task will be executed, then its result will be available in the `response` variable.
*/
const response = await this.queue.add(() => fetch('http://oldAndSlowServer')) //
return response.json()
}
myQueueAction4() {
// Same as before, but in the Promise.then() form instead of the async/await
return this.queue
.add(() => fetch('http://oldAndSlowServer'))
.then(response => response.json())
}
async myQueueAction5() {
/*
* Wait for the queue to be emptied
*/
await this.queue.wait()
const response = await fetch('http://oldAndSlowServer')
return response.json()
}
}
You can configure the behavoir of the queue by providing a configuration object instead of the queue name:
import { QueueModule } from "@macfja/nestjs-queue"
import { Module } from "@nestjs/common"
@Module({
imports: [
QueueModule.register({
// 4 tasks in parallel.
queues: [{ name: 'oldServer', { concurrency: 4 }]
})
]
})
export class MainModule {}
[!NOTE] The full list of supported options is available on
p-queue
Github
The NeedChecker can be set in the QueueModule
configuration:
import { QueueModule, type NeedCheckerInterface } from "@macfja/nestjs-queue"
import { Module } from "@nestjs/common"
import { freemem } from "node:os"
@Module({
imports: [
QueueModule.register({
needs: [{ name: 'memory', needed: {
isFresh(source: number): Promise<boolean> {
return Promise.resolve(freemem() > 4 * Math.pow(10, 6))
},
fetcher(): Promise<number> {
global.gc()
return Promise.resolve(freemem())
}
} satisfies NeedCheckerInterface<number> }],
})
]
})
export class MainModule {}
The Need checker can anything that can be injected:
import { QueueModule, type NeedCheckerInterface } from "@macfja/nestjs-queue"
import { Module } from "@nestjs/common"
@Module({
imports: [
QueueModule.register({
needs: [
{ name: 'byClass', needed: MyNeedCheckerClass },
{ name: 'byToken', needed: 'my-need-checker-provider-token' },
{ name: 'byInstance', needed: new MyNeedCheckerClass2() },
{ name: 'byShape', needed: {
isFresh(source: number): Promise<boolean> { /* ... */ },
fetcher(): Promise<number> { /*... */ }
} satisfies NeedCheckerInterface<number>
],
})
]
})
export class MainModule {}
The queue features are based on p-queue
, but as Nestjs is not compatible with ESM module1, the p-queue
dependency is injected inside the compiled source of this library.
eventemitter3
is also a direct dependency to reduce the size of the library (eventemitter3
is a dependency of p-queue
but it's compatible with CJS).
This will introduce delay between the P-Queue release and when it will be available in this library
Contributions are welcome. Please open up an issue or create PR if you would like to help out.
Read more in the Contributing file
The MIT License (MIT). Please see License File for more information.
There are several issues about the fact that Nestjs is not comaptible with ESM
[1.0.1] - 2024-10-07
FAQs
A Nestjs module to create queues and actions that need to check freshness of a data.
The npm package @macfja/nestjs-queue receives a total of 2 weekly downloads. As such, @macfja/nestjs-queue popularity was classified as not popular.
We found that @macfja/nestjs-queue demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 0 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Research
Security News
The Socket Research Team has discovered six new malicious npm packages linked to North Korea’s Lazarus Group, designed to steal credentials and deploy backdoors.
Security News
Socket CEO Feross Aboukhadijeh discusses the open web, open source security, and how Socket tackles software supply chain attacks on The Pair Program podcast.
Security News
Opengrep continues building momentum with the alpha release of its Playground tool, demonstrating the project's rapid evolution just two months after its initial launch.