Skip to content

Commit 0942bed

Browse files
feat(SDK-2237): add setAPIUrl getAPIUrl public methods (#990)
feat(SDK-2237): add setAPIUrl getAPIUrl public methods
1 parent 1baa24a commit 0942bed

File tree

7 files changed

+115
-3
lines changed

7 files changed

+115
-3
lines changed

example.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ <h4>QR Code</h4>
8282
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
8383
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
8484
<script type="text/javascript">
85-
(function(b,r,a,n,c,h,_,s,d,k){if(!b[n]||!b[n]._q){for(;s<_.length;)c(h,_[s++]);d=r.createElement(a);d.async=1;d.src="https://cdn.branch.io/branch-latest.min.js";k=r.getElementsByTagName(a)[0];k.parentNode.insertBefore(d,k);b[n]=h}})(window,document,"script","branch",function(b,r){b[r]=function(){b._q.push([r,arguments])}},{_q:[],_v:1},"addListener banner closeBanner closeJourney data deepview deepviewCta first init link logout removeListener setBranchViewData setIdentity track trackCommerceEvent logEvent disableTracking getBrowserFingerprintId crossPlatformIds lastAttributedTouchData setAPIResponseCallback qrCode setRequestMetaData setDMAParamsForEEA".split(" "), 0);
85+
(function(b,r,a,n,c,h,_,s,d,k){if(!b[n]||!b[n]._q){for(;s<_.length;)c(h,_[s++]);d=r.createElement(a);d.async=1;d.src="https://cdn.branch.io/branch-latest.min.js";k=r.getElementsByTagName(a)[0];k.parentNode.insertBefore(d,k);b[n]=h}})(window,document,"script","branch",function(b,r){b[r]=function(){b._q.push([r,arguments])}},{_q:[],_v:1},"addListener banner closeBanner closeJourney data deepview deepviewCta first init link logout removeListener setBranchViewData setIdentity track trackCommerceEvent logEvent disableTracking getBrowserFingerprintId crossPlatformIds lastAttributedTouchData setAPIResponseCallback qrCode setRequestMetaData setAPIUrl getAPIUrl setDMAParamsForEEA".split(" "), 0);
8686

8787
branch.setAPIResponseCallback(function(url, method, requestBody, error, status, responseBody) {
8888
console.log('Request: ' + method + ' ' + url + ' body=' + JSON.stringify(requestBody));

src/1_utils.js

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1357,3 +1357,15 @@ utils.setDMAParams = function(data, dmaObj = {}, endPoint) {
13571357
}
13581358
};
13591359

1360+
/**
1361+
* @param {String} url
1362+
* A utility function to validate url
1363+
*/
1364+
utils.isValidURL = function(url) {
1365+
if (!url || url.trim() === "") {
1366+
return false;
1367+
}
1368+
var urlPattern = new RegExp('^(https?)://((([a-z\\d]([a-z\\d-]*[a-z\\d])*)\\.)+[a-z]{2,}|((\\d{1,3}\\.){3}\\d{1,3}))(\\:\\d+)?(\\/[-a-z\\d%_.~+]*)*(\\?[;&a-z\\d%_.~+=-]*)?(\\#[-a-z\\d_]*)?$', 'i');
1369+
return urlPattern.test(url);
1370+
};
1371+

src/6_branch.js

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -219,6 +219,9 @@ Branch.prototype._api = function(resource, obj, callback) {
219219
var dmaData = this._storage.get('branch_dma_data', true);
220220
obj["branch_dma_data"] = dmaData ? safejson.parse(dmaData) : {};
221221
}
222+
if (resource.endpoint !== '/_r') {
223+
resource.destination = config.api_endpoint;
224+
}
222225
return this._server.request(resource, obj, this._storage, function(err, data) {
223226
callback(err, data);
224227
});
@@ -1987,3 +1990,26 @@ Branch.prototype['setRequestMetaData'] = function(key, value) {
19871990
console.error("An error occured while setting request metadata", e);
19881991
}
19891992
};
1993+
1994+
/***
1995+
* @function Branch.setAPIUrl
1996+
* @param {String} url - url
1997+
* Sets a custom base URL for all calls to the Branch API
1998+
*/
1999+
Branch.prototype['setAPIUrl'] = function(url) {
2000+
if (!utils.isValidURL(url)) {
2001+
console.error("setAPIUrl: Invalid URL format. Default URL will be set.");
2002+
return;
2003+
}
2004+
2005+
config.api_endpoint = url;
2006+
};
2007+
2008+
/***
2009+
* @function Branch.getAPIUrl
2010+
* returns the base URL for all calls to the Branch API
2011+
*/
2012+
Branch.prototype['getAPIUrl'] = function() {
2013+
return config.api_endpoint;
2014+
};
2015+

src/onpage.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,9 @@
5757
'setAPIResponseCallback',
5858
'qrCode',
5959
'setRequestMetaData',
60-
'setDMAParamsForEEA'
60+
'setDMAParamsForEEA',
61+
'setAPIUrl',
62+
'getAPIUrl'
6163
],
6264
0
6365
);

test/1_utils.js

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1394,6 +1394,63 @@ describe('utils', function() {
13941394
assert.deepEqual(data, {});
13951395
});
13961396
});
1397+
describe('isValidUrl', function() {
1398+
// Invalid schemes
1399+
it('should return false for invalid scheme htt', function() {
1400+
assert.equal(utils.isValidURL('htt://www.example.com'), false);
1401+
});
1402+
it('should return false for missing scheme', function() {
1403+
assert.equal(utils.isValidURL('://www.example.com'), false);
1404+
});
1405+
1406+
// Invalid domain names
1407+
it('should return false for missing domain', function() {
1408+
assert.equal(utils.isValidURL('https://example'), false);
1409+
});
1410+
it('should return false for missing domain after dot', function() {
1411+
assert.equal(utils.isValidURL('https://example.'), false);
1412+
});
1413+
it('should return false for missing domain before dot', function() {
1414+
assert.equal(utils.isValidURL('https://.example.com'), false);
1415+
});
1416+
1417+
// Invalid domain names
1418+
it('should return false for Invalid domain names', function() {
1419+
assert.equal(utils.isValidURL('www.example.com'), false);
1420+
});
1421+
it('should return false for Invalid domain names 2', function() {
1422+
assert.equal(utils.isValidURL('example.com'), false);
1423+
});
1424+
// Empty URL
1425+
it('should return false for empty url', function() {
1426+
assert.equal(utils.isValidURL(''), false);
1427+
});
1428+
1429+
it('should return false for Invalid domain names 2', function() {
1430+
assert.equal(utils.isValidURL(''), false);
1431+
});
1432+
1433+
it('should return false for null', function() {
1434+
assert.equal(utils.isValidURL(null), false);
1435+
});
1436+
1437+
it('should return false for undefined', function() {
1438+
assert.equal(utils.isValidURL(undefined), false);
1439+
});
1440+
1441+
it('should return false for invalid path', function() {
1442+
assert.equal(utils.isValidURL('https://www.example.com/path with spaces'), false);
1443+
});
1444+
1445+
it('should return true for valid url - https', function() {
1446+
assert.equal(utils.isValidURL('https://api2.branch.io'), true);
1447+
});
1448+
1449+
it('should return true for valid url - http', function() {
1450+
assert.equal(utils.isValidURL('http://api2.branch.io'), true);
1451+
});
1452+
});
1453+
13971454

13981455
/*
13991456
describe('journey_cta', function(done) {

test/6_branch_new.js

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,4 +117,19 @@ describe('Branch - new', function() {
117117
sinon.assert.calledWith(consoleErrorStub, 'setDMAParamsForEEA::An error occured while setting DMA parameters for EEA', sinon.match.instanceOf(Error));
118118
});
119119
});
120+
describe('setAPIUrl', function() {
121+
it('test method exists', function() {
122+
sinon.assert.match(typeof branch_instance.setAPIUrl, "function");
123+
});
124+
});
125+
describe('getAPIUrl', function() {
126+
it('test method exists', function() {
127+
sinon.assert.match(typeof branch_instance.getAPIUrl, "function");
128+
});
129+
it('test url', function() {
130+
var branch_url = 'https://api16.branch.io';
131+
branch_instance.setAPIUrl(branch_url);
132+
assert.equal(branch_instance.getAPIUrl(), branch_url);
133+
});
134+
});
120135
});

test/integration-test.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323

2424
<script type="text/javascript">
2525

26-
(function(b,r,a,n,c,h,_,s,d,k){if(!b[n]||!b[n]._q){for(;s<_.length;)c(h,_[s++]);d=r.createElement(a);d.async=1;d.src="../dist/build.js";k=r.getElementsByTagName(a)[0];k.parentNode.insertBefore(d,k);b[n]=h}})(window,document,"script","branch",function(b,r){b[r]=function(){b._q.push([r,arguments])}},{_q:[],_v:1},"addListener banner closeBanner closeJourney data deepview deepviewCta first init link logout removeListener setBranchViewData setIdentity track trackCommerceEvent logEvent disableTracking getBrowserFingerprintId crossPlatformIds lastAttributedTouchData setAPIResponseCallback qrCode setRequestMetaData".split(" "), 0);
26+
(function(b,r,a,n,c,h,_,s,d,k){if(!b[n]||!b[n]._q){for(;s<_.length;)c(h,_[s++]);d=r.createElement(a);d.async=1;d.src="../dist/build.js";k=r.getElementsByTagName(a)[0];k.parentNode.insertBefore(d,k);b[n]=h}})(window,document,"script","branch",function(b,r){b[r]=function(){b._q.push([r,arguments])}},{_q:[],_v:1},"addListener banner closeBanner closeJourney data deepview deepviewCta first init link logout removeListener setBranchViewData setIdentity track trackCommerceEvent logEvent disableTracking getBrowserFingerprintId crossPlatformIds lastAttributedTouchData setAPIResponseCallback qrCode setRequestMetaData setDMAParamsForEEA setAPIUrl getAPIUrl".split(" "), 0);
2727
</script>
2828

2929
<script type="text/javascript" src="7_integration.js"></script>

0 commit comments

Comments
 (0)