open-index/open-npm huggingface dataset:
npm package: @kovalenko/validators
Description: match
Author: Kovalenko
Latest version: 1.0.0

# Validators

match

## Installation

```
npm install @kovalenko/validators
```

## Supported API

### Match

Validates whether input value matches specified value

Selector: `[ngcMatch]`

Name | Description
--- | ---
`@Input() ngcMatch: any` | Value to compare with


## Usage

First, import the ValidatorsModule to your module:

```typescript
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { ValidatorsModule } from '@kovalenko/validators';
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
import { AppComponent } from './app';

@NgModule({
  imports: [BrowserModule, ValidatorsModule],
  declarations: [AppComponent],
  bootstrap: [AppComponent],
})
export class AppModule {}

platformBrowserDynamic().bootstrapModule(AppModule);
```

In this example, errors will be shown when pass1 and pass2 do not match

```typescript
import { Component } from '@angular/core';

@Component({
  selector: 'app',
  template: `
    <input type="password" name="pass1" [(ngModel)]="pass1">
    <input type="password" name="pass2" [(ngModel)]="pass2" [ngcMatch]="pass1" #pass2Model="ngModel">
    <div *ngIf="pass2Model.hasError('ngcMatch')">Passwords mismatch</div>
  `,
})
export class AppComponent {
  pass1: string;
  pass2: string;
}
```

## License

MIT
npm package: @kovalenko/virtual-property
Description: Non-enumerable property for JS object
Author: Kovalenko
Latest version: 1.0.1

# Non-enumerable property for JS object

## Install

```shell
npm i @kovalenko/virtual-property
```

## Usage

```typescript
import {VirtualProperty} from '@kovalenko/virtual-property';

class MyClass {
  prop1: string;

  prop2: number;

  @VirtualProperty
  virtualProperty: string;
}

const myObj = new MyClass();
myObj.prop1 = 'foo';
myObj.prop2 = 0;

// does not enumerate
myObj.virtualProperty = 'bar';

const str = JSON.stringify(myObj); // {"prop1": "foo", "prop2": 0}
```

## License
MIT
npm package: @kovalenko/watch-title
Description: ## Installation
Author: Kovalenko
Latest version: 1.0.0

# Material table

## Installation

```
npm i @kovalenko/watch-title
```

## Usage

Restores page title when child route destroys.

```typescript
import {Component, inject, OnInit} from '@angular/core';
import {WatchTitle} from '@kovalenko/watch-title';
import {ActivatedRoute, Router} from '@angular/router';
import {Title} from '@angular/platform-browser';

@Component({
  selector: 'app-route',
  template: '',
})
export class RouteComponent implements OnInit {
  private readonly route = inject(ActivatedRoute);

  private readonly router = inject(Router);
  
  private readonly title = inject(Title);

  @WatchTitle()
  setTitle(groupName: string): void {
    this.title.setTitle(groupName);
  }

  ngOnInit(): void {
    this.setTitle('New book');
  }
}
```
npm package: @kovaliovev/ip-tool
Description: Node.js library for processing IP addresses
Author: Evgheniy Kovaliov
Latest version: 1.5.0

<div align="center">
  <a href="https://github.com/kovaliovev/ip-tool">
    <img
      width="480"
      alt="IP-TOOL - easy work with ip addresses"
      src="https://user-images.githubusercontent.com/111194749/236842615-4a617854-c5b1-4500-a64b-b7e0a9fb327e.png"
    />
  </a>
</div>

# ip-tool
📂 Simple node.js library for processing IP addresses, networks, subnet/wildcard masks, prefixes.    
   
![NPM Downloads](https://img.shields.io/npm/dy/@kovaliovev/ip-tool?color=rgb%280%2C191%2C64%29&label=NPM%20Downloads&style=flat-square)   

## IPv4 functions
- validation
- converting
- network info getting
- subnetting

## IPv6 functions
- validation
- converting

_In development..._

# Installation

### git

```shell
git clone https://github.com/kovaliovev/ip-tool.git
```
### npm
```shell
npm i @kovaliovev/ip-tool
```

# Usage
```js
const { IPv4 } = require('ip-tool');
const ipv4 = new IPv4();

ipv4.isValid('22.7.20.20'); // true
ipv4.isMaskValid('22.7.20.20'); // false
ipv4.isPrivate('198.19.0.30'); // true

ipv4.toArray('100.99.255.7'); // [100, 99, 255, 7]
ipv4.toInteger('220.50.89.255'); // 3694287359
ipv4.toBinary('10.0.0.111'); // '00001010.00000000.00000000.01101111'

ipv4.getClass('192.34.60.0'); // 'C'
ipv4.getNetworkAddress('35.88.2.190', '255.255.192.0'); // '35.88.0.0/18'
ipv4.getNetworkBroadcastAddress('35.88.0.0/18'); // '35.88.63.255'
ipv4.getNetworkUsableHostRange('35.88.0.0/18'); // { firstHostAddress: '35.88.0.1', lastHostAddress: '35.88.63.254' }
ipv4.getNetworkInfo('100.41.0.0/16');
// {
//   address: '100.41.0.0',
//   binaryAddress: '01100100.00101001.00000000.00000000',
//   prefix: 16,
//   mask: '255.255.0.0',
//   binaryMask: '11111111.11111111.00000000.00000000',
//   wildcardMask: '0.0.255.255',
//   networkClass: 'A',
//   integerId: 1680408576,
//   totalHosts: 65536,
//   firstHostAddress: '100.41.0.1',
//   lastHostAddress: '100.41.255.254',
//   broadcastAddress: '100.41.255.255',
//   isPrivate: false
// }

ipv4.splitNetworkInHalf('45.0.64.0/18'); // [ '45.0.64.0/19', '45.0.96.0/19' ]
ipv4.networkSubnet('12.32.0.0/20', [500, 254, 255, 128, 100, 50, 39, 15, 14]);
// {
//   '12.32.0.0/23': 512,
//   '12.32.2.0/24': 256,
//   '12.32.3.0/23': 512,
//   '12.32.5.0/24': 256,
//   '12.32.6.0/25': 128,
//   '12.32.6.128/26': 64,
//   '12.32.6.192/26': 64,
//   '12.32.7.0/27': 32,
//   '12.32.7.32/28': 16
// }
```
# Documentation
**All library documentation in** [**github-wiki**](https://github.com/kovaliovev/ip-tool/wiki)**!**
npm package: @kovalson/eventful
Description: A TypeScript package that provides a global event bus for your application.
Author: kovalson
Latest version: 1.1.0

[![npm-version][npm-version-badge]][npm-version-href]
[![npm downloads][npm-downloads-badge]][npm-downloads-href]
[![License][license-badge]][license-href]

# Eventful

> Manage global application events with ease.

Eventful is a TypeScript package that provides a global event bus for your application. Built from the ground up, so it
does not clutter your project and does not require active maintenance.

See the full documentation [here](https://eventful.kovalson.dev).

## Example

```typescript
// eventBus.ts
import { createEventBus } from '@kovalson/eventful';

export const eventBus = createEventBus();
```

```typescript
// dto/IUser
export interface IUser {
  // ...
}
```

```typescript
// events/UserUpdated
import { AppEvent } from '@kovalson/eventful';
import { IUser } from 'dto/IUser';

export class UserUpdated extends AppEvent {
  public user: IUser;
  
  public constructor(user: IUser) {
    super();
    this.user = IUser;
  }
}
```

```typescript
// index.ts
import { eventBus } from 'eventBus';
import { UserUpdated } from 'events/UserUpdated';

eventBus.listen(UserUpdated, (event) => {
  if (event.user.active) {
    // ...
  }
});
```

```typescript
// some-api.ts
import { eventBus } from 'eventBus';
import { UserUpdated } from 'events/UserUpdated';
import { IUser } from 'dto/IUser';

fetch('/user/id')
  .then((response) => response.json())
  .then((data) => {
    eventBus.dispatch(new UserUpdated(data as IUser));
  });
```

[npm-version-href]: https://npmjs.com/package/@kovalson/eventful
[npm-version-badge]: https://img.shields.io/npm/v/@kovalson/eventful/latest.svg
[npm-downloads-href]: https://npmjs.com/package/@kovalson/eventful
[npm-downloads-badge]: https://img.shields.io/npm/dm/@kovalson/eventful.svg
[license-href]: https://npmjs.com/package/@kovalson/eventful
[license-badge]: https://img.shields.io/npm/l/@kovalson/eventful.svg
npm package: @kovalson/prevue
Description: A Vue 3 package based on Pinia that helps to manage resource models.
Author: kovalson
Latest version: 5.0.1

# Prevue

Prevue (pronounced as "preview") is a Vue 3 package based on Pinia that helps to manage BREAD/CRUD data exchange with
external servers. The Prevue idea roots from Pinia-ORM package and tries to take the most of its strengths while
simplifying usage.

See the [full documentation](https://prevue.kovalson.dev).

## Quick example

Take a quick look at Prevue in action.

First define a resource model:

```typescript
import { defineController, Model } from '@kovalson/prevue';

// Define resource model with defaults
class User extends Model {
  protected $convertCase = true;
  
  readonly id: string = '';
  readonly firstName: string | null = null;
  readonly lastName: string | null = null;
  readonly email: string = '';
  readonly active: boolean = false;
}

// Define a controller
const useUserController = defineController(User);

// Export required objects
export {
  User,
  useUserController,
};
```

Then use it wherever you like:
```vue
<template>
  <div>
    <template v-if="repository.isNotEmpty()">
      <UserCard
        v-for="user of repository.all()"
        :key="user.id"
        :user="user"
      />
    </template>
    <UsersNotFound
      v-else
    />
  </div>
</template>

<script lang="ts" setup>
import UserCard from '~/components/user/UserCard.vue';
import UsersNotFound from '~/components/user/UsersNotFound.vue';
import { useUserController } from '~/models/User';

const { fetchAll, repository } = useUserController();

fetchAll();
</script>
```

Note several things in the example above:

- The `fetchAll()` method will automatically make an API request and await the response.
- The response is automatically converted into an array of `User` objects.
- The objects are automatically saved in the `repository` that instantiates Pinia store by default (though it can be a
  local repository as well).
- The `$convertCase` property will cause the incoming response object keys to be automatically converted to `camelCase`
  so that every model stays consistent throughout the app.

This was a basic usage example. See the [full documentation](https://prevue.kovalson.dev) to learn more on how Prevue
can make your coding easier.
npm package: @kovamind/mcp-server
Description: MCP server for Kova Mind — use AI memory in Claude Desktop, Cursor, and more
Author: Kova Mind
Latest version: 0.3.0

# @kovamind/mcp-server

[![npm](https://img.shields.io/npm/v/@kovamind/mcp-server)](https://www.npmjs.com/package/@kovamind/mcp-server)

MCP server for **Kova Mind** — use AI memory in Claude Desktop, Cursor, Windsurf, VS Code, and any MCP-compatible client.

## Quick setup

### Claude Desktop

Add to your `claude_desktop_config.json`:

```json
{
  "mcpServers": {
    "kovamind": {
      "command": "npx",
      "args": ["-y", "@kovamind/mcp-server"],
      "env": {
        "KOVAMIND_API_KEY": "km_live_xxx",
        "KOVAMIND_USER_ID": "my-user"
      }
    }
  }
}
```

### Cursor

Add to your Cursor MCP settings:

```json
{
  "mcpServers": {
    "kovamind": {
      "command": "npx",
      "args": ["-y", "@kovamind/mcp-server"],
      "env": {
        "KOVAMIND_API_KEY": "km_live_xxx",
        "KOVAMIND_USER_ID": "my-user"
      }
    }
  }
}
```

### VS Code

Add to `.vscode/mcp.json`:

```json
{
  "servers": {
    "kovamind": {
      "command": "npx",
      "args": ["-y", "@kovamind/mcp-server"],
      "env": {
        "KOVAMIND_API_KEY": "km_live_xxx",
        "KOVAMIND_USER_ID": "my-user"
      }
    }
  }
}
```

### Windsurf

Add to your Windsurf MCP config:

```json
{
  "mcpServers": {
    "kovamind": {
      "command": "npx",
      "args": ["-y", "@kovamind/mcp-server"],
      "env": {
        "KOVAMIND_API_KEY": "km_live_xxx",
        "KOVAMIND_USER_ID": "my-user"
      }
    }
  }
}
```

## Environment variables

| Variable | Required | Default | Description |
|----------|----------|---------|-------------|
| `KOVAMIND_API_KEY` | Yes | — | Your Kova Mind API key |
| `KOVAMIND_API_URL` | No | `https://api.kovamind.ai` | API base URL |
| `KOVAMIND_USER_ID` | No | — | Default user ID for all operations |

## Available tools

| Tool | Description |
|------|-------------|
| `memory_extract` | Extract memory patterns from a conversation |
| `memory_recall` | Retrieve relevant memories for a context |
| `memory_reinforce` | Confirm, deny, strengthen, or weaken a pattern |
| `memory_surprise` | Score how novel content is vs existing memory |
| `memory_health` | Check API health status |

## Get an API key

Sign up at [kovamind.ai](https://kovamind.ai) to get your API key.

## License

MIT
npm package: @kovamind/openclaw-memory
Description: OpenClaw memory plugin — Kova Mind as your agent's memory backend
Author: Kova Mind
Latest version: 0.3.0

# @kovamind/openclaw-memory

OpenClaw memory plugin — use [Kova Mind](https://kovamind.ai) as your agent's memory backend.

Replaces OpenClaw's local file-based memory with Kova Mind's cloud API. Your agent gets persistent, learning memory with pattern extraction, surprise scoring, and reinforcement — no local embeddings or SQLite needed.

## Install

```bash
openclaw plugins install @kovamind/openclaw-memory
```

## Configure

Set the memory slot to use Kova Mind:

```bash
openclaw config set plugins.slots.memory memory-kovamind
```

Configure your API key and user ID:

```bash
openclaw config set plugins.entries.memory-kovamind.apiKey "km_live_xxx"
openclaw config set plugins.entries.memory-kovamind.userId "axiom"
```

Or add to your `openclaw.json`:

```json
{
  "plugins": {
    "slots": {
      "memory": "memory-kovamind"
    },
    "entries": {
      "memory-kovamind": {
        "apiKey": "km_live_xxx",
        "userId": "axiom",
        "autoRecall": true,
        "autoCapture": true
      }
    }
  }
}
```

Restart the gateway:

```bash
openclaw gateway restart
```

## What It Does

| Feature | How |
|---------|-----|
| **Auto-Recall** | Before each agent turn, searches Kova Mind for relevant memories and injects them into context |
| **Auto-Capture** | After each turn, extracts patterns from user messages and stores them in Kova Mind |
| **memory_recall** | Agent tool — search memories by natural language query |
| **memory_store** | Agent tool — extract and store patterns from text |
| **memory_forget** | Agent tool — deny a stored pattern (GDPR-friendly) |
| **memory_surprise** | Agent tool — score how novel content is vs existing memory |
| **memory_reinforce** | Agent tool — confirm or strengthen a validated pattern |

## Config Options

| Option | Default | Description |
|--------|---------|-------------|
| `apiKey` | required | Your `km_live_xxx` API key |
| `userId` | required | Default user ID for memory operations |
| `apiUrl` | `https://api.kovamind.ai` | API base URL |
| `autoRecall` | `true` | Inject memories before each turn |
| `autoCapture` | `true` | Extract patterns after each turn |
| `maxRecallPatterns` | `5` | Max memories injected per turn |

## CLI

```bash
openclaw kovamind status              # Check API health
openclaw kovamind search "dark mode"  # Search memories
openclaw kovamind surprise "new info" # Score novelty
```

## How It Compares

| Feature | memory-core | memory-lancedb | memory-kovamind |
|---------|-------------|----------------|-----------------|
| Storage | Local SQLite + files | Local LanceDB | Cloud API |
| Embeddings | Local/OpenAI/Gemini | OpenAI | Server-side (zero local) |
| Pattern extraction | None (raw text) | Rule-based triggers | LLM-powered |
| Surprise scoring | No | No | Yes |
| Reinforcement | No | No | Yes (confirm/deny/strengthen/weaken) |
| Cross-device | No | No | Yes |
| Dependencies | None | LanceDB + OpenAI | None (just HTTP) |

## Get an API key

Sign up at [kovamind.ai](https://kovamind.ai).

## License

MIT
npm package: @kovapatrik/esphomeapi-manager-android-arm-eabi
Description: This is the **armv7-linux-androideabi** binary for `@kovapatrik/esphomeapi-manager`
Latest version: 0.4.0

# `@kovapatrik/esphomeapi-manager-android-arm-eabi`

This is the **armv7-linux-androideabi** binary for `@kovapatrik/esphomeapi-manager`
npm package: @kovapatrik/esphomeapi-manager-android-arm64
Description: This is the **aarch64-linux-android** binary for `@kovapatrik/esphomeapi-manager`
Latest version: 0.4.0

# `@kovapatrik/esphomeapi-manager-android-arm64`

This is the **aarch64-linux-android** binary for `@kovapatrik/esphomeapi-manager`
npm package: @kovapatrik/esphomeapi-manager-darwin-arm64
Description: This is the **aarch64-apple-darwin** binary for `@kovapatrik/esphomeapi-manager`
Latest version: 0.4.0

# `@kovapatrik/esphomeapi-manager-darwin-arm64`

This is the **aarch64-apple-darwin** binary for `@kovapatrik/esphomeapi-manager`
npm package: @kovapatrik/esphomeapi-manager-darwin-x64
Description: This is the **x86_64-apple-darwin** binary for `@kovapatrik/esphomeapi-manager`
Latest version: 0.4.0

# `@kovapatrik/esphomeapi-manager-darwin-x64`

This is the **x86_64-apple-darwin** binary for `@kovapatrik/esphomeapi-manager`
npm package: @kovapatrik/esphomeapi-manager-linux-arm-gnueabihf
Description: This is the **armv7-unknown-linux-gnueabihf** binary for `@kovapatrik/esphomeapi-manager`
Latest version: 0.4.0

# `@kovapatrik/esphomeapi-manager-linux-arm-gnueabihf`

This is the **armv7-unknown-linux-gnueabihf** binary for `@kovapatrik/esphomeapi-manager`
npm package: @kovapatrik/esphomeapi-manager-linux-arm64-gnu
Description: This is the **aarch64-unknown-linux-gnu** binary for `@kovapatrik/esphomeapi-manager`
Latest version: 0.4.0

# `@kovapatrik/esphomeapi-manager-linux-arm64-gnu`

This is the **aarch64-unknown-linux-gnu** binary for `@kovapatrik/esphomeapi-manager`
npm package: @kovapatrik/esphomeapi-manager-linux-arm64-musl
Description: This is the **aarch64-unknown-linux-musl** binary for `@kovapatrik/esphomeapi-manager`
Latest version: 0.4.0

# `@kovapatrik/esphomeapi-manager-linux-arm64-musl`

This is the **aarch64-unknown-linux-musl** binary for `@kovapatrik/esphomeapi-manager`
npm package: @kovapatrik/esphomeapi-manager-linux-x64-gnu
Description: This is the **x86_64-unknown-linux-gnu** binary for `@kovapatrik/esphomeapi-manager`
Latest version: 0.4.0

# `@kovapatrik/esphomeapi-manager-linux-x64-gnu`

This is the **x86_64-unknown-linux-gnu** binary for `@kovapatrik/esphomeapi-manager`
npm package: @kovapatrik/esphomeapi-manager-linux-x64-musl
Description: This is the **x86_64-unknown-linux-musl** binary for `@kovapatrik/esphomeapi-manager`
Latest version: 0.4.0

# `@kovapatrik/esphomeapi-manager-linux-x64-musl`

This is the **x86_64-unknown-linux-musl** binary for `@kovapatrik/esphomeapi-manager`
npm package: @kovapatrik/esphomeapi-manager-win32-arm64-msvc
Description: This is the **aarch64-pc-windows-msvc** binary for `@kovapatrik/esphomeapi-manager`
Latest version: 0.4.0

# `@kovapatrik/esphomeapi-manager-win32-arm64-msvc`

This is the **aarch64-pc-windows-msvc** binary for `@kovapatrik/esphomeapi-manager`
npm package: @kovapatrik/esphomeapi-manager-win32-x64-msvc
Description: This is the **x86_64-pc-windows-msvc** binary for `@kovapatrik/esphomeapi-manager`
Latest version: 0.4.0

# `@kovapatrik/esphomeapi-manager-win32-x64-msvc`

This is the **x86_64-pc-windows-msvc** binary for `@kovapatrik/esphomeapi-manager`
npm package: @kovensky/babel-jest
Description: Jest plugin to use babel for transformation (babel 7 beta version).
Latest version: 21.2.1-1

# babel-jest

[Babel](https://github.com/babel/babel) [jest](https://github.com/facebook/jest) plugin

## Usage

If you are already using `jest-cli`, just add `babel-jest` and it will automatically compile JavaScript code using babel.

```
npm install --save-dev babel-jest
```

If you would like to write your own preprocessor, uninstall and delete babel-jest and set the [config.transform](http://facebook.github.io/jest/docs/configuration.html#transform-object-string-string) option to your preprocessor.

## Setup

*Note: this step is only required if you are using `babel-jest` with additional code preprocessors.*

To explicitly define `babel-jest` as a transformer for your JavaScript code, map *.js* files to the `babel-jest` module.

```json
"transform": {
  "^.+\\.jsx?$": "babel-jest"
},
```
npm package: @kovensky/redux-promise
Description: FSA-compliant promise middleware for Redux.
Author: Andrew Clark
Latest version: 0.6.0-3

redux-promise
=============

[![build status](https://img.shields.io/travis/Kovensky/redux-promise/master.svg?style=flat-square)](https://travis-ci.org/Kovensky/redux-promise)
[![npm version](https://img.shields.io/npm/v/@kovensky/redux-promise.svg?style=flat-square)](https://www.npmjs.com/package/@kovensky/redux-promise)

[FSA](https://github.com/acdlite/flux-standard-action)-compliant promise [middleware](https://github.com/gaearon/redux/blob/master/docs/middleware.md) for Redux.

```js
npm install --save redux-promise
```

## Usage

```js
import promiseMiddleware from 'redux-promise';
```

The default export is a middleware function. If it receives a promise, it will dispatch the resolved value of the promise. It will not dispatch anything if the promise rejects.

If it receives an Flux Standard Action whose `payload` is a promise, it will either

- dispatch a copy of the action with the resolved value of the promise, and set `status` to `success`.
- dispatch a copy of the action with the rejected value of the promise, and set `status` to `error`.

The middleware returns the original promise to the caller so that it can wait for the operation to finish before continuing. This is especially useful for server-side rendering. If you find that a promise is not being returned, ensure that all middleware before it in the chain is also returning its `next()` call to the caller.

## Using in combination with redux-actions

Because it supports FSA actions, you can use redux-promise in combination with [redux-actions](https://github.com/acdlite/redux-actions).

### Example: Async action creators

This works just like in Flummox:

```js
createAction('FETCH_THING', async id => {
  const result = await somePromise;
  return result.someValue;
});
```

Unlike Flummox, it will not perform a dispatch at the beginning of the operation, only at the end. We're still looking into the [best way to deal with optimistic updates](https://github.com/acdlite/flux-standard-action/issues/7). If you have a suggestion, let me know.


### Example: Integrating with a web API module

Say you have an API module that sends requests to a server. This is a common pattern in Flux apps. Assuming your module supports promises, it's really easy to create action creators that wrap around your API:

```js
import { WebAPI } from '../utils/WebAPI';

export const getThing = createAction('GET_THING', WebAPI.getThing);
export const createThing = createAction('POST_THING', WebAPI.createThing);
export const updateThing = createAction('UPDATE_THING', WebAPI.updateThing);
export const deleteThing = createAction('DELETE_THING', WebAPI.deleteThing);
```

(You'll probably notice how this could be simplified this even further using something like lodash's `mapValues()`.)
npm package: @kovetskiy/jira-cl
Description: A Jira command line client
Author: Eduardo Henao & Miguel Henao
Latest version: 1.2.2

# jira-cli

This is a command line client Jira API, useful to create new issues.

![jira-cli](https://user-images.githubusercontent.com/662930/29991463-f3332c60-8f4c-11e7-8ab1-266aff8dd91a.gif)

## Getting Started

*  Install with npm: `npm install -g jira-cl`
*  Run it with `jira [command] [arguments]`

### Initial Setup
When running the first time (or if you didn't create a config file), it will ask you for your Jira host, username, password and if you use 'https' protocol and a new config file will be created in `~/.jira-cli.json` with this data. You can create or modify this file manually.

## Documentation

To get detailed information about JIRA-CLI usage please visit the documentation which is hosted [here](http://docs.jiracli.com).

## License

Copyright (c) 2019 by Miguel Henao & Eduardo Henao
Licensed under the MIT license.
npm package: @kovi-soft/cdk-alchemy-integrator
Description: > :warning: **This package is still under development!**
Author: Žan Kovač
Latest version: 1.0.0-beta.3

# CDK Alchemy Integrator

> :warning: **This package is still under development!**

## Useful commands for development

* `pnpm run build`   compile typescript to js
* `pnpm run watch`   watch for changes and compile
* `pnpm run test`    perform the jest unit tests
* `pnpm run lint`    run eslint across this package
* `pnpm run format`  apply prettier format
npm package: @kovi-soft/cdk-alchemy-webhooks
Description: AWS CDK Library for interaction with Alchemy Notify API
Author: Žan Kovač
Latest version: 1.0.0-beta.5

# CDK Alchemy Webhooks

AWS CDK Library for interaction with Alchemy Notify API

> :warning: **This package is still under development!**

## Useful commands for development

* `pnpm run build`   compile typescript to js
* `pnpm run watch`   watch for changes and compile
* `pnpm run test`    perform the jest unit tests
* `pnpm run lint`    run eslint across this package
* `pnpm run format`  apply prettier format
npm package: @kovio/chatbot-ad
Description: Official SDK for chatbot ad integration - Easy ad integration for publishers
Author: Kovio
Latest version: 1.0.2

# @kovio/chatbot-ad

Official SDK for integrating chatbot ads into your application.

## Installation

```bash
npm install @kovio/chatbot-ad
```

## Quick Start

```tsx
import { ChatbotAd } from '@kovio/chatbot-ad'

<ChatbotAd
  publisherId="your-publisher-id"
  keyword="technology,ai"  // Multiple keywords supported!
  theme="dark"             // Optional: 'light' or 'dark' (default: 'dark')
/>
```

**That's it!** The SDK handles everything automatically:
- ✅ Fetches relevant ads
- ✅ Tracks impressions & clicks
- ✅ Displays ads beautifully
- ✅ Supports light & dark themes

## Documentation

**See the main [documentation](https://kvlabscode.github.io/whitelist-website/docs) for complete guidance.**

The guide includes:
- Chatbot integration
- Custom rendering
- API reference
- Analytics & tracking
- Troubleshooting

## Features

- ✅ Pre-configured API base URL (no setup needed)
- ✅ Support for multiple comma-separated keywords
- ✅ Automatic impression & click tracking
- ✅ Device analytics collection
- ✅ Light & dark theme support
- ✅ TypeScript support
- ✅ Simple hooks for custom implementations
- ✅ Text and Markdown formatting for chatbot responses