import type { Analytics, Context, Plugin } from '@segment/analytics-next'; import type { BaseDefinition, BaseActionDefinition, ExecuteInput, JSONLikeObject, GlobalSetting, JSONValue } from '@segment/actions-core'; export type ActionInput = ExecuteInput & { analytics: Analytics; context: Context; }; export interface BrowserActionDefinition extends BaseActionDefinition { perform: (client: Client, data: ActionInput) => Promise | unknown; platform: 'web'; lifecycleHook?: Plugin['type']; } export interface BrowserDestinationDependencies { loadScript: (src: string, attributes?: Record) => Promise; resolveWhen: (condition: () => boolean, timeout?: number) => Promise; } export type InitializeOptions = { settings: Settings; analytics: Analytics; }; export interface BrowserDestinationDefinition extends BaseDefinition { mode: 'device'; initialize: (options: InitializeOptions, dependencies: BrowserDestinationDependencies) => Promise; settings?: Record; actions: Record>; } export interface Subscription { partnerAction: string; name: string; enabled: boolean; subscribe: string; mapping: JSONLikeObject; } export interface PluginFactory { (settings: JSONValue): Plugin[] | Promise; pluginName: string; }