diff --git a/types/facebook-js-sdk/facebook-js-sdk-tests.ts b/types/facebook-js-sdk/facebook-js-sdk-tests.ts index 6b400a10a7..46b9f331f5 100644 --- a/types/facebook-js-sdk/facebook-js-sdk-tests.ts +++ b/types/facebook-js-sdk/facebook-js-sdk-tests.ts @@ -1,11 +1,10 @@ - - FB.init({ - appId: '***********', - version: 'v2.5', - status: true, - cookie: true, - xfbml: true + appId: '***********', + version: 'v2.5', + status: true, + cookie: true, + xfbml: true, + autoLogAppEvents: false }); FB.getLoginStatus(function(response: fb.StatusResponse) { @@ -31,12 +30,18 @@ FB.login(function(response: fb.StatusResponse) { scope: 'public_profile' }); +FB.login({ + scope: 'public_profile' +}); + FB.logout(function(response: fb.StatusResponse) { console.log(response); console.log(response.status); console.log(response.authResponse.accessToken); }); +FB.logout(); + /** * Dialog samples from Facebook documentation: */ @@ -65,8 +70,8 @@ FB.ui({ method: 'pay', action: 'purchaseitem', product: 'YOUR_PRODUCT_URL' -}, data => { - console.log(data.payment_id); +}, response => { + console.log(response.payment_id); }); FB.ui({ @@ -75,43 +80,93 @@ FB.ui({ product_id: 'com.fb.friendsmash.coins.10', developer_payload: 'this_is_a_test_payload' }, response => { - console.log(response); + console.log(response.payment_id); }); FB.ui({ method: 'pagetab', redirect_uri: 'YOUR_URL' -}, response => {}); +}, response => { + console.log(response.error_code); +}); FB.ui({ method: 'send', link: 'http://www.nytimes.com/interactive/2015/04/15/travel/europe-favorite-streets.html', -}, response => {}); +}, response => { + console.log(response.error_code); +}); FB.ui({ method: 'apprequests', message: 'Take this bomb to blast your way to victory!', to: 'USER_ID, USER_ID, INVITE_TOKEN', - action_type:'send', + action_type: 'send', object_id: 'YOUR_OBJECT_ID', // e.g. '191181717736427' }, response => { - console.log(response); + console.log(response.request); }); FB.ui({ method: 'apprequests', message: 'Friend Smash Request!', filters: [ - { name:'GROUP_1_NAME', user_ids:['USER_ID','USER_ID','USER_ID'] }, - { name:'GROUP_2_NAME', user_ids: ['USER_ID','USER_ID','USER_ID'] }, + { name: 'GROUP_1_NAME', user_ids: ['USER_ID', 'USER_ID', 'USER_ID'] }, + { name: 'GROUP_2_NAME', user_ids: ['USER_ID', 'USER_ID', 'USER_ID'] }, ] }, response => { - console.log(response); + console.log(response.request); }); FB.ui({ method: 'share', mobile_iframe: true, - href: 'https://developers.facebook.com/docs/', - picture: 'https://upload.wikimedia.org/wikipedia/commons/thumb/2/2f/Google_2015_logo.svg/2000px-Google_2015_logo.svg.png', -}, response => {}); + href: 'https://developers.facebook.com/docs/' +}, response => { + console.log(response.post_id); +}); + +FB.ui({ + account_id: '', + display: 'popup', + method: 'create_offer', + objective: 'APP_INSTALLS', + page_id: '', +}, response => { + console.log(response.id) +}); + +FB.ui({ + account_id: '', + display: 'popup', + method: 'lead_gen', + page_id: '', +}, response => { + console.log(response.formID) +}); + +FB.ui({ + display: 'popup', + method: 'canvas_editor', + business_id: '', + page_id: '' +}, response => { + console.log(response.id) +}); + +FB.ui({ + display: 'popup', + method: 'canvas_editor', + account_id: '', + business_id: '', + page_id: '', + template_id: '' +}, response => { + console.log(response.id) +}); + +FB.ui({ + display: 'popup', + method: 'canvas_preview', + canvas_id: '' +}); diff --git a/types/facebook-js-sdk/index.d.ts b/types/facebook-js-sdk/index.d.ts index 8a635d8995..86ca521c88 100644 --- a/types/facebook-js-sdk/index.d.ts +++ b/types/facebook-js-sdk/index.d.ts @@ -1,14 +1,15 @@ -// Type definitions for the Facebook Javascript SDK 2.8 +// Type definitions for the Facebook Javascript SDK 3.1 // Project: https://developers.facebook.com/docs/javascript // Definitions by: Amrit Kahlon // Mahmoud Zohdi +// Marc Knaup // Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped import fb = facebook; declare var FB: fb.FacebookStatic; declare namespace facebook { - - + + interface FacebookStatic { api: any; AppEvents: any; @@ -19,24 +20,26 @@ declare namespace facebook { * The method FB.getAuthResponse() is a synchronous accessor for the current authResponse. * The synchronous nature of this method is what sets it apart from the other login methods. * - * @param callback function to handle the response. - * * This method is similar in nature to FB.getLoginStatus(), but it returns just the authResponse object. */ - getAuthResponse(): AuthResponse; + getAuthResponse(): AuthResponse | null; + /** * FB.getLoginStatus() allows you to determine if a user is * logged in to Facebook and has authenticated your app. * * @param callback function to handle the response. + * @param roundtrip force a roundtrip to Facebook - effectively refreshing the cache of the response object */ - getLoginStatus(callback: (response: StatusResponse) => void, roundtrip?: boolean ): void; + getLoginStatus(callback: (response: StatusResponse) => void, roundtrip?: boolean): void; + /** * The method FB.init() is used to initialize and setup the SDK. * * @param params params for the initialization. */ init(params: InitParams): void; + /** * Use this function to log the user in * @@ -47,44 +50,90 @@ declare namespace facebook { * @param callback function to handle the response. * @param options optional ILoginOption to add params such as scope. */ - login(callback: (response: StatusResponse) => void, options?: LoginOptions): void; + login(callback: (response: StatusResponse) => void, options: LoginOptions): void; + + /** + * Use this function to log the user in + * + * Calling FB.login() results in the JS SDK attempting to open a popup window. + * As such, this method should only be called after a user click event, otherwise + * the popup window will be blocked by most browsers. + * + * @param options optional ILoginOption to add params such as scope. + */ + login(options: LoginOptions): void; + /** * The method FB.logout() logs the user out of your site and, in some cases, Facebook. * * @param callback function to handle the response */ - logout(callback: (response: StatusResponse) => void): void; + logout(callback?: (response: StatusResponse) => void): void; /** * @see https://developers.facebook.com/docs/sharing/reference/share-dialog */ - ui(params: ShareDialogParams, callback: (response: ShareDialogResponse) => void): void; + ui(params: ShareDialogParams, callback?: (response: ShareDialogResponse) => void): void; + + /** + * @see https://developers.facebook.com/docs/sharing/reference/share-dialog + */ + ui(params: ShareOpenGraphDialogParams, callback?: (response: ShareOpenGraphDialogResponse) => void): void; + + /** + * @see https://developers.facebook.com/docs/pages/page-tab-dialog + */ + ui(params: AddPageTabDialogParams, callback?: (response: DialogResponse) => void): void; /** * @see https://developers.facebook.com/docs/games/services/gamerequests */ - ui(params: GameRequestDialogParams, callback: (response: GameRequestDialogResponse) => void): void; + ui(params: GameRequestDialogParams, callback?: (response: GameRequestDialogResponse) => void): void; /** * @see https://developers.facebook.com/docs/payments/reference/paydialog */ - ui(params: PayDialogParams, callback: (response: PayDialogResponse) => void): void; + ui(params: PayDialogParams, callback?: (response: PayDialogResponse) => void): void; /** * @see https://developers.facebook.com/docs/games_payments/payments_lite */ - ui(params: PaymentsLiteDialogParams, callback: (response: PaymentsLiteDialogResponse) => void): void; - + ui(params: PaymentsLiteDialogParams, callback?: (response: PaymentsLiteDialogResponse) => void): void; + /** - * @see https://developers.facebook.com/docs/videos/live-video/exploring-live + * @see https://developers.facebook.com/docs/videos/live-video/exploring-live#golivedialog */ - ui(params: LiveDialogParams, callback: (response: LiveDialogResponse) => void): void; + ui(params: LiveDialogParams, callback?: (response: LiveDialogResponse) => void): void; /** * @see https://developers.facebook.com/docs/sharing/reference/send-dialog - * @see https://developers.facebook.com/docs/pages/page-tab-dialog */ - ui(params: SendDialogParams | AddPageTabDialogParams, callback: (response: null) => void): void; + ui(params: SendDialogParams, callback?: (response: DialogResponse) => void): void; + + /** + * @see https://developers.facebook.com/docs/marketing-api/guides/offer-ads/#create-offer-dialog + */ + ui(params: CreateOfferDialogParams, callback?: (response: CreateOfferDialogResponse) => void): void; + + /** + * @see https://developers.facebook.com/docs/marketing-api/guides/lead-ads/create#create-leadgen-dialog + */ + ui(params: LeadgenDialogParams, callback?: (response: LeadgenDialogResponse) => void): void; + + /** + * @see https://developers.facebook.com/docs/marketing-api/guides/canvas-ads#canvas-ads-dialog + */ + ui(params: InstantExperiencesAdsDialogParams, callback?: (response: InstantExperiencesAdsDialogResponse) => void): void; + + /** + * @see https://developers.facebook.com/docs/marketing-api/guides/canvas-ads#canvas-preview-dialog + */ + ui(params: InstantExperiencesPreviewDialogParams, callback?: (response: DialogResponse) => void): void; + + /** + * @see https://developers.facebook.com/docs/marketing-api/guides/collection#collection-ads-dialog + */ + ui(params: CollectionAdsDialogParams, callback?: (response: CollectionAdsDialogResponse) => void): void; XFBML: any; } @@ -97,10 +146,11 @@ declare namespace facebook { xfbml?: boolean; frictionlessRequests?: boolean; hideFlashCallback?: boolean; + autoLogAppEvents?: boolean; } interface LoginOptions { - auth_type?: string; + auth_type?: 'rerequest'; scope?: string; return_scopes?: boolean; enable_profile_selector?: boolean; @@ -122,12 +172,21 @@ declare namespace facebook { interface ShareDialogParams extends DialogParams { method: 'share'; href: string; - picture?: string; hashtag?: string; quote?: string; mobile_iframe?: boolean; } + interface ShareOpenGraphDialogParams extends DialogParams { + method: 'share_open_graph'; + action_type: string; + action_properties: { [property: string]: any }; + href: string; + hashtag?: string; + quote?: string; + mobile_iframe?: false; + } + interface AddPageTabDialogParams extends DialogParams { method: 'pagetab'; redirect_uri: string; @@ -137,13 +196,13 @@ declare namespace facebook { method: 'apprequests'; message: string; action_type?: 'send' | 'askfor' | 'turn'; - data?: number; + data?: string; exclude_ids?: string[]; filters?: 'app_users' | 'app_non_users' | Array<{ name: string, user_ids: string[] }>; max_recipients?: number; object_id?: string; suggestions?: string[]; - title?: number; + title?: string; to?: string | number; } @@ -160,10 +219,11 @@ declare namespace facebook { quantity?: number; quantity_min?: number; quantity_max?: number; + pricepoint_id?: string; request_id?: string; test_currency?: string; } - + interface PaymentsLiteDialogParams extends DialogParams { method: 'pay'; action: 'purchaseiap'; @@ -179,6 +239,43 @@ declare namespace facebook { broadcast_data?: LiveDialogResponse; } + interface CreateOfferDialogParams extends DialogParams { + account_id: string; + display: 'popup'; + method: 'create_offer'; + objective: 'APP_INSTALLS' | 'CONVERSIONS' | 'LINK_CLICKS' | 'OFFER_CLAIMS' | 'PRODUCT_CATALOG_SALES' | 'STORE_VISITS'; + page_id: string; + } + + interface LeadgenDialogParams extends DialogParams { + account_id: string; + display: 'popup'; + method: 'lead_gen'; + page_id: string; + } + + interface InstantExperiencesAdsDialogParams extends DialogParams { + display: 'popup'; + method: 'canvas_editor'; + business_id: string; + page_id: string; + canvas_id?: string; + } + + interface InstantExperiencesPreviewDialogParams extends DialogParams { + display: 'popup'; + method: 'canvas_preview'; + canvas_id: string; + } + + interface CollectionAdsDialogParams extends InstantExperiencesAdsDialogParams { + account_id: string; + canvas_id?: undefined; + template_id: string; + product_catalog_id?: string; + product_set_id?: string; + } + //////////////////////// // // RESPONSES @@ -190,48 +287,73 @@ declare namespace facebook { signedRequest: string; userID: string; grantedScopes?: string; + reauthorize_required_in?: number; } - + interface StatusResponse { - status: string; + status: 'authorization_expired' | 'connected' | 'not_authorized' | 'unknown'; authResponse: AuthResponse; } - interface ShareDialogResponse { - post_id?: string; + interface DialogResponse { + error_code?: number; error_message?: string; } - interface GameRequestDialogResponse { + interface ShareDialogResponse extends DialogResponse { + post_id: string; + } + + interface ShareOpenGraphDialogResponse extends DialogResponse { + post_id: string; + } + + interface GameRequestDialogResponse extends DialogResponse { request: string; to: string[]; } - interface PayDialogResponse { + interface PayDialogResponse extends DialogResponse { payment_id: string; amount: string; currency: string; quantity: string; - request_id: string; - status: string; + request_id?: string; + status: 'completed' | 'initiated'; signed_request: string; } - interface PaymentsLiteDialogResponse { + interface PaymentsLiteDialogResponse extends DialogResponse { + app_id: number; developer_payload?: string; payment_id: number; - product_id?: string; - purchase_time?: number; - purchase_token?: string; - signed_request?: string; - error_code?: number; - error_message?: string; + product_id: string; + purchase_time: number; + purchase_token: string; + signed_request: string; } - - interface LiveDialogResponse { + + interface LiveDialogResponse extends DialogResponse { id: string; stream_url: string; secure_stream_url: string; status: string; } + + interface CreateOfferDialogResponse extends DialogResponse { + id: string; + success: boolean; + } + + interface LeadgenDialogResponse extends DialogResponse { + formID: string; + success: boolean; + } + + interface InstantExperiencesAdsDialogResponse extends DialogResponse { + id: string; + success: boolean; + } + + interface CollectionAdsDialogResponse extends InstantExperiencesAdsDialogResponse {} }