@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
@@ -0,0 +1,427 @@
1
+ "use strict";
2
+ /**
3
+ * DataClient authentication utilities
4
+ * Handles authentication, token management, and login/logout flows
5
+ */
6
+ var __importDefault = (this && this.__importDefault) || function (mod) {
7
+ return (mod && mod.__esModule) ? mod : { "default": mod };
8
+ };
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.redirectToLogin = void 0;
11
+ exports.getToken = getToken;
12
+ exports.hasClientToken = hasClientToken;
13
+ exports.hasAnyToken = hasAnyToken;
14
+ exports.getClientToken = getClientToken;
15
+ exports.getControllerUrl = getControllerUrl;
16
+ exports.logout = logout;
17
+ exports.getEnvironmentToken = getEnvironmentToken;
18
+ exports.getClientTokenInfo = getClientTokenInfo;
19
+ const data_client_utils_1 = require("./data-client-utils");
20
+ const token_utils_1 = require("./token-utils");
21
+ const jsonwebtoken_1 = __importDefault(require("jsonwebtoken"));
22
+ const data_client_audit_1 = require("./data-client-audit");
23
+ const data_client_redirect_1 = require("./data-client-redirect");
24
+ /**
25
+ * Get authentication token from localStorage
26
+ */
27
+ function getToken(tokenKeys) {
28
+ if (!(0, data_client_utils_1.isBrowser)())
29
+ return null;
30
+ const keys = tokenKeys || ["token", "accessToken", "authToken"];
31
+ for (const key of keys) {
32
+ const token = (0, data_client_utils_1.getLocalStorage)(key);
33
+ if (token)
34
+ return token;
35
+ }
36
+ return null;
37
+ }
38
+ /**
39
+ * Check if client token is available (from localStorage cache or config)
40
+ */
41
+ function hasClientToken(misoClient, misoConfig) {
42
+ if (!(0, data_client_utils_1.isBrowser)()) {
43
+ // Server-side: check if misoClient config has clientSecret
44
+ if (misoClient && misoConfig?.clientSecret) {
45
+ return true;
46
+ }
47
+ return false;
48
+ }
49
+ // Browser-side: check localStorage cache
50
+ const cachedToken = (0, data_client_utils_1.getLocalStorage)("miso:client-token");
51
+ if (cachedToken) {
52
+ const expiresAtStr = (0, data_client_utils_1.getLocalStorage)("miso:client-token-expires-at");
53
+ if (expiresAtStr) {
54
+ const expiresAt = parseInt(expiresAtStr, 10);
55
+ if (expiresAt > Date.now()) {
56
+ return true; // Valid cached token
57
+ }
58
+ }
59
+ }
60
+ // Check config token
61
+ if (misoConfig?.clientToken) {
62
+ return true;
63
+ }
64
+ // Check if misoClient config has onClientTokenRefresh callback (browser pattern)
65
+ if (misoConfig?.onClientTokenRefresh) {
66
+ return true; // Has means to get client token
67
+ }
68
+ // Check if misoClient config has clientSecret (server-side fallback)
69
+ if (misoConfig?.clientSecret) {
70
+ return true;
71
+ }
72
+ return false;
73
+ }
74
+ /**
75
+ * Check if any authentication token is available (user token OR client token)
76
+ */
77
+ function hasAnyToken(tokenKeys, misoClient, misoConfig) {
78
+ return getToken(tokenKeys) !== null || hasClientToken(misoClient || null, misoConfig);
79
+ }
80
+ /**
81
+ * Get client token for requests
82
+ * Checks localStorage cache first, then config, then calls getEnvironmentToken() if needed
83
+ * @returns Client token string or null if unavailable
84
+ */
85
+ async function getClientToken(misoConfig, _baseUrl, _getEnvironmentToken) {
86
+ if (!(0, data_client_utils_1.isBrowser)()) {
87
+ // Server-side: return null (client token handled by MisoClient)
88
+ console.log("[getClientToken] Not in browser environment");
89
+ return null;
90
+ }
91
+ // Check localStorage cache first
92
+ const cachedToken = (0, data_client_utils_1.getLocalStorage)("miso:client-token");
93
+ const expiresAtStr = (0, data_client_utils_1.getLocalStorage)("miso:client-token-expires-at");
94
+ console.log("[getClientToken] Checking localStorage:", {
95
+ hasToken: !!cachedToken,
96
+ hasExpiresAt: !!expiresAtStr,
97
+ expiresAt: expiresAtStr,
98
+ currentTime: Date.now(),
99
+ });
100
+ if (cachedToken) {
101
+ // If we have expiration timestamp, check it
102
+ if (expiresAtStr) {
103
+ const expiresAt = parseInt(expiresAtStr, 10);
104
+ const now = Date.now();
105
+ const timeUntilExpiry = expiresAt - now;
106
+ const timeUntilExpirySeconds = Math.floor(timeUntilExpiry / 1000);
107
+ console.log("[getClientToken] Token expiration check:", {
108
+ expiresAt,
109
+ expiresAtISO: new Date(expiresAt).toISOString(),
110
+ now,
111
+ nowISO: new Date(now).toISOString(),
112
+ timeUntilExpiry,
113
+ timeUntilExpirySeconds,
114
+ isValid: expiresAt > now,
115
+ expired: expiresAt <= now,
116
+ isNaN: isNaN(expiresAt),
117
+ });
118
+ if (isNaN(expiresAt)) {
119
+ console.warn("[getClientToken] Invalid expiration timestamp format, assuming token is valid");
120
+ return cachedToken;
121
+ }
122
+ else if (expiresAt > now) {
123
+ console.log("[getClientToken] Returning valid cached token (checked expiration)");
124
+ return cachedToken; // Valid cached token
125
+ }
126
+ else {
127
+ console.warn("[getClientToken] Cached token expired, removing from cache");
128
+ (0, data_client_utils_1.removeLocalStorage)("miso:client-token");
129
+ (0, data_client_utils_1.removeLocalStorage)("miso:client-token-expires-at");
130
+ }
131
+ }
132
+ else {
133
+ // No expiration timestamp - try to decode JWT to check expiration
134
+ try {
135
+ // Decode JWT to check exp claim
136
+ const decoded = jsonwebtoken_1.default.decode(cachedToken);
137
+ if (decoded && decoded.exp) {
138
+ const now = Date.now();
139
+ const jwtExpiresAt = decoded.exp * 1000; // Convert to milliseconds
140
+ const jwtTimeUntilExpiry = jwtExpiresAt - now;
141
+ console.log("[getClientToken] Token expiration from JWT:", {
142
+ jwtExpiresAt,
143
+ jwtExpiresAtISO: new Date(jwtExpiresAt).toISOString(),
144
+ now,
145
+ nowISO: new Date(now).toISOString(),
146
+ jwtTimeUntilExpiry,
147
+ jwtTimeUntilExpirySeconds: Math.floor(jwtTimeUntilExpiry / 1000),
148
+ jwtIsValid: jwtExpiresAt > now,
149
+ });
150
+ if (jwtExpiresAt > now) {
151
+ console.log("[getClientToken] Returning valid cached token (checked JWT expiration)");
152
+ return cachedToken;
153
+ }
154
+ else {
155
+ console.warn("[getClientToken] Token expired (from JWT), removing from cache");
156
+ (0, data_client_utils_1.removeLocalStorage)("miso:client-token");
157
+ (0, data_client_utils_1.removeLocalStorage)("miso:client-token-expires-at");
158
+ }
159
+ }
160
+ else {
161
+ // Can't determine expiration - assume token is valid if it exists
162
+ console.log("[getClientToken] No expiration info available, assuming token is valid");
163
+ return cachedToken;
164
+ }
165
+ }
166
+ catch (error) {
167
+ // Failed to decode token - assume it's valid if it exists
168
+ console.warn("[getClientToken] Failed to decode token, assuming valid:", error);
169
+ return cachedToken;
170
+ }
171
+ }
172
+ }
173
+ // Check config token
174
+ if (misoConfig?.clientToken) {
175
+ console.log("[getClientToken] Returning token from config");
176
+ return misoConfig.clientToken;
177
+ }
178
+ // Don't fetch client token if we don't have a cached token
179
+ // This prevents unnecessary fetch calls during auth error handling
180
+ // redirectToLogin can work without a client token (it's optional)
181
+ console.warn("[getClientToken] No token available, returning null");
182
+ return null;
183
+ }
184
+ /**
185
+ * Build controller URL from configuration
186
+ * Uses controllerPublicUrl (browser) or controllerUrl (fallback)
187
+ * @returns Controller base URL or null if not configured
188
+ */
189
+ function getControllerUrl(misoConfig) {
190
+ if (!misoConfig) {
191
+ return null;
192
+ }
193
+ // Browser: prefer controllerPublicUrl, fallback to controllerUrl
194
+ if ((0, data_client_utils_1.isBrowser)()) {
195
+ return misoConfig.controllerPublicUrl ||
196
+ misoConfig.controllerUrl ||
197
+ null;
198
+ }
199
+ // Server: prefer controllerPrivateUrl, fallback to controllerUrl
200
+ return misoConfig.controllerPrivateUrl ||
201
+ misoConfig.controllerUrl ||
202
+ null;
203
+ }
204
+ /**
205
+ * Redirect to login page via controller
206
+ * Re-exported from data-client-redirect for backward compatibility
207
+ */
208
+ var data_client_redirect_2 = require("./data-client-redirect");
209
+ Object.defineProperty(exports, "redirectToLogin", { enumerable: true, get: function () { return data_client_redirect_2.redirectToLogin; } });
210
+ /**
211
+ * Logout user and redirect
212
+ * Calls logout API with x-client-token header, clears tokens from localStorage, clears cache, and redirects
213
+ * @param redirectUrl - Optional redirect URL after logout (defaults to logoutUrl or loginUrl)
214
+ */
215
+ async function logout(config, getTokenFn, getClientTokenFn, clearCacheFn, redirectUrl) {
216
+ if (!(0, data_client_utils_1.isBrowser)())
217
+ return;
218
+ const token = getTokenFn();
219
+ // Build controller URL
220
+ const controllerUrl = getControllerUrl(config.misoConfig);
221
+ // Call logout API if controller URL available and token exists
222
+ if (controllerUrl && token) {
223
+ try {
224
+ // Get client token
225
+ const clientToken = await getClientTokenFn();
226
+ // Build logout endpoint URL
227
+ const logoutEndpoint = `${controllerUrl}/api/v1/auth/logout`;
228
+ // Build headers
229
+ const headers = {
230
+ "Content-Type": "application/json",
231
+ };
232
+ // Add x-client-token header if available
233
+ if (clientToken) {
234
+ headers["x-client-token"] = clientToken;
235
+ }
236
+ // Make fetch request
237
+ const response = await fetch(logoutEndpoint, {
238
+ method: "POST",
239
+ headers,
240
+ body: JSON.stringify({ token }),
241
+ credentials: "include", // Include cookies for CORS
242
+ });
243
+ if (!response.ok) {
244
+ // Log error but continue with cleanup (logout should always clear local state)
245
+ const errorText = await response.text().catch(() => "Unknown error");
246
+ console.error(`Logout API call failed: ${response.status} ${response.statusText}. ${errorText}`);
247
+ }
248
+ }
249
+ catch (error) {
250
+ // Log error but continue with cleanup (logout should always clear local state)
251
+ console.error("Logout API call failed:", error);
252
+ }
253
+ }
254
+ // Clear tokens from localStorage (always, even if API call failed)
255
+ const keys = config.tokenKeys || ["token", "accessToken", "authToken"];
256
+ keys.forEach(key => {
257
+ try {
258
+ const storage = globalThis.localStorage;
259
+ if (storage) {
260
+ storage.removeItem(key);
261
+ }
262
+ }
263
+ catch (e) {
264
+ // Ignore localStorage errors (SSR, private browsing, etc.)
265
+ }
266
+ });
267
+ // Clear HTTP cache
268
+ clearCacheFn();
269
+ // Determine redirect URL: redirectUrl param > logoutUrl config > loginUrl config > '/login'
270
+ const finalRedirectUrl = redirectUrl ||
271
+ config.logoutUrl ||
272
+ config.loginUrl ||
273
+ "/login";
274
+ // Construct full URL (if relative, make absolute)
275
+ let fullUrl;
276
+ if (/^https?:\/\//i.test(finalRedirectUrl)) {
277
+ fullUrl = finalRedirectUrl;
278
+ }
279
+ else {
280
+ const origin = globalThis.window.location.origin;
281
+ fullUrl = `${origin}${finalRedirectUrl.startsWith("/") ? finalRedirectUrl : `/${finalRedirectUrl}`}`;
282
+ }
283
+ // Validate URL before redirecting
284
+ const validatedUrl = (0, data_client_redirect_1.getValidatedRedirectUrl)(fullUrl);
285
+ if (!validatedUrl) {
286
+ console.error("[logout] Invalid redirect URL, cannot redirect:", fullUrl);
287
+ // Fallback to current origin/login if validation fails
288
+ const origin = globalThis.window.location.origin;
289
+ const fallbackUrl = `${origin}/login`;
290
+ console.warn("[logout] Using fallback redirect URL:", fallbackUrl);
291
+ globalThis.window.location.href = fallbackUrl;
292
+ return;
293
+ }
294
+ // Redirect to validated URL
295
+ console.log("[logout] Redirecting to validated URL:", validatedUrl);
296
+ try {
297
+ globalThis.window.location.href = validatedUrl;
298
+ }
299
+ catch (redirectError) {
300
+ console.error("[logout] Failed to redirect:", redirectError);
301
+ // Fallback to current origin/login if redirect fails
302
+ const origin = globalThis.window.location.origin;
303
+ const fallbackUrl = `${origin}/login`;
304
+ globalThis.window.location.href = fallbackUrl;
305
+ }
306
+ }
307
+ /**
308
+ * Get environment token (browser-side)
309
+ * Checks localStorage cache first, then calls backend endpoint if needed
310
+ * Uses clientTokenUri from config or defaults to /api/v1/auth/client-token
311
+ *
312
+ * @returns Client token string
313
+ * @throws Error if token fetch fails
314
+ */
315
+ async function getEnvironmentToken(config, misoClient) {
316
+ if (!(0, data_client_utils_1.isBrowser)()) {
317
+ throw new Error("getEnvironmentToken() is only available in browser environment");
318
+ }
319
+ const cacheKey = "miso:client-token";
320
+ const expiresAtKey = "miso:client-token-expires-at";
321
+ // Check cache first
322
+ const cachedToken = (0, data_client_utils_1.getLocalStorage)(cacheKey);
323
+ const expiresAtStr = (0, data_client_utils_1.getLocalStorage)(expiresAtKey);
324
+ if (cachedToken && expiresAtStr) {
325
+ const expiresAt = parseInt(expiresAtStr, 10);
326
+ const now = Date.now();
327
+ // If token is still valid, return cached token
328
+ if (expiresAt > now) {
329
+ return cachedToken;
330
+ }
331
+ // Token expired, remove from cache
332
+ (0, data_client_utils_1.removeLocalStorage)(cacheKey);
333
+ (0, data_client_utils_1.removeLocalStorage)(expiresAtKey);
334
+ }
335
+ // Cache miss or expired - fetch from backend
336
+ const clientTokenUri = config.misoConfig?.clientTokenUri || "/api/v1/auth/client-token";
337
+ // Build full URL
338
+ const fullUrl = /^https?:\/\//i.test(clientTokenUri)
339
+ ? clientTokenUri
340
+ : `${config.baseUrl}${clientTokenUri}`;
341
+ try {
342
+ // Make request to backend endpoint
343
+ const response = await fetch(fullUrl, {
344
+ method: "POST",
345
+ headers: {
346
+ "Content-Type": "application/json",
347
+ },
348
+ credentials: "include", // Include cookies for CORS
349
+ });
350
+ if (!response.ok) {
351
+ const errorText = await response.text();
352
+ throw new Error(`Failed to get environment token: ${response.status} ${response.statusText}. ${errorText}`);
353
+ }
354
+ const data = (await response.json());
355
+ // Extract token from response (support both nested and flat formats)
356
+ const token = data.data?.token || data.token || data.accessToken || data.access_token;
357
+ if (!token || typeof token !== "string") {
358
+ throw new Error("Invalid response format: token not found in response");
359
+ }
360
+ // Calculate expiration time (default to 1 hour if not provided)
361
+ const expiresIn = data.data?.expiresIn || data.expiresIn || data.expires_in || 3600;
362
+ const expiresAt = Date.now() + expiresIn * 1000;
363
+ // Cache token
364
+ (0, data_client_utils_1.setLocalStorage)(cacheKey, token);
365
+ (0, data_client_utils_1.setLocalStorage)(expiresAtKey, expiresAt.toString());
366
+ // Log audit event if misoClient available
367
+ if (misoClient && !(0, data_client_audit_1.shouldSkipAudit)(clientTokenUri, config.audit)) {
368
+ try {
369
+ await misoClient.log.audit("client.token.request.success", clientTokenUri, {
370
+ method: "POST",
371
+ url: clientTokenUri,
372
+ statusCode: response.status,
373
+ cached: false,
374
+ }, {});
375
+ }
376
+ catch (auditError) {
377
+ // Silently fail audit logging to avoid breaking requests
378
+ console.warn("Failed to log audit event:", auditError);
379
+ }
380
+ }
381
+ return token;
382
+ }
383
+ catch (error) {
384
+ // Log audit event for error if misoClient available
385
+ if (misoClient && !(0, data_client_audit_1.shouldSkipAudit)(clientTokenUri, config.audit)) {
386
+ try {
387
+ const errorMessage = error instanceof Error ? error.message : "Unknown error";
388
+ await misoClient.log.audit("client.token.request.failed", clientTokenUri, {
389
+ method: "POST",
390
+ url: clientTokenUri,
391
+ statusCode: 0,
392
+ error: errorMessage,
393
+ cached: false,
394
+ }, {});
395
+ }
396
+ catch (auditError) {
397
+ // Silently fail audit logging to avoid breaking requests
398
+ console.warn("Failed to log audit event:", auditError);
399
+ }
400
+ }
401
+ throw error;
402
+ }
403
+ }
404
+ /**
405
+ * Get client token information (browser-side)
406
+ * Extracts application and environment info from client token
407
+ *
408
+ * @returns Client token info or null if token not available
409
+ */
410
+ function getClientTokenInfo(misoConfig) {
411
+ if (!(0, data_client_utils_1.isBrowser)()) {
412
+ return null;
413
+ }
414
+ // Try to get token from cache first
415
+ const cachedToken = (0, data_client_utils_1.getLocalStorage)("miso:client-token");
416
+ if (cachedToken) {
417
+ return (0, token_utils_1.extractClientTokenInfo)(cachedToken);
418
+ }
419
+ // Try to get token from config (if provided)
420
+ const configToken = misoConfig?.clientToken;
421
+ if (configToken) {
422
+ return (0, token_utils_1.extractClientTokenInfo)(configToken);
423
+ }
424
+ // No token available
425
+ return null;
426
+ }
427
+ //# sourceMappingURL=data-client-auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-client-auth.js","sourceRoot":"","sources":["../../src/utils/data-client-auth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,66 @@
1
+ /**
2
+ * DataClient Auto-Initialization Helper
3
+ * Automatically fetches configuration from server and initializes DataClient
4
+ *
5
+ * Provides zero-config client-side setup for DataClient initialization
6
+ */
7
+ import { DataClient } from "./data-client";
8
+ import { DataClientConfigResponse } from "../express/client-token-endpoint";
9
+ /**
10
+ * Options for autoInitializeDataClient
11
+ */
12
+ export interface AutoInitOptions {
13
+ /** Client token endpoint URI (default: '/api/v1/auth/client-token') */
14
+ clientTokenUri?: string;
15
+ /** Override baseUrl detection (auto-detected from window.location if not provided) */
16
+ baseUrl?: string;
17
+ /** Error callback */
18
+ onError?: (error: Error) => void;
19
+ /** Whether to cache config in localStorage (default: true) */
20
+ cacheConfig?: boolean;
21
+ }
22
+ /**
23
+ * Get cached DataClient configuration from localStorage
24
+ *
25
+ * Returns the cached configuration that was stored by autoInitializeDataClient.
26
+ * Useful for reading configuration without re-initializing DataClient.
27
+ *
28
+ * @returns Cached config or null if not found or expired
29
+ *
30
+ * @example
31
+ * ```typescript
32
+ * import { getCachedDataClientConfig } from '@aifabrix/miso-client';
33
+ *
34
+ * const cachedConfig = getCachedDataClientConfig();
35
+ * if (cachedConfig) {
36
+ * console.log('Base URL:', cachedConfig.baseUrl);
37
+ * console.log('Controller URL:', cachedConfig.controllerUrl);
38
+ * console.log('Client ID:', cachedConfig.clientId);
39
+ * }
40
+ * ```
41
+ */
42
+ export declare function getCachedDataClientConfig(): DataClientConfigResponse | null;
43
+ /**
44
+ * Auto-initialize DataClient with server-provided configuration
45
+ *
46
+ * Automatically:
47
+ * 1. Detects if running in browser
48
+ * 2. Checks localStorage cache first
49
+ * 3. Fetches config from server endpoint if needed
50
+ * 4. Initializes DataClient with server-provided config
51
+ * 5. Caches config for future use
52
+ *
53
+ * @param options - Optional configuration
54
+ * @returns Initialized DataClient instance
55
+ * @throws Error if initialization fails
56
+ *
57
+ * @example
58
+ * ```typescript
59
+ * import { autoInitializeDataClient } from '@aifabrix/miso-client';
60
+ *
61
+ * // One line - everything is automatic
62
+ * const dataClient = await autoInitializeDataClient();
63
+ * ```
64
+ */
65
+ export declare function autoInitializeDataClient(options?: AutoInitOptions): Promise<DataClient>;
66
+ //# sourceMappingURL=data-client-auto-init.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-client-auto-init.d.ts","sourceRoot":"","sources":["../../src/utils/data-client-auto-init.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAG3C,OAAO,EAAE,wBAAwB,EAAkC,MAAM,kCAAkC,CAAC;AAE5G;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,uEAAuE;IACvE,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB,sFAAsF;IACtF,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,qBAAqB;IACrB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IAEjC,8DAA8D;IAC9D,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AA0CD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,yBAAyB,IAAI,wBAAwB,GAAG,IAAI,CAG3E;AAoFD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAsB,wBAAwB,CAC5C,OAAO,CAAC,EAAE,eAAe,GACxB,OAAO,CAAC,UAAU,CAAC,CAyErB"}