twitter-lite-older-crypto
Version:
Tiny, full-featured client/server REST/stream library for the Twitter API
3 lines (2 loc) • 4.69 kB
JavaScript
var e=require("crypto-js"),t=require("crypto-js/enc-base64"),r=require("oauth-1.0a"),n=require("cross-fetch"),s=require("querystring"),o=require("./stream"),a=function(e,t){return void 0===t&&(t="1.1"),"https://"+e+".twitter.com/"+t},i={subdomain:"api",consumer_key:null,consumer_secret:null,access_token_key:null,access_token_secret:null,bearer_token:null,version:"1.1"},c=["direct_messages/events/new","direct_messages/welcome_messages/new","direct_messages/welcome_messages/rules/new","media/metadata/create","collections/entries/curate"],u={"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 l=function(n){var s,o=Object.assign({},i,n);this.authType=o.bearer_token?"App":"User",this.client=r({consumer:{key:(s={key:o.consumer_key,secret:o.consumer_secret}).key,secret:s.secret},signature_method:"HMAC-SHA1",hash_function:function(r,n){return t.stringify(e.HmacSHA1(r,n))}}),this.token={key:o.access_token_key,secret:o.access_token_secret},this.url=a(o.subdomain,o.version),this.oauth=a(o.subdomain,"oauth"),this.config=o};l._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)}},l._handleResponseTextOrJson=function(e){try{return Promise.resolve(e.text()).then(function(t){if(e.ok)return s.parse(t);var r;try{r=JSON.parse(t)}catch(e){r=t}return Promise.reject(r)})}catch(e){return Promise.reject(e)}},l.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(l._handleResponse))}catch(e){return Promise.reject(e)}},l.prototype.getRequestToken=function(e){try{var t={url:this.oauth+"/request_token",method:"POST"},r={};e&&(r={oauth_callback:e}),r&&(t.url+="?"+s.stringify(r));var o=this.client.toHeader(this.client.authorize(t,{}));return Promise.resolve(n(t.url,{method:"POST",headers:Object.assign({},u,o)}).then(l._handleResponseTextOrJson))}catch(e){return Promise.reject(e)}},l.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+="?"+s.stringify(r));var o=this.client.toHeader(this.client.authorize(t));return Promise.resolve(n(t.url,{method:"POST",headers:Object.assign({},u,o)}).then(l._handleResponseTextOrJson))}catch(e){return Promise.reject(e)}},l.prototype._makeRequest=function(e,t,r){var n={url:this.url+"/"+t+".json",method:e};return r&&("POST"===e?n.data=r:n.url+="?"+s.stringify(r)),{requestData:n,headers:"User"===this.authType?this.client.toHeader(this.client.authorize(n,this.token)):{Authorization:"Bearer "+this.config.bearer_token}}},l.prototype.get=function(e,t){var r=this._makeRequest("GET",e,t);return n(r.requestData.url,{headers:r.headers}).then(l._handleResponse)},l.prototype.post=function(e,t){var r=this._makeRequest("POST",e,c.includes(e)?null:t),o=r.requestData,a=Object.assign({},u,r.headers);return c.includes(e)?t=JSON.stringify(t):(t=h(s.stringify(t)),a["Content-Type"]="application/x-www-form-urlencoded"),n(o.url,{method:"POST",headers:a,body:t}).then(l._handleResponse)},l.prototype.put=function(e,t,r){var s=this._makeRequest("PUT",e,t),o=s.requestData,a=Object.assign({},u,s.headers);return r=JSON.stringify(r),n(o.url,{method:"PUT",headers:a,body:r}).then(l._handleResponse)},l.prototype.stream=function(e,t){var r=this;if("User"!==this.authType)throw new Error("Streams require user context authentication");var i=new o,c={url:a("stream")+"/"+e+".json",method:"POST"};t&&(c.data=t);var u=this.client.toHeader(this.client.authorize(c,this.token));return n(c.url,{method:"POST",headers:Object.assign({},u,{"Content-Type":"application/x-www-form-urlencoded"}),body:h(s.stringify(t))}).then(function(e){i.destroy=r.stream.destroy=function(){return e.body.destroy()},e.ok?i.emit("start",e):(e._headers=e.headers,i.emit("error",e)),e.body.on("data",function(e){return i.parse(e)}).on("error",function(e){return i.emit("error",e)}).on("end",function(){return i.emit("end",e)})}).catch(function(e){return i.emit("error",e)}),i},module.exports=l;
//# sourceMappingURL=twitter.js.map