UNPKG

@cause-911/social-network

Version:

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

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