deploying docs: docs: add more warnings for default secrets and docker-compose (#27921)

Co-authored-by: Sam Firke <sfirke@users.noreply.github.com> (apache/superset@594e5a50a31e590f338996c1da2d406578e02125)
diff --git a/404.html b/404.html
index 3135d32..6584bcf 100644
--- a/404.html
+++ b/404.html
@@ -8,7 +8,7 @@
 
 
 <script src="/script/matomo.js"></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.5b9dc742.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.b1319d69.js" as="script">
 <link rel="preload" href="/assets/js/main.5f496079.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -36,7 +36,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.5b9dc742.js"></script>
+<script src="/assets/js/runtime~main.b1319d69.js"></script>
 <script src="/assets/js/main.5f496079.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/assets/js/3c585fdb.d600c7fe.js b/assets/js/3c585fdb.d600c7fe.js
new file mode 100644
index 0000000..1450a7b
--- /dev/null
+++ b/assets/js/3c585fdb.d600c7fe.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkdocs_v_2=self.webpackChunkdocs_v_2||[]).push([[6585],{15680:(e,n,t)=>{t.d(n,{xA:()=>u,yg:()=>c});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 p=a.createContext({}),l=function(e){var n=a.useContext(p),t=n;return e&&(t="function"==typeof e?e(n):i(i({},n),e)),t},u=function(e){var n=l(e.components);return a.createElement(p.Provider,{value:n},e.children)},d="mdxType",g={inlineCode:"code",wrapper:function(e){var n=e.children;return a.createElement(a.Fragment,{},n)}},m=a.forwardRef((function(e,n){var t=e.components,r=e.mdxType,o=e.originalType,p=e.parentName,u=s(e,["components","mdxType","originalType","parentName"]),d=l(t),m=r,c=d["".concat(p,".").concat(m)]||d[m]||g[m]||o;return t?a.createElement(c,i(i({ref:n},u),{},{components:t})):a.createElement(c,i({ref:n},u))}));function c(e,n){var t=arguments,r=n&&n.mdxType;if("string"==typeof e||r){var o=t.length,i=new Array(o);i[0]=m;var s={};for(var p in n)hasOwnProperty.call(n,p)&&(s[p]=n[p]);s.originalType=e,s[d]="string"==typeof e?e:r,i[1]=s;for(var l=2;l<o;l++)i[l]=t[l];return a.createElement.apply(null,i)}return a.createElement.apply(null,t)}m.displayName="MDXCreateElement"},10184:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>p,contentTitle:()=>i,default:()=>g,frontMatter:()=>o,metadata:()=>s,toc:()=>l});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"}},p={},l=[{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}],u={toc:l},d="wrapper";function g(e){let{components:n,...t}=e;return(0,r.yg)(d,(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)("admonition",{title:"Your secret key will be used for securely signing session cookies",type:"caution"},(0,r.yg)("p",{parentName:"admonition"},"and encrypting sensitive information stored in Superset's application metadata database.\nMake sure you are changing this key for your deployment with a strong key."),(0,r.yg)("h4",{parentName:"admonition",id:"rotating-to-a-newer-secret_key"},"Rotating to a newer SECRET_KEY"),(0,r.yg)("p",{parentName:"admonition"},"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",{parentName:"admonition"},(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",{parentName:"admonition"},"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",{parentName:"admonition",id:"using-a-production-metastore"},"Using a production metastore"),(0,r.yg)("p",{parentName:"admonition"},"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",{parentName:"admonition"},"Superset supports the following database engines/versions:"),(0,r.yg)("table",{parentName:"admonition"},(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",{parentName:"admonition"},"Use the following database drivers and connection strings:"),(0,r.yg)("table",{parentName:"admonition"},(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",{parentName:"admonition"},"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",{parentName:"admonition",id:"running-on-a-wsgi-http-server"},"Running on a WSGI HTTP Server"),(0,r.yg)("p",{parentName:"admonition"},"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",{parentName:"admonition"},(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",{parentName:"admonition"},"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",{parentName:"admonition"},"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",{parentName:"admonition"},"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",{parentName:"admonition",id:"https-configuration"},"HTTPS Configuration"),(0,r.yg)("p",{parentName:"admonition"},"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",{parentName:"admonition",id:"configuration-behind-a-load-balancer"},"Configuration Behind a Load Balancer"),(0,r.yg)("p",{parentName:"admonition"},"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",{parentName:"admonition"},"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",{parentName:"admonition"},"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",{parentName:"admonition"},(0,r.yg)("code",{parentName:"pre"},'RequestHeader set X-Forwarded-Proto "https"\n')),(0,r.yg)("h3",{parentName:"admonition",id:"custom-oauth2-configuration"},"Custom OAuth2 Configuration"),(0,r.yg)("p",{parentName:"admonition"},"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",{parentName:"admonition"},"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",{parentName:"admonition"},"First, configure authorization in Superset ",(0,r.yg)("inlineCode",{parentName:"p"},"superset_config.py"),"."),(0,r.yg)("pre",{parentName:"admonition"},(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",{parentName:"admonition"},"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",{parentName:"admonition"},(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",{parentName:"admonition"},"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",{parentName:"admonition"},(0,r.yg)("code",{parentName:"pre"},"from custom_sso_security_manager import CustomSsoSecurityManager\nCUSTOM_SECURITY_MANAGER = CustomSsoSecurityManager\n")),(0,r.yg)("p",{parentName:"admonition"},(0,r.yg)("strong",{parentName:"p"},"Notes")),(0,r.yg)("ul",{parentName:"admonition"},(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",{parentName:"admonition",id:"ldap-authentication"},"LDAP Authentication"),(0,r.yg)("p",{parentName:"admonition"},"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",{parentName:"admonition",id:"mapping-ldap-or-oauth-groups-to-superset-roles"},"Mapping LDAP or OAUTH groups to Superset roles"),(0,r.yg)("p",{parentName:"admonition"},"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",{parentName:"admonition",id:"mapping-oauth-groups-to-superset-roles"},"Mapping OAUTH groups to Superset roles"),(0,r.yg)("p",{parentName:"admonition"},"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",{parentName:"admonition"},(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",{parentName:"admonition",id:"mapping-ldap-groups-to-superset-roles"},"Mapping LDAP groups to Superset roles"),(0,r.yg)("p",{parentName:"admonition"},"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",{parentName:"admonition"},(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",{parentName:"admonition"},"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",{parentName:"admonition",id:"syncing-roles-at-login"},"Syncing roles at login"),(0,r.yg)("p",{parentName:"admonition"},"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",{parentName:"admonition",id:"flask-app-configuration-hook"},"Flask app Configuration Hook"),(0,r.yg)("p",{parentName:"admonition"},(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",{parentName:"admonition"},(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",{parentName:"admonition",id:"feature-flags"},"Feature Flags"),(0,r.yg)("p",{parentName:"admonition"},"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",{parentName:"admonition"},"You can enable or disable features with flag from ",(0,r.yg)("inlineCode",{parentName:"p"},"superset_config.py"),":"),(0,r.yg)("pre",{parentName:"admonition"},(0,r.yg)("code",{parentName:"pre",className:"language-python"},"FEATURE_FLAGS = {\n    'PRESTO_EXPAND_DATA': False,\n}\n")),(0,r.yg)("p",{parentName:"admonition"},"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"),".")))}g.isMDXComponent=!0}}]);
\ No newline at end of file
diff --git a/assets/js/3c585fdb.da186a97.js b/assets/js/3c585fdb.da186a97.js
deleted file mode 100644
index b4da1a4..0000000
--- a/assets/js/3c585fdb.da186a97.js
+++ /dev/null
@@ -1 +0,0 @@
-"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.5b9dc742.js b/assets/js/runtime~main.b1319d69.js
similarity index 98%
rename from assets/js/runtime~main.5b9dc742.js
rename to assets/js/runtime~main.b1319d69.js
index 8d1200c..1c4f8cf 100644
--- a/assets/js/runtime~main.5b9dc742.js
+++ b/assets/js/runtime~main.b1319d69.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:"c71ac3be",217:"5d9f89ba",416:"bbfa475a",435:"e7a48716",491:"c7be7c11",517:"dc8822e4",757:"5a79937a",806:"246f8b0c",921:"1e59b5b9",1043:"6673030e",1121:"173f2a68",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:"b4dd748d",3503:"85c3aadb",3590:"f4cfea6d",3838:"49061a6f",3989:"70accff7",4105:"a3341909",4134:"6a02eb3f",4274:"3d60d144",4315:"2348a423",4411:"5261ec1e",4583:"cdbf2fbd",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:"da1dc91b",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:"5a49355e",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:"c71ac3be",217:"5d9f89ba",416:"bbfa475a",435:"e7a48716",491:"c7be7c11",517:"dc8822e4",757:"5a79937a",806:"246f8b0c",921:"1e59b5b9",1043:"6673030e",1121:"173f2a68",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:"b4dd748d",3503:"85c3aadb",3590:"f4cfea6d",3838:"49061a6f",3989:"70accff7",4105:"a3341909",4134:"6a02eb3f",4274:"3d60d144",4315:"2348a423",4411:"5261ec1e",4583:"cdbf2fbd",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:"d600c7fe",6647:"cb92d343",6682:"030a3a05",6713:"e4787f62",6715:"08174e78",6723:"bd2b6782",6809:"5e2f8122",6903:"4bb5647b",7e3:"da1dc91b",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:"5a49355e",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 6206262..2ce0a4f 100644
--- a/community/index.html
+++ b/community/index.html
@@ -8,7 +8,7 @@
 
 
 <script src="/script/matomo.js"></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.5b9dc742.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.b1319d69.js" as="script">
 <link rel="preload" href="/assets/js/main.5f496079.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -36,7 +36,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.5b9dc742.js"></script>
+<script src="/assets/js/runtime~main.b1319d69.js"></script>
 <script src="/assets/js/main.5f496079.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/api/index.html b/docs/api/index.html
index 0a66b25..d352b81 100644
--- a/docs/api/index.html
+++ b/docs/api/index.html
@@ -8,7 +8,7 @@
 
 
 <script src="/script/matomo.js"></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.5b9dc742.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.b1319d69.js" as="script">
 <link rel="preload" href="/assets/js/main.5f496079.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.5b9dc742.js"></script>
+<script src="/assets/js/runtime~main.b1319d69.js"></script>
 <script src="/assets/js/main.5f496079.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 c15bf03..b41e154 100644
--- a/docs/contributing/contributing-page/index.html
+++ b/docs/contributing/contributing-page/index.html
@@ -8,7 +8,7 @@
 
 
 <script src="/script/matomo.js"></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.5b9dc742.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.b1319d69.js" as="script">
 <link rel="preload" href="/assets/js/main.5f496079.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.5b9dc742.js"></script>
+<script src="/assets/js/runtime~main.b1319d69.js"></script>
 <script src="/assets/js/main.5f496079.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 fcbc3ad..6c97abd 100644
--- a/docs/contributing/conventions-and-typing/index.html
+++ b/docs/contributing/conventions-and-typing/index.html
@@ -8,7 +8,7 @@
 
 
 <script src="/script/matomo.js"></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.5b9dc742.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.b1319d69.js" as="script">
 <link rel="preload" href="/assets/js/main.5f496079.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.5b9dc742.js"></script>
+<script src="/assets/js/runtime~main.b1319d69.js"></script>
 <script src="/assets/js/main.5f496079.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 87b8abe..4744f7f 100644
--- a/docs/contributing/creating-viz-plugins/index.html
+++ b/docs/contributing/creating-viz-plugins/index.html
@@ -8,7 +8,7 @@
 
 
 <script src="/script/matomo.js"></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.5b9dc742.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.b1319d69.js" as="script">
 <link rel="preload" href="/assets/js/main.5f496079.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -52,7 +52,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.5b9dc742.js"></script>
+<script src="/assets/js/runtime~main.b1319d69.js"></script>
 <script src="/assets/js/main.5f496079.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 1c7e960..744ba09 100644
--- a/docs/contributing/hooks-and-linting/index.html
+++ b/docs/contributing/hooks-and-linting/index.html
@@ -8,7 +8,7 @@
 
 
 <script src="/script/matomo.js"></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.5b9dc742.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.b1319d69.js" as="script">
 <link rel="preload" href="/assets/js/main.5f496079.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.5b9dc742.js"></script>
+<script src="/assets/js/runtime~main.b1319d69.js"></script>
 <script src="/assets/js/main.5f496079.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 075af13..fcc1ce9 100644
--- a/docs/contributing/local-backend/index.html
+++ b/docs/contributing/local-backend/index.html
@@ -8,7 +8,7 @@
 
 
 <script src="/script/matomo.js"></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.5b9dc742.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.b1319d69.js" as="script">
 <link rel="preload" href="/assets/js/main.5f496079.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.5b9dc742.js"></script>
+<script src="/assets/js/runtime~main.b1319d69.js"></script>
 <script src="/assets/js/main.5f496079.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 86ad860..81491c0 100644
--- a/docs/contributing/pull-request-guidelines/index.html
+++ b/docs/contributing/pull-request-guidelines/index.html
@@ -8,7 +8,7 @@
 
 
 <script src="/script/matomo.js"></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.5b9dc742.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.b1319d69.js" as="script">
 <link rel="preload" href="/assets/js/main.5f496079.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.5b9dc742.js"></script>
+<script src="/assets/js/runtime~main.b1319d69.js"></script>
 <script src="/assets/js/main.5f496079.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 a4489b7..675c525 100644
--- a/docs/contributing/style-guide/index.html
+++ b/docs/contributing/style-guide/index.html
@@ -8,7 +8,7 @@
 
 
 <script src="/script/matomo.js"></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.5b9dc742.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.b1319d69.js" as="script">
 <link rel="preload" href="/assets/js/main.5f496079.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.5b9dc742.js"></script>
+<script src="/assets/js/runtime~main.b1319d69.js"></script>
 <script src="/assets/js/main.5f496079.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 a335b96..7e8b7c2 100644
--- a/docs/contributing/testing-locally/index.html
+++ b/docs/contributing/testing-locally/index.html
@@ -8,7 +8,7 @@
 
 
 <script src="/script/matomo.js"></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.5b9dc742.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.b1319d69.js" as="script">
 <link rel="preload" href="/assets/js/main.5f496079.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.5b9dc742.js"></script>
+<script src="/assets/js/runtime~main.b1319d69.js"></script>
 <script src="/assets/js/main.5f496079.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 0e8b93c..db3b016 100644
--- a/docs/contributing/translations/index.html
+++ b/docs/contributing/translations/index.html
@@ -8,7 +8,7 @@
 
 
 <script src="/script/matomo.js"></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.5b9dc742.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.b1319d69.js" as="script">
 <link rel="preload" href="/assets/js/main.5f496079.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -67,7 +67,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.5b9dc742.js"></script>
+<script src="/assets/js/runtime~main.b1319d69.js"></script>
 <script src="/assets/js/main.5f496079.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 b7c0564..e78c433 100644
--- a/docs/contributing/types-of-contributions/index.html
+++ b/docs/contributing/types-of-contributions/index.html
@@ -8,7 +8,7 @@
 
 
 <script src="/script/matomo.js"></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.5b9dc742.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.b1319d69.js" as="script">
 <link rel="preload" href="/assets/js/main.5f496079.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.5b9dc742.js"></script>
+<script src="/assets/js/runtime~main.b1319d69.js"></script>
 <script src="/assets/js/main.5f496079.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 0cb647b..41040fa 100644
--- a/docs/creating-charts-dashboards/creating-your-first-dashboard/index.html
+++ b/docs/creating-charts-dashboards/creating-your-first-dashboard/index.html
@@ -8,7 +8,7 @@
 
 
 <script src="/script/matomo.js"></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.5b9dc742.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.b1319d69.js" as="script">
 <link rel="preload" href="/assets/js/main.5f496079.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -79,7 +79,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.5b9dc742.js"></script>
+<script src="/assets/js/runtime~main.b1319d69.js"></script>
 <script src="/assets/js/main.5f496079.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 b5e9c2c..5b2342e 100644
--- a/docs/creating-charts-dashboards/exploring-data/index.html
+++ b/docs/creating-charts-dashboards/exploring-data/index.html
@@ -8,7 +8,7 @@
 
 
 <script src="/script/matomo.js"></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.5b9dc742.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.b1319d69.js" as="script">
 <link rel="preload" href="/assets/js/main.5f496079.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -132,7 +132,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.5b9dc742.js"></script>
+<script src="/assets/js/runtime~main.b1319d69.js"></script>
 <script src="/assets/js/main.5f496079.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 3f66b22..c14261d 100644
--- a/docs/databases/ascend/index.html
+++ b/docs/databases/ascend/index.html
@@ -8,7 +8,7 @@
 
 
 <script src="/script/matomo.js"></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.5b9dc742.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.b1319d69.js" as="script">
 <link rel="preload" href="/assets/js/main.5f496079.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -36,7 +36,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.5b9dc742.js"></script>
+<script src="/assets/js/runtime~main.b1319d69.js"></script>
 <script src="/assets/js/main.5f496079.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 c952173..b9b3db7 100644
--- a/docs/databases/athena/index.html
+++ b/docs/databases/athena/index.html
@@ -8,7 +8,7 @@
 
 
 <script src="/script/matomo.js"></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.5b9dc742.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.b1319d69.js" as="script">
 <link rel="preload" href="/assets/js/main.5f496079.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.5b9dc742.js"></script>
+<script src="/assets/js/runtime~main.b1319d69.js"></script>
 <script src="/assets/js/main.5f496079.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 44e091d..07f467a 100644
--- a/docs/databases/bigquery/index.html
+++ b/docs/databases/bigquery/index.html
@@ -8,7 +8,7 @@
 
 
 <script src="/script/matomo.js"></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.5b9dc742.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.b1319d69.js" as="script">
 <link rel="preload" href="/assets/js/main.5f496079.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.5b9dc742.js"></script>
+<script src="/assets/js/runtime~main.b1319d69.js"></script>
 <script src="/assets/js/main.5f496079.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 02a522b..484b0ef 100644
--- a/docs/databases/clickhouse/index.html
+++ b/docs/databases/clickhouse/index.html
@@ -8,7 +8,7 @@
 
 
 <script src="/script/matomo.js"></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.5b9dc742.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.b1319d69.js" as="script">
 <link rel="preload" href="/assets/js/main.5f496079.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.5b9dc742.js"></script>
+<script src="/assets/js/runtime~main.b1319d69.js"></script>
 <script src="/assets/js/main.5f496079.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 92cfa14..8b54d31 100644
--- a/docs/databases/cockroachdb/index.html
+++ b/docs/databases/cockroachdb/index.html
@@ -8,7 +8,7 @@
 
 
 <script src="/script/matomo.js"></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.5b9dc742.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.b1319d69.js" as="script">
 <link rel="preload" href="/assets/js/main.5f496079.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.5b9dc742.js"></script>
+<script src="/assets/js/runtime~main.b1319d69.js"></script>
 <script src="/assets/js/main.5f496079.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 a11d05a..db76296 100644
--- a/docs/databases/cratedb/index.html
+++ b/docs/databases/cratedb/index.html
@@ -8,7 +8,7 @@
 
 
 <script src="/script/matomo.js"></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.5b9dc742.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.b1319d69.js" as="script">
 <link rel="preload" href="/assets/js/main.5f496079.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.5b9dc742.js"></script>
+<script src="/assets/js/runtime~main.b1319d69.js"></script>
 <script src="/assets/js/main.5f496079.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 47a7c0d..16154b3 100644
--- a/docs/databases/databend/index.html
+++ b/docs/databases/databend/index.html
@@ -8,7 +8,7 @@
 
 
 <script src="/script/matomo.js"></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.5b9dc742.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.b1319d69.js" as="script">
 <link rel="preload" href="/assets/js/main.5f496079.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.5b9dc742.js"></script>
+<script src="/assets/js/runtime~main.b1319d69.js"></script>
 <script src="/assets/js/main.5f496079.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 7830abf..de3d043 100644
--- a/docs/databases/databricks/index.html
+++ b/docs/databases/databricks/index.html
@@ -8,7 +8,7 @@
 
 
 <script src="/script/matomo.js"></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.5b9dc742.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.b1319d69.js" as="script">
 <link rel="preload" href="/assets/js/main.5f496079.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -36,7 +36,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.5b9dc742.js"></script>
+<script src="/assets/js/runtime~main.b1319d69.js"></script>
 <script src="/assets/js/main.5f496079.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 79dba4b..23072ed 100644
--- a/docs/databases/db-connection-ui/index.html
+++ b/docs/databases/db-connection-ui/index.html
@@ -8,7 +8,7 @@
 
 
 <script src="/script/matomo.js"></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.5b9dc742.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.b1319d69.js" as="script">
 <link rel="preload" href="/assets/js/main.5f496079.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -36,7 +36,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.5b9dc742.js"></script>
+<script src="/assets/js/runtime~main.b1319d69.js"></script>
 <script src="/assets/js/main.5f496079.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 b4bbf6c..1311250 100644
--- a/docs/databases/docker-add-drivers/index.html
+++ b/docs/databases/docker-add-drivers/index.html
@@ -8,7 +8,7 @@
 
 
 <script src="/script/matomo.js"></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.5b9dc742.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.b1319d69.js" as="script">
 <link rel="preload" href="/assets/js/main.5f496079.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -36,7 +36,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.5b9dc742.js"></script>
+<script src="/assets/js/runtime~main.b1319d69.js"></script>
 <script src="/assets/js/main.5f496079.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 a981e21..9b6b2db 100644
--- a/docs/databases/doris/index.html
+++ b/docs/databases/doris/index.html
@@ -8,7 +8,7 @@
 
 
 <script src="/script/matomo.js"></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.5b9dc742.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.b1319d69.js" as="script">
 <link rel="preload" href="/assets/js/main.5f496079.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -36,7 +36,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.5b9dc742.js"></script>
+<script src="/assets/js/runtime~main.b1319d69.js"></script>
 <script src="/assets/js/main.5f496079.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 bce0dd1..8cf577c 100644
--- a/docs/databases/dremio/index.html
+++ b/docs/databases/dremio/index.html
@@ -8,7 +8,7 @@
 
 
 <script src="/script/matomo.js"></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.5b9dc742.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.b1319d69.js" as="script">
 <link rel="preload" href="/assets/js/main.5f496079.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.5b9dc742.js"></script>
+<script src="/assets/js/runtime~main.b1319d69.js"></script>
 <script src="/assets/js/main.5f496079.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 71478c7..19cbe32 100644
--- a/docs/databases/drill/index.html
+++ b/docs/databases/drill/index.html
@@ -8,7 +8,7 @@
 
 
 <script src="/script/matomo.js"></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.5b9dc742.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.b1319d69.js" as="script">
 <link rel="preload" href="/assets/js/main.5f496079.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.5b9dc742.js"></script>
+<script src="/assets/js/runtime~main.b1319d69.js"></script>
 <script src="/assets/js/main.5f496079.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 bf2677b..233bb24 100644
--- a/docs/databases/druid/index.html
+++ b/docs/databases/druid/index.html
@@ -8,7 +8,7 @@
 
 
 <script src="/script/matomo.js"></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.5b9dc742.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.b1319d69.js" as="script">
 <link rel="preload" href="/assets/js/main.5f496079.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -49,7 +49,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.5b9dc742.js"></script>
+<script src="/assets/js/runtime~main.b1319d69.js"></script>
 <script src="/assets/js/main.5f496079.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 0252d09..c2293a2 100644
--- a/docs/databases/dynamodb/index.html
+++ b/docs/databases/dynamodb/index.html
@@ -8,7 +8,7 @@
 
 
 <script src="/script/matomo.js"></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.5b9dc742.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.b1319d69.js" as="script">
 <link rel="preload" href="/assets/js/main.5f496079.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -36,7 +36,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.5b9dc742.js"></script>
+<script src="/assets/js/runtime~main.b1319d69.js"></script>
 <script src="/assets/js/main.5f496079.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 35ef67c..425f1f1 100644
--- a/docs/databases/elasticsearch/index.html
+++ b/docs/databases/elasticsearch/index.html
@@ -8,7 +8,7 @@
 
 
 <script src="/script/matomo.js"></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.5b9dc742.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.b1319d69.js" as="script">
 <link rel="preload" href="/assets/js/main.5f496079.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.5b9dc742.js"></script>
+<script src="/assets/js/runtime~main.b1319d69.js"></script>
 <script src="/assets/js/main.5f496079.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 c4fe738..93d2219 100644
--- a/docs/databases/exasol/index.html
+++ b/docs/databases/exasol/index.html
@@ -8,7 +8,7 @@
 
 
 <script src="/script/matomo.js"></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.5b9dc742.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.b1319d69.js" as="script">
 <link rel="preload" href="/assets/js/main.5f496079.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.5b9dc742.js"></script>
+<script src="/assets/js/runtime~main.b1319d69.js"></script>
 <script src="/assets/js/main.5f496079.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 2817f58..5530178 100644
--- a/docs/databases/extra-settings/index.html
+++ b/docs/databases/extra-settings/index.html
@@ -8,7 +8,7 @@
 
 
 <script src="/script/matomo.js"></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.5b9dc742.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.b1319d69.js" as="script">
 <link rel="preload" href="/assets/js/main.5f496079.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.5b9dc742.js"></script>
+<script src="/assets/js/runtime~main.b1319d69.js"></script>
 <script src="/assets/js/main.5f496079.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 f0998de..8761b37 100644
--- a/docs/databases/firebird/index.html
+++ b/docs/databases/firebird/index.html
@@ -8,7 +8,7 @@
 
 
 <script src="/script/matomo.js"></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.5b9dc742.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.b1319d69.js" as="script">
 <link rel="preload" href="/assets/js/main.5f496079.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.5b9dc742.js"></script>
+<script src="/assets/js/runtime~main.b1319d69.js"></script>
 <script src="/assets/js/main.5f496079.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 18594ec..b797be5 100644
--- a/docs/databases/firebolt/index.html
+++ b/docs/databases/firebolt/index.html
@@ -8,7 +8,7 @@
 
 
 <script src="/script/matomo.js"></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.5b9dc742.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.b1319d69.js" as="script">
 <link rel="preload" href="/assets/js/main.5f496079.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -36,7 +36,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.5b9dc742.js"></script>
+<script src="/assets/js/runtime~main.b1319d69.js"></script>
 <script src="/assets/js/main.5f496079.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 61988e0..87082f1 100644
--- a/docs/databases/google-sheets/index.html
+++ b/docs/databases/google-sheets/index.html
@@ -8,7 +8,7 @@
 
 
 <script src="/script/matomo.js"></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.5b9dc742.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.b1319d69.js" as="script">
 <link rel="preload" href="/assets/js/main.5f496079.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.5b9dc742.js"></script>
+<script src="/assets/js/runtime~main.b1319d69.js"></script>
 <script src="/assets/js/main.5f496079.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 c1aeb98..2f4c78e 100644
--- a/docs/databases/hana/index.html
+++ b/docs/databases/hana/index.html
@@ -8,7 +8,7 @@
 
 
 <script src="/script/matomo.js"></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.5b9dc742.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.b1319d69.js" as="script">
 <link rel="preload" href="/assets/js/main.5f496079.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -36,7 +36,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.5b9dc742.js"></script>
+<script src="/assets/js/runtime~main.b1319d69.js"></script>
 <script src="/assets/js/main.5f496079.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 08cfb3c..5d04000 100644
--- a/docs/databases/hive/index.html
+++ b/docs/databases/hive/index.html
@@ -8,7 +8,7 @@
 
 
 <script src="/script/matomo.js"></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.5b9dc742.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.b1319d69.js" as="script">
 <link rel="preload" href="/assets/js/main.5f496079.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -36,7 +36,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.5b9dc742.js"></script>
+<script src="/assets/js/runtime~main.b1319d69.js"></script>
 <script src="/assets/js/main.5f496079.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 c9e2cf0..33fb1a6 100644
--- a/docs/databases/hologres/index.html
+++ b/docs/databases/hologres/index.html
@@ -8,7 +8,7 @@
 
 
 <script src="/script/matomo.js"></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.5b9dc742.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.b1319d69.js" as="script">
 <link rel="preload" href="/assets/js/main.5f496079.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -36,7 +36,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.5b9dc742.js"></script>
+<script src="/assets/js/runtime~main.b1319d69.js"></script>
 <script src="/assets/js/main.5f496079.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 489ecca..cb12ad6 100644
--- a/docs/databases/ibm-db2/index.html
+++ b/docs/databases/ibm-db2/index.html
@@ -8,7 +8,7 @@
 
 
 <script src="/script/matomo.js"></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.5b9dc742.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.b1319d69.js" as="script">
 <link rel="preload" href="/assets/js/main.5f496079.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.5b9dc742.js"></script>
+<script src="/assets/js/runtime~main.b1319d69.js"></script>
 <script src="/assets/js/main.5f496079.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 555bd61..7e5a4bb 100644
--- a/docs/databases/impala/index.html
+++ b/docs/databases/impala/index.html
@@ -8,7 +8,7 @@
 
 
 <script src="/script/matomo.js"></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.5b9dc742.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.b1319d69.js" as="script">
 <link rel="preload" href="/assets/js/main.5f496079.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -36,7 +36,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.5b9dc742.js"></script>
+<script src="/assets/js/runtime~main.b1319d69.js"></script>
 <script src="/assets/js/main.5f496079.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 d972e21..e30b5c2 100644
--- a/docs/databases/installing-database-drivers/index.html
+++ b/docs/databases/installing-database-drivers/index.html
@@ -8,7 +8,7 @@
 
 
 <script src="/script/matomo.js"></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.5b9dc742.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.b1319d69.js" as="script">
 <link rel="preload" href="/assets/js/main.5f496079.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -49,7 +49,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.5b9dc742.js"></script>
+<script src="/assets/js/runtime~main.b1319d69.js"></script>
 <script src="/assets/js/main.5f496079.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 4743998..5a582f9 100644
--- a/docs/databases/kusto/index.html
+++ b/docs/databases/kusto/index.html
@@ -8,7 +8,7 @@
 
 
 <script src="/script/matomo.js"></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.5b9dc742.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.b1319d69.js" as="script">
 <link rel="preload" href="/assets/js/main.5f496079.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.5b9dc742.js"></script>
+<script src="/assets/js/runtime~main.b1319d69.js"></script>
 <script src="/assets/js/main.5f496079.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 8b91002..fa31216 100644
--- a/docs/databases/kylin/index.html
+++ b/docs/databases/kylin/index.html
@@ -8,7 +8,7 @@
 
 
 <script src="/script/matomo.js"></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.5b9dc742.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.b1319d69.js" as="script">
 <link rel="preload" href="/assets/js/main.5f496079.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.5b9dc742.js"></script>
+<script src="/assets/js/runtime~main.b1319d69.js"></script>
 <script src="/assets/js/main.5f496079.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 fc41828..4838c44 100644
--- a/docs/databases/meta-database/index.html
+++ b/docs/databases/meta-database/index.html
@@ -8,7 +8,7 @@
 
 
 <script src="/script/matomo.js"></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.5b9dc742.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.b1319d69.js" as="script">
 <link rel="preload" href="/assets/js/main.5f496079.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -36,7 +36,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.5b9dc742.js"></script>
+<script src="/assets/js/runtime~main.b1319d69.js"></script>
 <script src="/assets/js/main.5f496079.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 f1b53f4..22da528 100644
--- a/docs/databases/mysql/index.html
+++ b/docs/databases/mysql/index.html
@@ -8,7 +8,7 @@
 
 
 <script src="/script/matomo.js"></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.5b9dc742.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.b1319d69.js" as="script">
 <link rel="preload" href="/assets/js/main.5f496079.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.5b9dc742.js"></script>
+<script src="/assets/js/runtime~main.b1319d69.js"></script>
 <script src="/assets/js/main.5f496079.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 27b9f88..a87c0ba 100644
--- a/docs/databases/netezza/index.html
+++ b/docs/databases/netezza/index.html
@@ -8,7 +8,7 @@
 
 
 <script src="/script/matomo.js"></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.5b9dc742.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.b1319d69.js" as="script">
 <link rel="preload" href="/assets/js/main.5f496079.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.5b9dc742.js"></script>
+<script src="/assets/js/runtime~main.b1319d69.js"></script>
 <script src="/assets/js/main.5f496079.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 cf07636..8368a5c 100644
--- a/docs/databases/ocient/index.html
+++ b/docs/databases/ocient/index.html
@@ -8,7 +8,7 @@
 
 
 <script src="/script/matomo.js"></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.5b9dc742.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.b1319d69.js" as="script">
 <link rel="preload" href="/assets/js/main.5f496079.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.5b9dc742.js"></script>
+<script src="/assets/js/runtime~main.b1319d69.js"></script>
 <script src="/assets/js/main.5f496079.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 2040e98..956e034 100644
--- a/docs/databases/oracle/index.html
+++ b/docs/databases/oracle/index.html
@@ -8,7 +8,7 @@
 
 
 <script src="/script/matomo.js"></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.5b9dc742.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.b1319d69.js" as="script">
 <link rel="preload" href="/assets/js/main.5f496079.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.5b9dc742.js"></script>
+<script src="/assets/js/runtime~main.b1319d69.js"></script>
 <script src="/assets/js/main.5f496079.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 bde70fd..956d077 100644
--- a/docs/databases/pinot/index.html
+++ b/docs/databases/pinot/index.html
@@ -8,7 +8,7 @@
 
 
 <script src="/script/matomo.js"></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.5b9dc742.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.b1319d69.js" as="script">
 <link rel="preload" href="/assets/js/main.5f496079.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -36,7 +36,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.5b9dc742.js"></script>
+<script src="/assets/js/runtime~main.b1319d69.js"></script>
 <script src="/assets/js/main.5f496079.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 66742be..5857431 100644
--- a/docs/databases/postgres/index.html
+++ b/docs/databases/postgres/index.html
@@ -8,7 +8,7 @@
 
 
 <script src="/script/matomo.js"></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.5b9dc742.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.b1319d69.js" as="script">
 <link rel="preload" href="/assets/js/main.5f496079.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.5b9dc742.js"></script>
+<script src="/assets/js/runtime~main.b1319d69.js"></script>
 <script src="/assets/js/main.5f496079.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 f1e175f..82a98af 100644
--- a/docs/databases/presto/index.html
+++ b/docs/databases/presto/index.html
@@ -8,7 +8,7 @@
 
 
 <script src="/script/matomo.js"></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.5b9dc742.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.b1319d69.js" as="script">
 <link rel="preload" href="/assets/js/main.5f496079.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.5b9dc742.js"></script>
+<script src="/assets/js/runtime~main.b1319d69.js"></script>
 <script src="/assets/js/main.5f496079.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 00dca2c..e8f942b 100644
--- a/docs/databases/redshift/index.html
+++ b/docs/databases/redshift/index.html
@@ -8,7 +8,7 @@
 
 
 <script src="/script/matomo.js"></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.5b9dc742.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.b1319d69.js" as="script">
 <link rel="preload" href="/assets/js/main.5f496079.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.5b9dc742.js"></script>
+<script src="/assets/js/runtime~main.b1319d69.js"></script>
 <script src="/assets/js/main.5f496079.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 1d4a8ad..219c75a 100644
--- a/docs/databases/risingwave/index.html
+++ b/docs/databases/risingwave/index.html
@@ -8,7 +8,7 @@
 
 
 <script src="/script/matomo.js"></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.5b9dc742.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.b1319d69.js" as="script">
 <link rel="preload" href="/assets/js/main.5f496079.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.5b9dc742.js"></script>
+<script src="/assets/js/runtime~main.b1319d69.js"></script>
 <script src="/assets/js/main.5f496079.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 2b16bda..d5aa132 100644
--- a/docs/databases/rockset/index.html
+++ b/docs/databases/rockset/index.html
@@ -8,7 +8,7 @@
 
 
 <script src="/script/matomo.js"></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.5b9dc742.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.b1319d69.js" as="script">
 <link rel="preload" href="/assets/js/main.5f496079.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.5b9dc742.js"></script>
+<script src="/assets/js/runtime~main.b1319d69.js"></script>
 <script src="/assets/js/main.5f496079.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 74dfec7..63edd6d 100644
--- a/docs/databases/snowflake/index.html
+++ b/docs/databases/snowflake/index.html
@@ -8,7 +8,7 @@
 
 
 <script src="/script/matomo.js"></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.5b9dc742.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.b1319d69.js" as="script">
 <link rel="preload" href="/assets/js/main.5f496079.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.5b9dc742.js"></script>
+<script src="/assets/js/runtime~main.b1319d69.js"></script>
 <script src="/assets/js/main.5f496079.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 d347e06..9bcb9d9 100644
--- a/docs/databases/solr/index.html
+++ b/docs/databases/solr/index.html
@@ -8,7 +8,7 @@
 
 
 <script src="/script/matomo.js"></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.5b9dc742.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.b1319d69.js" as="script">
 <link rel="preload" href="/assets/js/main.5f496079.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.5b9dc742.js"></script>
+<script src="/assets/js/runtime~main.b1319d69.js"></script>
 <script src="/assets/js/main.5f496079.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 0c01956..6a5536e 100644
--- a/docs/databases/spark-sql/index.html
+++ b/docs/databases/spark-sql/index.html
@@ -8,7 +8,7 @@
 
 
 <script src="/script/matomo.js"></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.5b9dc742.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.b1319d69.js" as="script">
 <link rel="preload" href="/assets/js/main.5f496079.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -36,7 +36,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.5b9dc742.js"></script>
+<script src="/assets/js/runtime~main.b1319d69.js"></script>
 <script src="/assets/js/main.5f496079.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 05b80a2..3b647bf 100644
--- a/docs/databases/sql-server/index.html
+++ b/docs/databases/sql-server/index.html
@@ -8,7 +8,7 @@
 
 
 <script src="/script/matomo.js"></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.5b9dc742.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.b1319d69.js" as="script">
 <link rel="preload" href="/assets/js/main.5f496079.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -36,7 +36,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.5b9dc742.js"></script>
+<script src="/assets/js/runtime~main.b1319d69.js"></script>
 <script src="/assets/js/main.5f496079.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 cb87f46..b6c49d3 100644
--- a/docs/databases/starrocks/index.html
+++ b/docs/databases/starrocks/index.html
@@ -8,7 +8,7 @@
 
 
 <script src="/script/matomo.js"></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.5b9dc742.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.b1319d69.js" as="script">
 <link rel="preload" href="/assets/js/main.5f496079.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.5b9dc742.js"></script>
+<script src="/assets/js/runtime~main.b1319d69.js"></script>
 <script src="/assets/js/main.5f496079.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 8e97c2c..f590701 100644
--- a/docs/databases/teradata/index.html
+++ b/docs/databases/teradata/index.html
@@ -8,7 +8,7 @@
 
 
 <script src="/script/matomo.js"></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.5b9dc742.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.b1319d69.js" as="script">
 <link rel="preload" href="/assets/js/main.5f496079.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.5b9dc742.js"></script>
+<script src="/assets/js/runtime~main.b1319d69.js"></script>
 <script src="/assets/js/main.5f496079.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 fd40ba1..153f0d1 100644
--- a/docs/databases/timescaledb/index.html
+++ b/docs/databases/timescaledb/index.html
@@ -8,7 +8,7 @@
 
 
 <script src="/script/matomo.js"></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.5b9dc742.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.b1319d69.js" as="script">
 <link rel="preload" href="/assets/js/main.5f496079.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.5b9dc742.js"></script>
+<script src="/assets/js/runtime~main.b1319d69.js"></script>
 <script src="/assets/js/main.5f496079.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 9f9fd2b..c13bd13 100644
--- a/docs/databases/trino/index.html
+++ b/docs/databases/trino/index.html
@@ -8,7 +8,7 @@
 
 
 <script src="/script/matomo.js"></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.5b9dc742.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.b1319d69.js" as="script">
 <link rel="preload" href="/assets/js/main.5f496079.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.5b9dc742.js"></script>
+<script src="/assets/js/runtime~main.b1319d69.js"></script>
 <script src="/assets/js/main.5f496079.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 f7f555c..4abb554 100644
--- a/docs/databases/vertica/index.html
+++ b/docs/databases/vertica/index.html
@@ -8,7 +8,7 @@
 
 
 <script src="/script/matomo.js"></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.5b9dc742.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.b1319d69.js" as="script">
 <link rel="preload" href="/assets/js/main.5f496079.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.5b9dc742.js"></script>
+<script src="/assets/js/runtime~main.b1319d69.js"></script>
 <script src="/assets/js/main.5f496079.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 891cb52..6301684 100644
--- a/docs/databases/yugabytedb/index.html
+++ b/docs/databases/yugabytedb/index.html
@@ -8,7 +8,7 @@
 
 
 <script src="/script/matomo.js"></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.5b9dc742.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.b1319d69.js" as="script">
 <link rel="preload" href="/assets/js/main.5f496079.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.5b9dc742.js"></script>
+<script src="/assets/js/runtime~main.b1319d69.js"></script>
 <script src="/assets/js/main.5f496079.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 4de5493..a24b39e 100644
--- a/docs/frequently-asked-questions/index.html
+++ b/docs/frequently-asked-questions/index.html
@@ -8,7 +8,7 @@
 
 
 <script src="/script/matomo.js"></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.5b9dc742.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.b1319d69.js" as="script">
 <link rel="preload" href="/assets/js/main.5f496079.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -124,7 +124,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.5b9dc742.js"></script>
+<script src="/assets/js/runtime~main.b1319d69.js"></script>
 <script src="/assets/js/main.5f496079.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 f500f78..78e449b 100644
--- a/docs/installation/alerts-reports/index.html
+++ b/docs/installation/alerts-reports/index.html
@@ -8,7 +8,7 @@
 
 
 <script src="/script/matomo.js"></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.5b9dc742.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.b1319d69.js" as="script">
 <link rel="preload" href="/assets/js/main.5f496079.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -55,7 +55,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.5b9dc742.js"></script>
+<script src="/assets/js/runtime~main.b1319d69.js"></script>
 <script src="/assets/js/main.5f496079.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 9238a5a..0db7cb9 100644
--- a/docs/installation/async-queries-celery/index.html
+++ b/docs/installation/async-queries-celery/index.html
@@ -8,7 +8,7 @@
 
 
 <script src="/script/matomo.js"></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.5b9dc742.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.b1319d69.js" as="script">
 <link rel="preload" href="/assets/js/main.5f496079.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -52,7 +52,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.5b9dc742.js"></script>
+<script src="/assets/js/runtime~main.b1319d69.js"></script>
 <script src="/assets/js/main.5f496079.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 81ab16f..f75b4e2 100644
--- a/docs/installation/cache/index.html
+++ b/docs/installation/cache/index.html
@@ -8,7 +8,7 @@
 
 
 <script src="/script/matomo.js"></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.5b9dc742.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.b1319d69.js" as="script">
 <link rel="preload" href="/assets/js/main.5f496079.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -55,7 +55,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.5b9dc742.js"></script>
+<script src="/assets/js/runtime~main.b1319d69.js"></script>
 <script src="/assets/js/main.5f496079.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 97205c6..eed00ce 100644
--- a/docs/installation/configuring-superset/index.html
+++ b/docs/installation/configuring-superset/index.html
@@ -8,7 +8,7 @@
 
 
 <script src="/script/matomo.js"></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.5b9dc742.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.b1319d69.js" as="script">
 <link rel="preload" href="/assets/js/main.5f496079.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -22,7 +22,8 @@
 configuration settings. Please consult the
 <a href="https://flask-appbuilder.readthedocs.org/en/latest/config.html" target="_blank" rel="noopener noreferrer">Flask App Builder Documentation</a>
 for more information on how to configure it.</p><p>Make sure to change:</p><ul><li><code>SQLALCHEMY_DATABASE_URI</code>: by default it is stored at ~/.superset/superset.db</li><li><code>SECRET_KEY</code>: to a long random string</li></ul><p>If you need to exempt endpoints from CSRF (e.g. if you are running a custom auth postback endpoint),
-you can add the endpoints to <code>WTF_CSRF_EXEMPT_LIST</code>:</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">WTF_CSRF_EXEMPT_LIST = [‘’]</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="specifying-a-secret_key">Specifying a SECRET_KEY<a href="#specifying-a-secret_key" class="hash-link" aria-label="Direct link to Specifying a SECRET_KEY" title="Direct link to Specifying a SECRET_KEY">​</a></h3><h4 class="anchor anchorWithStickyNavbar_LWe7" id="adding-an-initial-secret_key">Adding an initial SECRET_KEY<a href="#adding-an-initial-secret_key" class="hash-link" aria-label="Direct link to Adding an initial SECRET_KEY" title="Direct link to Adding an initial SECRET_KEY">​</a></h4><p>Superset requires a user-specified SECRET_KEY to start up. This requirement was <a href="https://preset.io/blog/superset-security-update-default-secret_key-vulnerability/" target="_blank" rel="noopener noreferrer">added in version 2.1.0 to force secure configurations</a>. Add a strong SECRET_KEY to your <code>superset_config.py</code> file like:</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">SECRET_KEY </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&#x27;YOUR_OWN_RANDOM_GENERATED_SECRET_KEY&#x27;</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>You can generate a strong secure key with <code>openssl rand -base64 42</code>.</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="rotating-to-a-newer-secret_key">Rotating to a newer SECRET_KEY<a href="#rotating-to-a-newer-secret_key" class="hash-link" aria-label="Direct link to Rotating to a newer SECRET_KEY" title="Direct link to Rotating to a newer SECRET_KEY">​</a></h4><p>If you wish to change your existing SECRET_KEY, add the existing SECRET_KEY to your <code>superset_config.py</code> file as
+you can add the endpoints to <code>WTF_CSRF_EXEMPT_LIST</code>:</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">WTF_CSRF_EXEMPT_LIST = [‘’]</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="specifying-a-secret_key">Specifying a SECRET_KEY<a href="#specifying-a-secret_key" class="hash-link" aria-label="Direct link to Specifying a SECRET_KEY" title="Direct link to Specifying a SECRET_KEY">​</a></h3><h4 class="anchor anchorWithStickyNavbar_LWe7" id="adding-an-initial-secret_key">Adding an initial SECRET_KEY<a href="#adding-an-initial-secret_key" class="hash-link" aria-label="Direct link to Adding an initial SECRET_KEY" title="Direct link to Adding an initial SECRET_KEY">​</a></h4><p>Superset requires a user-specified SECRET_KEY to start up. This requirement was <a href="https://preset.io/blog/superset-security-update-default-secret_key-vulnerability/" target="_blank" rel="noopener noreferrer">added in version 2.1.0 to force secure configurations</a>. Add a strong SECRET_KEY to your <code>superset_config.py</code> file like:</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">SECRET_KEY </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&#x27;YOUR_OWN_RANDOM_GENERATED_SECRET_KEY&#x27;</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>You can generate a strong secure key with <code>openssl rand -base64 42</code>.</p><div class="theme-admonition theme-admonition-caution alert alert--warning admonition_LlT9"><div class="admonitionHeading_tbUL"><span class="admonitionIcon_kALy"><svg viewBox="0 0 16 16"><path fill-rule="evenodd" d="M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"></path></svg></span>Your secret key will be used for securely signing session cookies</div><div class="admonitionContent_S0QG"><p>and encrypting sensitive information stored in Superset&#x27;s application metadata database.
+Make sure you are changing this key for your deployment with a strong key.</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="rotating-to-a-newer-secret_key">Rotating to a newer SECRET_KEY<a href="#rotating-to-a-newer-secret_key" class="hash-link" aria-label="Direct link to Rotating to a newer SECRET_KEY" title="Direct link to Rotating to a newer SECRET_KEY">​</a></h4><p>If you wish to change your existing SECRET_KEY, add the existing SECRET_KEY to your <code>superset_config.py</code> file as
 <code>PREVIOUS_SECRET_KEY = </code>and provide your new key as <code>SECRET_KEY =</code>. You can find your current SECRET_KEY with these
 commands - if running Superset with Docker, execute from within the Superset application container:</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">superset shell</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"> current_app</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">print</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">current_app</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">config</span><span class="token punctuation" style="color:#393A34">[</span><span class="token string" style="color:#e3116c">&quot;SECRET_KEY&quot;</span><span class="token punctuation" style="color:#393A34">]</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>Save your <code>superset_config.py</code> with these values and then run <code>superset re-encrypt-secrets</code>.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="using-a-production-metastore">Using a production metastore<a href="#using-a-production-metastore" class="hash-link" aria-label="Direct link to Using a production metastore" title="Direct link to Using a production metastore">​</a></h3><p>By default, Superset is configured to use SQLite, which is a simple and fast way to get started
 (without requiring any installation). However, for production environments,
@@ -60,7 +61,7 @@
 <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
 allow users to enable or disable some features by config. For feature owners, you can add optional
-functionalities in Superset, but will be only affected by a subset of users.</p><p>You can enable or disable features with flag from <code>superset_config.py</code>:</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">FEATURE_FLAGS </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">&#x27;PRESTO_EXPAND_DATA&#x27;</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">False</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>A current list of feature flags can be found in <a href="https://github.com/apache/superset/blob/master/RESOURCES/FEATURE_FLAGS.md" target="_blank" rel="noopener noreferrer">RESOURCES/FEATURE_FLAGS.md</a>.</p></div><footer class="theme-doc-footer docusaurus-mt-lg"><div class="theme-doc-footer-edit-meta-row row"><div class="col"><a href="https://github.com/apache/superset/edit/master/docs/docs/installation/configuring-superset.mdx" target="_blank" rel="noreferrer noopener" class="theme-edit-this-page"><svg fill="currentColor" height="20" width="20" viewBox="0 0 40 40" class="iconEdit_Z9Sw" aria-hidden="true"><g><path d="m34.5 11.7l-3 3.1-6.3-6.3 3.1-3q0.5-0.5 1.2-0.5t1.1 0.5l3.9 3.9q0.5 0.4 0.5 1.1t-0.5 1.2z m-29.5 17.1l18.4-18.5 6.3 6.3-18.4 18.4h-6.3v-6.2z"></path></g></svg>Edit this page</a></div><div class="col lastUpdated_vwxv"></div></div></footer></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages"><a class="pagination-nav__link pagination-nav__link--prev" href="/docs/installation/installing-superset-using-docker-compose"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">Installing Locally Using Docker Compose</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/docs/installation/networking-settings"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">Additional Networking Settings</div></a></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#configuring-superset" class="table-of-contents__link toc-highlight">Configuring Superset</a><ul><li><a href="#configuration" class="table-of-contents__link toc-highlight">Configuration</a></li><li><a href="#specifying-a-secret_key" class="table-of-contents__link toc-highlight">Specifying a SECRET_KEY</a></li><li><a href="#using-a-production-metastore" class="table-of-contents__link toc-highlight">Using a production metastore</a></li><li><a href="#running-on-a-wsgi-http-server" class="table-of-contents__link toc-highlight">Running on a WSGI HTTP Server</a></li><li><a href="#https-configuration" class="table-of-contents__link toc-highlight">HTTPS Configuration</a></li><li><a href="#configuration-behind-a-load-balancer" class="table-of-contents__link toc-highlight">Configuration Behind a Load Balancer</a></li><li><a href="#custom-oauth2-configuration" class="table-of-contents__link toc-highlight">Custom OAuth2 Configuration</a></li><li><a href="#ldap-authentication" class="table-of-contents__link toc-highlight">LDAP Authentication</a></li><li><a href="#mapping-ldap-or-oauth-groups-to-superset-roles" class="table-of-contents__link toc-highlight">Mapping LDAP or OAUTH groups to Superset roles</a></li><li><a href="#flask-app-configuration-hook" class="table-of-contents__link toc-highlight">Flask app Configuration Hook</a></li><li><a href="#feature-flags" class="table-of-contents__link toc-highlight">Feature Flags</a></li></ul></li></ul></div></div></div></div></main></div></div><footer class="footer"><div class="container container-fluid"><div class="footer__bottom text--center"><div class="footer__copyright">
+functionalities in Superset, but will be only affected by a subset of users.</p><p>You can enable or disable features with flag from <code>superset_config.py</code>:</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">FEATURE_FLAGS </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">&#x27;PRESTO_EXPAND_DATA&#x27;</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">False</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>A current list of feature flags can be found in <a href="https://github.com/apache/superset/blob/master/RESOURCES/FEATURE_FLAGS.md" target="_blank" rel="noopener noreferrer">RESOURCES/FEATURE_FLAGS.md</a>.</p></div></div></div><footer class="theme-doc-footer docusaurus-mt-lg"><div class="theme-doc-footer-edit-meta-row row"><div class="col"><a href="https://github.com/apache/superset/edit/master/docs/docs/installation/configuring-superset.mdx" target="_blank" rel="noreferrer noopener" class="theme-edit-this-page"><svg fill="currentColor" height="20" width="20" viewBox="0 0 40 40" class="iconEdit_Z9Sw" aria-hidden="true"><g><path d="m34.5 11.7l-3 3.1-6.3-6.3 3.1-3q0.5-0.5 1.2-0.5t1.1 0.5l3.9 3.9q0.5 0.4 0.5 1.1t-0.5 1.2z m-29.5 17.1l18.4-18.5 6.3 6.3-18.4 18.4h-6.3v-6.2z"></path></g></svg>Edit this page</a></div><div class="col lastUpdated_vwxv"></div></div></footer></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages"><a class="pagination-nav__link pagination-nav__link--prev" href="/docs/installation/installing-superset-using-docker-compose"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">Installing Locally Using Docker Compose</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/docs/installation/networking-settings"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">Additional Networking Settings</div></a></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#configuring-superset" class="table-of-contents__link toc-highlight">Configuring Superset</a><ul><li><a href="#configuration" class="table-of-contents__link toc-highlight">Configuration</a></li><li><a href="#specifying-a-secret_key" class="table-of-contents__link toc-highlight">Specifying a SECRET_KEY</a></li></ul></li></ul></div></div></div></div></main></div></div><footer class="footer"><div class="container container-fluid"><div class="footer__bottom text--center"><div class="footer__copyright">
           <div class="footer__applitools">
             We use &nbsp;<a href="https://applitools.com/" target="_blank" rel="nofollow"><img src="/img/applitools.png" title="Applitools"></a>
           </div>
@@ -83,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.5b9dc742.js"></script>
+<script src="/assets/js/runtime~main.b1319d69.js"></script>
 <script src="/assets/js/main.5f496079.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 d2381c8..05ec95a 100644
--- a/docs/installation/docker/index.html
+++ b/docs/installation/docker/index.html
@@ -8,7 +8,7 @@
 
 
 <script src="/script/matomo.js"></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.5b9dc742.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.b1319d69.js" as="script">
 <link rel="preload" href="/assets/js/main.5f496079.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -69,7 +69,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.5b9dc742.js"></script>
+<script src="/assets/js/runtime~main.b1319d69.js"></script>
 <script src="/assets/js/main.5f496079.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 399c006..33f0e0b 100644
--- a/docs/installation/event-logging/index.html
+++ b/docs/installation/event-logging/index.html
@@ -8,7 +8,7 @@
 
 
 <script src="/script/matomo.js"></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.5b9dc742.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.b1319d69.js" as="script">
 <link rel="preload" href="/assets/js/main.5f496079.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.5b9dc742.js"></script>
+<script src="/assets/js/runtime~main.b1319d69.js"></script>
 <script src="/assets/js/main.5f496079.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 e12903f..47cef63 100644
--- a/docs/installation/installing-superset-from-pypi/index.html
+++ b/docs/installation/installing-superset-from-pypi/index.html
@@ -8,7 +8,7 @@
 
 
 <script src="/script/matomo.js"></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.5b9dc742.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.b1319d69.js" as="script">
 <link rel="preload" href="/assets/js/main.5f496079.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -49,7 +49,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.5b9dc742.js"></script>
+<script src="/assets/js/runtime~main.b1319d69.js"></script>
 <script src="/assets/js/main.5f496079.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 7e99b96..7dbbfc7 100644
--- a/docs/installation/installing-superset-using-docker-compose/index.html
+++ b/docs/installation/installing-superset-using-docker-compose/index.html
@@ -8,7 +8,7 @@
 
 
 <script src="/script/matomo.js"></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.5b9dc742.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.b1319d69.js" as="script">
 <link rel="preload" href="/assets/js/main.5f496079.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -127,7 +127,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.5b9dc742.js"></script>
+<script src="/assets/js/runtime~main.b1319d69.js"></script>
 <script src="/assets/js/main.5f496079.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 2060fd0..0a70e79 100644
--- a/docs/installation/networking-settings/index.html
+++ b/docs/installation/networking-settings/index.html
@@ -8,7 +8,7 @@
 
 
 <script src="/script/matomo.js"></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.5b9dc742.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.b1319d69.js" as="script">
 <link rel="preload" href="/assets/js/main.5f496079.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.5b9dc742.js"></script>
+<script src="/assets/js/runtime~main.b1319d69.js"></script>
 <script src="/assets/js/main.5f496079.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 79a2ff4..cabd8a0 100644
--- a/docs/installation/running-on-kubernetes/index.html
+++ b/docs/installation/running-on-kubernetes/index.html
@@ -8,7 +8,7 @@
 
 
 <script src="/script/matomo.js"></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.5b9dc742.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.b1319d69.js" as="script">
 <link rel="preload" href="/assets/js/main.5f496079.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.5b9dc742.js"></script>
+<script src="/assets/js/runtime~main.b1319d69.js"></script>
 <script src="/assets/js/main.5f496079.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 6e19e18..f6fe7da 100644
--- a/docs/installation/setup-ssh-tunneling/index.html
+++ b/docs/installation/setup-ssh-tunneling/index.html
@@ -8,7 +8,7 @@
 
 
 <script src="/script/matomo.js"></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.5b9dc742.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.b1319d69.js" as="script">
 <link rel="preload" href="/assets/js/main.5f496079.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -36,7 +36,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.5b9dc742.js"></script>
+<script src="/assets/js/runtime~main.b1319d69.js"></script>
 <script src="/assets/js/main.5f496079.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 db0c253..0230996 100644
--- a/docs/installation/sql-templating/index.html
+++ b/docs/installation/sql-templating/index.html
@@ -8,7 +8,7 @@
 
 
 <script src="/script/matomo.js"></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.5b9dc742.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.b1319d69.js" as="script">
 <link rel="preload" href="/assets/js/main.5f496079.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -75,7 +75,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.5b9dc742.js"></script>
+<script src="/assets/js/runtime~main.b1319d69.js"></script>
 <script src="/assets/js/main.5f496079.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 8cdea85..5ef7cd7 100644
--- a/docs/installation/upgrading-superset/index.html
+++ b/docs/installation/upgrading-superset/index.html
@@ -8,7 +8,7 @@
 
 
 <script src="/script/matomo.js"></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.5b9dc742.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.b1319d69.js" as="script">
 <link rel="preload" href="/assets/js/main.5f496079.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.5b9dc742.js"></script>
+<script src="/assets/js/runtime~main.b1319d69.js"></script>
 <script src="/assets/js/main.5f496079.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/intro/index.html b/docs/intro/index.html
index e7e6fe3..5c7f355 100644
--- a/docs/intro/index.html
+++ b/docs/intro/index.html
@@ -8,7 +8,7 @@
 
 
 <script src="/script/matomo.js"></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.5b9dc742.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.b1319d69.js" as="script">
 <link rel="preload" href="/assets/js/main.5f496079.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.5b9dc742.js"></script>
+<script src="/assets/js/runtime~main.b1319d69.js"></script>
 <script src="/assets/js/main.5f496079.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 81968cb..218ff37 100644
--- a/docs/miscellaneous/chart-params/index.html
+++ b/docs/miscellaneous/chart-params/index.html
@@ -8,7 +8,7 @@
 
 
 <script src="/script/matomo.js"></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.5b9dc742.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.b1319d69.js" as="script">
 <link rel="preload" href="/assets/js/main.5f496079.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -36,7 +36,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.5b9dc742.js"></script>
+<script src="/assets/js/runtime~main.b1319d69.js"></script>
 <script src="/assets/js/main.5f496079.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 34d3d19..60fb102 100644
--- a/docs/miscellaneous/country-map-tools/index.html
+++ b/docs/miscellaneous/country-map-tools/index.html
@@ -8,7 +8,7 @@
 
 
 <script src="/script/matomo.js"></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.5b9dc742.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.b1319d69.js" as="script">
 <link rel="preload" href="/assets/js/main.5f496079.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.5b9dc742.js"></script>
+<script src="/assets/js/runtime~main.b1319d69.js"></script>
 <script src="/assets/js/main.5f496079.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 a4c9e75..5403169 100644
--- a/docs/miscellaneous/importing-exporting-datasources/index.html
+++ b/docs/miscellaneous/importing-exporting-datasources/index.html
@@ -8,7 +8,7 @@
 
 
 <script src="/script/matomo.js"></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.5b9dc742.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.b1319d69.js" as="script">
 <link rel="preload" href="/assets/js/main.5f496079.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.5b9dc742.js"></script>
+<script src="/assets/js/runtime~main.b1319d69.js"></script>
 <script src="/assets/js/main.5f496079.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 da77dba..aea851c 100644
--- a/docs/miscellaneous/issue-codes/index.html
+++ b/docs/miscellaneous/issue-codes/index.html
@@ -8,7 +8,7 @@
 
 
 <script src="/script/matomo.js"></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.5b9dc742.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.b1319d69.js" as="script">
 <link rel="preload" href="/assets/js/main.5f496079.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -65,7 +65,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.5b9dc742.js"></script>
+<script src="/assets/js/runtime~main.b1319d69.js"></script>
 <script src="/assets/js/main.5f496079.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 7eddbf1..438d936 100644
--- a/docs/miscellaneous/timezones/index.html
+++ b/docs/miscellaneous/timezones/index.html
@@ -8,7 +8,7 @@
 
 
 <script src="/script/matomo.js"></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.5b9dc742.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.b1319d69.js" as="script">
 <link rel="preload" href="/assets/js/main.5f496079.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -36,7 +36,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.5b9dc742.js"></script>
+<script src="/assets/js/runtime~main.b1319d69.js"></script>
 <script src="/assets/js/main.5f496079.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/quickstart/index.html b/docs/quickstart/index.html
index 396d49b..2e4cb8e 100644
--- a/docs/quickstart/index.html
+++ b/docs/quickstart/index.html
@@ -8,7 +8,7 @@
 
 
 <script src="/script/matomo.js"></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.5b9dc742.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.b1319d69.js" as="script">
 <link rel="preload" href="/assets/js/main.5f496079.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.5b9dc742.js"></script>
+<script src="/assets/js/runtime~main.b1319d69.js"></script>
 <script src="/assets/js/main.5f496079.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 aa6b8fb..590c40d 100644
--- a/docs/security/cves/index.html
+++ b/docs/security/cves/index.html
@@ -8,7 +8,7 @@
 
 
 <script src="/script/matomo.js"></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.5b9dc742.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.b1319d69.js" as="script">
 <link rel="preload" href="/assets/js/main.5f496079.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -36,7 +36,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.5b9dc742.js"></script>
+<script src="/assets/js/runtime~main.b1319d69.js"></script>
 <script src="/assets/js/main.5f496079.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/security/index.html b/docs/security/index.html
index 25e09cd..f17eb2f 100644
--- a/docs/security/index.html
+++ b/docs/security/index.html
@@ -8,7 +8,7 @@
 
 
 <script src="/script/matomo.js"></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.5b9dc742.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.b1319d69.js" as="script">
 <link rel="preload" href="/assets/js/main.5f496079.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -135,7 +135,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.5b9dc742.js"></script>
+<script src="/assets/js/runtime~main.b1319d69.js"></script>
 <script src="/assets/js/main.5f496079.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/index.html b/index.html
index 9485144..b6ca1c2 100644
--- a/index.html
+++ b/index.html
@@ -8,7 +8,7 @@
 
 
 <script src="/script/matomo.js"></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.5b9dc742.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.b1319d69.js" as="script">
 <link rel="preload" href="/assets/js/main.5f496079.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -36,7 +36,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.5b9dc742.js"></script>
+<script src="/assets/js/runtime~main.b1319d69.js"></script>
 <script src="/assets/js/main.5f496079.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/markdown-page/index.html b/markdown-page/index.html
index 378bb32..e80627d 100644
--- a/markdown-page/index.html
+++ b/markdown-page/index.html
@@ -8,7 +8,7 @@
 
 
 <script src="/script/matomo.js"></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.5b9dc742.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.b1319d69.js" as="script">
 <link rel="preload" href="/assets/js/main.5f496079.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -36,7 +36,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.5b9dc742.js"></script>
+<script src="/assets/js/runtime~main.b1319d69.js"></script>
 <script src="/assets/js/main.5f496079.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/search/index.html b/search/index.html
index 54385eb..4960b59 100644
--- a/search/index.html
+++ b/search/index.html
@@ -8,7 +8,7 @@
 
 
 <script src="/script/matomo.js"></script><link rel="stylesheet" href="/assets/css/styles.0bab7dfe.css">
-<link rel="preload" href="/assets/js/runtime~main.5b9dc742.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.b1319d69.js" as="script">
 <link rel="preload" href="/assets/js/main.5f496079.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -36,7 +36,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.5b9dc742.js"></script>
+<script src="/assets/js/runtime~main.b1319d69.js"></script>
 <script src="/assets/js/main.5f496079.js"></script>
 </body>
 </html>
\ No newline at end of file