"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const _1 = require("./");
class TokenStore {
constructor(_baseUrl, _keyTemplate, _tokenPersist, _documentRef = (typeof document === 'object') ? document : undefined, _localStorageRef = (typeof localStorage === 'object') ? localStorage : undefined, _sessionStorageRef = (typeof sessionStorage === 'object') ? sessionStorage : undefined) {
this._baseUrl = _baseUrl;
this._keyTemplate = _keyTemplate;
this._tokenPersist = _tokenPersist;
this._documentRef = _documentRef;
this._localStorageRef = _localStorageRef;
this._sessionStorageRef = _sessionStorageRef;
this._innerStore = [];
const storesAvailable = (typeof this._localStorageRef !== 'undefined' && typeof this._sessionStorageRef !== 'undefined');
const cookieAvailable = (typeof this._documentRef !== 'undefined' && typeof this._documentRef.cookie !== 'undefined');
if (!storesAvailable && !cookieAvailable) {
this.TokenStoreType = _1.TokenStoreType.InMemory;
}
else if (this._tokenPersist === _1.TokenPersist.Expiration) {
storesAvailable ? this.TokenStoreType = _1.TokenStoreType.LocalStorage : this.TokenStoreType = _1.TokenStoreType.ExpirationCookie;
}
else {
storesAvailable ? this.TokenStoreType = _1.TokenStoreType.SessionStorage : this.TokenStoreType = _1.TokenStoreType.SessionCookie;
}
}
getStoreKey(key) {
return this._keyTemplate.replace('${siteName}', this._baseUrl).replace('${tokenName}', key);
}
getTokenFromCookie(key, document) {
const prefix = key + '=';
if (document && document.cookie) {
const cookieVal = document.cookie.split(';')
.map((v) => v.trim())
.find((v) => v.trim().indexOf(prefix) === 0);
if (cookieVal) {
return _1.Token.FromHeadAndPayload(cookieVal.substring(prefix.length));
}
}
return _1.Token.CreateEmpty();
}
setTokenToCookie(key, token, persist, doc) {
let cookie = `${key}=${token.toString()}`;
if (persist === _1.TokenPersist.Expiration) {
cookie += `; expires=${token.ExpirationTime.toUTCString()};`;
}
doc.cookie = cookie;
}
GetToken(key) {
const storeKey = this.getStoreKey(key);
try {
switch (this.TokenStoreType) {
case _1.TokenStoreType.InMemory:
return _1.Token.FromHeadAndPayload(this._innerStore[storeKey]);
case _1.TokenStoreType.LocalStorage:
return _1.Token.FromHeadAndPayload(this._localStorageRef.getItem(storeKey));
case _1.TokenStoreType.SessionStorage:
return _1.Token.FromHeadAndPayload(this._sessionStorageRef.getItem(storeKey));
case _1.TokenStoreType.ExpirationCookie:
case _1.TokenStoreType.SessionCookie:
return this.getTokenFromCookie(storeKey, this._documentRef);
}
}
catch (err) {
}
return _1.Token.CreateEmpty();
}
SetToken(key, token) {
const storeKey = this.getStoreKey(key);
const dtaString = token.toString();
switch (this.TokenStoreType) {
case _1.TokenStoreType.InMemory:
this._innerStore[storeKey] = dtaString;
break;
case _1.TokenStoreType.LocalStorage:
this._localStorageRef.setItem(storeKey, dtaString);
break;
case _1.TokenStoreType.SessionStorage:
this._sessionStorageRef.setItem(storeKey, dtaString);
break;
case _1.TokenStoreType.ExpirationCookie:
this.setTokenToCookie(storeKey, token, _1.TokenPersist.Expiration, this._documentRef);
break;
case _1.TokenStoreType.SessionCookie:
this.setTokenToCookie(storeKey, token, _1.TokenPersist.Session, this._documentRef);
break;
}
}
get AccessToken() {
return this.GetToken('access');
}
set AccessToken(value) {
this.SetToken('access', value);
}
get RefreshToken() {
return this.GetToken('refresh');
}
set RefreshToken(value) {
this.SetToken('refresh', value);
}
}
exports.TokenStore = TokenStore;
//# sourceMappingURL=TokenStore.js.map |