Snowflake, Databricks, PostgreSQL or MySQL Admin, depending on the data warehouse.
Be an Admin in Azure.
If you want to create an Azure Private Link to access a Snowflake internal stage, contact your Sigma Account Executive.
Introduction
Sigma organizations running on Azure can securely connect to their data using Azure's Private Link, which allows Sigma to access the data warehouse hosted on Azure via a private endpoint in the virtual network. This not only enhances security during data transit but also improves performance by reducing network latency. With Private Link, Sigma connects to the data warehouse using private IP addresses, ensuring traffic never leaves the Microsoft network and data remains secure without exposure to the internet.
To utilize Private Link, create a private endpoint in your virtual network that maps to the data warehouse, assign it a private IP address, and connect to the warehouse using this address.
Sigma supports connections to the following data warehouses on Azure:
The Account field is test123.west-us-2.privatelink
Under Warehouse, enter your warehouse’s name as listed in Snowflake.
If you have OAuth enabled on your organization, and you would like to use it on the connection, switch on OAuth access; see Connect to Snowflake with OAuth. Please note: Steps 9 - 11 are not applicable if you choose to use OAuth without a service account.
Under User, enter your Snowflake username.
Under Password, enter your Snowflake password.
[optional] For Role, you can specify a Snowflake role to be used on this connection.
[optional] For Connection Features, you can set a connection timeout and/or enable write access.
After completing the form, click Create.
Databricks
Prerequisites
You must create an Azure Databricks workspace.
Your Databricks workspace must be Premium tier.
A customized networking configuration is required to support Private Link.
Provide Databricks Resource ID to Sigma
Follow the steps below to provide Sigma with the Resource ID to create a private link for your organization.
In Azure Services, hover over Azure Databricks and click Create.
Click JSON View in the top-right corner of the databricks workspace page in Azure.
On the Networking tab, you must check Yes for Deploy Azure Databricks workspace in your own Virtual Network and enter pre-configured virtual network and two subnets within the virtual network CIDR range for public and private subnet fields.
Copy the following values and send them to your Account Executive:
Resource ID
Region Name for the Databricks warehouse (under Location)
URL for the Databricks service, formatted as adb-<workspace-id>.<random-number>.azuredatabricks.net.
Private Link Approval
Follow the steps below to approve the Private Link after Sigma notifies you.
In the Azure portal, go to Azure Databricks.
Click the selected Azure Databricks workspace.
Click Networking on the left panel.
Click on Private endpoint connections.
Select the newly created private endpoint. The status will be Pending. Check Approve to approve the endpoint. Copy the name of the private endpoint, it's required when you configure Sigma.
Configure Databricks Connection
In the Databricks section of Azure, click on the warehouse instance > Databricks Workspace.
Click Launch Workspace.
In Databricks, select SQL in the Data Science & Engineering dropdown.
Click Review SQL Warehouses.
Select the warehouse.
Click the Connection details tab.
Copy the HTTP path value in Databricks as it's required in the Sigma UI.
Go to User Settings in Databricks by clicking on your username.
Click Personal access tokens tab.
Click Generate new token.
In the Lifetime field, set the duration of the private link. The link will expire based on the value.
Enter a value in the Comment field.
Click Generate. Copy this token as it's required in the Sigma UI.
In Sigma, go to Admin > Connections > Databricks.
In the Host field, enter the private endpoint you copied when you approved the endpoint, in the following format.
For example, if the private endpoint name is databricks-endpoint, then you would enter the following in the Host field. databrick-endpoint.privatelink.azuredatabricks.net
📘
To locate the private endpoint's name, go to your Azure portal > Azure Databricks Workspace > Networking on the left panel. The private endpoint name is displayed in the Private Endpoint column in Private endpoint connections.
Paste the HTTP path value from Azure into the HTTP path field in Sigma.
Paste the token you created in Azure and enter into Access token field in Sigma.
[optional] Under Connection Features, you can set a connection timeout and/or enable write access.
[optional] In the Connection queue size field, define the number of interactive queries Sigma can run on this connection concurrently.
Click Create in Sigma.
PostgreSQL
Private Link can be enabled for Azure Database for PostgreSQL flexible server instances that are created with public access, or single server instances.
Prerequisites
To add a Private Link connection, you must complete the following procedures:
Sigma requires your Resource ID to create a Private Link for your organization. View the Azure documentation on How to get your Azure Resource ID. Copy the Resource ID from the JSON View of your server page, as well as the Region Name for the PostgreSQL warehouse. Send these to your Sigma Account Executive.
Approve the Private Link in Azure
After Sigma has finished configuring the Private Link, view the Azure documentation on how to Approve private endpoint connections. Ensure the status of the private endpoint is changed from Pending to Accepted.
Configure the PostgreSQL connection in Sigma
Configure a new Private Link PostgreSQL connection in Sigma:
Go to Administration > Connections.
Select CreateConnection, then select PostgreSQL. Enter a Name for your connection.
Fill out the fields under Connection Credentials:
Host
Enter the DNS name provided by your Sigma Account Executive.
User
Enter the Admin Username found in your Azure PostgreSQL server page.
Port
Enter the PostgreSQL port number.
Password
Enter the password created to access your data warehouse.
Database
Enter the name of your database.
Turn on the Enable TLS toggle on to enable TLS encryption for your connection.
MySQL
Prerequisites
Private Link can only be enabled for Azure Database for MySQL flexible server instances that are created with public access.
To add a Private Link connection, you must complete the following procedures:
Sigma requires your Resource ID to create a Private Link for your organization. View the Azure documentation on How to get your Azure Resource ID. Copy the Resource ID from the JSON View of your server page, as well as the Region Name for the MySQL warehouse. Send these to your Sigma Account Executive.
Approve the Private Link in Azure
Once Sigma has finished configuring the Private Link, View the Azure documentation on how to Approve private endpoint connections. Ensure the status of the private endpoint is changed from Pending to Accepted.
Configure the MySQL connection in Sigma
Configure a new Private Link MySQL connection in Sigma:
Go to Administration > Connections.
Select CreateConnection, then select MySQL. Enter a Name for your connection.
Fill out the fields under Connection Credentials:
Host
Enter the DNS name provided by your Sigma Account Executive.
User
Enter the Admin Username found in your MySQL server page.
Port
Enter the MySQL port number.
Password
Enter the password created to access your data warehouse.
Database
Enter the name of your database.
Turn on the Enable TLS toggle on to enable TLS encryption for your connection.
Azure SQL Database, Azure SQL Managed Instance, or SQL Server 2022
Reach to out to your Sigma Account Executive for more information on setting up Private Link for Azure SQL Database, Azure SQL Managed Instance or SQL Server 2022 connections.
Updated about 2 months ago
\n\n","html_footer_meta":"\n","html_hidelinks":false,"showVersion":false,"hideTableOfContents":false,"nextStepsLabel":"Related resources","promos":[{"extras":{"type":"buttons","buttonPrimary":"get-started","buttonSecondary":"none"},"title":"The Sigma Computing Developer Hub","text":"Welcome to the Sigma Computing developer hub. You'll find comprehensive guides and documentation to help you start working with Sigma Computing as quickly as possible, as well as support if you get stuck. Let's jump right in!","_id":"649ca345fddb0a0067eb3bb5"}],"changelog":{"layoutExpanded":true,"showAuthor":false,"showExactDate":true},"allowApiExplorerJsonEditor":false,"ai_dropdown":"disabled","ai_options":{"chatgpt":"enabled","claude":"enabled","clipboard":"enabled","view_as_markdown":"enabled","copilot":"enabled"},"showPageIcons":true,"layout":{"full_width":false,"style":"classic"}},"child":{"_id":"649ca345fddb0a0067eb3bb3","appearance":{"rdmd":{"callouts":{"useIconFont":false},"theme":{"background":"","border":"","markdownEdge":"","markdownFont":"","markdownFontSize":"","markdownLineHeight":null,"markdownRadius":"","markdownText":"","markdownTitle":"","markdownTitleFont":"","mdCodeBackground":"","mdCodeFont":"","mdCodeRadius":"","mdCodeTabs":"","mdCodeText":"","tableEdges":"","tableHead":"","tableHeadText":"","tableRow":"","tableStripe":"","tableText":"","text":"","title":""}},"main_body":{"type":"links"},"colors":{"highlight":"","main":"#000","main_alt":"","header_text":"","body_highlight":"","custom_login_link_color":""},"typography":{"headline":"Open+Sans:400:sans-serif","body":"Open+Sans:400:sans-serif","typekit":false,"tk_key":"","tk_headline":"","tk_body":""},"header":{"style":"solid","img":[],"img_size":"auto","img_pos":"tl","linkStyle":"buttons"},"body":{"style":"none"},"global_landing_page":{"html":"","redirect":""},"referenceSimpleMode":true,"referenceLayout":"row","link_logo_to_url":false,"theme":"solid","colorScheme":"system","overlay":"triangles","landing":true,"sticky":false,"hide_logo":false,"childrenAsPills":false,"subheaderStyle":"links","splitReferenceDocs":false,"showMetricsInReference":true,"logo":["https://files.readme.io/e76fa049881caf557934797e79a66912aa149111831b86e073876ab293183a04-small-Sigma_PrimaryLogo_ShadowBlack.png","e76fa049881caf557934797e79a66912aa149111831b86e073876ab293183a04-small-Sigma_PrimaryLogo_ShadowBlack.png",281,80,"#2c2c2c","https://files.readme.io/3132f8acca21f616df1f3a05716c2385683655e39c3fdc1437e011dc0a8bed9e-Sigma_PrimaryLogo_ShadowBlack.png","66c7b8412da448002267ed80"],"loginLogo":[],"logo_white":["https://files.readme.io/7f03afe0da103f607fe99b3dfd70152af7af0a83a49b96f1c4471df21d52e732-small-Sigma_PrimaryLogo_White.png","7f03afe0da103f607fe99b3dfd70152af7af0a83a49b96f1c4471df21d52e732-small-Sigma_PrimaryLogo_White.png",281,80,"#ffffff","https://files.readme.io/6f89d040d3403f20d85e888258c32484a27cfe67a36e71dba608a0b591283a88-Sigma_PrimaryLogo_White.png","66c7b9b510090e00122fe35d"],"logo_white_use":true,"logo_large":false,"favicon":["https://files.readme.io/2333877-small-1687535336281.jpg","2333877-small-1687535336281.jpg",32,32,"#000000","https://files.readme.io/9b495d4-1687535336281.jpg","650b706c4c382400392fca55"],"stylesheet":"","stylesheet_hub2":"/* all CSS should be saved to the group stylesheet */\n\n/*Temporary fix for hiding token by default*/\n.rm-APIAuth {\n filter: blur(2px); /* Adjust the value to control the amount of blur */\n}\n\n/* Ensure no underline on tabs */\n.SearchTabs-Tab2715KRxrb5JT {\n text-decoration: none !important;\n}","stylesheet_hub3":"","javascript":"","javascript_hub2":"//--------------------------------------------------\n// #5 Auto-Hide Auth Input in API Ref Section\n$(window).on('pageLoad', function(e, state) {\n // Wait for 1 second before executing the function\n setTimeout(function() {\n // Find the .rm-APIAuth section and change its blur\n var section = document.querySelector('.rm-APIAuth');\n if (section) {\n section.style.filter = 'none';\n } else {\n console.error('.rm-APIAuth section not found');\n }\n \n // Find the button by its class name\n var button = document.querySelector('.Button_xs.rm-APIAuth-lock');\n \n // Check if the button exists before attempting to click it\n if (button) {\n button.click();\n } else {\n console.error('Button not found');\n }\n }, 900); \n});\n\n\n\n//--------------------------------------------------\n// #7 Automatically click AXIOS (only when Node Language is Active) on pages with \"/reference/\" path\ndocument.addEventListener('DOMContentLoaded', function() {\n // Check if the current page is in the \"/reference/\" path\n if (window.location.pathname.startsWith('/reference/')) {\n const clickExample = () => {\n const examples = document.querySelector(\"[class*='rm-PlaygroundRequest']\");\n const defaultLanguage = document.querySelector('[class*=\"LanguagePicker-button\"].rm-LanguageButton_active');\n\n // Check if the default language is \"Node\"\n if (examples && defaultLanguage && defaultLanguage.textContent.trim() === 'Node') {\n clearInterval(interval);\n const dropdownButton = document.querySelector('button.Button.Button_xs.Dropdown-toggle.Button_contrast_ghost.Button_contrast');\n if (dropdownButton) {\n dropdownButton.click(); // Click the dropdown button\n \n // Wait for the dropdown menu to appear\n setTimeout(() => {\n // Find the tippy container\n const tippyContainer = document.querySelector('[id^=\"tippy-\"]');\n if (tippyContainer) {\n // Find the dropdown menu within the tippy container\n const dropdownMenu = tippyContainer.querySelector('.Dropdown-content');\n if (dropdownMenu) {\n // Find the \"api\" option within the dropdown menu\n const apiOption = dropdownMenu.querySelector('.Menu-Item_link span');\n if (apiOption && apiOption.textContent.trim() === 'api') {\n // Remove the \"api\" option from the DOM\n apiOption.parentElement.remove();\n }\n\n // Find the \"Axios\" option within the dropdown menu\n const axiosOption = dropdownMenu.querySelector('.Menu-Item_link span');\n if (axiosOption && axiosOption.textContent.trim() === 'Axios') {\n // Click the \"Axios\" option\n axiosOption.click();\n }\n }\n }\n }, 100); // Adjust the delay time as needed\n }\n }\n };\n const interval = setInterval(clickExample, 100);\n }\n});\n//--------------------------------------------------\n// #8 Custom Expandable Content Components (?)\n// REMOVED PER CUSTOMER\n\n//--------------------------------------------------\n// #9 Custom Tabs (?)\ndocument.addEventListener(\"DOMContentLoaded\", function() {\n // Show the default tab content\n openTab('tab1');\n});\n\nfunction openTab(tabId) {\n // Hide all tab content\n document?.querySelectorAll('.tab-content').forEach(function(tabContent) {\n tabContent.style.display = 'none';\n });\n\n // Deactivate all tab buttons\n document?.querySelectorAll('.tabs button').forEach(function(tabButton) {\n tabButton.classList.remove('active-tab');\n });\n\n // Show the selected tab content\n document.getElementById(tabId).style.display = 'block';\n\n // Activate the clicked tab button\n document.getElementById(tabId + 'Btn').classList.add('active-tab');\n}\n\n//--------------------------------------------------\n// #10 Lists within Paragraphs (?)\n function wrapLiTextInP(listId) {\n var listItems = document.getElementById(listId).querySelectorAll('li');\n listItems.forEach(function (li) {\n var paragraphs = li.querySelectorAll('p');\n if (paragraphs.length === 0) {\n var textContent = li.innerHTML.trim();\n li.innerHTML = '
' + textContent + '
';\n }\n });\n }\n\n document.addEventListener('DOMContentLoaded', function () {\n wrapLiTextInP('myList');\n wrapLiTextInP('myOrdered');\n });\n\n\n//--------------------------------------------------\n// #11 Save the access_token value into local storage/auto populate\n\n function waitForElement(selector) {\n return new Promise((resolve, reject) => {\n const observer = new MutationObserver((mutations, obs) => {\n const element = document.querySelectorAll(selector);\n if (element) {\n obs.disconnect();\n resolve(element);\n }\n });\n\n observer.observe(document.body, {\n childList: true,\n subtree: true,\n });\n\n // Optional: Timeout to avoid infinite waiting\n setTimeout(() => {\n observer.disconnect();\n reject(new Error('Element not found'));\n }, 30000); // 30 seconds timeout\n });\n }\n\n const addTryItButtonClickEvent = async () => {\n try {\n // Wait for the div elements containing the class attribute containing 'rm-PlaygroundRequest'\n await waitForElement(\n '#ReferencePlayground > section[class*=\"Playground-section\"][class*=\"Playground-section_sticky\"] > div > footer > button'\n );\n console.log(\n 'FOUND ELEMENTS: #ReferencePlayground > section[class*=\"Playground-section\"][class*=\"Playground-section_sticky\"] > div > footer > button'\n );\n // Find the div elements containing the class attribute containing 'rm-PlaygroundRequest'\n const divsWithClass = document.querySelectorAll(\n 'div[class*=rm-PlaygroundRequest]'\n );\n\n // Convert the NodeList to an array for iteration\n const divArray = Array.from(divsWithClass);\n\n // Iterate through each div element with the specified class attribute\n divArray.forEach(divElement => {\n // Find the footer tag inside the current div element\n const footerInDiv = divElement.querySelector('footer');\n\n if (footerInDiv) {\n // Find the Try It button inside the footer tag\n const tryItButton = footerInDiv.querySelector(\n 'button[class*=rm-TryIt]'\n );\n\n // Check if the button contains the text 'Try It!'\n if (tryItButton && tryItButton.textContent.trim() === 'Try It!') {\n // Add event listener to the \"Try It\" button only on the /token page\n tryItButton.addEventListener('click', event => {\n event.preventDefault();\n // Check if the current URL ends with '/token'\n if (window.location.pathname.endsWith('/token')) {\n // Execute the additional logic after a delay on the /token page\n console.log('Expecing new function');\n }\n });\n }\n }\n });\n } catch (error) {\n console.error('Error:', error);\n }\n };\n\n // Call the function to add the event listener\n addTryItButtonClickEvent();\n\n\ndocument.addEventListener('DOMContentLoaded', () => {\n // Function to handle the additional logic after a delay\n const waitForResponse = () => {\n setTimeout(() => {\n // Your additional logic after a delay of 1 second goes here\n\n const extractTokens = () => {\n let tokens = {};\n\n // Query the pre element with the specified class\n const requestCode = document.querySelector('pre.CodeSnippet');\n const responseCode = document.querySelector(\n 'div.rm-PlaygroundResponse'\n );\n\n const requestText = requestCode.textContent;\n const responseText = responseCode.textContent;\n\n // Define the regex to find the value after \"Basic\"\n const basicAuthRegex = /authorization: Basic ([^']+)'?/;\n const accessTokenRegex = /\"access_token\":\\s*\"([^\"]+)\"/;\n const refreshTokenRegex = /\"refresh_token\":\\s*\"([^\"]+)\"/;\n const expiresInRegex = /\"expires_in\":\\s*(\\d{4})/;\n\n const basicAuthToken = requestText.match(basicAuthRegex);\n if (basicAuthToken && basicAuthToken[1]) {\n tokens.basic_auth = basicAuthToken[1];\n } else {\n console.error('Authorization Basic value not found');\n }\n\n const accessToken = responseText.match(accessTokenRegex);\n if (accessToken && accessToken[1]) {\n tokens.access_token = accessToken[1];\n } else {\n console.error('Access Token value not found');\n }\n\n const refreshToken = responseText.match(refreshTokenRegex);\n if (refreshToken && refreshToken[1]) {\n tokens.refresh_token = refreshToken[1];\n } else {\n console.error('Refresh Token value not found');\n }\n\n const expiresIn = responseText.match(expiresInRegex);\n if (expiresIn && expiresIn[1]) {\n tokens.expires_in = expiresIn[1];\n } else {\n console.error('Token Expiration value not found');\n }\n\n return tokens;\n };\n\n // Function to save the tokens object into local storage\n const saveTokensToLocalStorage = tokens => {\n if (tokens.access_token || tokens.refresh_token || tokens.basic_auth) {\n const expirationTime = Date.now() + tokens.expires_in * 1000;\n const storedTokens = JSON.parse(localStorage.getItem('tokens')) || {};\n const updatedTokens = {\n ...storedTokens,\n ...tokens,\n expiration_time: expirationTime,\n };\n localStorage.setItem('tokens', JSON.stringify(updatedTokens));\n }\n };\n\n // Retrieve tokens from the HTML structure\n const tokens = extractTokens();\n // Save tokens into local storage\n saveTokensToLocalStorage(tokens);\n // Set a timeout to refresh the token 3 minutes before it expires\n setRefreshTokenTimeout(tokens.expires_in);\n }, 1500);\n };\n\n // Function to set a timeout to refresh the token\n const setRefreshTokenTimeout = expiresIn => {\n const refreshIn = (expiresIn - 180) * 1000; // Refresh 3 minutes before expiration\n setTimeout(() => {\n getNewAccessToken();\n }, refreshIn);\n };\n\n // Function to add event listener to the \"Try It\" button\n const addTryItButtonClickEvent = () => {\n setTimeout(() => {\n // Find the div elements containing the class attribute containing 'rm-PlaygroundRequest'\n const divsWithClass = document.querySelectorAll(\n 'div[class*=rm-PlaygroundRequest]'\n );\n\n // Convert the NodeList to an array for iteration\n const divArray = Array.from(divsWithClass);\n\n // Iterate through each div element with the specified class attribute\n divArray.forEach(divElement => {\n // Find the footer tag inside the current div element\n const footerInDiv = divElement.querySelector('footer');\n\n if (footerInDiv) {\n // Find the Try It button inside the footer tag\n const tryItButton = footerInDiv.querySelector(\n 'button[class*=rm-TryIt]'\n );\n\n // Check if the button contains the text 'Try It!'\n if (tryItButton && tryItButton.textContent.trim() === 'Try It!') {\n // Add event listener to the \"Try It\" button only on the /token page\n tryItButton.addEventListener('click', event => {\n event.preventDefault();\n // Check if the current URL ends with '/token'\n if (window.location.pathname.endsWith('/token')) {\n // Execute the additional logic after a delay on the /token page\n waitForResponse();\n }\n });\n }\n }\n });\n }, 1000);\n };\n\n // Function to monitor URL changes using window.onpopstate\n window.onpopstate = () => {\n // Re-add the event listener when the URL changes\n addTryItButtonClickEvent();\n };\n\n // Function to observe DOM mutations using MutationObserver\n const observer = new MutationObserver(() => {\n // Re-add the event listener on DOM mutations\n addTryItButtonClickEvent();\n });\n\n // Start observing mutations in the document\n observer.observe(document.body, { attributes: true, subtree: true });\n\n // Add the initial event listener on page load\n addTryItButtonClickEvent();\n});\n\ndocument.addEventListener('DOMContentLoaded', () => {\n let isUpdated = false;\n\n const updateBearerToken = async () => {\n setTimeout(async () => {\n const inputField = document.getElementById('APIAuth-token');\n const inputValue = inputField?.value;\n\n // Check if access_token exists in local storage\n const storedTokens = JSON.parse(localStorage.getItem('tokens'));\n let storedToken = storedTokens?.access_token;\n\n if (!storedToken) {\n await getNewAccessToken(); // Refresh the access token\n storedToken = JSON.parse(localStorage.getItem('tokens'))?.access_token;\n }\n\n if (!storedToken) return; // Stop the code execution if access_token does not exist\n\n const event = new Event('change', { bubbles: true });\n\n if (inputValue !== storedToken || inputValue === '') {\n const nativeInputValueSetter = Object.getOwnPropertyDescriptor(\n window.HTMLInputElement.prototype,\n 'value'\n ).set;\n nativeInputValueSetter.call(inputField, storedToken);\n\n // Dispatch 'input' event to mimic the user input\n const inputEvent = new Event('input', {\n bubbles: true,\n cancelable: true,\n });\n inputField.dispatchEvent(inputEvent);\n isUpdated = true;\n } else if (!isUpdated) {\n inputField.dispatchEvent(event);\n }\n }, 1000);\n };\n\n // Create a MutationObserver instance\n const observer = new MutationObserver(updateBearerToken);\n\n // Observe changes in the document's body and its descendants\n observer.observe(document.body, {\n subtree: true,\n childList: true,\n attributes: true,\n });\n\n // Call the function on initial load with a delay, but not on \"/token\" pages\n if (\n window.location.href.includes('/reference') &&\n !window.location.href.endsWith('/reference/token')\n ) {\n updateBearerToken();\n window.onpopstate = updateBearerToken;\n }\n\n // Set the initial refresh token timeout if the tokens are already in local storage\n const storedTokens = JSON.parse(localStorage.getItem('tokens'));\n if (storedTokens?.expiration_time) {\n const expiresIn = (storedTokens.expiration_time - Date.now()) / 1000;\n setRefreshTokenTimeout(expiresIn);\n }\n});\n\n// Function to get a new access_token using the refresh_token\nconst getNewAccessToken = async () => {\n const storedTokens = JSON.parse(localStorage.getItem('tokens'));\n const refreshToken = storedTokens?.refresh_token;\n const basicAuth = storedTokens?.basic_auth;\n\n if (!refreshToken) {\n console.error('No refresh token found');\n return;\n }\n\n if (!basicAuth) {\n console.error('No Basic Auth value found');\n return;\n }\n\n try {\n const response = await fetch(\n 'https://api.sigmacomputing.com/v2/auth/token',\n {\n method: 'POST',\n headers: {\n accept: 'application/json',\n authorization: `Basic ${basicAuth}`,\n 'content-type': 'application/x-www-form-urlencoded',\n },\n body: new URLSearchParams({\n grant_type: 'refresh_token',\n refresh_token: refreshToken,\n }),\n }\n );\n\n if (!response.ok) {\n throw new Error('Failed to refresh token');\n }\n\n const data = await response.json();\n const newAccessToken = data.access_token;\n const newRefreshToken = data.refresh_token || refreshToken;\n const newExpiresIn = data.expires_in;\n\n // Save the new tokens to local storage\n const expirationTime = Date.now() + newExpiresIn * 1000;\n const updatedTokens = {\n access_token: newAccessToken,\n refresh_token: newRefreshToken,\n basic_auth: basicAuth,\n expiration_time: expirationTime,\n };\n localStorage.setItem('tokens', JSON.stringify(updatedTokens));\n\n // Set a timeout to refresh the token 3 minutes before it expires\n setRefreshTokenTimeout(newExpiresIn);\n\n console.log('Access token refreshed successfully');\n } catch (error) {\n console.error('Error refreshing access token:', error);\n }\n};\n\n\n//--------------------------------------------------\n// #12 Search Tab Popup Auto-Click Current Section\ndocument.addEventListener(\"DOMContentLoaded\", function() {\n setTimeout(function() {\n let currentActiveTab = null;\n\n function selectTabByUrl() {\n const tabs = document.querySelectorAll('.SearchTabs-Tab2715KRxrb5JT');\n const path = window.location.pathname;\n\n let tabToSelect;\n if (path.includes('/docs')) {\n tabToSelect = 'Documentation';\n } else if (path.includes('/recipes')) {\n tabToSelect = 'Recipes';\n } else if (path.includes('/reference')) {\n tabToSelect = 'API Reference';\n } else if (path.includes('/changelog')) {\n tabToSelect = \"What's New\";\n }\n\n if (tabToSelect) {\n tabs.forEach(tab => {\n const spanElement = tab.querySelector('span');\n if (spanElement && spanElement.innerText.includes(tabToSelect)) {\n tab.click(); // Simulate a click on the tab\n }\n });\n } else {\n // Default to the first tab if no specific tab is selected based on URL\n if (tabs.length > 0) {\n tabs[0].click(); // Simulate a click on the first tab\n }\n }\n }\n\n function handleTabClick(event) {\n if (currentActiveTab) {\n currentActiveTab.setAttribute('aria-selected', 'false');\n currentActiveTab.classList.remove('Tabs-listItem_active');\n }\n\n const clickedTab = event.currentTarget;\n clickedTab.setAttribute('aria-selected', 'true');\n clickedTab.classList.add('Tabs-listItem_active');\n\n currentActiveTab = clickedTab; // Update the currently active tab\n }\n\n // Add click event listeners to tabs\n const tabs = document.querySelectorAll('.SearchTabs-Tab2715KRxrb5JT');\n tabs.forEach(tab => {\n tab.addEventListener('click', handleTabClick);\n });\n\n // Initial selection when the page loads\n selectTabByUrl();\n\n // Listen for changes in URL (handling SPA navigation)\n window.addEventListener('popstate', selectTabByUrl);\n\n // Listen for the search modal being opened\n const searchButton = document.querySelector('.rm-SearchToggle');\n if (searchButton) {\n searchButton.addEventListener('click', () => {\n if (currentActiveTab) {\n currentActiveTab.setAttribute('aria-selected', 'false');\n currentActiveTab.classList.remove('Tabs-listItem_active');\n }\n selectTabByUrl();\n });\n }\n // Additionally, for history.pushState or history.replaceState calls, you might need to override those\n (function(history) {\n const pushState = history.pushState;\n const replaceState = history.replaceState;\n\n history.pushState = function(state, title, url) {\n pushState.call(history, state, title, url);\n selectTabByUrl();\n };\n\n history.replaceState = function(state, title, url) {\n replaceState.call(history, state, title, url);\n selectTabByUrl();\n };\n })(window.history);\n }, 500); // Adjust the timeout duration as needed\n});\n\n//------------------------------------------------------------\n// #13 Changes username to client ID and password to client secret.\n// Function to change the placeholders\nfunction changePlaceholders() {\n var userInput = document.querySelector('input[name=\"user\"]');\n var passInput = document.querySelector('input[name=\"pass\"]');\n\n if (userInput) {\n userInput.placeholder = \"Client ID\";\n }\n\n if (passInput) {\n passInput.placeholder = \"Client Secret\";\n }\n}\n\n// Function to periodically check for the presence of input fields\nfunction periodicCheck() {\n changePlaceholders();\n // Set a delay to check again after 500ms if inputs are not yet loaded\n if (!document.querySelector('input[name=\"user\"]') || !document.querySelector('input[name=\"pass\"]')) {\n setTimeout(periodicCheck, 500);\n }\n}\n\n// MutationObserver to watch for changes in the DOM and apply the changes when elements are loaded\nvar observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(mutation) {\n if (mutation.addedNodes.length) {\n changePlaceholders();\n }\n });\n});\n\n// Start observing the document for changes\nobserver.observe(document.body, { childList: true, subtree: true });\n\n// Initial call to handle already loaded elements and start periodic check\nchangePlaceholders();\nperiodicCheck();","html_promo":"","html_body":"","html_footer":"","html_head":"\n","html_footer_meta":"","html_hidelinks":false,"showVersion":false,"hideTableOfContents":false,"nextStepsLabel":"Related resources","promos":[{"extras":{"type":"buttons","buttonPrimary":"get-started","buttonSecondary":"none"},"title":"The Sigma Computing Developer Hub","text":"Welcome to the Sigma Computing developer hub. You'll find comprehensive guides and documentation to help you start working with Sigma Computing as quickly as possible, as well as support if you get stuck. Let's jump right in!","_id":"649ca345fddb0a0067eb3bb5"}],"changelog":{"layoutExpanded":true,"showAuthor":false,"showExactDate":true},"allowApiExplorerJsonEditor":false,"ai_dropdown":"disabled","ai_options":{"chatgpt":"enabled","claude":"enabled","clipboard":"enabled","view_as_markdown":"enabled","copilot":"enabled"},"showPageIcons":true,"layout":{"full_width":false,"style":"classic"}},"custom_domain":"","childrenProjects":[],"derivedPlan":"enterprise","description":"Official documentation and help with data analysis and modeling, including guidance and best practices for building visualizations and dashboards for Sigma Computing, a cloud-based Business Intelligence (BI) platform.","isExternalSnippetActive":false,"error404":"custom-error-page","experiments":[],"first_page":"landing","flags":{"allowApiExplorerJsonEditor":false,"allowReusableOTPs":false,"alwaysShowDocPublishStatus":false,"allowXFrame":true,"correctnewlines":false,"dashReact":false,"disablePasswordlessLogin":false,"directGoogleToStableVersion":false,"disableAnonForum":false,"enterprise":true,"graphql":false,"migrationRun":false,"migrationSwaggerRun":false,"newEditor":true,"newEditorDash":true,"newMarkdownBetaProgram":true,"newSearch":true,"oauth":false,"oldMarkdown":false,"owlbotAi":false,"rdmdCompatibilityMode":false,"reviewWorkflow":true,"singleProjectEnterprise":false,"speedyRender":false,"staging":false,"star":false,"superHub":false,"swagger":false,"translation":false,"useReactApp":true,"useReactGLP":true,"apiV2":false,"dashQuickstart":false,"git":{"read":false,"write":false},"superHubBeta":false,"customBlocks":false,"disableAutoTranslate":false,"devDashHub":false,"disableSAMLScoping":false,"allowUnsafeCustomHtmlSuggestionsFromNonAdmins":false,"apiAccessRevoked":false,"passwordlessLogin":"default","disableSignups":false,"billingRedesignEnabled":true,"developerPortal":false,"mdx":false,"superHubDevelopment":false,"annualBillingEnabled":true,"devDashBillingRedesignEnabled":false,"enableOidc":false,"customComponents":false,"disableDiscussionSpamRecaptchaBypass":false,"developerViewUsersData":false,"changelogRssAlwaysPublic":false,"bidiSync":false,"superHubMigrationSelfServeFlow":false,"apiDesigner":false,"hideEnforceSSO":false,"localLLM":false,"superHubManageVersions":false,"gitSidebar":false,"superHubGlobalCustomBlocks":false,"childManagedBidi":false,"superHubBranches":false,"requiresJQuery":true,"externalSdkSnippets":false,"migrationPreview":false,"superHubPreview":false,"superHubBranchReviews":false,"superHubMergePermissions":false},"fullBaseUrl":"https://sigma-computing.readme.io/","git":{"migration":{"createRepository":{},"transformation":{},"migratingPages":{},"enableSuperhub":{}},"sync":{"linked_repository":{},"installationRequest":{},"connections":[],"providers":[]}},"glossaryTerms":[{"_id":"64ada7f90ca32200383568a7","term":"CDW","definition":"Cloud data warehouse"},{"_id":"655e8c4ba56e64005448ecee","term":"DBMS","definition":"Database management system"},{"_id":"656ac7ed8e9cdc0045d6a1dc","term":"connection","definition":"[placeholder]"},{"_id":"656ac7f7a705200689a470a8","term":"database","definition":"[placeholder]"},{"_id":"656ac802c221800068b2e621","term":"schema","definition":"[placeholder]"},{"_id":"656ac80d312f4107a76fc745","term":"database table","definition":"[placeholder]"},{"_id":"661e0f1374c914004b2029aa","term":"sharing organization","definition":"In cross-org sharing, the Sigma organization that shares the workbook template with another organization."},{"_id":"661e0f3557912a00256ffca6","term":"receiving organization","definition":"In cross-org sharing, the Sigma organization that receives a shared workbook template from another organization."},{"_id":"662003129b691d001ef35c18","term":"trigger","definition":"In actions, the user interaction with a specific element (the trigger element)."},{"_id":"662003474df46c00118fac64","term":"effect","definition":"In actions, the defined response to the user interaction with a trigger element."},{"_id":"6633f37a23450f004663208f","term":"type inference","definition":"The ability to recognize input patterns and contextual cues to automatically determine data type without explicit declarations."}],"graphqlSchema":"","gracePeriod":{"enabled":false,"endsAt":null},"shouldGateDash":false,"healthCheck":{"provider":"","settings":{}},"intercom_secure_emailonly":false,"intercom":"","is_active":true,"integrations":{"login":{}},"internal":"","jwtExpirationTime":0,"landing_bottom":[],"mdxMigrationStatus":"rdmd","metrics":{"monthlyLimit":0,"thumbsEnabled":true,"monthlyPurchaseLimit":0,"meteredBilling":{}},"modules":{"landing":false,"docs":true,"examples":true,"reference":true,"graphql":false,"changelog":true,"discuss":false,"suggested_edits":true,"logs":false,"custompages":false,"tutorials":true},"name":"Sigma Computing","nav_names":{"docs":"Documentation","reference":"API Reference","changelog":"What's New","discuss":"","recipes":"API Recipes","tutorials":""},"oauth_url":"","onboardingCompleted":{"documentation":true,"appearance":true,"jwt":true,"api":true,"logs":false,"domain":false,"metricsSDK":false},"owlbot":{"enabled":false,"isPaying":false,"customization":{"answerLength":"long","customTone":"","defaultAnswer":"","forbiddenWords":"","tone":"neutral"},"copilot":{"enabled":false,"hasBeenUsed":false,"installedCustomPage":""}},"owner":{"id":null,"email":null,"name":null},"plan":"enterprise","planOverride":"","planSchedule":{"stripeScheduleId":null,"changeDate":null,"nextPlan":null},"planStatus":"","planTrial":"enterprise","readmeScore":{"components":{"newDesign":{"enabled":true,"points":25},"reference":{"enabled":true,"points":50},"tryItNow":{"enabled":true,"points":35},"syncingOAS":{"enabled":false,"points":10},"customLogin":{"enabled":true,"points":25},"metrics":{"enabled":false,"points":40},"recipes":{"enabled":true,"points":15},"pageVoting":{"enabled":true,"points":1},"suggestedEdits":{"enabled":true,"points":10},"support":{"enabled":false,"points":5},"htmlLanding":{"enabled":false,"points":5},"guides":{"enabled":true,"points":10},"changelog":{"enabled":true,"points":5},"glossary":{"enabled":true,"points":1},"variables":{"enabled":true,"points":1},"integrations":{"enabled":true,"points":2}},"totalScore":180},"reCaptchaSiteKey":"","reference":{"alwaysUseDefaults":false,"defaultExpandResponseExample":false,"defaultExpandResponseSchema":false,"enableOAuthFlows":true},"seo":{"overwrite_title_tag":false},"stable":{"_id":"649ca346fddb0a0067eb3bb9","version":"1.0","version_clean":"1.0.0","codename":"published release","is_stable":true,"is_beta":false,"is_hidden":false,"is_deprecated":false,"categories":["649ca346fddb0a0067eb3bbb","649ca346fddb0a0067eb3bbb","649ca346fddb0a0067eb3bbd","649ca346fddb0a0067eb3bc7","649cd2e58e830b0043594f7a","649cd2ecbb269f000a63887d","649cd31bbf00340bdef3e2f7","651c34dcef8f7d0739f0173b","651c35f10173200035a349c0","651c36d1316003002b9ed00a","651c41952e7b890042b7ac08","651c41a7f4faca23b1574c49","651c41b113c6110067baacea","651c41d13a135100328c20e1","651c41fa36bd6c0744e775f2","651c4216f8718d00247b1a3a","651c4222ea0cf3005d770941","651c42300549a7000c374d0b","651c4246b391e10024bb7eb7","654c23e45c46e3001fe30231","654fa3e0eb858d002a30ea20","65528bc2d92a7a0010929ce3","6553805b6d22b5050b0d4ceb","6582405a0eea57006aed4eae","6583161b94525a000fcbbeed","6595d3a14c9897005b23823c","65a986b8232ad300548bd5c8","65b0a132512dd8004eced0ea","65b28293ef920800106c9d01","65cfb4006097150036c30aed","65d4ee5514e952003f783cb4","65d4ee76379a33006065466b","65f8f203690838004b91d149","65f8f304af8cd00025ffc68d","65f919d8f015400060e3c6ed","65f91d718b003f002bc7cb52","65f91e1aa36af9002c452747","65f91e8419171400198049e2","670971afbe04ab000f783a37","673f6ce14454f2006b52c16b","6791520ac0b8130053ef47c7","679a743bc633b8000fabb634","679a7804cfa7f900671aec24","679a7816dc56050024000e7e","679a7b5c5b2b3a0043f6b564","67ae45ac44ce8f006188ec6b","67d9afe618dc3d006c36bb6a","67d9b0a152539500604913e6","67d9b0aaada09900172d07fc","67d9b0adada09900172d07fe","67d9b0b0432e4100102b9258","67d9b0b2432e4100102b945f","67d9b0b4ada09900172d0809","67d9b0b7ada09900172d0a20","67d9b0b9ada09900172d0a22","67d9b0bcc39315006815a411","67d9b0bfc39315006815a413","67d9b0c2fd48c800596e8791","67d9b0c930e1140018fec2b3","67d9b0cdfd48c800596e879c","67d9b0d0d697d8002bdecb72","67d9b0d252a4f4006af0645c","67db3c5bc47e2800195583b4"],"project":"649ca345fddb0a0067eb3bb3","releaseDate":"2023-06-28T21:16:54.076Z","createdAt":"2023-06-28T21:16:54.089Z","updatedAt":"2025-03-19T21:51:23.752Z","__v":1,"pdfStatus":"error"},"subdomain":"sigma-computing","subpath":"","superHubWaitlist":true,"topnav":{"left":[],"right":[{"type":"home"},{"type":"url","text":"Community","url":"https://community.sigmacomputing.com/"},{"type":"url","text":"QuickStarts","url":"https://quickstarts.sigmacomputing.com/"},{"type":"url","text":"Status","url":"https://status.sigmacomputing.com/"}],"bottom":[],"edited":true},"trial":{"trialDeadlineEnabled":false,"trialEndsAt":"2023-09-15T21:16:53.761Z"},"translate":{"provider":"transifex","show_widget":false,"key_public":"","org_name":"","project_name":"","languages":[]},"url":"","versions":[{"_id":"649ca346fddb0a0067eb3bb9","version":"1.0","version_clean":"1.0.0","codename":"published release","is_stable":true,"is_beta":false,"is_hidden":false,"is_deprecated":false,"categories":["649ca346fddb0a0067eb3bbb","649ca346fddb0a0067eb3bbb","649ca346fddb0a0067eb3bbd","649ca346fddb0a0067eb3bc7","649cd2e58e830b0043594f7a","649cd2ecbb269f000a63887d","649cd31bbf00340bdef3e2f7","651c34dcef8f7d0739f0173b","651c35f10173200035a349c0","651c36d1316003002b9ed00a","651c41952e7b890042b7ac08","651c41a7f4faca23b1574c49","651c41b113c6110067baacea","651c41d13a135100328c20e1","651c41fa36bd6c0744e775f2","651c4216f8718d00247b1a3a","651c4222ea0cf3005d770941","651c42300549a7000c374d0b","651c4246b391e10024bb7eb7","654c23e45c46e3001fe30231","654fa3e0eb858d002a30ea20","65528bc2d92a7a0010929ce3","6553805b6d22b5050b0d4ceb","6582405a0eea57006aed4eae","6583161b94525a000fcbbeed","6595d3a14c9897005b23823c","65a986b8232ad300548bd5c8","65b0a132512dd8004eced0ea","65b28293ef920800106c9d01","65cfb4006097150036c30aed","65d4ee5514e952003f783cb4","65d4ee76379a33006065466b","65f8f203690838004b91d149","65f8f304af8cd00025ffc68d","65f919d8f015400060e3c6ed","65f91d718b003f002bc7cb52","65f91e1aa36af9002c452747","65f91e8419171400198049e2","670971afbe04ab000f783a37","673f6ce14454f2006b52c16b","6791520ac0b8130053ef47c7","679a743bc633b8000fabb634","679a7804cfa7f900671aec24","679a7816dc56050024000e7e","679a7b5c5b2b3a0043f6b564","67ae45ac44ce8f006188ec6b","67d9afe618dc3d006c36bb6a","67d9b0a152539500604913e6","67d9b0aaada09900172d07fc","67d9b0adada09900172d07fe","67d9b0b0432e4100102b9258","67d9b0b2432e4100102b945f","67d9b0b4ada09900172d0809","67d9b0b7ada09900172d0a20","67d9b0b9ada09900172d0a22","67d9b0bcc39315006815a411","67d9b0bfc39315006815a413","67d9b0c2fd48c800596e8791","67d9b0c930e1140018fec2b3","67d9b0cdfd48c800596e879c","67d9b0d0d697d8002bdecb72","67d9b0d252a4f4006af0645c","67db3c5bc47e2800195583b4"],"project":"649ca345fddb0a0067eb3bb3","releaseDate":"2023-06-28T21:16:54.076Z","createdAt":"2023-06-28T21:16:54.089Z","updatedAt":"2025-03-19T21:51:23.752Z","__v":1,"pdfStatus":"error"},{"_id":"66fef0381580a800453331ac","version":"0.0","version_clean":"0.0.0","codename":"Secret Staging Version","is_stable":false,"is_beta":false,"is_hidden":true,"is_deprecated":false,"categories":["649ca346fddb0a0067eb3bbb","649ca346fddb0a0067eb3bbb","66fef0381580a80045332ddf","649ca346fddb0a0067eb3bc7","649cd2e58e830b0043594f7a","649cd2ecbb269f000a63887d","649cd31bbf00340bdef3e2f7","66fef0381580a80045332de0","651c35f10173200035a349c0","651c36d1316003002b9ed00a","66fef0381580a80045332de1","66fef0381580a80045332de2","66fef0381580a80045332de3","651c41d13a135100328c20e1","66fef0381580a80045332de4","651c4216f8718d00247b1a3a","66fef0381580a80045332de5","66fef0381580a80045332de6","66fef0381580a80045332de7","654c23e45c46e3001fe30231","66fef0381580a80045332de8","66fef0381580a80045332de9","66fef0381580a80045332dea","6582405a0eea57006aed4eae","66fef0381580a80045332deb","66fef0381580a80045332dec","66fef0381580a80045332ded","66fef0381580a80045332dee","66fef0381580a80045332def","66fef0381580a80045332df0","65d4ee5514e952003f783cb4","66fef0381580a80045332df1","66fef0381580a80045332df2","66fef0381580a80045332df3","66fef0381580a80045332df4","66fef0381580a80045332df5","66fef0381580a80045332df6","66fef0381580a80045332df7","6746100bfd182300476268a5","6746154522e4e000469a538b","674631ec8e18569cf1294407","674631f213c78000119224c9","674631f77e6ad7001d4ce737","67463ef86533e800104fd401","67463efd889e0e0038be1a99","684cc16f67868400105504b9"],"pdfStatus":"error","project":"649ca345fddb0a0067eb3bb3","releaseDate":"2023-06-28T21:16:54.076Z","createdAt":"2024-10-03T19:27:52.123Z","updatedAt":"2025-06-14T00:25:19.495Z","__v":1,"forked_from":"649ca346fddb0a0067eb3bb9"}],"variableDefaults":[{"source":"security","type":"oauth2","_id":"65831239fc5926006d9736e8","name":"oauth2","apiSetting":"654c23e45c46e3001fe30230"},{"source":"security","type":"http","_id":"68534a78597e44005384d7c6","name":"basicAuth","scheme":"basic","apiSetting":"6583161b94525a000fcbbeeb"}],"webhookEnabled":false},"custom_domain":"help.sigmacomputing.com","childrenProjects":[],"derivedPlan":"enterprise","description":"Official documentation and help with data analysis and modeling, including guidance and best practices for building visualizations and dashboards for Sigma Computing, a cloud-based Business Intelligence (BI) platform.","isExternalSnippetActive":false,"error404":"custom-error-page","experiments":[],"first_page":"landing","flags":{"git":{"read":false,"write":false},"allowApiExplorerJsonEditor":false,"allowReusableOTPs":false,"alwaysShowDocPublishStatus":false,"allowXFrame":true,"apiV2":false,"correctnewlines":false,"customBlocks":false,"dashQuickstart":false,"dashReact":true,"disablePasswordlessLogin":false,"directGoogleToStableVersion":false,"disableAnonForum":false,"disableAutoTranslate":false,"enterprise":true,"graphql":false,"migrationRun":false,"migrationSwaggerRun":false,"newEditor":true,"newEditorDash":true,"newMarkdownBetaProgram":true,"newSearch":true,"oauth":false,"oldMarkdown":false,"owlbotAi":false,"rdmdCompatibilityMode":false,"reviewWorkflow":true,"singleProjectEnterprise":true,"speedyRender":false,"staging":false,"star":false,"superHub":false,"superHubBeta":false,"swagger":false,"translation":false,"useReactApp":true,"useReactGLP":true,"devDashHub":false,"disableSAMLScoping":false,"allowUnsafeCustomHtmlSuggestionsFromNonAdmins":false,"apiAccessRevoked":false,"passwordlessLogin":"default","disableSignups":false,"billingRedesignEnabled":true,"developerPortal":false,"mdx":false,"superHubDevelopment":false,"annualBillingEnabled":true,"devDashBillingRedesignEnabled":false,"enableOidc":false,"customComponents":false,"disableDiscussionSpamRecaptchaBypass":false,"developerViewUsersData":false,"changelogRssAlwaysPublic":false,"bidiSync":false,"superHubMigrationSelfServeFlow":false,"apiDesigner":false,"hideEnforceSSO":false,"localLLM":false,"superHubManageVersions":false,"gitSidebar":false,"superHubGlobalCustomBlocks":false,"childManagedBidi":false,"superHubBranches":false,"requiresJQuery":true,"externalSdkSnippets":false,"migrationPreview":false,"superHubPreview":false,"superHubBranchReviews":false,"superHubMergePermissions":false},"fullBaseUrl":"https://help.sigmacomputing.com/","git":{"migration":{"createRepository":{},"transformation":{},"migratingPages":{},"enableSuperhub":{}},"sync":{"linked_repository":{},"installationRequest":{},"connections":[],"providers":[]}},"glossaryTerms":[{"_id":"64ada7f90ca32200383568a7","term":"CDW","definition":"Cloud data warehouse"},{"_id":"655e8c4ba56e64005448ecee","term":"DBMS","definition":"Database management system"},{"_id":"656ac7ed8e9cdc0045d6a1dc","term":"connection","definition":"[placeholder]"},{"_id":"656ac7f7a705200689a470a8","term":"database","definition":"[placeholder]"},{"_id":"656ac802c221800068b2e621","term":"schema","definition":"[placeholder]"},{"_id":"656ac80d312f4107a76fc745","term":"database table","definition":"[placeholder]"},{"_id":"661e0f1374c914004b2029aa","term":"sharing organization","definition":"In cross-org sharing, the Sigma organization that shares the workbook template with another organization."},{"_id":"661e0f3557912a00256ffca6","term":"receiving organization","definition":"In cross-org sharing, the Sigma organization that receives a shared workbook template from another organization."},{"_id":"662003129b691d001ef35c18","term":"trigger","definition":"In actions, the user interaction with a specific element (the trigger element)."},{"_id":"662003474df46c00118fac64","term":"effect","definition":"In actions, the defined response to the user interaction with a trigger element."},{"_id":"6633f37a23450f004663208f","term":"type inference","definition":"The ability to recognize input patterns and contextual cues to automatically determine data type without explicit declarations."}],"graphqlSchema":"","gracePeriod":{"enabled":false,"endsAt":null},"shouldGateDash":false,"healthCheck":{"provider":"","settings":{}},"intercom_secure_emailonly":false,"intercom":"","is_active":true,"integrations":{"login":{}},"internal":"","jwtExpirationTime":0,"landing_bottom":[{"type":"links"}],"mdxMigrationStatus":"rdmd","metrics":{"monthlyLimit":0,"thumbsEnabled":true,"monthlyPurchaseLimit":0,"meteredBilling":{}},"modules":{"landing":false,"docs":true,"examples":true,"reference":true,"graphql":false,"changelog":true,"discuss":false,"suggested_edits":true,"logs":false,"custompages":false,"tutorials":true},"name":"Sigma Computing","nav_names":{"docs":"Documentation","reference":"API Reference","changelog":"What's New","discuss":"","recipes":"API Recipes","tutorials":""},"oauth_url":"","onboardingCompleted":{"documentation":true,"appearance":true,"jwt":true,"api":true,"logs":false,"domain":false,"metricsSDK":false},"owlbot":{"enabled":false,"isPaying":false,"customization":{"answerLength":"long","customTone":"","defaultAnswer":"","forbiddenWords":"","tone":"neutral"},"copilot":{"enabled":false,"hasBeenUsed":false,"installedCustomPage":""}},"owner":{"id":null,"email":null,"name":null},"plan":"enterprise","planOverride":"business","planSchedule":{"stripeScheduleId":null,"changeDate":null,"nextPlan":null},"planStatus":"","planTrial":"enterprise","readmeScore":{"components":{"newDesign":{"enabled":true,"points":25},"reference":{"enabled":true,"points":50},"tryItNow":{"enabled":true,"points":35},"syncingOAS":{"enabled":false,"points":10},"customLogin":{"enabled":true,"points":25},"metrics":{"enabled":false,"points":40},"recipes":{"enabled":true,"points":15},"pageVoting":{"enabled":true,"points":1},"suggestedEdits":{"enabled":true,"points":10},"support":{"enabled":false,"points":5},"htmlLanding":{"enabled":false,"points":5},"guides":{"enabled":true,"points":10},"changelog":{"enabled":true,"points":5},"glossary":{"enabled":true,"points":1},"variables":{"enabled":true,"points":1},"integrations":{"enabled":true,"points":2}},"totalScore":180},"reCaptchaSiteKey":"","reference":{"alwaysUseDefaults":false,"defaultExpandResponseExample":false,"defaultExpandResponseSchema":false,"enableOAuthFlows":true},"seo":{"overwrite_title_tag":false},"siblings":[{"_id":"649ca345fddb0a0067eb3bb3","flags":{"allowApiExplorerJsonEditor":false,"allowReusableOTPs":false,"alwaysShowDocPublishStatus":false,"allowXFrame":true,"correctnewlines":false,"dashReact":false,"disablePasswordlessLogin":false,"directGoogleToStableVersion":false,"disableAnonForum":false,"enterprise":true,"graphql":false,"migrationRun":false,"migrationSwaggerRun":false,"newEditor":true,"newEditorDash":true,"newMarkdownBetaProgram":true,"newSearch":true,"oauth":false,"oldMarkdown":false,"owlbotAi":false,"rdmdCompatibilityMode":false,"reviewWorkflow":true,"singleProjectEnterprise":false,"speedyRender":false,"staging":false,"star":false,"superHub":false,"swagger":false,"translation":false,"useReactApp":true,"useReactGLP":true,"apiV2":false,"dashQuickstart":false,"git":{"read":false,"write":false},"superHubBeta":false,"customBlocks":false,"disableAutoTranslate":false,"devDashHub":false,"disableSAMLScoping":false,"allowUnsafeCustomHtmlSuggestionsFromNonAdmins":false,"apiAccessRevoked":false,"passwordlessLogin":"default","disableSignups":false,"billingRedesignEnabled":true,"developerPortal":false,"mdx":false,"superHubDevelopment":false,"annualBillingEnabled":true,"devDashBillingRedesignEnabled":false,"enableOidc":false,"customComponents":false,"disableDiscussionSpamRecaptchaBypass":false,"developerViewUsersData":false,"changelogRssAlwaysPublic":false,"bidiSync":false,"superHubMigrationSelfServeFlow":false,"apiDesigner":false,"hideEnforceSSO":false,"localLLM":false,"superHubManageVersions":false,"gitSidebar":false,"superHubGlobalCustomBlocks":false,"childManagedBidi":false,"superHubBranches":false,"requiresJQuery":true,"externalSdkSnippets":false,"migrationPreview":false,"superHubPreview":false,"superHubBranchReviews":false,"superHubMergePermissions":false},"modules":{"landing":false,"docs":true,"examples":true,"reference":true,"graphql":false,"changelog":true,"discuss":false,"suggested_edits":true,"logs":false,"custompages":false,"tutorials":true},"nav_names":{"docs":"Documentation","reference":"API Reference","changelog":"What's New","discuss":"","recipes":"API Recipes","tutorials":""},"name":"Sigma Computing","subpath":"","subdomain":"sigma-computing","description":"Official documentation and help with data analysis and modeling, including guidance and best practices for building visualizations and dashboards for Sigma Computing, a cloud-based Business Intelligence (BI) platform.","robotsAllow":true,"is_active":true,"internal":"","owner":"649ca32661d50f005f8cc3cc","stable":"649ca346fddb0a0067eb3bb9","git":{"sync":{"connection":[],"github":[],"gitlab":[],"logs":[],"connections":[],"providers":[],"installationRequest":{}},"migration":{"createRepository":{},"transformation":{},"migratingPages":{},"enableSuperhub":{}}},"mcp":{"state":"disabled"},"github_user":"","github_repo":"","github_color":"green_007200"}],"stable":{"_id":"649ca346fddb0a0067eb3bb9","version":"1.0","version_clean":"1.0.0","codename":"published release","is_stable":true,"is_beta":false,"is_hidden":false,"is_deprecated":false,"categories":["649ca346fddb0a0067eb3bbb","649ca346fddb0a0067eb3bbb","649ca346fddb0a0067eb3bbd","649ca346fddb0a0067eb3bc7","649cd2e58e830b0043594f7a","649cd2ecbb269f000a63887d","649cd31bbf00340bdef3e2f7","651c34dcef8f7d0739f0173b","651c35f10173200035a349c0","651c36d1316003002b9ed00a","651c41952e7b890042b7ac08","651c41a7f4faca23b1574c49","651c41b113c6110067baacea","651c41d13a135100328c20e1","651c41fa36bd6c0744e775f2","651c4216f8718d00247b1a3a","651c4222ea0cf3005d770941","651c42300549a7000c374d0b","651c4246b391e10024bb7eb7","654c23e45c46e3001fe30231","654fa3e0eb858d002a30ea20","65528bc2d92a7a0010929ce3","6553805b6d22b5050b0d4ceb","6582405a0eea57006aed4eae","6583161b94525a000fcbbeed","6595d3a14c9897005b23823c","65a986b8232ad300548bd5c8","65b0a132512dd8004eced0ea","65b28293ef920800106c9d01","65cfb4006097150036c30aed","65d4ee5514e952003f783cb4","65d4ee76379a33006065466b","65f8f203690838004b91d149","65f8f304af8cd00025ffc68d","65f919d8f015400060e3c6ed","65f91d718b003f002bc7cb52","65f91e1aa36af9002c452747","65f91e8419171400198049e2","670971afbe04ab000f783a37","673f6ce14454f2006b52c16b","6791520ac0b8130053ef47c7","679a743bc633b8000fabb634","679a7804cfa7f900671aec24","679a7816dc56050024000e7e","679a7b5c5b2b3a0043f6b564","67ae45ac44ce8f006188ec6b","67d9afe618dc3d006c36bb6a","67d9b0a152539500604913e6","67d9b0aaada09900172d07fc","67d9b0adada09900172d07fe","67d9b0b0432e4100102b9258","67d9b0b2432e4100102b945f","67d9b0b4ada09900172d0809","67d9b0b7ada09900172d0a20","67d9b0b9ada09900172d0a22","67d9b0bcc39315006815a411","67d9b0bfc39315006815a413","67d9b0c2fd48c800596e8791","67d9b0c930e1140018fec2b3","67d9b0cdfd48c800596e879c","67d9b0d0d697d8002bdecb72","67d9b0d252a4f4006af0645c","67db3c5bc47e2800195583b4"],"project":"649ca345fddb0a0067eb3bb3","releaseDate":"2023-06-28T21:16:54.076Z","createdAt":"2023-06-28T21:16:54.089Z","updatedAt":"2025-03-19T21:51:23.752Z","__v":1,"pdfStatus":"error"},"subdomain":"sigma-computing","subpath":"","superHubWaitlist":true,"topnav":{"left":[],"right":[{"type":"home","text":"Home"},{"type":"url","text":"Community","url":"https://community.sigmacomputing.com/"},{"type":"url","text":"QuickStarts","url":"https://quickstarts.sigmacomputing.com/"},{"type":"url","text":"Status","url":"https://status.sigmacomputing.com/"}],"bottom":[],"edited":true},"trial":{"trialDeadlineEnabled":false,"trialEndsAt":"2023-09-15T21:16:53.761Z"},"translate":{"provider":"transifex","show_widget":false,"key_public":"","org_name":"","project_name":"","languages":[]},"url":"","versions":[{"_id":"66fef0381580a800453331ac","version":"0.0","version_clean":"0.0.0","codename":"Secret Staging Version","is_stable":false,"is_beta":false,"is_hidden":true,"is_deprecated":false,"categories":["649ca346fddb0a0067eb3bbb","649ca346fddb0a0067eb3bbb","66fef0381580a80045332ddf","649ca346fddb0a0067eb3bc7","649cd2e58e830b0043594f7a","649cd2ecbb269f000a63887d","649cd31bbf00340bdef3e2f7","66fef0381580a80045332de0","651c35f10173200035a349c0","651c36d1316003002b9ed00a","66fef0381580a80045332de1","66fef0381580a80045332de2","66fef0381580a80045332de3","651c41d13a135100328c20e1","66fef0381580a80045332de4","651c4216f8718d00247b1a3a","66fef0381580a80045332de5","66fef0381580a80045332de6","66fef0381580a80045332de7","654c23e45c46e3001fe30231","66fef0381580a80045332de8","66fef0381580a80045332de9","66fef0381580a80045332dea","6582405a0eea57006aed4eae","66fef0381580a80045332deb","66fef0381580a80045332dec","66fef0381580a80045332ded","66fef0381580a80045332dee","66fef0381580a80045332def","66fef0381580a80045332df0","65d4ee5514e952003f783cb4","66fef0381580a80045332df1","66fef0381580a80045332df2","66fef0381580a80045332df3","66fef0381580a80045332df4","66fef0381580a80045332df5","66fef0381580a80045332df6","66fef0381580a80045332df7","6746100bfd182300476268a5","6746154522e4e000469a538b","674631ec8e18569cf1294407","674631f213c78000119224c9","674631f77e6ad7001d4ce737","67463ef86533e800104fd401","67463efd889e0e0038be1a99","684cc16f67868400105504b9"],"pdfStatus":"error","project":"649ca345fddb0a0067eb3bb3","releaseDate":"2023-06-28T21:16:54.076Z","createdAt":"2024-10-03T19:27:52.123Z","updatedAt":"2025-06-14T00:25:19.495Z","__v":1,"forked_from":"649ca346fddb0a0067eb3bb9"},{"_id":"649ca346fddb0a0067eb3bb9","version":"1.0","version_clean":"1.0.0","codename":"published release","is_stable":true,"is_beta":false,"is_hidden":false,"is_deprecated":false,"categories":["649ca346fddb0a0067eb3bbb","649ca346fddb0a0067eb3bbb","649ca346fddb0a0067eb3bbd","649ca346fddb0a0067eb3bc7","649cd2e58e830b0043594f7a","649cd2ecbb269f000a63887d","649cd31bbf00340bdef3e2f7","651c34dcef8f7d0739f0173b","651c35f10173200035a349c0","651c36d1316003002b9ed00a","651c41952e7b890042b7ac08","651c41a7f4faca23b1574c49","651c41b113c6110067baacea","651c41d13a135100328c20e1","651c41fa36bd6c0744e775f2","651c4216f8718d00247b1a3a","651c4222ea0cf3005d770941","651c42300549a7000c374d0b","651c4246b391e10024bb7eb7","654c23e45c46e3001fe30231","654fa3e0eb858d002a30ea20","65528bc2d92a7a0010929ce3","6553805b6d22b5050b0d4ceb","6582405a0eea57006aed4eae","6583161b94525a000fcbbeed","6595d3a14c9897005b23823c","65a986b8232ad300548bd5c8","65b0a132512dd8004eced0ea","65b28293ef920800106c9d01","65cfb4006097150036c30aed","65d4ee5514e952003f783cb4","65d4ee76379a33006065466b","65f8f203690838004b91d149","65f8f304af8cd00025ffc68d","65f919d8f015400060e3c6ed","65f91d718b003f002bc7cb52","65f91e1aa36af9002c452747","65f91e8419171400198049e2","670971afbe04ab000f783a37","673f6ce14454f2006b52c16b","6791520ac0b8130053ef47c7","679a743bc633b8000fabb634","679a7804cfa7f900671aec24","679a7816dc56050024000e7e","679a7b5c5b2b3a0043f6b564","67ae45ac44ce8f006188ec6b","67d9afe618dc3d006c36bb6a","67d9b0a152539500604913e6","67d9b0aaada09900172d07fc","67d9b0adada09900172d07fe","67d9b0b0432e4100102b9258","67d9b0b2432e4100102b945f","67d9b0b4ada09900172d0809","67d9b0b7ada09900172d0a20","67d9b0b9ada09900172d0a22","67d9b0bcc39315006815a411","67d9b0bfc39315006815a413","67d9b0c2fd48c800596e8791","67d9b0c930e1140018fec2b3","67d9b0cdfd48c800596e879c","67d9b0d0d697d8002bdecb72","67d9b0d252a4f4006af0645c","67db3c5bc47e2800195583b4"],"project":"649ca345fddb0a0067eb3bb3","releaseDate":"2023-06-28T21:16:54.076Z","createdAt":"2023-06-28T21:16:54.089Z","updatedAt":"2025-03-19T21:51:23.752Z","__v":1,"pdfStatus":"error"}],"variableDefaults":[{"source":"security","type":"oauth2","_id":"65831239fc5926006d9736e8","name":"oauth2","apiSetting":"654c23e45c46e3001fe30230"},{"source":"security","type":"http","_id":"68534a78597e44005384d7c6","name":"basicAuth","scheme":"basic","apiSetting":"6583161b94525a000fcbbeeb"}],"webhookEnabled":false,"parent":{"_id":"64dd46f6189ee3000dc7f014","appearance":{"rdmd":{"callouts":{"useIconFont":false},"theme":{"background":"","border":"","markdownEdge":"","markdownFont":"","markdownFontSize":"","markdownLineHeight":"","markdownRadius":"","markdownText":"","markdownTitle":"","markdownTitleFont":"","mdCodeBackground":"","mdCodeFont":"","mdCodeRadius":"","mdCodeTabs":"","mdCodeText":"","tableEdges":"","tableHead":"","tableHeadText":"","tableRow":"","tableStripe":"","tableText":"","text":"","title":""}},"main_body":{"type":"links"},"colors":{"highlight":"","main":"#171717","main_alt":"","header_text":"","body_highlight":"","custom_login_link_color":""},"typography":{"headline":"Open+Sans:400:sans-serif","body":"Open+Sans:400:sans-serif","typekit":false,"tk_key":"","tk_headline":"","tk_body":""},"header":{"style":"solid","img":[],"img_size":"auto","img_pos":"tl","linkStyle":"buttons"},"body":{"style":"none"},"global_landing_page":{"html":"\n\n\n\n\n\n\n
\n
\n
\n
Sigma Documentation
\n
Explore feature overviews, step-by-step guides, FAQs, and more
\n \n
\n
\n\n
\n
\n
\n
\n
\n\n
\n\n \n
\n \n
What's New
\n
Keep up with our latest feature and function releases.
or lists\n\t\t\t\t\t\tvar images = document.querySelectorAll('img:not(p img):not(table img):not(li img):not(.rm-Header img):not(.notification-ribbon img)');\n\n // Update the align attribute to \"left\" and add a margin of 10px under each selected image\n images.forEach(function(image) {\n image.setAttribute('align', 'left');\n image.style.marginBottom = '10px';\n });\n }, 1000); // 1 second timeout\n });\n\n//-------------------------------------------------//","html_promo":"","html_body":"","html_footer":"","html_head":"\n\n\n\n\n","html_footer_meta":"","html_hidelinks":false,"showVersion":true,"hideTableOfContents":false,"nextStepsLabel":"","promos":[],"changelog":{"layoutExpanded":false,"showAuthor":true,"showExactDate":false},"allowApiExplorerJsonEditor":false,"ai_dropdown":"disabled","ai_options":{"chatgpt":"enabled","claude":"enabled","clipboard":"enabled","view_as_markdown":"enabled","copilot":"enabled","perplexity":"enabled"},"showPageIcons":true,"layout":{"full_width":false,"style":"classic"}},"child":{"_id":"649ca345fddb0a0067eb3bb3","appearance":{"rdmd":{"callouts":{"useIconFont":false},"theme":{"background":"","border":"","markdownEdge":"","markdownFont":"","markdownFontSize":"","markdownLineHeight":null,"markdownRadius":"","markdownText":"","markdownTitle":"","markdownTitleFont":"","mdCodeBackground":"","mdCodeFont":"","mdCodeRadius":"","mdCodeTabs":"","mdCodeText":"","tableEdges":"","tableHead":"","tableHeadText":"","tableRow":"","tableStripe":"","tableText":"","text":"","title":""}},"main_body":{"type":"links"},"colors":{"highlight":"","main":"#000","main_alt":"","header_text":"","body_highlight":"","custom_login_link_color":""},"typography":{"headline":"Open+Sans:400:sans-serif","body":"Open+Sans:400:sans-serif","typekit":false,"tk_key":"","tk_headline":"","tk_body":""},"header":{"style":"solid","img":[],"img_size":"auto","img_pos":"tl","linkStyle":"buttons"},"body":{"style":"none"},"global_landing_page":{"html":"","redirect":""},"referenceSimpleMode":true,"referenceLayout":"row","link_logo_to_url":false,"theme":"solid","colorScheme":"system","overlay":"triangles","landing":true,"sticky":false,"hide_logo":false,"childrenAsPills":false,"subheaderStyle":"links","splitReferenceDocs":false,"showMetricsInReference":true,"logo":["https://files.readme.io/e76fa049881caf557934797e79a66912aa149111831b86e073876ab293183a04-small-Sigma_PrimaryLogo_ShadowBlack.png","e76fa049881caf557934797e79a66912aa149111831b86e073876ab293183a04-small-Sigma_PrimaryLogo_ShadowBlack.png",281,80,"#2c2c2c","https://files.readme.io/3132f8acca21f616df1f3a05716c2385683655e39c3fdc1437e011dc0a8bed9e-Sigma_PrimaryLogo_ShadowBlack.png","66c7b8412da448002267ed80"],"loginLogo":[],"logo_white":["https://files.readme.io/7f03afe0da103f607fe99b3dfd70152af7af0a83a49b96f1c4471df21d52e732-small-Sigma_PrimaryLogo_White.png","7f03afe0da103f607fe99b3dfd70152af7af0a83a49b96f1c4471df21d52e732-small-Sigma_PrimaryLogo_White.png",281,80,"#ffffff","https://files.readme.io/6f89d040d3403f20d85e888258c32484a27cfe67a36e71dba608a0b591283a88-Sigma_PrimaryLogo_White.png","66c7b9b510090e00122fe35d"],"logo_white_use":true,"logo_large":false,"favicon":["https://files.readme.io/2333877-small-1687535336281.jpg","2333877-small-1687535336281.jpg",32,32,"#000000","https://files.readme.io/9b495d4-1687535336281.jpg","650b706c4c382400392fca55"],"stylesheet":"","stylesheet_hub2":"/* all CSS should be saved to the group stylesheet */\n\n/*Temporary fix for hiding token by default*/\n.rm-APIAuth {\n filter: blur(2px); /* Adjust the value to control the amount of blur */\n}\n\n/* Ensure no underline on tabs */\n.SearchTabs-Tab2715KRxrb5JT {\n text-decoration: none !important;\n}","stylesheet_hub3":"","javascript":"","javascript_hub2":"//--------------------------------------------------\n// #5 Auto-Hide Auth Input in API Ref Section\n$(window).on('pageLoad', function(e, state) {\n // Wait for 1 second before executing the function\n setTimeout(function() {\n // Find the .rm-APIAuth section and change its blur\n var section = document.querySelector('.rm-APIAuth');\n if (section) {\n section.style.filter = 'none';\n } else {\n console.error('.rm-APIAuth section not found');\n }\n \n // Find the button by its class name\n var button = document.querySelector('.Button_xs.rm-APIAuth-lock');\n \n // Check if the button exists before attempting to click it\n if (button) {\n button.click();\n } else {\n console.error('Button not found');\n }\n }, 900); \n});\n\n\n\n//--------------------------------------------------\n// #7 Automatically click AXIOS (only when Node Language is Active) on pages with \"/reference/\" path\ndocument.addEventListener('DOMContentLoaded', function() {\n // Check if the current page is in the \"/reference/\" path\n if (window.location.pathname.startsWith('/reference/')) {\n const clickExample = () => {\n const examples = document.querySelector(\"[class*='rm-PlaygroundRequest']\");\n const defaultLanguage = document.querySelector('[class*=\"LanguagePicker-button\"].rm-LanguageButton_active');\n\n // Check if the default language is \"Node\"\n if (examples && defaultLanguage && defaultLanguage.textContent.trim() === 'Node') {\n clearInterval(interval);\n const dropdownButton = document.querySelector('button.Button.Button_xs.Dropdown-toggle.Button_contrast_ghost.Button_contrast');\n if (dropdownButton) {\n dropdownButton.click(); // Click the dropdown button\n \n // Wait for the dropdown menu to appear\n setTimeout(() => {\n // Find the tippy container\n const tippyContainer = document.querySelector('[id^=\"tippy-\"]');\n if (tippyContainer) {\n // Find the dropdown menu within the tippy container\n const dropdownMenu = tippyContainer.querySelector('.Dropdown-content');\n if (dropdownMenu) {\n // Find the \"api\" option within the dropdown menu\n const apiOption = dropdownMenu.querySelector('.Menu-Item_link span');\n if (apiOption && apiOption.textContent.trim() === 'api') {\n // Remove the \"api\" option from the DOM\n apiOption.parentElement.remove();\n }\n\n // Find the \"Axios\" option within the dropdown menu\n const axiosOption = dropdownMenu.querySelector('.Menu-Item_link span');\n if (axiosOption && axiosOption.textContent.trim() === 'Axios') {\n // Click the \"Axios\" option\n axiosOption.click();\n }\n }\n }\n }, 100); // Adjust the delay time as needed\n }\n }\n };\n const interval = setInterval(clickExample, 100);\n }\n});\n//--------------------------------------------------\n// #8 Custom Expandable Content Components (?)\n// REMOVED PER CUSTOMER\n\n//--------------------------------------------------\n// #9 Custom Tabs (?)\ndocument.addEventListener(\"DOMContentLoaded\", function() {\n // Show the default tab content\n openTab('tab1');\n});\n\nfunction openTab(tabId) {\n // Hide all tab content\n document?.querySelectorAll('.tab-content').forEach(function(tabContent) {\n tabContent.style.display = 'none';\n });\n\n // Deactivate all tab buttons\n document?.querySelectorAll('.tabs button').forEach(function(tabButton) {\n tabButton.classList.remove('active-tab');\n });\n\n // Show the selected tab content\n document.getElementById(tabId).style.display = 'block';\n\n // Activate the clicked tab button\n document.getElementById(tabId + 'Btn').classList.add('active-tab');\n}\n\n//--------------------------------------------------\n// #10 Lists within Paragraphs (?)\n function wrapLiTextInP(listId) {\n var listItems = document.getElementById(listId).querySelectorAll('li');\n listItems.forEach(function (li) {\n var paragraphs = li.querySelectorAll('p');\n if (paragraphs.length === 0) {\n var textContent = li.innerHTML.trim();\n li.innerHTML = '
' + textContent + '
';\n }\n });\n }\n\n document.addEventListener('DOMContentLoaded', function () {\n wrapLiTextInP('myList');\n wrapLiTextInP('myOrdered');\n });\n\n\n//--------------------------------------------------\n// #11 Save the access_token value into local storage/auto populate\n\n function waitForElement(selector) {\n return new Promise((resolve, reject) => {\n const observer = new MutationObserver((mutations, obs) => {\n const element = document.querySelectorAll(selector);\n if (element) {\n obs.disconnect();\n resolve(element);\n }\n });\n\n observer.observe(document.body, {\n childList: true,\n subtree: true,\n });\n\n // Optional: Timeout to avoid infinite waiting\n setTimeout(() => {\n observer.disconnect();\n reject(new Error('Element not found'));\n }, 30000); // 30 seconds timeout\n });\n }\n\n const addTryItButtonClickEvent = async () => {\n try {\n // Wait for the div elements containing the class attribute containing 'rm-PlaygroundRequest'\n await waitForElement(\n '#ReferencePlayground > section[class*=\"Playground-section\"][class*=\"Playground-section_sticky\"] > div > footer > button'\n );\n console.log(\n 'FOUND ELEMENTS: #ReferencePlayground > section[class*=\"Playground-section\"][class*=\"Playground-section_sticky\"] > div > footer > button'\n );\n // Find the div elements containing the class attribute containing 'rm-PlaygroundRequest'\n const divsWithClass = document.querySelectorAll(\n 'div[class*=rm-PlaygroundRequest]'\n );\n\n // Convert the NodeList to an array for iteration\n const divArray = Array.from(divsWithClass);\n\n // Iterate through each div element with the specified class attribute\n divArray.forEach(divElement => {\n // Find the footer tag inside the current div element\n const footerInDiv = divElement.querySelector('footer');\n\n if (footerInDiv) {\n // Find the Try It button inside the footer tag\n const tryItButton = footerInDiv.querySelector(\n 'button[class*=rm-TryIt]'\n );\n\n // Check if the button contains the text 'Try It!'\n if (tryItButton && tryItButton.textContent.trim() === 'Try It!') {\n // Add event listener to the \"Try It\" button only on the /token page\n tryItButton.addEventListener('click', event => {\n event.preventDefault();\n // Check if the current URL ends with '/token'\n if (window.location.pathname.endsWith('/token')) {\n // Execute the additional logic after a delay on the /token page\n console.log('Expecing new function');\n }\n });\n }\n }\n });\n } catch (error) {\n console.error('Error:', error);\n }\n };\n\n // Call the function to add the event listener\n addTryItButtonClickEvent();\n\n\ndocument.addEventListener('DOMContentLoaded', () => {\n // Function to handle the additional logic after a delay\n const waitForResponse = () => {\n setTimeout(() => {\n // Your additional logic after a delay of 1 second goes here\n\n const extractTokens = () => {\n let tokens = {};\n\n // Query the pre element with the specified class\n const requestCode = document.querySelector('pre.CodeSnippet');\n const responseCode = document.querySelector(\n 'div.rm-PlaygroundResponse'\n );\n\n const requestText = requestCode.textContent;\n const responseText = responseCode.textContent;\n\n // Define the regex to find the value after \"Basic\"\n const basicAuthRegex = /authorization: Basic ([^']+)'?/;\n const accessTokenRegex = /\"access_token\":\\s*\"([^\"]+)\"/;\n const refreshTokenRegex = /\"refresh_token\":\\s*\"([^\"]+)\"/;\n const expiresInRegex = /\"expires_in\":\\s*(\\d{4})/;\n\n const basicAuthToken = requestText.match(basicAuthRegex);\n if (basicAuthToken && basicAuthToken[1]) {\n tokens.basic_auth = basicAuthToken[1];\n } else {\n console.error('Authorization Basic value not found');\n }\n\n const accessToken = responseText.match(accessTokenRegex);\n if (accessToken && accessToken[1]) {\n tokens.access_token = accessToken[1];\n } else {\n console.error('Access Token value not found');\n }\n\n const refreshToken = responseText.match(refreshTokenRegex);\n if (refreshToken && refreshToken[1]) {\n tokens.refresh_token = refreshToken[1];\n } else {\n console.error('Refresh Token value not found');\n }\n\n const expiresIn = responseText.match(expiresInRegex);\n if (expiresIn && expiresIn[1]) {\n tokens.expires_in = expiresIn[1];\n } else {\n console.error('Token Expiration value not found');\n }\n\n return tokens;\n };\n\n // Function to save the tokens object into local storage\n const saveTokensToLocalStorage = tokens => {\n if (tokens.access_token || tokens.refresh_token || tokens.basic_auth) {\n const expirationTime = Date.now() + tokens.expires_in * 1000;\n const storedTokens = JSON.parse(localStorage.getItem('tokens')) || {};\n const updatedTokens = {\n ...storedTokens,\n ...tokens,\n expiration_time: expirationTime,\n };\n localStorage.setItem('tokens', JSON.stringify(updatedTokens));\n }\n };\n\n // Retrieve tokens from the HTML structure\n const tokens = extractTokens();\n // Save tokens into local storage\n saveTokensToLocalStorage(tokens);\n // Set a timeout to refresh the token 3 minutes before it expires\n setRefreshTokenTimeout(tokens.expires_in);\n }, 1500);\n };\n\n // Function to set a timeout to refresh the token\n const setRefreshTokenTimeout = expiresIn => {\n const refreshIn = (expiresIn - 180) * 1000; // Refresh 3 minutes before expiration\n setTimeout(() => {\n getNewAccessToken();\n }, refreshIn);\n };\n\n // Function to add event listener to the \"Try It\" button\n const addTryItButtonClickEvent = () => {\n setTimeout(() => {\n // Find the div elements containing the class attribute containing 'rm-PlaygroundRequest'\n const divsWithClass = document.querySelectorAll(\n 'div[class*=rm-PlaygroundRequest]'\n );\n\n // Convert the NodeList to an array for iteration\n const divArray = Array.from(divsWithClass);\n\n // Iterate through each div element with the specified class attribute\n divArray.forEach(divElement => {\n // Find the footer tag inside the current div element\n const footerInDiv = divElement.querySelector('footer');\n\n if (footerInDiv) {\n // Find the Try It button inside the footer tag\n const tryItButton = footerInDiv.querySelector(\n 'button[class*=rm-TryIt]'\n );\n\n // Check if the button contains the text 'Try It!'\n if (tryItButton && tryItButton.textContent.trim() === 'Try It!') {\n // Add event listener to the \"Try It\" button only on the /token page\n tryItButton.addEventListener('click', event => {\n event.preventDefault();\n // Check if the current URL ends with '/token'\n if (window.location.pathname.endsWith('/token')) {\n // Execute the additional logic after a delay on the /token page\n waitForResponse();\n }\n });\n }\n }\n });\n }, 1000);\n };\n\n // Function to monitor URL changes using window.onpopstate\n window.onpopstate = () => {\n // Re-add the event listener when the URL changes\n addTryItButtonClickEvent();\n };\n\n // Function to observe DOM mutations using MutationObserver\n const observer = new MutationObserver(() => {\n // Re-add the event listener on DOM mutations\n addTryItButtonClickEvent();\n });\n\n // Start observing mutations in the document\n observer.observe(document.body, { attributes: true, subtree: true });\n\n // Add the initial event listener on page load\n addTryItButtonClickEvent();\n});\n\ndocument.addEventListener('DOMContentLoaded', () => {\n let isUpdated = false;\n\n const updateBearerToken = async () => {\n setTimeout(async () => {\n const inputField = document.getElementById('APIAuth-token');\n const inputValue = inputField?.value;\n\n // Check if access_token exists in local storage\n const storedTokens = JSON.parse(localStorage.getItem('tokens'));\n let storedToken = storedTokens?.access_token;\n\n if (!storedToken) {\n await getNewAccessToken(); // Refresh the access token\n storedToken = JSON.parse(localStorage.getItem('tokens'))?.access_token;\n }\n\n if (!storedToken) return; // Stop the code execution if access_token does not exist\n\n const event = new Event('change', { bubbles: true });\n\n if (inputValue !== storedToken || inputValue === '') {\n const nativeInputValueSetter = Object.getOwnPropertyDescriptor(\n window.HTMLInputElement.prototype,\n 'value'\n ).set;\n nativeInputValueSetter.call(inputField, storedToken);\n\n // Dispatch 'input' event to mimic the user input\n const inputEvent = new Event('input', {\n bubbles: true,\n cancelable: true,\n });\n inputField.dispatchEvent(inputEvent);\n isUpdated = true;\n } else if (!isUpdated) {\n inputField.dispatchEvent(event);\n }\n }, 1000);\n };\n\n // Create a MutationObserver instance\n const observer = new MutationObserver(updateBearerToken);\n\n // Observe changes in the document's body and its descendants\n observer.observe(document.body, {\n subtree: true,\n childList: true,\n attributes: true,\n });\n\n // Call the function on initial load with a delay, but not on \"/token\" pages\n if (\n window.location.href.includes('/reference') &&\n !window.location.href.endsWith('/reference/token')\n ) {\n updateBearerToken();\n window.onpopstate = updateBearerToken;\n }\n\n // Set the initial refresh token timeout if the tokens are already in local storage\n const storedTokens = JSON.parse(localStorage.getItem('tokens'));\n if (storedTokens?.expiration_time) {\n const expiresIn = (storedTokens.expiration_time - Date.now()) / 1000;\n setRefreshTokenTimeout(expiresIn);\n }\n});\n\n// Function to get a new access_token using the refresh_token\nconst getNewAccessToken = async () => {\n const storedTokens = JSON.parse(localStorage.getItem('tokens'));\n const refreshToken = storedTokens?.refresh_token;\n const basicAuth = storedTokens?.basic_auth;\n\n if (!refreshToken) {\n console.error('No refresh token found');\n return;\n }\n\n if (!basicAuth) {\n console.error('No Basic Auth value found');\n return;\n }\n\n try {\n const response = await fetch(\n 'https://api.sigmacomputing.com/v2/auth/token',\n {\n method: 'POST',\n headers: {\n accept: 'application/json',\n authorization: `Basic ${basicAuth}`,\n 'content-type': 'application/x-www-form-urlencoded',\n },\n body: new URLSearchParams({\n grant_type: 'refresh_token',\n refresh_token: refreshToken,\n }),\n }\n );\n\n if (!response.ok) {\n throw new Error('Failed to refresh token');\n }\n\n const data = await response.json();\n const newAccessToken = data.access_token;\n const newRefreshToken = data.refresh_token || refreshToken;\n const newExpiresIn = data.expires_in;\n\n // Save the new tokens to local storage\n const expirationTime = Date.now() + newExpiresIn * 1000;\n const updatedTokens = {\n access_token: newAccessToken,\n refresh_token: newRefreshToken,\n basic_auth: basicAuth,\n expiration_time: expirationTime,\n };\n localStorage.setItem('tokens', JSON.stringify(updatedTokens));\n\n // Set a timeout to refresh the token 3 minutes before it expires\n setRefreshTokenTimeout(newExpiresIn);\n\n console.log('Access token refreshed successfully');\n } catch (error) {\n console.error('Error refreshing access token:', error);\n }\n};\n\n\n//--------------------------------------------------\n// #12 Search Tab Popup Auto-Click Current Section\ndocument.addEventListener(\"DOMContentLoaded\", function() {\n setTimeout(function() {\n let currentActiveTab = null;\n\n function selectTabByUrl() {\n const tabs = document.querySelectorAll('.SearchTabs-Tab2715KRxrb5JT');\n const path = window.location.pathname;\n\n let tabToSelect;\n if (path.includes('/docs')) {\n tabToSelect = 'Documentation';\n } else if (path.includes('/recipes')) {\n tabToSelect = 'Recipes';\n } else if (path.includes('/reference')) {\n tabToSelect = 'API Reference';\n } else if (path.includes('/changelog')) {\n tabToSelect = \"What's New\";\n }\n\n if (tabToSelect) {\n tabs.forEach(tab => {\n const spanElement = tab.querySelector('span');\n if (spanElement && spanElement.innerText.includes(tabToSelect)) {\n tab.click(); // Simulate a click on the tab\n }\n });\n } else {\n // Default to the first tab if no specific tab is selected based on URL\n if (tabs.length > 0) {\n tabs[0].click(); // Simulate a click on the first tab\n }\n }\n }\n\n function handleTabClick(event) {\n if (currentActiveTab) {\n currentActiveTab.setAttribute('aria-selected', 'false');\n currentActiveTab.classList.remove('Tabs-listItem_active');\n }\n\n const clickedTab = event.currentTarget;\n clickedTab.setAttribute('aria-selected', 'true');\n clickedTab.classList.add('Tabs-listItem_active');\n\n currentActiveTab = clickedTab; // Update the currently active tab\n }\n\n // Add click event listeners to tabs\n const tabs = document.querySelectorAll('.SearchTabs-Tab2715KRxrb5JT');\n tabs.forEach(tab => {\n tab.addEventListener('click', handleTabClick);\n });\n\n // Initial selection when the page loads\n selectTabByUrl();\n\n // Listen for changes in URL (handling SPA navigation)\n window.addEventListener('popstate', selectTabByUrl);\n\n // Listen for the search modal being opened\n const searchButton = document.querySelector('.rm-SearchToggle');\n if (searchButton) {\n searchButton.addEventListener('click', () => {\n if (currentActiveTab) {\n currentActiveTab.setAttribute('aria-selected', 'false');\n currentActiveTab.classList.remove('Tabs-listItem_active');\n }\n selectTabByUrl();\n });\n }\n // Additionally, for history.pushState or history.replaceState calls, you might need to override those\n (function(history) {\n const pushState = history.pushState;\n const replaceState = history.replaceState;\n\n history.pushState = function(state, title, url) {\n pushState.call(history, state, title, url);\n selectTabByUrl();\n };\n\n history.replaceState = function(state, title, url) {\n replaceState.call(history, state, title, url);\n selectTabByUrl();\n };\n })(window.history);\n }, 500); // Adjust the timeout duration as needed\n});\n\n//------------------------------------------------------------\n// #13 Changes username to client ID and password to client secret.\n// Function to change the placeholders\nfunction changePlaceholders() {\n var userInput = document.querySelector('input[name=\"user\"]');\n var passInput = document.querySelector('input[name=\"pass\"]');\n\n if (userInput) {\n userInput.placeholder = \"Client ID\";\n }\n\n if (passInput) {\n passInput.placeholder = \"Client Secret\";\n }\n}\n\n// Function to periodically check for the presence of input fields\nfunction periodicCheck() {\n changePlaceholders();\n // Set a delay to check again after 500ms if inputs are not yet loaded\n if (!document.querySelector('input[name=\"user\"]') || !document.querySelector('input[name=\"pass\"]')) {\n setTimeout(periodicCheck, 500);\n }\n}\n\n// MutationObserver to watch for changes in the DOM and apply the changes when elements are loaded\nvar observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(mutation) {\n if (mutation.addedNodes.length) {\n changePlaceholders();\n }\n });\n});\n\n// Start observing the document for changes\nobserver.observe(document.body, { childList: true, subtree: true });\n\n// Initial call to handle already loaded elements and start periodic check\nchangePlaceholders();\nperiodicCheck();","html_promo":"","html_body":"","html_footer":"","html_head":"\n","html_footer_meta":"","html_hidelinks":false,"showVersion":false,"hideTableOfContents":false,"nextStepsLabel":"Related resources","promos":[{"extras":{"type":"buttons","buttonPrimary":"get-started","buttonSecondary":"none"},"title":"The Sigma Computing Developer Hub","text":"Welcome to the Sigma Computing developer hub. You'll find comprehensive guides and documentation to help you start working with Sigma Computing as quickly as possible, as well as support if you get stuck. Let's jump right in!","_id":"649ca345fddb0a0067eb3bb5"}],"changelog":{"layoutExpanded":true,"showAuthor":false,"showExactDate":true},"allowApiExplorerJsonEditor":false,"ai_dropdown":"disabled","ai_options":{"chatgpt":"enabled","claude":"enabled","clipboard":"enabled","view_as_markdown":"enabled","copilot":"enabled"},"showPageIcons":true,"layout":{"full_width":false,"style":"classic"}},"custom_domain":"","childrenProjects":[],"derivedPlan":"enterprise","description":"Official documentation and help with data analysis and modeling, including guidance and best practices for building visualizations and dashboards for Sigma Computing, a cloud-based Business Intelligence (BI) platform.","isExternalSnippetActive":false,"error404":"custom-error-page","experiments":[],"first_page":"landing","flags":{"allowApiExplorerJsonEditor":false,"allowReusableOTPs":false,"alwaysShowDocPublishStatus":false,"allowXFrame":true,"correctnewlines":false,"dashReact":false,"disablePasswordlessLogin":false,"directGoogleToStableVersion":false,"disableAnonForum":false,"enterprise":true,"graphql":false,"migrationRun":false,"migrationSwaggerRun":false,"newEditor":true,"newEditorDash":true,"newMarkdownBetaProgram":true,"newSearch":true,"oauth":false,"oldMarkdown":false,"owlbotAi":false,"rdmdCompatibilityMode":false,"reviewWorkflow":true,"singleProjectEnterprise":false,"speedyRender":false,"staging":false,"star":false,"superHub":false,"swagger":false,"translation":false,"useReactApp":true,"useReactGLP":true,"apiV2":false,"dashQuickstart":false,"git":{"read":false,"write":false},"superHubBeta":false,"customBlocks":false,"disableAutoTranslate":false,"devDashHub":false,"disableSAMLScoping":false,"allowUnsafeCustomHtmlSuggestionsFromNonAdmins":false,"apiAccessRevoked":false,"passwordlessLogin":"default","disableSignups":false,"billingRedesignEnabled":true,"developerPortal":false,"mdx":false,"superHubDevelopment":false,"annualBillingEnabled":true,"devDashBillingRedesignEnabled":false,"enableOidc":false,"customComponents":false,"disableDiscussionSpamRecaptchaBypass":false,"developerViewUsersData":false,"changelogRssAlwaysPublic":false,"bidiSync":false,"superHubMigrationSelfServeFlow":false,"apiDesigner":false,"hideEnforceSSO":false,"localLLM":false,"superHubManageVersions":false,"gitSidebar":false,"superHubGlobalCustomBlocks":false,"childManagedBidi":false,"superHubBranches":false,"requiresJQuery":true,"externalSdkSnippets":false,"migrationPreview":false,"superHubPreview":false,"superHubBranchReviews":false,"superHubMergePermissions":false},"fullBaseUrl":"https://sigma-computing.readme.io/","git":{"migration":{"createRepository":{},"transformation":{},"migratingPages":{},"enableSuperhub":{}},"sync":{"linked_repository":{},"installationRequest":{},"connections":[],"providers":[]}},"glossaryTerms":[{"_id":"64ada7f90ca32200383568a7","term":"CDW","definition":"Cloud data warehouse"},{"_id":"655e8c4ba56e64005448ecee","term":"DBMS","definition":"Database management system"},{"_id":"656ac7ed8e9cdc0045d6a1dc","term":"connection","definition":"[placeholder]"},{"_id":"656ac7f7a705200689a470a8","term":"database","definition":"[placeholder]"},{"_id":"656ac802c221800068b2e621","term":"schema","definition":"[placeholder]"},{"_id":"656ac80d312f4107a76fc745","term":"database table","definition":"[placeholder]"},{"_id":"661e0f1374c914004b2029aa","term":"sharing organization","definition":"In cross-org sharing, the Sigma organization that shares the workbook template with another organization."},{"_id":"661e0f3557912a00256ffca6","term":"receiving organization","definition":"In cross-org sharing, the Sigma organization that receives a shared workbook template from another organization."},{"_id":"662003129b691d001ef35c18","term":"trigger","definition":"In actions, the user interaction with a specific element (the trigger element)."},{"_id":"662003474df46c00118fac64","term":"effect","definition":"In actions, the defined response to the user interaction with a trigger element."},{"_id":"6633f37a23450f004663208f","term":"type inference","definition":"The ability to recognize input patterns and contextual cues to automatically determine data type without explicit declarations."}],"graphqlSchema":"","gracePeriod":{"enabled":false,"endsAt":null},"shouldGateDash":false,"healthCheck":{"provider":"","settings":{}},"intercom_secure_emailonly":false,"intercom":"","is_active":true,"integrations":{"login":{}},"internal":"","jwtExpirationTime":0,"landing_bottom":[],"mdxMigrationStatus":"rdmd","metrics":{"monthlyLimit":0,"thumbsEnabled":true,"monthlyPurchaseLimit":0,"meteredBilling":{}},"modules":{"landing":false,"docs":true,"examples":true,"reference":true,"graphql":false,"changelog":true,"discuss":false,"suggested_edits":true,"logs":false,"custompages":false,"tutorials":true},"name":"Sigma Computing","nav_names":{"docs":"Documentation","reference":"API Reference","changelog":"What's New","discuss":"","recipes":"API Recipes","tutorials":""},"oauth_url":"","onboardingCompleted":{"documentation":true,"appearance":true,"jwt":true,"api":true,"logs":false,"domain":false,"metricsSDK":false},"owlbot":{"enabled":false,"isPaying":false,"customization":{"answerLength":"long","customTone":"","defaultAnswer":"","forbiddenWords":"","tone":"neutral"},"copilot":{"enabled":false,"hasBeenUsed":false,"installedCustomPage":""}},"owner":{"id":null,"email":null,"name":null},"plan":"enterprise","planOverride":"","planSchedule":{"stripeScheduleId":null,"changeDate":null,"nextPlan":null},"planStatus":"","planTrial":"enterprise","readmeScore":{"components":{"newDesign":{"enabled":true,"points":25},"reference":{"enabled":true,"points":50},"tryItNow":{"enabled":true,"points":35},"syncingOAS":{"enabled":false,"points":10},"customLogin":{"enabled":true,"points":25},"metrics":{"enabled":false,"points":40},"recipes":{"enabled":true,"points":15},"pageVoting":{"enabled":true,"points":1},"suggestedEdits":{"enabled":true,"points":10},"support":{"enabled":false,"points":5},"htmlLanding":{"enabled":false,"points":5},"guides":{"enabled":true,"points":10},"changelog":{"enabled":true,"points":5},"glossary":{"enabled":true,"points":1},"variables":{"enabled":true,"points":1},"integrations":{"enabled":true,"points":2}},"totalScore":180},"reCaptchaSiteKey":"","reference":{"alwaysUseDefaults":false,"defaultExpandResponseExample":false,"defaultExpandResponseSchema":false,"enableOAuthFlows":true},"seo":{"overwrite_title_tag":false},"stable":{"_id":"649ca346fddb0a0067eb3bb9","version":"1.0","version_clean":"1.0.0","codename":"published release","is_stable":true,"is_beta":false,"is_hidden":false,"is_deprecated":false,"categories":["649ca346fddb0a0067eb3bbb","649ca346fddb0a0067eb3bbb","649ca346fddb0a0067eb3bbd","649ca346fddb0a0067eb3bc7","649cd2e58e830b0043594f7a","649cd2ecbb269f000a63887d","649cd31bbf00340bdef3e2f7","651c34dcef8f7d0739f0173b","651c35f10173200035a349c0","651c36d1316003002b9ed00a","651c41952e7b890042b7ac08","651c41a7f4faca23b1574c49","651c41b113c6110067baacea","651c41d13a135100328c20e1","651c41fa36bd6c0744e775f2","651c4216f8718d00247b1a3a","651c4222ea0cf3005d770941","651c42300549a7000c374d0b","651c4246b391e10024bb7eb7","654c23e45c46e3001fe30231","654fa3e0eb858d002a30ea20","65528bc2d92a7a0010929ce3","6553805b6d22b5050b0d4ceb","6582405a0eea57006aed4eae","6583161b94525a000fcbbeed","6595d3a14c9897005b23823c","65a986b8232ad300548bd5c8","65b0a132512dd8004eced0ea","65b28293ef920800106c9d01","65cfb4006097150036c30aed","65d4ee5514e952003f783cb4","65d4ee76379a33006065466b","65f8f203690838004b91d149","65f8f304af8cd00025ffc68d","65f919d8f015400060e3c6ed","65f91d718b003f002bc7cb52","65f91e1aa36af9002c452747","65f91e8419171400198049e2","670971afbe04ab000f783a37","673f6ce14454f2006b52c16b","6791520ac0b8130053ef47c7","679a743bc633b8000fabb634","679a7804cfa7f900671aec24","679a7816dc56050024000e7e","679a7b5c5b2b3a0043f6b564","67ae45ac44ce8f006188ec6b","67d9afe618dc3d006c36bb6a","67d9b0a152539500604913e6","67d9b0aaada09900172d07fc","67d9b0adada09900172d07fe","67d9b0b0432e4100102b9258","67d9b0b2432e4100102b945f","67d9b0b4ada09900172d0809","67d9b0b7ada09900172d0a20","67d9b0b9ada09900172d0a22","67d9b0bcc39315006815a411","67d9b0bfc39315006815a413","67d9b0c2fd48c800596e8791","67d9b0c930e1140018fec2b3","67d9b0cdfd48c800596e879c","67d9b0d0d697d8002bdecb72","67d9b0d252a4f4006af0645c","67db3c5bc47e2800195583b4"],"project":"649ca345fddb0a0067eb3bb3","releaseDate":"2023-06-28T21:16:54.076Z","createdAt":"2023-06-28T21:16:54.089Z","updatedAt":"2025-03-19T21:51:23.752Z","__v":1,"pdfStatus":"error"},"subdomain":"sigma-computing","subpath":"","superHubWaitlist":true,"topnav":{"left":[],"right":[{"type":"home"},{"type":"url","text":"Community","url":"https://community.sigmacomputing.com/"},{"type":"url","text":"QuickStarts","url":"https://quickstarts.sigmacomputing.com/"},{"type":"url","text":"Status","url":"https://status.sigmacomputing.com/"}],"bottom":[],"edited":true},"trial":{"trialDeadlineEnabled":false,"trialEndsAt":"2023-09-15T21:16:53.761Z"},"translate":{"provider":"transifex","show_widget":false,"key_public":"","org_name":"","project_name":"","languages":[]},"url":"","versions":[{"_id":"649ca346fddb0a0067eb3bb9","version":"1.0","version_clean":"1.0.0","codename":"published release","is_stable":true,"is_beta":false,"is_hidden":false,"is_deprecated":false,"categories":["649ca346fddb0a0067eb3bbb","649ca346fddb0a0067eb3bbb","649ca346fddb0a0067eb3bbd","649ca346fddb0a0067eb3bc7","649cd2e58e830b0043594f7a","649cd2ecbb269f000a63887d","649cd31bbf00340bdef3e2f7","651c34dcef8f7d0739f0173b","651c35f10173200035a349c0","651c36d1316003002b9ed00a","651c41952e7b890042b7ac08","651c41a7f4faca23b1574c49","651c41b113c6110067baacea","651c41d13a135100328c20e1","651c41fa36bd6c0744e775f2","651c4216f8718d00247b1a3a","651c4222ea0cf3005d770941","651c42300549a7000c374d0b","651c4246b391e10024bb7eb7","654c23e45c46e3001fe30231","654fa3e0eb858d002a30ea20","65528bc2d92a7a0010929ce3","6553805b6d22b5050b0d4ceb","6582405a0eea57006aed4eae","6583161b94525a000fcbbeed","6595d3a14c9897005b23823c","65a986b8232ad300548bd5c8","65b0a132512dd8004eced0ea","65b28293ef920800106c9d01","65cfb4006097150036c30aed","65d4ee5514e952003f783cb4","65d4ee76379a33006065466b","65f8f203690838004b91d149","65f8f304af8cd00025ffc68d","65f919d8f015400060e3c6ed","65f91d718b003f002bc7cb52","65f91e1aa36af9002c452747","65f91e8419171400198049e2","670971afbe04ab000f783a37","673f6ce14454f2006b52c16b","6791520ac0b8130053ef47c7","679a743bc633b8000fabb634","679a7804cfa7f900671aec24","679a7816dc56050024000e7e","679a7b5c5b2b3a0043f6b564","67ae45ac44ce8f006188ec6b","67d9afe618dc3d006c36bb6a","67d9b0a152539500604913e6","67d9b0aaada09900172d07fc","67d9b0adada09900172d07fe","67d9b0b0432e4100102b9258","67d9b0b2432e4100102b945f","67d9b0b4ada09900172d0809","67d9b0b7ada09900172d0a20","67d9b0b9ada09900172d0a22","67d9b0bcc39315006815a411","67d9b0bfc39315006815a413","67d9b0c2fd48c800596e8791","67d9b0c930e1140018fec2b3","67d9b0cdfd48c800596e879c","67d9b0d0d697d8002bdecb72","67d9b0d252a4f4006af0645c","67db3c5bc47e2800195583b4"],"project":"649ca345fddb0a0067eb3bb3","releaseDate":"2023-06-28T21:16:54.076Z","createdAt":"2023-06-28T21:16:54.089Z","updatedAt":"2025-03-19T21:51:23.752Z","__v":1,"pdfStatus":"error"},{"_id":"66fef0381580a800453331ac","version":"0.0","version_clean":"0.0.0","codename":"Secret Staging Version","is_stable":false,"is_beta":false,"is_hidden":true,"is_deprecated":false,"categories":["649ca346fddb0a0067eb3bbb","649ca346fddb0a0067eb3bbb","66fef0381580a80045332ddf","649ca346fddb0a0067eb3bc7","649cd2e58e830b0043594f7a","649cd2ecbb269f000a63887d","649cd31bbf00340bdef3e2f7","66fef0381580a80045332de0","651c35f10173200035a349c0","651c36d1316003002b9ed00a","66fef0381580a80045332de1","66fef0381580a80045332de2","66fef0381580a80045332de3","651c41d13a135100328c20e1","66fef0381580a80045332de4","651c4216f8718d00247b1a3a","66fef0381580a80045332de5","66fef0381580a80045332de6","66fef0381580a80045332de7","654c23e45c46e3001fe30231","66fef0381580a80045332de8","66fef0381580a80045332de9","66fef0381580a80045332dea","6582405a0eea57006aed4eae","66fef0381580a80045332deb","66fef0381580a80045332dec","66fef0381580a80045332ded","66fef0381580a80045332dee","66fef0381580a80045332def","66fef0381580a80045332df0","65d4ee5514e952003f783cb4","66fef0381580a80045332df1","66fef0381580a80045332df2","66fef0381580a80045332df3","66fef0381580a80045332df4","66fef0381580a80045332df5","66fef0381580a80045332df6","66fef0381580a80045332df7","6746100bfd182300476268a5","6746154522e4e000469a538b","674631ec8e18569cf1294407","674631f213c78000119224c9","674631f77e6ad7001d4ce737","67463ef86533e800104fd401","67463efd889e0e0038be1a99","684cc16f67868400105504b9"],"pdfStatus":"error","project":"649ca345fddb0a0067eb3bb3","releaseDate":"2023-06-28T21:16:54.076Z","createdAt":"2024-10-03T19:27:52.123Z","updatedAt":"2025-06-14T00:25:19.495Z","__v":1,"forked_from":"649ca346fddb0a0067eb3bb9"}],"variableDefaults":[{"source":"security","type":"oauth2","_id":"65831239fc5926006d9736e8","name":"oauth2","apiSetting":"654c23e45c46e3001fe30230"},{"source":"security","type":"http","_id":"68534a78597e44005384d7c6","name":"basicAuth","scheme":"basic","apiSetting":"6583161b94525a000fcbbeeb"}],"webhookEnabled":false},"custom_domain":"help.sigmacomputing.com","childrenProjects":[{"_id":"649ca345fddb0a0067eb3bb3","appearance":{"stylesheet_hub2":"","html_footer":"","javascript_hub2":""},"childrenProjects":[],"derivedPlan":"enterprise","description":"Official documentation and help with data analysis and modeling, including guidance and best practices for building visualizations and dashboards for Sigma Computing, a cloud-based Business Intelligence (BI) platform.","isExternalSnippetActive":false,"flags":{"allowApiExplorerJsonEditor":false,"allowReusableOTPs":false,"alwaysShowDocPublishStatus":false,"allowXFrame":true,"correctnewlines":false,"dashReact":false,"disablePasswordlessLogin":false,"directGoogleToStableVersion":false,"disableAnonForum":false,"enterprise":true,"graphql":false,"migrationRun":false,"migrationSwaggerRun":false,"newEditor":true,"newEditorDash":true,"newMarkdownBetaProgram":true,"newSearch":true,"oauth":false,"oldMarkdown":false,"owlbotAi":false,"rdmdCompatibilityMode":false,"reviewWorkflow":true,"singleProjectEnterprise":false,"speedyRender":false,"staging":false,"star":false,"superHub":false,"swagger":false,"translation":false,"useReactApp":true,"useReactGLP":true,"apiV2":false,"dashQuickstart":false,"git":{"read":false,"write":false},"superHubBeta":false,"customBlocks":false,"disableAutoTranslate":false,"devDashHub":false,"disableSAMLScoping":false,"allowUnsafeCustomHtmlSuggestionsFromNonAdmins":false,"apiAccessRevoked":false,"passwordlessLogin":"default","disableSignups":false,"billingRedesignEnabled":true,"developerPortal":false,"mdx":false,"superHubDevelopment":false,"annualBillingEnabled":true,"devDashBillingRedesignEnabled":false,"enableOidc":false,"customComponents":false,"disableDiscussionSpamRecaptchaBypass":false,"developerViewUsersData":false,"changelogRssAlwaysPublic":false,"bidiSync":false,"superHubMigrationSelfServeFlow":false,"apiDesigner":false,"hideEnforceSSO":false,"localLLM":false,"superHubManageVersions":false,"gitSidebar":false,"superHubGlobalCustomBlocks":false,"childManagedBidi":false,"superHubBranches":false,"requiresJQuery":true,"externalSdkSnippets":false,"migrationPreview":false,"superHubPreview":false,"superHubBranchReviews":false,"superHubMergePermissions":false},"fullBaseUrl":"https://sigma-computing.readme.io/","git":{"migration":{"createRepository":{},"transformation":{},"migratingPages":{},"enableSuperhub":{}},"sync":{"linked_repository":{},"installationRequest":{},"connections":[],"providers":[]}},"shouldGateDash":false,"is_active":true,"internal":"","modules":{"landing":false,"docs":true,"examples":true,"reference":true,"graphql":false,"changelog":true,"discuss":false,"suggested_edits":true,"logs":false,"custompages":false,"tutorials":true},"name":"Sigma Computing","nav_names":{"docs":"Documentation","reference":"API Reference","changelog":"What's New","discuss":"","recipes":"API Recipes","tutorials":""},"owner":{"id":null,"email":null,"name":null},"readmeScore":0,"reference":{"alwaysUseDefaults":false,"defaultExpandResponseExample":false,"defaultExpandResponseSchema":false,"enableOAuthFlows":false},"stable":"649ca346fddb0a0067eb3bb9","subdomain":"sigma-computing","subpath":"","translate":{},"webhookEnabled":false}],"derivedPlan":"enterprise","description":"Official documentation and help with data analysis and modeling, including guidance and best practices for building visualizations and dashboards for Sigma Computing, a cloud-based Business Intelligence (BI) platform.","isExternalSnippetActive":false,"error404":"","experiments":[],"first_page":"landing","flags":{"git":{"read":false,"write":false},"allowApiExplorerJsonEditor":false,"allowReusableOTPs":false,"alwaysShowDocPublishStatus":false,"allowXFrame":true,"apiV2":false,"correctnewlines":false,"customBlocks":false,"dashQuickstart":false,"dashReact":true,"disablePasswordlessLogin":false,"directGoogleToStableVersion":false,"disableAnonForum":false,"disableAutoTranslate":false,"enterprise":true,"graphql":false,"migrationRun":false,"migrationSwaggerRun":false,"newEditor":true,"newEditorDash":true,"newMarkdownBetaProgram":true,"newSearch":true,"oauth":false,"oldMarkdown":false,"owlbotAi":false,"rdmdCompatibilityMode":false,"reviewWorkflow":true,"singleProjectEnterprise":true,"speedyRender":false,"staging":false,"star":false,"superHub":false,"superHubBeta":false,"swagger":false,"translation":false,"useReactApp":true,"useReactGLP":true,"devDashHub":false,"disableSAMLScoping":false,"allowUnsafeCustomHtmlSuggestionsFromNonAdmins":false,"apiAccessRevoked":false,"passwordlessLogin":"default","disableSignups":false,"billingRedesignEnabled":true,"developerPortal":false,"mdx":false,"superHubDevelopment":false,"annualBillingEnabled":true,"devDashBillingRedesignEnabled":false,"enableOidc":false,"customComponents":false,"disableDiscussionSpamRecaptchaBypass":false,"developerViewUsersData":false,"changelogRssAlwaysPublic":false,"bidiSync":false,"superHubMigrationSelfServeFlow":false,"apiDesigner":false,"hideEnforceSSO":false,"localLLM":false,"superHubManageVersions":false,"gitSidebar":false,"superHubGlobalCustomBlocks":false,"childManagedBidi":false,"superHubBranches":false,"requiresJQuery":true,"externalSdkSnippets":false,"migrationPreview":false,"superHubPreview":false,"superHubBranchReviews":false,"superHubMergePermissions":false},"fullBaseUrl":"https://help.sigmacomputing.com/","git":{"migration":{"createRepository":{},"transformation":{},"migratingPages":{},"enableSuperhub":{}},"sync":{"linked_repository":{},"installationRequest":{},"connections":[],"providers":[]}},"glossaryTerms":[],"graphqlSchema":"","gracePeriod":{"enabled":false,"endsAt":null},"shouldGateDash":false,"healthCheck":{"provider":"","settings":{}},"intercom_secure_emailonly":false,"intercom":"","is_active":true,"integrations":{"login":{}},"internal":"","jwtExpirationTime":0,"landing_bottom":[],"mdxMigrationStatus":"rdmd","metrics":{"monthlyLimit":0,"thumbsEnabled":true,"monthlyPurchaseLimit":0,"meteredBilling":{}},"modules":{"landing":true,"docs":true,"examples":true,"reference":true,"graphql":false,"changelog":true,"discuss":true,"suggested_edits":true,"logs":false,"custompages":false,"tutorials":false},"name":"Sigma Computing Documentation","nav_names":{"docs":"","reference":"","changelog":"","discuss":"","recipes":"","tutorials":""},"oauth_url":"","onboardingCompleted":{"api":false,"appearance":false,"documentation":false,"domain":false,"jwt":false,"logs":false,"metricsSDK":false},"owlbot":{"enabled":false,"isPaying":false,"customization":{"answerLength":"long","customTone":"","defaultAnswer":"","forbiddenWords":"","tone":"neutral"},"copilot":{"enabled":false,"hasBeenUsed":false,"installedCustomPage":""}},"owner":{"id":null,"email":null,"name":null},"plan":"enterprise","planOverride":"enterprise","planSchedule":{"stripeScheduleId":null,"changeDate":null,"nextPlan":null},"planStatus":"","planTrial":"enterprise","readmeScore":{"components":{"newDesign":{"enabled":true,"points":25},"reference":{"enabled":true,"points":50},"tryItNow":{"enabled":true,"points":35},"syncingOAS":{"enabled":false,"points":10},"customLogin":{"enabled":true,"points":25},"metrics":{"enabled":false,"points":40},"recipes":{"enabled":true,"points":15},"pageVoting":{"enabled":true,"points":1},"suggestedEdits":{"enabled":true,"points":10},"support":{"enabled":false,"points":5},"htmlLanding":{"enabled":false,"points":5},"guides":{"enabled":true,"points":10},"changelog":{"enabled":true,"points":5},"glossary":{"enabled":true,"points":1},"variables":{"enabled":true,"points":1},"integrations":{"enabled":true,"points":2}},"totalScore":180},"reCaptchaSiteKey":"","reference":{"alwaysUseDefaults":false,"defaultExpandResponseExample":false,"defaultExpandResponseSchema":false,"enableOAuthFlows":false},"seo":{"overwrite_title_tag":false},"stable":{"_id":"64dd46f6189ee3000dc7f013","version":"1.0.0","version_clean":"1.0.0","codename":"","is_stable":false,"is_beta":false,"is_hidden":false,"is_deprecated":false,"categories":[],"releaseDate":"2023-08-16T22:00:22.993Z","project":"64dd46f6189ee3000dc7f014","createdAt":"2023-08-16T22:00:23.025Z","updatedAt":"2023-08-16T22:00:23.374Z","__v":0},"subdomain":"sigma-enterprise-group","subpath":"","superHubWaitlist":false,"topnav":{"left":[],"right":[{"type":"home"},{"type":"url","text":"Community","url":"https://community.sigmacomputing.com/"},{"type":"url","text":"QuickStarts","url":"https://quickstarts.sigmacomputing.com/"},{"type":"url","text":"Status","url":"https://status.sigmacomputing.com/"}],"bottom":[],"edited":true},"trial":{"trialDeadlineEnabled":true,"trialEndsAt":"2023-08-30T22:00:22.995Z"},"translate":{"provider":"transifex","show_widget":false,"key_public":"","org_name":"","project_name":"","languages":[]},"url":"","versions":[{"_id":"64dd46f6189ee3000dc7f013","version":"1.0.0","version_clean":"1.0.0","codename":"","is_stable":false,"is_beta":false,"is_hidden":false,"is_deprecated":false,"categories":[],"releaseDate":"2023-08-16T22:00:22.993Z","project":"64dd46f6189ee3000dc7f014","createdAt":"2023-08-16T22:00:23.025Z","updatedAt":"2023-08-16T22:00:23.374Z","__v":0}],"variableDefaults":[],"webhookEnabled":true},"isHubEditable":true},"projectStore":{"data":{"allow_crawlers":"disabled","canonical_url":null,"default_version":{"name":"1.0"},"description":"Official documentation and help with data analysis and modeling, including guidance and best practices for building visualizations and dashboards for Sigma Computing, a cloud-based Business Intelligence (BI) platform.","glossary":[{"_id":"64ada7f90ca32200383568a7","term":"CDW","definition":"Cloud data warehouse"},{"_id":"655e8c4ba56e64005448ecee","term":"DBMS","definition":"Database management system"},{"_id":"656ac7ed8e9cdc0045d6a1dc","term":"connection","definition":"[placeholder]"},{"_id":"656ac7f7a705200689a470a8","term":"database","definition":"[placeholder]"},{"_id":"656ac802c221800068b2e621","term":"schema","definition":"[placeholder]"},{"_id":"656ac80d312f4107a76fc745","term":"database table","definition":"[placeholder]"},{"_id":"661e0f1374c914004b2029aa","term":"sharing organization","definition":"In cross-org sharing, the Sigma organization that shares the workbook template with another organization."},{"_id":"661e0f3557912a00256ffca6","term":"receiving organization","definition":"In cross-org sharing, the Sigma organization that receives a shared workbook template from another organization."},{"_id":"662003129b691d001ef35c18","term":"trigger","definition":"In actions, the user interaction with a specific element (the trigger element)."},{"_id":"662003474df46c00118fac64","term":"effect","definition":"In actions, the defined response to the user interaction with a trigger element."},{"_id":"6633f37a23450f004663208f","term":"type inference","definition":"The ability to recognize input patterns and contextual cues to automatically determine data type without explicit declarations."}],"homepage_url":null,"id":"649ca345fddb0a0067eb3bb3","name":"Sigma Computing","parent":null,"redirects":[],"sitemap":"disabled","llms_txt":"disabled","subdomain":"sigma-computing","suggested_edits":"enabled","uri":"/projects/me","variable_defaults":[{"name":"oauth2","source":"security","type":"oauth2","id":"65831239fc5926006d9736e8"},{"name":"basicAuth","scheme":"basic","source":"security","type":"http","id":"68534a78597e44005384d7c6"}],"webhooks":[],"api_designer":{"allow_editing":"enabled"},"custom_login":{"login_url":null,"logout_url":null},"features":{"mdx":"disabled"},"mcp":{},"onboarding_completed":{"api":true,"appearance":true,"documentation":true,"domain":false,"jwt":true,"logs":false,"metricsSDK":false},"pages":{"not_found":"/branches/stable/custom_pages/custom-error-page"},"privacy":{"openapi":"admin","password":null,"view":"public"},"refactored":{"status":"disabled","migrated":"unknown"},"seo":{"overwrite_title_tag":"disabled"},"plan":{"type":"enterprise","grace_period":{"enabled":false,"end_date":null},"trial":{"expired":false,"end_date":"2023-09-15T21:16:53.761Z"}},"reference":{"api_sdk_snippets":"enabled","defaults":"use_only_if_required","json_editor":"disabled","oauth_flows":"enabled","request_history":"enabled","response_examples":"collapsed","response_schemas":"collapsed","sdk_snippets":{"external":"disabled"}},"health_check":{"provider":"none","settings":{"manual":{"status":"down","url":null},"statuspage":{"id":null}}},"integrations":{"aws":{"readme_webhook_login":{"region":null,"external_id":null,"role_arn":null,"usage_plan_id":null}},"bing":{"verify":null},"google":{"analytics":null,"site_verification":null},"heap":{"id":null},"koala":{"key":null},"localize":{"key":null},"postman":{"key":null,"client_id":null,"client_secret":null},"recaptcha":{"site_key":null,"secret_key":null},"segment":{"key":null,"domain":null},"speakeasy":{"key":null,"spec_url":null},"stainless":{"key":null,"name":null},"typekit":{"key":null},"zendesk":{"subdomain":null},"intercom":{"app_id":null,"secure_mode":{"key":null,"email_only":false}}},"permissions":{"appearance":{"private_label":"enabled","custom_code":{"css":"enabled","html":"enabled","js":"enabled"}},"branches":{"merge":{"admin":true}}},"appearance":{"brand":{"primary_color":"#000","link_color":null,"theme":"system"},"changelog":{"layout":"continuous","show_author":false,"show_exact_date":true},"layout":{"full_width":"disabled","style":"classic"},"markdown":{"callouts":{"icon_font":"emojis"}},"table_of_contents":"enabled","whats_next_label":"Related resources","footer":{"readme_logo":"show"},"logo":{"size":"default","dark_mode":{"uri":"/images/66c7b9b510090e00122fe35d","url":"https://files.readme.io/7f03afe0da103f607fe99b3dfd70152af7af0a83a49b96f1c4471df21d52e732-small-Sigma_PrimaryLogo_White.png","name":"7f03afe0da103f607fe99b3dfd70152af7af0a83a49b96f1c4471df21d52e732-small-Sigma_PrimaryLogo_White.png","width":281,"height":80,"color":"#ffffff","links":{"original_url":"https://files.readme.io/6f89d040d3403f20d85e888258c32484a27cfe67a36e71dba608a0b591283a88-Sigma_PrimaryLogo_White.png"}},"main":{"uri":"/images/66c7b8412da448002267ed80","url":"https://files.readme.io/e76fa049881caf557934797e79a66912aa149111831b86e073876ab293183a04-small-Sigma_PrimaryLogo_ShadowBlack.png","name":"e76fa049881caf557934797e79a66912aa149111831b86e073876ab293183a04-small-Sigma_PrimaryLogo_ShadowBlack.png","width":281,"height":80,"color":"#2c2c2c","links":{"original_url":"https://files.readme.io/3132f8acca21f616df1f3a05716c2385683655e39c3fdc1437e011dc0a8bed9e-Sigma_PrimaryLogo_ShadowBlack.png"}},"favicon":{"uri":"/images/650b706c4c382400392fca55","url":"https://files.readme.io/2333877-small-1687535336281.jpg","name":"2333877-small-1687535336281.jpg","width":32,"height":32,"color":"#000000","links":{"original_url":"https://files.readme.io/9b495d4-1687535336281.jpg"}}},"custom_code":{"css":"/* ___ ReadMe Updates ____ */\n\n/*\nh1 {\n letter-spacing: -0.05em; \n}\n*/\n\n/* Font files are loaded via Custom Include Tags */\n\n:root,\napp,\nbody {\n font-family: 'DM Sans', sans-serif;\n --font-family: 'DM Sans', sans-serif;\n --fa-font-solid: 'Font Awesome 6 Pro';\n}\n/* RM - Make sure heading doesn't wrap */\n.heading.heading {\n width: 100%;\n}\n/* RM - Google Material Bubble Icon */\n.material-symbols-outlined {\n font-variation-settings: 'FILL' 0, 'wght' 400, 'GRAD' 0, 'opsz' 24;\n}\n\n/* RM - dark mode defaults */\n[data-color-mode='dark'] {\n --color-bg-page: #171717;\n --AlgoliaSearch-background: #0, 0, 0 !important;\n}\n[data-color-mode='dark'] .AlgoliaSearch1uFG9utXJ4-6 {\n background-color: #171717;\n}\n[data-color-mode='dark'] .SearchBox-InputUQZAW9QXMe-c {\n background-color: #000;\n}\n[data-color-mode='dark'] .rm-SearchToggle {\n --SearchToggle-bg: #292929 !important;\n}\n[data-color-mode='dark'] .rm-Header {\n --Header-button-color: #f0f0f0;\n}\n\n/* Search dark mode fix */\n.ais-Snippet-highlighted::after {\n background: var(--color-text-default) !important;\n}\n\n.rm-Header {\n --Header-button-color: #f0f0f0;\n background-color: #171717;\n padding: 0.5rem 0 !important;\n}\n.rm-Guides #content-head h1 {\n font-size: 2.25rem;\n position: relative;\n z-index: 1;\n margin-top: 1rem;\n margin-bottom: 0;\n font-weight: 700;\n}\n.rm-Guides #content-head p {\n font-size: 15px;\n}\n.field-description dl dt,\n.markdown-body dl dt {\n font-size: 1em;\n font-style: normal;\n padding: 0;\n width: 100%;\n}\n.field-description dl dd,\n.markdown-body dl dd {\n padding: 0 !important;\n margin: 1rem 0 0 1rem !important;\n}\ndl {\n display: grid !important;\n grid-template-columns: auto 1fr !important;\n margin: 0 0 1rem 0 !important;\n}\ndt {\n grid-column: 1 !important;\n grid-row: span 10 !important;\n margin: 1rem 0 0 1.5rem !important;\n font-weight: 600 !important;\n overflow-wrap: break-word !important;\n}\ndd {\n grid-column: 2;\n margin: 1rem 0 0 1rem;\n}\ndd > p,\ndd > span {\n margin: 0 !important;\n padding-top: 0 !important;\n}\ndd + dd {\n margin-top: 0.25rem;\n}\ndt:first-child,\ndt:first-child + dd {\n margin-top: 0 !important;\n}\n.rdmd-table dt {\n margin: 1rem 0 0 0 !important;\n}\n.rdmd-table dt:first-child,\n.rdmd-table dt:first-child + dd {\n margin-top: 0 !important;\n}\n.App .rm-Changelog .rm-Article,\n.App .rm-CustomPage .rm-Article,\n.App .rm-Discuss .rm-Article,\n.App .rm-Guides .rm-Article,\n.App .rm-ReferenceMain .rm-Article,\n.App .rm-SuggestedEdits .rm-Article,\n.App .rm-SuggestionDiff .rm-Article {\n padding: 2rem 0 0 3rem !important;\n}\n\n/**** Sigma custom CSS ****/\n\n/*** fa icons ***/\n\n.fa-anchor::before {\n font-family: var(--fa-font-solid);\n content: '\\f13d';\n}\n.fa-caret-square-down:before {\n content: '\\f150';\n color: #6690ff !important;\n}\n\n/*** callouts ***/\n\n.callout[theme='📘'] {\n --emoji: unset;\n --icon: url(https://sigma-docs-screenshots.s3.us-west-2.amazonaws.com/Icons/Callout+icons/callout-icon_note.svg);\n --border: rgba(0, 92, 74, 0.8);\n --background: rgba(242, 247, 246, 1);\n}\n@media (prefers-color-scheme: dark) {\n [data-color-mode='system'] .callout[theme='📘'] {\n background: rgba(0, 92, 74, 0.35) !important;\n --icon: url(https://sigma-docs-screenshots.s3.us-west-2.amazonaws.com/Icons/Callout+icons/callout-icon_note_dark-mode.svg);\n --border: rgba(102, 157, 146, 0.7);\n }\n}\n[data-color-mode='dark'] .callout[theme='📘'] {\n background: rgba(0, 92, 74, 0.35) !important;\n --icon: url(https://sigma-docs-screenshots.s3.us-west-2.amazonaws.com/Icons/Callout+icons/callout-icon_note_dark-mode.svg);\n --border: rgba(102, 157, 146, 0.7);\n}\n.callout[theme='💡'],\n.callout[theme='👍'] {\n --emoji: unset;\n --icon: url(https://sigma-docs-screenshots.s3.us-west-2.amazonaws.com/Icons/Callout+icons/callout-icon_tip.svg);\n --background: rgba(254, 251, 241) !important;\n --border: rgba(193, 168, 54, 1);\n}\n@media (prefers-color-scheme: dark) {\n [data-color-mode='system'] .callout[theme='💡'],\n [data-color-mode='system'] .callout[theme='👍'] {\n background: rgba(193, 168, 54, 0.25) !important;\n --icon: url(https://sigma-docs-screenshots.s3.us-west-2.amazonaws.com/Icons/Callout+icons/callout-icon_tip_dark-mode.svg);\n }\n}\n[data-color-mode='dark'] .callout[theme='💡'],\n[data-color-mode='dark'] .callout[theme='👍'] {\n background: rgba(193, 168, 54, 0.25) !important;\n --icon: url(https://sigma-docs-screenshots.s3.us-west-2.amazonaws.com/Icons/Callout+icons/callout-icon_tip_dark-mode.svg);\n}\n.callout[theme='🚧'] {\n --emoji: unset;\n --icon: url(https://sigma-docs-screenshots.s3.us-west-2.amazonaws.com/Icons/Callout+icons/callout-icon_warning.svg);\n --background: rgba(255, 245, 245) !important;\n --border: rgba(237, 94, 79, 1);\n}\n@media (prefers-color-scheme: dark) {\n [data-color-mode='system'] .callout[theme='🚧'] {\n background: rgba(237, 94, 79, 0.2) !important;\n --icon: url(https://sigma-docs-screenshots.s3.us-west-2.amazonaws.com/Icons/Callout+icons/callout-icon_warning_dark-mode.svg);\n --border: rgba(237, 94, 79, 0.6);\n }\n}\n[data-color-mode='dark'] .callout[theme='🚧'] {\n background: rgba(237, 94, 79, 0.2) !important;\n --icon: url(https://sigma-docs-screenshots.s3.us-west-2.amazonaws.com/Icons/Callout+icons/callout-icon_warning_dark-mode.svg);\n --border: rgba(237, 94, 79, 0.6);\n}\n.callout[theme='🚩'] {\n --emoji: unset;\n --icon: url(https://sigma-docs-screenshots.s3.us-west-2.amazonaws.com/Icons/Callout+icons/callout-icon_important.svg);\n --background: rgba(248, 244, 247) !important;\n --border: rgba(150, 79, 125, 0.8);\n}\n@media (prefers-color-scheme: dark) {\n [data-color-mode='system'] .callout[theme='🚩'] {\n background: rgba(150, 79, 125, 0.25) !important;\n --icon: url(https://sigma-docs-screenshots.s3.us-west-2.amazonaws.com/Icons/Callout+icons/callout-icon_important_dark-mode.svg);\n --border: rgba(192, 149, 177, 0.5);\n }\n}\n[data-color-mode='dark'] .callout[theme='🚩'] {\n background: rgba(150, 79, 125, 0.25) !important;\n --icon: url(https://sigma-docs-screenshots.s3.us-west-2.amazonaws.com/Icons/Callout+icons/callout-icon_important_dark-mode.svg);\n --border: rgba(192, 149, 177, 0.5);\n}\n.callout[theme='🚀'] {\n --emoji: unset;\n --icon: url(https://sigma-docs-screenshots.s3.us-west-2.amazonaws.com/Icons/Callout+icons/callout-icon_data-pro.svg);\n --background: rgba(243, 246, 255) !important;\n --border: rgba(0, 4, 225, 0.6);\n}\n@media (prefers-color-scheme: dark) {\n [data-color-mode='system'] .callout[theme='🚀'] {\n background: rgba(66, 69, 255, 0.25) !important;\n --icon: url(https://sigma-docs-screenshots.s3.us-west-2.amazonaws.com/Icons/Callout+icons/callout-icon_data-pro_dark-mode.svg);\n --border: rgba(102, 144, 255, 0.6);\n }\n}\n[data-color-mode='dark'] .callout[theme='🚀'] {\n background: rgba(66, 69, 255, 0.25) !important;\n --icon: url(https://sigma-docs-screenshots.s3.us-west-2.amazonaws.com/Icons/Callout+icons/callout-icon_data-pro_dark-mode.svg);\n --border: rgba(102, 144, 255, 0.6);\n}\n.callout.callout {\n border-left: 4px solid var(--border);\n border-radius: 4px;\n padding: 0.75rem 0.75rem 0.75rem 1.5rem;\n margin-bottom: 1.5rem !important;\n display: block;\n width: 100%;\n float: left;\n}\n.callout-heading {\n --title: var(--text);\n}\n.callout-heading p {\n font-size: var(--markdown-font-size, 14px);\n font-weight: 400;\n line-height: var(--markdown-line-height);\n}\n\n.callout-heading li {\n font-size: var(--markdown-font-size, 14px);\n font-weight: 400;\n}\n\n.callout-icon::before {\n top: 0.85rem;\n}\n.callout.callout .callout-heading.empty {\n margin-top: 0;\n}\n.callout.callout ul,\n.callout.callout ol {\n padding-left: 2rem;\n}\n.callout.callout a {\n color: #4245ff;\n}\n\n/*** sidenav, sidebar (toc), header, footer ***/\n\n.reference-redesign.Nav3C5f8FcjkaHj.rm-Sidebar_guides .rm-Sidebar {\n padding-top: 2rem;\n padding-bottom: 2rem;\n}\n.reference-redesign [class*='Sidebar-heading'] {\n font-size: 0.95rem;\n padding-left: 0;\n}\n.reference-redesign .Sidebar-link-buttonWrapper3hnFHNku8_BJ {\n padding-right: 0.25rem;\n}\n\n.reference-redesign .Sidebar-link2Dsha-r-GKh2:active,\n.reference-redesign .Sidebar-link2Dsha-r-GKh2.active {\n background: none;\n color: #4245ff;\n font-weight: 600;\n}\n@media (prefers-color-scheme: dark) {\n [data-color-mode='system']\n .reference-redesign\n .Sidebar-link2Dsha-r-GKh2:active,\n [data-color-mode='system']\n .reference-redesign\n .Sidebar-link2Dsha-r-GKh2.active {\n background: none;\n color: #6690ff !important;\n }\n}\n[data-color-mode='dark'] .reference-redesign .Sidebar-link2Dsha-r-GKh2:active,\n[data-color-mode='dark'] .reference-redesign .Sidebar-link2Dsha-r-GKh2.active {\n background: none;\n color: #6690ff !important;\n padding-left: 1.2rem;\n}\n.content-toc {\n padding-top: 0;\n top: 2rem;\n}\n.content-toc .tocHeader,\n.content-toc a {\n font-size: 0.85rem;\n}\nnav ul.toc-list li.toc-children ul li.active > a {\n color: #4245ff !important;\n font-family: inherit;\n font-weight: 600;\n}\n@media (prefers-color-scheme: dark) {\n [data-color-mode='system'] nav ul.toc-list li.toc-children ul li.active > a {\n color: #6690ff !important;\n }\n}\n[data-color-mode='dark'] nav ul.toc-list li.toc-children ul li.active > a {\n color: #6690ff !important;\n}\n\n/*** article ***/\n\n.field-description,\n.markdown-body {\n padding-bottom: 1rem;\n}\n.rm-Guides .DateLine {\n display: none;\n}\n.App .rm-SuggestedEdits .rm-Article,\n.App .rm-SuggestionDiff .rm-Article,\n.App .rm-Guides .rm-Article,\n.App .rm-ReferenceMain .rm-Article,\n.App .rm-Changelog .rm-Article,\n.App .rm-Discuss .rm-Article,\n.App .rm-CustomPage .rm-Article {\n padding: 2rem;\n}\np > span > span > img {\n margin-bottom: 0.5rem;\n}\n\n/*** release notes ***/\n\n.ChangelogPost_text25nFcEF_ZQyf {\n margin-bottom: unset;\n}\n[class*='ChangelogPage_list'] {\n padding-left: 1.5rem;\n padding-bottom: 0.5rem;\n gap: var(--md);\n}\n\n.rm-Changelog h2:first-child {\n border-top: 0;\n}\n@media (prefers-color-scheme: dark) {\n [data-color-mode='system'] .rm-Changelog h2:first-child {\n border-top: 0;\n }\n}\n[data-color-mode='dark'] .rm-Changelog h2:first-child {\n border-top: 0;\n}\n\n.whats-new h3,\n.rm-Changelog h3 {\n margin-top: 1.5rem;\n}\n.whats-new h3:first-child,\n.rm-Changelog h3:first-child {\n margin-top: 0.5rem;\n}\n.whats-new h4,\n.rm-Changelog h4 {\n margin-top: 1.5rem;\n margin-left: 1rem;\n}\n.whats-new h4:before,\n.rm-Changelog h4:before {\n font-family: var(--fa-font-solid);\n font-weight: 900;\n margin-right: 0.5em;\n content: '\\f101';\n color: #6690ff;\n}\n.whats-new p,\n.whats-new p + ol,\n.whats-new p + ul,\n.whats-new dl,\n.rm-Changelog p,\n.rm-Changelog p + ol,\n.rm-Changelog p + ul,\n.rm-Changelog dl {\n margin-left: 2.45rem;\n}\n.whats-new dt,\n.rm-Changelog dt {\n margin-left: 3.5rem !important;\n}\n.whats-new ul,\n.whats-new ol,\n.rm-Changelog ul,\n.rm-Changelog ol {\n padding-left: 2.25rem;\n}\n.whats-new .rdmd-table,\n.rm-Changelog .rdmd-table {\n margin-left: 2.5rem;\n margin-bottom: 1rem;\n}\n.whats-new pre,\n.rm-Changelog pre {\n margin-left: 2.5rem;\n}\n.whats-new li > p,\n.rm-Changelog li > p {\n margin-left: 0;\n}\n.whats-new .callout,\n.rm-Changelog .callout {\n margin-left: 2.5rem;\n}\n.whats-new .callout h2,\n.rm-Changelog .callout h2,\n.whats-new .callout p,\n.rm-Changelog .callout p {\n margin-right: 2.5rem;\n}\n\n.whats-new iframe,\n.rm-Changelog iframe {\n margin-left: 2.45rem !important;\n width: 95%;\n}\n\n/*** lines, breaks, headings, text ***/\n\n.field-description strong,\n.markdown-body strong {\n font-weight: 700;\n}\n.margin-top-0 {\n margin-top: 0;\n}\n.margin-bot-0 {\n margin-bottom: 0;\n}\n.heading.heading-2 {\n -webkit-box-align: center;\n -ms-flex-align: center;\n align-items: center;\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n -webkit-box-pack: start;\n -ms-flex-pack: start;\n justify-content: flex-start;\n position: relative;\n border-top: 1px solid #d1d1d1;\n padding-top: 20px;\n}\n@media (prefers-color-scheme: dark) {\n [data-color-mode='system'] .heading.heading-2 {\n border-top: 1px solid #d1d1d150;\n }\n}\n[data-color-mode='dark'] .heading.heading-2 {\n border-top: 1px solid #d1d1d150;\n}\n\n.rm-Guides #content-head h1 {\n margin-top: 0;\n}\n.markdown-body h2 {\n font-size: var(--markdown-title-size, 2em);\n}\n.markdown-body h3 {\n font-size: var(--markdown-title-size, 1.5em);\n margin-top: 2rem;\n}\n.markdown-body h4 {\n margin-top: 1.25em;\n\tfont-size: 1.15em;\n}\n\n/*\ndiv + h4 {\n margin-top: 1.75em;\n}\n*/\n\n.rm-Guides #content-head {\n border-bottom: 0 !important;\n padding-bottom: 30px;\n}\n.rm-Guides #content-head .excerpt {\n margin-top: 15px;\n margin-bottom: -20px;\n}\n.rm-Guides .content-body {\n padding-top: 0 !important;\n}\n.markdown-body a {\n color: #4245ff;\n text-decoration: none;\n font-weight: 500;\n}\n@media (prefers-color-scheme: dark) {\n [data-color-mode='system'] .markdown-body a {\n color: #6690ff !important;\n text-decoration: none;\n }\n}\n[data-color-mode='dark'] .markdown-body a {\n color: #6690ff !important;\n text-decoration: none;\n}\n.App .rm-Guides a:hover,\n.App .rm-Changelog a:hover {\n text-decoration: underline;\n}\n.rm-Sidebar a:hover {\n text-decoration: none !important;\n}\n.field-description a[href],\n.field-description a:not([href='']),\n.markdown-body a[href],\n.markdown-body a:not([href='']) {\n text-decoration: none;\n}\n.markdown-body li ul {\n margin-top: 0.5rem;\n}\n.no-wrap {\n white-space: nowrap; /* prevents line breaks */\n}\n\n/*** tables ***/\n\n:root {\n --table-alt-bg-1: #c6c6c6;\n --table-alt-bg-2: #dddddd;\n --table-alt-bg-3: #e9e9e9;\n --table-alt-bg-4: #e9e9e975;\n --table-alt-bg-dark-1: #565f65;\n --table-alt-bg-dark-2: #444e54;\n --table-alt-bg-dark-3: #363e43;\n --table-alt-bg-dark-4: #363e4375;\n}\n\np:has(+ div.rdmd-table) {\n margin-bottom: 0.5rem;\n}\n\n.rdmd-table:has(+ blockquote) {\n margin-bottom: 1rem;\n}\n\n.alt-bg-1 {\n background-color: var(--table-alt-bg-1) !important;\n}\n@media (prefers-color-scheme: dark) {\n [data-color-mode='system'] .alt-bg-1 {\n background-color: var(--table-alt-bg-dark-1) !important;\n }\n}\n[data-color-mode='dark'] .alt-bg-1 {\n background-color: var(--table-alt-bg-dark-1) !important;\n}\n\n.alt-bg-2 {\n background-color: var(--table-alt-bg-2) !important;\n}\n@media (prefers-color-scheme: dark) {\n [data-color-mode='system'] .alt-bg-2 {\n background-color: var(--table-alt-bg-dark-2) !important;\n }\n}\n[data-color-mode='dark'] .alt-bg-2 {\n background-color: var(--table-alt-bg-dark-2) !important;\n}\n\n.alt-bg-3 {\n background-color: var(--table-alt-bg-3) !important;\n}\n@media (prefers-color-scheme: dark) {\n [data-color-mode='system'] .alt-bg-3 {\n background-color: var(--table-alt-bg-dark-3) !important;\n }\n}\n[data-color-mode='dark'] .alt-bg-3 {\n background-color: var(--table-alt-bg-dark-3) !important;\n}\n\n.alt-bg-4 {\n background-color: var(--table-alt-bg-4) !important;\n}\n@media (prefers-color-scheme: dark) {\n [data-color-mode='system'] .alt-bg-4 {\n background-color: var(--table-alt-bg-dark-4) !important;\n }\n}\n[data-color-mode='dark'] .alt-bg-4 {\n background-color: var(--table-alt-bg-dark-4) !important;\n}\n\n.markdown-body .rdmd-table table:only-child thead th {\n background: #e9e9e9;\n}\n\n@media (prefers-color-scheme: dark) {\n [data-color-mode='system']\n .markdown-body\n .rdmd-table\n table:only-child\n thead\n th {\n background: #444e54;\n }\n}\n[data-color-mode='dark'] .markdown-body .rdmd-table table:only-child thead th {\n background: #444e54;\n}\n\n.markdown-body table {\n border: none;\n --table-stripe: none;\n --table-edges: none;\n width: auto;\n text-align: left;\n}\n\n.markdown-body table th {\n vertical-align: bottom;\n padding: 0.5rem 0.75rem;\n}\n\n.markdown-body table td {\n vertical-align: top;\n padding: 0.5rem 0.75rem;\n}\n\ntable td p:not(:last-child) {\n margin-bottom: 0.5rem;\n}\n\n.table-a th {\n border: 1px solid #d8d8d8 !important;\n}\n@media (prefers-color-scheme: dark) {\n [data-color-mode='system'] .table-a th {\n border-color: #d8d8d845 !important;\n }\n}\n[data-color-mode='dark'] .table-a th {\n border-color: #d8d8d845 !important;\n}\n\n.table-a td {\n border: 1px solid #d8d8d8 !important;\n}\n@media (prefers-color-scheme: dark) {\n [data-color-mode='system'] .table-a td {\n border-color: #d8d8d845 !important;\n }\n}\n[data-color-mode='dark'] .table-a td {\n border-color: #d8d8d845 !important;\n}\n\n.table-a2 th,\n.table-a2 td {\n border: 1px solid #d8d8d8 !important;\n}\n@media (prefers-color-scheme: dark) {\n [data-color-mode='system'] .table-a2 th,\n [data-color-mode='system'] .table-a2 td {\n border-color: #d8d8d845 !important;\n }\n}\n[data-color-mode='dark'] .table-a2 th,\n[data-color-mode='dark'] .table-a2 td {\n border-color: #d8d8d845 !important;\n}\n\n.table-a2 td:first-child {\n background-color: #e9e9e975;\n font-weight: 600;\n}\n@media (prefers-color-scheme: dark) {\n [data-color-mode='system'] .table-a2 td:first-child {\n background-color: #363e4395 !important;\n }\n}\n[data-color-mode='dark'] .table-a2 td:first-child {\n background-color: #363e4395 !important;\n}\n\n.table-a3 tr,\n.table-a3 td {\n border: 1px solid #d8d8d8 !important;\n}\n@media (prefers-color-scheme: dark) {\n [data-color-mode='system'] .table-a3 tr,\n [data-color-mode='system'] .table-a3 td {\n border-color: #d8d8d845 !important;\n }\n}\n[data-color-mode='dark'] .table-a3 tr,\n[data-color-mode='dark'] .table-a3 td {\n border-color: #d8d8d845 !important;\n}\n\n.table-a4 tr,\n.table-a4 td {\n border: 1px solid #d8d8d8 !important;\n}\n@media (prefers-color-scheme: dark) {\n [data-color-mode='system'] .table-a4 tr,\n [data-color-mode='system'] .table-a4 td {\n border-color: #d8d8d845 !important;\n }\n}\n[data-color-mode='dark'] .table-a4 tr,\n[data-color-mode='dark'] .table-a4 td {\n border-color: #d8d8d845 !important;\n}\n\n.table-a4 td:first-child {\n background-color: #e9e9e975;\n font-weight: 600;\n}\n@media (prefers-color-scheme: dark) {\n [data-color-mode='system'] .table-a4 td:first-child {\n background-color: #363e4395 !important;\n }\n}\n[data-color-mode='dark'] .table-a4 td:first-child {\n background-color: #363e4395 !important;\n}\n\n.table-b tr {\n border-bottom: 1px solid #d8d8d8;\n}\n@media (prefers-color-scheme: dark) {\n [data-color-mode='system'] .table-b tr {\n border-bottom: 1px solid #d8d8d845;\n }\n}\n[data-color-mode='dark'] .table-b tr {\n border-bottom: 1px solid #d8d8d845;\n}\n\n.table-b td {\n background-color: #fcfcfc;\n}\n@media (prefers-color-scheme: dark) {\n [data-color-mode='system'] .table-b td {\n background-color: #303b4265;\n }\n}\n[data-color-mode='dark'] .table-b td {\n background-color: #303b4265;\n}\n\n.table-b2 tr {\n border-bottom: 1px solid #d8d8d8;\n}\n@media (prefers-color-scheme: dark) {\n [data-color-mode='system'] .table-b2 tr {\n border-bottom: 1px solid #d8d8d845;\n }\n}\n[data-color-mode='dark'] .table-b2 tr {\n border-bottom: 1px solid #d8d8d845;\n}\n\n.table-b2 td:not(:first-child) {\n background-color: #fcfcfc !important;\n}\n@media (prefers-color-scheme: dark) {\n [data-color-mode='system'] .table-b2 td:not(:first-child) {\n background-color: #303b4265 !important;\n }\n}\n[data-color-mode='dark'] .table-b2 td:not(:first-child) {\n background-color: #303b4265 !important;\n}\n\n.table-b2 td:first-child {\n background-color: #e9e9e975;\n font-weight: 600;\n}\n@media (prefers-color-scheme: dark) {\n [data-color-mode='system'] .table-b2 td:first-child {\n background-color: #363e4395 !important;\n }\n}\n[data-color-mode='dark'] .table-b2 td:first-child {\n background-color: #363e4395 !important;\n}\n\n.table-d th:not(:first-child),\n.table-d td {\n border: 1px solid #d8d8d8 !important;\n}\n@media (prefers-color-scheme: dark) {\n [data-color-mode='system'] .table-d th:not(:first-child),\n [data-color-mode='system'] .table-d td {\n border-color: #d8d8d845 !important;\n }\n}\n[data-color-mode='dark'] .table-d th:not(:first-child),\n[data-color-mode='dark'] .table-d td {\n border-color: #d8d8d845 !important;\n}\n\n.table-d th {\n font-weight: bold;\n}\n\n.table-d th:first-child {\n background-color: var(--color-bg-page) !important;\n border-top: none;\n border-left: none;\n}\n@media (prefers-color-scheme: dark) {\n [data-color-mode='system'] .table-d th:first-child {\n background-color: var(--color-bg-page) !important;\n }\n}\n[data-color-mode='dark'] .table-d th:first-child {\n background-color: var(--color-bg-page) !important;\n}\n\n.table-d td:first-child {\n background-color: #e9e9e975;\n font-weight: 600;\n}\n@media (prefers-color-scheme: dark) {\n [data-color-mode='system'] .table-d td:first-child {\n background-color: #363e43;\n }\n}\n[data-color-mode='dark'] .table-d td:first-child {\n background-color: #363e43;\n}\n\n.table-e {\n border-collapse: collapse;\n width: 100%;\n}\n\n.table-e td,\n.table-e th {\n border: 1px solid #d8d8d8;\n padding: 8px;\n text-align: left;\n}\n\n.table-e td:first-child,\n.table-e th:first-child {\n border-left: none;\n background: none;\n}\n\n.table-e td:not(:first-child),\n.table-e th:not(:first-child) {\n border-bottom: 1px solid #d8d8d8;\n}\n@media (prefers-color-scheme: dark) {\n [data-color-mode='system'] .table-e th:not(:first-child),\n [data-color-mode='system'] .table-e td:not(:first-child) {\n border-color: #d8d8d845 !important;\n }\n}\n[data-color-mode='dark'] .table-e th:not(:first-child),\n[data-color-mode='dark'] .table-e td:not(:first-child) {\n border-color: #d8d8d845 !important;\n}\n\n.table-e th:first-child {\n background-color: var(--color-bg-page) !important;\n border-top: none;\n border-left: none;\n}\n@media (prefers-color-scheme: dark) {\n [data-color-mode='system'] .table-e th:first-child {\n background-color: var(--color-bg-page) !important;\n }\n}\n[data-color-mode='dark'] .table-e th:first-child {\n background-color: var(--color-bg-page) !important;\n}\n\n.grid {\n margin: 0 0.5rem 0 0;\n --table-edges: none;\n}\n\n.grid .rdmd-table td {\n padding: 1rem;\n}\n\n.grid-list {\n margin: 0 0 1rem 0;\n padding-bottom: 0.5rem;\n --table-edges: none;\n}\n\n.grid-list .rdmd-table td {\n padding: 0.5rem;\n}\n\n.grid-list .rdmd-table td:first-child img {\n margin: 0 auto;\n}\n\n.center .rdmd-table td:first-child {\n text-align: center !important;\n}\n\nth.top-lev {\n background-color: #d5d5d5;\n}\n\ntd.header-col,\n.header-col {\n background-color: #f4f4f4;\n font-weight: 600;\n}\n@media (prefers-color-scheme: dark) {\n [data-color-mode='system'] td.header-col {\n background-color: #303b42b0;\n }\n}\n[data-color-mode='dark'] td.header-col {\n background-color: #303b42b0;\n}\n\ntd.header-colspan,\ntd.header-colspan p {\n background-color: #e5e5e5;\n font-weight: 600;\n}\n\n.matrix-text-center th:not(:first-child),\n.matrix-text-center td:not(:first-child) {\n text-align: center !important;\n}\n\n.function-list td:first-child {\n min-width: 150px;\n font-weight: 600;\n}\n\n.full-width table {\n width: 100%;\n}\n\n.header-col-200 td:first-child {\n width: 200px;\n}\n\n.alt-row-header tr:nth-child(2n) {\n background-color: #e9e9e9 !important;\n font-weight: 600;\n}\n@media (prefers-color-scheme: dark) {\n [data-color-mode='system'] .alt-row-header tr:nth-child(2n) {\n background-color: #444e54 !important;\n }\n}\n[data-color-mode='dark'] .alt-row-header tr:nth-child(2n) {\n background-color: #444e54 !important;\n}\n\n.markdown-body table li > p {\n margin-top: 0.5em;\n margin-bottom: 0.5em;\n}\n\n.markdown-body table li + li {\n margin-top: 0.5em;\n}\n\n.col-3-thumb th:nth-child(3) {\n width: 30%;\n word-wrap: break-word;\n}\n\n.subheader-row tr:nth-child(1) {\n background-color: #e9e9e975;\n font-weight: 600;\n}\n\n/*** disclosure (accordion) widget ***/\n\ndetails > summary {\n list-style: none;\n}\ndetails > summary::-webkit-details-marker {\n display: none;\n}\ndetails > summary::before {\n font-family: var(--fa-font-solid);\n content: '\\f0fe';\n font-weight: 900;\n padding-right: 5px;\n color: #4245ff;\n}\n@media (prefers-color-scheme: dark) {\n [data-color-mode='system'] details > summary::before {\n color: #6690ff;\n }\n}\n[data-color-mode='dark'] details > summary::before {\n color: #6690ff;\n}\ndetails[open] > summary::before {\n content: '\\f146';\n}\n\n/*** workflow expand/collapse ***/\n\ndetails.workflow {\n margin-left: 1rem;\n}\ndetails.workflow summary {\n margin-bottom: 1rem;\n}\ndetails.workflow blockquote,\ndetails.workflow dl,\ndetails.workflow ol,\ndetails.workflow p,\ndetails.workflow pre,\ndetails.workflow table {\n margin: 0.5rem 0 0 1rem;\n}\ndetails.workflow li > p {\n margin-left: 0 !important;\n}\ndetails.workflow ul {\n margin: 0 0 1.5rem 1rem !important;\n}\n\n/*** FAQ expand/collapse ***/\n\ndetails.faq {\n margin-left: 1rem;\n}\ndetails.faq summary {\n font-weight: 600;\n font-style: italic;\n text-indent: -1.2rem;\n padding-left: 1.1rem;\n}\ndetails.faq > summary::before {\n font-style: normal;\n}\ndetails.faq blockquote,\ndetails.faq dl,\ndetails.faq ol,\ndetails.faq p,\ndetails.faq pre,\ndetails.faq table,\ndetails.faq ul {\n margin: 0.5rem 0 0 1.1rem;\n}\n\n/*** Custom footnote styles ***/\n\n.footnote {\n display: flex;\n align-items: baseline;\n}\n.footnote-marker {\n font-size: smaller;\n margin-right: 0.25em;\n position: relative;\n top: -0.25rem;\n}\n.footnote-content {\n font-style: italic;\n font-size: 0.9rem;\n}\n\n/*** code block ***/\n\n.markdown-body code,\n.markdown-body pre {\n background-color: #f3f3f4;\n}\n.markdown-body pre {\n display: block;\n overflow: auto;\n white-space: pre-wrap;\n padding: 0;\n max-height: 90vh;\n}\n\n@media (prefers-color-scheme: dark) {\n [data-color-mode='system'] .markdown-body pre,\n [data-color-mode='system'] .markdown-body code {\n background: #3b4852;\n }\n}\n\n[data-color-mode='dark'] .markdown-body pre,\n[data-color-mode='dark'] .markdown-body code {\n background: #3b4852;\n}\n\n.CodeTabs-toolbar {\n background: #e7e9ec;\n}\n\n@media (prefers-color-scheme: dark) {\n [data-color-mode='system'] .CodeTabs-toolbar,\n [data-color-mode='system'] .CodeTabs-toolbar button {\n background: #4f5a66;\n }\n}\n\n[data-color-mode='dark'] .CodeTabs-toolbar,\n[data-color-mode='dark'] .CodeTabs-toolbar button {\n background: #4f5a66;\n}\n\n.CodeTabs.CodeTabs_initial .CodeTabs-toolbar button:first-child,\n.CodeTabs-toolbar button.CodeTabs_active {\n background: #f3f3f4;\n}\n\n@media (prefers-color-scheme: dark) {\n [data-color-mode='system'] .CodeTabs-toolbar button.CodeTabs_active {\n background: #3b4852 !important;\n }\n}\n\n[data-color-mode='dark'] .CodeTabs-toolbar button.CodeTabs_active {\n background: #3b4852 !important;\n}\n\n.break-string pre code {\n white-space: pre-wrap;\n word-break: break-word;\n}\n\n/*** lists ***/\n\n.field-description ol ol,\n.field-description ul ol,\n.markdown-body ol ol,\n.markdown-body ul ol {\n list-style-type: lower-alpha;\n}\n\n.field-description ol ol ol,\n.field-description ul ol ol,\n.markdown-body ol ol ol,\n.markdown-body ul ol ol {\n list-style-type: lower-roman;\n}\n\n.field-description ol ol,\n.field-description ol ul,\n.field-description ul ol,\n.field-description ul ul,\n.markdown-body ol ol,\n.markdown-body ol ul,\n.markdown-body ul ol,\n.markdown-body ul ul {\n margin-bottom: 0.5rem !important;\n}\n\n.markdown-body ol > li:not(:has(> p)) {\n margin-top: 1rem;\n margin-bottom: 1rem;\n}\n\n.markdown-body li + li {\n margin-top: 0.5rem;\n}\n\nol > li blockquote.callout.callout_default {\n margin-top: 0.5rem;\n}\n\n/*** related resources ***/\n\n.APISectionHeader-heading4MUMLbp4_nLs {\n font-size: 0.9rem;\n}\n\n.WhatsNext-wrapper3DTnpcPqKoHg ul li a {\n color: #4245ff;\n}\n\n.rm-Guides .PaginationControlsjDYuqu8pBMUy {\n display: none;\n}\n\n/*** custom page ***/\n\n.rm-CustomPage #content-container {\n margin: 3rem auto 2rem auto;\n}\n\n/*** suggested edits menu ***/\n\n.SuggestedEditsSubnav2cMzYf_z2E1a button {\n display: none;\n}\n\n/*** icons ***/\n:root {\n --icon-color: 171717; /* Default for light mode */\n}\n\n@media (prefers-color-scheme: dark) {\n :root {\n --icon-color: 7f7f7f; /* Auto-switch for dark mode */\n }\n}\n\n/*** images ***/\n\n.markdown-body img {\n vertical-align: top;\n}\n.intro {\n max-width: 500px;\n}\ntd img {\n margin-left: 0 !important;\n}\n\np > span > span > img {\n margin-bottom: 0;\n}\n\n/*** image styles (to deprecate) ***/\n\n.screen {\n display: block;\n padding-top: 1.5rem;\n margin-left: unset;\n margin-right: unset;\n}\n.inline-icon-iso {\n /*isolated icon - no text*/\n display: inline;\n margin: 0 0.13rem;\n position: relative;\n top: 0.2rem;\n height: 1.25rem;\n vertical-align: baseline !important;\n}\n.inline-icon-left {\n /*icon followed by label*/\n display: inline;\n margin: 0 0 0 0.13rem;\n position: relative;\n top: 0.13rem;\n height: 1.25rem;\n vertical-align: baseline !important;\n}\nli .inline-icon-iso {\n display: inline;\n margin: 0 0.13rem;\n position: relative;\n top: 0.13rem;\n height: 1.25rem;\n}\nli .inline-icon-left {\n display: inline;\n margin: 0 0 0 0.13rem;\n position: relative;\n top: 0.13rem;\n height: 1.25rem;\n}\n\n/*** drafting ***/\n\n.draft,\n.draft table {\n color: #dd0000;\n}\n\n/*** RM - footer ***/\n\n.footer {\n background-color: #000;\n color: #fff;\n padding: 50px 0;\n font-family: 'DM Sans', sans-serif;\n}\n\n.footer .container {\n max-width: 1200px;\n margin: 0 auto;\n padding: 0 20px;\n}\n\n.resources {\n width: 297px;\n height: 173px;\n display: flex;\n flex-direction: column;\n justify-content: flex-start;\n align-items: flex-start;\n gap: 12px;\n}\n\n.footer-link {\n display: inline-flex;\n justify-content: flex-start;\n align-items: center;\n gap: 15px;\n color: white;\n font-size: 17.5px;\n font-family: 'DM Sans', sans-serif;\n font-weight: 400;\n line-height: 25px;\n word-wrap: break-word;\n}\n\n.footer-link img {\n width: 24px;\n height: 24px;\n color: white;\n}\n\n.copyright {\n color: var(--product-background-9, #8c8c8c);\n font-family: 'DM Sans', sans-serif;\n font-size: 17.5px;\n font-style: normal;\n font-weight: 400;\n line-height: 25px;\n /* display: inline-flex;\n flex-direction: row;\n gap: 4px; */\n text-align: right;\n width: 100%;\n margin-top: -25px;\n}\n.copyrighty {\n color: var(--product-background-9, #8c8c8c);\n text-align: right;\n width: 100%;\n margin-top: auto;\n}\n\n.intercom-lightweight-app-launcher-custom-icon-open {\n margin-bottom: 0px !important;\n}\n\n@media screen and (max-width: 960px) {\n .resources {\n width: 100%;\n height: auto;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n gap: 12px;\n }\n .footer-link {\n display: flex;\n align-items: center;\n gap: 8px;\n color: #fff;\n font-family: 'DM Sans', sans-serif;\n font-size: 17.5px;\n font-style: normal;\n line-height: 25px;\n }\n .copyright {\n font-size: 17.5px;\n font-style: normal;\n line-height: 25px;\n text-align: center;\n width: 100%;\n margin-top: 20px;\n }\n}\n\n.markdown-body kbd {\n font-size: 12px;\n}\n/* all CSS should be saved to the group stylesheet */\n\n/*Temporary fix for hiding token by default*/\n.rm-APIAuth {\n filter: blur(2px); /* Adjust the value to control the amount of blur */\n}\n\n/* Ensure no underline on tabs */\n.SearchTabs-Tab2715KRxrb5JT {\n text-decoration: none !important;\n}","js":"//-------------------------------------------------//\n// #3 Collapsible sidebar navigation\n$(window).on(\"pageLoad\", function (e, state) {\n // This event handler runs when the page loads.\n\n // Collapse navigation in the sidebar initially\n $(\".rm-Sidebar-section > .rm-Sidebar-list\").addClass(\"section-collapsed\");\n // Adds a class to collapse all sidebar sections by default.\n\n $(\".rm-Sidebar-heading\").append(\"\");\n // Appends a chevron icon to each sidebar heading for visual indication of collapsibility.\n\n if ($(\".rm-Sidebar-link.active\").length > 0) {\n // Checks if there are any active links in the sidebar.\n\n console.log(\"testing - > 0\");\n\n $(\".rm-Sidebar-link.active\")\n .parents(\".rm-Sidebar-list\")\n .addClass(\"section-list-expanded\");\n // If an active link is found, its parent list is expanded.\n\n $(\".rm-Sidebar-link.active\")\n .parents(\".rm-Sidebar-section\")\n .children(\".rm-Sidebar-heading\")\n .addClass(\"section-expanded\");\n // The corresponding section heading is also expanded.\n }\n});\n\n$(document).on(\"click\", \".rm-Sidebar-heading\", function () {\n // This event handler is for clicking on the sidebar headings.\n\n if ($(this).hasClass(\"section-expanded\")) {\n // If the clicked heading is already expanded, do nothing.\n } else {\n // If the clicked heading is not expanded, collapse all sections.\n $(\".section-expanded, .section-list-expanded\").removeClass(\n \"section-expanded section-list-expanded\"\n );\n }\n\n // Toggle the expansion state of the clicked heading and its corresponding list.\n $(this).toggleClass(\"section-expanded\");\n $(this).next().toggleClass(\"section-list-expanded\");\n});\n\n$(function () {\n // This function runs when the DOM is fully loaded.\n\n // Hide all expandable content sections by default.\n $(\".expand-content\").hide();\n let hidden = true;\n\n $(\".expand-trigger\").on(\"click\", function () {\n // This event handler is for clicking on the trigger to expand content sections.\n\n $(\".expand-content\").toggle();\n // Toggles the visibility of the expandable content sections.\n\n hidden = !hidden;\n // Updates the hidden state.\n\n return hidden\n ? $(\".expand-trigger\").find(\"span\").text(\"Show\")\n : $(\".expand-trigger\").find(\"span\").text(\"Hide\");\n // Changes the text of the trigger based on the hidden state.\n });\n});\n\n//-------------------------------------------------//\n\n// #4 Align Images Left by default per request\n$(window).on('pageLoad', function(e, state) {\n // Introduce a 1-second delay using setTimeout\n setTimeout(function() {\n // Select all images that are not inside
,
, or
elements within
or lists\n\t\t\t\t\t\tvar images = document.querySelectorAll('img:not(p img):not(table img):not(li img):not(.rm-Header img):not(.notification-ribbon img)');\n\n // Update the align attribute to \"left\" and add a margin of 10px under each selected image\n images.forEach(function(image) {\n image.setAttribute('align', 'left');\n image.style.marginBottom = '10px';\n });\n }, 1000); // 1 second timeout\n });\n\n//-------------------------------------------------//\n//--------------------------------------------------\n// #5 Auto-Hide Auth Input in API Ref Section\n$(window).on('pageLoad', function(e, state) {\n // Wait for 1 second before executing the function\n setTimeout(function() {\n // Find the .rm-APIAuth section and change its blur\n var section = document.querySelector('.rm-APIAuth');\n if (section) {\n section.style.filter = 'none';\n } else {\n console.error('.rm-APIAuth section not found');\n }\n \n // Find the button by its class name\n var button = document.querySelector('.Button_xs.rm-APIAuth-lock');\n \n // Check if the button exists before attempting to click it\n if (button) {\n button.click();\n } else {\n console.error('Button not found');\n }\n }, 900); \n});\n\n\n\n//--------------------------------------------------\n// #7 Automatically click AXIOS (only when Node Language is Active) on pages with \"/reference/\" path\ndocument.addEventListener('DOMContentLoaded', function() {\n // Check if the current page is in the \"/reference/\" path\n if (window.location.pathname.startsWith('/reference/')) {\n const clickExample = () => {\n const examples = document.querySelector(\"[class*='rm-PlaygroundRequest']\");\n const defaultLanguage = document.querySelector('[class*=\"LanguagePicker-button\"].rm-LanguageButton_active');\n\n // Check if the default language is \"Node\"\n if (examples && defaultLanguage && defaultLanguage.textContent.trim() === 'Node') {\n clearInterval(interval);\n const dropdownButton = document.querySelector('button.Button.Button_xs.Dropdown-toggle.Button_contrast_ghost.Button_contrast');\n if (dropdownButton) {\n dropdownButton.click(); // Click the dropdown button\n \n // Wait for the dropdown menu to appear\n setTimeout(() => {\n // Find the tippy container\n const tippyContainer = document.querySelector('[id^=\"tippy-\"]');\n if (tippyContainer) {\n // Find the dropdown menu within the tippy container\n const dropdownMenu = tippyContainer.querySelector('.Dropdown-content');\n if (dropdownMenu) {\n // Find the \"api\" option within the dropdown menu\n const apiOption = dropdownMenu.querySelector('.Menu-Item_link span');\n if (apiOption && apiOption.textContent.trim() === 'api') {\n // Remove the \"api\" option from the DOM\n apiOption.parentElement.remove();\n }\n\n // Find the \"Axios\" option within the dropdown menu\n const axiosOption = dropdownMenu.querySelector('.Menu-Item_link span');\n if (axiosOption && axiosOption.textContent.trim() === 'Axios') {\n // Click the \"Axios\" option\n axiosOption.click();\n }\n }\n }\n }, 100); // Adjust the delay time as needed\n }\n }\n };\n const interval = setInterval(clickExample, 100);\n }\n});\n//--------------------------------------------------\n// #8 Custom Expandable Content Components (?)\n// REMOVED PER CUSTOMER\n\n//--------------------------------------------------\n// #9 Custom Tabs (?)\ndocument.addEventListener(\"DOMContentLoaded\", function() {\n // Show the default tab content\n openTab('tab1');\n});\n\nfunction openTab(tabId) {\n // Hide all tab content\n document?.querySelectorAll('.tab-content').forEach(function(tabContent) {\n tabContent.style.display = 'none';\n });\n\n // Deactivate all tab buttons\n document?.querySelectorAll('.tabs button').forEach(function(tabButton) {\n tabButton.classList.remove('active-tab');\n });\n\n // Show the selected tab content\n document.getElementById(tabId).style.display = 'block';\n\n // Activate the clicked tab button\n document.getElementById(tabId + 'Btn').classList.add('active-tab');\n}\n\n//--------------------------------------------------\n// #10 Lists within Paragraphs (?)\n function wrapLiTextInP(listId) {\n var listItems = document.getElementById(listId).querySelectorAll('li');\n listItems.forEach(function (li) {\n var paragraphs = li.querySelectorAll('p');\n if (paragraphs.length === 0) {\n var textContent = li.innerHTML.trim();\n li.innerHTML = '
' + textContent + '
';\n }\n });\n }\n\n document.addEventListener('DOMContentLoaded', function () {\n wrapLiTextInP('myList');\n wrapLiTextInP('myOrdered');\n });\n\n\n//--------------------------------------------------\n// #11 Save the access_token value into local storage/auto populate\n\n function waitForElement(selector) {\n return new Promise((resolve, reject) => {\n const observer = new MutationObserver((mutations, obs) => {\n const element = document.querySelectorAll(selector);\n if (element) {\n obs.disconnect();\n resolve(element);\n }\n });\n\n observer.observe(document.body, {\n childList: true,\n subtree: true,\n });\n\n // Optional: Timeout to avoid infinite waiting\n setTimeout(() => {\n observer.disconnect();\n reject(new Error('Element not found'));\n }, 30000); // 30 seconds timeout\n });\n }\n\n const addTryItButtonClickEvent = async () => {\n try {\n // Wait for the div elements containing the class attribute containing 'rm-PlaygroundRequest'\n await waitForElement(\n '#ReferencePlayground > section[class*=\"Playground-section\"][class*=\"Playground-section_sticky\"] > div > footer > button'\n );\n console.log(\n 'FOUND ELEMENTS: #ReferencePlayground > section[class*=\"Playground-section\"][class*=\"Playground-section_sticky\"] > div > footer > button'\n );\n // Find the div elements containing the class attribute containing 'rm-PlaygroundRequest'\n const divsWithClass = document.querySelectorAll(\n 'div[class*=rm-PlaygroundRequest]'\n );\n\n // Convert the NodeList to an array for iteration\n const divArray = Array.from(divsWithClass);\n\n // Iterate through each div element with the specified class attribute\n divArray.forEach(divElement => {\n // Find the footer tag inside the current div element\n const footerInDiv = divElement.querySelector('footer');\n\n if (footerInDiv) {\n // Find the Try It button inside the footer tag\n const tryItButton = footerInDiv.querySelector(\n 'button[class*=rm-TryIt]'\n );\n\n // Check if the button contains the text 'Try It!'\n if (tryItButton && tryItButton.textContent.trim() === 'Try It!') {\n // Add event listener to the \"Try It\" button only on the /token page\n tryItButton.addEventListener('click', event => {\n event.preventDefault();\n // Check if the current URL ends with '/token'\n if (window.location.pathname.endsWith('/token')) {\n // Execute the additional logic after a delay on the /token page\n console.log('Expecing new function');\n }\n });\n }\n }\n });\n } catch (error) {\n console.error('Error:', error);\n }\n };\n\n // Call the function to add the event listener\n addTryItButtonClickEvent();\n\n\ndocument.addEventListener('DOMContentLoaded', () => {\n // Function to handle the additional logic after a delay\n const waitForResponse = () => {\n setTimeout(() => {\n // Your additional logic after a delay of 1 second goes here\n\n const extractTokens = () => {\n let tokens = {};\n\n // Query the pre element with the specified class\n const requestCode = document.querySelector('pre.CodeSnippet');\n const responseCode = document.querySelector(\n 'div.rm-PlaygroundResponse'\n );\n\n const requestText = requestCode.textContent;\n const responseText = responseCode.textContent;\n\n // Define the regex to find the value after \"Basic\"\n const basicAuthRegex = /authorization: Basic ([^']+)'?/;\n const accessTokenRegex = /\"access_token\":\\s*\"([^\"]+)\"/;\n const refreshTokenRegex = /\"refresh_token\":\\s*\"([^\"]+)\"/;\n const expiresInRegex = /\"expires_in\":\\s*(\\d{4})/;\n\n const basicAuthToken = requestText.match(basicAuthRegex);\n if (basicAuthToken && basicAuthToken[1]) {\n tokens.basic_auth = basicAuthToken[1];\n } else {\n console.error('Authorization Basic value not found');\n }\n\n const accessToken = responseText.match(accessTokenRegex);\n if (accessToken && accessToken[1]) {\n tokens.access_token = accessToken[1];\n } else {\n console.error('Access Token value not found');\n }\n\n const refreshToken = responseText.match(refreshTokenRegex);\n if (refreshToken && refreshToken[1]) {\n tokens.refresh_token = refreshToken[1];\n } else {\n console.error('Refresh Token value not found');\n }\n\n const expiresIn = responseText.match(expiresInRegex);\n if (expiresIn && expiresIn[1]) {\n tokens.expires_in = expiresIn[1];\n } else {\n console.error('Token Expiration value not found');\n }\n\n return tokens;\n };\n\n // Function to save the tokens object into local storage\n const saveTokensToLocalStorage = tokens => {\n if (tokens.access_token || tokens.refresh_token || tokens.basic_auth) {\n const expirationTime = Date.now() + tokens.expires_in * 1000;\n const storedTokens = JSON.parse(localStorage.getItem('tokens')) || {};\n const updatedTokens = {\n ...storedTokens,\n ...tokens,\n expiration_time: expirationTime,\n };\n localStorage.setItem('tokens', JSON.stringify(updatedTokens));\n }\n };\n\n // Retrieve tokens from the HTML structure\n const tokens = extractTokens();\n // Save tokens into local storage\n saveTokensToLocalStorage(tokens);\n // Set a timeout to refresh the token 3 minutes before it expires\n setRefreshTokenTimeout(tokens.expires_in);\n }, 1500);\n };\n\n // Function to set a timeout to refresh the token\n const setRefreshTokenTimeout = expiresIn => {\n const refreshIn = (expiresIn - 180) * 1000; // Refresh 3 minutes before expiration\n setTimeout(() => {\n getNewAccessToken();\n }, refreshIn);\n };\n\n // Function to add event listener to the \"Try It\" button\n const addTryItButtonClickEvent = () => {\n setTimeout(() => {\n // Find the div elements containing the class attribute containing 'rm-PlaygroundRequest'\n const divsWithClass = document.querySelectorAll(\n 'div[class*=rm-PlaygroundRequest]'\n );\n\n // Convert the NodeList to an array for iteration\n const divArray = Array.from(divsWithClass);\n\n // Iterate through each div element with the specified class attribute\n divArray.forEach(divElement => {\n // Find the footer tag inside the current div element\n const footerInDiv = divElement.querySelector('footer');\n\n if (footerInDiv) {\n // Find the Try It button inside the footer tag\n const tryItButton = footerInDiv.querySelector(\n 'button[class*=rm-TryIt]'\n );\n\n // Check if the button contains the text 'Try It!'\n if (tryItButton && tryItButton.textContent.trim() === 'Try It!') {\n // Add event listener to the \"Try It\" button only on the /token page\n tryItButton.addEventListener('click', event => {\n event.preventDefault();\n // Check if the current URL ends with '/token'\n if (window.location.pathname.endsWith('/token')) {\n // Execute the additional logic after a delay on the /token page\n waitForResponse();\n }\n });\n }\n }\n });\n }, 1000);\n };\n\n // Function to monitor URL changes using window.onpopstate\n window.onpopstate = () => {\n // Re-add the event listener when the URL changes\n addTryItButtonClickEvent();\n };\n\n // Function to observe DOM mutations using MutationObserver\n const observer = new MutationObserver(() => {\n // Re-add the event listener on DOM mutations\n addTryItButtonClickEvent();\n });\n\n // Start observing mutations in the document\n observer.observe(document.body, { attributes: true, subtree: true });\n\n // Add the initial event listener on page load\n addTryItButtonClickEvent();\n});\n\ndocument.addEventListener('DOMContentLoaded', () => {\n let isUpdated = false;\n\n const updateBearerToken = async () => {\n setTimeout(async () => {\n const inputField = document.getElementById('APIAuth-token');\n const inputValue = inputField?.value;\n\n // Check if access_token exists in local storage\n const storedTokens = JSON.parse(localStorage.getItem('tokens'));\n let storedToken = storedTokens?.access_token;\n\n if (!storedToken) {\n await getNewAccessToken(); // Refresh the access token\n storedToken = JSON.parse(localStorage.getItem('tokens'))?.access_token;\n }\n\n if (!storedToken) return; // Stop the code execution if access_token does not exist\n\n const event = new Event('change', { bubbles: true });\n\n if (inputValue !== storedToken || inputValue === '') {\n const nativeInputValueSetter = Object.getOwnPropertyDescriptor(\n window.HTMLInputElement.prototype,\n 'value'\n ).set;\n nativeInputValueSetter.call(inputField, storedToken);\n\n // Dispatch 'input' event to mimic the user input\n const inputEvent = new Event('input', {\n bubbles: true,\n cancelable: true,\n });\n inputField.dispatchEvent(inputEvent);\n isUpdated = true;\n } else if (!isUpdated) {\n inputField.dispatchEvent(event);\n }\n }, 1000);\n };\n\n // Create a MutationObserver instance\n const observer = new MutationObserver(updateBearerToken);\n\n // Observe changes in the document's body and its descendants\n observer.observe(document.body, {\n subtree: true,\n childList: true,\n attributes: true,\n });\n\n // Call the function on initial load with a delay, but not on \"/token\" pages\n if (\n window.location.href.includes('/reference') &&\n !window.location.href.endsWith('/reference/token')\n ) {\n updateBearerToken();\n window.onpopstate = updateBearerToken;\n }\n\n // Set the initial refresh token timeout if the tokens are already in local storage\n const storedTokens = JSON.parse(localStorage.getItem('tokens'));\n if (storedTokens?.expiration_time) {\n const expiresIn = (storedTokens.expiration_time - Date.now()) / 1000;\n setRefreshTokenTimeout(expiresIn);\n }\n});\n\n// Function to get a new access_token using the refresh_token\nconst getNewAccessToken = async () => {\n const storedTokens = JSON.parse(localStorage.getItem('tokens'));\n const refreshToken = storedTokens?.refresh_token;\n const basicAuth = storedTokens?.basic_auth;\n\n if (!refreshToken) {\n console.error('No refresh token found');\n return;\n }\n\n if (!basicAuth) {\n console.error('No Basic Auth value found');\n return;\n }\n\n try {\n const response = await fetch(\n 'https://api.sigmacomputing.com/v2/auth/token',\n {\n method: 'POST',\n headers: {\n accept: 'application/json',\n authorization: `Basic ${basicAuth}`,\n 'content-type': 'application/x-www-form-urlencoded',\n },\n body: new URLSearchParams({\n grant_type: 'refresh_token',\n refresh_token: refreshToken,\n }),\n }\n );\n\n if (!response.ok) {\n throw new Error('Failed to refresh token');\n }\n\n const data = await response.json();\n const newAccessToken = data.access_token;\n const newRefreshToken = data.refresh_token || refreshToken;\n const newExpiresIn = data.expires_in;\n\n // Save the new tokens to local storage\n const expirationTime = Date.now() + newExpiresIn * 1000;\n const updatedTokens = {\n access_token: newAccessToken,\n refresh_token: newRefreshToken,\n basic_auth: basicAuth,\n expiration_time: expirationTime,\n };\n localStorage.setItem('tokens', JSON.stringify(updatedTokens));\n\n // Set a timeout to refresh the token 3 minutes before it expires\n setRefreshTokenTimeout(newExpiresIn);\n\n console.log('Access token refreshed successfully');\n } catch (error) {\n console.error('Error refreshing access token:', error);\n }\n};\n\n\n//--------------------------------------------------\n// #12 Search Tab Popup Auto-Click Current Section\ndocument.addEventListener(\"DOMContentLoaded\", function() {\n setTimeout(function() {\n let currentActiveTab = null;\n\n function selectTabByUrl() {\n const tabs = document.querySelectorAll('.SearchTabs-Tab2715KRxrb5JT');\n const path = window.location.pathname;\n\n let tabToSelect;\n if (path.includes('/docs')) {\n tabToSelect = 'Documentation';\n } else if (path.includes('/recipes')) {\n tabToSelect = 'Recipes';\n } else if (path.includes('/reference')) {\n tabToSelect = 'API Reference';\n } else if (path.includes('/changelog')) {\n tabToSelect = \"What's New\";\n }\n\n if (tabToSelect) {\n tabs.forEach(tab => {\n const spanElement = tab.querySelector('span');\n if (spanElement && spanElement.innerText.includes(tabToSelect)) {\n tab.click(); // Simulate a click on the tab\n }\n });\n } else {\n // Default to the first tab if no specific tab is selected based on URL\n if (tabs.length > 0) {\n tabs[0].click(); // Simulate a click on the first tab\n }\n }\n }\n\n function handleTabClick(event) {\n if (currentActiveTab) {\n currentActiveTab.setAttribute('aria-selected', 'false');\n currentActiveTab.classList.remove('Tabs-listItem_active');\n }\n\n const clickedTab = event.currentTarget;\n clickedTab.setAttribute('aria-selected', 'true');\n clickedTab.classList.add('Tabs-listItem_active');\n\n currentActiveTab = clickedTab; // Update the currently active tab\n }\n\n // Add click event listeners to tabs\n const tabs = document.querySelectorAll('.SearchTabs-Tab2715KRxrb5JT');\n tabs.forEach(tab => {\n tab.addEventListener('click', handleTabClick);\n });\n\n // Initial selection when the page loads\n selectTabByUrl();\n\n // Listen for changes in URL (handling SPA navigation)\n window.addEventListener('popstate', selectTabByUrl);\n\n // Listen for the search modal being opened\n const searchButton = document.querySelector('.rm-SearchToggle');\n if (searchButton) {\n searchButton.addEventListener('click', () => {\n if (currentActiveTab) {\n currentActiveTab.setAttribute('aria-selected', 'false');\n currentActiveTab.classList.remove('Tabs-listItem_active');\n }\n selectTabByUrl();\n });\n }\n // Additionally, for history.pushState or history.replaceState calls, you might need to override those\n (function(history) {\n const pushState = history.pushState;\n const replaceState = history.replaceState;\n\n history.pushState = function(state, title, url) {\n pushState.call(history, state, title, url);\n selectTabByUrl();\n };\n\n history.replaceState = function(state, title, url) {\n replaceState.call(history, state, title, url);\n selectTabByUrl();\n };\n })(window.history);\n }, 500); // Adjust the timeout duration as needed\n});\n\n//------------------------------------------------------------\n// #13 Changes username to client ID and password to client secret.\n// Function to change the placeholders\nfunction changePlaceholders() {\n var userInput = document.querySelector('input[name=\"user\"]');\n var passInput = document.querySelector('input[name=\"pass\"]');\n\n if (userInput) {\n userInput.placeholder = \"Client ID\";\n }\n\n if (passInput) {\n passInput.placeholder = \"Client Secret\";\n }\n}\n\n// Function to periodically check for the presence of input fields\nfunction periodicCheck() {\n changePlaceholders();\n // Set a delay to check again after 500ms if inputs are not yet loaded\n if (!document.querySelector('input[name=\"user\"]') || !document.querySelector('input[name=\"pass\"]')) {\n setTimeout(periodicCheck, 500);\n }\n}\n\n// MutationObserver to watch for changes in the DOM and apply the changes when elements are loaded\nvar observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(mutation) {\n if (mutation.addedNodes.length) {\n changePlaceholders();\n }\n });\n});\n\n// Start observing the document for changes\nobserver.observe(document.body, { childList: true, subtree: true });\n\n// Initial call to handle already loaded elements and start periodic check\nchangePlaceholders();\nperiodicCheck();","html":{"header":"\n\n\n\n\n\n\n","home_footer":null,"page_footer":"\n"}},"header":{"type":"solid","gradient_color":null,"link_style":"buttons","overlay":{"fill":"auto","type":"triangles","position":"top-left","image":{"uri":null,"url":null,"name":null,"width":null,"height":null,"color":null,"links":{"original_url":null}}}},"ai":{"dropdown":"disabled","options":{"chatgpt":"enabled","claude":"enabled","clipboard":"enabled","copilot":"enabled","view_as_markdown":"enabled"}},"navigation":{"first_page":"landing_page","left":[],"logo_link":"landing_page","page_icons":"enabled","right":[{"type":"home","title":null,"url":null,"custom_page":null},{"type":"link_url","title":"Community","url":"https://community.sigmacomputing.com/","custom_page":null},{"type":"link_url","title":"QuickStarts","url":"https://quickstarts.sigmacomputing.com/","custom_page":null},{"type":"link_url","title":"Status","url":"https://status.sigmacomputing.com/","custom_page":null}],"sub_nav":[],"subheader_layout":"links","version":"disabled","links":{"home":{"label":"Home","visibility":"disabled"},"graphql":{"label":"GraphQL","visibility":"disabled"},"guides":{"label":"Guides","alias":"Documentation","visibility":"enabled"},"reference":{"label":"API Reference","alias":"API Reference","visibility":"enabled"},"recipes":{"label":"Recipes","alias":"API Recipes","visibility":"enabled"},"changelog":{"label":"Changelog","alias":"What's New","visibility":"enabled"},"discussions":{"label":"Discussions","alias":null,"visibility":"disabled"}}}},"git":{"connection":{"repository":{},"organization":null,"status":"inactive"}}}},"version":{"_id":"649ca346fddb0a0067eb3bb9","version":"1.0","version_clean":"1.0.0","codename":"published release","is_stable":true,"is_beta":false,"is_hidden":false,"is_deprecated":false,"categories":["649ca346fddb0a0067eb3bbb","649ca346fddb0a0067eb3bbb","649ca346fddb0a0067eb3bbd","649ca346fddb0a0067eb3bc7","649cd2e58e830b0043594f7a","649cd2ecbb269f000a63887d","649cd31bbf00340bdef3e2f7","651c34dcef8f7d0739f0173b","651c35f10173200035a349c0","651c36d1316003002b9ed00a","651c41952e7b890042b7ac08","651c41a7f4faca23b1574c49","651c41b113c6110067baacea","651c41d13a135100328c20e1","651c41fa36bd6c0744e775f2","651c4216f8718d00247b1a3a","651c4222ea0cf3005d770941","651c42300549a7000c374d0b","651c4246b391e10024bb7eb7","654c23e45c46e3001fe30231","654fa3e0eb858d002a30ea20","65528bc2d92a7a0010929ce3","6553805b6d22b5050b0d4ceb","6582405a0eea57006aed4eae","6583161b94525a000fcbbeed","6595d3a14c9897005b23823c","65a986b8232ad300548bd5c8","65b0a132512dd8004eced0ea","65b28293ef920800106c9d01","65cfb4006097150036c30aed","65d4ee5514e952003f783cb4","65d4ee76379a33006065466b","65f8f203690838004b91d149","65f8f304af8cd00025ffc68d","65f919d8f015400060e3c6ed","65f91d718b003f002bc7cb52","65f91e1aa36af9002c452747","65f91e8419171400198049e2","670971afbe04ab000f783a37","673f6ce14454f2006b52c16b","6791520ac0b8130053ef47c7","679a743bc633b8000fabb634","679a7804cfa7f900671aec24","679a7816dc56050024000e7e","679a7b5c5b2b3a0043f6b564","67ae45ac44ce8f006188ec6b","67d9afe618dc3d006c36bb6a","67d9b0a152539500604913e6","67d9b0aaada09900172d07fc","67d9b0adada09900172d07fe","67d9b0b0432e4100102b9258","67d9b0b2432e4100102b945f","67d9b0b4ada09900172d0809","67d9b0b7ada09900172d0a20","67d9b0b9ada09900172d0a22","67d9b0bcc39315006815a411","67d9b0bfc39315006815a413","67d9b0c2fd48c800596e8791","67d9b0c930e1140018fec2b3","67d9b0cdfd48c800596e879c","67d9b0d0d697d8002bdecb72","67d9b0d252a4f4006af0645c","67db3c5bc47e2800195583b4"],"project":"649ca345fddb0a0067eb3bb3","releaseDate":"2023-06-28T21:16:54.076Z","createdAt":"2023-06-28T21:16:54.089Z","updatedAt":"2025-03-19T21:51:23.752Z","__v":1,"pdfStatus":"error"}},"is404":false,"isDetachedProductionSite":false,"lang":"en","langFull":"Default","reqUrl":"/docs/azure-private-link-connections","version":{"_id":"649ca346fddb0a0067eb3bb9","version":"1.0","version_clean":"1.0.0","codename":"published release","is_stable":true,"is_beta":false,"is_hidden":false,"is_deprecated":false,"categories":["649ca346fddb0a0067eb3bbb","649ca346fddb0a0067eb3bbb","649ca346fddb0a0067eb3bbd","649ca346fddb0a0067eb3bc7","649cd2e58e830b0043594f7a","649cd2ecbb269f000a63887d","649cd31bbf00340bdef3e2f7","651c34dcef8f7d0739f0173b","651c35f10173200035a349c0","651c36d1316003002b9ed00a","651c41952e7b890042b7ac08","651c41a7f4faca23b1574c49","651c41b113c6110067baacea","651c41d13a135100328c20e1","651c41fa36bd6c0744e775f2","651c4216f8718d00247b1a3a","651c4222ea0cf3005d770941","651c42300549a7000c374d0b","651c4246b391e10024bb7eb7","654c23e45c46e3001fe30231","654fa3e0eb858d002a30ea20","65528bc2d92a7a0010929ce3","6553805b6d22b5050b0d4ceb","6582405a0eea57006aed4eae","6583161b94525a000fcbbeed","6595d3a14c9897005b23823c","65a986b8232ad300548bd5c8","65b0a132512dd8004eced0ea","65b28293ef920800106c9d01","65cfb4006097150036c30aed","65d4ee5514e952003f783cb4","65d4ee76379a33006065466b","65f8f203690838004b91d149","65f8f304af8cd00025ffc68d","65f919d8f015400060e3c6ed","65f91d718b003f002bc7cb52","65f91e1aa36af9002c452747","65f91e8419171400198049e2","670971afbe04ab000f783a37","673f6ce14454f2006b52c16b","6791520ac0b8130053ef47c7","679a743bc633b8000fabb634","679a7804cfa7f900671aec24","679a7816dc56050024000e7e","679a7b5c5b2b3a0043f6b564","67ae45ac44ce8f006188ec6b","67d9afe618dc3d006c36bb6a","67d9b0a152539500604913e6","67d9b0aaada09900172d07fc","67d9b0adada09900172d07fe","67d9b0b0432e4100102b9258","67d9b0b2432e4100102b945f","67d9b0b4ada09900172d0809","67d9b0b7ada09900172d0a20","67d9b0b9ada09900172d0a22","67d9b0bcc39315006815a411","67d9b0bfc39315006815a413","67d9b0c2fd48c800596e8791","67d9b0c930e1140018fec2b3","67d9b0cdfd48c800596e879c","67d9b0d0d697d8002bdecb72","67d9b0d252a4f4006af0645c","67db3c5bc47e2800195583b4"],"project":"649ca345fddb0a0067eb3bb3","releaseDate":"2023-06-28T21:16:54.076Z","createdAt":"2023-06-28T21:16:54.089Z","updatedAt":"2025-03-19T21:51:23.752Z","__v":1,"pdfStatus":"error"}}">