open-index/open-npm huggingface dataset:
npm package: @forgesworn/ring-sig
Description: SAG and LSAG ring signatures on secp256k1 — prove group membership without revealing identity
Author: Darren
Latest version: 3.0.0

# @forgesworn/ring-sig

**Nostr:** [`npub1mgvlrnf5hm9yf0n5mf9nqmvarhvxkc6remu5ec3vf8r0txqkuk7su0e7q2`](https://njump.me/npub1mgvlrnf5hm9yf0n5mf9nqmvarhvxkc6remu5ec3vf8r0txqkuk7su0e7q2)

SAG and LSAG ring signatures on secp256k1.

**Prove group membership without revealing identity.**

## Use cases

- **Anonymous group membership proofs** — prove you are one of N key holders without revealing which one
- **Whistleblowing** — sign a statement as "a member of this organisation" without self-identifying
- **Privacy-preserving attestation** — "a licensed professional verified this" without naming the professional
- **Double-action prevention** (LSAG) — detect if the same key signs twice in the same context, without linking signatures across contexts

## Install

```bash
npm install @forgesworn/ring-sig
```

## Usage

### SAG — Spontaneous Anonymous Group signatures

```typescript
import { ringSign, ringVerify } from '@forgesworn/ring-sig';

// A ring of x-only public keys (32 bytes, hex)
const ring = [pubkey0, pubkey1, pubkey2, pubkey3];

// Sign as ring member at index 2
const sig = ringSign('my message', ring, 2, privateKey2);

// Anyone can verify the signature is from a ring member
const valid = ringVerify(sig); // true
```

### LSAG — Linkable SAG (double-action detection via key images)

```typescript
import { lsagSign, lsagVerify, computeKeyImage, hasDuplicateKeyImage } from '@forgesworn/ring-sig';

const electionId = 'vote-2026-q1';
const ring = [pubkey0, pubkey1, pubkey2];

// Sign
const sig = lsagSign('candidate-A', ring, 0, privateKey0, electionId);

// Verify
const valid = lsagVerify(sig); // true

// Detect double-signing: key images are deterministic per (key, electionId) pair
const keyImage = computeKeyImage(privateKey0, pubkey0, electionId);
const isDuplicate = hasDuplicateKeyImage(keyImage, existingKeyImages);
```

## Domain separators

Both `ringSign` and `lsagSign` accept an optional `domain` parameter (defaults to `'sag-v1'` / `'lsag-v1'`). Pass a custom domain if you need cross-protocol isolation:

```typescript
const sig = ringSign(message, ring, index, privateKey, 'my-app-v1');
```

## Error classes

- `RingSignatureError` — base class
- `ValidationError` — malformed inputs, bounds exceeded
- `CryptoError` — invalid keys, failed operations

## Cryptography

- **SAG** (Spontaneous Anonymous Group): Schnorr-based ring signature. Signature size is O(n) with the ring.
- **LSAG** (Linkable SAG): Adds a deterministic key image `I = x * H_p(P || context)`. Signatures by the same key in the same context produce identical key images, enabling double-action detection without cross-context linkability.
- Domain separation: `'sag-v1'`, `'lsag-v1'`, `'secp256k1-hash-to-point-v1'`
- Maximum ring size: 1000 members

## Licence

MIT
npm package: @forgetools/napi-sample
Description: Template project for writing node package with napi-rs
Latest version: 1.0.6

# `@napi-rs/package-template`

![https://github.com/napi-rs/package-template/actions](https://github.com/napi-rs/package-template/workflows/CI/badge.svg)

> Template project for writing node packages with napi-rs.

# Usage

1. Click **Use this template**.
2. **Clone** your project.
3. Run `yarn install` to install dependencies.
4. Run `yarn napi rename -n [@your-scope/package-name] -b [binary-name]` command under the project folder to rename your package.

## Install this test package

```bash
yarn add @napi-rs/package-template
```

## Ability

### Build

After `yarn build/npm run build` command, you can see `package-template.[darwin|win32|linux].node` file in project root. This is the native addon built from [lib.rs](./src/lib.rs).

### Test

With [ava](https://github.com/avajs/ava), run `yarn test/npm run test` to testing native addon. You can also switch to another testing framework if you want.

### CI

With GitHub Actions, each commit and pull request will be built and tested automatically in [`node@20`, `@node22`] x [`macOS`, `Linux`, `Windows`] matrix. You will never be afraid of the native addon broken in these platforms.

### Release

Release native package is very difficult in old days. Native packages may ask developers who use it to install `build toolchain` like `gcc/llvm`, `node-gyp` or something more.

With `GitHub actions`, we can easily prebuild a `binary` for major platforms. And with `N-API`, we should never be afraid of **ABI Compatible**.

The other problem is how to deliver prebuild `binary` to users. Downloading it in `postinstall` script is a common way that most packages do it right now. The problem with this solution is it introduced many other packages to download binary that has not been used by `runtime codes`. The other problem is some users may not easily download the binary from `GitHub/CDN` if they are behind a private network (But in most cases, they have a private NPM mirror).

In this package, we choose a better way to solve this problem. We release different `npm packages` for different platforms. And add it to `optionalDependencies` before releasing the `Major` package to npm.

`NPM` will choose which native package should download from `registry` automatically. You can see [npm](./npm) dir for details. And you can also run `yarn add @napi-rs/package-template` to see how it works.

## Develop requirements

- Install the latest `Rust`
- Install `Node.js@10+` which fully supported `Node-API`
- Install `yarn@1.x`

## Test in local

- yarn
- yarn build
- yarn test

And you will see:

```bash
$ ava --verbose

  ✔ sync function from native code
  ✔ sleep function from native code (201ms)
  ─

  2 tests passed
✨  Done in 1.12s.
```

## Release package

Ensure you have set your **NPM_TOKEN** in the `GitHub` project setting.

In `Settings -> Secrets`, add **NPM_TOKEN** into it.

When you want to release the package:

```bash
npm version [<newversion> | major | minor | patch | premajor | preminor | prepatch | prerelease [--preid=<prerelease-id>] | from-git]

git push
```
npm package: @forgleaner/cz-customizable
Description: A customizable commitizen adapter.
Author: Jeremy Tang
Latest version: 6.3.0

# cz-customizable

[![build][travis-image]][travis-url]
[![commitizen][commitizen-image]][commitizen-url]
[![download][download-image]][download-url]
[![npm][npm-image]][npm-url]
[![semantic][semantic-image]][semantic-url]
 
[npm-image]: https://img.shields.io/npm/v/@forgleaner/cz-customizable.svg?color=blue&logo=npm
[npm-url]: https://npmjs.org/package/@forgleaner/cz-customizable
[travis-image]: https://travis-ci.com/forgleaner/cz-customizable.svg?branch=master?color=green&token=i21P7stb8bZPNjZakvsi&branch=master
[travis-url]: https://travis-ci.com/forgleaner/cz-customizable
[download-image]: https://img.shields.io/npm/dw/handypack.svg?color=yellowgreen
[download-url]: https://npmjs.com/package/@forgleaner/cz-customizable
[commitizen-image]: https://img.shields.io/badge/commitizen-friendly-green.svg
[commitizen-url]: http://commitizen.github.io/cz-cli/
[semantic-image]: https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg?style=flat-square
[semantic-url]: https://opensource.org/licenses/MIT

一个可定制的commitizen适配器，为choices添加了前置的序号，当提交的消息类型数量较多时候，上下切换选择的时候可以显得更清晰。

![screenshot](docs/screenshot.png)

## Install

```bash
$ npm i -D @forgleaner/cz-customizable
```

## Usage
添加以下代码至 package.json

```bash
...
"config": {
  "commitizen": {
    "path": "node_modules/@forgleaner/cz-customizable"
  }
}
```

## Configuration
配置可参考 [leonardoanalista/cz-customizable](https://github.com/leonardoanalista/cz-customizable)
npm package: @forgleaner/eslint-config
Description: ESLint Config for JavaScript Style with.
Author: Jeremy Tang
Latest version: 1.6.1

# eslint-config

[![build][travis-image]][travis-url]
[![commitizen][commitizen-image]][commitizen-url]
[![prettier][prettier-image]][prettier-url]
[![download][download-image]][download-url]
[![npm][npm-image]][npm-url]
[![semantic][semantic-image]][semantic-url]

[npm-image]: https://img.shields.io/npm/v/@forgleaner/eslint-config.svg?color=blue&logo=npm
[npm-url]: https://npmjs.com/package/@forgleaner/eslint-config
[travis-image]: https://travis-ci.com/forgleaner/eslint-config.svg?color=green&token=i21P7stb8bZPNjZakvsi&branch=master
[travis-url]: https://travis-ci.com/forgleaner/eslint-config
[download-image]: https://img.shields.io/npm/dw/@forgleaner/eslint-config.svg?color=yellowgreen
[download-url]: https://npmjs.com/package/@forgleaner/eslint-config
[commitizen-image]: https://img.shields.io/badge/commitizen-friendly-green.svg
[commitizen-url]: http://commitizen.github.io/cz-cli/
[prettier-image]: https://img.shields.io/badge/styled_with-prettier-ff69b4.svg?logo=prettier
[prettier-url]: https://github.com/prettier/prettier
[semantic-image]: https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg?style=flat-square
[semantic-url]: https://opensource.org/licenses/MIT

eslint插件配置，包含js、ts、vue通用规则

**基于 [eslint-config-standard](https://github.com/standard/eslint-config-standard).**

## Install
```bash
npm i @forgleaner/eslint-config -D
```

## 使用
添加以下代码到 `.eslintrc.js`
```javascript
module.exports = {
  "extends": "@forgleaner/eslint-config"
}
```

## 添加对ts和vue文件的规则支持
添加以下代码到 `.eslintrc.js`
```javascript
// 如果您的项目使用 typescript，添加 ts 配置
const tslint = require('@forgleaner/eslint-config/ts');
// const vueJSlint = require('@forgleaner/eslint-config/vue-js');
// 如果您的项目使用 vue+typescript，推荐使用 vue-ts 配置
const vueTSlint = require('@forgleaner/eslint-config/vue-ts');

module.exports = {
  extends: '@forgleaner/eslint-config',
  overrides: [
    tslint,
    // vueJSlint,
    vueTSlint
  ]
}
```

## 或者可以在您的项目中使用此插件针对 [prettier](https://github.com/prettier/prettier) 的部分配置
添加以下代码到 `package.json`
```javascript
{ 
  ...
  "prettier": "@forgleaner/eslint-config/.prettierrc"
}
```
npm package: @forgleaner/sass-helpers
Description: Some common mixins and functions for SASS.
Author: Jeremy Tang
Latest version: 1.0.0

# sass-helpers

[![build][travis-image]][travis-url]
[![commitizen][commitizen-image]][commitizen-url]
[![download][download-image]][download-url]
[![npm][npm-image]][npm-url]
[![semantic][semantic-image]][semantic-url]
 
[npm-image]: https://img.shields.io/npm/v/@forgleaner/sass-helpers.svg?color=blue&logo=npm
[npm-url]: https://npmjs.org/package/@forgleaner/sass-helpers
[travis-image]: https://travis-ci.com/forgleaner/sass-helpers.svg?branch=master?color=green&token=i21P7stb8bZPNjZakvsi&branch=master
[travis-url]: https://travis-ci.com/forgleaner/sass-helpers
[download-image]: https://img.shields.io/npm/dw/handypack.svg?color=yellowgreen
[download-url]: https://npmjs.com/package/@forgleaner/sass-helpers
[commitizen-image]: https://img.shields.io/badge/commitizen-friendly-green.svg
[commitizen-url]: http://commitizen.github.io/cz-cli/
[semantic-image]: https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg?style=flat-square
[semantic-url]: https://opensource.org/licenses/MIT

> Some common mixins and functions for SASS.

## Install

```bash
npm i @forgleaner/sass-helpers -S
```
npm package: @forgleaner/stylelint-config
Description: The recommended shareable config for stylelint.
Author: Jeremy Tang
Latest version: 1.0.0

# stylelint-config

[![build][build-image]][build-url]
[![commitizen][commitizen-image]][commitizen-url]
[![download][download-image]][download-url]
[![npm][npm-image]][npm-url]
[![semantic][semantic-image]][semantic-url]

[build-image]: https://travis-ci.com/forgleaner/stylelint-config.svg?color=green&token=i21P7stb8bZPNjZakvsi&branch=master
[build-url]: https://travis-ci.com/forgleaner/stylelint-config
[commitizen-image]: https://img.shields.io/badge/commitizen-friendly-green.svg
[commitizen-url]: http://commitizen.github.io/cz-cli/
[download-image]: https://img.shields.io/npm/dw/@forgleaner/stylelint-config.svg?color=yellowgreen
[download-url]: https://npmjs.com/package/@forgleaner/stylelint-config
[npm-image]: https://img.shields.io/npm/v/@forgleaner/stylelint-config.svg?color=blue&logo=npm
[npm-url]: https://npmjs.com/package/@forgleaner/stylelint-config
[semantic-image]: https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg?style=flat-square
[semantic-url]: https://opensource.org/licenses/MIT

stylelint插件配置，包含css、sass通用规则

**基于 [stylelint-config-standard](https://github.com/stylelint/stylelint-config-standard).**

## Install
```bash
npm i @forgleaner/stylelint-config -D
```

## 使用
添加以下代码到 `stylelint.config.js`
```javascript
module.exports = {
  "extends": "@forgleaner/stylelint-config"
}
```
npm package: @forgleaner/utils
Description: JavaScript工具库.
Author: Jeremy Tang
Latest version: 1.0.1

# Utils

[![build][travis-image]][travis-url]
[![commitizen][commitizen-image]][commitizen-url]
[![codecov][codecov-image]][codecov-url]
[![download][download-image]][download-url]
[![npm][npm-image]][npm-url]
[![semantic][semantic-image]][semantic-url]

[npm-image]: https://img.shields.io/npm/v/@forgleaner/utils.svg?color=green
[npm-url]: https://npmjs.com/package/@forgleaner/utils
[travis-image]: https://travis-ci.com/forgleaner/utils.svg?token=i21P7stb8bZPNjZakvsi&color=success&branch=master
[travis-url]: https://travis-ci.com/forgleaner/utils
[codecov-image]: https://codecov.io/gh/forgleaner/utils/branch/master/graph/badge.svg?token=i5Q9N7m8v5
[codecov-url]: https://codecov.io/gh/forgleaner/utils
[david-image]: https://david-dm.org/forgleaner/utils.svg
[david-url]: https://david-dm.org/forgleaner/utils
[download-image]: https://img.shields.io/npm/dw/@forgleaner/utils.svg?style=flat-square
[download-url]: https://npmjs.com/package/@forgleaner/utils
[commitizen-image]: https://img.shields.io/badge/commitizen-friendly-green.svg
[commitizen-url]: http://commitizen.github.io/cz-cli/
[semantic-image]: https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg?style=flat-square
[semantic-url]: https://opensource.org/licenses/MIT

JavaScript工具库.

## 说明

- 此工具库是自己从事前端开发以来整理和完善的，里面有些函数可以用 [Underscore](https://underscorejs.org/) 和 [lodash](https://lodash.com/docs) 代替。
- 由 typescript 编写，并编译为一份 ESnext 和 [CommonJs](https://requirejs.org/docs/commonjs.html) 的代码。
所以如果引入到您的项目中使用，需搭建好 [babel](https://babeljs.io/docs/en/) 编译环境。
- 借助于 [tree shaking](https://webpack.docschina.org/guides/tree-shaking/) 可以不用担心导入多余的代码。

## 安装

```bash
npm i -S @forgleaner/utils
```

## 具体用法可查看 [文档](https://forgleaner.github.io/utils/)
```js
import { ToDecimal } from '@forgleaner/utils';

let num = 120;
console.log(ToDecimal(num, 2));
// 120.00

// 绑定事件：delegate
import { On } from '@forgleaner/utils/event';

On(document.body, 'scroll', null, (event) => {
  console.log(event.target);
});
```
npm package: @forgleaner/webpack-html-inject-plugin
Description: A webpack plugin that inject some variables to entry html.
Author: Jeremy Tang
Latest version: 1.0.0

# webpack-html-inject-plugin

[![build][travis-image]][travis-url]
[![commitizen][commitizen-image]][commitizen-url]
[![download][download-image]][download-url]
[![npm][npm-image]][npm-url]
[![semantic][semantic-image]][semantic-url]
 
[npm-image]: https://img.shields.io/npm/v/@forgleaner/webpack-html-inject-plugin.svg?color=blue&logo=npm
[npm-url]: https://npmjs.org/package/@forgleaner/webpack-html-inject-plugin
[travis-image]: https://travis-ci.com/forgleaner/webpack-html-inject-plugin.svg?branch=master?color=green&token=i21P7stb8bZPNjZakvsi&branch=master
[travis-url]: https://travis-ci.com/forgleaner/webpack-html-inject-plugin
[download-image]: https://img.shields.io/npm/dw/handypack.svg?color=yellowgreen
[download-url]: https://npmjs.com/package/@forgleaner/webpack-html-inject-plugin
[commitizen-image]: https://img.shields.io/badge/commitizen-friendly-green.svg
[commitizen-url]: http://commitizen.github.io/cz-cli/
[semantic-image]: https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg?style=flat-square
[semantic-url]: https://opensource.org/licenses/MIT

> A webpack plugin that inject some variables to entry html.

## Usage

First, install `webpack-html-inject-plugin` as a development dependency:

```shell
npm i -D @forgleaner/webpack-html-inject-plugin
```

Then, add it to your `webpack.config.js`:

```javascript
const HtmlInjectPlugin = require('webpack-html-inject-plugin');

webpackOptions.plugins.push(new HtmlInjectPlugin({
  filename: 'index.html',
  data: {
           ENV_DEBUG: false,
           ENV_DEV: true,
           token: 'zawQrZL963RGtXrd2rYmLmUOeckesAaLlYgtNVA89'
  }
}));
```

## Before
```html
<script>
  window.token = {{token}};
  window.ENV_DEBUG = {{ENV_DEBUG}};
  window.ENV_DEV = {{ENV_DEV}};
</script>
```
## After
```html
<script>
  window.ENV_DEBUG = false;
  window.ENV_DEV = true;
  window.token = 'zawQrZL963RGtXrd2rYmLmUOeckesAaLlYgtNVA89';
</script>
```

## API
### new HtmlInjectPlugin([options])

#### options
Type: `object`

##### filename
Type: `String`
###### The file to write the HTML to.

##### data
Type: `object`

###### Declara some variables to html.
npm package: @forgr/capacitor-video-recorder
Description: Records video
Latest version: 5.0.3

# Capacitor Video Recorder

A video recording plugin for Capacitor that allows applications to use the native camera and microphone and display the recording interface either below or above their application.

#### Installation
`npm install @teamhive/capacitor-video-recorder`

#### Platform Support
- iOS
- Android

> On a web browser, we will fake the behavior to allow for easier development.

## Example Usage

feature.module.ts
> Import the plugin as defined below to allow the plugin to register correctly to the feature module.
```typescript
import '@teamhive/capacitor-video-recorder';
```

### Initializing Camera

In order to initialize the camera feed (**note**: you are not recording at this point), you must first specify a config to the video recorder.

> Note: To overlay your web UI on-top of the camera output, you must use stackPosition: back and make all layers of your app transparent so that the camera can be seen under the webview.

```typescript
import { VideoRecorderCamera, VideoRecorderPreviewFrame } from '@teamhive/capacitor-video-recorder';

const { VideoRecorder } = Plugins;

const config: VideoRecorderPreviewFrame = {
    id: 'video-record',
    stackPosition: 'front', // 'front' overlays your app', 'back' places behind your app.
    width: 'fill',
    height: 'fill',
    x: 0,
    y: 0,
    borderRadius: 0
};
await VideoRecorder.initialize({
    camera: VideoRecorderCamera.FRONT, // Can use BACK
    previewFrames: [config]
});
```

### Recording

Starts recording against the capture device.

```typescript
VideoRecorder.startRecording();
```

### Stop Recording / Getting Result

Stops the capture device and returns the path of the local video file.

``` typescript
const res = await VideoRecorder.stopRecording();
// The video url is the local file path location of the video output.
return res.videoUrl;
```

### Destroying Camera

Used to disconnect from the capture device and remove any native UI layers that exist.

```typescript
VideoRecorder.destroy();
```

### Example Implementations

|iOS|Android|
|---|---|
|<img src="https://user-images.githubusercontent.com/13732623/70366156-52e83500-1863-11ea-96f0-c53bdd12ebea.gif" />|<img src="https://user-images.githubusercontent.com/13732623/70366162-61365100-1863-11ea-8376-fe76cf147a73.gif" />|
npm package: @forim/oauth
Description: oauth
Latest version: 0.1.2

[![Build Status](https://travis-ci.org/{{github-user-name}}/{{github-app-name}}.svg?branch=master)](https://travis-ci.org/{{github-user-name}}/{{github-app-name}}.svg?branch=master)
[![Coverage Status](https://coveralls.io/repos/github/{{github-user-name}}/{{github-app-name}}/badge.svg?branch=master)](https://coveralls.io/github/{{github-user-name}}/{{github-app-name}}?branch=master)
[![MIT license](http://img.shields.io/badge/license-MIT-brightgreen.svg)](http://opensource.org/licenses/MIT)

# Using this module in other modules

Here is a quick example of how this module can be used in other modules. The [TypeScript Module Resolution Logic](https://www.typescriptlang.org/docs/handbook/module-resolution.html) makes it quite easy. The file `src/index.ts` is a [barrel](https://basarat.gitbooks.io/typescript/content/docs/tips/barrel.html) that re-exports selected exports from other files. The _package.json_ file contains `main` attribute that points to the generated `lib/index.js` file and `typings` attribute that points to the generated `lib/index.d.ts` file.

> If you are planning to have code in multiple files (which is quite natural for a NodeJS module) that users can import, make sure you update `src/index.ts` file appropriately.

Now assuming you have published this amazing module to _npm_ with the name `my-amazing-lib`, and installed it in the module in which you need it -

- To use the `Greeter` class in a TypeScript file -

```ts
import { Greeter } from "my-amazing-lib";

const greeter = new Greeter("World!");
greeter.greet();
```

- To use the `Greeter` class in a JavaScript file -

```js
const Greeter = require('my-amazing-lib').Greeter;

const greeter = new Greeter('World!');
greeter.greet();
```

## Setting travis and coveralls badges
1. Sign in to [travis](https://travis-ci.org/) and activate the build for your project.
2. Sign in to [coveralls](https://coveralls.io/) and activate the build for your project.
3. Replace {{github-user-name}}/{{github-app-name}} with your repo details like: "ospatil/generator-node-typescript".
npm package: @forim/user
Description: user
Latest version: 0.1.0

[![Build Status](https://travis-ci.org/{{github-user-name}}/{{github-app-name}}.svg?branch=master)](https://travis-ci.org/{{github-user-name}}/{{github-app-name}}.svg?branch=master)
[![Coverage Status](https://coveralls.io/repos/github/{{github-user-name}}/{{github-app-name}}/badge.svg?branch=master)](https://coveralls.io/github/{{github-user-name}}/{{github-app-name}}?branch=master)
[![MIT license](http://img.shields.io/badge/license-MIT-brightgreen.svg)](http://opensource.org/licenses/MIT)

# Using this module in other modules

Here is a quick example of how this module can be used in other modules. The [TypeScript Module Resolution Logic](https://www.typescriptlang.org/docs/handbook/module-resolution.html) makes it quite easy. The file `src/index.ts` is a [barrel](https://basarat.gitbooks.io/typescript/content/docs/tips/barrel.html) that re-exports selected exports from other files. The _package.json_ file contains `main` attribute that points to the generated `lib/index.js` file and `typings` attribute that points to the generated `lib/index.d.ts` file.

> If you are planning to have code in multiple files (which is quite natural for a NodeJS module) that users can import, make sure you update `src/index.ts` file appropriately.

Now assuming you have published this amazing module to _npm_ with the name `my-amazing-lib`, and installed it in the module in which you need it -

- To use the `Greeter` class in a TypeScript file -

```ts
import { Greeter } from "my-amazing-lib";

const greeter = new Greeter("World!");
greeter.greet();
```

- To use the `Greeter` class in a JavaScript file -

```js
const Greeter = require('my-amazing-lib').Greeter;

const greeter = new Greeter('World!');
greeter.greet();
```

## Setting travis and coveralls badges
1. Sign in to [travis](https://travis-ci.org/) and activate the build for your project.
2. Sign in to [coveralls](https://coveralls.io/) and activate the build for your project.
3. Replace {{github-user-name}}/{{github-app-name}} with your repo details like: "ospatil/generator-node-typescript".
npm package: @forinda/kickjs-auth
Description: Pluggable authentication for KickJS — JWT, API key, and custom strategies
Author: Felix Orinda
Latest version: 2.3.2

# @forinda/kickjs-auth

Pluggable authentication for KickJS — JWT, API key, OAuth, and custom strategies.

## Install

```bash
# Using the KickJS CLI (recommended — auto-installs peer dependencies)
kick add auth

# Manual install
pnpm add @forinda/kickjs-auth jsonwebtoken
```

## Features

- `AuthAdapter` — lifecycle adapter with configurable strategies
- Built-in strategies: `JwtStrategy`, `ApiKeyStrategy`, `OAuthStrategy`, `PassportBridge`
- Decorators: `@Authenticated`, `@Public`, `@Roles`
- Protected-by-default or opt-in authentication policies
- `AUTH_USER` token for injecting the authenticated user

## Quick Example

```typescript
import { AuthAdapter, Public, Roles } from '@forinda/kickjs-auth'

// Bootstrap with JWT auth
bootstrap({
  modules,
  adapters: [
    new AuthAdapter({
      strategy: 'jwt',
      secret: process.env.JWT_SECRET!,
      defaultPolicy: 'protected',
    }),
  ],
})

// All routes are protected by default
@Controller('/users')
class UserController {
  @Get('/')
  async list(ctx: RequestContext) {
    ctx.json(await this.userService.findAll())
  }

  // Opt out of auth for public routes
  @Get('/public')
  @Public()
  async publicEndpoint(ctx: RequestContext) {
    ctx.json({ message: 'No auth required' })
  }

  // Role-based access
  @Delete('/:id')
  @Roles('admin')
  async delete(ctx: RequestContext) {
    await this.userService.delete(ctx.params.id)
    ctx.noContent()
  }
}
```

## Documentation

[Full documentation](https://forinda.github.io/kick-js/guide/authentication)

## License

MIT
npm package: @forinda/kickjs-config
Description: DEPRECATED — moved into @forinda/kickjs. This package is a thin re-export shim and will be removed in v3.
Author: Felix Orinda
Latest version: 2.3.2
Deprecated: @forinda/kickjs-config has been merged into @forinda/kickjs. Import { defineEnv, loadEnv, ConfigService } from '@forinda/kickjs' instead, and { envWatchPlugin } from '@forinda/kickjs-vite'. This shim will be removed in v3.

# @forinda/kickjs-config — DEPRECATED

> **This package has moved.** Everything that used to live here now ships
> inside the unified `@forinda/kickjs` package. The standalone
> `@forinda/kickjs-config` is a thin re-export shim kept for one release
> so existing apps don't break — **it will be removed in v3**.

## Migration

```diff
- import { defineEnv, loadEnv, ConfigService, getEnv } from '@forinda/kickjs-config'
+ import { defineEnv, loadEnv, ConfigService, getEnv } from '@forinda/kickjs'
```

The Vite-only `envWatchPlugin` moved into the Vite package:

```diff
- import { envWatchPlugin } from '@forinda/kickjs-config'
+ import { envWatchPlugin } from '@forinda/kickjs-vite'
```

`.env` file loading is provided by **`dotenv`**, which is now an
**optional peer dependency** of `@forinda/kickjs`. New projects scaffolded
with `kick new` get it pre-installed; existing projects should add it
explicitly if they rely on `.env` files:

```bash
pnpm add dotenv
```

Apps that load env via the shell, Docker, or a secret manager don't need
`dotenv` at all — `@forinda/kickjs` will read `process.env` directly.

## Why the merge?

- **Smaller install footprint** — one package instead of two for the same
  surface area, with the same dead-code-elimination story.
- **Simpler mental model** — no more "is `ConfigService` in core or in
  config?" lookups.
- **Fewer ordering bugs** — `ConfigService` and `@Value()` now share the
  exact same env resolver path, eliminating the snapshot-vs-lazy class of
  bugs that haunted the standalone package.

## Quick Example (post-migration)

```typescript
import { defineEnv, loadEnv, ConfigService } from '@forinda/kickjs'
import { z } from 'zod'

// Style A — return a fresh object; base fields are merged automatically
const envSchema = defineEnv(() =>
  z.object({
    DATABASE_URL: z.string().url(),
    JWT_SECRET: z.string().min(32),
  }),
)

// Style B — explicitly extend `base` (still works, identical result)
const envSchemaB = defineEnv((base) =>
  base.extend({
    DATABASE_URL: z.string().url(),
  }),
)

const env = loadEnv(envSchema)
env.DATABASE_URL // string  — your key
env.PORT         // number  — base key, always present
env.NODE_ENV     // enum    — base key, always present
```

User-defined keys override base keys when they collide, so you can re-type
`PORT` or tighten `NODE_ENV` without losing the rest of the base shape.

## Documentation

[Full documentation](https://forinda.github.io/kick-js/)

## License

MIT
npm package: @forinda/kickjs-core
Description: Core DI container, decorators, module system, and logger for KickJS
Author: Felix Orinda
Latest version: 2.3.2

# @forinda/kickjs-core

> **Note:** This package is included in [`@forinda/kickjs`](https://www.npmjs.com/package/@forinda/kickjs). For new projects, install the unified package instead:
>
> ```bash
> pnpm add @forinda/kickjs
> ```
>
> `@forinda/kickjs-core` continues to work for existing projects.

Core DI container, decorators, module system, logger, and error types for KickJS.

## Documentation

[forinda.github.io/kick-js](https://forinda.github.io/kick-js/)
npm package: @forinda/kickjs-cron
Description: Production-grade cron job scheduling with pluggable backends for KickJS
Author: Felix Orinda
Latest version: 2.3.2

# @forinda/kickjs-cron

Production-grade cron job scheduling with pluggable backends for KickJS.

## Install

```bash
# Using the KickJS CLI (recommended — auto-installs peer dependencies)
kick add cron

# Manual install
pnpm add @forinda/kickjs-cron croner
```

## Features

- `CronAdapter` — lifecycle adapter that discovers and runs cron jobs
- `@Cron` decorator for scheduling methods
- Built-in schedulers: `CronerScheduler` (cron expressions), `IntervalScheduler` (simple intervals)
- `getCronJobs()` to inspect registered jobs

## Quick Example

```typescript
import { CronAdapter } from '@forinda/kickjs-cron'
import { Cron, Service } from '@forinda/kickjs-core'

@Service()
class CleanupService {
  @Cron('0 */6 * * *') // Every 6 hours
  async cleanExpiredTokens() {
    console.log('Cleaning up expired tokens...')
  }

  @Cron('0 9 * * 1') // Monday at 9am
  async weeklyDigest() {
    console.log('Sending weekly digest...')
  }
}

bootstrap({
  modules,
  adapters: [new CronAdapter()],
})
```

## Documentation

[Full documentation](https://forinda.github.io/kick-js/guide/cron)

## License

MIT
npm package: @forinda/kickjs-drizzle
Description: Drizzle ORM adapter with DI integration, transaction support, and query building for KickJS
Author: Felix Orinda
Latest version: 2.3.2

# @forinda/kickjs-drizzle

Drizzle ORM adapter with DI integration, transaction support, and query building for KickJS.

## Install

```bash
# Using the KickJS CLI (recommended — auto-installs peer dependencies)
kick add drizzle

# Manual install
pnpm add @forinda/kickjs-drizzle drizzle-orm
```

## Features

- `DrizzleAdapter` — lifecycle adapter that manages the Drizzle connection
- `DRIZZLE_DB` token for injecting the database instance via DI
- `DrizzleQueryAdapter` — translates `ParsedQuery` from `@forinda/kickjs-http` into Drizzle queries
- `toQueryFieldConfig` helper for field mapping

## Quick Example

```typescript
import { DrizzleAdapter, DRIZZLE_DB, DrizzleQueryAdapter } from '@forinda/kickjs-drizzle'
import { drizzle } from 'drizzle-orm/postgres-js'
import postgres from 'postgres'

const client = postgres(process.env.DATABASE_URL!)
const db = drizzle(client)

bootstrap({
  modules,
  adapters: [
    new DrizzleAdapter({ db }),
  ],
})

// In a service, inject the DB
@Service()
class UserService {
  @Inject(DRIZZLE_DB) private db!: typeof db

  async findAll() {
    return this.db.select().from(users)
  }
}
```

## Query Adapter

```typescript
import { DrizzleQueryAdapter } from '@forinda/kickjs-drizzle'

const adapter = new DrizzleQueryAdapter()
const query = adapter.build(parsedQuery, {
  columns: { name: users.name, email: users.email },
  searchColumns: [users.name, users.email],
})
```

## Documentation

[Full documentation](https://forinda.github.io/kick-js/)

## License

MIT
npm package: @forinda/kickjs-graphql
Description: GraphQL module for KickJS with decorator-based resolvers, schema generation, and playground
Author: Felix Orinda
Latest version: 2.3.2

# @forinda/kickjs-graphql

GraphQL module for KickJS with decorator-based resolvers, schema generation, and playground.

## Install

```bash
# Using the KickJS CLI (recommended — auto-installs peer dependencies)
kick add graphql

# Manual install
pnpm add @forinda/kickjs-graphql graphql
```

## Features

- `GraphQLAdapter` — lifecycle adapter with GraphiQL playground
- Decorator-driven resolvers: `@Resolver`, `@Query`, `@Mutation`, `@Subscription`, `@Arg`
- Automatic schema generation from decorated classes
- DI-integrated resolvers

## Quick Example

```typescript
import { GraphQLAdapter, Resolver, Query, Mutation, Arg } from '@forinda/kickjs-graphql'

@Resolver()
class UserResolver {
  @Query('users', '[User]')
  async list() {
    return [{ id: '1', name: 'Alice' }]
  }

  @Mutation('createUser', 'User')
  async create(@Arg('name') name: string, @Arg('email') email: string) {
    return { id: '2', name, email }
  }
}

bootstrap({
  modules,
  adapters: [
    new GraphQLAdapter({
      resolvers: [UserResolver],
      playground: true,
    }),
  ],
})
```

Visit `http://localhost:3000/graphql` for the GraphiQL playground.

## Documentation

[Full documentation](https://forinda.github.io/kick-js/)

## License

MIT
npm package: @forinda/kickjs-http
Description: Express 5 integration, router builder, RequestContext, and middleware for KickJS
Author: Felix Orinda
Latest version: 2.3.2

# @forinda/kickjs-http

> **Note:** This package is included in [`@forinda/kickjs`](https://www.npmjs.com/package/@forinda/kickjs). For new projects, install the unified package instead:
>
> ```bash
> pnpm add @forinda/kickjs
> ```
>
> `@forinda/kickjs-http` continues to work for existing projects.

Express 5 application, router builder, RequestContext, middleware, and query parsing for KickJS.

## Documentation

[forinda.github.io/kick-js](https://forinda.github.io/kick-js/)
npm package: @forinda/kickjs-multi-tenant
Description: Multi-tenancy helpers for KickJS — tenant resolution, scoped DI, and database routing
Author: Felix Orinda
Latest version: 2.3.2

# @forinda/kickjs-multi-tenant

Multi-tenancy helpers for KickJS — tenant resolution, scoped DI, and database routing.

## Install

```bash
# Using the KickJS CLI (recommended)
kick add multi-tenant

# Manual install
pnpm add @forinda/kickjs-multi-tenant
```

## Features

- `TenantAdapter` — lifecycle adapter that resolves tenant from requests
- `TENANT_CONTEXT` token for injecting tenant info via DI
- Pluggable resolution strategies: header, subdomain, path, or custom
- Scoped DI for per-tenant service instances

## Quick Example

```typescript
import { TenantAdapter, TENANT_CONTEXT, type TenantInfo } from '@forinda/kickjs-multi-tenant'
import { Inject, Service } from '@forinda/kickjs-core'

bootstrap({
  modules,
  adapters: [
    new TenantAdapter({
      strategy: 'header',
      headerName: 'X-Tenant-ID',
    }),
  ],
})

// Access tenant in any service
@Service()
class DataService {
  @Inject(TENANT_CONTEXT) private tenant!: TenantInfo

  async getData() {
    return this.repo.findByTenant(this.tenant.id)
  }
}
```

## Documentation

[Full documentation](https://forinda.github.io/kick-js/)

## License

MIT
npm package: @forinda/kickjs-queue
Description: BullMQ queue/worker adapter with decorator-driven job processing for KickJS
Author: Felix Orinda
Latest version: 2.3.2

# @forinda/kickjs-queue

BullMQ queue/worker adapter with decorator-driven job processing for KickJS.

## Install

```bash
# Using the KickJS CLI (recommended — auto-installs peer dependencies)
kick add queue:bullmq     # BullMQ + Redis
kick add queue:rabbitmq   # RabbitMQ
kick add queue:kafka      # Kafka

# Manual install (BullMQ example)
pnpm add @forinda/kickjs-queue bullmq ioredis
```

## Features

- `QueueAdapter` — lifecycle adapter that connects queues and workers
- `QueueService` — injectable service for dispatching jobs
- Decorators: `@Job` (define job types), `@Process` (handle jobs)
- Built-in providers: `BullMQProvider`, `RabbitMQProvider`, `KafkaProvider`, `RedisPubSubProvider`
- `QUEUE_MANAGER` token for DI injection

## Quick Example

```typescript
import { QueueAdapter, QueueService, Job, Process } from '@forinda/kickjs-queue'
import { Service, Inject } from '@forinda/kickjs-core'

@Service()
class EmailProcessor {
  @Process('send-email')
  async handle(job: { to: string; subject: string; html: string }) {
    console.log(`Sending email to ${job.to}`)
  }
}

// Dispatch a job from any service
@Service()
class UserService {
  @Inject(QUEUE_MANAGER) private queue!: QueueService

  async createUser(data: CreateUserDTO) {
    const user = await this.repo.create(data)
    await this.queue.add('send-email', {
      to: user.email,
      subject: 'Welcome!',
      html: '<h1>Welcome</h1>',
    })
    return user
  }
}

bootstrap({
  modules,
  adapters: [
    new QueueAdapter({
      connection: { host: 'localhost', port: 6379 },
    }),
  ],
})
```

## Documentation

[Full documentation](https://forinda.github.io/kick-js/)

## License

MIT
npm package: @forinda/kickjs-testing
Description: Test utilities, TestModule builder, and helpers for KickJS applications
Author: Felix Orinda
Latest version: 2.3.2

# @forinda/kickjs-testing

Test utilities for KickJS — `createTestApp` and `createTestModule` helpers.

## Install

```bash
# Using the KickJS CLI (recommended — installs as dev dependency)
kick add testing

# Manual install
pnpm add -D @forinda/kickjs-testing
```

## Features

- `createTestApp()` — creates an Application instance for testing (resets container, empty middleware)
- `createTestModule()` — builds a dynamic test module with custom DI registrations
- DI overrides for mocking repositories and services (supports symbol keys)

## Quick Example

```typescript
import { createTestApp } from '@forinda/kickjs-testing'
import { describe, it, expect } from 'vitest'
import supertest from 'supertest'

describe('UserController', () => {
  it('lists users', async () => {
    const { expressApp } = createTestApp({
      modules: [UserModule],
      overrides: {
        [USER_REPO]: new MockUserRepository(),
      },
    })

    const res = await supertest(expressApp).get('/api/v1/users')
    expect(res.status).toBe(200)
  })
})
```

## Documentation

[Full documentation](https://github.com/forinda/kick-js)

## License

MIT
npm package: @foris/avocado-ui
Description: Librería de componentes en react utilizados en la aplicaciones de Foris.
Author: Foris dev
Latest version: 1.8.9

# Avocado-ui

Librería de componentes en react utilizados en la aplicaciones de Foris.

### Requisitos mínimos para instalación

- Node.js - 14.17.5
- React - 16.13.0
- Typescript - 3.7.5

### Instalación para colaboradores

Clonar repositorio, ingresar al proyecto e instalar sus dependencias

```
git clone https://github.com/Foris/avocado-ui.git
cd avocado-ui
npm install
npm start
```

Storybook: Para visualizar y trabajar con la librería.

### Instalación en pryectos

Instalar librería

```
npm install @foris/avocado-ui
```

Agregar estilos

```
import '@foris/avocado-ui/lib/foris-avocado.css'
```

Utilizar componentes

```
import { Button } from '@foris/avocado-ui';

<Button
  typeButton="transparent"
  disabled={false}
  className="my_class"
  onClick={() => { console.debug('onClick!') }}
>
 My First Button
</Button>
```
npm package: @forivall/apollo-link-enums
Description: Custom apollo link to parse custom enums, for apollo rest links
Author: inhibitor
Latest version: 0.2.1

# @forivall/apollo-link-enums

This is a custom apollo link, inspired by [apollo-link-scalars](https://github.com/eturino/apollo-link-scalars).

## Why should we use this?

GraphQL enums are designed to be known both to client and server. Once we define an enum at the schema, client and server can communicate wihtout concerning the programmer what the actual value of enum is.

However, [apollo-link-rest](https://www.apollographql.com/docs/react/api/link/apollo-link-rest/) allows an Apollo Client to communicate with server which is not aware of GraphQL or the schema. The client defines the schema in this case. The server can express enums in its own convention, hence the client is required to parse and convert the enums into a form compatible with Apollo Client. By default, the serialized value of the enum should be equal to its definition. This library allows to configure how the client would parse the enums.