@aifabrix/miso-client 3.1.1 → 3.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.
Files changed (84) hide show
  1. package/README.md +1 -1
  2. package/dist/express/client-token-endpoint.d.ts +76 -0
  3. package/dist/express/client-token-endpoint.d.ts.map +1 -0
  4. package/dist/express/client-token-endpoint.js +108 -0
  5. package/dist/express/client-token-endpoint.js.map +1 -0
  6. package/dist/express/index.d.ts +2 -1
  7. package/dist/express/index.d.ts.map +1 -1
  8. package/dist/express/index.js +8 -3
  9. package/dist/express/index.js.map +1 -1
  10. package/dist/express/response-middleware.d.ts.map +1 -1
  11. package/dist/express/response-middleware.js.map +1 -1
  12. package/dist/index.d.ts +8 -2
  13. package/dist/index.d.ts.map +1 -1
  14. package/dist/index.js +14 -1
  15. package/dist/index.js.map +1 -1
  16. package/dist/services/auth.service.js +5 -5
  17. package/dist/services/auth.service.js.map +1 -1
  18. package/dist/services/browser-permission.service.d.ts +60 -0
  19. package/dist/services/browser-permission.service.d.ts.map +1 -0
  20. package/dist/services/browser-permission.service.js +159 -0
  21. package/dist/services/browser-permission.service.js.map +1 -0
  22. package/dist/services/browser-role.service.d.ts +60 -0
  23. package/dist/services/browser-role.service.d.ts.map +1 -0
  24. package/dist/services/browser-role.service.js +159 -0
  25. package/dist/services/browser-role.service.js.map +1 -0
  26. package/dist/services/cache.service.d.ts.map +1 -1
  27. package/dist/services/cache.service.js +4 -0
  28. package/dist/services/cache.service.js.map +1 -1
  29. package/dist/services/logger.service.d.ts +4 -0
  30. package/dist/services/logger.service.d.ts.map +1 -1
  31. package/dist/services/logger.service.js +21 -0
  32. package/dist/services/logger.service.js.map +1 -1
  33. package/dist/types/data-client.types.d.ts +1 -0
  34. package/dist/types/data-client.types.d.ts.map +1 -1
  35. package/dist/types/data-client.types.js.map +1 -1
  36. package/dist/utils/audit-log-queue.d.ts +4 -0
  37. package/dist/utils/audit-log-queue.d.ts.map +1 -1
  38. package/dist/utils/audit-log-queue.js +22 -2
  39. package/dist/utils/audit-log-queue.js.map +1 -1
  40. package/dist/utils/auth-strategy.js +2 -2
  41. package/dist/utils/browser-jwt-decoder.d.ts +20 -0
  42. package/dist/utils/browser-jwt-decoder.d.ts.map +1 -0
  43. package/dist/utils/browser-jwt-decoder.js +75 -0
  44. package/dist/utils/browser-jwt-decoder.js.map +1 -0
  45. package/dist/utils/controller-url-resolver.d.ts +16 -0
  46. package/dist/utils/controller-url-resolver.d.ts.map +1 -1
  47. package/dist/utils/controller-url-resolver.js +12 -0
  48. package/dist/utils/controller-url-resolver.js.map +1 -1
  49. package/dist/utils/data-client-audit.d.ts +24 -0
  50. package/dist/utils/data-client-audit.d.ts.map +1 -0
  51. package/dist/utils/data-client-audit.js +138 -0
  52. package/dist/utils/data-client-audit.js.map +1 -0
  53. package/dist/utils/data-client-auth.d.ts +59 -0
  54. package/dist/utils/data-client-auth.d.ts.map +1 -0
  55. package/dist/utils/data-client-auth.js +427 -0
  56. package/dist/utils/data-client-auth.js.map +1 -0
  57. package/dist/utils/data-client-auto-init.d.ts +66 -0
  58. package/dist/utils/data-client-auto-init.d.ts.map +1 -0
  59. package/dist/utils/data-client-auto-init.js +215 -0
  60. package/dist/utils/data-client-auto-init.js.map +1 -0
  61. package/dist/utils/data-client-cache.d.ts +36 -0
  62. package/dist/utils/data-client-cache.d.ts.map +1 -0
  63. package/dist/utils/data-client-cache.js +55 -0
  64. package/dist/utils/data-client-cache.js.map +1 -0
  65. package/dist/utils/data-client-redirect.d.ts +22 -0
  66. package/dist/utils/data-client-redirect.d.ts.map +1 -0
  67. package/dist/utils/data-client-redirect.js +345 -0
  68. package/dist/utils/data-client-redirect.js.map +1 -0
  69. package/dist/utils/data-client-request.d.ts +32 -0
  70. package/dist/utils/data-client-request.d.ts.map +1 -0
  71. package/dist/utils/data-client-request.js +309 -0
  72. package/dist/utils/data-client-request.js.map +1 -0
  73. package/dist/utils/data-client-utils.d.ts +49 -0
  74. package/dist/utils/data-client-utils.d.ts.map +1 -0
  75. package/dist/utils/data-client-utils.js +139 -0
  76. package/dist/utils/data-client-utils.js.map +1 -0
  77. package/dist/utils/data-client.d.ts +103 -29
  78. package/dist/utils/data-client.d.ts.map +1 -1
  79. package/dist/utils/data-client.js +321 -774
  80. package/dist/utils/data-client.js.map +1 -1
  81. package/dist/utils/internal-http-client.d.ts.map +1 -1
  82. package/dist/utils/internal-http-client.js +7 -3
  83. package/dist/utils/internal-http-client.js.map +1 -1
  84. package/package.json +9 -2
@@ -4,6 +4,7 @@
4
4
  */
5
5
  import { DataClientConfig, ApiRequestOptions, InterceptorConfig, RequestMetrics, AuditConfig } from "../types/data-client.types";
6
6
  import { ClientTokenInfo } from "./token-utils";
7
+ import { UserInfo } from "../types/config.types";
7
8
  export declare class DataClient {
8
9
  private config;
9
10
  private misoClient;
@@ -11,6 +12,8 @@ export declare class DataClient {
11
12
  private pendingRequests;
12
13
  private interceptors;
13
14
  private metrics;
15
+ private permissionService;
16
+ private roleService;
14
17
  constructor(config: DataClientConfig);
15
18
  /**
16
19
  * Get authentication token from localStorage
@@ -74,39 +77,10 @@ export declare class DataClient {
74
77
  * Get request metrics
75
78
  */
76
79
  getMetrics(): RequestMetrics;
77
- /**
78
- * Check if endpoint should skip audit logging
79
- */
80
- private shouldSkipAudit;
81
- /**
82
- * Log audit event (ISO 27001 compliance)
83
- * Skips audit logging if no authentication token is available (user token OR client token)
84
- */
85
- private logAuditEvent;
86
80
  /**
87
81
  * Make HTTP request with all features (caching, retry, deduplication, audit)
88
82
  */
89
83
  private request;
90
- /**
91
- * Execute HTTP request with retry logic
92
- */
93
- private executeRequest;
94
- /**
95
- * Make fetch request with timeout and authentication
96
- */
97
- private makeFetchRequest;
98
- /**
99
- * Merge AbortSignals
100
- */
101
- private mergeSignals;
102
- /**
103
- * Parse response based on content type
104
- */
105
- private parseResponse;
106
- /**
107
- * Extract headers from Headers object or Record
108
- */
109
- private extractHeaders;
110
84
  /**
111
85
  * Handle authentication error
112
86
  */
@@ -135,6 +109,106 @@ export declare class DataClient {
135
109
  * DELETE request
136
110
  */
137
111
  delete<T>(endpoint: string, options?: ApiRequestOptions): Promise<T>;
112
+ /**
113
+ * Get user permissions (uses token from localStorage if not provided)
114
+ * @param token - Optional user authentication token (auto-retrieved from localStorage if not provided)
115
+ * @returns Array of permission strings
116
+ */
117
+ getPermissions(token?: string): Promise<string[]>;
118
+ /**
119
+ * Check if user has specific permission
120
+ * @param permission - Permission to check
121
+ * @param token - Optional user authentication token (auto-retrieved from localStorage if not provided)
122
+ * @returns True if user has the permission
123
+ */
124
+ hasPermission(permission: string, token?: string): Promise<boolean>;
125
+ /**
126
+ * Check if user has any of the specified permissions
127
+ * @param permissions - Permissions to check
128
+ * @param token - Optional user authentication token (auto-retrieved from localStorage if not provided)
129
+ * @returns True if user has any of the permissions
130
+ */
131
+ hasAnyPermission(permissions: string[], token?: string): Promise<boolean>;
132
+ /**
133
+ * Check if user has all of the specified permissions
134
+ * @param permissions - Permissions to check
135
+ * @param token - Optional user authentication token (auto-retrieved from localStorage if not provided)
136
+ * @returns True if user has all of the permissions
137
+ */
138
+ hasAllPermissions(permissions: string[], token?: string): Promise<boolean>;
139
+ /**
140
+ * Force refresh permissions from controller (bypass cache)
141
+ * @param token - Optional user authentication token (auto-retrieved from localStorage if not provided)
142
+ * @returns Array of permission strings
143
+ */
144
+ refreshPermissions(token?: string): Promise<string[]>;
145
+ /**
146
+ * Clear cached permissions for a user
147
+ * @param token - Optional user authentication token (auto-retrieved from localStorage if not provided)
148
+ */
149
+ clearPermissionsCache(token?: string): Promise<void>;
150
+ /**
151
+ * Get user roles (uses token from localStorage if not provided)
152
+ * @param token - Optional user authentication token (auto-retrieved from localStorage if not provided)
153
+ * @returns Array of role strings
154
+ */
155
+ getRoles(token?: string): Promise<string[]>;
156
+ /**
157
+ * Check if user has specific role
158
+ * @param role - Role to check
159
+ * @param token - Optional user authentication token (auto-retrieved from localStorage if not provided)
160
+ * @returns True if user has the role
161
+ */
162
+ hasRole(role: string, token?: string): Promise<boolean>;
163
+ /**
164
+ * Check if user has any of the specified roles
165
+ * @param roles - Roles to check
166
+ * @param token - Optional user authentication token (auto-retrieved from localStorage if not provided)
167
+ * @returns True if user has any of the roles
168
+ */
169
+ hasAnyRole(roles: string[], token?: string): Promise<boolean>;
170
+ /**
171
+ * Check if user has all of the specified roles
172
+ * @param roles - Roles to check
173
+ * @param token - Optional user authentication token (auto-retrieved from localStorage if not provided)
174
+ * @returns True if user has all of the roles
175
+ */
176
+ hasAllRoles(roles: string[], token?: string): Promise<boolean>;
177
+ /**
178
+ * Force refresh roles from controller (bypass cache)
179
+ * @param token - Optional user authentication token (auto-retrieved from localStorage if not provided)
180
+ * @returns Array of role strings
181
+ */
182
+ refreshRoles(token?: string): Promise<string[]>;
183
+ /**
184
+ * Clear cached roles for a user
185
+ * @param token - Optional user authentication token (auto-retrieved from localStorage if not provided)
186
+ */
187
+ clearRolesCache(token?: string): Promise<void>;
188
+ /**
189
+ * Validate token (uses localStorage token if not provided)
190
+ * @param token - Optional user authentication token (auto-retrieved from localStorage if not provided)
191
+ * @returns True if token is valid
192
+ */
193
+ validateToken(token?: string): Promise<boolean>;
194
+ /**
195
+ * Get user info from token (uses localStorage token if not provided)
196
+ * @param token - Optional user authentication token (auto-retrieved from localStorage if not provided)
197
+ * @returns User info or null if not authenticated
198
+ */
199
+ getUser(token?: string): Promise<UserInfo | null>;
200
+ /**
201
+ * Get user info from API endpoint (uses localStorage token if not provided)
202
+ * @param token - Optional user authentication token (auto-retrieved from localStorage if not provided)
203
+ * @returns User info or null if not authenticated
204
+ */
205
+ getUserInfo(token?: string): Promise<UserInfo | null>;
206
+ /**
207
+ * Check if authenticated (alias for validateToken)
208
+ * @param token - Optional user authentication token (auto-retrieved from localStorage if not provided)
209
+ * @returns True if authenticated
210
+ */
211
+ isAuthenticatedAsync(token?: string): Promise<boolean>;
138
212
  /**
139
213
  * Get environment token (browser-side)
140
214
  * Checks localStorage cache first, then calls backend endpoint if needed
@@ -1 +1 @@
1
- {"version":3,"file":"data-client.d.ts","sourceRoot":"","sources":["../../src/utils/data-client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"data-client.d.ts","sourceRoot":"","sources":["../../src/utils/data-client.ts"],"names":[],"mappings":"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"}