apitally 0.1.2 → 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 +96 -7
- 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,385 @@
|
|
|
1
|
+
import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
|
|
2
|
+
import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
|
|
3
|
+
import _classCallCheck from "@babel/runtime/helpers/classCallCheck";
|
|
4
|
+
import _createClass from "@babel/runtime/helpers/createClass";
|
|
5
|
+
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
6
|
+
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; }
|
|
7
|
+
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; }
|
|
8
|
+
import _regeneratorRuntime from "@babel/runtime/regenerator";
|
|
9
|
+
import axios, { AxiosError } from "axios";
|
|
10
|
+
import axiosRetry from "axios-retry";
|
|
11
|
+
import { randomUUID } from "crypto";
|
|
12
|
+
import { KeyRegistry } from "./keyRegistry.js";
|
|
13
|
+
import { getLogger } from "./logging.js";
|
|
14
|
+
import RequestLogger from "./requestLogger.js";
|
|
15
|
+
import { isValidClientId, isValidEnv } from "./utils.js";
|
|
16
|
+
import ValidationErrorLogger from "./validationErrorLogger.js";
|
|
17
|
+
var SYNC_INTERVAL = 60000; // 60 seconds
|
|
18
|
+
var REQUEST_TIMEOUT = 10000; // 10 seconds
|
|
19
|
+
var MAX_QUEUE_TIME = 3.6e6; // 1 hour
|
|
20
|
+
export var ApitallyClient = /*#__PURE__*/function () {
|
|
21
|
+
function ApitallyClient(_ref) {
|
|
22
|
+
var clientId = _ref.clientId,
|
|
23
|
+
_ref$env = _ref.env,
|
|
24
|
+
env = _ref$env === void 0 ? "default" : _ref$env,
|
|
25
|
+
_ref$syncApiKeys = _ref.syncApiKeys,
|
|
26
|
+
syncApiKeys = _ref$syncApiKeys === void 0 ? false : _ref$syncApiKeys,
|
|
27
|
+
logger = _ref.logger,
|
|
28
|
+
keyCacheClass = _ref.keyCacheClass;
|
|
29
|
+
_classCallCheck(this, ApitallyClient);
|
|
30
|
+
_defineProperty(this, "clientId", void 0);
|
|
31
|
+
_defineProperty(this, "env", void 0);
|
|
32
|
+
_defineProperty(this, "syncApiKeys", void 0);
|
|
33
|
+
_defineProperty(this, "instanceUuid", void 0);
|
|
34
|
+
_defineProperty(this, "requestsDataQueue", void 0);
|
|
35
|
+
_defineProperty(this, "axiosClient", void 0);
|
|
36
|
+
_defineProperty(this, "syncIntervalId", void 0);
|
|
37
|
+
_defineProperty(this, "appInfo", void 0);
|
|
38
|
+
_defineProperty(this, "appInfoSent", false);
|
|
39
|
+
_defineProperty(this, "startedAt", void 0);
|
|
40
|
+
_defineProperty(this, "keysUpdated", void 0);
|
|
41
|
+
_defineProperty(this, "requestLogger", void 0);
|
|
42
|
+
_defineProperty(this, "validationErrorLogger", void 0);
|
|
43
|
+
_defineProperty(this, "keyRegistry", void 0);
|
|
44
|
+
_defineProperty(this, "keyCache", void 0);
|
|
45
|
+
_defineProperty(this, "logger", void 0);
|
|
46
|
+
if (ApitallyClient.instance) {
|
|
47
|
+
throw new Error("Apitally client is already initialized");
|
|
48
|
+
}
|
|
49
|
+
if (!isValidClientId(clientId)) {
|
|
50
|
+
throw new Error("Invalid client ID '".concat(clientId, "' (expecting hexadeciaml UUID format)"));
|
|
51
|
+
}
|
|
52
|
+
if (!isValidEnv(env)) {
|
|
53
|
+
throw new Error("Invalid env '".concat(env, "' (expecting 1-32 alphanumeric lowercase characters and hyphens only)"));
|
|
54
|
+
}
|
|
55
|
+
ApitallyClient.instance = this;
|
|
56
|
+
this.clientId = clientId;
|
|
57
|
+
this.env = env;
|
|
58
|
+
this.syncApiKeys = syncApiKeys;
|
|
59
|
+
this.instanceUuid = randomUUID();
|
|
60
|
+
this.requestsDataQueue = [];
|
|
61
|
+
this.startedAt = Date.now();
|
|
62
|
+
this.requestLogger = new RequestLogger();
|
|
63
|
+
this.validationErrorLogger = new ValidationErrorLogger();
|
|
64
|
+
this.keyRegistry = new KeyRegistry();
|
|
65
|
+
this.keyCache = keyCacheClass ? new keyCacheClass(clientId, env) : undefined;
|
|
66
|
+
this.logger = logger || getLogger();
|
|
67
|
+
this.axiosClient = axios.create({
|
|
68
|
+
baseURL: this.getHubUrl(),
|
|
69
|
+
timeout: REQUEST_TIMEOUT
|
|
70
|
+
});
|
|
71
|
+
axiosRetry(this.axiosClient, {
|
|
72
|
+
retries: 3,
|
|
73
|
+
retryDelay: function retryDelay(retryCount, error) {
|
|
74
|
+
return axiosRetry.exponentialDelay(retryCount, error, 1000);
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
if (this.keyCache) {
|
|
78
|
+
var keyDataString = this.keyCache.retrieve();
|
|
79
|
+
if (keyDataString) {
|
|
80
|
+
try {
|
|
81
|
+
var keyData = JSON.parse(keyDataString);
|
|
82
|
+
this.updateKeyRegistry(keyData, false);
|
|
83
|
+
} catch (error) {
|
|
84
|
+
this.logger.error("Failed to load API keys from cache.", {
|
|
85
|
+
error: error
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
this.startSync();
|
|
91
|
+
this.handleShutdown = this.handleShutdown.bind(this);
|
|
92
|
+
}
|
|
93
|
+
_createClass(ApitallyClient, [{
|
|
94
|
+
key: "handleShutdown",
|
|
95
|
+
value: function () {
|
|
96
|
+
var _handleShutdown = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
|
|
97
|
+
return _regeneratorRuntime.wrap(function _callee$(_context) {
|
|
98
|
+
while (1) switch (_context.prev = _context.next) {
|
|
99
|
+
case 0:
|
|
100
|
+
this.stopSync();
|
|
101
|
+
_context.next = 3;
|
|
102
|
+
return this.sendRequestsData();
|
|
103
|
+
case 3:
|
|
104
|
+
ApitallyClient.instance = undefined;
|
|
105
|
+
case 4:
|
|
106
|
+
case "end":
|
|
107
|
+
return _context.stop();
|
|
108
|
+
}
|
|
109
|
+
}, _callee, this);
|
|
110
|
+
}));
|
|
111
|
+
function handleShutdown() {
|
|
112
|
+
return _handleShutdown.apply(this, arguments);
|
|
113
|
+
}
|
|
114
|
+
return handleShutdown;
|
|
115
|
+
}()
|
|
116
|
+
}, {
|
|
117
|
+
key: "getHubUrl",
|
|
118
|
+
value: function getHubUrl() {
|
|
119
|
+
var baseURL = process.env.APITALLY_HUB_BASE_URL || "https://hub.apitally.io";
|
|
120
|
+
var version = "v1";
|
|
121
|
+
return "".concat(baseURL, "/").concat(version, "/").concat(this.clientId, "/").concat(this.env);
|
|
122
|
+
}
|
|
123
|
+
}, {
|
|
124
|
+
key: "startSync",
|
|
125
|
+
value: function startSync() {
|
|
126
|
+
var _this = this;
|
|
127
|
+
this.sync();
|
|
128
|
+
this.syncIntervalId = setInterval(function () {
|
|
129
|
+
_this.sync();
|
|
130
|
+
}, SYNC_INTERVAL);
|
|
131
|
+
}
|
|
132
|
+
}, {
|
|
133
|
+
key: "sync",
|
|
134
|
+
value: function () {
|
|
135
|
+
var _sync = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee2() {
|
|
136
|
+
var promises;
|
|
137
|
+
return _regeneratorRuntime.wrap(function _callee2$(_context2) {
|
|
138
|
+
while (1) switch (_context2.prev = _context2.next) {
|
|
139
|
+
case 0:
|
|
140
|
+
_context2.prev = 0;
|
|
141
|
+
promises = [this.sendRequestsData()];
|
|
142
|
+
if (this.syncApiKeys) {
|
|
143
|
+
promises.push(this.getKeys());
|
|
144
|
+
}
|
|
145
|
+
if (!this.appInfoSent) {
|
|
146
|
+
promises.push(this.sendAppInfo());
|
|
147
|
+
}
|
|
148
|
+
_context2.next = 6;
|
|
149
|
+
return Promise.all(promises);
|
|
150
|
+
case 6:
|
|
151
|
+
_context2.next = 11;
|
|
152
|
+
break;
|
|
153
|
+
case 8:
|
|
154
|
+
_context2.prev = 8;
|
|
155
|
+
_context2.t0 = _context2["catch"](0);
|
|
156
|
+
this.logger.error("Error while syncing with Apitally Hub.", {
|
|
157
|
+
error: _context2.t0
|
|
158
|
+
});
|
|
159
|
+
case 11:
|
|
160
|
+
case "end":
|
|
161
|
+
return _context2.stop();
|
|
162
|
+
}
|
|
163
|
+
}, _callee2, this, [[0, 8]]);
|
|
164
|
+
}));
|
|
165
|
+
function sync() {
|
|
166
|
+
return _sync.apply(this, arguments);
|
|
167
|
+
}
|
|
168
|
+
return sync;
|
|
169
|
+
}()
|
|
170
|
+
}, {
|
|
171
|
+
key: "stopSync",
|
|
172
|
+
value: function stopSync() {
|
|
173
|
+
if (this.syncIntervalId) {
|
|
174
|
+
clearInterval(this.syncIntervalId);
|
|
175
|
+
this.syncIntervalId = undefined;
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
}, {
|
|
179
|
+
key: "setAppInfo",
|
|
180
|
+
value: function setAppInfo(appInfo) {
|
|
181
|
+
this.appInfo = appInfo;
|
|
182
|
+
this.appInfoSent = false;
|
|
183
|
+
this.sendAppInfo();
|
|
184
|
+
}
|
|
185
|
+
}, {
|
|
186
|
+
key: "sendAppInfo",
|
|
187
|
+
value: function () {
|
|
188
|
+
var _sendAppInfo = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee3() {
|
|
189
|
+
var payload;
|
|
190
|
+
return _regeneratorRuntime.wrap(function _callee3$(_context3) {
|
|
191
|
+
while (1) switch (_context3.prev = _context3.next) {
|
|
192
|
+
case 0:
|
|
193
|
+
if (!this.appInfo) {
|
|
194
|
+
_context3.next = 12;
|
|
195
|
+
break;
|
|
196
|
+
}
|
|
197
|
+
this.logger.debug("Sending app info to Apitally Hub.");
|
|
198
|
+
payload = _objectSpread({
|
|
199
|
+
instance_uuid: this.instanceUuid,
|
|
200
|
+
message_uuid: randomUUID()
|
|
201
|
+
}, this.appInfo);
|
|
202
|
+
_context3.prev = 3;
|
|
203
|
+
_context3.next = 6;
|
|
204
|
+
return this.axiosClient.post("/info", payload);
|
|
205
|
+
case 6:
|
|
206
|
+
this.appInfoSent = true;
|
|
207
|
+
_context3.next = 12;
|
|
208
|
+
break;
|
|
209
|
+
case 9:
|
|
210
|
+
_context3.prev = 9;
|
|
211
|
+
_context3.t0 = _context3["catch"](3);
|
|
212
|
+
if (_context3.t0 instanceof AxiosError && _context3.t0.response && _context3.t0.response.status === 404 && _context3.t0.response.data && typeof _context3.t0.response.data === "string" && _context3.t0.response.data.includes("Client ID")) {
|
|
213
|
+
this.logger.error("Invalid Apitally client ID '".concat(this.clientId, "'."));
|
|
214
|
+
this.stopSync();
|
|
215
|
+
} else {
|
|
216
|
+
this.logger.debug("Error while sending app info to Apitally Hub (".concat(_context3.t0.code, "). Will retry."), {
|
|
217
|
+
error: _context3.t0
|
|
218
|
+
});
|
|
219
|
+
}
|
|
220
|
+
case 12:
|
|
221
|
+
case "end":
|
|
222
|
+
return _context3.stop();
|
|
223
|
+
}
|
|
224
|
+
}, _callee3, this, [[3, 9]]);
|
|
225
|
+
}));
|
|
226
|
+
function sendAppInfo() {
|
|
227
|
+
return _sendAppInfo.apply(this, arguments);
|
|
228
|
+
}
|
|
229
|
+
return sendAppInfo;
|
|
230
|
+
}()
|
|
231
|
+
}, {
|
|
232
|
+
key: "sendRequestsData",
|
|
233
|
+
value: function () {
|
|
234
|
+
var _sendRequestsData = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee4() {
|
|
235
|
+
var newPayload, failedItems, queueItem, _queueItem, time, payload, timeOffset;
|
|
236
|
+
return _regeneratorRuntime.wrap(function _callee4$(_context4) {
|
|
237
|
+
while (1) switch (_context4.prev = _context4.next) {
|
|
238
|
+
case 0:
|
|
239
|
+
this.logger.debug("Sending requests data to Apitally Hub.");
|
|
240
|
+
newPayload = {
|
|
241
|
+
time_offset: 0,
|
|
242
|
+
instance_uuid: this.instanceUuid,
|
|
243
|
+
message_uuid: randomUUID(),
|
|
244
|
+
requests: this.requestLogger.getAndResetRequests(),
|
|
245
|
+
validation_errors: this.validationErrorLogger.getAndResetValidationErrors(),
|
|
246
|
+
api_key_usage: this.keyRegistry.getAndResetUsageCounts()
|
|
247
|
+
};
|
|
248
|
+
this.requestsDataQueue.push([Date.now(), newPayload]);
|
|
249
|
+
failedItems = [];
|
|
250
|
+
case 4:
|
|
251
|
+
if (!(this.requestsDataQueue.length > 0)) {
|
|
252
|
+
_context4.next = 22;
|
|
253
|
+
break;
|
|
254
|
+
}
|
|
255
|
+
queueItem = this.requestsDataQueue.shift();
|
|
256
|
+
if (!queueItem) {
|
|
257
|
+
_context4.next = 20;
|
|
258
|
+
break;
|
|
259
|
+
}
|
|
260
|
+
_queueItem = _slicedToArray(queueItem, 2), time = _queueItem[0], payload = _queueItem[1];
|
|
261
|
+
_context4.prev = 8;
|
|
262
|
+
timeOffset = Date.now() - time;
|
|
263
|
+
if (!(timeOffset <= MAX_QUEUE_TIME)) {
|
|
264
|
+
_context4.next = 14;
|
|
265
|
+
break;
|
|
266
|
+
}
|
|
267
|
+
payload.time_offset = timeOffset / 1000.0; // In seconds
|
|
268
|
+
_context4.next = 14;
|
|
269
|
+
return this.axiosClient.post("/requests", payload);
|
|
270
|
+
case 14:
|
|
271
|
+
_context4.next = 20;
|
|
272
|
+
break;
|
|
273
|
+
case 16:
|
|
274
|
+
_context4.prev = 16;
|
|
275
|
+
_context4.t0 = _context4["catch"](8);
|
|
276
|
+
this.logger.debug("Error while sending requests data to Apitally Hub (".concat(_context4.t0.code, "). Will retry."), {
|
|
277
|
+
error: _context4.t0
|
|
278
|
+
});
|
|
279
|
+
failedItems.push(queueItem);
|
|
280
|
+
case 20:
|
|
281
|
+
_context4.next = 4;
|
|
282
|
+
break;
|
|
283
|
+
case 22:
|
|
284
|
+
this.requestsDataQueue = failedItems;
|
|
285
|
+
case 23:
|
|
286
|
+
case "end":
|
|
287
|
+
return _context4.stop();
|
|
288
|
+
}
|
|
289
|
+
}, _callee4, this, [[8, 16]]);
|
|
290
|
+
}));
|
|
291
|
+
function sendRequestsData() {
|
|
292
|
+
return _sendRequestsData.apply(this, arguments);
|
|
293
|
+
}
|
|
294
|
+
return sendRequestsData;
|
|
295
|
+
}()
|
|
296
|
+
}, {
|
|
297
|
+
key: "getKeys",
|
|
298
|
+
value: function () {
|
|
299
|
+
var _getKeys = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee5() {
|
|
300
|
+
var response, now;
|
|
301
|
+
return _regeneratorRuntime.wrap(function _callee5$(_context5) {
|
|
302
|
+
while (1) switch (_context5.prev = _context5.next) {
|
|
303
|
+
case 0:
|
|
304
|
+
_context5.prev = 0;
|
|
305
|
+
this.logger.debug("Getting API keys from Apitally Hub.");
|
|
306
|
+
_context5.next = 4;
|
|
307
|
+
return this.axiosClient.get("/keys");
|
|
308
|
+
case 4:
|
|
309
|
+
response = _context5.sent;
|
|
310
|
+
this.updateKeyRegistry(response.data);
|
|
311
|
+
this.keysUpdated = Date.now();
|
|
312
|
+
_context5.next = 14;
|
|
313
|
+
break;
|
|
314
|
+
case 9:
|
|
315
|
+
_context5.prev = 9;
|
|
316
|
+
_context5.t0 = _context5["catch"](0);
|
|
317
|
+
this.logger.debug("Error while getting API keys from Apitally Hub (".concat(_context5.t0.code, "). Will retry."), {
|
|
318
|
+
error: _context5.t0
|
|
319
|
+
});
|
|
320
|
+
now = Date.now();
|
|
321
|
+
if (!this.keyRegistry.salt) {
|
|
322
|
+
// Exit because application won't be able to authenticate requests
|
|
323
|
+
this.logger.error("Initial Apitally API key sync failed.");
|
|
324
|
+
process.exit(1);
|
|
325
|
+
} else if (this.keysUpdated && now - this.keysUpdated > MAX_QUEUE_TIME || !this.keysUpdated && now - this.startedAt > MAX_QUEUE_TIME) {
|
|
326
|
+
this.logger.warn("Apitally API key sync has been failing for more than 1 hour.");
|
|
327
|
+
}
|
|
328
|
+
case 14:
|
|
329
|
+
case "end":
|
|
330
|
+
return _context5.stop();
|
|
331
|
+
}
|
|
332
|
+
}, _callee5, this, [[0, 9]]);
|
|
333
|
+
}));
|
|
334
|
+
function getKeys() {
|
|
335
|
+
return _getKeys.apply(this, arguments);
|
|
336
|
+
}
|
|
337
|
+
return getKeys;
|
|
338
|
+
}()
|
|
339
|
+
}, {
|
|
340
|
+
key: "updateKeyRegistry",
|
|
341
|
+
value: function updateKeyRegistry(data) {
|
|
342
|
+
var cache = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
|
|
343
|
+
this.keyRegistry.salt = data.salt || null;
|
|
344
|
+
this.keyRegistry.update(data.keys || {});
|
|
345
|
+
if (cache && this.keyCache) {
|
|
346
|
+
this.keyCache.store(JSON.stringify(data));
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
}], [{
|
|
350
|
+
key: "getInstance",
|
|
351
|
+
value: function getInstance() {
|
|
352
|
+
if (!ApitallyClient.instance) {
|
|
353
|
+
throw new Error("Apitally client is not initialized");
|
|
354
|
+
}
|
|
355
|
+
return ApitallyClient.instance;
|
|
356
|
+
}
|
|
357
|
+
}, {
|
|
358
|
+
key: "shutdown",
|
|
359
|
+
value: function () {
|
|
360
|
+
var _shutdown = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee6() {
|
|
361
|
+
return _regeneratorRuntime.wrap(function _callee6$(_context6) {
|
|
362
|
+
while (1) switch (_context6.prev = _context6.next) {
|
|
363
|
+
case 0:
|
|
364
|
+
if (!ApitallyClient.instance) {
|
|
365
|
+
_context6.next = 3;
|
|
366
|
+
break;
|
|
367
|
+
}
|
|
368
|
+
_context6.next = 3;
|
|
369
|
+
return ApitallyClient.instance.handleShutdown();
|
|
370
|
+
case 3:
|
|
371
|
+
case "end":
|
|
372
|
+
return _context6.stop();
|
|
373
|
+
}
|
|
374
|
+
}, _callee6);
|
|
375
|
+
}));
|
|
376
|
+
function shutdown() {
|
|
377
|
+
return _shutdown.apply(this, arguments);
|
|
378
|
+
}
|
|
379
|
+
return shutdown;
|
|
380
|
+
}()
|
|
381
|
+
}]);
|
|
382
|
+
return ApitallyClient;
|
|
383
|
+
}();
|
|
384
|
+
_defineProperty(ApitallyClient, "instance", void 0);
|
|
385
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","names":["axios","AxiosError","axiosRetry","randomUUID","KeyRegistry","getLogger","RequestLogger","isValidClientId","isValidEnv","ValidationErrorLogger","SYNC_INTERVAL","REQUEST_TIMEOUT","MAX_QUEUE_TIME","ApitallyClient","_ref","clientId","_ref$env","env","_ref$syncApiKeys","syncApiKeys","logger","keyCacheClass","_classCallCheck","_defineProperty","instance","Error","concat","instanceUuid","requestsDataQueue","startedAt","Date","now","requestLogger","validationErrorLogger","keyRegistry","keyCache","undefined","axiosClient","create","baseURL","getHubUrl","timeout","retries","retryDelay","retryCount","error","exponentialDelay","keyDataString","retrieve","keyData","JSON","parse","updateKeyRegistry","startSync","handleShutdown","bind","_createClass","key","value","_handleShutdown","_asyncToGenerator","_regeneratorRuntime","mark","_callee","wrap","_callee$","_context","prev","next","stopSync","sendRequestsData","stop","apply","arguments","process","APITALLY_HUB_BASE_URL","version","_this","sync","syncIntervalId","setInterval","_sync","_callee2","promises","_callee2$","_context2","push","getKeys","appInfoSent","sendAppInfo","Promise","all","t0","clearInterval","setAppInfo","appInfo","_sendAppInfo","_callee3","payload","_callee3$","_context3","debug","_objectSpread","instance_uuid","message_uuid","post","response","status","data","includes","code","_sendRequestsData","_callee4","newPayload","failedItems","queueItem","_queueItem","time","timeOffset","_callee4$","_context4","time_offset","requests","getAndResetRequests","validation_errors","getAndResetValidationErrors","api_key_usage","getAndResetUsageCounts","length","shift","_slicedToArray","_getKeys","_callee5","_callee5$","_context5","get","sent","keysUpdated","salt","exit","warn","cache","update","keys","store","stringify","getInstance","_shutdown","_callee6","_callee6$","_context6","shutdown"],"sources":["../../../src/common/client.ts"],"sourcesContent":[null],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { KeyCacheBase } from "./keyRegistry.js";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":["KeyCacheBase"],"sources":["../../../src/common/index.ts"],"sourcesContent":[null],"mappings":"AAAA,SAASA,YAAY,QAAQ,kBAAkB"}
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
|
|
2
|
+
import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
|
|
3
|
+
import _classCallCheck from "@babel/runtime/helpers/classCallCheck";
|
|
4
|
+
import _createClass from "@babel/runtime/helpers/createClass";
|
|
5
|
+
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
6
|
+
import _regeneratorRuntime from "@babel/runtime/regenerator";
|
|
7
|
+
import { scrypt } from "crypto";
|
|
8
|
+
export var KeyInfo = /*#__PURE__*/function () {
|
|
9
|
+
function KeyInfo(keyId, apiKeyId) {
|
|
10
|
+
var name = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : "";
|
|
11
|
+
var scopes = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : [];
|
|
12
|
+
var expiresInSeconds = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : null;
|
|
13
|
+
_classCallCheck(this, KeyInfo);
|
|
14
|
+
_defineProperty(this, "keyId", void 0);
|
|
15
|
+
_defineProperty(this, "apiKeyId", void 0);
|
|
16
|
+
_defineProperty(this, "name", void 0);
|
|
17
|
+
_defineProperty(this, "scopes", void 0);
|
|
18
|
+
_defineProperty(this, "expiresAt", void 0);
|
|
19
|
+
this.keyId = keyId;
|
|
20
|
+
this.apiKeyId = apiKeyId;
|
|
21
|
+
this.name = name;
|
|
22
|
+
this.scopes = scopes;
|
|
23
|
+
this.expiresAt = expiresInSeconds !== null && expiresInSeconds !== undefined ? new Date(Date.now() + expiresInSeconds * 1000) : null;
|
|
24
|
+
}
|
|
25
|
+
_createClass(KeyInfo, [{
|
|
26
|
+
key: "isExpired",
|
|
27
|
+
get: function get() {
|
|
28
|
+
return this.expiresAt !== null && this.expiresAt < new Date();
|
|
29
|
+
}
|
|
30
|
+
}, {
|
|
31
|
+
key: "hasScopes",
|
|
32
|
+
value: function hasScopes(scopes) {
|
|
33
|
+
var _this = this;
|
|
34
|
+
if (typeof scopes === "string") {
|
|
35
|
+
scopes = [scopes];
|
|
36
|
+
}
|
|
37
|
+
return scopes.every(function (scope) {
|
|
38
|
+
return _this.scopes.includes(scope);
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
}]);
|
|
42
|
+
return KeyInfo;
|
|
43
|
+
}();
|
|
44
|
+
export var KeyRegistry = /*#__PURE__*/function () {
|
|
45
|
+
function KeyRegistry() {
|
|
46
|
+
_classCallCheck(this, KeyRegistry);
|
|
47
|
+
_defineProperty(this, "salt", void 0);
|
|
48
|
+
_defineProperty(this, "keys", void 0);
|
|
49
|
+
_defineProperty(this, "usageCounts", void 0);
|
|
50
|
+
this.salt = null;
|
|
51
|
+
this.keys = new Map();
|
|
52
|
+
this.usageCounts = new Map();
|
|
53
|
+
}
|
|
54
|
+
_createClass(KeyRegistry, [{
|
|
55
|
+
key: "get",
|
|
56
|
+
value: function () {
|
|
57
|
+
var _get = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(apiKey) {
|
|
58
|
+
var hash, key;
|
|
59
|
+
return _regeneratorRuntime.wrap(function _callee$(_context) {
|
|
60
|
+
while (1) switch (_context.prev = _context.next) {
|
|
61
|
+
case 0:
|
|
62
|
+
_context.next = 2;
|
|
63
|
+
return this.hashApiKey(apiKey.trim());
|
|
64
|
+
case 2:
|
|
65
|
+
hash = _context.sent;
|
|
66
|
+
key = this.keys.get(hash);
|
|
67
|
+
if (!(!key || key.isExpired)) {
|
|
68
|
+
_context.next = 6;
|
|
69
|
+
break;
|
|
70
|
+
}
|
|
71
|
+
return _context.abrupt("return", null);
|
|
72
|
+
case 6:
|
|
73
|
+
this.usageCounts.set(key.apiKeyId, (this.usageCounts.get(key.apiKeyId) || 0) + 1);
|
|
74
|
+
return _context.abrupt("return", key);
|
|
75
|
+
case 8:
|
|
76
|
+
case "end":
|
|
77
|
+
return _context.stop();
|
|
78
|
+
}
|
|
79
|
+
}, _callee, this);
|
|
80
|
+
}));
|
|
81
|
+
function get(_x) {
|
|
82
|
+
return _get.apply(this, arguments);
|
|
83
|
+
}
|
|
84
|
+
return get;
|
|
85
|
+
}()
|
|
86
|
+
}, {
|
|
87
|
+
key: "hashApiKey",
|
|
88
|
+
value: function () {
|
|
89
|
+
var _hashApiKey = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee2(apiKey) {
|
|
90
|
+
var _this2 = this;
|
|
91
|
+
return _regeneratorRuntime.wrap(function _callee2$(_context2) {
|
|
92
|
+
while (1) switch (_context2.prev = _context2.next) {
|
|
93
|
+
case 0:
|
|
94
|
+
return _context2.abrupt("return", new Promise(function (resolve, reject) {
|
|
95
|
+
if (!_this2.salt) {
|
|
96
|
+
throw new Error("Apitally API keys not initialized");
|
|
97
|
+
}
|
|
98
|
+
scrypt(apiKey, Buffer.from(_this2.salt, "hex"), 32, {
|
|
99
|
+
N: 256,
|
|
100
|
+
r: 4,
|
|
101
|
+
p: 1
|
|
102
|
+
}, function (err, derivedKey) {
|
|
103
|
+
if (err) reject(err);
|
|
104
|
+
resolve(derivedKey.toString("hex"));
|
|
105
|
+
});
|
|
106
|
+
}));
|
|
107
|
+
case 1:
|
|
108
|
+
case "end":
|
|
109
|
+
return _context2.stop();
|
|
110
|
+
}
|
|
111
|
+
}, _callee2);
|
|
112
|
+
}));
|
|
113
|
+
function hashApiKey(_x2) {
|
|
114
|
+
return _hashApiKey.apply(this, arguments);
|
|
115
|
+
}
|
|
116
|
+
return hashApiKey;
|
|
117
|
+
}()
|
|
118
|
+
}, {
|
|
119
|
+
key: "update",
|
|
120
|
+
value: function update(keys) {
|
|
121
|
+
this.keys.clear();
|
|
122
|
+
for (var _i = 0, _Object$entries = Object.entries(keys); _i < _Object$entries.length; _i++) {
|
|
123
|
+
var _Object$entries$_i = _slicedToArray(_Object$entries[_i], 2),
|
|
124
|
+
hash = _Object$entries$_i[0],
|
|
125
|
+
data = _Object$entries$_i[1];
|
|
126
|
+
this.keys.set(hash, new KeyInfo(data["key_id"], data["api_key_id"], data["name"], data["scopes"], data["expires_in_seconds"]));
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
}, {
|
|
130
|
+
key: "getAndResetUsageCounts",
|
|
131
|
+
value: function getAndResetUsageCounts() {
|
|
132
|
+
var data = Object.fromEntries(this.usageCounts);
|
|
133
|
+
this.usageCounts.clear();
|
|
134
|
+
return data;
|
|
135
|
+
}
|
|
136
|
+
}]);
|
|
137
|
+
return KeyRegistry;
|
|
138
|
+
}();
|
|
139
|
+
export var KeyCacheBase = /*#__PURE__*/function () {
|
|
140
|
+
function KeyCacheBase(clientId, env) {
|
|
141
|
+
_classCallCheck(this, KeyCacheBase);
|
|
142
|
+
_defineProperty(this, "clientId", void 0);
|
|
143
|
+
_defineProperty(this, "env", void 0);
|
|
144
|
+
this.clientId = clientId;
|
|
145
|
+
this.env = env;
|
|
146
|
+
}
|
|
147
|
+
_createClass(KeyCacheBase, [{
|
|
148
|
+
key: "cacheKey",
|
|
149
|
+
get: function get() {
|
|
150
|
+
return "apitally:keys:".concat(this.clientId, ":").concat(this.env);
|
|
151
|
+
}
|
|
152
|
+
}]);
|
|
153
|
+
return KeyCacheBase;
|
|
154
|
+
}();
|
|
155
|
+
//# sourceMappingURL=keyRegistry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"keyRegistry.js","names":["scrypt","KeyInfo","keyId","apiKeyId","name","arguments","length","undefined","scopes","expiresInSeconds","_classCallCheck","_defineProperty","expiresAt","Date","now","_createClass","key","get","value","hasScopes","_this","every","scope","includes","KeyRegistry","salt","keys","Map","usageCounts","_get","_asyncToGenerator","_regeneratorRuntime","mark","_callee","apiKey","hash","wrap","_callee$","_context","prev","next","hashApiKey","trim","sent","isExpired","abrupt","set","stop","_x","apply","_hashApiKey","_callee2","_this2","_callee2$","_context2","Promise","resolve","reject","Error","Buffer","from","N","r","p","err","derivedKey","toString","_x2","update","clear","_i","_Object$entries","Object","entries","_Object$entries$_i","_slicedToArray","data","getAndResetUsageCounts","fromEntries","KeyCacheBase","clientId","env","concat"],"sources":["../../../src/common/keyRegistry.ts"],"sourcesContent":[null],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { createLogger, format, transports } from "winston";
|
|
2
|
+
export var getLogger = function getLogger() {
|
|
3
|
+
return createLogger({
|
|
4
|
+
level: process.env.APITALLY_DEBUG ? "debug" : "warn",
|
|
5
|
+
format: format.combine(format.colorize(), format.timestamp(), format.printf(function (info) {
|
|
6
|
+
return "".concat(info.timestamp, " ").concat(info.level, ": ").concat(info.message);
|
|
7
|
+
})),
|
|
8
|
+
transports: [new transports.Console()]
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
//# sourceMappingURL=logging.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logging.js","names":["createLogger","format","transports","getLogger","level","process","env","APITALLY_DEBUG","combine","colorize","timestamp","printf","info","concat","message","Console"],"sources":["../../../src/common/logging.ts"],"sourcesContent":[null],"mappings":"AAAA,SAASA,YAAY,EAAEC,MAAM,EAAEC,UAAU,QAAQ,SAAS;AAS1D,OAAO,IAAMC,SAAS,GAAG,SAAZA,SAASA,CAAA,EAAQ;EAC5B,OAAOH,YAAY,CAAC;IAClBI,KAAK,EAAEC,OAAO,CAACC,GAAG,CAACC,cAAc,GAAG,OAAO,GAAG,MAAM;IACpDN,MAAM,EAAEA,MAAM,CAACO,OAAO,CACpBP,MAAM,CAACQ,QAAQ,EAAE,EACjBR,MAAM,CAACS,SAAS,EAAE,EAClBT,MAAM,CAACU,MAAM,CACX,UAACC,IAAI;MAAA,UAAAC,MAAA,CAAQD,IAAI,CAACF,SAAS,OAAAG,MAAA,CAAID,IAAI,CAACR,KAAK,QAAAS,MAAA,CAAKD,IAAI,CAACE,OAAO;IAAA,CAAE,CAC7D,CACF;IACDZ,UAAU,EAAE,CAAC,IAAIA,UAAU,CAACa,OAAO,EAAE;GACtC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
|
|
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
|
+
var RequestLogger = /*#__PURE__*/function () {
|
|
6
|
+
function RequestLogger() {
|
|
7
|
+
_classCallCheck(this, RequestLogger);
|
|
8
|
+
_defineProperty(this, "requestCounts", void 0);
|
|
9
|
+
_defineProperty(this, "responseTimes", void 0);
|
|
10
|
+
this.requestCounts = new Map();
|
|
11
|
+
this.responseTimes = new Map();
|
|
12
|
+
}
|
|
13
|
+
_createClass(RequestLogger, [{
|
|
14
|
+
key: "getKey",
|
|
15
|
+
value: function getKey(requestInfo) {
|
|
16
|
+
return [requestInfo.consumer || "", requestInfo.method.toUpperCase(), requestInfo.path, requestInfo.statusCode].join("|");
|
|
17
|
+
}
|
|
18
|
+
}, {
|
|
19
|
+
key: "logRequest",
|
|
20
|
+
value: function logRequest(requestInfo) {
|
|
21
|
+
var key = this.getKey(requestInfo);
|
|
22
|
+
// Increment request count
|
|
23
|
+
this.requestCounts.set(key, (this.requestCounts.get(key) || 0) + 1);
|
|
24
|
+
// Log response time
|
|
25
|
+
if (!this.responseTimes.has(key)) {
|
|
26
|
+
this.responseTimes.set(key, new Map());
|
|
27
|
+
}
|
|
28
|
+
var responseTimeMap = this.responseTimes.get(key);
|
|
29
|
+
var responseTimeMsBin = Math.floor(requestInfo.responseTime / 10) * 10; // Rounded to nearest 10ms
|
|
30
|
+
responseTimeMap.set(responseTimeMsBin, (responseTimeMap.get(responseTimeMsBin) || 0) + 1);
|
|
31
|
+
}
|
|
32
|
+
}, {
|
|
33
|
+
key: "getAndResetRequests",
|
|
34
|
+
value: function getAndResetRequests() {
|
|
35
|
+
var _this = this;
|
|
36
|
+
var data = [];
|
|
37
|
+
this.requestCounts.forEach(function (count, key) {
|
|
38
|
+
var _key$split = key.split("|"),
|
|
39
|
+
_key$split2 = _slicedToArray(_key$split, 4),
|
|
40
|
+
consumer = _key$split2[0],
|
|
41
|
+
method = _key$split2[1],
|
|
42
|
+
path = _key$split2[2],
|
|
43
|
+
statusCodeStr = _key$split2[3];
|
|
44
|
+
var responseTimes = _this.responseTimes.get(key) || new Map();
|
|
45
|
+
data.push({
|
|
46
|
+
consumer: consumer || null,
|
|
47
|
+
method: method,
|
|
48
|
+
path: path,
|
|
49
|
+
status_code: parseInt(statusCodeStr),
|
|
50
|
+
request_count: count,
|
|
51
|
+
response_times: Object.fromEntries(responseTimes)
|
|
52
|
+
});
|
|
53
|
+
});
|
|
54
|
+
// Reset the counts and times
|
|
55
|
+
this.requestCounts.clear();
|
|
56
|
+
this.responseTimes.clear();
|
|
57
|
+
return data;
|
|
58
|
+
}
|
|
59
|
+
}]);
|
|
60
|
+
return RequestLogger;
|
|
61
|
+
}();
|
|
62
|
+
export { RequestLogger as default };
|
|
63
|
+
//# sourceMappingURL=requestLogger.js.map
|