@cauca-911/social-network
Version:
Run `npm install @cauca-911/social-network --save` to add this library to your project
556 lines (542 loc) • 23.5 kB
JavaScript
import * as i0 from '@angular/core';
import { Injectable, Component, NgModule } from '@angular/core';
import * as i1 from '@ngx-translate/core';
import * as i3 from '@cauca-911/core';
import { CaucaCoreForChildModule } from '@cauca-911/core';
import { Observable, of, forkJoin } from 'rxjs';
import { map, retryWhen, delay, take, catchError, concatMap } from 'rxjs/operators';
import * as i1$1 from '@angular/common/http';
class CaucaSocialNetworkService {
static { this.ɵfac = function CaucaSocialNetworkService_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || CaucaSocialNetworkService)(); }; }
static { this.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: CaucaSocialNetworkService, factory: CaucaSocialNetworkService.ɵfac, providedIn: 'root' }); }
}
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(CaucaSocialNetworkService, [{
type: Injectable,
args: [{
providedIn: 'root'
}]
}], null, null); })();
class CaucaSocialNetworkComponent {
static { this.ɵfac = function CaucaSocialNetworkComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || CaucaSocialNetworkComponent)(); }; }
static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: CaucaSocialNetworkComponent, selectors: [["cauca-cauca-social-network"]], standalone: false, decls: 3, vars: 3, template: function CaucaSocialNetworkComponent_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelementStart(0, "div");
i0.ɵɵtext(1);
i0.ɵɵpipe(2, "translate");
i0.ɵɵelementEnd();
} if (rf & 2) {
i0.ɵɵadvance();
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(2, 1, "core.noGenericComponentOnThisLibrary"));
} }, dependencies: [i1.TranslatePipe], encapsulation: 2 }); }
}
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(CaucaSocialNetworkComponent, [{
type: Component,
args: [{ selector: 'cauca-cauca-social-network', standalone: false, template: "<div>{{'core.noGenericComponentOnThisLibrary' | translate}}</div>" }]
}], null, null); })();
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(CaucaSocialNetworkComponent, { className: "CaucaSocialNetworkComponent", filePath: "lib/cauca-social-network.component.ts", lineNumber: 9 }); })();
class CaucaSocialNetworkModule {
static { this.ɵfac = function CaucaSocialNetworkModule_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || CaucaSocialNetworkModule)(); }; }
static { this.ɵmod = /*@__PURE__*/ i0.ɵɵdefineNgModule({ type: CaucaSocialNetworkModule }); }
static { this.ɵinj = /*@__PURE__*/ i0.ɵɵdefineInjector({ imports: [CaucaCoreForChildModule] }); }
}
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(CaucaSocialNetworkModule, [{
type: NgModule,
args: [{
declarations: [
CaucaSocialNetworkComponent
],
imports: [
CaucaCoreForChildModule,
],
exports: [
CaucaSocialNetworkComponent,
],
}]
}], null, null); })();
(function () { (typeof ngJitMode === "undefined" || ngJitMode) && i0.ɵɵsetNgModuleScope(CaucaSocialNetworkModule, { declarations: [CaucaSocialNetworkComponent], imports: [CaucaCoreForChildModule], exports: [CaucaSocialNetworkComponent] }); })();
class LoadScriptService {
get(url) {
return new Observable((observer) => {
const script = document.createElement('script');
script.type = 'text/javascript';
script.src = url;
script.onload = () => {
observer.next({ script: url, status: 'loaded' });
observer.complete();
};
script.onerror = (error) => {
observer.error(error);
observer.complete();
};
document.getElementsByTagName('head')[0].appendChild(script);
});
}
static { this.ɵfac = function LoadScriptService_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || LoadScriptService)(); }; }
static { this.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: LoadScriptService, factory: LoadScriptService.ɵfac, providedIn: 'root' }); }
}
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(LoadScriptService, [{
type: Injectable,
args: [{
providedIn: 'root'
}]
}], null, null); })();
class WindowReferenceService {
get facebookApi() {
return window['FB'];
}
static { this.ɵfac = function WindowReferenceService_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || WindowReferenceService)(); }; }
static { this.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: WindowReferenceService, factory: WindowReferenceService.ɵfac, providedIn: 'root' }); }
}
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(WindowReferenceService, [{
type: Injectable,
args: [{
providedIn: 'root'
}]
}], null, null); })();
class FacebookService {
constructor(loadScriptService, windowRef, logService) {
this.windowRef = windowRef;
this.logService = logService;
this.isLoaded = false;
this.isInitialize = false;
loadScriptService.get('https://connect.facebook.net/en_US/sdk.js').subscribe(() => {
this.isLoaded = true;
this.logService.information('Facebook - SDK.js has loaded');
}, (error) => {
this.error = error;
this.logService.error(`Facebook - Error when loading SDK.js`, error);
});
}
initialize(appId, version = 'v20.0') {
this.appId = appId;
this.version = version;
return new Observable((observer) => {
if (this.error) {
observer.error(this.error);
}
else if (!this.isLoaded) {
observer.error(new Error('Facebook SDK is not loaded'));
}
else {
this.logService.information(`Facebook - Initialize is completed`);
observer.next(true);
}
observer.complete();
}).pipe(map(() => this.initializeSDK()), retryWhen((error) => error.pipe(delay(200), take(25))), catchError((error) => of(error)));
}
findManageablePage() {
return new Observable((observer) => {
const loadError = this.validateSDK();
if (loadError) {
observer.error(loadError);
}
this.getAuthentication().subscribe((response) => {
if (response && response.userID) {
this.listAccessiblePage(response.userID).subscribe((pages) => {
observer.next(pages);
observer.complete();
}, (error) => {
this.logService.error('Facebook - Error occur when ListAccessiblePage when FindManageablePage', error);
observer.error(error);
});
}
else {
observer.error(new Error('No user are connected to Facebook'));
}
}, (error) => {
this.logService.error('Facebook - Error occur when GetAuthentication', error);
observer.error(error);
});
});
}
askToManagePage() {
return new Observable((observer) => {
const loadError = this.validateSDK();
if (loadError) {
observer.error(loadError);
}
this.askTokenWithScope('pages_show_list, pages_manage_posts').subscribe((response) => {
if (!response.userID) {
observer.error(response);
}
else {
this.listAccessiblePage(response.userID).subscribe((pages) => {
observer.next(pages);
observer.complete();
}, (error) => {
this.logService.error('Facebook - Error occur when ListAccessiblePage when AskToManagePage', error);
observer.error(error);
});
}
}, (error) => {
this.logService.error(`Facebook - Error occur when AskTokenWithScope`, error);
observer.error(error);
});
});
}
listAccessiblePage(userId) {
return new Observable((observer) => {
this.windowRef.facebookApi.api(`/${userId}/accounts`, 'GET', {}, (response) => {
this.logService.information(`Facebook - Response from FB.api "/${userId}/accounts"`, 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);
}
});
});
}
askTokenWithScope(scope) {
return new Observable((observer) => {
this.windowRef.facebookApi.login((response) => {
this.logService.information(`Facebook - Response from FB.login`, response);
if (response.authResponse) {
observer.next(response.authResponse);
observer.complete();
}
else {
observer.error(new Error('User cancelled login or did not fully authorize'));
}
}, {
scope,
});
});
}
getAuthentication() {
return new Observable((observer) => {
const timer = setTimeout(() => {
observer.error(`Facebook SDK can't be used`);
}, 2000);
this.windowRef.facebookApi.getLoginStatus((response) => {
this.logService.information('Facebook - Response from FB.getLoginStatus', response);
clearTimeout(timer);
if (response.status === 'connected') {
observer.next(response.authResponse);
}
else {
observer.next({});
}
observer.complete();
});
});
}
initializeSDK() {
this.logService.information(`Facebook - InitializeSDK with AppId: "${this.appId}", Version: "${this.version}"`);
this.windowRef.facebookApi.init({
appId: this.appId,
cookie: true,
xfbml: true,
version: this.version,
});
this.isInitialize = true;
}
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;
}
static { this.ɵfac = function FacebookService_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || FacebookService)(i0.ɵɵinject(LoadScriptService), i0.ɵɵinject(WindowReferenceService), i0.ɵɵinject(i3.LogService)); }; }
static { this.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: FacebookService, factory: FacebookService.ɵfac, providedIn: 'root' }); }
}
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(FacebookService, [{
type: Injectable,
args: [{
providedIn: 'root'
}]
}], () => [{ type: LoadScriptService }, { type: WindowReferenceService }, { type: i3.LogService }], null); })();
class FacebookPostOnPageService {
constructor(logService, windowRef) {
this.logService = logService;
this.windowRef = windowRef;
}
setPage(pageId, accessToken) {
this.pageId = pageId;
this.accessToken = accessToken;
}
publish(message, photoUrls = [], videoUrls = []) {
if (photoUrls && photoUrls.length && videoUrls && videoUrls.length) {
this.logService.error(`Actually, we can't publish photos and videos, we publish only the first video`);
return this.publishVideo(message, videoUrls[0]);
}
else if (videoUrls && videoUrls.length) {
if (videoUrls.length === 1) {
return this.publishVideo(message, videoUrls[0]);
}
else {
return this.publishVideos(videoUrls).pipe(concatMap((attachedMedias) => this.publishMessage(message, true, attachedMedias).pipe(map((feedResponse) => ({
feed: feedResponse,
medias: attachedMedias,
})))));
}
}
else if (photoUrls && photoUrls.length) {
if (photoUrls.length === 1) {
return this.publishPhoto(message, photoUrls[0]);
}
else {
return this.publishPhotos(photoUrls).pipe(concatMap((attachedMedias) => this.publishMessage(message, true, attachedMedias).pipe(map((feedResponse) => ({
feed: feedResponse,
medias: attachedMedias,
})))));
}
}
else {
return this.publishMessage(message).pipe(map((response) => ({
feed: response,
medias: [],
})));
}
}
publishMessage(message, published = true, attachedMedia = null) {
const body = {
message,
// eslint-disable-next-line @typescript-eslint/naming-convention
access_token: this.accessToken,
published,
// eslint-disable-next-line @typescript-eslint/naming-convention
attached_media: attachedMedia,
};
return new Observable((observer) => {
this.windowRef.facebookApi.api(`/${this.pageId}/feed`, 'POST', body, (response) => {
this.logService.information(`Facebook - Response from FB.api "/${this.pageId}/feed"`, response);
if (response && !response.error && !(response.data instanceof Error)) {
observer.next(response);
observer.complete();
}
else {
observer.error(response);
}
});
});
}
publishVideo(description, videoUrl, published = true) {
const data = {
// eslint-disable-next-line @typescript-eslint/naming-convention
access_token: this.accessToken,
// eslint-disable-next-line @typescript-eslint/naming-convention
file_url: videoUrl,
description,
published,
};
return new Observable((observer) => {
this.windowRef.facebookApi.api(`/${this.pageId}/videos`, 'POST', data, (response) => {
this.logService.information(`Facebook - Response from FB.api "/${this.pageId}/videos - non resumable"`, response);
if (response && !response.error && !(response.data instanceof Error)) {
observer.next(response);
observer.complete();
}
else {
observer.error(response);
}
});
});
}
publishPhoto(caption, photoUrl, published = true) {
const data = {
// eslint-disable-next-line @typescript-eslint/naming-convention
access_token: this.accessToken,
url: photoUrl,
caption,
published,
temporary: false
};
return new Observable((observer) => {
this.windowRef.facebookApi.api(`/${this.pageId}/photos`, 'POST', data, (response) => {
this.logService.information(`Facebook - Response from FB.api "/${this.pageId}/photos"`, response);
if (response && !response.error && !(response.data instanceof Error)) {
observer.next(response);
observer.complete();
}
else {
observer.error(response);
}
});
});
}
publishPhotos(photoUrls) {
const posts = [];
const attachedMedias = [];
photoUrls.forEach((photoUrl) => {
const task = this.publishPhoto('', photoUrl, false).pipe(catchError((error) => of(error)));
posts.push(task);
});
if (photoUrls.length === 0) {
return this.generateObservableReturningEmptyObject();
}
return forkJoin(posts).pipe(map((responses) => {
responses.forEach((response) => {
if (response.id) {
attachedMedias.push(`{"media_fbid":"${response.id}"}`);
}
});
return attachedMedias;
}));
}
publishVideos(_videoUrls) {
this.logService.error(`Actually, we can't publish multiple video`);
return this.generateObservableReturningEmptyObject();
}
generateObservableReturningEmptyObject() {
return new Observable((observer) => {
observer.next({});
observer.complete();
});
}
static { this.ɵfac = function FacebookPostOnPageService_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || FacebookPostOnPageService)(i0.ɵɵinject(i3.LogService), i0.ɵɵinject(WindowReferenceService)); }; }
static { this.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: FacebookPostOnPageService, factory: FacebookPostOnPageService.ɵfac, providedIn: 'root' }); }
}
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(FacebookPostOnPageService, [{
type: Injectable,
args: [{
providedIn: 'root'
}]
}], () => [{ type: i3.LogService }, { type: WindowReferenceService }], null); })();
class TwitterService {
constructor(httpClient, loadScript) {
this.httpClient = httpClient;
this.isLoaded = false;
this.isInitialize = false;
loadScript.get('https://platform.twitter.com/widgets.js').subscribe(() => {
this.isLoaded = true;
}, (error) => {
this.error = error;
});
}
initialize(appId) {
this.appId = appId;
return new Observable((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(() => this.initializeSDK()), retryWhen((error) => error.pipe(delay(200), take(25))), catchError((error) => of(error)));
}
findManageablePage() {
const loadError = this.validateSDK();
if (loadError) {
return of(loadError);
}
return new Observable((observer) => {
this.getAuthentication().subscribe((response) => {
if (response && response.userID) {
this.listAccessiblePage(response.userID).subscribe((pages) => {
observer.next(pages);
observer.complete();
}, (error) => {
observer.error(error);
});
}
else {
observer.error(new Error('No user are connected to Facebook'));
}
}, (error) => {
observer.error(error);
});
});
}
askToManagePage() {
const loadError = this.validateSDK();
if (loadError) {
return of(loadError);
}
return new Observable((observer) => {
this.getAuthentication().subscribe(() => {
this.askTokenWithScope('manage_pages, publish_pages').subscribe((response) => {
this.listAccessiblePage(response.userID).subscribe((pages) => {
observer.next(pages);
observer.complete();
}, (error) => {
observer.error(error);
});
}, (error) => {
observer.error(error);
});
}, (error) => {
observer.error(error);
});
});
}
publishToPage(pageId, accessToken, message) {
return this.httpClient.post(`https://graph.facebook.com/${pageId}/feed`, {
message,
// eslint-disable-next-line @typescript-eslint/naming-convention
access_token: accessToken,
});
}
listAccessiblePage(_userId) {
return new Observable((_observer) => {
/*FB.api(`/${userId}/accounts`, (response: any) => {
if (response && !response.error) {
observer.next(response.data);
} else {
observer.error(response);
}
observer.complete();
});*/
});
}
askTokenWithScope(_scope) {
return new Observable((_observer) => {
/*FB.login((response: any) => {
observer.next(response.authResponse);
observer.complete();
}, {
scope: scope,
});*/
});
}
getAuthentication() {
return new Observable((_observer) => {
/*FB.getLoginStatus((response: any) => {
if (response.authResponse) {
observer.next(response.authResponse);
} else {
observer.error(new Error('No facebook connection'));
}
observer.complete();
});*/
});
}
initializeSDK() {
twttr.ready(() => {
this.isInitialize = true;
});
}
validateSDK() {
if (!this.isInitialize) {
return new Error('You need to initialize the service');
}
}
static { this.ɵfac = function TwitterService_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || TwitterService)(i0.ɵɵinject(i1$1.HttpClient), i0.ɵɵinject(LoadScriptService)); }; }
static { this.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: TwitterService, factory: TwitterService.ɵfac, providedIn: 'root' }); }
}
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(TwitterService, [{
type: Injectable,
args: [{
providedIn: 'root'
}]
}], () => [{ type: i1$1.HttpClient }, { type: LoadScriptService }], null); })();
/*
* Public API Surface of cauca-social-network
*/
/**
* Generated bundle index. Do not edit.
*/
export { CaucaSocialNetworkComponent, CaucaSocialNetworkModule, CaucaSocialNetworkService, FacebookPostOnPageService, FacebookService, TwitterService };
//# sourceMappingURL=cauca-911-social-network.mjs.map