open-index/open-npm huggingface dataset:
npm package: @nr1e/gohighlevel
Description: Unofficial Go High Level client
Author: NR1E, Inc.
Latest version: 1.0.0

# GoHighLevel Client

[![NPM Version][npm-image]][npm-url]

⚠️ This is an unofficial client library for GoHighLevel.

The official GoHighLevel client library is
[@gohighlevel/api-client](https://www.npmjs.com/package/@gohighlevel/api-client)
with source code [here](https://github.com/GoHighLevel/highlevel-api-sdk)

The official GoHighLevel API documentation can be found
[here](https://marketplace.gohighlevel.com/docs/oauth/GettingStarted).

The offocial GoHighLevel API documentation source code can be found
[here](https://github.com/GoHighLevel/highlevel-api-docs).

## Usage

To install using `pnpm`

```bash
pnpm i @nr1e/gohighlevel
```

Create a client and use it to fetch an invoice

```typescript
import {createGoHighLevelClient} from '@nr1e/gohighlevel';
import {getInvoice} from '@nr1e/gohighlevel/invoices';

const client = createGoHighLevelClient({
    accessToken: 'YOUR_ACCESS_TOKEN',
});
const invoice = await getInvoice(client, {
    locationId: 'YOUR_LOCATION_ID',
    invoiceId: 'YOUR_INVOICE_ID',
});
```

## Why does this exist?

We created this client because the official client didn't meet our requirements.

**Unnecessary Dependencies** — The existing client depends on axios, express and mongodb libraries which are not
necessary for our use case and increase the bundle size.

**Unoptimal Tree Shaking** — The existing client makes heavy use of classes which is not optimal for tree shaking.
If you want to read up on modular design and it's impact in tree shaking, we recommend reading
[Hoschschule Der Medien's Valibot Thesis](https://valibot.dev/thesis.pdf).

**Client Constructor Issues** — Our use case only requires access to an access key. The official client required us to
provide a client ID and secret along which is unnecessary for our use case.

**Poor Quality OpenAPI Specifications** — The repository that contains the OpenAPI specifications used to generate the
GoHighLevel API documentation does not provide a unified openapi.yaml or openapi.json file. It also contains broken
references and inconsistently named types. This makes it difficult to create a generated client in oneshot.

## Why open source this?

This is not magic and we're happy to share it with the community if it helps anyone else.

## What's not included?

This client is not intended to be a full replacement for the official client. It is also not intended to cover every
possible use case. We only add functionality as needed for our use cases. Since we prefer composition and procedural
approaches over object oriented approaches for clients like this, it's extremely easy to add additional functionality
as needed. Follow the existing patterns and you'll be fine.

We've standardized on ESM. We do not plan to release CJS or UMD versions.

## Usage

Install the package

```bash
pnpm i @nr1e/gohighlevel
```

[npm-url]: https://npmjs.org/package/@nr1e/gohighlevel
[npm-image]: https://img.shields.io/npm/v/@nr1e/gohighlevel.svg
npm package: @nr1e/logging
Description: Provides a standard logging pattern
Author: NR1E, Inc.
Latest version: 2.0.1

# Logging

[![NPM Version][npm-image]][npm-url]

Provides a simple logging interface for typescript projects that
adheres to the NR1E logging standard. The goal of this wrapper is to
reduce CPU and memory overhead by only formatting log messages when
the log level is set to a level that would allow the message to be logged.

To install using `pnpm`

```bash
pnpm i @nr1e/logging
```

## How to use

Initialize logging in your application.

```typescript
import * as logging from '@nr1e/logging';

// This only needs to be performed once
logging.initialize({
    svc: 'my-service',
    level: 'info',
});
```

To obtain a named child logger of the root logger

```typescript
const log = logging.getLogger('my-module');
```

To obtain a named child logger of another logger

```typescript
const log = logging.getLogger('my-module', parentLogger);
```

To add a permanent context to a logger

```typescript
log.ctx({foo: 'bar'});
```

To log an info message

```typescript
log.info().msg('Just another day in the life of a logger');
```

To log a message with a context

```typescript
log.info().obj({foo: 'bar'}).msg('Just another day in the life of a logger');
```

You can also log nested objects

```typescript
log.info().obj({foo: 'bar', nested: {foo: 'bar'}}).msg('Just another day in the life of a logger');
);
```

To log an error

```typescript
try {
    throw new Error('An error occurred');
} catch (err) {
    log.error()
        .err(err)
        .msg(
            'Human sacrifice, dogs and cats living together... MASS HYSTERIA!',
        );
}
```

To log an error with additional context

```typescript
try {
    throw new Error('An error occurred');
} catch (err) {
    log.error()
        .err(err)
        .obj({foo: 'bar'})
        .msg(
            'Human sacrifice, dogs and cats living together... MASS HYSTERIA!',
        );
}
```

[npm-url]: https://npmjs.com/package/@nr1e/logging
[npm-image]: https://img.shields.io/npm/v/@nr1e/logging.svg
npm package: @nr1e/middesk
Description: Middesk client
Author: NR1E, Inc.
Latest version: 0.0.2

# Middesk Client

[![NPM Version][npm-image]][npm-url]

⚠️ This is an unofficial client library for Middesk.

The official Middesk API documentation can be found
[here](https://docs.middesk.com/).

## Usage

To install using `pnpm`

```bash
pnpm i @nr1e/middesk
```

Create a client and use it to list businesses

```typescript
import {createMiddeskClient} from '@nr1e/middesk';
import {listBusinesses} from '@nr1e/middesk/businesses';

const client = createMiddeskClient({
    apiKey: 'YOUR_API_KEY',
});
const {data: businesses} = await listBusinesses(client);
```

## Why does this exist?

We created this client because we prefer a lightweight, tree-shakeable client using native `fetch`.

**No 3rd Party Dependencies** — This client uses native `fetch` and has zero runtime dependencies.

**Tree Shaking** — This client uses a functional approach instead of classes, which is optimal for tree shaking.

## Why open source this?

This is not magic and we're happy to share it with the community if it helps anyone else.

## What's not included?

This client is not intended to cover every possible use case. We only add functionality as needed for our use cases. Since we prefer composition and procedural approaches over object oriented approaches for clients like this, it's extremely easy to add additional functionality as needed. Follow the existing patterns and you'll be fine.

We've standardized on ESM. We do not plan to release CJS or UMD versions.

[npm-url]: https://npmjs.org/package/@nr1e/middesk
[npm-image]: https://img.shields.io/npm/v/@nr1e/middesk.svg
npm package: @nr1e/qwik-icons
Description: NR1E Qwik Icons Library
Author: NR1E, Inc.
Latest version: 0.0.36

<div style="background: gray; padding: 20px">
    <img width="200" src="https://nr1e.com/images/logo-tagline.svg" />
</div>

# Qwik Icons Library ⚡️

This library contains approved icons for use in NR1E projects.

## Prefixes

Each icon has a prefix identifying where it came from.

- **Mdi** = [Material Design Icons](https://icon-sets.iconify.design/mdi/)
npm package: @nr1e/qwik-ui
Description: NR1E Qwik UI Library
Author: NR1E, Inc.
Latest version: 2.1.6

<div style="background: gray; padding: 20px">
    <img width="200" src="https://nr1e.com/images/logo-tagline.svg" />
</div>

# Qwik UI Library ⚡️

This library contains approved UI components for use in NR1E projects.

## Installation

```bash
pnpm i @nr1e/qwik-ui
```

Inside _global.css_, add the following:

```css
@import '@nr1e/qwik-ui/styles.css';
```

This typically should appear under your _@import 'tailwindcss';_ statement.