UNPKG

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