
Research
Malicious npm Packages Impersonate Flashbots SDKs, Targeting Ethereum Wallet Credentials
Four npm packages disguised as cryptographic tools steal developer credentials and send them to attacker-controlled Telegram infrastructure.
Nech is a simple library for encapsulating business logic into smaller, shareable DDD-inspired blocks. TypeScript + Batteries included. ⚡️
Function | Description | Usage |
---|---|---|
Entity | A representation of an exchangable data entry. | const Price = entity('Price', z.number().positive()) |
Node | Nodes are a single-responsibility abstraction of small steps of business logic. Nodes on their own are basically just functions (feel free to simply call them). | const $createPrice = node('CreatePrice', z.number(), price => price * 100) |
Chain | A chain is a node that executes an array of nodes in order. All nodes inside a chain (except for the first one) need to expect the same schema as their input. | TODO |
Router | Routers allows you to define a set of nodes that expect the same schema as their input, that can be executed based on a given input. Each node inside a router needs to expect | `` |
entity<T>(name: string, schema: ZodSchema<T>): Entity<T>
An entity represents some kind of (exchangable) data entry. Whether it be a Database model or just the result of an operation.
You can either define a simple entity
import { z } from 'zod'
import { entity } from 'nech'
const Price = entity('Price', z.number().positive())
or a more complex one
import { z } from 'zod'
import { entity } from 'nech'
const UserEntityy = entity(
'User',
z.object({
id: z.string().uuid(),
name: z.string(),
email: z.string().email(),
password: z.string().min(8),
createdAt: z.date(),
updatedAt: z.date(),
})
)
As entity
i just a factory method for a new class extending Entity
, you can also define custom methods, getters and setters etc. on your entities.
import { z } from 'zod'
import { entity } from 'nech'
class UserEntity extends entity(
'User',
z.object({
id: z.string().uuid(),
name: z.string(),
lastName: z.string(),
email: z.string().email(),
password: z.string().min(8),
image: z.string().url().optional(),
createdAt: z.date(),
updatedAt: z.date(),
})
) {
public get fullName(): string {
return `${this.name} ${this.lastName}`
}
public set fullName(fullName: string) {
const [name, lastName] = fullName.split(' ')
this.name = name
this.lastName = lastName
}
introduce() {
console.log(`Hello, my name is ${this.fullName}!`)
}
static create(input: ) {
// ... this is just an example. You could connect you Database here and create a new user.
return new UserEntity(input)
}
}
node<Input, Output>(name: string, inputSchema: ZodSchema<Input>, handler: ((input: Input): Output)): Node<Input, Output>
import { z } from 'zod'
import { node, type EntityOf } from 'nech'
const $createUser = node(
'CreateUser',
z.object({
name: z.string(),
email: z.string().email(),
password: z.string().min(8),
image: z.string().url().optional(),
}),
async ({ name, email, password }: EntityOf<UserEntity>) => {
// Imagine
const user = await UserEntity.create({ name, email, password })
return user
}
)
const $sendWelcomeEmail = node(
'SendWelcomeEmail',
UserEntity.schema,
async user => {
// Imagine
await sendEmail(user.email, 'Welcome to our platform!')
return user
}
)
const $generateUserProfileImage = node(
'GenerateUserProfileImage',
UserEntity.schema,
async user => {
// Imagine
const image = await generateUserProfileImage(user)
user.image = image
// Imagine
await user.save()
return user
}
)
chain<Input, Output, Context>(name: string, nodes: [Node<Input, Context>, ...Node<Context, Context>, Node<Context, Output>]): Chain<Input, Output, Context>
import { chain } from 'nodeflo'
const UserSignup = chain('UserSignup', [
$createUser,
$sendWelcomeEmail,
$generateUserProfileImage,
])
// Somewhere in a route controller
const user = await UserSignup.execute(payloadData)
router<Input, Output>(name: string, routes: Record<string, Node<Input, Output>>): Router<Input, Output>
FAQs
Node-Entity-CHain – A data pipeline framework
The npm package nech receives a total of 0 weekly downloads. As such, nech popularity was classified as not popular.
We found that nech 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.
Research
Four npm packages disguised as cryptographic tools steal developer credentials and send them to attacker-controlled Telegram infrastructure.
Security News
Ruby maintainers from Bundler and rbenv teams are building rv to bring Python uv's speed and unified tooling approach to Ruby development.
Security News
Following last week’s supply chain attack, Nx published findings on the GitHub Actions exploit and moved npm publishing to Trusted Publishers.