All files / src/api/cloud-volumes networks.js

22.22% Statements 2/9
100% Branches 0/0
12.5% Functions 1/8
22.22% Lines 2/9

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54    1x                                                                 2x                                    
// @flow
 
import { finish } from './utils/jobs';
import { type Caller } from '.';
 
/**
 * A description of an IP range.
 */
export type Network = {
  amazonAccountId: string,
  subnet: string,
};
 
/**
 * Show your IP ranges.
 */
export interface NetworksAPI {
  list(): Promise<Network[]>;
  create(values: Network): Promise<Network>;
}
 
export default function networks(call: Caller): NetworksAPI {
  function intoAsync(response: any) {
    return {
      value: response,
      finish(sideEffect, interval, timeout, interrupt) {
        return Promise.all(
          response.jobs.map(job =>
            finish(call, job.jobId, sideEffect, interval, timeout, interrupt),
          ),
        );
      },
    };
  }
 
  return {
    async list() {
      return call('GET', 'Networks');
    },
 
    async create(values) {
      return call('POST', 'Networks', values);
    },
 
    async restore() {
      return intoAsync(await call('PATCH', 'Networks/Restore'));
    },
 
    async abort() {
      return intoAsync(await call('PATCH', 'Networks/Abort'));
    },
  };
}