UNPKG

@schibsted/sourcepoint

Version:

Package containing scripts used by Schibsteds' sites to integrate with Sourcepoint CMP

56 lines (44 loc) 2.18 kB
import { debug } from '../utils.js'; const defaultIdentityObjectName = 'Identity'; /** * @deprecated use resolveIdentityInstance instead */ export function getIdentityObject(_window, config) { if (_window.psi?.identityObject) return _window.psi.identityObject; if (config?.identityObject) return config.identityObject; const windowIdentity = _window.psi?.identityObjectName || config?.identityObjectName || defaultIdentityObjectName; if (!_window[windowIdentity]) { return console.warn('@schibsted/sourcepoint: No Schibsted Account integration detected.'); } return _window[windowIdentity]; }; export async function resolveIdentityInstance(_window, config = {}, timeoutMs = 10_000) { return new Promise((resolve, reject) => { if (_window.schIdentity) { return resolve(_window.schIdentity); } const timeoutTimer = setTimeout(() => { reject(new Error(`@schibsted/sourcepoint: Timeout of ${timeoutMs}ms exceeded while waiting for schIdentity instance`)); }, timeoutMs); _window.addEventListener('schIdentity:ready', ({ detail }) => { debug('schIdentity instance resolved from schIdentity:ready event ', !!detail.instance); clearTimeout(timeoutTimer); resolve(detail.instance); }, { once: true }); // legacy fallback for older versions of Schibsted Account SDK const legacyIdentityInstance = getIdentityObject(_window, config); if (legacyIdentityInstance) { console.warn('@schibsted/sourcepoint: schIdentity instance not found, falling back to legacy Identity instance. Please update to the latest Schibsted Account SDK.'); clearTimeout(timeoutTimer); resolve(legacyIdentityInstance); } }); } export function handleLoginFlow(_window) { const char = () => Math.floor((Math.random() * (122 - 97)) + 97); const id = Array.from({ length: 20 }, () => String.fromCharCode(char())).join(''); const stateBase = btoa(JSON.stringify(id)); if (getIdentityObject(_window)) { getIdentityObject(_window).login({ state: stateBase }); } };