@secfn/core 0.0.1 โ 0.0.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/README.md +30 -322
- package/dist/encryption.d.ts +8 -0
- package/dist/encryption.d.ts.map +1 -0
- package/dist/encryption.js +83 -0
- package/dist/encryption.js.map +1 -0
- package/dist/errors.d.ts +24 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +47 -0
- package/dist/errors.js.map +1 -0
- package/dist/id.d.ts +3 -0
- package/dist/id.d.ts.map +1 -0
- package/dist/id.js +11 -0
- package/dist/id.js.map +1 -0
- package/dist/index.d.ts +9 -11
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -11
- package/dist/index.js.map +1 -1
- package/dist/scanner/reporters.d.ts +14 -0
- package/dist/scanner/reporters.d.ts.map +1 -0
- package/dist/scanner/reporters.js +85 -0
- package/dist/scanner/reporters.js.map +1 -0
- package/dist/scanner/rules.d.ts +24 -0
- package/dist/scanner/rules.d.ts.map +1 -0
- package/dist/scanner/rules.js +141 -0
- package/dist/scanner/rules.js.map +1 -0
- package/dist/scanner/scanner.d.ts +28 -0
- package/dist/scanner/scanner.d.ts.map +1 -0
- package/dist/scanner/scanner.js +104 -0
- package/dist/scanner/scanner.js.map +1 -0
- package/dist/scanner/utils.d.ts +15 -0
- package/dist/scanner/utils.d.ts.map +1 -0
- package/dist/scanner/utils.js +41 -0
- package/dist/scanner/utils.js.map +1 -0
- package/dist/schema.d.ts +9 -0
- package/dist/schema.d.ts.map +1 -0
- package/dist/schema.js +249 -0
- package/dist/schema.js.map +1 -0
- package/dist/types.d.ts +261 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/package.json +32 -27
- package/dist/access-control/rbac.d.ts +0 -48
- package/dist/access-control/rbac.d.ts.map +0 -1
- package/dist/access-control/rbac.js +0 -203
- package/dist/access-control/rbac.js.map +0 -1
- package/dist/core/secfn.d.ts +0 -28
- package/dist/core/secfn.d.ts.map +0 -1
- package/dist/core/secfn.js +0 -73
- package/dist/core/secfn.js.map +0 -1
- package/dist/monitoring/security-monitor.d.ts +0 -46
- package/dist/monitoring/security-monitor.d.ts.map +0 -1
- package/dist/monitoring/security-monitor.js +0 -172
- package/dist/monitoring/security-monitor.js.map +0 -1
- package/dist/rate-limiting/rate-limiter.d.ts +0 -31
- package/dist/rate-limiting/rate-limiter.d.ts.map +0 -1
- package/dist/rate-limiting/rate-limiter.js +0 -140
- package/dist/rate-limiting/rate-limiter.js.map +0 -1
- package/dist/scanning/patterns.d.ts +0 -3
- package/dist/scanning/patterns.d.ts.map +0 -1
- package/dist/scanning/patterns.js +0 -139
- package/dist/scanning/patterns.js.map +0 -1
- package/dist/scanning/scanner.d.ts +0 -36
- package/dist/scanning/scanner.d.ts.map +0 -1
- package/dist/scanning/scanner.js +0 -152
- package/dist/scanning/scanner.js.map +0 -1
- package/dist/secrets/encryption.d.ts +0 -17
- package/dist/secrets/encryption.d.ts.map +0 -1
- package/dist/secrets/encryption.js +0 -47
- package/dist/secrets/encryption.js.map +0 -1
- package/dist/secrets/vault.d.ts +0 -43
- package/dist/secrets/vault.d.ts.map +0 -1
- package/dist/secrets/vault.js +0 -126
- package/dist/secrets/vault.js.map +0 -1
- package/dist/storage/indexeddb-storage.d.ts +0 -37
- package/dist/storage/indexeddb-storage.d.ts.map +0 -1
- package/dist/storage/indexeddb-storage.js +0 -284
- package/dist/storage/indexeddb-storage.js.map +0 -1
- package/dist/types/index.d.ts +0 -189
- package/dist/types/index.d.ts.map +0 -1
- package/dist/types/index.js +0 -2
- package/dist/types/index.js.map +0 -1
- package/dist/utils/helpers.d.ts +0 -8
- package/dist/utils/helpers.d.ts.map +0 -1
- package/dist/utils/helpers.js +0 -73
- package/dist/utils/helpers.js.map +0 -1
- package/examples/basic-usage.ts +0 -143
- package/src/access-control/rbac.ts +0 -271
- package/src/core/secfn.ts +0 -90
- package/src/index.ts +0 -27
- package/src/monitoring/security-monitor.ts +0 -245
- package/src/rate-limiting/rate-limiter.ts +0 -181
- package/src/scanning/patterns.ts +0 -140
- package/src/scanning/scanner.ts +0 -199
- package/src/secrets/encryption.ts +0 -74
- package/src/secrets/vault.ts +0 -187
- package/src/storage/indexeddb-storage.ts +0 -355
- package/src/types/index.ts +0 -213
- package/src/utils/helpers.ts +0 -84
- package/tsconfig.json +0 -26
package/dist/types/index.d.ts
DELETED
|
@@ -1,189 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
|
package/dist/types/index.js
DELETED
package/dist/types/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":""}
|
package/dist/utils/helpers.d.ts
DELETED
|
@@ -1,8 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
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"}
|
package/dist/utils/helpers.js
DELETED
|
@@ -1,73 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/utils/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAErC,MAAM,UAAU,UAAU,CAAC,MAAe;IACxC,MAAM,MAAM,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC/C,OAAO,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,MAAM,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;AACjD,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,GAAW;IAC1C,IAAI,CAAC,GAAG;QAAE,OAAO,CAAC,CAAC;IAEnB,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC;IACvB,MAAM,WAAW,GAA2B,EAAE,CAAC;IAE/C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QAC7B,MAAM,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;QACpB,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;IACnD,CAAC;IAED,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;QAC/B,MAAM,WAAW,GAAG,WAAW,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC;QAC5C,OAAO,IAAI,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAClD,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,MAAc,EAAE,YAAY,GAAG,CAAC;IAC3D,IAAI,MAAM,CAAC,MAAM,IAAI,YAAY,EAAE,CAAC;QAClC,OAAO,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACnC,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC;IAC5C,MAAM,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,YAAY,CAAC,CAAC;IACtD,OAAO,KAAK,GAAG,IAAI,CAAC;AACtB,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,SAAkB;IAC1C,IAAI,CAAC,SAAS;QAAE,OAAO,KAAK,CAAC;IAC7B,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;AAChC,CAAC;AAED,MAAM,UAAU,KAAK,CAAC,EAAU;IAC9B,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AACzD,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,GAA4B;IACzD,MAAM,SAAS,GAA4B,EAAE,CAAC;IAC9C,MAAM,aAAa,GAAG,CAAC,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;IAElF,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QAC/C,MAAM,QAAQ,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;QACnC,IAAI,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;YACpD,SAAS,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC;QAChC,CAAC;aAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YACvD,SAAS,CAAC,GAAG,CAAC,GAAG,cAAc,CAAC,KAAgC,CAAC,CAAC;QACpE,CAAC;aAAM,CAAC;YACN,SAAS,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QACzB,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,MAAuB;IACrD,IAAI,OAAO,MAAM,KAAK,QAAQ;QAAE,OAAO,MAAM,CAAC;IAE9C,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;IAClD,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,+BAA+B,MAAM,EAAE,CAAC,CAAC;IAC3D,CAAC;IAED,MAAM,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,GAAG,KAAK,CAAC;IAC9B,MAAM,GAAG,GAAG,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAEhC,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,IAAI,CAAC,CAAC,OAAO,GAAG,CAAC;QACtB,KAAK,GAAG,CAAC,CAAC,OAAO,GAAG,GAAG,IAAI,CAAC;QAC5B,KAAK,GAAG,CAAC,CAAC,OAAO,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC;QACjC,KAAK,GAAG,CAAC,CAAC,OAAO,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;QACtC,KAAK,GAAG,CAAC,CAAC,OAAO,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;QAC3C,OAAO,CAAC,CAAC,MAAM,IAAI,KAAK,CAAC,sBAAsB,IAAI,EAAE,CAAC,CAAC;IACzD,CAAC;AACH,CAAC"}
|
package/examples/basic-usage.ts
DELETED
|
@@ -1,143 +0,0 @@
|
|
|
1
|
-
import { createSecFn } from '../src/index.js';
|
|
2
|
-
|
|
3
|
-
async function main() {
|
|
4
|
-
const secFn = createSecFn({
|
|
5
|
-
namespace: 'my-app-security',
|
|
6
|
-
masterKey: process.env.MASTER_KEY || 'dev-master-key-change-in-production',
|
|
7
|
-
});
|
|
8
|
-
|
|
9
|
-
await secFn.initialize();
|
|
10
|
-
console.log('โ
SecFn initialized');
|
|
11
|
-
|
|
12
|
-
const vault = secFn.createSecretsVault();
|
|
13
|
-
const scanner = secFn.createSecretScanner();
|
|
14
|
-
const access = secFn.createAccessControl();
|
|
15
|
-
const limiter = secFn.createRateLimiter({
|
|
16
|
-
rules: {
|
|
17
|
-
global: { requests: 1000, window: 60000 },
|
|
18
|
-
perUser: { requests: 100, window: 60000 },
|
|
19
|
-
perIP: { requests: 50, window: 60000 },
|
|
20
|
-
perEndpoint: {
|
|
21
|
-
'/api/login': { requests: 5, window: 300000 },
|
|
22
|
-
},
|
|
23
|
-
},
|
|
24
|
-
});
|
|
25
|
-
const monitoring = secFn.createMonitoring({
|
|
26
|
-
anomalyDetection: {
|
|
27
|
-
enabled: true,
|
|
28
|
-
sensitivity: 0.7,
|
|
29
|
-
},
|
|
30
|
-
});
|
|
31
|
-
|
|
32
|
-
console.log('\n๐ฆ Testing Secrets Vault...');
|
|
33
|
-
await vault.set('database_url', 'postgres://user:pass@localhost:5432/db', {
|
|
34
|
-
tags: ['database', 'production'],
|
|
35
|
-
environment: 'production',
|
|
36
|
-
createdBy: 'admin',
|
|
37
|
-
});
|
|
38
|
-
console.log('โ Secret stored');
|
|
39
|
-
|
|
40
|
-
const dbUrl = await vault.get('database_url');
|
|
41
|
-
console.log('โ Secret retrieved:', dbUrl?.substring(0, 20) + '...');
|
|
42
|
-
|
|
43
|
-
const secrets = await vault.list({ environment: 'production' });
|
|
44
|
-
console.log(`โ Found ${secrets.length} production secrets`);
|
|
45
|
-
|
|
46
|
-
console.log('\n๐ Testing Secret Scanner...');
|
|
47
|
-
const scanResults = scanner.scanContent(
|
|
48
|
-
`
|
|
49
|
-
const apiKey = 'sk-ant-1234567890abcdef';
|
|
50
|
-
const awsKey = 'AKIAIOSFODNN7EXAMPLE';
|
|
51
|
-
const password = 'super-secret-password';
|
|
52
|
-
`,
|
|
53
|
-
'test.ts'
|
|
54
|
-
);
|
|
55
|
-
console.log(`โ Found ${scanResults.length} secrets in code:`);
|
|
56
|
-
scanResults.forEach(r => {
|
|
57
|
-
console.log(` - ${r.pattern} at line ${r.line}: ${r.redactedMatch}`);
|
|
58
|
-
});
|
|
59
|
-
|
|
60
|
-
console.log('\n๐ Testing Access Control...');
|
|
61
|
-
const adminRole = await access.createRole({
|
|
62
|
-
name: 'admin',
|
|
63
|
-
description: 'Full system access',
|
|
64
|
-
permissions: ['*:*'],
|
|
65
|
-
});
|
|
66
|
-
console.log('โ Admin role created');
|
|
67
|
-
|
|
68
|
-
const editorRole = await access.createRole({
|
|
69
|
-
name: 'editor',
|
|
70
|
-
description: 'Can edit projects',
|
|
71
|
-
permissions: ['project:read', 'project:write', 'file:read', 'file:write'],
|
|
72
|
-
});
|
|
73
|
-
console.log('โ Editor role created');
|
|
74
|
-
|
|
75
|
-
await access.assignRole('user_123', editorRole);
|
|
76
|
-
console.log('โ Role assigned to user');
|
|
77
|
-
|
|
78
|
-
const canEdit = await access.check({
|
|
79
|
-
userId: 'user_123',
|
|
80
|
-
action: 'project:write',
|
|
81
|
-
});
|
|
82
|
-
console.log(`โ User can edit projects: ${canEdit}`);
|
|
83
|
-
|
|
84
|
-
const canDelete = await access.check({
|
|
85
|
-
userId: 'user_123',
|
|
86
|
-
action: 'project:delete',
|
|
87
|
-
});
|
|
88
|
-
console.log(`โ User can delete projects: ${canDelete}`);
|
|
89
|
-
|
|
90
|
-
console.log('\nโฑ๏ธ Testing Rate Limiting...');
|
|
91
|
-
for (let i = 0; i < 3; i++) {
|
|
92
|
-
const result = await limiter.check({
|
|
93
|
-
userId: 'user_456',
|
|
94
|
-
ip: '192.168.1.1',
|
|
95
|
-
endpoint: '/api/search',
|
|
96
|
-
});
|
|
97
|
-
console.log(` Request ${i + 1}: ${result.allowed ? 'โ Allowed' : 'โ Blocked'} (remaining: ${result.remaining})`);
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
console.log('\n๐ Testing Security Monitoring...');
|
|
101
|
-
await monitoring.logEvent({
|
|
102
|
-
type: 'auth_failure',
|
|
103
|
-
severity: 'medium',
|
|
104
|
-
userId: 'user_789',
|
|
105
|
-
ip: '192.168.1.100',
|
|
106
|
-
resource: '/api/login',
|
|
107
|
-
action: 'login',
|
|
108
|
-
metadata: {
|
|
109
|
-
reason: 'invalid_password',
|
|
110
|
-
attemptCount: 3,
|
|
111
|
-
},
|
|
112
|
-
});
|
|
113
|
-
console.log('โ Security event logged');
|
|
114
|
-
|
|
115
|
-
await monitoring.logEvent({
|
|
116
|
-
type: 'permission_denied',
|
|
117
|
-
severity: 'low',
|
|
118
|
-
userId: 'user_789',
|
|
119
|
-
ip: '192.168.1.100',
|
|
120
|
-
resource: '/api/admin',
|
|
121
|
-
action: 'access',
|
|
122
|
-
});
|
|
123
|
-
console.log('โ Another security event logged');
|
|
124
|
-
|
|
125
|
-
const recentEvents = await monitoring.getRecentEvents(10);
|
|
126
|
-
console.log(`โ Retrieved ${recentEvents.length} recent events`);
|
|
127
|
-
|
|
128
|
-
const metrics = await monitoring.getMetrics({
|
|
129
|
-
start: Date.now() - 24 * 60 * 60 * 1000,
|
|
130
|
-
end: Date.now(),
|
|
131
|
-
});
|
|
132
|
-
console.log('โ Metrics calculated:');
|
|
133
|
-
console.log(` - Total events: ${metrics.totalEvents}`);
|
|
134
|
-
console.log(` - Events by type:`, metrics.eventsByType);
|
|
135
|
-
console.log(` - Events by severity:`, metrics.eventsBySeverity);
|
|
136
|
-
|
|
137
|
-
console.log('\nโจ All tests completed successfully!');
|
|
138
|
-
|
|
139
|
-
await secFn.destroy();
|
|
140
|
-
console.log('๐งน Cleanup complete');
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
main().catch(console.error);
|