UNPKG

ngx-social-button

Version:

Social login/share buttons for Angular 6, 7, 8

952 lines (936 loc) 104 kB
import { __extends } from 'tslib'; import { Injectable, Component, Input, Output, EventEmitter, Inject, ViewChild, NgModule, defineInjectable, inject } from '@angular/core'; import { BehaviorSubject } from 'rxjs'; import { DOCUMENT } from '@angular/common'; /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc */ /** * @abstract */ var /** * @abstract */ BaseLoginProviderImpl = /** @class */ (function () { function BaseLoginProviderImpl() { } /** * @param {?} obj * @param {?} onload * @return {?} */ BaseLoginProviderImpl.prototype.loadScript = /** * @param {?} obj * @param {?} onload * @return {?} */ function (obj, onload) { if (document.getElementById(obj.name)) { return; } /** @type {?} */ var signInJS = document.createElement('script'); signInJS.async = true; signInJS.src = obj.url; signInJS.onload = onload; if (obj.name === 'linkedin') { signInJS.async = false; signInJS.text = ('api_key: ' + obj.id).replace('\'', ''); } document.head.appendChild(signInJS); }; return BaseLoginProviderImpl; }()); /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc */ var SocialUser = /** @class */ (function () { function SocialUser() { } return SocialUser; }()); var LoginProviderClass = /** @class */ (function () { function LoginProviderClass() { } return LoginProviderClass; }()); /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc */ var FacebookLoginProvider = /** @class */ (function (_super) { __extends(FacebookLoginProvider, _super); function FacebookLoginProvider(clientId) { var _this = _super.call(this) || this; _this.clientId = clientId; _this.TYPE = 'facebook'; _this.loginProviderObj = new LoginProviderClass(); _this.loginProviderObj.id = clientId; _this.loginProviderObj.name = 'facebook'; _this.loginProviderObj.url = 'https://connect.facebook.net/en_US/sdk.js'; return _this; } /** * @return {?} */ FacebookLoginProvider.prototype.initialize = /** * @return {?} */ function () { var _this = this; return new Promise(function (resolve, reject) { _this.loadScript(_this.loginProviderObj, function () { FB.init({ appId: _this.clientId, autoLogAppEvents: true, cookie: true, xfbml: true, version: 'v2.8' }); FB.AppEvents.logPageView(); FB.getLoginStatus(function (response) { if (response.status === 'connected') { /** @type {?} */ var accessToken_1 = FB.getAuthResponse()['accessToken']; FB.api('/me?fields=name,email,picture', function (res) { resolve(FacebookLoginProvider.drawUser(Object.assign({}, { token: accessToken_1 }, res))); }); } }); }); }); }; /** * @param {?} response * @return {?} */ FacebookLoginProvider.drawUser = /** * @param {?} response * @return {?} */ function (response) { /** @type {?} */ var user = new SocialUser(); user.id = response.id; user.name = response.name; user.email = response.email; user.accessToken = response.accessToken; user.image = 'https://graph.facebook.com/' + response.id + '/picture?type=normal'; return user; }; /** * @param {?=} scopes * @return {?} */ FacebookLoginProvider.prototype.signIn = /** * @param {?=} scopes * @return {?} */ function (scopes) { return new Promise(function (resolve, reject) { FB.login(function (response) { console.log("facebook", response); if (response.authResponse) { /** @type {?} */ var accessToken_2 = FB.getAuthResponse()['accessToken']; FB.api('/me?fields=name,email,picture', function (res) { console.log("me", res); resolve(FacebookLoginProvider.drawUser(Object.assign({}, { accessToken: accessToken_2 }, res))); }); } }, { scope: scopes && scopes.length > 0 ? scopes.join(',') : 'email,public_profile' }); }); }; /** * @param {?=} share * @return {?} */ FacebookLoginProvider.prototype.sharing = /** * @param {?=} share * @return {?} */ function (share) { return new Promise(function (resolve, reject) { FB.ui({ method: 'share', href: share.href, hashtag: (share.hashtag && share.hashtag.indexOf('#') >= 0) ? share.hashtag : null }, function (response) { console.log(response); resolve(); }); }); }; /** * @return {?} */ FacebookLoginProvider.prototype.signOut = /** * @return {?} */ function () { return new Promise(function (resolve, reject) { FB.logout(function (response) { resolve(); }); }); }; FacebookLoginProvider.PROVIDER_TYPE = 'facebook'; FacebookLoginProvider.SCOPES = { EMAIL: 'email', PUBLIC_PROFILE: 'public_profile' }; return FacebookLoginProvider; }(BaseLoginProviderImpl)); /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc */ var GoogleLoginProvider = /** @class */ (function (_super) { __extends(GoogleLoginProvider, _super); function GoogleLoginProvider(clientId) { var _this = _super.call(this) || this; _this.clientId = clientId; _this.loginProviderObj = new LoginProviderClass(); _this.TYPE = 'google'; _this.loginProviderObj.id = clientId; _this.loginProviderObj.name = 'google'; _this.loginProviderObj.url = 'https://apis.google.com/js/platform.js'; return _this; } /** * @return {?} */ GoogleLoginProvider.prototype.initialize = /** * @return {?} */ function () { var _this = this; return new Promise(function (resolve, reject) { _this.loadScript(_this.loginProviderObj, function () { gapi.load('auth2', function () { _this.auth2 = gapi.auth2.init({ client_id: _this.clientId, scope: 'email' }); _this.auth2.then(function () { if (_this.auth2.isSignedIn.get()) { resolve(_this.drawUser()); } }); }); }); }); }; /** * @return {?} */ GoogleLoginProvider.prototype.drawUser = /** * @return {?} */ function () { /** @type {?} */ var user = new SocialUser(); /** @type {?} */ var profile = this.auth2.currentUser.get().getBasicProfile(); /** @type {?} */ var authResponseObj = this.auth2.currentUser.get().getAuthResponse(true); user.id = profile.getId(); user.name = profile.getName(); user.email = profile.getEmail(); user.image = profile.getImageUrl(); user.accessToken = authResponseObj.access_token; user.idToken = authResponseObj.id_token; return user; }; /** * @param {?=} scopes * @return {?} */ GoogleLoginProvider.prototype.signIn = /** * @param {?=} scopes * @return {?} */ function (scopes) { var _this = this; return new Promise(function (resolve, reject) { /** @type {?} */ var promise = _this.auth2.signIn(); promise.then(function () { resolve(_this.drawUser()); }).catch(function (err) { reject(err); }); }); }; /** * @return {?} */ GoogleLoginProvider.prototype.signOut = /** * @return {?} */ function () { var _this = this; return new Promise(function (resolve, reject) { _this.auth2.signOut().then(function (err) { if (err) { reject(err); } else { resolve(); } }); }); }; /** * @param {?=} share * @return {?} */ GoogleLoginProvider.prototype.sharing = /** * @param {?=} share * @return {?} */ function (share) { return new Promise(function (resolve, reject) { resolve(); }); }; GoogleLoginProvider.PROVIDER_TYPE = 'google'; return GoogleLoginProvider; }(BaseLoginProviderImpl)); /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc */ var LinkedinLoginProvider = /** @class */ (function (_super) { __extends(LinkedinLoginProvider, _super); function LinkedinLoginProvider(clientId) { var _this = _super.call(this) || this; _this.clientId = clientId; _this.loginProviderObj = new LoginProviderClass(); _this.TYPE = 'linkedin'; _this.loginProviderObj.id = clientId; _this.loginProviderObj.name = 'linkedin'; _this.loginProviderObj.url = 'https://platform.linkedin.com/in.js'; return _this; } /** * @return {?} */ LinkedinLoginProvider.prototype.initialize = /** * @return {?} */ function () { var _this = this; return new Promise(function (resolve, reject) { _this.loadScript(_this.loginProviderObj, function () { IN.init({ api_key: _this.clientId, authorize: true, onLoad: _this.onLinkedInLoad() }); IN.Event.on(IN, 'auth', function () { if (IN.User.isAuthorized()) { IN.API.Raw('/people/~:(id,first-name,last-name,email-address,picture-url)').result(function (res) { resolve(_this.drawUser(res)); }); } }); }); }); }; /** * @return {?} */ LinkedinLoginProvider.prototype.onLinkedInLoad = /** * @return {?} */ function () { IN.Event.on(IN, 'systemReady', function () { IN.User.refresh(); }); }; /** * @param {?} response * @return {?} */ LinkedinLoginProvider.prototype.drawUser = /** * @param {?} response * @return {?} */ function (response) { /** @type {?} */ var user = new SocialUser(); user.id = response.id; user.name = response.firstName + ' ' + response.lastName; user.email = response.emailAddress; user.image = response.pictureUrl; user.accessToken = IN.ENV.auth.oauth_token; return user; }; /** * @return {?} */ LinkedinLoginProvider.prototype.signIn = /** * @return {?} */ function () { var _this = this; return new Promise(function (resolve, reject) { IN.User.authorize(function () { IN.API.Raw('/people/~:(id,first-name,last-name,email-address,picture-url)').result(function (res) { console.log('linkedin', res); resolve(_this.drawUser(res)); }); }); }); }; /** * @return {?} */ LinkedinLoginProvider.prototype.signOut = /** * @return {?} */ function () { return new Promise(function (resolve, reject) { IN.User.logout(function (response) { resolve(); }, function (err) { reject(err); }); }); }; /** * @param {?=} share * @return {?} */ LinkedinLoginProvider.prototype.sharing = /** * @param {?=} share * @return {?} */ function (share) { return new Promise(function (resolve, reject) { /** @type {?} */ var payload = { 'comment': share ? share.comment : '', 'visibility': { 'code': 'anyone' } }; IN.API.Raw('/people/~/shares?format=json') .method('POST') .body(JSON.stringify(payload)) .result(function (data) { console.log('linkedin share', data); resolve(); }) .error(function (onError) { console.log('linkedin', onError); }); }); }; LinkedinLoginProvider.PROVIDER_TYPE = 'linkedin'; return LinkedinLoginProvider; }(BaseLoginProviderImpl)); /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc */ var SocialServiceConfig = /** @class */ (function () { function SocialServiceConfig(providers) { this.providers = new Map(); if (providers) { for (var i = 0; i < providers.length; i++) { /** @type {?} */ var element = providers[i]; this.providers.set(element.provider.TYPE, element.provider); } } } /** * @return {?} */ SocialServiceConfig.prototype.getProviders = /** * @return {?} */ function () { return this.providers; }; /** * @param {?} provider * @return {?} */ SocialServiceConfig.prototype.addProvider = /** * @param {?} provider * @return {?} */ function (provider) { if (!this.providers.get(provider.TYPE)) { this.providers.set(provider.TYPE, provider); } }; /** * @param {?} clientId * @return {?} */ SocialServiceConfig.prototype.addFacebook = /** * @param {?} clientId * @return {?} */ function (clientId) { this.addProvider(new FacebookLoginProvider(clientId)); return this; }; /** * @param {?} clientId * @return {?} */ SocialServiceConfig.prototype.addGoogle = /** * @param {?} clientId * @return {?} */ function (clientId) { this.addProvider(new GoogleLoginProvider(clientId)); return this; }; /** * @param {?} clientId * @return {?} */ SocialServiceConfig.prototype.addLinkedIn = /** * @param {?} clientId * @return {?} */ function (clientId) { this.addProvider(new LinkedinLoginProvider(clientId)); return this; }; return SocialServiceConfig; }()); var SocialService = /** @class */ (function () { function SocialService(config) { var _this = this; this._user = null; this._authState = new BehaviorSubject(null); this.providers = config.getProviders(); this.providers.forEach(function (provider, key) { provider.initialize().then(function (user) { user.provider = key; _this._user = user; _this._authState.next(user); }).catch(function (err) { // this._authState.next(null); }); }); } Object.defineProperty(SocialService.prototype, "authState", { get: /** * @return {?} */ function () { return this._authState.asObservable(); }, enumerable: true, configurable: true }); /** * @return {?} */ SocialService.prototype.isSocialLoggedIn = /** * @return {?} */ function () { return (this._user != null); }; /** * @param {?} providerType * @param {?=} share * @return {?} */ SocialService.prototype.sharing = /** * @param {?} providerType * @param {?=} share * @return {?} */ function (providerType, share) { var _this = this; return new Promise(function (resolve, reject) { /** @type {?} */ var providerObject = _this.providers.get(providerType); if (providerObject) { providerObject.sharing(share).then(function () { resolve(true); }); } else { reject(SocialService.LOGIN_PROVIDER_NOT_FOUND); } }); }; /** * @param {?=} share * @return {?} */ SocialService.prototype.facebookSharing = /** * @param {?=} share * @return {?} */ function (share) { return this.sharing('facebook', share); }; // linkedinSharing(share?: any) { // return this.sharing('linkedin', share); // } /** * @param {?} providerType * @param {?=} scopes * @return {?} */ SocialService.prototype.signIn = /** * @param {?} providerType * @param {?=} scopes * @return {?} */ function (providerType, scopes) { var _this = this; return new Promise(function (resolve, reject) { /** @type {?} */ var providerObject = _this.providers.get(providerType); if (providerObject) { providerObject.signIn(scopes).then(function (user) { user.provider = providerType; resolve(user); _this._user = user; _this._authState.next(user); }).catch(function (err) { reject(SocialService.USER_POPUP_CLOSE); }); } else { reject(SocialService.LOGIN_PROVIDER_NOT_FOUND); } }); }; /** * @return {?} */ SocialService.prototype.signOut = /** * @return {?} */ function () { var _this = this; return new Promise(function (resolve, reject) { if (_this._user && _this._user.provider) { /** @type {?} */ var providerType = _this._user.provider; /** @type {?} */ var providerObject = _this.providers.get(providerType); providerObject.signOut().then(function () { _this._user = null; _this._authState.next(null); resolve(); }).catch(function (err) { _this._authState.next(null); }); } else { reject(SocialService.LOGIN_PROVIDER_NOT_FOUND); } }); }; SocialService.LOGIN_PROVIDER_NOT_FOUND = 'Login provider not found'; SocialService.USER_POPUP_CLOSE = 'User close the popup'; SocialService.decorators = [ { type: Injectable, args: [{ providedIn: 'root' },] }, ]; /** @nocollapse */ SocialService.ctorParameters = function () { return [ { type: SocialServiceConfig } ]; }; /** @nocollapse */ SocialService.ngInjectableDef = defineInjectable({ factory: function SocialService_Factory() { return new SocialService(inject(SocialServiceConfig)); }, token: SocialService, providedIn: "root" }); return SocialService; }()); /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc */ var FacebookLoginButton = /** @class */ (function () { function FacebookLoginButton(socialAuthService) { this.socialAuthService = socialAuthService; this.socialUser = new EventEmitter(); } /** * @return {?} */ FacebookLoginButton.prototype.ngOnInit = /** * @return {?} */ function () { }; /** * @return {?} */ FacebookLoginButton.prototype.socialSignIn = /** * @return {?} */ function () { var _this = this; this.socialAuthService.signIn('facebook', this.scopes).then(function (userData) { console.log("socialSignIn", userData); _this.socialUser.emit(userData); }).catch(function () { _this.socialUser.emit(null); }); }; FacebookLoginButton.decorators = [ { type: Component, args: [{ selector: 'facebook-login-button', template: "\n <button [className]=\"style == 'round' ? 'social-btn facebook ' : 'button btn-block loginBtn --facebook '\"\n (click)=\"socialSignIn()\" type=\"button\">\n {{style == 'round' ? '': text ? text : 'Login with Facebook'}}</button>\n ", styles: [".button{font-family:Lato,\"Lucida Grande\",\"Lucida Sans Unicode\",Tahoma,Sans-Serif;-webkit-appearance:none;display:inline-block;outline:0;border-radius:3px;border:3px solid transparent;cursor:pointer;text-overflow:ellipsis;text-decoration:none!important;font-weight:400!important}.loginBtn{box-sizing:border-box;position:relative;margin:.2em;padding:0 15px 0 46px;border:none;text-align:left;line-height:34px;white-space:nowrap;border-radius:3px;font-size:16px;color:#fff}.loginBtn:before{content:\"\";box-sizing:border-box;position:absolute;top:0;left:0;width:34px;height:100%}.loginBtn:focus{outline:0}.loginBtn:active{box-shadow:inset 0 0 0 32px rgba(0,0,0,.1)}.shareBtn{box-sizing:border-box;position:relative;margin:.2em;padding:0 15px 0 46px;border:none;text-align:left;line-height:34px;white-space:nowrap;border-radius:3px;font-size:16px;color:#fff}.shareBtn:before{content:\"\";box-sizing:border-box;position:absolute;top:0;left:0;width:34px;height:100%}.shareBtn:focus{outline:0}.shareBtn:active{box-shadow:inset 0 0 0 32px rgba(0,0,0,.1)}.--facebook{background-color:#4c69ba;background-image:linear-gradient(#4c69ba,#3b55a0);text-shadow:0 -1px 0 #354c8c}.--facebook:before{border-right:1px solid #364e92;background:url(https://s3-us-west-2.amazonaws.com/s.cdpn.io/14082/icon_facebook.png) 6px 6px no-repeat}.--facebook:focus,.--facebook:hover{background-color:#5b7bd5;background-image:linear-gradient(#5b7bd5,#4864b1)}.--google{background:#dd4b39}.--google:before{border-right:1px solid #bb3f30;background:url(https://s3-us-west-2.amazonaws.com/s.cdpn.io/14082/icon_google.png) 6px 6px no-repeat}.--google:focus,.--google:hover{background:#e74b37}.--linkedin{background:#007bb6}.--linkedin:before{border-right:1px solid #007bb6;background:url(https://content.linkedin.com/content/dam/developer/global/en_US/site/img/signin-button.png) -3px -3px no-repeat}.--linkedin:focus,.--linkedin:hover{background:linear-gradient(#007bb6,#4864b1)}.social-btn{width:50px;height:50px;background-size:cover;background-repeat:no-repeat;cursor:pointer;border-radius:10px;border:none}.social-btn.facebook{background-image:url(https://raw.githubusercontent.com/JohnnieLi/ngx-social-button/master/assets/facebook.png)}.social-btn.google{background-image:url(https://raw.githubusercontent.com/JohnnieLi/ngx-social-button/master/assets/google.png)}.social-btn.linkedin{background-image:url(https://raw.githubusercontent.com/JohnnieLi/ngx-social-button/master/assets/LinkedIn.png)}.social-btn.wechat{background-image:url(https://github.com/JohnnieLi/ngx-social-button/blob/master/assets/wechat.png?raw=true)}"], },] }, ]; /** @nocollapse */ FacebookLoginButton.ctorParameters = function () { return [ { type: SocialService } ]; }; FacebookLoginButton.propDecorators = { size: [{ type: Input }], text: [{ type: Input }], style: [{ type: Input }], scopes: [{ type: Input }], socialUser: [{ type: Output }] }; return FacebookLoginButton; }()); /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc */ var GoogleLoginButton = /** @class */ (function () { function GoogleLoginButton(socialAuthService) { this.socialAuthService = socialAuthService; this.socialUser = new EventEmitter(); } /** * @return {?} */ GoogleLoginButton.prototype.ngOnInit = /** * @return {?} */ function () { }; /** * @return {?} */ GoogleLoginButton.prototype.socialSignIn = /** * @return {?} */ function () { var _this = this; this.socialAuthService.signIn('google', this.scopes).then(function (userData) { _this.socialUser.emit(userData); }).catch(function () { _this.socialUser.emit(null); }); }; GoogleLoginButton.decorators = [ { type: Component, args: [{ selector: 'google-login-button', template: "\n\t\t<button [className]=\"style == 'round' ? 'social-btn google' : 'button btn-block loginBtn --google'\"\n\t\t (click)=\"socialSignIn()\" type=\"button\">\n\t\t\t{{style == 'round' ? '': text ? text : 'Login with Google'}}\n\t\t</button>\n ", styles: [".button{font-family:Lato,\"Lucida Grande\",\"Lucida Sans Unicode\",Tahoma,Sans-Serif;-webkit-appearance:none;display:inline-block;outline:0;border-radius:3px;border:3px solid transparent;cursor:pointer;text-overflow:ellipsis;text-decoration:none!important;font-weight:400!important}.loginBtn{box-sizing:border-box;position:relative;margin:.2em;padding:0 15px 0 46px;border:none;text-align:left;line-height:34px;white-space:nowrap;border-radius:3px;font-size:16px;color:#fff}.loginBtn:before{content:\"\";box-sizing:border-box;position:absolute;top:0;left:0;width:34px;height:100%}.loginBtn:focus{outline:0}.loginBtn:active{box-shadow:inset 0 0 0 32px rgba(0,0,0,.1)}.shareBtn{box-sizing:border-box;position:relative;margin:.2em;padding:0 15px 0 46px;border:none;text-align:left;line-height:34px;white-space:nowrap;border-radius:3px;font-size:16px;color:#fff}.shareBtn:before{content:\"\";box-sizing:border-box;position:absolute;top:0;left:0;width:34px;height:100%}.shareBtn:focus{outline:0}.shareBtn:active{box-shadow:inset 0 0 0 32px rgba(0,0,0,.1)}.--facebook{background-color:#4c69ba;background-image:linear-gradient(#4c69ba,#3b55a0);text-shadow:0 -1px 0 #354c8c}.--facebook:before{border-right:1px solid #364e92;background:url(https://s3-us-west-2.amazonaws.com/s.cdpn.io/14082/icon_facebook.png) 6px 6px no-repeat}.--facebook:focus,.--facebook:hover{background-color:#5b7bd5;background-image:linear-gradient(#5b7bd5,#4864b1)}.--google{background:#dd4b39}.--google:before{border-right:1px solid #bb3f30;background:url(https://s3-us-west-2.amazonaws.com/s.cdpn.io/14082/icon_google.png) 6px 6px no-repeat}.--google:focus,.--google:hover{background:#e74b37}.--linkedin{background:#007bb6}.--linkedin:before{border-right:1px solid #007bb6;background:url(https://content.linkedin.com/content/dam/developer/global/en_US/site/img/signin-button.png) -3px -3px no-repeat}.--linkedin:focus,.--linkedin:hover{background:linear-gradient(#007bb6,#4864b1)}.social-btn{width:50px;height:50px;background-size:cover;background-repeat:no-repeat;cursor:pointer;border-radius:10px;border:none}.social-btn.facebook{background-image:url(https://raw.githubusercontent.com/JohnnieLi/ngx-social-button/master/assets/facebook.png)}.social-btn.google{background-image:url(https://raw.githubusercontent.com/JohnnieLi/ngx-social-button/master/assets/google.png)}.social-btn.linkedin{background-image:url(https://raw.githubusercontent.com/JohnnieLi/ngx-social-button/master/assets/LinkedIn.png)}.social-btn.wechat{background-image:url(https://github.com/JohnnieLi/ngx-social-button/blob/master/assets/wechat.png?raw=true)}"], },] }, ]; /** @nocollapse */ GoogleLoginButton.ctorParameters = function () { return [ { type: SocialService } ]; }; GoogleLoginButton.propDecorators = { size: [{ type: Input }], style: [{ type: Input }], text: [{ type: Input }], scopes: [{ type: Input }], socialUser: [{ type: Output }] }; return GoogleLoginButton; }()); /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc */ var LinkedinLoginButton = /** @class */ (function () { function LinkedinLoginButton(socialAuthService) { this.socialAuthService = socialAuthService; this.socialUser = new EventEmitter(); } /** * @return {?} */ LinkedinLoginButton.prototype.ngOnInit = /** * @return {?} */ function () { }; /** * @return {?} */ LinkedinLoginButton.prototype.socialSignIn = /** * @return {?} */ function () { var _this = this; this.socialAuthService.signIn('linkedin', this.scopes).then(function (userData) { _this.socialUser.emit(userData); }).catch(function () { _this.socialUser.emit(null); }); }; LinkedinLoginButton.decorators = [ { type: Component, args: [{ selector: 'linkedin-login-button', template: "\n\t\t<button [className]=\"style == 'round' ? 'social-btn linkedin' : 'button btn-block loginBtn --linkedin'\"\n\t\t (click)=\"socialSignIn()\" type=\"button\">\n\t\t\t{{style == 'round' ? '': text ? text : 'Login with LinkedIn'}}\n\t\t</button>\n ", styles: [".button{font-family:Lato,\"Lucida Grande\",\"Lucida Sans Unicode\",Tahoma,Sans-Serif;-webkit-appearance:none;display:inline-block;outline:0;border-radius:3px;border:3px solid transparent;cursor:pointer;text-overflow:ellipsis;text-decoration:none!important;font-weight:400!important}.loginBtn{box-sizing:border-box;position:relative;margin:.2em;padding:0 15px 0 46px;border:none;text-align:left;line-height:34px;white-space:nowrap;border-radius:3px;font-size:16px;color:#fff}.loginBtn:before{content:\"\";box-sizing:border-box;position:absolute;top:0;left:0;width:34px;height:100%}.loginBtn:focus{outline:0}.loginBtn:active{box-shadow:inset 0 0 0 32px rgba(0,0,0,.1)}.shareBtn{box-sizing:border-box;position:relative;margin:.2em;padding:0 15px 0 46px;border:none;text-align:left;line-height:34px;white-space:nowrap;border-radius:3px;font-size:16px;color:#fff}.shareBtn:before{content:\"\";box-sizing:border-box;position:absolute;top:0;left:0;width:34px;height:100%}.shareBtn:focus{outline:0}.shareBtn:active{box-shadow:inset 0 0 0 32px rgba(0,0,0,.1)}.--facebook{background-color:#4c69ba;background-image:linear-gradient(#4c69ba,#3b55a0);text-shadow:0 -1px 0 #354c8c}.--facebook:before{border-right:1px solid #364e92;background:url(https://s3-us-west-2.amazonaws.com/s.cdpn.io/14082/icon_facebook.png) 6px 6px no-repeat}.--facebook:focus,.--facebook:hover{background-color:#5b7bd5;background-image:linear-gradient(#5b7bd5,#4864b1)}.--google{background:#dd4b39}.--google:before{border-right:1px solid #bb3f30;background:url(https://s3-us-west-2.amazonaws.com/s.cdpn.io/14082/icon_google.png) 6px 6px no-repeat}.--google:focus,.--google:hover{background:#e74b37}.--linkedin{background:#007bb6}.--linkedin:before{border-right:1px solid #007bb6;background:url(https://content.linkedin.com/content/dam/developer/global/en_US/site/img/signin-button.png) -3px -3px no-repeat}.--linkedin:focus,.--linkedin:hover{background:linear-gradient(#007bb6,#4864b1)}.social-btn{width:50px;height:50px;background-size:cover;background-repeat:no-repeat;cursor:pointer;border-radius:10px;border:none}.social-btn.facebook{background-image:url(https://raw.githubusercontent.com/JohnnieLi/ngx-social-button/master/assets/facebook.png)}.social-btn.google{background-image:url(https://raw.githubusercontent.com/JohnnieLi/ngx-social-button/master/assets/google.png)}.social-btn.linkedin{background-image:url(https://raw.githubusercontent.com/JohnnieLi/ngx-social-button/master/assets/LinkedIn.png)}.social-btn.wechat{background-image:url(https://github.com/JohnnieLi/ngx-social-button/blob/master/assets/wechat.png?raw=true)}"], },] }, ]; /** @nocollapse */ LinkedinLoginButton.ctorParameters = function () { return [ { type: SocialService } ]; }; LinkedinLoginButton.propDecorators = { size: [{ type: Input }], style: [{ type: Input }], text: [{ type: Input }], scopes: [{ type: Input }], socialUser: [{ type: Output }] }; return LinkedinLoginButton; }()); /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc */ var FacebookSharingButton = /** @class */ (function () { function FacebookSharingButton(socialAuthService, document) { this.socialAuthService = socialAuthService; this.document = document; this.share = null; this.response = new EventEmitter(); } /** * @return {?} */ FacebookSharingButton.prototype.ngOnInit = /** * @return {?} */ function () { }; /** * @return {?} */ FacebookSharingButton.prototype.sharing = /** * @return {?} */ function () { var _this = this; console.log(this.document.location.href); if (!this.share) { this.share = { href: this.document.location.href }; } else if (!this.share.href) { this.share.href = this.document.location.href; } this.socialAuthService.facebookSharing(this.share).then(function () { _this.response.emit(true); }).catch(function (err) { _this.response.emit(false); }); }; FacebookSharingButton.decorators = [ { type: Component, args: [{ selector: 'facebook-share-button', template: "\n <button class=\"button btn-block loginBtn --facebook\" \n (click)=\"sharing()\" type=\"button\">Share</button>\n ", styles: [".button{font-family:Lato,\"Lucida Grande\",\"Lucida Sans Unicode\",Tahoma,Sans-Serif;-webkit-appearance:none;display:inline-block;outline:0;border-radius:3px;border:3px solid transparent;cursor:pointer;text-overflow:ellipsis;text-decoration:none!important;font-weight:400!important}.loginBtn{box-sizing:border-box;position:relative;margin:.2em;padding:0 15px 0 46px;border:none;text-align:left;line-height:34px;white-space:nowrap;border-radius:3px;font-size:16px;color:#fff}.loginBtn:before{content:\"\";box-sizing:border-box;position:absolute;top:0;left:0;width:34px;height:100%}.loginBtn:focus{outline:0}.loginBtn:active{box-shadow:inset 0 0 0 32px rgba(0,0,0,.1)}.shareBtn{box-sizing:border-box;position:relative;margin:.2em;padding:0 15px 0 46px;border:none;text-align:left;line-height:34px;white-space:nowrap;border-radius:3px;font-size:16px;color:#fff}.shareBtn:before{content:\"\";box-sizing:border-box;position:absolute;top:0;left:0;width:34px;height:100%}.shareBtn:focus{outline:0}.shareBtn:active{box-shadow:inset 0 0 0 32px rgba(0,0,0,.1)}.--facebook{background-color:#4c69ba;background-image:linear-gradient(#4c69ba,#3b55a0);text-shadow:0 -1px 0 #354c8c}.--facebook:before{border-right:1px solid #364e92;background:url(https://s3-us-west-2.amazonaws.com/s.cdpn.io/14082/icon_facebook.png) 6px 6px no-repeat}.--facebook:focus,.--facebook:hover{background-color:#5b7bd5;background-image:linear-gradient(#5b7bd5,#4864b1)}.--google{background:#dd4b39}.--google:before{border-right:1px solid #bb3f30;background:url(https://s3-us-west-2.amazonaws.com/s.cdpn.io/14082/icon_google.png) 6px 6px no-repeat}.--google:focus,.--google:hover{background:#e74b37}.--linkedin{background:#007bb6}.--linkedin:before{border-right:1px solid #007bb6;background:url(https://content.linkedin.com/content/dam/developer/global/en_US/site/img/signin-button.png) -3px -3px no-repeat}.--linkedin:focus,.--linkedin:hover{background:linear-gradient(#007bb6,#4864b1)}.social-btn{width:50px;height:50px;background-size:cover;background-repeat:no-repeat;cursor:pointer;border-radius:10px;border:none}.social-btn.facebook{background-image:url(https://raw.githubusercontent.com/JohnnieLi/ngx-social-button/master/assets/facebook.png)}.social-btn.google{background-image:url(https://raw.githubusercontent.com/JohnnieLi/ngx-social-button/master/assets/google.png)}.social-btn.linkedin{background-image:url(https://raw.githubusercontent.com/JohnnieLi/ngx-social-button/master/assets/LinkedIn.png)}.social-btn.wechat{background-image:url(https://github.com/JohnnieLi/ngx-social-button/blob/master/assets/wechat.png?raw=true)}"], },] }, ]; /** @nocollapse */ FacebookSharingButton.ctorParameters = function () { return [ { type: SocialService }, { type: undefined, decorators: [{ type: Inject, args: [DOCUMENT,] }] } ]; }; FacebookSharingButton.propDecorators = { share: [{ type: Input }], response: [{ type: Output }] }; return FacebookSharingButton; }()); /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc */ var LinkedinSharingButton = /** @class */ (function () { function LinkedinSharingButton(socialAuthService, document) { this.socialAuthService = socialAuthService; this.document = document; this.share = { href: location.href }; this.response = new EventEmitter(); } /** * @return {?} */ LinkedinSharingButton.prototype.ngAfterViewInit = /** * @return {?} */ function () { // add linkedin share button script tag to element this.element.nativeElement.innerHTML = "<script type=\"IN/Share\" data-url=\"" + this.share.href + "\"></script>"; // render share button // window['IN'] && window['IN'].parse(); }; LinkedinSharingButton.decorators = [ { type: Component, args: [{ selector: 'linkedin-share-button', template: "\n <span #element></span>\n ", },] }, ]; /** @nocollapse */ LinkedinSharingButton.ctorParameters = function () { return [ { type: SocialService }, { type: undefined, decorators: [{ type: Inject, args: [DOCUMENT,] }] } ]; }; LinkedinSharingButton.propDecorators = { share: [{ type: Input }], response: [{ type: Output }], element: [{ type: ViewChild, args: ['element',] }] }; return LinkedinSharingButton; }()); /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc */ var NgxSocialButtonModule = /** @class */ (function () { function NgxSocialButtonModule() { } NgxSocialButtonModule.decorators = [ { type: NgModule, args: [{ imports: [], declarations: [FacebookLoginButton, GoogleLoginButton, FacebookSharingButton, LinkedinLoginButton, LinkedinSharingButton], exports: [FacebookLoginButton, GoogleLoginButton, FacebookSharingButton, LinkedinLoginButton, LinkedinSharingButton] },] }, ]; return NgxSocialButtonModule; }()); /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc */ /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc */ export { SocialServiceConfig, SocialService, FacebookLoginProvider, GoogleLoginProvider, FacebookLoginButton, GoogleLoginButton, LinkedinLoginButton, FacebookSharingButton, NgxSocialButtonModule, LinkedinSharingButton as ɵb, BaseLoginProviderImpl as ɵa }; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LXNvY2lhbC1idXR0b24uanMubWFwIiwic291cmNlcyI6WyJuZzovL25neC1zb2NpYWwtYnV0dG9uL2xpYi9lbnRpdGllcy9iYXNlTG9naW5Qcm92aWRlckltcGwudHMiLCJuZzovL25neC1zb2NpYWwtYnV0dG9uL2xpYi9lbnRpdGllcy91c2VyLnRzIiwibmc6Ly9uZ3gtc29jaWFsLWJ1dHRvbi9saWIvcHJvdmlkZXJzL2ZhY2Vib29rUHJvdmlkZXIudHMiLCJuZzovL25neC1zb2NpYWwtYnV0dG9uL2xpYi9wcm92aWRlcnMvZ29vZ2xlUHJvdmlkZXIudHMiLCJuZzovL25neC1zb2NpYWwtYnV0dG9uL2xpYi9wcm92aWRlcnMvbGlua2VkaW5Qcm92aWRlci50cyIsIm5nOi8vbmd4LXNvY2lhbC1idXR0b24vbGliL3NvY2lhbC5zZXJ2aWNlLnRzIiwibmc6Ly9uZ3gtc29jaWFsLWJ1dHRvbi9saWIvYnV0dG9ucy9mYWNlYm9va0xvZ2luQnV0dG9uLnRzIiwibmc6Ly9uZ3gtc29jaWFsLWJ1dHRvbi9saWIvYnV0dG9ucy9nb29nbGVMb2dpbkJ1dHRvbi50cyIsIm5nOi8vbmd4LXNvY2lhbC1idXR0b24vbGliL2J1dHRvbnMvbGlua2VkaW5Mb2dpbkJ1dHRvbi50cyIsIm5nOi8vbmd4LXNvY2lhbC1idXR0b24vbGliL2J1dHRvbnMvZmFjZWJvb2tTaGFyaW5nQnV0dG9uLnRzIiwibmc6Ly9uZ3gtc29jaWFsLWJ1dHRvbi9saWIvYnV0dG9ucy9saW5rZWRpblNoYXJpbmdCdXR0b24udHMiLCJuZzovL25neC1zb2NpYWwtYnV0dG9uL2xpYi9uZ3gtc29jaWFsLWJ1dHRvbi5tb2R1bGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTG9naW5Qcm92aWRlciB9IGZyb20gJy4vbG9naW5Qcm92aWRlcic7XG5pbXBvcnQgeyBTb2NpYWxVc2VyLCBMb2dpblByb3ZpZGVyQ2xhc3MgfSBmcm9tICcuL3VzZXInO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQmFzZUxvZ2luUHJvdmlkZXJJbXBsIGltcGxlbWVudHMgTG9naW5Qcm92aWRlciB7XG5cblxuICAgIGNvbnN0cnVjdG9yKCkge31cblxuICBhYnN0cmFjdCBpbml0aWFsaXplKCk6IFByb21pc2U8U29jaWFsVXNlcj47XG4gIGFic3RyYWN0IHNpZ25JbihzY29wZXM/OltzdHJpbmddKTogUHJvbWlzZTxTb2NpYWxVc2VyPjtcbiAgYWJzdHJhY3Qgc2lnbk91dCgpOiBQcm9taXNlPGFueT47XG4gIGFic3RyYWN0IHNoYXJpbmcoc2hhcmU/OmFueSk6UHJvbWlzZTxhbnk+O1xuICBhYnN0cmFjdCBUWVBFOiBzdHJpbmc7XG5cbiAgbG9hZFNjcmlwdChvYmo6IExvZ2luUHJvdmlkZXJDbGFzcywgb25sb2FkOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQob2JqLm5hbWUpKSB7IHJldHVybjsgfVxuICAgIGxldCBzaWduSW5KUyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpO1xuICAgIHNpZ25JbkpTLmFzeW5jID0gdHJ1ZTtcbiAgICBzaWduSW5KUy5zcmMgPSBvYmoudXJsO1xuICAgIHNpZ25JbkpTLm9ubG9hZCA9IG9ubG9hZDtcbiAgICBpZiAob2JqLm5hbWUgPT09ICdsaW5rZWRpbicpIHtcbiAgICAgIHNpZ25JbkpTLmFzeW5jID0gZmFsc2U7XG4gICAgICBzaWduSW5KUy50ZXh0ID0gKCdhcGlfa2V5OiAnICsgb2JqLmlkKS5yZXBsYWNlKCdcXCcnLCAnJyk7XG4gICAgfVxuICAgIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoc2lnbkluSlMpO1xuICB9XG59IiwiZXhwb3J0IGNsYXNzIFNvY2lhbFVzZXIge1xuICAgIHByb3ZpZGVyOiBzdHJpbmc7XG4gICAgaWQ6IHN0cmluZztcbiAgICBlbWFpbDogc3RyaW5nO1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBpbWFnZTogc3RyaW5nO1xuICAgIGFjY2Vzc1Rva2VuPzogc3RyaW5nO1xuICAgIGlkVG9rZW4/OiBzdHJpbmdcbiAgfVxuICBcbiAgZXhwb3J0IGNsYXNzIExvZ2luUHJvdmlkZXJDbGFzcyB7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIGlkOiBzdHJpbmc7XG4gICAgdXJsOiBzdHJpbmc7XG4gIH1cbiAgXG4gIGV4cG9ydCBjbGFzcyBMaW5rZWRJblJlc3BvbnNlIHtcbiAgICBlbWFpbEFkZHJlc3M6IHN0cmluZztcbiAgICBmaXJzdE5hbWU6IHN0cmluZztcbiAgICBpZDogc3RyaW5nO1xuICAgIGxhc3ROYW1lOiBzdHJpbmc7XG4gICAgcGljdHVyZVVybDogc3RyaW5nO1xuICB9XG4iLCJpbXBvcnQgeyBCYXNlTG9naW5Qcm92aWRlckltcGwgfSBmcm9tICcuLi9lbnRpdGllcy9iYXNlTG9naW5Qcm92aWRlckltcGwnO1xuaW1wb3J0IHsgU29jaWFsVXNlciwgTG9naW5Qcm92aWRlckNsYXNzIH0gZnJvbSAnLi4vZW50aXRpZXMvdXNlcic7XG5cbmRlY2xhcmUgbGV0IEZCOiBhbnk7XG5cbmV4cG9ydCBjbGFzcyBGYWNlYm9va0xvZ2luUHJvdmlkZXIgZXh0ZW5kcyBCYXNlTG9naW5Qcm92aWRlckltcGwge1xuXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUFJPVklERVJfVFlQRSA9ICdmYWNlYm9vayc7XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgU0NPUEVTID0ge1xuICAgIEVNQUlMIDogJ2VtYWlsJyxcbiAgICBQVUJMSUNfUFJPRklMRTogJ3B1YmxpY19wcm9maWxlJ1xuICB9O1xuXG4gIHB1YmxpYyBUWVBFID0gJ2ZhY2Vib29rJztcbiAgcHVibGljIGxvZ2luUHJvdmlkZXJPYmo6IExvZ2luUHJvdmlkZXJDbGFzcyA9IG5ldyBMb2dpblByb3ZpZGVyQ2xhc3MoKTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNsaWVudElkOiBzdHJpbmcpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMubG9naW5Qcm92aWRlck9iai5pZCA9IGNsaWVudElkO1xuICAgIHRoaXMubG9naW5Qcm92aWRlck9iai5uYW1lID0gJ2ZhY2Vib29rJztcbiAgICB0aGlzLmxvZ2luUHJvdmlkZXJPYmoudXJsID0gJ2h0dHBzOi8vY29ubmVjdC5mYWNlYm9vay5uZXQvZW5fVVMvc2RrLmpzJztcbiAgfVxuXG4gIGluaXRpYWxpemUoKTogUHJvbWlzZTxTb2NpYWxVc2VyPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRoaXMubG9hZFNjcmlwdCh0aGlzLmxvZ2luUHJvdmlkZXJPYmosICgpID0+IHtcbiAgICAgICAgICBGQi5pbml0KHtcbiAgICAgICAgICAgIGFwcElkOiB0aGlzLmNsaWVudElkLFxuICAgICAgICAgICAgYXV0b0xvZ0FwcEV2ZW50czogdHJ1ZSxcbiAgICAgICAgICAgIGNvb2tpZTogdHJ1ZSxcbiAgICAgICAgICAgIHhmYm1sOiB0cnVlLFxuICAgICAgICAgICAgdmVyc2lvbjogJ3YyLjgnXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgRkIuQXBwRXZlbnRzLmxvZ1BhZ2VWaWV3KCk7XG5cbiAgICAgICAgICBGQi5nZXRMb2dpblN0YXR1cyhmdW5jdGlvbiAocmVzcG9uc2U6IGFueSkge1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gJ2Nvbm5lY3RlZCcpIHtcbiAgICAgICAgICAgICAgY29uc3QgYWNjZXNzVG9rZW4gPSBGQi5nZXRBdXRoUmVzcG9uc2UoKVsnYWNjZXNzVG9rZW4nXTtcbiAgICAgICAgICAgICAgRkIuYXBpKCcvbWU/ZmllbGRzPW5hbWUsZW1haWwscGljdHVyZScsIChyZXM6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIHJlc29sdmUoRmFjZWJvb2tMb2dpblByb3ZpZGVyLmRyYXdVc2VyKE9iamVjdC5hc3NpZ24oe30sIHt0b2tlbjogYWNjZXNzVG9rZW59LCByZXMpKSk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBkcmF3VXNlcihyZXNwb25zZTogYW55KTogU29jaWFsVXNlciB7XG4gICAgbGV0IHVzZXI6IFNvY2lhbFVzZXIgPSBuZXcgU29jaWFsVXNlcigpO1xuICAgIHVzZXIuaWQgPSByZXNwb25zZS5pZDtcbiAgICB1c2VyLm5hbWUgPSByZXNwb25zZS5uYW1lO1xuICAgIHVzZXIuZW1haWwgPSByZXNwb25zZS5lbWFpbDtcbiAgICB1c2VyLmFjY2Vzc1Rva2VuID0gcmVzcG9uc2UuYWNjZXNzVG9rZW47XG4gICAgdXNlci5pbWFnZSA9ICdodHRwczovL2dyYXBoLmZhY2Vib29rLmNvbS8nICsgcmVzcG9uc2UuaWQgKyAnL3BpY3R1cmU/dHlwZT1ub3JtYWwnO1xuICAgIHJldHVybiB1c2VyO1xuICB9XG5cblxuICBzaWduSW4oc2NvcGVzPzpbc3RyaW5nXSk6IFByb21pc2U8U29jaWFsVXNlcj4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBGQi5sb2dpbigocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZyhcImZhY2Vib29rXCIsIHJlc3BvbnNlKTtcbiAgICAgICAgaWYgKHJlc3BvbnNlLmF1dGhSZXNwb25zZSkge1xuICAgICAgICAgIGNvbnN0IGFjY2Vzc1Rva2VuID0gRkIuZ2V0QXV0aFJlc3BvbnNlKClbJ2FjY2Vzc1Rva2VuJ107XG4gICAgICAgICAgRkIuYXBpKCcvbWU/ZmllbGRzPW5hbWUsZW1haWwscGljdHVyZScsIChyZXM6IGFueSkgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5sb2coXCJtZVwiLCByZXMpO1xuICAgICAgICAgICAgcmVzb2x2ZShGYWNlYm9va0xvZ2luUHJvdmlkZXIuZHJhd1VzZXIoT2JqZWN0LmFzc2lnbih7fSwge2FjY2Vzc1Rva2VuOiBhY2Nlc3NUb2tlbn0sIHJlcykpKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSwgeyBzY29wZTogc2NvcGVzICYmIHNjb3Blcy5sZW5ndGggPiAwID8gc2NvcGVzLmpvaW4oJywnKSA6ICdlbWFpbCxwdWJsaWNfcHJvZmlsZScgfSk7XG4gICAgfSk7XG4gIH1cblxuICBzaGFyaW5nKHNoYXJlPzphbnkpOiBQcm9taXNlPGFueT57XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgRkIudWkoe1xuICAgICAgICAgICAgICAgIG1ldGhvZDogJ3NoYXJlJyxcbiAgICAgICAgICAgICAgICBocmVmOiBzaGFyZS5ocmVmLFxuICAgICAgICAgICAgICAgIGhhc2h0YWc6IChzaGFyZS5oYXNodGFnICYmIHNoYXJlLmhhc2h0YWcuaW5kZXhPZignIycpPj0wKT9zaGFyZS5oYXNodGFnIDogIG51bGxcbiAgICAgICAgICAgIH0sIGZ1bmN0aW9uKHJlc3BvbnNlKXtcbiAgICAgICAgICAgICAgY29uc29sZS5sb2cocmVzcG9uc2UpO1xuICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgIH0pO1xuICB9XG4gIHNpZ25PdXQoKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgRkIubG9nb3V0KChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbn0iLCJpbXBvcnQge0Jhc2VMb2dpblByb3ZpZGVySW1wbH0gZnJvbSAnLi4vZW50aXRpZXMvYmFzZUxvZ2luUHJvdmlkZXJJbXBsJztcbmltcG9ydCB7TG9naW5Qcm92aWRlckNsYXNzLCBTb2NpYWxVc2VyfSBmcm9tICcuLi9lbnRpdGllcy91c2VyJztcblxuZGVjbGFyZSBsZXQgZ2FwaTogYW55O1xuXG5leHBvcnQgY2xhc3MgR29vZ2xlTG9naW5Qcm92aWRlciBleHRlbmRzIEJhc2VMb2dpblByb3ZpZGVySW1wbCB7XG5cbiAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFBST1ZJREVSX1RZUEUgPSAnZ29vZ2xlJztcbiAgICBwdWJsaWMgbG9naW5Qcm92aWRlck9iajogTG9naW5Qcm92aWRlckNsYXNzID0gbmV3IExvZ2luUHJvdmlkZXJDbGFzcygpO1xuICAgIHByaXZhdGUgYXV0aDI6IGFueTtcbiAgICBwdWJsaWMgVFlQRSA9ICdnb29nbGUnO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBjbGllbnRJZDogc3RyaW5nKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMubG9naW5Qcm92aWRlck9iai5pZCA9IGNsaWVudElkO1xuICAgICAgICB0aGlzLmxvZ2luUHJvdmlkZXJPYmoubmFtZSA9ICdnb29nbGUnO1xuICAgICAgICB0aGlzLmxvZ2luUHJvdmlkZXJPYmoudXJsID0gJ2h0dHBzOi8vYXBpcy5nb29nbGUuY29tL2pzL3BsYXRmb3JtLmpzJztcbiAgICB9XG5cbiAgICBpbml0aWFsaXplKCk6IFByb21pc2U8U29jaWFsVXNlcj4ge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5sb2FkU2NyaXB0KHRoaXMubG9naW5Qcm92aWRlck9iaiwgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGdhcGkubG9hZCgnYXV0aDInLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYXV0aDIgPSBnYXBpLmF1dGgyLmluaXQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgY2xpZW50X2lkOiB0aGlzLmNsaWVudElkLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2NvcGU6ICdlbWFpbCdcbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hdXRoMi50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmF1dGgyLmlzU2lnbmVkSW4uZ2V0KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHRoaXMuZHJhd1VzZXIoKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGRyYXdVc2VyKCk6IFNvY2lhbFVzZXIge1xuICAgICAgICBjb25zdCB1c2VyOiBTb2NpYWxVc2VyID0gbmV3IFNvY2lhbFVzZXIoKTtcbiAgICAgICAgY29uc3QgcHJvZmlsZSA9IHRoaXMuYXV0aDIuY3VycmVudFVzZXIuZ2V0KCkuZ2V0QmFzaWNQcm9maWxlKCk7XG4gICAgICAgIGNvbnN0IGF1dGhSZXNwb25zZU9iaiA9IHRoaXMuYXV0aDIuY3VycmVudFVzZXIuZ2V0KCkuZ2V0QXV0aFJlc3BvbnNlKHRydWUpO1xuICAg