Source: shoppers.js

  1. /*jshint -W069 */
  2. /**
  3. *
  4. * @class shoppers
  5. * @param {(string|object)} [domainOrOptions] - The project domain or options object. If object, see the object's optional properties.
  6. * @param {string} [domainOrOptions.domain] - The project domain
  7. * @param {object} [domainOrOptions.token] - auth token - object with value property and optional headerOrQueryName and isQuery properties
  8. */
  9. var shoppers = (function() {
  10. 'use strict';
  11. var request = require('request');
  12. var Q = require('q');
  13. function shoppers(options) {
  14. var domain = (typeof options === 'object') ? options.domain : options;
  15. this.domain = domain ? domain : 'https://api.godaddy.com';
  16. if (this.domain.length === 0) {
  17. throw new Error('Domain parameter must be specified as a string.');
  18. }
  19. this.token = (typeof options === 'object') ? (options.token ? options.token : {}) : {};
  20. }
  21. /**
  22. * Set Token
  23. * @method
  24. * @name shoppers#setToken
  25. * @param {string} value - token's value
  26. * @param {string} headerOrQueryName - the header or query name to send the token at
  27. * @param {boolean} isQuery - true if send the token as query param, otherwise, send as header param
  28. *
  29. */
  30. shoppers.prototype.setToken = function(value, headerOrQueryName, isQuery) {
  31. this.token.value = value;
  32. this.token.headerOrQueryName = headerOrQueryName;
  33. this.token.isQuery = isQuery;
  34. };
  35. /**
  36. * Update details for the specified Shopper
  37. * @method
  38. * @name shoppers#update
  39. * @param {string} shopperId - The ID of the Shopper to update
  40. * @param {ShopperUpdate} shopper - The Shopper details to update
  41. *
  42. */
  43. shoppers.prototype.update = function(parameters) {
  44. if (parameters === undefined) {
  45. parameters = {};
  46. }
  47. var deferred = Q.defer();
  48. var domain = this.domain;
  49. var path = '/v1/shoppers/{shopperId}';
  50. var body;
  51. var queryParameters = {};
  52. var headers = {};
  53. var form = {};
  54. if (this.token.isQuery) {
  55. queryParameters[this.token.headerOrQueryName] = this.token.value;
  56. } else if (this.token.headerOrQueryName) {
  57. headers[this.token.headerOrQueryName] = this.token.value;
  58. } else {
  59. headers['Authorization'] = 'Bearer ' + this.token.value;
  60. }
  61. path = path.replace('{shopperId}', parameters['shopperId']);
  62. if (parameters['shopperId'] === undefined) {
  63. deferred.reject(new Error('Missing required path parameter: shopperId'));
  64. return deferred.promise;
  65. }
  66. if (parameters['shopper'] !== undefined) {
  67. body = parameters['shopper'];
  68. }
  69. if (parameters['shopper'] === undefined) {
  70. deferred.reject(new Error('Missing required body parameter: shopper'));
  71. return deferred.promise;
  72. }
  73. if (parameters.$queryParameters) {
  74. Object.keys(parameters.$queryParameters)
  75. .forEach(function(parameterName) {
  76. var parameter = parameters.$queryParameters[parameterName];
  77. queryParameters[parameterName] = parameter;
  78. });
  79. }
  80. var req = {
  81. method: 'POST',
  82. uri: domain + path,
  83. qs: queryParameters,
  84. headers: headers,
  85. body: body
  86. };
  87. if (Object.keys(form).length > 0) {
  88. req.form = form;
  89. }
  90. if (typeof(body) === 'object' && !(body instanceof Buffer)) {
  91. req.json = true;
  92. }
  93. request(req, function(error, response, body) {
  94. if (error) {
  95. deferred.reject(error);
  96. } else {
  97. if (/^application\/(.*\\+)?json/.test(response.headers['content-type'])) {
  98. try {
  99. body = JSON.parse(body);
  100. } catch (e) {
  101. }
  102. }
  103. if (response.statusCode === 204) {
  104. deferred.resolve({
  105. response: response
  106. });
  107. } else if (response.statusCode >= 200 && response.statusCode <= 299) {
  108. deferred.resolve({
  109. response: response,
  110. body: body
  111. });
  112. } else {
  113. deferred.reject({
  114. response: response,
  115. body: body
  116. });
  117. }
  118. }
  119. });
  120. return deferred.promise;
  121. };
  122. /**
  123. * Get details for the specified Shopper
  124. * @method
  125. * @name shoppers#get
  126. * @param {string} shopperId - Shopper whose details are to be retrieved
  127. *
  128. */
  129. shoppers.prototype.get = function(parameters) {
  130. if (parameters === undefined) {
  131. parameters = {};
  132. }
  133. var deferred = Q.defer();
  134. var domain = this.domain;
  135. var path = '/v1/shoppers/{shopperId}';
  136. var body;
  137. var queryParameters = {};
  138. var headers = {};
  139. var form = {};
  140. if (this.token.isQuery) {
  141. queryParameters[this.token.headerOrQueryName] = this.token.value;
  142. } else if (this.token.headerOrQueryName) {
  143. headers[this.token.headerOrQueryName] = this.token.value;
  144. } else {
  145. headers['Authorization'] = 'Bearer ' + this.token.value;
  146. }
  147. path = path.replace('{shopperId}', parameters['shopperId']);
  148. if (parameters['shopperId'] === undefined) {
  149. deferred.reject(new Error('Missing required path parameter: shopperId'));
  150. return deferred.promise;
  151. }
  152. if (parameters.$queryParameters) {
  153. Object.keys(parameters.$queryParameters)
  154. .forEach(function(parameterName) {
  155. var parameter = parameters.$queryParameters[parameterName];
  156. queryParameters[parameterName] = parameter;
  157. });
  158. }
  159. var req = {
  160. method: 'GET',
  161. uri: domain + path,
  162. qs: queryParameters,
  163. headers: headers,
  164. body: body
  165. };
  166. if (Object.keys(form).length > 0) {
  167. req.form = form;
  168. }
  169. if (typeof(body) === 'object' && !(body instanceof Buffer)) {
  170. req.json = true;
  171. }
  172. request(req, function(error, response, body) {
  173. if (error) {
  174. deferred.reject(error);
  175. } else {
  176. if (/^application\/(.*\\+)?json/.test(response.headers['content-type'])) {
  177. try {
  178. body = JSON.parse(body);
  179. } catch (e) {
  180. }
  181. }
  182. if (response.statusCode === 204) {
  183. deferred.resolve({
  184. response: response
  185. });
  186. } else if (response.statusCode >= 200 && response.statusCode <= 299) {
  187. deferred.resolve({
  188. response: response,
  189. body: body
  190. });
  191. } else {
  192. deferred.reject({
  193. response: response,
  194. body: body
  195. });
  196. }
  197. }
  198. });
  199. return deferred.promise;
  200. };
  201. /**
  202. * Create a Subaccount owned by the authenticated Reseller
  203. * @method
  204. * @name shoppers#createSubaccount
  205. * @param {SubaccountCreate} subaccount - The subaccount to create
  206. *
  207. */
  208. shoppers.prototype.createSubaccount = function(parameters) {
  209. if (parameters === undefined) {
  210. parameters = {};
  211. }
  212. var deferred = Q.defer();
  213. var domain = this.domain;
  214. var path = '/v1/shoppers/subaccount';
  215. var body;
  216. var queryParameters = {};
  217. var headers = {};
  218. var form = {};
  219. if (this.token.isQuery) {
  220. queryParameters[this.token.headerOrQueryName] = this.token.value;
  221. } else if (this.token.headerOrQueryName) {
  222. headers[this.token.headerOrQueryName] = this.token.value;
  223. } else {
  224. headers['Authorization'] = 'Bearer ' + this.token.value;
  225. }
  226. if (parameters['subaccount'] !== undefined) {
  227. body = parameters['subaccount'];
  228. }
  229. if (parameters['subaccount'] === undefined) {
  230. deferred.reject(new Error('Missing required body parameter: subaccount'));
  231. return deferred.promise;
  232. }
  233. if (parameters.$queryParameters) {
  234. Object.keys(parameters.$queryParameters)
  235. .forEach(function(parameterName) {
  236. var parameter = parameters.$queryParameters[parameterName];
  237. queryParameters[parameterName] = parameter;
  238. });
  239. }
  240. var req = {
  241. method: 'POST',
  242. uri: domain + path,
  243. qs: queryParameters,
  244. headers: headers,
  245. body: body
  246. };
  247. if (Object.keys(form).length > 0) {
  248. req.form = form;
  249. }
  250. if (typeof(body) === 'object' && !(body instanceof Buffer)) {
  251. req.json = true;
  252. }
  253. request(req, function(error, response, body) {
  254. if (error) {
  255. deferred.reject(error);
  256. } else {
  257. if (/^application\/(.*\\+)?json/.test(response.headers['content-type'])) {
  258. try {
  259. body = JSON.parse(body);
  260. } catch (e) {
  261. }
  262. }
  263. if (response.statusCode === 204) {
  264. deferred.resolve({
  265. response: response
  266. });
  267. } else if (response.statusCode >= 200 && response.statusCode <= 299) {
  268. deferred.resolve({
  269. response: response,
  270. body: body
  271. });
  272. } else {
  273. deferred.reject({
  274. response: response,
  275. body: body
  276. });
  277. }
  278. }
  279. });
  280. return deferred.promise;
  281. };
  282. return shoppers;
  283. })();
  284. exports.shoppers = shoppers;