@e2y/occ-client
Version:
OCC client for SAP Commerce Cloud
70 lines • 4.75 kB
JavaScript
;
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==