UNPKG

@spartacus/cdc

Version:

Customer Data Cloud Integration library for Spartacus

151 lines 18.1 kB
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==