# @devpie/client-events

> Common module for event-driven architecture.

Latest version **0.0.44** (published 2021-05-01) · MIT license · 0 weekly downloads

## Install

```sh
npm install @devpie/client-events
pnpm add @devpie/client-events
yarn add @devpie/client-events
bun add @devpie/client-events
```

## Health

**Score 20/100 (F)** — status: abandoned.

Positive: has types; no vulnerabilities.

Warnings: low downloads; no esm support; pre 1.0.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 0.0.44 |
| Published | 2021-05-01 |
| First published | 2020-11-15 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | bundled |
| Module format | CommonJS |
| Dependencies | 4 |
| Unpacked size | 24.9 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 0 |
| Author | ivorscott |
| Maintainers | ivorscott |

## Links

- npm: https://www.npmjs.com/package/@devpie/client-events
- Repository: https://github.com/ivorscott/devpie-client-events
- Homepage: https://github.com/ivorscott/devpie-client-events#readme
- Issues: https://github.com/ivorscott/devpie-client-events/issues
- npm.io page: https://npm.io/package/@devpie/client-events

## Dependencies (4)

- [pg](https://npm.io/package/pg.md) ^8.6.0
- [express](https://npm.io/package/express.md) ^4.17.1
- [@types/node](https://npm.io/package/@types/node.md) ^14.14.7
- [node-nats-streaming](https://npm.io/package/node-nats-streaming.md) ^0.3.2

## Recent versions

- 0.0.44 (latest) — 2021-05-01
- 0.0.43 — 2021-05-01
- 0.0.42 — 2021-05-01
- 0.0.40 — 2021-04-28
- 0.0.39 — 2021-04-28
- 0.0.38 — 2021-04-27
- 0.0.36 — 2021-04-26
- 0.0.35 — 2021-04-17
- 0.0.34 — 2021-04-17
- 0.0.33 — 2021-04-15
- 0.0.32 — 2021-04-15
- 0.0.28 — 2021-02-03
- 0.0.27 — 2020-12-05
- 0.0.26 — 2020-12-02
- 0.0.25 — 2020-12-02
- … 10 more at https://npm.io/package/@devpie/client-events/versions

## README

# Common Module for Event-driven Architecture

Supports commands and events (CQRS).

## Overview

This package serves as a shared library for all message interfaces, commands and events in the system. It ensures consistency and correctness while implementing the event data model across Applications, Microservices, Aggregators and various programming languages.

## How it works

Devpie Client's event data model is exported as command and event enums, and message interfaces, to enable easy lookup of the available identifiers in the system.

```typescript
import { Commands, Events } from "@devpie/client-events";

console.log(Commands.EnableAccounting);
// EnableAccounting

console.log(Events.MembershipAdded);
// MembershipAdded
```

Existing interfaces allow us to type check the message body being sent, ensuring correctness of implementation.

```typescript
export interface MembershipAddedEvent {
  id: string;
  type: Events.MembershipAdded;
  metadata: Metadata;
  data: {
    MemberId: string;
    TeamId: string;
    UserId: string;
    Role: string;
    Created: string;
  };
}
```

## Messaging

Messaging systems allow Microservices to exchange messages without coupling them together. Some Microservices emit messages, while others listen to the messages they subscribe to.

A message is a generic term for data that could be either a command or an event. Commands are messages that trigger something to happen (in the future). Events are messages that notify listeners about something that has happened (in the past). Publishers send commands or events without knowing the consumers that may be listening.

### Language Support

This package is written in TypeScript but converted to language targets. Each supported language has its own package.

Supported languages include:

- TypeScript [See package](https://www.npmjs.com/package/@devpie/client-events)
- Golang [See package](https://github.com/ivorscott/devpie-client-events/tree/main/go)

### Development

Modify `src/events.ts`, the source of truth, then re-build to update all packages.

```
npm run build
```

### Release

Here's the steps to perform a manual release for Typescript and Go packages (needs to be automated). Publishing Go modules relies on git tags. https://blog.golang.org/publishing-go-modules

```bash
# 1. npm run build
# 2. update ./package.json version
# 3. commit changes to git
# 4. create a new tag for release
git tag v0.0.1
# 5. push new tag
git push origin v0.0.1
# 6. push changes to remote repository
git push origin main
# 7. publish npm module
npm publish
```

---
_Source: https://npm.io/package/@devpie/client-events · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
