ask-cli
Version:
Alexa Skills Kit (ASK) Command Line Interfaces
91 lines (90 loc) • 4.18 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.createCommand = void 0;
const abstract_command_1 = require("../../../abstract-command");
const messenger_1 = __importDefault(require("../../../../view/messenger"));
const smapi_client_1 = __importDefault(require("../../../../clients/smapi-client"));
const option_model_json_1 = __importDefault(require("../../../option-model.json"));
const profile_helper_1 = __importDefault(require("../../../../utils/profile-helper"));
const helper_1 = __importDefault(require("./helper"));
class UploadCatalogCommand extends abstract_command_1.AbstractCommand {
name() {
return "upload-catalog";
}
description() {
return "upload a file for the catalog";
}
requiredOptions() {
return ["catalog-id", "file"];
}
optionalOptions() {
return ["profile", "debug"];
}
async handle(cmd) {
let profile;
try {
profile = profile_helper_1.default.runtimeProfile(cmd.profile);
}
catch (err) {
messenger_1.default.getInstance().error(err);
throw err;
}
const smapiClient = new smapi_client_1.default({
profile,
doDebug: cmd.debug,
});
try {
await _multiPartUploadCatalog(cmd.catalogId, cmd.file, smapiClient);
messenger_1.default.getInstance().info("Catalog uploaded successfully.");
}
catch (err) {
console.error(err);
process.exit(1);
}
}
}
exports.default = UploadCatalogCommand;
async function _multiPartUploadCatalog(catalogId, filePath, smapiClient) {
const { totalSize, calculatedPartSize, calculatedPartsNumber } = helper_1.default._resolvePartSize(filePath);
if (totalSize === 0 || calculatedPartSize === 0 || calculatedPartsNumber === 0) {
throw "[Error]: The file to be uploaded cannot be empty.";
}
return new Promise((resolve, reject) => {
helper_1.default._confirmOrOverwritePartSize(totalSize, calculatedPartSize, calculatedPartsNumber, (partSize, partsNumber) => {
smapiClient.catalog.createCatalogUpload(catalogId, partsNumber, (createCatalogUploadError, createResponse) => {
if (createCatalogUploadError) {
return reject(createCatalogUploadError);
}
if (!createResponse.body) {
return process.nextTick(() => {
reject("[Error]: The response from create-catalog-upload should not be empty.");
});
}
const uploadId = createResponse.body.id;
if (!uploadId || !createResponse.body.presignedUploadParts) {
return reject("[Error]: The response of create-catalog-upload is not valid.");
}
const uploadPartsMap = helper_1.default._transformUploadArrayToMap(createResponse.body.presignedUploadParts);
if (!uploadPartsMap) {
return reject("[Error]: The response from create-catalog-upload is empty.");
}
messenger_1.default.getInstance().info(`Upload (upload-id: ${uploadId}) created successfully. Upload starts...`);
helper_1.default._multipartsUploadToPresignedUrls(uploadPartsMap, filePath, totalSize, partSize, partsNumber, (err, partETagsList) => {
if (err) {
return reject(err);
}
smapiClient.catalog.completeCatalogUpload(catalogId, uploadId, partETagsList, (completeCatalogUploadError) => {
if (completeCatalogUploadError) {
return reject(completeCatalogUploadError);
}
resolve();
});
});
});
});
});
}
exports.createCommand = new UploadCatalogCommand(option_model_json_1.default).createCommand();