{"version":3,"sources":["jsdelivr-header.js","/npm/ts-retro@0.4.0/index.js"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;ACJA,IAAI,GAAK,QAAQ,MACb,OAAS,QAAQ,aACjB,QAAU,QAAQ,aAClB,QAAU,QAAQ,cAClB,KAAO,QAAQ,QACf,MAAQ,QAAQ,SAChB,QAAU,QAAQ,YAClB,SAAW,QAAQ,YACnB,IAAM,QAAQ,SAEd,eAAiB,SAAS,GAC5B,IACI,EADA,EAAO,QAAQ,WAEnB,IACE,EAAS,SAAS,aAAa,EACjC,CAAE,MAAO,GACP,EAAS,CAAC,CACZ,CAEA,OAAO,IAAI,KAAK,SAAQ,SAAS,EAAS,GACxC,GAAI,EAAO,QAAU,EAAK,MACxB,EAAQ,EAAO,WACV,KAAI,EAAK,oBAiCd,KAAM,qCAhCN,EAAK,sBAAsB,MAAK,SAAS,GACvC,QACG,IAAI,kDACJ,KAAK,CACJ,WAAY,WACZ,SAAU,EAAY,SACtB,SAAU,EAAY,SACtB,UAAW,EAAK,GAChB,cAAe,EAAK,SAErB,IAAI,SAAU,oBACd,KAAI,SAAS,EAAK,GAEjB,IAAK,GAAO,EAAI,GAId,OAHA,EAAO,MAAQ,EAAI,KAAK,aACxB,SAAS,cAAc,EAAM,QAC7B,EAAQ,EAAO,OAIE,MAAf,EAAI,QAAqC,kBAAnB,EAAI,KAAK,MACjC,QAAQ,MAAM,MAAM,IAAI,gCAExB,QAAQ,MAAM,MAAM,IAAI,0CACX,EAAI,OADO,cAER,KAAK,UAAU,EAAI,QAGrC,QAAQ,KAAK,EACf,GACJ,GAGF,CACF,GACF,EAEI,oBAAsB,WACxB,OAAO,IAAI,KAAK,SAAQ,SAAS,EAAQ,GACvC,IAAG,YACD,EAAO,CACL,SAAU,QAAQ,iBAAmB,OAAO,eAC5C,SAAU,QAAQ,iBAAmB,OAAO,SAAS,gBAEzD,GACF,GACF,EAEI,UAAY,CACd,GAAI,uCACJ,OAAQ,uCACR,oBAAqB,qBAGnB,KAAO,SAAS,GAClB,UAAU,MAAQ,QAAQ,UAAY,QAAQ,SAC9C,eAAe,WACZ,MAAK,SAAS,GACb,IAAI,WAAW,EAAO,GACnB,MAAK,SAAS,GACR,IACH,QAAQ,MAAM,MAAM,IAAI,cAAgB,EAAa,iBACrD,QAAQ,KAAK,IAGf,IAAI,gBAAgB,EAAO,EAAQ,IAChC,MAAK,SAAS,GAEb,QAAQ,IAAI,oBAAsB,EAAQ,QAC1C,QAAQ,IAAI,sBAAwB,IAAI,UAAU,GAAS,QAC3D,QAAQ,IAAI,6BAA+B,IAAI,gBAAgB,IAC/D,QAAQ,IAAI,2BAA6B,IAAI,gBAAgB,IAC7D,IAAI,EAAS,IAAI,aAAa,GAC9B,QAAQ,IAAI,wBAA0B,GAEtC,QAAQ,IAAI,8BACZ,IAAI,UAAU,GAAS,SAAS,EAAM,GACpC,QAAQ,IAAI,EAAO,KAAO,EAAS,MAAS,EAAS,EAAU,KAAK,QAAQ,GAAK,KACnF,GACF,GACJ,GACJ,GACJ,EAEA,QACG,UAAU,YACV,OAAO,4BAA6B,+BACpC,OAAO,4BAA6B,uBACpC,QAAO,SAAS,GACf,KAAK,EACP,IACC,MAAM,QAAQ","file":"/npm/ts-retro@0.4.0/index.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/ts-retro@0.4.0/index.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","#!/usr/bin/env node\r\n\r\nvar co = require('co');\r\nvar prompt = require('co-prompt');\r\nvar program = require('commander');\r\nvar request = require('superagent');\r\nvar RSVP = require('rsvp');\r\nvar chalk = require('chalk');\r\nvar homeDir = require('home-dir');\r\nvar jsonfile = require('jsonfile');\r\nvar lib = require('./lib');\r\n\r\nvar getAccessToken = function(opts) {\r\n  var path = homeDir('/.retro');\r\n  var config;\r\n  try {\r\n    config = jsonfile.readFileSync(path);\r\n  } catch (e) {\r\n    config = {};\r\n  }\r\n\r\n  return new RSVP.Promise(function(resolve, reject) {\r\n    if (config.token && !opts.force) {\r\n      resolve(config.token);\r\n    } else if (opts.credentialsProvider) {\r\n      opts.credentialsProvider().then(function(credentials) {\r\n        request\r\n          .get('https://teleosoft.axosoft.com/api/oauth2/token')\r\n          .send({\r\n            grant_type: \"password\",\r\n            username: credentials.username,\r\n            password: credentials.password,\r\n            client_id: opts.id,\r\n            client_secret: opts.secret\r\n          })\r\n          .set('Accept', 'application/json')\r\n          .end(function(err, res) {\r\n\r\n            if (!err && res.ok) {\r\n              config.token = res.body.access_token;\r\n              jsonfile.writeFileSync(path, config);\r\n              resolve(config.token);\r\n              return;\r\n            }\r\n\r\n            if (res.status === 400 && res.body.error === \"invalid_grant\") {\r\n              console.error(chalk.red('\\nBad username or password!'));\r\n            } else {\r\n              console.error(chalk.red('\\nAn unknown error has occured.\\n' +\r\n                'code: ' + res.status + '\\n' +\r\n                'message: ' + JSON.stringify(res.body)\r\n              ));\r\n            }\r\n            process.exit(1);\r\n          });\r\n      });\r\n    } else {\r\n      throw 'must specify a credentialsProvider';\r\n    }\r\n  });\r\n}\r\n\r\nvar credentialsProvider = function() {\r\n  return new RSVP.Promise(function(accept, reject) {\r\n    co(function*() {\r\n      accept({\r\n        username: program.username || (yield prompt('username: ')),\r\n        password: program.password || (yield prompt.password('password: '))\r\n      });\r\n    });\r\n  });\r\n}\r\n\r\nvar tokenOpts = {\r\n  id: \"49776a47-971a-431a-bf4e-a078abe33e43\",\r\n  secret: \"026478cb-d43d-473d-8fe3-735b794c2833\",\r\n  credentialsProvider: credentialsProvider\r\n};\r\n\r\nvar main = function(sprintName) {\r\n  tokenOpts.force = program.username || program.password;\r\n  getAccessToken(tokenOpts)\r\n    .then(function(token) {\r\n      lib.getRelease(token, sprintName)\r\n        .then(function(release) {\r\n          if (!release) {\r\n            console.error(chalk.red('\\nRelease [' + sprintName + '] not found!'));\r\n            process.exit(1);\r\n          }\r\n\r\n          lib.getTotalStories(token, release.id)\r\n            .then(function(stories) {\r\n\r\n              console.log('\\nTotal stories: ' + stories.length);\r\n              console.log('Completed stories: ' + lib.completed(stories).length);\r\n              console.log('\\nProjected story points: ' + lib.projectedPoints(stories));\r\n              console.log('Remaining story points: ' + lib.remainingPoints(stories));\r\n              var actual = lib.actualPoints(stories);\r\n              console.log('Worked story points: ' + actual);\r\n\r\n              console.log('\\nPoints Worked by Project');\r\n              lib.byProject(stories, function(name, points) {\r\n                console.log(name + ': ' + points + ' (' + ((points / actual) * 100).toFixed(1) + '%)');\r\n              });\r\n            });\r\n        });\r\n    });\r\n}\r\n\r\nprogram\r\n  .arguments('<sprint>')\r\n  .option('-u, --username <username>', 'The user to authenticate as')\r\n  .option('-p, --password <password>', 'The user\\'s password')\r\n  .action(function(sprint) {\r\n    main(sprint);\r\n  })\r\n  .parse(process.argv);\r\n"]}