diff --git a/.snyk b/.snyk index 83aa8f48e..6cbd6abd1 100644 --- a/.snyk +++ b/.snyk @@ -5,6 +5,6 @@ ignore: 'snyk:lic:npm:vercel:analytics:MPL-2.0': - '*': reason: 'MPL-2.0 license is acceptable for our use case' - expires: 2025-07-26T20:33:41.647Z + expires: 2026-07-26T20:33:41.647Z created: 2024-03-27T20:33:41.649Z -patch: {} \ No newline at end of file +patch: {} diff --git a/modules/ROOT/pages/common/nav.adoc b/modules/ROOT/pages/common/nav.adoc index 210dd0929..39575944d 100644 --- a/modules/ROOT/pages/common/nav.adoc +++ b/modules/ROOT/pages/common/nav.adoc @@ -152,7 +152,8 @@ include::generated/typedoc/CustomSideNav.adoc[] *** link:{{navprefix}}/prefetch[Prefetch static resources] *** link:{{navprefix}}/prerender[Prerender components] ** link:{{navprefix}}/security-settings[Security settings] -*** link:{{navprefix}}/external-tool-script-integration[Integrate external tools and scripts] +** link:{{navprefix}}/external-tool-script-integration[Integrate external tools and scripts] +*** link:{{navprefix}}/pendo-integration[Pendo integration with embed] ** Other embedding methods *** link:{{navprefix}}/embed-without-sdk[Embed without SDK] *** link:{{navprefix}}/custom-viz-rest-api[Create a custom visualization] diff --git a/modules/ROOT/pages/deprecated-features.adoc b/modules/ROOT/pages/deprecated-features.adoc index 6af1317a0..368f08f25 100644 --- a/modules/ROOT/pages/deprecated-features.adoc +++ b/modules/ROOT/pages/deprecated-features.adoc @@ -14,6 +14,9 @@ As ThoughtSpot applications evolve, some existing features will be deprecated an [options='header'] |===== |Feature|Impacted interface and release versions|Deprecation date |End of Support / removal from the product +a|xref:deprecated-features.adoc#restApiPlayground[REST API v1 Playground] a| ThoughtSpot Cloud 10.14.0.cl and later +|November 2025 | November 2025 + a|xref:deprecated-features.adoc#SageDeprecationNotice[Sage Search and Ask Sage] a| * ThoughtSpot Cloud 10.13.0.cl and later * Visual Embed SDK version 1.40.0 and later @@ -73,6 +76,17 @@ a|xref:deprecated-features.adoc#_deprecated_parameter_in_rest_api_v2_0_authentic |||| |===== +[#restApiPlayground] +== REST API v1 Playground deprecation + +The REST API v1 Playground experience that is currently available from the *Develop* page of the ThoughtSpot UI will be removed from the UI in the 10.14.0.cl release version. + +Impact on your instance:: +Only the REST API v1 Playground will be removed from the ThoughtSpot UI. However, the REST API v1 endpoints will still be available for API calls from client applications and will continue to function as usual. + +Recommended action:: +When the REST API v1 Playground is no longer available in the ThoughtSpot UI, use the xref:rest-api-reference.adoc[REST API v1 Reference Guide] for information about the REST API v1 endpoints, request and response flows. Additionally, ThoughtSpot recommends that you gradually migrate your application workflows to REST API v2 endpoints. The REST API v2 framework is regularly updated with new enhancements and bug fixes, and also offers a more standardized API experience. + [#SageDeprecationNotice] == Sage and Ask Sage deprecation diff --git a/modules/ROOT/pages/pendo-integration.adoc b/modules/ROOT/pages/pendo-integration.adoc new file mode 100644 index 000000000..84b093340 --- /dev/null +++ b/modules/ROOT/pages/pendo-integration.adoc @@ -0,0 +1,195 @@ += Integrate Pendo with ThoughtSpot Embed +:toc: true +:toclevels: 2 + +:page-title: Pendo integration guide +:page-pageid: pendo-integration +:page-description: This document describes how to intregate Pendo in your embed experience. + +To launch Pendo guides and analytics within your ThoughtSpot embed, you must integrate Pendo with your embed environment. This integration typically requires adding a custom JavaScript to enable product tours, feature announcements, and usage tracking within the embedded experience. + +[IMPORTANT] +==== +* By default, the third-party tool integration feature is disabled on ThoughtSpot instances. To enable this feature, contact ThoughtSpot Support. + +* ThoughtSpot strongly recommends that you review your organization's security guidelines and assess potential security risks associated with the injection of custom scripts and third-party tools. Malicious scripts introduce XSS risks and can compromise user data and application integrity. Both ThoughtSpot Support and the customer must explicitly approve and enable the integration to ensure that only vetted and trusted script URLs are allowed in the embed app. +==== + +== Before you begin +Pendo integration with ThoughtSpot embed requires the following: + +* Access to Pendo + +If you do not have a Pendo account, link:https://app.pendo.io/register[sign up for Pendo or use a trial, window=_blank] account. +* Access to a ThoughtSpot instance. You need administrator privileges to enable Pendo integration. +* Approval from ThoughtSpot Support for Pendo integration. +* A publicly accessible domain to host your integration script. + +== Step 1: Sign in to your Pendo Account + +To integrate Pendo in your ThoughtSpot embed, you'll require a script. Before creating the script or using the script provided by ThoughtSpot: + +. Sign in to your Pendo account. +. Identify the information you want to capture. +. Define visitors and accounts, and segment data. + +The above information will be used as metadata in the Pendo install script. For more information, refer to the link:https://support.pendo.io/hc/en-us/articles/21326198721563-Choose-IDs-and-metadata[Pendo Documentation, window=_blank]. + +== Step 2: Create an integration script + +The integration requires a script that is designed to install and initialize the Pendo agent within your embed environment. You can either create your own integration script or use the xref:pendo-integration.adoc#_sample_javascript_for_pendo_integration[sample JavaScript] provided by ThoughtSpot. + +The integration script typically includes the following components: + +* A JavaScript function that includes the initialize method required to retrieve, activate, and load the Pendo agent, `pendo.js`. +* The Pendo client key that is unique to each customer account. It maps the metadata to your Pendo subscription. +* Pendo visitor configuration that identifies the user (visitor). +* Pendo account configuration that identifies the account (organization or user group) to which the user belongs + +The client key and configuration metadata for Pendo visitor and account must be passed to the script via the xref:pendo-integration.adoc#_step_6_define_custom_variables_in_the_visual_embed_sdk[customVariablesForThirdPartyTools] object in the Visual Embed SDK to identify users and accounts for tracking, segmentation, and personalized experiences within Pendo. + +For more information about the Pendo configuration metadata, script creation and its components, refer to the following articles in the Pendo documentation: + +* link:https://support.pendo.io/hc/en-us/articles/360046272771-Developer-s-guide-to-implementing-Pendo-using-the-install-script[Developer's guide to implementing Pendo using the install script, window=_blank] +* link:https://support.pendo.io/hc/en-us/articles/21362607464987-Components-of-the-install-script#01H6S2EXET8C9FGSHP08XZAE4F[Components of the install script, window=_blank] +* link:https://support.pendo.io/hc/en-us/articles/21326198721563-Choose-IDs-and-metadata[Pendo configuration metadata, window=_blank] + +=== Sample JavaScript for Pendo integration +To assist you with the Pendo integration process, ThoughtSpot provides a sample JavaScript, `pendoIntegrationScript.js`. You can find this sample JavaScript in the link:https://github.com/thoughtspot/developer-examples/blob/main/visual-embed/pendo-integration/pendoIntegrationScript.js[ThoughtSpot Developer examples, window=_blank] GitHub repository. + +The `pendoIntegrationScript.js` script is designed to perform the following actions: + +* Access custom variables defined in the SDK. It waits for the Visual Embed SDK to initialize and load. +* Wait for the user to authenticate successfully and receive information such as user ID, name, email, groups, and account details from the Visual Embed SDK. +* Initialize Pendo with the metadata and key, so that Pendo can track the user and their actions within the embedded app. + +//// +* Update Pendo on navigation + +Whenever the user navigates to a new page or context within the embedded ThoughtSpot app, the script updates Pendo with the new context information. + +It also listens for navigation events within the embedded ThoughtSpot app to capture the current page or context. +//// + +== Step 3: Host the script on a public site + +When your integration script is ready, host it on a publicly accessible domain, such as AWS S3, Azure Blob, or a trusted CDN. + +Note the hosting domain. + +[NOTE] +==== +If you anticipate frequent updates to the script, choose a hosting service that allows content overrides without changing the URL. If you use the same hosting URL, you don't need to request approval from Support each time the script is modified. +==== + +== Step 4: Contact ThoughtSpot Support to enable integration + +Create a ThoughtSpot Support request to enable Pendo integration with your ThoughtSpot Embed. + +In your support request: + +* Specify the exact domain that will host your script in the embedding environment. Send the full URL path, including the `.js` extension. +* Send the script that you want to integrate. + +Wait for ThoughtSpot Support to validate and approve your request. This step is required to ensure that only scripts from the vetted domain are allowed to run in your embed environment. + +== Step 5: Add the Script source to the CSP Allowlist + +After ThoughtSpot enables the integration for your instance: + +. Log in to your ThoughtSpot instance as an administrator. + +. Go to the **Develop** page. + +If your instance has Orgs, switch to the *All Orgs* context. +. In the **Customizations** section, click **Security Settings**. +. Check whether the *CSP script-src domains* setting is visible on the *Security Settings* page. +. Add the domain that hosts your script to the **CSP script-src** allowlist. + +== Step 6: Define custom variables in the Visual Embed SDK + +Define the required variables in `init ()` configuration of your embed code. + +To pass the variables to your script, use the link:https://developers.thoughtspot.com/docs/Interface_EmbedConfig#_customvariablesforthirdpartytools[customVariablesForThirdPartyTools] object in the Visual Embed SDK. +The `customVariablesForThirdPartyTools` object allows you to securely pass variables, such as API keys and user/account information, to scripts loaded in the embed context. +Note that these variables include private information such as credentials or keys. The integration script will read these variables from the global window object (`window.tsEmbed`). + +Add the following variables in the `init()` configuration: + +* `pendoClientKey` + +The API key or client key to initialize Pendo +* `pendoVisitorConfig` + +The object containing Pendo visitor (user) metadata +* `pendoAccountConfig` + +The object containing Pendo account (organization) metadata + +[source,JavaScript] +---- +init({ + thoughtSpotHost: 'Your-ThoughtSpot-Host', // (Required) The URL of your ThoughtSpot instance + authType: AuthType.None, // (Required) Authentication type; 'None' is for development/testing only + // Pass custom variables for Pendo + customVariablesForThirdPartyTools: { + pendoKey: 'your-key', // Pendo API key or client key + pendoVisitorConfig: { // Pendo visitor (user) metadata + id: 'user-id', // User ID + name: 'user-name' // User's display name + }, + pendoAccountConfig: { // Pendo account (organization) metadata + id: 'account-id', // ID of the Pendo account + name: 'account-name'// Display name of the Pendo account + } + }, +}); +---- + + +The script will include the following code to access these variables via the `window.tsEmbed` object and initialize the Pendo agent in your ThoughtSpot embed environment. + +[source,JavaScript] +---- +const pendoKey = window.tsEmbed.pendoKey; +const pendoVisitorConfig = window.tsEmbed.pendoVisitorConfig; // Make sure to pass at least the id and name in the customVariablesForThirdPartyTools +const pendoAccountConfig = window.tsEmbed.pendoAccountConfig; // Make sure to pass at least the id and name in the customVariablesForThirdPartyTools +---- + +When the SDK initializes and the authentication is completed successfully, your hosted JavaScript will run seamlessly in your ThoughtSpot embed environment. + +== Step 7: Validate and test Pendo integration +To validate and test Pendo integration in your embed: + +. Log in to your embedded ThoughtSpot application as an end user. +. Open browser dev tools and verify if the network requests are being sent to Pendo. ++ +[.bordered] +[.widthAuto] +-- +image::./images/pendo-dev-console.png[Dev console verification] +-- +. If your integration script includes validation checks with `pendo.validateEnvironment()`, you can verify the logs in the console to confirm if the script is executed successfully and initializes as expected. You can also enable debug logs by adding `logLevel: LogLevel.DEBUG` to your `init` code. + +For more information about `pendo.validateEnvironment()`, see the "Verify the installation" section in the link:https://support.pendo.io/hc/en-us/articles/360046272771-Developer-s-guide-to-implementing-Pendo-using-the-install-script[Pendo Documentation, window=_blank] or refer to the link:https://github.com/thoughtspot/developer-examples/blob/524ef13121fcae4756a951648e3e6dc4bb29aa26/visual-embed/pendo-integration/pendoIntegrationScript.js#L108[sample script provided by ThoughtSpot, window=_blank]. + + +. Log in to Pendo to create a sample guide for your ThoughtSpot application instance. +. Verify if the Pendo guide is published in the ThoughtSpot UI. available. + +In the following figure shows the sample Pendo element assigned to the information badge next to Watchlist on the ThoughtSpot Home page: ++ +[.bordered] +[.widthAuto] +-- +image::./images/pendo_info_icon.png[Dev console verification] +-- + +== Troubleshooting + +If the script is not loading: + +* Check the browser console for CSP or network errors. +* Check the CSP allowlist in ThoughtSpot to ensure the domain hosting URL is allowed. + +If the variables are not available: + +* Check if the SDK is initialized and the variables are passed in the `customVariablesForThirdPartyTools` object in the `init()` function in the SDK. +* Check whether your script has access to `window.tsEmbed` after the embed has initialized. + +== Additional resources + +* link:https://github.com/thoughtspot/developer-examples/blob/524ef13121fcae4756a951648e3e6dc4bb29aa26/visual-embed/pendo-integration/pendoIntegrationScript.js[ThoughtSpot Developer examples GitHub repository, window=_blank] +* link:https://www.pendo.io/resources/getting-started-with-pendo/[Pendo Getting Started Guide] +* link:https://support.pendo.io/hc/en-us/articles/360046272771-Developer-s-guide-to-implementing-Pendo-using-the-install-script[Pendo Documentation, window=_blank] +* link:https://codesandbox.io/p/devbox/optimistic-mcclintock-lw2qq8[Code sandbox, window=_blank] diff --git a/modules/ROOT/pages/rest-api-java-sdk.adoc b/modules/ROOT/pages/rest-api-java-sdk.adoc index 3fffd1578..1422c7717 100644 --- a/modules/ROOT/pages/rest-api-java-sdk.adoc +++ b/modules/ROOT/pages/rest-api-java-sdk.adoc @@ -26,9 +26,9 @@ If you are using Maven, add the REST API Java SDK as a dependency to the POM.xml [source,xml] ---- - io.github.thoughtspot - rest-api-sdk-lib - 2.14.0 + com.thoughtspot + rest-api-sdk + 2.16.0 compile ---- @@ -37,16 +37,17 @@ If you are using Gradle, add the REST API Java SDK as a dependency to your build [source,] ---- -repositories { - mavenCentral() -} + repositories { + mavenCentral() + } -dependencies { - implementation "io.github.thoughtspot:rest-api-sdk-lib:2.14.0" + dependencies { + implementation "com.thoughtspot:rest-api-sdk:2.16.0" // Use the latest version of the SDK } ---- + == API client configuration The **ApiClientConfiguration** class in the REST API Java SDK allows configuring the settings required for API clients to call REST APIs from their application context. Use this class to specify any of the following methods and parameters: @@ -98,6 +99,7 @@ import com.thoughtspot.client.model.User; public class Example { private static final String BASE_PATH = *CLUSTER_URL*; // Your ThoughtSpot application URL + private static final String DOWNLOAD_PATH = "." // path to download files private static final String USERNAME = "tsUserA"; // Username private static final String PASSWORD = "Your-Password"; // Password @@ -108,6 +110,7 @@ public class Example { .basePath(BASE_PATH) .verifyingSsl(false) // Disable SSL verification for testing purposes .readTimeoutMillis(30000) // Extended read timeout to 30 seconds + .downloadPath(DOWNLOAD_PATH) // Defaults to system download path if not specified .build(); // Create an instance of the ThoughtSpot API client @@ -278,9 +281,9 @@ Note the recommendation of Java SDK: [options='header'] |==== |ThoughtSpot release version|Supported SDK version -a|ThoughtSpot Cloud: 10.9.0.cl | v2.14.0 or later -a|ThoughtSpot Cloud: 10.10.0.cl | v2.15.1 or later a|ThoughtSpot Cloud: 10.11.0.cl | v2.16.0 or later +a|ThoughtSpot Cloud: 10.10.0.cl | v2.15.1 or later +a|ThoughtSpot Cloud: 10.9.0.cl | v2.14.0 or later |==== diff --git a/modules/ROOT/pages/rest-api-sdk-typescript.adoc b/modules/ROOT/pages/rest-api-sdk-typescript.adoc index e1d2f819f..db6f5b378 100644 --- a/modules/ROOT/pages/rest-api-sdk-typescript.adoc +++ b/modules/ROOT/pages/rest-api-sdk-typescript.adoc @@ -203,14 +203,11 @@ Note the version recommendations for your ThoughtSpot instances: [options='header'] |==== |ThoughtSpot release version|Recommended SDK version -a|* ThoughtSpot Cloud: 9.6.0.cl + -* ThoughtSpot Software: 9.8.0.sw | v2.0.2 or later -a|* ThoughtSpot Cloud: 9.7.0.cl + -* ThoughtSpot Software: 9.8.0.sw | v2.1.0 or later -a|* ThoughtSpot Cloud: 9.8.0.cl + -* ThoughtSpot Software: 9.8.0.sw | v2.2.0 or later -a|* ThoughtSpot Cloud: 9.10.0.cl | v2.4.0 or later -a|* ThoughtSpot Cloud: 9.10.5.cl | v2.4.1 or later +a|ThoughtSpot Cloud: 10.11.0.cl | v2.16.0 or later +a|ThoughtSpot Cloud: 10.10.0.cl | v2.15.1 or later +a|ThoughtSpot Cloud: 10.9.0.cl | v2.14.0 or later +a|ThoughtSpot Cloud: 10.8.0.cl | v2.13.1 or later +a|ThoughtSpot Cloud: 10.6.0.cl | v2.12.1 or later a|* ThoughtSpot Cloud release versions: + ** 9.12.0.cl + ** 9.12.5.cl + @@ -220,11 +217,16 @@ a|* ThoughtSpot Cloud release versions: + ** 10.5.0.cl + * ThoughtSpot Software: 10.1.0.sw | v2.11.1 or later -a|ThoughtSpot Cloud: 10.6.0.cl | v2.12.1 or later -a|ThoughtSpot Cloud: 10.8.0.cl | v2.13.1 or later -a|ThoughtSpot Cloud: 10.9.0.cl | v2.14.0 or later -a|ThoughtSpot Cloud: 10.10.0.cl | v2.15.1 or later -a|ThoughtSpot Cloud: 10.11.0.cl | v2.16.0 or later +a|* ThoughtSpot Cloud: 9.10.5.cl | v2.4.1 or later +a|* ThoughtSpot Cloud: 9.10.0.cl | v2.4.0 or later +a|* ThoughtSpot Cloud: 9.8.0.cl + +* ThoughtSpot Software: 9.8.0.sw | v2.2.0 or later +a|* ThoughtSpot Cloud: 9.7.0.cl + +* ThoughtSpot Software: 9.8.0.sw | v2.1.0 or later +a|* ThoughtSpot Cloud: 9.6.0.cl + +* ThoughtSpot Software: 9.8.0.sw | v2.0.2 or later + + |==== For information about new features, breaking changes, and deprecated parameters, see xref:rest-apiv2-changelog.adoc[API changelog]. diff --git a/modules/ROOT/pages/rest-apiv2-changelog.adoc b/modules/ROOT/pages/rest-apiv2-changelog.adoc index 7ed55b330..d3e85cf8a 100644 --- a/modules/ROOT/pages/rest-apiv2-changelog.adoc +++ b/modules/ROOT/pages/rest-apiv2-changelog.adoc @@ -28,6 +28,12 @@ The API response generated from the `GET /api/rest/2.0/system/config-overrides` === TML API The API response for the `POST /api/rest/2.0/metadata/tml/async/import` and `POST /api/rest/2.0/metadata/tml/async/status` now includes the `author_display_name` property. This property shows the display name of user that initiated the asynchronous TML import request. +=== REST API Java SDK + +The REST API Java SDK library artifacts are now available in the `com.thoughtspot` Maven namespace. If you are using Maven Central to import the REST API SDK artifacts, update the group ID in your `pom.xml` file to `com.thoughtspot` and the artifact ID to `rest-api-sdk`. + +For more information, see xref:rest-api-java-sdk.adoc#_import_the_sdk_to_your_application_environment[REST API Java SDK]. + == Version 10.10.0.cl, July 2025 === Email template customization APIs: diff --git a/modules/ROOT/pages/variables.adoc b/modules/ROOT/pages/variables.adoc index f1c95abf6..cefffeb5d 100644 --- a/modules/ROOT/pages/variables.adoc +++ b/modules/ROOT/pages/variables.adoc @@ -33,7 +33,7 @@ To map Tables properties to variables. * `CONNECTION_PROPERTY` + To define variables for connection properties. This variable allows editing connection properties such as `accountName`, `warehouse`, `user`, `password`, `role` and so on. * `CONNECTION_PROPERTY_PER_PRINCIPAL` + -To define variables for connection properties per user or user group. This variable allows modifying connection properties such as `warehouse`, `role`, `user`, `password`. The `CONNECTION_PROPERTY_PER_PRINCIPLE` variables d not support modifying core connection properties such as `accountName`, `host`, or `port`. These properties must be derived from the connection configuration and cannot be set per user or user group. +To define variables for connection properties per user or user group. This variable allows modifying connection properties such as `warehouse`, `role`, `user`, `password`. The `CONNECTION_PROPERTY_PER_PRINCIPLE` variable does not support modifying core connection properties such as `accountName`, `host`, or `port`. These properties must be derived from the connection configuration and cannot be set per user or user group. [NOTE] This feature is disabled by default. To enable this option, contact ThoughtSpot Support. diff --git a/package.json b/package.json index b325c9970..d0759507f 100644 --- a/package.json +++ b/package.json @@ -105,4 +105,4 @@ "globals": { "window": {} } -} +} \ No newline at end of file diff --git a/src/assets/styles/index.scss b/src/assets/styles/index.scss index 0e5ac1d15..c5dccb4d0 100644 --- a/src/assets/styles/index.scss +++ b/src/assets/styles/index.scss @@ -20,6 +20,7 @@ html { scroll-behavior: smooth; + scroll-padding-top: 40px; /* match header height */ } body { @@ -41,6 +42,8 @@ main.withHeaderFooter { overflow: hidden; } + + * { box-sizing: border-box; } @@ -49,6 +52,16 @@ strong, b { font-weight: bold; } +.anchor { + display: block; + padding-top: 80px; /* height of sticky header */ + margin-top: -80px; +} + +.anchor-link { + scroll-margin: 120px; +} + a { text-decoration: none; } @@ -580,7 +593,6 @@ a.anchor { visibility: hidden; font-size: 0.8em; font-weight: 400; - padding-top: 0.05em; } .introCard { diff --git a/src/components/Document/index.scss b/src/components/Document/index.scss index 21300cf0f..7adb26298 100644 --- a/src/components/Document/index.scss +++ b/src/components/Document/index.scss @@ -17,6 +17,32 @@ display: none; } + [id]:target::before { + display: block; + height: 70px; /* match header height */ + margin-top: -70px; + visibility: hidden; + } + + /* Optional: apply scroll-margin to headings */ + h1[id], + h2[id], + h3[id], + h4[id], + h5[id], + h6[id] { + scroll-margin-top: 70px; + } + + .scroll-container { + scroll-behavior: smooth; + scroll-padding-top: 65px; + } + .scroll-container h2[id], + .scroll-container h3[id] { + scroll-margin-top: 65px; + } + h1 { margin-top: 0; } @@ -175,6 +201,8 @@ } } + + h2 { margin-top: $margin-lg; padding-bottom: $padding-sm; diff --git a/static/doc-images/images/pendo-dev-console.png b/static/doc-images/images/pendo-dev-console.png new file mode 100644 index 000000000..58f9d8bbe Binary files /dev/null and b/static/doc-images/images/pendo-dev-console.png differ diff --git a/static/doc-images/images/pendo_info_icon.png b/static/doc-images/images/pendo_info_icon.png new file mode 100644 index 000000000..bb246a9d1 Binary files /dev/null and b/static/doc-images/images/pendo_info_icon.png differ