Security News
The Risks of Misguided Research in Supply Chain Security
Snyk's use of malicious npm packages for research raises ethical concerns, highlighting risks in public deployment, data exfiltration, and unauthorized testing.
Publisher/Subscriber pattern plus messaging queue and notifications written in Typescript.
npm install pubsub-ts
import {PubSub} from "pubsub-ts";
let subscriber: PubSub.Subscriber = new PubSub.Subscriber();
subscriber.on('postMsg', (notification: PubSub.Notification) => {
this.msg = notification.body;
});
subscriber.off('postMsg');
subscriber.start();
subscriber.pause();
import {PubSub} from "pubsub-ts";
let publisher: PubSub.Publisher = new PubSub.Publisher();
publisher.add(subscriber);
publisher.delete(subscriber);
publisher.notify('postMsg', 'a message');
You can also prioritize a Notification.
publisher.notifyPriority('postMsg', 'priority message');
Or send a Notification as urgent to be delivered immediately.
publisher.notifyUrgent('postMsg', 'urgent message');
Subscribers are equipped with a queue of notifications. You can control when the Subscriber should start() receiving notifications that were posted to its queue as well as pause() the queue.
This allows to preserve the order of notifications until the subscriber is ready to receive them. For example when waiting for an async operation to complete.
When a Subscriber is in the paused state, notifications are pushed into the queue for later processing.
When a Subscriber is in the started state, the queue will resume processing notifications.
NOTE: Subscribers are paused by default. You must invoke start() to enable processing from the queue. This is done so you have explicit control as to when notifications should start being posted to the subscriber.
import {PubSub} from "pubsub-ts";
class TransactionAgent extends PubSub.Subscriber {
constructor() {
this.on('connectionChange', this.onConnection);
this.on('withdrawal', this.onWithdrawal);
}
public onConnection(notification: PubSub.Notification): void {
if (notification.body.status === 'online') {
// Start receiving notifications
this.start();
} else {
// Pause receiving notifications
this.pause();
}
}
public onWithdrawal(notification: PubSub.Notification): void {
let amount: number = notification.body;
console.log('[TransactionAgent]', amount);
}
}
class ATM extends PubSub.Publisher {
constructor() {
this.add(new TransactionAgent());
}
public withdrawAmount(amount: number): void {
this.notify('withdrawal', amount);
}
public connectionChange(status: string): void {
this.notify('connectionChange', {status: status});
}
}
let atm: ATM = new ATM();
// 1. ATM not connected. Offline.
// 2. User requests withdrawal.
atm.withdrawAmount(1500);
// 3. ATM back online. Connection ready.
atm.connectionChange('online');
// 4. Transaction agent starts processing from the queue
// console log:
[TransactionAgent], 1500
FAQs
PubSub Messaging Pattern in Typescript
The npm package pubsub-ts receives a total of 204 weekly downloads. As such, pubsub-ts popularity was classified as not popular.
We found that pubsub-ts demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer 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.
Security News
Snyk's use of malicious npm packages for research raises ethical concerns, highlighting risks in public deployment, data exfiltration, and unauthorized testing.
Research
Security News
Socket researchers found several malicious npm packages typosquatting Chalk and Chokidar, targeting Node.js developers with kill switches and data theft.
Security News
pnpm 10 blocks lifecycle scripts by default to improve security, addressing supply chain attack risks but sparking debate over compatibility and workflow changes.