UNPKG

canvas-api-ts

Version:

Strongly typed canvas lms api

598 lines (597 loc) 24.3 kB
"use strict"; var __assign = (this && this.__assign) || function () { __assign = Object.assign || function(t) { for (var s, i = 1, n = arguments.length; i < n; i++) { s = arguments[i]; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; } return t; }; return __assign.apply(this, arguments); }; 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()); }); }; var __generator = (this && this.__generator) || function (thisArg, body) { var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; function verb(n) { return function (v) { return step([n, v]); }; } function step(op) { if (f) throw new TypeError("Generator is already executing."); while (_) try { if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; if (y = 0, t) op = [op[0] & 2, t.value]; switch (op[0]) { case 0: case 1: t = op; break; case 4: _.label++; return { value: op[1], done: false }; case 5: _.label++; y = op[1]; op = [0]; continue; case 7: op = _.ops.pop(); _.trys.pop(); continue; default: if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } if (t[2]) _.ops.pop(); _.trys.pop(); continue; } op = body.call(thisArg, _); } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; } }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.CopyAFolder = exports.CopyAFile = exports.uploadAFileENDPOINT = exports.deleteFolder = exports.createFolder = exports.createFolderInGroup = exports.createFolderOfUser = exports.createFolderInCourse = exports.updateFolder = exports.getFolders = exports.getFolder = exports.getFolderInGroup = exports.getFolderOfUser = exports.getFolderInCourse = exports.getUserFoldersByPath = exports.getGroupFoldersByPath = exports.getCourseFoldersByPath = exports.getGroupFolders = exports.getUserFolders = exports.getCourseFolders = exports.deletFile = exports.updateFile = exports.getFilesOfAFolder = exports.getGroupFiles = exports.getFiles = exports.getUserFiles = exports.getCourseFiles = exports.getQuota = exports.getUserFileQuota = exports.getGroupFileQuota = exports.getCourseFileQuota = exports.getFile = exports.fetchAllFromAFolder = exports.fetchFiles = exports.fetchFileByUrl = exports.fetchFile = exports.storeByPath = exports.store = void 0; var requestBuidler_1 = require("../request/requestBuidler"); var utils_1 = require("../utils"); var node_fetch_1 = __importDefault(require("node-fetch")); var fs_1 = __importDefault(require("fs")); var stream_1 = require("stream"); var path_1 = __importDefault(require("path")); var util_1 = require("util"); var streamPipeline = util_1.promisify(stream_1.pipeline); ; /** * store one FileStream at the given baseDir. * @param baseDir where to download the file to. * @param stream the FileStream object generated by one of the file fetching apis. * @returns a flag that indicate if file is successfully written. */ function store(baseDir, stream) { return __awaiter(this, void 0, void 0, function () { var filepath, wstream; return __generator(this, function (_a) { switch (_a.label) { case 0: return [4 /*yield*/, util_1.promisify(fs_1.default.exists)(baseDir)]; case 1: if (!!(_a.sent())) return [3 /*break*/, 3]; console.log(baseDir + " doesn't exist, creating a new one"); return [4 /*yield*/, util_1.promisify(fs_1.default.mkdir)(baseDir)]; case 2: _a.sent(); _a.label = 3; case 3: filepath = path_1.default.join(baseDir, stream.filename); wstream = fs_1.default.createWriteStream(filepath); return [4 /*yield*/, streamPipeline(stream.stream, wstream)]; case 4: _a.sent(); return [2 /*return*/]; } }); }); } exports.store = store; /** * @param path the path it store to. * @param stream */ function storeByPath(filepath, stream) { return __awaiter(this, void 0, void 0, function () { var wstream; return __generator(this, function (_a) { switch (_a.label) { case 0: wstream = fs_1.default.createWriteStream(filepath); return [4 /*yield*/, streamPipeline(stream, wstream)]; case 1: _a.sent(); return [2 /*return*/]; } }); }); } exports.storeByPath = storeByPath; /** * download a single file * @param * @returns a promise FileStream * * Note the filename received in `File` object will be url encoded. */ function fetchFile(file) { return __awaiter(this, void 0, void 0, function () { var url, filename, decodedFilename, response; return __generator(this, function (_a) { switch (_a.label) { case 0: url = file.url, filename = file.filename; decodedFilename = decodeURIComponent(filename); return [4 /*yield*/, fetchFileByUrl(url)]; case 1: response = _a.sent(); return [2 /*return*/, __assign(__assign({}, response), { filename: decodedFilename, meta: file })]; } }); }); } exports.fetchFile = fetchFile; function fetchFileByUrl(url) { return __awaiter(this, void 0, void 0, function () { var response; return __generator(this, function (_a) { switch (_a.label) { case 0: if (!utils_1.isValidURL(url)) { throw new Error("" + "file resource url get from canvas api is invalid." + " It's a canvas problem"); } return [4 /*yield*/, node_fetch_1.default(url, { method: 'get', headers: __assign({}, requestBuidler_1.mkHeader()) })]; case 1: response = _a.sent(); return [2 /*return*/, { stream: response.body, }]; } }); }); } exports.fetchFileByUrl = fetchFileByUrl; /** * download files from a list of File * @param files A list of files that can come from any File[] return apis. * @return a promise of a list of binary file and there corresponding File. * File can be used to determine what to do with the binary buffer. */ function fetchFiles(files) { return __awaiter(this, void 0, void 0, function () { var _this = this; return __generator(this, function (_a) { return [2 /*return*/, files.map(function (file) { return __awaiter(_this, void 0, void 0, function () { return __generator(this, function (_a) { return [2 /*return*/, fetchFile(file)]; }); }); })]; }); }); } exports.fetchFiles = fetchFiles; /** * download all files from a folder * @param folder * @return */ function fetchAllFromAFolder(folder, config) { return __awaiter(this, void 0, void 0, function () { var id, files; return __generator(this, function (_a) { switch (_a.label) { case 0: id = folder.id; return [4 /*yield*/, getFilesOfAFolder(id, config)]; case 1: files = _a.sent(); return [2 /*return*/, fetchFiles(files)]; } }); }); } exports.fetchAllFromAFolder = fetchAllFromAFolder; function getFile(fileId, include) { return __awaiter(this, void 0, void 0, function () { return __generator(this, function (_a) { return [2 /*return*/, requestBuidler_1.canvas({ uri: "/api/v1/files/:id", uriParams: { id: fileId }, method: "GET", param: { include: include } })]; }); }); } exports.getFile = getFile; function getCourseFileQuota(courseId) { return __awaiter(this, void 0, void 0, function () { return __generator(this, function (_a) { return [2 /*return*/, requestBuidler_1.canvas({ uri: "/api/v1/courses/:course_id/files/quota", uriParams: { course_id: courseId }, method: "GET", param: {} })]; }); }); } exports.getCourseFileQuota = getCourseFileQuota; function getGroupFileQuota(groupId) { return __awaiter(this, void 0, void 0, function () { return __generator(this, function (_a) { return [2 /*return*/, requestBuidler_1.canvas({ uri: "/api/v1/groups/:group_id/files/quota", uriParams: { group_id: groupId }, method: "GET", param: {} })]; }); }); } exports.getGroupFileQuota = getGroupFileQuota; function getUserFileQuota(userId) { return __awaiter(this, void 0, void 0, function () { return __generator(this, function (_a) { return [2 /*return*/, requestBuidler_1.canvas({ uri: "/api/v1/users/:user_id/files/quota", uriParams: { user_id: userId !== null && userId !== void 0 ? userId : "self" }, method: "GET", param: {}, })]; }); }); } exports.getUserFileQuota = getUserFileQuota; exports.getQuota = function () { return getUserFileQuota("self"); }; function getCourseFiles(courseId, config) { return __awaiter(this, void 0, void 0, function () { return __generator(this, function (_a) { return [2 /*return*/, requestBuidler_1.canvas({ uri: "/api/v1/courses/:course_id/files", uriParams: { course_id: courseId }, method: "GET", param: config, })]; }); }); } exports.getCourseFiles = getCourseFiles; function getUserFiles(userId, config) { return __awaiter(this, void 0, void 0, function () { return __generator(this, function (_a) { return [2 /*return*/, requestBuidler_1.canvas({ uri: "/api/v1/users/:user_id/files", uriParams: { user_id: userId }, method: "GET", param: config, })]; }); }); } exports.getUserFiles = getUserFiles; exports.getFiles = function (config) { return getUserFiles("self", config); }; function getGroupFiles(groupId, config) { return __awaiter(this, void 0, void 0, function () { return __generator(this, function (_a) { return [2 /*return*/, requestBuidler_1.canvas({ uri: "/api/v1/groups/:group_id/files", uriParams: { group_id: groupId }, method: "GET", param: config, })]; }); }); } exports.getGroupFiles = getGroupFiles; function getFilesOfAFolder(folderId, config) { return __awaiter(this, void 0, void 0, function () { return __generator(this, function (_a) { return [2 /*return*/, requestBuidler_1.canvas({ uri: "/api/v1/folders/:id/files", uriParams: { id: folderId }, method: "GET", param: config, })]; }); }); } exports.getFilesOfAFolder = getFilesOfAFolder; function updateFile(id, config) { return __awaiter(this, void 0, void 0, function () { return __generator(this, function (_a) { return [2 /*return*/, requestBuidler_1.canvas({ uri: "/api/v1/files/:id", uriParams: { id: id }, method: "PUT", param: config, })]; }); }); } exports.updateFile = updateFile; function deletFile(id, config) { return __awaiter(this, void 0, void 0, function () { return __generator(this, function (_a) { return [2 /*return*/, requestBuidler_1.canvas({ uri: "/api/v1/files/:id", uriParams: { id: id }, method: "DELETE", param: config, })]; }); }); } exports.deletFile = deletFile; function getCourseFolders(courseId) { return __awaiter(this, void 0, void 0, function () { return __generator(this, function (_a) { return [2 /*return*/, requestBuidler_1.canvas({ uri: "/api/v1/courses/:course_id/folders", uriParams: { course_id: courseId }, method: "GET", param: {}, })]; }); }); } exports.getCourseFolders = getCourseFolders; function getUserFolders(userId) { return __awaiter(this, void 0, void 0, function () { return __generator(this, function (_a) { return [2 /*return*/, requestBuidler_1.canvas({ uri: "/api/v1/users/:user_id/folders", uriParams: { user_id: userId !== null && userId !== void 0 ? userId : "self" }, method: "GET", param: {}, })]; }); }); } exports.getUserFolders = getUserFolders; function getGroupFolders(groupId) { return __awaiter(this, void 0, void 0, function () { return __generator(this, function (_a) { return [2 /*return*/, requestBuidler_1.canvas({ uri: "/api/v1/groups/:group_id/folders", uriParams: { group_id: groupId }, method: "GET", param: {}, })]; }); }); } exports.getGroupFolders = getGroupFolders; function getCourseFoldersByPath(courseId, path) { return __awaiter(this, void 0, void 0, function () { return __generator(this, function (_a) { return [2 /*return*/, requestBuidler_1.canvas({ uri: "/api/v1/courses/:course_id/folders/by_path/*full_path", uriParams: { course_id: courseId, full_path: path }, method: "GET", param: {}, })]; }); }); } exports.getCourseFoldersByPath = getCourseFoldersByPath; function getGroupFoldersByPath(groupId, path) { return __awaiter(this, void 0, void 0, function () { return __generator(this, function (_a) { return [2 /*return*/, requestBuidler_1.canvas({ uri: "/api/v1/groups/:group_id/folders/by_path/*full_path", uriParams: { group_id: groupId, full_path: path }, method: "GET", param: {}, })]; }); }); } exports.getGroupFoldersByPath = getGroupFoldersByPath; function getUserFoldersByPath(userId, path) { return __awaiter(this, void 0, void 0, function () { return __generator(this, function (_a) { return [2 /*return*/, requestBuidler_1.canvas({ uri: "/api/v1/users/:user_id/folders/by_path/*full_path", uriParams: { user_id: userId, full_path: path }, method: "GET", param: {}, })]; }); }); } exports.getUserFoldersByPath = getUserFoldersByPath; function getFolderInCourse(courseId, folderId) { return __awaiter(this, void 0, void 0, function () { return __generator(this, function (_a) { return [2 /*return*/, requestBuidler_1.canvas({ uri: "/api/v1/courses/:course_id/folders/:id", uriParams: { course_id: courseId, id: folderId }, method: "GET", param: {}, })]; }); }); } exports.getFolderInCourse = getFolderInCourse; function getFolderOfUser(userId, folderId) { return __awaiter(this, void 0, void 0, function () { return __generator(this, function (_a) { return [2 /*return*/, requestBuidler_1.canvas({ uri: "/api/v1/users/:user_id/folders/:id", uriParams: { user_id: userId, id: folderId }, method: "GET", param: {}, })]; }); }); } exports.getFolderOfUser = getFolderOfUser; function getFolderInGroup(groupId, folderId) { return __awaiter(this, void 0, void 0, function () { return __generator(this, function (_a) { return [2 /*return*/, requestBuidler_1.canvas({ uri: "/api/v1/groups/:group_id/folders/:id", uriParams: { group_id: groupId, id: folderId }, method: "GET", param: {}, })]; }); }); } exports.getFolderInGroup = getFolderInGroup; function getFolder(folderId) { return __awaiter(this, void 0, void 0, function () { return __generator(this, function (_a) { return [2 /*return*/, requestBuidler_1.canvas({ uri: "/api/v1/folders/:id", uriParams: { id: folderId }, method: "GET", param: {}, })]; }); }); } exports.getFolder = getFolder; function getFolders(folderId) { return __awaiter(this, void 0, void 0, function () { return __generator(this, function (_a) { return [2 /*return*/, requestBuidler_1.canvas({ uri: "/api/v1/folders/:id/folders", uriParams: { id: folderId }, method: "GET", param: {}, })]; }); }); } exports.getFolders = getFolders; function updateFolder(folderId, config) { return __awaiter(this, void 0, void 0, function () { return __generator(this, function (_a) { return [2 /*return*/, requestBuidler_1.canvas({ uri: "/api/v1/folders/:id", uriParams: { id: folderId }, method: "PUT", param: config, })]; }); }); } exports.updateFolder = updateFolder; function createFolderInCourse(courseId, config) { return __awaiter(this, void 0, void 0, function () { return __generator(this, function (_a) { return [2 /*return*/, requestBuidler_1.canvas({ uri: "/api/v1/courses/:course_id/folders", uriParams: { course_id: courseId }, method: "POST", param: config, })]; }); }); } exports.createFolderInCourse = createFolderInCourse; function createFolderOfUser(userId, config) { return __awaiter(this, void 0, void 0, function () { return __generator(this, function (_a) { return [2 /*return*/, requestBuidler_1.canvas({ uri: "/api/v1/users/:user_id/folders", uriParams: { user_id: userId }, method: "POST", param: config, })]; }); }); } exports.createFolderOfUser = createFolderOfUser; function createFolderInGroup(groupId, config) { return __awaiter(this, void 0, void 0, function () { return __generator(this, function (_a) { return [2 /*return*/, requestBuidler_1.canvas({ uri: "/api/v1/groups/:group_id/folders", uriParams: { group_id: groupId }, method: "POST", param: config, })]; }); }); } exports.createFolderInGroup = createFolderInGroup; function createFolder(folderId, config) { return __awaiter(this, void 0, void 0, function () { return __generator(this, function (_a) { return [2 /*return*/, requestBuidler_1.canvas({ uri: "/api/v1/folders/:folder_id/folders", uriParams: { folder_id: folderId }, method: "POST", param: config, })]; }); }); } exports.createFolder = createFolder; function deleteFolder(folderId, config) { return __awaiter(this, void 0, void 0, function () { return __generator(this, function (_a) { return [2 /*return*/, requestBuidler_1.canvas({ uri: "/api/v1/folders/:id", uriParams: { id: folderId }, method: "DELETE", param: config, })]; }); }); } exports.deleteFolder = deleteFolder; // ** Low level file uploading api. This will only create a pending // file on canvas' server. To perform an entire data upload please // use uploadAFile() in `uploadPolily.ts`. function uploadAFileENDPOINT(folderId, config) { return __awaiter(this, void 0, void 0, function () { return __generator(this, function (_a) { return [2 /*return*/, requestBuidler_1.canvas({ uri: "/api/v1/folders/:folder_id/files", uriParams: { folder_id: folderId }, method: "POST", param: config, })]; }); }); } exports.uploadAFileENDPOINT = uploadAFileENDPOINT; function CopyAFile(destFolderId, config) { return __awaiter(this, void 0, void 0, function () { return __generator(this, function (_a) { return [2 /*return*/, requestBuidler_1.canvas({ uri: "/api/v1/folders/:dest_folder_id/copy_file", uriParams: { dest_folder_id: destFolderId }, method: "POST", param: config, })]; }); }); } exports.CopyAFile = CopyAFile; function CopyAFolder(destFolderId, config) { return __awaiter(this, void 0, void 0, function () { return __generator(this, function (_a) { return [2 /*return*/, requestBuidler_1.canvas({ uri: "/api/v1/folders/:dest_folder_id/copy_folder", uriParams: { dest_folder_id: destFolderId }, method: "POST", param: config, })]; }); }); } exports.CopyAFolder = CopyAFolder;