agora-rest-client
Version:
Node.js REST client for Agora
188 lines (187 loc) • 8.87 kB
JavaScript
;
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.CloudRecordingAPI = void 0;
const client_1 = require("../../../agora/client");
const types_1 = require("../types");
const utils_1 = require("../../../agora/utils");
const error_1 = require("../error");
const queryResource_1 = require("./res/queryResource");
const agora_1 = require("../../../agora");
const logger = (0, agora_1.getLogger)('CloudRecordingAPI');
class CloudRecordingAPI {
constructor(config) {
this.config = config;
this.client = new client_1.RequestClient(config);
}
acquire(req, timeout) {
return __awaiter(this, void 0, void 0, function* () {
const { body } = (yield this.client.post(`/v1/apps/${this.config.appId}/cloud_recording/acquire`, {
body: JSON.stringify(req),
timeout,
}));
logger.info(body);
return body;
});
}
start(resourceId, mode, req, timeout) {
return __awaiter(this, void 0, void 0, function* () {
let retryCount = 0;
const [err, result] = yield (0, utils_1.retry)(this, () => __awaiter(this, void 0, void 0, function* () {
const { body, response } = (yield this.client.post(`/v1/apps/${this.config.appId}/cloud_recording/resourceid/${resourceId}/mode/${mode}/start`, {
body: JSON.stringify(req),
timeout,
}));
const statusCode = response.status;
if (statusCode === 200 || statusCode === 201) {
return { response, body };
}
// throw http error otherwise
const error = error_1.AgoraCloudRecordingSDKHttpError.error(statusCode);
if (statusCode >= 400 && statusCode < 410) {
// stop retry if statusCode is 40x
error.options.immediateStopRetry = true;
error.body = body;
}
throw error;
}), () => retryCount >= 3, {
delay: (retryCount) => 1000 * (retryCount + 1),
onFailAttempt: (err) => {
logger.info(`http module error: ${err.message}`);
retryCount++;
},
});
if (err) {
throw err;
}
if (result) {
return result.body;
}
throw utils_1.GenericError.wrapMessage(types_1.ERR_NAMESPACE_REC, types_1.RecordingErrorTypeEnum.RecordingNoResultError, 'UnknownError', 'Start result empty');
});
}
query(resourceId, sid, mode, timeout) {
return __awaiter(this, void 0, void 0, function* () {
const { body, response } = (yield this.client.get(`/v1/apps/${this.config.appId}/cloud_recording/resourceid/${resourceId}/sid/${sid}/mode/${mode}/query`, {
timeout,
}));
logger.info(body);
const statusCode = response.status;
if (statusCode != 200) {
const error = error_1.AgoraCloudRecordingSDKHttpError.error(statusCode);
error.options.immediateStopRetry = true;
error.body = body;
throw error;
}
this.setServerResponse(body, mode);
return body;
});
}
setServerResponse(queryResourceRes, mode) {
var _a;
const fileListMode = (_a = queryResourceRes.serverResponse) === null || _a === void 0 ? void 0 : _a.fileListMode;
queryResourceRes.serverResponseType = queryResource_1.ServerResponseType.QUERY_SERVER_RESPONSE_UNKNOWN_TYPE;
switch (mode) {
case types_1.RecordingMode.Individual:
if (fileListMode === 'json') {
queryResourceRes.serverResponseType =
queryResource_1.ServerResponseType.QUERY_INDIVIDUAL_RECORDING_SERVER_RESPONSE_TYPE;
queryResourceRes.queryIndividualRecordingServerResponse =
queryResourceRes.serverResponse;
}
else {
queryResourceRes.serverResponseType =
queryResource_1.ServerResponseType.QUERY_INDIVIDUAL_VIDEO_SCREENSHOT_SERVER_RESPONSE_TYPE;
queryResourceRes.queryIndividualVideoScreenshotServerResponse =
queryResourceRes.serverResponse;
}
break;
case types_1.RecordingMode.Mix:
if (!fileListMode) {
break;
}
if (fileListMode === 'string') {
queryResourceRes.serverResponseType =
queryResource_1.ServerResponseType.QUERY_MIX_RECORDING_HLS_SERVER_RESPONSE_TYPE;
queryResourceRes.mixRecordingHLSServerResponse =
queryResourceRes.serverResponse;
}
else if (fileListMode === 'json') {
queryResourceRes.serverResponseType =
queryResource_1.ServerResponseType.QUERY_MIX_RECORDING_HLS_AND_MP4_SERVER_RESPONSE_TYPE;
queryResourceRes.mixRecordingHLSAndMP4ServerResponse =
queryResourceRes.serverResponse;
}
else {
throw new Error('unknown fileList mode');
}
break;
case types_1.RecordingMode.Web:
queryResourceRes.serverResponseType =
queryResource_1.ServerResponseType.QUERY_WEB_RECORDING_SERVER_RESPONSE_TYPE;
queryResourceRes.webRecordingServerResponse =
queryResourceRes.serverResponse;
break;
}
}
update(resourceId, sid, mode, req, timeout) {
return __awaiter(this, void 0, void 0, function* () {
const { body, response } = (yield this.client.post(`/v1/apps/${this.config.appId}/cloud_recording/resourceid/${resourceId}/sid/${sid}/mode/${mode}/update`, {
body: JSON.stringify(req),
timeout,
}));
logger.info(body);
const statusCode = response.status;
if (statusCode != 200) {
const error = error_1.AgoraCloudRecordingSDKHttpError.error(statusCode);
error.options.immediateStopRetry = true;
error.body = body;
throw error;
}
return body;
});
}
updateLayout(resourceId, sid, mode, req, timeout) {
return __awaiter(this, void 0, void 0, function* () {
const { body, response } = (yield this.client.post(`/v1/apps/${this.config.appId}/cloud_recording/resourceid/${resourceId}/sid/${sid}/mode/${mode}/updateLayout`, {
body: JSON.stringify(req),
timeout,
}));
logger.info(body);
const statusCode = response.status;
if (statusCode != 200) {
const error = error_1.AgoraCloudRecordingSDKHttpError.error(statusCode);
error.options.immediateStopRetry = true;
error.body = body;
throw error;
}
return body;
});
}
stop(resourceId, sid, mode, req, timeout) {
return __awaiter(this, void 0, void 0, function* () {
const { body, response } = (yield this.client.post(`/v1/apps/${this.config.appId}/cloud_recording/resourceid/${resourceId}/sid/${sid}/mode/${mode}/stop`, {
body: JSON.stringify(req),
timeout,
}));
logger.info(body);
const statusCode = response.status;
if (Math.floor(statusCode / 100) != 2) {
const error = error_1.AgoraCloudRecordingSDKHttpError.error(statusCode);
error.options.immediateStopRetry = true;
error.body = body;
throw error;
}
return body;
});
}
}
exports.CloudRecordingAPI = CloudRecordingAPI;