apitally 0.1.1 → 0.1.3
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/lib/cjs/common/client.js +395 -0
- package/lib/cjs/common/client.js.map +1 -0
- package/lib/cjs/common/index.js +13 -0
- package/lib/cjs/common/index.js.map +1 -0
- package/lib/cjs/common/keyRegistry.js +162 -0
- package/lib/cjs/common/keyRegistry.js.map +1 -0
- package/lib/cjs/common/logging.js +17 -0
- package/lib/cjs/common/logging.js.map +1 -0
- package/lib/cjs/common/requestLogger.js +69 -0
- package/lib/cjs/common/requestLogger.js.map +1 -0
- package/lib/cjs/common/types.js +6 -0
- package/lib/cjs/common/types.js.map +1 -0
- package/lib/cjs/common/utils.js +24 -0
- package/lib/cjs/common/utils.js.map +1 -0
- package/lib/cjs/common/validationErrorLogger.js +58 -0
- package/lib/cjs/common/validationErrorLogger.js.map +1 -0
- package/lib/cjs/express/auth.js +105 -0
- package/lib/cjs/express/auth.js.map +1 -0
- package/lib/cjs/express/index.js +27 -0
- package/lib/cjs/express/index.js.map +1 -0
- package/lib/cjs/express/listEndpoints.js +175 -0
- package/lib/cjs/express/listEndpoints.js.map +1 -0
- package/lib/cjs/express/middleware.js +167 -0
- package/lib/cjs/express/middleware.js.map +1 -0
- package/lib/cjs/fastify/auth.js +105 -0
- package/lib/cjs/fastify/auth.js.map +1 -0
- package/lib/cjs/fastify/index.js +28 -0
- package/lib/cjs/fastify/index.js.map +1 -0
- package/lib/cjs/fastify/plugin.js +147 -0
- package/lib/cjs/fastify/plugin.js.map +1 -0
- package/lib/cjs/index.js +6 -0
- package/lib/cjs/index.js.map +1 -0
- package/lib/cjs/koa/auth.js +113 -0
- package/lib/cjs/koa/auth.js.map +1 -0
- package/lib/cjs/koa/index.js +27 -0
- package/lib/cjs/koa/index.js.map +1 -0
- package/lib/cjs/koa/middleware.js +122 -0
- package/lib/cjs/koa/middleware.js.map +1 -0
- package/lib/cjs/nestjs/auth.js +132 -0
- package/lib/cjs/nestjs/auth.js.map +1 -0
- package/lib/cjs/nestjs/index.js +39 -0
- package/lib/cjs/nestjs/index.js.map +1 -0
- package/lib/esm/common/client.js +385 -0
- package/lib/esm/common/client.js.map +1 -0
- package/lib/esm/common/index.js +1 -0
- package/lib/esm/common/index.js.map +1 -0
- package/lib/esm/common/keyRegistry.js +155 -0
- package/lib/esm/common/keyRegistry.js.map +1 -0
- package/lib/esm/common/logging.js +11 -0
- package/lib/esm/common/logging.js.map +1 -0
- package/lib/esm/common/requestLogger.js +63 -0
- package/lib/esm/common/requestLogger.js.map +1 -0
- package/lib/esm/common/types.js +1 -0
- package/lib/esm/common/types.js.map +1 -0
- package/lib/esm/common/utils.js +16 -0
- package/lib/esm/common/utils.js.map +1 -0
- package/lib/esm/common/validationErrorLogger.js +52 -0
- package/lib/esm/common/validationErrorLogger.js.map +1 -0
- package/lib/esm/express/auth.js +98 -0
- package/lib/esm/express/auth.js.map +1 -0
- package/lib/esm/express/index.js +4 -0
- package/lib/esm/express/index.js.map +1 -0
- package/lib/esm/express/listEndpoints.js +168 -0
- package/lib/esm/express/listEndpoints.js.map +1 -0
- package/lib/esm/express/middleware.js +160 -0
- package/lib/esm/express/middleware.js.map +1 -0
- package/lib/esm/fastify/auth.js +98 -0
- package/lib/esm/fastify/auth.js.map +1 -0
- package/lib/esm/fastify/index.js +4 -0
- package/lib/esm/fastify/index.js.map +1 -0
- package/lib/esm/fastify/plugin.js +140 -0
- package/lib/esm/fastify/plugin.js.map +1 -0
- package/lib/esm/index.js +1 -0
- package/lib/esm/index.js.map +1 -0
- package/lib/esm/koa/auth.js +106 -0
- package/lib/esm/koa/auth.js.map +1 -0
- package/lib/esm/koa/index.js +4 -0
- package/lib/esm/koa/index.js.map +1 -0
- package/lib/esm/koa/middleware.js +115 -0
- package/lib/esm/koa/middleware.js.map +1 -0
- package/lib/esm/nestjs/auth.js +126 -0
- package/lib/esm/nestjs/auth.js.map +1 -0
- package/lib/esm/nestjs/index.js +4 -0
- package/lib/esm/nestjs/index.js.map +1 -0
- package/{dist/src → lib/types}/common/client.d.ts +7 -6
- package/lib/types/common/client.d.ts.map +1 -0
- package/lib/types/common/index.d.ts +2 -0
- package/{dist/src → lib/types}/common/index.d.ts.map +1 -1
- package/{dist/src → lib/types}/common/requestLogger.d.ts +1 -1
- package/{dist/src → lib/types}/common/requestLogger.d.ts.map +1 -1
- package/{dist/src → lib/types}/common/types.d.ts +2 -2
- package/lib/types/common/types.d.ts.map +1 -0
- package/{dist/src → lib/types}/common/validationErrorLogger.d.ts +1 -1
- package/{dist/src → lib/types}/common/validationErrorLogger.d.ts.map +1 -1
- package/{dist/src → lib/types}/express/auth.d.ts +1 -1
- package/lib/types/express/auth.d.ts.map +1 -0
- package/lib/types/express/index.d.ts +4 -0
- package/{dist/src → lib/types}/express/index.d.ts.map +1 -1
- package/lib/types/express/listEndpoints.d.ts +3 -0
- package/{dist/src → lib/types}/express/middleware.d.ts +3 -3
- package/lib/types/express/middleware.d.ts.map +1 -0
- package/{dist/src → lib/types}/fastify/auth.d.ts +1 -1
- package/lib/types/fastify/auth.d.ts.map +1 -0
- package/lib/types/fastify/index.d.ts +4 -0
- package/{dist/src → lib/types}/fastify/index.d.ts.map +1 -1
- package/lib/types/fastify/plugin.d.ts +15 -0
- package/lib/types/fastify/plugin.d.ts.map +1 -0
- package/lib/types/koa/index.d.ts +4 -0
- package/{dist/src → lib/types}/koa/index.d.ts.map +1 -1
- package/{dist/src → lib/types}/koa/middleware.d.ts +1 -1
- package/{dist/src → lib/types}/koa/middleware.d.ts.map +1 -1
- package/{dist/src → lib/types}/nestjs/auth.d.ts +1 -1
- package/{dist/src → lib/types}/nestjs/auth.d.ts.map +1 -1
- package/lib/types/nestjs/index.d.ts +4 -0
- package/lib/types/nestjs/index.d.ts.map +1 -0
- package/package.json +117 -8
- package/dist/src/common/client.d.ts.map +0 -1
- package/dist/src/common/client.js +0 -244
- package/dist/src/common/client.js.map +0 -1
- package/dist/src/common/index.d.ts +0 -2
- package/dist/src/common/index.js +0 -6
- package/dist/src/common/index.js.map +0 -1
- package/dist/src/common/keyRegistry.js +0 -90
- package/dist/src/common/keyRegistry.js.map +0 -1
- package/dist/src/common/logging.js +0 -13
- package/dist/src/common/logging.js.map +0 -1
- package/dist/src/common/requestLogger.js +0 -49
- package/dist/src/common/requestLogger.js.map +0 -1
- package/dist/src/common/types.d.ts.map +0 -1
- package/dist/src/common/types.js +0 -3
- package/dist/src/common/types.js.map +0 -1
- package/dist/src/common/utils.js +0 -23
- package/dist/src/common/utils.js.map +0 -1
- package/dist/src/common/validationErrorLogger.js +0 -40
- package/dist/src/common/validationErrorLogger.js.map +0 -1
- package/dist/src/express/auth.d.ts.map +0 -1
- package/dist/src/express/auth.js +0 -66
- package/dist/src/express/auth.js.map +0 -1
- package/dist/src/express/index.d.ts +0 -4
- package/dist/src/express/index.js +0 -10
- package/dist/src/express/index.js.map +0 -1
- package/dist/src/express/listEndpoints.d.ts +0 -3
- package/dist/src/express/listEndpoints.js +0 -166
- package/dist/src/express/listEndpoints.js.map +0 -1
- package/dist/src/express/middleware.d.ts.map +0 -1
- package/dist/src/express/middleware.js +0 -164
- package/dist/src/express/middleware.js.map +0 -1
- package/dist/src/fastify/auth.d.ts.map +0 -1
- package/dist/src/fastify/auth.js +0 -66
- package/dist/src/fastify/auth.js.map +0 -1
- package/dist/src/fastify/index.d.ts +0 -4
- package/dist/src/fastify/index.js +0 -13
- package/dist/src/fastify/index.js.map +0 -1
- package/dist/src/fastify/plugin.d.ts +0 -16
- package/dist/src/fastify/plugin.d.ts.map +0 -1
- package/dist/src/fastify/plugin.js +0 -124
- package/dist/src/fastify/plugin.js.map +0 -1
- package/dist/src/index.js +0 -3
- package/dist/src/index.js.map +0 -1
- package/dist/src/koa/auth.js +0 -67
- package/dist/src/koa/auth.js.map +0 -1
- package/dist/src/koa/index.d.ts +0 -4
- package/dist/src/koa/index.js +0 -10
- package/dist/src/koa/index.js.map +0 -1
- package/dist/src/koa/middleware.js +0 -108
- package/dist/src/koa/middleware.js.map +0 -1
- package/dist/src/nestjs/auth.js +0 -88
- package/dist/src/nestjs/auth.js.map +0 -1
- package/dist/src/nestjs/index.d.ts +0 -4
- package/dist/src/nestjs/index.d.ts.map +0 -1
- package/dist/src/nestjs/index.js +0 -12
- package/dist/src/nestjs/index.js.map +0 -1
- /package/{dist/src → lib/types}/common/keyRegistry.d.ts +0 -0
- /package/{dist/src → lib/types}/common/keyRegistry.d.ts.map +0 -0
- /package/{dist/src → lib/types}/common/logging.d.ts +0 -0
- /package/{dist/src → lib/types}/common/logging.d.ts.map +0 -0
- /package/{dist/src → lib/types}/common/utils.d.ts +0 -0
- /package/{dist/src → lib/types}/common/utils.d.ts.map +0 -0
- /package/{dist/src → lib/types}/express/listEndpoints.d.ts.map +0 -0
- /package/{dist/src → lib/types}/index.d.ts +0 -0
- /package/{dist/src → lib/types}/index.d.ts.map +0 -0
- /package/{dist/src → lib/types}/koa/auth.d.ts +0 -0
- /package/{dist/src → lib/types}/koa/auth.d.ts.map +0 -0
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
|
|
2
|
+
import _regeneratorRuntime from "@babel/runtime/regenerator";
|
|
3
|
+
import { ApitallyClient } from "../common/client.js";
|
|
4
|
+
export var requireApiKey = function requireApiKey() {
|
|
5
|
+
var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
|
|
6
|
+
scopes = _ref.scopes,
|
|
7
|
+
customHeader = _ref.customHeader;
|
|
8
|
+
return /*#__PURE__*/function () {
|
|
9
|
+
var _ref2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(request, reply, done) {
|
|
10
|
+
var apiKey, authorizationParts, customHeaderValue, client, keyInfo;
|
|
11
|
+
return _regeneratorRuntime.wrap(function _callee$(_context) {
|
|
12
|
+
while (1) switch (_context.prev = _context.next) {
|
|
13
|
+
case 0:
|
|
14
|
+
if (customHeader) {
|
|
15
|
+
_context.next = 13;
|
|
16
|
+
break;
|
|
17
|
+
}
|
|
18
|
+
if (request.headers.authorization) {
|
|
19
|
+
_context.next = 4;
|
|
20
|
+
break;
|
|
21
|
+
}
|
|
22
|
+
reply.code(401).header("WWW-Authenticate", "ApiKey").send({
|
|
23
|
+
error: "Missing authorization header"
|
|
24
|
+
});
|
|
25
|
+
return _context.abrupt("return");
|
|
26
|
+
case 4:
|
|
27
|
+
authorizationParts = request.headers.authorization.split(" ");
|
|
28
|
+
if (!(authorizationParts.length === 2 && authorizationParts[0].toLowerCase() === "apikey")) {
|
|
29
|
+
_context.next = 9;
|
|
30
|
+
break;
|
|
31
|
+
}
|
|
32
|
+
apiKey = authorizationParts[1];
|
|
33
|
+
_context.next = 11;
|
|
34
|
+
break;
|
|
35
|
+
case 9:
|
|
36
|
+
reply.code(401).header("WWW-Authenticate", "ApiKey").send({
|
|
37
|
+
error: "Invalid authorization scheme"
|
|
38
|
+
});
|
|
39
|
+
return _context.abrupt("return");
|
|
40
|
+
case 11:
|
|
41
|
+
_context.next = 14;
|
|
42
|
+
break;
|
|
43
|
+
case 13:
|
|
44
|
+
if (customHeader) {
|
|
45
|
+
customHeaderValue = request.headers[customHeader.toLowerCase()];
|
|
46
|
+
if (typeof customHeaderValue === "string") {
|
|
47
|
+
apiKey = customHeaderValue;
|
|
48
|
+
} else if (Array.isArray(customHeaderValue)) {
|
|
49
|
+
apiKey = customHeaderValue[0];
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
case 14:
|
|
53
|
+
if (apiKey) {
|
|
54
|
+
_context.next = 17;
|
|
55
|
+
break;
|
|
56
|
+
}
|
|
57
|
+
reply.code(403).send({
|
|
58
|
+
error: "Missing API key"
|
|
59
|
+
});
|
|
60
|
+
return _context.abrupt("return");
|
|
61
|
+
case 17:
|
|
62
|
+
client = ApitallyClient.getInstance();
|
|
63
|
+
_context.next = 20;
|
|
64
|
+
return client.keyRegistry.get(apiKey);
|
|
65
|
+
case 20:
|
|
66
|
+
keyInfo = _context.sent;
|
|
67
|
+
if (keyInfo) {
|
|
68
|
+
_context.next = 24;
|
|
69
|
+
break;
|
|
70
|
+
}
|
|
71
|
+
reply.code(403).send({
|
|
72
|
+
error: "Invalid API key"
|
|
73
|
+
});
|
|
74
|
+
return _context.abrupt("return");
|
|
75
|
+
case 24:
|
|
76
|
+
if (!(scopes && !keyInfo.hasScopes(scopes))) {
|
|
77
|
+
_context.next = 27;
|
|
78
|
+
break;
|
|
79
|
+
}
|
|
80
|
+
reply.code(403).send({
|
|
81
|
+
error: "Permission denied"
|
|
82
|
+
});
|
|
83
|
+
return _context.abrupt("return");
|
|
84
|
+
case 27:
|
|
85
|
+
request.keyInfo = keyInfo;
|
|
86
|
+
done();
|
|
87
|
+
case 29:
|
|
88
|
+
case "end":
|
|
89
|
+
return _context.stop();
|
|
90
|
+
}
|
|
91
|
+
}, _callee);
|
|
92
|
+
}));
|
|
93
|
+
return function (_x, _x2, _x3) {
|
|
94
|
+
return _ref2.apply(this, arguments);
|
|
95
|
+
};
|
|
96
|
+
}();
|
|
97
|
+
};
|
|
98
|
+
//# sourceMappingURL=auth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.js","names":["ApitallyClient","requireApiKey","_ref","arguments","length","undefined","scopes","customHeader","_ref2","_asyncToGenerator","_regeneratorRuntime","mark","_callee","request","reply","done","apiKey","authorizationParts","customHeaderValue","client","keyInfo","wrap","_callee$","_context","prev","next","headers","authorization","code","header","send","error","abrupt","split","toLowerCase","Array","isArray","getInstance","keyRegistry","get","sent","hasScopes","stop","_x","_x2","_x3","apply"],"sources":["../../../src/fastify/auth.ts"],"sourcesContent":[null],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":["KeyInfo","requireApiKey","default","apitallyPlugin"],"sources":["../../../src/fastify/index.ts"],"sourcesContent":[null],"mappings":"AAAA,SAASA,OAAO,QAAQ,0BAA0B;AAClD,SAASC,aAAa,QAAQ,WAAW;AACzC,SAASC,OAAO,IAAIC,cAAc,QAAQ,aAAa"}
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
2
|
+
import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
|
|
3
|
+
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; }
|
|
4
|
+
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; }
|
|
5
|
+
import _regeneratorRuntime from "@babel/runtime/regenerator";
|
|
6
|
+
import fp from "fastify-plugin";
|
|
7
|
+
import { ApitallyClient } from "../common/client.js";
|
|
8
|
+
import { KeyInfo } from "../common/keyRegistry.js";
|
|
9
|
+
import { getPackageVersion } from "../common/utils.js";
|
|
10
|
+
var apitallyPlugin = /*#__PURE__*/function () {
|
|
11
|
+
var _ref = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee2(fastify, config) {
|
|
12
|
+
var client, routes;
|
|
13
|
+
return _regeneratorRuntime.wrap(function _callee2$(_context2) {
|
|
14
|
+
while (1) switch (_context2.prev = _context2.next) {
|
|
15
|
+
case 0:
|
|
16
|
+
client = new ApitallyClient(config);
|
|
17
|
+
routes = [];
|
|
18
|
+
fastify.decorateRequest("consumerIdentifier", null);
|
|
19
|
+
fastify.decorateRequest("keyInfo", null);
|
|
20
|
+
fastify.decorateReply("payload", null);
|
|
21
|
+
fastify.addHook("onRoute", function (routeOptions) {
|
|
22
|
+
var methods = Array.isArray(routeOptions.method) ? routeOptions.method : [routeOptions.method];
|
|
23
|
+
methods.forEach(function (method) {
|
|
24
|
+
routeOptions.onSend;
|
|
25
|
+
if (method !== "HEAD") {
|
|
26
|
+
routes.push({
|
|
27
|
+
method: method,
|
|
28
|
+
path: routeOptions.url
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
});
|
|
33
|
+
fastify.addHook("onReady", function () {
|
|
34
|
+
client.setAppInfo(getAppInfo(routes, config.appVersion));
|
|
35
|
+
});
|
|
36
|
+
fastify.addHook("onClose", /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
|
|
37
|
+
return _regeneratorRuntime.wrap(function _callee$(_context) {
|
|
38
|
+
while (1) switch (_context.prev = _context.next) {
|
|
39
|
+
case 0:
|
|
40
|
+
_context.next = 2;
|
|
41
|
+
return client.handleShutdown();
|
|
42
|
+
case 2:
|
|
43
|
+
case "end":
|
|
44
|
+
return _context.stop();
|
|
45
|
+
}
|
|
46
|
+
}, _callee);
|
|
47
|
+
})));
|
|
48
|
+
fastify.addHook("onSend", function (request, reply, payload, done) {
|
|
49
|
+
try {
|
|
50
|
+
reply.payload = JSON.parse(payload);
|
|
51
|
+
} catch (error) {} // eslint-disable-line no-empty
|
|
52
|
+
done();
|
|
53
|
+
});
|
|
54
|
+
fastify.addHook("onResponse", function (request, reply, done) {
|
|
55
|
+
// Get path from routeOptions if available (from v4), otherwise fallback to deprecated routerPath
|
|
56
|
+
var path = "routeOptions" in request ? request.routeOptions.url : request.routerPath;
|
|
57
|
+
client.requestLogger.logRequest({
|
|
58
|
+
consumer: getConsumer(request),
|
|
59
|
+
method: request.method,
|
|
60
|
+
path: path,
|
|
61
|
+
statusCode: reply.statusCode,
|
|
62
|
+
responseTime: reply.getResponseTime()
|
|
63
|
+
});
|
|
64
|
+
if ((reply.statusCode === 400 || reply.statusCode === 422) && reply.payload && (!reply.payload.code || reply.payload.code === "FST_ERR_VALIDATION") && typeof reply.payload.message === "string") {
|
|
65
|
+
var validationErrors = extractAjvErrors(reply.payload.message);
|
|
66
|
+
validationErrors.forEach(function (error) {
|
|
67
|
+
client.validationErrorLogger.logValidationError(_objectSpread({
|
|
68
|
+
consumer: getConsumer(request),
|
|
69
|
+
method: request.method,
|
|
70
|
+
path: path
|
|
71
|
+
}, error));
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
done();
|
|
75
|
+
});
|
|
76
|
+
case 10:
|
|
77
|
+
case "end":
|
|
78
|
+
return _context2.stop();
|
|
79
|
+
}
|
|
80
|
+
}, _callee2);
|
|
81
|
+
}));
|
|
82
|
+
return function apitallyPlugin(_x, _x2) {
|
|
83
|
+
return _ref.apply(this, arguments);
|
|
84
|
+
};
|
|
85
|
+
}();
|
|
86
|
+
var getAppInfo = function getAppInfo(routes, appVersion) {
|
|
87
|
+
var versions = [["nodejs", process.version]];
|
|
88
|
+
var fastifyVersion = getPackageVersion("fastify");
|
|
89
|
+
var apitallyVersion = getPackageVersion("../..");
|
|
90
|
+
if (fastifyVersion) {
|
|
91
|
+
versions.push(["fastify", fastifyVersion]);
|
|
92
|
+
}
|
|
93
|
+
if (apitallyVersion) {
|
|
94
|
+
versions.push(["apitally", apitallyVersion]);
|
|
95
|
+
}
|
|
96
|
+
if (appVersion) {
|
|
97
|
+
versions.push(["app", appVersion]);
|
|
98
|
+
}
|
|
99
|
+
return {
|
|
100
|
+
paths: routes,
|
|
101
|
+
versions: new Map(versions),
|
|
102
|
+
client: "js:fastify"
|
|
103
|
+
};
|
|
104
|
+
};
|
|
105
|
+
var getConsumer = function getConsumer(request) {
|
|
106
|
+
if (request.consumerIdentifier) {
|
|
107
|
+
return String(request.consumerIdentifier);
|
|
108
|
+
}
|
|
109
|
+
if (request.keyInfo && request.keyInfo instanceof KeyInfo) {
|
|
110
|
+
return "key:".concat(request.keyInfo.keyId);
|
|
111
|
+
}
|
|
112
|
+
return null;
|
|
113
|
+
};
|
|
114
|
+
var extractAjvErrors = function extractAjvErrors(message) {
|
|
115
|
+
var regex = /(?<=^|, )((?:headers|params|query|querystring|body)[/.][^ ]+)(?= )/g;
|
|
116
|
+
var matches = [];
|
|
117
|
+
var match;
|
|
118
|
+
while ((match = regex.exec(message)) !== null) {
|
|
119
|
+
matches.push({
|
|
120
|
+
match: match[0],
|
|
121
|
+
index: match.index
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
return matches.map(function (m, i) {
|
|
125
|
+
var endIndex = i + 1 < matches.length ? matches[i + 1].index - 2 : message.length;
|
|
126
|
+
var matchSplit = m.match.split(/[/.]/);
|
|
127
|
+
if (matchSplit[0] === "querystring") {
|
|
128
|
+
matchSplit[0] = "query";
|
|
129
|
+
}
|
|
130
|
+
return {
|
|
131
|
+
loc: matchSplit.join("."),
|
|
132
|
+
msg: message.substring(m.index, endIndex),
|
|
133
|
+
type: ""
|
|
134
|
+
};
|
|
135
|
+
});
|
|
136
|
+
};
|
|
137
|
+
export default fp(apitallyPlugin, {
|
|
138
|
+
name: "apitally"
|
|
139
|
+
});
|
|
140
|
+
//# sourceMappingURL=plugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin.js","names":["fp","ApitallyClient","KeyInfo","getPackageVersion","apitallyPlugin","_ref","_asyncToGenerator","_regeneratorRuntime","mark","_callee2","fastify","config","client","routes","wrap","_callee2$","_context2","prev","next","decorateRequest","decorateReply","addHook","routeOptions","methods","Array","isArray","method","forEach","onSend","push","path","url","setAppInfo","getAppInfo","appVersion","_callee","_callee$","_context","handleShutdown","stop","request","reply","payload","done","JSON","parse","error","routerPath","requestLogger","logRequest","consumer","getConsumer","statusCode","responseTime","getResponseTime","code","message","validationErrors","extractAjvErrors","validationErrorLogger","logValidationError","_objectSpread","_x","_x2","apply","arguments","versions","process","version","fastifyVersion","apitallyVersion","paths","Map","consumerIdentifier","String","keyInfo","concat","keyId","regex","matches","match","exec","index","map","m","i","endIndex","length","matchSplit","split","loc","join","msg","substring","type","name"],"sources":["../../../src/fastify/plugin.ts"],"sourcesContent":[null],"mappings":"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"}
|
package/lib/esm/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../src/index.ts"],"sourcesContent":[null],"mappings":""}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
|
|
2
|
+
import _regeneratorRuntime from "@babel/runtime/regenerator";
|
|
3
|
+
import { ApitallyClient } from "../common/client.js";
|
|
4
|
+
export var requireApiKey = function requireApiKey() {
|
|
5
|
+
var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
|
|
6
|
+
scopes = _ref.scopes,
|
|
7
|
+
customHeader = _ref.customHeader;
|
|
8
|
+
return /*#__PURE__*/function () {
|
|
9
|
+
var _ref2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(ctx, next) {
|
|
10
|
+
var apiKey, authorizationParts, customHeaderValue, client, keyInfo;
|
|
11
|
+
return _regeneratorRuntime.wrap(function _callee$(_context) {
|
|
12
|
+
while (1) switch (_context.prev = _context.next) {
|
|
13
|
+
case 0:
|
|
14
|
+
if (customHeader) {
|
|
15
|
+
_context.next = 17;
|
|
16
|
+
break;
|
|
17
|
+
}
|
|
18
|
+
if (ctx.headers.authorization) {
|
|
19
|
+
_context.next = 6;
|
|
20
|
+
break;
|
|
21
|
+
}
|
|
22
|
+
ctx.status = 401;
|
|
23
|
+
ctx.set("WWW-Authenticate", "ApiKey");
|
|
24
|
+
ctx.body = {
|
|
25
|
+
error: "Missing authorization header"
|
|
26
|
+
};
|
|
27
|
+
return _context.abrupt("return");
|
|
28
|
+
case 6:
|
|
29
|
+
authorizationParts = ctx.headers.authorization.split(" ");
|
|
30
|
+
if (!(authorizationParts.length === 2 && authorizationParts[0].toLowerCase() === "apikey")) {
|
|
31
|
+
_context.next = 11;
|
|
32
|
+
break;
|
|
33
|
+
}
|
|
34
|
+
apiKey = authorizationParts[1];
|
|
35
|
+
_context.next = 15;
|
|
36
|
+
break;
|
|
37
|
+
case 11:
|
|
38
|
+
ctx.status = 401;
|
|
39
|
+
ctx.set("WWW-Authenticate", "ApiKey");
|
|
40
|
+
ctx.body = {
|
|
41
|
+
error: "Invalid authorization scheme"
|
|
42
|
+
};
|
|
43
|
+
return _context.abrupt("return");
|
|
44
|
+
case 15:
|
|
45
|
+
_context.next = 18;
|
|
46
|
+
break;
|
|
47
|
+
case 17:
|
|
48
|
+
if (customHeader) {
|
|
49
|
+
customHeaderValue = ctx.headers[customHeader.toLowerCase()];
|
|
50
|
+
if (typeof customHeaderValue === "string") {
|
|
51
|
+
apiKey = customHeaderValue;
|
|
52
|
+
} else if (Array.isArray(customHeaderValue)) {
|
|
53
|
+
apiKey = customHeaderValue[0];
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
case 18:
|
|
57
|
+
if (apiKey) {
|
|
58
|
+
_context.next = 22;
|
|
59
|
+
break;
|
|
60
|
+
}
|
|
61
|
+
ctx.status = 403;
|
|
62
|
+
ctx.body = {
|
|
63
|
+
error: "Missing API key"
|
|
64
|
+
};
|
|
65
|
+
return _context.abrupt("return");
|
|
66
|
+
case 22:
|
|
67
|
+
client = ApitallyClient.getInstance();
|
|
68
|
+
_context.next = 25;
|
|
69
|
+
return client.keyRegistry.get(apiKey);
|
|
70
|
+
case 25:
|
|
71
|
+
keyInfo = _context.sent;
|
|
72
|
+
if (keyInfo) {
|
|
73
|
+
_context.next = 30;
|
|
74
|
+
break;
|
|
75
|
+
}
|
|
76
|
+
ctx.status = 403;
|
|
77
|
+
ctx.body = {
|
|
78
|
+
error: "Invalid API key"
|
|
79
|
+
};
|
|
80
|
+
return _context.abrupt("return");
|
|
81
|
+
case 30:
|
|
82
|
+
if (!(scopes && !keyInfo.hasScopes(scopes))) {
|
|
83
|
+
_context.next = 34;
|
|
84
|
+
break;
|
|
85
|
+
}
|
|
86
|
+
ctx.status = 403;
|
|
87
|
+
ctx.body = {
|
|
88
|
+
error: "Permission denied"
|
|
89
|
+
};
|
|
90
|
+
return _context.abrupt("return");
|
|
91
|
+
case 34:
|
|
92
|
+
ctx.state.keyInfo = keyInfo;
|
|
93
|
+
_context.next = 37;
|
|
94
|
+
return next();
|
|
95
|
+
case 37:
|
|
96
|
+
case "end":
|
|
97
|
+
return _context.stop();
|
|
98
|
+
}
|
|
99
|
+
}, _callee);
|
|
100
|
+
}));
|
|
101
|
+
return function (_x, _x2) {
|
|
102
|
+
return _ref2.apply(this, arguments);
|
|
103
|
+
};
|
|
104
|
+
}();
|
|
105
|
+
};
|
|
106
|
+
//# sourceMappingURL=auth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.js","names":["ApitallyClient","requireApiKey","_ref","arguments","length","undefined","scopes","customHeader","_ref2","_asyncToGenerator","_regeneratorRuntime","mark","_callee","ctx","next","apiKey","authorizationParts","customHeaderValue","client","keyInfo","wrap","_callee$","_context","prev","headers","authorization","status","set","body","error","abrupt","split","toLowerCase","Array","isArray","getInstance","keyRegistry","get","sent","hasScopes","state","stop","_x","_x2","apply"],"sources":["../../../src/koa/auth.ts"],"sourcesContent":[null],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":["KeyInfo","requireApiKey","useApitally"],"sources":["../../../src/koa/index.ts"],"sourcesContent":[null],"mappings":"AAAA,SAASA,OAAO,QAAQ,0BAA0B;AAClD,SAASC,aAAa,QAAQ,WAAW;AACzC,SAASC,WAAW,QAAQ,iBAAiB"}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
|
|
2
|
+
import _regeneratorRuntime from "@babel/runtime/regenerator";
|
|
3
|
+
import { ApitallyClient } from "../common/client.js";
|
|
4
|
+
import { KeyInfo } from "../common/keyRegistry.js";
|
|
5
|
+
import { getPackageVersion } from "../common/utils.js";
|
|
6
|
+
export var useApitally = function useApitally(app, config) {
|
|
7
|
+
var client = new ApitallyClient(config);
|
|
8
|
+
var middleware = getMiddleware(client);
|
|
9
|
+
app.use(middleware);
|
|
10
|
+
setTimeout(function () {
|
|
11
|
+
client.setAppInfo(getAppInfo(app, config.appVersion));
|
|
12
|
+
}, 100);
|
|
13
|
+
};
|
|
14
|
+
var getMiddleware = function getMiddleware(client) {
|
|
15
|
+
return /*#__PURE__*/function () {
|
|
16
|
+
var _ref = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(ctx, next) {
|
|
17
|
+
var startTime, statusCode;
|
|
18
|
+
return _regeneratorRuntime.wrap(function _callee$(_context) {
|
|
19
|
+
while (1) switch (_context.prev = _context.next) {
|
|
20
|
+
case 0:
|
|
21
|
+
startTime = performance.now();
|
|
22
|
+
_context.prev = 1;
|
|
23
|
+
_context.next = 4;
|
|
24
|
+
return next();
|
|
25
|
+
case 4:
|
|
26
|
+
_context.next = 10;
|
|
27
|
+
break;
|
|
28
|
+
case 6:
|
|
29
|
+
_context.prev = 6;
|
|
30
|
+
_context.t0 = _context["catch"](1);
|
|
31
|
+
statusCode = _context.t0.statusCode || _context.t0.status || 500;
|
|
32
|
+
throw _context.t0;
|
|
33
|
+
case 10:
|
|
34
|
+
_context.prev = 10;
|
|
35
|
+
try {
|
|
36
|
+
// _matchedRoute is set by koa-router, routePath is set by koa-route
|
|
37
|
+
if (ctx._matchedRoute || ctx.routePath) {
|
|
38
|
+
client.requestLogger.logRequest({
|
|
39
|
+
consumer: getConsumer(ctx),
|
|
40
|
+
method: ctx.request.method,
|
|
41
|
+
path: ctx._matchedRoute || ctx.routePath,
|
|
42
|
+
statusCode: statusCode || ctx.response.status,
|
|
43
|
+
responseTime: performance.now() - startTime
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
} catch (error) {
|
|
47
|
+
client.logger.error("Error while logging request in Apitally middleware.", {
|
|
48
|
+
context: ctx,
|
|
49
|
+
error: error
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
return _context.finish(10);
|
|
53
|
+
case 13:
|
|
54
|
+
case "end":
|
|
55
|
+
return _context.stop();
|
|
56
|
+
}
|
|
57
|
+
}, _callee, null, [[1, 6, 10, 13]]);
|
|
58
|
+
}));
|
|
59
|
+
return function (_x, _x2) {
|
|
60
|
+
return _ref.apply(this, arguments);
|
|
61
|
+
};
|
|
62
|
+
}();
|
|
63
|
+
};
|
|
64
|
+
var getConsumer = function getConsumer(ctx) {
|
|
65
|
+
if (ctx.state.consumerIdentifier) {
|
|
66
|
+
return String(ctx.state.consumerIdentifier);
|
|
67
|
+
}
|
|
68
|
+
if (ctx.state.keyInfo && ctx.state.keyInfo instanceof KeyInfo) {
|
|
69
|
+
return "key:".concat(ctx.state.keyInfo.keyId);
|
|
70
|
+
}
|
|
71
|
+
return null;
|
|
72
|
+
};
|
|
73
|
+
var getAppInfo = function getAppInfo(app, appVersion) {
|
|
74
|
+
var versions = [["nodejs", process.version]];
|
|
75
|
+
var koaVersion = getPackageVersion("koa");
|
|
76
|
+
var apitallyVersion = getPackageVersion("../..");
|
|
77
|
+
if (koaVersion) {
|
|
78
|
+
versions.push(["koa", koaVersion]);
|
|
79
|
+
}
|
|
80
|
+
if (apitallyVersion) {
|
|
81
|
+
versions.push(["apitally", apitallyVersion]);
|
|
82
|
+
}
|
|
83
|
+
if (appVersion) {
|
|
84
|
+
versions.push(["app", appVersion]);
|
|
85
|
+
}
|
|
86
|
+
return {
|
|
87
|
+
paths: listEndpoints(app),
|
|
88
|
+
versions: new Map(versions),
|
|
89
|
+
client: "js:koa"
|
|
90
|
+
};
|
|
91
|
+
};
|
|
92
|
+
var isKoaRouterMiddleware = function isKoaRouterMiddleware(middleware) {
|
|
93
|
+
return typeof middleware === "function" && middleware.router && Array.isArray(middleware.router.stack);
|
|
94
|
+
};
|
|
95
|
+
var listEndpoints = function listEndpoints(app) {
|
|
96
|
+
var endpoints = [];
|
|
97
|
+
app.middleware.forEach(function (middleware) {
|
|
98
|
+
if (isKoaRouterMiddleware(middleware)) {
|
|
99
|
+
middleware.router.stack.forEach(function (layer) {
|
|
100
|
+
if (layer.methods && layer.methods.length > 0) {
|
|
101
|
+
layer.methods.forEach(function (method) {
|
|
102
|
+
if (method.toUpperCase() !== "HEAD") {
|
|
103
|
+
endpoints.push({
|
|
104
|
+
method: method.toUpperCase(),
|
|
105
|
+
path: layer.path
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
});
|
|
113
|
+
return endpoints;
|
|
114
|
+
};
|
|
115
|
+
//# sourceMappingURL=middleware.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"middleware.js","names":["ApitallyClient","KeyInfo","getPackageVersion","useApitally","app","config","client","middleware","getMiddleware","use","setTimeout","setAppInfo","getAppInfo","appVersion","_ref","_asyncToGenerator","_regeneratorRuntime","mark","_callee","ctx","next","startTime","statusCode","wrap","_callee$","_context","prev","performance","now","t0","status","_matchedRoute","routePath","requestLogger","logRequest","consumer","getConsumer","method","request","path","response","responseTime","error","logger","context","finish","stop","_x","_x2","apply","arguments","state","consumerIdentifier","String","keyInfo","concat","keyId","versions","process","version","koaVersion","apitallyVersion","push","paths","listEndpoints","Map","isKoaRouterMiddleware","router","Array","isArray","stack","endpoints","forEach","layer","methods","length","toUpperCase"],"sources":["../../../src/koa/middleware.ts"],"sourcesContent":[null],"mappings":"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"}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
|
|
2
|
+
import _classCallCheck from "@babel/runtime/helpers/classCallCheck";
|
|
3
|
+
import _createClass from "@babel/runtime/helpers/createClass";
|
|
4
|
+
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
5
|
+
import _typeof from "@babel/runtime/helpers/typeof";
|
|
6
|
+
var _class;
|
|
7
|
+
import _regeneratorRuntime from "@babel/runtime/regenerator";
|
|
8
|
+
var __decorate = this && this.__decorate || function (decorators, target, key, desc) {
|
|
9
|
+
var c = arguments.length,
|
|
10
|
+
r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,
|
|
11
|
+
d;
|
|
12
|
+
if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
13
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
14
|
+
};
|
|
15
|
+
var __metadata = this && this.__metadata || function (k, v) {
|
|
16
|
+
if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
17
|
+
};
|
|
18
|
+
var ApitallyApiKeyGuard_1;
|
|
19
|
+
import { ForbiddenException, Injectable, SetMetadata, UnauthorizedException, createParamDecorator } from "@nestjs/common";
|
|
20
|
+
import { Reflector } from "@nestjs/core";
|
|
21
|
+
import { ApitallyClient } from "../common/client.js";
|
|
22
|
+
export var Scopes = function Scopes() {
|
|
23
|
+
for (var _len = arguments.length, scopes = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
24
|
+
scopes[_key] = arguments[_key];
|
|
25
|
+
}
|
|
26
|
+
return SetMetadata("scopes", scopes);
|
|
27
|
+
};
|
|
28
|
+
var ApitallyApiKeyGuard = (_class = /*#__PURE__*/function () {
|
|
29
|
+
function ApitallyApiKeyGuard(reflector) {
|
|
30
|
+
_classCallCheck(this, ApitallyApiKeyGuard);
|
|
31
|
+
_defineProperty(this, "reflector", void 0);
|
|
32
|
+
this.reflector = reflector;
|
|
33
|
+
}
|
|
34
|
+
_createClass(ApitallyApiKeyGuard, [{
|
|
35
|
+
key: "canActivate",
|
|
36
|
+
value: function () {
|
|
37
|
+
var _canActivate = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(context) {
|
|
38
|
+
var customHeader, req, res, apiKey, authorizationParts, customHeaderValue, client, keyInfo, scopes;
|
|
39
|
+
return _regeneratorRuntime.wrap(function _callee$(_context) {
|
|
40
|
+
while (1) switch (_context.prev = _context.next) {
|
|
41
|
+
case 0:
|
|
42
|
+
customHeader = ApitallyApiKeyGuard_1.customHeader;
|
|
43
|
+
req = context.switchToHttp().getRequest();
|
|
44
|
+
res = context.switchToHttp().getResponse();
|
|
45
|
+
if (customHeader) {
|
|
46
|
+
_context.next = 16;
|
|
47
|
+
break;
|
|
48
|
+
}
|
|
49
|
+
if (req.headers.authorization) {
|
|
50
|
+
_context.next = 7;
|
|
51
|
+
break;
|
|
52
|
+
}
|
|
53
|
+
res.set("WWW-Authenticate", "ApiKey");
|
|
54
|
+
throw new UnauthorizedException("Missing authorization header");
|
|
55
|
+
case 7:
|
|
56
|
+
authorizationParts = req.headers.authorization.split(" ");
|
|
57
|
+
if (!(authorizationParts.length === 2 && authorizationParts[0].toLowerCase() === "apikey")) {
|
|
58
|
+
_context.next = 12;
|
|
59
|
+
break;
|
|
60
|
+
}
|
|
61
|
+
apiKey = authorizationParts[1];
|
|
62
|
+
_context.next = 14;
|
|
63
|
+
break;
|
|
64
|
+
case 12:
|
|
65
|
+
res.set("WWW-Authenticate", "ApiKey");
|
|
66
|
+
throw new UnauthorizedException("Invalid authorization scheme");
|
|
67
|
+
case 14:
|
|
68
|
+
_context.next = 17;
|
|
69
|
+
break;
|
|
70
|
+
case 16:
|
|
71
|
+
if (customHeader) {
|
|
72
|
+
customHeaderValue = req.headers[customHeader.toLowerCase()];
|
|
73
|
+
if (typeof customHeaderValue === "string") {
|
|
74
|
+
apiKey = customHeaderValue;
|
|
75
|
+
} else if (Array.isArray(customHeaderValue)) {
|
|
76
|
+
apiKey = customHeaderValue[0];
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
case 17:
|
|
80
|
+
if (apiKey) {
|
|
81
|
+
_context.next = 19;
|
|
82
|
+
break;
|
|
83
|
+
}
|
|
84
|
+
throw new ForbiddenException("Missing API key");
|
|
85
|
+
case 19:
|
|
86
|
+
client = ApitallyClient.getInstance();
|
|
87
|
+
_context.next = 22;
|
|
88
|
+
return client.keyRegistry.get(apiKey);
|
|
89
|
+
case 22:
|
|
90
|
+
keyInfo = _context.sent;
|
|
91
|
+
if (keyInfo) {
|
|
92
|
+
_context.next = 25;
|
|
93
|
+
break;
|
|
94
|
+
}
|
|
95
|
+
throw new ForbiddenException("Invalid API key");
|
|
96
|
+
case 25:
|
|
97
|
+
scopes = this.reflector.get("scopes", context.getHandler());
|
|
98
|
+
if (!(scopes && !keyInfo.hasScopes(scopes))) {
|
|
99
|
+
_context.next = 28;
|
|
100
|
+
break;
|
|
101
|
+
}
|
|
102
|
+
throw new ForbiddenException("Permission denied");
|
|
103
|
+
case 28:
|
|
104
|
+
req.keyInfo = keyInfo;
|
|
105
|
+
return _context.abrupt("return", true);
|
|
106
|
+
case 30:
|
|
107
|
+
case "end":
|
|
108
|
+
return _context.stop();
|
|
109
|
+
}
|
|
110
|
+
}, _callee, this);
|
|
111
|
+
}));
|
|
112
|
+
function canActivate(_x) {
|
|
113
|
+
return _canActivate.apply(this, arguments);
|
|
114
|
+
}
|
|
115
|
+
return canActivate;
|
|
116
|
+
}()
|
|
117
|
+
}]);
|
|
118
|
+
return ApitallyApiKeyGuard;
|
|
119
|
+
}(), ApitallyApiKeyGuard_1 = _class, _defineProperty(_class, "customHeader", void 0), _class);
|
|
120
|
+
ApitallyApiKeyGuard = ApitallyApiKeyGuard_1 = __decorate([Injectable(), __metadata("design:paramtypes", [Reflector])], ApitallyApiKeyGuard);
|
|
121
|
+
export { ApitallyApiKeyGuard };
|
|
122
|
+
export var GetKeyInfo = createParamDecorator(function (data, context) {
|
|
123
|
+
var req = context.switchToHttp().getRequest();
|
|
124
|
+
return req.keyInfo;
|
|
125
|
+
});
|
|
126
|
+
//# sourceMappingURL=auth.js.map
|