@secfn/core 0.0.1 โ†’ 0.0.2

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 (100) hide show
  1. package/README.md +30 -322
  2. package/dist/encryption.d.ts +8 -0
  3. package/dist/encryption.d.ts.map +1 -0
  4. package/dist/encryption.js +76 -0
  5. package/dist/encryption.js.map +1 -0
  6. package/dist/errors.d.ts +24 -0
  7. package/dist/errors.d.ts.map +1 -0
  8. package/dist/errors.js +47 -0
  9. package/dist/errors.js.map +1 -0
  10. package/dist/id.d.ts +3 -0
  11. package/dist/id.d.ts.map +1 -0
  12. package/dist/id.js +11 -0
  13. package/dist/id.js.map +1 -0
  14. package/dist/index.d.ts +9 -11
  15. package/dist/index.d.ts.map +1 -1
  16. package/dist/index.js +9 -11
  17. package/dist/index.js.map +1 -1
  18. package/dist/scanner/reporters.d.ts +14 -0
  19. package/dist/scanner/reporters.d.ts.map +1 -0
  20. package/dist/scanner/reporters.js +85 -0
  21. package/dist/scanner/reporters.js.map +1 -0
  22. package/dist/scanner/rules.d.ts +24 -0
  23. package/dist/scanner/rules.d.ts.map +1 -0
  24. package/dist/scanner/rules.js +141 -0
  25. package/dist/scanner/rules.js.map +1 -0
  26. package/dist/scanner/scanner.d.ts +25 -0
  27. package/dist/scanner/scanner.d.ts.map +1 -0
  28. package/dist/scanner/scanner.js +73 -0
  29. package/dist/scanner/scanner.js.map +1 -0
  30. package/dist/scanner/utils.d.ts +15 -0
  31. package/dist/scanner/utils.d.ts.map +1 -0
  32. package/dist/scanner/utils.js +40 -0
  33. package/dist/scanner/utils.js.map +1 -0
  34. package/dist/schema.d.ts +9 -0
  35. package/dist/schema.d.ts.map +1 -0
  36. package/dist/schema.js +246 -0
  37. package/dist/schema.js.map +1 -0
  38. package/dist/types.d.ts +258 -0
  39. package/dist/types.d.ts.map +1 -0
  40. package/dist/types.js +2 -0
  41. package/dist/types.js.map +1 -0
  42. package/package.json +29 -26
  43. package/dist/access-control/rbac.d.ts +0 -48
  44. package/dist/access-control/rbac.d.ts.map +0 -1
  45. package/dist/access-control/rbac.js +0 -203
  46. package/dist/access-control/rbac.js.map +0 -1
  47. package/dist/core/secfn.d.ts +0 -28
  48. package/dist/core/secfn.d.ts.map +0 -1
  49. package/dist/core/secfn.js +0 -73
  50. package/dist/core/secfn.js.map +0 -1
  51. package/dist/monitoring/security-monitor.d.ts +0 -46
  52. package/dist/monitoring/security-monitor.d.ts.map +0 -1
  53. package/dist/monitoring/security-monitor.js +0 -172
  54. package/dist/monitoring/security-monitor.js.map +0 -1
  55. package/dist/rate-limiting/rate-limiter.d.ts +0 -31
  56. package/dist/rate-limiting/rate-limiter.d.ts.map +0 -1
  57. package/dist/rate-limiting/rate-limiter.js +0 -140
  58. package/dist/rate-limiting/rate-limiter.js.map +0 -1
  59. package/dist/scanning/patterns.d.ts +0 -3
  60. package/dist/scanning/patterns.d.ts.map +0 -1
  61. package/dist/scanning/patterns.js +0 -139
  62. package/dist/scanning/patterns.js.map +0 -1
  63. package/dist/scanning/scanner.d.ts +0 -36
  64. package/dist/scanning/scanner.d.ts.map +0 -1
  65. package/dist/scanning/scanner.js +0 -152
  66. package/dist/scanning/scanner.js.map +0 -1
  67. package/dist/secrets/encryption.d.ts +0 -17
  68. package/dist/secrets/encryption.d.ts.map +0 -1
  69. package/dist/secrets/encryption.js +0 -47
  70. package/dist/secrets/encryption.js.map +0 -1
  71. package/dist/secrets/vault.d.ts +0 -43
  72. package/dist/secrets/vault.d.ts.map +0 -1
  73. package/dist/secrets/vault.js +0 -126
  74. package/dist/secrets/vault.js.map +0 -1
  75. package/dist/storage/indexeddb-storage.d.ts +0 -37
  76. package/dist/storage/indexeddb-storage.d.ts.map +0 -1
  77. package/dist/storage/indexeddb-storage.js +0 -284
  78. package/dist/storage/indexeddb-storage.js.map +0 -1
  79. package/dist/types/index.d.ts +0 -189
  80. package/dist/types/index.d.ts.map +0 -1
  81. package/dist/types/index.js +0 -2
  82. package/dist/types/index.js.map +0 -1
  83. package/dist/utils/helpers.d.ts +0 -8
  84. package/dist/utils/helpers.d.ts.map +0 -1
  85. package/dist/utils/helpers.js +0 -73
  86. package/dist/utils/helpers.js.map +0 -1
  87. package/examples/basic-usage.ts +0 -143
  88. package/src/access-control/rbac.ts +0 -271
  89. package/src/core/secfn.ts +0 -90
  90. package/src/index.ts +0 -27
  91. package/src/monitoring/security-monitor.ts +0 -245
  92. package/src/rate-limiting/rate-limiter.ts +0 -181
  93. package/src/scanning/patterns.ts +0 -140
  94. package/src/scanning/scanner.ts +0 -199
  95. package/src/secrets/encryption.ts +0 -74
  96. package/src/secrets/vault.ts +0 -187
  97. package/src/storage/indexeddb-storage.ts +0 -355
  98. package/src/types/index.ts +0 -213
  99. package/src/utils/helpers.ts +0 -84
  100. package/tsconfig.json +0 -26
@@ -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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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":""}
@@ -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"}
@@ -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":"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"}
@@ -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);