evandcoleman/node-appletv

View on GitHub
src/bin/pair.ts

Summary

Maintainability
A
1 hr
Test Coverage
import { prompt } from 'inquirer';
import * as caporal from 'caporal';
import * as ora from 'ora';

import { AppleTV } from '../lib/appletv';
import { Pairing } from '../lib/pairing';
import { Verifier } from '../lib/verifier';

export function pair(device: AppleTV, logger: Logger): Promise<AppleTV> {
  let spinner = ora("Connecting to " + device.name).start()
  return device
    .openConnection()
    .then(() => {
      spinner.succeed().start('Initiating Pairing')
      let pairing = new Pairing(device);
      
      return pairing.initiatePair()
        .then(callback => {
          spinner.succeed();
          return prompt([{
            type: 'input',
            name: 'pin',
            message: "Enter the 4-digit pin that's currently being displayed on " + device.name,
            validate: (input) => {
              let isValid = /^\d+$/.test(input);

              return isValid ? true : 'Pin must be 4-digits and all numbers.';
            }
          }])
          .then(answers => {
            spinner.start('Completing Pairing');
            return callback(answers['pin']);
          });
        })
        .then(device => {
          spinner.succeed();
          return device;
        })
        .catch(error => {
          spinner.fail();
          throw error;
        });
    });
}