@usageflow/core 0.2.5 → 0.3.0

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.
@@ -0,0 +1,440 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.UsageFlowAPI = void 0;
4
+ const socket_1 = require("./socket");
5
+ class UsageFlowAPI {
6
+ constructor(config = { apiKey: '', poolSize: 5 }) {
7
+ this.apiKey = null;
8
+ this.usageflowUrl = "https://api.usageflow.io";
9
+ this.webServer = 'express';
10
+ this.apiConfigs = [];
11
+ this.configUpdateInterval = null;
12
+ this.socketManager = null;
13
+ this.applicationId = false;
14
+ this.init(config.apiKey, this.usageflowUrl, config.poolSize);
15
+ }
16
+ /**
17
+ * Initialize the UsageFlow API with credentials
18
+ * @param apiKey - Your UsageFlow API key
19
+ * @param usageflowUrl - The UsageFlow API URL (default: https://api.usageflow.io)
20
+ * @param poolSize - Number of WebSocket connections in the pool (default: 5)
21
+ */
22
+ init(apiKey, usageflowUrl = "https://api.usageflow.io", poolSize) {
23
+ this.apiKey = apiKey;
24
+ this.usageflowUrl = usageflowUrl;
25
+ // this.startConfigUpdater();
26
+ this.socketManager = new socket_1.UsageFlowSocketManger(apiKey, poolSize);
27
+ // Connect the socket manager
28
+ this.socketManager.connect().catch((error) => {
29
+ console.error("[UsageFlow] Failed to establish WebSocket connection:", error);
30
+ }).then(() => {
31
+ this.startConfigUpdater();
32
+ });
33
+ return this;
34
+ }
35
+ setWebServer(webServer) {
36
+ this.webServer = webServer;
37
+ }
38
+ getApiKey() {
39
+ return this.apiKey;
40
+ }
41
+ getUsageflowUrl() {
42
+ return this.usageflowUrl;
43
+ }
44
+ /**
45
+ * Start background config update process
46
+ */
47
+ startConfigUpdater() {
48
+ if (this.configUpdateInterval) {
49
+ clearInterval(this.configUpdateInterval);
50
+ }
51
+ this.fetchApiPolicies().catch(console.error);
52
+ this.configUpdateInterval = setInterval(async () => {
53
+ await this.fetchApiPolicies();
54
+ }, 60000);
55
+ // this.fetchApiConfig().catch(console.error);
56
+ }
57
+ getRoutePattern(request) {
58
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;
59
+ if (this.webServer === 'fastify') {
60
+ return ((_a = request === null || request === void 0 ? void 0 : request.routeOptions) === null || _a === void 0 ? void 0 : _a.url) || request.url || '';
61
+ }
62
+ // For NestJS, prioritize route.path with baseUrl
63
+ if (this.webServer === 'nestjs') {
64
+ // Method 1: Use request.route.path (available after route matching in NestJS)
65
+ if ((_b = request.route) === null || _b === void 0 ? void 0 : _b.path) {
66
+ const baseUrl = request.baseUrl || "";
67
+ const routePath = request.route.path;
68
+ // Combine baseUrl and routePath to get full pattern
69
+ const fullPath = baseUrl + routePath;
70
+ return fullPath || "/";
71
+ }
72
+ // Method 2: Reconstruct pattern from params (NestJS-specific)
73
+ // This is more reliable for NestJS when route.path is not available
74
+ if (request.params && Object.keys(request.params).length > 0) {
75
+ let path = request.path || ((_c = request.url) === null || _c === void 0 ? void 0 : _c.split("?")[0]) || "/";
76
+ // Split path into segments and replace matching segments with param names
77
+ const pathSegments = path.split("/").filter(segment => segment !== "");
78
+ const paramEntries = Object.entries(request.params);
79
+ // Replace segments that match param values with :paramName
80
+ for (let i = 0; i < pathSegments.length; i++) {
81
+ for (const [paramName, paramValue] of paramEntries) {
82
+ if (pathSegments[i] === String(paramValue)) {
83
+ pathSegments[i] = `:${paramName}`;
84
+ break; // Only replace once per segment
85
+ }
86
+ }
87
+ }
88
+ // Reconstruct the full path pattern
89
+ const pattern = "/" + pathSegments.join("/");
90
+ return pattern;
91
+ }
92
+ }
93
+ const routePattern = ((_d = request.route) === null || _d === void 0 ? void 0 : _d.path) || ((_f = (_e = request.app._router.stack.find((route) => {
94
+ // a => a.path == request.url
95
+ if (!route.route)
96
+ return false;
97
+ if (route.path) {
98
+ return route.path == request.url;
99
+ }
100
+ if (route.regexp) {
101
+ const patterned = route.regexp.test(request.url);
102
+ if (patterned) {
103
+ return patterned;
104
+ }
105
+ }
106
+ })) === null || _e === void 0 ? void 0 : _e.route) === null || _f === void 0 ? void 0 : _f.path);
107
+ if (routePattern) {
108
+ return routePattern;
109
+ }
110
+ // Method 1: Use request.route.path (available after route matching)
111
+ if ((_g = request.route) === null || _g === void 0 ? void 0 : _g.path) {
112
+ const baseUrl = request.baseUrl || "";
113
+ const routePath = request.route.path;
114
+ // Combine baseUrl and routePath to get full pattern
115
+ const fullPath = baseUrl + routePath;
116
+ return fullPath || "/";
117
+ }
118
+ // Method 2: Try to find route from router stack
119
+ try {
120
+ const app = request.app;
121
+ const router = app._router;
122
+ if (router && router.stack) {
123
+ const method = request.method.toLowerCase();
124
+ const path = request.path || ((_h = request.url) === null || _h === void 0 ? void 0 : _h.split("?")[0]) || "";
125
+ // Search through router stack for matching route
126
+ for (const layer of router.stack) {
127
+ if (layer.route) {
128
+ const route = layer.route;
129
+ const routePath = route.path;
130
+ const routeMethods = Object.keys(route.methods).map(m => m.toLowerCase());
131
+ // Check if method matches and path pattern matches
132
+ if (routeMethods.includes(method) || routeMethods.includes("*")) {
133
+ // Try to match the pattern by checking if params match
134
+ const pattern = (request.baseUrl || "") + routePath;
135
+ // Simple check: if we have params and the route has params, it might match
136
+ if (request.params && Object.keys(request.params).length > 0) {
137
+ // Check if route path contains the param names
138
+ const paramNames = Object.keys(request.params);
139
+ const routeHasParams = paramNames.some(param => routePath.includes(`:${param}`));
140
+ if (routeHasParams) {
141
+ return pattern;
142
+ }
143
+ }
144
+ else if (!routePath.includes(":")) {
145
+ // If no params in request and route has no params, check exact match
146
+ if (path === pattern || path === routePath) {
147
+ return pattern;
148
+ }
149
+ }
150
+ }
151
+ }
152
+ else if (layer.name === "router" && layer.handle && layer.handle.stack) {
153
+ // Handle router middleware (nested routers)
154
+ const mountPath = layer.regexp.source
155
+ .replace("\\/?", "")
156
+ .replace("(?=\\/|$)", "")
157
+ .replace(/\\\//g, "/")
158
+ .replace(/\^/g, "")
159
+ .replace(/\$/g, "")
160
+ .replace(/\\/g, "");
161
+ for (const subLayer of layer.handle.stack) {
162
+ if (subLayer.route) {
163
+ const route = subLayer.route;
164
+ const routePath = route.path;
165
+ const routeMethods = Object.keys(route.methods).map(m => m.toLowerCase());
166
+ if (routeMethods.includes(method) || routeMethods.includes("*")) {
167
+ const fullPath = mountPath + routePath;
168
+ // Check if this route matches by examining params
169
+ if (request.params && Object.keys(request.params).length > 0) {
170
+ const paramNames = Object.keys(request.params);
171
+ const routeHasParams = paramNames.some(param => routePath.includes(`:${param}`));
172
+ if (routeHasParams) {
173
+ return fullPath;
174
+ }
175
+ }
176
+ else if (!routePath.includes(":")) {
177
+ const currentPath = request.path || ((_j = request.url) === null || _j === void 0 ? void 0 : _j.split("?")[0]) || "";
178
+ if (currentPath === fullPath || currentPath === routePath) {
179
+ return fullPath;
180
+ }
181
+ }
182
+ }
183
+ }
184
+ }
185
+ }
186
+ }
187
+ }
188
+ }
189
+ catch (error) {
190
+ // Silently fail and try next method
191
+ console.debug("[UsageFlow] Could not extract route from router stack:", error);
192
+ }
193
+ // Method 3: Reconstruct pattern from params and path
194
+ if (request.params && Object.keys(request.params).length > 0) {
195
+ let path = request.path || ((_k = request.url) === null || _k === void 0 ? void 0 : _k.split("?")[0]) || "/";
196
+ const baseUrl = request.baseUrl || "";
197
+ // Split path into segments and replace matching segments with param names
198
+ const pathSegments = path.split("/");
199
+ const paramEntries = Object.entries(request.params);
200
+ // Replace segments that match param values with :paramName
201
+ for (let i = 0; i < pathSegments.length; i++) {
202
+ for (const [paramName, paramValue] of paramEntries) {
203
+ if (pathSegments[i] === paramValue) {
204
+ pathSegments[i] = `:${paramName}`;
205
+ break; // Only replace once per segment
206
+ }
207
+ }
208
+ }
209
+ const pattern = baseUrl + pathSegments.join("/");
210
+ return pattern;
211
+ }
212
+ // Fallback: return baseUrl + path or just path
213
+ const baseUrl = request.baseUrl || "";
214
+ const path = request.path || ((_l = request.url) === null || _l === void 0 ? void 0 : _l.split("?")[0]) || "/";
215
+ return baseUrl + path || "/";
216
+ }
217
+ guessLedgerId(request, overrideUrl) {
218
+ var _a, _b, _c;
219
+ const method = request.method;
220
+ const url = overrideUrl || this.getRoutePattern(request);
221
+ const configs = this.apiConfigs;
222
+ if (!configs.length) {
223
+ return `${method} ${url}`;
224
+ }
225
+ for (const config of configs) {
226
+ const fieldName = config.identityFieldName;
227
+ const location = config.identityFieldLocation;
228
+ switch (location) {
229
+ case "path_params":
230
+ if ((_a = request.params) === null || _a === void 0 ? void 0 : _a[fieldName]) {
231
+ return `${method} ${url} ${request.params[fieldName]}`;
232
+ }
233
+ break;
234
+ case "query_params":
235
+ if ((_b = request.query) === null || _b === void 0 ? void 0 : _b[fieldName]) {
236
+ return `${method} ${url} ${request.query[fieldName]}`;
237
+ }
238
+ break;
239
+ case "body":
240
+ if ((_c = request.body) === null || _c === void 0 ? void 0 : _c[fieldName]) {
241
+ return `${method} ${url} ${request.body[fieldName]}`;
242
+ }
243
+ break;
244
+ case "bearer_token":
245
+ const authHeader = this.getHeaderValue(request.headers, 'authorization');
246
+ const token = this.extractBearerToken(authHeader || undefined);
247
+ if (token) {
248
+ const claims = this.decodeJwtUnverified(token);
249
+ if (claims === null || claims === void 0 ? void 0 : claims[fieldName]) {
250
+ return `${method} ${url} ${claims[fieldName]}`;
251
+ }
252
+ }
253
+ break;
254
+ case "headers": {
255
+ const headerValue = this.getHeaderValue(request.headers, fieldName);
256
+ if (headerValue) {
257
+ return `${method} ${url} ${headerValue}`;
258
+ }
259
+ break;
260
+ }
261
+ }
262
+ }
263
+ return `${method} ${url}`;
264
+ }
265
+ async fetchApiPolicies() {
266
+ var _a;
267
+ if (this.socketManager && this.socketManager.isConnected()) {
268
+ const response = await this.socketManager.sendAsync({
269
+ type: "get_application_policies",
270
+ payload: null,
271
+ });
272
+ if (response.type === 'success') {
273
+ this.apiConfigs = ((_a = response.payload) === null || _a === void 0 ? void 0 : _a.policies) || [];
274
+ }
275
+ }
276
+ }
277
+ async useAllocationRequest(payload) {
278
+ if (this.socketManager && this.socketManager.isConnected()) {
279
+ this.socketManager.sendAsync({
280
+ type: "use_allocation",
281
+ payload
282
+ }).catch((error) => {
283
+ console.error("[UsageFlow] Error sending finalization via WebSocket:", error);
284
+ throw error;
285
+ });
286
+ }
287
+ }
288
+ async allocationRequest(request, payload, metadata) {
289
+ if (this.socketManager && this.socketManager.isConnected()) {
290
+ try {
291
+ const allocationResponse = await this.socketManager.sendAsync({
292
+ type: "request_for_allocation",
293
+ payload
294
+ });
295
+ if (allocationResponse.type === 'error') {
296
+ throw new Error(allocationResponse.message || allocationResponse.error);
297
+ }
298
+ if (allocationResponse.type === 'success') {
299
+ request.usageflow.eventId = allocationResponse.payload.allocationId;
300
+ request.usageflow.metadata = metadata;
301
+ return;
302
+ }
303
+ else {
304
+ throw new Error(allocationResponse.message || "Unknown error occurred");
305
+ }
306
+ }
307
+ catch (error) {
308
+ console.error("[UsageFlow] WebSocket allocation failed, falling back to HTTP:", error);
309
+ throw error;
310
+ // Fall through to HTTP request
311
+ }
312
+ }
313
+ }
314
+ /**
315
+ * Convert routes list to a map for faster lookup
316
+ */
317
+ createRoutesMap(routes) {
318
+ const routeMap = {};
319
+ for (const route of routes) {
320
+ if (!routeMap[route.method]) {
321
+ routeMap[route.method] = {};
322
+ }
323
+ routeMap[route.method][route.url] = true;
324
+ }
325
+ return routeMap;
326
+ }
327
+ /**
328
+ * Check if the route should be skipped based on whitelist
329
+ */
330
+ shouldSkipRoute(method, url, whitelistMap) {
331
+ if (whitelistMap[method] &&
332
+ (whitelistMap[method][url] || whitelistMap[method]["*"])) {
333
+ return true;
334
+ }
335
+ if (whitelistMap["*"] &&
336
+ (whitelistMap["*"][url] || whitelistMap["*"]["*"])) {
337
+ return true;
338
+ }
339
+ return false;
340
+ }
341
+ /**
342
+ * Check if the route should be monitored
343
+ */
344
+ shouldMonitorRoute(method, url, routesMap) {
345
+ if (routesMap[method] &&
346
+ (routesMap[method][url] || routesMap[method]["*"])) {
347
+ return true;
348
+ }
349
+ if (routesMap["*"] && (routesMap["*"][url] || routesMap["*"]["*"])) {
350
+ return true;
351
+ }
352
+ return false;
353
+ }
354
+ /**
355
+ * Sanitize sensitive information from headers
356
+ */
357
+ sanitizeHeaders(headers) {
358
+ const sanitized = {};
359
+ const keyRegex = /^x-.*key$/i;
360
+ for (const [key, value] of Object.entries(headers)) {
361
+ const keyLower = key.toLowerCase();
362
+ if (keyLower === "authorization") {
363
+ if (value.startsWith("Bearer ")) {
364
+ sanitized[key] = "Bearer ****";
365
+ }
366
+ else {
367
+ sanitized[key] = "****";
368
+ }
369
+ }
370
+ else if (keyRegex.test(key)) {
371
+ sanitized[key] = "****";
372
+ }
373
+ else {
374
+ sanitized[key] = value;
375
+ }
376
+ }
377
+ return sanitized;
378
+ }
379
+ /**
380
+ * Clean up resources when shutting down
381
+ */
382
+ destroy() {
383
+ if (this.configUpdateInterval) {
384
+ clearInterval(this.configUpdateInterval);
385
+ this.configUpdateInterval = null;
386
+ }
387
+ }
388
+ extractBearerToken(authHeader) {
389
+ if (!authHeader) {
390
+ return null;
391
+ }
392
+ // Check if it's a bearer token
393
+ const parts = authHeader.split(' ');
394
+ if (parts.length !== 2 || parts[0].toLowerCase() !== 'bearer') {
395
+ return null;
396
+ }
397
+ return parts[1];
398
+ }
399
+ /**
400
+ * Get header value from headers object (handles both Record and Headers types)
401
+ */
402
+ getHeaderValue(headers, key) {
403
+ // Check if it's a Headers object (from Fetch API) by checking for the 'get' method
404
+ if (headers && typeof headers.get === 'function') {
405
+ return headers.get(key) || null;
406
+ }
407
+ // Otherwise, treat it as a Record
408
+ const value = headers[key];
409
+ if (typeof value === 'string') {
410
+ return value;
411
+ }
412
+ if (Array.isArray(value) && value.length > 0) {
413
+ return value[0];
414
+ }
415
+ return null;
416
+ }
417
+ /**
418
+ * Decodes a JWT token without verifying the signature
419
+ * @param token The JWT token to decode
420
+ * @returns The decoded claims or null if invalid
421
+ */
422
+ decodeJwtUnverified(token) {
423
+ try {
424
+ // Split the token into parts
425
+ const parts = token.split('.');
426
+ if (parts.length !== 3) {
427
+ return null;
428
+ }
429
+ // Decode the payload (claims)
430
+ const payload = parts[1];
431
+ const decoded = Buffer.from(payload, 'base64').toString('utf-8');
432
+ return JSON.parse(decoded);
433
+ }
434
+ catch (error) {
435
+ return null;
436
+ }
437
+ }
438
+ }
439
+ exports.UsageFlowAPI = UsageFlowAPI;
440
+ //# sourceMappingURL=base.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.js","sourceRoot":"","sources":["../../src/base.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export * from './types';
2
+ export * from './base';
3
+ export * from './socket';
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./types"), exports);
18
+ __exportStar(require("./base"), exports);
19
+ __exportStar(require("./socket"), exports);
20
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,0CAAwB;AACxB,yCAAuB;AACvB,2CAAyB"}
@@ -0,0 +1,26 @@
1
+ import WebSocket from "ws";
2
+ import { UsageFlowSocketMessage, UsageFlowSocketResponse } from "./types";
3
+ export declare class UsageFlowSocketManger {
4
+ private apiKey;
5
+ private connections;
6
+ private wsUrl;
7
+ private poolSize;
8
+ private currentIndex;
9
+ private connecting;
10
+ private connectionPromises;
11
+ constructor(apiKey: string, poolSize?: number);
12
+ private createConnection;
13
+ private reconnectConnection;
14
+ connect(): Promise<void>;
15
+ private getConnection;
16
+ sendAsync<T>(payload: UsageFlowSocketMessage): Promise<UsageFlowSocketResponse<T>>;
17
+ send(payload: UsageFlowSocketMessage): void;
18
+ close(): void;
19
+ isConnected(): boolean;
20
+ getWs(): WebSocket | null;
21
+ private _asyncSend;
22
+ /**
23
+ * Clean up resources including WebSocket connections
24
+ */
25
+ destroy(): void;
26
+ }