@verdaccio/hooks 9.0.0-next-9.3 → 9.0.0-next-9.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/_virtual/_rolldown/runtime.js +23 -0
- package/build/index.js +8 -25
- package/build/index.mjs +2 -0
- package/build/notify-request.d.ts +1 -1
- package/build/notify-request.js +68 -123
- package/build/notify-request.js.map +1 -1
- package/build/notify-request.mjs +69 -0
- package/build/notify-request.mjs.map +1 -0
- package/build/notify.d.ts +1 -1
- package/build/notify.js +103 -223
- package/build/notify.js.map +1 -1
- package/build/notify.mjs +107 -0
- package/build/notify.mjs.map +1 -0
- package/package.json +21 -10
- package/build/index.js.map +0 -1
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
//#region \0rolldown/runtime.js
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __copyProps = (to, from, except, desc) => {
|
|
9
|
+
if (from && typeof from === "object" || typeof from === "function") for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) {
|
|
10
|
+
key = keys[i];
|
|
11
|
+
if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
|
|
12
|
+
get: ((k) => from[k]).bind(null, key),
|
|
13
|
+
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
|
|
19
|
+
value: mod,
|
|
20
|
+
enumerable: true
|
|
21
|
+
}) : target, mod));
|
|
22
|
+
//#endregion
|
|
23
|
+
exports.__toESM = __toESM;
|
package/build/index.js
CHANGED
|
@@ -1,25 +1,8 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
return _notify.handleNotify;
|
|
10
|
-
}
|
|
11
|
-
});
|
|
12
|
-
Object.defineProperty(exports, "notify", {
|
|
13
|
-
enumerable: true,
|
|
14
|
-
get: function get() {
|
|
15
|
-
return _notify.notify;
|
|
16
|
-
}
|
|
17
|
-
});
|
|
18
|
-
Object.defineProperty(exports, "sendNotification", {
|
|
19
|
-
enumerable: true,
|
|
20
|
-
get: function get() {
|
|
21
|
-
return _notify.sendNotification;
|
|
22
|
-
}
|
|
23
|
-
});
|
|
24
|
-
var _notify = require("./notify");
|
|
25
|
-
//# sourceMappingURL=index.js.map
|
|
1
|
+
Object.defineProperties(exports, {
|
|
2
|
+
__esModule: { value: true },
|
|
3
|
+
[Symbol.toStringTag]: { value: "Module" }
|
|
4
|
+
});
|
|
5
|
+
const require_notify = require("./notify.js");
|
|
6
|
+
exports.handleNotify = require_notify.handleNotify;
|
|
7
|
+
exports.notify = require_notify.notify;
|
|
8
|
+
exports.sendNotification = require_notify.sendNotification;
|
package/build/index.mjs
ADDED
package/build/notify-request.js
CHANGED
|
@@ -1,127 +1,72 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
var
|
|
10
|
-
var _core = require("@verdaccio/core");
|
|
11
|
-
var _logger = require("@verdaccio/logger");
|
|
12
|
-
function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
|
|
13
|
-
function _regenerator() { /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ var e, t, r = "function" == typeof Symbol ? Symbol : {}, n = r.iterator || "@@iterator", o = r.toStringTag || "@@toStringTag"; function i(r, n, o, i) { var c = n && n.prototype instanceof Generator ? n : Generator, u = Object.create(c.prototype); return _regeneratorDefine2(u, "_invoke", function (r, n, o) { var i, c, u, f = 0, p = o || [], y = !1, G = { p: 0, n: 0, v: e, a: d, f: d.bind(e, 4), d: function d(t, r) { return i = t, c = 0, u = e, G.n = r, a; } }; function d(r, n) { for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) { var o, i = p[t], d = G.p, l = i[2]; r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0)); } if (o || r > 1) return a; throw y = !0, n; } return function (o, p, l) { if (f > 1) throw TypeError("Generator is already running"); for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) { i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u); try { if (f = 2, i) { if (c || (o = "next"), t = i[o]) { if (!(t = t.call(i, u))) throw TypeError("iterator result is not an object"); if (!t.done) return t; u = t.value, c < 2 && (c = 0); } else 1 === c && (t = i["return"]) && t.call(i), c < 2 && (u = TypeError("The iterator does not provide a '" + o + "' method"), c = 1); i = e; } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break; } catch (t) { i = e, c = 1, u = t; } finally { f = 1; } } return { value: t, done: y }; }; }(r, o, i), !0), u; } var a = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} t = Object.getPrototypeOf; var c = [][n] ? t(t([][n]())) : (_regeneratorDefine2(t = {}, n, function () { return this; }), t), u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c); function f(e) { return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine2(e, o, "GeneratorFunction")), e.prototype = Object.create(u), e; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine2(u, "constructor", GeneratorFunctionPrototype), _regeneratorDefine2(GeneratorFunctionPrototype, "constructor", GeneratorFunction), GeneratorFunction.displayName = "GeneratorFunction", _regeneratorDefine2(GeneratorFunctionPrototype, o, "GeneratorFunction"), _regeneratorDefine2(u), _regeneratorDefine2(u, o, "Generator"), _regeneratorDefine2(u, n, function () { return this; }), _regeneratorDefine2(u, "toString", function () { return "[object Generator]"; }), (_regenerator = function _regenerator() { return { w: i, m: f }; })(); }
|
|
14
|
-
function _regeneratorDefine2(e, r, n, t) { var i = Object.defineProperty; try { i({}, "", {}); } catch (e) { i = 0; } _regeneratorDefine2 = function _regeneratorDefine(e, r, n, t) { function o(r, n) { _regeneratorDefine2(e, r, function (e) { return this._invoke(r, n, e); }); } r ? i ? i(e, r, { value: n, enumerable: !t, configurable: !t, writable: !t }) : e[r] = n : (o("next", 0), o("throw", 1), o("return", 2)); }, _regeneratorDefine2(e, r, n, t); }
|
|
15
|
-
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; }
|
|
16
|
-
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; }
|
|
17
|
-
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; }
|
|
18
|
-
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
|
|
19
|
-
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); }
|
|
20
|
-
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
|
21
|
-
function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }
|
|
22
|
-
function _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }
|
|
23
|
-
var debug = (0, _debug["default"])('verdaccio:hooks:request');
|
|
1
|
+
const require_runtime = require("./_virtual/_rolldown/runtime.js");
|
|
2
|
+
let debug = require("debug");
|
|
3
|
+
debug = require_runtime.__toESM(debug);
|
|
4
|
+
let _verdaccio_logger = require("@verdaccio/logger");
|
|
5
|
+
let got_cjs = require("got-cjs");
|
|
6
|
+
got_cjs = require_runtime.__toESM(got_cjs);
|
|
7
|
+
let _verdaccio_core = require("@verdaccio/core");
|
|
8
|
+
//#region src/notify-request.ts
|
|
9
|
+
var debug$1 = (0, debug.default)("verdaccio:hooks:request");
|
|
24
10
|
function verifyMethod(value) {
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
return 'POST';
|
|
37
|
-
}
|
|
38
|
-
var baseHeaders = {
|
|
39
|
-
'Content-Type': 'application/json'
|
|
40
|
-
};
|
|
41
|
-
function notifyRequest(_x, _x2) {
|
|
42
|
-
return _notifyRequest.apply(this, arguments);
|
|
11
|
+
const valid = [
|
|
12
|
+
"GET",
|
|
13
|
+
"POST",
|
|
14
|
+
"PUT"
|
|
15
|
+
];
|
|
16
|
+
if (typeof value === "string") {
|
|
17
|
+
const upper = value.toUpperCase();
|
|
18
|
+
if (valid.includes(upper)) return upper;
|
|
19
|
+
else _verdaccio_logger.logger.warn({ method: value }, "The notification method @{method} is not valid, using default POST method");
|
|
20
|
+
}
|
|
21
|
+
return "POST";
|
|
43
22
|
}
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
break;
|
|
90
|
-
case 2:
|
|
91
|
-
throw new Error('Notification body is undefined');
|
|
92
|
-
case 3:
|
|
93
|
-
_context.n = 4;
|
|
94
|
-
return (0, _gotCjs["default"])(finalUrl, _objectSpread(_objectSpread({}, requestOptions), {}, {
|
|
95
|
-
responseType: 'json'
|
|
96
|
-
}));
|
|
97
|
-
case 4:
|
|
98
|
-
response = _context.v;
|
|
99
|
-
_context.n = 5;
|
|
100
|
-
return response.body;
|
|
101
|
-
case 5:
|
|
102
|
-
body = _context.v;
|
|
103
|
-
debug('response.status %o', body.statusCode);
|
|
104
|
-
if (!(body.statusCode >= _core.HTTP_STATUS.BAD_REQUEST)) {
|
|
105
|
-
_context.n = 6;
|
|
106
|
-
break;
|
|
107
|
-
}
|
|
108
|
-
throw new Error(body);
|
|
109
|
-
case 6:
|
|
110
|
-
_logger.logger.info({
|
|
111
|
-
content: options.body
|
|
112
|
-
}, 'The notification @{content} has been successfully dispatched');
|
|
113
|
-
return _context.a(2, true);
|
|
114
|
-
case 7:
|
|
115
|
-
_context.p = 7;
|
|
116
|
-
_t = _context.v;
|
|
117
|
-
debug('request error %o:', _t === null || _t === void 0 ? void 0 : _t.message);
|
|
118
|
-
_logger.logger.error({
|
|
119
|
-
errorMessage: _t === null || _t === void 0 ? void 0 : _t.message
|
|
120
|
-
}, 'notify service has thrown an error: @{errorMessage}');
|
|
121
|
-
return _context.a(2, false);
|
|
122
|
-
}
|
|
123
|
-
}, _callee, null, [[0, 7]]);
|
|
124
|
-
}));
|
|
125
|
-
return _notifyRequest.apply(this, arguments);
|
|
23
|
+
var baseHeaders = { "Content-Type": "application/json" };
|
|
24
|
+
async function notifyRequest(url, options) {
|
|
25
|
+
let response;
|
|
26
|
+
try {
|
|
27
|
+
const method = verifyMethod(options.method);
|
|
28
|
+
debug$1("uri %o", url);
|
|
29
|
+
debug$1("headers %o", options.headers);
|
|
30
|
+
debug$1("method %o", method);
|
|
31
|
+
let userHeaders = {};
|
|
32
|
+
if (options.headers) {
|
|
33
|
+
if (typeof options.headers === "string") userHeaders = JSON.parse(options.headers);
|
|
34
|
+
else if (typeof options.headers === "object") userHeaders = options.headers;
|
|
35
|
+
}
|
|
36
|
+
const requestOptions = {
|
|
37
|
+
method,
|
|
38
|
+
headers: {
|
|
39
|
+
...baseHeaders,
|
|
40
|
+
...userHeaders
|
|
41
|
+
}
|
|
42
|
+
};
|
|
43
|
+
let finalUrl = url;
|
|
44
|
+
if (method === "GET") {
|
|
45
|
+
debug$1("using GET with query params");
|
|
46
|
+
const urlObj = new URL(url);
|
|
47
|
+
const params = new URLSearchParams(options.body);
|
|
48
|
+
params.set("body", options.body);
|
|
49
|
+
urlObj.search = params.toString();
|
|
50
|
+
finalUrl = urlObj.toString();
|
|
51
|
+
debug$1("final url with search params %o", finalUrl);
|
|
52
|
+
} else if (options.body !== void 0) requestOptions.body = options.body;
|
|
53
|
+
else throw new Error("Notification body is undefined");
|
|
54
|
+
response = await (0, got_cjs.default)(finalUrl, {
|
|
55
|
+
...requestOptions,
|
|
56
|
+
responseType: "json"
|
|
57
|
+
});
|
|
58
|
+
const body = await response.body;
|
|
59
|
+
debug$1("response.status %o", body.statusCode);
|
|
60
|
+
if (body.statusCode >= _verdaccio_core.HTTP_STATUS.BAD_REQUEST) throw new Error(body);
|
|
61
|
+
_verdaccio_logger.logger.info({ content: options.body }, "The notification @{content} has been successfully dispatched");
|
|
62
|
+
return true;
|
|
63
|
+
} catch (err) {
|
|
64
|
+
debug$1("request error %o:", err?.message);
|
|
65
|
+
_verdaccio_logger.logger.error({ errorMessage: err?.message }, "notify service has thrown an error: @{errorMessage}");
|
|
66
|
+
return false;
|
|
67
|
+
}
|
|
126
68
|
}
|
|
69
|
+
//#endregion
|
|
70
|
+
exports.notifyRequest = notifyRequest;
|
|
71
|
+
|
|
127
72
|
//# sourceMappingURL=notify-request.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"notify-request.js","names":["_debug","_interopRequireDefault","require","_gotCjs","_core","_logger","e","__esModule","_regenerator","t","r","Symbol","n","iterator","o","toStringTag","i","c","prototype","Generator","u","Object","create","_regeneratorDefine2","f","p","y","G","v","a","d","bind","length","l","TypeError","call","done","value","GeneratorFunction","GeneratorFunctionPrototype","getPrototypeOf","setPrototypeOf","__proto__","displayName","w","m","defineProperty","_regeneratorDefine","_invoke","enumerable","configurable","writable","ownKeys","keys","getOwnPropertySymbols","filter","getOwnPropertyDescriptor","push","apply","_objectSpread","arguments","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","_toPropertyKey","_toPrimitive","_typeof","toPrimitive","String","Number","constructor","asyncGeneratorStep","Promise","resolve","then","_asyncToGenerator","_next","_throw","debug","buildDebug","verifyMethod","valid","upper","toUpperCase","includes","logger","warn","method","baseHeaders","notifyRequest","_x","_x2","_notifyRequest","_callee","url","options","response","userHeaders","headers","requestOptions","finalUrl","urlObj","params","body","_t","_context","JSON","parse","URL","URLSearchParams","set","search","toString","undefined","Error","got","responseType","statusCode","HTTP_STATUS","BAD_REQUEST","info","content","message","error","errorMessage"],"sources":["../src/notify-request.ts"],"sourcesContent":["import buildDebug from 'debug';\nimport type { Method } from 'got-cjs';\nimport got from 'got-cjs';\n\nimport { HTTP_STATUS } from '@verdaccio/core';\nimport { logger } from '@verdaccio/logger';\n\nconst debug = buildDebug('verdaccio:hooks:request');\n\nexport type FetchOptions = {\n body: string;\n headers?: {};\n method?: string;\n};\n\nexport function verifyMethod(value: any): Method {\n const valid: Method[] = ['GET', 'POST', 'PUT'];\n\n if (typeof value === 'string') {\n const upper = value.toUpperCase() as Method;\n\n if (valid.includes(upper)) {\n return upper;\n } else {\n logger.warn(\n { method: value },\n 'The notification method @{method} is not valid, using default POST method'\n );\n }\n }\n\n return 'POST';\n}\n\nconst baseHeaders = { 'Content-Type': 'application/json' };\nexport async function notifyRequest(url: string, options: FetchOptions): Promise<boolean> {\n let response;\n try {\n const method: Method = verifyMethod(options.method);\n debug('uri %o', url);\n debug('headers %o', options.headers);\n debug('method %o', method);\n\n let userHeaders: Record<string, any> = {};\n\n if (options.headers) {\n if (typeof options.headers === 'string') {\n userHeaders = JSON.parse(options.headers);\n } else if (typeof options.headers === 'object') {\n userHeaders = options.headers;\n }\n }\n\n const headers = { ...baseHeaders, ...userHeaders };\n const requestOptions: any = {\n method,\n headers,\n };\n\n let finalUrl = url;\n if (method === 'GET') {\n debug('using GET with query params');\n const urlObj = new URL(url);\n const params = new URLSearchParams(options.body);\n params.set('body', options.body);\n urlObj.search = params.toString();\n finalUrl = urlObj.toString();\n debug('final url with search params %o', finalUrl);\n } else if (options.body !== undefined) {\n requestOptions.body = options.body;\n } else {\n throw new Error('Notification body is undefined');\n }\n\n response = await got(finalUrl, {\n ...requestOptions,\n responseType: 'json',\n });\n\n const body = await response.body;\n debug('response.status %o', body.statusCode);\n\n if (body.statusCode >= HTTP_STATUS.BAD_REQUEST) {\n throw new Error(body);\n }\n\n logger.info(\n { content: options.body },\n 'The notification @{content} has been successfully dispatched'\n );\n return true;\n } catch (err: any) {\n debug('request error %o:', err?.message);\n logger.error(\n { errorMessage: err?.message },\n 'notify service has thrown an error: @{errorMessage}'\n );\n return false;\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"notify-request.js","names":[],"sources":["../src/notify-request.ts"],"sourcesContent":["import buildDebug from 'debug';\nimport type { Method } from 'got-cjs';\nimport got from 'got-cjs';\n\nimport { HTTP_STATUS } from '@verdaccio/core';\nimport { logger } from '@verdaccio/logger';\n\nconst debug = buildDebug('verdaccio:hooks:request');\n\nexport type FetchOptions = {\n body: string;\n headers?: {};\n method?: string;\n};\n\nexport function verifyMethod(value: any): Method {\n const valid: Method[] = ['GET', 'POST', 'PUT'];\n\n if (typeof value === 'string') {\n const upper = value.toUpperCase() as Method;\n\n if (valid.includes(upper)) {\n return upper;\n } else {\n logger.warn(\n { method: value },\n 'The notification method @{method} is not valid, using default POST method'\n );\n }\n }\n\n return 'POST';\n}\n\nconst baseHeaders = { 'Content-Type': 'application/json' };\nexport async function notifyRequest(url: string, options: FetchOptions): Promise<boolean> {\n let response;\n try {\n const method: Method = verifyMethod(options.method);\n debug('uri %o', url);\n debug('headers %o', options.headers);\n debug('method %o', method);\n\n let userHeaders: Record<string, any> = {};\n\n if (options.headers) {\n if (typeof options.headers === 'string') {\n userHeaders = JSON.parse(options.headers);\n } else if (typeof options.headers === 'object') {\n userHeaders = options.headers;\n }\n }\n\n const headers = { ...baseHeaders, ...userHeaders };\n const requestOptions: any = {\n method,\n headers,\n };\n\n let finalUrl = url;\n if (method === 'GET') {\n debug('using GET with query params');\n const urlObj = new URL(url);\n const params = new URLSearchParams(options.body);\n params.set('body', options.body);\n urlObj.search = params.toString();\n finalUrl = urlObj.toString();\n debug('final url with search params %o', finalUrl);\n } else if (options.body !== undefined) {\n requestOptions.body = options.body;\n } else {\n throw new Error('Notification body is undefined');\n }\n\n response = await got(finalUrl, {\n ...requestOptions,\n responseType: 'json',\n });\n\n const body = await response.body;\n debug('response.status %o', body.statusCode);\n\n if (body.statusCode >= HTTP_STATUS.BAD_REQUEST) {\n throw new Error(body);\n }\n\n logger.info(\n { content: options.body },\n 'The notification @{content} has been successfully dispatched'\n );\n return true;\n } catch (err: any) {\n debug('request error %o:', err?.message);\n logger.error(\n { errorMessage: err?.message },\n 'notify service has thrown an error: @{errorMessage}'\n );\n return false;\n }\n}\n"],"mappings":";;;;;;;;AAOA,IAAM,WAAA,GAAA,MAAA,SAAmB,0BAA0B;AAQnD,SAAgB,aAAa,OAAoB;CAC/C,MAAM,QAAkB;EAAC;EAAO;EAAQ;EAAM;AAE9C,KAAI,OAAO,UAAU,UAAU;EAC7B,MAAM,QAAQ,MAAM,aAAa;AAEjC,MAAI,MAAM,SAAS,MAAM,CACvB,QAAO;MAEP,mBAAA,OAAO,KACL,EAAE,QAAQ,OAAO,EACjB,4EACD;;AAIL,QAAO;;AAGT,IAAM,cAAc,EAAE,gBAAgB,oBAAoB;AAC1D,eAAsB,cAAc,KAAa,SAAyC;CACxF,IAAI;AACJ,KAAI;EACF,MAAM,SAAiB,aAAa,QAAQ,OAAO;AACnD,UAAM,UAAU,IAAI;AACpB,UAAM,cAAc,QAAQ,QAAQ;AACpC,UAAM,aAAa,OAAO;EAE1B,IAAI,cAAmC,EAAE;AAEzC,MAAI,QAAQ;OACN,OAAO,QAAQ,YAAY,SAC7B,eAAc,KAAK,MAAM,QAAQ,QAAQ;YAChC,OAAO,QAAQ,YAAY,SACpC,eAAc,QAAQ;;EAK1B,MAAM,iBAAsB;GAC1B;GACA,SAHc;IAAE,GAAG;IAAa,GAAG;IAAa;GAIjD;EAED,IAAI,WAAW;AACf,MAAI,WAAW,OAAO;AACpB,WAAM,8BAA8B;GACpC,MAAM,SAAS,IAAI,IAAI,IAAI;GAC3B,MAAM,SAAS,IAAI,gBAAgB,QAAQ,KAAK;AAChD,UAAO,IAAI,QAAQ,QAAQ,KAAK;AAChC,UAAO,SAAS,OAAO,UAAU;AACjC,cAAW,OAAO,UAAU;AAC5B,WAAM,mCAAmC,SAAS;aACzC,QAAQ,SAAS,KAAA,EAC1B,gBAAe,OAAO,QAAQ;MAE9B,OAAM,IAAI,MAAM,iCAAiC;AAGnD,aAAW,OAAA,GAAA,QAAA,SAAU,UAAU;GAC7B,GAAG;GACH,cAAc;GACf,CAAC;EAEF,MAAM,OAAO,MAAM,SAAS;AAC5B,UAAM,sBAAsB,KAAK,WAAW;AAE5C,MAAI,KAAK,cAAc,gBAAA,YAAY,YACjC,OAAM,IAAI,MAAM,KAAK;AAGvB,oBAAA,OAAO,KACL,EAAE,SAAS,QAAQ,MAAM,EACzB,+DACD;AACD,SAAO;UACA,KAAU;AACjB,UAAM,qBAAqB,KAAK,QAAQ;AACxC,oBAAA,OAAO,MACL,EAAE,cAAc,KAAK,SAAS,EAC9B,sDACD;AACD,SAAO"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import buildDebug from "debug";
|
|
2
|
+
import { logger } from "@verdaccio/logger";
|
|
3
|
+
import got from "got-cjs";
|
|
4
|
+
import { HTTP_STATUS } from "@verdaccio/core";
|
|
5
|
+
//#region src/notify-request.ts
|
|
6
|
+
var debug = buildDebug("verdaccio:hooks:request");
|
|
7
|
+
function verifyMethod(value) {
|
|
8
|
+
const valid = [
|
|
9
|
+
"GET",
|
|
10
|
+
"POST",
|
|
11
|
+
"PUT"
|
|
12
|
+
];
|
|
13
|
+
if (typeof value === "string") {
|
|
14
|
+
const upper = value.toUpperCase();
|
|
15
|
+
if (valid.includes(upper)) return upper;
|
|
16
|
+
else logger.warn({ method: value }, "The notification method @{method} is not valid, using default POST method");
|
|
17
|
+
}
|
|
18
|
+
return "POST";
|
|
19
|
+
}
|
|
20
|
+
var baseHeaders = { "Content-Type": "application/json" };
|
|
21
|
+
async function notifyRequest(url, options) {
|
|
22
|
+
let response;
|
|
23
|
+
try {
|
|
24
|
+
const method = verifyMethod(options.method);
|
|
25
|
+
debug("uri %o", url);
|
|
26
|
+
debug("headers %o", options.headers);
|
|
27
|
+
debug("method %o", method);
|
|
28
|
+
let userHeaders = {};
|
|
29
|
+
if (options.headers) {
|
|
30
|
+
if (typeof options.headers === "string") userHeaders = JSON.parse(options.headers);
|
|
31
|
+
else if (typeof options.headers === "object") userHeaders = options.headers;
|
|
32
|
+
}
|
|
33
|
+
const requestOptions = {
|
|
34
|
+
method,
|
|
35
|
+
headers: {
|
|
36
|
+
...baseHeaders,
|
|
37
|
+
...userHeaders
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
let finalUrl = url;
|
|
41
|
+
if (method === "GET") {
|
|
42
|
+
debug("using GET with query params");
|
|
43
|
+
const urlObj = new URL(url);
|
|
44
|
+
const params = new URLSearchParams(options.body);
|
|
45
|
+
params.set("body", options.body);
|
|
46
|
+
urlObj.search = params.toString();
|
|
47
|
+
finalUrl = urlObj.toString();
|
|
48
|
+
debug("final url with search params %o", finalUrl);
|
|
49
|
+
} else if (options.body !== void 0) requestOptions.body = options.body;
|
|
50
|
+
else throw new Error("Notification body is undefined");
|
|
51
|
+
response = await got(finalUrl, {
|
|
52
|
+
...requestOptions,
|
|
53
|
+
responseType: "json"
|
|
54
|
+
});
|
|
55
|
+
const body = await response.body;
|
|
56
|
+
debug("response.status %o", body.statusCode);
|
|
57
|
+
if (body.statusCode >= HTTP_STATUS.BAD_REQUEST) throw new Error(body);
|
|
58
|
+
logger.info({ content: options.body }, "The notification @{content} has been successfully dispatched");
|
|
59
|
+
return true;
|
|
60
|
+
} catch (err) {
|
|
61
|
+
debug("request error %o:", err?.message);
|
|
62
|
+
logger.error({ errorMessage: err?.message }, "notify service has thrown an error: @{errorMessage}");
|
|
63
|
+
return false;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
//#endregion
|
|
67
|
+
export { notifyRequest };
|
|
68
|
+
|
|
69
|
+
//# sourceMappingURL=notify-request.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"notify-request.mjs","names":[],"sources":["../src/notify-request.ts"],"sourcesContent":["import buildDebug from 'debug';\nimport type { Method } from 'got-cjs';\nimport got from 'got-cjs';\n\nimport { HTTP_STATUS } from '@verdaccio/core';\nimport { logger } from '@verdaccio/logger';\n\nconst debug = buildDebug('verdaccio:hooks:request');\n\nexport type FetchOptions = {\n body: string;\n headers?: {};\n method?: string;\n};\n\nexport function verifyMethod(value: any): Method {\n const valid: Method[] = ['GET', 'POST', 'PUT'];\n\n if (typeof value === 'string') {\n const upper = value.toUpperCase() as Method;\n\n if (valid.includes(upper)) {\n return upper;\n } else {\n logger.warn(\n { method: value },\n 'The notification method @{method} is not valid, using default POST method'\n );\n }\n }\n\n return 'POST';\n}\n\nconst baseHeaders = { 'Content-Type': 'application/json' };\nexport async function notifyRequest(url: string, options: FetchOptions): Promise<boolean> {\n let response;\n try {\n const method: Method = verifyMethod(options.method);\n debug('uri %o', url);\n debug('headers %o', options.headers);\n debug('method %o', method);\n\n let userHeaders: Record<string, any> = {};\n\n if (options.headers) {\n if (typeof options.headers === 'string') {\n userHeaders = JSON.parse(options.headers);\n } else if (typeof options.headers === 'object') {\n userHeaders = options.headers;\n }\n }\n\n const headers = { ...baseHeaders, ...userHeaders };\n const requestOptions: any = {\n method,\n headers,\n };\n\n let finalUrl = url;\n if (method === 'GET') {\n debug('using GET with query params');\n const urlObj = new URL(url);\n const params = new URLSearchParams(options.body);\n params.set('body', options.body);\n urlObj.search = params.toString();\n finalUrl = urlObj.toString();\n debug('final url with search params %o', finalUrl);\n } else if (options.body !== undefined) {\n requestOptions.body = options.body;\n } else {\n throw new Error('Notification body is undefined');\n }\n\n response = await got(finalUrl, {\n ...requestOptions,\n responseType: 'json',\n });\n\n const body = await response.body;\n debug('response.status %o', body.statusCode);\n\n if (body.statusCode >= HTTP_STATUS.BAD_REQUEST) {\n throw new Error(body);\n }\n\n logger.info(\n { content: options.body },\n 'The notification @{content} has been successfully dispatched'\n );\n return true;\n } catch (err: any) {\n debug('request error %o:', err?.message);\n logger.error(\n { errorMessage: err?.message },\n 'notify service has thrown an error: @{errorMessage}'\n );\n return false;\n }\n}\n"],"mappings":";;;;;AAOA,IAAM,QAAQ,WAAW,0BAA0B;AAQnD,SAAgB,aAAa,OAAoB;CAC/C,MAAM,QAAkB;EAAC;EAAO;EAAQ;EAAM;AAE9C,KAAI,OAAO,UAAU,UAAU;EAC7B,MAAM,QAAQ,MAAM,aAAa;AAEjC,MAAI,MAAM,SAAS,MAAM,CACvB,QAAO;MAEP,QAAO,KACL,EAAE,QAAQ,OAAO,EACjB,4EACD;;AAIL,QAAO;;AAGT,IAAM,cAAc,EAAE,gBAAgB,oBAAoB;AAC1D,eAAsB,cAAc,KAAa,SAAyC;CACxF,IAAI;AACJ,KAAI;EACF,MAAM,SAAiB,aAAa,QAAQ,OAAO;AACnD,QAAM,UAAU,IAAI;AACpB,QAAM,cAAc,QAAQ,QAAQ;AACpC,QAAM,aAAa,OAAO;EAE1B,IAAI,cAAmC,EAAE;AAEzC,MAAI,QAAQ;OACN,OAAO,QAAQ,YAAY,SAC7B,eAAc,KAAK,MAAM,QAAQ,QAAQ;YAChC,OAAO,QAAQ,YAAY,SACpC,eAAc,QAAQ;;EAK1B,MAAM,iBAAsB;GAC1B;GACA,SAHc;IAAE,GAAG;IAAa,GAAG;IAAa;GAIjD;EAED,IAAI,WAAW;AACf,MAAI,WAAW,OAAO;AACpB,SAAM,8BAA8B;GACpC,MAAM,SAAS,IAAI,IAAI,IAAI;GAC3B,MAAM,SAAS,IAAI,gBAAgB,QAAQ,KAAK;AAChD,UAAO,IAAI,QAAQ,QAAQ,KAAK;AAChC,UAAO,SAAS,OAAO,UAAU;AACjC,cAAW,OAAO,UAAU;AAC5B,SAAM,mCAAmC,SAAS;aACzC,QAAQ,SAAS,KAAA,EAC1B,gBAAe,OAAO,QAAQ;MAE9B,OAAM,IAAI,MAAM,iCAAiC;AAGnD,aAAW,MAAM,IAAI,UAAU;GAC7B,GAAG;GACH,cAAc;GACf,CAAC;EAEF,MAAM,OAAO,MAAM,SAAS;AAC5B,QAAM,sBAAsB,KAAK,WAAW;AAE5C,MAAI,KAAK,cAAc,YAAY,YACjC,OAAM,IAAI,MAAM,KAAK;AAGvB,SAAO,KACL,EAAE,SAAS,QAAQ,MAAM,EACzB,+DACD;AACD,SAAO;UACA,KAAU;AACjB,QAAM,qBAAqB,KAAK,QAAQ;AACxC,SAAO,MACL,EAAE,cAAc,KAAK,SAAS,EAC9B,sDACD;AACD,SAAO"}
|
package/build/notify.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { Config, Manifest, Notification, RemoteUser } from '@verdaccio/types';
|
|
2
2
|
export declare function compileTemplate(content: any, metadata: any): Promise<unknown>;
|
|
3
3
|
export declare function handleNotify(metadata: Partial<Manifest>, notifyEntry: any, remoteUser: Partial<RemoteUser>, publishedPackage: string): Promise<boolean>;
|
|
4
4
|
export declare function sendNotification(metadata: Manifest, notify: Notification, remoteUser: Partial<RemoteUser>, publishedPackage: string): Promise<boolean>;
|
package/build/notify.js
CHANGED
|
@@ -1,232 +1,112 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
var _debug = _interopRequireDefault(require("debug"));
|
|
11
|
-
var _handlebars = _interopRequireDefault(require("handlebars"));
|
|
12
|
-
var _logger = require("@verdaccio/logger");
|
|
13
|
-
var _notifyRequest = require("./notify-request");
|
|
14
|
-
function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
|
|
15
|
-
function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
|
|
16
|
-
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
17
|
-
function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
|
|
18
|
-
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
|
|
19
|
-
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
|
|
20
|
-
function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
|
|
21
|
-
function _regenerator() { /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ var e, t, r = "function" == typeof Symbol ? Symbol : {}, n = r.iterator || "@@iterator", o = r.toStringTag || "@@toStringTag"; function i(r, n, o, i) { var c = n && n.prototype instanceof Generator ? n : Generator, u = Object.create(c.prototype); return _regeneratorDefine2(u, "_invoke", function (r, n, o) { var i, c, u, f = 0, p = o || [], y = !1, G = { p: 0, n: 0, v: e, a: d, f: d.bind(e, 4), d: function d(t, r) { return i = t, c = 0, u = e, G.n = r, a; } }; function d(r, n) { for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) { var o, i = p[t], d = G.p, l = i[2]; r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0)); } if (o || r > 1) return a; throw y = !0, n; } return function (o, p, l) { if (f > 1) throw TypeError("Generator is already running"); for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) { i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u); try { if (f = 2, i) { if (c || (o = "next"), t = i[o]) { if (!(t = t.call(i, u))) throw TypeError("iterator result is not an object"); if (!t.done) return t; u = t.value, c < 2 && (c = 0); } else 1 === c && (t = i["return"]) && t.call(i), c < 2 && (u = TypeError("The iterator does not provide a '" + o + "' method"), c = 1); i = e; } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break; } catch (t) { i = e, c = 1, u = t; } finally { f = 1; } } return { value: t, done: y }; }; }(r, o, i), !0), u; } var a = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} t = Object.getPrototypeOf; var c = [][n] ? t(t([][n]())) : (_regeneratorDefine2(t = {}, n, function () { return this; }), t), u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c); function f(e) { return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine2(e, o, "GeneratorFunction")), e.prototype = Object.create(u), e; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine2(u, "constructor", GeneratorFunctionPrototype), _regeneratorDefine2(GeneratorFunctionPrototype, "constructor", GeneratorFunction), GeneratorFunction.displayName = "GeneratorFunction", _regeneratorDefine2(GeneratorFunctionPrototype, o, "GeneratorFunction"), _regeneratorDefine2(u), _regeneratorDefine2(u, o, "Generator"), _regeneratorDefine2(u, n, function () { return this; }), _regeneratorDefine2(u, "toString", function () { return "[object Generator]"; }), (_regenerator = function _regenerator() { return { w: i, m: f }; })(); }
|
|
22
|
-
function _regeneratorDefine2(e, r, n, t) { var i = Object.defineProperty; try { i({}, "", {}); } catch (e) { i = 0; } _regeneratorDefine2 = function _regeneratorDefine(e, r, n, t) { function o(r, n) { _regeneratorDefine2(e, r, function (e) { return this._invoke(r, n, e); }); } r ? i ? i(e, r, { value: n, enumerable: !t, configurable: !t, writable: !t }) : e[r] = n : (o("next", 0), o("throw", 1), o("return", 2)); }, _regeneratorDefine2(e, r, n, t); }
|
|
23
|
-
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; }
|
|
24
|
-
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; }
|
|
25
|
-
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; }
|
|
26
|
-
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
|
|
27
|
-
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); }
|
|
28
|
-
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
|
29
|
-
function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }
|
|
30
|
-
function _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }
|
|
31
|
-
var debug = (0, _debug["default"])('verdaccio:hooks');
|
|
1
|
+
const require_runtime = require("./_virtual/_rolldown/runtime.js");
|
|
2
|
+
const require_notify_request = require("./notify-request.js");
|
|
3
|
+
let debug = require("debug");
|
|
4
|
+
debug = require_runtime.__toESM(debug);
|
|
5
|
+
let handlebars = require("handlebars");
|
|
6
|
+
handlebars = require_runtime.__toESM(handlebars);
|
|
7
|
+
let _verdaccio_logger = require("@verdaccio/logger");
|
|
8
|
+
//#region src/notify.ts
|
|
9
|
+
var debug$1 = (0, debug.default)("verdaccio:hooks");
|
|
32
10
|
function compileTemplate(content, metadata) {
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
debug('error template handler %o', error === null || error === void 0 ? void 0 : error.message);
|
|
44
|
-
_logger.logger.error({
|
|
45
|
-
error: error.message
|
|
46
|
-
}, 'notification template compilation has failed: @{error}');
|
|
47
|
-
reject(error);
|
|
48
|
-
}
|
|
49
|
-
});
|
|
50
|
-
}
|
|
51
|
-
function handleNotify(_x, _x2, _x3, _x4) {
|
|
52
|
-
return _handleNotify.apply(this, arguments);
|
|
11
|
+
return new Promise((resolve, reject) => {
|
|
12
|
+
try {
|
|
13
|
+
debug$1("compile default template handler %o", content);
|
|
14
|
+
return resolve(handlebars.default.compile(content)(metadata));
|
|
15
|
+
} catch (error) {
|
|
16
|
+
debug$1("error template handler %o", error?.message);
|
|
17
|
+
_verdaccio_logger.logger.error({ error: error.message }, "notification template compilation has failed: @{error}");
|
|
18
|
+
reject(error);
|
|
19
|
+
}
|
|
20
|
+
});
|
|
53
21
|
}
|
|
54
|
-
function
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
return compileTemplate(notifyEntry.content, metadata);
|
|
100
|
-
case 5:
|
|
101
|
-
content = _context.v;
|
|
102
|
-
case 6:
|
|
103
|
-
options = {
|
|
104
|
-
body: content
|
|
105
|
-
}; // provides fallback support, it's accept an Object {} and Array of {}
|
|
106
|
-
if (notifyEntry.headers && Array.isArray(notifyEntry.headers)) {
|
|
107
|
-
header = {}; // FIXME: we can simplify this
|
|
108
|
-
notifyEntry.headers.map(function (item) {
|
|
109
|
-
if (Object.is(item, item)) {
|
|
110
|
-
for (var key in item) {
|
|
111
|
-
/* eslint no-prototype-builtins: 0 */
|
|
112
|
-
if (item.hasOwnProperty(key)) {
|
|
113
|
-
header[key] = item[key];
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
});
|
|
118
|
-
options.headers = header;
|
|
119
|
-
} else if (Object.is(notifyEntry.headers, notifyEntry.headers)) {
|
|
120
|
-
options.headers = notifyEntry.headers;
|
|
121
|
-
}
|
|
122
|
-
if (notifyEntry.endpoint) {
|
|
123
|
-
_context.n = 7;
|
|
124
|
-
break;
|
|
125
|
-
}
|
|
126
|
-
debug('error due endpoint is missing');
|
|
127
|
-
throw new Error('missing parameter');
|
|
128
|
-
case 7:
|
|
129
|
-
return _context.a(2, (0, _notifyRequest.notifyRequest)(notifyEntry.endpoint, _objectSpread({
|
|
130
|
-
method: notifyEntry.method
|
|
131
|
-
}, options)));
|
|
132
|
-
}
|
|
133
|
-
}, _callee, null, [[0, 3]]);
|
|
134
|
-
}));
|
|
135
|
-
return _handleNotify.apply(this, arguments);
|
|
22
|
+
async function handleNotify(metadata, notifyEntry, remoteUser, publishedPackage) {
|
|
23
|
+
let regex;
|
|
24
|
+
try {
|
|
25
|
+
if (metadata.name && notifyEntry.packagePattern) {
|
|
26
|
+
debug$1("checking package pattern %o", notifyEntry.packagePattern);
|
|
27
|
+
debug$1("checking package pattern flags %o", notifyEntry.packagePatternFlags);
|
|
28
|
+
regex = new RegExp(notifyEntry.packagePattern, notifyEntry.packagePatternFlags ?? "");
|
|
29
|
+
if (!regex.test(metadata.name)) {
|
|
30
|
+
_verdaccio_logger.logger.debug("Notification exclude does not match %o", metadata.name);
|
|
31
|
+
return false;
|
|
32
|
+
}
|
|
33
|
+
debug$1("package pattern matched %o", metadata.name);
|
|
34
|
+
}
|
|
35
|
+
} catch (error) {
|
|
36
|
+
_verdaccio_logger.logger.error("Invalid regex pattern or flags: %o", error?.message);
|
|
37
|
+
return false;
|
|
38
|
+
}
|
|
39
|
+
let content;
|
|
40
|
+
if (typeof metadata?.publisher === "undefined" || metadata?.publisher === null) {
|
|
41
|
+
metadata = {
|
|
42
|
+
...metadata,
|
|
43
|
+
publishedPackage,
|
|
44
|
+
publisher: { name: remoteUser.name }
|
|
45
|
+
};
|
|
46
|
+
debug$1("template metadata %o", metadata);
|
|
47
|
+
content = await compileTemplate(notifyEntry.content, metadata);
|
|
48
|
+
}
|
|
49
|
+
const options = { body: content };
|
|
50
|
+
if (notifyEntry.headers && Array.isArray(notifyEntry.headers)) {
|
|
51
|
+
const header = {};
|
|
52
|
+
notifyEntry.headers.map(function(item) {
|
|
53
|
+
if (Object.is(item, item)) {
|
|
54
|
+
for (const key in item) if (item.hasOwnProperty(key)) header[key] = item[key];
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
options.headers = header;
|
|
58
|
+
} else if (Object.is(notifyEntry.headers, notifyEntry.headers)) options.headers = notifyEntry.headers;
|
|
59
|
+
if (!notifyEntry.endpoint) {
|
|
60
|
+
debug$1("error due endpoint is missing");
|
|
61
|
+
throw new Error("missing parameter");
|
|
62
|
+
}
|
|
63
|
+
return require_notify_request.notifyRequest(notifyEntry.endpoint, {
|
|
64
|
+
method: notifyEntry.method,
|
|
65
|
+
...options
|
|
66
|
+
});
|
|
136
67
|
}
|
|
137
68
|
function sendNotification(metadata, notify, remoteUser, publishedPackage) {
|
|
138
|
-
|
|
69
|
+
return handleNotify(metadata, notify, remoteUser, publishedPackage);
|
|
139
70
|
}
|
|
140
71
|
function isHasNotification(value) {
|
|
141
|
-
|
|
72
|
+
return value && typeof value === "object" && "endpoint" in value && "content" in value;
|
|
142
73
|
}
|
|
143
|
-
function notify(
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
_context2.p = 4;
|
|
176
|
-
_t2 = _context2.v;
|
|
177
|
-
debug('error on sending single notification');
|
|
178
|
-
return _context2.a(2, [false]);
|
|
179
|
-
case 5:
|
|
180
|
-
_context2.p = 5;
|
|
181
|
-
debug('send multiples notification');
|
|
182
|
-
notificationEntries = Object.entries(notification).filter(function (_ref) {
|
|
183
|
-
var _ref2 = _slicedToArray(_ref, 2),
|
|
184
|
-
item = _ref2[1];
|
|
185
|
-
return isHasNotification(item);
|
|
186
|
-
});
|
|
187
|
-
debug('valid notification entries %o', notificationEntries.length);
|
|
188
|
-
if (!(notificationEntries.length === 0)) {
|
|
189
|
-
_context2.n = 6;
|
|
190
|
-
break;
|
|
191
|
-
}
|
|
192
|
-
return _context2.a(2, Object.keys(notification).map(function () {
|
|
193
|
-
return false;
|
|
194
|
-
}));
|
|
195
|
-
case 6:
|
|
196
|
-
debug('sending %o notifications', notificationEntries.length);
|
|
197
|
-
_context2.n = 7;
|
|
198
|
-
return Promise.allSettled(notificationEntries.map(function (_ref3) {
|
|
199
|
-
var _ref4 = _slicedToArray(_ref3, 2),
|
|
200
|
-
item = _ref4[1];
|
|
201
|
-
return sendNotification(metadata, item, remoteUser, publishedPackage);
|
|
202
|
-
}))["catch"](function (error) {
|
|
203
|
-
_logger.logger.error({
|
|
204
|
-
error: error
|
|
205
|
-
}, 'notify request has failed: @error');
|
|
206
|
-
});
|
|
207
|
-
case 7:
|
|
208
|
-
results = _context2.v;
|
|
209
|
-
if (results) {
|
|
210
|
-
_context2.n = 8;
|
|
211
|
-
break;
|
|
212
|
-
}
|
|
213
|
-
return _context2.a(2, []);
|
|
214
|
-
case 8:
|
|
215
|
-
return _context2.a(2, results.map(function (result) {
|
|
216
|
-
return result.status === 'fulfilled' ? result.value : false;
|
|
217
|
-
}));
|
|
218
|
-
case 9:
|
|
219
|
-
_context2.p = 9;
|
|
220
|
-
_t3 = _context2.v;
|
|
221
|
-
debug('error on sending multiple notification %o', _t3);
|
|
222
|
-
return _context2.a(2, Object.keys(notification).map(function () {
|
|
223
|
-
return false;
|
|
224
|
-
}));
|
|
225
|
-
case 10:
|
|
226
|
-
return _context2.a(2);
|
|
227
|
-
}
|
|
228
|
-
}, _callee2, null, [[5, 9], [2, 4]]);
|
|
229
|
-
}));
|
|
230
|
-
return _notify.apply(this, arguments);
|
|
74
|
+
async function notify(metadata, config, remoteUser, publishedPackage) {
|
|
75
|
+
debug$1("init send notification");
|
|
76
|
+
const notification = config?.notify;
|
|
77
|
+
if (!notification) {
|
|
78
|
+
debug$1("no notify configuration detected");
|
|
79
|
+
return [false];
|
|
80
|
+
}
|
|
81
|
+
const isSingle = isHasNotification(notification);
|
|
82
|
+
debug$1("is single notify %o", isSingle);
|
|
83
|
+
if (isSingle) {
|
|
84
|
+
debug$1("send single notification");
|
|
85
|
+
try {
|
|
86
|
+
return [await sendNotification(metadata, config.notify, remoteUser, publishedPackage)];
|
|
87
|
+
} catch {
|
|
88
|
+
debug$1("error on sending single notification");
|
|
89
|
+
return [false];
|
|
90
|
+
}
|
|
91
|
+
} else try {
|
|
92
|
+
debug$1("send multiples notification");
|
|
93
|
+
const notificationEntries = Object.entries(notification).filter(([, item]) => isHasNotification(item));
|
|
94
|
+
debug$1("valid notification entries %o", notificationEntries.length);
|
|
95
|
+
if (notificationEntries.length === 0) return Object.keys(notification).map(() => false);
|
|
96
|
+
debug$1("sending %o notifications", notificationEntries.length);
|
|
97
|
+
const results = await Promise.allSettled(notificationEntries.map(([, item]) => sendNotification(metadata, item, remoteUser, publishedPackage))).catch((error) => {
|
|
98
|
+
_verdaccio_logger.logger.error({ error }, "notify request has failed: @error");
|
|
99
|
+
});
|
|
100
|
+
if (!results) return [];
|
|
101
|
+
return results.map((result) => result.status === "fulfilled" ? result.value : false);
|
|
102
|
+
} catch (error) {
|
|
103
|
+
debug$1("error on sending multiple notification %o", error);
|
|
104
|
+
return Object.keys(notification).map(() => false);
|
|
105
|
+
}
|
|
231
106
|
}
|
|
107
|
+
//#endregion
|
|
108
|
+
exports.handleNotify = handleNotify;
|
|
109
|
+
exports.notify = notify;
|
|
110
|
+
exports.sendNotification = sendNotification;
|
|
111
|
+
|
|
232
112
|
//# sourceMappingURL=notify.js.map
|
package/build/notify.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"notify.js","names":["_debug","_interopRequireDefault","require","_handlebars","_logger","_notifyRequest","e","__esModule","_slicedToArray","r","_arrayWithHoles","_iterableToArrayLimit","_unsupportedIterableToArray","_nonIterableRest","TypeError","a","_arrayLikeToArray","t","toString","call","slice","constructor","name","Array","from","test","length","n","l","Symbol","iterator","i","u","f","o","next","Object","done","push","value","isArray","_regenerator","toStringTag","c","prototype","Generator","create","_regeneratorDefine2","p","y","G","v","d","bind","GeneratorFunction","GeneratorFunctionPrototype","getPrototypeOf","setPrototypeOf","__proto__","displayName","w","m","defineProperty","_regeneratorDefine","_invoke","enumerable","configurable","writable","ownKeys","keys","getOwnPropertySymbols","filter","getOwnPropertyDescriptor","apply","_objectSpread","arguments","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","_toPropertyKey","_toPrimitive","_typeof","toPrimitive","String","Number","asyncGeneratorStep","Promise","resolve","then","_asyncToGenerator","_next","_throw","debug","buildDebug","compileTemplate","content","metadata","reject","handler","template","Handlebars","compile","error","message","logger","handleNotify","_x","_x2","_x3","_x4","_handleNotify","_callee","notifyEntry","remoteUser","publishedPackage","_metadata","_metadata2","regex","_notifyEntry$packageP","options","header","_t","_context","packagePattern","packagePatternFlags","RegExp","publisher","body","headers","map","item","is","key","hasOwnProperty","endpoint","Error","notifyRequest","method","sendNotification","notify","isHasNotification","_x5","_x6","_x7","_x8","_notify","_callee2","config","notification","isSingle","response","notificationEntries","results","_t2","_t3","_context2","entries","_ref","_ref2","allSettled","_ref3","_ref4","result","status"],"sources":["../src/notify.ts"],"sourcesContent":["import buildDebug from 'debug';\nimport Handlebars from 'handlebars';\n\nimport { logger } from '@verdaccio/logger';\nimport type { Config, Manifest, Notification, RemoteUser } from '@verdaccio/types';\n\nimport type { FetchOptions } from './notify-request';\nimport { notifyRequest } from './notify-request';\n\nconst debug = buildDebug('verdaccio:hooks');\n\nexport function compileTemplate(content, metadata) {\n // FUTURE: multiple handlers\n return new Promise((resolve, reject) => {\n let handler;\n try {\n if (!handler) {\n debug('compile default template handler %o', content);\n const template: HandlebarsTemplateDelegate = Handlebars.compile(content);\n return resolve(template(metadata));\n }\n } catch (error: any) {\n debug('error template handler %o', error?.message);\n logger.error(\n { error: error.message },\n 'notification template compilation has failed: @{error}'\n );\n reject(error);\n }\n });\n}\n\nexport async function handleNotify(\n metadata: Partial<Manifest>,\n notifyEntry,\n remoteUser: Partial<RemoteUser>,\n publishedPackage: string\n): Promise<boolean> {\n let regex;\n try {\n if (metadata.name && notifyEntry.packagePattern) {\n debug('checking package pattern %o', notifyEntry.packagePattern);\n debug('checking package pattern flags %o', notifyEntry.packagePatternFlags);\n regex = new RegExp(notifyEntry.packagePattern, notifyEntry.packagePatternFlags ?? '');\n if (!regex.test(metadata.name)) {\n logger.debug('Notification exclude does not match %o', metadata.name);\n return false;\n }\n debug('package pattern matched %o', metadata.name);\n }\n } catch (error: any) {\n logger.error('Invalid regex pattern or flags: %o', error?.message);\n return false;\n }\n\n let content;\n // FIXME: publisher is not part of the expected types metadata\n // @ts-ignore\n if (typeof metadata?.publisher === 'undefined' || metadata?.publisher === null) {\n // @ts-ignore\n metadata = { ...metadata, publishedPackage, publisher: { name: remoteUser.name as string } };\n debug('template metadata %o', metadata);\n content = await compileTemplate(notifyEntry.content, metadata);\n }\n\n const options: FetchOptions = {\n body: content,\n };\n\n // provides fallback support, it's accept an Object {} and Array of {}\n if (notifyEntry.headers && Array.isArray(notifyEntry.headers)) {\n const header = {};\n // FIXME: we can simplify this\n notifyEntry.headers.map(function (item): void {\n if (Object.is(item, item)) {\n for (const key in item) {\n /* eslint no-prototype-builtins: 0 */\n if (item.hasOwnProperty(key)) {\n header[key] = item[key];\n }\n }\n }\n });\n options.headers = header;\n } else if (Object.is(notifyEntry.headers, notifyEntry.headers)) {\n options.headers = notifyEntry.headers;\n }\n\n if (!notifyEntry.endpoint) {\n debug('error due endpoint is missing');\n throw new Error('missing parameter');\n }\n\n return notifyRequest(notifyEntry.endpoint, {\n method: notifyEntry.method,\n ...options,\n });\n}\n\nexport function sendNotification(\n metadata: Manifest,\n notify: Notification,\n remoteUser: Partial<RemoteUser>,\n publishedPackage: string\n): Promise<boolean> {\n return handleNotify(metadata, notify, remoteUser, publishedPackage) as Promise<any>;\n}\n\nfunction isHasNotification(value: any): value is Notification {\n return value && typeof value === 'object' && 'endpoint' in value && 'content' in value;\n}\n\nexport async function notify(\n metadata: Manifest,\n config: Config,\n remoteUser: RemoteUser,\n publishedPackage: string\n): Promise<boolean[]> {\n debug('init send notification');\n const notification = config?.notify;\n if (!notification) {\n debug('no notify configuration detected');\n return [false];\n }\n\n const isSingle = isHasNotification(notification);\n debug('is single notify %o', isSingle);\n if (isSingle) {\n debug('send single notification');\n try {\n const response = await sendNotification(\n metadata,\n config.notify as Notification,\n remoteUser,\n publishedPackage\n );\n return [response];\n } catch {\n debug('error on sending single notification');\n return [false];\n }\n } else {\n try {\n debug('send multiples notification');\n const notificationEntries = Object.entries(notification).filter(([, item]) =>\n isHasNotification(item)\n );\n debug('valid notification entries %o', notificationEntries.length);\n if (notificationEntries.length === 0) {\n // No valid notifications, return false for each entry\n return Object.keys(notification).map(() => false);\n }\n debug('sending %o notifications', notificationEntries.length);\n const results = await Promise.allSettled(\n notificationEntries.map(([, item]) =>\n sendNotification(metadata, item, remoteUser, publishedPackage)\n )\n ).catch((error) => {\n logger.error({ error }, 'notify request has failed: @error');\n });\n if (!results) {\n return [];\n }\n return results.map((result) => (result.status === 'fulfilled' ? result.value : false));\n } catch (error) {\n debug('error on sending multiple notification %o', error);\n return Object.keys(notification).map(() => false);\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"notify.js","names":[],"sources":["../src/notify.ts"],"sourcesContent":["import buildDebug from 'debug';\nimport Handlebars from 'handlebars';\n\nimport { logger } from '@verdaccio/logger';\nimport type { Config, Manifest, Notification, RemoteUser } from '@verdaccio/types';\n\nimport type { FetchOptions } from './notify-request';\nimport { notifyRequest } from './notify-request';\n\nconst debug = buildDebug('verdaccio:hooks');\n\nexport function compileTemplate(content, metadata) {\n // FUTURE: multiple handlers\n return new Promise((resolve, reject) => {\n let handler;\n try {\n if (!handler) {\n debug('compile default template handler %o', content);\n const template: HandlebarsTemplateDelegate = Handlebars.compile(content);\n return resolve(template(metadata));\n }\n } catch (error: any) {\n debug('error template handler %o', error?.message);\n logger.error(\n { error: error.message },\n 'notification template compilation has failed: @{error}'\n );\n reject(error);\n }\n });\n}\n\nexport async function handleNotify(\n metadata: Partial<Manifest>,\n notifyEntry,\n remoteUser: Partial<RemoteUser>,\n publishedPackage: string\n): Promise<boolean> {\n let regex;\n try {\n if (metadata.name && notifyEntry.packagePattern) {\n debug('checking package pattern %o', notifyEntry.packagePattern);\n debug('checking package pattern flags %o', notifyEntry.packagePatternFlags);\n regex = new RegExp(notifyEntry.packagePattern, notifyEntry.packagePatternFlags ?? '');\n if (!regex.test(metadata.name)) {\n logger.debug('Notification exclude does not match %o', metadata.name);\n return false;\n }\n debug('package pattern matched %o', metadata.name);\n }\n } catch (error: any) {\n logger.error('Invalid regex pattern or flags: %o', error?.message);\n return false;\n }\n\n let content;\n // FIXME: publisher is not part of the expected types metadata\n // @ts-ignore\n if (typeof metadata?.publisher === 'undefined' || metadata?.publisher === null) {\n // @ts-ignore\n metadata = { ...metadata, publishedPackage, publisher: { name: remoteUser.name as string } };\n debug('template metadata %o', metadata);\n content = await compileTemplate(notifyEntry.content, metadata);\n }\n\n const options: FetchOptions = {\n body: content,\n };\n\n // provides fallback support, it's accept an Object {} and Array of {}\n if (notifyEntry.headers && Array.isArray(notifyEntry.headers)) {\n const header = {};\n // FIXME: we can simplify this\n notifyEntry.headers.map(function (item): void {\n if (Object.is(item, item)) {\n for (const key in item) {\n /* eslint no-prototype-builtins: 0 */\n if (item.hasOwnProperty(key)) {\n header[key] = item[key];\n }\n }\n }\n });\n options.headers = header;\n } else if (Object.is(notifyEntry.headers, notifyEntry.headers)) {\n options.headers = notifyEntry.headers;\n }\n\n if (!notifyEntry.endpoint) {\n debug('error due endpoint is missing');\n throw new Error('missing parameter');\n }\n\n return notifyRequest(notifyEntry.endpoint, {\n method: notifyEntry.method,\n ...options,\n });\n}\n\nexport function sendNotification(\n metadata: Manifest,\n notify: Notification,\n remoteUser: Partial<RemoteUser>,\n publishedPackage: string\n): Promise<boolean> {\n return handleNotify(metadata, notify, remoteUser, publishedPackage) as Promise<any>;\n}\n\nfunction isHasNotification(value: any): value is Notification {\n return value && typeof value === 'object' && 'endpoint' in value && 'content' in value;\n}\n\nexport async function notify(\n metadata: Manifest,\n config: Config,\n remoteUser: RemoteUser,\n publishedPackage: string\n): Promise<boolean[]> {\n debug('init send notification');\n const notification = config?.notify;\n if (!notification) {\n debug('no notify configuration detected');\n return [false];\n }\n\n const isSingle = isHasNotification(notification);\n debug('is single notify %o', isSingle);\n if (isSingle) {\n debug('send single notification');\n try {\n const response = await sendNotification(\n metadata,\n config.notify as Notification,\n remoteUser,\n publishedPackage\n );\n return [response];\n } catch {\n debug('error on sending single notification');\n return [false];\n }\n } else {\n try {\n debug('send multiples notification');\n const notificationEntries = Object.entries(notification).filter(([, item]) =>\n isHasNotification(item)\n );\n debug('valid notification entries %o', notificationEntries.length);\n if (notificationEntries.length === 0) {\n // No valid notifications, return false for each entry\n return Object.keys(notification).map(() => false);\n }\n debug('sending %o notifications', notificationEntries.length);\n const results = await Promise.allSettled(\n notificationEntries.map(([, item]) =>\n sendNotification(metadata, item, remoteUser, publishedPackage)\n )\n ).catch((error) => {\n logger.error({ error }, 'notify request has failed: @error');\n });\n if (!results) {\n return [];\n }\n return results.map((result) => (result.status === 'fulfilled' ? result.value : false));\n } catch (error) {\n debug('error on sending multiple notification %o', error);\n return Object.keys(notification).map(() => false);\n }\n }\n}\n"],"mappings":"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"}
|
package/build/notify.mjs
ADDED
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import { notifyRequest } from "./notify-request.mjs";
|
|
2
|
+
import buildDebug from "debug";
|
|
3
|
+
import Handlebars from "handlebars";
|
|
4
|
+
import { logger } from "@verdaccio/logger";
|
|
5
|
+
//#region src/notify.ts
|
|
6
|
+
var debug = buildDebug("verdaccio:hooks");
|
|
7
|
+
function compileTemplate(content, metadata) {
|
|
8
|
+
return new Promise((resolve, reject) => {
|
|
9
|
+
try {
|
|
10
|
+
debug("compile default template handler %o", content);
|
|
11
|
+
return resolve(Handlebars.compile(content)(metadata));
|
|
12
|
+
} catch (error) {
|
|
13
|
+
debug("error template handler %o", error?.message);
|
|
14
|
+
logger.error({ error: error.message }, "notification template compilation has failed: @{error}");
|
|
15
|
+
reject(error);
|
|
16
|
+
}
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
async function handleNotify(metadata, notifyEntry, remoteUser, publishedPackage) {
|
|
20
|
+
let regex;
|
|
21
|
+
try {
|
|
22
|
+
if (metadata.name && notifyEntry.packagePattern) {
|
|
23
|
+
debug("checking package pattern %o", notifyEntry.packagePattern);
|
|
24
|
+
debug("checking package pattern flags %o", notifyEntry.packagePatternFlags);
|
|
25
|
+
regex = new RegExp(notifyEntry.packagePattern, notifyEntry.packagePatternFlags ?? "");
|
|
26
|
+
if (!regex.test(metadata.name)) {
|
|
27
|
+
logger.debug("Notification exclude does not match %o", metadata.name);
|
|
28
|
+
return false;
|
|
29
|
+
}
|
|
30
|
+
debug("package pattern matched %o", metadata.name);
|
|
31
|
+
}
|
|
32
|
+
} catch (error) {
|
|
33
|
+
logger.error("Invalid regex pattern or flags: %o", error?.message);
|
|
34
|
+
return false;
|
|
35
|
+
}
|
|
36
|
+
let content;
|
|
37
|
+
if (typeof metadata?.publisher === "undefined" || metadata?.publisher === null) {
|
|
38
|
+
metadata = {
|
|
39
|
+
...metadata,
|
|
40
|
+
publishedPackage,
|
|
41
|
+
publisher: { name: remoteUser.name }
|
|
42
|
+
};
|
|
43
|
+
debug("template metadata %o", metadata);
|
|
44
|
+
content = await compileTemplate(notifyEntry.content, metadata);
|
|
45
|
+
}
|
|
46
|
+
const options = { body: content };
|
|
47
|
+
if (notifyEntry.headers && Array.isArray(notifyEntry.headers)) {
|
|
48
|
+
const header = {};
|
|
49
|
+
notifyEntry.headers.map(function(item) {
|
|
50
|
+
if (Object.is(item, item)) {
|
|
51
|
+
for (const key in item) if (item.hasOwnProperty(key)) header[key] = item[key];
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
options.headers = header;
|
|
55
|
+
} else if (Object.is(notifyEntry.headers, notifyEntry.headers)) options.headers = notifyEntry.headers;
|
|
56
|
+
if (!notifyEntry.endpoint) {
|
|
57
|
+
debug("error due endpoint is missing");
|
|
58
|
+
throw new Error("missing parameter");
|
|
59
|
+
}
|
|
60
|
+
return notifyRequest(notifyEntry.endpoint, {
|
|
61
|
+
method: notifyEntry.method,
|
|
62
|
+
...options
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
function sendNotification(metadata, notify, remoteUser, publishedPackage) {
|
|
66
|
+
return handleNotify(metadata, notify, remoteUser, publishedPackage);
|
|
67
|
+
}
|
|
68
|
+
function isHasNotification(value) {
|
|
69
|
+
return value && typeof value === "object" && "endpoint" in value && "content" in value;
|
|
70
|
+
}
|
|
71
|
+
async function notify(metadata, config, remoteUser, publishedPackage) {
|
|
72
|
+
debug("init send notification");
|
|
73
|
+
const notification = config?.notify;
|
|
74
|
+
if (!notification) {
|
|
75
|
+
debug("no notify configuration detected");
|
|
76
|
+
return [false];
|
|
77
|
+
}
|
|
78
|
+
const isSingle = isHasNotification(notification);
|
|
79
|
+
debug("is single notify %o", isSingle);
|
|
80
|
+
if (isSingle) {
|
|
81
|
+
debug("send single notification");
|
|
82
|
+
try {
|
|
83
|
+
return [await sendNotification(metadata, config.notify, remoteUser, publishedPackage)];
|
|
84
|
+
} catch {
|
|
85
|
+
debug("error on sending single notification");
|
|
86
|
+
return [false];
|
|
87
|
+
}
|
|
88
|
+
} else try {
|
|
89
|
+
debug("send multiples notification");
|
|
90
|
+
const notificationEntries = Object.entries(notification).filter(([, item]) => isHasNotification(item));
|
|
91
|
+
debug("valid notification entries %o", notificationEntries.length);
|
|
92
|
+
if (notificationEntries.length === 0) return Object.keys(notification).map(() => false);
|
|
93
|
+
debug("sending %o notifications", notificationEntries.length);
|
|
94
|
+
const results = await Promise.allSettled(notificationEntries.map(([, item]) => sendNotification(metadata, item, remoteUser, publishedPackage))).catch((error) => {
|
|
95
|
+
logger.error({ error }, "notify request has failed: @error");
|
|
96
|
+
});
|
|
97
|
+
if (!results) return [];
|
|
98
|
+
return results.map((result) => result.status === "fulfilled" ? result.value : false);
|
|
99
|
+
} catch (error) {
|
|
100
|
+
debug("error on sending multiple notification %o", error);
|
|
101
|
+
return Object.keys(notification).map(() => false);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
//#endregion
|
|
105
|
+
export { handleNotify, notify, sendNotification };
|
|
106
|
+
|
|
107
|
+
//# sourceMappingURL=notify.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"notify.mjs","names":[],"sources":["../src/notify.ts"],"sourcesContent":["import buildDebug from 'debug';\nimport Handlebars from 'handlebars';\n\nimport { logger } from '@verdaccio/logger';\nimport type { Config, Manifest, Notification, RemoteUser } from '@verdaccio/types';\n\nimport type { FetchOptions } from './notify-request';\nimport { notifyRequest } from './notify-request';\n\nconst debug = buildDebug('verdaccio:hooks');\n\nexport function compileTemplate(content, metadata) {\n // FUTURE: multiple handlers\n return new Promise((resolve, reject) => {\n let handler;\n try {\n if (!handler) {\n debug('compile default template handler %o', content);\n const template: HandlebarsTemplateDelegate = Handlebars.compile(content);\n return resolve(template(metadata));\n }\n } catch (error: any) {\n debug('error template handler %o', error?.message);\n logger.error(\n { error: error.message },\n 'notification template compilation has failed: @{error}'\n );\n reject(error);\n }\n });\n}\n\nexport async function handleNotify(\n metadata: Partial<Manifest>,\n notifyEntry,\n remoteUser: Partial<RemoteUser>,\n publishedPackage: string\n): Promise<boolean> {\n let regex;\n try {\n if (metadata.name && notifyEntry.packagePattern) {\n debug('checking package pattern %o', notifyEntry.packagePattern);\n debug('checking package pattern flags %o', notifyEntry.packagePatternFlags);\n regex = new RegExp(notifyEntry.packagePattern, notifyEntry.packagePatternFlags ?? '');\n if (!regex.test(metadata.name)) {\n logger.debug('Notification exclude does not match %o', metadata.name);\n return false;\n }\n debug('package pattern matched %o', metadata.name);\n }\n } catch (error: any) {\n logger.error('Invalid regex pattern or flags: %o', error?.message);\n return false;\n }\n\n let content;\n // FIXME: publisher is not part of the expected types metadata\n // @ts-ignore\n if (typeof metadata?.publisher === 'undefined' || metadata?.publisher === null) {\n // @ts-ignore\n metadata = { ...metadata, publishedPackage, publisher: { name: remoteUser.name as string } };\n debug('template metadata %o', metadata);\n content = await compileTemplate(notifyEntry.content, metadata);\n }\n\n const options: FetchOptions = {\n body: content,\n };\n\n // provides fallback support, it's accept an Object {} and Array of {}\n if (notifyEntry.headers && Array.isArray(notifyEntry.headers)) {\n const header = {};\n // FIXME: we can simplify this\n notifyEntry.headers.map(function (item): void {\n if (Object.is(item, item)) {\n for (const key in item) {\n /* eslint no-prototype-builtins: 0 */\n if (item.hasOwnProperty(key)) {\n header[key] = item[key];\n }\n }\n }\n });\n options.headers = header;\n } else if (Object.is(notifyEntry.headers, notifyEntry.headers)) {\n options.headers = notifyEntry.headers;\n }\n\n if (!notifyEntry.endpoint) {\n debug('error due endpoint is missing');\n throw new Error('missing parameter');\n }\n\n return notifyRequest(notifyEntry.endpoint, {\n method: notifyEntry.method,\n ...options,\n });\n}\n\nexport function sendNotification(\n metadata: Manifest,\n notify: Notification,\n remoteUser: Partial<RemoteUser>,\n publishedPackage: string\n): Promise<boolean> {\n return handleNotify(metadata, notify, remoteUser, publishedPackage) as Promise<any>;\n}\n\nfunction isHasNotification(value: any): value is Notification {\n return value && typeof value === 'object' && 'endpoint' in value && 'content' in value;\n}\n\nexport async function notify(\n metadata: Manifest,\n config: Config,\n remoteUser: RemoteUser,\n publishedPackage: string\n): Promise<boolean[]> {\n debug('init send notification');\n const notification = config?.notify;\n if (!notification) {\n debug('no notify configuration detected');\n return [false];\n }\n\n const isSingle = isHasNotification(notification);\n debug('is single notify %o', isSingle);\n if (isSingle) {\n debug('send single notification');\n try {\n const response = await sendNotification(\n metadata,\n config.notify as Notification,\n remoteUser,\n publishedPackage\n );\n return [response];\n } catch {\n debug('error on sending single notification');\n return [false];\n }\n } else {\n try {\n debug('send multiples notification');\n const notificationEntries = Object.entries(notification).filter(([, item]) =>\n isHasNotification(item)\n );\n debug('valid notification entries %o', notificationEntries.length);\n if (notificationEntries.length === 0) {\n // No valid notifications, return false for each entry\n return Object.keys(notification).map(() => false);\n }\n debug('sending %o notifications', notificationEntries.length);\n const results = await Promise.allSettled(\n notificationEntries.map(([, item]) =>\n sendNotification(metadata, item, remoteUser, publishedPackage)\n )\n ).catch((error) => {\n logger.error({ error }, 'notify request has failed: @error');\n });\n if (!results) {\n return [];\n }\n return results.map((result) => (result.status === 'fulfilled' ? result.value : false));\n } catch (error) {\n debug('error on sending multiple notification %o', error);\n return Object.keys(notification).map(() => false);\n }\n }\n}\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@verdaccio/hooks",
|
|
3
|
-
"version": "9.0.0-next-9.
|
|
3
|
+
"version": "9.0.0-next-9.4",
|
|
4
4
|
"description": "Verdaccio Hooks",
|
|
5
5
|
"main": "./build/index.js",
|
|
6
6
|
"types": "build/index.d.ts",
|
|
@@ -33,16 +33,16 @@
|
|
|
33
33
|
"node": ">=24"
|
|
34
34
|
},
|
|
35
35
|
"dependencies": {
|
|
36
|
-
"@verdaccio/core": "9.0.0-next-9.
|
|
37
|
-
"@verdaccio/logger": "9.0.0-next-9.
|
|
36
|
+
"@verdaccio/core": "9.0.0-next-9.4",
|
|
37
|
+
"@verdaccio/logger": "9.0.0-next-9.4",
|
|
38
38
|
"debug": "4.4.3",
|
|
39
39
|
"got-cjs": "12.5.4",
|
|
40
40
|
"handlebars": "4.7.8"
|
|
41
41
|
},
|
|
42
42
|
"devDependencies": {
|
|
43
|
-
"@verdaccio/config": "9.0.0-next-9.
|
|
43
|
+
"@verdaccio/config": "9.0.0-next-9.4",
|
|
44
44
|
"@verdaccio/types": "14.0.0-next-9.1",
|
|
45
|
-
"@verdaccio/test-helper": "5.0.0-next-9.
|
|
45
|
+
"@verdaccio/test-helper": "5.0.0-next-9.4",
|
|
46
46
|
"nock": "13.5.6",
|
|
47
47
|
"vitest": "3.2.4"
|
|
48
48
|
},
|
|
@@ -50,13 +50,24 @@
|
|
|
50
50
|
"type": "opencollective",
|
|
51
51
|
"url": "https://opencollective.com/verdaccio"
|
|
52
52
|
},
|
|
53
|
+
"module": "./build/index.mjs",
|
|
54
|
+
"exports": {
|
|
55
|
+
".": {
|
|
56
|
+
"import": {
|
|
57
|
+
"types": "./build/index.d.ts",
|
|
58
|
+
"default": "./build/index.mjs"
|
|
59
|
+
},
|
|
60
|
+
"require": {
|
|
61
|
+
"types": "./build/index.d.ts",
|
|
62
|
+
"default": "./build/index.js"
|
|
63
|
+
}
|
|
64
|
+
},
|
|
65
|
+
"./build/*": "./build/*"
|
|
66
|
+
},
|
|
53
67
|
"scripts": {
|
|
54
68
|
"clean": "rimraf ./build",
|
|
55
69
|
"test": "vitest run",
|
|
56
|
-
"
|
|
57
|
-
"build
|
|
58
|
-
"build:js": "babel src/ --out-dir build/ --copy-files --extensions \".ts,.tsx\" --source-maps",
|
|
59
|
-
"watch": "pnpm build:js -- --watch",
|
|
60
|
-
"build": "pnpm run build:js && pnpm run build:types"
|
|
70
|
+
"watch": "vite build --watch",
|
|
71
|
+
"build": "vite build"
|
|
61
72
|
}
|
|
62
73
|
}
|
package/build/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["_notify","require"],"sources":["../src/index.ts"],"sourcesContent":["export { handleNotify, notify, sendNotification } from './notify';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,OAAA,GAAAC,OAAA","ignoreList":[]}
|