@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
JavaScript
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