verdaccio
Version:
A lightweight private npm proxy registry
83 lines (81 loc) • 14.2 kB
JavaScript
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.handleNotify = handleNotify;
exports.notify = notify;
exports.sendNotification = sendNotification;
var _handlebars = _interopRequireDefault(require("handlebars"));
var _lodash = _interopRequireDefault(require("lodash"));
var _notifyRequest = require("./notify-request");
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
function handleNotify(metadata, notifyEntry, remoteUser, publishedPackage) {
let regex;
if (metadata.name && notifyEntry.packagePattern) {
regex = new RegExp(notifyEntry.packagePattern, notifyEntry.packagePatternFlags || '');
if (!regex.test(metadata.name)) {
return;
}
}
const template = _handlebars.default.compile(notifyEntry.content);
// don't override 'publisher' if package.json already has that
/* eslint no-unused-vars: 0 */
/* eslint @typescript-eslint/no-unused-vars: 0 */
// @ts-ignore
if (_lodash.default.isNil(metadata.publisher)) {
// @ts-ignore
metadata = _objectSpread(_objectSpread({}, metadata), {}, {
publishedPackage,
publisher: {
name: remoteUser.name
}
});
}
const content = template(metadata);
const options = {
body: content,
url: ''
};
// provides fallback support, it's accept an Object {} and Array of {}
if (notifyEntry.headers && _lodash.default.isArray(notifyEntry.headers)) {
const header = {};
notifyEntry.headers.map(function (item) {
if (Object.is(item, item)) {
for (const key in item) {
/* eslint no-prototype-builtins: 0 */
if (item.hasOwnProperty(key)) {
header[key] = item[key];
}
}
}
});
options.headers = header;
} else if (Object.is(notifyEntry.headers, notifyEntry.headers)) {
options.headers = notifyEntry.headers;
}
options.method = notifyEntry.method;
if (notifyEntry.endpoint) {
options.url = notifyEntry.endpoint;
}
return (0, _notifyRequest.notifyRequest)(options, content);
}
function sendNotification(metadata, notify, remoteUser, publishedPackage) {
return handleNotify(metadata, notify, remoteUser, publishedPackage);
}
function notify(metadata, config, remoteUser, publishedPackage) {
if (config.notify) {
// @ts-ignore
if (config.notify.content) {
return sendNotification(metadata, config.notify, remoteUser, publishedPackage);
}
// multiple notifications endpoints PR #108
return Promise.all(_lodash.default.map(config.notify, key => sendNotification(metadata, key, remoteUser, publishedPackage)));
}
return Promise.resolve();
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfaGFuZGxlYmFycyIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX2xvZGFzaCIsIl9ub3RpZnlSZXF1ZXN0IiwiZSIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0Iiwib3duS2V5cyIsInIiLCJ0IiwiT2JqZWN0Iiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsIm8iLCJmaWx0ZXIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJlbnVtZXJhYmxlIiwicHVzaCIsImFwcGx5IiwiX29iamVjdFNwcmVhZCIsImFyZ3VtZW50cyIsImxlbmd0aCIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsImRlZmluZVByb3BlcnR5IiwiX3RvUHJvcGVydHlLZXkiLCJ2YWx1ZSIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwiaSIsIl90b1ByaW1pdGl2ZSIsIlN5bWJvbCIsInRvUHJpbWl0aXZlIiwiY2FsbCIsIlR5cGVFcnJvciIsIlN0cmluZyIsIk51bWJlciIsImhhbmRsZU5vdGlmeSIsIm1ldGFkYXRhIiwibm90aWZ5RW50cnkiLCJyZW1vdGVVc2VyIiwicHVibGlzaGVkUGFja2FnZSIsInJlZ2V4IiwibmFtZSIsInBhY2thZ2VQYXR0ZXJuIiwiUmVnRXhwIiwicGFja2FnZVBhdHRlcm5GbGFncyIsInRlc3QiLCJ0ZW1wbGF0ZSIsIkhhbmRsZWJhcnMiLCJjb21waWxlIiwiY29udGVudCIsIl8iLCJpc05pbCIsInB1Ymxpc2hlciIsIm9wdGlvbnMiLCJib2R5IiwidXJsIiwiaGVhZGVycyIsImlzQXJyYXkiLCJoZWFkZXIiLCJtYXAiLCJpdGVtIiwiaXMiLCJrZXkiLCJoYXNPd25Qcm9wZXJ0eSIsIm1ldGhvZCIsImVuZHBvaW50Iiwibm90aWZ5UmVxdWVzdCIsInNlbmROb3RpZmljYXRpb24iLCJub3RpZnkiLCJjb25maWciLCJQcm9taXNlIiwiYWxsIiwicmVzb2x2ZSJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvbm90aWZ5L2luZGV4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9wdGlvbnNXaXRoVXJsIH0gZnJvbSAnQGN5cHJlc3MvcmVxdWVzdCc7XG5pbXBvcnQgSGFuZGxlYmFycyBmcm9tICdoYW5kbGViYXJzJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5cbmltcG9ydCB7IENvbmZpZywgUGFja2FnZSwgUmVtb3RlVXNlciB9IGZyb20gJ0B2ZXJkYWNjaW8vdHlwZXMnO1xuXG5pbXBvcnQgeyBub3RpZnlSZXF1ZXN0IH0gZnJvbSAnLi9ub3RpZnktcmVxdWVzdCc7XG5cbnR5cGUgVGVtcGxhdGVNZXRhZGF0YSA9IFBhY2thZ2UgJiB7IHB1Ymxpc2hlZFBhY2thZ2U6IHN0cmluZyB9O1xuXG5leHBvcnQgZnVuY3Rpb24gaGFuZGxlTm90aWZ5KFxuICBtZXRhZGF0YTogUGFja2FnZSxcbiAgbm90aWZ5RW50cnksXG4gIHJlbW90ZVVzZXI6IFJlbW90ZVVzZXIsXG4gIHB1Ymxpc2hlZFBhY2thZ2U6IHN0cmluZ1xuKTogUHJvbWlzZTxhbnk+IHwgdm9pZCB7XG4gIGxldCByZWdleDtcbiAgaWYgKG1ldGFkYXRhLm5hbWUgJiYgbm90aWZ5RW50cnkucGFja2FnZVBhdHRlcm4pIHtcbiAgICByZWdleCA9IG5ldyBSZWdFeHAobm90aWZ5RW50cnkucGFja2FnZVBhdHRlcm4sIG5vdGlmeUVudHJ5LnBhY2thZ2VQYXR0ZXJuRmxhZ3MgfHwgJycpO1xuICAgIGlmICghcmVnZXgudGVzdChtZXRhZGF0YS5uYW1lKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHRlbXBsYXRlID0gSGFuZGxlYmFycy5jb21waWxlKG5vdGlmeUVudHJ5LmNvbnRlbnQpO1xuICAvLyBkb24ndCBvdmVycmlkZSAncHVibGlzaGVyJyBpZiBwYWNrYWdlLmpzb24gYWxyZWFkeSBoYXMgdGhhdFxuICAvKiBlc2xpbnQgbm8tdW51c2VkLXZhcnM6IDAgKi9cbiAgLyogZXNsaW50IEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyczogMCAqL1xuICAvLyBAdHMtaWdub3JlXG4gIGlmIChfLmlzTmlsKG1ldGFkYXRhLnB1Ymxpc2hlcikpIHtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgbWV0YWRhdGEgPSB7IC4uLm1ldGFkYXRhLCBwdWJsaXNoZWRQYWNrYWdlLCBwdWJsaXNoZXI6IHsgbmFtZTogcmVtb3RlVXNlci5uYW1lIGFzIHN0cmluZyB9IH07XG4gIH1cblxuICBjb25zdCBjb250ZW50OiBzdHJpbmcgPSB0ZW1wbGF0ZShtZXRhZGF0YSk7XG5cbiAgY29uc3Qgb3B0aW9uczogT3B0aW9uc1dpdGhVcmwgPSB7XG4gICAgYm9keTogY29udGVudCxcbiAgICB1cmw6ICcnLFxuICB9O1xuXG4gIC8vIHByb3ZpZGVzIGZhbGxiYWNrIHN1cHBvcnQsIGl0J3MgYWNjZXB0IGFuIE9iamVjdCB7fSBhbmQgQXJyYXkgb2Yge31cbiAgaWYgKG5vdGlmeUVudHJ5LmhlYWRlcnMgJiYgXy5pc0FycmF5KG5vdGlmeUVudHJ5LmhlYWRlcnMpKSB7XG4gICAgY29uc3QgaGVhZGVyID0ge307XG4gICAgbm90aWZ5RW50cnkuaGVhZGVycy5tYXAoZnVuY3Rpb24gKGl0ZW0pOiB2b2lkIHtcbiAgICAgIGlmIChPYmplY3QuaXMoaXRlbSwgaXRlbSkpIHtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gaXRlbSkge1xuICAgICAgICAgIC8qIGVzbGludCBuby1wcm90b3R5cGUtYnVpbHRpbnM6IDAgKi9cbiAgICAgICAgICBpZiAoaXRlbS5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgICAgICBoZWFkZXJba2V5XSA9IGl0ZW1ba2V5XTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICBvcHRpb25zLmhlYWRlcnMgPSBoZWFkZXI7XG4gIH0gZWxzZSBpZiAoT2JqZWN0LmlzKG5vdGlmeUVudHJ5LmhlYWRlcnMsIG5vdGlmeUVudHJ5LmhlYWRlcnMpKSB7XG4gICAgb3B0aW9ucy5oZWFkZXJzID0gbm90aWZ5RW50cnkuaGVhZGVycztcbiAgfVxuXG4gIG9wdGlvbnMubWV0aG9kID0gbm90aWZ5RW50cnkubWV0aG9kO1xuXG4gIGlmIChub3RpZnlFbnRyeS5lbmRwb2ludCkge1xuICAgIG9wdGlvbnMudXJsID0gbm90aWZ5RW50cnkuZW5kcG9pbnQ7XG4gIH1cblxuICByZXR1cm4gbm90aWZ5UmVxdWVzdChvcHRpb25zLCBjb250ZW50KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNlbmROb3RpZmljYXRpb24oXG4gIG1ldGFkYXRhOiBQYWNrYWdlLFxuICBub3RpZnk6IGFueSxcbiAgcmVtb3RlVXNlcjogUmVtb3RlVXNlcixcbiAgcHVibGlzaGVkUGFja2FnZTogc3RyaW5nXG4pOiBQcm9taXNlPGFueT4ge1xuICByZXR1cm4gaGFuZGxlTm90aWZ5KG1ldGFkYXRhLCBub3RpZnksIHJlbW90ZVVzZXIsIHB1Ymxpc2hlZFBhY2thZ2UpIGFzIFByb21pc2U8YW55Pjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5vdGlmeShcbiAgbWV0YWRhdGE6IFBhY2thZ2UsXG4gIGNvbmZpZzogQ29uZmlnLFxuICByZW1vdGVVc2VyOiBSZW1vdGVVc2VyLFxuICBwdWJsaXNoZWRQYWNrYWdlOiBzdHJpbmdcbik6IFByb21pc2U8YW55PiB8IHZvaWQge1xuICBpZiAoY29uZmlnLm5vdGlmeSkge1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBpZiAoY29uZmlnLm5vdGlmeS5jb250ZW50KSB7XG4gICAgICByZXR1cm4gc2VuZE5vdGlmaWNhdGlvbihcbiAgICAgICAgbWV0YWRhdGEsXG4gICAgICAgIGNvbmZpZy5ub3RpZnkgYXMgdW5rbm93biBhcyBhbnksXG4gICAgICAgIHJlbW90ZVVzZXIsXG4gICAgICAgIHB1Ymxpc2hlZFBhY2thZ2VcbiAgICAgICk7XG4gICAgfVxuICAgIC8vIG11bHRpcGxlIG5vdGlmaWNhdGlvbnMgZW5kcG9pbnRzIFBSICMxMDhcbiAgICByZXR1cm4gUHJvbWlzZS5hbGwoXG4gICAgICBfLm1hcChjb25maWcubm90aWZ5LCAoa2V5KSA9PiBzZW5kTm90aWZpY2F0aW9uKG1ldGFkYXRhLCBrZXksIHJlbW90ZVVzZXIsIHB1Ymxpc2hlZFBhY2thZ2UpKVxuICAgICk7XG4gIH1cblxuICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQ0EsSUFBQUEsV0FBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsT0FBQSxHQUFBRixzQkFBQSxDQUFBQyxPQUFBO0FBSUEsSUFBQUUsY0FBQSxHQUFBRixPQUFBO0FBQWlELFNBQUFELHVCQUFBSSxDQUFBLFdBQUFBLENBQUEsSUFBQUEsQ0FBQSxDQUFBQyxVQUFBLEdBQUFELENBQUEsS0FBQUUsT0FBQSxFQUFBRixDQUFBO0FBQUEsU0FBQUcsUUFBQUgsQ0FBQSxFQUFBSSxDQUFBLFFBQUFDLENBQUEsR0FBQUMsTUFBQSxDQUFBQyxJQUFBLENBQUFQLENBQUEsT0FBQU0sTUFBQSxDQUFBRSxxQkFBQSxRQUFBQyxDQUFBLEdBQUFILE1BQUEsQ0FBQUUscUJBQUEsQ0FBQVIsQ0FBQSxHQUFBSSxDQUFBLEtBQUFLLENBQUEsR0FBQUEsQ0FBQSxDQUFBQyxNQUFBLFdBQUFOLENBQUEsV0FBQUUsTUFBQSxDQUFBSyx3QkFBQSxDQUFBWCxDQUFBLEVBQUFJLENBQUEsRUFBQVEsVUFBQSxPQUFBUCxDQUFBLENBQUFRLElBQUEsQ0FBQUMsS0FBQSxDQUFBVCxDQUFBLEVBQUFJLENBQUEsWUFBQUosQ0FBQTtBQUFBLFNBQUFVLGNBQUFmLENBQUEsYUFBQUksQ0FBQSxNQUFBQSxDQUFBLEdBQUFZLFNBQUEsQ0FBQUMsTUFBQSxFQUFBYixDQUFBLFVBQUFDLENBQUEsV0FBQVcsU0FBQSxDQUFBWixDQUFBLElBQUFZLFNBQUEsQ0FBQVosQ0FBQSxRQUFBQSxDQUFBLE9BQUFELE9BQUEsQ0FB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
;