twitter-lite-older-crypto
Version:
Tiny, full-featured client/server REST/stream library for the Twitter API
3 lines (2 loc) • 4.83 kB
JavaScript
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t():"function"==typeof define&&define.amd?define(t):t()}(0,function(){var e=require("crypto-js"),t=require("crypto-js/enc-base64"),r=require("oauth-1.0a"),n=require("cross-fetch"),o=require("querystring"),s=require("./stream"),i=function(e,t){return void 0===t&&(t="1.1"),"https://"+e+".twitter.com/"+t},a={subdomain:"api",consumer_key:null,consumer_secret:null,access_token_key:null,access_token_secret:null,bearer_token:null,version:"1.1"},u=["direct_messages/events/new","direct_messages/welcome_messages/new","direct_messages/welcome_messages/rules/new","media/metadata/create","collections/entries/curate"],c={"Content-Type":"application/json",Accept:"application/json"};function h(e){return e.replace(/!/g,"%21").replace(/\*/g,"%2A").replace(/'/g,"%27").replace(/\(/g,"%28").replace(/\)/g,"%29")}var d=function(n){var o,s=Object.assign({},a,n);this.authType=s.bearer_token?"App":"User",this.client=r({consumer:{key:(o={key:s.consumer_key,secret:s.consumer_secret}).key,secret:o.secret},signature_method:"HMAC-SHA1",hash_function:function(r,n){return t.stringify(e.HmacSHA1(r,n))}}),this.token={key:s.access_token_key,secret:s.access_token_secret},this.url=i(s.subdomain,s.version),this.oauth=i(s.subdomain,"oauth"),this.config=s};d._handleResponse=function(e){try{var t=e.headers;return e.ok?204===e.status||"0"===e.headers.get("content-length")?Promise.resolve({_headers:t}):Promise.resolve(e.json().then(function(e){return e._headers=t,e})):Promise.resolve(e.json()).then(function(e){throw Object.assign({},{_headers:t},e)})}catch(e){return Promise.reject(e)}},d._handleResponseTextOrJson=function(e){try{return Promise.resolve(e.text()).then(function(t){if(e.ok)return o.parse(t);var r;try{r=JSON.parse(t)}catch(e){r=t}return Promise.reject(r)})}catch(e){return Promise.reject(e)}},d.prototype.getBearerToken=function(){try{var e={Authorization:"Basic "+Buffer.from(this.config.consumer_key+":"+this.config.consumer_secret).toString("base64"),"Content-Type":"application/x-www-form-urlencoded;charset=UTF-8"};return Promise.resolve(n("https://api.twitter.com/oauth2/token",{method:"POST",body:"grant_type=client_credentials",headers:e}).then(d._handleResponse))}catch(e){return Promise.reject(e)}},d.prototype.getRequestToken=function(e){try{var t={url:this.oauth+"/request_token",method:"POST"},r={};e&&(r={oauth_callback:e}),r&&(t.url+="?"+o.stringify(r));var s=this.client.toHeader(this.client.authorize(t,{}));return Promise.resolve(n(t.url,{method:"POST",headers:Object.assign({},c,s)}).then(d._handleResponseTextOrJson))}catch(e){return Promise.reject(e)}},d.prototype.getAccessToken=function(e){try{var t={url:this.oauth+"/access_token",method:"POST"},r={oauth_verifier:e.oauth_verifier,oauth_token:e.oauth_token};r.oauth_verifier&&r.oauth_token&&(t.url+="?"+o.stringify(r));var s=this.client.toHeader(this.client.authorize(t));return Promise.resolve(n(t.url,{method:"POST",headers:Object.assign({},c,s)}).then(d._handleResponseTextOrJson))}catch(e){return Promise.reject(e)}},d.prototype._makeRequest=function(e,t,r){var n={url:this.url+"/"+t+".json",method:e};return r&&("POST"===e?n.data=r:n.url+="?"+o.stringify(r)),{requestData:n,headers:"User"===this.authType?this.client.toHeader(this.client.authorize(n,this.token)):{Authorization:"Bearer "+this.config.bearer_token}}},d.prototype.get=function(e,t){var r=this._makeRequest("GET",e,t);return n(r.requestData.url,{headers:r.headers}).then(d._handleResponse)},d.prototype.post=function(e,t){var r=this._makeRequest("POST",e,u.includes(e)?null:t),s=r.requestData,i=Object.assign({},c,r.headers);return u.includes(e)?t=JSON.stringify(t):(t=h(o.stringify(t)),i["Content-Type"]="application/x-www-form-urlencoded"),n(s.url,{method:"POST",headers:i,body:t}).then(d._handleResponse)},d.prototype.put=function(e,t,r){var o=this._makeRequest("PUT",e,t),s=o.requestData,i=Object.assign({},c,o.headers);return r=JSON.stringify(r),n(s.url,{method:"PUT",headers:i,body:r}).then(d._handleResponse)},d.prototype.stream=function(e,t){var r=this;if("User"!==this.authType)throw new Error("Streams require user context authentication");var a=new s,u={url:i("stream")+"/"+e+".json",method:"POST"};t&&(u.data=t);var c=this.client.toHeader(this.client.authorize(u,this.token));return n(u.url,{method:"POST",headers:Object.assign({},c,{"Content-Type":"application/x-www-form-urlencoded"}),body:h(o.stringify(t))}).then(function(e){a.destroy=r.stream.destroy=function(){return e.body.destroy()},e.ok?a.emit("start",e):(e._headers=e.headers,a.emit("error",e)),e.body.on("data",function(e){return a.parse(e)}).on("error",function(e){return a.emit("error",e)}).on("end",function(){return a.emit("end",e)})}).catch(function(e){return a.emit("error",e)}),a},module.exports=d});
//# sourceMappingURL=twitter.umd.js.map