npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@livechat/hydra-tools

v1.0.0

Published

A lightweight TypeScript client for handling OAuth2 token management with Hydra authentication server.

Downloads

47

Readme

Hydra Tools

A lightweight TypeScript client for handling OAuth2 token management with Hydra authentication server.

Features

  • Automatic token caching
  • Token refresh management for different targets/audiences
  • Error handling with optional logging
  • Uses axios for requests

Usage

import { HydraClient, HydraConfig } from '@livechat/hydra-tools';


const config: HydraConfig = {
    url: 'YOUR_HYDRA_URL',
    clientId: 'YOUR_CLIENT_ID',
    clientSecret: 'YOUR_CLIENT_SECRET',
    timeout: 5000 // optional, defaults to 5000ms
};

const client = new HydraClient(config);

const authHeader = await client.getAuthHeaderForTarget('your-target');

authHeader is a string in that looks as Bearer TOKEN.

If acquiring the hydra token fails and the client does not have a valid token cached, the client will throw an error. Internally the library uses axios and will propagate the AxiosError to the caller. You can check that it is indeed an axios error calling axios.isAxiosError.

Configuration

The HydraConfig interface accepts the following parameters:

interface HydraConfig {
  url: string; // Hydra server URL
  clientId: string; // OAuth2 client ID
  clientSecret: string; // OAuth2 client secret
  timeout?: number; // Request timeout in milliseconds (default: 5000)
}

Token Management

The client automatically handles:

  • Token caching per target
    • Automatic refresh after half of the token's lifetime to avoid probems with Hydra's server downtime
    • Fallback to cached tokens during failed refresh attempts

Optional Logging

The client accepts an optional logger that must implement an error method, and it will log errors that occur during token acquisition.

Request Interceptor for axios

The package provides a convenient axios interceptor that automatically adds X-Authorization header to your requests with the Hydra token. Here's how to use it:

import { withHydraInterceptor } from '@livechat/hydra-tools';
import axios, { InternalAxiosRequestConfig } from 'axios';

const axiosInstance = axios.create();

// Add the interceptor
const removeInterceptor = withHydraInterceptor(axiosInstance, {
  hydraClient, // Your configured HydraClient instance
  target: 'your-target',
  runWhen: (config: InternalAxiosRequestConfig) => config.headers['X-Region'] !== 'some-region',
});

// Later, if needed, remove the interceptor
removeInterceptor();

The interceptor will automatically:

  • Add the Hydra authentication token as 'X-Authorization' header
  • Handle token refresh when needed
  • Allow conditional application through the runWhen option, which is a function that receives the axios request config and should return a boolean

Internal Use Only

This package is intended for internal use within the organization. Please ensure proper handling of credentials and configuration values.