Skip to content

Commit 5560c4a

Browse files
committed
Released v2.10 of SDK for Marketing APIs.
Also includes fixes to the examples/BasicExample.js. Developers can now run the example by doing node BasicExample.js
1 parent 82e19f3 commit 5560c4a

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

55 files changed

+803
-102
lines changed

bower.json

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "facebook-ads-sdk",
3-
"version": "2.9.0",
3+
"version": "2.10.0",
44
"description": "SDK for the Facebook Ads API in Javascript and Node.js",
55
"authors": [
66
"Zain Aziz<[email protected]>",
@@ -35,7 +35,7 @@
3535
"babel-preset-flow": "^6.23.0",
3636
"babel-preset-stage-2": "^6.24.1",
3737
"babelrc-rollup": "^3.0.0",
38-
"chai": "~3.5.0"
38+
"chai": "~3.5.0"
3939
},
4040
"main": "./dist/iife.js",
4141
"license": "Platform License"

examples/BasicExample.js

+39-42
Original file line numberDiff line numberDiff line change
@@ -6,24 +6,23 @@
66
* LICENSE file in the root directory of this source tree.
77
* @flow
88
*/
9-
// const adsSdk = require('facebook-js-ads-sdk');
10-
import FacebookAdsApi from './api';
11-
import Ad from './objects/ad';
12-
import AdAccount from './objects/ad-account';
13-
import Business from './objects/business';
14-
import Campaign from './objects/campaign';
9+
const adsSdk = require('facebook-nodejs-ads-sdk');
10+
const Ad = adsSdk.Ad;
11+
const AdAccount = adsSdk.AdAccount;
12+
const Business = adsSdk.Business;
13+
const Campaign = adsSdk.Campaign;
1514
const accountId = 'act_<ACCOUNT_ID>';
1615
const accessToken = '<ACCESS_TOKEN>';
17-
const bussinessId = 0; //ADD business ID here.
18-
const campaignId = 0; //ADD Campaign ID Here
19-
const api = FacebookAdsApi.init(accessToken);
16+
const bussinessId = ''; // ADD business ID here.
17+
const campaignId = ''; // ADD Campaign ID Here
18+
const api = adsSdk.FacebookAdsApi.init(accessToken);
2019
const account = new AdAccount(accountId);
2120
const showDebugingInfo = false;
2221
if (showDebugingInfo) {
2322
api.setDebug(true);
2423
}
2524

26-
const errorFunction = (scenarioName: string) => {
25+
const errorFunction = (scenarioName) => {
2726
let returnFunction = (error) => {
2827
console.log('An error occurred while processing, ' + scenarioName);
2928
console.log('Error Message:' + error);
@@ -52,7 +51,7 @@ account
5251
.getAds(
5352
[],
5453
{
55-
[Ad.Fields.effective_status]: [Ad.EffectiveStatus.active]
54+
[Ad.Fields.effective_status]: [Ad.EffectiveStatus.active]
5655
})
5756
.then((ad) => {
5857
logPassedTest(test2 + ':Pass', ad);
@@ -67,28 +66,27 @@ new Campaign(campaignId)
6766
.then((insight) => { logPassedTest(test3 + ':Pass', insight); })
6867
.catch(errorFunction(test3));
6968

70-
let test3a = 'Node.js getCampaigns Edge';
71-
const campaignFields =
69+
let test3a = 'Node.js getCampaigns Edge';
70+
const campaignFields =
7271
[Campaign.Fields.objective];
73-
account.getCampaigns(campaignFields, { limit: 2 })
72+
account.getCampaigns(campaignFields, { limit: 2 })
7473
.then((campaign) => {
75-
campaign.forEach((campaign)=>{
74+
campaign.forEach((campaign) => {
7675
});
7776
logPassedTest(test3a + '-GetCampaigns:Pass', campaign);
7877
})
7978
.catch(errorFunction(test3a));
8079

81-
var test3b = 'Node.js getAssignedPages Edge';
82-
new Business(bussinessId, { limit: 2 }).getAssignedPages([
83-
Business.Fields.name
84-
], {}, true).then((result)=>{
85-
if(result){
86-
result.forEach((page)=>{
87-
});
88-
logPassedTest(test3b + '-GetAssignedPages:Pass', result);
89-
}
90-
}).catch(errorFunction(test3b));
91-
80+
var test3b = 'Node.js getAssignedPages Edge';
81+
new Business(bussinessId, { limit: 2 }).getAssignedPages([
82+
Business.Fields.name
83+
], {}, true).then((result) => {
84+
if (result) {
85+
result.forEach((page) => {
86+
});
87+
logPassedTest(test3b + '-GetAssignedPages:Pass', result);
88+
}
89+
}).catch(errorFunction(test3b));
9290

9391
let test4 = 'Node.js nestedCalls';
9492
account.read([AdAccount.Fields.name])
@@ -118,24 +116,24 @@ let test5 = 'Create Edge';
118116
account
119117
.createCampaign(
120118
[],
121-
{
122-
[Campaign.Fields.name]: 'Test Campaign - Delete',
123-
[Campaign.Fields.status]: Campaign.Status.paused,
124-
[Campaign.Fields.objective]: Campaign.Objective.page_likes
125-
}
119+
{
120+
[Campaign.Fields.name]: 'Test Campaign - Delete',
121+
[Campaign.Fields.status]: Campaign.Status.paused,
122+
[Campaign.Fields.objective]: Campaign.Objective.page_likes
123+
}
126124
)
127125
.then((campaign) => {
128126
logPassedTest(test5 + ':Pass', account);
129127
})
130128
.catch(errorFunction(test5));
131129

132-
let test6 = 'Delete Image Edge';
133-
account
130+
let test6 = 'Delete Image Edge';
131+
account
134132
.createAdImage(
135133
[],
136-
{
137-
'bytes': 'iVBORw0KGgoAAAANSUhEUgAAABEAAAARCAMAAAAMs7fIAAAAOVBMVEX///87WZg7WZg7WZg7WZg7WZg7WZg7WZg7WZg7WZg7WZhMeMJEaa5Xi9tKdb0+Xp5Wi9tXjNxThNH+wk/7AAAACnRSTlMAsHIoaM7g/fx9Zr/g5QAAAGlJREFUeNplkFsOwCAIBPGJrtbX/Q/bqm1qwnxuJrBAE6OVD15pQy/WYePsDiIjp9FGyuC4DK7l6pOrVH4s41D6R4EzpJGXsa0MTQqp/yQo8hhHMuApoB1JQ5COnCN3yT6ys7xL3i7/cwMYsAveYa+MxAAAAABJRU5ErkJggg==',
138-
}
134+
{
135+
'bytes': 'iVBORw0KGgoAAAANSUhEUgAAABEAAAARCAMAAAAMs7fIAAAAOVBMVEX///87WZg7WZg7WZg7WZg7WZg7WZg7WZg7WZg7WZg7WZhMeMJEaa5Xi9tKdb0+Xp5Wi9tXjNxThNH+wk/7AAAACnRSTlMAsHIoaM7g/fx9Zr/g5QAAAGlJREFUeNplkFsOwCAIBPGJrtbX/Q/bqm1qwnxuJrBAE6OVD15pQy/WYePsDiIjp9FGyuC4DK7l6pOrVH4s41D6R4EzpJGXsa0MTQqp/yQo8hhHMuApoB1JQ5COnCN3yT6ys7xL3i7/cwMYsAveYa+MxAAAAABJRU5ErkJggg=='
136+
}
139137
)
140138
.then((result) => {
141139
logPassedTest(test6 + ':Pass', account);
@@ -152,11 +150,11 @@ let campaignIdToDelete;
152150
account
153151
.createCampaign(
154152
[Campaign.Fields.status],
155-
{
156-
[Campaign.Fields.name]: 'Test Campaign - Delete',
157-
[Campaign.Fields.status]: Campaign.Status.paused,
158-
[Campaign.Fields.objective]: Campaign.Objective.page_likes
159-
}
153+
{
154+
[Campaign.Fields.name]: 'Test Campaign - Delete',
155+
[Campaign.Fields.status]: Campaign.Status.paused,
156+
[Campaign.Fields.objective]: Campaign.Objective.page_likes
157+
}
160158
)
161159
.then((campaign) => {
162160
logPassedTest(test7 + '-Create:Pass', campaign);
@@ -181,7 +179,6 @@ account
181179
})
182180
.catch(errorFunction(test7));
183181

184-
185182
let test8 = 'Pagination Campaign';
186183
account.getCampaigns([Campaign.Fields.name], { limit: 2 })
187184
.then((campaigns) => {

package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "facebook-nodejs-ads-sdk",
3-
"version": "2.9.1",
3+
"version": "2.10.0",
44
"description": "SDK for the Facebook Ads API in Javascript and Node.js",
55
"author": "Facebook",
66
"maintainers": [

src/api.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ export default class FacebookAdsApi {
1919
locale: string;
2020
static _defaultApi: FacebookAdsApi;
2121
static get VERSION () {
22-
return 'v2.9';
22+
return 'v2.10';
2323
}
2424
static get GRAPH () {
2525
return 'https://graph.facebook.com';

src/bundle.es6

+16
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,16 @@
11
export { default as FacebookAdsApi } from './../src/api'
2+
export { default as AdVideo } from './../src/objects/ad-video';
23
export { default as AdAccount } from './../src/objects/ad-account';
4+
export { default as AdAccountAdRuleHistory } from './../src/objects/ad-account-ad-rule-history';
5+
export { default as AdAccountDeliveryEstimate } from './../src/objects/ad-account-delivery-estimate';
36
export { default as AdAccountRoas } from './../src/objects/ad-account-roas';
47
export { default as AdAccountTargetingUnified } from './../src/objects/ad-account-targeting-unified';
58
export { default as AdAccountUser } from './../src/objects/ad-account-user';
69
export { default as AdActivity } from './../src/objects/ad-activity';
710
export { default as AdAsyncRequest } from './../src/objects/ad-async-request';
811
export { default as AdAsyncRequestSet } from './../src/objects/ad-async-request-set';
912
export { default as AdAsyncRequestSetNotificationResult } from './../src/objects/ad-async-request-set-notification-result';
13+
export { default as AdCampaignDeliveryEstimate } from './../src/objects/ad-campaign-delivery-estimate';
1014
export { default as AdCreative } from './../src/objects/ad-creative';
1115
export { default as AdCreativeLinkData } from './../src/objects/ad-creative-link-data';
1216
export { default as AdCreativeLinkDataAppLinkSpec } from './../src/objects/ad-creative-link-data-app-link-spec';
@@ -28,6 +32,17 @@ export { default as AdPromotedObject } from './../src/objects/ad-promoted-object
2832
export { default as AdRecommendation } from './../src/objects/ad-recommendation';
2933
export { default as AdRecommendationData } from './../src/objects/ad-recommendation-data';
3034
export { default as AdReportRun } from './../src/objects/ad-report-run';
35+
export { default as AdRule } from './../src/objects/ad-rule';
36+
export { default as AdRuleEvaluationSpec } from './../src/objects/ad-rule-evaluation-spec';
37+
export { default as AdRuleExecutionOptions } from './../src/objects/ad-rule-execution-options';
38+
export { default as AdRuleExecutionSpec } from './../src/objects/ad-rule-execution-spec';
39+
export { default as AdRuleFilters } from './../src/objects/ad-rule-filters';
40+
export { default as AdRuleHistory } from './../src/objects/ad-rule-history';
41+
export { default as AdRuleHistoryResult } from './../src/objects/ad-rule-history-result';
42+
export { default as AdRuleHistoryResultAction } from './../src/objects/ad-rule-history-result-action';
43+
export { default as AdRuleSchedule } from './../src/objects/ad-rule-schedule';
44+
export { default as AdRuleScheduleSpec } from './../src/objects/ad-rule-schedule-spec';
45+
export { default as AdRuleTrigger } from './../src/objects/ad-rule-trigger';
3146
export { default as AdStudy } from './../src/objects/ad-study';
3247
export { default as AdStudyCell } from './../src/objects/ad-study-cell';
3348
export { default as AdStudyObjective } from './../src/objects/ad-study-objective';
@@ -48,6 +63,7 @@ export { default as BroadTargetingCategories } from './../src/objects/broad-targ
4863
export { default as Business } from './../src/objects/business';
4964
export { default as BusinessAdAccountRequest } from './../src/objects/business-ad-account-request';
5065
export { default as BusinessPageRequest } from './../src/objects/business-page-request';
66+
export { default as CheckBatchRequestStatus } from './../src/objects/check-batch-request-status';
5167
export { default as ConversionActionQuery } from './../src/objects/conversion-action-query';
5268
export { default as CustomAudience } from './../src/objects/custom-audience';
5369
export { default as CustomAudienceAdAccount } from './../src/objects/custom-audience-ad-account';

src/globals.es6

+16
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,16 @@
11
import './../src/api'
2+
import './../src/objects/ad-video';
23
import './../src/objects/ad-account';
4+
import './../src/objects/ad-account-ad-rule-history';
5+
import './../src/objects/ad-account-delivery-estimate';
36
import './../src/objects/ad-account-roas';
47
import './../src/objects/ad-account-targeting-unified';
58
import './../src/objects/ad-account-user';
69
import './../src/objects/ad-activity';
710
import './../src/objects/ad-async-request';
811
import './../src/objects/ad-async-request-set';
912
import './../src/objects/ad-async-request-set-notification-result';
13+
import './../src/objects/ad-campaign-delivery-estimate';
1014
import './../src/objects/ad-creative';
1115
import './../src/objects/ad-creative-link-data';
1216
import './../src/objects/ad-creative-link-data-app-link-spec';
@@ -28,6 +32,17 @@ import './../src/objects/ad-promoted-object';
2832
import './../src/objects/ad-recommendation';
2933
import './../src/objects/ad-recommendation-data';
3034
import './../src/objects/ad-report-run';
35+
import './../src/objects/ad-rule';
36+
import './../src/objects/ad-rule-evaluation-spec';
37+
import './../src/objects/ad-rule-execution-options';
38+
import './../src/objects/ad-rule-execution-spec';
39+
import './../src/objects/ad-rule-filters';
40+
import './../src/objects/ad-rule-history';
41+
import './../src/objects/ad-rule-history-result';
42+
import './../src/objects/ad-rule-history-result-action';
43+
import './../src/objects/ad-rule-schedule';
44+
import './../src/objects/ad-rule-schedule-spec';
45+
import './../src/objects/ad-rule-trigger';
3146
import './../src/objects/ad-study';
3247
import './../src/objects/ad-study-cell';
3348
import './../src/objects/ad-study-objective';
@@ -48,6 +63,7 @@ import './../src/objects/broad-targeting-categories';
4863
import './../src/objects/business';
4964
import './../src/objects/business-ad-account-request';
5065
import './../src/objects/business-page-request';
66+
import './../src/objects/check-batch-request-status';
5167
import './../src/objects/conversion-action-query';
5268
import './../src/objects/custom-audience';
5369
import './../src/objects/custom-audience-ad-account';
+30
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
/**
2+
* Copyright (c) 2017-present, Facebook, Inc.
3+
* All rights reserved.
4+
*
5+
* This source code is licensed under the license found in the
6+
* LICENSE file in the root directory of this source tree.
7+
* @flow
8+
*/
9+
import {AbstractCrudObject} from './../abstract-crud-object';
10+
11+
/**
12+
* AdAccountAdRuleHistory
13+
* @extends AbstractCrudObject
14+
* @see {@link https://developers.facebook.com/docs/marketing-api/}
15+
*/
16+
export default class AdAccountAdRuleHistory extends AbstractCrudObject {
17+
static get Fields () {
18+
return Object.freeze({
19+
evaluation_spec: 'evaluation_spec',
20+
exception_code: 'exception_code',
21+
exception_message: 'exception_message',
22+
execution_spec: 'execution_spec',
23+
is_manual: 'is_manual',
24+
results: 'results',
25+
rule_id: 'rule_id',
26+
schedule_spec: 'schedule_spec',
27+
timestamp: 'timestamp'
28+
});
29+
}
30+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
/**
2+
* Copyright (c) 2017-present, Facebook, Inc.
3+
* All rights reserved.
4+
*
5+
* This source code is licensed under the license found in the
6+
* LICENSE file in the root directory of this source tree.
7+
* @flow
8+
*/
9+
import {AbstractCrudObject} from './../abstract-crud-object';
10+
11+
/**
12+
* AdAccountDeliveryEstimate
13+
* @extends AbstractCrudObject
14+
* @see {@link https://developers.facebook.com/docs/marketing-api/}
15+
*/
16+
export default class AdAccountDeliveryEstimate extends AbstractCrudObject {
17+
static get Fields () {
18+
return Object.freeze({
19+
bid_estimate: 'bid_estimate',
20+
daily_outcomes_curve: 'daily_outcomes_curve',
21+
estimate_dau: 'estimate_dau',
22+
estimate_mau: 'estimate_mau',
23+
estimate_ready: 'estimate_ready'
24+
});
25+
}
26+
27+
static get OptimizationGoal (): Object {
28+
return Object.freeze({
29+
none: 'NONE',
30+
app_installs: 'APP_INSTALLS',
31+
brand_awareness: 'BRAND_AWARENESS',
32+
clicks: 'CLICKS',
33+
engaged_users: 'ENGAGED_USERS',
34+
event_responses: 'EVENT_RESPONSES',
35+
impressions: 'IMPRESSIONS',
36+
lead_generation: 'LEAD_GENERATION',
37+
link_clicks: 'LINK_CLICKS',
38+
offer_claims: 'OFFER_CLAIMS',
39+
offsite_conversions: 'OFFSITE_CONVERSIONS',
40+
page_engagement: 'PAGE_ENGAGEMENT',
41+
page_likes: 'PAGE_LIKES',
42+
post_engagement: 'POST_ENGAGEMENT',
43+
reach: 'REACH',
44+
social_impressions: 'SOCIAL_IMPRESSIONS',
45+
video_views: 'VIDEO_VIEWS',
46+
app_downloads: 'APP_DOWNLOADS',
47+
landing_page_views: 'LANDING_PAGE_VIEWS'
48+
});
49+
}
50+
}

src/objects/ad-account-targeting-unified.js

+7-2
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,6 @@ export default class AdAccountTargetingUnified extends AbstractCrudObject {
8282
effective_audience_network_positions: 'EFFECTIVE_AUDIENCE_NETWORK_POSITIONS',
8383
excluded_publisher_categories: 'EXCLUDED_PUBLISHER_CATEGORIES',
8484
excluded_publisher_list_ids: 'EXCLUDED_PUBLISHER_LIST_IDS',
85-
excluded_publisher_domains: 'EXCLUDED_PUBLISHER_DOMAINS',
8685
publisher_visibility_categories: 'PUBLISHER_VISIBILITY_CATEGORIES',
8786
user_device: 'USER_DEVICE',
8887
mobile_device_model: 'MOBILE_DEVICE_MODEL',
@@ -107,6 +106,7 @@ export default class AdAccountTargetingUnified extends AbstractCrudObject {
107106
moms: 'MOMS',
108107
office_type: 'OFFICE_TYPE',
109108
targeting_optimization: 'TARGETING_OPTIMIZATION',
109+
direct_install_devices: 'DIRECT_INSTALL_DEVICES',
110110
engagement_specs: 'ENGAGEMENT_SPECS',
111111
excluded_engagement_specs: 'EXCLUDED_ENGAGEMENT_SPECS',
112112
product_audience_specs: 'PRODUCT_AUDIENCE_SPECS',
@@ -118,7 +118,12 @@ export default class AdAccountTargetingUnified extends AbstractCrudObject {
118118
app_install_state: 'APP_INSTALL_STATE',
119119
fb_deal_id: 'FB_DEAL_ID',
120120
interest_defaults_source: 'INTEREST_DEFAULTS_SOURCE',
121-
alternate_auto_targeting_option: 'ALTERNATE_AUTO_TARGETING_OPTION'
121+
alternate_auto_targeting_option: 'ALTERNATE_AUTO_TARGETING_OPTION',
122+
contextual_targeting_categories: 'CONTEXTUAL_TARGETING_CATEGORIES',
123+
topic: 'TOPIC',
124+
format: 'FORMAT',
125+
trending: 'TRENDING',
126+
gatekeepers: 'GATEKEEPERS'
122127
});
123128
}
124129
}

0 commit comments

Comments
 (0)