pushbullet-js

pushbullet-js library

بۇ قوليازمىنى بىۋاسىتە قاچىلاشقا بولمايدۇ. بۇ باشقا قوليازمىلارنىڭ ئىشلىتىشى ئۈچۈن تەمىنلەنگەن ئامبار بولۇپ، ئىشلىتىش ئۈچۈن مېتا كۆرسەتمىسىگە قىستۇرىدىغان كود: // @require https://update.greatest.deepsurf.us/scripts/401969/797701/pushbullet-js.js

  1. var PushBullet = (function() {
  2. var pb = {};
  3. var pbURL = "https://api.pushbullet.com/v2/";
  4. var pbPush = pbURL + "pushes";
  5. var pbContact = pbURL + "contacts";
  6. var pbDevice = pbURL + "devices";
  7. var pbUser = pbURL + "users/me";
  8. var pbUpReq = pbURL + "upload-request";
  9. var httpReqDone = 4;
  10. var httpResGood = 200;
  11. var httpResNoCont = 204;
  12.  
  13. pb.APIKey = null;
  14.  
  15. pb.push = function(pushType, devId, email, data, callback) {
  16. var parameters = {type: pushType.toLowerCase()};
  17. if(email && devId) {
  18. var err = new Error("Cannot push to both device and contact");
  19. if(callback) {
  20. return callback(err);
  21. } else {
  22. throw err;
  23. }
  24. } else if(email) {
  25. parameters.email = email;
  26. } else if(devId) {
  27. parameters.device_iden = devId;
  28. }
  29. switch(pushType.toLowerCase()) {
  30. case "note":
  31. parameters.title = data.title;
  32. parameters.body = data.body;
  33. break;
  34. case "link":
  35. parameters.title = data.title;
  36. parameters.url = data.url;
  37. if(data.body) {
  38. parameters.body = data.body;
  39. }
  40. break;
  41. case "address":
  42. parameters.name = data.name;
  43. parameters.address = data.address;
  44. break;
  45. case "list":
  46. parameters.title = data.title;
  47. parameters.items = data.items;
  48. break;
  49. default:
  50. var err = new Error("Invalid type");
  51. if(callback) {
  52. return callback(err);
  53. } else {
  54. throw err;
  55. }
  56. break;
  57. }
  58. var res = ajaxReq(pbPush, "POST", parameters, false, callback);
  59. if(!callback) {
  60. return res;
  61. }
  62. };
  63.  
  64. pb.pushFile = function(devId, email, fileHandle, body, callback) {
  65. var type = "file_type=" + encodeURIComponent(fileHandle.type);
  66. var name = "file_name=" + encodeURIComponent(fileHandle.name);
  67. var upReqURL = pbUpReq + "?" + type + "&" + name;
  68. var upReqFunc = !callback ? null : function(err, res) {
  69. if(err) {
  70. return callback(err);
  71. } else {
  72. try {
  73. doPushFile(res, devId, email, fileHandle, body, callback);
  74. } catch(err2) {
  75. return callback(err2);
  76. }
  77. }
  78. };
  79. var res = ajaxReq(upReqURL, "GET", null, false, upReqFunc);
  80. if(!callback) {
  81. return doPushFile(res, devId, email, fileHandle, body);
  82. }
  83. };
  84.  
  85. var doPushFile = function(ajax, devId, email, fileHandle, body, callback) {
  86. var fileInfo = new FormData();
  87. fileInfo.append("awsaccesskeyid", ajax.data.awsaccesskeyid);
  88. fileInfo.append("acl", ajax.data.acl);
  89. fileInfo.append("key", ajax.data.key);
  90. fileInfo.append("signature", ajax.data.signature);
  91. fileInfo.append("policy", ajax.data.policy);
  92. fileInfo.append("content-type", fileHandle.type);
  93. fileInfo.append("file", fileHandle);
  94. ajaxReq(ajax.upload_url, "POST", fileInfo, true, null);
  95. var parameters = {
  96. file_name: fileHandle.name,
  97. file_type: fileHandle.type,
  98. file_url: ajax.file_url,
  99. type: "file"
  100. };
  101. if(body) {
  102. parameters.body = body;
  103. }
  104.  
  105. if(email && devId) {
  106. var err = new Error("Cannot push to both device and contact");
  107. if(callback) {
  108. return callback(err);
  109. } else {
  110. throw err;
  111. }
  112. } else if(email) {
  113. parameters.email = email;
  114. } else if(devId) {
  115. parameters.device_iden = devId;
  116. } else {
  117. var err2 = new Error("Must push to either device or contact");
  118. if(callback) {
  119. return callback(err2);
  120. } else {
  121. throw err2;
  122. }
  123. }
  124. var res = ajaxReq(pbPush, "POST", parameters, false, callback);
  125. if(!callback) {
  126. return res;
  127. }
  128. };
  129.  
  130. pb.deletePush = function(pushId, callback) {
  131. var res = ajaxReq(pbPush + "/" + pushId, "DELETE", null, false, callback);
  132. if(!callback) {
  133. return res;
  134. }
  135. };
  136.  
  137. pb.pushHistory = function(modifiedAfter, cursor, callback) {
  138. if(typeof modifiedAfter === 'function') {
  139. callback = modifiedAfter;
  140. modifiedAfter = null;
  141. } else if (typeof cursor === 'function') {
  142. callback = cursor;
  143. cursor = null;
  144. }
  145. var parameters = null;
  146. if(modifiedAfter) {
  147. parameters = {
  148. modified_after: modifiedAfter
  149. };
  150. }
  151. if(cursor) {
  152. parameters = parameters || {};
  153. parameters.cursor = cursor;
  154. }
  155. var res = ajaxReq(pbPush, "GET", parameters, false, callback);
  156. if(!callback) {
  157. return res;
  158. }
  159. };
  160.  
  161. pb.devices = function(callback) {
  162. var res = ajaxReq(pbDevice, "GET", null, false, callback);
  163. if(!callback) {
  164. return res;
  165. }
  166. };
  167.  
  168. pb.deleteDevice = function(devId, callback) {
  169. var res = ajaxReq(pbDevice + "/" + devId, "DELETE", null, false, callback);
  170. if(!callback) {
  171. return res;
  172. }
  173. };
  174.  
  175. pb.contacts = function(callback) {
  176. var res = ajaxReq(pbContact, "GET", null, false, callback);
  177. if(!callback) {
  178. return res;
  179. }
  180. };
  181.  
  182. pb.deleteContact = function(contId, callback) {
  183. var res = ajaxReq(pbContact + "/" + contId, null, false, callback);
  184. if(!callback) {
  185. return res;
  186. }
  187. };
  188.  
  189. pb.user = function(callback) {
  190. var res = ajaxReq(pbUser, "GET", null, false, callback);
  191. if(!callback) {
  192. return res;
  193. }
  194. };
  195.  
  196. var ajaxReq = function(url, verb, parameters, fileUpload, callback) {
  197. if(!pb.APIKey) {
  198. var err = new Error("API Key for Pushbullet not set");
  199. if(callback) {
  200. return callback(err);
  201. } else {
  202. throw err;
  203. }
  204. } else {
  205. var ajax = new XMLHttpRequest();
  206. var async = false;
  207. if(callback) {
  208. async = true;
  209. ajax.onreadystatechange = function() {
  210. if(ajax.readyState === httpReqDone) {
  211. var res = null;
  212. try {
  213. res = handleResponse(ajax);
  214. } catch(err) {
  215. return callback(err);
  216. }
  217. return callback(null, res);
  218. }
  219. };
  220. }
  221. if(verb === "GET") {
  222. var queryParams = [];
  223. for(var key in parameters) {
  224. queryParams.push(key + '=' + parameters[key]);
  225. }
  226. var queryString = queryParams.join("&");
  227. url += "?" + queryString;
  228. parameters = null;
  229. }
  230. ajax.open(verb, url, async);
  231. if(!fileUpload) {
  232. ajax.setRequestHeader("Authorization", "Basic " + window.btoa(pb.APIKey + ":"));
  233. ajax.setRequestHeader("Content-Type", "application/json");
  234. parameters = JSON.stringify(parameters);
  235. }
  236. if(parameters) {
  237. ajax.send(parameters);
  238. } else {
  239. ajax.send();
  240. }
  241.  
  242. if(!async) {
  243. return handleResponse(ajax);
  244. }
  245. }
  246. };
  247.  
  248. var handleResponse = function(ajax) {
  249. if(ajax.status !== httpResGood && ajax.status !== httpResNoCont) {
  250. throw new Error(ajax.status + ": " + ajax.response);
  251. }
  252. try {
  253. return JSON.parse(ajax.response);
  254. } catch(err) {
  255. return ajax.response;
  256. }
  257. };
  258.  
  259. return pb;
  260. }());