Arctic

WorkOS

OAuth 2.0 provider for WorkOS.

Also see the OAuth 2.0 guide.

Initialization

Pass the client secret for confidential clients.

import * as arctic from "arctic";

const workos = new arctic.WorkOS(clientId, clientSecret, redirectURI);
const workos = new arctic.WorkOS(clientId, null, redirectURI);

Create authorization URL

import * as arctic from "arctic";

const state = arctic.generateState();
const url = workos.createAuthorizationURL(state);

Validate authorization code

For confidential clients, pass the authorization code.

validateAuthorizationCode() will either return an OAuth2Tokens, or throw one of OAuth2RequestError, ArcticFetchError, UnexpectedResponseError, or UnexpectedErrorResponseBodyError. WorkOS will only return an access token (no expiration).

import * as arctic from "arctic";

try {
	const tokens = await workos.validateAuthorizationCode(code, null);
	const accessToken = tokens.accessToken();
} catch (e) {
	if (e instanceof arctic.OAuth2RequestError) {
		// Invalid authorization code, credentials, or redirect URI
		const code = e.code;
		// ...
	}
	if (e instanceof arctic.ArcticFetchError) {
		// Failed to call `fetch()`
		const cause = e.cause;
		// ...
	}
	// Parse error
}

For public clients, pass the authorization code and code verifier.

const tokens = await workos.validateAuthorizationCode(code, codeVerifier);

Get user profile

The profile is included in the token response.

const tokens = await workos.validateAuthorizationCode(code);
if (
	"profile" in tokens.data &&
	typeof tokens.data.profile === "object" &&
	tokens.data.profile !== null
) {
	const profile = tokens.data.profile;
}