open-index/open-npm huggingface dataset:
npm package: @lowstacktechnologies/mds-client
Description: TypeScript client library for the Message Delivery Service
Author: Low Stack Technologies
Latest version: 3.0.0

# Message Delivery Service TypeScript Client

A TypeScript/JavaScript client library for the Message Delivery Service, featuring automatic Ed25519 request signing and type-safe API wrappers.

## Installation

```bash
# Using Bun
bun add @lowstacktechnologies/mds-client

# Using npm
npm install @lowstacktechnologies/mds-client

# Using pnpm
pnpm add @lowstacktechnologies/mds-client
```

## Usage

```typescript
import { MdsClient } from "@lowstacktechnologies/mds-client";

// Initialize the client
const client = new MdsClient(
  "http://localhost:3000",  // Server URL
  "your-client-id",         // Client ID
  "your-private-key-base64" // Ed25519 private key (Base64 or OpenSSH format)
);

// Send an email
const response = await client.sendEmail({
  from: { address: "sender@example.com", name: "Sender Name" },
  to: "recipient@example.com",
  subject: "Hello World",
  content: { body: "This is the email body", isHtml: false }
});

console.log(response.message); // "Email accepted for delivery"

// Send an SMS
const smsResponse = await client.sendSms({
  senderName: "MyApp",
  to: "+1234567890",
  content: { body: "Hello from MDS!" }
});
```

## Key Formats

The client supports multiple private key formats:

- **Base64**: Raw 64-byte Ed25519 private key or 32-byte seed
- **OpenSSH**: Keys generated with `ssh-keygen -t ed25519`
- **Hex**: 64 or 128 character hex strings

### Generating a Key Pair

```bash
ssh-keygen -t ed25519 -f mds_key -N ""
```

Then encode the private key for use:
```bash
cat mds_key | base64 -w 0
```

## CLI Test Utility

The package includes an interactive CLI for testing:

```bash
# Run from cloned repository
bun run cli

# Run directly with Bun (via npm)
bunx @lowstacktechnologies/mds-client

# Or if installed globally
mds-cli
```

The CLI will prompt you for server URL, credentials, and message details.

## API Reference

### `MdsClient`

#### Constructor
```typescript
new MdsClient(serverUrl: string, clientId: string, privateKey: string | Uint8Array)
```

#### Methods

- `sendEmail(request: EmailRequest): Promise<SuccessResponse>`
- `sendSms(request: SmsRequest): Promise<SmsSuccessResponse>`
- `health(): Promise<{ status: string; timestamp: string }>`

## Types

```typescript
interface EmailRequest {
  from: { address: string; name?: string };
  to: string | EmailContact | (string | EmailContact)[];
  subject: string;
  content?: { body: string; isHtml?: boolean } | { template: { name: string; data: Record<string, unknown> } };
}

interface SmsRequest {
  senderName: string;
  to: string | { phone: string; country: string } | (string | { phone: string; country: string })[];
  content?: { body: string } | { template: { name: string; data: Record<string, unknown> } };
}
```
npm package: @lowvisiondave/classnames
Description: `classNames` is a utility function that merges classes conditionally and removes Tailwind CSS style conflicts.
Latest version: 1.0.9

# @lowvisiondave/classnames

`classNames` is a utility function that merges classes conditionally and removes Tailwind CSS style conflicts.

Based on [clsx](https://github.com/lukeed/clsx) and [tailwind-merge](https://github.com/dcastil/tailwind-merge).

## Usage

By passing the `className` prop as the last argument to the `classNames` function, it allows us to override styles in another component.

Typically with Tailwind CSS the only way to override `w-10` with `w-5` is to remove `w-10`. `classNames` takes care of those conflicts automatically.

```tsx
import { classNames } from "@lowvisiondave/classnames";

interface BoxProps {
    className?: string;
}

export const Box = function Box({ className }: BoxProps) {
    const classes = classNames("h-10 w-10 bg-black", className);

    return <div className={classes} />; // <div class="h-10 w-10 bg-black" />
};

export const SmallBox = function SmallBox() {
    return <Box className="h-5 w-5" />; // <div class="h-5 w-5 bg-black" />
};
```
npm package: @lowvisiondave/eslint-config
Description: A shared config file for [ESLint](https://eslint.org/) with TypeScript support.
Latest version: 0.6.3

# @lowvisiondave/eslint-config

A shared config file for [ESLint](https://eslint.org/) with TypeScript support.

## Installation

Install the package with your favorite package manager:

```sh
pnpm add -D @lowvisiondave/eslint-config
```

## Usage

Add `@lowvisiondave/eslint-config` to the `extends` section of your ESLint config:

```ts
module.exports = {
    extends: "@lowvisiondave",
};
```
npm package: @lowvisiondave/jest-config
Description: A shared config file for [Jest](https://jestjs.io/) with TypeScript support.
Latest version: 0.1.3

# @lowvisiondave/jest-config

A shared config file for [Jest](https://jestjs.io/) with TypeScript support.

## Installation

Install the package with your favorite package manager:

```sh
pnpm add -D @lowvisiondave/jest-config
```

## Usage

Create a `jest.config.ts` file in the root of your package:

```ts
import { config } from "@lowvisiondave/jest-config";
import type { Config } from "@lowvisiondave/jest-config";

export default {
    ...config,
    // Additional configuration
} as Config.InitialOptions;
```
npm package: @lowvisiondave/prettier-config
Description: A shared config file for [Prettier](https://prettier.io/).
Latest version: 0.1.3

# @lowvisiondave/prettier-config

A shared config file for [Prettier](https://prettier.io/).

## Installation

Install the package with your favorite package manager:

```sh
pnpm add -D @lowvisiondave/prettier-config
```

## Usage

Create a `prettier.config.js` file in the root of your project:

```ts
module.exports = require("@lowvisiondave/prettier-config");
```
npm package: @lowvisiondave/tailwind-config
Description: A shared config file for [TailwindCSS](https://tailwindcss.com/).
Latest version: 0.1.3

# @lowvisiondave/tailwind-config

A shared config file for [TailwindCSS](https://tailwindcss.com/).

## Installation

Install the package with your favorite package manager:

```sh
pnpm add -D @lowvisiondave/tailwind-config
```

## Usage

Add `@lowvisiondave/tailwind-config` as a preset to the `tailwind.config.js` file in the root of your package:

```ts
/** @type {import('tailwindcss').Config} */
module.exports = {
    presets: [require("@lowvisiondave/tailwind-config")],
    content: ["./src/**/*.{js,ts,jsx,tsx}"],
    theme: {
        extend: {},
    },
    plugins: [],
};
```