@voyo/ali-cdn
Version:
阿里云cdn sdk。 包含:预热、刷新等功能。
261 lines (238 loc) • 7.82 kB
JavaScript
/******/ (() => { // 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 });
/******/
/******/ })()
;