open-index/open-npm huggingface dataset:
npm package: @handy-la/n8n-nodes-basecamp
Description: Basecamp API Node for n8n
Author: Ryan Hughes
Latest version: 0.1.8

# n8n-nodes-basecamp

This is an n8n community node. It lets you use Basecamp 4 (v3/v4) in your n8n workflows.

[Basecamp](https://basecamp.com/) is a project management tool that helps teams collaborate on projects.

[n8n](https://n8n.io/) is a [fair-code licensed](https://docs.n8n.io/reference/license/) workflow automation platform.

[Installation](#installation)  
[Operations](#operations)  
[Credentials](#credentials) 
[Resources](#resources)  
[Development](#development)
## Installation
Follow the [installation guide](https://docs.n8n.io/integrations/community-nodes/installation/) in the n8n community nodes documentation.

## Operations
This node supports all operations currently available in the [Basecamp API](https://github.com/basecamp/bc3-api).

## Credentials
Authenticate using the Basecamp OAuth2 API credential. If an account ID is provided in the credentials, the node will prepend it to all requests.

## Resources

* [n8n community nodes documentation](https://docs.n8n.io/integrations/community-nodes/)
* [Basecamp](https://basecamp.com/)
* [Basecamp API Documentation](https://github.com/basecamp/bc3-api)

## Development
### Testing Locally
Test your node locally. Refer to [Run your node locally](https://docs.n8n.io/integrations/creating-nodes/test/run-node-locally/) for guidance.
npm package: @handy-ones/handy-idle
Description: A React hook to detect user idle state with configurable timeout and callbacks
Latest version: 0.1.0

# handy-idle

A React hook to detect user idle state with configurable timeout and callbacks.

## Installation

```bash
npm install @handy-ones/handy-idle
```

## Usage

### Basic Usage

```tsx
import { useIdle } from '@handy-ones/handy-idle';

function App() {
  const isIdle = useIdle(30000); // 30 seconds

  return (
    <div>
      User is: {isIdle ? 'Idle' : 'Active'}
    </div>
  );
}
```

### With Callbacks

```tsx
import { useIdle } from '@handy-ones/handy-idle';

function App() {
  const isIdle = useIdle({
    timeout: 30000,
    onIdle: () => {
      console.log('User became idle');
    },
    onActive: () => {
      console.log('User became active');
    }
  });

  return (
    <div>
      User is: {isIdle ? 'Idle' : 'Active'}
    </div>
  );
}
```

### Custom Events

By default, the hook listens to `mousedown`, `mousemove`, `keydown`, `scroll`, `touchstart`, and `wheel` events. You can customize which events to track:

```tsx
import { useIdle } from '@handy-ones/handy-idle';

function App() {
  const isIdle = useIdle({
    timeout: 60000,
    events: ['mousedown', 'keydown'] // Only track mouse clicks and key presses
  });

  return (
    <div>
      User is: {isIdle ? 'Idle' : 'Active'}
    </div>
  );
}
```

## API

### `useIdle(options)`

#### Parameters

- `options`: `number | UseIdleOptions`
  - If a number is provided, it will be used as the timeout in milliseconds
  - If an object is provided, it can have the following properties:
    - `timeout` (required): `number` - Idle timeout in milliseconds
    - `onIdle` (optional): `() => void` - Callback when user becomes idle
    - `onActive` (optional): `() => void` - Callback when user becomes active
    - `events` (optional): `string[]` - Array of event names to track (default: `['mousedown', 'mousemove', 'keydown', 'scroll', 'touchstart', 'wheel']`)

#### Returns

- `boolean` - `true` if the user is idle, `false` otherwise

## Examples

### Session Timeout

```tsx
import { useIdle } from '@handy-ones/handy-idle';

function SessionManager() {
  const [sessionActive, setSessionActive] = useState(true);

  useIdle({
    timeout: 300000, // 5 minutes
    onIdle: () => {
      setSessionActive(false);
      // Log out user or show warning
    }
  });

  if (!sessionActive) {
    return <div>Session expired</div>;
  }

  return <div>Session active</div>;
}
```

### Idle Warning

```tsx
import { useIdle } from '@handy-ones/handy-idle';

function IdleWarning() {
  const isIdle = useIdle(60000); // 1 minute

  return (
    <div>
      {isIdle && (
        <div className="warning">
          You've been idle for a while. Move your mouse to stay active.
        </div>
      )}
    </div>
  );
}
```

## License

MIT
npm package: @handy-tools/djb2
Description: djb2 hash function
Author: Alexey Zaytsev
Latest version: 1.0.2

# DJB2 hash function

## Usage

```javascript
npm i @handy-tools/djb2

import { djb2 } from '@handy-tools/djb2';

djb2('hello world');
```

## EN 
DJB2 - this is simple, non-cryptographic hash function, created by [Daniel J. Bernstein](https://en.wikipedia.org/wiki/Daniel_J._Bernstein).  It is used for various purposes, such as indexing, searching and comparing data.

## RU
DJB2 - это простая некриптографическая хэш-функция, созданная [Дэниелом Дж. Бернштейн](https://en.wikipedia.org/wiki/Daniel_J._Bernstein) (собственно отсюда и название функции - инициалы автора). Она используется для различных целей, таких как индексация, поиск и сравнение данных.

Более подробное описание есть в этом [посте](https://thestrangeadventurer.com/hesh-funkciya-djb2/)
npm package: @handy-tools/validator
Description: Dependency free  validator for objects
Author: Alexey Zaytsev
Latest version: 0.3.0

# Validator

🎸 Dependency free fancy validator for objects.


## Installation

```bash
npm install @handy-tools/validator@latest
```

## Usage

```javascript
import { Validator } from '@handy-tools/validator';

const scheme = new Validator({
    name: 'string',
    age: 'number',
    emails: Validator.nested({
        gmailEmail: {
            type: 'email',
            required: true, // true is default value
            // Custom validation function
            errorMessage: 'Gmail email is required',
            // Custom validation function
            validate: (value) => {
                return value?.includes('@gmail.com');
            }
        },
        optionalEmail: {
            type: 'email',
            required: false,
        },
    }),
    extra: Validator.nested({
        ip: 'ipv4',
        ipv6: 'ipv6',
    })
});
const res = scheme.validate({
    name: 'John',
    age: 20,
    emails: {
        gmailEmail: 'some@gmail.com',
        optionalEmail: '',
    },
    extra: {
        ip: '192.168.0.34',
        ipv6: '2001:0db8:85a3:0000:0000:8a2e:0370:7334',
    }
}); // { result: true, errors: {} }

const ipScheme = new Validator({
    ip: 'ipv4',
});

const res = ipScheme.validate({
    ip: 'not an ip',
}); // { result: false, errors: { ip: 'Field is invalid' } }
```

See [tests](./__tests__/common.ts) for more examples.