UNPKG

our-groceries-client

Version:
167 lines (153 loc) 14 kB
'use strict'; process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0"; var request = require('request'), urls = require('./urls'), jar = request.jar(), defaultHandler = require('./default-handler'); var request = request.defaults({ jar: jar, headers: { 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36' } }); function OurGroceriesClient(appId) { this._appId = appId; } OurGroceriesClient.prototype.authenticate = function (username, password, complete) { complete = complete || defaultHandler; console.log("Authenticating"); var self = this; request.post({ url: urls.signIn, form: { emailAddress: username, action: "sign-me-in", password: password, staySignedIn: "on" }, headers: { 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36', 'Referer': 'https://www.ourgroceries.com/sign-in', 'Origin': 'https://www.ourgroceries.com' } }, function (err, response, body) { if (err) { console.log("Error Authenticating: " + err); complete({ success: false, error: err }); } else { self.auth = jar.getCookieString(urls.signIn); if (self.auth) { console.log("Success"); self.getTeamId(function (teamIdResponse) { if (teamIdResponse.success) { self.teamId = teamIdResponse.teamId; complete({ success: true }); } else { complete(teamIdResponse); } }); } else { complete({ success: false, error: "Invalid Credentials" }); } } }); }; OurGroceriesClient.prototype.getTeamId = function (complete) { complete = complete || defaultHandler; console.log("Getting team id"); request(urls.yourLists, function (err, response, body) { if (err) { console.log("Error getting team id:" + err); complete({ success: false, error: err }); } else { var regex = /g_teamId = \"([A-Za-z0-9]*)\"/gm; var teamId = regex.exec(body)[1]; console.log("Success fetching team id: " + teamId); complete({ success: true, teamId: teamId }); } }); }; //{"recipes":[],"shoppingLists":[{"activeCount":0,"name":"Duane Reade","id":"IiYWzpD8UeuLOoC-c6iEda"},{"activeCount":1,"name":"Fairway","id":"HeRpch6y09FJ10Vrxkekxt"},{"activeCount":3,"name":"Health Nuts","id":"C-NhAwDy061LKS3K7PZmri"},{"activeCount":0,"name":"Staples","id":"CVa5TtIWkkFJXBb9ILUppr"},{"activeCount":6,"name":"Trader Joes","id":"PStVFIyKkj5K6GPaxUJynn"},{"activeCount":3,"name":"West Side Market","id":"WHfkG3KbqpviqQSiP0B8Rd"},{"activeCount":0,"name":"Whole Foods","id":"qcrVcp5fhT0KecyOACaAkS"}],"command":"getOverview"} OurGroceriesClient.prototype.getLists = function (complete) { complete = complete || defaultHandler; var self = this; request.post({ url: urls.yourLists, headers: { Accept: "application/json, text/javascript, */*", Origin: "https://www.ourgroceries.com", Referer: "https://www.ourgroceries.com/your-list", "X-Requested-With": "XMLHttpRequest", "Host": "www.ourgroceries.com", "Content-Type": "application/json" }, json: { command: "getOverview", teamId: self.teamId } }, function (err, response, body) { if (err) { complete({ success: false, error: err }); } else { complete({ success: true, response: body }); } }); }; OurGroceriesClient.prototype.addToList = function (listId, itemName, quantity, complete) { complete = complete || defaultHandler; var self = this; request.post({ url: urls.yourLists, headers: { Accept: "application/json, text/javascript, */*", Origin: "https://www.ourgroceries.com", Referer: "https://www.ourgroceries.com/your-list", "X-Requested-With": "XMLHttpRequest", "Host": "www.ourgroceries.com", "Content-Type": "application/json" }, json: { command: "insertItem", teamId: self.teamId, listId: listId, value: this.__generateItemName(itemName, quantity) } }, function (err, response, body) { if (err) { complete({ success: false, error: err }); } else { complete({ success: true, response: body }); } }); }; OurGroceriesClient.prototype.getList = function (listId, complete) { complete = complete || defaultHandler; var self = this; request.post({ url: urls.yourLists, headers: { "Accept": "application/json, text/javascript, */*", "Origin": "https://www.ourgroceries.com", "Referer": "https://www.ourgroceries.com/your-list", "X-Requested-With": "XMLHttpRequest", "Host": "www.ourgroceries.com", "Content-Type": "application/json" }, json: { command: "getList", teamId: self.teamId, listId: listId } }, function (err, response, body) { if (err) { complete({ success: false, error: err }); } else { complete({ success: true, response: body }); } }); }; OurGroceriesClient.prototype.findList = function (lists, listName) { listName = listName.toLowerCase().replace(/\W/g, ''); var allLists = lists.map(function (item) { item.matchName = item.name.toLowerCase().replace(/\W/g, ''); return item; }); var candidates = allLists.filter(function (item) { return item.matchName.indexOf(listName) === 0 || listName.indexOf(item.matchName) === 0; }); return candidates.length > 0 ? candidates[0] : null; }; OurGroceriesClient.prototype.__generateItemName = function (itemName, quantity) { if (!quantity || quantity == 0) return itemName; return itemName + ' (' + quantity + ')'; }; module.exports = OurGroceriesClient; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlcyI6WyJvdXItZ3JvY2VyaWVzLWNsaWVudC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnByb2Nlc3MuZW52Lk5PREVfVExTX1JFSkVDVF9VTkFVVEhPUklaRUQgPSBcIjBcIjtcblxudmFyIHJlcXVlc3QgPSByZXF1aXJlKCdyZXF1ZXN0JyksXG4gICAgdXJscyA9IHJlcXVpcmUoJy4vdXJscycpLFxuICAgIGphciA9IHJlcXVlc3QuamFyKCksXG4gICAgZGVmYXVsdEhhbmRsZXIgPSByZXF1aXJlKCcuL2RlZmF1bHQtaGFuZGxlcicpO1xuXG52YXIgcmVxdWVzdCA9IHJlcXVlc3QuZGVmYXVsdHMoe1xuICBqYXI6IGphcixcbiAgaGVhZGVyczoge1xuICAgICdVc2VyLUFnZW50JzogJ01vemlsbGEvNS4wIChXaW5kb3dzIE5UIDYuMSkgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLzQxLjAuMjIyOC4wIFNhZmFyaS81MzcuMzYnXG4gIH1cbn0pO1xuXG5mdW5jdGlvbiBPdXJHcm9jZXJpZXNDbGllbnQoYXBwSWQpIHtcbiAgdGhpcy5fYXBwSWQgPSBhcHBJZDtcbn1cblxuT3VyR3JvY2VyaWVzQ2xpZW50LnByb3RvdHlwZS5hdXRoZW50aWNhdGUgPSBmdW5jdGlvbiAodXNlcm5hbWUsIHBhc3N3b3JkLCBjb21wbGV0ZSkge1xuICBjb21wbGV0ZSA9IGNvbXBsZXRlIHx8IGRlZmF1bHRIYW5kbGVyO1xuICBjb25zb2xlLmxvZyhcIkF1dGhlbnRpY2F0aW5nXCIpO1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHJlcXVlc3QucG9zdCh7XG4gICAgdXJsOiB1cmxzLnNpZ25JbixcbiAgICBmb3JtOiB7XG4gICAgICBlbWFpbEFkZHJlc3M6IHVzZXJuYW1lLFxuICAgICAgYWN0aW9uOiBcInNpZ24tbWUtaW5cIixcbiAgICAgIHBhc3N3b3JkOiBwYXNzd29yZCxcbiAgICAgIHN0YXlTaWduZWRJbjogXCJvblwiXG4gICAgfSxcbiAgICBoZWFkZXJzOiB7XG4gICAgICAnVXNlci1BZ2VudCc6ICdNb3ppbGxhLzUuMCAoV2luZG93cyBOVCA2LjEpIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZS80MS4wLjIyMjguMCBTYWZhcmkvNTM3LjM2JyxcbiAgICAgICdSZWZlcmVyJzogJ2h0dHBzOi8vd3d3Lm91cmdyb2Nlcmllcy5jb20vc2lnbi1pbicsXG4gICAgICAnT3JpZ2luJzogJ2h0dHBzOi8vd3d3Lm91cmdyb2Nlcmllcy5jb20nXG4gICAgfVxuICB9LCBmdW5jdGlvbiAoZXJyLCByZXNwb25zZSwgYm9keSkge1xuICAgIGlmIChlcnIpIHtcbiAgICAgIGNvbnNvbGUubG9nKFwiRXJyb3IgQXV0aGVudGljYXRpbmc6IFwiICsgZXJyKTtcbiAgICAgIGNvbXBsZXRlKHsgc3VjY2VzczogZmFsc2UsIGVycm9yOiBlcnIgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNlbGYuYXV0aCA9IGphci5nZXRDb29raWVTdHJpbmcodXJscy5zaWduSW4pO1xuICAgICAgaWYgKHNlbGYuYXV0aCkge1xuICAgICAgICBjb25zb2xlLmxvZyhcIlN1Y2Nlc3NcIik7XG4gICAgICAgIHNlbGYuZ2V0VGVhbUlkKGZ1bmN0aW9uICh0ZWFtSWRSZXNwb25zZSkge1xuICAgICAgICAgIGlmICh0ZWFtSWRSZXNwb25zZS5zdWNjZXNzKSB7XG4gICAgICAgICAgICBzZWxmLnRlYW1JZCA9IHRlYW1JZFJlc3BvbnNlLnRlYW1JZDtcbiAgICAgICAgICAgIGNvbXBsZXRlKHsgc3VjY2VzczogdHJ1ZSB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29tcGxldGUodGVhbUlkUmVzcG9uc2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb21wbGV0ZSh7IHN1Y2Nlc3M6IGZhbHNlLCBlcnJvcjogXCJJbnZhbGlkIENyZWRlbnRpYWxzXCIgfSk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbn07XG5cbk91ckdyb2Nlcmllc0NsaWVudC5wcm90b3R5cGUuZ2V0VGVhbUlkID0gZnVuY3Rpb24gKGNvbXBsZXRlKSB7XG4gIGNvbXBsZXRlID0gY29tcGxldGUgfHwgZGVmYXVsdEhhbmRsZXI7XG4gIGNvbnNvbGUubG9nKFwiR2V0dGluZyB0ZWFtIGlkXCIpO1xuICByZXF1ZXN0KHVybHMueW91ckxpc3RzLCBmdW5jdGlvbiAoZXJyLCByZXNwb25zZSwgYm9keSkge1xuICAgIGlmIChlcnIpIHtcbiAgICAgIGNvbnNvbGUubG9nKFwiRXJyb3IgZ2V0dGluZyB0ZWFtIGlkOlwiICsgZXJyKTtcbiAgICAgIGNvbXBsZXRlKHsgc3VjY2VzczogZmFsc2UsIGVycm9yOiBlcnIgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciByZWdleCA9IC9nX3RlYW1JZCA9IFxcXCIoW0EtWmEtejAtOV0qKVxcXCIvZ207XG4gICAgICB2YXIgdGVhbUlkID0gcmVnZXguZXhlYyhib2R5KVsxXTtcbiAgICAgIGNvbnNvbGUubG9nKFwiU3VjY2VzcyBmZXRjaGluZyB0ZWFtIGlkOiBcIiArIHRlYW1JZCk7XG4gICAgICBjb21wbGV0ZSh7IHN1Y2Nlc3M6IHRydWUsIHRlYW1JZDogdGVhbUlkIH0pO1xuICAgIH1cbiAgfSk7XG59O1xuLy97XCJyZWNpcGVzXCI6W10sXCJzaG9wcGluZ0xpc3RzXCI6W3tcImFjdGl2ZUNvdW50XCI6MCxcIm5hbWVcIjpcIkR1YW5lIFJlYWRlXCIsXCJpZFwiOlwiSWlZV3pwRDhVZXVMT29DLWM2aUVkYVwifSx7XCJhY3RpdmVDb3VudFwiOjEsXCJuYW1lXCI6XCJGYWlyd2F5XCIsXCJpZFwiOlwiSGVScGNoNnkwOUZKMTBWcnhrZWt4dFwifSx7XCJhY3RpdmVDb3VudFwiOjMsXCJuYW1lXCI6XCJIZWFsdGggTnV0c1wiLFwiaWRcIjpcIkMtTmhBd0R5MDYxTEtTM0s3UFptcmlcIn0se1wiYWN0aXZlQ291bnRcIjowLFwibmFtZVwiOlwiU3RhcGxlc1wiLFwiaWRcIjpcIkNWYTVUdElXa2tGSlhCYjlJTFVwcHJcIn0se1wiYWN0aXZlQ291bnRcIjo2LFwibmFtZVwiOlwiVHJhZGVyIEpvZXNcIixcImlkXCI6XCJQU3RWRkl5S2tqNUs2R1BheFVKeW5uXCJ9LHtcImFjdGl2ZUNvdW50XCI6MyxcIm5hbWVcIjpcIldlc3QgU2lkZSBNYXJrZXRcIixcImlkXCI6XCJXSGZrRzNLYnFwdmlxUVNpUDBCOFJkXCJ9LHtcImFjdGl2ZUNvdW50XCI6MCxcIm5hbWVcIjpcIldob2xlIEZvb2RzXCIsXCJpZFwiOlwicWNyVmNwNWZoVDBLZWN5T0FDYUFrU1wifV0sXCJjb21tYW5kXCI6XCJnZXRPdmVydmlld1wifVxuT3VyR3JvY2VyaWVzQ2xpZW50LnByb3RvdHlwZS5nZXRMaXN0cyA9IGZ1bmN0aW9uIChjb21wbGV0ZSkge1xuICBjb21wbGV0ZSA9IGNvbXBsZXRlIHx8IGRlZmF1bHRIYW5kbGVyO1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHJlcXVlc3QucG9zdCh7XG4gICAgdXJsOiB1cmxzLnlvdXJMaXN0cyxcbiAgICBoZWFkZXJzOiB7XG4gICAgICBBY2NlcHQ6IFwiYXBwbGljYXRpb24vanNvbiwgdGV4dC9qYXZhc2NyaXB0LCAqLypcIixcbiAgICAgIE9yaWdpbjogXCJodHRwczovL3d3dy5vdXJncm9jZXJpZXMuY29tXCIsXG4gICAgICBSZWZlcmVyOiBcImh0dHBzOi8vd3d3Lm91cmdyb2Nlcmllcy5jb20veW91ci1saXN0XCIsXG4gICAgICBcIlgtUmVxdWVzdGVkLVdpdGhcIjogXCJYTUxIdHRwUmVxdWVzdFwiLFxuICAgICAgXCJIb3N0XCI6IFwid3d3Lm91cmdyb2Nlcmllcy5jb21cIixcbiAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiXG4gICAgfSxcbiAgICBqc29uOiB7IGNvbW1hbmQ6IFwiZ2V0T3ZlcnZpZXdcIiwgdGVhbUlkOiBzZWxmLnRlYW1JZCB9XG4gIH0sIGZ1bmN0aW9uIChlcnIsIHJlc3BvbnNlLCBib2R5KSB7XG4gICAgaWYgKGVycikge1xuICAgICAgY29tcGxldGUoeyBzdWNjZXNzOiBmYWxzZSwgZXJyb3I6IGVyciB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29tcGxldGUoeyBzdWNjZXNzOiB0cnVlLCByZXNwb25zZTogYm9keSB9KTtcbiAgICB9XG4gIH0pO1xufTtcblxuT3VyR3JvY2VyaWVzQ2xpZW50LnByb3RvdHlwZS5hZGRUb0xpc3QgPSBmdW5jdGlvbiAobGlzdElkLCBpdGVtTmFtZSwgcXVhbnRpdHksIGNvbXBsZXRlKSB7XG4gIGNvbXBsZXRlID0gY29tcGxldGUgfHwgZGVmYXVsdEhhbmRsZXI7XG4gIHZhciBzZWxmID0gdGhpcztcblxuICByZXF1ZXN0LnBvc3Qoe1xuICAgIHVybDogdXJscy55b3VyTGlzdHMsXG4gICAgaGVhZGVyczoge1xuICAgICAgQWNjZXB0OiBcImFwcGxpY2F0aW9uL2pzb24sIHRleHQvamF2YXNjcmlwdCwgKi8qXCIsXG4gICAgICBPcmlnaW46IFwiaHR0cHM6Ly93d3cub3VyZ3JvY2VyaWVzLmNvbVwiLFxuICAgICAgUmVmZXJlcjogXCJodHRwczovL3d3dy5vdXJncm9jZXJpZXMuY29tL3lvdXItbGlzdFwiLFxuICAgICAgXCJYLVJlcXVlc3RlZC1XaXRoXCI6IFwiWE1MSHR0cFJlcXVlc3RcIixcbiAgICAgIFwiSG9zdFwiOiBcInd3dy5vdXJncm9jZXJpZXMuY29tXCIsXG4gICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIlxuICAgIH0sXG4gICAganNvbjogeyBjb21tYW5kOiBcImluc2VydEl0ZW1cIiwgdGVhbUlkOiBzZWxmLnRlYW1JZCwgbGlzdElkOiBsaXN0SWQsIHZhbHVlOiB0aGlzLl9fZ2VuZXJhdGVJdGVtTmFtZShpdGVtTmFtZSwgcXVhbnRpdHkpIH1cbiAgfSwgZnVuY3Rpb24gKGVyciwgcmVzcG9uc2UsIGJvZHkpIHtcbiAgICBpZiAoZXJyKSB7XG4gICAgICBjb21wbGV0ZSh7IHN1Y2Nlc3M6IGZhbHNlLCBlcnJvcjogZXJyIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb21wbGV0ZSh7IHN1Y2Nlc3M6IHRydWUsIHJlc3BvbnNlOiBib2R5IH0pO1xuICAgIH1cbiAgfSk7XG59O1xuXG5PdXJHcm9jZXJpZXNDbGllbnQucHJvdG90eXBlLmdldExpc3QgPSBmdW5jdGlvbiAobGlzdElkLCBjb21wbGV0ZSkge1xuICBjb21wbGV0ZSA9IGNvbXBsZXRlIHx8IGRlZmF1bHRIYW5kbGVyO1xuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgcmVxdWVzdC5wb3N0KHtcbiAgICB1cmw6IHVybHMueW91ckxpc3RzLFxuICAgIGhlYWRlcnM6IHtcbiAgICAgIFwiQWNjZXB0XCI6IFwiYXBwbGljYXRpb24vanNvbiwgdGV4dC9qYXZhc2NyaXB0LCAqLypcIixcbiAgICAgIFwiT3JpZ2luXCI6IFwiaHR0cHM6Ly93d3cub3VyZ3JvY2VyaWVzLmNvbVwiLFxuICAgICAgXCJSZWZlcmVyXCI6IFwiaHR0cHM6Ly93d3cub3VyZ3JvY2VyaWVzLmNvbS95b3VyLWxpc3RcIixcbiAgICAgIFwiWC1SZXF1ZXN0ZWQtV2l0aFwiOiBcIlhNTEh0dHBSZXF1ZXN0XCIsXG4gICAgICBcIkhvc3RcIjogXCJ3d3cub3VyZ3JvY2VyaWVzLmNvbVwiLFxuICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCJcbiAgICB9LFxuICAgIGpzb246IHsgY29tbWFuZDogXCJnZXRMaXN0XCIsIHRlYW1JZDogc2VsZi50ZWFtSWQsIGxpc3RJZDogbGlzdElkIH1cbiAgfSwgZnVuY3Rpb24gKGVyciwgcmVzcG9uc2UsIGJvZHkpIHtcbiAgICBpZiAoZXJyKSB7XG4gICAgICBjb21wbGV0ZSh7IHN1Y2Nlc3M6IGZhbHNlLCBlcnJvcjogZXJyIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb21wbGV0ZSh7IHN1Y2Nlc3M6IHRydWUsIHJlc3BvbnNlOiBib2R5IH0pO1xuICAgIH1cbiAgfSk7XG59O1xuXG5PdXJHcm9jZXJpZXNDbGllbnQucHJvdG90eXBlLmZpbmRMaXN0ID0gZnVuY3Rpb24gKGxpc3RzLCBsaXN0TmFtZSkge1xuICBsaXN0TmFtZSA9IGxpc3ROYW1lLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXFxXL2csICcnKTtcbiAgdmFyIGFsbExpc3RzID0gbGlzdHMubWFwKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgaXRlbS5tYXRjaE5hbWUgPSBpdGVtLm5hbWUudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9cXFcvZywgJycpO1xuICAgIHJldHVybiBpdGVtO1xuICB9KTtcbiAgdmFyIGNhbmRpZGF0ZXMgPSBhbGxMaXN0cy5maWx0ZXIoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICByZXR1cm4gaXRlbS5tYXRjaE5hbWUuaW5kZXhPZihsaXN0TmFtZSkgPT09IDAgfHwgbGlzdE5hbWUuaW5kZXhPZihpdGVtLm1hdGNoTmFtZSkgPT09IDA7XG4gIH0pO1xuICByZXR1cm4gY2FuZGlkYXRlcy5sZW5ndGggPiAwID8gY2FuZGlkYXRlc1swXSA6IG51bGw7XG59O1xuXG5PdXJHcm9jZXJpZXNDbGllbnQucHJvdG90eXBlLl9fZ2VuZXJhdGVJdGVtTmFtZSA9IGZ1bmN0aW9uIChpdGVtTmFtZSwgcXVhbnRpdHkpIHtcbiAgaWYgKCFxdWFudGl0eSB8fCBxdWFudGl0eSA9PSAwKSByZXR1cm4gaXRlbU5hbWU7XG4gIHJldHVybiBpdGVtTmFtZSArICcgKCcgKyBxdWFudGl0eSArICcpJztcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gT3VyR3JvY2VyaWVzQ2xpZW50OyJdLCJmaWxlIjoib3VyLWdyb2Nlcmllcy1jbGllbnQuanMiLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ==