open-index/open-npm huggingface dataset:
npm package: @keyvhq/stats
Description: Collects metrics for a Keyv instance over time.
Author: microlink.io
Latest version: 2.1.15

# @keyvhq/stats [<img width="100" align="right" src="https://keyvhq.js.org/media/logo-sunset.svg" alt="keyv">](https://github.com/microlinkhq/keyv/packages/stats)

> Collects metrics for a Keyv instance over time.

## Install

```shell
npm install --save @keyvhq/stats
```

## Usage

Wrap your keyv instance with `@keyvhq/stats`:

```js
const KeyvStats = require('@keyvhq/stats')
const KeyvRedis = require('@keyvhq/redis')
const Keyv = require('@keyvhq/core')

const keyv = KeyvStats(new Keyv({ store: new KeyvRedis() }))
```

That adds some methods for getting stats over your keyv instance:

```js
await keyv.get('foo')

keyv.stats.info()
// => {
//   hit: { value: 0, percent: '0%' },
//   miss: { value: 1, percent: '100%' },
//   total: 1
// }

await keyv.set('foo', 'bar')
await keyv.get('foo')
await keyv.get('foo')

keyv.stats.info()
// => {
//   hit: { value: 2, percent: '67%' },
//   miss: { value: 1, percent: '33%' },
//   total: 3
// }

keyv.stats.reset()
```

## API

### stats(\[options])

#### options

##### initialData

Type: `object`<br/>
Default: `{ hit: 0, miss: 0}`

The data to set for first time or when `.stats.reset()` is called.

##### interval

Type: `number`<br/>
Default: `1500`

##### key

Type: `string`<br/>
Default: `'__keyv_stats__'`

The key used for storing the stats inside the store.

### .stats.info()

Returns the collected stats for the store in the shape:

```
{
  hit: {
    value: number
    percent: string
  },
  miss: {
    value: number
    percent: string
  }
  total: number
}
```

### .stats.reset()

Resets the stats counters.

### .stats.save()

Peforms a save of the current buffered stats into the store.

## License

**@keyvhq/stats** © [Jytesh](https://github.com/Jytesh), released under the [MIT](https://github.com/microlinkhq/keyvhq/blob/master/LICENSE.md) License.<br/>
Maintained by [Microlink](https://microlink.io) with help from [contributors](https://github.com/microlinkhq/keyvhq/contributors).

> [microlink.io](https://microlink.io) · GitHub [microlinkhq](https://github.com/microlinkhq) · X [@microlinkhq](https://x.com/microlinkhq)
npm package: @keyvjs/redis
Description: Redis storage adapter for Keyv
Author: Luke Childs
Latest version: 2.1.1

# @keyvjs/redis [<img width="100" align="right" src="https://raw.githubusercontent.com/keyvjs/keyv/master/media/logo.svg?sanitize=true" alt="keyv">](https://github.com/keyvjs/keyv)

> Redis storage adapter for Keyv

[![Build Status](https://travis-ci.com/keyvjs/redis.svg?branch=master)](https://travis-ci.com/keyvjs/redis)
[![Coverage Status](https://coveralls.io/repos/github/keyvjs/redis/badge.svg?branch=master)](https://coveralls.io/github/keyvjs/redis?branch=master)
[![npm](https://img.shields.io/npm/v/@keyvjs/redis.svg)](https://www.npmjs.com/package/@keyvjs/redis)

Redis storage adapter for [Keyv](https://github.com/keyvjs/keyv).

TTL functionality is handled directly by Redis so no timestamps are stored and expired keys are cleaned up internally.

## Install

```shell
npm install --save @keyvjs/keyv @keyvjs/redis
```

## Usage

```js
const Keyv = require('@keyvjs/keyv');

const keyv = new Keyv('redis://user:pass@localhost:6379');
keyv.on('error', handleConnectionError);
```

Any valid [`Redis`](https://github.com/luin/ioredis#connect-to-redis) options will be passed directly through.

e.g:

```js
const keyv = new Keyv('redis://user:pass@localhost:6379', { disable_resubscribing: true });
```

Or you can manually create a storage adapter instance and pass it to Keyv:

```js
const KeyvRedis = require('@keyvjs/redis');
const Keyv = require('@keyvjs/keyv');

const keyvRedis = new KeyvRedis('redis://user:pass@localhost:6379');
const keyv = new Keyv({ store: keyvRedis });
```

Or reuse a previous Redis instance:

```js
const KeyvRedis = require('@keyvjs/redis');
const Redis = require('ioredis');
const Keyv = require('@keyvjs/keyv');

const redis = new Redis('redis://user:pass@localhost:6379');
const keyvRedis = new KeyvRedis(redis);
const keyv = new Keyv({ store: keyvRedis });
```

## License

MIT © Luke Childs
npm package: @keyvoy/react
Description: React SDK for Keyvoy — Canton Network wallet infrastructure with auth, custody, and Daml transactions
Author: Cayvox Labs
Latest version: 0.1.0

# @keyvoy/react

React SDK for [PartyLayer Enterprise](https://partylayer.com) — full-stack wallet infrastructure for Canton Network with authentication, MPC custody, and Daml transaction support.

> **Looking for the open-source wallet connector?** See [@partylayer/sdk](https://www.npmjs.com/package/@partylayer/sdk)

## Install
```bash
npm install @keyvoy/react
```

## Quick Start
```tsx
import { PartyLayerProvider, LoginButton, WalletStatus } from '@keyvoy/react'

export default function App() {
  return (
    <PartyLayerProvider appId="your_app_id" network="mainnet">
      <LoginButton />
      <WalletStatus showPartyId />
    </PartyLayerProvider>
  )
}
```

## What's Included

### Components

| Component | Description |
|-----------|-------------|
| `PartyLayerProvider` | Context wrapper — required at app root |
| `LoginButton` | Multi-provider login (Passkey, Email, Auth0, Telegram) |
| `WalletStatus` | Wallet connection state + Canton party ID |
| `TransactionButton` | Submit Daml transactions with confirmation UI |
| `WalletSelector` | Choose between embedded and external wallets |
| `MfaSetupDialog` | Multi-factor authentication setup flow |
| `MfaChallengeDialog` | MFA verification input |

### Hooks

| Hook | Description |
|------|-------------|
| `useAuth()` | Auth state — user, login, logout, isAuthenticated |
| `useWallet()` | Wallet state — submitTransaction, getContracts, isReady |
| `useContracts()` | Query active Daml contracts |
| `useTrustLevel()` | Trust level management — Embedded → Custodial → Self-Custody |
| `useExternalWallets()` | Connect/disconnect external wallets |
| `useGuest()` | Guest session management |
| `useMfa()` | MFA setup and verification |

## PartyLayer Enterprise vs Open Source

| Feature | @partylayer/sdk (OSS) | @keyvoy/react |
|---------|----------------------|------------------------------|
| Wallet connection | ✅ | ✅ |
| CIP-0103 | ✅ | ✅ |
| Authentication (Auth0, Passkey) | ❌ | ✅ |
| MPC key custody | ❌ | ✅ |
| Trust level migration | ❌ | ✅ |
| Daml transaction submission | ❌ | ✅ |
| Multi-tenant B2B | ❌ | ✅ |
| Admin dashboard | ❌ | ✅ |
| Webhooks | ❌ | ✅ |

## Documentation

Full docs at [docs.partylayer.com](https://docs.partylayer.com)

## License

MIT © [Cayvox Labs](https://cayvox.com)
npm package: @keyvoy/sdk
Description: Core SDK for Keyvoy — framework-agnostic Canton Network wallet infrastructure
Author: Cayvox Labs
Latest version: 0.1.0

# @keyvoy/sdk

Core SDK for [PartyLayer Enterprise](https://partylayer.com) — framework-agnostic Canton Network wallet infrastructure.

> Most developers should use [@keyvoy/react](https://www.npmjs.com/package/@keyvoy/react) (React) or [@keyvoy/node](https://www.npmjs.com/package/@keyvoy/node) (Node.js) instead.
>
> **Looking for the open-source wallet connector?** See [@partylayer/sdk](https://www.npmjs.com/package/@partylayer/sdk)

## Install
```bash
npm install @keyvoy/sdk
```

## Documentation

Full docs at [docs.partylayer.com](https://docs.partylayer.com)

## License

MIT © [Cayvox Labs](https://cayvox.com)
npm package: @keywrite/core
Description: This package contains the core module for Keywrite. It doesn't do much by itself, but can be extended to support different use cases
Latest version: 1.0.0

## @keywrite/core

This package contains the core module for Keywrite. It doesn't do much by itself,
but can be extended to support different use cases

## Installation

```sh
$ yarn add @keywrite/core

# or

$ npm install @keywrite/core
```

## Basic usage

By extending the exported class from `@keywrite/core` you can add
app-specific logic. The most important method you would use would be the `write` method. This method
takes in a character and resolves it into a special symbol as per the layout
specification and returns the symbol and replacement state(if previous character needs to be replaced with the new symbol).

## License

MIT © [Eyuel Berga](https://github.com/eyuelberga)
npm package: @keywrite/ethiopic-input-methods
Description: This package contains ethiopic input-methods generated form the specification described by [the Ge'ez Frontier Foundation specification](http://keyboards.ethiopic.org/specification/)
Latest version: 1.0.0

## @keywrite/ethiopic-input-methods

This package contains ethiopic input-methods generated form the specification
described by [the Ge'ez Frontier Foundation specification](http://keyboards.ethiopic.org/specification/)

## Usage

```sh
$ yarn add @keywrite/ethiopic-input-methods

# or

$ npm install @keywrite/ethiopic-input-methods
```

## License

MIT © [Eyuel Berga](https://github.com/eyuelberga)
npm package: @keywrite/ethiopic-layouts
Description: This package contains ethiopic keyboard layouts generated form the specification described by [the Ge'ez Frontier Foundation specification](http://keyboards.ethiopic.org/specification/)
Latest version: 0.1.1

## @keywrite/ethiopic-layouts

This package contains ethiopic keyboard layouts generated form the specification
described by [the Ge'ez Frontier Foundation specification](http://keyboards.ethiopic.org/specification/)

## Usage

```sh
$ yarn add @keywrite/ethiopic-layouts

# or

$ npm install @keywrite/ethiopic-layouts
```

## License

MIT © [Eyuel Berga](https://github.com/eyuelberga)
npm package: @keywrite/web
Description: Keywrite is a Javascript library that allows you to type non-latin scripts in any web based application using a standard keyboard. See the [Docs](https://eyuelberga.github.io/keywrite) for more info.
Latest version: 1.1.0

## @keywrite/web

Keywrite is a Javascript library that allows you to type non-latin scripts in any web based application using a standard keyboard. See the [Docs](https://eyuelberga.github.io/keywrite) for more info.

## Installation

```sh
$ yarn add @keywrite/web

# or

$ npm install @keywrite/web
```

## License

MIT © [Eyuel Berga](https://github.com/eyuelberga)
npm package: @keyz/ng-atmhotspot-bank
Description: This is an Angular Wrapper around the Hover Software Solutions Banks & ATM's Hotspot API
Author: Precious Keyz
Latest version: 1.0.1

<p align="center">
  <h1 align="center">ATMHotspot - Banks (Angular)</h1>
  <p align="center">The official Angular library for the <a href="https://hoss.netlify.com">Hover Software Solutions</a> ATMHotspot API</p>
</p>

## Installation

```bash
npm i @keyz/ng-atmhotspot-bank
```

## Example use:

Inside your ```app.module.ts``` file, add this

```typescript
import { BankModule } from '@keyz/ng-atmhotspot-bank';
import { NgModule } from '@angular/core';

@NgModule({
  declarations: [],
  imports: [
     BankModule.forRoot({
        isDevMode:false
     }),
  ]
})

export class AppModule {}
```

You can now access ```BankAuthService```, ```BankService```, ```BankAuthService``` anywhere in your app.

```typescript
import {BankService} from '@keyz/ng-atmhotspot-bank';
import {Component, OnInit} from '@angular/core';

@Component({
  selector: 'app-dashboard',
  templateUrl: './dashboard.component.html',
  styleUrls: ['./dashboard.component.scss']
})
export class DashboardComponent implements OnInit {
  
 constructor(private dataSvc: BankService) {}
 
 ngOnInit() {}

}
```
## Further help

Official Documentation will be available pretty soon.
npm package: @keyzdq/light-yagami-kira
Description: Welcome to Kiryu, a programming organization based in Indonesia! We are a community focused on software development, technological innovation, and knowledge sharing. Join us to learn, collaborate, and inspire! 🚀
Latest version: 1.0.0

## Kiryu: Programming Organization from Indonesia 🇮🇩

Welcome to Kiryu, a programming organization based in Indonesia! We are a community focused on software development, technological innovation, and knowledge sharing. Join us to learn, collaborate, and inspire! 🚀

### About Us

We are dedicated to fostering the growth of the technology ecosystem in Indonesia. Through open source projects and community activities, we advocate for inclusion, diversity, and technological advancement for all.

### Key Projects

- **KiryuChat**: An instant messaging application prioritizing privacy and security.
- **KiryuLearn**: An e-learning platform for interactive technology education.

### Join Us!

Let's contribute together! Whether you're an experienced developer or a beginner, we welcome anyone who wants to learn and share.

### Let's Create Together!

Together, we can create a bright future for technology in Indonesia and beyond. Join us and let's create together at Kiryu! 💻✨
npm package: @keyzdq/mason-mocha
Description: Welcome to Kiryu, a programming organization based in Indonesia! We are a community focused on software development, technological innovation, and knowledge sharing. Join us to learn, collaborate, and inspire! 🚀
Latest version: 1.0.0

## Kiryu: Programming Organization from Indonesia 🇮🇩

Welcome to Kiryu, a programming organization based in Indonesia! We are a community focused on software development, technological innovation, and knowledge sharing. Join us to learn, collaborate, and inspire! 🚀

### About Us

We are dedicated to fostering the growth of the technology ecosystem in Indonesia. Through open source projects and community activities, we advocate for inclusion, diversity, and technological advancement for all.

### Key Projects

- **KiryuChat**: An instant messaging application prioritizing privacy and security.
- **KiryuLearn**: An e-learning platform for interactive technology education.

### Join Us!

Let's contribute together! Whether you're an experienced developer or a beginner, we welcome anyone who wants to learn and share.

### Let's Create Together!

Together, we can create a bright future for technology in Indonesia and beyond. Join us and let's create together at Kiryu! 💻✨
npm package: @keyzdq/mason-mug
Description: Welcome to Kiryu, a programming organization based in Indonesia! We are a community focused on software development, technological innovation, and knowledge sharing. Join us to learn, collaborate, and inspire! 🚀
Latest version: 1.0.0

## Kiryu: Programming Organization from Indonesia 🇮🇩

Welcome to Kiryu, a programming organization based in Indonesia! We are a community focused on software development, technological innovation, and knowledge sharing. Join us to learn, collaborate, and inspire! 🚀

### About Us

We are dedicated to fostering the growth of the technology ecosystem in Indonesia. Through open source projects and community activities, we advocate for inclusion, diversity, and technological advancement for all.

### Key Projects

- **KiryuChat**: An instant messaging application prioritizing privacy and security.
- **KiryuLearn**: An e-learning platform for interactive technology education.

### Join Us!

Let's contribute together! Whether you're an experienced developer or a beginner, we welcome anyone who wants to learn and share.

### Let's Create Together!

Together, we can create a bright future for technology in Indonesia and beyond. Join us and let's create together at Kiryu! 💻✨
npm package: @keziahmoselle/webhook
Description: get notified when the content of a website change.
Author: Keziah MOSELLE
Latest version: 0.4.0

<h2 align="center">Webhook</h2>

### In development...

### Install
`npm install @keziahmoselle/webhook`

### Usage
```js
const Webhook = require('@keziahmoselle/webhook')

Webhook.observe('https://domain.com')

// No changes detected
Webhook.on('nodiff', () => {
  // Do something
})

// Changes detected
Webhook.on('update', (data) => {
  // Do something
  data.now // New content
  data.old // Old content
})
```

Options
```js
Webhook.observe('https://domain.com', {
  // The URL you want to POST the data
  postUrl: 'https://domain.com/post',
  // The element you want to watch
  // NOTE: `content` is a placeholder for the content you want to watch (it is required)
  element: '<title>content</title>',
  // At which interval you want to scrape ? Default: 5 minutes
  interval: 10*60*1000 // Scrape every 10 minutes
})
```

### API

#### .observe(url[, options])
##### url: `String` (The URL you want to observe)

##### options: `Object`
- postUrl `String` (Send a POST request to `postUrl` with `data` as a payload)
- element: `String` (The element you want to watch)
- interval: `Number` Default: `5 minutes`

If you want to watch the title of a page for example :
Note that `content` will be replaced by the actual content of the web page.
```js
Webhook.observe('https://domain.com', {
  element: '<h1>content</h1>'
})
```
```js
Webhook.observe('https://domain.com', {
  interval: 60*60*1000 // It will scrape every 1 hour
})
```

#### .on('nodiff', function)
Event 'nodiff' is emitted when a website does not change
##### function
Type: `Function`

```js
Webhook.on('nodiff', () => {
  console.log('Same content !')
})
```

#### .on('update', function)
Event 'update' is emitted when a website change
##### function
Type: `Function`

Argument: `data` (Type: `Object`)

`data.new` contains the new content

`data.old` contains the old content

```js
Webhook.on('update', (data) => {
  console.log(data.now) // 'new content'
  console.log(data.old) // 'old content'
})
```
npm package: @kezios/forest-express-decorator
Description: 🚀 Decorators for Express Forest Admin
Author: Justin Martin
Latest version: 0.1.4-alpha

# Forest Express Decorator

[![MIT License](https://img.shields.io/apm/l/atomic-design-ui.svg?)](https://github.com/tterb/atomic-design-ui/blob/master/LICENSEs)

🚀 Decorators for Express Forest Admin

## Installation

```bash
yarn add forest-express-decorator
```

## Usage (🚧 WIP!)

#### Collection :

```js
@Collection('customers')
class CustomerCollection extends BaseCollection {
  @SmartField({
    type: 'String',
    get: (customer) => `${customer.firstname} ${customer.lastname}`,
    set: (customer, fullname) => {
      fullname.split(' ');
      customer.firstname = names[0];
      customer.lastname = names[1];

      return customer;
    },
  })
  fullname;

  @SmartAction(GenerateInvoice)
  generateInvoice: GenerateInvoice;
}
```

#### Smart action :

```js
class GenerateInvoice extends BaseSmartAction {
    @SmartActionField({
        type: 'Number',
        label: 'Price',
        description: 'The price to generate invoice in $'
        isRequired: true,
    })
    price;

    onCall = (req, res) => {
        const price = req.body.data.attributes.values.price;
        // .....
        return res.status(200).send({success: 'Invoice generated !'})
    }
}
```

## Related

[Forest Admin Express](https://github.com/ForestAdmin/forest-express)

## License

[MIT](https://choosealicense.com/licenses/mit/)
npm package: @kezoponk/iphonepasscode
Description: IPhonePasscode creates very easily a highly customizable and functional copy of the iconic IPhone pin passcode
Author: Albin Eriksson
Latest version: 1.1.1

<img width="200" align="right" src="https://user-images.githubusercontent.com/40474222/112726901-00cb9700-8f20-11eb-8dd8-d73d9a8d3473.png">

# IPhonePasscode.js
IPhonePasscode creates very easily a highly customizable and functional copy of the IPhone pin passcode.<br/>
Use the main import for standard js, or import from `dist/react` for the included React component.


## Security note
**Don't use this on anything big unless:**
<br/>Passcode is 12+ digits long.
<br/>If passcode is 12- digits - leave md5passcode empty and either limit requests or use <a href="https://portswigger.net/web-security/csrf/tokens">csrf token</a>

<br/>

## Installation
Install from the command line:
```shell
$ npm install @kezoponk/iphonepasscode
```
Install via package.json:
```json
"@kezoponk/iphonepasscode": "1.1.1" 
```

<br/>

## Usage

MD5 hash your passcode: <a href="https://www.md5hashgenerator.com"> md5hashgenerator.com </a><br/>
**A back-end is required to validate the passcode**, see examples bellow.

| Option / Prop | Description |
| --- | --- |
| md5passcode |Leave empty if you wish to validate pin only in the specified redirect url/page - **safer** |
| length <br/> **Required** |Length of passcode |
| redirect <br/> **Required** |Back-end file or directory to redirect if passcode is right. Works with custom parameters! |
| title |Text appearing above passcode pins <br/>Default: "Enter Passcode" |

<p align="center">
  <code>new IPhonePasscode(Element, { <strong>Options</strong> });</code>
</p>

<br/>

| CSS Classes for customization | 
| --- |
| ipasscode__press-animation  |
| ipasscode__button |
| ipasscode__button-big-number |
| ipasscode__button-small-letters |
| ipasscode__title |
| ipasscode__pinsdiv |
| ipasscode__pins |

**Use !important if nothing changes**

<br/>

### Example with standard JS and PHP backend
```html
<div id="iphonePasscode" />
```
```javascript
new IPhonePasscode(
  document.getElementById('iphonePasscode'), {
    md5passcode: 'ec6a6536ca304edf844d1d248a4f08dc',
    length: '4',
    redirect: 'keychain.php'
  }
);
```
```php
if($_GET['pass'] == md5('1234')) {
  session_start();
  $_SESSION['keychain'] = True;
  header('location: ../index.html');
}
```
- Passcode is 1234
- PHP used for back-end with a keychain session variable

<br/>

### Example with React
```jsx
<IPhonePasscode length="4" title="Enter Passcode To Login" redirect="/checkpasscode">
```
- Passcode not exposed on client side, causing it reload page on each try
npm package: @kezoponk/scroller
Description: Create responsive and pausable horizontally moving elements
Author: Albin Eriksson
Latest version: 1.1.5

# Scroller.js
Create responsive and pausable horizontally moving elements.  
Use the main import for standard js, or import from `dist/react` for the included React component.
<br/><br/>

## Installation
Install from the command line:
```shell
$ npm install @kezoponk/scroller
```
Install via package.json:
```json
"@kezoponk/scroller": "1.1.5" 
```
<br/>

## Usage
| Option / Prop | Description and defaults |
| --- | --- |
| `direction` | left or right <br/>Default: left |
| `speed` | Any number <br/>Turtle: 20 - Rabbit: 120<br/>Default: 20 |
| `animation` | Animation type <br/>Default: linear |
| `delayBetweenAnimationsMS` | Delay before starting next animation when last animation is finished<br>Default: 0 |
| `finishAnimationBeforePause` | Default: false |


**Keep in mind** eventlisteners to items in target div will get removed since cloneNode ignores them
<br/><br/>

## Methods
These are available for access on the scroller instance/ref <br/>
* **pause()** <br/>
Also triggered when mouse enters the target element <br/>
* **unpause()** <br/>
Also triggered when mouse exits the target element <br/>
* **restore()** <br/>
Restore target div to state before scroller - **can't be undone**

<br/>

### Example with standard JS

```html
<div id="scrolldiv">
  <button>Example</button>
  <button>Political</button>
  <button>App</button>
  <button>Programming</button>
  <button>Program</button>
  <button>School</button>
</div>
```
```javascript
new Scroller(document.getElementById('scrolldiv'), { direction: 'left', speed: 10 });
```
- Scroll to left
- Moving 1px every 10ms

<br/>
    
### Example with React

```jsx
<Scroller direction="right" speed={100} animation="ease-in-out">
  <a href="/example"><button>Example</button></a>
  <a href="/political"><button>Political</button></a>
  <a href="/app"><button>App</button></a>
  <a href="/programming"><button>Programming</button></a>
  <a href="/program"><button>Program</button></a>
  <a href="/school"><button>School</button></a>
</Scroller>
```
- Scroll to right
- Moving 1px every 100ms
- Ease-in-out animation on each item

<br/>