UNPKG

@cause-911/social-network

Version:

Run `npm install @cause-911/social-network --save` to add this library to your project

850 lines (840 loc) 25.4 kB
import { Injectable, ɵɵdefineInjectable, ɵɵinject, Component, NgModule } from '@angular/core'; import { Observable, of, forkJoin } from 'rxjs'; import { HttpBackend, HttpClient } from '@angular/common/http'; import { map, retryWhen, delay, take, catchError } from 'rxjs/operators'; import { CauseCoreModule } from '@cause-911/core'; /** * @fileoverview added by tsickle * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ var LoadScriptService = /** @class */ (function () { function LoadScriptService() { } /** * @param {?} url * @return {?} */ LoadScriptService.prototype.get = /** * @param {?} url * @return {?} */ function (url) { return Observable.create((/** * @param {?} observer * @return {?} */ function (observer) { /** @type {?} */ var script = document.createElement('script'); script.type = 'text/javascript'; script.src = url; script.onload = (/** * @return {?} */ function () { observer.next({ script: url, status: 'loaded' }); observer.complete(); }); script.onerror = (/** * @param {?} error * @return {?} */ function (error) { observer.error(error); observer.complete(); }); document.getElementsByTagName('head')[0].appendChild(script); })); }; LoadScriptService.decorators = [ { type: Injectable, args: [{ providedIn: 'root' },] } ]; /** @nocollapse */ LoadScriptService.ctorParameters = function () { return []; }; /** @nocollapse */ LoadScriptService.ngInjectableDef = ɵɵdefineInjectable({ factory: function LoadScriptService_Factory() { return new LoadScriptService(); }, token: LoadScriptService, providedIn: "root" }); return LoadScriptService; }()); /** * @fileoverview added by tsickle * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ var FacebookService = /** @class */ (function () { function FacebookService(httpBackend, loadScript) { var _this = this; this.isLoaded = false; this.isInitialize = false; this.httpClient = new HttpClient(httpBackend); loadScript.get('https://connect.facebook.net/en_US/sdk.js').subscribe((/** * @param {?} response * @return {?} */ function (response) { _this.isLoaded = true; }), (/** * @param {?} error * @return {?} */ function (error) { _this.error = error; })); } /** * @param {?} appId * @param {?=} version * @return {?} */ FacebookService.prototype.initialize = /** * @param {?} appId * @param {?=} version * @return {?} */ function (appId, version) { var _this = this; if (version === void 0) { version = 'v6.0'; } this.appId = appId; this.version = version; return Observable.create((/** * @param {?} observer * @return {?} */ function (observer) { if (_this.error) { observer.error(_this.error); } else if (!_this.isLoaded) { observer.error(new Error('Facebook SDK is not loaded')); } else { observer.next(true); } observer.complete(); })).pipe(map((/** * @return {?} */ function () { return _this.initializeSDK(); })), retryWhen((/** * @param {?} error * @return {?} */ function (error) { return error.pipe(delay(200), take(25)); })), catchError((/** * @param {?} error * @return {?} */ function (error) { return of(error); }))); }; /** * @return {?} */ FacebookService.prototype.findManageablePage = /** * @return {?} */ function () { var _this = this; return Observable.create((/** * @param {?} observer * @return {?} */ function (observer) { /** @type {?} */ var loadError = _this.validateSDK(); if (loadError) { observer.error(loadError); } _this.getAuthentification().subscribe((/** * @param {?} response * @return {?} */ function (response) { if (response && response.userID) { _this.listAccessiblePage(response.userID).subscribe((/** * @param {?} pages * @return {?} */ function (pages) { observer.next(pages); observer.complete(); }), (/** * @param {?} error * @return {?} */ function (error) { observer.error(error); })); } else { observer.error(new Error('No user are connected to Facebook')); } }), (/** * @param {?} error * @return {?} */ function (error) { observer.error(error); })); })); }; /** * @return {?} */ FacebookService.prototype.askToManagePage = /** * @return {?} */ function () { var _this = this; return Observable.create((/** * @param {?} observer * @return {?} */ function (observer) { /** @type {?} */ var loadError = _this.validateSDK(); if (loadError) { observer.error(loadError); } _this.askTokenWithScope('manage_pages, publish_pages').subscribe((/** * @param {?} response * @return {?} */ function (response) { if (!response.userID) { observer.error(response); } else { _this.listAccessiblePage(response.userID).subscribe((/** * @param {?} pages * @return {?} */ function (pages) { observer.next(pages); observer.complete(); }), (/** * @param {?} error * @return {?} */ function (error) { observer.error(error); })); } }), (/** * @param {?} error * @return {?} */ function (error) { observer.error(error); })); })); }; /** * @param {?} pageId * @param {?} accessToken * @param {?} message * @param {?=} photos * @return {?} */ FacebookService.prototype.publishToPage = /** * @param {?} pageId * @param {?} accessToken * @param {?} message * @param {?=} photos * @return {?} */ function (pageId, accessToken, message, photos) { var _this = this; if (photos === void 0) { photos = null; } /** @type {?} */ var body = { message: message, access_token: accessToken, }; if (photos) { return this.postUnpublishedPhotos(pageId, accessToken, photos).pipe(catchError((/** * @param {?} error * @return {?} */ function (error) { return _this.httpClient.post("https://graph.facebook.com/" + pageId + "/feed", body); })), map((/** * @param {?} response * @return {?} */ function (response) { response.forEach((/** * @param {?} id * @param {?} index * @return {?} */ function (id, index) { body["attached_media[" + index + "]"] = { media_fbid: id }; })); return _this.httpClient.post("https://graph.facebook.com/" + pageId + "/feed", body); }))); } else { return this.httpClient.post("https://graph.facebook.com/" + pageId + "/feed", body); } }; /** * @private * @param {?} pageId * @param {?} accessToken * @param {?} photos * @return {?} */ FacebookService.prototype.postUnpublishedPhotos = /** * @private * @param {?} pageId * @param {?} accessToken * @param {?} photos * @return {?} */ function (pageId, accessToken, photos) { var _this = this; /** @type {?} */ var posts = []; photos.forEach((/** * @param {?} photoUrl * @return {?} */ function (photoUrl) { /** @type {?} */ var task = _this.httpClient.post("https://graph.facebook.com/" + pageId + "/photos", { url: photoUrl, caption: '', published: false, access_token: accessToken, }).pipe(map((/** * @param {?} response * @return {?} */ function (response) { return response['id']; }))); posts.push(task); })); return forkJoin(posts); }; /** * @private * @param {?} userId * @return {?} */ FacebookService.prototype.listAccessiblePage = /** * @private * @param {?} userId * @return {?} */ function (userId) { return Observable.create((/** * @param {?} observer * @return {?} */ function (observer) { FB.api("/" + userId + "/accounts", (/** * @param {?} response * @return {?} */ function (response) { if (response && !response.error) { if (response.data instanceof Error) { observer.error(response.data); } else { observer.next(response.data); observer.complete(); } } else { observer.error(response); } })); })); }; /** * @private * @param {?} scope * @return {?} */ FacebookService.prototype.askTokenWithScope = /** * @private * @param {?} scope * @return {?} */ function (scope) { return Observable.create((/** * @param {?} observer * @return {?} */ function (observer) { FB.login((/** * @param {?} response * @return {?} */ function (response) { if (response.authResponse) { observer.next(response.authResponse); observer.complete(); } else { observer.error(new Error('User cancelled login or did not fully authorize')); } }), { scope: scope, }); })); }; /** * @private * @return {?} */ FacebookService.prototype.getAuthentification = /** * @private * @return {?} */ function () { return Observable.create((/** * @param {?} observer * @return {?} */ function (observer) { /** @type {?} */ var timer = setTimeout((/** * @return {?} */ function () { observer.error("Facebook SDK can't be used"); }), 2000); FB.getLoginStatus((/** * @param {?} response * @return {?} */ function (response) { clearTimeout(timer); if (response.status === 'connected') { observer.next(response.authResponse); } else { observer.next({}); } observer.complete(); })); })); }; /** * @private * @return {?} */ FacebookService.prototype.initializeSDK = /** * @private * @return {?} */ function () { FB.init({ appId: this.appId, cookie: true, xfbml: true, version: this.version, }); this.isInitialize = true; }; /** * @private * @return {?} */ FacebookService.prototype.validateSDK = /** * @private * @return {?} */ function () { if (location.protocol !== 'https:') { return new Error("You can only use the Facebook SDK on HTTPS"); } if (!this.isInitialize) { return new Error('You need to initialize the service'); } return false; }; FacebookService.decorators = [ { type: Injectable, args: [{ providedIn: 'root' },] } ]; /** @nocollapse */ FacebookService.ctorParameters = function () { return [ { type: HttpBackend }, { type: LoadScriptService } ]; }; /** @nocollapse */ FacebookService.ngInjectableDef = ɵɵdefineInjectable({ factory: function FacebookService_Factory() { return new FacebookService(ɵɵinject(HttpBackend), ɵɵinject(LoadScriptService)); }, token: FacebookService, providedIn: "root" }); return FacebookService; }()); /** * @fileoverview added by tsickle * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ var TwitterService = /** @class */ (function () { function TwitterService(httpClient, loadScript) { var _this = this; this.httpClient = httpClient; this.isLoaded = false; this.isInitialize = false; loadScript.get('https://platform.twitter.com/widgets.js').subscribe((/** * @param {?} response * @return {?} */ function (response) { _this.isLoaded = true; }), (/** * @param {?} error * @return {?} */ function (error) { _this.error = error; })); } /** * @param {?} appId * @return {?} */ TwitterService.prototype.initialize = /** * @param {?} appId * @return {?} */ function (appId) { var _this = this; this.appId = appId; return Observable.create((/** * @param {?} observer * @return {?} */ function (observer) { if (_this.error) { observer.error(_this.error); } else if (!_this.isLoaded) { observer.error(new Error('Twitter SDK is not loaded')); } else { observer.next(true); } observer.complete(); })).pipe(map((/** * @return {?} */ function () { return _this.initializeSDK(); })), retryWhen((/** * @param {?} error * @return {?} */ function (error) { return error.pipe(delay(200), take(25)); })), catchError((/** * @param {?} error * @return {?} */ function (error) { return of(error); }))); }; /** * @return {?} */ TwitterService.prototype.findManageablePage = /** * @return {?} */ function () { var _this = this; /** @type {?} */ var loadError = this.validateSDK(); if (loadError) { return of(loadError); } return Observable.create((/** * @param {?} observer * @return {?} */ function (observer) { _this.getAuthentification().subscribe((/** * @param {?} response * @return {?} */ function (response) { if (response && response.userID) { _this.listAccessiblePage(response.userID).subscribe((/** * @param {?} pages * @return {?} */ function (pages) { observer.next(pages); observer.complete(); }), (/** * @param {?} error * @return {?} */ function (error) { observer.error(error); })); } else { observer.error(new Error('No user are connected to Facebook')); } }), (/** * @param {?} error * @return {?} */ function (error) { observer.error(error); })); })); }; /** * @return {?} */ TwitterService.prototype.askToManagePage = /** * @return {?} */ function () { var _this = this; /** @type {?} */ var loadError = this.validateSDK(); if (loadError) { return of(loadError); } return Observable.create((/** * @param {?} observer * @return {?} */ function (observer) { _this.getAuthentification().subscribe((/** * @return {?} */ function () { _this.askTokenWithScope('manage_pages, publish_pages').subscribe((/** * @param {?} response * @return {?} */ function (response) { _this.listAccessiblePage(response.userID).subscribe((/** * @param {?} pages * @return {?} */ function (pages) { observer.next(pages); observer.complete(); }), (/** * @param {?} error * @return {?} */ function (error) { observer.error(error); })); }), (/** * @param {?} error * @return {?} */ function (error) { observer.error(error); })); }), (/** * @param {?} error * @return {?} */ function (error) { observer.error(error); })); })); }; /** * @param {?} pageId * @param {?} accessToken * @param {?} message * @return {?} */ TwitterService.prototype.publishToPage = /** * @param {?} pageId * @param {?} accessToken * @param {?} message * @return {?} */ function (pageId, accessToken, message) { return this.httpClient.post("https://graph.facebook.com/" + pageId + "/feed", { message: message, access_token: accessToken, }); }; /** * @private * @param {?} userId * @return {?} */ TwitterService.prototype.listAccessiblePage = /** * @private * @param {?} userId * @return {?} */ function (userId) { return Observable.create((/** * @param {?} observer * @return {?} */ function (observer) { /*FB.api(`/${userId}/accounts`, (response: any) => { if (response && !response.error) { observer.next(response.data); } else { observer.error(response); } observer.complete(); });*/ })); }; /** * @private * @param {?} scope * @return {?} */ TwitterService.prototype.askTokenWithScope = /** * @private * @param {?} scope * @return {?} */ function (scope) { return Observable.create((/** * @param {?} observer * @return {?} */ function (observer) { /*FB.login((response: any) => { observer.next(response.authResponse); observer.complete(); }, { scope: scope, });*/ })); }; /** * @private * @return {?} */ TwitterService.prototype.getAuthentification = /** * @private * @return {?} */ function () { return Observable.create((/** * @param {?} observer * @return {?} */ function (observer) { /*FB.getLoginStatus((response: any) => { if (response.authResponse) { observer.next(response.authResponse); } else { observer.error(new Error('No facebook connection')); } observer.complete(); });*/ })); }; /** * @private * @return {?} */ TwitterService.prototype.initializeSDK = /** * @private * @return {?} */ function () { var _this = this; twttr.ready((/** * @return {?} */ function () { _this.isInitialize = true; })); }; /** * @private * @return {?} */ TwitterService.prototype.validateSDK = /** * @private * @return {?} */ function () { if (!this.isInitialize) { return new Error('You need to initialize the service'); } return false; }; TwitterService.decorators = [ { type: Injectable, args: [{ providedIn: 'root' },] } ]; /** @nocollapse */ TwitterService.ctorParameters = function () { return [ { type: HttpClient }, { type: LoadScriptService } ]; }; /** @nocollapse */ TwitterService.ngInjectableDef = ɵɵdefineInjectable({ factory: function TwitterService_Factory() { return new TwitterService(ɵɵinject(HttpClient), ɵɵinject(LoadScriptService)); }, token: TwitterService, providedIn: "root" }); return TwitterService; }()); /** * @fileoverview added by tsickle * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ var SocialNetworkService = /** @class */ (function () { function SocialNetworkService() { } SocialNetworkService.decorators = [ { type: Injectable, args: [{ providedIn: 'root' },] } ]; /** @nocollapse */ SocialNetworkService.ctorParameters = function () { return []; }; /** @nocollapse */ SocialNetworkService.ngInjectableDef = ɵɵdefineInjectable({ factory: function SocialNetworkService_Factory() { return new SocialNetworkService(); }, token: SocialNetworkService, providedIn: "root" }); return SocialNetworkService; }()); /** * @fileoverview added by tsickle * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ var SocialNetworkComponent = /** @class */ (function () { function SocialNetworkComponent() { } /** * @return {?} */ SocialNetworkComponent.prototype.ngOnInit = /** * @return {?} */ function () { }; SocialNetworkComponent.decorators = [ { type: Component, args: [{ selector: 'cause-social-network', template: "<div>{{'core.noGenericComponentOnThisLibrary' | translate}}</div>" }] } ]; /** @nocollapse */ SocialNetworkComponent.ctorParameters = function () { return []; }; return SocialNetworkComponent; }()); /** * @fileoverview added by tsickle * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ var SocialNetworkModule = /** @class */ (function () { function SocialNetworkModule() { } SocialNetworkModule.decorators = [ { type: NgModule, args: [{ declarations: [ SocialNetworkComponent ], exports: [ SocialNetworkComponent ], imports: [ CauseCoreModule, ], },] } ]; return SocialNetworkModule; }()); export { FacebookService, SocialNetworkComponent, SocialNetworkModule, SocialNetworkService, TwitterService, LoadScriptService as ɵa }; //# sourceMappingURL=cause-911-social-network.js.map