UNPKG

agora-rest-client

Version:
188 lines (187 loc) 8.87 kB
"use strict"; 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;