crann
Version:
Effortless State Synchronization for Web Extensions
62 lines (61 loc) • 2.94 kB
TypeScript
import { DerivedInstanceState, DerivedServiceState, DerivedState, CrannOptions, AnyConfig, StateChangeListener, MergeStateTypes } from "./model/crann.model";
import { AgentInfo, Agent } from "porter-source";
import { BrowserLocation } from "porter-source";
export declare class Crann<TConfig extends AnyConfig> {
private config;
private static instance;
private instances;
private defaultServiceState;
private defaultInstanceState;
private serviceState;
private stateChangeListeners;
private instanceReadyListeners;
private storagePrefix;
private porter;
private rpcEndpoint;
private logger;
constructor(config: TConfig, options?: CrannOptions);
static getInstance<TConfig extends AnyConfig>(config: TConfig, options?: CrannOptions): Crann<TConfig>;
/**
* Add an instance to the Crann instance.
* @param key The key of the instance to add.
* @param agentTag The tag of the agent that is adding the instance, for logging.
*/
private addInstance;
private removeInstance;
setServiceState(state: Partial<DerivedServiceState<TConfig>>): Promise<void>;
setInstanceState(key: string, state: Partial<DerivedInstanceState<TConfig>>): Promise<void>;
private persist;
clear(): Promise<void>;
subscribe(listener: StateChangeListener<TConfig>): void;
private notify;
get(): DerivedState<TConfig>;
get(key: string): DerivedInstanceState<TConfig> & DerivedServiceState<TConfig>;
findInstance(location: BrowserLocation): string | null;
queryAgents(query: Partial<BrowserLocation>): Agent[];
set(state: Partial<DerivedServiceState<TConfig>>): Promise<void>;
set(state: Partial<MergeStateTypes<DerivedInstanceState<TConfig>, DerivedServiceState<TConfig>>>, key: string): Promise<void>;
private hydrate;
private removePrefix;
private initializeInstanceDefault;
private initializeServiceDefault;
subscribeToInstanceReady(listener: (instanceId: string, agent: AgentInfo) => void): () => void;
private notifyInstanceReady;
private extractActions;
}
export interface CrannAPI<TConfig extends AnyConfig> {
get: {
(): DerivedState<TConfig>;
(key: string): DerivedInstanceState<TConfig> & DerivedServiceState<TConfig>;
};
set: {
(state: Partial<DerivedServiceState<TConfig>>): Promise<void>;
(state: Partial<MergeStateTypes<DerivedInstanceState<TConfig>, DerivedServiceState<TConfig>>>, key: string): Promise<void>;
};
subscribe: (listener: StateChangeListener<TConfig>) => void;
onInstanceReady: (listener: (instanceId: string, agent: AgentInfo) => void) => () => void;
findInstance: (location: BrowserLocation) => string | null;
queryAgents: (query: Partial<BrowserLocation>) => Agent[];
clear: () => Promise<void>;
}
export declare function create<TConfig extends AnyConfig>(config: TConfig, options?: CrannOptions): CrannAPI<TConfig>;