@telstra/core
Version:
Telstra SDK Core
120 lines (119 loc) • 3.85 kB
JavaScript
import { Constants } from '../../constants/index.js';
import { InvalidAuthCredentialsError, InvalidTokenRetryCountError, MissingTokenDataError } from '../../errors/index.js';
import { storage } from '../../utils/storage/index.js';
/**
* @class ConfigurationService
* @description Configuration service to manage the configuration data. Everything to do with the configuration data is managed here.
* Including authentication credentials, authentication token, and authentication token retry count.
* @implements {IConfigurationService}
* @exports ConfigurationService
*
*/
export class ConfigurationService {
_storage = storage.get();
async setAuthCredentials(authCredentials) {
try {
if (!authCredentials) {
throw new InvalidAuthCredentialsError();
}
await this._storage.set({
bucket: Constants.BUCKET_AUTH_STORE,
key: Constants.BUCKET_KEY_CLIENT_CREDENTIALS,
data: JSON.stringify(authCredentials),
});
return true;
}
catch (error) {
return false;
}
}
async getAuthCredentials() {
try {
const data = (await this._storage.get({
bucket: Constants.BUCKET_AUTH_STORE,
key: Constants.BUCKET_KEY_CLIENT_CREDENTIALS,
}));
if (!data) {
return null;
}
return JSON.parse(data);
}
catch (error) {
return null;
}
}
async setAuthTokenData(authTokenData) {
try {
if (!authTokenData?.access_token || !authTokenData?.expires_at) {
throw new MissingTokenDataError();
}
await this._storage.set({
bucket: Constants.BUCKET_AUTH_STORE,
key: Constants.BUCKET_KEY_ACCESS_TOKEN,
data: authTokenData.access_token,
});
await this._storage.set({
bucket: Constants.BUCKET_AUTH_STORE,
key: Constants.BUCKET_KEY_TOKEN_EXPIRY,
data: authTokenData.expires_at.getTime(),
});
return true;
}
catch (error) {
return false;
}
}
async getAuthTokenData() {
try {
const access_token = (await this._storage.get({
bucket: Constants.BUCKET_AUTH_STORE,
key: Constants.BUCKET_KEY_ACCESS_TOKEN,
}));
const expires_at = (await this._storage.get({
bucket: Constants.BUCKET_AUTH_STORE,
key: Constants.BUCKET_KEY_TOKEN_EXPIRY,
}));
if (!access_token || !expires_at) {
return null;
}
return {
access_token,
expires_at: new Date(expires_at),
};
}
catch (error) {
return null;
}
}
async setAuthTokenRetryCount(retryCount) {
try {
if (!retryCount) {
throw new InvalidTokenRetryCountError();
}
await this._storage.set({
bucket: Constants.BUCKET_AUTH_STORE,
key: Constants.BUCKET_KEY_AUTH_RETRY_COUNT,
data: retryCount,
});
return true;
}
catch (error) {
return false;
}
}
async getAuthTokenRetryCount() {
try {
const data = (await this._storage.get({
bucket: Constants.BUCKET_AUTH_STORE,
key: Constants.BUCKET_KEY_AUTH_RETRY_COUNT,
}));
if (!data) {
return 0;
}
return data;
}
catch (error) {
return 0;
}
}
}