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+
- 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
-
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})
The Command
class is a wrapper for the fetch options. Every command has a middleware stack that is
merged into the client middleware stake upon sending a request. To instantiate a command, use the same options as the
fetch API.
const command = new Command('https://example.com', { method: 'POST' })
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.
import { Client, Command } from '@byu-oit-sdk/client-byu'
/** Instantiate the client with environment variables */
const client = new Client()
/** The issuer must be downloaded from the discovery endpoint */
const issuer = await client.issuer()
const uri = new URL('echo/v1/echo/test', issuer) // i.e. https://api.byu.edu/echo/v1/echo/test
const command = new Command(uri/**, Addtional fetch options */)
/** Send the command */
const response = await client.send(command)