dynim-react 1.0.24 → 1.0.26

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.
@@ -1 +1 @@
1
- {"version":3,"file":"BuilderProvider.d.ts","sourceRoot":"","sources":["../../src/builder/BuilderProvider.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"BuilderProvider.d.ts","sourceRoot":"","sources":["../../src/builder/BuilderProvider.tsx"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { jsxs as _jsxs, Fragment as _Fragment, jsx as _jsx } from "react/jsx-runtime";
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
2
  /**
3
3
  * BuilderProvider - React integration for the visual builder
4
4
  *
@@ -27,6 +27,9 @@ export function BuilderProvider({ children, config = {}, onBuilderReady, }) {
27
27
  // Track builder active state - use BOTH ref (for sync checks in callbacks) and state (for renders)
28
28
  const isBuilderActiveRef = useRef(false);
29
29
  const [isBuilderActive, setIsBuilderActive] = useState(false);
30
+ // Cached auth token and in-flight promise for fast subsequent loads
31
+ const cachedTokenRef = useRef(null);
32
+ const tokenPromiseRef = useRef(null);
30
33
  // Signal counter for triggering bundle loads - ONLY incremented when we decide to load
31
34
  // This avoids the dependency cascade problem with the old approach
32
35
  const [bundleLoadSignal, setBundleLoadSignal] = useState(0);
@@ -36,6 +39,8 @@ export function BuilderProvider({ children, config = {}, onBuilderReady, }) {
36
39
  apiBaseRef.current = config.apiBase || 'http://localhost:8080';
37
40
  const [isBundleLoaded, setIsBundleLoaded] = useState(false);
38
41
  const [isBundleLoading, setIsBundleLoading] = useState(false);
42
+ // Track if initial bundle load has completed (to avoid flash of children)
43
+ const [isInitialLoadComplete, setIsInitialLoadComplete] = useState(false);
39
44
  const [codeMessage, setCodeMessage] = useState({
40
45
  thinking: '',
41
46
  text: '',
@@ -178,21 +183,41 @@ export function BuilderProvider({ children, config = {}, onBuilderReady, }) {
178
183
  }
179
184
  }, []);
180
185
  /**
181
- * Get auth token for bundle requests
186
+ * Get auth token for bundle requests (with caching for performance)
187
+ * Returns cached token if available, otherwise fetches and caches.
188
+ * Reuses in-flight promise to avoid duplicate requests.
182
189
  */
183
190
  const getAuthToken = useCallback(async () => {
184
191
  const { sessionToken, getSession } = config;
192
+ // Fast path: static token from config
185
193
  if (sessionToken) {
186
194
  return sessionToken;
187
195
  }
196
+ // Fast path: return cached token
197
+ if (cachedTokenRef.current) {
198
+ return cachedTokenRef.current;
199
+ }
200
+ // Reuse in-flight promise if one exists (prevents duplicate getSession calls)
201
+ if (tokenPromiseRef.current) {
202
+ return tokenPromiseRef.current;
203
+ }
188
204
  if (getSession) {
189
- try {
190
- const session = await getSession();
191
- return session.token;
192
- }
193
- catch (e) {
194
- console.warn('[BuilderProvider] Failed to get session for bundle auth:', e);
195
- }
205
+ // Create and cache the promise
206
+ tokenPromiseRef.current = (async () => {
207
+ try {
208
+ const session = await getSession();
209
+ cachedTokenRef.current = session.token; // Cache for future use
210
+ return session.token;
211
+ }
212
+ catch (e) {
213
+ console.warn('[BuilderProvider] Failed to get session for bundle auth:', e);
214
+ return null;
215
+ }
216
+ finally {
217
+ tokenPromiseRef.current = null; // Clear in-flight promise
218
+ }
219
+ })();
220
+ return tokenPromiseRef.current;
196
221
  }
197
222
  return null;
198
223
  }, [config]);
@@ -278,6 +303,16 @@ export function BuilderProvider({ children, config = {}, onBuilderReady, }) {
278
303
  useEffect(() => {
279
304
  loadBundleRef.current = loadBundle;
280
305
  }, [loadBundle]);
306
+ // PERF: Eagerly prefetch auth token on mount (runs in parallel with render)
307
+ // This ensures the token is ready by the time we need to fetch the bundle
308
+ useEffect(() => {
309
+ const { sessionToken, getSession } = config;
310
+ if (!sessionToken && getSession) {
311
+ // Start fetching token immediately - don't await, just fire and forget
312
+ // The result will be cached in cachedTokenRef for when loadBundle needs it
313
+ getAuthToken();
314
+ }
315
+ }, []); // Empty deps - only run once on mount
281
316
  // Auto-load saved bundle on mount (if authenticated)
282
317
  // This ensures the permanent bundle is displayed immediately when the app loads
283
318
  useEffect(() => {
@@ -287,6 +322,7 @@ export function BuilderProvider({ children, config = {}, onBuilderReady, }) {
287
322
  // Need auth to load bundle - if no auth configured, just render children
288
323
  if (!sessionToken && !getSession) {
289
324
  console.log('[BuilderProvider] No auth configured, skipping initial bundle load');
325
+ setIsInitialLoadComplete(true); // Mark complete so children render
290
326
  return;
291
327
  }
292
328
  hasAttemptedInitialLoadRef.current = true;
@@ -302,6 +338,12 @@ export function BuilderProvider({ children, config = {}, onBuilderReady, }) {
302
338
  // 404 means no saved bundle - that's fine, children will render
303
339
  console.log('[BuilderProvider] Initial bundle load completed (may be 404 if no saved bundle)');
304
340
  }
341
+ finally {
342
+ setIsInitialLoadComplete(true); // Mark complete regardless of outcome
343
+ }
344
+ }
345
+ else {
346
+ setIsInitialLoadComplete(true); // No loader available, show children
305
347
  }
306
348
  };
307
349
  doInitialLoad();
@@ -467,9 +509,16 @@ export function BuilderProvider({ children, config = {}, onBuilderReady, }) {
467
509
  }, [contextValue, onBuilderReady]);
468
510
  // Render the appropriate content based on state
469
511
  const renderContent = () => {
470
- // Loading state
512
+ // Initial load in progress - show nothing to prevent flash of children
513
+ // This only applies to the first load; subsequent loads show current content
514
+ if (!isInitialLoadComplete) {
515
+ return null;
516
+ }
517
+ // Loading state (after initial load) - keep showing current content
471
518
  if (isBundleLoading) {
472
- return children; // Show children while loading (no flash)
519
+ // If we have TenantApp, keep showing it during reload
520
+ // Otherwise show children (this is a subsequent load, not initial)
521
+ return TenantApp ? _jsx(TenantApp, {}) : children;
473
522
  }
474
523
  // Error state - show error banner with children
475
524
  if (bundleError) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dynim-react",
3
- "version": "1.0.24",
3
+ "version": "1.0.26",
4
4
  "type": "module",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",