11'use strict' ;
2- const graph = require ( 'fbgraph' ) ;
2+
3+ const API_VERSION = 'v22.0' ;
34
45module . exports = {
56
@@ -11,104 +12,81 @@ module.exports = {
1112
1213 authUrl : context => {
1314
14- return graph . getOauthUrl ( {
15+ const params = {
1516 'client_id' : context . clientId ,
1617 'redirect_uri' : context . callbackUrl ,
1718 'scope' : context . scope . join ( ', ' ) ,
1819 'state' : context . ticket
19- } ) ;
20+ } ;
21+ return `https://www.facebook.com/${ API_VERSION } /dialog/oauth?` + new URLSearchParams ( params ) . toString ( ) ;
2022 } ,
2123
22- requestAccessToken : context => {
23-
24- return new Promise ( ( resolve , reject ) => {
25- graph . authorize ( {
26- 'client_id' : context . clientId ,
27- 'redirect_uri' : context . callbackUrl ,
28- 'client_secret' : context . clientSecret ,
29- 'code' : context . authorizationCode
30- } , ( error , result ) => {
31- if ( error ) {
32- return reject ( error ) ;
33- }
34- let newDate = new Date ( ) ;
35- newDate . setTime ( newDate . getTime ( ) + ( result [ 'expires_in' ] * 1000 ) ) ;
36- resolve ( {
37- accessToken : result [ 'access_token' ] ,
38- accessTokenExpDate : newDate
39- } ) ;
40- } ) ;
41- } ) ;
24+ requestAccessToken : async context => {
25+
26+ const params = {
27+ 'client_id' : context . clientId ,
28+ 'redirect_uri' : context . callbackUrl ,
29+ 'client_secret' : context . clientSecret ,
30+ 'code' : context . authorizationCode
31+ } ;
32+
33+ const url = `https://graph.facebook.com/${ API_VERSION } /oauth/access_token` ;
34+ const response = await context . httpRequest . get ( url + '?' + new URLSearchParams ( params ) . toString ( ) ) ;
35+ const newDate = new Date ( ) ;
36+ newDate . setTime ( newDate . getTime ( ) + ( response . data [ 'expires_in' ] * 1000 ) ) ;
37+ return {
38+ accessToken : response . data [ 'access_token' ] ,
39+ accessTokenExpDate : newDate
40+ } ;
4241 } ,
4342
4443 accountNameFromProfileInfo : context => {
4544
4645 return context . profileInfo [ 'name' ] || context . profileInfo [ 'id' ] . toString ( ) ;
4746 } ,
4847
49- requestProfileInfo : context => {
50-
51- return new Promise ( ( resolve , reject ) => {
52- graph . setAccessToken ( context . accessToken ) ;
53- graph . setAppSecret ( context . clientSecret ) ;
54- graph . batch ( [ {
55- method : 'GET' ,
56- 'relative_url' : 'me' // Get the current user's profile information
57- } ] , ( err , res ) => {
58- if ( err ) {
59- return reject ( err ) ;
60- }
61- try {
62- resolve ( JSON . parse ( res [ 0 ] [ 'body' ] ) ) ;
63- } catch ( error ) {
64- reject ( error ) ;
65- }
66- } ) ;
67- } ) ;
48+ requestProfileInfo : async context => {
49+
50+ const url = `https://graph.facebook.com/${ API_VERSION } /me?access_token=${ context . accessToken } ` ;
51+ const response = await context . httpRequest . get ( url ) ;
52+ return response . data ;
6853 } ,
6954
70- refreshAccessToken : context => {
71-
72- return new Promise ( ( resolve , reject ) => {
73- graph . extendAccessToken ( {
74- 'access_token ' : context . accessToken ,
75- 'client_id ' : context . clientId ,
76- 'client_secret ' : context . clientSecret
77- } , ( err , result ) => {
78- if ( err ) {
79- if ( err . type === 'OAuthException' ) {
80- return reject ( new context . InvalidTokenError ( err . message ) ) ;
81- }
82- return reject ( err ) ;
83- }
84- let newDate = new Date ( ) ;
85- newDate . setTime ( newDate . getTime ( ) + ( result [ 'expires_in' ] * 1000 ) ) ;
86- resolve ( {
87- accessToken : result [ 'access_token' ] ,
88- accessTokenExpDate : newDate
89- } ) ;
90- } ) ;
91- } ) ;
55+ refreshAccessToken : async context => {
56+
57+ const params = {
58+ 'access_token' : context . accessToken ,
59+ 'client_id ' : context . clientId ,
60+ 'client_secret ' : context . clientSecret ,
61+ 'fb_exchange_token ' : context . accessToken ,
62+ 'grant_type' : 'fb_exchange_token'
63+ } ;
64+
65+ const url = `https://graph.facebook.com/ ${ API_VERSION } /oauth/access_token` ;
66+
67+ const response = await context . httpRequest . get ( url + '?' + new URLSearchParams ( params ) . toString ( ) ) ;
68+ if ( response . data . error ) {
69+ throw new context . InvalidTokenError ( response . data . error . message ) ;
70+ }
71+ const newDate = new Date ( ) ;
72+ newDate . setTime ( newDate . getTime ( ) + ( response . data [ 'expires_in' ] * 1000 ) ) ;
73+ return {
74+ accessToken : response . data [ 'access_token' ] ,
75+ accessTokenExpDate : newDate
76+ } ;
9277 } ,
9378
94- validateAccessToken : context => {
95-
96- return new Promise ( ( resolve , reject ) => {
97- graph . setAccessToken ( context . accessToken ) ;
98- graph . setAppSecret ( context . clientSecret ) ;
99- graph . batch ( [ {
100- method : 'GET' ,
101- 'relative_url' : 'me'
102- } ] , ( err , res ) => {
103- if ( err ?. type === 'OAuthException' ) {
104- return reject ( new context . InvalidTokenError ( err . message ) ) ;
105- }
106- if ( err ) {
107- return reject ( err ) ;
108- }
109- resolve ( ) ;
110- } ) ;
111- } ) ;
79+ validateAccessToken : async context => {
80+
81+ try {
82+ const url = `https://graph.facebook.com/${ API_VERSION } /me?access_token=${ context . accessToken } ` ;
83+ await context . httpRequest . get ( url ) ;
84+ } catch ( err ) {
85+ if ( err . response ?. data ?. error ?. type === 'OAuthException' ) {
86+ throw new context . InvalidTokenError ( err . response . data . error . message ) ;
87+ }
88+ throw err ;
89+ }
11290 }
11391 }
11492} ;
0 commit comments