UNPKG

mume-with-litvis

Version:

Fork of mume with added http://litvis.org/

198 lines (194 loc) 6.7 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.uploadImage = void 0; // sm.ms api const fs = require("fs"); const path = require("path"); const request = require("request"); const utility = require("./utility"); const mume_1 = require("./mume"); // imgur api // referred from node-imgur: // https://github.com/kaimallea/node-imgur/blob/master/lib/imgur.js // The following client ID is tied to the // registered 'node-imgur' app and is available // here for public, anonymous usage via this node // module only. const IMGUR_API_URL = process.env.IMGUR_API_URL || "https://api.imgur.com/3/"; const IMGUR_CLIENT_ID = process.env.IMGUR_CLIENT_ID || "f0ea04148a54268"; /** * * @param imageFilePath local image file path * @param imageUrl http://... image url */ function addImageURLToHistory(imageFilePath, imageUrl) { return __awaiter(this, void 0, void 0, function* () { let description; if (imageFilePath.lastIndexOf(".")) { description = imageFilePath.slice(0, imageFilePath.lastIndexOf(".")); } else { description = imageFilePath; } const markdownImage = `![${description}](${imageUrl})`; // TODO: save to history const imageHistoryPath = path.resolve((0, mume_1.getExtensionConfigPath)(), "./image_history.md"); let data; try { data = yield utility.readFile(imageHistoryPath, { encoding: "utf-8" }); } catch (e) { data = ""; } data = ` ${markdownImage} \`${markdownImage}\` ${new Date().toString()} --- ` + data; utility.writeFile(imageHistoryPath, data, { encoding: "utf-8" }); }); } /** * Upload image to imgur * @param filePath */ function imgurUploadImage(filePath) { return new Promise((resolve, reject) => { const headers = { Authorization: `Client-ID ${IMGUR_CLIENT_ID}`, }; request.post({ url: `${IMGUR_API_URL}image`, encoding: "utf8", formData: { image: fs.createReadStream(filePath) }, json: true, headers, }, (err, httpResponse, body) => { if (err) { return reject(err); } if (body.success) { const url = body.data.link; addImageURLToHistory(filePath, url); return resolve(url); } else { return resolve(body.data.error.message); } }); }); } /** * Upload image to sm.ms * @param filePath */ function smmsUploadImage(filePath) { return new Promise((resolve, reject) => { const headers = { "authority": "sm.ms", "user-agent": "mume", "referer": "", }; request.post({ url: "https://sm.ms/api/v2/upload", formData: { smfile: fs.createReadStream(filePath) }, headers, }, (err, httpResponse, body) => { try { body = JSON.parse(body); if (err) { return reject("Failed to upload image"); } else if (body.code === "error") { return reject(body.msg); } else { const url = body.data.url; addImageURLToHistory(filePath, url); return resolve(url); } } catch (error) { return reject("Failed to connect to sm.ms host"); } }); }); } /** * Upload image to qiniu * @param filePath * @param AccessKey * @param SecretKey * @param Bucket * @param Domain */ function qiniuUploadImage(filePath, AccessKey, SecretKey, Bucket, Domain) { return new Promise((resolve, reject) => { if (!AccessKey) { return reject("Error: Qiniu AccessKey is missing"); } if (!SecretKey) { return reject("Error: Qiniu SecretKey is missing"); } if (!Bucket) { return reject("Error: Qiniu Bucket is missing"); } if (!Domain) { return reject("Error: Qiniu Domain is missing"); } const qiniu = require("qiniu"); const mac = new qiniu.auth.digest.Mac(AccessKey, SecretKey); const putPolicy = new qiniu.rs.PutPolicy({ scope: Bucket }); const uploadToken = putPolicy.uploadToken(mac); const config = new qiniu.conf.Config(); const key = path.basename(filePath); const formUploader = new qiniu.form_up.FormUploader(config); const putExtra = new qiniu.form_up.PutExtra(); return formUploader.putFile(uploadToken, key, filePath, putExtra, (respErr, respBody, respInfo) => { if (respErr) { // console.log(respErr); return reject(respErr.message); } if (respInfo.statusCode === 200) { const bucketManager = new qiniu.rs.BucketManager(mac, config); const url = bucketManager.publicDownloadUrl(Domain, key); return resolve(url); } else { // console.log(respInfo); return reject(respInfo.error); } }); }); } /** * Upload image * @param imageFilePath * @param method 'imgur' or 'sm.ms' * @param qiniu {AccessKey, SecretKey, Bucket, Domain} */ function uploadImage(imageFilePath, { method = "imgur", qiniu = { AccessKey: "", SecretKey: "", Bucket: "", Domain: "" }, }) { if (method === "imgur") { return imgurUploadImage(imageFilePath); } else if (method === "qiniu") { return qiniuUploadImage(imageFilePath, qiniu.AccessKey, qiniu.SecretKey, qiniu.Bucket, qiniu.Domain); } else { // sm.ms return smmsUploadImage(imageFilePath); } } exports.uploadImage = uploadImage; //# sourceMappingURL=image-uploader.js.map