@spartacus/cdc
Version:
Customer Data Cloud Integration library for Spartacus
151 lines • 18.1 kB
JavaScript
import { isPlatformBrowser } from '@angular/common';
import { Inject, Injectable, PLATFORM_ID, } from '@angular/core';
import { combineLatest, ReplaySubject, Subscription } from 'rxjs';
import { take } from 'rxjs/operators';
import * as i0 from "@angular/core";
import * as i1 from "../config/cdc-config";
import * as i2 from "@spartacus/core";
import * as i3 from "../facade/cdc-auth.facade";
import * as i4 from "@spartacus/user/profile/root";
export class CdcJsService {
constructor(cdcConfig, baseSiteService, languageService, scriptLoader, winRef, cdcAuth, auth, zone, userProfileFacade, platform) {
this.cdcConfig = cdcConfig;
this.baseSiteService = baseSiteService;
this.languageService = languageService;
this.scriptLoader = scriptLoader;
this.winRef = winRef;
this.cdcAuth = cdcAuth;
this.auth = auth;
this.zone = zone;
this.userProfileFacade = userProfileFacade;
this.platform = platform;
this.loaded$ = new ReplaySubject(1);
this.errorLoading$ = new ReplaySubject(1);
this.subscription = new Subscription();
}
/**
* Initialize CDC script
*/
initialize() {
this.loadCdcJavascript();
}
/**
* Returns observable with the information if CDC script is loaded.
*/
didLoad() {
return this.loaded$.asObservable();
}
/**
* Returns observable with the information if CDC script failed to load.
*/
didScriptFailToLoad() {
return this.errorLoading$.asObservable();
}
/**
* Method which loads the CDC Script
*/
loadCdcJavascript() {
// Only load the script on client side (no SSR)
if (isPlatformBrowser(this.platform)) {
this.subscription.add(combineLatest([
this.baseSiteService.getActive(),
this.languageService.getActive(),
])
.pipe(take(1))
.subscribe(([baseSite, language]) => {
var _a;
const scriptForBaseSite = this.getJavascriptUrlForCurrentSite(baseSite);
if (scriptForBaseSite) {
const javascriptUrl = `${scriptForBaseSite}&lang=${language}`;
this.scriptLoader.embedScript({
src: javascriptUrl,
params: undefined,
attributes: { type: 'text/javascript' },
callback: () => {
this.registerEventListeners(baseSite);
this.loaded$.next(true);
},
errorCallback: () => {
this.errorLoading$.next(true);
},
});
if (((_a = this.winRef) === null || _a === void 0 ? void 0 : _a.nativeWindow) !== undefined) {
this.winRef.nativeWindow['__gigyaConf'] = {
include: 'id_token',
};
}
}
}));
}
}
getJavascriptUrlForCurrentSite(baseSite) {
var _a;
const filteredConfigs = ((_a = this.cdcConfig.cdc) !== null && _a !== void 0 ? _a : []).filter((conf) => conf.baseSite === baseSite);
if (filteredConfigs && filteredConfigs.length > 0) {
return filteredConfigs[0].javascriptUrl;
}
return '';
}
/**
* Register login event listeners for CDC login
*
* @param baseSite
*/
registerEventListeners(baseSite) {
this.addCdcEventHandlers(baseSite);
}
/**
* Method to register CDC event handlers
*
* @param baseSite
*/
addCdcEventHandlers(baseSite) {
var _a, _b, _c;
(_c = (_b = (_a = this.winRef.nativeWindow) === null || _a === void 0 ? void 0 : _a['gigya']) === null || _b === void 0 ? void 0 : _b.accounts) === null || _c === void 0 ? void 0 : _c.addEventHandlers({
onLogin: (...params) => {
this.zone.run(() => this.onLoginEventHandler(baseSite, ...params));
},
});
}
/**
* Trigger login to Commerce once an onLogin event is triggered by CDC Screen Set.
*
* @param baseSite
* @param response
*/
onLoginEventHandler(baseSite, response) {
if (response) {
this.cdcAuth.loginWithCustomCdcFlow(response.UID, response.UIDSignature, response.signatureTimestamp, response.id_token !== undefined ? response.id_token : '', baseSite);
}
}
/**
* Updates user details using the existing User API
*
* @param response
*/
onProfileUpdateEventHandler(response) {
if (response) {
const userDetails = {};
userDetails.firstName = response.profile.firstName;
userDetails.lastName = response.profile.lastName;
this.userProfileFacade.update(userDetails);
}
}
ngOnDestroy() {
if (this.subscription) {
this.subscription.unsubscribe();
}
}
}
CdcJsService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: CdcJsService, deps: [{ token: i1.CdcConfig }, { token: i2.BaseSiteService }, { token: i2.LanguageService }, { token: i2.ScriptLoader }, { token: i2.WindowRef }, { token: i3.CdcAuthFacade }, { token: i2.AuthService }, { token: i0.NgZone }, { token: i4.UserProfileFacade }, { token: PLATFORM_ID }], target: i0.ɵɵFactoryTarget.Injectable });
CdcJsService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: CdcJsService, providedIn: 'root' });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: CdcJsService, decorators: [{
type: Injectable,
args: [{
providedIn: 'root',
}]
}], ctorParameters: function () { return [{ type: i1.CdcConfig }, { type: i2.BaseSiteService }, { type: i2.LanguageService }, { type: i2.ScriptLoader }, { type: i2.WindowRef }, { type: i3.CdcAuthFacade }, { type: i2.AuthService }, { type: i0.NgZone }, { type: i4.UserProfileFacade }, { type: undefined, decorators: [{
type: Inject,
args: [PLATFORM_ID]
}] }]; } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RjLWpzLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9pbnRlZ3JhdGlvbi1saWJzL2NkYy9yb290L3NlcnZpY2UvY2RjLWpzLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDcEQsT0FBTyxFQUNMLE1BQU0sRUFDTixVQUFVLEVBR1YsV0FBVyxHQUNaLE1BQU0sZUFBZSxDQUFDO0FBU3ZCLE9BQU8sRUFBRSxhQUFhLEVBQWMsYUFBYSxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM5RSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7OztBQVF0QyxNQUFNLE9BQU8sWUFBWTtJQUt2QixZQUNZLFNBQW9CLEVBQ3BCLGVBQWdDLEVBQ2hDLGVBQWdDLEVBQ2hDLFlBQTBCLEVBQzFCLE1BQWlCLEVBQ2pCLE9BQXNCLEVBQ3RCLElBQWlCLEVBQ2pCLElBQVksRUFDWixpQkFBb0MsRUFDZixRQUFhO1FBVGxDLGNBQVMsR0FBVCxTQUFTLENBQVc7UUFDcEIsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBQ2hDLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQUNoQyxpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixXQUFNLEdBQU4sTUFBTSxDQUFXO1FBQ2pCLFlBQU8sR0FBUCxPQUFPLENBQWU7UUFDdEIsU0FBSSxHQUFKLElBQUksQ0FBYTtRQUNqQixTQUFJLEdBQUosSUFBSSxDQUFRO1FBQ1osc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQUNmLGFBQVEsR0FBUixRQUFRLENBQUs7UUFkcEMsWUFBTyxHQUFHLElBQUksYUFBYSxDQUFVLENBQUMsQ0FBQyxDQUFDO1FBQ3hDLGtCQUFhLEdBQUcsSUFBSSxhQUFhLENBQVUsQ0FBQyxDQUFDLENBQUM7UUFDOUMsaUJBQVksR0FBaUIsSUFB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Q1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COzswQkFnQkksTUFBTTsyQkFBQyxXQUFXIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNQbGF0Zm9ybUJyb3dzZXIgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgSW5qZWN0LFxuICBJbmplY3RhYmxlLFxuICBOZ1pvbmUsXG4gIE9uRGVzdHJveSxcbiAgUExBVEZPUk1fSUQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQXV0aFNlcnZpY2UsXG4gIEJhc2VTaXRlU2VydmljZSxcbiAgTGFuZ3VhZ2VTZXJ2aWNlLFxuICBTY3JpcHRMb2FkZXIsXG4gIFVzZXIsXG4gIFdpbmRvd1JlZixcbn0gZnJvbSAnQHNwYXJ0YWN1cy9jb3JlJztcbmltcG9ydCB7IGNvbWJpbmVMYXRlc3QsIE9ic2VydmFibGUsIFJlcGxheVN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFVzZXJQcm9maWxlRmFjYWRlIH0gZnJvbSAnQHNwYXJ0YWN1cy91c2VyL3Byb2ZpbGUvcm9vdCc7XG5pbXBvcnQgeyBDZGNDb25maWcgfSBmcm9tICcuLi9jb25maWcvY2RjLWNvbmZpZyc7XG5pbXBvcnQgeyBDZGNBdXRoRmFjYWRlIH0gZnJvbSAnLi4vZmFjYWRlL2NkYy1hdXRoLmZhY2FkZSc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBDZGNKc1NlcnZpY2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICBwcm90ZWN0ZWQgbG9hZGVkJCA9IG5ldyBSZXBsYXlTdWJqZWN0PGJvb2xlYW4+KDEpO1xuICBwcm90ZWN0ZWQgZXJyb3JMb2FkaW5nJCA9IG5ldyBSZXBsYXlTdWJqZWN0PGJvb2xlYW4+KDEpO1xuICBwcm90ZWN0ZWQgc3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIGNkY0NvbmZpZzogQ2RjQ29uZmlnLFxuICAgIHByb3RlY3RlZCBiYXNlU2l0ZVNlcnZpY2U6IEJhc2VTaXRlU2VydmljZSxcbiAgICBwcm90ZWN0ZWQgbGFuZ3VhZ2VTZXJ2aWNlOiBMYW5ndWFnZVNlcnZpY2UsXG4gICAgcHJvdGVjdGVkIHNjcmlwdExvYWRlcjogU2NyaXB0TG9hZGVyLFxuICAgIHByb3RlY3RlZCB3aW5SZWY6IFdpbmRvd1JlZixcbiAgICBwcm90ZWN0ZWQgY2RjQXV0aDogQ2RjQXV0aEZhY2FkZSxcbiAgICBwcm90ZWN0ZWQgYXV0aDogQXV0aFNlcnZpY2UsXG4gICAgcHJvdGVjdGVkIHpvbmU6IE5nWm9uZSxcbiAgICBwcm90ZWN0ZWQgdXNlclByb2ZpbGVGYWNhZGU6IFVzZXJQcm9maWxlRmFjYWRlLFxuICAgIEBJbmplY3QoUExBVEZPUk1fSUQpIHByb3RlY3RlZCBwbGF0Zm9ybTogYW55XG4gICkge31cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZSBDREMgc2NyaXB0XG4gICAqL1xuICBpbml0aWFsaXplKCk6IHZvaWQge1xuICAgIHRoaXMubG9hZENkY0phdmFzY3JpcHQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIG9ic2VydmFibGUgd2l0aCB0aGUgaW5mb3JtYXRpb24gaWYgQ0RDIHNjcmlwdCBpcyBsb2FkZWQuXG4gICAqL1xuICBkaWRMb2FkKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLmxvYWRlZCQuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBvYnNlcnZhYmxlIHdpdGggdGhlIGluZm9ybWF0aW9uIGlmIENEQyBzY3JpcHQgZmFpbGVkIHRvIGxvYWQuXG4gICAqL1xuICBkaWRTY3JpcHRGYWlsVG9Mb2FkKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLmVycm9yTG9hZGluZyQuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICAvKipcbiAgICogTWV0aG9kIHdoaWNoIGxvYWRzIHRoZSBDREMgU2NyaXB0XG4gICAqL1xuICBsb2FkQ2RjSmF2YXNjcmlwdCgpOiB2b2lkIHtcbiAgICAvLyBPbmx5IGxvYWQgdGhlIHNjcmlwdCBvbiBjbGllbnQgc2lkZSAobm8gU1NSKVxuICAgIGlmIChpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtKSkge1xuICAgICAgdGhpcy5zdWJzY3JpcHRpb24uYWRkKFxuICAgICAgICBjb21iaW5lTGF0ZXN0KFtcbiAgICAgICAgICB0aGlzLmJhc2VTaXRlU2VydmljZS5nZXRBY3RpdmUoKSxcbiAgICAgICAgICB0aGlzLmxhbmd1YWdlU2VydmljZS5nZXRBY3RpdmUoKSxcbiAgICAgICAgXSlcbiAgICAgICAgICAucGlwZSh0YWtlKDEpKVxuICAgICAgICAgIC5zdWJzY3JpYmUoKFtiYXNlU2l0ZSwgbGFuZ3VhZ2VdKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzY3JpcHRGb3JCYXNlU2l0ZSA9XG4gICAgICAgICAgICAgIHRoaXMuZ2V0SmF2YXNjcmlwdFVybEZvckN1cnJlbnRTaXRlKGJhc2VTaXRlKTtcbiAgICAgICAgICAgIGlmIChzY3JpcHRGb3JCYXNlU2l0ZSkge1xuICAgICAgICAgICAgICBjb25zdCBqYXZhc2NyaXB0VXJsID0gYCR7c2NyaXB0Rm9yQmFzZVNpdGV9Jmxhbmc9JHtsYW5ndWFnZX1gO1xuICAgICAgICAgICAgICB0aGlzLnNjcmlwdExvYWRlci5lbWJlZFNjcmlwdCh7XG4gICAgICAgICAgICAgICAgc3JjOiBqYXZhc2NyaXB0VXJsLFxuICAgICAgICAgICAgICAgIHBhcmFtczogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IHsgdHlwZTogJ3RleHQvamF2YXNjcmlwdCcgfSxcbiAgICAgICAgICAgICAgICBjYWxsYmFjazogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgdGhpcy5yZWdpc3RlckV2ZW50TGlzdGVuZXJzKGJhc2VTaXRlKTtcbiAgICAgICAgICAgICAgICAgIHRoaXMubG9hZGVkJC5uZXh0KHRydWUpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZXJyb3JDYWxsYmFjazogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvckxvYWRpbmckLm5leHQodHJ1ZSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGlmICh0aGlzLndpblJlZj8ubmF0aXZlV2luZG93ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAodGhpcy53aW5SZWYubmF0aXZlV2luZG93IGFzIHsgW2tleTogc3RyaW5nXTogYW55IH0pW1xuICAgICAgICAgICAgICAgICAgJ19fZ2lneWFDb25mJ1xuICAgICAgICAgICAgICAgIF0gPSB7XG4gICAgICAgICAgICAgICAgICBpbmNsdWRlOiAnaWRfdG9rZW4nLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldEphdmFzY3JpcHRVcmxGb3JDdXJyZW50U2l0ZShiYXNlU2l0ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBmaWx0ZXJlZENvbmZpZ3MgPSAodGhpcy5jZGNDb25maWcuY2RjID8/IFtdKS5maWx0ZXIoXG4gICAgICAoY29uZikgPT4gY29uZi5iYXNlU2l0ZSA9PT0gYmFzZVNpdGVcbiAgICApO1xuICAgIGlmIChmaWx0ZXJlZENvbmZpZ3MgJiYgZmlsdGVyZWRDb25maWdzLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiBmaWx0ZXJlZENvbmZpZ3NbMF0uamF2YXNjcmlwdFVybDtcbiAgICB9XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVyIGxvZ2luIGV2ZW50IGxpc3RlbmVycyBmb3IgQ0RDIGxvZ2luXG4gICAqXG4gICAqIEBwYXJhbSBiYXNlU2l0ZVxuICAgKi9cbiAgcHJvdGVjdGVkIHJlZ2lzdGVyRXZlbnRMaXN0ZW5lcnMoYmFzZVNpdGU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuYWRkQ2RjRXZlbnRIYW5kbGVycyhiYXNlU2l0ZSk7XG4gIH1cblxuICAvKipcbiAgICogTWV0aG9kIHRvIHJlZ2lzdGVyIENEQyBldmVudCBoYW5kbGVyc1xuICAgKlxuICAgKiBAcGFyYW0gYmFzZVNpdGVcbiAgICovXG4gIHByb3RlY3RlZCBhZGRDZGNFdmVudEhhbmRsZXJzKGJhc2VTaXRlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAodGhpcy53aW5SZWYubmF0aXZlV2luZG93IGFzIHsgW2tleTogc3RyaW5nXTogYW55IH0pPy5bXG4gICAgICAnZ2lneWEnXG4gICAgXT8uYWNjb3VudHM/LmFkZEV2ZW50SGFuZGxlcnMoe1xuICAgICAgb25Mb2dpbjogKC4uLnBhcmFtczogYW55W10pID0+IHtcbiAgICAgICAgdGhpcy56b25lLnJ1bigoKSA9PiB0aGlzLm9uTG9naW5FdmVudEhhbmRsZXIoYmFzZVNpdGUsIC4uLnBhcmFtcykpO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUcmlnZ2VyIGxvZ2luIHRvIENvbW1lcmNlIG9uY2UgYW4gb25Mb2dpbiBldmVudCBpcyB0cmlnZ2VyZWQgYnkgQ0RDIFNjcmVlbiBTZXQuXG4gICAqXG4gICAqIEBwYXJhbSBiYXNlU2l0ZVxuICAgKiBAcGFyYW0gcmVzcG9uc2VcbiAgICovXG4gIG9uTG9naW5FdmVudEhhbmRsZXIoYmFzZVNpdGU6IHN0cmluZywgcmVzcG9uc2U/OiBhbnkpIHtcbiAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgIHRoaXMuY2RjQXV0aC5sb2dpbldpdGhDdXN0b21DZGNGbG93KFxuICAgICAgICByZXNwb25zZS5VSUQsXG4gICAgICAgIHJlc3BvbnNlLlVJRFNpZ25hdHVyZSxcbiAgICAgICAgcmVzcG9uc2Uuc2lnbmF0dXJlVGltZXN0YW1wLFxuICAgICAgICByZXNwb25zZS5pZF90b2tlbiAhPT0gdW5kZWZpbmVkID8gcmVzcG9uc2UuaWRfdG9rZW4gOiAnJyxcbiAgICAgICAgYmFzZVNpdGVcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdXNlciBkZXRhaWxzIHVzaW5nIHRoZSBleGlzdGluZyBVc2VyIEFQSVxuICAgKlxuICAgKiBAcGFyYW0gcmVzcG9uc2VcbiAgICovXG4gIG9uUHJvZmlsZVVwZGF0ZUV2ZW50SGFuZGxlcihyZXNwb25zZT86IGFueSkge1xuICAgIGlmIChyZXNwb25zZSkge1xuICAgICAgY29uc3QgdXNlckRldGFpbHM6IFVzZXIgPSB7fTtcbiAgICAgIHVzZXJEZXRhaWxzLmZpcnN0TmFtZSA9IHJlc3BvbnNlLnByb2ZpbGUuZmlyc3ROYW1lO1xuICAgICAgdXNlckRldGFpbHMubGFzdE5hbWUgPSByZXNwb25zZS5wcm9maWxlLmxhc3ROYW1lO1xuICAgICAgdGhpcy51c2VyUHJvZmlsZUZhY2FkZS51cGRhdGUodXNlckRldGFpbHMpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==