UNPKG

open-115-sdk

Version:

115生活开放SDK接口封装

234 lines (233 loc) 7.65 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.Open115SDK = exports.Open115Error = void 0; const axios_1 = __importDefault(require("axios")); const api_urls_1 = __importDefault(require("./api-urls")); const util_1 = require("./util"); class Open115Error extends Error { constructor(message) { super(message); this.name = 'Open115Error'; } } exports.Open115Error = Open115Error; class Open115SDK { constructor(config) { this.token = config.token; this.clientId = config.clientId; this.client = axios_1.default.create({ baseURL: config.baseURL || api_urls_1.default.DOMAIN, headers: { 'Content-Type': 'application/x-www-form-urlencoded', } }); this.client.interceptors.request.use((config) => { if (this.token) { config.headers['Authorization'] = `Bearer ${this.token}`; } return config; }); // 添加响应拦截器处理错误 this.client.interceptors.response.use(response => { return response; }, error => { var _a; if (error.response) { throw new Open115Error(`API请求失败: ${error.response.status} ${((_a = error.response.data) === null || _a === void 0 ? void 0 : _a.message) || '未知错误'}`); } throw new Open115Error('网络请求失败'); }); } /** * 设置认证token * @param token */ setToken(token) { this.token = token; //this.client.defaults.headers.common['Authorization'] = `Bearer ${token}`; } /** * 获取设备码和二维码内容 * 使用接口返回的 data.qrcode 作为二维码的内容,在第三方客户端展示二维码,用于给115客户端扫码授权。 */ async authDeviceCode() { this.codeVerifier = await (0, util_1.generateCodeVerifier)(); const codeChallenge = await (0, util_1.generateCodeChallenge)(this.codeVerifier); const resp = await this.client.post(api_urls_1.default.AUTH_DEVICE_CODE, { client_id: this.clientId, code_challenge: codeChallenge, code_challenge_method: 'sha256' }); return resp.data; } /** * 轮询二维码状态 * 此为长轮询接口。注意:当二维码状态没有更新时,此接口不会立即响应,直到接口超时或者二维码状态有更新。 * @param uid 二维码ID/设备码,从 authDeviceCode 方法 data.uid 获取 * @param time 校验参数,从 authDeviceCode 方法 data.time 获取 * @param sign 校验签名,从 authDeviceCode 方法 data.sign 获取 */ async loginScanQrCodeStatus(uid, time, sign) { const resp = await this.client.get(api_urls_1.default.AUTH_QRCODE_STATUS, { params: { uid, time, sign }, }); return resp.data; } /** * 用设备码换取 access_token * @param uid 二维码ID/设备码 */ async authDeviceCodeToToken(uid) { const resp = await this.client.post(api_urls_1.default.AUTH_CODE_TO_TOKEN, { uid: uid, code_verifier: this.codeVerifier, }); if (resp.data.access_token) { this.setToken(resp.data.access_token); } return resp.data; } /** * 刷新 access_token * 请勿频繁刷新,否则列入频控。 * @param refresh_token 二维码ID/设备码 */ async authRefreshToken(refresh_token) { const resp = await this.client.post(api_urls_1.default.AUTH_CODE_TO_TOKEN, { refresh_token }); if (resp.data.access_token) { this.setToken(resp.data.access_token); } return resp.data; } /** * 获取用户空间和vip信息 */ async userInfo() { const resp = await this.client.get(api_urls_1.default.USER_INFO); return resp.data; } /** * 创建目录 * @param body */ async folderAdd(body) { const resp = await this.client.post(api_urls_1.default.FOLDER_ADD, body); return resp.data; } /** * 获取目录信息 * @param fileId */ async folderGetInfo(fileId) { const resp = await this.client.get(api_urls_1.default.FOLDER_GET_INFO, { params: { file_id: fileId } }); return resp.data; } /** * 获取文件列表 * @param params */ async files(params) { const resp = await this.client.get(api_urls_1.default.U_FILE_FILES, { params }); return resp.data; } /** * 根据文件名搜索文件(夹) * @param params */ async fileSearch(params) { const resp = await this.client.get(api_urls_1.default.U_FILE_SEARCH, { params }); return resp.data; } /** * 批量复制文件 * @param body */ async fileCopy(body) { const resp = await this.client.post(api_urls_1.default.U_FILE_COPY, body); return resp.data; } /** * 批量移动文件 * @param body */ async fileMove(body) { const resp = await this.client.post(api_urls_1.default.U_FILE_MOVE, body); return resp.data; } /** * 根据文件提取码取文件下载地址 * @param pick_code 文件提取码 */ async fileDownUrl(pick_code) { const resp = await this.client.post(api_urls_1.default.U_FILE_DOWN_URL, { pick_code }); return resp.data; } /** * 批量更新文件名、星标文件 * @param body */ async fileUpdate(body) { const resp = await this.client.post(api_urls_1.default.U_FILE_UPDATE, body); return resp.data; } /** * 删除文件 * @param body */ async fileDelete(body) { const resp = await this.client.post(api_urls_1.default.U_FILE_DELETE, body); return resp.data; } /** * 回收站列表 * @param offset 数据显示偏移量 * @param limit 单页记录数,int,默认30,最大200 */ async rbList(offset = 0, limit = 0) { const resp = await this.client.get(api_urls_1.default.RB_LIST, { params: { offset, limit }, }); return resp.data; } /** * 还原回收站文件(夹) * @param tld 需要还原的ID,可多个 */ async rbRevert(tld) { const resp = await this.client.post(api_urls_1.default.RB_REVERT, { tld: Array.isArray(tld) ? tld.join(',') : tld, }); return resp.data; } /** * 还原回收站文件(夹) * @param tld 需要还原的ID,可多个 */ async rbDel(tld) { const resp = await this.client.post(api_urls_1.default.RB_DEL, { tld: Array.isArray(tld) ? tld.join(',') : tld, }); return resp.data; } /** * 获取开放平台产品列表扫描跳转链接地址 * @param openDevice 设备号 * @param defaultProductId 默认产品ID */ async vipQrUrl(openDevice, defaultProductId = '') { const resp = await this.client.get(api_urls_1.default.VIP_QR_URL, { params: { open_device: openDevice, default_product_id: defaultProductId, } }); return resp.data; } } exports.Open115SDK = Open115SDK; exports.default = Open115SDK;