UNPKG

2.78 kBJavaScriptView Raw
1/***************************************************************************************
2 * (c) 2017 Adobe. All rights reserved.
3 * This file is licensed to you under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License. You may obtain a copy
5 * of the License at http://www.apache.org/licenses/LICENSE-2.0
6 *
7 * Unless required by applicable law or agreed to in writing, software distributed under
8 * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
9 * OF ANY KIND, either express or implied. See the License for the specific language
10 * governing permissions and limitations under the License.
11 ****************************************************************************************/
12
13const request = require('request-promise-native');
14const delay = require('delay');
15const ora = require('ora');
16const getReactorHeaders = require('./getReactorHeaders');
17const handleResponseError = require('./handleResponseError');
18const getMessageFromReactorError = require('./getMessageFromReactorError');
19const logVerboseHeader = require('./logVerboseHeader');
20
21const MAX_RETRIES = 50;
22
23const requestStatus = async (
24 envConfig,
25 accessToken,
26 extensionPackageId,
27 argv,
28 spinner,
29 retries = 0
30) => {
31 if (retries >= MAX_RETRIES) {
32 throw new Error('The extension package failed to be processed within the expected timeframe.');
33 }
34
35 if (argv.verbose) {
36 logVerboseHeader('Checking extension package status');
37 }
38
39 const options = {
40 method: 'GET',
41 url: `${envConfig.extensionPackages}/${extensionPackageId}`,
42 headers: getReactorHeaders(accessToken),
43 transform: JSON.parse
44 };
45
46 let body;
47
48 try {
49 body = await request(options);
50 } catch (error) {
51 spinner.stop();
52 handleResponseError(error, 'Error requesting extension package processing status.');
53 }
54
55 const status = body.data.attributes.status;
56
57 if (status === 'succeeded') {
58 spinner.succeed('The extension package was successfully processed.');
59 } else if (status === 'pending') {
60 await delay(1000);
61 return requestStatus(envConfig, accessToken, extensionPackageId, argv, spinner, retries + 1);
62 } else if (status === 'failed') {
63 spinner.stop();
64 const error = body.data.meta.status_details.errors[0];
65 throw new Error(`Extension package processing failed. ${getMessageFromReactorError(error)}`);
66 } else {
67 spinner.stop();
68 throw new Error('Unknown extension package processing status.');
69 }
70};
71
72module.exports = async (envConfig, accessToken, extensionPackageId, argv) => {
73 const spinner = ora('The extension package is being processed...');
74 spinner.start();
75 return requestStatus(envConfig, accessToken, extensionPackageId, argv, spinner);
76};