open-index/open-npm huggingface dataset:
npm package: @irv/kong-client-public
Description: Signs API requests according to Kong 1.0 specifications.
Author: Kat Davis
Latest version: 3.0.1

# Kong Client

Wraps the `node-fetch` api with kong signing.

## Usage

``` typescript
const kongClient = require('@irv/kong-client-public');

// Constructor takes an OBJECT containing the following fields
const client = new kongClient.Client({
	baseUrl, // The api url you are trying to reach
	username, // The Kong username from system admin
	secret, // The Kong secret from system admin
	isSigningEnabled = false, // Default is false. Kong 1.0 compatible signing.
	timeout = 300000, // Default timeout
});

// Make api calls using fetch
client.fetch('https://httpbin.org/post', { method: 'POST', body: 'a=1' })
    .then(res => res.json()) // expecting a json response
    .then(json => console.log(json));
```

Note: `baseUrl` is optional for the client. If no `baseUrl` is provided, the client will use `path` in the fetch call as the url. If provided, client will concatenate `baseUrl` and `path`

## Hooks

You can add pre and post request hooks to the client. These callbacks will be executed before and after every request (like middleware).

``` typescript
// Pre Request Hook
const logReqHook = (url: string, options?: RequestInit) => {
	console.log(url, options);
};

// Post Request Hook
const logResHook = async (res: Response) => {
	try {
		const response = res.clone();
		console.log(await response.json());
	} catch (err) {} // DELETE and HEAD calls have no response, so response.json() will throw
};


// Attaching to client
client.beforeRequest(logReqHook);
client.afterRequest(logResHook);
```

## Available Functions

`fetch(path: string, options?: RequestInit): Promise<Response>` - Call to make any api request.

Function Parameters:

`path` -`[required]` `(string)` Path that you want the api client to hit

`options` - `[optional]` `(RequestInit)` that will be passed to the `node-fetch` library. See the `node-fetch` library [HERE](https://www.npmjs.com/package/node-fetch)