UNPKG

@voyo/ali-cdn

Version:

阿里云cdn sdk。 包含:预热、刷新等功能。

261 lines (238 loc) 7.82 kB
/******/ (() => { // webpackBootstrap /******/ "use strict"; /******/ var __webpack_modules__ = ({ /***/ 2: /***/ (function(__unused_webpack_module, exports, __webpack_require__) { var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __exportStar = (this && this.__exportStar) || function(m, exports) { for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); }; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.AliYoCDN = void 0; const crypto_1 = __webpack_require__(113); const utils_1 = __webpack_require__(587); const http_1 = __webpack_require__(242); __exportStar(__webpack_require__(242), exports); const CDN_SERVER = 'https://cdn.aliyuncs.com'; class CDN { constructor({ cdnKey, cdnSecret, cdnVersion = "2018-05-10" }) { this.cdnServer = CDN_SERVER; this.cdnKey = cdnKey; this.cdnSecret = cdnSecret; this.cdnVersion = cdnVersion; } percentEncode(str) { return encodeURIComponent(str) .replace("+", "%20") .replace("*", "%2A") .replace("%7E", "~"); } computeSignature(parameters, method) { let canonicalStr = ""; Object.keys(parameters).sort().forEach((key) => { canonicalStr += '&' + this.percentEncode(key) + "=" + this.percentEncode(parameters[key]); }); const signStr = `${method.toUpperCase()}&${this.percentEncode("/")}&` + this.percentEncode(canonicalStr.slice(1)); // console.debug("signStr:",signStr) return (0, crypto_1.createHmac)("sha1", this.cdnSecret + '&').update(signStr).digest().toString("base64"); } resolveParams(method, requestParams) { const parameters = { Format: "JSON", Version: this.cdnVersion, AccessKeyId: this.cdnKey, SignatureVersion: "1.0", SignatureMethod: "HMAC-SHA1", SignatureNonce: (0, utils_1.getUniqueId)(), Timestamp: new Date().toISOString() }; parameters["Signature"] = this.computeSignature({ ...parameters, ...requestParams }, method); return { ...parameters, ...requestParams }; } req(method, requestParams) { const url = this.cdnServer + "?" + (0, utils_1.encodeQuery)(this.resolveParams(method, requestParams), false); return (0, http_1.req)({ method, url }).then(({ statusCode, data, headers }) => { let result; try { result = JSON.parse(data.toString()); } catch (e) { result = data; } return { statusCode, data: result, headers, }; }); } } class AliYoCDN extends CDN { combineUrl(url) { return url instanceof Array ? url.length > 1 ? url.join("\n") : url : url; } /** * 刷新url * @param url */ refreshUrl(url) { return this.req("get", { Action: "RefreshObjectCaches", ObjectPath: this.combineUrl(url), ObjectType: "File" }); } /** * 刷新目录 * @param dir */ refreshDir(dir) { return this.req("get", { Action: "RefreshObjectCaches", ObjectPath: this.combineUrl(dir), ObjectType: "Directory" }); } /** * 预热url * @param url * @param area */ pushUrl(url, area = "domestic") { return this.req("get", { Action: "PushObjectCache", ObjectPath: this.combineUrl(url), Area: area }); } /** * 查询配额信息 */ describeQuota() { return this.req("get", { Action: "DescribeRefreshQuota" }); } /** * 查询刷新预热信息 * @param params */ describeTasks(params = {}) { return this.req("get", { Action: "DescribeRefreshTasks", ...params }); } } exports.AliYoCDN = AliYoCDN; /***/ }), /***/ 242: /***/ ((__unused_webpack_module, exports, __webpack_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.req = void 0; const utils_1 = __webpack_require__(587); const req = (opts) => { return new Promise((resolve, reject) => { const request = opts.url.startsWith("https") ? (__webpack_require__(687).request) : (__webpack_require__(685).request); if (opts.query) opts.url += "?" + (0, utils_1.encodeQuery)(opts.query); const req = request(opts.url, { method: opts.method, headers: opts.headers || {} }, (res) => { let buf = Buffer.from([]); res.on("data", chunk => { buf = Buffer.concat([buf, chunk]); }); res.on("end", () => { resolve({ statusCode: res.statusCode, data: buf, headers: res.headers }); }); }); if (opts.data) { if ((0, utils_1.isObject)(opts.data)) { req.write(Buffer.from(JSON.stringify(opts.data))); } else if (opts.data instanceof Buffer) { req.write(opts.data); } else if (typeof opts.data === "string") { req.write(Buffer.from(opts.data)); } } req.end(); }); }; exports.req = req; /***/ }), /***/ 587: /***/ ((module) => { module.exports = require("@ztwx/utils"); /***/ }), /***/ 113: /***/ ((module) => { module.exports = require("crypto"); /***/ }), /***/ 685: /***/ ((module) => { module.exports = require("http"); /***/ }), /***/ 687: /***/ ((module) => { module.exports = require("https"); /***/ }) /******/ }); /************************************************************************/ /******/ // The module cache /******/ var __webpack_module_cache__ = {}; /******/ /******/ // The require function /******/ function __webpack_require__(moduleId) { /******/ // Check if module is in cache /******/ var cachedModule = __webpack_module_cache__[moduleId]; /******/ if (cachedModule !== undefined) { /******/ return cachedModule.exports; /******/ } /******/ // Create a new module (and put it into the cache) /******/ var module = __webpack_module_cache__[moduleId] = { /******/ // no module.id needed /******/ // no module.loaded needed /******/ exports: {} /******/ }; /******/ /******/ // Execute the module function /******/ __webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__); /******/ /******/ // Return the exports of the module /******/ return module.exports; /******/ } /******/ /************************************************************************/ /******/ /******/ // startup /******/ // Load entry module and return exports /******/ // This entry module is referenced by other modules so it can't be inlined /******/ var __webpack_exports__ = __webpack_require__(2); /******/ var __webpack_export_target__ = exports; /******/ for(var i in __webpack_exports__) __webpack_export_target__[i] = __webpack_exports__[i]; /******/ if(__webpack_exports__.__esModule) Object.defineProperty(__webpack_export_target__, "__esModule", { value: true }); /******/ /******/ })() ;