open-index/open-npm huggingface dataset:
npm package: @hailapi/client
Description: Official Node.js SDK for HailAPI
Author: HailAPI
Latest version: 1.0.2

# @hailapi/client

The official Node.js SDK for HailAPI - Hail damage detection using AI.

## Installation

```bash
npm install @hailapi/client
# or
yarn add @hailapi/client
# or
pnpm add @hailapi/client
```

## Usage

```typescript
import { HailAPI } from '@hailapi/client';
import fs from 'fs';

// Initialize the client
// It will automatically use the HAIL_API_KEY environment variable if not provided
const client = new HailAPI({
  apiKey: 'your_api_key_here', // Optional if HAIL_API_KEY is set
});

async function main() {
  try {
    // Read an image file
    const imageBuffer = fs.readFileSync('./car-damage.jpg');

    // Detect hail damage
    const result = await client.detect(imageBuffer, {
      confidenceThreshold: 0.15, // Optional
      nmsThreshold: 0.3,         // Optional
    });

    console.log('Detection results:', result);
  } catch (error) {
    console.error('Error:', error);
  }
}

main();
```

## Types

The SDK includes full TypeScript definitions for the API responses.

```typescript
interface DetectResponse {
  detections: Detection[];
  metadata?: {
    processingTimeMs: number;
    imageWidth: number;
    imageHeight: number;
  };
}

interface Detection {
  classId: number;
  className: string;
  confidence: number;
  box: BoundingBox;
}

interface BoundingBox {
  x: number;
  y: number;
  width: number;
  height: number;
}
```

## License

MIT
npm package: @haileiyesus/pulsejs
Description: a minimalist nodejs http framework with no third party dependencies used for educational purpose.
Author: haileiyesus mesafint
Latest version: 0.0.1

### Pulsejs

Pulsejs is a minimal Node.js web framework built without any third-party dependencies, designed for educational purposes.

## Features

- Minimalistic design
- No third-party dependencies
- Educational and easy to understand

## Installation

To install Pulsejs, clone the repository:

```bash
git clone https://github.com/hal-29/pulsejs.git
cd pulsejs
```

## Usage

Here's a simple example of how to use Pulsejs:

```javascript
const pulse = require('./pulsejs');

const app = pulse();

app.get('/', (req, res) => {
   res.send('Hello, world!');
});

app.listen(3000, () => {
   console.log('Server is running on port 3000');
});
```

## API

### `pulse()`

Creates a new Pulsejs application.

### `app.get(path, handler)`

Registers a GET route.

- `path` (string): The route path.
- `handler` (function): The function to handle the request.

### `app.listen(port, callback)`

Starts the server on the specified port.

- `port` (number): The port number.
- `callback` (function): The function to call when the server starts.

## Contributing

Contributions are welcome! Please open an issue or submit a pull request.

## License

This project is licensed under the MIT License.
npm package: @haileyok/bluesky-video
Description: A video player library for Bluesky
Author: Bluesky Social
Latest version: 0.3.2

## Note about support for this library

This library was made for the Bluesky Social App. Support for this library is very much dependent on two factors:

- Do we have time to implement a feature or fix an issue?
- How important is the feature to Bluesky or does it fix an issue present in Bluesky?

If there are features that you want to see in this library that don't already exist and likely (or definitely) do not greatly improve the experience in Bluesky, please feel free to submit a PR! Of course, you should also feel free to make feature suggestions or bug reports as well, and whenever free time is available they might be worked on. Just know it might take some time.

Thank you!

# Bluesky Video

Video player library used in the Bluesky native app.

## Usage

TODO
npm package: @haileyok/react-native-paste-input
Description: React Native TextInput replacement to allow pasting files
Author: Elias Nahum
Latest version: 0.8.1-rc.6

# @mattermost/react-native-paste-input

React Native `TextInput` component have functionality to capture text input from a user
by using the soft and hardware keyboards but lacks the ability to restrict copy & paste options
as well as allwing pasting different files formats copied from other apps, like images & videos from
the Photos gallery app.

`PasteInput` is a `TextInput` replacement that solves this issues.

## Installation

```sh
npm i --save-exact @mattermost/react-native-paste-input
```

## Demo
| Android | iOS |
|-- |-- |
|![Android](/example/gifs/AndroidPasteInput.gif)|![iOS](/example/gifs/iOSPasteInput.gif)|



## Usage

```js
import React, { useRef } from 'react';
import PasteInput, { PastedFile, PasteInputRef } from "@mattermost/react-native-paste-input";

const YourTextInput = () => {
    const inputRef = useRef<PasteInputRef>(null);

    const onPaste = (
        error: string | null | undefined,
        files: Array<PastedFile>
    ) => {
        console.log('ERROR', error);
        console.log('PASTED FILES', files);
    };

    return (
        <PasteInput
            ref={inputRef}
            disableCopyPaste={false}
            onPaste={onPaste}
            multiline={true}
            blurOnSubmit={false}
            underlineColorAndroid="transparent"
            keyboardType="default"
            disableFullscreenUI={true}
            textContentType="none"
            autoCompleteType="off"
        />
    );
}
```

### Properties
All properties of the [TextInput](!https://reactnative.dev/docs/textinput) component plus:

##### `disableCopyPaste: boolean`
Indicates if the menu items for *cut*, *copy*, *paste* and *share* should not be present in the context menu.

##### `onPaste: (error, files) =>  void`
Callback that is called when the pasting files into the text input.
*Note: On Android this callback is also called when selecting and image / gif from the soft keyboard.*

## Contributing

See the [contributing guide](CONTRIBUTING.md) to learn how to contribute to the repository and the development workflow.

## License

MIT
npm package: @hailtrace/use-debounce
Description: A react debounce hook with options.
Author: Austin N. Hunt
Latest version: 1.0.0

A simple hook that debounces with options.

```javascript
import React, { useState, useCallback } from 'react';
import useDebounce from '@hailtrace/use-debounce';

function MyComponent() {
  const [ text, setText ] = useState();
  
  const handleSetText = useDebounce(
    useCallback((event) => {
      setText(event.target.value);
    }),
    1000,
    { leading: true, trailing: true },
  );

  return <input onChange={event => handleSetText(event.target.value)} placeholder="Text Input" />
}

```
npm package: @hailuo/hailuo-sdk-core
Description: ⚒️ An SDK for building applications on top of Uniswap V3
Latest version: 1.0.0

# Uniswap SDK Core

[![Unit Tests](https://github.com/Uniswap/uniswap-sdk-core/workflows/Unit%20Tests/badge.svg)](https://github.com/Uniswap/uniswap-sdk-core/actions?query=workflow%3A%22Unit+Tests%22)
[![Lint](https://github.com/Uniswap/uniswap-sdk-core/workflows/Lint/badge.svg)](https://github.com/Uniswap/uniswap-sdk-core/actions?query=workflow%3ALint)
[![npm version](https://img.shields.io/npm/v/@uniswap/sdk-core/latest.svg)](https://www.npmjs.com/package/@uniswap/sdk-core/v/latest)
[![npm bundle size (scoped version)](https://img.shields.io/bundlephobia/minzip/@uniswap/sdk-core/latest.svg)](https://bundlephobia.com/result?p=@uniswap/sdk-core@latest)

This code is shared across Uniswap TypeScript SDKs.
npm package: @haily/-tea-hailynew-quest
Description: Một thư viện giúp bạn tính tổng của 2 số bất kỳ
Author: berik9999
Latest version: 1.1.0

- Cài đặt nodejs và npm tại https://nodejs.org/en

- Tải file và lưu ở desktop

- Truy cập github.com tạo repository với tên tea-xyz-quest (Phải để repo public)

- Truy cập https://www.npmjs.com để tạo tài khoản

- Sửa file package.json, theo format
  - name => @username_npm/tea-xyz-quest 
  - author => @username_npm
  - repository => link tới repo github vừa tạo

- Truy cập repo github vừa tạo và upload cả folder vừa sửa lên

- Mở terminal, gõ lệnh "npm -v" để kiểm tra xem đã cài đặt thành công npm ở bước 1 chưa

- Gõ tiếp lệnh "cd Desktop/tea-xyz-quest" để trỏ tới thư mục code 

- "npm login" => Có 1 đường dẫn để bấm vào sẽ mở trình duyệt dẫn tới web login npm

- Sau khi login thành công gõ lệnh "npm publish --access public" để public package lên npm publish. Truy cập npm để check - Truy cập app.tea.xyz => Register a New OSS Project

- Tìm kiếm tên package vừa tạo. Bước này có thể mất tới 2-3 ngày để package mới xuất hiện trên hệ thống của tea.xyz

- Sau đó tea sẽ cho 1 file có tên tea.yaml, tải về và quay lại repo github, upload tiếp file đó lên là xong.
npm package: @haily/tea-haily-quest
Description: Một thư viện giúp bạn tính tổng của 2 số bất kỳ
Author: haily
Latest version: 1.1.0

- Cài đặt nodejs và npm tại https://nodejs.org/en

- Tải file và lưu ở desktop

- Truy cập github.com tạo repository với tên tea-xyz-quest (Phải để repo public)

- Truy cập https://www.npmjs.com để tạo tài khoản

- Sửa file package.json, theo format
  - name => @username_npm/tea-xyz-quest 
  - author => @username_npm
  - repository => link tới repo github vừa tạo

- Truy cập repo github vừa tạo và upload cả folder vừa sửa lên

- Mở terminal, gõ lệnh "npm -v" để kiểm tra xem đã cài đặt thành công npm ở bước 1 chưa

- Gõ tiếp lệnh "cd Desktop/tea-xyz-quest" để trỏ tới thư mục code 

- "npm login" => Có 1 đường dẫn để bấm vào sẽ mở trình duyệt dẫn tới web login npm

- Sau khi login thành công gõ lệnh "npm publish --access public" để public package lên npm publish. Truy cập npm để check - Truy cập app.tea.xyz => Register a New OSS Project

- Tìm kiếm tên package vừa tạo. Bước này có thể mất tới 2-3 ngày để package mới xuất hiện trên hệ thống của tea.xyz

- Sau đó tea sẽ cho 1 file có tên tea.yaml, tải về và quay lại repo github, upload tiếp file đó lên là xong.
npm package: @haily/tea-haily92-quest
Description: Quest for tea.xyz
Author: @haily
Latest version: 1.0.0

- Cài đặt nodejs và npm tại https://nodejs.org/en

- Tải file và lưu ở desktop

- Truy cập github.com tạo repository với tên tea-xyz-quest (Phải để repo public)

- Truy cập https://www.npmjs.com để tạo tài khoản

- Sửa file package.json, theo format
  - name => @username_npm/tea-xyz-quest 
  - author => @username_npm
  - repository => link tới repo github vừa tạo

- Truy cập repo github vừa tạo và upload cả folder vừa sửa lên (vd: https://github.com/.../tea-xyz-quest/upload)

- Mở terminal, gõ lệnh "npm -v" để kiểm tra xem đã cài đặt thành công npm ở bước 1 chưa

- Gõ tiếp lệnh "cd Desktop/tea-xyz-quest" để trỏ tới thư mục code 

- "npm login" => Có 1 đường dẫn để bấm vào sẽ mở trình duyệt dẫn tới web login npm

- Sau khi login thành công gõ lệnh "npm publish --access public" để public package lên npm publish. Truy cập npm để check VD: https://www.npmjs.com/package/@daominhhiep/tea-xyz-quest

- Truy cập app.tea.xyz => Register a New OSS Project

- Tìm kiếm tên package vừa tạo. VD: @daominhhiep/tea-xyz-quest . Bước này có thể mất tới 2-3 ngày để package mới xuất hiện trên hệ thống của tea.xyz

- Sau đó tea sẽ cho 1 file có tên tea.yaml, tải về và quay lại repo github, upload tiếp file đó lên là xong.

- Dự án mẫu thao khảo tại: https://github.com/daominhhiep/tea-xyz-quest
npm package: @haimkastner/await-semaphore
Description: Awaitable semaphore/mutex
Author: Emma Kuo
Latest version: 0.1.11

# await-semaphore
Awaitable semaphore/mutex

A semaphore implementation using ES6 promises and supporting 3 styles:

* async/await style (needs typescript)
* thunk style (automatic acquire/release)
* promise style
* New! - optionally set timeout to the lock.

Also includes `Mutex` as a convenience for `new Semaphore(1)`.

## API

### new Semaphore(count: number)

Create a new semaphore with the given count.

```javascript
import {Semaphore} from 'await-semaphore';

var semaphore = new Semaphore(10);
```

### semaphore.acquire(): Promise<() => void>

Acquire the semaphore and returns a promise for the release function. Be sure to handle release for exception case.

```javascript
semaphore.acquire()
.then(release => {
    //critical section...
    doSomething()
    .then(res => {
        //...
        release();
    })
    .catch(err => {
        //...
        release();
    });
});
```

### semaphore.use<T>(thunk: () => Promise<T>): Promise<T>

Alternate method for using the semaphore by providing a thunk. This automatically handles acquire/release.

```javascript
semaphore.use(() => {
    //critical section...
});
```

### new Mutex()

An alias for `new Semaphore(1)`. Mutex has the same methods as Semaphore.

```javascript
import {Mutex} from 'await-semaphore';

var mutex = new Mutex();
```

## Examples

Create a version of `fetch()` with concurrency limited to 10.

### async/await style (typescript)

```typescript
var semaphore = new Semaphore(10);

async function niceFetch(url) {
    var release = await semaphore.acquire();
    var result = await fetch(url);
    release();
    return result;
}
```

### thunk style (javascript)

```javascript
var semaphore = new Semaphore(10);

function niceFetch(url) {
    return semaphore.use(() => fetch(url));
}
```

### promise style (javascript)

```javascript
var semaphore = new Semaphore(10);

function niceFetch(url) {
    return semaphore.acquire()
    .then(release => {
        return fetch(url)
        .then(result => {
            release();
            return result;
        });
    });
}
```

### Set timeout

In order to avoid dead-lock in extreme situations, or for any other needs, there is an option to set a timeout to the semaphore,
so after X time duration the lock will be released although the `release()` have been never called.

```javascript
import { Duration } from 'unitsnet-js';
var semaphore = new Semaphore(1, Duration.FromMinutes(5));

// Use the semaphore...
```
npm package: @haimkastner/oas3-tools
Description: Swagger-UI and API Rest Routing for Open API v3.
Author: Hugo Mercado
Latest version: 2.2.1

This is a forked project from https://github.com/bug-hunters/oas3-tools just including:

* [oas3-tools PR 44](https://github.com/bug-hunters/oas3-tools/pull/44) - Fix issue with case sensitive route naming mismatch
* [oas3-tools PR 45](https://github.com/bug-hunters/oas3-tools/pull/45) - Let pass express app instead of creating a new instance within
npm package: @hainaio/page-spy-plugin-rrweb
Description: Record the DOM mutation within PageSpy.
Latest version: 2.2.2-1.0.0

[npm-image]: https://img.shields.io/npm/v/@huolala-tech/page-spy-plugin-rrweb?logo=npm&label=version
[npm-url]: https://www.npmjs.com/package/@huolala-tech/page-spy-plugin-rrweb
[minified-image]: https://img.shields.io/bundlephobia/min/@huolala-tech/page-spy-plugin-rrweb
[minified-url]: https://unpkg.com/browse/@huolala-tech/page-spy-plugin-rrweb/dist/iife/index.min.js
[rrweb-repo]: https://github.com/rrweb-io/rrweb
[rrweb-record-options]: https://github.com/rrweb-io/rrweb/blob/master/guide.md#options

English | [中文](./README_ZH.md)

# `@huolala-tech/page-spy-plugin-rrweb`

[![SDK version][npm-image]][npm-url]
[![SDK size][minified-image]][minified-url]

> Use `rrweb` under the hood, record the DOM mutation within PageSpy, only be available in browser environment.

## Definition

```ts
import { PageSpyPlugin } from '@huolala-tech/page-spy-types';
import type { recordOptions } from 'rrweb/typings/types';
import type { eventWithTime } from '@rrweb/types';

interface Options extends recordOptions<eventWithTime> {}

declare class RRWebPlugin implements PageSpyPlugin {
  constructor(options?: Options);
}

export default RRWebPlugin;
```

`RRWebPlugin` use [`rrweb-record`][rrweb-repo] under the hood, the instantiate options reference [record options][rrweb-record-options].

## Usage

### Load plugin

- Options 1: Load with script

  ```html
  <html>
    <head>
      <!-- 1. Load PageSpy -->
      <script src="https://<your-host>/page-spy/index.min.js"></script>
      <!-- 2. Load the DataHarborPlugin plugin -->
      <script src="https://<your-host>/plugin/data-harbor/index.min.js"></script>
      <!-- 3. Load the RRWebPlugin plugin -->
      <script src="https://<your-host>/plugin/rrweb/index.min.js"></script>
      <!-- 4. Register plugin && Init PageSpy -->
      <script>
        // 1. Register DataHarborPlugin plugin
        PageSpy.registerPlugin(new DataHarborPlugin(config));
        // 2. Register RRWebPlugin plugin
        PageSpy.registerPlugin(new RRWebPlugin(options));
        // 3. Init PageSpy
        window.$pageSpy = new PageSpy();
      </script>
    </head>
  </html>
  ```

- Option 2: Import within ESM

  ```ts
  // In your entry file like "main.ts"
  import PageSpy from '@huolala-tech/page-spy-browser';
  import RRWebPlugin from '@huolala-tech/page-spy-plugin-rrweb';

  // Register plugin
  PageSpy.registerPlugin(new RRWebPlugin(options));
  // Init PageSpy
  window.$pageSpy = new PageSpy();
  ```

### Replay

The data from 'rrweb-event' is typically larger (more interactions and complex webpage structures result in larger data). When developers debug, real-time transmission can impose a burden on network overhead, and page interactions are not always critical information. Considering these factors, this plugin only dispatch the 'public-data' event ([what's the `public-data` event?](../../docs/plugin.md#behavioral-conventions)) for statistical plugins to collect.