deploying docs: fix(docs): add missing code formatting, fix broken link (#27992) (apache/superset@02b69709bbae0fdb2098f649b57a1a26eeac8b56)
diff --git a/404.html b/404.html
index d1eb57f..623a29d 100644
--- a/404.html
+++ b/404.html
@@ -9,7 +9,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.77343581.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.eac039ac.js" as="script">
 <link rel="preload" href="/assets/js/main.ec2aff2b.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -37,7 +37,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.77343581.js"></script>
+<script src="/assets/js/runtime~main.eac039ac.js"></script>
 <script src="/assets/js/main.ec2aff2b.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/assets/js/3c585fdb.0121dd4f.js b/assets/js/3c585fdb.da186a97.js
similarity index 84%
rename from assets/js/3c585fdb.0121dd4f.js
rename to assets/js/3c585fdb.da186a97.js
index 0f4d9f0..b4da1a4 100644
--- a/assets/js/3c585fdb.0121dd4f.js
+++ b/assets/js/3c585fdb.da186a97.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkdocs_v_2=self.webpackChunkdocs_v_2||[]).push([[6585],{15680:(e,n,t)=>{t.d(n,{xA:()=>u,yg:()=>y});var a=t(96540);function r(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function o(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}return t}function i(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?o(Object(t),!0).forEach((function(n){r(e,n,t[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):o(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}))}return e}function s(e,n){if(null==e)return{};var t,a,r=function(e,n){if(null==e)return{};var t,a,r={},o=Object.keys(e);for(a=0;a<o.length;a++)t=o[a],n.indexOf(t)>=0||(r[t]=e[t]);return r}(e,n);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)t=o[a],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(r[t]=e[t])}return r}var l=a.createContext({}),p=function(e){var n=a.useContext(l),t=n;return e&&(t="function"==typeof e?e(n):i(i({},n),e)),t},u=function(e){var n=p(e.components);return a.createElement(l.Provider,{value:n},e.children)},g="mdxType",c={inlineCode:"code",wrapper:function(e){var n=e.children;return a.createElement(a.Fragment,{},n)}},d=a.forwardRef((function(e,n){var t=e.components,r=e.mdxType,o=e.originalType,l=e.parentName,u=s(e,["components","mdxType","originalType","parentName"]),g=p(t),d=r,y=g["".concat(l,".").concat(d)]||g[d]||c[d]||o;return t?a.createElement(y,i(i({ref:n},u),{},{components:t})):a.createElement(y,i({ref:n},u))}));function y(e,n){var t=arguments,r=n&&n.mdxType;if("string"==typeof e||r){var o=t.length,i=new Array(o);i[0]=d;var s={};for(var l in n)hasOwnProperty.call(n,l)&&(s[l]=n[l]);s.originalType=e,s[g]="string"==typeof e?e:r,i[1]=s;for(var p=2;p<o;p++)i[p]=t[p];return a.createElement.apply(null,i)}return a.createElement.apply(null,t)}d.displayName="MDXCreateElement"},10184:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>i,default:()=>c,frontMatter:()=>o,metadata:()=>s,toc:()=>p});var a=t(58168),r=(t(96540),t(15680));const o={title:"Configuring Superset",hide_title:!0,sidebar_position:4,version:1},i=void 0,s={unversionedId:"installation/configuring-superset",id:"installation/configuring-superset",title:"Configuring Superset",description:"Configuring Superset",source:"@site/docs/installation/configuring-superset.mdx",sourceDirName:"installation",slug:"/installation/configuring-superset",permalink:"/docs/installation/configuring-superset",draft:!1,editUrl:"https://github.com/apache/superset/edit/master/docs/docs/installation/configuring-superset.mdx",tags:[],version:"current",sidebarPosition:4,frontMatter:{title:"Configuring Superset",hide_title:!0,sidebar_position:4,version:1},sidebar:"tutorialSidebar",previous:{title:"Installing Locally Using Docker Compose",permalink:"/docs/installation/installing-superset-using-docker-compose"},next:{title:"Additional Networking Settings",permalink:"/docs/installation/networking-settings"}},l={},p=[{value:"Configuring Superset",id:"configuring-superset",level:2},{value:"Configuration",id:"configuration",level:3},{value:"Specifying a SECRET_KEY",id:"specifying-a-secret_key",level:3},{value:"Adding an initial SECRET_KEY",id:"adding-an-initial-secret_key",level:4},{value:"Rotating to a newer SECRET_KEY",id:"rotating-to-a-newer-secret_key",level:4},{value:"Using a production metastore",id:"using-a-production-metastore",level:3},{value:"Running on a WSGI HTTP Server",id:"running-on-a-wsgi-http-server",level:3},{value:"HTTPS Configuration",id:"https-configuration",level:3},{value:"Configuration Behind a Load Balancer",id:"configuration-behind-a-load-balancer",level:3},{value:"Custom OAuth2 Configuration",id:"custom-oauth2-configuration",level:3},{value:"LDAP Authentication",id:"ldap-authentication",level:3},{value:"Mapping LDAP or OAUTH groups to Superset roles",id:"mapping-ldap-or-oauth-groups-to-superset-roles",level:3},{value:"Mapping OAUTH groups to Superset roles",id:"mapping-oauth-groups-to-superset-roles",level:4},{value:"Mapping LDAP groups to Superset roles",id:"mapping-ldap-groups-to-superset-roles",level:4},{value:"Syncing roles at login",id:"syncing-roles-at-login",level:4},{value:"Flask app Configuration Hook",id:"flask-app-configuration-hook",level:3},{value:"Feature Flags",id:"feature-flags",level:3}],u={toc:p},g="wrapper";function c(e){let{components:n,...t}=e;return(0,r.yg)(g,(0,a.A)({},u,t,{components:n,mdxType:"MDXLayout"}),(0,r.yg)("h2",{id:"configuring-superset"},"Configuring Superset"),(0,r.yg)("h3",{id:"configuration"},"Configuration"),(0,r.yg)("p",null,"To configure your application, you need to create a file ",(0,r.yg)("inlineCode",{parentName:"p"},"superset_config.py"),". Add this file to your"),(0,r.yg)("p",null,(0,r.yg)("inlineCode",{parentName:"p"},"PYTHONPATH")," or create an environment variable ",(0,r.yg)("inlineCode",{parentName:"p"},"SUPERSET_CONFIG_PATH")," specifying the full path of the ",(0,r.yg)("inlineCode",{parentName:"p"},"superset_config.py"),"."),(0,r.yg)("p",null,"For example, if deploying on Superset directly on a Linux-based system where your ",(0,r.yg)("inlineCode",{parentName:"p"},"superset_config.py")," is under ",(0,r.yg)("inlineCode",{parentName:"p"},"/app")," directory, you can run:"),(0,r.yg)("pre",null,(0,r.yg)("code",{parentName:"pre",className:"language-bash"},"export SUPERSET_CONFIG_PATH=/app/superset_config.py\n")),(0,r.yg)("p",null,"If you are using your own custom Dockerfile with official Superset image as base image, then you can add your overrides as shown below:"),(0,r.yg)("pre",null,(0,r.yg)("code",{parentName:"pre",className:"language-bash"},"COPY --chown=superset superset_config.py /app/\nENV SUPERSET_CONFIG_PATH /app/superset_config.py\n")),(0,r.yg)("p",null,"Docker compose deployments handle application configuration differently. See ",(0,r.yg)("a",{parentName:"p",href:"https://github.com/apache/superset/tree/master/docker#readme"},"https://github.com/apache/superset/tree/master/docker#readme")," for details."),(0,r.yg)("p",null,"The following is an example of just a few of the parameters you can set in your ",(0,r.yg)("inlineCode",{parentName:"p"},"superset_config.py")," file:"),(0,r.yg)("pre",null,(0,r.yg)("code",{parentName:"pre"},"# Superset specific config\nROW_LIMIT = 5000\n\n# Flask App Builder configuration\n# Your App secret key will be used for securely signing the session cookie\n# and encrypting sensitive information on the database\n# Make sure you are changing this key for your deployment with a strong key.\n# Alternatively you can set it with `SUPERSET_SECRET_KEY` environment variable.\n# You MUST set this for production environments or the server will refuse\n# to start and you will see an error in the logs accordingly.\nSECRET_KEY = 'YOUR_OWN_RANDOM_GENERATED_SECRET_KEY'\n\n# The SQLAlchemy connection string to your database backend\n# This connection defines the path to the database that stores your\n# superset metadata (slices, connections, tables, dashboards, ...).\n# Note that the connection information to connect to the datasources\n# you want to explore are managed directly in the web UI\n# The check_same_thread=false property ensures the sqlite client does not attempt\n# to enforce single-threaded access, which may be problematic in some edge cases\nSQLALCHEMY_DATABASE_URI = 'sqlite:////path/to/superset.db?check_same_thread=false'\n\n# Flask-WTF flag for CSRF\nWTF_CSRF_ENABLED = True\n# Add endpoints that need to be exempt from CSRF protection\nWTF_CSRF_EXEMPT_LIST = []\n# A CSRF token that expires in 1 year\nWTF_CSRF_TIME_LIMIT = 60 * 60 * 24 * 365\n\n# Set this API key to enable Mapbox visualizations\nMAPBOX_API_KEY = ''\n")),(0,r.yg)("p",null,"All the parameters and default values defined in\n",(0,r.yg)("a",{parentName:"p",href:"https://github.com/apache/superset/blob/master/superset/config.py"},"https://github.com/apache/superset/blob/master/superset/config.py"),"\ncan be altered in your local ",(0,r.yg)("inlineCode",{parentName:"p"},"superset_config.py"),". Administrators will want to read through the file\nto understand what can be configured locally as well as the default values in place."),(0,r.yg)("p",null,"Since ",(0,r.yg)("inlineCode",{parentName:"p"},"superset_config.py")," acts as a Flask configuration module, it can be used to alter the\nsettings Flask itself, as well as Flask extensions like ",(0,r.yg)("inlineCode",{parentName:"p"},"flask-wtf"),", ",(0,r.yg)("inlineCode",{parentName:"p"},"flask-caching"),", ",(0,r.yg)("inlineCode",{parentName:"p"},"flask-migrate"),",\nand ",(0,r.yg)("inlineCode",{parentName:"p"},"flask-appbuilder"),". Flask App Builder, the web framework used by Superset, offers many\nconfiguration settings. Please consult the\n",(0,r.yg)("a",{parentName:"p",href:"https://flask-appbuilder.readthedocs.org/en/latest/config.html"},"Flask App Builder Documentation"),"\nfor more information on how to configure it."),(0,r.yg)("p",null,"Make sure to change:"),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},(0,r.yg)("inlineCode",{parentName:"li"},"SQLALCHEMY_DATABASE_URI"),": by default it is stored at ~/.superset/superset.db"),(0,r.yg)("li",{parentName:"ul"},(0,r.yg)("inlineCode",{parentName:"li"},"SECRET_KEY"),": to a long random string")),(0,r.yg)("p",null,"If you need to exempt endpoints from CSRF (e.g. if you are running a custom auth postback endpoint),\nyou can add the endpoints to ",(0,r.yg)("inlineCode",{parentName:"p"},"WTF_CSRF_EXEMPT_LIST"),":"),(0,r.yg)("pre",null,(0,r.yg)("code",{parentName:"pre"},"WTF_CSRF_EXEMPT_LIST = [\u2018\u2019]\n")),(0,r.yg)("h3",{id:"specifying-a-secret_key"},"Specifying a SECRET_KEY"),(0,r.yg)("h4",{id:"adding-an-initial-secret_key"},"Adding an initial SECRET_KEY"),(0,r.yg)("p",null,"Superset requires a user-specified SECRET_KEY to start up. This requirement was ",(0,r.yg)("a",{parentName:"p",href:"https://preset.io/blog/superset-security-update-default-secret_key-vulnerability/"},"added in version 2.1.0 to force secure configurations"),". Add a strong SECRET_KEY to your ",(0,r.yg)("inlineCode",{parentName:"p"},"superset_config.py")," file like:"),(0,r.yg)("pre",null,(0,r.yg)("code",{parentName:"pre",className:"language-python"},"SECRET_KEY = 'YOUR_OWN_RANDOM_GENERATED_SECRET_KEY'\n")),(0,r.yg)("p",null,"You can generate a strong secure key with ",(0,r.yg)("inlineCode",{parentName:"p"},"openssl rand -base64 42"),"."),(0,r.yg)("h4",{id:"rotating-to-a-newer-secret_key"},"Rotating to a newer SECRET_KEY"),(0,r.yg)("p",null,"If you wish to change your existing SECRET_KEY, add the existing SECRET_KEY to your ",(0,r.yg)("inlineCode",{parentName:"p"},"superset_config.py")," file as\n",(0,r.yg)("inlineCode",{parentName:"p"},"PREVIOUS_SECRET_KEY = "),"and provide your new key as ",(0,r.yg)("inlineCode",{parentName:"p"},"SECRET_KEY ="),". You can find your current SECRET_KEY with these\ncommands - if running Superset with Docker, execute from within the Superset application container:"),(0,r.yg)("pre",null,(0,r.yg)("code",{parentName:"pre",className:"language-python"},'superset shell\nfrom flask import current_app; print(current_app.config["SECRET_KEY"])\n')),(0,r.yg)("p",null,"Save your ",(0,r.yg)("inlineCode",{parentName:"p"},"superset_config.py")," with these values and then run ",(0,r.yg)("inlineCode",{parentName:"p"},"superset re-encrypt-secrets"),"."),(0,r.yg)("h3",{id:"using-a-production-metastore"},"Using a production metastore"),(0,r.yg)("p",null,"By default, Superset is configured to use SQLite, which is a simple and fast way to get started\n(without requiring any installation). However, for production environments,\nusing SQLite is highly discouraged due to security, scalability, and data integrity reasons.\nIt's important to use only the supported database engines and consider using a different\ndatabase engine on a separate host or container."),(0,r.yg)("p",null,"Superset supports the following database engines/versions:"),(0,r.yg)("table",null,(0,r.yg)("thead",{parentName:"table"},(0,r.yg)("tr",{parentName:"thead"},(0,r.yg)("th",{parentName:"tr",align:null},"Database Engine"),(0,r.yg)("th",{parentName:"tr",align:null},"Supported Versions"))),(0,r.yg)("tbody",{parentName:"table"},(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("a",{parentName:"td",href:"https://www.postgresql.org/"},"PostgreSQL")),(0,r.yg)("td",{parentName:"tr",align:null},"10.X, 11.X, 12.X, 13.X, 14.X, 15.X")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("a",{parentName:"td",href:"https://www.mysql.com/"},"MySQL")),(0,r.yg)("td",{parentName:"tr",align:null},"5.7, 8.X")))),(0,r.yg)("p",null,"Use the following database drivers and connection strings:"),(0,r.yg)("table",null,(0,r.yg)("thead",{parentName:"table"},(0,r.yg)("tr",{parentName:"thead"},(0,r.yg)("th",{parentName:"tr",align:null},"Database"),(0,r.yg)("th",{parentName:"tr",align:null},"PyPI package"),(0,r.yg)("th",{parentName:"tr",align:null},"Connection String"))),(0,r.yg)("tbody",{parentName:"table"},(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("a",{parentName:"td",href:"https://www.postgresql.org/"},"PostgreSQL")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"pip install psycopg2")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"postgresql://<UserName>:<DBPassword>@<Database Host>/<Database Name>"))),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("a",{parentName:"td",href:"https://www.mysql.com/"},"MySQL")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"pip install mysqlclient")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"mysql://<UserName>:<DBPassword>@<Database Host>/<Database Name>"))))),(0,r.yg)("p",null,"To configure Superset metastore set ",(0,r.yg)("inlineCode",{parentName:"p"},"SQLALCHEMY_DATABASE_URI")," config key on ",(0,r.yg)("inlineCode",{parentName:"p"},"superset_config"),"\nto the appropriate connection string."),(0,r.yg)("h3",{id:"running-on-a-wsgi-http-server"},"Running on a WSGI HTTP Server"),(0,r.yg)("p",null,"While you can run Superset on NGINX or Apache, we recommend using Gunicorn in async mode. This\nenables impressive concurrency even and is fairly easy to install and configure. Please refer to the\ndocumentation of your preferred technology to set up this Flask WSGI application in a way that works\nwell in your environment. Here\u2019s an async setup known to work well in production:"),(0,r.yg)("pre",null,(0,r.yg)("code",{parentName:"pre"},'      -w 10 \\\n      -k gevent \\\n      --worker-connections 1000 \\\n      --timeout 120 \\\n      -b  0.0.0.0:6666 \\\n      --limit-request-line 0 \\\n      --limit-request-field_size 0 \\\n      --statsd-host localhost:8125 \\\n      "superset.app:create_app()"\n')),(0,r.yg)("p",null,"Refer to the ",(0,r.yg)("a",{parentName:"p",href:"https://docs.gunicorn.org/en/stable/design.html"},"Gunicorn documentation")," for more\ninformation. ",(0,r.yg)("em",{parentName:"p"},"Note that the development web server (",(0,r.yg)("inlineCode",{parentName:"em"},"superset run")," or ",(0,r.yg)("inlineCode",{parentName:"em"},"flask run"),") is not intended\nfor production use.")),(0,r.yg)("p",null,"If you're not using Gunicorn, you may want to disable the use of ",(0,r.yg)("inlineCode",{parentName:"p"},"flask-compress")," by setting\n",(0,r.yg)("inlineCode",{parentName:"p"},"COMPRESS_REGISTER = False")," in your ",(0,r.yg)("inlineCode",{parentName:"p"},"superset_config.py"),"."),(0,r.yg)("p",null,"Currently, Google BigQuery python sdk is not compatible with ",(0,r.yg)("inlineCode",{parentName:"p"},"gevent"),", due to some dynamic monkeypatching on python core library by ",(0,r.yg)("inlineCode",{parentName:"p"},"gevent"),".\nSo, when you use ",(0,r.yg)("inlineCode",{parentName:"p"},"BigQuery")," datasource on Superset, you have to use ",(0,r.yg)("inlineCode",{parentName:"p"},"gunicorn")," worker type except ",(0,r.yg)("inlineCode",{parentName:"p"},"gevent"),"."),(0,r.yg)("h3",{id:"https-configuration"},"HTTPS Configuration"),(0,r.yg)("p",null,"You can configure HTTPS upstream via a load balancer or a reverse proxy (such as nginx) and do SSL/TLS Offloading before traffic reaches the Superset application. In this setup, local traffic from a Celery worker taking a snapshot of a chart for Alerts & Reports can access Superset at a ",(0,r.yg)("inlineCode",{parentName:"p"},"http://")," URL, from behind the ingress point.\nYou can also configure ",(0,r.yg)("a",{parentName:"p",href:"https://docs.gunicorn.org/en/stable/settings.html#ssl"},"SSL in Gunicorn")," (the Python webserver) if you are using an official Superset Docker image."),(0,r.yg)("h3",{id:"configuration-behind-a-load-balancer"},"Configuration Behind a Load Balancer"),(0,r.yg)("p",null,"If you are running superset behind a load balancer or reverse proxy (e.g. NGINX or ELB on AWS), you\nmay need to utilize a healthcheck endpoint so that your load balancer knows if your superset\ninstance is running. This is provided at ",(0,r.yg)("inlineCode",{parentName:"p"},"/health")," which will return a 200 response containing \u201cOK\u201d\nif the webserver is running."),(0,r.yg)("p",null,"If the load balancer is inserting ",(0,r.yg)("inlineCode",{parentName:"p"},"X-Forwarded-For/X-Forwarded-Proto")," headers, you should set\n",(0,r.yg)("inlineCode",{parentName:"p"},"ENABLE_PROXY_FIX = True")," in the superset config file (",(0,r.yg)("inlineCode",{parentName:"p"},"superset_config.py"),") to extract and use the\nheaders."),(0,r.yg)("p",null,"In case the reverse proxy is used for providing SSL encryption, an explicit definition of the\n",(0,r.yg)("inlineCode",{parentName:"p"},"X-Forwarded-Proto")," may be required. For the Apache webserver this can be set as follows:"),(0,r.yg)("pre",null,(0,r.yg)("code",{parentName:"pre"},'RequestHeader set X-Forwarded-Proto "https"\n')),(0,r.yg)("h3",{id:"custom-oauth2-configuration"},"Custom OAuth2 Configuration"),(0,r.yg)("p",null,"Superset is built on Flask-AppBuilder (FAB), which supports many providers out of the box\n(GitHub, Twitter, LinkedIn, Google, Azure, etc). Beyond those, Superset can be configured to connect\nwith other OAuth2 Authorization Server implementations that support \u201ccode\u201d authorization."),(0,r.yg)("p",null,"Make sure the pip package ",(0,r.yg)("a",{parentName:"p",href:"https://authlib.org/"},(0,r.yg)("inlineCode",{parentName:"a"},"Authlib"))," is installed on the webserver."),(0,r.yg)("p",null,"First, configure authorization in Superset ",(0,r.yg)("inlineCode",{parentName:"p"},"superset_config.py"),"."),(0,r.yg)("pre",null,(0,r.yg)("code",{parentName:"pre",className:"language-python"},"from flask_appbuilder.security.manager import AUTH_OAUTH\n\n# Set the authentication type to OAuth\nAUTH_TYPE = AUTH_OAUTH\n\nOAUTH_PROVIDERS = [\n    {   'name':'egaSSO',\n        'token_key':'access_token', # Name of the token in the response of access_token_url\n        'icon':'fa-address-card',   # Icon for the provider\n        'remote_app': {\n            'client_id':'myClientId',  # Client Id (Identify Superset application)\n            'client_secret':'MySecret', # Secret for this Client Id (Identify Superset application)\n            'client_kwargs':{\n                'scope': 'read'               # Scope for the Authorization\n            },\n            'access_token_method':'POST',    # HTTP Method to call access_token_url\n            'access_token_params':{        # Additional parameters for calls to access_token_url\n                'client_id':'myClientId'\n            },\n            'jwks_uri':'https://myAuthorizationServe/adfs/discovery/keys', # may be required to generate token\n            'access_token_headers':{    # Additional headers for calls to access_token_url\n                'Authorization': 'Basic Base64EncodedClientIdAndSecret'\n            },\n            'api_base_url':'https://myAuthorizationServer/oauth2AuthorizationServer/',\n            'access_token_url':'https://myAuthorizationServer/oauth2AuthorizationServer/token',\n            'authorize_url':'https://myAuthorizationServer/oauth2AuthorizationServer/authorize'\n        }\n    }\n]\n\n# Will allow user self registration, allowing to create Flask users from Authorized User\nAUTH_USER_REGISTRATION = True\n\n# The default user self registration role\nAUTH_USER_REGISTRATION_ROLE = \"Public\"\n")),(0,r.yg)("p",null,"Then, create a ",(0,r.yg)("inlineCode",{parentName:"p"},"CustomSsoSecurityManager")," that extends ",(0,r.yg)("inlineCode",{parentName:"p"},"SupersetSecurityManager")," and overrides\n",(0,r.yg)("inlineCode",{parentName:"p"},"oauth_user_info"),":"),(0,r.yg)("pre",null,(0,r.yg)("code",{parentName:"pre",className:"language-python"},"import logging\nfrom superset.security import SupersetSecurityManager\n\nclass CustomSsoSecurityManager(SupersetSecurityManager):\n\n    def oauth_user_info(self, provider, response=None):\n        logging.debug(\"Oauth2 provider: {0}.\".format(provider))\n        if provider == 'egaSSO':\n            # As example, this line request a GET to base_url + '/' + userDetails with Bearer  Authentication,\n    # and expects that authorization server checks the token, and response with user details\n            me = self.appbuilder.sm.oauth_remotes[provider].get('userDetails').data\n            logging.debug(\"user_data: {0}\".format(me))\n            return { 'name' : me['name'], 'email' : me['email'], 'id' : me['user_name'], 'username' : me['user_name'], 'first_name':'', 'last_name':''}\n    ...\n")),(0,r.yg)("p",null,"This file must be located at the same directory than ",(0,r.yg)("inlineCode",{parentName:"p"},"superset_config.py")," with the name\n",(0,r.yg)("inlineCode",{parentName:"p"},"custom_sso_security_manager.py"),". Finally, add the following 2 lines to ",(0,r.yg)("inlineCode",{parentName:"p"},"superset_config.py"),":"),(0,r.yg)("pre",null,(0,r.yg)("code",{parentName:"pre"},"from custom_sso_security_manager import CustomSsoSecurityManager\nCUSTOM_SECURITY_MANAGER = CustomSsoSecurityManager\n")),(0,r.yg)("p",null,(0,r.yg)("strong",{parentName:"p"},"Notes")),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},(0,r.yg)("p",{parentName:"li"},"The redirect URL will be ",(0,r.yg)("inlineCode",{parentName:"p"},"https://<superset-webserver>/oauth-authorized/<provider-name>"),"\nWhen configuring an OAuth2 authorization provider if needed. For instance, the redirect URL will\nbe ",(0,r.yg)("inlineCode",{parentName:"p"},"https://<superset-webserver>/oauth-authorized/egaSSO")," for the above configuration.")),(0,r.yg)("li",{parentName:"ul"},(0,r.yg)("p",{parentName:"li"},"If an OAuth2 authorization server supports OpenID Connect 1.0, you could configure its configuration\ndocument URL only without providing ",(0,r.yg)("inlineCode",{parentName:"p"},"api_base_url"),", ",(0,r.yg)("inlineCode",{parentName:"p"},"access_token_url"),", ",(0,r.yg)("inlineCode",{parentName:"p"},"authorize_url")," and other\nrequired options like user info endpoint, jwks uri etc. For instance:"),(0,r.yg)("pre",{parentName:"li"},(0,r.yg)("code",{parentName:"pre",className:"language-python"},"OAUTH_PROVIDERS = [\n  {   'name':'egaSSO',\n      'token_key':'access_token', # Name of the token in the response of access_token_url\n      'icon':'fa-address-card',   # Icon for the provider\n      'remote_app': {\n          'client_id':'myClientId',  # Client Id (Identify Superset application)\n          'client_secret':'MySecret', # Secret for this Client Id (Identify Superset application)\n          'server_metadata_url': 'https://myAuthorizationServer/.well-known/openid-configuration'\n      }\n  }\n]\n")))),(0,r.yg)("h3",{id:"ldap-authentication"},"LDAP Authentication"),(0,r.yg)("p",null,"FAB supports authenticating user credentials against an LDAP server.\nTo use LDAP you must install the ",(0,r.yg)("a",{parentName:"p",href:"https://www.python-ldap.org/en/latest/installing.html"},"python-ldap")," package.\nSee ",(0,r.yg)("a",{parentName:"p",href:"https://flask-appbuilder.readthedocs.io/en/latest/security.html#authentication-ldap"},"FAB's LDAP documentation"),"\nfor details."),(0,r.yg)("h3",{id:"mapping-ldap-or-oauth-groups-to-superset-roles"},"Mapping LDAP or OAUTH groups to Superset roles"),(0,r.yg)("p",null,"AUTH_ROLES_MAPPING in Flask-AppBuilder is a dictionary that maps from LDAP/OAUTH group names to FAB roles.\nIt is used to assign roles to users who authenticate using LDAP or OAuth."),(0,r.yg)("h4",{id:"mapping-oauth-groups-to-superset-roles"},"Mapping OAUTH groups to Superset roles"),(0,r.yg)("p",null,'The following AUTH_ROLES_MAPPING dictionary would map the OAUTH group "superset_users" to the Superset roles "Gamma" as well as "Alpha", and the OAUTH group "superset_admins" to the Superset role "Admin".'),(0,r.yg)("p",null,'AUTH_ROLES_MAPPING = {\n"superset_users": ','["Gamma","Alpha"]',',\n"superset_admins": ','["Admin"]',",\n}"),(0,r.yg)("h4",{id:"mapping-ldap-groups-to-superset-roles"},"Mapping LDAP groups to Superset roles"),(0,r.yg)("p",null,'The following AUTH_ROLES_MAPPING dictionary would map the LDAP DN "cn=superset_users,ou=groups,dc=example,dc=com" to the Superset roles "Gamma" as well as "Alpha", and the LDAP DN "cn=superset_admins,ou=groups,dc=example,dc=com" to the Superset role "Admin".'),(0,r.yg)("p",null,'AUTH_ROLES_MAPPING = {\n"cn=superset_users,ou=groups,dc=example,dc=com": ','["Gamma","Alpha"]',',\n"cn=superset_admins,ou=groups,dc=example,dc=com": ','["Admin"]',",\n}"),(0,r.yg)("p",null,"Note: This requires AUTH_LDAP_SEARCH to be set. For more details, Please refer (FAB Security documentation)","[https://flask-appbuilder.readthedocs.io/en/latest/security.html]","."),(0,r.yg)("h4",{id:"syncing-roles-at-login"},"Syncing roles at login"),(0,r.yg)("p",null,"You can also use the AUTH_ROLES_SYNC_AT_LOGIN configuration variable to control how often Flask-AppBuilder syncs the user's roles with the LDAP/OAUTH groups. If AUTH_ROLES_SYNC_AT_LOGIN is set to True, Flask-AppBuilder will sync the user's roles each time they log in. If AUTH_ROLES_SYNC_AT_LOGIN is set to False, Flask-AppBuilder will only sync the user's roles when they first register."),(0,r.yg)("h3",{id:"flask-app-configuration-hook"},"Flask app Configuration Hook"),(0,r.yg)("p",null,(0,r.yg)("inlineCode",{parentName:"p"},"FLASK_APP_MUTATOR")," is a configuration function that can be provided in your environment, receives\nthe app object and can alter it in any way. For example, add ",(0,r.yg)("inlineCode",{parentName:"p"},"FLASK_APP_MUTATOR")," into your\n",(0,r.yg)("inlineCode",{parentName:"p"},"superset_config.py")," to setup session cookie expiration time to 24 hours:"),(0,r.yg)("pre",null,(0,r.yg)("code",{parentName:"pre",className:"language-python"},"from flask import session\nfrom flask import Flask\n\n\ndef make_session_permanent():\n    '''\n    Enable maxAge for the cookie 'session'\n    '''\n    session.permanent = True\n\n# Set up max age of session to 24 hours\nPERMANENT_SESSION_LIFETIME = timedelta(hours=24)\ndef FLASK_APP_MUTATOR(app: Flask) -> None:\n    app.before_request_funcs.setdefault(None, []).append(make_session_permanent)\n")),(0,r.yg)("h3",{id:"feature-flags"},"Feature Flags"),(0,r.yg)("p",null,"To support a diverse set of users, Superset has some features that are not enabled by default. For\nexample, some users have stronger security restrictions, while some others may not. So Superset\nallow users to enable or disable some features by config. For feature owners, you can add optional\nfunctionalities in Superset, but will be only affected by a subset of users."),(0,r.yg)("p",null,"You can enable or disable features with flag from ",(0,r.yg)("inlineCode",{parentName:"p"},"superset_config.py"),":"),(0,r.yg)("pre",null,(0,r.yg)("code",{parentName:"pre",className:"language-python"},"FEATURE_FLAGS = {\n    'PRESTO_EXPAND_DATA': False,\n}\n")),(0,r.yg)("p",null,"A current list of feature flags can be found in ",(0,r.yg)("a",{parentName:"p",href:"https://github.com/apache/superset/blob/master/RESOURCES/FEATURE_FLAGS.md"},"RESOURCES/FEATURE_FLAGS.md"),"."))}c.isMDXComponent=!0}}]);
\ No newline at end of file
+"use strict";(self.webpackChunkdocs_v_2=self.webpackChunkdocs_v_2||[]).push([[6585],{15680:(e,n,t)=>{t.d(n,{xA:()=>u,yg:()=>y});var a=t(96540);function r(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function o(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}return t}function i(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?o(Object(t),!0).forEach((function(n){r(e,n,t[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):o(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}))}return e}function s(e,n){if(null==e)return{};var t,a,r=function(e,n){if(null==e)return{};var t,a,r={},o=Object.keys(e);for(a=0;a<o.length;a++)t=o[a],n.indexOf(t)>=0||(r[t]=e[t]);return r}(e,n);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)t=o[a],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(r[t]=e[t])}return r}var l=a.createContext({}),p=function(e){var n=a.useContext(l),t=n;return e&&(t="function"==typeof e?e(n):i(i({},n),e)),t},u=function(e){var n=p(e.components);return a.createElement(l.Provider,{value:n},e.children)},g="mdxType",d={inlineCode:"code",wrapper:function(e){var n=e.children;return a.createElement(a.Fragment,{},n)}},c=a.forwardRef((function(e,n){var t=e.components,r=e.mdxType,o=e.originalType,l=e.parentName,u=s(e,["components","mdxType","originalType","parentName"]),g=p(t),c=r,y=g["".concat(l,".").concat(c)]||g[c]||d[c]||o;return t?a.createElement(y,i(i({ref:n},u),{},{components:t})):a.createElement(y,i({ref:n},u))}));function y(e,n){var t=arguments,r=n&&n.mdxType;if("string"==typeof e||r){var o=t.length,i=new Array(o);i[0]=c;var s={};for(var l in n)hasOwnProperty.call(n,l)&&(s[l]=n[l]);s.originalType=e,s[g]="string"==typeof e?e:r,i[1]=s;for(var p=2;p<o;p++)i[p]=t[p];return a.createElement.apply(null,i)}return a.createElement.apply(null,t)}c.displayName="MDXCreateElement"},10184:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>i,default:()=>d,frontMatter:()=>o,metadata:()=>s,toc:()=>p});var a=t(58168),r=(t(96540),t(15680));const o={title:"Configuring Superset",hide_title:!0,sidebar_position:4,version:1},i=void 0,s={unversionedId:"installation/configuring-superset",id:"installation/configuring-superset",title:"Configuring Superset",description:"Configuring Superset",source:"@site/docs/installation/configuring-superset.mdx",sourceDirName:"installation",slug:"/installation/configuring-superset",permalink:"/docs/installation/configuring-superset",draft:!1,editUrl:"https://github.com/apache/superset/edit/master/docs/docs/installation/configuring-superset.mdx",tags:[],version:"current",sidebarPosition:4,frontMatter:{title:"Configuring Superset",hide_title:!0,sidebar_position:4,version:1},sidebar:"tutorialSidebar",previous:{title:"Installing Locally Using Docker Compose",permalink:"/docs/installation/installing-superset-using-docker-compose"},next:{title:"Additional Networking Settings",permalink:"/docs/installation/networking-settings"}},l={},p=[{value:"Configuring Superset",id:"configuring-superset",level:2},{value:"Configuration",id:"configuration",level:3},{value:"Specifying a SECRET_KEY",id:"specifying-a-secret_key",level:3},{value:"Adding an initial SECRET_KEY",id:"adding-an-initial-secret_key",level:4},{value:"Rotating to a newer SECRET_KEY",id:"rotating-to-a-newer-secret_key",level:4},{value:"Using a production metastore",id:"using-a-production-metastore",level:3},{value:"Running on a WSGI HTTP Server",id:"running-on-a-wsgi-http-server",level:3},{value:"HTTPS Configuration",id:"https-configuration",level:3},{value:"Configuration Behind a Load Balancer",id:"configuration-behind-a-load-balancer",level:3},{value:"Custom OAuth2 Configuration",id:"custom-oauth2-configuration",level:3},{value:"LDAP Authentication",id:"ldap-authentication",level:3},{value:"Mapping LDAP or OAUTH groups to Superset roles",id:"mapping-ldap-or-oauth-groups-to-superset-roles",level:3},{value:"Mapping OAUTH groups to Superset roles",id:"mapping-oauth-groups-to-superset-roles",level:4},{value:"Mapping LDAP groups to Superset roles",id:"mapping-ldap-groups-to-superset-roles",level:4},{value:"Syncing roles at login",id:"syncing-roles-at-login",level:4},{value:"Flask app Configuration Hook",id:"flask-app-configuration-hook",level:3},{value:"Feature Flags",id:"feature-flags",level:3}],u={toc:p},g="wrapper";function d(e){let{components:n,...t}=e;return(0,r.yg)(g,(0,a.A)({},u,t,{components:n,mdxType:"MDXLayout"}),(0,r.yg)("h2",{id:"configuring-superset"},"Configuring Superset"),(0,r.yg)("h3",{id:"configuration"},"Configuration"),(0,r.yg)("p",null,"To configure your application, you need to create a file ",(0,r.yg)("inlineCode",{parentName:"p"},"superset_config.py"),". Add this file to your"),(0,r.yg)("p",null,(0,r.yg)("inlineCode",{parentName:"p"},"PYTHONPATH")," or create an environment variable ",(0,r.yg)("inlineCode",{parentName:"p"},"SUPERSET_CONFIG_PATH")," specifying the full path of the ",(0,r.yg)("inlineCode",{parentName:"p"},"superset_config.py"),"."),(0,r.yg)("p",null,"For example, if deploying on Superset directly on a Linux-based system where your ",(0,r.yg)("inlineCode",{parentName:"p"},"superset_config.py")," is under ",(0,r.yg)("inlineCode",{parentName:"p"},"/app")," directory, you can run:"),(0,r.yg)("pre",null,(0,r.yg)("code",{parentName:"pre",className:"language-bash"},"export SUPERSET_CONFIG_PATH=/app/superset_config.py\n")),(0,r.yg)("p",null,"If you are using your own custom Dockerfile with official Superset image as base image, then you can add your overrides as shown below:"),(0,r.yg)("pre",null,(0,r.yg)("code",{parentName:"pre",className:"language-bash"},"COPY --chown=superset superset_config.py /app/\nENV SUPERSET_CONFIG_PATH /app/superset_config.py\n")),(0,r.yg)("p",null,"Docker compose deployments handle application configuration differently. See ",(0,r.yg)("a",{parentName:"p",href:"https://github.com/apache/superset/tree/master/docker#readme"},"https://github.com/apache/superset/tree/master/docker#readme")," for details."),(0,r.yg)("p",null,"The following is an example of just a few of the parameters you can set in your ",(0,r.yg)("inlineCode",{parentName:"p"},"superset_config.py")," file:"),(0,r.yg)("pre",null,(0,r.yg)("code",{parentName:"pre"},"# Superset specific config\nROW_LIMIT = 5000\n\n# Flask App Builder configuration\n# Your App secret key will be used for securely signing the session cookie\n# and encrypting sensitive information on the database\n# Make sure you are changing this key for your deployment with a strong key.\n# Alternatively you can set it with `SUPERSET_SECRET_KEY` environment variable.\n# You MUST set this for production environments or the server will refuse\n# to start and you will see an error in the logs accordingly.\nSECRET_KEY = 'YOUR_OWN_RANDOM_GENERATED_SECRET_KEY'\n\n# The SQLAlchemy connection string to your database backend\n# This connection defines the path to the database that stores your\n# superset metadata (slices, connections, tables, dashboards, ...).\n# Note that the connection information to connect to the datasources\n# you want to explore are managed directly in the web UI\n# The check_same_thread=false property ensures the sqlite client does not attempt\n# to enforce single-threaded access, which may be problematic in some edge cases\nSQLALCHEMY_DATABASE_URI = 'sqlite:////path/to/superset.db?check_same_thread=false'\n\n# Flask-WTF flag for CSRF\nWTF_CSRF_ENABLED = True\n# Add endpoints that need to be exempt from CSRF protection\nWTF_CSRF_EXEMPT_LIST = []\n# A CSRF token that expires in 1 year\nWTF_CSRF_TIME_LIMIT = 60 * 60 * 24 * 365\n\n# Set this API key to enable Mapbox visualizations\nMAPBOX_API_KEY = ''\n")),(0,r.yg)("p",null,"All the parameters and default values defined in\n",(0,r.yg)("a",{parentName:"p",href:"https://github.com/apache/superset/blob/master/superset/config.py"},"https://github.com/apache/superset/blob/master/superset/config.py"),"\ncan be altered in your local ",(0,r.yg)("inlineCode",{parentName:"p"},"superset_config.py"),". Administrators will want to read through the file\nto understand what can be configured locally as well as the default values in place."),(0,r.yg)("p",null,"Since ",(0,r.yg)("inlineCode",{parentName:"p"},"superset_config.py")," acts as a Flask configuration module, it can be used to alter the\nsettings Flask itself, as well as Flask extensions like ",(0,r.yg)("inlineCode",{parentName:"p"},"flask-wtf"),", ",(0,r.yg)("inlineCode",{parentName:"p"},"flask-caching"),", ",(0,r.yg)("inlineCode",{parentName:"p"},"flask-migrate"),",\nand ",(0,r.yg)("inlineCode",{parentName:"p"},"flask-appbuilder"),". Flask App Builder, the web framework used by Superset, offers many\nconfiguration settings. Please consult the\n",(0,r.yg)("a",{parentName:"p",href:"https://flask-appbuilder.readthedocs.org/en/latest/config.html"},"Flask App Builder Documentation"),"\nfor more information on how to configure it."),(0,r.yg)("p",null,"Make sure to change:"),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},(0,r.yg)("inlineCode",{parentName:"li"},"SQLALCHEMY_DATABASE_URI"),": by default it is stored at ~/.superset/superset.db"),(0,r.yg)("li",{parentName:"ul"},(0,r.yg)("inlineCode",{parentName:"li"},"SECRET_KEY"),": to a long random string")),(0,r.yg)("p",null,"If you need to exempt endpoints from CSRF (e.g. if you are running a custom auth postback endpoint),\nyou can add the endpoints to ",(0,r.yg)("inlineCode",{parentName:"p"},"WTF_CSRF_EXEMPT_LIST"),":"),(0,r.yg)("pre",null,(0,r.yg)("code",{parentName:"pre"},"WTF_CSRF_EXEMPT_LIST = [\u2018\u2019]\n")),(0,r.yg)("h3",{id:"specifying-a-secret_key"},"Specifying a SECRET_KEY"),(0,r.yg)("h4",{id:"adding-an-initial-secret_key"},"Adding an initial SECRET_KEY"),(0,r.yg)("p",null,"Superset requires a user-specified SECRET_KEY to start up. This requirement was ",(0,r.yg)("a",{parentName:"p",href:"https://preset.io/blog/superset-security-update-default-secret_key-vulnerability/"},"added in version 2.1.0 to force secure configurations"),". Add a strong SECRET_KEY to your ",(0,r.yg)("inlineCode",{parentName:"p"},"superset_config.py")," file like:"),(0,r.yg)("pre",null,(0,r.yg)("code",{parentName:"pre",className:"language-python"},"SECRET_KEY = 'YOUR_OWN_RANDOM_GENERATED_SECRET_KEY'\n")),(0,r.yg)("p",null,"You can generate a strong secure key with ",(0,r.yg)("inlineCode",{parentName:"p"},"openssl rand -base64 42"),"."),(0,r.yg)("h4",{id:"rotating-to-a-newer-secret_key"},"Rotating to a newer SECRET_KEY"),(0,r.yg)("p",null,"If you wish to change your existing SECRET_KEY, add the existing SECRET_KEY to your ",(0,r.yg)("inlineCode",{parentName:"p"},"superset_config.py")," file as\n",(0,r.yg)("inlineCode",{parentName:"p"},"PREVIOUS_SECRET_KEY = "),"and provide your new key as ",(0,r.yg)("inlineCode",{parentName:"p"},"SECRET_KEY ="),". You can find your current SECRET_KEY with these\ncommands - if running Superset with Docker, execute from within the Superset application container:"),(0,r.yg)("pre",null,(0,r.yg)("code",{parentName:"pre",className:"language-python"},'superset shell\nfrom flask import current_app; print(current_app.config["SECRET_KEY"])\n')),(0,r.yg)("p",null,"Save your ",(0,r.yg)("inlineCode",{parentName:"p"},"superset_config.py")," with these values and then run ",(0,r.yg)("inlineCode",{parentName:"p"},"superset re-encrypt-secrets"),"."),(0,r.yg)("h3",{id:"using-a-production-metastore"},"Using a production metastore"),(0,r.yg)("p",null,"By default, Superset is configured to use SQLite, which is a simple and fast way to get started\n(without requiring any installation). However, for production environments,\nusing SQLite is highly discouraged due to security, scalability, and data integrity reasons.\nIt's important to use only the supported database engines and consider using a different\ndatabase engine on a separate host or container."),(0,r.yg)("p",null,"Superset supports the following database engines/versions:"),(0,r.yg)("table",null,(0,r.yg)("thead",{parentName:"table"},(0,r.yg)("tr",{parentName:"thead"},(0,r.yg)("th",{parentName:"tr",align:null},"Database Engine"),(0,r.yg)("th",{parentName:"tr",align:null},"Supported Versions"))),(0,r.yg)("tbody",{parentName:"table"},(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("a",{parentName:"td",href:"https://www.postgresql.org/"},"PostgreSQL")),(0,r.yg)("td",{parentName:"tr",align:null},"10.X, 11.X, 12.X, 13.X, 14.X, 15.X")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("a",{parentName:"td",href:"https://www.mysql.com/"},"MySQL")),(0,r.yg)("td",{parentName:"tr",align:null},"5.7, 8.X")))),(0,r.yg)("p",null,"Use the following database drivers and connection strings:"),(0,r.yg)("table",null,(0,r.yg)("thead",{parentName:"table"},(0,r.yg)("tr",{parentName:"thead"},(0,r.yg)("th",{parentName:"tr",align:null},"Database"),(0,r.yg)("th",{parentName:"tr",align:null},"PyPI package"),(0,r.yg)("th",{parentName:"tr",align:null},"Connection String"))),(0,r.yg)("tbody",{parentName:"table"},(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("a",{parentName:"td",href:"https://www.postgresql.org/"},"PostgreSQL")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"pip install psycopg2")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"postgresql://<UserName>:<DBPassword>@<Database Host>/<Database Name>"))),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("a",{parentName:"td",href:"https://www.mysql.com/"},"MySQL")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"pip install mysqlclient")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"mysql://<UserName>:<DBPassword>@<Database Host>/<Database Name>"))))),(0,r.yg)("p",null,"To configure Superset metastore set ",(0,r.yg)("inlineCode",{parentName:"p"},"SQLALCHEMY_DATABASE_URI")," config key on ",(0,r.yg)("inlineCode",{parentName:"p"},"superset_config"),"\nto the appropriate connection string."),(0,r.yg)("h3",{id:"running-on-a-wsgi-http-server"},"Running on a WSGI HTTP Server"),(0,r.yg)("p",null,"While you can run Superset on NGINX or Apache, we recommend using Gunicorn in async mode. This\nenables impressive concurrency even and is fairly easy to install and configure. Please refer to the\ndocumentation of your preferred technology to set up this Flask WSGI application in a way that works\nwell in your environment. Here\u2019s an async setup known to work well in production:"),(0,r.yg)("pre",null,(0,r.yg)("code",{parentName:"pre"},'      -w 10 \\\n      -k gevent \\\n      --worker-connections 1000 \\\n      --timeout 120 \\\n      -b  0.0.0.0:6666 \\\n      --limit-request-line 0 \\\n      --limit-request-field_size 0 \\\n      --statsd-host localhost:8125 \\\n      "superset.app:create_app()"\n')),(0,r.yg)("p",null,"Refer to the ",(0,r.yg)("a",{parentName:"p",href:"https://docs.gunicorn.org/en/stable/design.html"},"Gunicorn documentation")," for more\ninformation. ",(0,r.yg)("em",{parentName:"p"},"Note that the development web server (",(0,r.yg)("inlineCode",{parentName:"em"},"superset run")," or ",(0,r.yg)("inlineCode",{parentName:"em"},"flask run"),") is not intended\nfor production use.")),(0,r.yg)("p",null,"If you're not using Gunicorn, you may want to disable the use of ",(0,r.yg)("inlineCode",{parentName:"p"},"flask-compress")," by setting\n",(0,r.yg)("inlineCode",{parentName:"p"},"COMPRESS_REGISTER = False")," in your ",(0,r.yg)("inlineCode",{parentName:"p"},"superset_config.py"),"."),(0,r.yg)("p",null,"Currently, Google BigQuery python sdk is not compatible with ",(0,r.yg)("inlineCode",{parentName:"p"},"gevent"),", due to some dynamic monkeypatching on python core library by ",(0,r.yg)("inlineCode",{parentName:"p"},"gevent"),".\nSo, when you use ",(0,r.yg)("inlineCode",{parentName:"p"},"BigQuery")," datasource on Superset, you have to use ",(0,r.yg)("inlineCode",{parentName:"p"},"gunicorn")," worker type except ",(0,r.yg)("inlineCode",{parentName:"p"},"gevent"),"."),(0,r.yg)("h3",{id:"https-configuration"},"HTTPS Configuration"),(0,r.yg)("p",null,"You can configure HTTPS upstream via a load balancer or a reverse proxy (such as nginx) and do SSL/TLS Offloading before traffic reaches the Superset application. In this setup, local traffic from a Celery worker taking a snapshot of a chart for Alerts & Reports can access Superset at a ",(0,r.yg)("inlineCode",{parentName:"p"},"http://")," URL, from behind the ingress point.\nYou can also configure ",(0,r.yg)("a",{parentName:"p",href:"https://docs.gunicorn.org/en/stable/settings.html#ssl"},"SSL in Gunicorn")," (the Python webserver) if you are using an official Superset Docker image."),(0,r.yg)("h3",{id:"configuration-behind-a-load-balancer"},"Configuration Behind a Load Balancer"),(0,r.yg)("p",null,"If you are running superset behind a load balancer or reverse proxy (e.g. NGINX or ELB on AWS), you\nmay need to utilize a healthcheck endpoint so that your load balancer knows if your superset\ninstance is running. This is provided at ",(0,r.yg)("inlineCode",{parentName:"p"},"/health")," which will return a 200 response containing \u201cOK\u201d\nif the webserver is running."),(0,r.yg)("p",null,"If the load balancer is inserting ",(0,r.yg)("inlineCode",{parentName:"p"},"X-Forwarded-For/X-Forwarded-Proto")," headers, you should set\n",(0,r.yg)("inlineCode",{parentName:"p"},"ENABLE_PROXY_FIX = True")," in the superset config file (",(0,r.yg)("inlineCode",{parentName:"p"},"superset_config.py"),") to extract and use the\nheaders."),(0,r.yg)("p",null,"In case the reverse proxy is used for providing SSL encryption, an explicit definition of the\n",(0,r.yg)("inlineCode",{parentName:"p"},"X-Forwarded-Proto")," may be required. For the Apache webserver this can be set as follows:"),(0,r.yg)("pre",null,(0,r.yg)("code",{parentName:"pre"},'RequestHeader set X-Forwarded-Proto "https"\n')),(0,r.yg)("h3",{id:"custom-oauth2-configuration"},"Custom OAuth2 Configuration"),(0,r.yg)("p",null,"Superset is built on Flask-AppBuilder (FAB), which supports many providers out of the box\n(GitHub, Twitter, LinkedIn, Google, Azure, etc). Beyond those, Superset can be configured to connect\nwith other OAuth2 Authorization Server implementations that support \u201ccode\u201d authorization."),(0,r.yg)("p",null,"Make sure the pip package ",(0,r.yg)("a",{parentName:"p",href:"https://authlib.org/"},(0,r.yg)("inlineCode",{parentName:"a"},"Authlib"))," is installed on the webserver."),(0,r.yg)("p",null,"First, configure authorization in Superset ",(0,r.yg)("inlineCode",{parentName:"p"},"superset_config.py"),"."),(0,r.yg)("pre",null,(0,r.yg)("code",{parentName:"pre",className:"language-python"},"from flask_appbuilder.security.manager import AUTH_OAUTH\n\n# Set the authentication type to OAuth\nAUTH_TYPE = AUTH_OAUTH\n\nOAUTH_PROVIDERS = [\n    {   'name':'egaSSO',\n        'token_key':'access_token', # Name of the token in the response of access_token_url\n        'icon':'fa-address-card',   # Icon for the provider\n        'remote_app': {\n            'client_id':'myClientId',  # Client Id (Identify Superset application)\n            'client_secret':'MySecret', # Secret for this Client Id (Identify Superset application)\n            'client_kwargs':{\n                'scope': 'read'               # Scope for the Authorization\n            },\n            'access_token_method':'POST',    # HTTP Method to call access_token_url\n            'access_token_params':{        # Additional parameters for calls to access_token_url\n                'client_id':'myClientId'\n            },\n            'jwks_uri':'https://myAuthorizationServe/adfs/discovery/keys', # may be required to generate token\n            'access_token_headers':{    # Additional headers for calls to access_token_url\n                'Authorization': 'Basic Base64EncodedClientIdAndSecret'\n            },\n            'api_base_url':'https://myAuthorizationServer/oauth2AuthorizationServer/',\n            'access_token_url':'https://myAuthorizationServer/oauth2AuthorizationServer/token',\n            'authorize_url':'https://myAuthorizationServer/oauth2AuthorizationServer/authorize'\n        }\n    }\n]\n\n# Will allow user self registration, allowing to create Flask users from Authorized User\nAUTH_USER_REGISTRATION = True\n\n# The default user self registration role\nAUTH_USER_REGISTRATION_ROLE = \"Public\"\n")),(0,r.yg)("p",null,"Then, create a ",(0,r.yg)("inlineCode",{parentName:"p"},"CustomSsoSecurityManager")," that extends ",(0,r.yg)("inlineCode",{parentName:"p"},"SupersetSecurityManager")," and overrides\n",(0,r.yg)("inlineCode",{parentName:"p"},"oauth_user_info"),":"),(0,r.yg)("pre",null,(0,r.yg)("code",{parentName:"pre",className:"language-python"},"import logging\nfrom superset.security import SupersetSecurityManager\n\nclass CustomSsoSecurityManager(SupersetSecurityManager):\n\n    def oauth_user_info(self, provider, response=None):\n        logging.debug(\"Oauth2 provider: {0}.\".format(provider))\n        if provider == 'egaSSO':\n            # As example, this line request a GET to base_url + '/' + userDetails with Bearer  Authentication,\n    # and expects that authorization server checks the token, and response with user details\n            me = self.appbuilder.sm.oauth_remotes[provider].get('userDetails').data\n            logging.debug(\"user_data: {0}\".format(me))\n            return { 'name' : me['name'], 'email' : me['email'], 'id' : me['user_name'], 'username' : me['user_name'], 'first_name':'', 'last_name':''}\n    ...\n")),(0,r.yg)("p",null,"This file must be located at the same directory than ",(0,r.yg)("inlineCode",{parentName:"p"},"superset_config.py")," with the name\n",(0,r.yg)("inlineCode",{parentName:"p"},"custom_sso_security_manager.py"),". Finally, add the following 2 lines to ",(0,r.yg)("inlineCode",{parentName:"p"},"superset_config.py"),":"),(0,r.yg)("pre",null,(0,r.yg)("code",{parentName:"pre"},"from custom_sso_security_manager import CustomSsoSecurityManager\nCUSTOM_SECURITY_MANAGER = CustomSsoSecurityManager\n")),(0,r.yg)("p",null,(0,r.yg)("strong",{parentName:"p"},"Notes")),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},(0,r.yg)("p",{parentName:"li"},"The redirect URL will be ",(0,r.yg)("inlineCode",{parentName:"p"},"https://<superset-webserver>/oauth-authorized/<provider-name>"),"\nWhen configuring an OAuth2 authorization provider if needed. For instance, the redirect URL will\nbe ",(0,r.yg)("inlineCode",{parentName:"p"},"https://<superset-webserver>/oauth-authorized/egaSSO")," for the above configuration.")),(0,r.yg)("li",{parentName:"ul"},(0,r.yg)("p",{parentName:"li"},"If an OAuth2 authorization server supports OpenID Connect 1.0, you could configure its configuration\ndocument URL only without providing ",(0,r.yg)("inlineCode",{parentName:"p"},"api_base_url"),", ",(0,r.yg)("inlineCode",{parentName:"p"},"access_token_url"),", ",(0,r.yg)("inlineCode",{parentName:"p"},"authorize_url")," and other\nrequired options like user info endpoint, jwks uri etc. For instance:"),(0,r.yg)("pre",{parentName:"li"},(0,r.yg)("code",{parentName:"pre",className:"language-python"},"OAUTH_PROVIDERS = [\n  {   'name':'egaSSO',\n      'token_key':'access_token', # Name of the token in the response of access_token_url\n      'icon':'fa-address-card',   # Icon for the provider\n      'remote_app': {\n          'client_id':'myClientId',  # Client Id (Identify Superset application)\n          'client_secret':'MySecret', # Secret for this Client Id (Identify Superset application)\n          'server_metadata_url': 'https://myAuthorizationServer/.well-known/openid-configuration'\n      }\n  }\n]\n")))),(0,r.yg)("h3",{id:"ldap-authentication"},"LDAP Authentication"),(0,r.yg)("p",null,"FAB supports authenticating user credentials against an LDAP server.\nTo use LDAP you must install the ",(0,r.yg)("a",{parentName:"p",href:"https://www.python-ldap.org/en/latest/installing.html"},"python-ldap")," package.\nSee ",(0,r.yg)("a",{parentName:"p",href:"https://flask-appbuilder.readthedocs.io/en/latest/security.html#authentication-ldap"},"FAB's LDAP documentation"),"\nfor details."),(0,r.yg)("h3",{id:"mapping-ldap-or-oauth-groups-to-superset-roles"},"Mapping LDAP or OAUTH groups to Superset roles"),(0,r.yg)("p",null,"AUTH_ROLES_MAPPING in Flask-AppBuilder is a dictionary that maps from LDAP/OAUTH group names to FAB roles.\nIt is used to assign roles to users who authenticate using LDAP or OAuth."),(0,r.yg)("h4",{id:"mapping-oauth-groups-to-superset-roles"},"Mapping OAUTH groups to Superset roles"),(0,r.yg)("p",null,"The following ",(0,r.yg)("inlineCode",{parentName:"p"},"AUTH_ROLES_MAPPING"),' dictionary would map the OAUTH group "superset_users" to the Superset roles "Gamma" as well as "Alpha", and the OAUTH group "superset_admins" to the Superset role "Admin".'),(0,r.yg)("pre",null,(0,r.yg)("code",{parentName:"pre",className:"language-python"},'AUTH_ROLES_MAPPING = {\n"superset_users": ["Gamma","Alpha"],\n"superset_admins": ["Admin"],\n}\n')),(0,r.yg)("h4",{id:"mapping-ldap-groups-to-superset-roles"},"Mapping LDAP groups to Superset roles"),(0,r.yg)("p",null,"The following ",(0,r.yg)("inlineCode",{parentName:"p"},"AUTH_ROLES_MAPPING"),' dictionary would map the LDAP DN "cn=superset_users,ou=groups,dc=example,dc=com" to the Superset roles "Gamma" as well as "Alpha", and the LDAP DN "cn=superset_admins,ou=groups,dc=example,dc=com" to the Superset role "Admin".'),(0,r.yg)("pre",null,(0,r.yg)("code",{parentName:"pre",className:"language-python"},'AUTH_ROLES_MAPPING = {\n"cn=superset_users,ou=groups,dc=example,dc=com": ["Gamma","Alpha"],\n"cn=superset_admins,ou=groups,dc=example,dc=com": ["Admin"],\n}\n')),(0,r.yg)("p",null,"Note: This requires ",(0,r.yg)("inlineCode",{parentName:"p"},"AUTH_LDAP_SEARCH")," to be set. For more details, please see the ",(0,r.yg)("a",{parentName:"p",href:"https://flask-appbuilder.readthedocs.io/en/latest/security.html"},"FAB Security documentation"),"."),(0,r.yg)("h4",{id:"syncing-roles-at-login"},"Syncing roles at login"),(0,r.yg)("p",null,"You can also use the ",(0,r.yg)("inlineCode",{parentName:"p"},"AUTH_ROLES_SYNC_AT_LOGIN")," configuration variable to control how often Flask-AppBuilder syncs the user's roles with the LDAP/OAUTH groups. If ",(0,r.yg)("inlineCode",{parentName:"p"},"AUTH_ROLES_SYNC_AT_LOGIN")," is set to True, Flask-AppBuilder will sync the user's roles each time they log in. If ",(0,r.yg)("inlineCode",{parentName:"p"},"AUTH_ROLES_SYNC_AT_LOGIN")," is set to False, Flask-AppBuilder will only sync the user's roles when they first register."),(0,r.yg)("h3",{id:"flask-app-configuration-hook"},"Flask app Configuration Hook"),(0,r.yg)("p",null,(0,r.yg)("inlineCode",{parentName:"p"},"FLASK_APP_MUTATOR")," is a configuration function that can be provided in your environment, receives\nthe app object and can alter it in any way. For example, add ",(0,r.yg)("inlineCode",{parentName:"p"},"FLASK_APP_MUTATOR")," into your\n",(0,r.yg)("inlineCode",{parentName:"p"},"superset_config.py")," to setup session cookie expiration time to 24 hours:"),(0,r.yg)("pre",null,(0,r.yg)("code",{parentName:"pre",className:"language-python"},"from flask import session\nfrom flask import Flask\n\n\ndef make_session_permanent():\n    '''\n    Enable maxAge for the cookie 'session'\n    '''\n    session.permanent = True\n\n# Set up max age of session to 24 hours\nPERMANENT_SESSION_LIFETIME = timedelta(hours=24)\ndef FLASK_APP_MUTATOR(app: Flask) -> None:\n    app.before_request_funcs.setdefault(None, []).append(make_session_permanent)\n")),(0,r.yg)("h3",{id:"feature-flags"},"Feature Flags"),(0,r.yg)("p",null,"To support a diverse set of users, Superset has some features that are not enabled by default. For\nexample, some users have stronger security restrictions, while some others may not. So Superset\nallow users to enable or disable some features by config. For feature owners, you can add optional\nfunctionalities in Superset, but will be only affected by a subset of users."),(0,r.yg)("p",null,"You can enable or disable features with flag from ",(0,r.yg)("inlineCode",{parentName:"p"},"superset_config.py"),":"),(0,r.yg)("pre",null,(0,r.yg)("code",{parentName:"pre",className:"language-python"},"FEATURE_FLAGS = {\n    'PRESTO_EXPAND_DATA': False,\n}\n")),(0,r.yg)("p",null,"A current list of feature flags can be found in ",(0,r.yg)("a",{parentName:"p",href:"https://github.com/apache/superset/blob/master/RESOURCES/FEATURE_FLAGS.md"},"RESOURCES/FEATURE_FLAGS.md"),"."))}d.isMDXComponent=!0}}]);
\ No newline at end of file
diff --git a/assets/js/runtime~main.77343581.js b/assets/js/runtime~main.eac039ac.js
similarity index 98%
rename from assets/js/runtime~main.77343581.js
rename to assets/js/runtime~main.eac039ac.js
index 317f65a..464b465 100644
--- a/assets/js/runtime~main.77343581.js
+++ b/assets/js/runtime~main.eac039ac.js
@@ -1 +1 @@
-(()=>{"use strict";var e,a,c,f,d,b={},t={};function r(e){var a=t[e];if(void 0!==a)return a.exports;var c=t[e]={id:e,loaded:!1,exports:{}};return b[e].call(c.exports,c,c.exports,r),c.loaded=!0,c.exports}r.m=b,r.c=t,e=[],r.O=(a,c,f,d)=>{if(!c){var b=1/0;for(i=0;i<e.length;i++){c=e[i][0],f=e[i][1],d=e[i][2];for(var t=!0,o=0;o<c.length;o++)(!1&d||b>=d)&&Object.keys(r.O).every((e=>r.O[e](c[o])))?c.splice(o--,1):(t=!1,d<b&&(b=d));if(t){e.splice(i--,1);var n=f();void 0!==n&&(a=n)}}return a}d=d||0;for(var i=e.length;i>0&&e[i-1][2]>d;i--)e[i]=e[i-1];e[i]=[c,f,d]},r.n=e=>{var a=e&&e.__esModule?()=>e.default:()=>e;return r.d(a,{a:a}),a},c=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,r.t=function(e,f){if(1&f&&(e=this(e)),8&f)return e;if("object"==typeof e&&e){if(4&f&&e.__esModule)return e;if(16&f&&"function"==typeof e.then)return e}var d=Object.create(null);r.r(d);var b={};a=a||[null,c({}),c([]),c(c)];for(var t=2&f&&e;"object"==typeof t&&!~a.indexOf(t);t=c(t))Object.getOwnPropertyNames(t).forEach((a=>b[a]=()=>e[a]));return b.default=()=>e,r.d(d,b),d},r.d=(e,a)=>{for(var c in a)r.o(a,c)&&!r.o(e,c)&&Object.defineProperty(e,c,{enumerable:!0,get:a[c]})},r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce(((a,c)=>(r.f[c](e,a),a)),[])),r.u=e=>"assets/js/"+({3:"a9e1a7f6",217:"b92f705c",435:"1c734f75",491:"f5f07875",517:"471df853",757:"31e90f3c",806:"71cf7fe6",921:"5818c28e",1043:"cf6ffe2f",1121:"dc3fdd24",1135:"0a0a6d3c",1217:"6432bc55",1298:"35a5de3c",1346:"f4a6e698",1392:"eb3b0997",1431:"6948bca1",1799:"69a4ab96",1873:"18cf5ace",2138:"1a4e3797",2422:"afef705c",2539:"ce3fa444",2590:"ee5d850a",2664:"f9cc156b",2736:"2c412ea7",2938:"25f17725",3022:"dbb131dd",3029:"640bc8a0",3462:"f75b37f5",3503:"2461ffa2",3590:"904d61ef",3838:"9d6fd8ea",3989:"9791fd42",4105:"cd90435d",4134:"393be207",4274:"0c21af39",4315:"3c835dee",4411:"da60bc8f",4583:"1df93b7f",4667:"496bf018",4867:"e0a8f778",4914:"8660bbc8",5153:"2f1b3cda",5167:"30334fcd",5331:"53bb5fc4",5347:"dd0670d3",5356:"0ae8b3d4",5602:"36ea7a08",5647:"30ec1363",5718:"eb23a929",5747:"88eaec5a",5901:"2bafca50",5929:"e187e321",6061:"1f391b9e",6097:"19682bb8",6161:"d5417e33",6171:"4e664dc4",6231:"bd23e567",6251:"1c42a294",6276:"dc737160",6342:"5e50ba72",6353:"a584ba2a",6421:"0e9953cd",6505:"74876495",6585:"3c585fdb",6647:"b46ab14b",6682:"c296437a",6713:"e7c796a6",6715:"a309f86e",6723:"262418cd",6903:"f8409a7e",7e3:"1ce51947",7025:"fa1a3aa0",7060:"d83b78fc",7144:"67158350",7268:"58160c0b",7642:"600a9360",7943:"3ec2c3f7",7956:"40974919",8083:"9a9c044b",8172:"c1424005",8359:"fe0957ee",8401:"17896441",8581:"935f2afb",8659:"d76e6194",8714:"1be78505",8880:"57b59cd4",9082:"21b4b958",9087:"4cc2c078",9122:"6a90d500",9249:"5ea65e65",9425:"c76f729d",9657:"6edc47f3",9761:"30256b0d",9814:"07f0ce13",9935:"070b53d1",9938:"507542a3",9958:"972382ea"}[e]||e)+"."+{3:"13e3a8af",217:"5d9f89ba",416:"bbfa475a",435:"e7a48716",491:"c7be7c11",517:"dc8822e4",757:"5a79937a",806:"246f8b0c",921:"1e59b5b9",1043:"6673030e",1121:"ecca1a4e",1135:"c0175a9a",1217:"3ad95028",1298:"1c2c6c36",1346:"f3bb9a8c",1392:"8d2b9219",1431:"b799711d",1774:"d317c627",1799:"2c0d3051",1873:"90a3a8f6",2138:"14bcedcd",2185:"30a4a04c",2422:"eecf620f",2539:"9073513e",2590:"c007b05c",2664:"08264843",2736:"1d48e1ad",2938:"1e13bc28",3022:"71f2133e",3029:"8cefa9b4",3126:"29eff39e",3444:"71e4fec8",3462:"f5fce989",3503:"85c3aadb",3590:"f4cfea6d",3838:"49061a6f",3989:"70accff7",4105:"a3341909",4134:"6a02eb3f",4274:"3d60d144",4315:"2348a423",4411:"5261ec1e",4583:"8ad79997",4667:"20af314d",4867:"5c57dbff",4914:"f5aab579",5153:"d68fc09c",5167:"065df1f5",5243:"885ad383",5331:"e601ba32",5347:"484a6c3d",5356:"26ce537a",5390:"92a01867",5602:"493e2986",5647:"b5ed097a",5718:"b8f9b841",5747:"482f5545",5901:"6988e007",5929:"1040a611",6061:"2a35b2f0",6097:"c8c450b0",6161:"f07b5771",6171:"81dae46b",6231:"fb126394",6251:"0c220e44",6276:"cda4920f",6342:"ea185454",6353:"96db4a5c",6421:"1b829fbb",6505:"8c864c3d",6585:"0121dd4f",6647:"cb92d343",6682:"030a3a05",6713:"e4787f62",6715:"08174e78",6723:"bd2b6782",6809:"5e2f8122",6903:"4bb5647b",7e3:"cf61032c",7025:"afbd59cd",7060:"adb72e54",7144:"26869a1a",7268:"4ba6513d",7642:"2845a55b",7943:"7601ce54",7956:"0805416a",8083:"e1d69022",8172:"b2ff519b",8359:"462a9d48",8401:"e356988c",8581:"3ff9ffb0",8659:"8efbb1ed",8714:"39537cb9",8880:"ca79b24b",8913:"4eaba603",9069:"4a18e286",9082:"938de4b3",9087:"4430c374",9122:"f7c28a25",9249:"9be8c834",9425:"e2c67acd",9462:"33d68470",9657:"c6db824e",9761:"627bfffb",9814:"8e108a46",9904:"305f5b5d",9935:"929e3ad7",9938:"7b3c5651",9958:"51631b8e"}[e]+".js",r.miniCssF=e=>{},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r.o=(e,a)=>Object.prototype.hasOwnProperty.call(e,a),f={},d="docs-v-2:",r.l=(e,a,c,b)=>{if(f[e])f[e].push(a);else{var t,o;if(void 0!==c)for(var n=document.getElementsByTagName("script"),i=0;i<n.length;i++){var l=n[i];if(l.getAttribute("src")==e||l.getAttribute("data-webpack")==d+c){t=l;break}}t||(o=!0,(t=document.createElement("script")).charset="utf-8",t.timeout=120,r.nc&&t.setAttribute("nonce",r.nc),t.setAttribute("data-webpack",d+c),t.src=e),f[e]=[a];var u=(a,c)=>{t.onerror=t.onload=null,clearTimeout(s);var d=f[e];if(delete f[e],t.parentNode&&t.parentNode.removeChild(t),d&&d.forEach((e=>e(c))),a)return a(c)},s=setTimeout(u.bind(null,void 0,{type:"timeout",target:t}),12e4);t.onerror=u.bind(null,t.onerror),t.onload=u.bind(null,t.onload),o&&document.head.appendChild(t)}},r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.nmd=e=>(e.paths=[],e.children||(e.children=[]),e),r.p="/",r.gca=function(e){return e={17896441:"8401",40974919:"7956",67158350:"7144",74876495:"6505",a9e1a7f6:"3",b92f705c:"217","1c734f75":"435",f5f07875:"491","471df853":"517","31e90f3c":"757","71cf7fe6":"806","5818c28e":"921",cf6ffe2f:"1043",dc3fdd24:"1121","0a0a6d3c":"1135","6432bc55":"1217","35a5de3c":"1298",f4a6e698:"1346",eb3b0997:"1392","6948bca1":"1431","69a4ab96":"1799","18cf5ace":"1873","1a4e3797":"2138",afef705c:"2422",ce3fa444:"2539",ee5d850a:"2590",f9cc156b:"2664","2c412ea7":"2736","25f17725":"2938",dbb131dd:"3022","640bc8a0":"3029",f75b37f5:"3462","2461ffa2":"3503","904d61ef":"3590","9d6fd8ea":"3838","9791fd42":"3989",cd90435d:"4105","393be207":"4134","0c21af39":"4274","3c835dee":"4315",da60bc8f:"4411","1df93b7f":"4583","496bf018":"4667",e0a8f778:"4867","8660bbc8":"4914","2f1b3cda":"5153","30334fcd":"5167","53bb5fc4":"5331",dd0670d3:"5347","0ae8b3d4":"5356","36ea7a08":"5602","30ec1363":"5647",eb23a929:"5718","88eaec5a":"5747","2bafca50":"5901",e187e321:"5929","1f391b9e":"6061","19682bb8":"6097",d5417e33:"6161","4e664dc4":"6171",bd23e567:"6231","1c42a294":"6251",dc737160:"6276","5e50ba72":"6342",a584ba2a:"6353","0e9953cd":"6421","3c585fdb":"6585",b46ab14b:"6647",c296437a:"6682",e7c796a6:"6713",a309f86e:"6715","262418cd":"6723",f8409a7e:"6903","1ce51947":"7000",fa1a3aa0:"7025",d83b78fc:"7060","58160c0b":"7268","600a9360":"7642","3ec2c3f7":"7943","9a9c044b":"8083",c1424005:"8172",fe0957ee:"8359","935f2afb":"8581",d76e6194:"8659","1be78505":"8714","57b59cd4":"8880","21b4b958":"9082","4cc2c078":"9087","6a90d500":"9122","5ea65e65":"9249",c76f729d:"9425","6edc47f3":"9657","30256b0d":"9761","07f0ce13":"9814","070b53d1":"9935","507542a3":"9938","972382ea":"9958"}[e]||e,r.p+r.u(e)},(()=>{var e={5354:0,1869:0};r.f.j=(a,c)=>{var f=r.o(e,a)?e[a]:void 0;if(0!==f)if(f)c.push(f[2]);else if(/^(1869|5354)$/.test(a))e[a]=0;else{var d=new Promise(((c,d)=>f=e[a]=[c,d]));c.push(f[2]=d);var b=r.p+r.u(a),t=new Error;r.l(b,(c=>{if(r.o(e,a)&&(0!==(f=e[a])&&(e[a]=void 0),f)){var d=c&&("load"===c.type?"missing":c.type),b=c&&c.target&&c.target.src;t.message="Loading chunk "+a+" failed.\n("+d+": "+b+")",t.name="ChunkLoadError",t.type=d,t.request=b,f[1](t)}}),"chunk-"+a,a)}},r.O.j=a=>0===e[a];var a=(a,c)=>{var f,d,b=c[0],t=c[1],o=c[2],n=0;if(b.some((a=>0!==e[a]))){for(f in t)r.o(t,f)&&(r.m[f]=t[f]);if(o)var i=o(r)}for(a&&a(c);n<b.length;n++)d=b[n],r.o(e,d)&&e[d]&&e[d][0](),e[d]=0;return r.O(i)},c=self.webpackChunkdocs_v_2=self.webpackChunkdocs_v_2||[];c.forEach(a.bind(null,0)),c.push=a.bind(null,c.push.bind(c))})()})();
\ No newline at end of file
+(()=>{"use strict";var e,a,c,f,d,b={},t={};function r(e){var a=t[e];if(void 0!==a)return a.exports;var c=t[e]={id:e,loaded:!1,exports:{}};return b[e].call(c.exports,c,c.exports,r),c.loaded=!0,c.exports}r.m=b,r.c=t,e=[],r.O=(a,c,f,d)=>{if(!c){var b=1/0;for(i=0;i<e.length;i++){c=e[i][0],f=e[i][1],d=e[i][2];for(var t=!0,o=0;o<c.length;o++)(!1&d||b>=d)&&Object.keys(r.O).every((e=>r.O[e](c[o])))?c.splice(o--,1):(t=!1,d<b&&(b=d));if(t){e.splice(i--,1);var n=f();void 0!==n&&(a=n)}}return a}d=d||0;for(var i=e.length;i>0&&e[i-1][2]>d;i--)e[i]=e[i-1];e[i]=[c,f,d]},r.n=e=>{var a=e&&e.__esModule?()=>e.default:()=>e;return r.d(a,{a:a}),a},c=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,r.t=function(e,f){if(1&f&&(e=this(e)),8&f)return e;if("object"==typeof e&&e){if(4&f&&e.__esModule)return e;if(16&f&&"function"==typeof e.then)return e}var d=Object.create(null);r.r(d);var b={};a=a||[null,c({}),c([]),c(c)];for(var t=2&f&&e;"object"==typeof t&&!~a.indexOf(t);t=c(t))Object.getOwnPropertyNames(t).forEach((a=>b[a]=()=>e[a]));return b.default=()=>e,r.d(d,b),d},r.d=(e,a)=>{for(var c in a)r.o(a,c)&&!r.o(e,c)&&Object.defineProperty(e,c,{enumerable:!0,get:a[c]})},r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce(((a,c)=>(r.f[c](e,a),a)),[])),r.u=e=>"assets/js/"+({3:"a9e1a7f6",217:"b92f705c",435:"1c734f75",491:"f5f07875",517:"471df853",757:"31e90f3c",806:"71cf7fe6",921:"5818c28e",1043:"cf6ffe2f",1121:"dc3fdd24",1135:"0a0a6d3c",1217:"6432bc55",1298:"35a5de3c",1346:"f4a6e698",1392:"eb3b0997",1431:"6948bca1",1799:"69a4ab96",1873:"18cf5ace",2138:"1a4e3797",2422:"afef705c",2539:"ce3fa444",2590:"ee5d850a",2664:"f9cc156b",2736:"2c412ea7",2938:"25f17725",3022:"dbb131dd",3029:"640bc8a0",3462:"f75b37f5",3503:"2461ffa2",3590:"904d61ef",3838:"9d6fd8ea",3989:"9791fd42",4105:"cd90435d",4134:"393be207",4274:"0c21af39",4315:"3c835dee",4411:"da60bc8f",4583:"1df93b7f",4667:"496bf018",4867:"e0a8f778",4914:"8660bbc8",5153:"2f1b3cda",5167:"30334fcd",5331:"53bb5fc4",5347:"dd0670d3",5356:"0ae8b3d4",5602:"36ea7a08",5647:"30ec1363",5718:"eb23a929",5747:"88eaec5a",5901:"2bafca50",5929:"e187e321",6061:"1f391b9e",6097:"19682bb8",6161:"d5417e33",6171:"4e664dc4",6231:"bd23e567",6251:"1c42a294",6276:"dc737160",6342:"5e50ba72",6353:"a584ba2a",6421:"0e9953cd",6505:"74876495",6585:"3c585fdb",6647:"b46ab14b",6682:"c296437a",6713:"e7c796a6",6715:"a309f86e",6723:"262418cd",6903:"f8409a7e",7e3:"1ce51947",7025:"fa1a3aa0",7060:"d83b78fc",7144:"67158350",7268:"58160c0b",7642:"600a9360",7943:"3ec2c3f7",7956:"40974919",8083:"9a9c044b",8172:"c1424005",8359:"fe0957ee",8401:"17896441",8581:"935f2afb",8659:"d76e6194",8714:"1be78505",8880:"57b59cd4",9082:"21b4b958",9087:"4cc2c078",9122:"6a90d500",9249:"5ea65e65",9425:"c76f729d",9657:"6edc47f3",9761:"30256b0d",9814:"07f0ce13",9935:"070b53d1",9938:"507542a3",9958:"972382ea"}[e]||e)+"."+{3:"13e3a8af",217:"5d9f89ba",416:"bbfa475a",435:"e7a48716",491:"c7be7c11",517:"dc8822e4",757:"5a79937a",806:"246f8b0c",921:"1e59b5b9",1043:"6673030e",1121:"ecca1a4e",1135:"c0175a9a",1217:"3ad95028",1298:"1c2c6c36",1346:"f3bb9a8c",1392:"8d2b9219",1431:"b799711d",1774:"d317c627",1799:"2c0d3051",1873:"90a3a8f6",2138:"14bcedcd",2185:"30a4a04c",2422:"eecf620f",2539:"9073513e",2590:"c007b05c",2664:"08264843",2736:"1d48e1ad",2938:"1e13bc28",3022:"71f2133e",3029:"8cefa9b4",3126:"29eff39e",3444:"71e4fec8",3462:"f5fce989",3503:"85c3aadb",3590:"f4cfea6d",3838:"49061a6f",3989:"70accff7",4105:"a3341909",4134:"6a02eb3f",4274:"3d60d144",4315:"2348a423",4411:"5261ec1e",4583:"8ad79997",4667:"20af314d",4867:"5c57dbff",4914:"f5aab579",5153:"d68fc09c",5167:"065df1f5",5243:"885ad383",5331:"e601ba32",5347:"484a6c3d",5356:"26ce537a",5390:"92a01867",5602:"493e2986",5647:"b5ed097a",5718:"b8f9b841",5747:"482f5545",5901:"6988e007",5929:"1040a611",6061:"2a35b2f0",6097:"c8c450b0",6161:"f07b5771",6171:"81dae46b",6231:"fb126394",6251:"0c220e44",6276:"cda4920f",6342:"ea185454",6353:"96db4a5c",6421:"1b829fbb",6505:"8c864c3d",6585:"da186a97",6647:"cb92d343",6682:"030a3a05",6713:"e4787f62",6715:"08174e78",6723:"bd2b6782",6809:"5e2f8122",6903:"4bb5647b",7e3:"cf61032c",7025:"afbd59cd",7060:"adb72e54",7144:"26869a1a",7268:"4ba6513d",7642:"2845a55b",7943:"7601ce54",7956:"0805416a",8083:"e1d69022",8172:"b2ff519b",8359:"462a9d48",8401:"e356988c",8581:"3ff9ffb0",8659:"8efbb1ed",8714:"39537cb9",8880:"ca79b24b",8913:"4eaba603",9069:"4a18e286",9082:"938de4b3",9087:"4430c374",9122:"f7c28a25",9249:"9be8c834",9425:"e2c67acd",9462:"33d68470",9657:"c6db824e",9761:"627bfffb",9814:"8e108a46",9904:"305f5b5d",9935:"929e3ad7",9938:"7b3c5651",9958:"51631b8e"}[e]+".js",r.miniCssF=e=>{},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r.o=(e,a)=>Object.prototype.hasOwnProperty.call(e,a),f={},d="docs-v-2:",r.l=(e,a,c,b)=>{if(f[e])f[e].push(a);else{var t,o;if(void 0!==c)for(var n=document.getElementsByTagName("script"),i=0;i<n.length;i++){var l=n[i];if(l.getAttribute("src")==e||l.getAttribute("data-webpack")==d+c){t=l;break}}t||(o=!0,(t=document.createElement("script")).charset="utf-8",t.timeout=120,r.nc&&t.setAttribute("nonce",r.nc),t.setAttribute("data-webpack",d+c),t.src=e),f[e]=[a];var u=(a,c)=>{t.onerror=t.onload=null,clearTimeout(s);var d=f[e];if(delete f[e],t.parentNode&&t.parentNode.removeChild(t),d&&d.forEach((e=>e(c))),a)return a(c)},s=setTimeout(u.bind(null,void 0,{type:"timeout",target:t}),12e4);t.onerror=u.bind(null,t.onerror),t.onload=u.bind(null,t.onload),o&&document.head.appendChild(t)}},r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.nmd=e=>(e.paths=[],e.children||(e.children=[]),e),r.p="/",r.gca=function(e){return e={17896441:"8401",40974919:"7956",67158350:"7144",74876495:"6505",a9e1a7f6:"3",b92f705c:"217","1c734f75":"435",f5f07875:"491","471df853":"517","31e90f3c":"757","71cf7fe6":"806","5818c28e":"921",cf6ffe2f:"1043",dc3fdd24:"1121","0a0a6d3c":"1135","6432bc55":"1217","35a5de3c":"1298",f4a6e698:"1346",eb3b0997:"1392","6948bca1":"1431","69a4ab96":"1799","18cf5ace":"1873","1a4e3797":"2138",afef705c:"2422",ce3fa444:"2539",ee5d850a:"2590",f9cc156b:"2664","2c412ea7":"2736","25f17725":"2938",dbb131dd:"3022","640bc8a0":"3029",f75b37f5:"3462","2461ffa2":"3503","904d61ef":"3590","9d6fd8ea":"3838","9791fd42":"3989",cd90435d:"4105","393be207":"4134","0c21af39":"4274","3c835dee":"4315",da60bc8f:"4411","1df93b7f":"4583","496bf018":"4667",e0a8f778:"4867","8660bbc8":"4914","2f1b3cda":"5153","30334fcd":"5167","53bb5fc4":"5331",dd0670d3:"5347","0ae8b3d4":"5356","36ea7a08":"5602","30ec1363":"5647",eb23a929:"5718","88eaec5a":"5747","2bafca50":"5901",e187e321:"5929","1f391b9e":"6061","19682bb8":"6097",d5417e33:"6161","4e664dc4":"6171",bd23e567:"6231","1c42a294":"6251",dc737160:"6276","5e50ba72":"6342",a584ba2a:"6353","0e9953cd":"6421","3c585fdb":"6585",b46ab14b:"6647",c296437a:"6682",e7c796a6:"6713",a309f86e:"6715","262418cd":"6723",f8409a7e:"6903","1ce51947":"7000",fa1a3aa0:"7025",d83b78fc:"7060","58160c0b":"7268","600a9360":"7642","3ec2c3f7":"7943","9a9c044b":"8083",c1424005:"8172",fe0957ee:"8359","935f2afb":"8581",d76e6194:"8659","1be78505":"8714","57b59cd4":"8880","21b4b958":"9082","4cc2c078":"9087","6a90d500":"9122","5ea65e65":"9249",c76f729d:"9425","6edc47f3":"9657","30256b0d":"9761","07f0ce13":"9814","070b53d1":"9935","507542a3":"9938","972382ea":"9958"}[e]||e,r.p+r.u(e)},(()=>{var e={5354:0,1869:0};r.f.j=(a,c)=>{var f=r.o(e,a)?e[a]:void 0;if(0!==f)if(f)c.push(f[2]);else if(/^(1869|5354)$/.test(a))e[a]=0;else{var d=new Promise(((c,d)=>f=e[a]=[c,d]));c.push(f[2]=d);var b=r.p+r.u(a),t=new Error;r.l(b,(c=>{if(r.o(e,a)&&(0!==(f=e[a])&&(e[a]=void 0),f)){var d=c&&("load"===c.type?"missing":c.type),b=c&&c.target&&c.target.src;t.message="Loading chunk "+a+" failed.\n("+d+": "+b+")",t.name="ChunkLoadError",t.type=d,t.request=b,f[1](t)}}),"chunk-"+a,a)}},r.O.j=a=>0===e[a];var a=(a,c)=>{var f,d,b=c[0],t=c[1],o=c[2],n=0;if(b.some((a=>0!==e[a]))){for(f in t)r.o(t,f)&&(r.m[f]=t[f]);if(o)var i=o(r)}for(a&&a(c);n<b.length;n++)d=b[n],r.o(e,d)&&e[d]&&e[d][0](),e[d]=0;return r.O(i)},c=self.webpackChunkdocs_v_2=self.webpackChunkdocs_v_2||[];c.forEach(a.bind(null,0)),c.push=a.bind(null,c.push.bind(c))})()})();
\ No newline at end of file
diff --git a/community/index.html b/community/index.html
index 2dbc765..a480b2b 100644
--- a/community/index.html
+++ b/community/index.html
@@ -9,7 +9,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.77343581.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.eac039ac.js" as="script">
 <link rel="preload" href="/assets/js/main.ec2aff2b.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -37,7 +37,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.77343581.js"></script>
+<script src="/assets/js/runtime~main.eac039ac.js"></script>
 <script src="/assets/js/main.ec2aff2b.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/api/index.html b/docs/api/index.html
index 1f016e5..92cd861 100644
--- a/docs/api/index.html
+++ b/docs/api/index.html
@@ -9,7 +9,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.77343581.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.eac039ac.js" as="script">
 <link rel="preload" href="/assets/js/main.ec2aff2b.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -40,7 +40,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.77343581.js"></script>
+<script src="/assets/js/runtime~main.eac039ac.js"></script>
 <script src="/assets/js/main.ec2aff2b.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/contributing/contributing-page/index.html b/docs/contributing/contributing-page/index.html
index 1f854b1..5c1e6b6 100644
--- a/docs/contributing/contributing-page/index.html
+++ b/docs/contributing/contributing-page/index.html
@@ -9,7 +9,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.77343581.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.eac039ac.js" as="script">
 <link rel="preload" href="/assets/js/main.ec2aff2b.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -39,7 +39,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.77343581.js"></script>
+<script src="/assets/js/runtime~main.eac039ac.js"></script>
 <script src="/assets/js/main.ec2aff2b.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/contributing/conventions-and-typing/index.html b/docs/contributing/conventions-and-typing/index.html
index 09ce833..92bd3f9 100644
--- a/docs/contributing/conventions-and-typing/index.html
+++ b/docs/contributing/conventions-and-typing/index.html
@@ -9,7 +9,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.77343581.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.eac039ac.js" as="script">
 <link rel="preload" href="/assets/js/main.ec2aff2b.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -41,7 +41,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.77343581.js"></script>
+<script src="/assets/js/runtime~main.eac039ac.js"></script>
 <script src="/assets/js/main.ec2aff2b.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/contributing/creating-viz-plugins/index.html b/docs/contributing/creating-viz-plugins/index.html
index 3958cc7..cd4a57a 100644
--- a/docs/contributing/creating-viz-plugins/index.html
+++ b/docs/contributing/creating-viz-plugins/index.html
@@ -9,7 +9,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.77343581.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.eac039ac.js" as="script">
 <link rel="preload" href="/assets/js/main.ec2aff2b.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -53,7 +53,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.77343581.js"></script>
+<script src="/assets/js/runtime~main.eac039ac.js"></script>
 <script src="/assets/js/main.ec2aff2b.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/contributing/hooks-and-linting/index.html b/docs/contributing/hooks-and-linting/index.html
index 197c06c..7f9d1aa 100644
--- a/docs/contributing/hooks-and-linting/index.html
+++ b/docs/contributing/hooks-and-linting/index.html
@@ -9,7 +9,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.77343581.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.eac039ac.js" as="script">
 <link rel="preload" href="/assets/js/main.ec2aff2b.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -38,7 +38,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.77343581.js"></script>
+<script src="/assets/js/runtime~main.eac039ac.js"></script>
 <script src="/assets/js/main.ec2aff2b.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/contributing/local-backend/index.html b/docs/contributing/local-backend/index.html
index b290e00..52a3bae 100644
--- a/docs/contributing/local-backend/index.html
+++ b/docs/contributing/local-backend/index.html
@@ -9,7 +9,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.77343581.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.eac039ac.js" as="script">
 <link rel="preload" href="/assets/js/main.ec2aff2b.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -40,7 +40,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.77343581.js"></script>
+<script src="/assets/js/runtime~main.eac039ac.js"></script>
 <script src="/assets/js/main.ec2aff2b.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/contributing/pull-request-guidelines/index.html b/docs/contributing/pull-request-guidelines/index.html
index 2b5fdab..183cd38 100644
--- a/docs/contributing/pull-request-guidelines/index.html
+++ b/docs/contributing/pull-request-guidelines/index.html
@@ -9,7 +9,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.77343581.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.eac039ac.js" as="script">
 <link rel="preload" href="/assets/js/main.ec2aff2b.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -37,7 +37,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.77343581.js"></script>
+<script src="/assets/js/runtime~main.eac039ac.js"></script>
 <script src="/assets/js/main.ec2aff2b.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/contributing/style-guide/index.html b/docs/contributing/style-guide/index.html
index 8a8e2ec..084826d 100644
--- a/docs/contributing/style-guide/index.html
+++ b/docs/contributing/style-guide/index.html
@@ -9,7 +9,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.77343581.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.eac039ac.js" as="script">
 <link rel="preload" href="/assets/js/main.ec2aff2b.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -40,7 +40,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.77343581.js"></script>
+<script src="/assets/js/runtime~main.eac039ac.js"></script>
 <script src="/assets/js/main.ec2aff2b.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/contributing/testing-locally/index.html b/docs/contributing/testing-locally/index.html
index 7d09841..e4396e6 100644
--- a/docs/contributing/testing-locally/index.html
+++ b/docs/contributing/testing-locally/index.html
@@ -9,7 +9,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.77343581.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.eac039ac.js" as="script">
 <link rel="preload" href="/assets/js/main.ec2aff2b.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -44,7 +44,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.77343581.js"></script>
+<script src="/assets/js/runtime~main.eac039ac.js"></script>
 <script src="/assets/js/main.ec2aff2b.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/contributing/translations/index.html b/docs/contributing/translations/index.html
index ed452c6..0314a69 100644
--- a/docs/contributing/translations/index.html
+++ b/docs/contributing/translations/index.html
@@ -9,7 +9,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.77343581.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.eac039ac.js" as="script">
 <link rel="preload" href="/assets/js/main.ec2aff2b.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -68,7 +68,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.77343581.js"></script>
+<script src="/assets/js/runtime~main.eac039ac.js"></script>
 <script src="/assets/js/main.ec2aff2b.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/contributing/types-of-contributions/index.html b/docs/contributing/types-of-contributions/index.html
index a2bcac1..91623fc 100644
--- a/docs/contributing/types-of-contributions/index.html
+++ b/docs/contributing/types-of-contributions/index.html
@@ -9,7 +9,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.77343581.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.eac039ac.js" as="script">
 <link rel="preload" href="/assets/js/main.ec2aff2b.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -48,7 +48,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.77343581.js"></script>
+<script src="/assets/js/runtime~main.eac039ac.js"></script>
 <script src="/assets/js/main.ec2aff2b.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/creating-charts-dashboards/creating-your-first-dashboard/index.html b/docs/creating-charts-dashboards/creating-your-first-dashboard/index.html
index 18d8d2f..15da5fa 100644
--- a/docs/creating-charts-dashboards/creating-your-first-dashboard/index.html
+++ b/docs/creating-charts-dashboards/creating-your-first-dashboard/index.html
@@ -9,7 +9,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.77343581.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.eac039ac.js" as="script">
 <link rel="preload" href="/assets/js/main.ec2aff2b.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -80,7 +80,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.77343581.js"></script>
+<script src="/assets/js/runtime~main.eac039ac.js"></script>
 <script src="/assets/js/main.ec2aff2b.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/creating-charts-dashboards/exploring-data/index.html b/docs/creating-charts-dashboards/exploring-data/index.html
index 8ef1cf1..d889d9a 100644
--- a/docs/creating-charts-dashboards/exploring-data/index.html
+++ b/docs/creating-charts-dashboards/exploring-data/index.html
@@ -9,7 +9,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.77343581.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.eac039ac.js" as="script">
 <link rel="preload" href="/assets/js/main.ec2aff2b.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -133,7 +133,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.77343581.js"></script>
+<script src="/assets/js/runtime~main.eac039ac.js"></script>
 <script src="/assets/js/main.ec2aff2b.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/ascend/index.html b/docs/databases/ascend/index.html
index cabed45..7bb18e1 100644
--- a/docs/databases/ascend/index.html
+++ b/docs/databases/ascend/index.html
@@ -9,7 +9,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.77343581.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.eac039ac.js" as="script">
 <link rel="preload" href="/assets/js/main.ec2aff2b.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -37,7 +37,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.77343581.js"></script>
+<script src="/assets/js/runtime~main.eac039ac.js"></script>
 <script src="/assets/js/main.ec2aff2b.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/athena/index.html b/docs/databases/athena/index.html
index 51caee1..250f619 100644
--- a/docs/databases/athena/index.html
+++ b/docs/databases/athena/index.html
@@ -9,7 +9,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.77343581.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.eac039ac.js" as="script">
 <link rel="preload" href="/assets/js/main.ec2aff2b.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -39,7 +39,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.77343581.js"></script>
+<script src="/assets/js/runtime~main.eac039ac.js"></script>
 <script src="/assets/js/main.ec2aff2b.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/bigquery/index.html b/docs/databases/bigquery/index.html
index ed69a05..f003f17 100644
--- a/docs/databases/bigquery/index.html
+++ b/docs/databases/bigquery/index.html
@@ -9,7 +9,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.77343581.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.eac039ac.js" as="script">
 <link rel="preload" href="/assets/js/main.ec2aff2b.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -44,7 +44,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.77343581.js"></script>
+<script src="/assets/js/runtime~main.eac039ac.js"></script>
 <script src="/assets/js/main.ec2aff2b.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/clickhouse/index.html b/docs/databases/clickhouse/index.html
index a7ded39..c6395dc 100644
--- a/docs/databases/clickhouse/index.html
+++ b/docs/databases/clickhouse/index.html
@@ -9,7 +9,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.77343581.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.eac039ac.js" as="script">
 <link rel="preload" href="/assets/js/main.ec2aff2b.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -39,7 +39,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.77343581.js"></script>
+<script src="/assets/js/runtime~main.eac039ac.js"></script>
 <script src="/assets/js/main.ec2aff2b.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/cockroachdb/index.html b/docs/databases/cockroachdb/index.html
index de56274..309233f 100644
--- a/docs/databases/cockroachdb/index.html
+++ b/docs/databases/cockroachdb/index.html
@@ -9,7 +9,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.77343581.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.eac039ac.js" as="script">
 <link rel="preload" href="/assets/js/main.ec2aff2b.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -38,7 +38,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.77343581.js"></script>
+<script src="/assets/js/runtime~main.eac039ac.js"></script>
 <script src="/assets/js/main.ec2aff2b.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/cratedb/index.html b/docs/databases/cratedb/index.html
index 7d2ec36..014ed60 100644
--- a/docs/databases/cratedb/index.html
+++ b/docs/databases/cratedb/index.html
@@ -9,7 +9,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.77343581.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.eac039ac.js" as="script">
 <link rel="preload" href="/assets/js/main.ec2aff2b.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -41,7 +41,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.77343581.js"></script>
+<script src="/assets/js/runtime~main.eac039ac.js"></script>
 <script src="/assets/js/main.ec2aff2b.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/databend/index.html b/docs/databases/databend/index.html
index 44d3b06..c4fc994 100644
--- a/docs/databases/databend/index.html
+++ b/docs/databases/databend/index.html
@@ -9,7 +9,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.77343581.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.eac039ac.js" as="script">
 <link rel="preload" href="/assets/js/main.ec2aff2b.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -38,7 +38,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.77343581.js"></script>
+<script src="/assets/js/runtime~main.eac039ac.js"></script>
 <script src="/assets/js/main.ec2aff2b.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/databricks/index.html b/docs/databases/databricks/index.html
index d5241c1..60f37ae 100644
--- a/docs/databases/databricks/index.html
+++ b/docs/databases/databricks/index.html
@@ -9,7 +9,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.77343581.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.eac039ac.js" as="script">
 <link rel="preload" href="/assets/js/main.ec2aff2b.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -37,7 +37,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.77343581.js"></script>
+<script src="/assets/js/runtime~main.eac039ac.js"></script>
 <script src="/assets/js/main.ec2aff2b.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/db-connection-ui/index.html b/docs/databases/db-connection-ui/index.html
index d7b1fa0..ca5f80e 100644
--- a/docs/databases/db-connection-ui/index.html
+++ b/docs/databases/db-connection-ui/index.html
@@ -9,7 +9,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.77343581.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.eac039ac.js" as="script">
 <link rel="preload" href="/assets/js/main.ec2aff2b.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -37,7 +37,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.77343581.js"></script>
+<script src="/assets/js/runtime~main.eac039ac.js"></script>
 <script src="/assets/js/main.ec2aff2b.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/docker-add-drivers/index.html b/docs/databases/docker-add-drivers/index.html
index 0342d19..2e93bc7 100644
--- a/docs/databases/docker-add-drivers/index.html
+++ b/docs/databases/docker-add-drivers/index.html
@@ -9,7 +9,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.77343581.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.eac039ac.js" as="script">
 <link rel="preload" href="/assets/js/main.ec2aff2b.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -37,7 +37,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.77343581.js"></script>
+<script src="/assets/js/runtime~main.eac039ac.js"></script>
 <script src="/assets/js/main.ec2aff2b.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/doris/index.html b/docs/databases/doris/index.html
index ac4aa8b..7391ee9 100644
--- a/docs/databases/doris/index.html
+++ b/docs/databases/doris/index.html
@@ -9,7 +9,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.77343581.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.eac039ac.js" as="script">
 <link rel="preload" href="/assets/js/main.ec2aff2b.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -37,7 +37,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.77343581.js"></script>
+<script src="/assets/js/runtime~main.eac039ac.js"></script>
 <script src="/assets/js/main.ec2aff2b.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/dremio/index.html b/docs/databases/dremio/index.html
index 9979b1a..f20d746 100644
--- a/docs/databases/dremio/index.html
+++ b/docs/databases/dremio/index.html
@@ -9,7 +9,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.77343581.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.eac039ac.js" as="script">
 <link rel="preload" href="/assets/js/main.ec2aff2b.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -39,7 +39,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.77343581.js"></script>
+<script src="/assets/js/runtime~main.eac039ac.js"></script>
 <script src="/assets/js/main.ec2aff2b.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/drill/index.html b/docs/databases/drill/index.html
index d15fd5a..f13312c 100644
--- a/docs/databases/drill/index.html
+++ b/docs/databases/drill/index.html
@@ -9,7 +9,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.77343581.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.eac039ac.js" as="script">
 <link rel="preload" href="/assets/js/main.ec2aff2b.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -44,7 +44,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.77343581.js"></script>
+<script src="/assets/js/runtime~main.eac039ac.js"></script>
 <script src="/assets/js/main.ec2aff2b.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/druid/index.html b/docs/databases/druid/index.html
index e99a081..7ecfde7 100644
--- a/docs/databases/druid/index.html
+++ b/docs/databases/druid/index.html
@@ -9,7 +9,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.77343581.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.eac039ac.js" as="script">
 <link rel="preload" href="/assets/js/main.ec2aff2b.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -50,7 +50,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.77343581.js"></script>
+<script src="/assets/js/runtime~main.eac039ac.js"></script>
 <script src="/assets/js/main.ec2aff2b.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/dynamodb/index.html b/docs/databases/dynamodb/index.html
index e016ccf..1c335d2 100644
--- a/docs/databases/dynamodb/index.html
+++ b/docs/databases/dynamodb/index.html
@@ -9,7 +9,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.77343581.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.eac039ac.js" as="script">
 <link rel="preload" href="/assets/js/main.ec2aff2b.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -37,7 +37,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.77343581.js"></script>
+<script src="/assets/js/runtime~main.eac039ac.js"></script>
 <script src="/assets/js/main.ec2aff2b.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/elasticsearch/index.html b/docs/databases/elasticsearch/index.html
index 2488397..aeb0a66 100644
--- a/docs/databases/elasticsearch/index.html
+++ b/docs/databases/elasticsearch/index.html
@@ -9,7 +9,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.77343581.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.eac039ac.js" as="script">
 <link rel="preload" href="/assets/js/main.ec2aff2b.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -44,7 +44,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.77343581.js"></script>
+<script src="/assets/js/runtime~main.eac039ac.js"></script>
 <script src="/assets/js/main.ec2aff2b.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/exasol/index.html b/docs/databases/exasol/index.html
index 214be92..d393d1f 100644
--- a/docs/databases/exasol/index.html
+++ b/docs/databases/exasol/index.html
@@ -9,7 +9,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.77343581.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.eac039ac.js" as="script">
 <link rel="preload" href="/assets/js/main.ec2aff2b.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -38,7 +38,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.77343581.js"></script>
+<script src="/assets/js/runtime~main.eac039ac.js"></script>
 <script src="/assets/js/main.ec2aff2b.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/extra-settings/index.html b/docs/databases/extra-settings/index.html
index 42ffe4b..db01a49 100644
--- a/docs/databases/extra-settings/index.html
+++ b/docs/databases/extra-settings/index.html
@@ -9,7 +9,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.77343581.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.eac039ac.js" as="script">
 <link rel="preload" href="/assets/js/main.ec2aff2b.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -47,7 +47,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.77343581.js"></script>
+<script src="/assets/js/runtime~main.eac039ac.js"></script>
 <script src="/assets/js/main.ec2aff2b.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/firebird/index.html b/docs/databases/firebird/index.html
index db069db..57f1d21 100644
--- a/docs/databases/firebird/index.html
+++ b/docs/databases/firebird/index.html
@@ -9,7 +9,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.77343581.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.eac039ac.js" as="script">
 <link rel="preload" href="/assets/js/main.ec2aff2b.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -38,7 +38,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.77343581.js"></script>
+<script src="/assets/js/runtime~main.eac039ac.js"></script>
 <script src="/assets/js/main.ec2aff2b.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/firebolt/index.html b/docs/databases/firebolt/index.html
index 94cda57..28d40d1 100644
--- a/docs/databases/firebolt/index.html
+++ b/docs/databases/firebolt/index.html
@@ -9,7 +9,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.77343581.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.eac039ac.js" as="script">
 <link rel="preload" href="/assets/js/main.ec2aff2b.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -37,7 +37,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.77343581.js"></script>
+<script src="/assets/js/runtime~main.eac039ac.js"></script>
 <script src="/assets/js/main.ec2aff2b.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/google-sheets/index.html b/docs/databases/google-sheets/index.html
index fd911aa..254c0bd 100644
--- a/docs/databases/google-sheets/index.html
+++ b/docs/databases/google-sheets/index.html
@@ -9,7 +9,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.77343581.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.eac039ac.js" as="script">
 <link rel="preload" href="/assets/js/main.ec2aff2b.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -41,7 +41,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.77343581.js"></script>
+<script src="/assets/js/runtime~main.eac039ac.js"></script>
 <script src="/assets/js/main.ec2aff2b.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/hana/index.html b/docs/databases/hana/index.html
index ca92e48..09942b8 100644
--- a/docs/databases/hana/index.html
+++ b/docs/databases/hana/index.html
@@ -9,7 +9,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.77343581.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.eac039ac.js" as="script">
 <link rel="preload" href="/assets/js/main.ec2aff2b.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -37,7 +37,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.77343581.js"></script>
+<script src="/assets/js/runtime~main.eac039ac.js"></script>
 <script src="/assets/js/main.ec2aff2b.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/hive/index.html b/docs/databases/hive/index.html
index d3d5e95..c485730 100644
--- a/docs/databases/hive/index.html
+++ b/docs/databases/hive/index.html
@@ -9,7 +9,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.77343581.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.eac039ac.js" as="script">
 <link rel="preload" href="/assets/js/main.ec2aff2b.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -37,7 +37,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.77343581.js"></script>
+<script src="/assets/js/runtime~main.eac039ac.js"></script>
 <script src="/assets/js/main.ec2aff2b.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/hologres/index.html b/docs/databases/hologres/index.html
index cc64b25..88c3d66 100644
--- a/docs/databases/hologres/index.html
+++ b/docs/databases/hologres/index.html
@@ -9,7 +9,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.77343581.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.eac039ac.js" as="script">
 <link rel="preload" href="/assets/js/main.ec2aff2b.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -37,7 +37,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.77343581.js"></script>
+<script src="/assets/js/runtime~main.eac039ac.js"></script>
 <script src="/assets/js/main.ec2aff2b.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/ibm-db2/index.html b/docs/databases/ibm-db2/index.html
index 0644d8d..e9b7bdc 100644
--- a/docs/databases/ibm-db2/index.html
+++ b/docs/databases/ibm-db2/index.html
@@ -9,7 +9,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.77343581.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.eac039ac.js" as="script">
 <link rel="preload" href="/assets/js/main.ec2aff2b.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -38,7 +38,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.77343581.js"></script>
+<script src="/assets/js/runtime~main.eac039ac.js"></script>
 <script src="/assets/js/main.ec2aff2b.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/impala/index.html b/docs/databases/impala/index.html
index 83cc979..32cf188 100644
--- a/docs/databases/impala/index.html
+++ b/docs/databases/impala/index.html
@@ -9,7 +9,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.77343581.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.eac039ac.js" as="script">
 <link rel="preload" href="/assets/js/main.ec2aff2b.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -37,7 +37,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.77343581.js"></script>
+<script src="/assets/js/runtime~main.eac039ac.js"></script>
 <script src="/assets/js/main.ec2aff2b.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/installing-database-drivers/index.html b/docs/databases/installing-database-drivers/index.html
index 8c99f2d..10729c7 100644
--- a/docs/databases/installing-database-drivers/index.html
+++ b/docs/databases/installing-database-drivers/index.html
@@ -9,7 +9,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.77343581.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.eac039ac.js" as="script">
 <link rel="preload" href="/assets/js/main.ec2aff2b.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -48,7 +48,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.77343581.js"></script>
+<script src="/assets/js/runtime~main.eac039ac.js"></script>
 <script src="/assets/js/main.ec2aff2b.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/kusto/index.html b/docs/databases/kusto/index.html
index ec46cc0..eef91ea 100644
--- a/docs/databases/kusto/index.html
+++ b/docs/databases/kusto/index.html
@@ -9,7 +9,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.77343581.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.eac039ac.js" as="script">
 <link rel="preload" href="/assets/js/main.ec2aff2b.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -39,7 +39,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.77343581.js"></script>
+<script src="/assets/js/runtime~main.eac039ac.js"></script>
 <script src="/assets/js/main.ec2aff2b.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/kylin/index.html b/docs/databases/kylin/index.html
index 2fffae0..10f4a55 100644
--- a/docs/databases/kylin/index.html
+++ b/docs/databases/kylin/index.html
@@ -9,7 +9,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.77343581.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.eac039ac.js" as="script">
 <link rel="preload" href="/assets/js/main.ec2aff2b.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -38,7 +38,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.77343581.js"></script>
+<script src="/assets/js/runtime~main.eac039ac.js"></script>
 <script src="/assets/js/main.ec2aff2b.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/meta-database/index.html b/docs/databases/meta-database/index.html
index f2d8963..e3190ca 100644
--- a/docs/databases/meta-database/index.html
+++ b/docs/databases/meta-database/index.html
@@ -9,7 +9,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.77343581.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.eac039ac.js" as="script">
 <link rel="preload" href="/assets/js/main.ec2aff2b.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -37,7 +37,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.77343581.js"></script>
+<script src="/assets/js/runtime~main.eac039ac.js"></script>
 <script src="/assets/js/main.ec2aff2b.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/mysql/index.html b/docs/databases/mysql/index.html
index ed24ee0..dc27fcf 100644
--- a/docs/databases/mysql/index.html
+++ b/docs/databases/mysql/index.html
@@ -9,7 +9,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.77343581.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.eac039ac.js" as="script">
 <link rel="preload" href="/assets/js/main.ec2aff2b.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -38,7 +38,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.77343581.js"></script>
+<script src="/assets/js/runtime~main.eac039ac.js"></script>
 <script src="/assets/js/main.ec2aff2b.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/netezza/index.html b/docs/databases/netezza/index.html
index 5c121f6..ad94cdc 100644
--- a/docs/databases/netezza/index.html
+++ b/docs/databases/netezza/index.html
@@ -9,7 +9,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.77343581.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.eac039ac.js" as="script">
 <link rel="preload" href="/assets/js/main.ec2aff2b.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -38,7 +38,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.77343581.js"></script>
+<script src="/assets/js/runtime~main.eac039ac.js"></script>
 <script src="/assets/js/main.ec2aff2b.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/ocient/index.html b/docs/databases/ocient/index.html
index 4567d41..f6c20be 100644
--- a/docs/databases/ocient/index.html
+++ b/docs/databases/ocient/index.html
@@ -9,7 +9,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.77343581.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.eac039ac.js" as="script">
 <link rel="preload" href="/assets/js/main.ec2aff2b.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -39,7 +39,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.77343581.js"></script>
+<script src="/assets/js/runtime~main.eac039ac.js"></script>
 <script src="/assets/js/main.ec2aff2b.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/oracle/index.html b/docs/databases/oracle/index.html
index e5f901d..23419d0 100644
--- a/docs/databases/oracle/index.html
+++ b/docs/databases/oracle/index.html
@@ -9,7 +9,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.77343581.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.eac039ac.js" as="script">
 <link rel="preload" href="/assets/js/main.ec2aff2b.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -38,7 +38,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.77343581.js"></script>
+<script src="/assets/js/runtime~main.eac039ac.js"></script>
 <script src="/assets/js/main.ec2aff2b.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/pinot/index.html b/docs/databases/pinot/index.html
index 894a933..8826db8 100644
--- a/docs/databases/pinot/index.html
+++ b/docs/databases/pinot/index.html
@@ -9,7 +9,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.77343581.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.eac039ac.js" as="script">
 <link rel="preload" href="/assets/js/main.ec2aff2b.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -37,7 +37,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.77343581.js"></script>
+<script src="/assets/js/runtime~main.eac039ac.js"></script>
 <script src="/assets/js/main.ec2aff2b.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/postgres/index.html b/docs/databases/postgres/index.html
index c3a4b1f..a7f54c0 100644
--- a/docs/databases/postgres/index.html
+++ b/docs/databases/postgres/index.html
@@ -9,7 +9,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.77343581.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.eac039ac.js" as="script">
 <link rel="preload" href="/assets/js/main.ec2aff2b.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -42,7 +42,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.77343581.js"></script>
+<script src="/assets/js/runtime~main.eac039ac.js"></script>
 <script src="/assets/js/main.ec2aff2b.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/presto/index.html b/docs/databases/presto/index.html
index db9aa99..b610f26 100644
--- a/docs/databases/presto/index.html
+++ b/docs/databases/presto/index.html
@@ -9,7 +9,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.77343581.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.eac039ac.js" as="script">
 <link rel="preload" href="/assets/js/main.ec2aff2b.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -38,7 +38,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.77343581.js"></script>
+<script src="/assets/js/runtime~main.eac039ac.js"></script>
 <script src="/assets/js/main.ec2aff2b.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/redshift/index.html b/docs/databases/redshift/index.html
index 5b2446e..14480d8 100644
--- a/docs/databases/redshift/index.html
+++ b/docs/databases/redshift/index.html
@@ -9,7 +9,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.77343581.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.eac039ac.js" as="script">
 <link rel="preload" href="/assets/js/main.ec2aff2b.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -38,7 +38,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.77343581.js"></script>
+<script src="/assets/js/runtime~main.eac039ac.js"></script>
 <script src="/assets/js/main.ec2aff2b.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/risingwave/index.html b/docs/databases/risingwave/index.html
index e9b7000..42a50c0 100644
--- a/docs/databases/risingwave/index.html
+++ b/docs/databases/risingwave/index.html
@@ -9,7 +9,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.77343581.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.eac039ac.js" as="script">
 <link rel="preload" href="/assets/js/main.ec2aff2b.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -38,7 +38,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.77343581.js"></script>
+<script src="/assets/js/runtime~main.eac039ac.js"></script>
 <script src="/assets/js/main.ec2aff2b.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/rockset/index.html b/docs/databases/rockset/index.html
index 256600d..b23b129 100644
--- a/docs/databases/rockset/index.html
+++ b/docs/databases/rockset/index.html
@@ -9,7 +9,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.77343581.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.eac039ac.js" as="script">
 <link rel="preload" href="/assets/js/main.ec2aff2b.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -38,7 +38,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.77343581.js"></script>
+<script src="/assets/js/runtime~main.eac039ac.js"></script>
 <script src="/assets/js/main.ec2aff2b.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/snowflake/index.html b/docs/databases/snowflake/index.html
index 8a981cb..ea74d1d 100644
--- a/docs/databases/snowflake/index.html
+++ b/docs/databases/snowflake/index.html
@@ -9,7 +9,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.77343581.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.eac039ac.js" as="script">
 <link rel="preload" href="/assets/js/main.ec2aff2b.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -47,7 +47,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.77343581.js"></script>
+<script src="/assets/js/runtime~main.eac039ac.js"></script>
 <script src="/assets/js/main.ec2aff2b.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/solr/index.html b/docs/databases/solr/index.html
index 2e1bf53..16bf5a1 100644
--- a/docs/databases/solr/index.html
+++ b/docs/databases/solr/index.html
@@ -9,7 +9,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.77343581.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.eac039ac.js" as="script">
 <link rel="preload" href="/assets/js/main.ec2aff2b.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -38,7 +38,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.77343581.js"></script>
+<script src="/assets/js/runtime~main.eac039ac.js"></script>
 <script src="/assets/js/main.ec2aff2b.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/spark-sql/index.html b/docs/databases/spark-sql/index.html
index 9f2fe3c..2da02c3 100644
--- a/docs/databases/spark-sql/index.html
+++ b/docs/databases/spark-sql/index.html
@@ -9,7 +9,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.77343581.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.eac039ac.js" as="script">
 <link rel="preload" href="/assets/js/main.ec2aff2b.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -37,7 +37,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.77343581.js"></script>
+<script src="/assets/js/runtime~main.eac039ac.js"></script>
 <script src="/assets/js/main.ec2aff2b.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/sql-server/index.html b/docs/databases/sql-server/index.html
index cb30a23..2039c97 100644
--- a/docs/databases/sql-server/index.html
+++ b/docs/databases/sql-server/index.html
@@ -9,7 +9,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.77343581.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.eac039ac.js" as="script">
 <link rel="preload" href="/assets/js/main.ec2aff2b.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -37,7 +37,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.77343581.js"></script>
+<script src="/assets/js/runtime~main.eac039ac.js"></script>
 <script src="/assets/js/main.ec2aff2b.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/starrocks/index.html b/docs/databases/starrocks/index.html
index 84298a0..d1265d4 100644
--- a/docs/databases/starrocks/index.html
+++ b/docs/databases/starrocks/index.html
@@ -9,7 +9,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.77343581.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.eac039ac.js" as="script">
 <link rel="preload" href="/assets/js/main.ec2aff2b.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -38,7 +38,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.77343581.js"></script>
+<script src="/assets/js/runtime~main.eac039ac.js"></script>
 <script src="/assets/js/main.ec2aff2b.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/teradata/index.html b/docs/databases/teradata/index.html
index bf4d095..f19f0fa 100644
--- a/docs/databases/teradata/index.html
+++ b/docs/databases/teradata/index.html
@@ -9,7 +9,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.77343581.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.eac039ac.js" as="script">
 <link rel="preload" href="/assets/js/main.ec2aff2b.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -44,7 +44,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.77343581.js"></script>
+<script src="/assets/js/runtime~main.eac039ac.js"></script>
 <script src="/assets/js/main.ec2aff2b.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/timescaledb/index.html b/docs/databases/timescaledb/index.html
index 322fbfd..708d33c 100644
--- a/docs/databases/timescaledb/index.html
+++ b/docs/databases/timescaledb/index.html
@@ -9,7 +9,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.77343581.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.eac039ac.js" as="script">
 <link rel="preload" href="/assets/js/main.ec2aff2b.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -38,7 +38,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.77343581.js"></script>
+<script src="/assets/js/runtime~main.eac039ac.js"></script>
 <script src="/assets/js/main.ec2aff2b.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/trino/index.html b/docs/databases/trino/index.html
index 31aad33..b9210b1 100644
--- a/docs/databases/trino/index.html
+++ b/docs/databases/trino/index.html
@@ -9,7 +9,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.77343581.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.eac039ac.js" as="script">
 <link rel="preload" href="/assets/js/main.ec2aff2b.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -39,7 +39,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.77343581.js"></script>
+<script src="/assets/js/runtime~main.eac039ac.js"></script>
 <script src="/assets/js/main.ec2aff2b.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/vertica/index.html b/docs/databases/vertica/index.html
index bcb20ba..c916a51 100644
--- a/docs/databases/vertica/index.html
+++ b/docs/databases/vertica/index.html
@@ -9,7 +9,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.77343581.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.eac039ac.js" as="script">
 <link rel="preload" href="/assets/js/main.ec2aff2b.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -39,7 +39,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.77343581.js"></script>
+<script src="/assets/js/runtime~main.eac039ac.js"></script>
 <script src="/assets/js/main.ec2aff2b.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/yugabytedb/index.html b/docs/databases/yugabytedb/index.html
index e9d322a..469c61a 100644
--- a/docs/databases/yugabytedb/index.html
+++ b/docs/databases/yugabytedb/index.html
@@ -9,7 +9,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.77343581.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.eac039ac.js" as="script">
 <link rel="preload" href="/assets/js/main.ec2aff2b.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -39,7 +39,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.77343581.js"></script>
+<script src="/assets/js/runtime~main.eac039ac.js"></script>
 <script src="/assets/js/main.ec2aff2b.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/frequently-asked-questions/index.html b/docs/frequently-asked-questions/index.html
index 86ca954..cb7caa4 100644
--- a/docs/frequently-asked-questions/index.html
+++ b/docs/frequently-asked-questions/index.html
@@ -9,7 +9,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.77343581.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.eac039ac.js" as="script">
 <link rel="preload" href="/assets/js/main.ec2aff2b.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -125,7 +125,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.77343581.js"></script>
+<script src="/assets/js/runtime~main.eac039ac.js"></script>
 <script src="/assets/js/main.ec2aff2b.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/installation/alerts-reports/index.html b/docs/installation/alerts-reports/index.html
index 885fefe..4c17d35 100644
--- a/docs/installation/alerts-reports/index.html
+++ b/docs/installation/alerts-reports/index.html
@@ -9,7 +9,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.77343581.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.eac039ac.js" as="script">
 <link rel="preload" href="/assets/js/main.ec2aff2b.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -56,7 +56,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.77343581.js"></script>
+<script src="/assets/js/runtime~main.eac039ac.js"></script>
 <script src="/assets/js/main.ec2aff2b.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/installation/async-queries-celery/index.html b/docs/installation/async-queries-celery/index.html
index ed3f558..43ae719 100644
--- a/docs/installation/async-queries-celery/index.html
+++ b/docs/installation/async-queries-celery/index.html
@@ -9,7 +9,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.77343581.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.eac039ac.js" as="script">
 <link rel="preload" href="/assets/js/main.ec2aff2b.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -53,7 +53,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.77343581.js"></script>
+<script src="/assets/js/runtime~main.eac039ac.js"></script>
 <script src="/assets/js/main.ec2aff2b.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/installation/cache/index.html b/docs/installation/cache/index.html
index 7549833..49dd21d 100644
--- a/docs/installation/cache/index.html
+++ b/docs/installation/cache/index.html
@@ -9,7 +9,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.77343581.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.eac039ac.js" as="script">
 <link rel="preload" href="/assets/js/main.ec2aff2b.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -56,7 +56,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.77343581.js"></script>
+<script src="/assets/js/runtime~main.eac039ac.js"></script>
 <script src="/assets/js/main.ec2aff2b.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/installation/configuring-superset/index.html b/docs/installation/configuring-superset/index.html
index 5ecfafd..724a63a 100644
--- a/docs/installation/configuring-superset/index.html
+++ b/docs/installation/configuring-superset/index.html
@@ -9,7 +9,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.77343581.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.eac039ac.js" as="script">
 <link rel="preload" href="/assets/js/main.ec2aff2b.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -56,13 +56,7 @@
 To use LDAP you must install the <a href="https://www.python-ldap.org/en/latest/installing.html" target="_blank" rel="noopener noreferrer">python-ldap</a> package.
 See <a href="https://flask-appbuilder.readthedocs.io/en/latest/security.html#authentication-ldap" target="_blank" rel="noopener noreferrer">FAB&#x27;s LDAP documentation</a>
 for details.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="mapping-ldap-or-oauth-groups-to-superset-roles">Mapping LDAP or OAUTH groups to Superset roles<a href="#mapping-ldap-or-oauth-groups-to-superset-roles" class="hash-link" aria-label="Direct link to Mapping LDAP or OAUTH groups to Superset roles" title="Direct link to Mapping LDAP or OAUTH groups to Superset roles">​</a></h3><p>AUTH_ROLES_MAPPING in Flask-AppBuilder is a dictionary that maps from LDAP/OAUTH group names to FAB roles.
-It is used to assign roles to users who authenticate using LDAP or OAuth.</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="mapping-oauth-groups-to-superset-roles">Mapping OAUTH groups to Superset roles<a href="#mapping-oauth-groups-to-superset-roles" class="hash-link" aria-label="Direct link to Mapping OAUTH groups to Superset roles" title="Direct link to Mapping OAUTH groups to Superset roles">​</a></h4><p>The following AUTH_ROLES_MAPPING dictionary would map the OAUTH group &quot;superset_users&quot; to the Superset roles &quot;Gamma&quot; as well as &quot;Alpha&quot;, and the OAUTH group &quot;superset_admins&quot; to the Superset role &quot;Admin&quot;.</p><p>AUTH_ROLES_MAPPING = {
-&quot;superset_users&quot;: <!-- -->[&quot;Gamma&quot;,&quot;Alpha&quot;]<!-- -->,
-&quot;superset_admins&quot;: <!-- -->[&quot;Admin&quot;]<!-- -->,
-}</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="mapping-ldap-groups-to-superset-roles">Mapping LDAP groups to Superset roles<a href="#mapping-ldap-groups-to-superset-roles" class="hash-link" aria-label="Direct link to Mapping LDAP groups to Superset roles" title="Direct link to Mapping LDAP groups to Superset roles">​</a></h4><p>The following AUTH_ROLES_MAPPING dictionary would map the LDAP DN &quot;cn=superset_users,ou=groups,dc=example,dc=com&quot; to the Superset roles &quot;Gamma&quot; as well as &quot;Alpha&quot;, and the LDAP DN &quot;cn=superset_admins,ou=groups,dc=example,dc=com&quot; to the Superset role &quot;Admin&quot;.</p><p>AUTH_ROLES_MAPPING = {
-&quot;cn=superset_users,ou=groups,dc=example,dc=com&quot;: <!-- -->[&quot;Gamma&quot;,&quot;Alpha&quot;]<!-- -->,
-&quot;cn=superset_admins,ou=groups,dc=example,dc=com&quot;: <!-- -->[&quot;Admin&quot;]<!-- -->,
-}</p><p>Note: This requires AUTH_LDAP_SEARCH to be set. For more details, Please refer (FAB Security documentation)<!-- -->[https://flask-appbuilder.readthedocs.io/en/latest/security.html]<!-- -->.</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="syncing-roles-at-login">Syncing roles at login<a href="#syncing-roles-at-login" class="hash-link" aria-label="Direct link to Syncing roles at login" title="Direct link to Syncing roles at login">​</a></h4><p>You can also use the AUTH_ROLES_SYNC_AT_LOGIN configuration variable to control how often Flask-AppBuilder syncs the user&#x27;s roles with the LDAP/OAUTH groups. If AUTH_ROLES_SYNC_AT_LOGIN is set to True, Flask-AppBuilder will sync the user&#x27;s roles each time they log in. If AUTH_ROLES_SYNC_AT_LOGIN is set to False, Flask-AppBuilder will only sync the user&#x27;s roles when they first register.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="flask-app-configuration-hook">Flask app Configuration Hook<a href="#flask-app-configuration-hook" class="hash-link" aria-label="Direct link to Flask app Configuration Hook" title="Direct link to Flask app Configuration Hook">​</a></h3><p><code>FLASK_APP_MUTATOR</code> is a configuration function that can be provided in your environment, receives
+It is used to assign roles to users who authenticate using LDAP or OAuth.</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="mapping-oauth-groups-to-superset-roles">Mapping OAUTH groups to Superset roles<a href="#mapping-oauth-groups-to-superset-roles" class="hash-link" aria-label="Direct link to Mapping OAUTH groups to Superset roles" title="Direct link to Mapping OAUTH groups to Superset roles">​</a></h4><p>The following <code>AUTH_ROLES_MAPPING</code> dictionary would map the OAUTH group &quot;superset_users&quot; to the Superset roles &quot;Gamma&quot; as well as &quot;Alpha&quot;, and the OAUTH group &quot;superset_admins&quot; to the Superset role &quot;Admin&quot;.</p><div class="language-python codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-python codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">AUTH_ROLES_MAPPING </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token string" style="color:#e3116c">&quot;superset_users&quot;</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token string" style="color:#e3116c">&quot;Gamma&quot;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token string" style="color:#e3116c">&quot;Alpha&quot;</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token string" style="color:#e3116c">&quot;superset_admins&quot;</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token string" style="color:#e3116c">&quot;Admin&quot;</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h4 class="anchor anchorWithStickyNavbar_LWe7" id="mapping-ldap-groups-to-superset-roles">Mapping LDAP groups to Superset roles<a href="#mapping-ldap-groups-to-superset-roles" class="hash-link" aria-label="Direct link to Mapping LDAP groups to Superset roles" title="Direct link to Mapping LDAP groups to Superset roles">​</a></h4><p>The following <code>AUTH_ROLES_MAPPING</code> dictionary would map the LDAP DN &quot;cn=superset_users,ou=groups,dc=example,dc=com&quot; to the Superset roles &quot;Gamma&quot; as well as &quot;Alpha&quot;, and the LDAP DN &quot;cn=superset_admins,ou=groups,dc=example,dc=com&quot; to the Superset role &quot;Admin&quot;.</p><div class="language-python codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-python codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">AUTH_ROLES_MAPPING </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token string" style="color:#e3116c">&quot;cn=superset_users,ou=groups,dc=example,dc=com&quot;</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token string" style="color:#e3116c">&quot;Gamma&quot;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token string" style="color:#e3116c">&quot;Alpha&quot;</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token string" style="color:#e3116c">&quot;cn=superset_admins,ou=groups,dc=example,dc=com&quot;</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token string" style="color:#e3116c">&quot;Admin&quot;</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Note: This requires <code>AUTH_LDAP_SEARCH</code> to be set. For more details, please see the <a href="https://flask-appbuilder.readthedocs.io/en/latest/security.html" target="_blank" rel="noopener noreferrer">FAB Security documentation</a>.</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="syncing-roles-at-login">Syncing roles at login<a href="#syncing-roles-at-login" class="hash-link" aria-label="Direct link to Syncing roles at login" title="Direct link to Syncing roles at login">​</a></h4><p>You can also use the <code>AUTH_ROLES_SYNC_AT_LOGIN</code> configuration variable to control how often Flask-AppBuilder syncs the user&#x27;s roles with the LDAP/OAUTH groups. If <code>AUTH_ROLES_SYNC_AT_LOGIN</code> is set to True, Flask-AppBuilder will sync the user&#x27;s roles each time they log in. If <code>AUTH_ROLES_SYNC_AT_LOGIN</code> is set to False, Flask-AppBuilder will only sync the user&#x27;s roles when they first register.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="flask-app-configuration-hook">Flask app Configuration Hook<a href="#flask-app-configuration-hook" class="hash-link" aria-label="Direct link to Flask app Configuration Hook" title="Direct link to Flask app Configuration Hook">​</a></h3><p><code>FLASK_APP_MUTATOR</code> is a configuration function that can be provided in your environment, receives
 the app object and can alter it in any way. For example, add <code>FLASK_APP_MUTATOR</code> into your
 <code>superset_config.py</code> to setup session cookie expiration time to 24 hours:</p><div class="language-python codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-python codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">from</span><span class="token plain"> flask </span><span class="token keyword" style="color:#00009f">import</span><span class="token plain"> session</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">from</span><span class="token plain"> flask </span><span class="token keyword" style="color:#00009f">import</span><span class="token plain"> Flask</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">def</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">make_session_permanent</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token triple-quoted-string string" style="color:#e3116c">&#x27;&#x27;&#x27;</span><br></span><span class="token-line" style="color:#393A34"><span class="token triple-quoted-string string" style="color:#e3116c">    Enable maxAge for the cookie &#x27;session&#x27;</span><br></span><span class="token-line" style="color:#393A34"><span class="token triple-quoted-string string" style="color:#e3116c">    &#x27;&#x27;&#x27;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    session</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">permanent </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">True</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># Set up max age of session to 24 hours</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">PERMANENT_SESSION_LIFETIME </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> timedelta</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">hours</span><span class="token operator" style="color:#393A34">=</span><span class="token number" style="color:#36acaa">24</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">def</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">FLASK_APP_MUTATOR</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">app</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> Flask</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">-</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">None</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    app</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">before_request_funcs</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">setdefault</span><span class="token punctuation" style="color:#393A34">(</span><span class="token boolean" style="color:#36acaa">None</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">append</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">make_session_permanent</span><span class="token punctuation" style="color:#393A34">)</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h3 class="anchor anchorWithStickyNavbar_LWe7" id="feature-flags">Feature Flags<a href="#feature-flags" class="hash-link" aria-label="Direct link to Feature Flags" title="Direct link to Feature Flags">​</a></h3><p>To support a diverse set of users, Superset has some features that are not enabled by default. For
 example, some users have stronger security restrictions, while some others may not. So Superset
@@ -90,7 +84,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.77343581.js"></script>
+<script src="/assets/js/runtime~main.eac039ac.js"></script>
 <script src="/assets/js/main.ec2aff2b.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/installation/docker/index.html b/docs/installation/docker/index.html
index d8d9afc..a8fca11 100644
--- a/docs/installation/docker/index.html
+++ b/docs/installation/docker/index.html
@@ -9,7 +9,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.77343581.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.eac039ac.js" as="script">
 <link rel="preload" href="/assets/js/main.ec2aff2b.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -70,7 +70,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.77343581.js"></script>
+<script src="/assets/js/runtime~main.eac039ac.js"></script>
 <script src="/assets/js/main.ec2aff2b.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/installation/event-logging/index.html b/docs/installation/event-logging/index.html
index be93b62..2fb44d4 100644
--- a/docs/installation/event-logging/index.html
+++ b/docs/installation/event-logging/index.html
@@ -9,7 +9,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.77343581.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.eac039ac.js" as="script">
 <link rel="preload" href="/assets/js/main.ec2aff2b.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -43,7 +43,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.77343581.js"></script>
+<script src="/assets/js/runtime~main.eac039ac.js"></script>
 <script src="/assets/js/main.ec2aff2b.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/installation/installing-superset-from-pypi/index.html b/docs/installation/installing-superset-from-pypi/index.html
index 474db2d..2d43b0e 100644
--- a/docs/installation/installing-superset-from-pypi/index.html
+++ b/docs/installation/installing-superset-from-pypi/index.html
@@ -9,7 +9,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.77343581.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.eac039ac.js" as="script">
 <link rel="preload" href="/assets/js/main.ec2aff2b.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -46,7 +46,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.77343581.js"></script>
+<script src="/assets/js/runtime~main.eac039ac.js"></script>
 <script src="/assets/js/main.ec2aff2b.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/installation/installing-superset-using-docker-compose/index.html b/docs/installation/installing-superset-using-docker-compose/index.html
index 39fb0fd..dfcd18e 100644
--- a/docs/installation/installing-superset-using-docker-compose/index.html
+++ b/docs/installation/installing-superset-using-docker-compose/index.html
@@ -9,7 +9,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.77343581.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.eac039ac.js" as="script">
 <link rel="preload" href="/assets/js/main.ec2aff2b.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -123,7 +123,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.77343581.js"></script>
+<script src="/assets/js/runtime~main.eac039ac.js"></script>
 <script src="/assets/js/main.ec2aff2b.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/installation/networking-settings/index.html b/docs/installation/networking-settings/index.html
index 762a8cc..78b97e9 100644
--- a/docs/installation/networking-settings/index.html
+++ b/docs/installation/networking-settings/index.html
@@ -9,7 +9,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.77343581.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.eac039ac.js" as="script">
 <link rel="preload" href="/assets/js/main.ec2aff2b.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -47,7 +47,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.77343581.js"></script>
+<script src="/assets/js/runtime~main.eac039ac.js"></script>
 <script src="/assets/js/main.ec2aff2b.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/installation/running-on-kubernetes/index.html b/docs/installation/running-on-kubernetes/index.html
index 18a30a7..37fa3e2 100644
--- a/docs/installation/running-on-kubernetes/index.html
+++ b/docs/installation/running-on-kubernetes/index.html
@@ -9,7 +9,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.77343581.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.eac039ac.js" as="script">
 <link rel="preload" href="/assets/js/main.ec2aff2b.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -48,7 +48,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.77343581.js"></script>
+<script src="/assets/js/runtime~main.eac039ac.js"></script>
 <script src="/assets/js/main.ec2aff2b.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/installation/setup-ssh-tunneling/index.html b/docs/installation/setup-ssh-tunneling/index.html
index 5cbed7e..462c444 100644
--- a/docs/installation/setup-ssh-tunneling/index.html
+++ b/docs/installation/setup-ssh-tunneling/index.html
@@ -9,7 +9,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.77343581.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.eac039ac.js" as="script">
 <link rel="preload" href="/assets/js/main.ec2aff2b.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -37,7 +37,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.77343581.js"></script>
+<script src="/assets/js/runtime~main.eac039ac.js"></script>
 <script src="/assets/js/main.ec2aff2b.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/installation/sql-templating/index.html b/docs/installation/sql-templating/index.html
index 998d237..5858981 100644
--- a/docs/installation/sql-templating/index.html
+++ b/docs/installation/sql-templating/index.html
@@ -9,7 +9,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.77343581.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.eac039ac.js" as="script">
 <link rel="preload" href="/assets/js/main.ec2aff2b.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -76,7 +76,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.77343581.js"></script>
+<script src="/assets/js/runtime~main.eac039ac.js"></script>
 <script src="/assets/js/main.ec2aff2b.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/installation/upgrading-superset/index.html b/docs/installation/upgrading-superset/index.html
index edc0cfd..e3a413c 100644
--- a/docs/installation/upgrading-superset/index.html
+++ b/docs/installation/upgrading-superset/index.html
@@ -9,7 +9,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.77343581.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.eac039ac.js" as="script">
 <link rel="preload" href="/assets/js/main.ec2aff2b.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -39,7 +39,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.77343581.js"></script>
+<script src="/assets/js/runtime~main.eac039ac.js"></script>
 <script src="/assets/js/main.ec2aff2b.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/intro/index.html b/docs/intro/index.html
index a09561b..8500fa1 100644
--- a/docs/intro/index.html
+++ b/docs/intro/index.html
@@ -9,7 +9,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.77343581.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.eac039ac.js" as="script">
 <link rel="preload" href="/assets/js/main.ec2aff2b.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -47,7 +47,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.77343581.js"></script>
+<script src="/assets/js/runtime~main.eac039ac.js"></script>
 <script src="/assets/js/main.ec2aff2b.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/miscellaneous/chart-params/index.html b/docs/miscellaneous/chart-params/index.html
index 380357f..9a9bb34 100644
--- a/docs/miscellaneous/chart-params/index.html
+++ b/docs/miscellaneous/chart-params/index.html
@@ -9,7 +9,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.77343581.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.eac039ac.js" as="script">
 <link rel="preload" href="/assets/js/main.ec2aff2b.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -37,7 +37,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.77343581.js"></script>
+<script src="/assets/js/runtime~main.eac039ac.js"></script>
 <script src="/assets/js/main.ec2aff2b.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/miscellaneous/country-map-tools/index.html b/docs/miscellaneous/country-map-tools/index.html
index 38f123c..25a6e69 100644
--- a/docs/miscellaneous/country-map-tools/index.html
+++ b/docs/miscellaneous/country-map-tools/index.html
@@ -9,7 +9,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.77343581.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.eac039ac.js" as="script">
 <link rel="preload" href="/assets/js/main.ec2aff2b.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -44,7 +44,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.77343581.js"></script>
+<script src="/assets/js/runtime~main.eac039ac.js"></script>
 <script src="/assets/js/main.ec2aff2b.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/miscellaneous/importing-exporting-datasources/index.html b/docs/miscellaneous/importing-exporting-datasources/index.html
index 109f35f..d6c2923 100644
--- a/docs/miscellaneous/importing-exporting-datasources/index.html
+++ b/docs/miscellaneous/importing-exporting-datasources/index.html
@@ -9,7 +9,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.77343581.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.eac039ac.js" as="script">
 <link rel="preload" href="/assets/js/main.ec2aff2b.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -48,7 +48,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.77343581.js"></script>
+<script src="/assets/js/runtime~main.eac039ac.js"></script>
 <script src="/assets/js/main.ec2aff2b.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/miscellaneous/issue-codes/index.html b/docs/miscellaneous/issue-codes/index.html
index 6157499..e71991f 100644
--- a/docs/miscellaneous/issue-codes/index.html
+++ b/docs/miscellaneous/issue-codes/index.html
@@ -9,7 +9,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.77343581.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.eac039ac.js" as="script">
 <link rel="preload" href="/assets/js/main.ec2aff2b.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -66,7 +66,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.77343581.js"></script>
+<script src="/assets/js/runtime~main.eac039ac.js"></script>
 <script src="/assets/js/main.ec2aff2b.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/miscellaneous/timezones/index.html b/docs/miscellaneous/timezones/index.html
index f3b244b..edbd6ef 100644
--- a/docs/miscellaneous/timezones/index.html
+++ b/docs/miscellaneous/timezones/index.html
@@ -9,7 +9,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.77343581.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.eac039ac.js" as="script">
 <link rel="preload" href="/assets/js/main.ec2aff2b.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -37,7 +37,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.77343581.js"></script>
+<script src="/assets/js/runtime~main.eac039ac.js"></script>
 <script src="/assets/js/main.ec2aff2b.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/quickstart/index.html b/docs/quickstart/index.html
index e806cb5..cfdcefe 100644
--- a/docs/quickstart/index.html
+++ b/docs/quickstart/index.html
@@ -9,7 +9,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.77343581.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.eac039ac.js" as="script">
 <link rel="preload" href="/assets/js/main.ec2aff2b.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -54,7 +54,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.77343581.js"></script>
+<script src="/assets/js/runtime~main.eac039ac.js"></script>
 <script src="/assets/js/main.ec2aff2b.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/security/cves/index.html b/docs/security/cves/index.html
index 3ddb7b4..c1a9480 100644
--- a/docs/security/cves/index.html
+++ b/docs/security/cves/index.html
@@ -9,7 +9,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.77343581.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.eac039ac.js" as="script">
 <link rel="preload" href="/assets/js/main.ec2aff2b.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -37,7 +37,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.77343581.js"></script>
+<script src="/assets/js/runtime~main.eac039ac.js"></script>
 <script src="/assets/js/main.ec2aff2b.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/security/index.html b/docs/security/index.html
index 75f4aeb..f6dbd02 100644
--- a/docs/security/index.html
+++ b/docs/security/index.html
@@ -9,7 +9,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.77343581.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.eac039ac.js" as="script">
 <link rel="preload" href="/assets/js/main.ec2aff2b.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -136,7 +136,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.77343581.js"></script>
+<script src="/assets/js/runtime~main.eac039ac.js"></script>
 <script src="/assets/js/main.ec2aff2b.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/index.html b/index.html
index 9cd07f5..3e1e965 100644
--- a/index.html
+++ b/index.html
@@ -9,7 +9,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.77343581.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.eac039ac.js" as="script">
 <link rel="preload" href="/assets/js/main.ec2aff2b.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -37,7 +37,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.77343581.js"></script>
+<script src="/assets/js/runtime~main.eac039ac.js"></script>
 <script src="/assets/js/main.ec2aff2b.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/markdown-page/index.html b/markdown-page/index.html
index 40747bc..49348cd 100644
--- a/markdown-page/index.html
+++ b/markdown-page/index.html
@@ -9,7 +9,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.77343581.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.eac039ac.js" as="script">
 <link rel="preload" href="/assets/js/main.ec2aff2b.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -37,7 +37,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.77343581.js"></script>
+<script src="/assets/js/runtime~main.eac039ac.js"></script>
 <script src="/assets/js/main.ec2aff2b.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/search/index.html b/search/index.html
index c061f9b..0dca69c 100644
--- a/search/index.html
+++ b/search/index.html
@@ -9,7 +9,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.77343581.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.eac039ac.js" as="script">
 <link rel="preload" href="/assets/js/main.ec2aff2b.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -37,7 +37,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.77343581.js"></script>
+<script src="/assets/js/runtime~main.eac039ac.js"></script>
 <script src="/assets/js/main.ec2aff2b.js"></script>
 </body>
 </html>
\ No newline at end of file