type UserBrowserExtension = 'grammarly'; export type UserBrowserExtensionResults = UserBrowserExtension[]; type BaseOptions = { extensions: UserBrowserExtension[]; }; type AsyncOptions = BaseOptions & { async: true; asyncTimeoutMs: number; }; type SyncOptions = BaseOptions & { async?: false; asyncTimeoutMs?: never; }; type Options = BaseOptions & (SyncOptions | AsyncOptions); /** * Call this to return a list (or a Promise of a list) of detected browser extensions. * * This function supports a **synchronous** and **asynchronous** mode through options. You * must pass a list of the browser extension names you want to target for detection. * Only UserBrowserExtension extensions are supported, other target names will be silently * ignored. * * If the async option is enabled, you must also pass a final timeout by when it * should stop all detection attempts and return any partially detected extensions. * * Example usage: * ``` * // synchronously/immediately check for extensions * const extensions = sniffUserBrowserExtensions({ extensions: ['grammarly', 'requestly'] }); * // result will be ['grammarly'] or ['grammarly','requestly'] or ['requestly'] or []; * * // asynchronously check for extensions up to 30s * sniffUserBrowserExtensions({ * extensions: ['grammarly', 'requestly'], * async: true, * asyncTimeoutMs: 30000, * }).then(extensions => { * // result will be ['grammarly'] or ['grammarly','requestly'] or ['requestly'] or []; * }) * ``` */ export declare function sniffUserBrowserExtensions(options: O): O extends AsyncOptions ? Promise : UserBrowserExtensionResults; export {};