// Insert older (-16 days) Stripe invoices into coco database analytics collection if (process.argv.length !== 4) { log("Usage: node <script> <Stripe API key> <mongo connection Url>"); process.exit(); } var scriptStartTime = new Date(); var stripeAPIKey = process.argv[2]; var mongoConnUrl = process.argv[3]; var stripe = require("stripe")(stripeAPIKey); var MongoClient = require('mongodb').MongoClient; getInvoices(function(invoices) { log("Invoice count: " + invoices.length); insertInvoices(invoices, function() { log("Script runtime: " + (new Date() - scriptStartTime)); process.exit(0); }); }); function log(str) { console.log(new Date().toISOString() + " " + str); } function getInvoices(done) { var sixteenDaysAgo = new Date() sixteenDaysAgo.setUTCDate(sixteenDaysAgo.getUTCDate() - 16); invoiceMaxTimestamp = Math.floor(sixteenDaysAgo.getTime() / 1000); var options = {limit: 100, date: {lt: invoiceMaxTimestamp}}; var invoices = []; getInvoicesHelper = function(options, done) { // log("getInvoicesHelper " + invoices.length + " " + options.starting_after); stripe.invoices.list(options, function (err, result) { if (err) { console.log(err); return; } invoices = invoices.concat(result.data); if (result.has_more) { options.starting_after = result.data[result.data.length - 1].id getInvoicesHelper(options, done); } else { done(invoices); } }); }; getInvoicesHelper(options, done); } function insertInvoices(invoices, done) { var docs = []; for (var i = 0; i < invoices.length; i++) { docs.push({ _id: invoices[i].id, date: invoices[i].date, properties: invoices[i] }); } MongoClient.connect(mongoConnUrl, function (err, db) { if (err) { console.log(err); return done(); } insertInvoicesHelper = function() { var doc = docs.pop(); if (!doc) { db.close(); return done(); } db.collection('analytics.stripe.invoices').save(doc, function(err, result) { if (err) { console.log(err); db.close(); return done(); } insertInvoicesHelper(); }); }; insertInvoicesHelper(); }); }