@aifabrix/miso-client 1.0.2 → 1.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.
Files changed (51) hide show
  1. package/README.md +107 -97
  2. package/dist/examples/env-config-example.d.ts +2 -0
  3. package/dist/examples/env-config-example.d.ts.map +1 -0
  4. package/dist/examples/env-config-example.js +31 -0
  5. package/dist/examples/env-config-example.js.map +1 -0
  6. package/dist/examples/manual-config-example.d.ts +2 -0
  7. package/dist/examples/manual-config-example.d.ts.map +1 -0
  8. package/dist/examples/manual-config-example.js +34 -0
  9. package/dist/examples/manual-config-example.js.map +1 -0
  10. package/dist/examples/step-3-authentication.d.ts.map +1 -1
  11. package/dist/examples/step-3-authentication.js +4 -8
  12. package/dist/examples/step-3-authentication.js.map +1 -1
  13. package/dist/examples/step-4-rbac.d.ts.map +1 -1
  14. package/dist/examples/step-4-rbac.js +3 -11
  15. package/dist/examples/step-4-rbac.js.map +1 -1
  16. package/dist/examples/step-5-logging.d.ts.map +1 -1
  17. package/dist/examples/step-5-logging.js +2 -11
  18. package/dist/examples/step-5-logging.js.map +1 -1
  19. package/dist/examples/step-6-audit.d.ts.map +1 -1
  20. package/dist/examples/step-6-audit.js +3 -17
  21. package/dist/examples/step-6-audit.js.map +1 -1
  22. package/dist/src/index.d.ts +19 -0
  23. package/dist/src/index.d.ts.map +1 -1
  24. package/dist/src/index.js +37 -6
  25. package/dist/src/index.js.map +1 -1
  26. package/dist/src/services/auth.service.d.ts +12 -2
  27. package/dist/src/services/auth.service.d.ts.map +1 -1
  28. package/dist/src/services/auth.service.js +84 -17
  29. package/dist/src/services/auth.service.js.map +1 -1
  30. package/dist/src/services/logger.service.d.ts +2 -2
  31. package/dist/src/services/logger.service.d.ts.map +1 -1
  32. package/dist/src/services/logger.service.js +18 -15
  33. package/dist/src/services/logger.service.js.map +1 -1
  34. package/dist/src/services/permission.service.d.ts +7 -2
  35. package/dist/src/services/permission.service.d.ts.map +1 -1
  36. package/dist/src/services/permission.service.js +49 -23
  37. package/dist/src/services/permission.service.js.map +1 -1
  38. package/dist/src/services/role.service.d.ts +7 -2
  39. package/dist/src/services/role.service.d.ts.map +1 -1
  40. package/dist/src/services/role.service.js +47 -21
  41. package/dist/src/services/role.service.js.map +1 -1
  42. package/dist/src/types/config.types.d.ts +8 -4
  43. package/dist/src/types/config.types.d.ts.map +1 -1
  44. package/dist/src/utils/config-loader.d.ts.map +1 -1
  45. package/dist/src/utils/config-loader.js +11 -6
  46. package/dist/src/utils/config-loader.js.map +1 -1
  47. package/dist/src/utils/http-client.d.ts +16 -2
  48. package/dist/src/utils/http-client.d.ts.map +1 -1
  49. package/dist/src/utils/http-client.js +90 -9
  50. package/dist/src/utils/http-client.js.map +1 -1
  51. package/package.json +2 -1
@@ -1,16 +1,21 @@
1
1
  /**
2
2
  * Role service for user authorization with Redis caching
3
3
  */
4
+ import { HttpClient } from '../utils/http-client';
4
5
  import { RedisService } from './redis.service';
5
- import { MisoClientConfig } from '../types/config.types';
6
6
  export declare class RoleService {
7
7
  private httpClient;
8
8
  private redis;
9
9
  private config;
10
10
  private roleTTL;
11
- constructor(config: MisoClientConfig, redis: RedisService);
11
+ constructor(httpClient: HttpClient, redis: RedisService);
12
+ /**
13
+ * Extract userId from JWT token without making API call
14
+ */
15
+ private extractUserIdFromToken;
12
16
  /**
13
17
  * Get user roles with Redis caching
18
+ * Optimized to extract userId from token first to check cache before API call
14
19
  */
15
20
  getRoles(token: string): Promise<string[]>;
16
21
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"role.service.d.ts","sourceRoot":"","sources":["../../../src/services/role.service.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAc,MAAM,uBAAuB,CAAC;AAErE,qBAAa,WAAW;IACtB,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,KAAK,CAAe;IAC5B,OAAO,CAAC,MAAM,CAAmB;IACjC,OAAO,CAAC,OAAO,CAAS;gBAEZ,MAAM,EAAE,gBAAgB,EAAE,KAAK,EAAE,YAAY;IAOzD;;OAEG;IACG,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAwDhD;;OAEG;IACG,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAK5D;;OAEG;IACG,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IAKlE;;OAEG;IACG,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IAKnE;;OAEG;IACG,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;CAyCrD"}
1
+ {"version":3,"file":"role.service.d.ts","sourceRoot":"","sources":["../../../src/services/role.service.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAI/C,qBAAa,WAAW;IACtB,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,KAAK,CAAe;IAC5B,OAAO,CAAC,MAAM,CAAmB;IACjC,OAAO,CAAC,OAAO,CAAS;gBAEZ,UAAU,EAAE,UAAU,EAAE,KAAK,EAAE,YAAY;IAOvD;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAY9B;;;OAGG;IACG,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IA6DhD;;OAEG;IACG,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAK5D;;OAEG;IACG,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IAKlE;;OAEG;IACG,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IAKnE;;OAEG;IACG,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;CAyCrD"}
@@ -2,30 +2,45 @@
2
2
  /**
3
3
  * Role service for user authorization with Redis caching
4
4
  */
5
+ var __importDefault = (this && this.__importDefault) || function (mod) {
6
+ return (mod && mod.__esModule) ? mod : { "default": mod };
7
+ };
5
8
  Object.defineProperty(exports, "__esModule", { value: true });
6
9
  exports.RoleService = void 0;
7
- const http_client_1 = require("../utils/http-client");
10
+ const jsonwebtoken_1 = __importDefault(require("jsonwebtoken"));
8
11
  class RoleService {
9
- constructor(config, redis) {
10
- this.config = config;
12
+ constructor(httpClient, redis) {
13
+ this.config = httpClient.config;
11
14
  this.redis = redis;
12
- this.httpClient = new http_client_1.HttpClient(config);
13
- this.roleTTL = config.cache?.roleTTL || 900; // 15 minutes default
15
+ this.httpClient = httpClient;
16
+ this.roleTTL = this.config.cache?.roleTTL || 900; // 15 minutes default
17
+ }
18
+ /**
19
+ * Extract userId from JWT token without making API call
20
+ */
21
+ extractUserIdFromToken(token) {
22
+ try {
23
+ const decoded = jsonwebtoken_1.default.decode(token);
24
+ if (!decoded)
25
+ return null;
26
+ // Try common JWT claim fields for user ID
27
+ return (decoded.sub || decoded.userId || decoded.user_id || decoded.id);
28
+ }
29
+ catch (error) {
30
+ return null;
31
+ }
14
32
  }
15
33
  /**
16
34
  * Get user roles with Redis caching
35
+ * Optimized to extract userId from token first to check cache before API call
17
36
  */
18
37
  async getRoles(token) {
19
38
  try {
20
- // First get user info to extract userId
21
- const userInfo = await this.httpClient.authenticatedRequest('POST', '/auth/validate', token);
22
- if (!userInfo.user?.id) {
23
- return [];
24
- }
25
- const userId = userInfo.user.id;
26
- const cacheKey = `roles:${userId}:${this.config.environment}:${this.config.applicationKey}`;
27
- // Check Redis cache first
28
- if (this.redis.isConnected()) {
39
+ // Extract userId from token to check cache first (avoids API call on cache hit)
40
+ let userId = this.extractUserIdFromToken(token);
41
+ const cacheKey = userId ? `roles:${userId}` : null;
42
+ // Check Redis cache first if we have userId
43
+ if (cacheKey && this.redis.isConnected()) {
29
44
  const cachedRoles = await this.redis.get(cacheKey);
30
45
  if (cachedRoles) {
31
46
  try {
@@ -38,12 +53,23 @@ class RoleService {
38
53
  }
39
54
  }
40
55
  }
56
+ // Cache miss or no userId in token - fetch from controller
57
+ // If we don't have userId, get it from validate endpoint
58
+ if (!userId) {
59
+ const userInfo = await this.httpClient.authenticatedRequest('POST', '/api/auth/validate', token);
60
+ userId = userInfo.user?.id || null;
61
+ if (!userId) {
62
+ return [];
63
+ }
64
+ }
41
65
  // Cache miss - fetch from controller
42
- const roleResult = await this.httpClient.authenticatedRequest('GET', '/auth/roles', token);
66
+ const roleResult = await this.httpClient.authenticatedRequest('GET', '/api/auth/roles', // Backend knows app/env from client token
67
+ token);
43
68
  const roles = roleResult.roles || [];
44
- // Cache the result in Redis
69
+ // Cache the result in Redis (use userId-based key)
70
+ const finalCacheKey = `roles:${userId}`;
45
71
  if (this.redis.isConnected()) {
46
- await this.redis.set(cacheKey, JSON.stringify({ roles, timestamp: Date.now() }), this.roleTTL);
72
+ await this.redis.set(finalCacheKey, JSON.stringify({ roles, timestamp: Date.now() }), this.roleTTL);
47
73
  }
48
74
  return roles;
49
75
  }
@@ -80,14 +106,14 @@ class RoleService {
80
106
  async refreshRoles(token) {
81
107
  try {
82
108
  // Get user info to extract userId
83
- const userInfo = await this.httpClient.authenticatedRequest('POST', '/auth/validate', token);
109
+ const userInfo = await this.httpClient.authenticatedRequest('POST', '/api/auth/validate', token);
84
110
  if (!userInfo.user?.id) {
85
111
  return [];
86
112
  }
87
113
  const userId = userInfo.user.id;
88
- const cacheKey = `roles:${userId}:${this.config.environment}:${this.config.applicationKey}`;
89
- // Fetch fresh roles from controller
90
- const roleResult = await this.httpClient.authenticatedRequest('GET', '/auth/roles', token);
114
+ const cacheKey = `roles:${userId}`;
115
+ // Fetch fresh roles from controller using refresh endpoint
116
+ const roleResult = await this.httpClient.authenticatedRequest('GET', '/api/auth/roles/refresh', token);
91
117
  const roles = roleResult.roles || [];
92
118
  // Update cache with fresh data
93
119
  if (this.redis.isConnected()) {
@@ -1 +1 @@
1
- {"version":3,"file":"role.service.js","sourceRoot":"","sources":["../../../src/services/role.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"role.service.js","sourceRoot":"","sources":["../../../src/services/role.service.ts"],"names":[],"mappings":"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"}
@@ -10,10 +10,8 @@ export interface RedisConfig {
10
10
  }
11
11
  export interface MisoClientConfig {
12
12
  controllerUrl: string;
13
- environment: 'dev' | 'tst' | 'pro';
14
- applicationKey: string;
15
- applicationId: string;
16
- apiKey?: string;
13
+ clientId: string;
14
+ clientSecret: string;
17
15
  redis?: RedisConfig;
18
16
  logLevel?: 'debug' | 'info' | 'warn' | 'error';
19
17
  cache?: {
@@ -63,4 +61,10 @@ export interface PermissionResult {
63
61
  environment: string;
64
62
  application: string;
65
63
  }
64
+ export interface ClientTokenResponse {
65
+ success: boolean;
66
+ token: string;
67
+ expiresIn: number;
68
+ expiresAt: string;
69
+ }
66
70
  //# sourceMappingURL=config.types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.types.d.ts","sourceRoot":"","sources":["../../../src/types/config.types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC;IACnC,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;IAC/C,KAAK,CAAC,EAAE;QACN,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,aAAa,CAAC,EAAE,MAAM,CAAC;KACxB,CAAC;CACH;AAED,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,UAAU;IACzB,aAAa,EAAE,OAAO,CAAC;IACvB,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,QAAQ;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,OAAO,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,CAAC;IAC5C,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAGlC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;CACrB"}
1
+ {"version":3,"file":"config.types.d.ts","sourceRoot":"","sources":["../../../src/types/config.types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAE/B,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IAGrB,KAAK,CAAC,EAAE,WAAW,CAAC;IAGpB,QAAQ,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;IAG/C,KAAK,CAAC,EAAE;QACN,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,aAAa,CAAC,EAAE,MAAM,CAAC;KACxB,CAAC;CACH;AAED,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,UAAU;IACzB,aAAa,EAAE,OAAO,CAAC;IACvB,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,QAAQ;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,OAAO,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,CAAC;IAC5C,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAGlC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB"}
@@ -1 +1 @@
1
- {"version":3,"file":"config-loader.d.ts","sourceRoot":"","sources":["../../../src/utils/config-loader.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,eAAe,CAAC;AACvB,OAAO,EAAE,gBAAgB,EAAe,MAAM,uBAAuB,CAAC;AAEtE;;GAEG;AACH,wBAAgB,UAAU,IAAI,gBAAgB,CA+B7C"}
1
+ {"version":3,"file":"config-loader.d.ts","sourceRoot":"","sources":["../../../src/utils/config-loader.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,eAAe,CAAC;AACvB,OAAO,EAAE,gBAAgB,EAAe,MAAM,uBAAuB,CAAC;AAEtE;;GAEG;AACH,wBAAgB,UAAU,IAAI,gBAAgB,CAqC7C"}
@@ -11,13 +11,18 @@ require("dotenv/config");
11
11
  */
12
12
  function loadConfig() {
13
13
  const config = {
14
- controllerUrl: process.env.CONTROLLER_URL || 'https://controller.aifabrix.ai',
15
- environment: process.env.ENVIRONMENT || 'dev',
16
- applicationKey: process.env.APPLICATION_KEY || 'example-app',
17
- applicationId: process.env.APPLICATION_ID || '',
18
- apiKey: process.env.API_KEY,
19
- logLevel: process.env.LOG_LEVEL || 'debug',
14
+ controllerUrl: process.env.MISO_CONTROLLER_URL || 'https://controller.aifabrix.ai',
15
+ clientId: process.env.MISO_CLIENTID || process.env.MISO_CLIENT_ID || '',
16
+ clientSecret: process.env.MISO_CLIENTSECRET || process.env.MISO_CLIENT_SECRET || '',
17
+ logLevel: process.env.MISO_LOG_LEVEL || 'debug',
20
18
  };
19
+ // Validate required fields
20
+ if (!config.clientId) {
21
+ throw new Error('MISO_CLIENTID environment variable is required');
22
+ }
23
+ if (!config.clientSecret) {
24
+ throw new Error('MISO_CLIENTSECRET environment variable is required');
25
+ }
21
26
  // Optional Redis configuration
22
27
  const redisHost = process.env.REDIS_HOST;
23
28
  if (redisHost) {
@@ -1 +1 @@
1
- {"version":3,"file":"config-loader.js","sourceRoot":"","sources":["../../../src/utils/config-loader.ts"],"names":[],"mappings":";AAAA;;;GAGG;;AAQH,gCA+BC;AArCD,yBAAuB;AAGvB;;GAEG;AACH,SAAgB,UAAU;IACxB,MAAM,MAAM,GAAqB;QAC/B,aAAa,EAAE,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,gCAAgC;QAC7E,WAAW,EAAG,OAAO,CAAC,GAAG,CAAC,WAAqC,IAAI,KAAK;QACxE,cAAc,EAAE,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,aAAa;QAC5D,aAAa,EAAE,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,EAAE;QAC/C,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,OAAO;QAC3B,QAAQ,EAAG,OAAO,CAAC,GAAG,CAAC,SAAiD,IAAI,OAAO;KACpF,CAAC;IAEF,+BAA+B;IAC/B,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC;IACzC,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,WAAW,GAAgB;YAC/B,IAAI,EAAE,SAAS;YACf,IAAI,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,MAAM,CAAC;YAChD,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,cAAc;SACrC,CAAC;QAEF,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;YACzB,WAAW,CAAC,EAAE,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAClD,CAAC;QAED,IAAI,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;YACjC,WAAW,CAAC,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC;QACvD,CAAC;QAED,MAAM,CAAC,KAAK,GAAG,WAAW,CAAC;IAC7B,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
1
+ {"version":3,"file":"config-loader.js","sourceRoot":"","sources":["../../../src/utils/config-loader.ts"],"names":[],"mappings":";AAAA;;;GAGG;;AAQH,gCAqCC;AA3CD,yBAAuB;AAGvB;;GAEG;AACH,SAAgB,UAAU;IACxB,MAAM,MAAM,GAAqB;QAC/B,aAAa,EAAE,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,gCAAgC;QAClF,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,EAAE;QACvE,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,EAAE;QACnF,QAAQ,EAAG,OAAO,CAAC,GAAG,CAAC,cAAsD,IAAI,OAAO;KACzF,CAAC;IAEF,2BAA2B;IAC3B,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;IACpE,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;IACxE,CAAC;IAED,+BAA+B;IAC/B,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC;IACzC,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,WAAW,GAAgB;YAC/B,IAAI,EAAE,SAAS;YACf,IAAI,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,MAAM,CAAC;YAChD,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,cAAc;SACrC,CAAC;QAEF,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;YACzB,WAAW,CAAC,EAAE,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAClD,CAAC;QAED,IAAI,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;YACjC,WAAW,CAAC,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC;QACvD,CAAC;QAED,MAAM,CAAC,KAAK,GAAG,WAAW,CAAC;IAC7B,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -5,12 +5,26 @@ import { AxiosRequestConfig } from 'axios';
5
5
  import { MisoClientConfig } from '../types/config.types';
6
6
  export declare class HttpClient {
7
7
  private axios;
8
- private config;
8
+ readonly config: MisoClientConfig;
9
+ private clientToken;
10
+ private tokenExpiresAt;
11
+ private tokenRefreshPromise;
9
12
  constructor(config: MisoClientConfig);
13
+ /**
14
+ * Get client token, fetching if needed
15
+ * Proactively refreshes if token will expire within 60 seconds
16
+ */
17
+ private getClientToken;
18
+ /**
19
+ * Fetch client token from controller
20
+ */
21
+ private fetchClientToken;
10
22
  get<T>(url: string, config?: AxiosRequestConfig): Promise<T>;
11
23
  post<T>(url: string, data?: unknown, config?: AxiosRequestConfig): Promise<T>;
12
24
  put<T>(url: string, data?: unknown, config?: AxiosRequestConfig): Promise<T>;
13
25
  delete<T>(url: string, config?: AxiosRequestConfig): Promise<T>;
14
- authenticatedRequest<T>(method: 'GET' | 'POST' | 'PUT' | 'DELETE', url: string, token: string, data?: unknown, config?: AxiosRequestConfig): Promise<T>;
26
+ request<T>(method: 'GET' | 'POST' | 'PUT' | 'DELETE', url: string, data?: unknown, config?: AxiosRequestConfig): Promise<T>;
27
+ authenticatedRequest<T>(method: 'GET' | 'POST' | 'PUT' | 'DELETE', url: string, token: string, // User authentication token (sent as Bearer token)
28
+ data?: unknown, config?: AxiosRequestConfig): Promise<T>;
15
29
  }
16
30
  //# sourceMappingURL=http-client.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"http-client.d.ts","sourceRoot":"","sources":["../../../src/utils/http-client.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAc,EAEZ,kBAAkB,EAInB,MAAM,OAAO,CAAC;AACf,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEzD,qBAAa,UAAU;IACrB,OAAO,CAAC,KAAK,CAAgB;IAC7B,OAAO,CAAC,MAAM,CAAmB;gBAErB,MAAM,EAAE,gBAAgB;IAqC9B,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,CAAC,CAAC;IAK5D,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,CAAC,CAAC;IAK7E,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,CAAC,CAAC;IAK5E,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,CAAC,CAAC;IAM/D,oBAAoB,CAAC,CAAC,EAC1B,MAAM,EAAE,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,EACzC,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,EACb,IAAI,CAAC,EAAE,OAAO,EACd,MAAM,CAAC,EAAE,kBAAkB,GAC1B,OAAO,CAAC,CAAC,CAAC;CAsBd"}
1
+ {"version":3,"file":"http-client.d.ts","sourceRoot":"","sources":["../../../src/utils/http-client.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAc,EAEZ,kBAAkB,EAInB,MAAM,OAAO,CAAC;AACf,OAAO,EAAE,gBAAgB,EAAuB,MAAM,uBAAuB,CAAC;AAE9E,qBAAa,UAAU;IACrB,OAAO,CAAC,KAAK,CAAgB;IAC7B,SAAgB,MAAM,EAAE,gBAAgB,CAAC;IACzC,OAAO,CAAC,WAAW,CAAuB;IAC1C,OAAO,CAAC,cAAc,CAAqB;IAC3C,OAAO,CAAC,mBAAmB,CAAgC;gBAE/C,MAAM,EAAE,gBAAgB;IA2CpC;;;OAGG;YACW,cAAc;IAuB5B;;OAEG;YACW,gBAAgB;IA+BxB,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,CAAC,CAAC;IAK5D,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,CAAC,CAAC;IAK7E,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,CAAC,CAAC;IAK5E,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,CAAC,CAAC;IAM/D,OAAO,CAAC,CAAC,EACb,MAAM,EAAE,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,EACzC,GAAG,EAAE,MAAM,EACX,IAAI,CAAC,EAAE,OAAO,EACd,MAAM,CAAC,EAAE,kBAAkB,GAC1B,OAAO,CAAC,CAAC,CAAC;IAmBP,oBAAoB,CAAC,CAAC,EAC1B,MAAM,EAAE,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,EACzC,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,EAAE,mDAAmD;IAClE,IAAI,CAAC,EAAE,OAAO,EACd,MAAM,CAAC,EAAE,kBAAkB,GAC1B,OAAO,CAAC,CAAC,CAAC;CAwBd"}
@@ -10,21 +10,25 @@ exports.HttpClient = void 0;
10
10
  const axios_1 = __importDefault(require("axios"));
11
11
  class HttpClient {
12
12
  constructor(config) {
13
+ this.clientToken = null;
14
+ this.tokenExpiresAt = null;
15
+ this.tokenRefreshPromise = null;
13
16
  this.config = config;
14
17
  this.axios = axios_1.default.create({
15
18
  baseURL: config.controllerUrl,
16
19
  timeout: 30000,
17
20
  headers: {
18
- 'Content-Type': 'application/json',
19
- 'X-Environment': config.environment,
20
- 'X-Application': config.applicationKey
21
+ 'Content-Type': 'application/json'
21
22
  }
22
23
  });
23
- // Add request interceptor for automatic headers
24
- this.axios.interceptors.request.use((config) => {
24
+ // Interceptor adds client token (or fetches it if needed)
25
+ this.axios.interceptors.request.use(async (config) => {
25
26
  config.headers = config.headers || {};
26
- config.headers['X-Environment'] = this.config.environment;
27
- config.headers['X-Application'] = this.config.applicationKey;
27
+ // Get client token (fetch if needed)
28
+ const token = await this.getClientToken();
29
+ if (token) {
30
+ config.headers['x-client-token'] = token;
31
+ }
28
32
  return config;
29
33
  }, (error) => Promise.reject(error));
30
34
  // Add response interceptor for error handling
@@ -32,10 +36,66 @@ class HttpClient {
32
36
  if (error.response?.status === 401) {
33
37
  // Enhance error with authentication context
34
38
  error.message = 'Authentication failed - token may be invalid';
39
+ // Clear token on 401 to force refresh
40
+ this.clientToken = null;
41
+ this.tokenExpiresAt = null;
35
42
  }
36
43
  return Promise.reject(error);
37
44
  });
38
45
  }
46
+ /**
47
+ * Get client token, fetching if needed
48
+ * Proactively refreshes if token will expire within 60 seconds
49
+ */
50
+ async getClientToken() {
51
+ const now = new Date();
52
+ // If token exists and not expired (with 60s buffer for proactive refresh), return it
53
+ if (this.clientToken && this.tokenExpiresAt && this.tokenExpiresAt > new Date(now.getTime() + 60000)) {
54
+ return this.clientToken;
55
+ }
56
+ // If refresh is already in progress, wait for it
57
+ if (this.tokenRefreshPromise) {
58
+ return this.tokenRefreshPromise;
59
+ }
60
+ // Fetch new token (either expired or about to expire soon)
61
+ this.tokenRefreshPromise = this.fetchClientToken();
62
+ try {
63
+ const token = await this.tokenRefreshPromise;
64
+ return token;
65
+ }
66
+ finally {
67
+ this.tokenRefreshPromise = null;
68
+ }
69
+ }
70
+ /**
71
+ * Fetch client token from controller
72
+ */
73
+ async fetchClientToken() {
74
+ try {
75
+ // Create a temporary axios instance without interceptors to avoid recursion
76
+ const tempAxios = axios_1.default.create({
77
+ baseURL: this.config.controllerUrl,
78
+ timeout: 30000,
79
+ headers: {
80
+ 'Content-Type': 'application/json',
81
+ 'X-Client-Id': this.config.clientId,
82
+ 'X-Client-Secret': this.config.clientSecret
83
+ }
84
+ });
85
+ const response = await tempAxios.post('/api/auth/token');
86
+ if (response.data.success && response.data.token) {
87
+ this.clientToken = response.data.token;
88
+ // Set expiration with 30 second buffer before actual expiration
89
+ const expiresIn = response.data.expiresIn - 30;
90
+ this.tokenExpiresAt = new Date(Date.now() + expiresIn * 1000);
91
+ return this.clientToken;
92
+ }
93
+ throw new Error('Failed to get client token: Invalid response');
94
+ }
95
+ catch (error) {
96
+ throw new Error('Failed to get client token: ' + (error instanceof Error ? error.message : 'Unknown error'));
97
+ }
98
+ }
39
99
  async get(url, config) {
40
100
  const response = await this.axios.get(url, config);
41
101
  return response.data;
@@ -52,12 +112,33 @@ class HttpClient {
52
112
  const response = await this.axios.delete(url, config);
53
113
  return response.data;
54
114
  }
55
- // Method for requests that need Authorization header
56
- async authenticatedRequest(method, url, token, data, config) {
115
+ // Generic method for all requests (uses client credentials)
116
+ async request(method, url, data, config) {
117
+ switch (method) {
118
+ case 'GET':
119
+ return this.get(url, config);
120
+ case 'POST':
121
+ return this.post(url, data, config);
122
+ case 'PUT':
123
+ return this.put(url, data, config);
124
+ case 'DELETE':
125
+ return this.delete(url, config);
126
+ default:
127
+ throw new Error(`Unsupported HTTP method: ${method}`);
128
+ }
129
+ }
130
+ // For requests that need Bearer token (user auth)
131
+ // IMPORTANT: Client token is sent as x-client-token header (via interceptor)
132
+ // User token is sent as Authorization: Bearer header (this method parameter)
133
+ // These are two separate tokens for different purposes
134
+ async authenticatedRequest(method, url, token, // User authentication token (sent as Bearer token)
135
+ data, config) {
57
136
  const requestConfig = {
58
137
  ...config,
59
138
  headers: {
60
139
  ...config?.headers,
140
+ // Add Bearer token for user authentication
141
+ // x-client-token is automatically added by interceptor (not a Bearer token)
61
142
  Authorization: `Bearer ${token}`
62
143
  }
63
144
  };
@@ -1 +1 @@
1
- {"version":3,"file":"http-client.js","sourceRoot":"","sources":["../../../src/utils/http-client.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;;AAEH,kDAMe;AAGf,MAAa,UAAU;IAIrB,YAAY,MAAwB;QAClC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QAErB,IAAI,CAAC,KAAK,GAAG,eAAK,CAAC,MAAM,CAAC;YACxB,OAAO,EAAE,MAAM,CAAC,aAAa;YAC7B,OAAO,EAAE,KAAK;YACd,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;gBAClC,eAAe,EAAE,MAAM,CAAC,WAAW;gBACnC,eAAe,EAAE,MAAM,CAAC,cAAc;aACvC;SACF,CAAC,CAAC;QAEH,gDAAgD;QAChD,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,CACjC,CAAC,MAAkC,EAAE,EAAE;YACrC,MAAM,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC;YACtC,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;YAC1D,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC;YAC7D,OAAO,MAAM,CAAC;QAChB,CAAC,EACD,CAAC,KAAiB,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAC7C,CAAC;QAEF,8CAA8C;QAC9C,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,CAClC,CAAC,QAAuB,EAAE,EAAE,CAAC,QAAQ,EACrC,CAAC,KAAiB,EAAE,EAAE;YACpB,IAAI,KAAK,CAAC,QAAQ,EAAE,MAAM,KAAK,GAAG,EAAE,CAAC;gBACnC,4CAA4C;gBAC5C,KAAK,CAAC,OAAO,GAAG,8CAA8C,CAAC;YACjE,CAAC;YACD,OAAO,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC/B,CAAC,CACF,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,GAAG,CAAI,GAAW,EAAE,MAA2B;QACnD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAI,GAAG,EAAE,MAAM,CAAC,CAAC;QACtD,OAAO,QAAQ,CAAC,IAAI,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,IAAI,CAAI,GAAW,EAAE,IAAc,EAAE,MAA2B;QACpE,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAI,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;QAC7D,OAAO,QAAQ,CAAC,IAAI,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,GAAG,CAAI,GAAW,EAAE,IAAc,EAAE,MAA2B;QACnE,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAI,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;QAC5D,OAAO,QAAQ,CAAC,IAAI,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,MAAM,CAAI,GAAW,EAAE,MAA2B;QACtD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAI,GAAG,EAAE,MAAM,CAAC,CAAC;QACzD,OAAO,QAAQ,CAAC,IAAI,CAAC;IACvB,CAAC;IAED,qDAAqD;IACrD,KAAK,CAAC,oBAAoB,CACxB,MAAyC,EACzC,GAAW,EACX,KAAa,EACb,IAAc,EACd,MAA2B;QAE3B,MAAM,aAAa,GAAG;YACpB,GAAG,MAAM;YACT,OAAO,EAAE;gBACP,GAAG,MAAM,EAAE,OAAO;gBAClB,aAAa,EAAE,UAAU,KAAK,EAAE;aACjC;SACF,CAAC;QAEF,QAAQ,MAAM,EAAE,CAAC;YACf,KAAK,KAAK;gBACR,OAAO,IAAI,CAAC,GAAG,CAAI,GAAG,EAAE,aAAa,CAAC,CAAC;YACzC,KAAK,MAAM;gBACT,OAAO,IAAI,CAAC,IAAI,CAAI,GAAG,EAAE,IAAI,EAAE,aAAa,CAAC,CAAC;YAChD,KAAK,KAAK;gBACR,OAAO,IAAI,CAAC,GAAG,CAAI,GAAG,EAAE,IAAI,EAAE,aAAa,CAAC,CAAC;YAC/C,KAAK,QAAQ;gBACX,OAAO,IAAI,CAAC,MAAM,CAAI,GAAG,EAAE,aAAa,CAAC,CAAC;YAC5C;gBACE,MAAM,IAAI,KAAK,CAAC,4BAA4B,MAAM,EAAE,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC;CACF;AA1FD,gCA0FC"}
1
+ {"version":3,"file":"http-client.js","sourceRoot":"","sources":["../../../src/utils/http-client.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;;AAEH,kDAMe;AAGf,MAAa,UAAU;IAOrB,YAAY,MAAwB;QAJ5B,gBAAW,GAAkB,IAAI,CAAC;QAClC,mBAAc,GAAgB,IAAI,CAAC;QACnC,wBAAmB,GAA2B,IAAI,CAAC;QAGzD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QAErB,IAAI,CAAC,KAAK,GAAG,eAAK,CAAC,MAAM,CAAC;YACxB,OAAO,EAAE,MAAM,CAAC,aAAa;YAC7B,OAAO,EAAE,KAAK;YACd,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;aACnC;SACF,CAAC,CAAC;QAEH,0DAA0D;QAC1D,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,CACjC,KAAK,EAAE,MAAkC,EAAE,EAAE;YAC3C,MAAM,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC;YAEtC,qCAAqC;YACrC,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;YAC1C,IAAI,KAAK,EAAE,CAAC;gBACV,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,GAAG,KAAK,CAAC;YAC3C,CAAC;YAED,OAAO,MAAM,CAAC;QAChB,CAAC,EACD,CAAC,KAAiB,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAC7C,CAAC;QAEF,8CAA8C;QAC9C,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,CAClC,CAAC,QAAuB,EAAE,EAAE,CAAC,QAAQ,EACrC,CAAC,KAAiB,EAAE,EAAE;YACpB,IAAI,KAAK,CAAC,QAAQ,EAAE,MAAM,KAAK,GAAG,EAAE,CAAC;gBACnC,4CAA4C;gBAC5C,KAAK,CAAC,OAAO,GAAG,8CAA8C,CAAC;gBAC/D,sCAAsC;gBACtC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;gBACxB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;YAC7B,CAAC;YACD,OAAO,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC/B,CAAC,CACF,CAAC;IACJ,CAAC;IAED;;;OAGG;IACK,KAAK,CAAC,cAAc;QAC1B,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;QAEvB,qFAAqF;QACrF,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,cAAc,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC;YACrG,OAAO,IAAI,CAAC,WAAW,CAAC;QAC1B,CAAC;QAED,iDAAiD;QACjD,IAAI,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAC7B,OAAO,IAAI,CAAC,mBAAmB,CAAC;QAClC,CAAC;QAED,2DAA2D;QAC3D,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACnD,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC;YAC7C,OAAO,KAAK,CAAC;QACf,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;QAClC,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,gBAAgB;QAC5B,IAAI,CAAC;YACH,4EAA4E;YAC5E,MAAM,SAAS,GAAG,eAAK,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,CAAsB,iBAAiB,CAAC,CAAC;YAE9E,IAAI,QAAQ,CAAC,IAAI,CAAC,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;gBACjD,IAAI,CAAC,WAAW,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;gBACvC,gEAAgE;gBAChE,MAAM,SAAS,GAAG,QAAQ,CAAC,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;gBAC/C,IAAI,CAAC,cAAc,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,GAAG,IAAI,CAAC,CAAC;gBAC9D,OAAO,IAAI,CAAC,WAAW,CAAC;YAC1B,CAAC;YAED,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;QAClE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CACb,8BAA8B,GAAG,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC,CAC5F,CAAC;QACJ,CAAC;IACH,CAAC;IAED,KAAK,CAAC,GAAG,CAAI,GAAW,EAAE,MAA2B;QACnD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAI,GAAG,EAAE,MAAM,CAAC,CAAC;QACtD,OAAO,QAAQ,CAAC,IAAI,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,IAAI,CAAI,GAAW,EAAE,IAAc,EAAE,MAA2B;QACpE,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAI,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;QAC7D,OAAO,QAAQ,CAAC,IAAI,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,GAAG,CAAI,GAAW,EAAE,IAAc,EAAE,MAA2B;QACnE,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAI,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;QAC5D,OAAO,QAAQ,CAAC,IAAI,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,MAAM,CAAI,GAAW,EAAE,MAA2B;QACtD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAI,GAAG,EAAE,MAAM,CAAC,CAAC;QACzD,OAAO,QAAQ,CAAC,IAAI,CAAC;IACvB,CAAC;IAED,4DAA4D;IAC5D,KAAK,CAAC,OAAO,CACX,MAAyC,EACzC,GAAW,EACX,IAAc,EACd,MAA2B;QAE3B,QAAQ,MAAM,EAAE,CAAC;YACf,KAAK,KAAK;gBACR,OAAO,IAAI,CAAC,GAAG,CAAI,GAAG,EAAE,MAAM,CAAC,CAAC;YAClC,KAAK,MAAM;gBACT,OAAO,IAAI,CAAC,IAAI,CAAI,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;YACzC,KAAK,KAAK;gBACR,OAAO,IAAI,CAAC,GAAG,CAAI,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;YACxC,KAAK,QAAQ;gBACX,OAAO,IAAI,CAAC,MAAM,CAAI,GAAG,EAAE,MAAM,CAAC,CAAC;YACrC;gBACE,MAAM,IAAI,KAAK,CAAC,4BAA4B,MAAM,EAAE,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC;IAED,kDAAkD;IAClD,6EAA6E;IAC7E,6EAA6E;IAC7E,uDAAuD;IACvD,KAAK,CAAC,oBAAoB,CACxB,MAAyC,EACzC,GAAW,EACX,KAAa,EAAE,mDAAmD;IAClE,IAAc,EACd,MAA2B;QAE3B,MAAM,aAAa,GAAG;YACpB,GAAG,MAAM;YACT,OAAO,EAAE;gBACP,GAAG,MAAM,EAAE,OAAO;gBAClB,2CAA2C;gBAC3C,4EAA4E;gBAC5E,aAAa,EAAE,UAAU,KAAK,EAAE;aACjC;SACF,CAAC;QAEF,QAAQ,MAAM,EAAE,CAAC;YACf,KAAK,KAAK;gBACR,OAAO,IAAI,CAAC,GAAG,CAAI,GAAG,EAAE,aAAa,CAAC,CAAC;YACzC,KAAK,MAAM;gBACT,OAAO,IAAI,CAAC,IAAI,CAAI,GAAG,EAAE,IAAI,EAAE,aAAa,CAAC,CAAC;YAChD,KAAK,KAAK;gBACR,OAAO,IAAI,CAAC,GAAG,CAAI,GAAG,EAAE,IAAI,EAAE,aAAa,CAAC,CAAC;YAC/C,KAAK,QAAQ;gBACX,OAAO,IAAI,CAAC,MAAM,CAAI,GAAG,EAAE,aAAa,CAAC,CAAC;YAC5C;gBACE,MAAM,IAAI,KAAK,CAAC,4BAA4B,MAAM,EAAE,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC;CACF;AA1LD,gCA0LC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aifabrix/miso-client",
3
- "version": "1.0.2",
3
+ "version": "1.0.3",
4
4
  "description": "AI Fabrix Client SDK for authentication, authorization, and logging",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -9,6 +9,7 @@
9
9
  "test": "jest",
10
10
  "test:watch": "jest --watch",
11
11
  "test:coverage": "jest --coverage",
12
+ "test:no-coverage": "jest --no-coverage",
12
13
  "lint": "eslint src/**/*.ts",
13
14
  "lint:fix": "eslint src/**/*.ts --fix",
14
15
  "prepublishOnly": "npm run build"