Learn more  » Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Bower components Debian packages RPM packages NuGet packages

skava / @skava-features/header   js

Repository URL to install this package:

Version: 0.1.7 

/ dist / src / state / session / deps.js

import { getTyped } from 'composition';
import { oneRouter } from '@skava/router';
import { oneStorage } from '@skava/persistence';
import { cookies, renewCache } from '@skava/cookies';
import { isArray, isString, isObj } from 'exotic';
import { errorContainer } from 'src/state/errorView/container';
import { toastMessage, responseMessage } from 'src/state/errorView/_fixture';
import { sessionContainer } from 'state/session/container';
import { userContainer } from 'src/state/user/container';
// import { cache } from 'src/client/apolloClient'
const isExpired = (data) => isString(data.responseMessage) && data.responseMessage.includes('session expired');
function checkIsSessionExpired(data) {
    if (isExpired(data) === true) {
        const errorMessage = data.responseMessage ? data.responseMessage.split('-')[1] : '';
        errorContainer.setError({
            errorMessage,
        });
        clearCookies();
        oneRouter.forceUpdate('/');
    }
}
/**
 * @todo needs to be handled better in login, unsafe setting on false logins
 */
function fromCookieWithDomainToCookieWithNoDomain(cookieLine) {
    if (isString(cookieLine)) {
        const replaceText = cookieLine.includes(';Domain=.skavaone.com')
            ? ';Domain=.skavaone.com'
            : '; Domain=.skavaone.com';
        const cleanCookieLine = cookieLine.replace(replaceText, '');
        const addPath = cleanCookieLine.includes(';Path=/') ? '' : ';Path=/';
        return `${cleanCookieLine}${addPath}`;
    }
    return '';
}
function mapCookiesOnResponse(response) {
    if (isObj(response) === false) {
        console.warn('RESPONSE WAS EMPTY!!!');
        return response;
    }
    if (isArray(response.cookies) === false) {
        console.warn('@@fixme - cookies on response');
        console.warn('@@fixme - cookies on response');
        console.warn('@@fixme - cookies on response');
        return response;
    }
    else {
        // @hack @fixme @scope
        const setCookieOnDocumentHack = (cookieLine) => {
            console.error('@skava/cookies renew cache');
            document.cookie = cookieLine;
            renewCache();
        };
        response
            .cookies.map(fromCookieWithDomainToCookieWithNoDomain)
            .filter(Boolean)
            .forEach(setCookieOnDocumentHack || setCookieOnDocumentHack);
    }
    return response;
}
// window.__APOLLO_CLIENT__.
// client.
function clearApolloCache(client) {
    const HORRIBLE_CACHE_ISSUES = client.cache.data.data;
    // disableNetworkFetches ?
    if (!HORRIBLE_CACHE_ISSUES) {
        console.error('HORRIBLE_CACHE_ISSUES');
    }
    Object.keys(HORRIBLE_CACHE_ISSUES).forEach(data => {
        const value = JSON.stringify(HORRIBLE_CACHE_ISSUES[data]);
        if (value.toLowerCase().includes('cart')) {
            delete HORRIBLE_CACHE_ISSUES[data];
        }
    });
}
function isSafeLoginResponse(response) {
    return isObj(response) && isObj(response.properties.state);
}
function fromResponseToLoginToast(response) {
    if (isSafeLoginResponse(response) && toStatus(response) === 'Invalid Credentials') {
        return toastMessage.invalidCredentials;
    }
    else {
        // @todo or if the response has a status?
        return toastMessage.loginFailure;
    }
}
function keep(obj, list) {
    const kept = {};
    Object.keys(obj)
        .filter(key => list.includes(key))
        .forEach(key => {
        kept[key] = obj[key];
    });
    return kept;
}
function createRecentlyViewedList() {
    oneStorage.set('recentlyViewedItemsList', []);
}
/**
 * @todo reuse @@perf @@haircut
 * @todo some responses don't map to this...
 */
function toStatus(response) {
    return getTyped(response).string('properties.state.status');
}
/**
 * @note - putting these out of the container out of the trycatch deopt
 * is faster but will remove access to `this` if you need it
 */
const toListResponse = (listResponse) => {
    // console.log(`List Response ${JSON.stringify(listResponse)}`)
    return listResponse;
};
const toBagResponse = (bagResponse) => {
    return bagResponse;
};
const toSyncListResponse = (response) => {
    // console.log(response)
    return response;
};
const toUserProfileResponse = (response) => {
    return response;
};
const isEmptyListItems = (response) => response.responseCode === '204' || response.responseMessage === 'No matching data';
/**
 * @todo this looks like wrong response typing.....
 */
const toSaveForLaterResponse = (response) => {
    if (isEmptyListItems(response)) {
        const localSaveForLater = oneStorage.get('saveForLaterItems');
        if (isArray(localSaveForLater)) {
            return { saveForLaterItems: localSaveForLater };
        }
        return { saveForLaterItems: [] };
    }
    return response;
};
/**
 * @todo this looks like wrong response typing.....
 */
const toFavoritesResponse = (response) => {
    // @TODO Get API Data working
    // console.log(response)
    if (isEmptyListItems(response)) {
        const localFavorites = oneStorage.get('favorites');
        if (isArray(localFavorites)) {
            return { favorites: localFavorites };
        }
        return { favorites: [] };
    }
    return response;
};
// @todo - split these and this file
// @note "Create Or GetUser Success"
const isLoginSuccess = (response) => isObj(response) && response.properties.state.status === 'Login Successful';
const isRegisterSuccess = (response) => isObj(response) &&
    (response.properties.state.status === responseMessage.accountCreationSuccess ||
        response.properties.state.status === responseMessage.registerMailFailure);
// https://stackoverflow.com/questions/179355/clearing-all-cookies-with-javascript
const clearCookies = () => {
    cookies.clear();
    // oneStorage.clear()
    document.cookie = '';
};
function coerceInconsistency(data) {
    const params = Object.assign({}, data);
    params.userName = params.username || params.userName;
    return params;
}
/**
 * Check for user session expire in myaccount scenarios
 * todo can be reusable
 */
const isSessionExpiredOnMyAccount = (response) => {
    return (isString(response.responseMessage) &&
        response.responseMessage.toLowerCase().includes('unauthorized'));
};
function checkSessionExpiredOnMyAccount(response) {
    const isSignedInUser = sessionContainer.isRegisteredUser || userContainer.username;
    const isSessionExpired = isSessionExpiredOnMyAccount(response);
    if (isSignedInUser && isSessionExpired) {
        // @todo move out, put it here for removing thousands of lines
        const errorMessage = isSessionExpired && 'session expired';
        errorContainer.setError({
            errorMessage,
        });
        clearCookies();
        oneRouter.forceUpdate('/signin');
    }
}
export { toStatus, coerceInconsistency, isExpired, checkIsSessionExpired, fromCookieWithDomainToCookieWithNoDomain, mapCookiesOnResponse, clearApolloCache, isSafeLoginResponse, fromResponseToLoginToast, keep, createRecentlyViewedList, toListResponse, toBagResponse, toSyncListResponse, toUserProfileResponse, isEmptyListItems, toSaveForLaterResponse, toFavoritesResponse, isLoginSuccess, isRegisterSuccess, clearCookies, checkSessionExpiredOnMyAccount, };
//# sourceMappingURL=deps.js.map