mirror of
https://github.com/valeriangalliat/firefox-sync-cli
synced 2024-05-19 13:56:38 +02:00
133 lines
3.7 KiB
JavaScript
133 lines
3.7 KiB
JavaScript
const { Command } = require('commander')
|
|
const Sync = require('firefox-sync')
|
|
const { version } = require('./package')
|
|
|
|
const auth = {
|
|
password: require('./password'),
|
|
oauth: require('./oauth')
|
|
}
|
|
|
|
const program = new Command()
|
|
|
|
program
|
|
.helpOption('-h, --help', 'Show this screen.')
|
|
.version(version, '--version', 'Show version.')
|
|
.addHelpCommand('help [command]', 'Display help for command.')
|
|
.allowExcessArguments(false)
|
|
|
|
program
|
|
.option('-c, --creds <file>', 'File to get Firefox Sync creds from (or write to during authentication and refresh).')
|
|
.option('-v, --verbose', 'Output more details.')
|
|
|
|
program.hook('preAction', (program, command) => {
|
|
const credsFile = program.opts().creds
|
|
|
|
const sync = Sync({
|
|
credsFile,
|
|
oauthOptions: {
|
|
access_type: 'offline'
|
|
}
|
|
})
|
|
|
|
if (!['password', 'oauth'].includes(command.name())) {
|
|
if (!credsFile) {
|
|
program._displayError(1, 'sync.missingCreds', "error: missing creds, see '--creds'")
|
|
}
|
|
}
|
|
|
|
// Inject Sync instance.
|
|
command.setOptionValue('sync', sync)
|
|
})
|
|
|
|
async function handleCreds (args, creds) {
|
|
if (!args['--creds']) {
|
|
log(creds)
|
|
return
|
|
}
|
|
|
|
// Library alrady took care of this with `credsFile`.
|
|
console.error(`Wrote creds to '${args['--creds']}'`)
|
|
}
|
|
|
|
program
|
|
.command('auth [email] [password]')
|
|
.description('Sign in using email and password.')
|
|
.action(async (email, password, options) => handleCreds(options, await auth.password(email, password, options)))
|
|
|
|
program
|
|
.command('oauth')
|
|
.description('Sign in using OAuth.')
|
|
.action(async options => handleCreds(options, await auth.oauth(options)))
|
|
|
|
function log (object) {
|
|
console.log(JSON.stringify(object, null, 2))
|
|
}
|
|
|
|
program
|
|
.command('collections')
|
|
.description('List available collections.')
|
|
.action(async options => log(await options.sync.getCollections()))
|
|
|
|
program
|
|
.command('get <collection> [id...]')
|
|
.description("Get some or all items from a collection. When getting all items, pass '--full' to get the full objects.")
|
|
.option('--full', 'Retrieve full objects (implicit when selecting specific objects).')
|
|
.action(async (collection, ids, options) => {
|
|
const params = {}
|
|
|
|
if (options.full) {
|
|
params.full = true
|
|
}
|
|
|
|
if (ids.length > 0) {
|
|
params.full = true
|
|
params.ids = ids
|
|
}
|
|
|
|
log(await options.sync.getCollection(collection, params))
|
|
})
|
|
|
|
program
|
|
.command('set <collection>')
|
|
.description("Store one or multiple payloads from 'stdin' in the given collection.")
|
|
.action((collection, id) => {
|
|
console.error(`Write methods not yet implemented!
|
|
Feel free to contribute at <https://github.com/valeriangalliat/firefox-sync-cli>!`)
|
|
process.exit(1)
|
|
})
|
|
|
|
program
|
|
.command('delete <collection> <id...>')
|
|
.description('Delete the given items by ID.')
|
|
.action((collection, id) => {
|
|
console.error(`Write methods not yet implemented!
|
|
Feel free to contribute at <https://github.com/valeriangalliat/firefox-sync-cli>!`)
|
|
process.exit(1)
|
|
})
|
|
|
|
program
|
|
.command('quota')
|
|
.description('Get the current usage and storage quota.')
|
|
.action(async options => log(await options.sync.getQuota()))
|
|
|
|
program
|
|
.command('collection-usage')
|
|
.description('Get the usage in kB of all collections.')
|
|
.action(async options => log(await options.sync.getCollectionUsage()))
|
|
|
|
program
|
|
.command('collection-counts')
|
|
.description('Get the number of items in each collection.')
|
|
.action(async options => log(await options.sync.getCollectionCounts()))
|
|
|
|
program
|
|
.command('configuration')
|
|
.description('Get the storage server configuration.')
|
|
.action(async options => log(await options.sync.getConfiguration()))
|
|
|
|
function cli (argv) {
|
|
return program.parseAsync(argv)
|
|
}
|
|
|
|
module.exports = cli
|