open-index/open-npm huggingface dataset:
npm package: @neroom/nevision
Description: React SDK for NEROOM/NEVISION session recording
Latest version: 0.1.15

# @neroom/nevision

React SDK for Neroom session recording.

## Installation

```bash
npm install @neroom/nevision
```

## Usage

Add the `NevisionRecorder` component to your app's root layout:

```tsx
import { NevisionRecorder } from '@neroom/nevision';

export default function RootLayout({ children }) {
  return (
    <html>
      <body>
        <NevisionRecorder
          siteId="your-site-id"
          apiKey="your-api-key"
        />
        {children}
      </body>
    </html>
  );
}
```

## Props

| Prop | Type | Required | Description |
|------|------|----------|-------------|
| `siteId` | `string` | Yes | Your Ne-Room site ID |
| `apiKey` | `string` | Yes | Your Ne-Room API key |
| `apiUrl` | `string` | No | Custom API URL (default: `https://api.nevision.app`) |
| `sampling` | `object` | No | Sampling options for performance |
| `privacy` | `object` | No | Privacy masking options |
| `onStart` | `(sessionId: string) => void` | No | Callback when recording starts |
| `onError` | `(error: Error) => void` | No | Callback on error |

## Privacy Masking

By default, password and email inputs are masked. You can customize this:

```tsx
<NevisionRecorder
  siteId="your-site-id"
  apiKey="your-api-key"
  privacy={{
    maskAllInputs: true,
    maskTextSelector: '.sensitive-data',
    blockSelector: '.do-not-record',
  }}
/>
```

### CSS Classes

Add these classes to elements for privacy control:

- `.rr-mask` - Masks text content (shows asterisks)
- `.rr-block` - Blocks the entire element from recording
- `.rr-ignore` - Ignores changes to this element

## License

MIT
npm package: @neruco/vanilla-matchheight
Description: Vanilla JS matchHeight utility (byRow / target / remove / data-mh)
Author: neruco
Latest version: 1.0.0

# @neruco/vanilla-matchheight

[![Live Demo](https://img.shields.io/badge/Live-Demo-blue)](https://codepen.io/coder_ao/pen/QwKwRwR)

A lightweight vanilla JavaScript utility for matching element heights.

A modern alternative to `jquery-match-height` with no dependencies.

---

## ✨ Features

- No dependencies
- Small footprint
- ES5 compatible
- Works with dynamic content
- Supports resize / orientation change recalculation

---

## 📦 Installation

### npm

```bash
npm install @neruco/vanilla-matchheight
```

### CDN (jsDelivr)

```html
<script src="https://cdn.jsdelivr.net/npm/@neruco/vanilla-matchheight@1.0.0/dist/vanilla-matchheight.umd.min.js"></script>
```

---

## 🚀 Basic Usage (data-mh)

```html
<div class="card" data-mh="group1">Card A</div>
<div class="card" data-mh="group1">Card B</div>
<div class="card" data-mh="group1">Card C</div>
```

```js
VanillaMatchHeight.applyDataApi();
```

All elements sharing the same data-mh value will have equal height.

---

## 🧠 JavaScript API

### Register elements manually

```js
VanillaMatchHeight.register(
  document.querySelectorAll('.card'),
  { byRow: true }
);
```

### Match height to a specific target

```js
VanillaMatchHeight.register(
  document.querySelectorAll('.card'),
  { target: document.querySelector('.card--master') }
);
```

### Remove matched height

```js
VanillaMatchHeight.applyGroup(
  document.querySelectorAll('.card'),
  { remove: true }
);
```

### Recalculate after dynamic changes

```js
VanillaMatchHeight.updateAll();
```

---

## ⚙ Options

| Option   | Type    | Default    | Description                        |
| -------- | ------- | ---------- | ---------------------------------- |
| byRow    | Boolean | `true`     | Match height per row               |
| property | String  | `"height"` | CSS property to modify             |
| target   | Element | `null`     | Match height to a specific element |
| remove   | Boolean | `false`    | Remove applied height              |

---

## 🌍 Browser Support

Works in modern browsers (ES5 compatible).

---

## 📜 License

MIT

---

## 👤 Author

Created by neruco
npm package: @nerujs/express
Description: The express adapter for neru
Author: GHOST
Latest version: 1.0.3

# Adapter Express

# Quick Start

You can get started by creating your neru & express project:

```bash
npm init neru my-project
```

# Documentation

- [Neru Documentation](https://neru.dev)
- [Express Adapter Documentation](https://www.neru.dev/adapters/express.html)

# Discord

https://discord.gg/2Vd4wAjJnm
npm package: @nerujs/fastify
Description: The fastify adapter for neru
Author: GHOST
Latest version: 1.0.2

# Adapter Fastify

# Quick Start

You can get started by creating your neru & fastify project:

```bash
npm init neru my-project
```

# Documentation

- [Neru Documentation](https://neru.dev)
- [Fastify Adapter Documentation](https://www.neru.dev/adapters/fastify.html)

# Discord

https://discord.gg/2Vd4wAjJnm
npm package: @nerujs/hapi
Description: The hapi adapter for neru
Author: GHOST
Latest version: 1.0.3

# Adapter Hapi

# Quick Start

You can get started by creating your neru & hapi project:

```bash
npm init neru my-project
```

# Documentation

- [Neru Documentation](https://neru.dev)
- [Hapi Adapter Documentation](https://www.neru.dev/adapters/hapi.html)

# Discord

https://discord.gg/2Vd4wAjJnm
npm package: @nerujs/methods
Description: A typed http.METHODS
Author: GHOST
Latest version: 1.0.3

# Methods

This is a simple typed version of nodes http.METHODS, it's made since [neru](https://github.com/ghostdevv/neru) requires a typed http methods and nodes is typed as string

# Exported members

## Code

-   `methods`<br />
    This is a uppercase typed array of http methods

-   `lowercaseMethods`<br />
    This is a lowercase typed array of http methods

## Types

-   `Method`<br />
    This is a method type, one of the possible http methods

-   `LowercaseMethod`<br />
    This is a method type, but lowercase. This can also be done with `Lowercase<Method>`
npm package: @nerv_uk/unilib
Description: Universal library
Author: Volodymyr Nerovnia
Latest version: 0.0.12-beta.3

![GitHub License](https://img.shields.io/github/license/rightsoftend/unilib)
![NPM Version](https://img.shields.io/npm/v/@nerv_uk/unilib)

# @nerv_uk/unilib

## Installation

```
npm install @nervuk/unilib
```

## Usage

```
const { isString } = require "@nerv_uk/unilib/dist/strings";
import { isString } from '@nerv_uk/unilib/dist/strings';
```
### Modules

- dates
- numbers
- strings
- arrays
- crypt
- universal

## Documentation

### Dates

**dayDiff(Date, Date)** - get the number of days between the dates

**dayInYear(Date)** - get the number of this day in the year

### Numbers

**average(...numbers)** - calculate average

**randomNumber = (min: number, max:number): number** - generates a random number between the specified min and max values, inclusive

### Strings

**generateRandomString(length: number)** - generate a random string

**isString(value: any)** - check if the value is a string

**isEmptyString(value: any)** - check if the value is empty string; throw Error if value is not a string

### Arrays

**isStringArray(arr: unknown[]): arr is string[]** -  check if an array is a string array

**isNumberArray(arr: unknown[]): arr is number[]** - check if an array is a number array

**getRandomIndex &lt;T&gt;(arr: T[]): number**  - return the random index of the array

**numberToArray(num: number): number[]** - convert a single number into an array of its digits

**arrayOfNumbersToNumber(arr: number[]): number** - concatenate a number array into a single number

### Crypt

**getSaltAndHash(password, saltSize?: 16, options?: {})** - return an object with a hash and salt

options:

```json
{
  algorithm?: THashAlgorithm,
  iterations?: number, 
  keyLen?: number, 
  saltSize?: number,
}
```

algorithm:

- 'sha1'
- 'sha224'
- 'sha256'
- 'sha384'
- ...

Result:

```
{
  salt: '87678e...',
  hash: '29a12437606a2badd1...'
}
```

**isHashBelongPassword(password, salt, testHash, options)** - test if password's jash and testHash are equal 

### Universal

**uniqueArray([]: any)** - get an array of unique elements

## License

Copyright © 2024 [Volodymyr Nerovnia](https://github.com/nerovnia); Released under the [MIT](./LICENSE) license.
npm package: @nerveglobal/greenhouse-aurora-sdk
Description: 🛠 An SDK for building applications on top of Quickswap.
Latest version: 1.1.4

# QuickSwap SDK

This repository has been forked from [UniswapV2](https://github.com/Uniswap/uniswap-sdk)

## Running tests

To run the tests, follow these steps. You must have at least node v10 and [yarn](https://yarnpkg.com/) installed.

First clone the repository:

```sh
git clone https://github.com/QuickSwap/QuickSwap-sdk.git
```

Move into the quickswap-sdk working directory

```sh
cd QuickSwap-sdk/
```

Install dependencies

```sh
yarn install
```

Run tests

```sh
yarn test
```

You should see output like the following:

```sh
yarn run v1.22.4
$ tsdx test
 PASS  test/constants.test.ts
 PASS  test/pair.test.ts
 PASS  test/fraction.test.ts
 PASS  test/miscellaneous.test.ts
 PASS  test/entities.test.ts
 PASS  test/trade.test.ts

Test Suites: 1 skipped, 6 passed, 6 of 7 total
Tests:       3 skipped, 82 passed, 85 total
Snapshots:   0 total
Time:        5.091s
Ran all test suites.
✨  Done in 6.61s.
```
npm package: @nerveglobal/greenhouse-one-sdk
Description: 🛠 An SDK for building applications on top of Quickswap.
Latest version: 1.0.2

# QuickSwap SDK

This repository has been forked from [UniswapV2](https://github.com/Uniswap/uniswap-sdk)

## Running tests

To run the tests, follow these steps. You must have at least node v10 and [yarn](https://yarnpkg.com/) installed.

First clone the repository:

```sh
git clone https://github.com/QuickSwap/QuickSwap-sdk.git
```

Move into the quickswap-sdk working directory

```sh
cd QuickSwap-sdk/
```

Install dependencies

```sh
yarn install
```

Run tests

```sh
yarn test
```

You should see output like the following:

```sh
yarn run v1.22.4
$ tsdx test
 PASS  test/constants.test.ts
 PASS  test/pair.test.ts
 PASS  test/fraction.test.ts
 PASS  test/miscellaneous.test.ts
 PASS  test/entities.test.ts
 PASS  test/trade.test.ts

Test Suites: 1 skipped, 6 passed, 6 of 7 total
Tests:       3 skipped, 82 passed, 85 total
Snapshots:   0 total
Time:        5.091s
Ran all test suites.
✨  Done in 6.61s.
```
npm package: @nerveglobal/greenhouse-sdk
Description: 🛠 An SDK for building applications on top of Quickswap.
Latest version: 2.0.1

# QuickSwap SDK

This repository has been forked from [UniswapV2](https://github.com/Uniswap/uniswap-sdk)

## Running tests

To run the tests, follow these steps. You must have at least node v10 and [yarn](https://yarnpkg.com/) installed.

First clone the repository:

```sh
git clone https://github.com/QuickSwap/QuickSwap-sdk.git
```

Move into the quickswap-sdk working directory

```sh
cd QuickSwap-sdk/
```

Install dependencies

```sh
yarn install
```

Run tests

```sh
yarn test
```

You should see output like the following:

```sh
yarn run v1.22.4
$ tsdx test
 PASS  test/constants.test.ts
 PASS  test/pair.test.ts
 PASS  test/fraction.test.ts
 PASS  test/miscellaneous.test.ts
 PASS  test/entities.test.ts
 PASS  test/trade.test.ts

Test Suites: 1 skipped, 6 passed, 6 of 7 total
Tests:       3 skipped, 82 passed, 85 total
Snapshots:   0 total
Time:        5.091s
Ran all test suites.
✨  Done in 6.61s.
```
npm package: @nerveglobal/greenhouse-sx-sdk
Description: 🛠 An SDK for building applications on top of Quickswap.
Latest version: 1.0.2

# QuickSwap SDK

This repository has been forked from [UniswapV2](https://github.com/Uniswap/uniswap-sdk)

## Running tests

To run the tests, follow these steps. You must have at least node v10 and [yarn](https://yarnpkg.com/) installed.

First clone the repository:

```sh
git clone https://github.com/QuickSwap/QuickSwap-sdk.git
```

Move into the quickswap-sdk working directory

```sh
cd QuickSwap-sdk/
```

Install dependencies

```sh
yarn install
```

Run tests

```sh
yarn test
```

You should see output like the following:

```sh
yarn run v1.22.4
$ tsdx test
 PASS  test/constants.test.ts
 PASS  test/pair.test.ts
 PASS  test/fraction.test.ts
 PASS  test/miscellaneous.test.ts
 PASS  test/entities.test.ts
 PASS  test/trade.test.ts

Test Suites: 1 skipped, 6 passed, 6 of 7 total
Tests:       3 skipped, 82 passed, 85 total
Snapshots:   0 total
Time:        5.091s
Ran all test suites.
✨  Done in 6.61s.
```
npm package: @nerveglobal/myprototypequicksdkkit
Description: 🛠 An SDK for building applications on top of Quickswap.
Latest version: 1.0.5

# QuickSwap SDK

This repository has been forked from [UniswapV2](https://github.com/Uniswap/uniswap-sdk)

## Running tests

To run the tests, follow these steps. You must have at least node v10 and [yarn](https://yarnpkg.com/) installed.

First clone the repository:

```sh
git clone https://github.com/QuickSwap/QuickSwap-sdk.git
```

Move into the quickswap-sdk working directory

```sh
cd QuickSwap-sdk/
```

Install dependencies

```sh
yarn install
```

Run tests

```sh
yarn test
```

You should see output like the following:

```sh
yarn run v1.22.4
$ tsdx test
 PASS  test/constants.test.ts
 PASS  test/pair.test.ts
 PASS  test/fraction.test.ts
 PASS  test/miscellaneous.test.ts
 PASS  test/entities.test.ts
 PASS  test/trade.test.ts

Test Suites: 1 skipped, 6 passed, 6 of 7 total
Tests:       3 skipped, 82 passed, 85 total
Snapshots:   0 total
Time:        5.091s
Ran all test suites.
✨  Done in 6.61s.
```
npm package: @nerveglobal/myprototypes
Description: Set of UI components for my prototype projects
Latest version: 1.0.7

# 🥞 Pancake UIkit

**This repository is not used anymore. See the [https://github.com/pancakeswap/pancake-toolkit](Pancake toolkit) instead**

[![Version](https://img.shields.io/npm/v/@pancakeswap-libs/uikit)](https://www.npmjs.com/package/@pancakeswap-libs/uikit) [![Size](https://img.shields.io/bundlephobia/min/@pancakeswap-libs/uikit)](https://www.npmjs.com/package/@pancakeswap-libs/uikit)

Pancake UIkit is a set of React components and hooks used to build pages on Pancake's apps. It also contains a theme file for dark and light mode.

## Install

`yarn add @pancakeswap-libs/uikit`

## Setup

### Theme

Before using Pancake UIkit, you need to provide the theme file to styled-component.

```
import { ThemeProvider } from 'styled-components'
import { light, dark } from '@pancakeswap-libs/uikit'
...
<ThemeProvider theme={isDark}>...</ThemeProvider>
```

### Reset

A reset CSS is available as a global styled component.

```
import { ResetCSS } from '@pancakeswap-libs/uikit'
...
<ResetCSS />
```

### Types

This project is built with Typescript and export all the relevant types.

## How to use the UIkit

If you want to use components from the UIkit, check the [Storybook documentation](https://pancakeswap.github.io/pancake-uikit/)
npm package: @nerveglobal/myprototypesquicksdkkit
Description: 🛠 An SDK for building applications on top of Quickswap.
Latest version: 1.0.0

# QuickSwap SDK

This repository has been forked from [UniswapV2](https://github.com/Uniswap/uniswap-sdk)

## Running tests

To run the tests, follow these steps. You must have at least node v10 and [yarn](https://yarnpkg.com/) installed.

First clone the repository:

```sh
git clone https://github.com/QuickSwap/QuickSwap-sdk.git
```

Move into the quickswap-sdk working directory

```sh
cd QuickSwap-sdk/
```

Install dependencies

```sh
yarn install
```

Run tests

```sh
yarn test
```

You should see output like the following:

```sh
yarn run v1.22.4
$ tsdx test
 PASS  test/constants.test.ts
 PASS  test/pair.test.ts
 PASS  test/fraction.test.ts
 PASS  test/miscellaneous.test.ts
 PASS  test/entities.test.ts
 PASS  test/trade.test.ts

Test Suites: 1 skipped, 6 passed, 6 of 7 total
Tests:       3 skipped, 82 passed, 85 total
Snapshots:   0 total
Time:        5.091s
Ran all test suites.
✨  Done in 6.61s.
```
npm package: @nervina-labs/ckb-dex
Description: The JavaScript SDK for CKB DEX
Author: duanyytop
Latest version: 0.7.0

# CKB DEX SDK

[![CI](https://github.com/nervina-labs/ckb-dex-sdk/actions/workflows/build.yml/badge.svg?branch=master)](https://github.com/nervina-labs/ckb-dex-sdk/actions)
[![NPM](https://img.shields.io/npm/v/@nervina-labs/ckb-dex/latest.svg)](https://www.npmjs.com/package/@nervina-labs/ckb-dex)

CKB DEX SDK is a comprehensive web development kit, which helps developers interact with the CKB DEX contract in JavaScript/TypeScript environments.

The SDK provides methods for making orders, taking orders, and canceling orders. Developers can use common lock scripts, such as official secp256k1/blake160 lock, JoyID lock, etc., to interact with the CKB DEX contract.

You can use the DEX to swap fungible tokens([SUDT](https://github.com/nervosnetwork/rfcs/blob/master/rfcs/0025-simple-udt/0025-simple-udt.md), [XUDT](https://talk.nervos.org/t/rfc-extensible-udt/5337), [ccBTC](https://www.crosschain.network/assets?token=ccbtc), etc.) and non-fungible tokens([Spore](https://docs.spore.pro/), [mNFT](https://talk.nervos.org/t/rfc-multi-purpose-nft-draft-spec/5434), etc.) with CKB native asset and JoyID lock is recommended to hold and swap CKB assets.

You can build the maker transactions to transfer FT or NFT assets to DEX lock script whose args contains owner address, price(based on CKB native asset), setup, etc. Anyone can build a taker transaction, as long as the price required in the DEX lock args is met. You can cancel the maker transactions at any time before the taker transactions are executed.

## Installation

```
$ npm i @nervina-labs/ckb-dex
# or
$ yarn add @nervina-labs/ckb-dex
# or
$ pnpm add @nervina-labs/ckb-dex
```

## Development

### Connect the JoyID Wallet

You can [connect JoyID wallet](https://docs.joyid.dev/guide/ckb/connect) using [@joyid/ckb](https://www.npmjs.com/package/@joyid/ckb) SDK `connect` function and then you can get the ConnectResponseData to build maker and taker transactions later.

### Build and Sign transactions

You can use [`buildMakerTx`](./src/order/maker.ts), [`buildCancelTx`](./src/order/cancel.ts) and [`buildTakerTx`](./src/order/taker.ts) methods to place, cancel and take orders with the ConnectResponseData and the methods will generate CKB raw transaction for you to be signed later.

You must set the asset type(CKBAsset) when calling `buildXXXTx` methods and the CKBAsset is defined as follows:

```typescript
export enum CKBAsset {
  XUDT,
  SUDT,
  XUDT_CC, // ccBTC
  SPORE,
  MNFT,
}
```

The [examples](./example/) demonstrate how to build FT and NFT maker, taker transactions with JoyID lock and the local test private keys are for simplicity, please DON'T use the local private keys in your production DApp.

You can call the [`signRawTransaction`](https://docs.joyid.dev/apis/ckb/sign-raw-tx) method to sign the raw tx with JoyID wallet through [@joyid/ckb](https://www.npmjs.com/package/@joyid/ckb) SDK, and you can send the signed transaction through CKB RPC.
npm package: @nervina-labs/mutiny-wasm
Description: A wasm-bindgen wrapper around mutiny-core
Latest version: 1.16.0

# mutiny-wasm

A wasm-bindgen wrapper around mutiny-core

## Installing

### Package manager

Using npm:

```bash
$ npm install mutiny-wasm
```

Using bower:

```bash
$ bower install mutiny-wasm
```

Using yarn:

```bash
$ yarn add mutiny-wasm
```

Using pnpm:

```bash
$ pnpm add mutiny-wasm
```
npm package: @nervos/appchain-truffle-migrate
Description: This is one of the package used by [AppChian-Truffle-Box](https://github.com/cryptape/appchain-truffle-box).
Author: Yao
Latest version: 0.20.1

# AppChain-Truffle-Migrate

This is one of the package used by [AppChian-Truffle-Box](https://github.com/cryptape/appchain-truffle-box).

[中文版](https://github.com/cryptape/appchain-truffle-migrate/blob/new-version-compatible-with-truffle/docs/zh/readme.md)

Here is an [example](https://github.com/cryptape/dapp-demos/tree/develop/pet-shop) for using AppChain-Truffle-Migrate to deploy contract on AppChain.
npm package: @nervos/observables
Description: Observable based [CITA RPC](https://cryptape.github.io/cita/usage-guide/rpc/) toolkit
Author: Keith
Latest version: 0.20.1

![Travis](https://travis-ci.org/cryptape/nervos-observables.svg?branch=develop)
[![npm](https://img.shields.io/npm/v/npm.svg)](https://www.npmjs.com/package/@nervos/observables)
[![MIT](https://img.shields.io/badge/License-MIT-green.svg)](https://github.com/cryptape/nervos-observables)
[![AppChain](https://img.shields.io/badge/made%20for-Nervos%20AppChain-blue.svg)](https://appchain.nervos.org/)

# Nervos-Observables

Observable based [CITA RPC](https://cryptape.github.io/cita/usage-guide/rpc/) toolkit

# Features

- Supports Observable API

# Installing

```bash
$ yarn add @nervos/observables
```

# Example

```javascript
import NervosObservables from 'nervos-observables'

const SERVER = 'localhost:1337'
const INTERVAL = 10
const RESERVED_RECORDS = 10

const nervosObservables = new NervosObservables({
  server: SERVER,
  interval: INTERVAL,
  reservedRecords: RESERVED_RECORDS,
})

/**
 * @function peerCount
 * @description subscribe to the count of peer
 * @param {string} interval - interval of observable
 * @param {boolean} observed - switch of observable, default to true, observing the peerCount
 * @return {string} count - peer count
 */
nervosObservables.peerCount(INTERVAL).subscribe(count => {
  console.log(count)
})

/**
 * @function newBlockNumber
 * @description subscribe to the latest block number
 * @param {string} interval - interval of observable
 * @param {boolean} observed - switch of observable, default to true, observing the new block number
 * @return {string} blockNumber - block number
 */
nervosObservables.newBlockNumber(INTERVAL).subscribe(blockNumber => {
  console.log(blockNumber)
})

/**
 * @function blockByNumber
 * @description request block by block number
 * @param {string} blockNumber
 * @return {object} block
 */
nervosObservables.blockByNumber(blockNumber).subscribe(block => {
  console.log(block)
})

/**
 * @function newBlockByNumber
 * @description subscribe to lastest block
 * @param {string} interval - interval of observable
 * @param {boolean} observed - switch of observable, default to true, observing the new block
 * @return {object} block
 */
nervosObservables.newBlockByNumber(INTERVAL).subscribe(block => {
  console.log(block)
})

/**
 * @function blockByHash
 * @description request block by block hash
 * @param {string} hash - block hash
 * @return {object} block
 */
nervosObservables.blockByHash(HASH).subscribe(block => {
  console.log(block)
})

/**
 * @function sendSignedTransaction
 * @description send signed transaction
 * @param {string} signedTransaction - signed transaction
 * @return {object} result
 */
nervosObservables.sendSignedTransaction(signedTransaction).subscribe(result => {
  console.log(result)
})

/**
 * @function newBlockByNumberSubject
 * @description subscribe to new block
 */
nervosObservable.newBlockByNumberSubject.subscribe(console.log)
nervosObservable.newBlockByNumberSubject.connect()
```
npm package: @nervoscan/weblogger
Description: WebLogger frontend SDK
Author: nervotec
Latest version: 1.0.0-rc.13112025

# @nervoscan/weblogger

Lightweight logging SDK for Nervoscan web apps.

```ts
import { WebLogger } from "@nervoscan/weblogger";
const logger = new WebLogger("https://api.nervoscan.com/logs");
logger.info("App started");
npm package: @nervosnetwork/ckb-cli
Description: Command line package based on @nervosnetwork/ckb-sdk-core
Author: Nervos
Latest version: 0.21.1

# `ckb-cli`

`@nervosnetwork/ckb-cli` is a command line package based on `@nervosnetwork/ckb-sdk-core`, used to start a Node.js runtime, which has an object named `core` injected. The `core` is the instance of `@nervosnetwork/ckb-sdk-core`.

This project is still under very rapid development, all contributions are welcome.

## Installation

Install the package with [yarn](https://yarnpkg.com/):

```sh
$ yarn global add @nervosnetwork/ckb-cli
```

Or install the package with [npm](https://npmjs.com):

```sh
$ npm install -g @nervosnetwork/ckb-cli
```

## Usage

### REPL

```sh
$ ckb-cli i <url to the node>
ckb => connected to <url to the node>
ckb => await core.rpc.getTipBlockNumber()
'6905'
ckb => await core.rpc.getBlockHash('6905')
'0x89de946313839a8a77749b6218d4d7ab3513910c5ed86040e5f38efd41e566d7'
ckb => await core.rpc.getBlock('0x89de946313839a8a77749b6218d4d7ab3513910c5ed86040e5f38efd41e566d7')
{ header:
   { parentHash:
      '0xc5e11f1e5bcf589a99b94d9eaeffdccb51e3fbdc3c39561dfc49e6d42740f400',
     transactionsRoot:
      '0x993b28a820cea9297da82654c18e99e6469e08c1a14425724e71ed271d0aac0e',
     proposalsHash:
      '0x0000000000000000000000000000000000000000000000000000000000000000',
     witnessesRoot:
      '0x0000000000000000000000000000000000000000000000000000000000000000',
     unclesHash:
      '0x0000000000000000000000000000000000000000000000000000000000000000',
     unclesCount: 0,
     difficulty: '0x1000',
     epoch: '4',
     hash:
      '0x89de946313839a8a77749b6218d4d7ab3513910c5ed86040e5f38efd41e566d7',
     number: 6905,
     nonce: '17168453808346374945',
     timestamp: '1557653980138',
     version: 0 },
  uncles: [],
  transactions:
   [ { cellDeps: [],
       inputs: [Array],
       outputs: [Array],
       hash:
        '0x993b28a820cea9297da82654c18e99e6469e08c1a14425724e71ed271d0aac0e',
       version: 0,
       witnesses: [] } ],
  proposals: [] }
ckb =>
```

### Dashboard

```sh
$ ckb-cli d <url to the node>
```
npm package: @nervosnetwork/ckb-sdk-address
Description: Address module of @nervosnetwork/ckb-sdk-core
Author: Nervos
Latest version: 0.21.1
Deprecated: deprecate @nervosnetwork/ckb-sdk-address and bundle it in @nervosnetwork/ckb-sdk-core

# `ckb-sdk-address`

`@nervosnetwork/ckb-sdk-address` is the address module of `@nervosnetwork/ckb-sdk-core`.

Its current responsibility is just to generate an address object, the algorithm will be introduced in an RFC in the near future.

In a nutshell, the address format is similar to [BIP-0173](https://github.com/bitcoin/bips/blob/master/bip-0173.mediawiki)

1. this module takes a private key and then calculates the corresponding public key with secp256k1 algorithm;
2. use blake160 algorithm to hash the public key and get a blake160-ed string;
3. bech32 the blake160-ed string with three options(prefix, type, binIndex) to get a bech32-formatted address.

Detailed methods could be found in `@nervosnetwork/ckb-sdk-utils`

## Address configuration

> The meanings of the configuration will be explained in the RFC.

1. Prefix

   - 'ckb' for the mainnet
   - 'ckt' for the testnet

2. type

   - '0x00' for wallet build-in binary_hash ref id
   - '0x01' for binary_hash

3. binIndex

   - 'P2PH'

## Address Value

The `address.value` is the address string generated by the private key and address configuration you passed to the constructor.

## Address identifier

The `address.identifier` represents the identity of the address object. It derives from the public key, and used to generate the human readable address value.

`address.identifier` is calculated by `blake160(publicKey)`, which picks the first 20 bytes of `blake2b(publicKey)`.

And `address.identifier` is used to generate `address.value` in `bech32(address.identifier, ...AddressConfiguration)`.

## Installation

Install the package with [yarn](https://yarnpkg.com/):

```sh
$ yarn add @nervosnetwork/ckb-sdk-address
```

Or install the package with [npm](https://npmjs.com):

```sh
$ npm install --save @nervosnetwork/ckb-sdk-address
```

## Usage

```javascript
const Address = require('@nervosnetwork/ckb-sdk-address').default

const privateKey = 'your private key'

const address = new Address(privateKey, { prefix: 'ckt' })
console.log(address.value)
console.log(address.identifier)
```
npm package: @neryss/mc_server_status
Description: A tool to get informations from MC Servers
Author: Neryss
Latest version: 1.1.2

# Minecraft Server Status

This is a script I wrote to get the informations from a running minecraft server.

## How to use

The module is available using [npm](www.npmjs.com/package/@neryss/mc_server_status).
```ts
import { getStatus } from "@neryss/mc_server_status";

getStatus("neryss.pw", 25565).then(res => {
  console.log(res);
}).catch((error) => {
  console.error(error);
});
```

Response will be formated as follows:

```ts
{
  favicon: 'data:image/png;base64,{data}`,
  isModded: true/false,
  description: 'server description',
  players: {max: 20, online: 0},
  version: {name: '1.21.1', protocol: 767},
  preventChatReports: true/false
}
```

#

# Dev info

You'll fine documentation about how the package was developped further below!

# Sources

- [Minecraft server list protocol](https://minecraft.wiki/w/Java_Edition_protocol/Server_List_Ping)
- [VarInt pseudo code](https://minecraft.wiki/w/Java_Edition_protocol/Packets#VarInt_and_VarLong)
- [Handshake format](https://minecraft.wiki/w/Java_Edition_protocol/Packets#Handshake)
- [Protocol ids](https://minecraft.fandom.com/wiki/Protocol_version)

# Packets

When sending a TCP request to the server, it expects a specific packet to arrive:

```
|     name    |  type  |            notes                 |
|-------------|--------|----------------------------------|
| Length      | VarInt | Leng of packet ID + data         |
| Packet ID   | VarInt | Protocol id (protocol packet id) |
| Data        | Byte[] | Depends on the case, check below |
```

## Handshake protocol

In our case, the handshake protocol comes first, it uses the protocol `0x00` and its data is formed as follows:

```
|     name         |  type       |            notes                                               |
|------------------|-------------|----------------------------------------------------------------|
| Protocol version | VarInt      | The protocol version (minecraft version, check "protocol ids") |
| Server addr      | String      | hostname/ip of the server                                      |
| Server port      | u_short     | Defaults to 25565                                              |
| Intent           | VarInt Enum | 1 for status, 2 for login, 3 for transfer                 |
```

## Status Request

The status packet is only composed of the packet ID and its length. It must be sent right after the handshake and before anythhing else (ping etc.), it won't work otherwise.

# Response

The server response format can be found [here](https://minecraft.wiki/w/Java_Edition_protocol/Server_List_Ping#Status_Response).
It is composed of a single String field, as with every other String response, it is prefixed by its length as a VarInt, which can be used to
wait and read for several chunks as done in the script.