@quartal/bridge-client
Version:
Universal client library for embedding applications with URL-configurable transport support (iframe, postMessage) and framework adapters for Angular and Vue
79 lines • 2.51 kB
TypeScript
import { ParentClient, ParentCallbacks } from '../parent/parent-client';
import { ParentClientConfig } from '../types';
/**
* Global Parent Client Manager
*
* This singleton manages the parent client lifecycle at the application level
* instead of component level, preventing unnecessary destruction/recreation
* when navigating between views.
*
* Benefits:
* - Faster navigation (no reconnection overhead)
* - No connection state issues
* - Framework agnostic (works with Angular, Vue, React, etc.)
* - Better resource management
* - Scalable for multiple partners
*/
export declare class ParentClientManager {
private static instance;
private parentClient;
private activeIframeCount;
private config;
private callbacks;
private logger;
private constructor();
/**
* Get singleton instance
*/
static getInstance(): ParentClientManager;
/**
* Initialize or get existing parent client
* This should be called when the first iframe component is created
*/
initializeParentClient(config: ParentClientConfig, callbacks?: ParentCallbacks): ParentClient;
/**
* Get existing parent client (if any)
*/
getParentClient(): ParentClient | null;
/**
* Update the iframe element for an existing parent client
* This is useful when navigating back to a component with a new iframe element
*/
updateIframeElement(iframeElement: HTMLIFrameElement): boolean;
/**
* Register an iframe component (increases reference count)
*/
registerIframeComponent(): void;
/**
* Unregister an iframe component (decreases reference count)
* Parent client is kept alive for reuse when navigating back
*/
unregisterIframeComponent(): void;
/**
* Update callbacks without recreating the client
*/
updateCallbacks(newCallbacks: Partial<ParentCallbacks>): void;
/**
* Force destroy the parent client (use sparingly)
*/
forceDestroy(): void;
/**
* Check if current config matches the stored config
*/
private configMatches;
/**
* Get current stats for debugging
*/
getStats(): {
hasClient: boolean;
activeIframeCount: number;
isConnected: boolean;
};
/**
* Reset singleton instance for testing purposes
* @internal
*/
static resetForTesting(): void;
}
export declare const parentClientManager: ParentClientManager;
//# sourceMappingURL=parent-client-manager.d.ts.map