UNPKG

@e2y/occ-client

Version:

OCC client for SAP Commerce Cloud

70 lines 4.75 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.OAuth2Client = void 0; /** * Represents an OAuth2 client that can retrieve a token from an OAuth2 token URL using either client credentials or a username and password. */ class OAuth2Client { /** * Creates an instance of Oauth2Client. * @param {OAuth2PasswordConfiguration | OAuth2ClientCredentialsConfiguration} oauth2Configuration - The OAuth2 configuration to use for retrieving the token. */ constructor(oauth2Configuration) { this.oauth2Configuration = oauth2Configuration; } /** * Retrieves an OAuth2 token from the OAuth2 token URL using the provided configuration. * @returns {Promise<OAuth2TokenResponse>} A promise that resolves to an OAuth2TokenResponse object containing the access token. */ async getToken() { const response = await fetch(this.oauth2Configuration.oauthTokenUrl, { body: this.generateOAuth2Body(), headers: { Authorization: `Basic ${this.generateBasicAuthorization()}`, 'Content-Type': 'application/x-www-form-urlencoded' }, method: 'POST' }); if (!response.ok) { throw new Error(`Failed to get access token: ${response.statusText}`); } return (await response.json()); } /** * Generates a basic authorization string using the OAuth2 client ID and client secret. * @returns {string} A string representing the basic authorization header value. */ generateBasicAuthorization() { return Buffer.from(`${this.oauth2Configuration.clientId}:${this.oauth2Configuration.clientSecret}`).toString('base64'); } /** * Generates the body of the OAuth2 token request based on the provided configuration. * @returns {string} A string representing the URL encoded body of the OAuth2 token request. */ generateOAuth2Body() { let body; if (this.isOAuth2PasswordConfiguration(this.oauth2Configuration)) { body = { grant_type: 'password', password: this.oauth2Configuration.password, username: this.oauth2Configuration.username }; } else { body = { grant_type: 'client_credentials' }; } return new URLSearchParams(body).toString(); } /** * Determines if the provided OAuth2 configuration is an instance of OAuth2PasswordConfiguration. * @param {unknown} oauth2Configuration - The OAuth2 configuration to check. * @returns {oauth2Configuration is OAuth2PasswordConfiguration} A boolean indicating whether the provided configuration is an instance of OAuth2PasswordConfiguration. */ isOAuth2PasswordConfiguration(oauth2Configuration) { return 'username' in oauth2Configuration; } } exports.OAuth2Client = OAuth2Client; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2F1dGgyLWNsaWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9vYXV0aDItY2xpZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUlBOztHQUVHO0FBQ0gsTUFBYSxZQUFZO0lBR3ZCOzs7T0FHRztJQUNILFlBQVksbUJBQXVGO1FBQ2pHLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxtQkFBbUIsQ0FBQztJQUNqRCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksS0FBSyxDQUFDLFFBQVE7UUFDbkIsTUFBTSxRQUFRLEdBQUcsTUFBTSxLQUFLLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGFBQWEsRUFBRTtZQUNuRSxJQUFJLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixFQUFFO1lBQy9CLE9BQU8sRUFBRTtnQkFDUCxhQUFhLEVBQUUsU0FBUyxJQUFJLENBQUMsMEJBQTBCLEVBQUUsRUFBRTtnQkFDM0QsY0FBYyxFQUFFLG1DQUFtQzthQUNwRDtZQUNELE1BQU0sRUFBRSxNQUFNO1NBQ2YsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUU7WUFDaEIsTUFBTSxJQUFJLEtBQUssQ0FBQywrQkFBK0IsUUFBUSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7U0FDdkU7UUFFRCxPQUFPLENBQUMsTUFBTSxRQUFRLENBQUMsSUFBSSxFQUFFLENBQXdCLENBQUM7SUFDeEQsQ0FBQztJQUVEOzs7T0FHRztJQUNLLDBCQUEwQjtRQUNoQyxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FDMUcsUUFBUSxDQUNULENBQUM7SUFDSixDQUFDO0lBRUQ7OztPQUdHO0lBQ0ssa0JBQWtCO1FBQ3hCLElBQUksSUFBSSxDQUFDO1FBRVQsSUFBSSxJQUFJLENBQUMsNkJBQTZCLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEVBQUU7WUFDaEUsSUFBSSxHQUFHO2dCQUNMLFVBQVUsRUFBRSxVQUFVO2dCQUN0QixRQUFRLEVBQUUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFFBQVE7Z0JBQzNDLFFBQVEsRUFBRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsUUFBUTthQUM1QyxDQUFDO1NBQ0g7YUFBTTtZQUNMLElBQUksR0FBRztnQkFDTCxVQUFVLEVBQUUsb0JBQW9CO2FBQ2pDLENBQUM7U0FDSDtRQUVELE9BQU8sSUFBSSxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDOUMsQ0FBQztJQUVEOzs7O09BSUc7SUFDSyw2QkFBNkIsQ0FDbkMsbUJBQXVGO1FBRXZGLE9BQU8sVUFBVSxJQUFJLG1CQUFtQixDQUFDO0lBQzNDLENBQUM7Q0FDRjtBQTFFRCxvQ0EwRUMifQ==