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 🙏

© 2026 – Pkg Stats / Ryan Hefner

@byu-oit-sdk/client-byu

v0.12.0

Published

A fetch client with automatic retries and oauth authorization

Readme

@byu-oit-sdk/client-byu

An OAuth 2.0-compliant library, effectively replacing byu-wso2-request.

Requirements:

  • Node.js 18+
    • or Node.js 10+ with fetch and crypto polyfills
  • npm v9+

Features

  • Isomorphic (work in NodeJS and the browser)
  • Automatically fetches and refreshes access tokens
  • Automatic retries for 401 responses with a 100ms delay
  • Automatically add headers to help identify the request
    • byu-oit-sdk-request supplies the attempt number and maximum number of requests
    • byu-oit-sdk-invocation-id supplies a unique identifier to track requests

Client

Initializing the client is simple. The BYU Client can be configured with some options to override the default behavior if desired.

const client = new Client()
// or
const client = new Client({ /* options here */ })

Here are a list of supported options:

| Option | Type | Default Value | Purpose | |-------------|------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------| | logger | Logger, from pino | ByuLogger() | (Optional) Logging information from client functionality | | credentials | CredentialProvider (or false) | ChainedCredentialProvider() | (Optional) The credential provider used resolving access tokens | | retry | { strategy: RetryMiddlewareConfiguration } | { strategy: new RetryStrategy() } | (Optional) Configures the retry middleware. The default configuration will attempt one retry when the response contains a 401 HTTP status code. |

The default credential provider is the Chained Credential Provider, which is a function that will return the first provider successfully instantiated. It uses environment variables with the prefix BYU_OIT_ to attempt instantiation. If a different credential provider is needed, or if you would like to specify which credential provider should be used, it should be configured and passed into the BYU Client constructor.

The default retry strategy retries once on 401 HTTP response codes after a 100-millisecond delay. The token middleware will try to get a new token before the request is sent. Any middleware added after the retry middleware will also be invoked prior to each request retry.

Note Disable automatic authentication by setting the credentials option to false

const client = new Client({credentials: false})

Middleware

Middleware can be placed on the middleware stack on a command or client. If placed on the command's middleware stack, only that command will run the middleware. When placed on the client, all commands using that client instance will run the middleware.

Usage

[!NOTE] Even though we've allowed for a small piece of backwards compatibility, it is STRONGLY recommended that you update your requests to follow the usage of the Fetch API package, as this is the API package node has officially implemented.

This has been modified to remove the need for hardcoding the domain name in your repo. By default, it will infer that you are using the prod endpoint (api.byu.edu), but if you need to switch environments, you will need to declare a variable in your .env file name ENVIRONMENT_NAME. This can be any of the three:

  • prd: Uses the production endpoint (api.byu.edu).
  • sandbox: Uses the sandbox endpoint (api-sandbox.byu.edu).
  • dev: Uses the development endpoint (api-dev.byu.edu).

[!NOTE] The dev environment is intended solely for testing and development in Tyk.

Additionally, ensure that BYU_OIT_CLIENT_ID and BYU_OIT_CLIENT_SECRET are also defined in your environment or configuration. No other environment variables are needed.

Here is an example of how to call the echo endpoint:

import { Client } from '@byu-oit-sdk/client-byu'

/** Instantiate the client with environment variables */
const client = new Client()

/** Call the request function with the listne path you wish to hit */
const response = await client.request({url: 'echo/v1/echo/test'}) // i.e. https://api.byu.edu/echo/v1/echo/test

This will return to full response from this API call. The request function always expects an object with at least an url variable declared within it. By default, though, the request function assumes the following:

const defaultSettings = {
  method: 'GET',
  json: true,
  resolveWithFullResponse: true,
  encoding: 'utf8',
  headers: {
    Accept: 'application/json'
  }
}

Each of these fields are completely changeable though and will react accordingly if any other method, such as PUT or POST, is passed in. Though not specifically stated as a default setting, a body variable can also be added to the object being passed into the function's object for any method requiring one. Here is an example of a post to try and get a token:

const client = new Client({ credentials: false })

  const reqHeaders = { 'Content-Type': 'application/json', Accept: '*/*' }
  const reqBody = {
    "basic": {
      "id": 123456,
      "citationId": 1234567,
      "appealStatus": "LTRSENT",
      "appealedByByuId": "123456789",
      "appealReasonCode": "OTHER",
      "appealText": "This is a test appeal",
      "appealFineAmount": 1.00,
      "appealDate": "2020-06-29T18:19:56",
      "appealRelToOwner": "SELF",
      "decisionDate": null,
      "decisionCode": null,
      "decisionNotes": null,
      "updatedByByuId": "123456789",
      "dateTimeUpdated": "2020-06-29T12:19:57"
    },
    "flags": [ "SEND_EMAIL" ]
}
  const request = {
    url: '/domains/parking/rest/v3/appeals/123456',
    method: 'PUT',
    headers: reqHeaders,
    body: reqBody
  }

  const response = await client.request(request)

Finally, there is a variable called resolveWithFullResponse which, if set to false, will automatically only return the body of a request. This was a feature used in byu-wso2-request as part of its usage of the now deprecated Request package.