@aifabrix/miso-client 1.0.3 → 1.2.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.
- package/README.md +49 -2
- package/dist/examples/manual-config-example.js +2 -0
- package/dist/examples/manual-config-example.js.map +1 -1
- package/dist/examples/step-5-logging.js +2 -1
- package/dist/examples/step-5-logging.js.map +1 -1
- package/dist/examples/step-7-encryption-cache.d.ts +8 -0
- package/dist/examples/step-7-encryption-cache.d.ts.map +1 -0
- package/dist/examples/step-7-encryption-cache.js +131 -0
- package/dist/examples/step-7-encryption-cache.js.map +1 -0
- package/dist/examples/usage.js +3 -3
- package/dist/examples/usage.js.map +1 -1
- package/dist/src/index.d.ts +15 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +37 -3
- package/dist/src/index.js.map +1 -1
- package/dist/src/services/auth.service.d.ts +8 -0
- package/dist/src/services/auth.service.d.ts.map +1 -1
- package/dist/src/services/auth.service.js +22 -0
- package/dist/src/services/auth.service.js.map +1 -1
- package/dist/src/services/cache.service.d.ts +58 -0
- package/dist/src/services/cache.service.d.ts.map +1 -0
- package/dist/src/services/cache.service.js +171 -0
- package/dist/src/services/cache.service.js.map +1 -0
- package/dist/src/services/encryption.service.d.ts +32 -0
- package/dist/src/services/encryption.service.d.ts.map +1 -0
- package/dist/src/services/encryption.service.js +135 -0
- package/dist/src/services/encryption.service.js.map +1 -0
- package/dist/src/services/permission.service.d.ts +5 -5
- package/dist/src/services/permission.service.d.ts.map +1 -1
- package/dist/src/services/permission.service.js +14 -27
- package/dist/src/services/permission.service.js.map +1 -1
- package/dist/src/services/role.service.d.ts +4 -4
- package/dist/src/services/role.service.d.ts.map +1 -1
- package/dist/src/services/role.service.js +11 -22
- package/dist/src/services/role.service.js.map +1 -1
- package/dist/src/types/config.types.d.ts +2 -0
- package/dist/src/types/config.types.d.ts.map +1 -1
- package/dist/src/utils/config-loader.d.ts.map +1 -1
- package/dist/src/utils/config-loader.js +8 -0
- package/dist/src/utils/config-loader.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -26,6 +26,7 @@ The **AI Fabrix Miso Client SDK** provides authentication, authorization, and lo
|
|
|
26
26
|
- API key authentication
|
|
27
27
|
- Token revocation support
|
|
28
28
|
- Secure token storage
|
|
29
|
+
- Data encryption/decryption (AES-256-GCM)
|
|
29
30
|
|
|
30
31
|
### 📊 Compliance & Audit
|
|
31
32
|
|
|
@@ -51,6 +52,7 @@ The **AI Fabrix Miso Client SDK** provides authentication, authorization, and lo
|
|
|
51
52
|
|
|
52
53
|
**Intelligent Caching**
|
|
53
54
|
- Redis-based role and permission caching
|
|
55
|
+
- Generic cache service with Redis and in-memory fallback
|
|
54
56
|
- Configurable cache TTL (default: 15 minutes)
|
|
55
57
|
- Automatic cache invalidation
|
|
56
58
|
- Fallback to controller when Redis unavailable
|
|
@@ -108,6 +110,8 @@ MISO_CONTROLLER_URL=http://localhost:3000
|
|
|
108
110
|
REDIS_HOST=localhost
|
|
109
111
|
```
|
|
110
112
|
|
|
113
|
+
→ [Environment configuration example](examples/env-config-example.ts)
|
|
114
|
+
|
|
111
115
|
### Step 3: Use It
|
|
112
116
|
|
|
113
117
|
```typescript
|
|
@@ -121,7 +125,9 @@ const isValid = await client.auth.validateToken(token);
|
|
|
121
125
|
|
|
122
126
|
**That's it!** You now have authentication, roles, and logging.
|
|
123
127
|
|
|
124
|
-
→ [Full Getting Started Guide](docs/getting-started.md)
|
|
128
|
+
→ [Full Getting Started Guide](docs/getting-started.md)
|
|
129
|
+
→ [Environment configuration example](examples/env-config-example.ts)
|
|
130
|
+
→ [Manual configuration example](examples/manual-config-example.ts)
|
|
125
131
|
|
|
126
132
|
---
|
|
127
133
|
|
|
@@ -177,7 +183,8 @@ if (token) {
|
|
|
177
183
|
|
|
178
184
|
**Where to get tokens?** Users authenticate via Keycloak, then your app receives JWTs in the `Authorization` header.
|
|
179
185
|
|
|
180
|
-
→ [Complete authentication example](examples/step-3-authentication.ts)
|
|
186
|
+
→ [Complete authentication example](examples/step-3-authentication.ts)
|
|
187
|
+
→ [Quick start example](examples/usage.ts)
|
|
181
188
|
|
|
182
189
|
---
|
|
183
190
|
|
|
@@ -281,6 +288,45 @@ await client.log.audit('access.denied', 'authorization', {
|
|
|
281
288
|
→ [Complete audit example](examples/step-6-audit.ts)
|
|
282
289
|
→ [Best Practices](docs/getting-started.md#common-patterns)
|
|
283
290
|
|
|
291
|
+
---
|
|
292
|
+
|
|
293
|
+
### Step 7: Encryption & Caching
|
|
294
|
+
|
|
295
|
+
**What happens:** Use encryption for sensitive data and generic caching for improved performance.
|
|
296
|
+
|
|
297
|
+
```typescript
|
|
298
|
+
import { MisoClient, loadConfig } from '@aifabrix/miso-client';
|
|
299
|
+
|
|
300
|
+
const client = new MisoClient(loadConfig());
|
|
301
|
+
await client.initialize();
|
|
302
|
+
|
|
303
|
+
// Encryption (requires ENCRYPTION_KEY in .env or config.encryptionKey)
|
|
304
|
+
if (client.encryption) {
|
|
305
|
+
const encrypted = client.encryption.encrypt('sensitive-data');
|
|
306
|
+
const decrypted = client.encryption.decrypt(encrypted);
|
|
307
|
+
console.log('Decrypted:', decrypted);
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
// Generic caching (automatically uses Redis if available, falls back to memory)
|
|
311
|
+
await client.cache.set('user:123', { name: 'John', age: 30 }, 600); // 10 minutes TTL
|
|
312
|
+
const user = await client.cache.get<{ name: string; age: number }>('user:123');
|
|
313
|
+
if (user) {
|
|
314
|
+
console.log('Cached user:', user);
|
|
315
|
+
}
|
|
316
|
+
```
|
|
317
|
+
|
|
318
|
+
**Configuration:**
|
|
319
|
+
|
|
320
|
+
```bash
|
|
321
|
+
# Add to .env
|
|
322
|
+
ENCRYPTION_KEY=your-32-byte-encryption-key
|
|
323
|
+
```
|
|
324
|
+
|
|
325
|
+
→ [Complete encryption & caching example](examples/step-7-encryption-cache.ts)
|
|
326
|
+
→ [API Reference](docs/api-reference.md#encryption-methods)
|
|
327
|
+
→ [Cache Methods](docs/api-reference.md#cache-methods)
|
|
328
|
+
|
|
329
|
+
|
|
284
330
|
---
|
|
285
331
|
|
|
286
332
|
## 🔧 Configuration
|
|
@@ -292,6 +338,7 @@ interface MisoClientConfig {
|
|
|
292
338
|
clientSecret: string; // Required: Client secret
|
|
293
339
|
redis?: RedisConfig; // Optional: For caching
|
|
294
340
|
logLevel?: 'debug' | 'info' | 'warn' | 'error';
|
|
341
|
+
encryptionKey?: string; // Optional: Encryption key (or use ENCRYPTION_KEY env var)
|
|
295
342
|
cache?: {
|
|
296
343
|
roleTTL?: number; // Role cache TTL (default: 900s)
|
|
297
344
|
permissionTTL?: number; // Permission cache TTL (default: 900s)
|
|
@@ -15,6 +15,8 @@ async function manualConfigExample() {
|
|
|
15
15
|
port: 6379,
|
|
16
16
|
},
|
|
17
17
|
logLevel: 'info',
|
|
18
|
+
// Optional: Encryption key (or set ENCRYPTION_KEY env var)
|
|
19
|
+
encryptionKey: 'your-encryption-key-here', // 32-byte key in hex/base64/raw string
|
|
18
20
|
});
|
|
19
21
|
try {
|
|
20
22
|
await client.initialize();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manual-config-example.js","sourceRoot":"","sources":["../../examples/manual-config-example.ts"],"names":[],"mappings":";;AAAA;;;GAGG;AACH,wCAA0C;AAE1C,KAAK,UAAU,mBAAmB;IAChC,MAAM,MAAM,GAAG,IAAI,kBAAU,CAAC;QAC5B,aAAa,EAAE,uBAAuB;QACtC,QAAQ,EAAE,iBAAiB;QAC3B,YAAY,EAAE,kBAAkB;QAChC,KAAK,EAAE;YACL,IAAI,EAAE,WAAW;YACjB,IAAI,EAAE,IAAI;SACX;QACD,QAAQ,EAAE,MAAM;
|
|
1
|
+
{"version":3,"file":"manual-config-example.js","sourceRoot":"","sources":["../../examples/manual-config-example.ts"],"names":[],"mappings":";;AAAA;;;GAGG;AACH,wCAA0C;AAE1C,KAAK,UAAU,mBAAmB;IAChC,MAAM,MAAM,GAAG,IAAI,kBAAU,CAAC;QAC5B,aAAa,EAAE,uBAAuB;QACtC,QAAQ,EAAE,iBAAiB;QAC3B,YAAY,EAAE,kBAAkB;QAChC,KAAK,EAAE;YACL,IAAI,EAAE,WAAW;YACjB,IAAI,EAAE,IAAI;SACX;QACD,QAAQ,EAAE,MAAM;QAChB,2DAA2D;QAC3D,aAAa,EAAE,0BAA0B,EAAE,uCAAuC;KACnF,CAAC,CAAC;IAEH,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,UAAU,EAAE,CAAC;QAC1B,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;QAEpC,MAAM,KAAK,GAAG,gBAAgB,CAAC;QAC/B,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAElD,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YACzC,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;QAChC,CAAC;IACH,CAAC;YAAS,CAAC;QACT,MAAM,MAAM,CAAC,UAAU,EAAE,CAAC;IAC5B,CAAC;AACH,CAAC;AAED,mBAAmB,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC"}
|
|
@@ -52,6 +52,7 @@ async function loggingExample() {
|
|
|
52
52
|
}
|
|
53
53
|
async function performOperation() {
|
|
54
54
|
// Your application logic
|
|
55
|
+
// This is a placeholder for any operation that might fail
|
|
56
|
+
throw new Error('Operation failed');
|
|
55
57
|
}
|
|
56
|
-
let someCondition = false;
|
|
57
58
|
//# sourceMappingURL=step-5-logging.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"step-5-logging.js","sourceRoot":"","sources":["../../examples/step-5-logging.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;AA0DM,wCAAc;AAxDvB,wCAAsD;AAEtD,KAAK,UAAU,cAAc;IAC3B,gDAAgD;IAChD,MAAM,MAAM,GAAG,IAAI,kBAAU,CAAC,IAAA,kBAAU,GAAE,CAAC,CAAC;IAE5C,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,UAAU,EAAE,CAAC;QAC1B,MAAM,KAAK,GAAG,qBAAqB,CAAC;QAEpC,0CAA0C;QAC1C,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAClD,IAAI,CAAC,OAAO;YAAE,OAAO;QAErB,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAEzC,kCAAkC;QAClC,MAAM,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,yBAAyB,EAAE;YAC/C,MAAM,EAAE,IAAI,EAAE,EAAE;YAChB,QAAQ,EAAE,IAAI,EAAE,QAAQ;YACxB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACpC,CAAC,CAAC;QAEH,kBAAkB;QAClB,IAAI,CAAC;YACH,iCAAiC;YACjC,MAAM,gBAAgB,EAAE,CAAC;QAC3B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,kBAAkB,EAAE;gBACzC,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;gBAC/D,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;gBACvD,MAAM,EAAE,IAAI,EAAE,EAAE;aACjB,CAAC,CAAC;QACL,CAAC;QAED,qDAAqD;QACrD,MAAM,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,yBAAyB,EAAE;YAChD,MAAM,EAAE,IAAI,EAAE,EAAE;YAChB,cAAc,EAAE,KAAK;SACtB,CAAC,CAAC;QAEH,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;IAE5C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,kBAAkB,EAAE,KAAK,CAAC,CAAC;IAC3C,CAAC;YAAS,CAAC;QACT,MAAM,MAAM,CAAC,UAAU,EAAE,CAAC;IAC5B,CAAC;AACH,CAAC;AAED,KAAK,UAAU,gBAAgB;IAC7B,yBAAyB;
|
|
1
|
+
{"version":3,"file":"step-5-logging.js","sourceRoot":"","sources":["../../examples/step-5-logging.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;AA0DM,wCAAc;AAxDvB,wCAAsD;AAEtD,KAAK,UAAU,cAAc;IAC3B,gDAAgD;IAChD,MAAM,MAAM,GAAG,IAAI,kBAAU,CAAC,IAAA,kBAAU,GAAE,CAAC,CAAC;IAE5C,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,UAAU,EAAE,CAAC;QAC1B,MAAM,KAAK,GAAG,qBAAqB,CAAC;QAEpC,0CAA0C;QAC1C,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAClD,IAAI,CAAC,OAAO;YAAE,OAAO;QAErB,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAEzC,kCAAkC;QAClC,MAAM,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,yBAAyB,EAAE;YAC/C,MAAM,EAAE,IAAI,EAAE,EAAE;YAChB,QAAQ,EAAE,IAAI,EAAE,QAAQ;YACxB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACpC,CAAC,CAAC;QAEH,kBAAkB;QAClB,IAAI,CAAC;YACH,iCAAiC;YACjC,MAAM,gBAAgB,EAAE,CAAC;QAC3B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,kBAAkB,EAAE;gBACzC,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;gBAC/D,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;gBACvD,MAAM,EAAE,IAAI,EAAE,EAAE;aACjB,CAAC,CAAC;QACL,CAAC;QAED,qDAAqD;QACrD,MAAM,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,yBAAyB,EAAE;YAChD,MAAM,EAAE,IAAI,EAAE,EAAE;YAChB,cAAc,EAAE,KAAK;SACtB,CAAC,CAAC;QAEH,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;IAE5C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,kBAAkB,EAAE,KAAK,CAAC,CAAC;IAC3C,CAAC;YAAS,CAAC;QACT,MAAM,MAAM,CAAC,UAAU,EAAE,CAAC;IAC5B,CAAC;AACH,CAAC;AAED,KAAK,UAAU,gBAAgB;IAC7B,yBAAyB;IACzB,0DAA0D;IAC1D,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;AACtC,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Step 7: Encryption & Caching
|
|
3
|
+
*
|
|
4
|
+
* Examples of encrypting sensitive data and using generic caching.
|
|
5
|
+
*/
|
|
6
|
+
declare function encryptionCacheExample(): Promise<void>;
|
|
7
|
+
export { encryptionCacheExample };
|
|
8
|
+
//# sourceMappingURL=step-7-encryption-cache.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"step-7-encryption-cache.d.ts","sourceRoot":"","sources":["../../examples/step-7-encryption-cache.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,iBAAe,sBAAsB,kBA6JpC;AAED,OAAO,EAAE,sBAAsB,EAAE,CAAC"}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Step 7: Encryption & Caching
|
|
4
|
+
*
|
|
5
|
+
* Examples of encrypting sensitive data and using generic caching.
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.encryptionCacheExample = encryptionCacheExample;
|
|
9
|
+
const index_1 = require("../src/index");
|
|
10
|
+
async function encryptionCacheExample() {
|
|
11
|
+
// Create client - loads from .env automatically
|
|
12
|
+
// Make sure ENCRYPTION_KEY is set in .env for encryption to work
|
|
13
|
+
const client = new index_1.MisoClient((0, index_1.loadConfig)());
|
|
14
|
+
try {
|
|
15
|
+
await client.initialize();
|
|
16
|
+
console.log('✅ Client initialized');
|
|
17
|
+
const token = 'your-jwt-token-here';
|
|
18
|
+
// ==================== ENCRYPTION ====================
|
|
19
|
+
// Check if encryption is available (requires ENCRYPTION_KEY in .env)
|
|
20
|
+
if (client.encryption) {
|
|
21
|
+
console.log('🔒 Encryption service is available');
|
|
22
|
+
// Encrypt sensitive data
|
|
23
|
+
const sensitiveData = JSON.stringify({
|
|
24
|
+
creditCard: '4532-1234-5678-9010',
|
|
25
|
+
ssn: '123-45-6789',
|
|
26
|
+
apiKey: 'secret-api-key-123'
|
|
27
|
+
});
|
|
28
|
+
const encrypted = client.encryption.encrypt(sensitiveData);
|
|
29
|
+
console.log('🔐 Encrypted data:', encrypted);
|
|
30
|
+
// Decrypt when needed
|
|
31
|
+
const decrypted = client.encryption.decrypt(encrypted);
|
|
32
|
+
console.log('🔓 Decrypted data:', JSON.parse(decrypted));
|
|
33
|
+
// Example: Storing encrypted user preferences
|
|
34
|
+
const userPreferences = {
|
|
35
|
+
theme: 'dark',
|
|
36
|
+
notifications: true,
|
|
37
|
+
language: 'en'
|
|
38
|
+
};
|
|
39
|
+
const encryptedPreferences = client.encryption.encrypt(JSON.stringify(userPreferences));
|
|
40
|
+
console.log('💾 Encrypted preferences ready for storage');
|
|
41
|
+
// Later, decrypt when retrieving
|
|
42
|
+
const decryptedPreferences = JSON.parse(client.encryption.decrypt(encryptedPreferences));
|
|
43
|
+
console.log('📖 Retrieved preferences:', decryptedPreferences);
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
console.log('⚠️ Encryption not available - set ENCRYPTION_KEY in .env');
|
|
47
|
+
}
|
|
48
|
+
// ==================== GENERIC CACHING ====================
|
|
49
|
+
console.log('\n📦 Generic caching examples:');
|
|
50
|
+
// Example 1: Cache expensive computation results
|
|
51
|
+
const userId = 'user-123';
|
|
52
|
+
const cacheKey = `user:${userId}:computed-data`;
|
|
53
|
+
// Check cache first
|
|
54
|
+
const cachedData = await client.cache.get(cacheKey);
|
|
55
|
+
if (cachedData) {
|
|
56
|
+
console.log('⚡ Got data from cache:', cachedData);
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
console.log('💭 Computing expensive data...');
|
|
60
|
+
// Simulate expensive computation
|
|
61
|
+
const computedData = {
|
|
62
|
+
result: Math.random() * 1000,
|
|
63
|
+
computedAt: new Date().toISOString()
|
|
64
|
+
};
|
|
65
|
+
// Cache for 10 minutes (600 seconds)
|
|
66
|
+
await client.cache.set(cacheKey, computedData, 600);
|
|
67
|
+
console.log('💾 Cached computed data');
|
|
68
|
+
}
|
|
69
|
+
async function getProduct(id) {
|
|
70
|
+
const productCacheKey = `product:${id}`;
|
|
71
|
+
// Check cache
|
|
72
|
+
const cachedProduct = await client.cache.get(productCacheKey);
|
|
73
|
+
if (cachedProduct) {
|
|
74
|
+
console.log('⚡ Product from cache:', cachedProduct);
|
|
75
|
+
return cachedProduct;
|
|
76
|
+
}
|
|
77
|
+
// Simulate database fetch
|
|
78
|
+
console.log('💭 Fetching product from database...');
|
|
79
|
+
const product = {
|
|
80
|
+
id,
|
|
81
|
+
name: `Product ${id}`,
|
|
82
|
+
price: 99.99
|
|
83
|
+
};
|
|
84
|
+
// Cache for 5 minutes (300 seconds)
|
|
85
|
+
await client.cache.set(productCacheKey, product, 300);
|
|
86
|
+
console.log('💾 Product cached');
|
|
87
|
+
return product;
|
|
88
|
+
}
|
|
89
|
+
// Use the cached product function
|
|
90
|
+
await getProduct('prod-123');
|
|
91
|
+
await getProduct('prod-123'); // Second call uses cache
|
|
92
|
+
// Example 3: Cache user session data
|
|
93
|
+
if (await client.validateToken(token)) {
|
|
94
|
+
const user = await client.getUser(token);
|
|
95
|
+
if (user) {
|
|
96
|
+
const sessionCacheKey = `session:${user.id}`;
|
|
97
|
+
const sessionData = {
|
|
98
|
+
userId: user.id,
|
|
99
|
+
username: user.username,
|
|
100
|
+
lastAccess: new Date().toISOString(),
|
|
101
|
+
preferences: {
|
|
102
|
+
theme: 'dark',
|
|
103
|
+
language: 'en'
|
|
104
|
+
}
|
|
105
|
+
};
|
|
106
|
+
// Cache session for 30 minutes (1800 seconds)
|
|
107
|
+
await client.cache.set(sessionCacheKey, sessionData, 1800);
|
|
108
|
+
console.log('💾 User session cached');
|
|
109
|
+
// Retrieve later
|
|
110
|
+
const cachedSession = await client.cache.get(sessionCacheKey);
|
|
111
|
+
if (cachedSession) {
|
|
112
|
+
console.log('📖 Retrieved session:', cachedSession);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
// Example 4: Delete from cache
|
|
117
|
+
await client.cache.delete(cacheKey);
|
|
118
|
+
console.log('🗑️ Deleted from cache');
|
|
119
|
+
// Example 5: Clear all cache (use with caution)
|
|
120
|
+
// await client.cache.clear();
|
|
121
|
+
// console.log('🧹 All cache cleared');
|
|
122
|
+
console.log('\n✅ Encryption & caching examples completed');
|
|
123
|
+
}
|
|
124
|
+
catch (error) {
|
|
125
|
+
console.error('❌ Error:', error);
|
|
126
|
+
}
|
|
127
|
+
finally {
|
|
128
|
+
await client.disconnect();
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
//# sourceMappingURL=step-7-encryption-cache.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"step-7-encryption-cache.js","sourceRoot":"","sources":["../../examples/step-7-encryption-cache.ts"],"names":[],"mappings":"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"}
|
package/dist/examples/usage.js
CHANGED
|
@@ -29,11 +29,11 @@ async function example() {
|
|
|
29
29
|
const isAdmin = await client.hasRole(token, 'admin');
|
|
30
30
|
console.log('Is admin:', isAdmin);
|
|
31
31
|
// Log some events
|
|
32
|
-
client.log.info('User accessed application', {
|
|
32
|
+
await client.log.info('User accessed application', {
|
|
33
33
|
userId: user?.id,
|
|
34
34
|
username: user?.username
|
|
35
35
|
});
|
|
36
|
-
client.log.audit('user.login', 'authentication', {
|
|
36
|
+
await client.log.audit('user.login', 'authentication', {
|
|
37
37
|
userId: user?.id,
|
|
38
38
|
ip: '192.168.1.1'
|
|
39
39
|
});
|
|
@@ -43,7 +43,7 @@ async function example() {
|
|
|
43
43
|
throw new Error('Something went wrong');
|
|
44
44
|
}
|
|
45
45
|
catch (error) {
|
|
46
|
-
client.log.error('Application error', {
|
|
46
|
+
await client.log.error('Application error', {
|
|
47
47
|
error: error instanceof Error ? error.message : 'Unknown error',
|
|
48
48
|
stack: error instanceof Error ? error.stack : undefined
|
|
49
49
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"usage.js","sourceRoot":"","sources":["../../examples/usage.ts"],"names":[],"mappings":";AAAA;;GAEG;;AAqEM,0BAAO;AAnEhB,wCAAsD;AAEtD,KAAK,UAAU,OAAO;IACpB,uDAAuD;IACvD,wEAAwE;IACxE,MAAM,MAAM,GAAG,IAAI,kBAAU,CAAC,IAAA,kBAAU,GAAE,CAAC,CAAC;IAE5C,IAAI,CAAC;QACH,wBAAwB;QACxB,MAAM,MAAM,CAAC,UAAU,EAAE,CAAC;QAC1B,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;QAE/C,sEAAsE;QACtE,MAAM,KAAK,GAAG,qBAAqB,CAAC;QAEpC,iBAAiB;QACjB,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAClD,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;QAErC,IAAI,OAAO,EAAE,CAAC;YACZ,gBAAgB;YAChB,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YACzC,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;YAE3B,iBAAiB;YACjB,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YAC3C,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;YAElC,sBAAsB;YACtB,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;YACrD,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;YAElC,kBAAkB;YAClB,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,2BAA2B,EAAE;
|
|
1
|
+
{"version":3,"file":"usage.js","sourceRoot":"","sources":["../../examples/usage.ts"],"names":[],"mappings":";AAAA;;GAEG;;AAqEM,0BAAO;AAnEhB,wCAAsD;AAEtD,KAAK,UAAU,OAAO;IACpB,uDAAuD;IACvD,wEAAwE;IACxE,MAAM,MAAM,GAAG,IAAI,kBAAU,CAAC,IAAA,kBAAU,GAAE,CAAC,CAAC;IAE5C,IAAI,CAAC;QACH,wBAAwB;QACxB,MAAM,MAAM,CAAC,UAAU,EAAE,CAAC;QAC1B,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;QAE/C,sEAAsE;QACtE,MAAM,KAAK,GAAG,qBAAqB,CAAC;QAEpC,iBAAiB;QACjB,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAClD,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;QAErC,IAAI,OAAO,EAAE,CAAC;YACZ,gBAAgB;YAChB,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YACzC,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;YAE3B,iBAAiB;YACjB,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YAC3C,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;YAElC,sBAAsB;YACtB,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;YACrD,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;YAElC,kBAAkB;YAClB,MAAM,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,2BAA2B,EAAE;gBACjD,MAAM,EAAE,IAAI,EAAE,EAAE;gBAChB,QAAQ,EAAE,IAAI,EAAE,QAAQ;aACzB,CAAC,CAAC;YAEH,MAAM,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,EAAE,gBAAgB,EAAE;gBACrD,MAAM,EAAE,IAAI,EAAE,EAAE;gBAChB,EAAE,EAAE,aAAa;aAClB,CAAC,CAAC;QACL,CAAC;QAED,wBAAwB;QACxB,IAAI,CAAC;YACH,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;QAC1C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,mBAAmB,EAAE;gBAC1C,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;gBAC/D,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;aACxD,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,iBAAiB,EAAE,KAAK,CAAC,CAAC;IAC1C,CAAC;YAAS,CAAC;QACT,UAAU;QACV,MAAM,MAAM,CAAC,UAAU,EAAE,CAAC;QAC1B,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;IACrC,CAAC;AACH,CAAC;AAED,gDAAgD;AAChD,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;IAC5B,OAAO,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AACjC,CAAC"}
|
package/dist/src/index.d.ts
CHANGED
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
* Main MisoClient SDK class
|
|
3
3
|
*/
|
|
4
4
|
import { LoggerService } from './services/logger.service';
|
|
5
|
+
import { EncryptionService } from './services/encryption.service';
|
|
6
|
+
import { CacheService } from './services/cache.service';
|
|
5
7
|
import { MisoClientConfig, UserInfo } from './types/config.types';
|
|
6
8
|
export declare class MisoClient {
|
|
7
9
|
private config;
|
|
@@ -11,6 +13,8 @@ export declare class MisoClient {
|
|
|
11
13
|
private roles;
|
|
12
14
|
private permissions;
|
|
13
15
|
private logger;
|
|
16
|
+
private encryptionService?;
|
|
17
|
+
private cacheService;
|
|
14
18
|
private initialized;
|
|
15
19
|
constructor(config: MisoClientConfig);
|
|
16
20
|
/**
|
|
@@ -112,6 +116,15 @@ export declare class MisoClient {
|
|
|
112
116
|
* Get logger service for application logging
|
|
113
117
|
*/
|
|
114
118
|
get log(): LoggerService;
|
|
119
|
+
/**
|
|
120
|
+
* Get encryption service for data encryption/decryption
|
|
121
|
+
* Returns undefined if encryption key is not configured
|
|
122
|
+
*/
|
|
123
|
+
get encryption(): EncryptionService | undefined;
|
|
124
|
+
/**
|
|
125
|
+
* Get cache service for generic caching
|
|
126
|
+
*/
|
|
127
|
+
get cache(): CacheService;
|
|
115
128
|
/**
|
|
116
129
|
* Get current configuration
|
|
117
130
|
*/
|
|
@@ -126,6 +139,8 @@ export { AuthService } from './services/auth.service';
|
|
|
126
139
|
export { RoleService } from './services/role.service';
|
|
127
140
|
export { LoggerService } from './services/logger.service';
|
|
128
141
|
export { RedisService } from './services/redis.service';
|
|
142
|
+
export { EncryptionService } from './services/encryption.service';
|
|
143
|
+
export { CacheService } from './services/cache.service';
|
|
129
144
|
export { HttpClient } from './utils/http-client';
|
|
130
145
|
export { loadConfig } from './utils/config-loader';
|
|
131
146
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/src/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/src/index.js
CHANGED
|
@@ -17,12 +17,14 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
17
17
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
18
18
|
};
|
|
19
19
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
20
|
-
exports.loadConfig = exports.HttpClient = exports.RedisService = exports.LoggerService = exports.RoleService = exports.AuthService = exports.MisoClient = void 0;
|
|
20
|
+
exports.loadConfig = exports.HttpClient = exports.CacheService = exports.EncryptionService = exports.RedisService = exports.LoggerService = exports.RoleService = exports.AuthService = exports.MisoClient = void 0;
|
|
21
21
|
const auth_service_1 = require("./services/auth.service");
|
|
22
22
|
const role_service_1 = require("./services/role.service");
|
|
23
23
|
const permission_service_1 = require("./services/permission.service");
|
|
24
24
|
const logger_service_1 = require("./services/logger.service");
|
|
25
25
|
const redis_service_1 = require("./services/redis.service");
|
|
26
|
+
const encryption_service_1 = require("./services/encryption.service");
|
|
27
|
+
const cache_service_1 = require("./services/cache.service");
|
|
26
28
|
const http_client_1 = require("./utils/http-client");
|
|
27
29
|
class MisoClient {
|
|
28
30
|
constructor(config) {
|
|
@@ -31,9 +33,22 @@ class MisoClient {
|
|
|
31
33
|
this.httpClient = new http_client_1.HttpClient(config);
|
|
32
34
|
this.redis = new redis_service_1.RedisService(config.redis);
|
|
33
35
|
this.auth = new auth_service_1.AuthService(this.httpClient, this.redis);
|
|
34
|
-
this.roles = new role_service_1.RoleService(this.httpClient, this.redis);
|
|
35
|
-
this.permissions = new permission_service_1.PermissionService(this.httpClient, this.redis);
|
|
36
36
|
this.logger = new logger_service_1.LoggerService(this.httpClient, this.redis);
|
|
37
|
+
// Initialize cache service with Redis support (used by roles and permissions)
|
|
38
|
+
this.cacheService = new cache_service_1.CacheService(this.redis);
|
|
39
|
+
// Initialize services that use cache
|
|
40
|
+
this.roles = new role_service_1.RoleService(this.httpClient, this.cacheService);
|
|
41
|
+
this.permissions = new permission_service_1.PermissionService(this.httpClient, this.cacheService);
|
|
42
|
+
// Initialize encryption service if key is provided (optional)
|
|
43
|
+
if (config.encryptionKey || process.env.ENCRYPTION_KEY) {
|
|
44
|
+
try {
|
|
45
|
+
this.encryptionService = new encryption_service_1.EncryptionService(config.encryptionKey);
|
|
46
|
+
}
|
|
47
|
+
catch (error) {
|
|
48
|
+
// Encryption service not initialized if key is missing
|
|
49
|
+
// This is okay - encryption is optional
|
|
50
|
+
}
|
|
51
|
+
}
|
|
37
52
|
}
|
|
38
53
|
/**
|
|
39
54
|
* Initialize the client (connect to Redis if configured)
|
|
@@ -199,6 +214,21 @@ class MisoClient {
|
|
|
199
214
|
get log() {
|
|
200
215
|
return this.logger;
|
|
201
216
|
}
|
|
217
|
+
// ==================== ENCRYPTION METHODS ====================
|
|
218
|
+
/**
|
|
219
|
+
* Get encryption service for data encryption/decryption
|
|
220
|
+
* Returns undefined if encryption key is not configured
|
|
221
|
+
*/
|
|
222
|
+
get encryption() {
|
|
223
|
+
return this.encryptionService;
|
|
224
|
+
}
|
|
225
|
+
// ==================== CACHE METHODS ====================
|
|
226
|
+
/**
|
|
227
|
+
* Get cache service for generic caching
|
|
228
|
+
*/
|
|
229
|
+
get cache() {
|
|
230
|
+
return this.cacheService;
|
|
231
|
+
}
|
|
202
232
|
// ==================== UTILITY METHODS ====================
|
|
203
233
|
/**
|
|
204
234
|
* Get current configuration
|
|
@@ -225,6 +255,10 @@ var logger_service_2 = require("./services/logger.service");
|
|
|
225
255
|
Object.defineProperty(exports, "LoggerService", { enumerable: true, get: function () { return logger_service_2.LoggerService; } });
|
|
226
256
|
var redis_service_2 = require("./services/redis.service");
|
|
227
257
|
Object.defineProperty(exports, "RedisService", { enumerable: true, get: function () { return redis_service_2.RedisService; } });
|
|
258
|
+
var encryption_service_2 = require("./services/encryption.service");
|
|
259
|
+
Object.defineProperty(exports, "EncryptionService", { enumerable: true, get: function () { return encryption_service_2.EncryptionService; } });
|
|
260
|
+
var cache_service_2 = require("./services/cache.service");
|
|
261
|
+
Object.defineProperty(exports, "CacheService", { enumerable: true, get: function () { return cache_service_2.CacheService; } });
|
|
228
262
|
var http_client_2 = require("./utils/http-client");
|
|
229
263
|
Object.defineProperty(exports, "HttpClient", { enumerable: true, get: function () { return http_client_2.HttpClient; } });
|
|
230
264
|
// Export utilities
|
package/dist/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;;;;;;;;;;;;;AAEH,0DAAsD;AACtD,0DAAsD;AACtD,sEAAkE;AAClE,8DAA0D;AAC1D,4DAAwD;AACxD,qDAAiD;AAGjD,MAAa,UAAU;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;;;;;;;;;;;;;AAEH,0DAAsD;AACtD,0DAAsD;AACtD,sEAAkE;AAClE,8DAA0D;AAC1D,4DAAwD;AACxD,sEAAkE;AAClE,4DAAwD;AACxD,qDAAiD;AAGjD,MAAa,UAAU;IAYrB,YAAY,MAAwB;QAF5B,gBAAW,GAAG,KAAK,CAAC;QAG1B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,UAAU,GAAG,IAAI,wBAAU,CAAC,MAAM,CAAC,CAAC;QACzC,IAAI,CAAC,KAAK,GAAG,IAAI,4BAAY,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC5C,IAAI,CAAC,IAAI,GAAG,IAAI,0BAAW,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QACzD,IAAI,CAAC,MAAM,GAAG,IAAI,8BAAa,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QAE7D,8EAA8E;QAC9E,IAAI,CAAC,YAAY,GAAG,IAAI,4BAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAEjD,qCAAqC;QACrC,IAAI,CAAC,KAAK,GAAG,IAAI,0BAAW,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;QACjE,IAAI,CAAC,WAAW,GAAG,IAAI,sCAAiB,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;QAE7E,8DAA8D;QAC9D,IAAI,MAAM,CAAC,aAAa,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,CAAC;YACvD,IAAI,CAAC;gBACH,IAAI,CAAC,iBAAiB,GAAG,IAAI,sCAAiB,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;YACvE,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,uDAAuD;gBACvD,wCAAwC;YAC1C,CAAC;QACH,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU;QACd,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,OAAO;QACT,CAAC;QAED,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;YAC3B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QAC1B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,kEAAkE;YAClE,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC,8CAA8C;QACzE,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU;QACd,MAAM,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC;QAC9B,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,aAAa;QACX,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IAED,mEAAmE;IAEnE;;;OAGG;IACH,QAAQ,CAAC,GAA4C;QACnD,MAAM,UAAU,GAAG,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC;QAC7C,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,kCAAkC;QAClC,IAAI,UAAU,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YACrC,OAAO,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QACjC,CAAC;QAED,4DAA4D;QAC5D,OAAO,UAAU,CAAC;IACpB,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,mBAAmB;QACvB,OAAO,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC;IACzC,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,WAAmB;QACvB,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IACtC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,aAAa,CAAC,KAAa;QAC/B,OAAO,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IACxC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAO,CAAC,KAAa;QACzB,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAClC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,WAAW,CAAC,KAAa;QAC7B,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;IACtC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,eAAe,CAAC,KAAa;QACjC,OAAO,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;IAC1C,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,MAAM;QACV,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;IAC5B,CAAC;IAED,kEAAkE;IAElE;;OAEG;IACH,KAAK,CAAC,QAAQ,CAAC,KAAa;QAC1B,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAO,CAAC,KAAa,EAAE,IAAY;QACvC,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IACzC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU,CAAC,KAAa,EAAE,KAAe;QAC7C,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAC7C,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,WAAW,CAAC,KAAa,EAAE,KAAe;QAC9C,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAC9C,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,YAAY,CAAC,KAAa;QAC9B,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;IACxC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,cAAc,CAAC,KAAa;QAChC,OAAO,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;IAChD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,aAAa,CAAC,KAAa,EAAE,UAAkB;QACnD,OAAO,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;IAC3D,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,gBAAgB,CAAC,KAAa,EAAE,WAAqB;QACzD,OAAO,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;IAC/D,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,iBAAiB,CAAC,KAAa,EAAE,WAAqB;QAC1D,OAAO,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;IAChE,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,kBAAkB,CAAC,KAAa;QACpC,OAAO,IAAI,CAAC,WAAW,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;IACpD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,qBAAqB,CAAC,KAAa;QACvC,OAAO,IAAI,CAAC,WAAW,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC;IACvD,CAAC;IAED,4DAA4D;IAE5D;;OAEG;IACH,IAAI,GAAG;QACL,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,+DAA+D;IAE/D;;;OAGG;IACH,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,iBAAiB,CAAC;IAChC,CAAC;IAED,0DAA0D;IAE1D;;OAEG;IACH,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;IAED,4DAA4D;IAE5D;;OAEG;IACH,SAAS;QACP,OAAO,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;IAC5B,CAAC;IAED;;OAEG;IACH,gBAAgB;QACd,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;IAClC,CAAC;CACF;AAvQD,gCAuQC;AAED,eAAe;AACf,uDAAqC;AAErC,qCAAqC;AACrC,wDAAsD;AAA7C,2GAAA,WAAW,OAAA;AACpB,wDAAsD;AAA7C,2GAAA,WAAW,OAAA;AACpB,4DAA0D;AAAjD,+GAAA,aAAa,OAAA;AACtB,0DAAwD;AAA/C,6GAAA,YAAY,OAAA;AACrB,oEAAkE;AAAzD,uHAAA,iBAAiB,OAAA;AAC1B,0DAAwD;AAA/C,6GAAA,YAAY,OAAA;AACrB,mDAAiD;AAAxC,yGAAA,UAAU,OAAA;AAEnB,mBAAmB;AACnB,uDAAmD;AAA1C,2GAAA,UAAU,OAAA"}
|
|
@@ -9,6 +9,11 @@ export declare class AuthService {
|
|
|
9
9
|
private redis;
|
|
10
10
|
private config;
|
|
11
11
|
constructor(httpClient: HttpClient, redis: RedisService);
|
|
12
|
+
/**
|
|
13
|
+
* Check if token matches configured API key for testing
|
|
14
|
+
* @private
|
|
15
|
+
*/
|
|
16
|
+
private isApiKeyToken;
|
|
12
17
|
/**
|
|
13
18
|
* Get environment token using client credentials
|
|
14
19
|
* This is called automatically by HttpClient, but can be called manually if needed
|
|
@@ -21,14 +26,17 @@ export declare class AuthService {
|
|
|
21
26
|
login(redirectUri: string): string;
|
|
22
27
|
/**
|
|
23
28
|
* Validate token with controller
|
|
29
|
+
* If API_KEY is configured and token matches, returns true without calling controller
|
|
24
30
|
*/
|
|
25
31
|
validateToken(token: string): Promise<boolean>;
|
|
26
32
|
/**
|
|
27
33
|
* Get user information from token
|
|
34
|
+
* If API_KEY is configured and token matches, returns null (by design for testing)
|
|
28
35
|
*/
|
|
29
36
|
getUser(token: string): Promise<UserInfo | null>;
|
|
30
37
|
/**
|
|
31
38
|
* Get user information from GET /api/auth/user endpoint
|
|
39
|
+
* If API_KEY is configured and token matches, returns null (by design for testing)
|
|
32
40
|
*/
|
|
33
41
|
getUserInfo(token: string): Promise<UserInfo | null>;
|
|
34
42
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.service.d.ts","sourceRoot":"","sources":["../../../src/services/auth.service.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAoB,QAAQ,EAAc,MAAM,uBAAuB,CAAC;AAE/E,qBAAa,WAAW;IACtB,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,KAAK,CAAe;IAC5B,OAAO,CAAC,MAAM,CAAmB;gBAErB,UAAU,EAAE,UAAU,EAAE,KAAK,EAAE,YAAY;IAMvD;;;OAGG;IACG,mBAAmB,IAAI,OAAO,CAAC,MAAM,CAAC;IA+B5C;;;OAGG;IACH,KAAK,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM;IAKlC
|
|
1
|
+
{"version":3,"file":"auth.service.d.ts","sourceRoot":"","sources":["../../../src/services/auth.service.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAoB,QAAQ,EAAc,MAAM,uBAAuB,CAAC;AAE/E,qBAAa,WAAW;IACtB,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,KAAK,CAAe;IAC5B,OAAO,CAAC,MAAM,CAAmB;gBAErB,UAAU,EAAE,UAAU,EAAE,KAAK,EAAE,YAAY;IAMvD;;;OAGG;IACH,OAAO,CAAC,aAAa;IAIrB;;;OAGG;IACG,mBAAmB,IAAI,OAAO,CAAC,MAAM,CAAC;IA+B5C;;;OAGG;IACH,KAAK,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM;IAKlC;;;OAGG;IACG,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAoBpD;;;OAGG;IACG,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IAwBtD;;;OAGG;IACG,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IAoB1D;;OAEG;IACG,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAY7B;;OAEG;IACG,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CAGvD"}
|
|
@@ -43,6 +43,13 @@ class AuthService {
|
|
|
43
43
|
this.redis = redis;
|
|
44
44
|
this.httpClient = httpClient;
|
|
45
45
|
}
|
|
46
|
+
/**
|
|
47
|
+
* Check if token matches configured API key for testing
|
|
48
|
+
* @private
|
|
49
|
+
*/
|
|
50
|
+
isApiKeyToken(token) {
|
|
51
|
+
return this.config.apiKey !== undefined && token === this.config.apiKey;
|
|
52
|
+
}
|
|
46
53
|
/**
|
|
47
54
|
* Get environment token using client credentials
|
|
48
55
|
* This is called automatically by HttpClient, but can be called manually if needed
|
|
@@ -81,8 +88,13 @@ class AuthService {
|
|
|
81
88
|
}
|
|
82
89
|
/**
|
|
83
90
|
* Validate token with controller
|
|
91
|
+
* If API_KEY is configured and token matches, returns true without calling controller
|
|
84
92
|
*/
|
|
85
93
|
async validateToken(token) {
|
|
94
|
+
// Check API_KEY bypass for testing
|
|
95
|
+
if (this.isApiKeyToken(token)) {
|
|
96
|
+
return true;
|
|
97
|
+
}
|
|
86
98
|
try {
|
|
87
99
|
const result = await this.httpClient.authenticatedRequest('POST', '/api/auth/validate', // Backend knows app/env from client token
|
|
88
100
|
token);
|
|
@@ -95,8 +107,13 @@ class AuthService {
|
|
|
95
107
|
}
|
|
96
108
|
/**
|
|
97
109
|
* Get user information from token
|
|
110
|
+
* If API_KEY is configured and token matches, returns null (by design for testing)
|
|
98
111
|
*/
|
|
99
112
|
async getUser(token) {
|
|
113
|
+
// Check API_KEY bypass for testing - return null by design
|
|
114
|
+
if (this.isApiKeyToken(token)) {
|
|
115
|
+
return null;
|
|
116
|
+
}
|
|
100
117
|
try {
|
|
101
118
|
const result = await this.httpClient.authenticatedRequest('POST', '/api/auth/validate', token);
|
|
102
119
|
if (result.authenticated && result.user) {
|
|
@@ -111,8 +128,13 @@ class AuthService {
|
|
|
111
128
|
}
|
|
112
129
|
/**
|
|
113
130
|
* Get user information from GET /api/auth/user endpoint
|
|
131
|
+
* If API_KEY is configured and token matches, returns null (by design for testing)
|
|
114
132
|
*/
|
|
115
133
|
async getUserInfo(token) {
|
|
134
|
+
// Check API_KEY bypass for testing - return null by design
|
|
135
|
+
if (this.isApiKeyToken(token)) {
|
|
136
|
+
return null;
|
|
137
|
+
}
|
|
116
138
|
try {
|
|
117
139
|
const user = await this.httpClient.authenticatedRequest('GET', '/api/auth/user', token);
|
|
118
140
|
return user;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.service.js","sourceRoot":"","sources":["../../../src/services/auth.service.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAMH,MAAa,WAAW;IAKtB,YAAY,UAAsB,EAAE,KAAmB;QACrD,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;QAChC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC/B,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,mBAAmB;QACvB,IAAI,CAAC;YACH,gEAAgE;YAChE,MAAM,KAAK,GAAG,CAAC,wDAAa,OAAO,GAAC,CAAC,CAAC,OAAO,CAAC;YAC9C,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC;gBAC7B,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,aAAa;gBAClC,OAAO,EAAE,KAAK;gBACd,OAAO,EAAE;oBACP,cAAc,EAAE,kBAAkB;oBAClC,aAAa,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ;oBACnC,iBAAiB,EAAE,IAAI,CAAC,MAAM,CAAC,YAAY;iBAC5C;aACF,CAAC,CAAC;YAEH,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,IAAI,CACnC,iBAAiB,CAClB,CAAC;YAEF,IAAI,QAAQ,CAAC,IAAI,CAAC,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;gBACjD,OAAO,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;YAC7B,CAAC;YAED,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;QACvE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CACb,mCAAmC;gBACjC,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC,CAC7D,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,WAAmB;QACvB,qEAAqE;QACrE,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,4BAA4B,kBAAkB,CAAC,WAAW,CAAC,EAAE,CAAC;IACnG,CAAC;IAED
|
|
1
|
+
{"version":3,"file":"auth.service.js","sourceRoot":"","sources":["../../../src/services/auth.service.ts"],"names":[],"mappings":"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"}
|