UNPKG

ngx-social-button

Version:

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

252 lines (251 loc) 19.2 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc */ import { Injectable } from '@angular/core'; import { BehaviorSubject } from 'rxjs'; import { FacebookLoginProvider } from './providers/facebookProvider'; import { GoogleLoginProvider } from './providers/googleProvider'; import { LinkedinLoginProvider } from './providers/linkedinProvider'; import * as i0 from "@angular/core"; /** * @record */ export function SocialServiceConfigItem() { } /** @type {?} */ SocialServiceConfigItem.prototype.provider; 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; }()); export { SocialServiceConfig }; if (false) { /** @type {?} */ SocialServiceConfig.prototype.providers; } 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 = i0.defineInjectable({ factory: function SocialService_Factory() { return new SocialService(i0.inject(SocialServiceConfig)); }, token: SocialService, providedIn: "root" }); return SocialService; }()); export { SocialService }; if (false) { /** @type {?} */ SocialService.LOGIN_PROVIDER_NOT_FOUND; /** @type {?} */ SocialService.USER_POPUP_CLOSE; /** @type {?} */ SocialService.prototype.providers; /** @type {?} */ SocialService.prototype._user; /** @type {?} */ SocialService.prototype._authState; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29jaWFsLnNlcnZpY2UuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZ3gtc29jaWFsLWJ1dHRvbi8iLCJzb3VyY2VzIjpbImxpYi9zb2NpYWwuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUV6QyxPQUFPLEVBQUMsZUFBZSxFQUFhLE1BQU0sTUFBTSxDQUFDO0FBR2pELE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLDhCQUE4QixDQUFDO0FBQ25FLE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLDRCQUE0QixDQUFDO0FBQy9ELE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLDhCQUE4QixDQUFDOzs7Ozs7OztBQVNuRSxJQUFBO0lBR0ksNkJBQVksU0FBcUM7eUJBRkQsSUFBSSxHQUFHLEVBQXlCO1FBRzVFLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7WUFDWixHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQzs7Z0JBQ3hDLElBQU0sT0FBTyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDN0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2FBQy9EO1NBQ0o7S0FDSjs7OztJQUVELDBDQUFZOzs7SUFBWjtRQUNJLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO0tBQ3pCOzs7OztJQUVPLHlDQUFXOzs7O2NBQUMsUUFBdUI7UUFDdkMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3JDLElBQUks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RSxDQUFDO2lCQUNiLENBQUMsQ0FBQyxLQUFLLENBQUMsVUFBQyxHQUFHO29CQUNULEtBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2lCQUM5QixDQUFDLENBQUM7YUFDTjtZQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNKLE1BQU0sQ0FBQyxhQUFhLENBQUMsd0JBQXdCLENBQUMsQ0FBQzthQUNsRDtTQUNKLENBQUMsQ0FBQztLQUNOOzZDQXJGa0QsMEJBQTBCO3FDQUNsQyxzQkFBc0I7O2dCQU5wRSxVQUFVLFNBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCOzs7O2dCQWV1QixtQkFBbUI7Ozt3QkF6RTNDOztTQTJEYSxhQUFhIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHtCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGV9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQge0xvZ2luUHJvdmlkZXJ9IGZyb20gJy4vZW50aXRpZXMvbG9naW5Qcm92aWRlcic7XG5pbXBvcnQge0ZhY2Vib29rTG9naW5Qcm92aWRlcn0gZnJvbSAnLi9wcm92aWRlcnMvZmFjZWJvb2tQcm92aWRlcic7XG5pbXBvcnQge0dvb2dsZUxvZ2luUHJvdmlkZXJ9IGZyb20gJy4vcHJvdmlkZXJzL2dvb2dsZVByb3ZpZGVyJztcbmltcG9ydCB7TGlua2VkaW5Mb2dpblByb3ZpZGVyfSBmcm9tICcuL3Byb3ZpZGVycy9saW5rZWRpblByb3ZpZGVyJztcblxuaW1wb3J0IHtTb2NpYWxVc2VyfSBmcm9tICcuL2VudGl0aWVzL3VzZXInO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNvY2lhbFNlcnZpY2VDb25maWdJdGVtIHtcbiAgICBwcm92aWRlcjogTG9naW5Qcm92aWRlcjtcbn1cblxuXG5leHBvcnQgY2xhc3MgU29jaWFsU2VydmljZUNvbmZpZyB7XG4gICAgcHJpdmF0ZSBwcm92aWRlcnM6IE1hcDxzdHJpbmcsIExvZ2luUHJvdmlkZXI+ID0gbmV3IE1hcDxzdHJpbmcsIExvZ2luUHJvdmlkZXI+KCk7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm92aWRlcnM/OiBTb2NpYWxTZXJ2aWNlQ29uZmlnSXRlbVtdKSB7XG4gICAgICAgIGlmIChwcm92aWRlcnMpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcHJvdmlkZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZWxlbWVudCA9IHByb3ZpZGVyc1tpXTtcbiAgICAgICAgICAgICAgICB0aGlzLnByb3ZpZGVycy5zZXQoZWxlbWVudC5wcm92aWRlci5UWVBFLCBlbGVtZW50LnByb3ZpZGVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldFByb3ZpZGVycygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvdmlkZXJzO1xuICAgIH1cblxuICAgIHByaXZhdGUgYWRkUHJvdmlkZXIocHJvdmlkZXI6IExvZ2luUHJvdmlkZXIpIHtcbiAgICAgICAgaWYgKCF0aGlzLnByb3ZpZGVycy5nZXQocHJvdmlkZXIuVFlQRSkpIHtcbiAgICAgICAgICAgIHRoaXMucHJvdmlkZXJzLnNldChwcm92aWRlci5UWVBFLCBwcm92aWRlcik7XG4gICAgICAgIH1cblxuICAgIH1cblxuICAgIGFkZEZhY2Vib29rKGNsaWVudElkOiBzdHJpbmcpOiBTb2NpYWxTZXJ2aWNlQ29uZmlnIHtcbiAgICAgICAgdGhpcy5hZGRQcm92aWRlcihuZXcgRmFjZWJvb2tMb2dpblByb3ZpZGVyKGNsaWVudElkKSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGFkZEdvb2dsZShjbGllbnRJZDogc3RyaW5nKTogU29jaWFsU2VydmljZUNvbmZpZyB7XG4gICAgICAgIHRoaXMuYWRkUHJvdmlkZXIobmV3IEdvb2dsZUxvZ2luUHJvdmlkZXIoY2xpZW50SWQpKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgYWRkTGlua2VkSW4oY2xpZW50SWQ6IHN0cmluZyk6IFNvY2lhbFNlcnZpY2VDb25maWcge1xuICAgICAgICB0aGlzLmFkZFByb3ZpZGVyKG5ldyBMaW5rZWRpbkxvZ2luUHJvdmlkZXIoY2xpZW50SWQpKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG59XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgU29jaWFsU2VydmljZSB7XG5cbiAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBMT0dJTl9QUk9WSURFUl9OT1RfRk9VTkQgPSAnTG9naW4gcHJvdmlkZXIgbm90IGZvdW5kJztcbiAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBVU0VSX1BPUFVQX0NMT1NFID0gJ1VzZXIgY2xvc2UgdGhlIHBvcHVwJztcblxuICAgIHByaXZhdGUgcHJvdmlkZXJzOiBNYXA8c3RyaW5nLCBMb2dpblByb3ZpZGVyPjtcblxuICAgIHByaXZhdGUgX3VzZXI6IFNvY2lhbFVzZXIgPSBudWxsO1xuICAgIHByaXZhdGUgX2F1dGhTdGF0ZTogQmVoYXZpb3JTdWJqZWN0PFNvY2lhbFVzZXI+ID0gbmV3IEJlaGF2aW9yU3ViamVjdChudWxsKTtcblxuICAgIGdldCBhdXRoU3RhdGUoKTogT2JzZXJ2YWJsZTxTb2NpYWxVc2VyPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hdXRoU3RhdGUuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IoY29uZmlnOiBTb2NpYWxTZXJ2aWNlQ29uZmlnKSB7XG4gICAgICAgIHRoaXMucHJvdmlkZXJzID0gY29uZmlnLmdldFByb3ZpZGVycygpO1xuICAgICAgICB0aGlzLnByb3ZpZGVycy5mb3JFYWNoKChwcm92aWRlcjogTG9naW5Qcm92aWRlciwga2V5OiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgIHByb3ZpZGVyLmluaXRpYWxpemUoKS50aGVuKCh1c2VyOiBTb2NpYWxVc2VyKSA9PiB7XG4gICAgICAgICAgICAgICAgdXNlci5wcm92aWRlciA9IGtleTtcbiAgICAgICAgICAgICAgICB0aGlzLl91c2VyID0gdXNlcjtcbiAgICAgICAgICAgICAgICB0aGlzLl9hdXRoU3RhdGUubmV4dCh1c2VyKTtcbiAgICAgICAgICAgIH0pLmNhdGNoKChlcnIpID0+IHtcbiAgICAgICAgICAgICAgICAvLyB0aGlzLl9hdXRoU3RhdGUubmV4dChudWxsKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBpc1NvY2lhbExvZ2dlZEluKCkge1xuICAgICAgICByZXR1cm4gKHRoaXMuX3VzZXIgIT0gbnVsbCk7XG4gICAgfVxuXG5cbiAgICBzaGFyaW5nKHByb3ZpZGVyVHlwZTogc3RyaW5nLCBzaGFyZT86IGFueSkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgbGV0IHByb3ZpZGVyT2JqZWN0ID0gdGhpcy5wcm92aWRlcnMuZ2V0KHByb3ZpZGVyVHlwZSk7XG4gICAgICAgICAgICBpZiAocHJvdmlkZXJPYmplY3QpIHtcbiAgICAgICAgICAgICAgICBwcm92aWRlck9iamVjdC5zaGFyaW5nKHNoYXJlKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KFNvY2lhbFNlcnZpY2UuTE9HSU5fUFJPVklERVJfTk9UX0ZPVU5EKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZmFjZWJvb2tTaGFyaW5nKHNoYXJlPzogYW55KSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNoYXJpbmcoJ2ZhY2Vib29rJywgc2hhcmUpO1xuICAgIH1cblxuICAgIC8vIGxpbmtlZGluU2hhcmluZyhzaGFyZT86IGFueSkge1xuICAgIC8vICAgICByZXR1cm4gdGhpcy5zaGFyaW5nKCdsaW5rZWRpbicsIHNoYXJlKTtcbiAgICAvLyB9XG5cbiAgICBzaWduSW4ocHJvdmlkZXJUeXBlOiBzdHJpbmcsIHNjb3Blcz86IFtzdHJpbmddKTogUHJvbWlzZTxTb2NpYWxVc2VyPiB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBsZXQgcHJvdmlkZXJPYmplY3QgPSB0aGlzLnByb3ZpZGVycy5nZXQocHJvdmlkZXJUeXBlKTtcbiAgICAgICAgICAgIGlmIChwcm92aWRlck9iamVjdCkge1xuICAgICAgICAgICAgICAgIHByb3ZpZGVyT2JqZWN0LnNpZ25JbihzY29wZXMpLnRoZW4oKHVzZXI6IFNvY2lhbFVzZXIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdXNlci5wcm92aWRlciA9IHByb3ZpZGVyVHlwZTtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh1c2VyKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdXNlciA9IHVzZXI7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2F1dGhTdGF0ZS5uZXh0KHVzZXIpO1xuICAgICAgICAgICAgICAgIH0pLmNhdGNoKChlcnIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KFNvY2lhbFNlcnZpY2UuVVNFUl9QT1BVUF9DTE9TRSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlamVjdChTb2NpYWxTZXJ2aWNlLkxPR0lOX1BST1ZJREVSX05PVF9GT1VORCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHNpZ25PdXQoKTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLl91c2VyICYmIHRoaXMuX3VzZXIucHJvdmlkZXIpIHtcbiAgICAgICAgICAgICAgICBsZXQgcHJvdmlkZXJUeXBlID0gdGhpcy5fdXNlci5wcm92aWRlcjtcbiAgICAgICAgICAgICAgICBsZXQgcHJvdmlkZXJPYmplY3QgPSB0aGlzLnByb3ZpZGVycy5nZXQocHJvdmlkZXJUeXBlKTtcbiAgICAgICAgICAgICAgICBwcm92aWRlck9iamVjdC5zaWduT3V0KCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3VzZXIgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9hdXRoU3RhdGUubmV4dChudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgIH0pLmNhdGNoKChlcnIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fYXV0aFN0YXRlLm5leHQobnVsbCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlamVjdChTb2NpYWxTZXJ2aWNlLkxPR0lOX1BST1ZJREVSX05PVF9GT1VORCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxufVxuIl19