UNPKG

ashish-sdk

Version:
563 lines (562 loc) 17.4 kB
/** * Copyright (c) 2022 * * TypeScript type definitions for ThoughtSpot Visual Embed SDK * * @summary Type definitions for Embed SDK * @author Ayon Ghosh <ayon.ghosh@thoughtspot.com> */ /** * The authentication mechanism for allowing access to the * the embedded app */ export declare enum AuthType { /** * No authentication. Use this only for testing purposes. */ None = "None", /** * SSO using SAML */ SSO = "SSO_SAML", /** * SSO using OIDC */ OIDC = "SSO_OIDC", /** * Trusted authentication server */ AuthServer = "AuthServer", /** * Use the ThoughtSpot login API to authenticate to the cluster directly. * * Warning: This feature is primarily intended for developer testing. It is * strongly advised not to use this authentication method in production. */ Basic = "Basic" } export declare type DOMSelector = string | HTMLElement; /** * The configuration object for embedding ThoughtSpot content. * It includes the ThoughtSpot hostname or IP address, * the type of authentication, and the authentication endpoint * if a trusted authentication server is used. */ export interface EmbedConfig { /** * The ThoughtSpot cluster hostname or IP address. */ thoughtSpotHost: string; /** * The authentication mechanism to use. */ authType: AuthType; /** * [AuthServer] The trusted authentication endpoint to use to get the * authentication token. A GET request is made to the * authentication API endpoint, which returns the token * as a plaintext response. For trusted authentication, * the `authEndpoint` or `getAuthToken` attribute is required. */ authEndpoint?: string; /** * [AuthServer] A function that invokes the trusted authentication endpoint * and returns a Promise that resolves to the `auth token` string. * For trusted authentication, the `authEndpoint` or `getAuthToken` * attribute is required. */ getAuthToken?: () => Promise<string>; /** * [AuthServer / Basic] The user name of the ThoughtSpot user. This attribute is * required for trusted authentication. */ username?: string; /** * [Basic] The ThoughtSpot login password corresponding to the user name * * Warning: This feature is primarily intended for developer testing. It is * strongly advised not to use this authentication method in production. */ password?: string; /** * [SSO] For SSO Authentication, if `noRedirect` is set to true, it will open the SAML auth * flow in a popup, instead of redirecting browser in place. * * @default false */ noRedirect?: boolean; /** @internal */ basepath?: string; /** * Should we encode URL Query Params using base64 encoding which thoughtspot * will generate for embedding. This provides additional security to * thoughtspot clusters against Cross site scripting attacks. * @default false */ shouldEncodeUrlQueryParams?: boolean; /** * Suppress cookie access alert when third party cookies are blocked by the user's browser. * Third party cookie blocking is the default behaviour on Safari and opt-in for Firefox/Chrome. * If you set this to `true`, you are encouraged to handle `noCookieAccess` event, to show your own treatment * in this case. * @default false */ suppressNoCookieAccessAlert?: boolean; /** * Re-login when session expires with the previous login options * @default true */ autoLogin?: boolean; /** * Calls the prefetch method internally when set to true * @default false */ callPrefetch?: boolean; /** * When there are multiple embeds, queue the render of embed to start * after the previous embed's render is complete. This helps in the load performance * by decreasing the load on the browser. * @version 1.5.0 or later * @default false */ queueMultiRenders?: boolean; /** * Dynamic CSS Url to be injected in the loaded application. * You would also need to set `style-src` in the CSP settings. * @version 1.6.0 or later * @default '' */ customCssUrl?: string; } export declare type MessagePayload = { type: string; data: any; }; export declare type MessageCallback = (payload: MessagePayload, responder?: (data: any) => void) => void; export declare type GenericCallbackFn = (...args: any[]) => any; export declare type QueryParams = { [key: string]: string; }; /** * A map of the supported runtime filter operations */ export declare enum RuntimeFilterOp { /** * Equals */ EQ = "EQ", /** * Does not equal */ NE = "NE", /** * Less than */ LT = "LT", /** * Less than or equal to */ LE = "LE", /** * Greater than */ GT = "GT", /** * Greater than or equal to */ GE = "GE", /** * Contains */ CONTAINS = "CONTAINS", /** * Begins with */ BEGINS_WITH = "BEGINS_WITH", /** * Ends with */ ENDS_WITH = "ENDS_WITH", /** * Between, inclusive of higher value */ BW_INC_MAX = "BW_INC_MAX", /** * Between, inclusive of lower value */ BW_INC_MIN = "BW_INC_MIN", /** * Between, inclusive of both higher and lower value */ BW_INC = "BW_INC", /** * Between, non-inclusive */ BW = "BW", /** * Is included in this list of values */ IN = "IN" } /** * A filter that can be applied to ThoughtSpot answers, Liveboards, or * visualizations at runtime. */ export interface RuntimeFilter { /** * The name of the column to filter on (case-sensitive) */ columnName: string; /** * The operator to apply */ operator: RuntimeFilterOp; /** * The list of operands. Some operators like EQ, LE accept * a single operand, whereas other operators like BW and IN accept multiple operands. */ values: (number | boolean | string)[]; } /** * Event types emitted by the embedded ThoughtSpot application. */ export declare enum EmbedEvent { /** * Rendering has initialized. * @return timestamp - The timestamp when the event was generated. */ Init = "init", /** * Authentication has either succeeded or failed. * @return isLoggedIn - A Boolean specifying whether authentication was successful. */ AuthInit = "authInit", /** * The embed object container has loaded. * @return timestamp - The timestamp when the event was generated. */ Load = "load", /** * Data pertaining to answer or Liveboard is received * @return data - The answer or Liveboard data */ Data = "data", /** * Search/answer/Liveboard filters have been applied/updated * @hidden */ FiltersChanged = "filtersChanged", /** * Search query has been updated */ QueryChanged = "queryChanged", /** * A drill down operation has been performed. * @return additionalFilters - Any additional filters applied * @return drillDownColumns - The columns on which drill down was performed * @return nonFilteredColumns - The columns that were not filtered */ Drilldown = "drillDown", /** * One or more data sources have been selected. * @return dataSourceIds - the list of data sources */ DataSourceSelected = "dataSourceSelected", /** * One or more data columns have been selected. * @return columnIds - the list of columns * @version SDK: 1.9.0 | ThoughtSpot: 8.2.0.cl */ AddRemoveColumns = "addRemoveColumns", /** * A custom action has been triggered * @return actionId - The id of the custom action * @return data - The answer or Liveboard data */ CustomAction = "customAction", /** * A click has been triggered on table/chart * @return ContextMenuInputPoints - data point that is double clicked * @version 1.10.0 */ VizPointClick = "vizPointClick", /** * A double click has been triggered on table/chart * @return ContextMenuInputPoints - data point that is double clicked * @version 1.5.0 or later */ VizPointDoubleClick = "vizPointDoubleClick", /** * Event troggered when rendering a chart, call the supplied * callback with the config overrides. * @version 1.10.0 */ GetVizConfigOverrides = "getVizConfigOverrides", /** * An error has occurred. * @return error - An error object or message */ Error = "Error", /** * The embedded object has sent an alert * @return alert - An alert object */ Alert = "alert", /** * The ThoughtSpot auth session has expired. */ AuthExpire = "ThoughtspotAuthExpired", /** * The height of the embedded Liveboard or visualization has been computed. * @return data - The height of the embedded Liveboard or visualization * @hidden */ EmbedHeight = "EMBED_HEIGHT", /** * The center of visible iframe viewport is calculated. * @return data - The center of the visible Iframe viewport. * @hidden */ EmbedIframeCenter = "EmbedIframeCenter", /** * Detects the route change. */ RouteChange = "ROUTE_CHANGE", /** * The v1 event type for Data * @hidden */ V1Data = "exportVizDataToParent", /** * Emitted when the embed does not have cookie access. This * happens on Safari where third-party cookies are blocked by default. * * @version 1.1.0 or later */ NoCookieAccess = "noCookieAccess", /** * Emitted when SAML is complete * @private * @hidden */ SAMLComplete = "samlComplete", /** * Emitted when any modal is opened in the app * @version 1.6.0 or later */ DialogOpen = "dialog-open", /** * Emitted when any modal is closed in the app * @version 1.6.0 or later */ DialogClose = "dialog-close" } /** * Event types that can be triggered by the host application * to the embedded ThoughtSpot app * * To trigger an event use the corresponding * {@link LiveboardEmbed.trigger} or {@link AppEmbed.trigger} or {@link SearchEmbed.trigger} method. */ export declare enum HostEvent { /** * Trigger a search * @param dataSourceIds - The list of data source GUIDs * @param searchQuery - The search query */ Search = "search", /** * Trigger a drill on certain points by certain column * @param points - an object containing selectedPoints/clickedPoints * eg. { selectedPoints: []} * @param columnGuid - a string guid of the column to drill by. This is optional, * if not provided it will auto drill by the configured column. \ * @version 1.5.0 or later */ DrillDown = "triggerDrillDown", /** * Apply filters * @hidden */ Filter = "filter", /** * Reload the answer or visualization * @hidden */ Reload = "reload", /** * Set the visible visualizations on a Liveboard. * @param - an array of ids of visualizations to show, the ids not passed * will be hidden. * @version 1.6.0 or later */ SetVisibleVizs = "SetPinboardVisibleVizs", /** * Update the runtime filters. The runtime filters passed here are extended * on to the existing runtime filters if they exist. * @param - {@link RuntimeFilter}[] an array of {@link RuntimeFilter} Types. * @version 1.8.0 or later */ UpdateRuntimeFilters = "UpdateRuntimeFilters", /** * Highlight the point in the chart defined by the InputPoint passed. * @verion 1.10.0 */ HighlightPoint = "HighlightPoint" } /** * The different visual modes that the data sources panel within * search could appear in, i.e., hidden, collapsed, or expanded. */ export declare enum DataSourceVisualMode { /** * Data source panel is hidden. */ Hidden = "hide", /** * Data source panel is collapsed, but the user can manually expand it. */ Collapsed = "collapse", /** * Data source panel is expanded, but the user can manually collapse it. */ Expanded = "expand" } /** * The query params passed down to the embedded ThoughtSpot app * containing configuration and/or visual information. */ export declare enum Param { DataSources = "dataSources", DataSourceMode = "dataSourceMode", DisableActions = "disableAction", DisableActionReason = "disableHint", ForceTable = "forceTable", preventLiveboardFilterRemoval = "preventPinboardFilterRemoval", SearchQuery = "searchQuery", HideActions = "hideAction", HideObjects = "hideObjects", HostAppUrl = "hostAppUrl", EnableVizTransformations = "enableVizTransform", EnableSearchAssist = "enableSearchAssist", HideResult = "hideResult", UseLastSelectedDataSource = "useLastSelectedSources", Tag = "tag", searchTokenString = "searchTokenString", executeSearch = "executeSearch", fullHeight = "isFullHeightPinboard", livedBoardEmbed = "isLiveboardEmbed", searchEmbed = "isSearchEmbed", Version = "sdkVersion", ViewPortHeight = "viewPortHeight", ViewPortWidth = "viewPortWidth", VisibleActions = "visibleAction", CustomCSSUrl = "customCssUrl" } /** * The list of actions that can be performed on visual ThoughtSpot * entities, such as answers and Liveboards. */ export declare enum Action { Save = "save", Update = "update", SaveUntitled = "saveUntitled", SaveAsView = "saveAsView", MakeACopy = "makeACopy", EditACopy = "editACopy", CopyLink = "embedDocument", ResetLayout = "resetLayout", Schedule = "subscription", SchedulesList = "schedule-list", Share = "share", AddFilter = "addFilter", ConfigureFilter = "configureFilter", AddFormula = "addFormula", SearchOnTop = "searchOnTop", SpotIQAnalyze = "spotIQAnalyze", ExplainInsight = "explainInsight", SpotIQFollow = "spotIQFollow", ShareViz = "shareViz", ReplaySearch = "replaySearch", ShowUnderlyingData = "showUnderlyingData", Download = "download", DownloadAsPdf = "downloadAsPdf", DownloadAsCsv = "downloadAsCSV", DownloadAsXlsx = "downloadAsXLSX", DownloadTrace = "downloadTrace", ExportTML = "exportTSL", ImportTML = "importTSL", UpdateTML = "updateTSL", EditTML = "editTSL", Present = "present", ToggleSize = "toggleSize", Edit = "edit", EditTitle = "editTitle", Remove = "delete", Ungroup = "ungroup", Describe = "describe", Relate = "relate", CustomizeHeadlines = "customizeHeadlines", /** * @hidden */ PinboardInfo = "pinboardInfo", LiveboardInfo = "pinboardInfo", SendAnswerFeedback = "sendFeedback", DownloadEmbraceQueries = "downloadEmbraceQueries", Pin = "pin", AnalysisInfo = "analysisInfo", Subscription = "subscription", Explore = "explore", DrillInclude = "context-menu-item-include", DrillExclude = "context-menu-item-exclude", CopyToClipboard = "context-menu-item-copy-to-clipboard", CopyAndEdit = "context-menu-item-copy-and-edit", DrillEdit = "context-menu-item-edit", EditMeasure = "context-menu-item-edit-measure", Separator = "context-menu-item-separator", DrillDown = "DRILL", RequestAccess = "requestAccess", QueryDetailsButtons = "queryDetailsButtons", /** * @version SDK: 1.8.0 | ThoughtSpot: 8.1.0.cl */ Monitor = "createMonitor", /** * @version SDK: 1.8.0 | ThoughtSpot: 8.1.0.cl */ AnswerDelete = "onDeleteAnswer", /** * @version SDK: 1.8.0 | ThoughtSpot: 8.1.0.cl */ AnswerChartSwitcher = "answerChartSwitcher", /** * @version SDK: 1.8.0 | ThoughtSpot: 8.1.0.cl */ AddToFavorites = "addToFavorites", /** * @version SDK: 1.8.0 | ThoughtSpot: 8.1.0.cl */ EditDetails = "editDetails" } export interface SessionInterface { sessionId: string; genNo: number; acSession: { sessionId: string; genNo: number; }; } export declare enum OperationType { GetChartWithData = "GetChartWithData", GetTableWithHeadlineData = "GetTableWithHeadlineData" } export interface AnswerServiceType { getAnswer?: (offset: number, batchSize: number) => any; } export interface Plugin { name: string; handlers: { [key in EmbedEvent]?: (payload: any, cb: (data: any) => void) => void; }; }