@secfn/core 0.0.1

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.
Files changed (64) hide show
  1. package/README.md +334 -0
  2. package/dist/access-control/rbac.d.ts +48 -0
  3. package/dist/access-control/rbac.d.ts.map +1 -0
  4. package/dist/access-control/rbac.js +203 -0
  5. package/dist/access-control/rbac.js.map +1 -0
  6. package/dist/core/secfn.d.ts +28 -0
  7. package/dist/core/secfn.d.ts.map +1 -0
  8. package/dist/core/secfn.js +73 -0
  9. package/dist/core/secfn.js.map +1 -0
  10. package/dist/index.d.ts +12 -0
  11. package/dist/index.d.ts.map +1 -0
  12. package/dist/index.js +12 -0
  13. package/dist/index.js.map +1 -0
  14. package/dist/monitoring/security-monitor.d.ts +46 -0
  15. package/dist/monitoring/security-monitor.d.ts.map +1 -0
  16. package/dist/monitoring/security-monitor.js +172 -0
  17. package/dist/monitoring/security-monitor.js.map +1 -0
  18. package/dist/rate-limiting/rate-limiter.d.ts +31 -0
  19. package/dist/rate-limiting/rate-limiter.d.ts.map +1 -0
  20. package/dist/rate-limiting/rate-limiter.js +140 -0
  21. package/dist/rate-limiting/rate-limiter.js.map +1 -0
  22. package/dist/scanning/patterns.d.ts +3 -0
  23. package/dist/scanning/patterns.d.ts.map +1 -0
  24. package/dist/scanning/patterns.js +139 -0
  25. package/dist/scanning/patterns.js.map +1 -0
  26. package/dist/scanning/scanner.d.ts +36 -0
  27. package/dist/scanning/scanner.d.ts.map +1 -0
  28. package/dist/scanning/scanner.js +152 -0
  29. package/dist/scanning/scanner.js.map +1 -0
  30. package/dist/secrets/encryption.d.ts +17 -0
  31. package/dist/secrets/encryption.d.ts.map +1 -0
  32. package/dist/secrets/encryption.js +47 -0
  33. package/dist/secrets/encryption.js.map +1 -0
  34. package/dist/secrets/vault.d.ts +43 -0
  35. package/dist/secrets/vault.d.ts.map +1 -0
  36. package/dist/secrets/vault.js +126 -0
  37. package/dist/secrets/vault.js.map +1 -0
  38. package/dist/storage/indexeddb-storage.d.ts +37 -0
  39. package/dist/storage/indexeddb-storage.d.ts.map +1 -0
  40. package/dist/storage/indexeddb-storage.js +284 -0
  41. package/dist/storage/indexeddb-storage.js.map +1 -0
  42. package/dist/types/index.d.ts +189 -0
  43. package/dist/types/index.d.ts.map +1 -0
  44. package/dist/types/index.js +2 -0
  45. package/dist/types/index.js.map +1 -0
  46. package/dist/utils/helpers.d.ts +8 -0
  47. package/dist/utils/helpers.d.ts.map +1 -0
  48. package/dist/utils/helpers.js +73 -0
  49. package/dist/utils/helpers.js.map +1 -0
  50. package/examples/basic-usage.ts +143 -0
  51. package/package.json +68 -0
  52. package/src/access-control/rbac.ts +271 -0
  53. package/src/core/secfn.ts +90 -0
  54. package/src/index.ts +27 -0
  55. package/src/monitoring/security-monitor.ts +245 -0
  56. package/src/rate-limiting/rate-limiter.ts +181 -0
  57. package/src/scanning/patterns.ts +140 -0
  58. package/src/scanning/scanner.ts +199 -0
  59. package/src/secrets/encryption.ts +74 -0
  60. package/src/secrets/vault.ts +187 -0
  61. package/src/storage/indexeddb-storage.ts +355 -0
  62. package/src/types/index.ts +213 -0
  63. package/src/utils/helpers.ts +84 -0
  64. package/tsconfig.json +26 -0
@@ -0,0 +1,284 @@
1
+ const DB_VERSION = 1;
2
+ const STORES = {
3
+ secrets: 'secfn_secrets',
4
+ secretAccess: 'secfn_secret_access',
5
+ roles: 'secfn_roles',
6
+ userRoles: 'secfn_user_roles',
7
+ securityEvents: 'secfn_security_events',
8
+ rateLimits: 'secfn_rate_limits',
9
+ scanResults: 'secfn_scan_results',
10
+ config: 'secfn_config',
11
+ };
12
+ export class IndexedDBStorage {
13
+ db = null;
14
+ dbName;
15
+ constructor(dbName = 'secfn') {
16
+ this.dbName = dbName;
17
+ }
18
+ async initialize() {
19
+ if (this.db)
20
+ return;
21
+ return new Promise((resolve, reject) => {
22
+ const request = indexedDB.open(this.dbName, DB_VERSION);
23
+ request.onerror = () => reject(request.error);
24
+ request.onsuccess = () => {
25
+ this.db = request.result;
26
+ resolve();
27
+ };
28
+ request.onupgradeneeded = (event) => {
29
+ const db = event.target.result;
30
+ if (!db.objectStoreNames.contains(STORES.secrets)) {
31
+ const secretsStore = db.createObjectStore(STORES.secrets, { keyPath: 'id' });
32
+ secretsStore.createIndex('key', 'key', { unique: true });
33
+ secretsStore.createIndex('environment', 'environment');
34
+ secretsStore.createIndex('expiresAt', 'expiresAt');
35
+ secretsStore.createIndex('tags', 'tags', { multiEntry: true });
36
+ }
37
+ if (!db.objectStoreNames.contains(STORES.secretAccess)) {
38
+ const accessStore = db.createObjectStore(STORES.secretAccess, { keyPath: 'id' });
39
+ accessStore.createIndex('secretId', 'secretId');
40
+ accessStore.createIndex('userId', 'userId');
41
+ accessStore.createIndex('timestamp', 'timestamp');
42
+ }
43
+ if (!db.objectStoreNames.contains(STORES.roles)) {
44
+ db.createObjectStore(STORES.roles, { keyPath: 'id' });
45
+ }
46
+ if (!db.objectStoreNames.contains(STORES.userRoles)) {
47
+ const userRolesStore = db.createObjectStore(STORES.userRoles, { keyPath: ['userId', 'roleId'] });
48
+ userRolesStore.createIndex('userId', 'userId');
49
+ userRolesStore.createIndex('roleId', 'roleId');
50
+ }
51
+ if (!db.objectStoreNames.contains(STORES.securityEvents)) {
52
+ const eventsStore = db.createObjectStore(STORES.securityEvents, { keyPath: 'id' });
53
+ eventsStore.createIndex('timestamp', 'timestamp');
54
+ eventsStore.createIndex('type', 'type');
55
+ eventsStore.createIndex('severity', 'severity');
56
+ eventsStore.createIndex('userId', 'userId');
57
+ eventsStore.createIndex('ip', 'ip');
58
+ }
59
+ if (!db.objectStoreNames.contains(STORES.rateLimits)) {
60
+ db.createObjectStore(STORES.rateLimits, { keyPath: 'key' });
61
+ }
62
+ if (!db.objectStoreNames.contains(STORES.scanResults)) {
63
+ const scanStore = db.createObjectStore(STORES.scanResults, { keyPath: 'id' });
64
+ scanStore.createIndex('timestamp', 'timestamp');
65
+ scanStore.createIndex('severity', 'severity');
66
+ scanStore.createIndex('file', 'file');
67
+ }
68
+ if (!db.objectStoreNames.contains(STORES.config)) {
69
+ db.createObjectStore(STORES.config, { keyPath: 'key' });
70
+ }
71
+ };
72
+ });
73
+ }
74
+ getStore(storeName, mode = 'readonly') {
75
+ if (!this.db)
76
+ throw new Error('Database not initialized');
77
+ const tx = this.db.transaction(storeName, mode);
78
+ return tx.objectStore(storeName);
79
+ }
80
+ async saveSecret(secret) {
81
+ const store = this.getStore(STORES.secrets, 'readwrite');
82
+ await this.promisifyRequest(store.put(secret));
83
+ }
84
+ async getSecret(id) {
85
+ const store = this.getStore(STORES.secrets);
86
+ const result = await this.promisifyRequest(store.get(id));
87
+ return result || null;
88
+ }
89
+ async getSecretByKey(key) {
90
+ const store = this.getStore(STORES.secrets);
91
+ const index = store.index('key');
92
+ const result = await this.promisifyRequest(index.get(key));
93
+ return result || null;
94
+ }
95
+ async listSecrets(filter) {
96
+ const store = this.getStore(STORES.secrets);
97
+ const secrets = await this.promisifyRequest(store.getAll());
98
+ if (!filter)
99
+ return secrets;
100
+ return secrets.filter(secret => {
101
+ if (filter.environment && secret.environment !== filter.environment) {
102
+ return false;
103
+ }
104
+ if (filter.tags && !filter.tags.some(tag => secret.tags.includes(tag))) {
105
+ return false;
106
+ }
107
+ return true;
108
+ });
109
+ }
110
+ async deleteSecret(id) {
111
+ const store = this.getStore(STORES.secrets, 'readwrite');
112
+ await this.promisifyRequest(store.delete(id));
113
+ }
114
+ async logSecretAccess(access) {
115
+ const store = this.getStore(STORES.secretAccess, 'readwrite');
116
+ await this.promisifyRequest(store.put(access));
117
+ }
118
+ async getSecretAccessLog(secretId, limit = 100) {
119
+ const store = this.getStore(STORES.secretAccess);
120
+ const index = store.index('secretId');
121
+ const allAccess = await this.promisifyRequest(index.getAll(secretId));
122
+ return allAccess.slice(-limit);
123
+ }
124
+ async saveRole(role) {
125
+ const store = this.getStore(STORES.roles, 'readwrite');
126
+ await this.promisifyRequest(store.put(role));
127
+ }
128
+ async getRole(id) {
129
+ const store = this.getStore(STORES.roles);
130
+ const result = await this.promisifyRequest(store.get(id));
131
+ return result || null;
132
+ }
133
+ async listRoles() {
134
+ const store = this.getStore(STORES.roles);
135
+ return await this.promisifyRequest(store.getAll());
136
+ }
137
+ async deleteRole(id) {
138
+ const store = this.getStore(STORES.roles, 'readwrite');
139
+ await this.promisifyRequest(store.delete(id));
140
+ }
141
+ async assignUserRole(userRole) {
142
+ const store = this.getStore(STORES.userRoles, 'readwrite');
143
+ await this.promisifyRequest(store.put(userRole));
144
+ }
145
+ async getUserRoles(userId) {
146
+ const store = this.getStore(STORES.userRoles);
147
+ const index = store.index('userId');
148
+ return await this.promisifyRequest(index.getAll(userId));
149
+ }
150
+ async removeUserRole(userId, roleId) {
151
+ const store = this.getStore(STORES.userRoles, 'readwrite');
152
+ await this.promisifyRequest(store.delete([userId, roleId]));
153
+ }
154
+ async logSecurityEvent(event) {
155
+ const store = this.getStore(STORES.securityEvents, 'readwrite');
156
+ await this.promisifyRequest(store.put(event));
157
+ }
158
+ async queryEvents(query) {
159
+ const store = this.getStore(STORES.securityEvents);
160
+ let events = await this.promisifyRequest(store.getAll());
161
+ if (query.type) {
162
+ const types = Array.isArray(query.type) ? query.type : [query.type];
163
+ events = events.filter(e => types.includes(e.type));
164
+ }
165
+ if (query.severity) {
166
+ const severities = Array.isArray(query.severity) ? query.severity : [query.severity];
167
+ events = events.filter(e => severities.includes(e.severity));
168
+ }
169
+ if (query.userId) {
170
+ events = events.filter(e => e.userId === query.userId);
171
+ }
172
+ if (query.ip) {
173
+ events = events.filter(e => e.ip === query.ip);
174
+ }
175
+ if (query.startDate) {
176
+ events = events.filter(e => e.timestamp >= query.startDate);
177
+ }
178
+ if (query.endDate) {
179
+ events = events.filter(e => e.timestamp <= query.endDate);
180
+ }
181
+ if (query.resolved !== undefined) {
182
+ events = events.filter(e => e.resolved === query.resolved);
183
+ }
184
+ events.sort((a, b) => b.timestamp - a.timestamp);
185
+ if (query.offset) {
186
+ events = events.slice(query.offset);
187
+ }
188
+ if (query.limit) {
189
+ events = events.slice(0, query.limit);
190
+ }
191
+ return events;
192
+ }
193
+ async getMetrics(range) {
194
+ const events = await this.queryEvents({
195
+ startDate: range.start,
196
+ endDate: range.end,
197
+ });
198
+ const eventsByType = {};
199
+ const eventsBySeverity = {};
200
+ const ipCounts = {};
201
+ const userCounts = {};
202
+ for (const event of events) {
203
+ eventsByType[event.type] = (eventsByType[event.type] || 0) + 1;
204
+ eventsBySeverity[event.severity] = (eventsBySeverity[event.severity] || 0) + 1;
205
+ ipCounts[event.ip] = (ipCounts[event.ip] || 0) + 1;
206
+ if (event.userId) {
207
+ userCounts[event.userId] = (userCounts[event.userId] || 0) + 1;
208
+ }
209
+ }
210
+ const topIPs = Object.entries(ipCounts)
211
+ .map(([ip, count]) => ({ ip, count }))
212
+ .sort((a, b) => b.count - a.count)
213
+ .slice(0, 10);
214
+ const topUsers = Object.entries(userCounts)
215
+ .map(([userId, count]) => ({ userId, count }))
216
+ .sort((a, b) => b.count - a.count)
217
+ .slice(0, 10);
218
+ return {
219
+ timeRange: range,
220
+ totalEvents: events.length,
221
+ eventsByType,
222
+ eventsBySeverity,
223
+ topIPs,
224
+ topUsers,
225
+ };
226
+ }
227
+ async getRateLimitEntry(key) {
228
+ const store = this.getStore(STORES.rateLimits);
229
+ const result = await this.promisifyRequest(store.get(key));
230
+ return result || null;
231
+ }
232
+ async setRateLimitEntry(entry) {
233
+ const store = this.getStore(STORES.rateLimits, 'readwrite');
234
+ await this.promisifyRequest(store.put(entry));
235
+ }
236
+ async deleteRateLimitEntry(key) {
237
+ const store = this.getStore(STORES.rateLimits, 'readwrite');
238
+ await this.promisifyRequest(store.delete(key));
239
+ }
240
+ async saveScanResult(result) {
241
+ const store = this.getStore(STORES.scanResults, 'readwrite');
242
+ await this.promisifyRequest(store.put(result));
243
+ }
244
+ async getScanHistory(limit = 100) {
245
+ const store = this.getStore(STORES.scanResults);
246
+ const results = await this.promisifyRequest(store.getAll());
247
+ return results.slice(-limit);
248
+ }
249
+ async cleanup(retentionMs) {
250
+ const cutoffTime = Date.now() - retentionMs;
251
+ const eventsStore = this.getStore(STORES.securityEvents, 'readwrite');
252
+ const events = await this.promisifyRequest(eventsStore.getAll());
253
+ for (const event of events) {
254
+ if (event.timestamp < cutoffTime) {
255
+ await this.promisifyRequest(eventsStore.delete(event.id));
256
+ }
257
+ }
258
+ const scanStore = this.getStore(STORES.scanResults, 'readwrite');
259
+ const scans = await this.promisifyRequest(scanStore.getAll());
260
+ for (const scan of scans) {
261
+ if (scan.timestamp < cutoffTime) {
262
+ await this.promisifyRequest(scanStore.delete(scan.id));
263
+ }
264
+ }
265
+ }
266
+ async destroy() {
267
+ if (this.db) {
268
+ this.db.close();
269
+ this.db = null;
270
+ }
271
+ return new Promise((resolve, reject) => {
272
+ const request = indexedDB.deleteDatabase(this.dbName);
273
+ request.onsuccess = () => resolve();
274
+ request.onerror = () => reject(request.error);
275
+ });
276
+ }
277
+ promisifyRequest(request) {
278
+ return new Promise((resolve, reject) => {
279
+ request.onsuccess = () => resolve(request.result);
280
+ request.onerror = () => reject(request.error);
281
+ });
282
+ }
283
+ }
284
+ //# sourceMappingURL=indexeddb-storage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"indexeddb-storage.js","sourceRoot":"","sources":["../../src/storage/indexeddb-storage.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,189 @@
1
+ export type Severity = 'critical' | 'high' | 'medium' | 'low' | 'info';
2
+ export type Environment = 'development' | 'staging' | 'production';
3
+ export interface StorageConfig {
4
+ type: 'indexeddb' | 'file' | 'db';
5
+ dbName?: string;
6
+ path?: string;
7
+ adapter?: any;
8
+ retentionDays?: number;
9
+ }
10
+ export interface SecretPattern {
11
+ name: string;
12
+ pattern: RegExp;
13
+ entropy?: number;
14
+ description: string;
15
+ severity: Severity;
16
+ }
17
+ export interface SecretScanResult {
18
+ id: string;
19
+ timestamp: number;
20
+ file: string;
21
+ line: number;
22
+ column: number;
23
+ pattern: string;
24
+ match: string;
25
+ redactedMatch: string;
26
+ severity: Severity;
27
+ entropy: number;
28
+ context: string;
29
+ resolved: boolean;
30
+ falsePositive: boolean;
31
+ metadata?: Record<string, unknown>;
32
+ }
33
+ export interface Secret {
34
+ id: string;
35
+ key: string;
36
+ value: string;
37
+ encrypted: boolean;
38
+ version: number;
39
+ tags: string[];
40
+ environment?: Environment;
41
+ expiresAt?: number;
42
+ rotateEvery?: number;
43
+ lastRotated?: number;
44
+ lastAccessed?: number;
45
+ accessCount: number;
46
+ createdBy: string;
47
+ createdAt: number;
48
+ updatedAt: number;
49
+ }
50
+ export interface SecretAccess {
51
+ id: string;
52
+ secretId: string;
53
+ userId: string;
54
+ action: 'read' | 'write' | 'delete' | 'rotate';
55
+ timestamp: number;
56
+ ip?: string;
57
+ userAgent?: string;
58
+ }
59
+ export interface Role {
60
+ id: string;
61
+ name: string;
62
+ description: string;
63
+ permissions: string[];
64
+ inherits?: string[];
65
+ metadata?: Record<string, unknown>;
66
+ createdAt: number;
67
+ updatedAt: number;
68
+ }
69
+ export interface Permission {
70
+ id: string;
71
+ resource: string;
72
+ action: string;
73
+ conditions?: PolicyCondition[];
74
+ }
75
+ export interface UserRole {
76
+ userId: string;
77
+ roleId: string;
78
+ resourceIds?: string[];
79
+ expiresAt?: number;
80
+ assignedAt: number;
81
+ }
82
+ export interface PolicyCondition {
83
+ field: string;
84
+ operator: 'eq' | 'ne' | 'in' | 'nin' | 'gt' | 'lt' | 'contains';
85
+ value: unknown;
86
+ }
87
+ export interface AccessRequest {
88
+ userId: string;
89
+ action: string;
90
+ resourceId?: string;
91
+ context?: Record<string, unknown>;
92
+ }
93
+ export interface RateLimitRule {
94
+ id?: string;
95
+ name?: string;
96
+ type?: 'global' | 'perUser' | 'perIP' | 'perEndpoint';
97
+ requests: number;
98
+ window: number;
99
+ blockDuration?: number;
100
+ endpoints?: string[];
101
+ }
102
+ export interface RateLimitEntry {
103
+ key: string;
104
+ count: number;
105
+ resetAt: number;
106
+ blocked: boolean;
107
+ blockedUntil?: number;
108
+ }
109
+ export interface RateLimitResult {
110
+ allowed: boolean;
111
+ remaining: number;
112
+ resetAt: number;
113
+ retryAfter?: number;
114
+ limit?: number;
115
+ }
116
+ export interface RateLimitViolation {
117
+ id: string;
118
+ timestamp: number;
119
+ key: string;
120
+ ip: string;
121
+ userId?: string;
122
+ endpoint: string;
123
+ requestCount: number;
124
+ limit: number;
125
+ window: number;
126
+ blocked: boolean;
127
+ }
128
+ export type SecurityEventType = 'auth_failure' | 'rate_limit_exceeded' | 'unauthorized_access' | 'secret_accessed' | 'permission_denied' | 'suspicious_activity' | 'secret_exposed' | 'policy_violation';
129
+ export interface SecurityEvent {
130
+ id: string;
131
+ timestamp: number;
132
+ type: SecurityEventType;
133
+ severity: Severity;
134
+ userId?: string;
135
+ ip: string;
136
+ userAgent?: string;
137
+ resource?: string;
138
+ action?: string;
139
+ metadata: Record<string, unknown>;
140
+ resolved: boolean;
141
+ resolvedAt?: number;
142
+ resolvedBy?: string;
143
+ notes?: string;
144
+ }
145
+ export interface SecurityMetrics {
146
+ timeRange: {
147
+ start: number;
148
+ end: number;
149
+ };
150
+ totalEvents: number;
151
+ eventsByType: Record<string, number>;
152
+ eventsBySeverity: Record<string, number>;
153
+ topIPs: Array<{
154
+ ip: string;
155
+ count: number;
156
+ }>;
157
+ topUsers: Array<{
158
+ userId: string;
159
+ count: number;
160
+ }>;
161
+ anomalies?: SecurityAnomaly[];
162
+ }
163
+ export type AnomalyType = 'unusual_access_pattern' | 'geographic_anomaly' | 'spike_in_failures' | 'new_endpoint_access' | 'unusual_time';
164
+ export interface SecurityAnomaly {
165
+ id: string;
166
+ timestamp: number;
167
+ type: AnomalyType;
168
+ score: number;
169
+ description: string;
170
+ relatedEvents: string[];
171
+ userId?: string;
172
+ ip?: string;
173
+ }
174
+ export interface EventQuery {
175
+ type?: SecurityEventType | SecurityEventType[];
176
+ severity?: Severity | Severity[];
177
+ userId?: string;
178
+ ip?: string;
179
+ startDate?: number;
180
+ endDate?: number;
181
+ resolved?: boolean;
182
+ limit?: number;
183
+ offset?: number;
184
+ }
185
+ export interface TimeRange {
186
+ start: number;
187
+ end: number;
188
+ }
189
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":""}
@@ -0,0 +1,8 @@
1
+ export declare function generateId(prefix?: string): string;
2
+ export declare function calculateEntropy(str: string): number;
3
+ export declare function redactSecret(secret: string, visibleChars?: number): string;
4
+ export declare function isExpired(timestamp?: number): boolean;
5
+ export declare function delay(ms: number): Promise<void>;
6
+ export declare function sanitizeForLog(obj: Record<string, unknown>): Record<string, unknown>;
7
+ export declare function parseTimeWindow(window: string | number): number;
8
+ //# sourceMappingURL=helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../src/utils/helpers.ts"],"names":[],"mappings":"AAEA,wBAAgB,UAAU,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAGlD;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAkBpD;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,SAAI,GAAG,MAAM,CAQrE;AAED,wBAAgB,SAAS,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAGrD;AAED,wBAAgB,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE/C;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAgBpF;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAmB/D"}
@@ -0,0 +1,73 @@
1
+ import { randomBytes } from 'crypto';
2
+ export function generateId(prefix) {
3
+ const random = randomBytes(16).toString('hex');
4
+ return prefix ? `${prefix}_${random}` : random;
5
+ }
6
+ export function calculateEntropy(str) {
7
+ if (!str)
8
+ return 0;
9
+ const len = str.length;
10
+ const frequencies = {};
11
+ for (let i = 0; i < len; i++) {
12
+ const char = str[i];
13
+ frequencies[char] = (frequencies[char] || 0) + 1;
14
+ }
15
+ let entropy = 0;
16
+ for (const char in frequencies) {
17
+ const probability = frequencies[char] / len;
18
+ entropy -= probability * Math.log2(probability);
19
+ }
20
+ return entropy;
21
+ }
22
+ export function redactSecret(secret, visibleChars = 4) {
23
+ if (secret.length <= visibleChars) {
24
+ return '*'.repeat(secret.length);
25
+ }
26
+ const start = secret.slice(0, visibleChars);
27
+ const rest = '*'.repeat(secret.length - visibleChars);
28
+ return start + rest;
29
+ }
30
+ export function isExpired(timestamp) {
31
+ if (!timestamp)
32
+ return false;
33
+ return Date.now() > timestamp;
34
+ }
35
+ export function delay(ms) {
36
+ return new Promise(resolve => setTimeout(resolve, ms));
37
+ }
38
+ export function sanitizeForLog(obj) {
39
+ const sanitized = {};
40
+ const sensitiveKeys = ['password', 'secret', 'token', 'key', 'apiKey', 'api_key'];
41
+ for (const [key, value] of Object.entries(obj)) {
42
+ const lowerKey = key.toLowerCase();
43
+ if (sensitiveKeys.some(sk => lowerKey.includes(sk))) {
44
+ sanitized[key] = '[REDACTED]';
45
+ }
46
+ else if (typeof value === 'object' && value !== null) {
47
+ sanitized[key] = sanitizeForLog(value);
48
+ }
49
+ else {
50
+ sanitized[key] = value;
51
+ }
52
+ }
53
+ return sanitized;
54
+ }
55
+ export function parseTimeWindow(window) {
56
+ if (typeof window === 'number')
57
+ return window;
58
+ const match = window.match(/^(\d+)(ms|s|m|h|d)$/);
59
+ if (!match) {
60
+ throw new Error(`Invalid time window format: ${window}`);
61
+ }
62
+ const [, value, unit] = match;
63
+ const num = parseInt(value, 10);
64
+ switch (unit) {
65
+ case 'ms': return num;
66
+ case 's': return num * 1000;
67
+ case 'm': return num * 60 * 1000;
68
+ case 'h': return num * 60 * 60 * 1000;
69
+ case 'd': return num * 24 * 60 * 60 * 1000;
70
+ default: throw new Error(`Unknown time unit: ${unit}`);
71
+ }
72
+ }
73
+ //# sourceMappingURL=helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/utils/helpers.ts"],"names":[],"mappings":"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"}