All files / src/Authentication TokenStore.js

0% Statements 0/55
0% Branches 0/41
0% Functions 0/12
0% Lines 0/55
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101                                                                                                                                                                                                         
"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