@tableau/mcp-server 1.12.0 → 1.12.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/build/index.js CHANGED
@@ -1,20 +1,20 @@
1
1
  #!/usr/bin/env node
2
- var pa=Object.defineProperty;var ma=(t,e)=>{for(var r in e)pa(t,r,{get:e[r],enumerable:!0})};import{StdioServerTransport as qp}from"@modelcontextprotocol/sdk/server/stdio.js";import jp from"dotenv";import{existsSync as ga}from"fs";import{join as ba}from"path";import{fileURLToPath as ya}from"url";var Or=["list-datasources","list-workbooks","list-views","query-datasource","get-datasource-metadata","get-workbook","get-view-data","get-view-image","list-all-pulse-metric-definitions","list-pulse-metric-definitions-from-definition-ids","list-pulse-metrics-from-metric-definition-id","list-pulse-metrics-from-metric-ids","list-pulse-metric-subscriptions","generate-pulse-metric-value-insight-bundle","search-content"],fa=["datasource","workbook","view","pulse","content-exploration"],Mr={datasource:["list-datasources","get-datasource-metadata","query-datasource"],workbook:["list-workbooks","get-workbook"],view:["list-views","get-view-data","get-view-image"],pulse:["list-all-pulse-metric-definitions","list-pulse-metric-definitions-from-definition-ids","list-pulse-metrics-from-metric-definition-id","list-pulse-metrics-from-metric-ids","list-pulse-metric-subscriptions","generate-pulse-metric-value-insight-bundle"],"content-exploration":["search-content"]};function Nr(t){return!!Or.find(e=>e===t)}function Fr(t){return!!fa.find(e=>e===t)}var ha=["stdio","http"];function Zo(t){return!!ha.find(e=>e===t)}function ue(t,e){if(!t)throw new Error(e||"Invariant Violation")}var wa=ya(new URL(".",import.meta.url)),Ta=10*60*1e3,Yo=60*60*1e3,Xo=30*24*60*60*1e3,Aa=365.25*24*60*60*1e3,Ea=["pat","direct-trust","oauth"];function _a(t){return!!Ea.find(e=>e===t)}var qr=class{auth;server;transport;sslKey;sslCert;httpPort;corsOriginConfig;siteName;patName;patValue;jwtSubClaim;connectedAppClientId;connectedAppSecretId;connectedAppSecretValue;jwtAdditionalPayload;datasourceCredentials;defaultLogLevel;disableLogMasking;includeTools;excludeTools;maxResultLimit;disableQueryDatasourceFilterValidation;disableMetadataApiRequests;enableServerLogging;serverLogDirectory;boundedContext;oauth;constructor(){let e=va(process.env),{AUTH:r,SERVER:o,SITE_NAME:i,TRANSPORT:n,SSL_KEY:s,SSL_CERT:a,HTTP_PORT_ENV_VAR_NAME:d,CORS_ORIGIN_CONFIG:l,PAT_NAME:c,PAT_VALUE:m,JWT_SUB_CLAIM:g,CONNECTED_APP_CLIENT_ID:w,CONNECTED_APP_SECRET_ID:f,CONNECTED_APP_SECRET_VALUE:b,JWT_ADDITIONAL_PAYLOAD:y,DATASOURCE_CREDENTIALS:S,DEFAULT_LOG_LEVEL:P,DISABLE_LOG_MASKING:A,INCLUDE_TOOLS:R,EXCLUDE_TOOLS:x,MAX_RESULT_LIMIT:q,DISABLE_QUERY_DATASOURCE_FILTER_VALIDATION:U,DISABLE_METADATA_API_REQUESTS:le,ENABLE_SERVER_LOGGING:me,SERVER_LOG_DIRECTORY:Ae,INCLUDE_PROJECT_IDS:Se,INCLUDE_DATASOURCE_IDS:ne,INCLUDE_WORKBOOK_IDS:ce,DANGEROUSLY_DISABLE_OAUTH:Q,OAUTH_ISSUER:G,OAUTH_JWE_PRIVATE_KEY:Ce,OAUTH_JWE_PRIVATE_KEY_PATH:_,OAUTH_JWE_PRIVATE_KEY_PASSPHRASE:C,OAUTH_REDIRECT_URI:z,OAUTH_CLIENT_ID_SECRET_PAIRS:K,OAUTH_AUTHORIZATION_CODE_TIMEOUT_MS:N,OAUTH_ACCESS_TOKEN_TIMEOUT_MS:oe,OAUTH_REFRESH_TOKEN_TIMEOUT_MS:be}=e;if(this.siteName=i??"",this.sslKey=s?.trim()??"",this.sslCert=a?.trim()??"",this.httpPort=Qt(e[d?.trim()||"PORT"],{defaultValue:3927,minValue:1,maxValue:65535}),this.corsOriginConfig=Ca(l?.trim()??""),this.datasourceCredentials=S??"",this.defaultLogLevel=P??"debug",this.disableLogMasking=A==="true",this.disableQueryDatasourceFilterValidation=U==="true",this.disableMetadataApiRequests=le==="true",this.enableServerLogging=me==="true",this.serverLogDirectory=Ae||ba(wa,"logs"),this.boundedContext={projectIds:Ur(Se),datasourceIds:Ur(ne),workbookIds:Ur(ce)},this.boundedContext.projectIds?.size===0)throw new Error("When set, the environment variable INCLUDE_PROJECT_IDS must have at least one value");if(this.boundedContext.datasourceIds?.size===0)throw new Error("When set, the environment variable INCLUDE_DATASOURCE_IDS must have at least one value");if(this.boundedContext.workbookIds?.size===0)throw new Error("When set, the environment variable INCLUDE_WORKBOOK_IDS must have at least one value");let Z=Q==="true";if(this.oauth={enabled:Z?!1:!!G,issuer:G??"",redirectUri:z||(G?`${G}/Callback`:""),jwePrivateKey:Ce??"",jwePrivateKeyPath:_??"",jwePrivateKeyPassphrase:C||void 0,authzCodeTimeoutMs:Qt(N,{defaultValue:Ta,minValue:0,maxValue:Yo}),accessTokenTimeoutMs:Qt(oe,{defaultValue:Yo,minValue:0,maxValue:Xo}),refreshTokenTimeoutMs:Qt(be,{defaultValue:Xo,minValue:0,maxValue:Aa}),clientIdSecretPairs:K?K.split(",").reduce((Ee,ee)=>{let[J,Jo]=ee.split(":");return J&&Jo&&(Ee[J]=Jo),Ee},{}):null},this.auth=_a(r)?r:this.oauth.enabled?"oauth":"pat",this.transport=Zo(n)?n:this.oauth.enabled?"http":"stdio",this.transport==="http"&&!Z&&!this.oauth.issuer)throw new Error('OAUTH_ISSUER must be set when TRANSPORT is "http" unless DANGEROUSLY_DISABLE_OAUTH is "true"');if(this.auth==="oauth"){if(Z)throw new Error('When AUTH is "oauth", DANGEROUSLY_DISABLE_OAUTH cannot be "true"');if(!this.oauth.issuer)throw new Error('When AUTH is "oauth", OAUTH_ISSUER must be set')}else ue(o,"The environment variable SERVER is not set"),Sa(o);if(this.oauth.enabled){if(ue(this.oauth.redirectUri,"The environment variable OAUTH_REDIRECT_URI is not set"),!this.oauth.jwePrivateKey&&!this.oauth.jwePrivateKeyPath)throw new Error("One of the environment variables: OAUTH_JWE_PRIVATE_KEY_PATH or OAUTH_JWE_PRIVATE_KEY must be set");if(this.oauth.jwePrivateKey&&this.oauth.jwePrivateKeyPath)throw new Error("Only one of the environment variables: OAUTH_JWE_PRIVATE_KEY or OAUTH_JWE_PRIVATE_KEY_PATH must be set");if(this.oauth.jwePrivateKeyPath&&process.env.TABLEAU_MCP_TEST!=="true"&&!ga(this.oauth.jwePrivateKeyPath))throw new Error(`OAuth JWE private key path does not exist: ${this.oauth.jwePrivateKeyPath}`);if(this.transport==="stdio")throw new Error('TRANSPORT must be "http" when OAUTH_ISSUER is set')}let X=q?parseInt(q):NaN;if(this.maxResultLimit=isNaN(X)||X<=0?null:X,this.includeTools=R?R.split(",").flatMap(Ee=>{let ee=Ee.trim();return Nr(ee)?ee:Fr(ee)?Mr[ee]:[]}):[],this.excludeTools=x?x.split(",").flatMap(Ee=>{let ee=Ee.trim();return Nr(ee)?ee:Fr(ee)?Mr[ee]:[]}):[],this.includeTools.length>0&&this.excludeTools.length>0)throw new Error("Cannot include and exclude tools simultaneously");this.auth==="pat"?(ue(c,"The environment variable PAT_NAME is not set"),ue(m,"The environment variable PAT_VALUE is not set")):this.auth==="direct-trust"&&(ue(g,"The environment variable JWT_SUB_CLAIM is not set"),ue(w,"The environment variable CONNECTED_APP_CLIENT_ID is not set"),ue(f,"The environment variable CONNECTED_APP_SECRET_ID is not set"),ue(b,"The environment variable CONNECTED_APP_SECRET_VALUE is not set")),this.server=o??"",this.patName=c??"",this.patValue=m??"",this.jwtSubClaim=g??"",this.connectedAppClientId=w??"",this.connectedAppSecretId=f??"",this.connectedAppSecretValue=b??"",this.jwtAdditionalPayload=y||"{}"}};function Sa(t){if(!t.startsWith("https://"))throw new Error(`The environment variable SERVER must start with "https://": ${t}`);try{let e=new URL(t)}catch(e){let r=e instanceof Error?e.message:String(e);throw new Error(`The environment variable SERVER is not a valid URL: ${t} -- ${r}`)}}function Ca(t){if(!t)return!0;if(t.match(/^true|false$/i))return t.toLowerCase()==="true";if(t==="*")return"*";if(t.startsWith("[")&&t.endsWith("]"))try{return JSON.parse(t).map(r=>new URL(r).origin)}catch{throw new Error(`The environment variable CORS_ORIGIN_CONFIG is not a valid array of URLs: ${t}`)}try{return new URL(t).origin}catch{throw new Error(`The environment variable CORS_ORIGIN_CONFIG is not a valid URL: ${t}`)}}function Ur(t){return t===void 0?null:new Set(t.trim().split(",").map(e=>e.trim()).filter(Boolean))}function va(t){return Object.entries(t).reduce((e,[r,o])=>(o?.startsWith("${user_config.")?e[r]="":e[r]=o,e),{})}function Qt(t,{defaultValue:e,minValue:r,maxValue:o}={defaultValue:0,minValue:Number.NEGATIVE_INFINITY,maxValue:Number.POSITIVE_INFINITY}){if(!t)return e;let i=parseFloat(t);return isNaN(i)||r!==void 0&&i<r||o!==void 0&&i>o?e:i}var E=()=>new qr;var jr=["debug","info","notice","warning","error","critical","alert","emergency"],bt="debug",ei;function ti(t){return!!jr.find(e=>e===t)}var Ke=(t,e,{silent:r=!1}={})=>{bt!==e&&(bt=e,r||de.notice(t,`Logging level set to: ${e}`))},ri=t=>{ei=t},de={debug:ve("debug"),info:ve("info"),notice:ve("notice"),warning:ve("warning"),error:ve("error"),critical:ve("critical"),alert:ve("alert"),emergency:ve("emergency")},Pe=(t=bt)=>jr.indexOf(t)>=jr.indexOf(bt),Le=t=>{process.env.TABLEAU_MCP_TEST!=="true"&&(t=t.endsWith(`
2
+ var Ca=Object.defineProperty;var Ra=(t,e)=>{for(var r in e)Ca(t,r,{get:e[r],enumerable:!0})};import{StdioServerTransport as lm}from"@modelcontextprotocol/sdk/server/stdio.js";import cm from"dotenv";import{existsSync as ka}from"fs";import{join as Pa}from"path";import{fileURLToPath as Da}from"url";var jr=["list-datasources","list-workbooks","list-views","query-datasource","get-datasource-metadata","get-workbook","get-view-data","get-view-image","list-all-pulse-metric-definitions","list-pulse-metric-definitions-from-definition-ids","list-pulse-metrics-from-metric-definition-id","list-pulse-metrics-from-metric-ids","list-pulse-metric-subscriptions","generate-pulse-metric-value-insight-bundle","search-content"],xa=["datasource","workbook","view","pulse","content-exploration"],Vr={datasource:["list-datasources","get-datasource-metadata","query-datasource"],workbook:["list-workbooks","get-workbook"],view:["list-views","get-view-data","get-view-image"],pulse:["list-all-pulse-metric-definitions","list-pulse-metric-definitions-from-definition-ids","list-pulse-metrics-from-metric-definition-id","list-pulse-metrics-from-metric-ids","list-pulse-metric-subscriptions","generate-pulse-metric-value-insight-bundle"],"content-exploration":["search-content"]};function Br(t){return!!jr.find(e=>e===t)}function zr(t){return!!xa.find(e=>e===t)}var Ia=["stdio","http"];function ni(t){return!!Ia.find(e=>e===t)}function ce(t,e){if(!t)throw new Error(e||"Invariant Violation")}var La=Da(new URL(".",import.meta.url)),Oa=10*60*1e3,ai=60*60*1e3,li=30*24*60*60*1e3,Ma=365.25*24*60*60*1e3,Na=["pat","direct-trust","oauth"];function Fa(t){return!!Na.find(e=>e===t)}var Hr=class{auth;server;transport;sslKey;sslCert;httpPort;corsOriginConfig;trustProxyConfig;siteName;patName;patValue;jwtSubClaim;connectedAppClientId;connectedAppSecretId;connectedAppSecretValue;jwtAdditionalPayload;datasourceCredentials;defaultLogLevel;disableLogMasking;includeTools;excludeTools;maxResultLimit;disableQueryDatasourceFilterValidation;disableMetadataApiRequests;disableSessionManagement;enableServerLogging;serverLogDirectory;boundedContext;tableauServerVersionCheckIntervalInHours;oauth;constructor(){let e=Va(process.env),{AUTH:r,SERVER:o,SITE_NAME:i,TRANSPORT:n,SSL_KEY:s,SSL_CERT:a,HTTP_PORT_ENV_VAR_NAME:c,CORS_ORIGIN_CONFIG:l,TRUST_PROXY_CONFIG:u,PAT_NAME:p,PAT_VALUE:g,JWT_SUB_CLAIM:b,CONNECTED_APP_CLIENT_ID:f,CONNECTED_APP_SECRET_ID:y,CONNECTED_APP_SECRET_VALUE:w,JWT_ADDITIONAL_PAYLOAD:v,DATASOURCE_CREDENTIALS:D,DEFAULT_LOG_LEVEL:A,DISABLE_LOG_MASKING:x,INCLUDE_TOOLS:R,EXCLUDE_TOOLS:j,MAX_RESULT_LIMIT:F,DISABLE_QUERY_DATASOURCE_FILTER_VALIDATION:ae,DISABLE_METADATA_API_REQUESTS:pe,DISABLE_SESSION_MANAGEMENT:Ae,ENABLE_SERVER_LOGGING:_e,SERVER_LOG_DIRECTORY:se,INCLUDE_PROJECT_IDS:le,INCLUDE_DATASOURCE_IDS:$,INCLUDE_WORKBOOK_IDS:J,TABLEAU_SERVER_VERSION_CHECK_INTERVAL_IN_HOURS:Se,DANGEROUSLY_DISABLE_OAUTH:S,OAUTH_ISSUER:_,OAUTH_JWE_PRIVATE_KEY:z,OAUTH_JWE_PRIVATE_KEY_PATH:K,OAUTH_JWE_PRIVATE_KEY_PASSPHRASE:U,OAUTH_REDIRECT_URI:te,OAUTH_CLIENT_ID_SECRET_PAIRS:me,OAUTH_AUTHORIZATION_CODE_TIMEOUT_MS:Y,OAUTH_ACCESS_TOKEN_TIMEOUT_MS:re,OAUTH_REFRESH_TOKEN_TIMEOUT_MS:er}=e;if(this.siteName=i??"",this.sslKey=s?.trim()??"",this.sslCert=a?.trim()??"",this.httpPort=At(e[c?.trim()||"PORT"],{defaultValue:3927,minValue:1,maxValue:65535}),this.corsOriginConfig=qa(l?.trim()??""),this.trustProxyConfig=ja(u?.trim()??""),this.datasourceCredentials=D??"",this.defaultLogLevel=A??"debug",this.disableLogMasking=x==="true",this.disableQueryDatasourceFilterValidation=ae==="true",this.disableMetadataApiRequests=pe==="true",this.disableSessionManagement=Ae==="true",this.enableServerLogging=_e==="true",this.serverLogDirectory=se||Pa(La,"logs"),this.boundedContext={projectIds:Wr(le),datasourceIds:Wr($),workbookIds:Wr(J)},this.boundedContext.projectIds?.size===0)throw new Error("When set, the environment variable INCLUDE_PROJECT_IDS must have at least one value");if(this.boundedContext.datasourceIds?.size===0)throw new Error("When set, the environment variable INCLUDE_DATASOURCE_IDS must have at least one value");if(this.boundedContext.workbookIds?.size===0)throw new Error("When set, the environment variable INCLUDE_WORKBOOK_IDS must have at least one value");this.tableauServerVersionCheckIntervalInHours=At(Se,{defaultValue:1,minValue:1,maxValue:24*7});let Le=S==="true";if(this.oauth={enabled:Le?!1:!!_,issuer:_??"",redirectUri:te||(_?`${_}/Callback`:""),jwePrivateKey:z??"",jwePrivateKeyPath:K??"",jwePrivateKeyPassphrase:U||void 0,authzCodeTimeoutMs:At(Y,{defaultValue:Oa,minValue:0,maxValue:ai}),accessTokenTimeoutMs:At(re,{defaultValue:ai,minValue:0,maxValue:li}),refreshTokenTimeoutMs:At(er,{defaultValue:li,minValue:0,maxValue:Ma}),clientIdSecretPairs:me?me.split(",").reduce((Ye,fe)=>{let[ii,si]=fe.split(":");return ii&&si&&(Ye[ii]=si),Ye},{}):null},this.auth=Fa(r)?r:this.oauth.enabled?"oauth":"pat",this.transport=ni(n)?n:this.oauth.enabled?"http":"stdio",this.transport==="http"&&!Le&&!this.oauth.issuer)throw new Error('OAUTH_ISSUER must be set when TRANSPORT is "http" unless DANGEROUSLY_DISABLE_OAUTH is "true"');if(this.auth==="oauth"){if(Le)throw new Error('When AUTH is "oauth", DANGEROUSLY_DISABLE_OAUTH cannot be "true"');if(!this.oauth.issuer)throw new Error('When AUTH is "oauth", OAUTH_ISSUER must be set')}else ce(o,"The environment variable SERVER is not set"),Ua(o);if(this.oauth.enabled){if(ce(this.oauth.redirectUri,"The environment variable OAUTH_REDIRECT_URI is not set"),!this.oauth.jwePrivateKey&&!this.oauth.jwePrivateKeyPath)throw new Error("One of the environment variables: OAUTH_JWE_PRIVATE_KEY_PATH or OAUTH_JWE_PRIVATE_KEY must be set");if(this.oauth.jwePrivateKey&&this.oauth.jwePrivateKeyPath)throw new Error("Only one of the environment variables: OAUTH_JWE_PRIVATE_KEY or OAUTH_JWE_PRIVATE_KEY_PATH must be set");if(this.oauth.jwePrivateKeyPath&&process.env.TABLEAU_MCP_TEST!=="true"&&!ka(this.oauth.jwePrivateKeyPath))throw new Error(`OAuth JWE private key path does not exist: ${this.oauth.jwePrivateKeyPath}`);if(this.transport==="stdio")throw new Error('TRANSPORT must be "http" when OAUTH_ISSUER is set')}let Q=F?parseInt(F):NaN;if(this.maxResultLimit=isNaN(Q)||Q<=0?null:Q,this.includeTools=R?R.split(",").flatMap(Ye=>{let fe=Ye.trim();return Br(fe)?fe:zr(fe)?Vr[fe]:[]}):[],this.excludeTools=j?j.split(",").flatMap(Ye=>{let fe=Ye.trim();return Br(fe)?fe:zr(fe)?Vr[fe]:[]}):[],this.includeTools.length>0&&this.excludeTools.length>0)throw new Error("Cannot include and exclude tools simultaneously");this.auth==="pat"?(ce(p,"The environment variable PAT_NAME is not set"),ce(g,"The environment variable PAT_VALUE is not set")):this.auth==="direct-trust"&&(ce(b,"The environment variable JWT_SUB_CLAIM is not set"),ce(f,"The environment variable CONNECTED_APP_CLIENT_ID is not set"),ce(y,"The environment variable CONNECTED_APP_SECRET_ID is not set"),ce(w,"The environment variable CONNECTED_APP_SECRET_VALUE is not set")),this.server=o??"",this.patName=p??"",this.patValue=g??"",this.jwtSubClaim=b??"",this.connectedAppClientId=f??"",this.connectedAppSecretId=y??"",this.connectedAppSecretValue=w??"",this.jwtAdditionalPayload=v||"{}"}};function Ua(t){if(!t.startsWith("https://"))throw new Error(`The environment variable SERVER must start with "https://": ${t}`);try{let e=new URL(t)}catch(e){let r=e instanceof Error?e.message:String(e);throw new Error(`The environment variable SERVER is not a valid URL: ${t} -- ${r}`)}}function qa(t){if(!t)return!0;if(t.match(/^true|false$/i))return t.toLowerCase()==="true";if(t==="*")return"*";if(t.startsWith("[")&&t.endsWith("]"))try{return JSON.parse(t).map(r=>new URL(r).origin)}catch{throw new Error(`The environment variable CORS_ORIGIN_CONFIG is not a valid array of URLs: ${t}`)}try{return new URL(t).origin}catch{throw new Error(`The environment variable CORS_ORIGIN_CONFIG is not a valid URL: ${t}`)}}function ja(t){return t?t.match(/^true|false$/i)?t.toLowerCase()==="true":t.match(/^\d+$/)?parseInt(t,10):t:null}function Wr(t){return t===void 0?null:new Set(t.trim().split(",").map(e=>e.trim()).filter(Boolean))}function Va(t){return Object.entries(t).reduce((e,[r,o])=>(o?.startsWith("${user_config.")?e[r]="":e[r]=o,e),{})}function At(t,{defaultValue:e,minValue:r,maxValue:o}={defaultValue:0,minValue:Number.NEGATIVE_INFINITY,maxValue:Number.POSITIVE_INFINITY}){if(!t)return e;let i=parseFloat(t);return isNaN(i)||r!==void 0&&i<r||o!==void 0&&i>o?e:i}var E=()=>new Hr;var Gr=["debug","info","notice","warning","error","critical","alert","emergency"],Et="debug",ci;function ui(t){return!!Gr.find(e=>e===t)}var Xe=(t,e,{silent:r=!1}={})=>{Et!==e&&(Et=e,r||ue.notice(t,`Logging level set to: ${e}`))},di=t=>{ci=t},ue={debug:ve("debug"),info:ve("info"),notice:ve("notice"),warning:ve("warning"),error:ve("error"),critical:ve("critical"),alert:ve("alert"),emergency:ve("emergency")},Oe=(t=Et)=>Gr.indexOf(t)>=Gr.indexOf(Et),Me=t=>{process.env.TABLEAU_MCP_TEST!=="true"&&(t=t.endsWith(`
3
3
  `)?t:`${t}
4
- `,process.stderr.write(t))},oi=({requestId:t,toolName:e,args:r,username:o})=>({type:"tool",requestId:t,...o?{username:o}:{},tool:{name:e,...r!==void 0?{args:r}:{}}});function ve(t){return async(e,r,{logger:o,requestId:i}={logger:e.name})=>{if(ei?.log({message:r,level:t,logger:o}),!!Pe(t))return e.server.notification({method:"notifications/message",params:{level:t,logger:o,data:JSON.stringify({timestamp:new Date().toISOString(),currentLogLevel:bt,message:r},null,2)}},{relatedRequestId:i})}}import{appendFile as Ra}from"node:fs/promises";import{existsSync as xa,mkdirSync as Ia}from"fs";import{join as ka}from"path";function W(t){if(t instanceof Error)return t.message;try{return JSON.stringify(t)??"undefined"}catch{return`${t}`}}var Kt=class{_logDirectory;_fileMutexes=new Map;constructor({logDirectory:e}){this._logDirectory=e,xa(this._logDirectory)||Ia(this._logDirectory,{recursive:!0})}async log(e){let r=new Date().toISOString(),o=`${new Date(new Date().setMinutes(0,0,0)).toISOString().replace(/[:.]/g,"-")}.log`,i=ka(this._logDirectory,o),n=i,a=(this._fileMutexes.get(n)??Promise.resolve()).then(async()=>{try{await Ra(i,JSON.stringify({timestamp:r,...e})+`
5
- `)}catch(d){Le(`Failed to write to log file ${i}: ${W(d)}`)}});this._fileMutexes.set(n,a),a.finally(()=>{this._fileMutexes.get(n)===a&&this._fileMutexes.delete(n)}),await a}};import{McpServer as dp}from"@modelcontextprotocol/sdk/server/mcp.js";import{SetLevelRequestSchema as pp}from"@modelcontextprotocol/sdk/types.js";var ii={name:"@tableau/mcp-server",description:"An MCP server for Tableau, providing a suite of tools that will make it easier for developers to build AI applications that integrate with Tableau.",version:"1.12.0",repository:{type:"git",url:"git+https://github.com/tableau/tableau-mcp.git"},homepage:"https://github.com/tableau/tableau-mcp",bugs:"https://github.com/tableau/tableau-mcp/issues",author:"Tableau",type:"module",license:"Apache-2.0",keywords:["tableau","mcp"],bin:{"tableau-mcp-server":"./build/index.js"},scripts:{":build":"npx rimraf ./build && esbuild src/index.ts --bundle --packages=external --platform=node --format=esm --minify --outdir=build --sourcemap",build:"run-s :build exec-perms","build:watch":"npm run :build -- --watch","build:docker":"docker build -t tableau-mcp .",":build:mcpb":"npx -y @anthropic-ai/mcpb pack . tableau-mcp.mcpb","build:mcpb":"run-s build:manifest:script build:manifest :build:mcpb","build:manifest":"node build/scripts/createClaudeMcpBundleManifest.mjs","build:manifest:script":"esbuild src/scripts/createClaudeMcpBundleManifest.ts --bundle --platform=node --format=esm --outdir=build/scripts --sourcemap=inline --out-extension:.js=.mjs","start:http":"node build/index.js","start:http:docker":"docker run -p 3927:3927 -i --rm --env-file env.list tableau-mcp",lint:"npm exec eslint",inspect:"npx @modelcontextprotocol/inspector --config config.json --server tableau",":inspect:http":"npx @modelcontextprotocol/inspector --config config.http.json --server tableau","inspect:http":"run-p start:http :inspect:http","inspect:docker":"npx @modelcontextprotocol/inspector --config config.docker.json --server tableau","inspect:docker:http":"run-p start:http:docker :inspect:http","build:inspect":"run-s build inspect","build:inspect:docker":"run-s build:docker inspect:docker","build:inspect:docker:http":"run-s build:docker inspect:docker:http","exec-perms":"shx chmod +x build/*.js",test:"vitest --config ./vitest.config.ts","test:e2e":"vitest --config ./vitest.config.e2e.ts","test:eval":"vitest --config ./vitest.config.eval.ts","test:oauth":"vitest --config ./vitest.config.oauth.ts",coverage:"vitest run --config ./vitest.config.ts --coverage","version:major":"npm version major --no-git-tag-version","version:minor":"npm version minor --no-git-tag-version","version:patch":"npm version patch --no-git-tag-version"},dependencies:{"@modelcontextprotocol/sdk":"^1.12.1","@zodios/core":"^10.9.6",cors:"^2.8.5",dotenv:"^16.5.0",express:"^5.1.0","fast-levenshtein":"^3.0.0",jose:"^6.0.12","ts-results-es":"^5.0.1",zod:"^3.24.3","zod-validation-error":"^4.0.1"},devDependencies:{"@anthropic-ai/mcpb":"^1.0.0","@eslint/eslintrc":"^3.3.1","@eslint/js":"^9.25.1","@modelcontextprotocol/inspector":"^0.16.6","@openai/agents":"^0.1.9","@types/cors":"^2.8.19","@types/eslint__js":"^8.42.3","@types/express":"^5.0.3","@types/fast-levenshtein":"^0.0.1","@types/node":"^22.15.3","@types/supertest":"^6.0.3","@typescript-eslint/eslint-plugin":"^8.31.1","@typescript-eslint/parser":"^8.31.1","@vitest/coverage-v8":"^3.1.3",esbuild:"^0.25.5",eslint:"^9.25.1","eslint-config-prettier":"^10.1.2","eslint-plugin-prettier":"^5.2.6","eslint-plugin-simple-import-sort":"^12.1.1","npm-run-all":"^4.1.5",openai:"^5.23.2",prettier:"^3.5.3",rimraf:"^6.0.1",shx:"^0.4.0",supertest:"^7.1.4",typescript:"^5.8.3","typescript-eslint":"^8.31.1",vitest:"^3.1.3"},engines:{node:">=22.7.5"}};import{Ok as pd}from"ts-results-es";import{z as on}from"zod";import{Err as si,Ok as Pa}from"ts-results-es";var ni=t=>{let e=li(t);if(e.isErr())return t;let r=e.value;return Pe("debug")?(r.data?.credentials&&(r.data.credentials="<redacted>"),Array.isArray(r?.data?.datasource?.connections)&&r.data.datasource.connections.forEach(i=>{i.connectionUsername="<redacted>",i.connectionPassword="<redacted>"}),r.headers?.["X-Tableau-Auth"]&&(r.headers["X-Tableau-Auth"]="<redacted>"),r.params?.user_id&&(r.params.user_id="<redacted>")):(delete r.data,delete r.headers,delete r.params),r},ai=t=>{let e=li(t);if(e.isErr())return t;let r=e.value;return Pe("debug")?r.data?.credentials&&(r.data.credentials="<redacted>"):(delete r.data,delete r.headers),r};function li(t){try{return Pa(structuredClone(t))}catch(e){if(e instanceof Error)return si(e);let r=W(e);return Le(`Could not clone object, notification may not be sanitized! Error: ${r}`),si(new Error(r))}}function Jt(t){return{method:t.method??"UNKNOWN METHOD",url:t.url??"UNKNOWN URL",headers:t.headers,data:t.data,params:t.params}}function Zt(t){return{url:t.config.url??"UNKNOWN URL",status:t.status,headers:t.headers,data:t.data}}import{Zodios as pi}from"@zodios/core";import{randomUUID as La}from"node:crypto";import{SignJWT as Oa}from"jose";async function ci({username:t,connectedApp:e,scopes:r,additionalPayload:o}){let i={alg:"HS256",typ:"JWT",kid:e.secretId},n={jti:La(),iss:e.clientId,aud:"tableau",sub:t,scp:[...r],iat:Math.floor(Date.now()/1e3)-5,exp:Math.floor(Date.now()/1e3)+5*60,...o};return await new Oa(n).setProtectedHeader(i).sign(new TextEncoder().encode(e.secretValue))}import{makeApi as Ma,makeEndpoint as di}from"@zodios/core";import{z as ye}from"zod";import{z as Oe}from"zod";var ui=Oe.object({credentials:Oe.object({site:Oe.object({id:Oe.string()}),user:Oe.object({id:Oe.string()}),token:Oe.string()})});var Na=ye.object({credentials:ye.object({site:ye.object({contentUrl:ye.string()})}).and(ye.object({personalAccessTokenName:ye.string(),personalAccessTokenSecret:ye.string()}).or(ye.object({jwt:ye.string()})))}),Fa=di({method:"post",path:"/auth/signin",alias:"signIn",description:"Signs in with Tableau credentials.",response:ui,parameters:[{name:"credentials",type:"Body",schema:Na}]}),Ua=di({method:"post",path:"/auth/signout",alias:"signOut",description:"Signs you out of the current session. This call invalidates the authentication token that is created by a call to Sign In.",response:ye.void()}),qa=Ma([Fa,Ua]),Vr=[...qa];var Me=class{_apiClient;constructor(e){this._apiClient=e}get interceptors(){return this._apiClient.axios.interceptors}};var H=class extends Me{_creds;get authHeader(){if(!this._creds)throw new Error("Authenticate by calling signIn() first");return{headers:{"X-Tableau-Auth":this._creds.token}}}get userId(){if(!this._creds)throw new Error("Authenticate by calling signIn() first");return this._creds.user.id}constructor(e,r){super(e),this._creds=r}};var yt=class extends Me{constructor(e){super(new pi(e,Vr))}signIn=async e=>(await this._apiClient.signIn({credentials:{site:{contentUrl:e.siteName},...await(async()=>{switch(e.type){case"pat":return{personalAccessTokenName:e.patName,personalAccessTokenSecret:e.patValue};case"direct-trust":return{jwt:await ci({username:e.username,connectedApp:{clientId:e.clientId,secretId:e.secretId,secretValue:e.secretValue},scopes:e.scopes,additionalPayload:e.additionalPayload})}}})()}})).credentials},Yt=class extends H{constructor(e,r){super(new pi(e,Vr),r)}signOut=async()=>{await this._apiClient.signOut(void 0,{...this.authHeader})}};import{Zodios as Ga}from"@zodios/core";import{makeApi as Ba,makeEndpoint as za}from"@zodios/core";import{z as Je}from"zod";import{z as k}from"zod";var ja=k.enum(["hitsTotal","hitsSmallSpanTotal","hitsMediumSpanTotal","hitsLargeSpanTotal","downstreamWorkbookCount"]),mi=k.array(k.object({method:ja,sortDirection:k.enum(["asc","desc"]).default("asc").optional()})).nonempty(),fi=k.enum(["lens","datasource","virtualconnection","collection","project","flow","datarole","table","database","view","workbook"]),hi=k.union([k.array(k.string().datetime()).nonempty(),k.object({startDate:k.string().datetime(),endDate:k.string().datetime().optional()}).strict(),k.object({startDate:k.string().datetime().optional(),endDate:k.string().datetime()}).strict()]),Br=k.object({contentTypes:k.array(fi).nonempty(),ownerIds:k.array(k.number().int()).nonempty(),modifiedTime:hi}).partial(),gi=k.union([Br.extend({contentTypes:k.array(fi).nonempty()}).strict(),Br.extend({ownerIds:k.array(k.number().int()).nonempty()}).strict(),Br.extend({modifiedTime:hi}).strict()]),Va=k.object({uri:k.string(),content:k.record(k.string(),k.unknown())}),bi=k.object({next:k.string(),prev:k.string(),pageIndex:k.number().int(),startIndex:k.number().int(),total:k.number().int(),limit:k.number().int(),items:k.array(Va)}).partial();var Wa=za({method:"get",path:"/search",alias:"searchContent",description:"Searches across all supported content types for objects relevant to the search expression specified in the querystring of the request URI.",parameters:[{name:"terms",type:"Query",schema:Je.string().optional()},{name:"page",type:"Query",schema:Je.number().int().optional()},{name:"limit",type:"Query",schema:Je.number().int().optional()},{name:"order_by",type:"Query",schema:Je.string().optional()},{name:"filter",type:"Query",schema:Je.string().optional()}],response:Je.object({hits:bi})}),Ha=Ba([Wa]),yi=[...Ha];var wt=class extends H{constructor(e,r){super(new Ga(e,yi),r)}searchContent=async e=>(Object.entries(e).forEach(([o,i])=>{i===void 0&&delete e[o]}),(await this._apiClient.searchContent({queries:e,...this.authHeader})).hits)};import{Zodios as Za}from"@zodios/core";import{makeApi as $a,makeEndpoint as Ti}from"@zodios/core";import{z as Ne}from"zod";import{z as er}from"zod";import{z as zr}from"zod";var Xt=zr.object({name:zr.string(),id:zr.string()});var Wr=er.object({id:er.string(),name:er.string(),description:er.string().optional(),project:Xt});import{z as tr}from"zod";var Ze=tr.object({pageNumber:tr.coerce.number(),pageSize:tr.coerce.number(),totalAvailable:tr.coerce.number()});import{z as wi}from"zod";var Ye=[{name:"pageSize",type:"Query",schema:wi.number().optional(),description:"The number of items to return in one response. The minimum is 1. The maximum is 1000. The default is 100."},{name:"pageNumber",type:"Query",schema:wi.number().optional(),description:"The offset for paging. The default is 1."}];var Qa=Ti({method:"get",path:"/sites/:siteId/datasources",alias:"listDatasources",description:"Returns a list of published data sources on the specified site. Supports a filter string as a query parameter in the format field:operator:value.",parameters:[...Ye,{name:"siteId",type:"Path",schema:Ne.string()},{name:"filter",type:"Query",schema:Ne.string().optional(),description:"Filter string in the format field:operator:value (e.g., name:eq:Project Views)"}],response:Ne.object({pagination:Ze,datasources:Ne.object({datasource:Ne.optional(Ne.array(Wr))})})}),Ka=Ti({method:"get",path:"/sites/:siteId/datasources/:datasourceId",alias:"queryDatasource",description:"Returns information about the specified data source.",response:Ne.object({datasource:Wr})}),Ja=$a([Qa,Ka]),Ai=[...Ja];var Tt=class extends H{constructor(e,r){super(new Za(e,Ai),r)}listDatasources=async({siteId:e,filter:r,pageSize:o,pageNumber:i})=>{let n=await this._apiClient.listDatasources({params:{siteId:e},queries:{filter:r,pageSize:o,pageNumber:i},...this.authHeader});return{pagination:n.pagination,datasources:n.datasources.datasource??[]}};queryDatasource=async({siteId:e,datasourceId:r})=>(await this._apiClient.queryDatasource({params:{siteId:e,datasourceId:r},...this.authHeader})).datasource};import{Zodios as ol}from"@zodios/core";import{makeApi as Ya,makeEndpoint as Xa}from"@zodios/core";import{z as D}from"zod";var el=D.object({data:D.object({publishedDatasources:D.array(D.object({name:D.string().nullable(),description:D.string().nullable(),owner:D.object({name:D.string().nullable()}),fields:D.array(D.object({name:D.string(),isHidden:D.boolean().nullable(),description:D.string().nullable(),descriptionInherited:D.array(D.object({attribute:D.string(),value:D.string().nullable()}).nullable()).nullable(),fullyQualifiedName:D.string(),__typename:D.string(),dataCategory:D.string().nullish(),role:D.string().nullish(),dataType:D.string().nullish(),defaultFormat:D.string().nullish(),semanticRole:D.string().nullish(),aggregation:D.string().nullish(),aggregationParam:D.string().nullish(),formula:D.string().nullish(),isAutoGenerated:D.boolean().nullish(),hasUserReference:D.boolean().nullish(),binSize:D.number().nullish(),hasOther:D.boolean().nullish(),delimiter:D.string().nullish(),combinationType:D.string().nullish()}))}))})}),tl=Xa({method:"post",path:"/graphql",alias:"graphql",response:el,parameters:[{name:"query",type:"Body",schema:D.object({query:D.string()})}]}),rl=Ya([tl]),Ei=[...rl];var At=class extends H{constructor(e,r){super(new ol(e,Ei),r)}graphql=async e=>await this._apiClient.graphql({query:e},{...this.authHeader})};import{Zodios as cu}from"@zodios/core";import{Err as ks,Ok as uu}from"ts-results-es";function Et(t,e){return function(){return t.apply(e,arguments)}}var{toString:il}=Object.prototype,{getPrototypeOf:Gr}=Object,{iterator:or,toStringTag:Si}=Symbol,ir=(t=>e=>{let r=il.call(e);return t[r]||(t[r]=r.slice(8,-1).toLowerCase())})(Object.create(null)),fe=t=>(t=t.toLowerCase(),e=>ir(e)===t),sr=t=>e=>typeof e===t,{isArray:et}=Array,Xe=sr("undefined");function _t(t){return t!==null&&!Xe(t)&&t.constructor!==null&&!Xe(t.constructor)&&ie(t.constructor.isBuffer)&&t.constructor.isBuffer(t)}var Ci=fe("ArrayBuffer");function sl(t){let e;return typeof ArrayBuffer<"u"&&ArrayBuffer.isView?e=ArrayBuffer.isView(t):e=t&&t.buffer&&Ci(t.buffer),e}var nl=sr("string"),ie=sr("function"),vi=sr("number"),St=t=>t!==null&&typeof t=="object",al=t=>t===!0||t===!1,rr=t=>{if(ir(t)!=="object")return!1;let e=Gr(t);return(e===null||e===Object.prototype||Object.getPrototypeOf(e)===null)&&!(Si in t)&&!(or in t)},ll=t=>{if(!St(t)||_t(t))return!1;try{return Object.keys(t).length===0&&Object.getPrototypeOf(t)===Object.prototype}catch{return!1}},cl=fe("Date"),ul=fe("File"),dl=fe("Blob"),pl=fe("FileList"),ml=t=>St(t)&&ie(t.pipe),fl=t=>{let e;return t&&(typeof FormData=="function"&&t instanceof FormData||ie(t.append)&&((e=ir(t))==="formdata"||e==="object"&&ie(t.toString)&&t.toString()==="[object FormData]"))},hl=fe("URLSearchParams"),[gl,bl,yl,wl]=["ReadableStream","Request","Response","Headers"].map(fe),Tl=t=>t.trim?t.trim():t.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"");function Ct(t,e,{allOwnKeys:r=!1}={}){if(t===null||typeof t>"u")return;let o,i;if(typeof t!="object"&&(t=[t]),et(t))for(o=0,i=t.length;o<i;o++)e.call(null,t[o],o,t);else{if(_t(t))return;let n=r?Object.getOwnPropertyNames(t):Object.keys(t),s=n.length,a;for(o=0;o<s;o++)a=n[o],e.call(null,t[a],a,t)}}function Ri(t,e){if(_t(t))return null;e=e.toLowerCase();let r=Object.keys(t),o=r.length,i;for(;o-- >0;)if(i=r[o],e===i.toLowerCase())return i;return null}var Fe=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:global,xi=t=>!Xe(t)&&t!==Fe;function Hr(){let{caseless:t,skipUndefined:e}=xi(this)&&this||{},r={},o=(i,n)=>{let s=t&&Ri(r,n)||n;rr(r[s])&&rr(i)?r[s]=Hr(r[s],i):rr(i)?r[s]=Hr({},i):et(i)?r[s]=i.slice():(!e||!Xe(i))&&(r[s]=i)};for(let i=0,n=arguments.length;i<n;i++)arguments[i]&&Ct(arguments[i],o);return r}var Al=(t,e,r,{allOwnKeys:o}={})=>(Ct(e,(i,n)=>{r&&ie(i)?t[n]=Et(i,r):t[n]=i},{allOwnKeys:o}),t),El=t=>(t.charCodeAt(0)===65279&&(t=t.slice(1)),t),_l=(t,e,r,o)=>{t.prototype=Object.create(e.prototype,o),t.prototype.constructor=t,Object.defineProperty(t,"super",{value:e.prototype}),r&&Object.assign(t.prototype,r)},Sl=(t,e,r,o)=>{let i,n,s,a={};if(e=e||{},t==null)return e;do{for(i=Object.getOwnPropertyNames(t),n=i.length;n-- >0;)s=i[n],(!o||o(s,t,e))&&!a[s]&&(e[s]=t[s],a[s]=!0);t=r!==!1&&Gr(t)}while(t&&(!r||r(t,e))&&t!==Object.prototype);return e},Cl=(t,e,r)=>{t=String(t),(r===void 0||r>t.length)&&(r=t.length),r-=e.length;let o=t.indexOf(e,r);return o!==-1&&o===r},vl=t=>{if(!t)return null;if(et(t))return t;let e=t.length;if(!vi(e))return null;let r=new Array(e);for(;e-- >0;)r[e]=t[e];return r},Rl=(t=>e=>t&&e instanceof t)(typeof Uint8Array<"u"&&Gr(Uint8Array)),xl=(t,e)=>{let o=(t&&t[or]).call(t),i;for(;(i=o.next())&&!i.done;){let n=i.value;e.call(t,n[0],n[1])}},Il=(t,e)=>{let r,o=[];for(;(r=t.exec(e))!==null;)o.push(r);return o},kl=fe("HTMLFormElement"),Dl=t=>t.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,function(r,o,i){return o.toUpperCase()+i}),_i=(({hasOwnProperty:t})=>(e,r)=>t.call(e,r))(Object.prototype),Pl=fe("RegExp"),Ii=(t,e)=>{let r=Object.getOwnPropertyDescriptors(t),o={};Ct(r,(i,n)=>{let s;(s=e(i,n,t))!==!1&&(o[n]=s||i)}),Object.defineProperties(t,o)},Ll=t=>{Ii(t,(e,r)=>{if(ie(t)&&["arguments","caller","callee"].indexOf(r)!==-1)return!1;let o=t[r];if(ie(o)){if(e.enumerable=!1,"writable"in e){e.writable=!1;return}e.set||(e.set=()=>{throw Error("Can not rewrite read-only method '"+r+"'")})}})},Ol=(t,e)=>{let r={},o=i=>{i.forEach(n=>{r[n]=!0})};return et(t)?o(t):o(String(t).split(e)),r},Ml=()=>{},Nl=(t,e)=>t!=null&&Number.isFinite(t=+t)?t:e;function Fl(t){return!!(t&&ie(t.append)&&t[Si]==="FormData"&&t[or])}var Ul=t=>{let e=new Array(10),r=(o,i)=>{if(St(o)){if(e.indexOf(o)>=0)return;if(_t(o))return o;if(!("toJSON"in o)){e[i]=o;let n=et(o)?[]:{};return Ct(o,(s,a)=>{let d=r(s,i+1);!Xe(d)&&(n[a]=d)}),e[i]=void 0,n}}return o};return r(t,0)},ql=fe("AsyncFunction"),jl=t=>t&&(St(t)||ie(t))&&ie(t.then)&&ie(t.catch),ki=((t,e)=>t?setImmediate:e?((r,o)=>(Fe.addEventListener("message",({source:i,data:n})=>{i===Fe&&n===r&&o.length&&o.shift()()},!1),i=>{o.push(i),Fe.postMessage(r,"*")}))(`axios@${Math.random()}`,[]):r=>setTimeout(r))(typeof setImmediate=="function",ie(Fe.postMessage)),Vl=typeof queueMicrotask<"u"?queueMicrotask.bind(Fe):typeof process<"u"&&process.nextTick||ki,Bl=t=>t!=null&&ie(t[or]),u={isArray:et,isArrayBuffer:Ci,isBuffer:_t,isFormData:fl,isArrayBufferView:sl,isString:nl,isNumber:vi,isBoolean:al,isObject:St,isPlainObject:rr,isEmptyObject:ll,isReadableStream:gl,isRequest:bl,isResponse:yl,isHeaders:wl,isUndefined:Xe,isDate:cl,isFile:ul,isBlob:dl,isRegExp:Pl,isFunction:ie,isStream:ml,isURLSearchParams:hl,isTypedArray:Rl,isFileList:pl,forEach:Ct,merge:Hr,extend:Al,trim:Tl,stripBOM:El,inherits:_l,toFlatObject:Sl,kindOf:ir,kindOfTest:fe,endsWith:Cl,toArray:vl,forEachEntry:xl,matchAll:Il,isHTMLForm:kl,hasOwnProperty:_i,hasOwnProp:_i,reduceDescriptors:Ii,freezeMethods:Ll,toObjectSet:Ol,toCamelCase:Dl,noop:Ml,toFiniteNumber:Nl,findKey:Ri,global:Fe,isContextDefined:xi,isSpecCompliantForm:Fl,toJSONObject:Ul,isAsyncFn:ql,isThenable:jl,setImmediate:ki,asap:Vl,isIterable:Bl};function tt(t,e,r,o,i){Error.call(this),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=new Error().stack,this.message=t,this.name="AxiosError",e&&(this.code=e),r&&(this.config=r),o&&(this.request=o),i&&(this.response=i,this.status=i.status?i.status:null)}u.inherits(tt,Error,{toJSON:function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:u.toJSONObject(this.config),code:this.code,status:this.status}}});var Di=tt.prototype,Pi={};["ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","ECONNABORTED","ETIMEDOUT","ERR_NETWORK","ERR_FR_TOO_MANY_REDIRECTS","ERR_DEPRECATED","ERR_BAD_RESPONSE","ERR_BAD_REQUEST","ERR_CANCELED","ERR_NOT_SUPPORT","ERR_INVALID_URL"].forEach(t=>{Pi[t]={value:t}});Object.defineProperties(tt,Pi);Object.defineProperty(Di,"isAxiosError",{value:!0});tt.from=(t,e,r,o,i,n)=>{let s=Object.create(Di);u.toFlatObject(t,s,function(c){return c!==Error.prototype},l=>l!=="isAxiosError");let a=t&&t.message?t.message:"Error",d=e==null&&t?t.code:e;return tt.call(s,a,d,r,o,i),t&&s.cause==null&&Object.defineProperty(s,"cause",{value:t,configurable:!0}),s.name=t&&t.name||"Error",n&&Object.assign(s,n),s};var T=tt;import zl from"form-data";var nr=zl;function $r(t){return u.isPlainObject(t)||u.isArray(t)}function Oi(t){return u.endsWith(t,"[]")?t.slice(0,-2):t}function Li(t,e,r){return t?t.concat(e).map(function(i,n){return i=Oi(i),!r&&n?"["+i+"]":i}).join(r?".":""):e}function Wl(t){return u.isArray(t)&&!t.some($r)}var Hl=u.toFlatObject(u,{},null,function(e){return/^is[A-Z]/.test(e)});function Gl(t,e,r){if(!u.isObject(t))throw new TypeError("target must be an object");e=e||new(nr||FormData),r=u.toFlatObject(r,{metaTokens:!0,dots:!1,indexes:!1},!1,function(b,y){return!u.isUndefined(y[b])});let o=r.metaTokens,i=r.visitor||c,n=r.dots,s=r.indexes,d=(r.Blob||typeof Blob<"u"&&Blob)&&u.isSpecCompliantForm(e);if(!u.isFunction(i))throw new TypeError("visitor must be a function");function l(f){if(f===null)return"";if(u.isDate(f))return f.toISOString();if(u.isBoolean(f))return f.toString();if(!d&&u.isBlob(f))throw new T("Blob is not supported. Use a Buffer instead.");return u.isArrayBuffer(f)||u.isTypedArray(f)?d&&typeof Blob=="function"?new Blob([f]):Buffer.from(f):f}function c(f,b,y){let S=f;if(f&&!y&&typeof f=="object"){if(u.endsWith(b,"{}"))b=o?b:b.slice(0,-2),f=JSON.stringify(f);else if(u.isArray(f)&&Wl(f)||(u.isFileList(f)||u.endsWith(b,"[]"))&&(S=u.toArray(f)))return b=Oi(b),S.forEach(function(A,R){!(u.isUndefined(A)||A===null)&&e.append(s===!0?Li([b],R,n):s===null?b:b+"[]",l(A))}),!1}return $r(f)?!0:(e.append(Li(y,b,n),l(f)),!1)}let m=[],g=Object.assign(Hl,{defaultVisitor:c,convertValue:l,isVisitable:$r});function w(f,b){if(!u.isUndefined(f)){if(m.indexOf(f)!==-1)throw Error("Circular reference detected in "+b.join("."));m.push(f),u.forEach(f,function(S,P){(!(u.isUndefined(S)||S===null)&&i.call(e,S,u.isString(P)?P.trim():P,b,g))===!0&&w(S,b?b.concat(P):[P])}),m.pop()}}if(!u.isObject(t))throw new TypeError("data must be an object");return w(t),e}var Re=Gl;function Mi(t){let e={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"};return encodeURIComponent(t).replace(/[!'()~]|%20|%00/g,function(o){return e[o]})}function Ni(t,e){this._pairs=[],t&&Re(t,this,e)}var Fi=Ni.prototype;Fi.append=function(e,r){this._pairs.push([e,r])};Fi.toString=function(e){let r=e?function(o){return e.call(this,o,Mi)}:Mi;return this._pairs.map(function(i){return r(i[0])+"="+r(i[1])},"").join("&")};var Ui=Ni;function $l(t){return encodeURIComponent(t).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+")}function Ue(t,e,r){if(!e)return t;let o=r&&r.encode||$l;u.isFunction(r)&&(r={serialize:r});let i=r&&r.serialize,n;if(i?n=i(e,r):n=u.isURLSearchParams(e)?e.toString():new Ui(e,r).toString(o),n){let s=t.indexOf("#");s!==-1&&(t=t.slice(0,s)),t+=(t.indexOf("?")===-1?"?":"&")+n}return t}var Qr=class{constructor(){this.handlers=[]}use(e,r,o){return this.handlers.push({fulfilled:e,rejected:r,synchronous:o?o.synchronous:!1,runWhen:o?o.runWhen:null}),this.handlers.length-1}eject(e){this.handlers[e]&&(this.handlers[e]=null)}clear(){this.handlers&&(this.handlers=[])}forEach(e){u.forEach(this.handlers,function(o){o!==null&&e(o)})}},Kr=Qr;var rt={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1};import Kl from"crypto";import Ql from"url";var qi=Ql.URLSearchParams;var Jr="abcdefghijklmnopqrstuvwxyz",ji="0123456789",Vi={DIGIT:ji,ALPHA:Jr,ALPHA_DIGIT:Jr+Jr.toUpperCase()+ji},Jl=(t=16,e=Vi.ALPHA_DIGIT)=>{let r="",{length:o}=e,i=new Uint32Array(t);Kl.randomFillSync(i);for(let n=0;n<t;n++)r+=e[i[n]%o];return r},Bi={isNode:!0,classes:{URLSearchParams:qi,FormData:nr,Blob:typeof Blob<"u"&&Blob||null},ALPHABET:Vi,generateString:Jl,protocols:["http","https","file","data"]};var Xr={};ma(Xr,{hasBrowserEnv:()=>Yr,hasStandardBrowserEnv:()=>Zl,hasStandardBrowserWebWorkerEnv:()=>Yl,navigator:()=>Zr,origin:()=>Xl});var Yr=typeof window<"u"&&typeof document<"u",Zr=typeof navigator=="object"&&navigator||void 0,Zl=Yr&&(!Zr||["ReactNative","NativeScript","NS"].indexOf(Zr.product)<0),Yl=typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope&&typeof self.importScripts=="function",Xl=Yr&&window.location.href||"http://localhost";var L={...Xr,...Bi};function eo(t,e){return Re(t,new L.classes.URLSearchParams,{visitor:function(r,o,i,n){return L.isNode&&u.isBuffer(r)?(this.append(o,r.toString("base64")),!1):n.defaultVisitor.apply(this,arguments)},...e})}function ec(t){return u.matchAll(/\w+|\[(\w*)]/g,t).map(e=>e[0]==="[]"?"":e[1]||e[0])}function tc(t){let e={},r=Object.keys(t),o,i=r.length,n;for(o=0;o<i;o++)n=r[o],e[n]=t[n];return e}function rc(t){function e(r,o,i,n){let s=r[n++];if(s==="__proto__")return!0;let a=Number.isFinite(+s),d=n>=r.length;return s=!s&&u.isArray(i)?i.length:s,d?(u.hasOwnProp(i,s)?i[s]=[i[s],o]:i[s]=o,!a):((!i[s]||!u.isObject(i[s]))&&(i[s]=[]),e(r,o,i[s],n)&&u.isArray(i[s])&&(i[s]=tc(i[s])),!a)}if(u.isFormData(t)&&u.isFunction(t.entries)){let r={};return u.forEachEntry(t,(o,i)=>{e(ec(o),i,r,0)}),r}return null}var ar=rc;function oc(t,e,r){if(u.isString(t))try{return(e||JSON.parse)(t),u.trim(t)}catch(o){if(o.name!=="SyntaxError")throw o}return(r||JSON.stringify)(t)}var to={transitional:rt,adapter:["xhr","http","fetch"],transformRequest:[function(e,r){let o=r.getContentType()||"",i=o.indexOf("application/json")>-1,n=u.isObject(e);if(n&&u.isHTMLForm(e)&&(e=new FormData(e)),u.isFormData(e))return i?JSON.stringify(ar(e)):e;if(u.isArrayBuffer(e)||u.isBuffer(e)||u.isStream(e)||u.isFile(e)||u.isBlob(e)||u.isReadableStream(e))return e;if(u.isArrayBufferView(e))return e.buffer;if(u.isURLSearchParams(e))return r.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),e.toString();let a;if(n){if(o.indexOf("application/x-www-form-urlencoded")>-1)return eo(e,this.formSerializer).toString();if((a=u.isFileList(e))||o.indexOf("multipart/form-data")>-1){let d=this.env&&this.env.FormData;return Re(a?{"files[]":e}:e,d&&new d,this.formSerializer)}}return n||i?(r.setContentType("application/json",!1),oc(e)):e}],transformResponse:[function(e){let r=this.transitional||to.transitional,o=r&&r.forcedJSONParsing,i=this.responseType==="json";if(u.isResponse(e)||u.isReadableStream(e))return e;if(e&&u.isString(e)&&(o&&!this.responseType||i)){let s=!(r&&r.silentJSONParsing)&&i;try{return JSON.parse(e,this.parseReviver)}catch(a){if(s)throw a.name==="SyntaxError"?T.from(a,T.ERR_BAD_RESPONSE,this,null,this.response):a}}return e}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:L.classes.FormData,Blob:L.classes.Blob},validateStatus:function(e){return e>=200&&e<300},headers:{common:{Accept:"application/json, text/plain, */*","Content-Type":void 0}}};u.forEach(["delete","get","head","post","put","patch"],t=>{to.headers[t]={}});var ot=to;var ic=u.toObjectSet(["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"]),zi=t=>{let e={},r,o,i;return t&&t.split(`
6
- `).forEach(function(s){i=s.indexOf(":"),r=s.substring(0,i).trim().toLowerCase(),o=s.substring(i+1).trim(),!(!r||e[r]&&ic[r])&&(r==="set-cookie"?e[r]?e[r].push(o):e[r]=[o]:e[r]=e[r]?e[r]+", "+o:o)}),e};var Wi=Symbol("internals");function vt(t){return t&&String(t).trim().toLowerCase()}function lr(t){return t===!1||t==null?t:u.isArray(t)?t.map(lr):String(t)}function sc(t){let e=Object.create(null),r=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g,o;for(;o=r.exec(t);)e[o[1]]=o[2];return e}var nc=t=>/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(t.trim());function ro(t,e,r,o,i){if(u.isFunction(o))return o.call(this,e,r);if(i&&(e=r),!!u.isString(e)){if(u.isString(o))return e.indexOf(o)!==-1;if(u.isRegExp(o))return o.test(e)}}function ac(t){return t.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,(e,r,o)=>r.toUpperCase()+o)}function lc(t,e){let r=u.toCamelCase(" "+e);["get","set","has"].forEach(o=>{Object.defineProperty(t,o+r,{value:function(i,n,s){return this[o].call(this,e,i,n,s)},configurable:!0})})}var it=class{constructor(e){e&&this.set(e)}set(e,r,o){let i=this;function n(a,d,l){let c=vt(d);if(!c)throw new Error("header name must be a non-empty string");let m=u.findKey(i,c);(!m||i[m]===void 0||l===!0||l===void 0&&i[m]!==!1)&&(i[m||d]=lr(a))}let s=(a,d)=>u.forEach(a,(l,c)=>n(l,c,d));if(u.isPlainObject(e)||e instanceof this.constructor)s(e,r);else if(u.isString(e)&&(e=e.trim())&&!nc(e))s(zi(e),r);else if(u.isObject(e)&&u.isIterable(e)){let a={},d,l;for(let c of e){if(!u.isArray(c))throw TypeError("Object iterator must return a key-value pair");a[l=c[0]]=(d=a[l])?u.isArray(d)?[...d,c[1]]:[d,c[1]]:c[1]}s(a,r)}else e!=null&&n(r,e,o);return this}get(e,r){if(e=vt(e),e){let o=u.findKey(this,e);if(o){let i=this[o];if(!r)return i;if(r===!0)return sc(i);if(u.isFunction(r))return r.call(this,i,o);if(u.isRegExp(r))return r.exec(i);throw new TypeError("parser must be boolean|regexp|function")}}}has(e,r){if(e=vt(e),e){let o=u.findKey(this,e);return!!(o&&this[o]!==void 0&&(!r||ro(this,this[o],o,r)))}return!1}delete(e,r){let o=this,i=!1;function n(s){if(s=vt(s),s){let a=u.findKey(o,s);a&&(!r||ro(o,o[a],a,r))&&(delete o[a],i=!0)}}return u.isArray(e)?e.forEach(n):n(e),i}clear(e){let r=Object.keys(this),o=r.length,i=!1;for(;o--;){let n=r[o];(!e||ro(this,this[n],n,e,!0))&&(delete this[n],i=!0)}return i}normalize(e){let r=this,o={};return u.forEach(this,(i,n)=>{let s=u.findKey(o,n);if(s){r[s]=lr(i),delete r[n];return}let a=e?ac(n):String(n).trim();a!==n&&delete r[n],r[a]=lr(i),o[a]=!0}),this}concat(...e){return this.constructor.concat(this,...e)}toJSON(e){let r=Object.create(null);return u.forEach(this,(o,i)=>{o!=null&&o!==!1&&(r[i]=e&&u.isArray(o)?o.join(", "):o)}),r}[Symbol.iterator](){return Object.entries(this.toJSON())[Symbol.iterator]()}toString(){return Object.entries(this.toJSON()).map(([e,r])=>e+": "+r).join(`
7
- `)}getSetCookie(){return this.get("set-cookie")||[]}get[Symbol.toStringTag](){return"AxiosHeaders"}static from(e){return e instanceof this?e:new this(e)}static concat(e,...r){let o=new this(e);return r.forEach(i=>o.set(i)),o}static accessor(e){let o=(this[Wi]=this[Wi]={accessors:{}}).accessors,i=this.prototype;function n(s){let a=vt(s);o[a]||(lc(i,s),o[a]=!0)}return u.isArray(e)?e.forEach(n):n(e),this}};it.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]);u.reduceDescriptors(it.prototype,({value:t},e)=>{let r=e[0].toUpperCase()+e.slice(1);return{get:()=>t,set(o){this[r]=o}}});u.freezeMethods(it);var V=it;function Rt(t,e){let r=this||ot,o=e||r,i=V.from(o.headers),n=o.data;return u.forEach(t,function(a){n=a.call(r,n,i.normalize(),e?e.status:void 0)}),i.normalize(),n}function xt(t){return!!(t&&t.__CANCEL__)}function Hi(t,e,r){T.call(this,t??"canceled",T.ERR_CANCELED,e,r),this.name="CanceledError"}u.inherits(Hi,T,{__CANCEL__:!0});var ae=Hi;function we(t,e,r){let o=r.config.validateStatus;!r.status||!o||o(r.status)?t(r):e(new T("Request failed with status code "+r.status,[T.ERR_BAD_REQUEST,T.ERR_BAD_RESPONSE][Math.floor(r.status/100)-4],r.config,r.request,r))}function oo(t){return/^([a-z][a-z\d+\-.]*:)?\/\//i.test(t)}function io(t,e){return e?t.replace(/\/?\/$/,"")+"/"+e.replace(/^\/+/,""):t}function qe(t,e,r){let o=!oo(e);return t&&(o||r==!1)?io(t,e):e}import Ec from"proxy-from-env";import _c from"http";import Sc from"https";import Cc from"util";import vc from"follow-redirects";import xe from"zlib";var je="1.12.1";function It(t){let e=/^([-+\w]{1,25})(:?\/\/|:)/.exec(t);return e&&e[1]||""}var cc=/^(?:([^;]+);)?(?:[^;]+;)?(base64|),([\s\S]*)$/;function so(t,e,r){let o=r&&r.Blob||L.classes.Blob,i=It(t);if(e===void 0&&o&&(e=!0),i==="data"){t=i.length?t.slice(i.length+1):t;let n=cc.exec(t);if(!n)throw new T("Invalid URL",T.ERR_INVALID_URL);let s=n[1],a=n[2],d=n[3],l=Buffer.from(decodeURIComponent(d),a?"base64":"utf8");if(e){if(!o)throw new T("Blob is not supported",T.ERR_NOT_SUPPORT);return new o([l],{type:s})}return l}throw new T("Unsupported protocol "+i,T.ERR_NOT_SUPPORT)}import at from"stream";import uc from"stream";var no=Symbol("internals"),ao=class extends uc.Transform{constructor(e){e=u.toFlatObject(e,{maxRate:0,chunkSize:64*1024,minChunkSize:100,timeWindow:500,ticksRate:2,samplesCount:15},null,(o,i)=>!u.isUndefined(i[o])),super({readableHighWaterMark:e.chunkSize});let r=this[no]={timeWindow:e.timeWindow,chunkSize:e.chunkSize,maxRate:e.maxRate,minChunkSize:e.minChunkSize,bytesSeen:0,isCaptured:!1,notifiedBytesLoaded:0,ts:Date.now(),bytes:0,onReadCallback:null};this.on("newListener",o=>{o==="progress"&&(r.isCaptured||(r.isCaptured=!0))})}_read(e){let r=this[no];return r.onReadCallback&&r.onReadCallback(),super._read(e)}_transform(e,r,o){let i=this[no],n=i.maxRate,s=this.readableHighWaterMark,a=i.timeWindow,d=1e3/a,l=n/d,c=i.minChunkSize!==!1?Math.max(i.minChunkSize,l*.01):0,m=(w,f)=>{let b=Buffer.byteLength(w);i.bytesSeen+=b,i.bytes+=b,i.isCaptured&&this.emit("progress",i.bytesSeen),this.push(w)?process.nextTick(f):i.onReadCallback=()=>{i.onReadCallback=null,process.nextTick(f)}},g=(w,f)=>{let b=Buffer.byteLength(w),y=null,S=s,P,A=0;if(n){let R=Date.now();(!i.ts||(A=R-i.ts)>=a)&&(i.ts=R,P=l-i.bytes,i.bytes=P<0?-P:0,A=0),P=l-i.bytes}if(n){if(P<=0)return setTimeout(()=>{f(null,w)},a-A);P<S&&(S=P)}S&&b>S&&b-S>c&&(y=w.subarray(S),w=w.subarray(0,S)),m(w,y?()=>{process.nextTick(f,null,y)}:f)};g(e,function w(f,b){if(f)return o(f);b?g(b,w):o(null)})}},lo=ao;import{EventEmitter as Rc}from"events";import pc from"util";import{Readable as mc}from"stream";var{asyncIterator:Gi}=Symbol,dc=async function*(t){t.stream?yield*t.stream():t.arrayBuffer?yield await t.arrayBuffer():t[Gi]?yield*t[Gi]():yield t},cr=dc;var fc=L.ALPHABET.ALPHA_DIGIT+"-_",kt=typeof TextEncoder=="function"?new TextEncoder:new pc.TextEncoder,Ve=`\r
8
- `,hc=kt.encode(Ve),gc=2,co=class{constructor(e,r){let{escapeName:o}=this.constructor,i=u.isString(r),n=`Content-Disposition: form-data; name="${o(e)}"${!i&&r.name?`; filename="${o(r.name)}"`:""}${Ve}`;i?r=kt.encode(String(r).replace(/\r?\n|\r\n?/g,Ve)):n+=`Content-Type: ${r.type||"application/octet-stream"}${Ve}`,this.headers=kt.encode(n+Ve),this.contentLength=i?r.byteLength:r.size,this.size=this.headers.byteLength+this.contentLength+gc,this.name=e,this.value=r}async*encode(){yield this.headers;let{value:e}=this;u.isTypedArray(e)?yield e:yield*cr(e),yield hc}static escapeName(e){return String(e).replace(/[\r\n"]/g,r=>({"\r":"%0D","\n":"%0A",'"':"%22"})[r])}},bc=(t,e,r)=>{let{tag:o="form-data-boundary",size:i=25,boundary:n=o+"-"+L.generateString(i,fc)}=r||{};if(!u.isFormData(t))throw TypeError("FormData instance required");if(n.length<1||n.length>70)throw Error("boundary must be 10-70 characters long");let s=kt.encode("--"+n+Ve),a=kt.encode("--"+n+"--"+Ve),d=a.byteLength,l=Array.from(t.entries()).map(([m,g])=>{let w=new co(m,g);return d+=w.size,w});d+=s.byteLength*l.length,d=u.toFiniteNumber(d);let c={"Content-Type":`multipart/form-data; boundary=${n}`};return Number.isFinite(d)&&(c["Content-Length"]=d),e&&e(c),mc.from(async function*(){for(let m of l)yield s,yield*m.encode();yield a}())},$i=bc;import yc from"stream";var uo=class extends yc.Transform{__transform(e,r,o){this.push(e),o()}_transform(e,r,o){if(e.length!==0&&(this._transform=this.__transform,e[0]!==120)){let i=Buffer.alloc(2);i[0]=120,i[1]=156,this.push(i,r)}this.__transform(e,r,o)}},Qi=uo;var wc=(t,e)=>u.isAsyncFn(t)?function(...r){let o=r.pop();t.apply(this,r).then(i=>{try{e?o(null,...e(i)):o(null,i)}catch(n){o(n)}},o)}:t,Ki=wc;function Tc(t,e){t=t||10;let r=new Array(t),o=new Array(t),i=0,n=0,s;return e=e!==void 0?e:1e3,function(d){let l=Date.now(),c=o[n];s||(s=l),r[i]=d,o[i]=l;let m=n,g=0;for(;m!==i;)g+=r[m++],m=m%t;if(i=(i+1)%t,i===n&&(n=(n+1)%t),l-s<e)return;let w=c&&l-c;return w?Math.round(g*1e3/w):void 0}}var Ji=Tc;function Ac(t,e){let r=0,o=1e3/e,i,n,s=(l,c=Date.now())=>{r=c,i=null,n&&(clearTimeout(n),n=null),t(...l)};return[(...l)=>{let c=Date.now(),m=c-r;m>=o?s(l,c):(i=l,n||(n=setTimeout(()=>{n=null,s(i)},o-m)))},()=>i&&s(i)]}var Zi=Ac;var _e=(t,e,r=3)=>{let o=0,i=Ji(50,250);return Zi(n=>{let s=n.loaded,a=n.lengthComputable?n.total:void 0,d=s-o,l=i(d),c=s<=a;o=s;let m={loaded:s,total:a,progress:a?s/a:void 0,bytes:d,rate:l||void 0,estimated:l&&a&&c?(a-s)/l:void 0,event:n,lengthComputable:a!=null,[e?"download":"upload"]:!0};t(m)},r)},st=(t,e)=>{let r=t!=null;return[o=>e[0]({lengthComputable:r,total:t,loaded:o}),e[1]]},nt=t=>(...e)=>u.asap(()=>t(...e));function po(t){if(!t||typeof t!="string"||!t.startsWith("data:"))return 0;let e=t.indexOf(",");if(e<0)return 0;let r=t.slice(5,e),o=t.slice(e+1);if(/;base64/i.test(r)){let n=o.length,s=o.length;for(let g=0;g<s;g++)if(o.charCodeAt(g)===37&&g+2<s){let w=o.charCodeAt(g+1),f=o.charCodeAt(g+2);(w>=48&&w<=57||w>=65&&w<=70||w>=97&&w<=102)&&(f>=48&&f<=57||f>=65&&f<=70||f>=97&&f<=102)&&(n-=2,g+=2)}let a=0,d=s-1,l=g=>g>=2&&o.charCodeAt(g-2)===37&&o.charCodeAt(g-1)===51&&(o.charCodeAt(g)===68||o.charCodeAt(g)===100);d>=0&&(o.charCodeAt(d)===61?(a++,d--):l(d)&&(a++,d-=3)),a===1&&d>=0&&(o.charCodeAt(d)===61||l(d))&&a++;let m=Math.floor(n/4)*3-(a||0);return m>0?m:0}return Buffer.byteLength(o,"utf8")}var Yi={flush:xe.constants.Z_SYNC_FLUSH,finishFlush:xe.constants.Z_SYNC_FLUSH},xc={flush:xe.constants.BROTLI_OPERATION_FLUSH,finishFlush:xe.constants.BROTLI_OPERATION_FLUSH},Xi=u.isFunction(xe.createBrotliDecompress),{http:Ic,https:kc}=vc,Dc=/https:?/,es=L.protocols.map(t=>t+":"),ts=(t,[e,r])=>(t.on("end",r).on("error",r),e);function Pc(t,e){t.beforeRedirects.proxy&&t.beforeRedirects.proxy(t),t.beforeRedirects.config&&t.beforeRedirects.config(t,e)}function os(t,e,r){let o=e;if(!o&&o!==!1){let i=Ec.getProxyForUrl(r);i&&(o=new URL(i))}if(o){if(o.username&&(o.auth=(o.username||"")+":"+(o.password||"")),o.auth){(o.auth.username||o.auth.password)&&(o.auth=(o.auth.username||"")+":"+(o.auth.password||""));let n=Buffer.from(o.auth,"utf8").toString("base64");t.headers["Proxy-Authorization"]="Basic "+n}t.headers.host=t.hostname+(t.port?":"+t.port:"");let i=o.hostname||o.host;t.hostname=i,t.host=i,t.port=o.port,t.path=r,o.protocol&&(t.protocol=o.protocol.includes(":")?o.protocol:`${o.protocol}:`)}t.beforeRedirects.proxy=function(n){os(n,e,n.href)}}var Lc=typeof process<"u"&&u.kindOf(process)==="process",Oc=t=>new Promise((e,r)=>{let o,i,n=(d,l)=>{i||(i=!0,o&&o(d,l))},s=d=>{n(d),e(d)},a=d=>{n(d,!0),r(d)};t(s,a,d=>o=d).catch(a)}),Mc=({address:t,family:e})=>{if(!u.isString(t))throw TypeError("address must be a string");return{address:t,family:e||(t.indexOf(".")<0?6:4)}},rs=(t,e)=>Mc(u.isObject(t)?t:{address:t,family:e}),is=Lc&&function(e){return Oc(async function(o,i,n){let{data:s,lookup:a,family:d}=e,{responseType:l,responseEncoding:c}=e,m=e.method.toUpperCase(),g,w=!1,f;if(a){let _=Ki(a,C=>u.isArray(C)?C:[C]);a=(C,z,K)=>{_(C,z,(N,oe,be)=>{if(N)return K(N);let Z=u.isArray(oe)?oe.map(X=>rs(X)):[rs(oe,be)];z.all?K(N,Z):K(N,Z[0].address,Z[0].family)})}}let b=new Rc,y=()=>{e.cancelToken&&e.cancelToken.unsubscribe(S),e.signal&&e.signal.removeEventListener("abort",S),b.removeAllListeners()};n((_,C)=>{g=!0,C&&(w=!0,y())});function S(_){b.emit("abort",!_||_.type?new ae(null,e,f):_)}b.once("abort",i),(e.cancelToken||e.signal)&&(e.cancelToken&&e.cancelToken.subscribe(S),e.signal&&(e.signal.aborted?S():e.signal.addEventListener("abort",S)));let P=qe(e.baseURL,e.url,e.allowAbsoluteUrls),A=new URL(P,L.hasBrowserEnv?L.origin:void 0),R=A.protocol||es[0];if(R==="data:"){if(e.maxContentLength>-1){let C=String(e.url||P||"");if(po(C)>e.maxContentLength)return i(new T("maxContentLength size of "+e.maxContentLength+" exceeded",T.ERR_BAD_RESPONSE,e))}let _;if(m!=="GET")return we(o,i,{status:405,statusText:"method not allowed",headers:{},config:e});try{_=so(e.url,l==="blob",{Blob:e.env&&e.env.Blob})}catch(C){throw T.from(C,T.ERR_BAD_REQUEST,e)}return l==="text"?(_=_.toString(c),(!c||c==="utf8")&&(_=u.stripBOM(_))):l==="stream"&&(_=at.Readable.from(_)),we(o,i,{data:_,status:200,statusText:"OK",headers:new V,config:e})}if(es.indexOf(R)===-1)return i(new T("Unsupported protocol "+R,T.ERR_BAD_REQUEST,e));let x=V.from(e.headers).normalize();x.set("User-Agent","axios/"+je,!1);let{onUploadProgress:q,onDownloadProgress:U}=e,le=e.maxRate,me,Ae;if(u.isSpecCompliantForm(s)){let _=x.getContentType(/boundary=([-_\w\d]{10,70})/i);s=$i(s,C=>{x.set(C)},{tag:`axios-${je}-boundary`,boundary:_&&_[1]||void 0})}else if(u.isFormData(s)&&u.isFunction(s.getHeaders)){if(x.set(s.getHeaders()),!x.hasContentLength())try{let _=await Cc.promisify(s.getLength).call(s);Number.isFinite(_)&&_>=0&&x.setContentLength(_)}catch{}}else if(u.isBlob(s)||u.isFile(s))s.size&&x.setContentType(s.type||"application/octet-stream"),x.setContentLength(s.size||0),s=at.Readable.from(cr(s));else if(s&&!u.isStream(s)){if(!Buffer.isBuffer(s))if(u.isArrayBuffer(s))s=Buffer.from(new Uint8Array(s));else if(u.isString(s))s=Buffer.from(s,"utf-8");else return i(new T("Data after transformation must be a string, an ArrayBuffer, a Buffer, or a Stream",T.ERR_BAD_REQUEST,e));if(x.setContentLength(s.length,!1),e.maxBodyLength>-1&&s.length>e.maxBodyLength)return i(new T("Request body larger than maxBodyLength limit",T.ERR_BAD_REQUEST,e))}let Se=u.toFiniteNumber(x.getContentLength());u.isArray(le)?(me=le[0],Ae=le[1]):me=Ae=le,s&&(q||me)&&(u.isStream(s)||(s=at.Readable.from(s,{objectMode:!1})),s=at.pipeline([s,new lo({maxRate:u.toFiniteNumber(me)})],u.noop),q&&s.on("progress",ts(s,st(Se,_e(nt(q),!1,3)))));let ne;if(e.auth){let _=e.auth.username||"",C=e.auth.password||"";ne=_+":"+C}if(!ne&&A.username){let _=A.username,C=A.password;ne=_+":"+C}ne&&x.delete("authorization");let ce;try{ce=Ue(A.pathname+A.search,e.params,e.paramsSerializer).replace(/^\?/,"")}catch(_){let C=new Error(_.message);return C.config=e,C.url=e.url,C.exists=!0,i(C)}x.set("Accept-Encoding","gzip, compress, deflate"+(Xi?", br":""),!1);let Q={path:ce,method:m,headers:x.toJSON(),agents:{http:e.httpAgent,https:e.httpsAgent},auth:ne,protocol:R,family:d,beforeRedirect:Pc,beforeRedirects:{}};!u.isUndefined(a)&&(Q.lookup=a),e.socketPath?Q.socketPath=e.socketPath:(Q.hostname=A.hostname.startsWith("[")?A.hostname.slice(1,-1):A.hostname,Q.port=A.port,os(Q,e.proxy,R+"//"+A.hostname+(A.port?":"+A.port:"")+Q.path));let G,Ce=Dc.test(Q.protocol);if(Q.agent=Ce?e.httpsAgent:e.httpAgent,e.transport?G=e.transport:e.maxRedirects===0?G=Ce?Sc:_c:(e.maxRedirects&&(Q.maxRedirects=e.maxRedirects),e.beforeRedirect&&(Q.beforeRedirects.config=e.beforeRedirect),G=Ce?kc:Ic),e.maxBodyLength>-1?Q.maxBodyLength=e.maxBodyLength:Q.maxBodyLength=1/0,e.insecureHTTPParser&&(Q.insecureHTTPParser=e.insecureHTTPParser),f=G.request(Q,function(C){if(f.destroyed)return;let z=[C],K=+C.headers["content-length"];if(U||Ae){let X=new lo({maxRate:u.toFiniteNumber(Ae)});U&&X.on("progress",ts(X,st(K,_e(nt(U),!0,3)))),z.push(X)}let N=C,oe=C.req||f;if(e.decompress!==!1&&C.headers["content-encoding"])switch((m==="HEAD"||C.statusCode===204)&&delete C.headers["content-encoding"],(C.headers["content-encoding"]||"").toLowerCase()){case"gzip":case"x-gzip":case"compress":case"x-compress":z.push(xe.createUnzip(Yi)),delete C.headers["content-encoding"];break;case"deflate":z.push(new Qi),z.push(xe.createUnzip(Yi)),delete C.headers["content-encoding"];break;case"br":Xi&&(z.push(xe.createBrotliDecompress(xc)),delete C.headers["content-encoding"])}N=z.length>1?at.pipeline(z,u.noop):z[0];let be=at.finished(N,()=>{be(),y()}),Z={status:C.statusCode,statusText:C.statusMessage,headers:new V(C.headers),config:e,request:oe};if(l==="stream")Z.data=N,we(o,i,Z);else{let X=[],Ee=0;N.on("data",function(J){X.push(J),Ee+=J.length,e.maxContentLength>-1&&Ee>e.maxContentLength&&(w=!0,N.destroy(),i(new T("maxContentLength size of "+e.maxContentLength+" exceeded",T.ERR_BAD_RESPONSE,e,oe)))}),N.on("aborted",function(){if(w)return;let J=new T("stream has been aborted",T.ERR_BAD_RESPONSE,e,oe);N.destroy(J),i(J)}),N.on("error",function(J){f.destroyed||i(T.from(J,null,e,oe))}),N.on("end",function(){try{let J=X.length===1?X[0]:Buffer.concat(X);l!=="arraybuffer"&&(J=J.toString(c),(!c||c==="utf8")&&(J=u.stripBOM(J))),Z.data=J}catch(J){return i(T.from(J,null,e,Z.request,Z))}we(o,i,Z)})}b.once("abort",X=>{N.destroyed||(N.emit("error",X),N.destroy())})}),b.once("abort",_=>{i(_),f.destroy(_)}),f.on("error",function(C){i(T.from(C,null,e,f))}),f.on("socket",function(C){C.setKeepAlive(!0,1e3*60)}),e.timeout){let _=parseInt(e.timeout,10);if(Number.isNaN(_)){i(new T("error trying to parse `config.timeout` to int",T.ERR_BAD_OPTION_VALUE,e,f));return}f.setTimeout(_,function(){if(g)return;let z=e.timeout?"timeout of "+e.timeout+"ms exceeded":"timeout exceeded",K=e.transitional||rt;e.timeoutErrorMessage&&(z=e.timeoutErrorMessage),i(new T(z,K.clarifyTimeoutError?T.ETIMEDOUT:T.ECONNABORTED,e,f)),S()})}if(u.isStream(s)){let _=!1,C=!1;s.on("end",()=>{_=!0}),s.once("error",z=>{C=!0,f.destroy(z)}),s.on("close",()=>{!_&&!C&&S(new ae("Request stream has been aborted",e,f))}),s.pipe(f)}else f.end(s)})};var ss=L.hasStandardBrowserEnv?((t,e)=>r=>(r=new URL(r,L.origin),t.protocol===r.protocol&&t.host===r.host&&(e||t.port===r.port)))(new URL(L.origin),L.navigator&&/(msie|trident)/i.test(L.navigator.userAgent)):()=>!0;var ns=L.hasStandardBrowserEnv?{write(t,e,r,o,i,n){let s=[t+"="+encodeURIComponent(e)];u.isNumber(r)&&s.push("expires="+new Date(r).toGMTString()),u.isString(o)&&s.push("path="+o),u.isString(i)&&s.push("domain="+i),n===!0&&s.push("secure"),document.cookie=s.join("; ")},read(t){let e=document.cookie.match(new RegExp("(^|;\\s*)("+t+")=([^;]*)"));return e?decodeURIComponent(e[3]):null},remove(t){this.write(t,"",Date.now()-864e5)}}:{write(){},read(){return null},remove(){}};var as=t=>t instanceof V?{...t}:t;function he(t,e){e=e||{};let r={};function o(l,c,m,g){return u.isPlainObject(l)&&u.isPlainObject(c)?u.merge.call({caseless:g},l,c):u.isPlainObject(c)?u.merge({},c):u.isArray(c)?c.slice():c}function i(l,c,m,g){if(u.isUndefined(c)){if(!u.isUndefined(l))return o(void 0,l,m,g)}else return o(l,c,m,g)}function n(l,c){if(!u.isUndefined(c))return o(void 0,c)}function s(l,c){if(u.isUndefined(c)){if(!u.isUndefined(l))return o(void 0,l)}else return o(void 0,c)}function a(l,c,m){if(m in e)return o(l,c);if(m in t)return o(void 0,l)}let d={url:n,method:n,data:n,baseURL:s,transformRequest:s,transformResponse:s,paramsSerializer:s,timeout:s,timeoutMessage:s,withCredentials:s,withXSRFToken:s,adapter:s,responseType:s,xsrfCookieName:s,xsrfHeaderName:s,onUploadProgress:s,onDownloadProgress:s,decompress:s,maxContentLength:s,maxBodyLength:s,beforeRedirect:s,transport:s,httpAgent:s,httpsAgent:s,cancelToken:s,socketPath:s,responseEncoding:s,validateStatus:a,headers:(l,c,m)=>i(as(l),as(c),m,!0)};return u.forEach(Object.keys({...t,...e}),function(c){let m=d[c]||i,g=m(t[c],e[c],c);u.isUndefined(g)&&m!==a||(r[c]=g)}),r}var ur=t=>{let e=he({},t),{data:r,withXSRFToken:o,xsrfHeaderName:i,xsrfCookieName:n,headers:s,auth:a}=e;if(e.headers=s=V.from(s),e.url=Ue(qe(e.baseURL,e.url,e.allowAbsoluteUrls),t.params,t.paramsSerializer),a&&s.set("Authorization","Basic "+btoa((a.username||"")+":"+(a.password?unescape(encodeURIComponent(a.password)):""))),u.isFormData(r)){if(L.hasStandardBrowserEnv||L.hasStandardBrowserWebWorkerEnv)s.setContentType(void 0);else if(u.isFunction(r.getHeaders)){let d=r.getHeaders(),l=["content-type","content-length"];Object.entries(d).forEach(([c,m])=>{l.includes(c.toLowerCase())&&s.set(c,m)})}}if(L.hasStandardBrowserEnv&&(o&&u.isFunction(o)&&(o=o(e)),o||o!==!1&&ss(e.url))){let d=i&&n&&ns.read(n);d&&s.set(i,d)}return e};var Nc=typeof XMLHttpRequest<"u",ls=Nc&&function(t){return new Promise(function(r,o){let i=ur(t),n=i.data,s=V.from(i.headers).normalize(),{responseType:a,onUploadProgress:d,onDownloadProgress:l}=i,c,m,g,w,f;function b(){w&&w(),f&&f(),i.cancelToken&&i.cancelToken.unsubscribe(c),i.signal&&i.signal.removeEventListener("abort",c)}let y=new XMLHttpRequest;y.open(i.method.toUpperCase(),i.url,!0),y.timeout=i.timeout;function S(){if(!y)return;let A=V.from("getAllResponseHeaders"in y&&y.getAllResponseHeaders()),x={data:!a||a==="text"||a==="json"?y.responseText:y.response,status:y.status,statusText:y.statusText,headers:A,config:t,request:y};we(function(U){r(U),b()},function(U){o(U),b()},x),y=null}"onloadend"in y?y.onloadend=S:y.onreadystatechange=function(){!y||y.readyState!==4||y.status===0&&!(y.responseURL&&y.responseURL.indexOf("file:")===0)||setTimeout(S)},y.onabort=function(){y&&(o(new T("Request aborted",T.ECONNABORTED,t,y)),y=null)},y.onerror=function(R){let x=R&&R.message?R.message:"Network Error",q=new T(x,T.ERR_NETWORK,t,y);q.event=R||null,o(q),y=null},y.ontimeout=function(){let R=i.timeout?"timeout of "+i.timeout+"ms exceeded":"timeout exceeded",x=i.transitional||rt;i.timeoutErrorMessage&&(R=i.timeoutErrorMessage),o(new T(R,x.clarifyTimeoutError?T.ETIMEDOUT:T.ECONNABORTED,t,y)),y=null},n===void 0&&s.setContentType(null),"setRequestHeader"in y&&u.forEach(s.toJSON(),function(R,x){y.setRequestHeader(x,R)}),u.isUndefined(i.withCredentials)||(y.withCredentials=!!i.withCredentials),a&&a!=="json"&&(y.responseType=i.responseType),l&&([g,f]=_e(l,!0),y.addEventListener("progress",g)),d&&y.upload&&([m,w]=_e(d),y.upload.addEventListener("progress",m),y.upload.addEventListener("loadend",w)),(i.cancelToken||i.signal)&&(c=A=>{y&&(o(!A||A.type?new ae(null,t,y):A),y.abort(),y=null)},i.cancelToken&&i.cancelToken.subscribe(c),i.signal&&(i.signal.aborted?c():i.signal.addEventListener("abort",c)));let P=It(i.url);if(P&&L.protocols.indexOf(P)===-1){o(new T("Unsupported protocol "+P+":",T.ERR_BAD_REQUEST,t));return}y.send(n||null)})};var Fc=(t,e)=>{let{length:r}=t=t?t.filter(Boolean):[];if(e||r){let o=new AbortController,i,n=function(l){if(!i){i=!0,a();let c=l instanceof Error?l:this.reason;o.abort(c instanceof T?c:new ae(c instanceof Error?c.message:c))}},s=e&&setTimeout(()=>{s=null,n(new T(`timeout ${e} of ms exceeded`,T.ETIMEDOUT))},e),a=()=>{t&&(s&&clearTimeout(s),s=null,t.forEach(l=>{l.unsubscribe?l.unsubscribe(n):l.removeEventListener("abort",n)}),t=null)};t.forEach(l=>l.addEventListener("abort",n));let{signal:d}=o;return d.unsubscribe=()=>u.asap(a),d}},cs=Fc;var Uc=function*(t,e){let r=t.byteLength;if(!e||r<e){yield t;return}let o=0,i;for(;o<r;)i=o+e,yield t.slice(o,i),o=i},qc=async function*(t,e){for await(let r of jc(t))yield*Uc(r,e)},jc=async function*(t){if(t[Symbol.asyncIterator]){yield*t;return}let e=t.getReader();try{for(;;){let{done:r,value:o}=await e.read();if(r)break;yield o}}finally{await e.cancel()}},mo=(t,e,r,o)=>{let i=qc(t,e),n=0,s,a=d=>{s||(s=!0,o&&o(d))};return new ReadableStream({async pull(d){try{let{done:l,value:c}=await i.next();if(l){a(),d.close();return}let m=c.byteLength;if(r){let g=n+=m;r(g)}d.enqueue(new Uint8Array(c))}catch(l){throw a(l),l}},cancel(d){return a(d),i.return()}},{highWaterMark:2})};var us=64*1024,{isFunction:dr}=u,fs=(({fetch:t,Request:e,Response:r})=>({fetch:t,Request:e,Response:r}))(u.global),{ReadableStream:ds,TextEncoder:ps}=u.global,ms=(t,...e)=>{try{return!!t(...e)}catch{return!1}},Vc=t=>{let{fetch:e,Request:r,Response:o}=Object.assign({},fs,t),i=dr(e),n=dr(r),s=dr(o);if(!i)return!1;let a=i&&dr(ds),d=i&&(typeof ps=="function"?(f=>b=>f.encode(b))(new ps):async f=>new Uint8Array(await new r(f).arrayBuffer())),l=n&&a&&ms(()=>{let f=!1,b=new r(L.origin,{body:new ds,method:"POST",get duplex(){return f=!0,"half"}}).headers.has("Content-Type");return f&&!b}),c=s&&a&&ms(()=>u.isReadableStream(new o("").body)),m={stream:c&&(f=>f.body)};i&&["text","arrayBuffer","blob","formData","stream"].forEach(f=>{!m[f]&&(m[f]=(b,y)=>{let S=b&&b[f];if(S)return S.call(b);throw new T(`Response type '${f}' is not supported`,T.ERR_NOT_SUPPORT,y)})});let g=async f=>{if(f==null)return 0;if(u.isBlob(f))return f.size;if(u.isSpecCompliantForm(f))return(await new r(L.origin,{method:"POST",body:f}).arrayBuffer()).byteLength;if(u.isArrayBufferView(f)||u.isArrayBuffer(f))return f.byteLength;if(u.isURLSearchParams(f)&&(f=f+""),u.isString(f))return(await d(f)).byteLength},w=async(f,b)=>{let y=u.toFiniteNumber(f.getContentLength());return y??g(b)};return async f=>{let{url:b,method:y,data:S,signal:P,cancelToken:A,timeout:R,onDownloadProgress:x,onUploadProgress:q,responseType:U,headers:le,withCredentials:me="same-origin",fetchOptions:Ae}=ur(f);U=U?(U+"").toLowerCase():"text";let Se=cs([P,A&&A.toAbortSignal()],R),ne=null,ce=Se&&Se.unsubscribe&&(()=>{Se.unsubscribe()}),Q;try{if(q&&l&&y!=="get"&&y!=="head"&&(Q=await w(le,S))!==0){let K=new r(b,{method:"POST",body:S,duplex:"half"}),N;if(u.isFormData(S)&&(N=K.headers.get("content-type"))&&le.setContentType(N),K.body){let[oe,be]=st(Q,_e(nt(q)));S=mo(K.body,us,oe,be)}}u.isString(me)||(me=me?"include":"omit");let G=n&&"credentials"in r.prototype,Ce={...Ae,signal:Se,method:y.toUpperCase(),headers:le.normalize().toJSON(),body:S,duplex:"half",credentials:G?me:void 0};ne=n&&new r(b,Ce);let _=await(n?e(ne,Ae):e(b,Ce)),C=c&&(U==="stream"||U==="response");if(c&&(x||C&&ce)){let K={};["status","statusText","headers"].forEach(Z=>{K[Z]=_[Z]});let N=u.toFiniteNumber(_.headers.get("content-length")),[oe,be]=x&&st(N,_e(nt(x),!0))||[];_=new o(mo(_.body,us,oe,()=>{be&&be(),ce&&ce()}),K)}U=U||"text";let z=await m[u.findKey(m,U)||"text"](_,f);return!C&&ce&&ce(),await new Promise((K,N)=>{we(K,N,{data:z,headers:V.from(_.headers),status:_.status,statusText:_.statusText,config:f,request:ne})})}catch(G){throw ce&&ce(),G&&G.name==="TypeError"&&/Load failed|fetch/i.test(G.message)?Object.assign(new T("Network Error",T.ERR_NETWORK,f,ne),{cause:G.cause||G}):T.from(G,G&&G.code,f,ne)}}},Bc=new Map,fo=t=>{let e=u.merge.call({skipUndefined:!0},fs,t?t.env:null),{fetch:r,Request:o,Response:i}=e,n=[o,i,r],s=n.length,a=s,d,l,c=Bc;for(;a--;)d=n[a],l=c.get(d),l===void 0&&c.set(d,l=a?new Map:Vc(e)),c=l;return l},wb=fo();var ho={http:is,xhr:ls,fetch:{get:fo}};u.forEach(ho,(t,e)=>{if(t){try{Object.defineProperty(t,"name",{value:e})}catch{}Object.defineProperty(t,"adapterName",{value:e})}});var hs=t=>`- ${t}`,Wc=t=>u.isFunction(t)||t===null||t===!1,pr={getAdapter:(t,e)=>{t=u.isArray(t)?t:[t];let{length:r}=t,o,i,n={};for(let s=0;s<r;s++){o=t[s];let a;if(i=o,!Wc(o)&&(i=ho[(a=String(o)).toLowerCase()],i===void 0))throw new T(`Unknown adapter '${a}'`);if(i&&(u.isFunction(i)||(i=i.get(e))))break;n[a||"#"+s]=i}if(!i){let s=Object.entries(n).map(([d,l])=>`adapter ${d} `+(l===!1?"is not supported by the environment":"is not available in the build")),a=r?s.length>1?`since :
9
- `+s.map(hs).join(`
10
- `):" "+hs(s[0]):"as no adapter specified";throw new T("There is no suitable adapter to dispatch the request "+a,"ERR_NOT_SUPPORT")}return i},adapters:ho};function go(t){if(t.cancelToken&&t.cancelToken.throwIfRequested(),t.signal&&t.signal.aborted)throw new ae(null,t)}function mr(t){return go(t),t.headers=V.from(t.headers),t.data=Rt.call(t,t.transformRequest),["post","put","patch"].indexOf(t.method)!==-1&&t.headers.setContentType("application/x-www-form-urlencoded",!1),pr.getAdapter(t.adapter||ot.adapter,t)(t).then(function(o){return go(t),o.data=Rt.call(t,t.transformResponse,o),o.headers=V.from(o.headers),o},function(o){return xt(o)||(go(t),o&&o.response&&(o.response.data=Rt.call(t,t.transformResponse,o.response),o.response.headers=V.from(o.response.headers))),Promise.reject(o)})}var fr={};["object","boolean","number","function","string","symbol"].forEach((t,e)=>{fr[t]=function(o){return typeof o===t||"a"+(e<1?"n ":" ")+t}});var gs={};fr.transitional=function(e,r,o){function i(n,s){return"[Axios v"+je+"] Transitional option '"+n+"'"+s+(o?". "+o:"")}return(n,s,a)=>{if(e===!1)throw new T(i(s," has been removed"+(r?" in "+r:"")),T.ERR_DEPRECATED);return r&&!gs[s]&&(gs[s]=!0,console.warn(i(s," has been deprecated since v"+r+" and will be removed in the near future"))),e?e(n,s,a):!0}};fr.spelling=function(e){return(r,o)=>(console.warn(`${o} is likely a misspelling of ${e}`),!0)};function Hc(t,e,r){if(typeof t!="object")throw new T("options must be an object",T.ERR_BAD_OPTION_VALUE);let o=Object.keys(t),i=o.length;for(;i-- >0;){let n=o[i],s=e[n];if(s){let a=t[n],d=a===void 0||s(a,n,t);if(d!==!0)throw new T("option "+n+" must be "+d,T.ERR_BAD_OPTION_VALUE);continue}if(r!==!0)throw new T("Unknown option "+n,T.ERR_BAD_OPTION)}}var Dt={assertOptions:Hc,validators:fr};var Te=Dt.validators,lt=class{constructor(e){this.defaults=e||{},this.interceptors={request:new Kr,response:new Kr}}async request(e,r){try{return await this._request(e,r)}catch(o){if(o instanceof Error){let i={};Error.captureStackTrace?Error.captureStackTrace(i):i=new Error;let n=i.stack?i.stack.replace(/^.+\n/,""):"";try{o.stack?n&&!String(o.stack).endsWith(n.replace(/^.+\n.+\n/,""))&&(o.stack+=`
11
- `+n):o.stack=n}catch{}}throw o}}_request(e,r){typeof e=="string"?(r=r||{},r.url=e):r=e||{},r=he(this.defaults,r);let{transitional:o,paramsSerializer:i,headers:n}=r;o!==void 0&&Dt.assertOptions(o,{silentJSONParsing:Te.transitional(Te.boolean),forcedJSONParsing:Te.transitional(Te.boolean),clarifyTimeoutError:Te.transitional(Te.boolean)},!1),i!=null&&(u.isFunction(i)?r.paramsSerializer={serialize:i}:Dt.assertOptions(i,{encode:Te.function,serialize:Te.function},!0)),r.allowAbsoluteUrls!==void 0||(this.defaults.allowAbsoluteUrls!==void 0?r.allowAbsoluteUrls=this.defaults.allowAbsoluteUrls:r.allowAbsoluteUrls=!0),Dt.assertOptions(r,{baseUrl:Te.spelling("baseURL"),withXsrfToken:Te.spelling("withXSRFToken")},!0),r.method=(r.method||this.defaults.method||"get").toLowerCase();let s=n&&u.merge(n.common,n[r.method]);n&&u.forEach(["delete","get","head","post","put","patch","common"],f=>{delete n[f]}),r.headers=V.concat(s,n);let a=[],d=!0;this.interceptors.request.forEach(function(b){typeof b.runWhen=="function"&&b.runWhen(r)===!1||(d=d&&b.synchronous,a.unshift(b.fulfilled,b.rejected))});let l=[];this.interceptors.response.forEach(function(b){l.push(b.fulfilled,b.rejected)});let c,m=0,g;if(!d){let f=[mr.bind(this),void 0];for(f.unshift(...a),f.push(...l),g=f.length,c=Promise.resolve(r);m<g;)c=c.then(f[m++],f[m++]);return c}g=a.length;let w=r;for(m=0;m<g;){let f=a[m++],b=a[m++];try{w=f(w)}catch(y){b.call(this,y);break}}try{c=mr.call(this,w)}catch(f){return Promise.reject(f)}for(m=0,g=l.length;m<g;)c=c.then(l[m++],l[m++]);return c}getUri(e){e=he(this.defaults,e);let r=qe(e.baseURL,e.url,e.allowAbsoluteUrls);return Ue(r,e.params,e.paramsSerializer)}};u.forEach(["delete","get","head","options"],function(e){lt.prototype[e]=function(r,o){return this.request(he(o||{},{method:e,url:r,data:(o||{}).data}))}});u.forEach(["post","put","patch"],function(e){function r(o){return function(n,s,a){return this.request(he(a||{},{method:e,headers:o?{"Content-Type":"multipart/form-data"}:{},url:n,data:s}))}}lt.prototype[e]=r(),lt.prototype[e+"Form"]=r(!0)});var Pt=lt;var bo=class t{constructor(e){if(typeof e!="function")throw new TypeError("executor must be a function.");let r;this.promise=new Promise(function(n){r=n});let o=this;this.promise.then(i=>{if(!o._listeners)return;let n=o._listeners.length;for(;n-- >0;)o._listeners[n](i);o._listeners=null}),this.promise.then=i=>{let n,s=new Promise(a=>{o.subscribe(a),n=a}).then(i);return s.cancel=function(){o.unsubscribe(n)},s},e(function(n,s,a){o.reason||(o.reason=new ae(n,s,a),r(o.reason))})}throwIfRequested(){if(this.reason)throw this.reason}subscribe(e){if(this.reason){e(this.reason);return}this._listeners?this._listeners.push(e):this._listeners=[e]}unsubscribe(e){if(!this._listeners)return;let r=this._listeners.indexOf(e);r!==-1&&this._listeners.splice(r,1)}toAbortSignal(){let e=new AbortController,r=o=>{e.abort(o)};return this.subscribe(r),e.signal.unsubscribe=()=>this.unsubscribe(r),e.signal}static source(){let e;return{token:new t(function(i){e=i}),cancel:e}}},bs=bo;function yo(t){return function(r){return t.apply(null,r)}}function wo(t){return u.isObject(t)&&t.isAxiosError===!0}var To={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511};Object.entries(To).forEach(([t,e])=>{To[e]=t});var ys=To;function ws(t){let e=new Pt(t),r=Et(Pt.prototype.request,e);return u.extend(r,Pt.prototype,e,{allOwnKeys:!0}),u.extend(r,e,null,{allOwnKeys:!0}),r.create=function(i){return ws(he(t,i))},r}var $=ws(ot);$.Axios=Pt;$.CanceledError=ae;$.CancelToken=bs;$.isCancel=xt;$.VERSION=je;$.toFormData=Re;$.AxiosError=T;$.Cancel=$.CanceledError;$.all=function(e){return Promise.all(e)};$.spread=yo;$.isAxiosError=wo;$.mergeConfig=he;$.AxiosHeaders=V;$.formToJSON=t=>ar(u.isHTMLForm(t)?new FormData(t):t);$.getAdapter=pr.getAdapter;$.HttpStatusCode=ys;$.default=$;var Ts=$;var{Axios:hy,AxiosError:gy,CanceledError:by,isCancel:yy,CancelToken:wy,VERSION:Ty,all:Ay,Cancel:Ey,isAxiosError:Ie,spread:_y,toFormData:Sy,AxiosHeaders:Cy,HttpStatusCode:vy,formToJSON:Ry,getAdapter:xy,mergeConfig:Iy}=Ts;import{makeApi as tu,makeEndpoint as ct}from"@zodios/core";import{z as j}from"zod";import{z as h}from"zod";var Gc=h.object({name:h.string(),description:h.string(),id:h.string(),schema_version:h.string(),metric_version:h.coerce.number(),definition_version:h.coerce.number(),last_updated_user:h.object({id:h.string()}).optional()}),$c=h.object({id:h.string()}),As=h.object({field:h.string(),operator:h.string(),categorical_values:h.array(h.object({string_value:h.string().optional(),bool_value:h.boolean().optional(),null_value:h.string().optional()}))}),Ao=h.object({measure:h.object({field:h.string(),aggregation:h.string()}),time_dimension:h.object({field:h.string()}),filters:h.array(As)}),Qc=h.object({datasource:$c,basic_specification:Ao,viz_state_specification:h.object({viz_state_string:h.string()}).optional(),is_running_total:h.boolean()}),Es=h.object({allowed_dimensions:h.array(h.string()),allowed_granularities:h.array(h.string()),offset_from_today:h.number()}),_s=h.object({filters:h.array(As),measurement_period:h.object({granularity:h.string(),range:h.string()}),comparison:h.object({comparison:h.string()})}),Ss=h.object({target:h.object({value:h.number()}).optional()}),hr=h.object({id:h.string(),specification:_s,definition_id:h.string(),is_default:h.boolean(),schema_version:h.string(),metric_version:h.coerce.number(),goals:Ss.optional(),is_followed:h.boolean(),datasource_luid:h.string()}),Cs=h.object({type:h.string(),number_units:h.object({singular_noun:h.string(),plural_noun:h.string()}),sentiment_type:h.string(),row_level_id_field:h.object({identifier_col:h.string()}),row_level_entity_names:h.object({entity_name_singular:h.string().optional(),entity_name_plural:h.string().optional()}),row_level_name_field:h.object({name_col:h.string()}),currency_code:h.string()}),vs=h.object({settings:h.array(h.object({type:h.string(),disabled:h.boolean()}))}),Kc=h.object({comparisons:h.array(h.object({compare_config:h.object({comparison:h.string()}),index:h.coerce.number()}))}),Jc=h.array(h.object({basic_specification:Ao,viz_state_specification:h.object({viz_state_string:h.string()}).optional(),minimum_granularity:h.string()})),Eo=h.object({metadata:Gc,specification:Qc,extension_options:Es,metrics:h.array(hr),total_metrics:h.coerce.number(),representation_options:Cs,insights_options:vs,comparisons:Kc,datasource_goals:Jc}),Rs=h.object({id:h.string(),metric_id:h.string()}),Zc=h.enum(["LANGUAGE_UNSPECIFIED","LANGUAGE_DE_DE","LANGUAGE_EN_US","LANGUAGE_EN_GB","LANGUAGE_ES_ES","LANGUAGE_FR_FR","LANGUAGE_FR_CA","LANGUAGE_GA_IE","LANGUAGE_IT_IT","LANGUAGE_JA_JP","LANGUAGE_KO_KR","LANGUAGE_NL_NL","LANGUAGE_PT_BR","LANGUAGE_SV_SE","LANGUAGE_TH_TH","LANGUAGE_ZH_CN","LANGUAGE_ZH_TW"]),Yc=h.enum(["LOCALE_UNSPECIFIED","LOCALE_AR_AE","LOCALE_AR_BH","LOCALE_AR_DZ","LOCALE_AR_EG","LOCALE_AR_IQ","LOCALE_AR_JO","LOCALE_AR_KW","LOCALE_AR_LB","LOCALE_AR_LY","LOCALE_AR_MA","LOCALE_AR_OM","LOCALE_AR_QA","LOCALE_AR_SA","LOCALE_AR_SD","LOCALE_AR_SY","LOCALE_AR_TN","LOCALE_AR_YE","LOCALE_BE_BY","LOCALE_BG_BG","LOCALE_CA_ES","LOCALE_CS_CZ","LOCALE_DA_DK","LOCALE_DE_AT","LOCALE_DE_CH","LOCALE_DE_DE","LOCALE_DE_LU","LOCALE_EL_CY","LOCALE_EL_GR","LOCALE_EN_AU","LOCALE_EN_CA","LOCALE_EN_GB","LOCALE_EN_IE","LOCALE_EN_IN","LOCALE_EN_MT","LOCALE_EN_NZ","LOCALE_EN_PH","LOCALE_EN_SG","LOCALE_EN_US","LOCALE_EN_ZA","LOCALE_ES_AR","LOCALE_ES_BO","LOCALE_ES_CL","LOCALE_ES_CO","LOCALE_ES_CR","LOCALE_ES_DO","LOCALE_ES_EC","LOCALE_ES_ES","LOCALE_ES_GT","LOCALE_ES_HN","LOCALE_ES_MX","LOCALE_ES_NI","LOCALE_ES_PA","LOCALE_ES_PE","LOCALE_ES_PR","LOCALE_ES_PY","LOCALE_ES_SV","LOCALE_ES_US","LOCALE_ES_UY","LOCALE_ES_VE","LOCALE_ET_EE","LOCALE_FI_FI","LOCALE_FR_BE","LOCALE_FR_CA","LOCALE_FR_CH","LOCALE_FR_FR","LOCALE_FR_LU","LOCALE_GA_IE","LOCALE_HE_IL","LOCALE_HI_IN","LOCALE_HR_HR","LOCALE_HU_HU","LOCALE_ID_ID","LOCALE_IN_ID","LOCALE_IS_IS","LOCALE_IT_CH","LOCALE_IT_IT","LOCALE_IW_IL","LOCALE_JA_JP","LOCALE_KO_KR","LOCALE_LT_LT","LOCALE_LV_LV","LOCALE_MK_MK","LOCALE_MS_MY","LOCALE_MT_MT","LOCALE_NL_BE","LOCALE_NL_NL","LOCALE_NB_NO","LOCALE_NO_NO","LOCALE_PL_PL","LOCALE_PT_BR","LOCALE_PT_PT","LOCALE_RO_RO","LOCALE_RU_RU","LOCALE_SK_SK","LOCALE_SL_SI","LOCALE_SQ_AL","LOCALE_SR_BA","LOCALE_SR_ME","LOCALE_SR_RS","LOCALE_SV_SE","LOCALE_TH_TH","LOCALE_TR_TR","LOCALE_UK_UA","LOCALE_VI_VN","LOCALE_ZH_CN","LOCALE_ZH_HK","LOCALE_ZH_SG","LOCALE_ZH_TW"]),Xc=h.enum(["OUTPUT_FORMAT_UNSPECIFIED","OUTPUT_FORMAT_HTML","OUTPUT_FORMAT_TEXT"]),gr=h.object({bundle_request:h.object({version:h.number(),options:h.object({output_format:Xc,time_zone:h.string(),language:Zc,locale:Yc}),input:h.object({metadata:h.object({name:h.string().nonempty(),metric_id:h.string().nonempty(),definition_id:h.string().nonempty()}),metric:h.object({definition:h.object({datasource:h.object({id:h.string()}),basic_specification:Ao,is_running_total:h.boolean()}),metric_specification:_s,extension_options:Es,representation_options:Cs,insights_options:vs,goals:Ss.optional()})})})}),eu=h.object({type:h.string(),insights:h.array(h.object({result:h.object({type:h.string(),version:h.number(),content:h.string().optional(),markup:h.string().optional(),viz:h.any().optional(),facts:h.any().optional(),characterization:h.string().optional(),question:h.string(),score:h.number()}),insight_type:h.string()})),summaries:h.array(h.object({result:h.object({id:h.string(),markup:h.string().optional(),viz:h.any().optional(),generation_id:h.string(),timestamp:h.string().optional(),last_attempted_timestamp:h.string().optional()})}))}),xs=h.object({bundle_response:h.object({result:h.object({insight_groups:h.array(eu),has_errors:h.boolean(),characterization:h.string()})})}),br=["ban","springboard","basic","detail"],Be=["DEFINITION_VIEW_BASIC","DEFINITION_VIEW_FULL","DEFINITION_VIEW_DEFAULT"];var ru=ct({method:"get",path:"/pulse/definitions",alias:"listAllPulseMetricDefinitions",description:"Returns a list of all published Pulse Metric Definitions on the specified site.",parameters:[{name:"view",type:"Query",schema:j.optional(j.enum(Be)),description:`The range of metrics to return for a definition. The default is 'DEFINITION_VIEW_BASIC' if not specified.
4
+ `,process.stderr.write(t))},pi=({requestId:t,toolName:e,args:r,username:o})=>({type:"tool",requestId:t,...o?{username:o}:{},tool:{name:e,...r!==void 0?{args:r}:{}}});function ve(t){return async(e,r,{logger:o,requestId:i}={logger:e.name})=>{if(ci?.log({message:r,level:t,logger:o}),!!Oe(t))return e.server.notification({method:"notifications/message",params:{level:t,logger:o,data:JSON.stringify({timestamp:new Date().toISOString(),currentLogLevel:Et,message:r},null,2)}},{relatedRequestId:i})}}import{appendFile as Ba}from"node:fs/promises";import{existsSync as za,mkdirSync as Wa}from"fs";import{join as Ha}from"path";function W(t){if(t instanceof Error)return t.message;try{return JSON.stringify(t)??"undefined"}catch{return`${t}`}}var tr=class{_logDirectory;_fileMutexes=new Map;constructor({logDirectory:e}){this._logDirectory=e,za(this._logDirectory)||Wa(this._logDirectory,{recursive:!0})}async log(e){let r=new Date().toISOString(),o=`${new Date(new Date().setMinutes(0,0,0)).toISOString().replace(/[:.]/g,"-")}.log`,i=Ha(this._logDirectory,o),n=i,a=(this._fileMutexes.get(n)??Promise.resolve()).then(async()=>{try{await Ba(i,JSON.stringify({timestamp:r,...e})+`
5
+ `)}catch(c){Me(`Failed to write to log file ${i}: ${W(c)}`)}});this._fileMutexes.set(n,a),a.finally(()=>{this._fileMutexes.get(n)===a&&this._fileMutexes.delete(n)}),await a}};import{McpServer as kp}from"@modelcontextprotocol/sdk/server/mcp.js";import{SetLevelRequestSchema as Pp}from"@modelcontextprotocol/sdk/types.js";var mi={name:"@tableau/mcp-server",description:"An MCP server for Tableau, providing a suite of tools that will make it easier for developers to build AI applications that integrate with Tableau.",version:"1.12.4",repository:{type:"git",url:"git+https://github.com/tableau/tableau-mcp.git"},homepage:"https://github.com/tableau/tableau-mcp",bugs:"https://github.com/tableau/tableau-mcp/issues",author:"Tableau",type:"module",license:"Apache-2.0",keywords:["tableau","mcp"],bin:{"tableau-mcp-server":"./build/index.js"},scripts:{":build":"npx rimraf ./build && esbuild src/index.ts --bundle --packages=external --platform=node --format=esm --minify --outdir=build --sourcemap",":build:dev":"npx rimraf ./build && esbuild src/index.ts --bundle --packages=external --platform=node --format=esm --outdir=build --sourcemap",build:"run-s :build exec-perms","build:dev":"run-s :build:dev exec-perms","build:watch":"npm run :build:dev -- --watch","build:docker":"docker build -t tableau-mcp .",":build:mcpb":"npx -y @anthropic-ai/mcpb pack . tableau-mcp.mcpb","build:mcpb":"run-s build:manifest:script build:manifest :build:mcpb","build:manifest":"node build/scripts/createClaudeMcpBundleManifest.mjs","build:manifest:script":"esbuild src/scripts/createClaudeMcpBundleManifest.ts --bundle --platform=node --format=esm --outdir=build/scripts --sourcemap=inline --out-extension:.js=.mjs","start:http":"node build/index.js","start:http:docker":"docker run -p 3927:3927 -i --rm --env-file env.list tableau-mcp",lint:"npm exec eslint",inspect:"npx @modelcontextprotocol/inspector --config config.json --server tableau",":inspect:http":"npx @modelcontextprotocol/inspector --config config.http.json --server tableau","inspect:http":"run-p start:http :inspect:http","inspect:docker":"npx @modelcontextprotocol/inspector --config config.docker.json --server tableau","inspect:docker:http":"run-p start:http:docker :inspect:http","build:inspect":"run-s build inspect","build:inspect:docker":"run-s build:docker inspect:docker","build:inspect:docker:http":"run-s build:docker inspect:docker:http","exec-perms":"shx chmod +x build/*.js",test:"vitest --config ./vitest.config.ts","test:e2e":"vitest --config ./vitest.config.e2e.ts","test:eval":"vitest --config ./vitest.config.eval.ts","test:oauth":"vitest --config ./vitest.config.oauth.ts",coverage:"vitest run --config ./vitest.config.ts --coverage","version:major":"npm version major --no-git-tag-version","version:minor":"npm version minor --no-git-tag-version","version:patch":"npm version patch --no-git-tag-version"},dependencies:{"@modelcontextprotocol/sdk":"^1.12.1","@zodios/core":"^10.9.6",cors:"^2.8.5",dotenv:"^16.5.0",express:"^5.1.0","fast-levenshtein":"^3.0.0",jose:"^6.0.12","ts-results-es":"^5.0.1",zod:"^3.24.3","zod-validation-error":"^4.0.1"},devDependencies:{"@anthropic-ai/mcpb":"^1.0.0","@eslint/eslintrc":"^3.3.1","@eslint/js":"^9.25.1","@modelcontextprotocol/inspector":"^0.16.6","@openai/agents":"^0.1.9","@types/cors":"^2.8.19","@types/eslint__js":"^8.42.3","@types/express":"^5.0.3","@types/fast-levenshtein":"^0.0.1","@types/node":"^22.15.3","@types/supertest":"^6.0.3","@typescript-eslint/eslint-plugin":"^8.31.1","@typescript-eslint/parser":"^8.31.1","@vitest/coverage-v8":"^3.1.3",esbuild:"^0.25.5",eslint:"^9.25.1","eslint-config-prettier":"^10.1.2","eslint-plugin-prettier":"^5.2.6","eslint-plugin-simple-import-sort":"^12.1.1","npm-run-all":"^4.1.5",openai:"^5.23.2",prettier:"^3.5.3",rimraf:"^6.0.1",shx:"^0.4.0",supertest:"^7.1.4",typescript:"^5.8.3","typescript-eslint":"^8.31.1",vitest:"^3.1.3"},engines:{node:">=22.7.5"}};import{Ok as xd}from"ts-results-es";import{z as hn}from"zod";import{Err as fi,Ok as $a}from"ts-results-es";var hi=t=>{let e=bi(t);if(e.isErr())return t;let r=e.value;return Oe("debug")?(r.data?.credentials&&(r.data.credentials="<redacted>"),Array.isArray(r?.data?.datasource?.connections)&&r.data.datasource.connections.forEach(i=>{i.connectionUsername="<redacted>",i.connectionPassword="<redacted>"}),r.headers?.["X-Tableau-Auth"]&&(r.headers["X-Tableau-Auth"]="<redacted>"),r.params?.user_id&&(r.params.user_id="<redacted>")):(delete r.data,delete r.headers,delete r.params),r},gi=t=>{let e=bi(t);if(e.isErr())return t;let r=e.value;return Oe("debug")?r.data?.credentials&&(r.data.credentials="<redacted>"):(delete r.data,delete r.headers),r};function bi(t){try{return $a(structuredClone(t))}catch(e){if(e instanceof Error)return fi(e);let r=W(e);return Me(`Could not clone object, notification may not be sanitized! Error: ${r}`),fi(new Error(r))}}function rr(t){return{method:t.method??"UNKNOWN METHOD",url:t.url??"UNKNOWN URL",headers:t.headers,data:t.data,params:t.params}}function or(t){return{url:t.config.url??"UNKNOWN URL",status:t.status,headers:t.headers,data:t.data}}import{Zodios as Ai}from"@zodios/core";import{randomUUID as Qa}from"node:crypto";import{SignJWT as Ka}from"jose";async function yi({username:t,connectedApp:e,scopes:r,additionalPayload:o}){let i={alg:"HS256",typ:"JWT",kid:e.secretId},n={jti:Qa(),iss:e.clientId,aud:"tableau",sub:t,scp:[...r],iat:Math.floor(Date.now()/1e3)-5,exp:Math.floor(Date.now()/1e3)+5*60,...o};return await new Ka(n).setProtectedHeader(i).sign(new TextEncoder().encode(e.secretValue))}import{makeApi as Ja,makeEndpoint as Ti}from"@zodios/core";import{z as ye}from"zod";import{z as Ne}from"zod";var wi=Ne.object({credentials:Ne.object({site:Ne.object({id:Ne.string()}),user:Ne.object({id:Ne.string()}),token:Ne.string()})});var Za=ye.object({credentials:ye.object({site:ye.object({contentUrl:ye.string()})}).and(ye.object({personalAccessTokenName:ye.string(),personalAccessTokenSecret:ye.string()}).or(ye.object({jwt:ye.string()})))}),Ya=Ti({method:"post",path:"/auth/signin",alias:"signIn",description:"Signs in with Tableau credentials.",response:wi,parameters:[{name:"credentials",type:"Body",schema:Za}]}),Xa=Ti({method:"post",path:"/auth/signout",alias:"signOut",description:"Signs you out of the current session. This call invalidates the authentication token that is created by a call to Sign In.",response:ye.void()}),el=Ja([Ya,Xa]),$r=[...el];var Fe=class{_apiClient;constructor(e){this._apiClient=e}get interceptors(){return this._apiClient.axios.interceptors}};var H=class extends Fe{_creds;get authHeader(){if(!this._creds)throw new Error("Authenticate by calling signIn() first");return{headers:{"X-Tableau-Auth":this._creds.token}}}get userId(){if(!this._creds)throw new Error("Authenticate by calling signIn() first");return this._creds.user.id}constructor(e,r){super(e),this._creds=r}};var _t=class extends Fe{constructor(e){super(new Ai(e,$r))}signIn=async e=>(await this._apiClient.signIn({credentials:{site:{contentUrl:e.siteName},...await(async()=>{switch(e.type){case"pat":return{personalAccessTokenName:e.patName,personalAccessTokenSecret:e.patValue};case"direct-trust":return{jwt:await yi({username:e.username,connectedApp:{clientId:e.clientId,secretId:e.secretId,secretValue:e.secretValue},scopes:e.scopes,additionalPayload:e.additionalPayload})}}})()}})).credentials},ir=class extends H{constructor(e,r){super(new Ai(e,$r),r)}signOut=async()=>{await this._apiClient.signOut(void 0,{...this.authHeader})}};import{Zodios as al}from"@zodios/core";import{makeApi as ol,makeEndpoint as il}from"@zodios/core";import{z as et}from"zod";import{z as k}from"zod";var tl=k.enum(["hitsTotal","hitsSmallSpanTotal","hitsMediumSpanTotal","hitsLargeSpanTotal","downstreamWorkbookCount"]),Ei=k.array(k.object({method:tl,sortDirection:k.enum(["asc","desc"]).default("asc").optional()})).nonempty(),_i=k.enum(["lens","datasource","virtualconnection","collection","project","flow","datarole","table","database","view","workbook"]),Si=k.union([k.array(k.string().datetime()).nonempty(),k.object({startDate:k.string().datetime(),endDate:k.string().datetime().optional()}).strict(),k.object({startDate:k.string().datetime().optional(),endDate:k.string().datetime()}).strict()]),Qr=k.object({contentTypes:k.array(_i).nonempty(),ownerIds:k.array(k.number().int()).nonempty(),modifiedTime:Si}).partial(),vi=k.union([Qr.extend({contentTypes:k.array(_i).nonempty()}).strict(),Qr.extend({ownerIds:k.array(k.number().int()).nonempty()}).strict(),Qr.extend({modifiedTime:Si}).strict()]),rl=k.object({uri:k.string(),content:k.record(k.string(),k.unknown())}),Ci=k.object({next:k.string(),prev:k.string(),pageIndex:k.number().int(),startIndex:k.number().int(),total:k.number().int(),limit:k.number().int(),items:k.array(rl)}).partial();var sl=il({method:"get",path:"/search",alias:"searchContent",description:"Searches across all supported content types for objects relevant to the search expression specified in the querystring of the request URI.",parameters:[{name:"terms",type:"Query",schema:et.string().optional()},{name:"page",type:"Query",schema:et.number().int().optional()},{name:"limit",type:"Query",schema:et.number().int().optional()},{name:"order_by",type:"Query",schema:et.string().optional()},{name:"filter",type:"Query",schema:et.string().optional()}],response:et.object({hits:Ci})}),nl=ol([sl]),Ri=[...nl];var St=class extends H{constructor(e,r){super(new al(e,Ri),r)}searchContent=async e=>(Object.entries(e).forEach(([o,i])=>{i===void 0&&delete e[o]}),(await this._apiClient.searchContent({queries:e,...this.authHeader})).hits)};import{Zodios as pl}from"@zodios/core";import{makeApi as ll,makeEndpoint as Ii}from"@zodios/core";import{z as qe}from"zod";import{z as nr}from"zod";import{z as Kr}from"zod";var sr=Kr.object({name:Kr.string(),id:Kr.string()});var Jr=nr.object({id:nr.string(),name:nr.string(),description:nr.string().optional(),project:sr});import{z as Ue}from"zod";var tt=Ue.object({pageNumber:Ue.coerce.number(),pageSize:Ue.coerce.number(),totalAvailable:Ue.coerce.number()}),Sf=Ue.object({next_page_token:Ue.string().optional(),total_available:Ue.coerce.number().optional()});import{z as xi}from"zod";var rt=[{name:"pageSize",type:"Query",schema:xi.number().optional(),description:"The number of items to return in one response. The minimum is 1. The maximum is 1000. The default is 100."},{name:"pageNumber",type:"Query",schema:xi.number().optional(),description:"The offset for paging. The default is 1."}];var cl=Ii({method:"get",path:"/sites/:siteId/datasources",alias:"listDatasources",description:"Returns a list of published data sources on the specified site. Supports a filter string as a query parameter in the format field:operator:value.",parameters:[...rt,{name:"siteId",type:"Path",schema:qe.string()},{name:"filter",type:"Query",schema:qe.string().optional(),description:"Filter string in the format field:operator:value (e.g., name:eq:Project Views)"}],response:qe.object({pagination:tt,datasources:qe.object({datasource:qe.optional(qe.array(Jr))})})}),ul=Ii({method:"get",path:"/sites/:siteId/datasources/:datasourceId",alias:"queryDatasource",description:"Returns information about the specified data source.",response:qe.object({datasource:Jr})}),dl=ll([cl,ul]),ki=[...dl];var vt=class extends H{constructor(e,r){super(new pl(e,ki),r)}listDatasources=async({siteId:e,filter:r,pageSize:o,pageNumber:i})=>{let n=await this._apiClient.listDatasources({params:{siteId:e},queries:{filter:r,pageSize:o,pageNumber:i},...this.authHeader});return{pagination:n.pagination,datasources:n.datasources.datasource??[]}};queryDatasource=async({siteId:e,datasourceId:r})=>(await this._apiClient.queryDatasource({params:{siteId:e,datasourceId:r},...this.authHeader})).datasource};import{Zodios as yl}from"@zodios/core";import{makeApi as ml,makeEndpoint as fl}from"@zodios/core";import{z as P}from"zod";var hl=P.object({data:P.object({publishedDatasources:P.array(P.object({name:P.string().nullable(),description:P.string().nullable(),owner:P.object({name:P.string().nullable()}),fields:P.array(P.object({name:P.string(),isHidden:P.boolean().nullable(),description:P.string().nullable(),descriptionInherited:P.array(P.object({attribute:P.string(),value:P.string().nullable()}).nullable()).nullable(),fullyQualifiedName:P.string(),__typename:P.string(),dataCategory:P.string().nullish(),role:P.string().nullish(),dataType:P.string().nullish(),defaultFormat:P.string().nullish(),semanticRole:P.string().nullish(),aggregation:P.string().nullish(),aggregationParam:P.string().nullish(),formula:P.string().nullish(),isAutoGenerated:P.boolean().nullish(),hasUserReference:P.boolean().nullish(),binSize:P.number().nullish(),hasOther:P.boolean().nullish(),delimiter:P.string().nullish(),combinationType:P.string().nullish()}))}))})}),gl=fl({method:"post",path:"/graphql",alias:"graphql",response:hl,parameters:[{name:"query",type:"Body",schema:P.object({query:P.string()})}]}),bl=ml([gl]),Pi=[...bl];var Ct=class extends H{constructor(e,r){super(new yl(e,Pi),r)}graphql=async e=>await this._apiClient.graphql({query:e},{...this.authHeader})};import{Zodios as Su}from"@zodios/core";import{Err as qs,Ok as vu}from"ts-results-es";function Rt(t,e){return function(){return t.apply(e,arguments)}}var{toString:wl}=Object.prototype,{getPrototypeOf:Yr}=Object,{iterator:lr,toStringTag:Li}=Symbol,cr=(t=>e=>{let r=wl.call(e);return t[r]||(t[r]=r.slice(8,-1).toLowerCase())})(Object.create(null)),he=t=>(t=t.toLowerCase(),e=>cr(e)===t),ur=t=>e=>typeof e===t,{isArray:it}=Array,ot=ur("undefined");function xt(t){return t!==null&&!ot(t)&&t.constructor!==null&&!ot(t.constructor)&&oe(t.constructor.isBuffer)&&t.constructor.isBuffer(t)}var Oi=he("ArrayBuffer");function Tl(t){let e;return typeof ArrayBuffer<"u"&&ArrayBuffer.isView?e=ArrayBuffer.isView(t):e=t&&t.buffer&&Oi(t.buffer),e}var Al=ur("string"),oe=ur("function"),Mi=ur("number"),It=t=>t!==null&&typeof t=="object",El=t=>t===!0||t===!1,ar=t=>{if(cr(t)!=="object")return!1;let e=Yr(t);return(e===null||e===Object.prototype||Object.getPrototypeOf(e)===null)&&!(Li in t)&&!(lr in t)},_l=t=>{if(!It(t)||xt(t))return!1;try{return Object.keys(t).length===0&&Object.getPrototypeOf(t)===Object.prototype}catch{return!1}},Sl=he("Date"),vl=he("File"),Cl=he("Blob"),Rl=he("FileList"),xl=t=>It(t)&&oe(t.pipe),Il=t=>{let e;return t&&(typeof FormData=="function"&&t instanceof FormData||oe(t.append)&&((e=cr(t))==="formdata"||e==="object"&&oe(t.toString)&&t.toString()==="[object FormData]"))},kl=he("URLSearchParams"),[Pl,Dl,Ll,Ol]=["ReadableStream","Request","Response","Headers"].map(he),Ml=t=>t.trim?t.trim():t.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"");function kt(t,e,{allOwnKeys:r=!1}={}){if(t===null||typeof t>"u")return;let o,i;if(typeof t!="object"&&(t=[t]),it(t))for(o=0,i=t.length;o<i;o++)e.call(null,t[o],o,t);else{if(xt(t))return;let n=r?Object.getOwnPropertyNames(t):Object.keys(t),s=n.length,a;for(o=0;o<s;o++)a=n[o],e.call(null,t[a],a,t)}}function Ni(t,e){if(xt(t))return null;e=e.toLowerCase();let r=Object.keys(t),o=r.length,i;for(;o-- >0;)if(i=r[o],e===i.toLowerCase())return i;return null}var je=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:global,Fi=t=>!ot(t)&&t!==je;function Zr(){let{caseless:t,skipUndefined:e}=Fi(this)&&this||{},r={},o=(i,n)=>{let s=t&&Ni(r,n)||n;ar(r[s])&&ar(i)?r[s]=Zr(r[s],i):ar(i)?r[s]=Zr({},i):it(i)?r[s]=i.slice():(!e||!ot(i))&&(r[s]=i)};for(let i=0,n=arguments.length;i<n;i++)arguments[i]&&kt(arguments[i],o);return r}var Nl=(t,e,r,{allOwnKeys:o}={})=>(kt(e,(i,n)=>{r&&oe(i)?t[n]=Rt(i,r):t[n]=i},{allOwnKeys:o}),t),Fl=t=>(t.charCodeAt(0)===65279&&(t=t.slice(1)),t),Ul=(t,e,r,o)=>{t.prototype=Object.create(e.prototype,o),t.prototype.constructor=t,Object.defineProperty(t,"super",{value:e.prototype}),r&&Object.assign(t.prototype,r)},ql=(t,e,r,o)=>{let i,n,s,a={};if(e=e||{},t==null)return e;do{for(i=Object.getOwnPropertyNames(t),n=i.length;n-- >0;)s=i[n],(!o||o(s,t,e))&&!a[s]&&(e[s]=t[s],a[s]=!0);t=r!==!1&&Yr(t)}while(t&&(!r||r(t,e))&&t!==Object.prototype);return e},jl=(t,e,r)=>{t=String(t),(r===void 0||r>t.length)&&(r=t.length),r-=e.length;let o=t.indexOf(e,r);return o!==-1&&o===r},Vl=t=>{if(!t)return null;if(it(t))return t;let e=t.length;if(!Mi(e))return null;let r=new Array(e);for(;e-- >0;)r[e]=t[e];return r},Bl=(t=>e=>t&&e instanceof t)(typeof Uint8Array<"u"&&Yr(Uint8Array)),zl=(t,e)=>{let o=(t&&t[lr]).call(t),i;for(;(i=o.next())&&!i.done;){let n=i.value;e.call(t,n[0],n[1])}},Wl=(t,e)=>{let r,o=[];for(;(r=t.exec(e))!==null;)o.push(r);return o},Hl=he("HTMLFormElement"),Gl=t=>t.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,function(r,o,i){return o.toUpperCase()+i}),Di=(({hasOwnProperty:t})=>(e,r)=>t.call(e,r))(Object.prototype),$l=he("RegExp"),Ui=(t,e)=>{let r=Object.getOwnPropertyDescriptors(t),o={};kt(r,(i,n)=>{let s;(s=e(i,n,t))!==!1&&(o[n]=s||i)}),Object.defineProperties(t,o)},Ql=t=>{Ui(t,(e,r)=>{if(oe(t)&&["arguments","caller","callee"].indexOf(r)!==-1)return!1;let o=t[r];if(oe(o)){if(e.enumerable=!1,"writable"in e){e.writable=!1;return}e.set||(e.set=()=>{throw Error("Can not rewrite read-only method '"+r+"'")})}})},Kl=(t,e)=>{let r={},o=i=>{i.forEach(n=>{r[n]=!0})};return it(t)?o(t):o(String(t).split(e)),r},Jl=()=>{},Zl=(t,e)=>t!=null&&Number.isFinite(t=+t)?t:e;function Yl(t){return!!(t&&oe(t.append)&&t[Li]==="FormData"&&t[lr])}var Xl=t=>{let e=new Array(10),r=(o,i)=>{if(It(o)){if(e.indexOf(o)>=0)return;if(xt(o))return o;if(!("toJSON"in o)){e[i]=o;let n=it(o)?[]:{};return kt(o,(s,a)=>{let c=r(s,i+1);!ot(c)&&(n[a]=c)}),e[i]=void 0,n}}return o};return r(t,0)},ec=he("AsyncFunction"),tc=t=>t&&(It(t)||oe(t))&&oe(t.then)&&oe(t.catch),qi=((t,e)=>t?setImmediate:e?((r,o)=>(je.addEventListener("message",({source:i,data:n})=>{i===je&&n===r&&o.length&&o.shift()()},!1),i=>{o.push(i),je.postMessage(r,"*")}))(`axios@${Math.random()}`,[]):r=>setTimeout(r))(typeof setImmediate=="function",oe(je.postMessage)),rc=typeof queueMicrotask<"u"?queueMicrotask.bind(je):typeof process<"u"&&process.nextTick||qi,oc=t=>t!=null&&oe(t[lr]),d={isArray:it,isArrayBuffer:Oi,isBuffer:xt,isFormData:Il,isArrayBufferView:Tl,isString:Al,isNumber:Mi,isBoolean:El,isObject:It,isPlainObject:ar,isEmptyObject:_l,isReadableStream:Pl,isRequest:Dl,isResponse:Ll,isHeaders:Ol,isUndefined:ot,isDate:Sl,isFile:vl,isBlob:Cl,isRegExp:$l,isFunction:oe,isStream:xl,isURLSearchParams:kl,isTypedArray:Bl,isFileList:Rl,forEach:kt,merge:Zr,extend:Nl,trim:Ml,stripBOM:Fl,inherits:Ul,toFlatObject:ql,kindOf:cr,kindOfTest:he,endsWith:jl,toArray:Vl,forEachEntry:zl,matchAll:Wl,isHTMLForm:Hl,hasOwnProperty:Di,hasOwnProp:Di,reduceDescriptors:Ui,freezeMethods:Ql,toObjectSet:Kl,toCamelCase:Gl,noop:Jl,toFiniteNumber:Zl,findKey:Ni,global:je,isContextDefined:Fi,isSpecCompliantForm:Yl,toJSONObject:Xl,isAsyncFn:ec,isThenable:tc,setImmediate:qi,asap:rc,isIterable:oc};function st(t,e,r,o,i){Error.call(this),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=new Error().stack,this.message=t,this.name="AxiosError",e&&(this.code=e),r&&(this.config=r),o&&(this.request=o),i&&(this.response=i,this.status=i.status?i.status:null)}d.inherits(st,Error,{toJSON:function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:d.toJSONObject(this.config),code:this.code,status:this.status}}});var ji=st.prototype,Vi={};["ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","ECONNABORTED","ETIMEDOUT","ERR_NETWORK","ERR_FR_TOO_MANY_REDIRECTS","ERR_DEPRECATED","ERR_BAD_RESPONSE","ERR_BAD_REQUEST","ERR_CANCELED","ERR_NOT_SUPPORT","ERR_INVALID_URL"].forEach(t=>{Vi[t]={value:t}});Object.defineProperties(st,Vi);Object.defineProperty(ji,"isAxiosError",{value:!0});st.from=(t,e,r,o,i,n)=>{let s=Object.create(ji);d.toFlatObject(t,s,function(u){return u!==Error.prototype},l=>l!=="isAxiosError");let a=t&&t.message?t.message:"Error",c=e==null&&t?t.code:e;return st.call(s,a,c,r,o,i),t&&s.cause==null&&Object.defineProperty(s,"cause",{value:t,configurable:!0}),s.name=t&&t.name||"Error",n&&Object.assign(s,n),s};var T=st;import ic from"form-data";var dr=ic;function Xr(t){return d.isPlainObject(t)||d.isArray(t)}function zi(t){return d.endsWith(t,"[]")?t.slice(0,-2):t}function Bi(t,e,r){return t?t.concat(e).map(function(i,n){return i=zi(i),!r&&n?"["+i+"]":i}).join(r?".":""):e}function sc(t){return d.isArray(t)&&!t.some(Xr)}var nc=d.toFlatObject(d,{},null,function(e){return/^is[A-Z]/.test(e)});function ac(t,e,r){if(!d.isObject(t))throw new TypeError("target must be an object");e=e||new(dr||FormData),r=d.toFlatObject(r,{metaTokens:!0,dots:!1,indexes:!1},!1,function(y,w){return!d.isUndefined(w[y])});let o=r.metaTokens,i=r.visitor||u,n=r.dots,s=r.indexes,c=(r.Blob||typeof Blob<"u"&&Blob)&&d.isSpecCompliantForm(e);if(!d.isFunction(i))throw new TypeError("visitor must be a function");function l(f){if(f===null)return"";if(d.isDate(f))return f.toISOString();if(d.isBoolean(f))return f.toString();if(!c&&d.isBlob(f))throw new T("Blob is not supported. Use a Buffer instead.");return d.isArrayBuffer(f)||d.isTypedArray(f)?c&&typeof Blob=="function"?new Blob([f]):Buffer.from(f):f}function u(f,y,w){let v=f;if(f&&!w&&typeof f=="object"){if(d.endsWith(y,"{}"))y=o?y:y.slice(0,-2),f=JSON.stringify(f);else if(d.isArray(f)&&sc(f)||(d.isFileList(f)||d.endsWith(y,"[]"))&&(v=d.toArray(f)))return y=zi(y),v.forEach(function(A,x){!(d.isUndefined(A)||A===null)&&e.append(s===!0?Bi([y],x,n):s===null?y:y+"[]",l(A))}),!1}return Xr(f)?!0:(e.append(Bi(w,y,n),l(f)),!1)}let p=[],g=Object.assign(nc,{defaultVisitor:u,convertValue:l,isVisitable:Xr});function b(f,y){if(!d.isUndefined(f)){if(p.indexOf(f)!==-1)throw Error("Circular reference detected in "+y.join("."));p.push(f),d.forEach(f,function(v,D){(!(d.isUndefined(v)||v===null)&&i.call(e,v,d.isString(D)?D.trim():D,y,g))===!0&&b(v,y?y.concat(D):[D])}),p.pop()}}if(!d.isObject(t))throw new TypeError("data must be an object");return b(t),e}var Ce=ac;function Wi(t){let e={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"};return encodeURIComponent(t).replace(/[!'()~]|%20|%00/g,function(o){return e[o]})}function Hi(t,e){this._pairs=[],t&&Ce(t,this,e)}var Gi=Hi.prototype;Gi.append=function(e,r){this._pairs.push([e,r])};Gi.toString=function(e){let r=e?function(o){return e.call(this,o,Wi)}:Wi;return this._pairs.map(function(i){return r(i[0])+"="+r(i[1])},"").join("&")};var $i=Hi;function lc(t){return encodeURIComponent(t).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+")}function Ve(t,e,r){if(!e)return t;let o=r&&r.encode||lc;d.isFunction(r)&&(r={serialize:r});let i=r&&r.serialize,n;if(i?n=i(e,r):n=d.isURLSearchParams(e)?e.toString():new $i(e,r).toString(o),n){let s=t.indexOf("#");s!==-1&&(t=t.slice(0,s)),t+=(t.indexOf("?")===-1?"?":"&")+n}return t}var eo=class{constructor(){this.handlers=[]}use(e,r,o){return this.handlers.push({fulfilled:e,rejected:r,synchronous:o?o.synchronous:!1,runWhen:o?o.runWhen:null}),this.handlers.length-1}eject(e){this.handlers[e]&&(this.handlers[e]=null)}clear(){this.handlers&&(this.handlers=[])}forEach(e){d.forEach(this.handlers,function(o){o!==null&&e(o)})}},to=eo;var nt={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1};import uc from"crypto";import cc from"url";var Qi=cc.URLSearchParams;var ro="abcdefghijklmnopqrstuvwxyz",Ki="0123456789",Ji={DIGIT:Ki,ALPHA:ro,ALPHA_DIGIT:ro+ro.toUpperCase()+Ki},dc=(t=16,e=Ji.ALPHA_DIGIT)=>{let r="",{length:o}=e,i=new Uint32Array(t);uc.randomFillSync(i);for(let n=0;n<t;n++)r+=e[i[n]%o];return r},Zi={isNode:!0,classes:{URLSearchParams:Qi,FormData:dr,Blob:typeof Blob<"u"&&Blob||null},ALPHABET:Ji,generateString:dc,protocols:["http","https","file","data"]};var so={};Ra(so,{hasBrowserEnv:()=>io,hasStandardBrowserEnv:()=>pc,hasStandardBrowserWebWorkerEnv:()=>mc,navigator:()=>oo,origin:()=>fc});var io=typeof window<"u"&&typeof document<"u",oo=typeof navigator=="object"&&navigator||void 0,pc=io&&(!oo||["ReactNative","NativeScript","NS"].indexOf(oo.product)<0),mc=typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope&&typeof self.importScripts=="function",fc=io&&window.location.href||"http://localhost";var L={...so,...Zi};function no(t,e){return Ce(t,new L.classes.URLSearchParams,{visitor:function(r,o,i,n){return L.isNode&&d.isBuffer(r)?(this.append(o,r.toString("base64")),!1):n.defaultVisitor.apply(this,arguments)},...e})}function hc(t){return d.matchAll(/\w+|\[(\w*)]/g,t).map(e=>e[0]==="[]"?"":e[1]||e[0])}function gc(t){let e={},r=Object.keys(t),o,i=r.length,n;for(o=0;o<i;o++)n=r[o],e[n]=t[n];return e}function bc(t){function e(r,o,i,n){let s=r[n++];if(s==="__proto__")return!0;let a=Number.isFinite(+s),c=n>=r.length;return s=!s&&d.isArray(i)?i.length:s,c?(d.hasOwnProp(i,s)?i[s]=[i[s],o]:i[s]=o,!a):((!i[s]||!d.isObject(i[s]))&&(i[s]=[]),e(r,o,i[s],n)&&d.isArray(i[s])&&(i[s]=gc(i[s])),!a)}if(d.isFormData(t)&&d.isFunction(t.entries)){let r={};return d.forEachEntry(t,(o,i)=>{e(hc(o),i,r,0)}),r}return null}var pr=bc;function yc(t,e,r){if(d.isString(t))try{return(e||JSON.parse)(t),d.trim(t)}catch(o){if(o.name!=="SyntaxError")throw o}return(r||JSON.stringify)(t)}var ao={transitional:nt,adapter:["xhr","http","fetch"],transformRequest:[function(e,r){let o=r.getContentType()||"",i=o.indexOf("application/json")>-1,n=d.isObject(e);if(n&&d.isHTMLForm(e)&&(e=new FormData(e)),d.isFormData(e))return i?JSON.stringify(pr(e)):e;if(d.isArrayBuffer(e)||d.isBuffer(e)||d.isStream(e)||d.isFile(e)||d.isBlob(e)||d.isReadableStream(e))return e;if(d.isArrayBufferView(e))return e.buffer;if(d.isURLSearchParams(e))return r.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),e.toString();let a;if(n){if(o.indexOf("application/x-www-form-urlencoded")>-1)return no(e,this.formSerializer).toString();if((a=d.isFileList(e))||o.indexOf("multipart/form-data")>-1){let c=this.env&&this.env.FormData;return Ce(a?{"files[]":e}:e,c&&new c,this.formSerializer)}}return n||i?(r.setContentType("application/json",!1),yc(e)):e}],transformResponse:[function(e){let r=this.transitional||ao.transitional,o=r&&r.forcedJSONParsing,i=this.responseType==="json";if(d.isResponse(e)||d.isReadableStream(e))return e;if(e&&d.isString(e)&&(o&&!this.responseType||i)){let s=!(r&&r.silentJSONParsing)&&i;try{return JSON.parse(e,this.parseReviver)}catch(a){if(s)throw a.name==="SyntaxError"?T.from(a,T.ERR_BAD_RESPONSE,this,null,this.response):a}}return e}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:L.classes.FormData,Blob:L.classes.Blob},validateStatus:function(e){return e>=200&&e<300},headers:{common:{Accept:"application/json, text/plain, */*","Content-Type":void 0}}};d.forEach(["delete","get","head","post","put","patch"],t=>{ao.headers[t]={}});var at=ao;var wc=d.toObjectSet(["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"]),Yi=t=>{let e={},r,o,i;return t&&t.split(`
6
+ `).forEach(function(s){i=s.indexOf(":"),r=s.substring(0,i).trim().toLowerCase(),o=s.substring(i+1).trim(),!(!r||e[r]&&wc[r])&&(r==="set-cookie"?e[r]?e[r].push(o):e[r]=[o]:e[r]=e[r]?e[r]+", "+o:o)}),e};var Xi=Symbol("internals");function Pt(t){return t&&String(t).trim().toLowerCase()}function mr(t){return t===!1||t==null?t:d.isArray(t)?t.map(mr):String(t)}function Tc(t){let e=Object.create(null),r=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g,o;for(;o=r.exec(t);)e[o[1]]=o[2];return e}var Ac=t=>/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(t.trim());function lo(t,e,r,o,i){if(d.isFunction(o))return o.call(this,e,r);if(i&&(e=r),!!d.isString(e)){if(d.isString(o))return e.indexOf(o)!==-1;if(d.isRegExp(o))return o.test(e)}}function Ec(t){return t.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,(e,r,o)=>r.toUpperCase()+o)}function _c(t,e){let r=d.toCamelCase(" "+e);["get","set","has"].forEach(o=>{Object.defineProperty(t,o+r,{value:function(i,n,s){return this[o].call(this,e,i,n,s)},configurable:!0})})}var lt=class{constructor(e){e&&this.set(e)}set(e,r,o){let i=this;function n(a,c,l){let u=Pt(c);if(!u)throw new Error("header name must be a non-empty string");let p=d.findKey(i,u);(!p||i[p]===void 0||l===!0||l===void 0&&i[p]!==!1)&&(i[p||c]=mr(a))}let s=(a,c)=>d.forEach(a,(l,u)=>n(l,u,c));if(d.isPlainObject(e)||e instanceof this.constructor)s(e,r);else if(d.isString(e)&&(e=e.trim())&&!Ac(e))s(Yi(e),r);else if(d.isObject(e)&&d.isIterable(e)){let a={},c,l;for(let u of e){if(!d.isArray(u))throw TypeError("Object iterator must return a key-value pair");a[l=u[0]]=(c=a[l])?d.isArray(c)?[...c,u[1]]:[c,u[1]]:u[1]}s(a,r)}else e!=null&&n(r,e,o);return this}get(e,r){if(e=Pt(e),e){let o=d.findKey(this,e);if(o){let i=this[o];if(!r)return i;if(r===!0)return Tc(i);if(d.isFunction(r))return r.call(this,i,o);if(d.isRegExp(r))return r.exec(i);throw new TypeError("parser must be boolean|regexp|function")}}}has(e,r){if(e=Pt(e),e){let o=d.findKey(this,e);return!!(o&&this[o]!==void 0&&(!r||lo(this,this[o],o,r)))}return!1}delete(e,r){let o=this,i=!1;function n(s){if(s=Pt(s),s){let a=d.findKey(o,s);a&&(!r||lo(o,o[a],a,r))&&(delete o[a],i=!0)}}return d.isArray(e)?e.forEach(n):n(e),i}clear(e){let r=Object.keys(this),o=r.length,i=!1;for(;o--;){let n=r[o];(!e||lo(this,this[n],n,e,!0))&&(delete this[n],i=!0)}return i}normalize(e){let r=this,o={};return d.forEach(this,(i,n)=>{let s=d.findKey(o,n);if(s){r[s]=mr(i),delete r[n];return}let a=e?Ec(n):String(n).trim();a!==n&&delete r[n],r[a]=mr(i),o[a]=!0}),this}concat(...e){return this.constructor.concat(this,...e)}toJSON(e){let r=Object.create(null);return d.forEach(this,(o,i)=>{o!=null&&o!==!1&&(r[i]=e&&d.isArray(o)?o.join(", "):o)}),r}[Symbol.iterator](){return Object.entries(this.toJSON())[Symbol.iterator]()}toString(){return Object.entries(this.toJSON()).map(([e,r])=>e+": "+r).join(`
7
+ `)}getSetCookie(){return this.get("set-cookie")||[]}get[Symbol.toStringTag](){return"AxiosHeaders"}static from(e){return e instanceof this?e:new this(e)}static concat(e,...r){let o=new this(e);return r.forEach(i=>o.set(i)),o}static accessor(e){let o=(this[Xi]=this[Xi]={accessors:{}}).accessors,i=this.prototype;function n(s){let a=Pt(s);o[a]||(_c(i,s),o[a]=!0)}return d.isArray(e)?e.forEach(n):n(e),this}};lt.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]);d.reduceDescriptors(lt.prototype,({value:t},e)=>{let r=e[0].toUpperCase()+e.slice(1);return{get:()=>t,set(o){this[r]=o}}});d.freezeMethods(lt);var V=lt;function Dt(t,e){let r=this||at,o=e||r,i=V.from(o.headers),n=o.data;return d.forEach(t,function(a){n=a.call(r,n,i.normalize(),e?e.status:void 0)}),i.normalize(),n}function Lt(t){return!!(t&&t.__CANCEL__)}function es(t,e,r){T.call(this,t??"canceled",T.ERR_CANCELED,e,r),this.name="CanceledError"}d.inherits(es,T,{__CANCEL__:!0});var ne=es;function we(t,e,r){let o=r.config.validateStatus;!r.status||!o||o(r.status)?t(r):e(new T("Request failed with status code "+r.status,[T.ERR_BAD_REQUEST,T.ERR_BAD_RESPONSE][Math.floor(r.status/100)-4],r.config,r.request,r))}function co(t){return/^([a-z][a-z\d+\-.]*:)?\/\//i.test(t)}function uo(t,e){return e?t.replace(/\/?\/$/,"")+"/"+e.replace(/^\/+/,""):t}function Be(t,e,r){let o=!co(e);return t&&(o||r==!1)?uo(t,e):e}import Fc from"proxy-from-env";import Uc from"http";import qc from"https";import jc from"util";import Vc from"follow-redirects";import Re from"zlib";var ze="1.12.1";function Ot(t){let e=/^([-+\w]{1,25})(:?\/\/|:)/.exec(t);return e&&e[1]||""}var Sc=/^(?:([^;]+);)?(?:[^;]+;)?(base64|),([\s\S]*)$/;function po(t,e,r){let o=r&&r.Blob||L.classes.Blob,i=Ot(t);if(e===void 0&&o&&(e=!0),i==="data"){t=i.length?t.slice(i.length+1):t;let n=Sc.exec(t);if(!n)throw new T("Invalid URL",T.ERR_INVALID_URL);let s=n[1],a=n[2],c=n[3],l=Buffer.from(decodeURIComponent(c),a?"base64":"utf8");if(e){if(!o)throw new T("Blob is not supported",T.ERR_NOT_SUPPORT);return new o([l],{type:s})}return l}throw new T("Unsupported protocol "+i,T.ERR_NOT_SUPPORT)}import dt from"stream";import vc from"stream";var mo=Symbol("internals"),fo=class extends vc.Transform{constructor(e){e=d.toFlatObject(e,{maxRate:0,chunkSize:64*1024,minChunkSize:100,timeWindow:500,ticksRate:2,samplesCount:15},null,(o,i)=>!d.isUndefined(i[o])),super({readableHighWaterMark:e.chunkSize});let r=this[mo]={timeWindow:e.timeWindow,chunkSize:e.chunkSize,maxRate:e.maxRate,minChunkSize:e.minChunkSize,bytesSeen:0,isCaptured:!1,notifiedBytesLoaded:0,ts:Date.now(),bytes:0,onReadCallback:null};this.on("newListener",o=>{o==="progress"&&(r.isCaptured||(r.isCaptured=!0))})}_read(e){let r=this[mo];return r.onReadCallback&&r.onReadCallback(),super._read(e)}_transform(e,r,o){let i=this[mo],n=i.maxRate,s=this.readableHighWaterMark,a=i.timeWindow,c=1e3/a,l=n/c,u=i.minChunkSize!==!1?Math.max(i.minChunkSize,l*.01):0,p=(b,f)=>{let y=Buffer.byteLength(b);i.bytesSeen+=y,i.bytes+=y,i.isCaptured&&this.emit("progress",i.bytesSeen),this.push(b)?process.nextTick(f):i.onReadCallback=()=>{i.onReadCallback=null,process.nextTick(f)}},g=(b,f)=>{let y=Buffer.byteLength(b),w=null,v=s,D,A=0;if(n){let x=Date.now();(!i.ts||(A=x-i.ts)>=a)&&(i.ts=x,D=l-i.bytes,i.bytes=D<0?-D:0,A=0),D=l-i.bytes}if(n){if(D<=0)return setTimeout(()=>{f(null,b)},a-A);D<v&&(v=D)}v&&y>v&&y-v>u&&(w=b.subarray(v),b=b.subarray(0,v)),p(b,w?()=>{process.nextTick(f,null,w)}:f)};g(e,function b(f,y){if(f)return o(f);y?g(y,b):o(null)})}},ho=fo;import{EventEmitter as Bc}from"events";import Rc from"util";import{Readable as xc}from"stream";var{asyncIterator:ts}=Symbol,Cc=async function*(t){t.stream?yield*t.stream():t.arrayBuffer?yield await t.arrayBuffer():t[ts]?yield*t[ts]():yield t},fr=Cc;var Ic=L.ALPHABET.ALPHA_DIGIT+"-_",Mt=typeof TextEncoder=="function"?new TextEncoder:new Rc.TextEncoder,We=`\r
8
+ `,kc=Mt.encode(We),Pc=2,go=class{constructor(e,r){let{escapeName:o}=this.constructor,i=d.isString(r),n=`Content-Disposition: form-data; name="${o(e)}"${!i&&r.name?`; filename="${o(r.name)}"`:""}${We}`;i?r=Mt.encode(String(r).replace(/\r?\n|\r\n?/g,We)):n+=`Content-Type: ${r.type||"application/octet-stream"}${We}`,this.headers=Mt.encode(n+We),this.contentLength=i?r.byteLength:r.size,this.size=this.headers.byteLength+this.contentLength+Pc,this.name=e,this.value=r}async*encode(){yield this.headers;let{value:e}=this;d.isTypedArray(e)?yield e:yield*fr(e),yield kc}static escapeName(e){return String(e).replace(/[\r\n"]/g,r=>({"\r":"%0D","\n":"%0A",'"':"%22"})[r])}},Dc=(t,e,r)=>{let{tag:o="form-data-boundary",size:i=25,boundary:n=o+"-"+L.generateString(i,Ic)}=r||{};if(!d.isFormData(t))throw TypeError("FormData instance required");if(n.length<1||n.length>70)throw Error("boundary must be 10-70 characters long");let s=Mt.encode("--"+n+We),a=Mt.encode("--"+n+"--"+We),c=a.byteLength,l=Array.from(t.entries()).map(([p,g])=>{let b=new go(p,g);return c+=b.size,b});c+=s.byteLength*l.length,c=d.toFiniteNumber(c);let u={"Content-Type":`multipart/form-data; boundary=${n}`};return Number.isFinite(c)&&(u["Content-Length"]=c),e&&e(u),xc.from(async function*(){for(let p of l)yield s,yield*p.encode();yield a}())},rs=Dc;import Lc from"stream";var bo=class extends Lc.Transform{__transform(e,r,o){this.push(e),o()}_transform(e,r,o){if(e.length!==0&&(this._transform=this.__transform,e[0]!==120)){let i=Buffer.alloc(2);i[0]=120,i[1]=156,this.push(i,r)}this.__transform(e,r,o)}},os=bo;var Oc=(t,e)=>d.isAsyncFn(t)?function(...r){let o=r.pop();t.apply(this,r).then(i=>{try{e?o(null,...e(i)):o(null,i)}catch(n){o(n)}},o)}:t,is=Oc;function Mc(t,e){t=t||10;let r=new Array(t),o=new Array(t),i=0,n=0,s;return e=e!==void 0?e:1e3,function(c){let l=Date.now(),u=o[n];s||(s=l),r[i]=c,o[i]=l;let p=n,g=0;for(;p!==i;)g+=r[p++],p=p%t;if(i=(i+1)%t,i===n&&(n=(n+1)%t),l-s<e)return;let b=u&&l-u;return b?Math.round(g*1e3/b):void 0}}var ss=Mc;function Nc(t,e){let r=0,o=1e3/e,i,n,s=(l,u=Date.now())=>{r=u,i=null,n&&(clearTimeout(n),n=null),t(...l)};return[(...l)=>{let u=Date.now(),p=u-r;p>=o?s(l,u):(i=l,n||(n=setTimeout(()=>{n=null,s(i)},o-p)))},()=>i&&s(i)]}var ns=Nc;var Ee=(t,e,r=3)=>{let o=0,i=ss(50,250);return ns(n=>{let s=n.loaded,a=n.lengthComputable?n.total:void 0,c=s-o,l=i(c),u=s<=a;o=s;let p={loaded:s,total:a,progress:a?s/a:void 0,bytes:c,rate:l||void 0,estimated:l&&a&&u?(a-s)/l:void 0,event:n,lengthComputable:a!=null,[e?"download":"upload"]:!0};t(p)},r)},ct=(t,e)=>{let r=t!=null;return[o=>e[0]({lengthComputable:r,total:t,loaded:o}),e[1]]},ut=t=>(...e)=>d.asap(()=>t(...e));function yo(t){if(!t||typeof t!="string"||!t.startsWith("data:"))return 0;let e=t.indexOf(",");if(e<0)return 0;let r=t.slice(5,e),o=t.slice(e+1);if(/;base64/i.test(r)){let n=o.length,s=o.length;for(let g=0;g<s;g++)if(o.charCodeAt(g)===37&&g+2<s){let b=o.charCodeAt(g+1),f=o.charCodeAt(g+2);(b>=48&&b<=57||b>=65&&b<=70||b>=97&&b<=102)&&(f>=48&&f<=57||f>=65&&f<=70||f>=97&&f<=102)&&(n-=2,g+=2)}let a=0,c=s-1,l=g=>g>=2&&o.charCodeAt(g-2)===37&&o.charCodeAt(g-1)===51&&(o.charCodeAt(g)===68||o.charCodeAt(g)===100);c>=0&&(o.charCodeAt(c)===61?(a++,c--):l(c)&&(a++,c-=3)),a===1&&c>=0&&(o.charCodeAt(c)===61||l(c))&&a++;let p=Math.floor(n/4)*3-(a||0);return p>0?p:0}return Buffer.byteLength(o,"utf8")}var as={flush:Re.constants.Z_SYNC_FLUSH,finishFlush:Re.constants.Z_SYNC_FLUSH},zc={flush:Re.constants.BROTLI_OPERATION_FLUSH,finishFlush:Re.constants.BROTLI_OPERATION_FLUSH},ls=d.isFunction(Re.createBrotliDecompress),{http:Wc,https:Hc}=Vc,Gc=/https:?/,cs=L.protocols.map(t=>t+":"),us=(t,[e,r])=>(t.on("end",r).on("error",r),e);function $c(t,e){t.beforeRedirects.proxy&&t.beforeRedirects.proxy(t),t.beforeRedirects.config&&t.beforeRedirects.config(t,e)}function ps(t,e,r){let o=e;if(!o&&o!==!1){let i=Fc.getProxyForUrl(r);i&&(o=new URL(i))}if(o){if(o.username&&(o.auth=(o.username||"")+":"+(o.password||"")),o.auth){(o.auth.username||o.auth.password)&&(o.auth=(o.auth.username||"")+":"+(o.auth.password||""));let n=Buffer.from(o.auth,"utf8").toString("base64");t.headers["Proxy-Authorization"]="Basic "+n}t.headers.host=t.hostname+(t.port?":"+t.port:"");let i=o.hostname||o.host;t.hostname=i,t.host=i,t.port=o.port,t.path=r,o.protocol&&(t.protocol=o.protocol.includes(":")?o.protocol:`${o.protocol}:`)}t.beforeRedirects.proxy=function(n){ps(n,e,n.href)}}var Qc=typeof process<"u"&&d.kindOf(process)==="process",Kc=t=>new Promise((e,r)=>{let o,i,n=(c,l)=>{i||(i=!0,o&&o(c,l))},s=c=>{n(c),e(c)},a=c=>{n(c,!0),r(c)};t(s,a,c=>o=c).catch(a)}),Jc=({address:t,family:e})=>{if(!d.isString(t))throw TypeError("address must be a string");return{address:t,family:e||(t.indexOf(".")<0?6:4)}},ds=(t,e)=>Jc(d.isObject(t)?t:{address:t,family:e}),ms=Qc&&function(e){return Kc(async function(o,i,n){let{data:s,lookup:a,family:c}=e,{responseType:l,responseEncoding:u}=e,p=e.method.toUpperCase(),g,b=!1,f;if(a){let S=is(a,_=>d.isArray(_)?_:[_]);a=(_,z,K)=>{S(_,z,(U,te,me)=>{if(U)return K(U);let Y=d.isArray(te)?te.map(re=>ds(re)):[ds(te,me)];z.all?K(U,Y):K(U,Y[0].address,Y[0].family)})}}let y=new Bc,w=()=>{e.cancelToken&&e.cancelToken.unsubscribe(v),e.signal&&e.signal.removeEventListener("abort",v),y.removeAllListeners()};n((S,_)=>{g=!0,_&&(b=!0,w())});function v(S){y.emit("abort",!S||S.type?new ne(null,e,f):S)}y.once("abort",i),(e.cancelToken||e.signal)&&(e.cancelToken&&e.cancelToken.subscribe(v),e.signal&&(e.signal.aborted?v():e.signal.addEventListener("abort",v)));let D=Be(e.baseURL,e.url,e.allowAbsoluteUrls),A=new URL(D,L.hasBrowserEnv?L.origin:void 0),x=A.protocol||cs[0];if(x==="data:"){if(e.maxContentLength>-1){let _=String(e.url||D||"");if(yo(_)>e.maxContentLength)return i(new T("maxContentLength size of "+e.maxContentLength+" exceeded",T.ERR_BAD_RESPONSE,e))}let S;if(p!=="GET")return we(o,i,{status:405,statusText:"method not allowed",headers:{},config:e});try{S=po(e.url,l==="blob",{Blob:e.env&&e.env.Blob})}catch(_){throw T.from(_,T.ERR_BAD_REQUEST,e)}return l==="text"?(S=S.toString(u),(!u||u==="utf8")&&(S=d.stripBOM(S))):l==="stream"&&(S=dt.Readable.from(S)),we(o,i,{data:S,status:200,statusText:"OK",headers:new V,config:e})}if(cs.indexOf(x)===-1)return i(new T("Unsupported protocol "+x,T.ERR_BAD_REQUEST,e));let R=V.from(e.headers).normalize();R.set("User-Agent","axios/"+ze,!1);let{onUploadProgress:j,onDownloadProgress:F}=e,ae=e.maxRate,pe,Ae;if(d.isSpecCompliantForm(s)){let S=R.getContentType(/boundary=([-_\w\d]{10,70})/i);s=rs(s,_=>{R.set(_)},{tag:`axios-${ze}-boundary`,boundary:S&&S[1]||void 0})}else if(d.isFormData(s)&&d.isFunction(s.getHeaders)){if(R.set(s.getHeaders()),!R.hasContentLength())try{let S=await jc.promisify(s.getLength).call(s);Number.isFinite(S)&&S>=0&&R.setContentLength(S)}catch{}}else if(d.isBlob(s)||d.isFile(s))s.size&&R.setContentType(s.type||"application/octet-stream"),R.setContentLength(s.size||0),s=dt.Readable.from(fr(s));else if(s&&!d.isStream(s)){if(!Buffer.isBuffer(s))if(d.isArrayBuffer(s))s=Buffer.from(new Uint8Array(s));else if(d.isString(s))s=Buffer.from(s,"utf-8");else return i(new T("Data after transformation must be a string, an ArrayBuffer, a Buffer, or a Stream",T.ERR_BAD_REQUEST,e));if(R.setContentLength(s.length,!1),e.maxBodyLength>-1&&s.length>e.maxBodyLength)return i(new T("Request body larger than maxBodyLength limit",T.ERR_BAD_REQUEST,e))}let _e=d.toFiniteNumber(R.getContentLength());d.isArray(ae)?(pe=ae[0],Ae=ae[1]):pe=Ae=ae,s&&(j||pe)&&(d.isStream(s)||(s=dt.Readable.from(s,{objectMode:!1})),s=dt.pipeline([s,new ho({maxRate:d.toFiniteNumber(pe)})],d.noop),j&&s.on("progress",us(s,ct(_e,Ee(ut(j),!1,3)))));let se;if(e.auth){let S=e.auth.username||"",_=e.auth.password||"";se=S+":"+_}if(!se&&A.username){let S=A.username,_=A.password;se=S+":"+_}se&&R.delete("authorization");let le;try{le=Ve(A.pathname+A.search,e.params,e.paramsSerializer).replace(/^\?/,"")}catch(S){let _=new Error(S.message);return _.config=e,_.url=e.url,_.exists=!0,i(_)}R.set("Accept-Encoding","gzip, compress, deflate"+(ls?", br":""),!1);let $={path:le,method:p,headers:R.toJSON(),agents:{http:e.httpAgent,https:e.httpsAgent},auth:se,protocol:x,family:c,beforeRedirect:$c,beforeRedirects:{}};!d.isUndefined(a)&&($.lookup=a),e.socketPath?$.socketPath=e.socketPath:($.hostname=A.hostname.startsWith("[")?A.hostname.slice(1,-1):A.hostname,$.port=A.port,ps($,e.proxy,x+"//"+A.hostname+(A.port?":"+A.port:"")+$.path));let J,Se=Gc.test($.protocol);if($.agent=Se?e.httpsAgent:e.httpAgent,e.transport?J=e.transport:e.maxRedirects===0?J=Se?qc:Uc:(e.maxRedirects&&($.maxRedirects=e.maxRedirects),e.beforeRedirect&&($.beforeRedirects.config=e.beforeRedirect),J=Se?Hc:Wc),e.maxBodyLength>-1?$.maxBodyLength=e.maxBodyLength:$.maxBodyLength=1/0,e.insecureHTTPParser&&($.insecureHTTPParser=e.insecureHTTPParser),f=J.request($,function(_){if(f.destroyed)return;let z=[_],K=+_.headers["content-length"];if(F||Ae){let re=new ho({maxRate:d.toFiniteNumber(Ae)});F&&re.on("progress",us(re,ct(K,Ee(ut(F),!0,3)))),z.push(re)}let U=_,te=_.req||f;if(e.decompress!==!1&&_.headers["content-encoding"])switch((p==="HEAD"||_.statusCode===204)&&delete _.headers["content-encoding"],(_.headers["content-encoding"]||"").toLowerCase()){case"gzip":case"x-gzip":case"compress":case"x-compress":z.push(Re.createUnzip(as)),delete _.headers["content-encoding"];break;case"deflate":z.push(new os),z.push(Re.createUnzip(as)),delete _.headers["content-encoding"];break;case"br":ls&&(z.push(Re.createBrotliDecompress(zc)),delete _.headers["content-encoding"])}U=z.length>1?dt.pipeline(z,d.noop):z[0];let me=dt.finished(U,()=>{me(),w()}),Y={status:_.statusCode,statusText:_.statusMessage,headers:new V(_.headers),config:e,request:te};if(l==="stream")Y.data=U,we(o,i,Y);else{let re=[],er=0;U.on("data",function(Q){re.push(Q),er+=Q.length,e.maxContentLength>-1&&er>e.maxContentLength&&(b=!0,U.destroy(),i(new T("maxContentLength size of "+e.maxContentLength+" exceeded",T.ERR_BAD_RESPONSE,e,te)))}),U.on("aborted",function(){if(b)return;let Q=new T("stream has been aborted",T.ERR_BAD_RESPONSE,e,te);U.destroy(Q),i(Q)}),U.on("error",function(Q){f.destroyed||i(T.from(Q,null,e,te))}),U.on("end",function(){try{let Q=re.length===1?re[0]:Buffer.concat(re);l!=="arraybuffer"&&(Q=Q.toString(u),(!u||u==="utf8")&&(Q=d.stripBOM(Q))),Y.data=Q}catch(Q){return i(T.from(Q,null,e,Y.request,Y))}we(o,i,Y)})}y.once("abort",re=>{U.destroyed||(U.emit("error",re),U.destroy())})}),y.once("abort",S=>{i(S),f.destroy(S)}),f.on("error",function(_){i(T.from(_,null,e,f))}),f.on("socket",function(_){_.setKeepAlive(!0,1e3*60)}),e.timeout){let S=parseInt(e.timeout,10);if(Number.isNaN(S)){i(new T("error trying to parse `config.timeout` to int",T.ERR_BAD_OPTION_VALUE,e,f));return}f.setTimeout(S,function(){if(g)return;let z=e.timeout?"timeout of "+e.timeout+"ms exceeded":"timeout exceeded",K=e.transitional||nt;e.timeoutErrorMessage&&(z=e.timeoutErrorMessage),i(new T(z,K.clarifyTimeoutError?T.ETIMEDOUT:T.ECONNABORTED,e,f)),v()})}if(d.isStream(s)){let S=!1,_=!1;s.on("end",()=>{S=!0}),s.once("error",z=>{_=!0,f.destroy(z)}),s.on("close",()=>{!S&&!_&&v(new ne("Request stream has been aborted",e,f))}),s.pipe(f)}else f.end(s)})};var fs=L.hasStandardBrowserEnv?((t,e)=>r=>(r=new URL(r,L.origin),t.protocol===r.protocol&&t.host===r.host&&(e||t.port===r.port)))(new URL(L.origin),L.navigator&&/(msie|trident)/i.test(L.navigator.userAgent)):()=>!0;var hs=L.hasStandardBrowserEnv?{write(t,e,r,o,i,n){let s=[t+"="+encodeURIComponent(e)];d.isNumber(r)&&s.push("expires="+new Date(r).toGMTString()),d.isString(o)&&s.push("path="+o),d.isString(i)&&s.push("domain="+i),n===!0&&s.push("secure"),document.cookie=s.join("; ")},read(t){let e=document.cookie.match(new RegExp("(^|;\\s*)("+t+")=([^;]*)"));return e?decodeURIComponent(e[3]):null},remove(t){this.write(t,"",Date.now()-864e5)}}:{write(){},read(){return null},remove(){}};var gs=t=>t instanceof V?{...t}:t;function ge(t,e){e=e||{};let r={};function o(l,u,p,g){return d.isPlainObject(l)&&d.isPlainObject(u)?d.merge.call({caseless:g},l,u):d.isPlainObject(u)?d.merge({},u):d.isArray(u)?u.slice():u}function i(l,u,p,g){if(d.isUndefined(u)){if(!d.isUndefined(l))return o(void 0,l,p,g)}else return o(l,u,p,g)}function n(l,u){if(!d.isUndefined(u))return o(void 0,u)}function s(l,u){if(d.isUndefined(u)){if(!d.isUndefined(l))return o(void 0,l)}else return o(void 0,u)}function a(l,u,p){if(p in e)return o(l,u);if(p in t)return o(void 0,l)}let c={url:n,method:n,data:n,baseURL:s,transformRequest:s,transformResponse:s,paramsSerializer:s,timeout:s,timeoutMessage:s,withCredentials:s,withXSRFToken:s,adapter:s,responseType:s,xsrfCookieName:s,xsrfHeaderName:s,onUploadProgress:s,onDownloadProgress:s,decompress:s,maxContentLength:s,maxBodyLength:s,beforeRedirect:s,transport:s,httpAgent:s,httpsAgent:s,cancelToken:s,socketPath:s,responseEncoding:s,validateStatus:a,headers:(l,u,p)=>i(gs(l),gs(u),p,!0)};return d.forEach(Object.keys({...t,...e}),function(u){let p=c[u]||i,g=p(t[u],e[u],u);d.isUndefined(g)&&p!==a||(r[u]=g)}),r}var hr=t=>{let e=ge({},t),{data:r,withXSRFToken:o,xsrfHeaderName:i,xsrfCookieName:n,headers:s,auth:a}=e;if(e.headers=s=V.from(s),e.url=Ve(Be(e.baseURL,e.url,e.allowAbsoluteUrls),t.params,t.paramsSerializer),a&&s.set("Authorization","Basic "+btoa((a.username||"")+":"+(a.password?unescape(encodeURIComponent(a.password)):""))),d.isFormData(r)){if(L.hasStandardBrowserEnv||L.hasStandardBrowserWebWorkerEnv)s.setContentType(void 0);else if(d.isFunction(r.getHeaders)){let c=r.getHeaders(),l=["content-type","content-length"];Object.entries(c).forEach(([u,p])=>{l.includes(u.toLowerCase())&&s.set(u,p)})}}if(L.hasStandardBrowserEnv&&(o&&d.isFunction(o)&&(o=o(e)),o||o!==!1&&fs(e.url))){let c=i&&n&&hs.read(n);c&&s.set(i,c)}return e};var Zc=typeof XMLHttpRequest<"u",bs=Zc&&function(t){return new Promise(function(r,o){let i=hr(t),n=i.data,s=V.from(i.headers).normalize(),{responseType:a,onUploadProgress:c,onDownloadProgress:l}=i,u,p,g,b,f;function y(){b&&b(),f&&f(),i.cancelToken&&i.cancelToken.unsubscribe(u),i.signal&&i.signal.removeEventListener("abort",u)}let w=new XMLHttpRequest;w.open(i.method.toUpperCase(),i.url,!0),w.timeout=i.timeout;function v(){if(!w)return;let A=V.from("getAllResponseHeaders"in w&&w.getAllResponseHeaders()),R={data:!a||a==="text"||a==="json"?w.responseText:w.response,status:w.status,statusText:w.statusText,headers:A,config:t,request:w};we(function(F){r(F),y()},function(F){o(F),y()},R),w=null}"onloadend"in w?w.onloadend=v:w.onreadystatechange=function(){!w||w.readyState!==4||w.status===0&&!(w.responseURL&&w.responseURL.indexOf("file:")===0)||setTimeout(v)},w.onabort=function(){w&&(o(new T("Request aborted",T.ECONNABORTED,t,w)),w=null)},w.onerror=function(x){let R=x&&x.message?x.message:"Network Error",j=new T(R,T.ERR_NETWORK,t,w);j.event=x||null,o(j),w=null},w.ontimeout=function(){let x=i.timeout?"timeout of "+i.timeout+"ms exceeded":"timeout exceeded",R=i.transitional||nt;i.timeoutErrorMessage&&(x=i.timeoutErrorMessage),o(new T(x,R.clarifyTimeoutError?T.ETIMEDOUT:T.ECONNABORTED,t,w)),w=null},n===void 0&&s.setContentType(null),"setRequestHeader"in w&&d.forEach(s.toJSON(),function(x,R){w.setRequestHeader(R,x)}),d.isUndefined(i.withCredentials)||(w.withCredentials=!!i.withCredentials),a&&a!=="json"&&(w.responseType=i.responseType),l&&([g,f]=Ee(l,!0),w.addEventListener("progress",g)),c&&w.upload&&([p,b]=Ee(c),w.upload.addEventListener("progress",p),w.upload.addEventListener("loadend",b)),(i.cancelToken||i.signal)&&(u=A=>{w&&(o(!A||A.type?new ne(null,t,w):A),w.abort(),w=null)},i.cancelToken&&i.cancelToken.subscribe(u),i.signal&&(i.signal.aborted?u():i.signal.addEventListener("abort",u)));let D=Ot(i.url);if(D&&L.protocols.indexOf(D)===-1){o(new T("Unsupported protocol "+D+":",T.ERR_BAD_REQUEST,t));return}w.send(n||null)})};var Yc=(t,e)=>{let{length:r}=t=t?t.filter(Boolean):[];if(e||r){let o=new AbortController,i,n=function(l){if(!i){i=!0,a();let u=l instanceof Error?l:this.reason;o.abort(u instanceof T?u:new ne(u instanceof Error?u.message:u))}},s=e&&setTimeout(()=>{s=null,n(new T(`timeout ${e} of ms exceeded`,T.ETIMEDOUT))},e),a=()=>{t&&(s&&clearTimeout(s),s=null,t.forEach(l=>{l.unsubscribe?l.unsubscribe(n):l.removeEventListener("abort",n)}),t=null)};t.forEach(l=>l.addEventListener("abort",n));let{signal:c}=o;return c.unsubscribe=()=>d.asap(a),c}},ys=Yc;var Xc=function*(t,e){let r=t.byteLength;if(!e||r<e){yield t;return}let o=0,i;for(;o<r;)i=o+e,yield t.slice(o,i),o=i},eu=async function*(t,e){for await(let r of tu(t))yield*Xc(r,e)},tu=async function*(t){if(t[Symbol.asyncIterator]){yield*t;return}let e=t.getReader();try{for(;;){let{done:r,value:o}=await e.read();if(r)break;yield o}}finally{await e.cancel()}},wo=(t,e,r,o)=>{let i=eu(t,e),n=0,s,a=c=>{s||(s=!0,o&&o(c))};return new ReadableStream({async pull(c){try{let{done:l,value:u}=await i.next();if(l){a(),c.close();return}let p=u.byteLength;if(r){let g=n+=p;r(g)}c.enqueue(new Uint8Array(u))}catch(l){throw a(l),l}},cancel(c){return a(c),i.return()}},{highWaterMark:2})};var ws=64*1024,{isFunction:gr}=d,_s=(({fetch:t,Request:e,Response:r})=>({fetch:t,Request:e,Response:r}))(d.global),{ReadableStream:Ts,TextEncoder:As}=d.global,Es=(t,...e)=>{try{return!!t(...e)}catch{return!1}},ru=t=>{let{fetch:e,Request:r,Response:o}=Object.assign({},_s,t),i=gr(e),n=gr(r),s=gr(o);if(!i)return!1;let a=i&&gr(Ts),c=i&&(typeof As=="function"?(f=>y=>f.encode(y))(new As):async f=>new Uint8Array(await new r(f).arrayBuffer())),l=n&&a&&Es(()=>{let f=!1,y=new r(L.origin,{body:new Ts,method:"POST",get duplex(){return f=!0,"half"}}).headers.has("Content-Type");return f&&!y}),u=s&&a&&Es(()=>d.isReadableStream(new o("").body)),p={stream:u&&(f=>f.body)};i&&["text","arrayBuffer","blob","formData","stream"].forEach(f=>{!p[f]&&(p[f]=(y,w)=>{let v=y&&y[f];if(v)return v.call(y);throw new T(`Response type '${f}' is not supported`,T.ERR_NOT_SUPPORT,w)})});let g=async f=>{if(f==null)return 0;if(d.isBlob(f))return f.size;if(d.isSpecCompliantForm(f))return(await new r(L.origin,{method:"POST",body:f}).arrayBuffer()).byteLength;if(d.isArrayBufferView(f)||d.isArrayBuffer(f))return f.byteLength;if(d.isURLSearchParams(f)&&(f=f+""),d.isString(f))return(await c(f)).byteLength},b=async(f,y)=>{let w=d.toFiniteNumber(f.getContentLength());return w??g(y)};return async f=>{let{url:y,method:w,data:v,signal:D,cancelToken:A,timeout:x,onDownloadProgress:R,onUploadProgress:j,responseType:F,headers:ae,withCredentials:pe="same-origin",fetchOptions:Ae}=hr(f);F=F?(F+"").toLowerCase():"text";let _e=ys([D,A&&A.toAbortSignal()],x),se=null,le=_e&&_e.unsubscribe&&(()=>{_e.unsubscribe()}),$;try{if(j&&l&&w!=="get"&&w!=="head"&&($=await b(ae,v))!==0){let K=new r(y,{method:"POST",body:v,duplex:"half"}),U;if(d.isFormData(v)&&(U=K.headers.get("content-type"))&&ae.setContentType(U),K.body){let[te,me]=ct($,Ee(ut(j)));v=wo(K.body,ws,te,me)}}d.isString(pe)||(pe=pe?"include":"omit");let J=n&&"credentials"in r.prototype,Se={...Ae,signal:_e,method:w.toUpperCase(),headers:ae.normalize().toJSON(),body:v,duplex:"half",credentials:J?pe:void 0};se=n&&new r(y,Se);let S=await(n?e(se,Ae):e(y,Se)),_=u&&(F==="stream"||F==="response");if(u&&(R||_&&le)){let K={};["status","statusText","headers"].forEach(Y=>{K[Y]=S[Y]});let U=d.toFiniteNumber(S.headers.get("content-length")),[te,me]=R&&ct(U,Ee(ut(R),!0))||[];S=new o(wo(S.body,ws,te,()=>{me&&me(),le&&le()}),K)}F=F||"text";let z=await p[d.findKey(p,F)||"text"](S,f);return!_&&le&&le(),await new Promise((K,U)=>{we(K,U,{data:z,headers:V.from(S.headers),status:S.status,statusText:S.statusText,config:f,request:se})})}catch(J){throw le&&le(),J&&J.name==="TypeError"&&/Load failed|fetch/i.test(J.message)?Object.assign(new T("Network Error",T.ERR_NETWORK,f,se),{cause:J.cause||J}):T.from(J,J&&J.code,f,se)}}},ou=new Map,To=t=>{let e=d.merge.call({skipUndefined:!0},_s,t?t.env:null),{fetch:r,Request:o,Response:i}=e,n=[o,i,r],s=n.length,a=s,c,l,u=ou;for(;a--;)c=n[a],l=u.get(c),l===void 0&&u.set(c,l=a?new Map:ru(e)),u=l;return l},zb=To();var Ao={http:ms,xhr:bs,fetch:{get:To}};d.forEach(Ao,(t,e)=>{if(t){try{Object.defineProperty(t,"name",{value:e})}catch{}Object.defineProperty(t,"adapterName",{value:e})}});var Ss=t=>`- ${t}`,su=t=>d.isFunction(t)||t===null||t===!1,br={getAdapter:(t,e)=>{t=d.isArray(t)?t:[t];let{length:r}=t,o,i,n={};for(let s=0;s<r;s++){o=t[s];let a;if(i=o,!su(o)&&(i=Ao[(a=String(o)).toLowerCase()],i===void 0))throw new T(`Unknown adapter '${a}'`);if(i&&(d.isFunction(i)||(i=i.get(e))))break;n[a||"#"+s]=i}if(!i){let s=Object.entries(n).map(([c,l])=>`adapter ${c} `+(l===!1?"is not supported by the environment":"is not available in the build")),a=r?s.length>1?`since :
9
+ `+s.map(Ss).join(`
10
+ `):" "+Ss(s[0]):"as no adapter specified";throw new T("There is no suitable adapter to dispatch the request "+a,"ERR_NOT_SUPPORT")}return i},adapters:Ao};function Eo(t){if(t.cancelToken&&t.cancelToken.throwIfRequested(),t.signal&&t.signal.aborted)throw new ne(null,t)}function yr(t){return Eo(t),t.headers=V.from(t.headers),t.data=Dt.call(t,t.transformRequest),["post","put","patch"].indexOf(t.method)!==-1&&t.headers.setContentType("application/x-www-form-urlencoded",!1),br.getAdapter(t.adapter||at.adapter,t)(t).then(function(o){return Eo(t),o.data=Dt.call(t,t.transformResponse,o),o.headers=V.from(o.headers),o},function(o){return Lt(o)||(Eo(t),o&&o.response&&(o.response.data=Dt.call(t,t.transformResponse,o.response),o.response.headers=V.from(o.response.headers))),Promise.reject(o)})}var wr={};["object","boolean","number","function","string","symbol"].forEach((t,e)=>{wr[t]=function(o){return typeof o===t||"a"+(e<1?"n ":" ")+t}});var vs={};wr.transitional=function(e,r,o){function i(n,s){return"[Axios v"+ze+"] Transitional option '"+n+"'"+s+(o?". "+o:"")}return(n,s,a)=>{if(e===!1)throw new T(i(s," has been removed"+(r?" in "+r:"")),T.ERR_DEPRECATED);return r&&!vs[s]&&(vs[s]=!0,console.warn(i(s," has been deprecated since v"+r+" and will be removed in the near future"))),e?e(n,s,a):!0}};wr.spelling=function(e){return(r,o)=>(console.warn(`${o} is likely a misspelling of ${e}`),!0)};function nu(t,e,r){if(typeof t!="object")throw new T("options must be an object",T.ERR_BAD_OPTION_VALUE);let o=Object.keys(t),i=o.length;for(;i-- >0;){let n=o[i],s=e[n];if(s){let a=t[n],c=a===void 0||s(a,n,t);if(c!==!0)throw new T("option "+n+" must be "+c,T.ERR_BAD_OPTION_VALUE);continue}if(r!==!0)throw new T("Unknown option "+n,T.ERR_BAD_OPTION)}}var Nt={assertOptions:nu,validators:wr};var Te=Nt.validators,pt=class{constructor(e){this.defaults=e||{},this.interceptors={request:new to,response:new to}}async request(e,r){try{return await this._request(e,r)}catch(o){if(o instanceof Error){let i={};Error.captureStackTrace?Error.captureStackTrace(i):i=new Error;let n=i.stack?i.stack.replace(/^.+\n/,""):"";try{o.stack?n&&!String(o.stack).endsWith(n.replace(/^.+\n.+\n/,""))&&(o.stack+=`
11
+ `+n):o.stack=n}catch{}}throw o}}_request(e,r){typeof e=="string"?(r=r||{},r.url=e):r=e||{},r=ge(this.defaults,r);let{transitional:o,paramsSerializer:i,headers:n}=r;o!==void 0&&Nt.assertOptions(o,{silentJSONParsing:Te.transitional(Te.boolean),forcedJSONParsing:Te.transitional(Te.boolean),clarifyTimeoutError:Te.transitional(Te.boolean)},!1),i!=null&&(d.isFunction(i)?r.paramsSerializer={serialize:i}:Nt.assertOptions(i,{encode:Te.function,serialize:Te.function},!0)),r.allowAbsoluteUrls!==void 0||(this.defaults.allowAbsoluteUrls!==void 0?r.allowAbsoluteUrls=this.defaults.allowAbsoluteUrls:r.allowAbsoluteUrls=!0),Nt.assertOptions(r,{baseUrl:Te.spelling("baseURL"),withXsrfToken:Te.spelling("withXSRFToken")},!0),r.method=(r.method||this.defaults.method||"get").toLowerCase();let s=n&&d.merge(n.common,n[r.method]);n&&d.forEach(["delete","get","head","post","put","patch","common"],f=>{delete n[f]}),r.headers=V.concat(s,n);let a=[],c=!0;this.interceptors.request.forEach(function(y){typeof y.runWhen=="function"&&y.runWhen(r)===!1||(c=c&&y.synchronous,a.unshift(y.fulfilled,y.rejected))});let l=[];this.interceptors.response.forEach(function(y){l.push(y.fulfilled,y.rejected)});let u,p=0,g;if(!c){let f=[yr.bind(this),void 0];for(f.unshift(...a),f.push(...l),g=f.length,u=Promise.resolve(r);p<g;)u=u.then(f[p++],f[p++]);return u}g=a.length;let b=r;for(p=0;p<g;){let f=a[p++],y=a[p++];try{b=f(b)}catch(w){y.call(this,w);break}}try{u=yr.call(this,b)}catch(f){return Promise.reject(f)}for(p=0,g=l.length;p<g;)u=u.then(l[p++],l[p++]);return u}getUri(e){e=ge(this.defaults,e);let r=Be(e.baseURL,e.url,e.allowAbsoluteUrls);return Ve(r,e.params,e.paramsSerializer)}};d.forEach(["delete","get","head","options"],function(e){pt.prototype[e]=function(r,o){return this.request(ge(o||{},{method:e,url:r,data:(o||{}).data}))}});d.forEach(["post","put","patch"],function(e){function r(o){return function(n,s,a){return this.request(ge(a||{},{method:e,headers:o?{"Content-Type":"multipart/form-data"}:{},url:n,data:s}))}}pt.prototype[e]=r(),pt.prototype[e+"Form"]=r(!0)});var Ft=pt;var _o=class t{constructor(e){if(typeof e!="function")throw new TypeError("executor must be a function.");let r;this.promise=new Promise(function(n){r=n});let o=this;this.promise.then(i=>{if(!o._listeners)return;let n=o._listeners.length;for(;n-- >0;)o._listeners[n](i);o._listeners=null}),this.promise.then=i=>{let n,s=new Promise(a=>{o.subscribe(a),n=a}).then(i);return s.cancel=function(){o.unsubscribe(n)},s},e(function(n,s,a){o.reason||(o.reason=new ne(n,s,a),r(o.reason))})}throwIfRequested(){if(this.reason)throw this.reason}subscribe(e){if(this.reason){e(this.reason);return}this._listeners?this._listeners.push(e):this._listeners=[e]}unsubscribe(e){if(!this._listeners)return;let r=this._listeners.indexOf(e);r!==-1&&this._listeners.splice(r,1)}toAbortSignal(){let e=new AbortController,r=o=>{e.abort(o)};return this.subscribe(r),e.signal.unsubscribe=()=>this.unsubscribe(r),e.signal}static source(){let e;return{token:new t(function(i){e=i}),cancel:e}}},Cs=_o;function So(t){return function(r){return t.apply(null,r)}}function vo(t){return d.isObject(t)&&t.isAxiosError===!0}var Co={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511};Object.entries(Co).forEach(([t,e])=>{Co[e]=t});var Rs=Co;function xs(t){let e=new Ft(t),r=Rt(Ft.prototype.request,e);return d.extend(r,Ft.prototype,e,{allOwnKeys:!0}),d.extend(r,e,null,{allOwnKeys:!0}),r.create=function(i){return xs(ge(t,i))},r}var G=xs(at);G.Axios=Ft;G.CanceledError=ne;G.CancelToken=Cs;G.isCancel=Lt;G.VERSION=ze;G.toFormData=Ce;G.AxiosError=T;G.Cancel=G.CanceledError;G.all=function(e){return Promise.all(e)};G.spread=So;G.isAxiosError=vo;G.mergeConfig=ge;G.AxiosHeaders=V;G.formToJSON=t=>pr(d.isHTMLForm(t)?new FormData(t):t);G.getAdapter=br.getAdapter;G.HttpStatusCode=Rs;G.default=G;var Is=G;var{Axios:qy,AxiosError:jy,CanceledError:Vy,isCancel:By,CancelToken:zy,VERSION:Wy,all:Hy,Cancel:Gy,isAxiosError:xe,spread:$y,toFormData:Qy,AxiosHeaders:Ky,HttpStatusCode:Jy,formToJSON:Zy,getAdapter:Yy,mergeConfig:Xy}=Is;import{makeApi as gu,makeEndpoint as mt}from"@zodios/core";import{z as M}from"zod";import{z as h}from"zod";var au=h.object({name:h.string(),description:h.string(),id:h.string(),schema_version:h.string(),metric_version:h.coerce.number(),definition_version:h.coerce.number(),last_updated_user:h.object({id:h.string()}).optional()}),lu=h.object({id:h.string()}),ks=h.object({field:h.string(),operator:h.string(),categorical_values:h.array(h.object({string_value:h.string().optional(),bool_value:h.boolean().optional(),null_value:h.string().optional()}))}),Tr=h.object({measure:h.object({field:h.string(),aggregation:h.string()}),time_dimension:h.object({field:h.string()}),filters:h.array(ks)}),cu=h.object({datasource:lu,basic_specification:Tr.optional(),viz_state_specification:h.object({viz_state_string:h.string()}).optional(),is_running_total:h.boolean()}),Ps=h.object({allowed_dimensions:h.array(h.string()),allowed_granularities:h.array(h.string()),offset_from_today:h.number()}),Ds=h.object({filters:h.array(ks),measurement_period:h.object({granularity:h.string(),range:h.string()}),comparison:h.object({comparison:h.string()})}),Ls=h.object({target:h.object({value:h.number()}).optional()}),Ar=h.object({id:h.string(),specification:Ds,definition_id:h.string(),is_default:h.boolean(),schema_version:h.string(),metric_version:h.coerce.number(),goals:Ls.optional(),is_followed:h.boolean(),datasource_luid:h.string()}),Os=h.object({type:h.string(),number_units:h.object({singular_noun:h.string(),plural_noun:h.string()}),sentiment_type:h.string(),row_level_id_field:h.object({identifier_col:h.string()}),row_level_entity_names:h.object({entity_name_singular:h.string().optional(),entity_name_plural:h.string().optional()}),row_level_name_field:h.object({name_col:h.string()}),currency_code:h.string()}),Ms=h.object({settings:h.array(h.object({type:h.string(),disabled:h.boolean()}))}),uu=h.object({comparisons:h.array(h.object({compare_config:h.object({comparison:h.string()}),index:h.coerce.number()}))}),du=h.array(h.object({basic_specification:Tr.optional(),threshold_basic_specification:Tr.optional(),threshold_viz_state_specification:h.object({viz_state_string:h.string()}).optional(),viz_state_specification:h.object({viz_state_string:h.string()}).optional(),minimum_granularity:h.string(),benchmark_sentiment_type:h.string(),name:h.string()})),Ro=h.object({metadata:au,specification:cu,extension_options:Ps,metrics:h.array(Ar),total_metrics:h.coerce.number(),representation_options:Os,insights_options:Ms,comparisons:uu,datasource_goals:du}),Ns=h.object({id:h.string(),metric_id:h.string()}),pu=h.enum(["LANGUAGE_UNSPECIFIED","LANGUAGE_DE_DE","LANGUAGE_EN_US","LANGUAGE_EN_GB","LANGUAGE_ES_ES","LANGUAGE_FR_FR","LANGUAGE_FR_CA","LANGUAGE_GA_IE","LANGUAGE_IT_IT","LANGUAGE_JA_JP","LANGUAGE_KO_KR","LANGUAGE_NL_NL","LANGUAGE_PT_BR","LANGUAGE_SV_SE","LANGUAGE_TH_TH","LANGUAGE_ZH_CN","LANGUAGE_ZH_TW"]),mu=h.enum(["LOCALE_UNSPECIFIED","LOCALE_AR_AE","LOCALE_AR_BH","LOCALE_AR_DZ","LOCALE_AR_EG","LOCALE_AR_IQ","LOCALE_AR_JO","LOCALE_AR_KW","LOCALE_AR_LB","LOCALE_AR_LY","LOCALE_AR_MA","LOCALE_AR_OM","LOCALE_AR_QA","LOCALE_AR_SA","LOCALE_AR_SD","LOCALE_AR_SY","LOCALE_AR_TN","LOCALE_AR_YE","LOCALE_BE_BY","LOCALE_BG_BG","LOCALE_CA_ES","LOCALE_CS_CZ","LOCALE_DA_DK","LOCALE_DE_AT","LOCALE_DE_CH","LOCALE_DE_DE","LOCALE_DE_LU","LOCALE_EL_CY","LOCALE_EL_GR","LOCALE_EN_AU","LOCALE_EN_CA","LOCALE_EN_GB","LOCALE_EN_IE","LOCALE_EN_IN","LOCALE_EN_MT","LOCALE_EN_NZ","LOCALE_EN_PH","LOCALE_EN_SG","LOCALE_EN_US","LOCALE_EN_ZA","LOCALE_ES_AR","LOCALE_ES_BO","LOCALE_ES_CL","LOCALE_ES_CO","LOCALE_ES_CR","LOCALE_ES_DO","LOCALE_ES_EC","LOCALE_ES_ES","LOCALE_ES_GT","LOCALE_ES_HN","LOCALE_ES_MX","LOCALE_ES_NI","LOCALE_ES_PA","LOCALE_ES_PE","LOCALE_ES_PR","LOCALE_ES_PY","LOCALE_ES_SV","LOCALE_ES_US","LOCALE_ES_UY","LOCALE_ES_VE","LOCALE_ET_EE","LOCALE_FI_FI","LOCALE_FR_BE","LOCALE_FR_CA","LOCALE_FR_CH","LOCALE_FR_FR","LOCALE_FR_LU","LOCALE_GA_IE","LOCALE_HE_IL","LOCALE_HI_IN","LOCALE_HR_HR","LOCALE_HU_HU","LOCALE_ID_ID","LOCALE_IN_ID","LOCALE_IS_IS","LOCALE_IT_CH","LOCALE_IT_IT","LOCALE_IW_IL","LOCALE_JA_JP","LOCALE_KO_KR","LOCALE_LT_LT","LOCALE_LV_LV","LOCALE_MK_MK","LOCALE_MS_MY","LOCALE_MT_MT","LOCALE_NL_BE","LOCALE_NL_NL","LOCALE_NB_NO","LOCALE_NO_NO","LOCALE_PL_PL","LOCALE_PT_BR","LOCALE_PT_PT","LOCALE_RO_RO","LOCALE_RU_RU","LOCALE_SK_SK","LOCALE_SL_SI","LOCALE_SQ_AL","LOCALE_SR_BA","LOCALE_SR_ME","LOCALE_SR_RS","LOCALE_SV_SE","LOCALE_TH_TH","LOCALE_TR_TR","LOCALE_UK_UA","LOCALE_VI_VN","LOCALE_ZH_CN","LOCALE_ZH_HK","LOCALE_ZH_SG","LOCALE_ZH_TW"]),fu=h.enum(["OUTPUT_FORMAT_UNSPECIFIED","OUTPUT_FORMAT_HTML","OUTPUT_FORMAT_TEXT"]),Er=h.object({bundle_request:h.object({version:h.number(),options:h.object({output_format:fu,time_zone:h.string(),language:pu,locale:mu}),input:h.object({metadata:h.object({name:h.string().nonempty(),metric_id:h.string().nonempty(),definition_id:h.string().nonempty()}),metric:h.object({definition:h.object({datasource:h.object({id:h.string()}),basic_specification:Tr,is_running_total:h.boolean()}),metric_specification:Ds,extension_options:Ps,representation_options:Os,insights_options:Ms,goals:Ls.optional()})})})}),hu=h.object({type:h.string(),insights:h.array(h.object({result:h.object({type:h.string(),version:h.number(),content:h.string().optional(),markup:h.string().optional(),viz:h.any().optional(),facts:h.any().optional(),characterization:h.string().optional(),question:h.string(),score:h.number()}),insight_type:h.string()})),summaries:h.array(h.object({result:h.object({id:h.string(),markup:h.string().optional(),viz:h.any().optional(),generation_id:h.string(),timestamp:h.string().optional(),last_attempted_timestamp:h.string().optional()})}))}),Fs=h.object({bundle_response:h.object({result:h.object({insight_groups:h.array(hu),has_errors:h.boolean(),characterization:h.string()})})}),_r=["ban","springboard","basic","detail"],He=["DEFINITION_VIEW_BASIC","DEFINITION_VIEW_FULL","DEFINITION_VIEW_DEFAULT"];var bu=mt({method:"get",path:"/pulse/definitions",alias:"listAllPulseMetricDefinitions",description:"Returns a list of all published Pulse Metric Definitions on the specified site.",parameters:[{name:"view",type:"Query",schema:M.optional(M.enum(He)),description:`The range of metrics to return for a definition. The default is 'DEFINITION_VIEW_BASIC' if not specified.
12
12
  - 'DEFINITION_VIEW_BASIC' - Return only the specified metric definition.
13
13
  - 'DEFINITION_VIEW_FULL' - Return the metric definition and the specified number of metrics.
14
- - 'DEFINITION_VIEW_DEFAULT' - Return the metric definition and the default metric.`}],response:j.object({definitions:j.array(Eo)})}),ou=ct({method:"post",path:"/pulse/definitions%3AbatchGet",alias:"listPulseMetricDefinitionsFromMetricDefinitionIds",description:"Returns a list of published Pulse Metric Definitions from a list of metric definition IDs.",parameters:[{name:"definition_ids",type:"Body",schema:j.object({definition_ids:j.array(j.string().nonempty()).min(1)}),description:"A list of metric definition IDs to retrieve."},{name:"view",type:"Query",schema:j.optional(j.enum(Be)),description:`The range of metrics to return for a definition. The default is 'DEFINITION_VIEW_BASIC' if not specified.
14
+ - 'DEFINITION_VIEW_DEFAULT' - Return the metric definition and the default metric.`},{name:"page_size",type:"Query",schema:M.optional(M.coerce.number().int().positive()),description:"Specifies the number of results in a paged response."},{name:"page_token",type:"Query",schema:M.optional(M.string()),description:"Token for retrieving the next page of results. Omit for the first page."}],response:M.object({definitions:M.array(Ro),next_page_token:M.string().optional(),offset:M.coerce.number(),total_available:M.coerce.number()})}),yu=mt({method:"post",path:"/pulse/definitions%3AbatchGet",alias:"listPulseMetricDefinitionsFromMetricDefinitionIds",description:"Returns a list of published Pulse Metric Definitions from a list of metric definition IDs.",parameters:[{name:"definition_ids",type:"Body",schema:M.object({definition_ids:M.array(M.string().nonempty()).min(1)}),description:"A list of metric definition IDs to retrieve."},{name:"view",type:"Query",schema:M.optional(M.enum(He)),description:`The range of metrics to return for a definition. The default is 'DEFINITION_VIEW_BASIC' if not specified.
15
15
  - 'DEFINITION_VIEW_BASIC' - Return only the specified metric definition.
16
16
  - 'DEFINITION_VIEW_FULL' - Return the metric definition and the specified number of metrics.
17
- - 'DEFINITION_VIEW_DEFAULT' - Return the metric definition and the default metric.`}],response:j.object({definitions:j.array(Eo)})}),iu=ct({method:"get",path:"/pulse/definitions/:pulseMetricDefinitionID/metrics",alias:"listPulseMetricsFromMetricDefinitionId",description:"Returns a list of published Pulse Metrics for a specific Pulse Metric Definition.",parameters:[{name:"pulseMetricDefinitionID",type:"Path",schema:j.string().nonempty()}],response:j.object({metrics:j.array(hr),total_available:j.number()})}),su=ct({method:"post",path:"/pulse/metrics%3AbatchGet",alias:"listPulseMetricsFromMetricIds",description:"Returns a list of Pulse Metrics for a list of metric IDs.",parameters:[{name:"metric_ids",type:"Body",schema:j.object({metric_ids:j.array(j.string().nonempty())})}],response:j.object({metrics:j.array(hr)})}),nu=ct({method:"get",path:"/pulse/subscriptions",alias:"listPulseMetricSubscriptionsForCurrentUser",description:"Returns a list of Pulse Subscriptions for the current user.",parameters:[{name:"user_id",type:"Query",schema:j.string().nonempty()}],response:j.object({subscriptions:j.array(Rs)})}),au=ct({method:"post",path:"/pulse/insights/:bundle_type",alias:"generatePulseMetricValueInsightBundle",description:"Generates a bundle for the current aggregated value for the Pulse metric.",parameters:[{name:"bundle_request",type:"Body",schema:gr},{name:"bundle_type",type:"Path",schema:j.enum(br)}],response:xs}),lu=tu([au,ru,ou,iu,nu,su]),Is=[...lu];var Lt=class extends H{constructor(e,r){super(new cu(e,Is),r)}listAllPulseMetricDefinitions=async e=>await ut(async()=>(await this._apiClient.listAllPulseMetricDefinitions({queries:{view:e},...this.authHeader})).definitions??[]);listPulseMetricDefinitionsFromMetricDefinitionIds=async(e,r)=>await ut(async()=>(await this._apiClient.listPulseMetricDefinitionsFromMetricDefinitionIds({definition_ids:e},{queries:{view:r},...this.authHeader})).definitions??[]);listPulseMetricsFromMetricDefinitionId=async e=>await ut(async()=>(await this._apiClient.listPulseMetricsFromMetricDefinitionId({params:{pulseMetricDefinitionID:e},...this.authHeader})).metrics??[]);listPulseMetricsFromMetricIds=async e=>await ut(async()=>(await this._apiClient.listPulseMetricsFromMetricIds({metric_ids:e},{...this.authHeader})).metrics??[]);listPulseMetricSubscriptionsForCurrentUser=async()=>await ut(async()=>(await this._apiClient.listPulseMetricSubscriptionsForCurrentUser({queries:{user_id:this.userId},...this.authHeader})).subscriptions??[]);generatePulseMetricValueInsightBundle=async(e,r)=>await ut(async()=>await this._apiClient.generatePulseMetricValueInsightBundle({bundle_request:e.bundle_request},{params:{bundle_type:r},...this.authHeader})??{})};async function ut(t){try{return new uu(await t())}catch(e){if(Ie(e)){if(e.response?.status===404)return new ks("tableau-server");if(e.response?.status===400&&e.response.headers.tableau_error_code==="0xd3408984"&&e.response.headers.validation_code==="400999")return new ks("pulse-disabled")}throw e}}import{isErrorFromAlias as gu,Zodios as bu}from"@zodios/core";import{Err as Co,Ok as yu}from"ts-results-es";import{makeApi as du,makeEndpoint as pu}from"@zodios/core";import{z as ze}from"zod";import{z as _o}from"zod";var Ds=_o.object({id:_o.string(),name:_o.string()});import{z as So}from"zod";var Ps=So.object({id:So.string(),name:So.string()});var mu=ze.object({site:Ds,user:Ps}),fu=pu({method:"get",path:"/sessions/current",alias:"getCurrentServerSession",description:"Returns details of the current session of Tableau Server.",response:ze.object({session:mu}),errors:[{status:401,schema:ze.object({error:ze.object({code:ze.string(),summary:ze.string(),detail:ze.string()})})}]}),hu=du([fu]),Ls=[...hu];var Ot=class extends H{constructor(e,r){super(new bu(e,Ls),r)}getCurrentServerSession=async()=>{try{let e=await this._apiClient.getCurrentServerSession({...this.authHeader});return yu(e.session)}catch(e){return gu(this._apiClient.api,"getCurrentServerSession",e)?Co({type:"unauthorized",message:e.response.data.error}):Ie(e)&&e.response?Co({type:"unknown",message:e.response.data}):Co({type:"unknown",message:W(e)})}}};import{Zodios as vu}from"@zodios/core";import{makeApi as wu,makeEndpoint as Mt}from"@zodios/core";import{z as te}from"zod";import{z as Y}from"zod";var dt=Y.object({id:Y.string(),name:Y.string(),createdAt:Y.string(),updatedAt:Y.string(),workbook:Y.object({id:Y.string()}).optional(),owner:Y.object({id:Y.string()}).optional(),project:Y.object({id:Y.string()}).optional(),tags:Y.object({tag:Y.array(Y.object({label:Y.string()})).optional()}),usage:Y.object({totalViewCount:Y.coerce.number()}).optional()});var Tu=Mt({method:"get",path:"/sites/:siteId/views/:viewId",alias:"getView",description:"Gets the details of a specific view.",response:te.object({view:dt})}),Au=Mt({method:"get",path:"/sites/:siteId/views/:viewId/data",alias:"queryViewData",description:"Returns a specified view rendered as data in comma separated value (CSV) format.",response:te.string()}),Eu=Mt({method:"get",path:"/sites/:siteId/views/:viewId/image",alias:"queryViewImage",description:"Returns an image of the specified view.",parameters:[{name:"vizWidth",type:"Query",schema:te.number().optional(),description:"The width of the rendered image in pixels that, along with the value of vizHeight determine its resolution and aspect ratio."},{name:"vizHeight",type:"Query",schema:te.number().optional(),description:"The height of the rendered image in pixels that, along with the value of vizWidth determine its resolution and aspect ratio."},{name:"resolution",type:"Query",schema:te.literal("high").optional(),description:"The resolution of the image. Image width and actual pixel density are determined by the display context of the image. Aspect ratio is always preserved. Set the value to high to ensure maximum pixel density."}],response:te.string()}),_u=Mt({method:"get",path:"/sites/:siteId/workbooks/:workbookId/views",alias:"queryViewsForWorkbook",description:"Returns all the views for the specified workbook, optionally including usage statistics.",parameters:[{name:"includeUsageStatistics",type:"Query",schema:te.boolean().optional(),description:"true to return usage statistics. The default is false."}],response:te.object({views:te.object({view:te.array(dt)})})}),Su=Mt({method:"get",path:"/sites/:siteId/views",alias:"queryViewsForSite",description:"Returns all the views for the specified site, optionally including usage statistics.",parameters:[...Ye,{name:"includeUsageStatistics",type:"Query",schema:te.boolean().optional(),description:"true to return usage statistics. The default is false."},{name:"filter",type:"Query",schema:te.string().optional(),description:"An expression that lets you specify a subset of views to return. You can filter on predefined fields such as name, tags, and createdAt. You can include multiple filter expressions."}],response:te.object({pagination:Ze,views:te.object({view:te.array(dt).optional()})})}),Cu=wu([Tu,Au,Eu,_u,Su]),Os=[...Cu];var Nt=class extends H{constructor(e,r){super(new vu(e,Os),r)}getView=async({viewId:e,siteId:r})=>(await this._apiClient.getView({params:{siteId:r,viewId:e},...this.authHeader})).view;queryViewData=async({viewId:e,siteId:r})=>await this._apiClient.queryViewData({params:{siteId:r,viewId:e},...this.authHeader});queryViewImage=async({viewId:e,siteId:r,width:o,height:i,resolution:n})=>await this._apiClient.queryViewImage({params:{siteId:r,viewId:e},queries:{vizWidth:o,vizHeight:i,resolution:n},...this.authHeader,responseType:"arraybuffer"});queryViewsForWorkbook=async({workbookId:e,siteId:r,includeUsageStatistics:o})=>(await this._apiClient.queryViewsForWorkbook({params:{siteId:r,workbookId:e},queries:{includeUsageStatistics:o},...this.authHeader})).views.view;queryViewsForSite=async({siteId:e,includeUsageStatistics:r,filter:o,pageSize:i,pageNumber:n})=>{let s=await this._apiClient.queryViewsForSite({params:{siteId:e},queries:{includeUsageStatistics:r,filter:o,pageSize:i,pageNumber:n},...this.authHeader});return{pagination:s.pagination,views:s.views.view??[]}}};import{isErrorFromAlias as Bs,Zodios as Qu,ZodiosError as Ku}from"@zodios/core";import{Err as wr,Ok as zs}from"ts-results-es";import{makeApi as Ru}from"@zodios/core";import{z as p}from"zod";var xu=p.object({connectionLuid:p.string().optional(),connectionUsername:p.string(),connectionPassword:p.string()}),Ms=p.object({datasourceLuid:p.string().nonempty(),connections:p.array(xu).optional()}),Iu=p.enum(["OBJECTS","ARRAYS"]),Ns=p.object({returnFormat:Iu,debug:p.boolean().default(!1)}).partial().passthrough(),ku=p.object({datasource:Ms,options:Ns.optional()}).passthrough(),xo=p.enum(["SUM","AVG","MEDIAN","COUNT","COUNTD","MIN","MAX","STDEV","VAR","COLLECT","YEAR","QUARTER","MONTH","WEEK","DAY","TRUNC_YEAR","TRUNC_QUARTER","TRUNC_MONTH","TRUNC_WEEK","TRUNC_DAY","AGG","NONE","UNSPECIFIED"]),Fs=p.enum(["INTEGER","REAL","STRING","DATETIME","BOOLEAN","DATE","SPATIAL","UNKNOWN"]),Us=p.enum(["MINUTES","HOURS","DAYS","WEEKS","MONTHS","QUARTERS","YEARS"]),Du=p.object({fieldName:p.string(),fieldCaption:p.string(),dataType:Fs,defaultAggregation:xo,columnClass:p.enum(["COLUMN","BIN","GROUP","CALCULATION","TABLE_CALCULATION"]),formula:p.string(),logicalTableId:p.string()}).partial().passthrough(),qs=p.union([p.number(),p.string(),p.boolean(),p.null()]),yr=p.object({parameterCaption:p.string(),dataType:Fs.exclude(["DATETIME","SPATIAL","UNKNOWN"]),parameterName:p.string().optional(),value:qs}),Pu=p.discriminatedUnion("parameterType",[yr.extend({parameterType:p.literal("ANY_VALUE")}).strict(),yr.extend({parameterType:p.literal("LIST"),members:p.array(qs)}).strict(),yr.extend({parameterType:p.literal("QUANTITATIVE_DATE"),value:p.string().nullable(),minDate:p.string().nullish(),maxDate:p.string().nullish(),periodValue:p.number().nullish(),periodType:Us.nullish()}).strict(),yr.extend({parameterType:p.literal("QUANTITATIVE_RANGE"),value:p.number().nullable(),min:p.number().nullish(),max:p.number().nullish(),step:p.number().nullish()}).strict()]),Lu=p.object({data:p.array(Du),extraData:p.object({parameters:p.array(Pu)})}).partial().passthrough(),Ou=p.object({errorCode:p.string(),message:p.string(),datetime:p.string().datetime({offset:!0}),debug:p.object({}).partial().passthrough(),"tab-error-code":p.string()}).partial().passthrough(),Mu=p.enum(["ASC","DESC"]),vo=p.object({fieldCaption:p.string(),fieldAlias:p.string().optional(),maxDecimalPlaces:p.number().int().optional(),sortDirection:Mu.optional(),sortPriority:p.number().int().optional()}),Nu=p.union([vo.strict(),vo.extend({function:xo}).strict(),vo.extend({calculation:p.string()}).strict()]),js=p.union([p.object({fieldCaption:p.string()}).strict(),p.object({fieldCaption:p.string(),function:xo}).strict(),p.object({calculation:p.string()}).strict()]),Io=p.object({field:js,context:p.boolean().optional()}),ko=p.object({field:p.object({fieldCaption:p.string()}).strict(),context:p.boolean().optional()}),Fu=ko.extend({filterType:p.literal("SET"),values:p.union([p.array(p.string()),p.array(p.number()),p.array(p.boolean())]),exclude:p.boolean().optional()}),pt=ko.extend({filterType:p.literal("DATE"),periodType:Us,anchorDate:p.string().optional(),includeNulls:p.boolean().optional()}),Uu=p.discriminatedUnion("dateRangeType",[pt.extend({dateRangeType:p.literal("CURRENT")}).strict(),pt.extend({dateRangeType:p.literal("LAST")}).strict(),pt.extend({dateRangeType:p.literal("NEXT")}).strict(),pt.extend({dateRangeType:p.literal("TODATE")}).strict(),pt.extend({dateRangeType:p.literal("LASTN"),rangeN:p.number().int()}).strict(),pt.extend({dateRangeType:p.literal("NEXTN"),rangeN:p.number().int()}).strict()]),Ro=ko.extend({filterType:p.literal("MATCH"),startsWith:p.string().optional(),endsWith:p.string().optional(),contains:p.string().optional(),exclude:p.boolean().optional()}),qu=p.union([Ro.extend({startsWith:p.string()}).strict(),Ro.extend({endsWith:p.string()}).strict(),Ro.extend({contains:p.string()}).strict()]),Ft=Io.extend({filterType:p.literal("QUANTITATIVE_NUMERICAL")}),ju=p.discriminatedUnion("quantitativeFilterType",[Ft.extend({quantitativeFilterType:p.literal("RANGE"),min:p.number(),max:p.number(),includeNulls:p.boolean().optional()}).strict(),Ft.extend({quantitativeFilterType:p.literal("MIN"),min:p.number(),includeNulls:p.boolean().optional()}).strict(),Ft.extend({quantitativeFilterType:p.literal("MAX"),max:p.number(),includeNulls:p.boolean().optional()}).strict(),Ft.extend({quantitativeFilterType:p.literal("ONLY_NULL")}).strict(),Ft.extend({quantitativeFilterType:p.literal("ONLY_NON_NULL")}).strict()]),Ut=Io.extend({filterType:p.literal("QUANTITATIVE_DATE")}),Vu=p.discriminatedUnion("quantitativeFilterType",[Ut.extend({quantitativeFilterType:p.literal("RANGE"),minDate:p.string(),maxDate:p.string(),includeNulls:p.boolean().optional()}).strict(),Ut.extend({quantitativeFilterType:p.literal("MIN"),minDate:p.string(),includeNulls:p.boolean().optional()}).strict(),Ut.extend({quantitativeFilterType:p.literal("MAX"),maxDate:p.string(),includeNulls:p.boolean().optional()}).strict(),Ut.extend({quantitativeFilterType:p.literal("ONLY_NULL")}).strict(),Ut.extend({quantitativeFilterType:p.literal("ONLY_NON_NULL")}).strict()]),Bu=Io.extend({filterType:p.literal("TOP"),howMany:p.number().int(),fieldToMeasure:js,direction:p.enum(["TOP","BOTTOM"]).optional().default("TOP")}),zu=p.union([Fu.strict(),Bu.strict(),...qu.options,...ju.options,...Vu.options,...Uu.options]),qt=p.strictObject({fields:p.array(Nu),filters:p.array(zu).optional()}),Wu=Ns.and(p.object({disaggregate:p.boolean()}).partial().passthrough()),Hu=p.object({datasource:Ms,query:qt,options:Wu.optional()}).passthrough(),Gu=p.object({data:p.array(p.unknown())}).partial().passthrough(),$u=Ru([{method:"post",path:"/query-datasource",alias:"queryDatasource",description:"Queries a specific data source and returns the resulting data.",requestFormat:"json",parameters:[{name:"body",type:"Body",schema:Hu}],response:Gu,errors:[{status:"default",schema:Ou},{status:404,schema:p.any()}]},{method:"post",path:"/read-metadata",alias:"readMetadata",description:"Requests metadata for a specific data source. The metadata provides information about the data fields, such as field names, data types, and descriptions.",requestFormat:"json",parameters:[{name:"body",type:"Body",schema:ku}],response:Lu,errors:[{status:404,schema:p.any()}]},{method:"get",path:"/simple-request",alias:"simpleRequest",description:"Sends a request that can be used for testing or doing a health check.",requestFormat:"json",response:p.string()}]),Vs=[...$u];var jt=class extends H{constructor(e,r){super(new Qu(e,Vs),r)}queryDatasource=async e=>{try{return zs(await this._apiClient.queryDatasource(e,{...this.authHeader}))}catch(r){if(Bs(this._apiClient.api,"queryDatasource",r))return r.response.status===404?wr("feature-disabled"):wr(r.response.data);if(r instanceof Ku)return wr(r);throw r}};readMetadata=async e=>{try{return zs(await this._apiClient.readMetadata(e,{...this.authHeader}))}catch(r){if(Bs(this._apiClient.api,"readMetadata",r)&&r.response.status===404)return wr("feature-disabled");throw r}}};import{Zodios as ed}from"@zodios/core";import{makeApi as Ju,makeEndpoint as Ws}from"@zodios/core";import{z as We}from"zod";import{z as re}from"zod";var Do=re.object({id:re.string(),name:re.string(),description:re.string().optional(),webpageUrl:re.string().optional(),contentUrl:re.string(),project:Xt.optional(),showTabs:re.coerce.boolean(),defaultViewId:re.string().optional(),tags:re.object({tag:re.array(re.object({label:re.string()})).optional()}),views:re.optional(re.object({view:re.array(dt)}))});var Zu=Ws({method:"get",path:"/sites/:siteId/workbooks/:workbookId",alias:"getWorkbook",description:"Returns information about the specified workbook, including information about views and tags.",response:We.object({workbook:Do})}),Yu=Ws({method:"get",path:"/sites/:siteId/workbooks",alias:"queryWorkbooksForSite",description:"Returns the workbooks on a site.",parameters:[...Ye,{name:"siteId",type:"Path",schema:We.string()},{name:"filter",type:"Query",schema:We.string().optional(),description:"An expression that lets you specify a subset of workbooks to return. You can filter on predefined fields such as name, tags, and createdAt. You can include multiple filter expressions."}],response:We.object({pagination:Ze,workbooks:We.object({workbook:We.optional(We.array(Do))})})}),Xu=Ju([Yu,Zu]),Hs=[...Xu];var Vt=class extends H{constructor(e,r){super(new ed(e,Hs),r)}getWorkbook=async({workbookId:e,siteId:r})=>(await this._apiClient.getWorkbook({params:{siteId:r,workbookId:e},...this.authHeader})).workbook;queryWorkbooksForSite=async({siteId:e,filter:r,pageSize:o,pageNumber:i})=>{let n=await this._apiClient.queryWorkbooksForSite({params:{siteId:e},queries:{filter:r,pageSize:o,pageNumber:i},...this.authHeader});return{pagination:n.pagination,workbooks:n.workbooks.workbook??[]}}};var He=class t{_creds;_host;_baseUrl;_baseUrlWithoutVersion;_authenticationMethods;_authenticatedAuthenticationMethods;_contentExplorationMethods;_datasourcesMethods;_metadataMethods;_pulseMethods;_serverMethods;_vizqlDataServiceMethods;_viewsMethods;_workbooksMethods;static _version="3.24";_requestInterceptor;_responseInterceptor;constructor(e,r){this._host=e,this._baseUrl=`${this._host}/api/${t._version}`,this._baseUrlWithoutVersion=`${this._host}/api/-`,this._requestInterceptor=r?.requestInterceptor,this._responseInterceptor=r?.responseInterceptor}get creds(){if(!this._creds)throw new Error("No credentials found. Authenticate by calling signIn() first.");return this._creds}get siteId(){return this.creds.site.id}get authenticationMethods(){return this._authenticationMethods||(this._authenticationMethods=new yt(this._baseUrl),this._addInterceptors(this._baseUrl,this._authenticationMethods.interceptors)),this._authenticationMethods}get authenticatedAuthenticationMethods(){return this._authenticatedAuthenticationMethods||(this._authenticatedAuthenticationMethods=new Yt(this._baseUrl,this.creds),this._addInterceptors(this._baseUrl,this._authenticatedAuthenticationMethods.interceptors)),this._authenticatedAuthenticationMethods}get contentExplorationMethods(){return this._contentExplorationMethods||(this._contentExplorationMethods=new wt(this._baseUrlWithoutVersion,this.creds),this._addInterceptors(this._baseUrlWithoutVersion,this._contentExplorationMethods.interceptors)),this._contentExplorationMethods}get datasourcesMethods(){return this._datasourcesMethods||(this._datasourcesMethods=new Tt(this._baseUrl,this.creds),this._addInterceptors(this._baseUrl,this._datasourcesMethods.interceptors)),this._datasourcesMethods}get metadataMethods(){if(!this._metadataMethods){let e=`${this._host}/api/metadata`;this._metadataMethods=new At(e,this.creds),this._addInterceptors(e,this._metadataMethods.interceptors)}return this._metadataMethods}get pulseMethods(){return this._pulseMethods||(this._pulseMethods=new Lt(this._baseUrlWithoutVersion,this.creds),this._addInterceptors(this._baseUrlWithoutVersion,this._pulseMethods.interceptors)),this._pulseMethods}get serverMethods(){return this._serverMethods||(this._serverMethods=new Ot(this._baseUrl,this.creds),this._addInterceptors(this._baseUrl,this._serverMethods.interceptors)),this._serverMethods}get vizqlDataServiceMethods(){if(!this._vizqlDataServiceMethods){let e=`${this._host}/api/v1/vizql-data-service`;this._vizqlDataServiceMethods=new jt(e,this.creds),this._addInterceptors(e,this._vizqlDataServiceMethods.interceptors)}return this._vizqlDataServiceMethods}get viewsMethods(){return this._viewsMethods||(this._viewsMethods=new Nt(this._baseUrl,this.creds),this._addInterceptors(this._baseUrl,this._viewsMethods.interceptors)),this._viewsMethods}get workbooksMethods(){return this._workbooksMethods||(this._workbooksMethods=new Vt(this._baseUrl,this.creds),this._addInterceptors(this._baseUrl,this._workbooksMethods.interceptors)),this._workbooksMethods}signIn=async e=>{this._creds=await this.authenticationMethods.signIn(e)};signOut=async()=>{await this.authenticatedAuthenticationMethods.signOut(),this._creds=void 0};setCredentials=(e,r)=>{let o=e.split("|");if(o.length<3)throw new Error("Could not determine site ID. Access token must have 3 parts.");let i=o[2];this._creds={site:{id:i},user:{id:r},token:e}};_addInterceptors=(e,r)=>{r.request.use(o=>(this._requestInterceptor?.[0]({baseUrl:e,...Jt(o)}),o),o=>(this._requestInterceptor?.[1]?.(o,e),Promise.reject(o))),r.response.use(o=>(this._responseInterceptor?.[0]({baseUrl:e,...Zt(o)}),o),o=>(this._responseInterceptor?.[1]?.(o,e),Promise.reject(o)))}};var td=async(t,e,r,o,i)=>{let n=t.server||i?.server;ue(n,"Tableau server could not be determined");let s=new He(n,{requestInterceptor:[rd(r,e),od(r,e)],responseInterceptor:[id(r,e),sd(r,e)]});if(t.auth==="pat")await s.signIn({type:"pat",patName:t.patName,patValue:t.patValue,siteName:t.siteName});else if(t.auth==="direct-trust")await s.signIn({type:"direct-trust",siteName:t.siteName,username:nd(t,i),clientId:t.connectedAppClientId,secretId:t.connectedAppSecretId,secretValue:t.connectedAppSecretValue,scopes:o,additionalPayload:ad(t,i)});else{if(!i?.accessToken||!i?.userId)throw new Error("Auth info is required when not signing in first.");s.setCredentials(i.accessToken,i.userId)}return s},I=async({config:t,requestId:e,server:r,callback:o,jwtScopes:i,authInfo:n})=>{let s=await td(t,e,r,new Set(i),n);try{return await o(s)}finally{t.auth!=="oauth"&&await s.signOut()}},rd=(t,e)=>r=>(r.headers["User-Agent"]=Tr,Gs(t,r,e),r),od=(t,e)=>(r,o)=>{if(!Ie(r)||!r.request){de.error(t,`Request ${e} failed with error: ${W(r)}`,{logger:"rest-api",requestId:e});return}let{request:i}=r;Gs(t,{baseUrl:o,...Jt(i)},e)},id=(t,e)=>r=>($s(t,r,e),r),sd=(t,e)=>(r,o)=>{if(!Ie(r)||!r.response){de.error(t,`Response from request ${e} failed with error: ${W(r)}`,{logger:"rest-api",requestId:e});return}let{response:i}=r;$s(t,{baseUrl:o,...Zt(i)},e)};function Gs(t,e,r){let i=E().disableLogMasking?e:ni(e),n=new URL(i.url??"",i.baseUrl);e.params&&Object.keys(e.params).length>0&&(n.search=new URLSearchParams(e.params).toString());let s={type:"request",requestId:r,method:i.method,url:n.toString(),...Pe("debug")&&{headers:i.headers,data:i.data,params:i.params}};de.info(t,s,{logger:"rest-api",requestId:r})}function $s(t,e,r){let i=E().disableLogMasking?e:ai(e),n=new URL(i.url??"",i.baseUrl);e.request?.params&&Object.keys(e.request.params).length>0&&(n.search=new URLSearchParams(e.request.params).toString());let s={type:"response",requestId:r,url:n.toString(),status:i.status,...Pe("debug")&&{headers:i.headers,data:i.data}};de.info(t,s,{logger:"rest-api",requestId:r})}function nd(t,e){return t.jwtSubClaim.replaceAll("{OAUTH_USERNAME}",e?.username??"")}function ad(t,e){let r=t.jwtAdditionalPayload.replaceAll("{OAUTH_USERNAME}",e?.username??"");return JSON.parse(r||"{}")}import{z as F}from"zod";import{z as ld}from"zod";var B=t=>ld.string({message:`${t} is required`}).nonempty({message:`${t} must be non-empty`});var Qs=F.object({client_id:B("client_id"),redirect_uri:B("redirect_uri"),response_type:B("response_type"),code_challenge:B("code_challenge"),code_challenge_method:B("code_challenge_method"),state:F.string().optional()}).transform(t=>({clientId:t.client_id,redirectUri:t.redirect_uri,responseType:t.response_type,codeChallenge:t.code_challenge,codeChallengeMethod:t.code_challenge_method,state:t.state})),Ks=F.discriminatedUnion("grant_type",[F.object({grant_type:F.literal("authorization_code"),code:B("code"),redirect_uri:B("redirect_uri"),code_verifier:B("code_verifier")}),F.object({grant_type:F.literal("refresh_token"),refresh_token:B("refresh_token")}),F.object({grant_type:F.literal("client_credentials")})],{errorMap:(t,e)=>({message:t.code==="invalid_union_discriminator"?`grant_type must be ${t.options.map(r=>`'${String(r)}'`).join(" | ")}, got '${e.data.grant_type}'.`:e.defaultError})}).and(F.object({client_id:F.string().optional(),client_secret:F.string().optional()})).transform(t=>{let{client_id:e,client_secret:r}=t,o={clientId:e,clientSecret:r};return t.grant_type==="authorization_code"?{grantType:t.grant_type,code:t.code,redirectUri:t.redirect_uri,codeVerifier:t.code_verifier,...o}:t.grant_type==="refresh_token"?{grantType:t.grant_type,refreshToken:t.refresh_token,...o}:{grantType:t.grant_type,...o}}),Js=F.object({code:F.string().optional(),state:F.string().optional(),error:F.string().optional()}),Po=F.object({iss:B("iss"),aud:B("aud"),exp:F.number().int().nonnegative(),sub:B("sub"),clientId:B("clientId"),tableauServer:B("tableauServer"),tableauUserId:F.string().optional()}),Zs=Po.extend({tableauAccessToken:B("tableauAccessToken"),tableauRefreshToken:B("tableauRefreshToken"),tableauExpiresAt:F.number().int().nonnegative(),tableauUserId:B("tableauUserId")}),Ar=F.object({username:F.string(),userId:F.string(),server:F.string(),accessToken:F.string(),refreshToken:F.string()}).partial();var M=t=>{if(!t)return;let e=Ar.safeParse(t.extra);if(e.success)return e.data};import{ZodiosError as Ys}from"@zodios/core";import{fromError as cd,isZodErrorLike as ud}from"zod-validation-error";var O=class{server;name;description;paramsSchema;annotations;argsValidator;callback;constructor({server:e,name:r,description:o,paramsSchema:i,annotations:n,argsValidator:s,callback:a}){this.server=e,this.name=r,this.description=o,this.paramsSchema=i,this.annotations=n,this.argsValidator=s,this.callback=a}logInvocation({requestId:e,args:r,username:o}){de.debug(this.server,oi({requestId:e,toolName:this.name,args:r,username:o}))}async logAndExecute({requestId:e,args:r,authInfo:o,callback:i,getSuccessResult:n,getErrorText:s,constrainSuccessResult:a}){let d=o?.extra?Ar.safeParse(o.extra).data?.username:void 0;if(this.logInvocation({requestId:e,args:r,username:d}),r)try{this.argsValidator?.(r)}catch(l){return Er(e,l)}try{let l=await i();if(l.isOk()){let c=await a(l.value);return c.type!=="success"?{isError:c.type==="error",content:[{type:"text",text:c.message}]}:n?n(c.result):{isError:!1,content:[{type:"text",text:JSON.stringify(c.result)}]}}return l.error instanceof Ys?Er(e,l.error):s?{isError:!0,content:[{type:"text",text:s(l.error)}]}:Er(e,l.error)}catch(l){return Er(e,l)}}};function Er(t,e){if(e instanceof Ys&&ud(e.cause)){let r=cd(e.cause);return{isError:!1,content:[{type:"text",text:JSON.stringify({data:e.data,warning:r.toString()})}]}}return{isError:!0,content:[{type:"text",text:`requestId: ${t}, error: ${W(e)}`}]}}function Xs(t){let e=new Set;return t.flatMap(r=>e.has(r.method)?[]:(e.add(r.method),r.method+(r.sortDirection?`:${r.sortDirection}`:""))).join(",")}function en(t){let e=[];if(t.contentTypes)if(t.contentTypes.length===1)e.push(`type:eq:${t.contentTypes[0]}`);else{let r=new Set;for(let o of t.contentTypes)r.add(o);e.push(`type:in:[${Array.from(r).join(",")}]`)}if(t.ownerIds)if(t.ownerIds.length===1)e.push(`ownerId:eq:${t.ownerIds[0]}`);else{let r=new Set;for(let o of t.ownerIds)r.add(o);e.push(`ownerId:in:[${Array.from(r).join(",")}]`)}if(t.modifiedTime)if(Array.isArray(t.modifiedTime))if(t.modifiedTime.length===1)e.push(`modifiedTime:eq:${t.modifiedTime[0]}`);else{let r=new Set;for(let o of t.modifiedTime)r.add(o);e.push(`modifiedTime:in:[${Array.from(r).join(",")}]`)}else if(t.modifiedTime.startDate&&t.modifiedTime.endDate){let r=t.modifiedTime.startDate,o=t.modifiedTime.endDate;r>o&&(r=t.modifiedTime.endDate,o=t.modifiedTime.startDate),e.push(`modifiedTime:gte:${r}`),e.push(`modifiedTime:lte:${o}`)}else t.modifiedTime.startDate?e.push(`modifiedTime:gte:${t.modifiedTime.startDate}`):t.modifiedTime.endDate&&e.push(`modifiedTime:lte:${t.modifiedTime.endDate}`);return e.join(",")}function tn(t){let e=[];if(t.items)for(let r of t.items)e.push(dd(r.content));return e}function dd(t){let e={};return t.modifiedTime&&(e.modifiedTime=t.modifiedTime),t.sheetType&&(e.sheetType=t.sheetType),t.caption&&(e.caption=t.caption),t.workbookDescription&&(e.workbookDescription=t.workbookDescription),t.type&&(e.type=t.type),t.ownerId&&(e.ownerId=t.ownerId),t.title&&(e.title=t.title),t.ownerName&&(e.ownerName=t.ownerName),t.containerName&&(t.type==="view"?e.parentWorkbookName=t.containerName:e.containerName=t.containerName),t.luid&&(e.luid=t.luid),t.locationName&&(e.locationName=t.locationName),t.comments?.length&&(e.comments=t.comments),t.hitsTotal!=null&&(e.totalViewCount=t.hitsTotal),t.favoritesTotal!=null&&(e.favoritesTotal=t.favoritesTotal),t.tags?.length&&(e.tags=t.tags),t.projectId&&(e.projectId=t.projectId),t.projectName&&(e.projectName=t.projectName),t.hitsSmallSpanTotal!=null&&(e.viewCountLastMonth=t.hitsSmallSpanTotal),t.downstreamWorkbookCount!=null&&(e.downstreamWorkbookCount=t.downstreamWorkbookCount),t.isConnectable!=null&&(e.isConnectable=t.isConnectable),t.datasourceIsPublished!=null&&(e.datasourceIsPublished=t.datasourceIsPublished),t.connectionType&&(e.connectionType=t.connectionType),t.isCertified!=null&&(e.isCertified=t.isCertified),t.hasExtracts!=null&&(e.hasExtracts=t.hasExtracts),t.extractRefreshedAt&&(e.extractRefreshedAt=t.extractRefreshedAt),t.extractUpdatedAt&&(e.extractUpdatedAt=t.extractUpdatedAt),t.connectedWorkbooksCount!=null&&(e.connectedWorkbooksCount=t.connectedWorkbooksCount),t.extractCreationPending!=null&&(e.extractCreationPending=t.extractCreationPending),t.hasSevereDataQualityWarning!=null&&(e.hasSevereDataQualityWarning=t.hasSevereDataQualityWarning),t.datasourceLuid&&(e.datasourceLuid=t.datasourceLuid),t.hasActiveDataQualityWarning!=null&&(e.hasActiveDataQualityWarning=t.hasActiveDataQualityWarning),e}function rn({items:t,boundedContext:e}){if(t.length===0)return{type:"empty",message:"No search results were found. Either none exist or you do not have permission to view them."};let{projectIds:r,datasourceIds:o,workbookIds:i}=e;return r&&(t=t.filter(n=>!!(typeof n.projectId=="number"&&r.has(n.projectId.toString())))),o&&(t=t.filter(n=>!((n.type==="datasource"||n.type==="unifieddatasource")&&typeof n.datasourceLuid=="string"&&!o.has(n.datasourceLuid)))),i&&(t=t.filter(n=>!(n.type==="workbook"&&typeof n.luid=="string"&&!i.has(n.luid)))),t.length===0?{type:"empty",message:["The set of allowed content that can be queried is limited by the server configuration.","While search results were found, they were all filtered out by the server configuration."].join(" ")}:{type:"success",result:t}}var md={terms:on.string().trim().nonempty().optional(),limit:on.number().int().min(1).max(2e3).default(100).optional(),orderBy:mi.optional(),filter:gi.optional()},sn=t=>{let e=new O({server:t,name:"search-content",description:"\nThis tool searches across all supported content types for objects relevant to the search expression specified by search terms and filters.\n\n**Parameters:**\n\n- `terms` (optional): A string containing one or more search terms that the search uses as the basis for determining which items are relevant to return. If the terms parameter is not provided, it searches for everything bound by the specified filters.\n\n- `filter` (optional): Allows you to limit search results based on:\n - `contentTypes`: Filter by content types. Supported types are: 'lens', 'datasource', 'virtualconnection', 'collection', 'project', 'flow', 'datarole', 'table', 'database', 'view', 'workbook'\n - `ownerIds`: Filter by specific owner IDs (array of integers)\n - `modifiedTime`: Filter by last modified times using ISO 8601 date-time strings. Can be either a range (with startDate/endDate) or an array of specific date-times to include\n\n- `limit` (optional): The number of items to return in the search response (default: 100, max: 2000)\n\n- `orderBy` (optional): Determines the sorting method for returned items. Available sorting methods:\n - `hitsTotal`: Number of times a content item has been viewed since it was created\n - `hitsSmallSpanTotal`: Number of times a content item was viewed in the last month\n - `hitsMediumSpanTotal`: Number of times a content item was viewed in the last 3 months\n - `hitsLargeSpanTotal`: Number of times a content item was viewed in the last year\n - `downstreamWorkbookCount`: Number of workbooks in a given project. This value is only available when the content type filter includes 'database' or 'table'\n \n For each sort method, you can specify a sort direction: 'asc' for ascending or 'desc' for descending (default: 'asc'). The orderBy parameter is an array of objects containing the sorting method and direction. The first element determines primary sorting, with subsequent elements used as tiebreakers.\n\n**Important Notes:**\n- If `orderBy` is omitted, the search will sort items by their \"relevance score\" in descending order, which is Tableau's internal algorithm for providing the most relevant results",paramsSchema:md,annotations:{title:"Search Content",readOnlyHint:!0,openWorldHint:!1},callback:async({terms:r,limit:o,orderBy:i,filter:n},{requestId:s,authInfo:a})=>{let d=E(),l=i?Xs(i):void 0,c=n?en(n):void 0;return await e.logAndExecute({requestId:s,authInfo:a,args:{},callback:async()=>new pd(await I({config:d,requestId:s,server:t,jwtScopes:["tableau:content:read"],authInfo:M(a),callback:async m=>{let g=await m.contentExplorationMethods.searchContent({terms:r,page:0,limit:d.maxResultLimit?Math.min(d.maxResultLimit,o??100):o??100,orderBy:l,filter:c});return tn(g)}})),constrainSuccessResult:m=>rn({items:m,boundedContext:d.boundedContext})})}});return e};import{Err as ln,Ok as Oo}from"ts-results-es";import{z as gd}from"zod";function _r(){return["The VizQL Data Service is disabled on this Tableau Server.","To enable it, use TSM using the instructions at https://help.tableau.com/current/server-linux/en-us/cli_configuration-set_tsm.htm#featuresvizqldataservicedeploywithtsm."].join(" ")}var Bt=class t{_allowedProjectIds;_allowedDatasourceIds;_allowedWorkbookIds;_cachedDatasourceIds;_cachedWorkbookIds;_cachedViewIds;static create(){return new t}static createForTesting(e){return new t(e)}constructor(e){this._allowedProjectIds=e?.projectIds,this._allowedDatasourceIds=e?.datasourceIds,this._allowedWorkbookIds=e?.workbookIds,this._cachedDatasourceIds=new Map,this._cachedWorkbookIds=new Map,this._cachedViewIds=new Map}get allowedProjectIds(){return this._allowedProjectIds===void 0&&(this._allowedProjectIds=E().boundedContext.projectIds),this._allowedProjectIds}get allowedDatasourceIds(){return this._allowedDatasourceIds===void 0&&(this._allowedDatasourceIds=E().boundedContext.datasourceIds),this._allowedDatasourceIds}get allowedWorkbookIds(){return this._allowedWorkbookIds===void 0&&(this._allowedWorkbookIds=E().boundedContext.workbookIds),this._allowedWorkbookIds}async isDatasourceAllowed({datasourceLuid:e,restApiArgs:r}){let o=await this._isDatasourceAllowed({datasourceLuid:e,restApiArgs:r});return this.allowedProjectIds||this._cachedDatasourceIds.set(e,o),o}async isWorkbookAllowed({workbookId:e,restApiArgs:r}){let o=await this._isWorkbookAllowed({workbookId:e,restApiArgs:r});return this.allowedProjectIds||this._cachedWorkbookIds.set(e,o),o}async isViewAllowed({viewId:e,restApiArgs:r}){let o=await this._isViewAllowed({viewId:e,restApiArgs:r});return this.allowedProjectIds||this._cachedViewIds.set(e,o),o}async _isDatasourceAllowed({datasourceLuid:e,restApiArgs:{config:r,requestId:o,server:i}}){let n=this._cachedDatasourceIds.get(e);if(n)return n;if(this.allowedDatasourceIds&&!this.allowedDatasourceIds.has(e))return{allowed:!1,message:["The set of allowed data sources that can be queried is limited by the server configuration.",`Querying the datasource with LUID ${e} is not allowed.`].join(" ")};if(this.allowedProjectIds)try{let s=await I({config:r,requestId:o,server:i,jwtScopes:["tableau:content:read"],callback:async a=>(await a.datasourcesMethods.queryDatasource({siteId:a.siteId,datasourceId:e})).project.id});if(!this.allowedProjectIds.has(s))return{allowed:!1,message:["The set of allowed data sources that can be queried is limited by the server configuration.",`The datasource with LUID ${e} cannot be queried because it does not belong to an allowed project.`].join(" ")}}catch(s){return{allowed:!1,message:["The set of allowed data sources that can be queried is limited by the server configuration.",`An error occurred while checking if the datasource with LUID ${e} is in an allowed project:`,W(s)].join(" ")}}return{allowed:!0}}async _isWorkbookAllowed({workbookId:e,restApiArgs:{config:r,requestId:o,server:i}}){let n=this._cachedWorkbookIds.get(e);if(n)return n;if(this.allowedWorkbookIds&&!this.allowedWorkbookIds.has(e))return{allowed:!1,message:["The set of allowed workbooks that can be queried is limited by the server configuration.",`Querying the workbook with LUID ${e} is not allowed.`].join(" ")};let s;if(this.allowedProjectIds)try{if(s=await I({config:r,requestId:o,server:i,jwtScopes:["tableau:content:read"],callback:async a=>await a.workbooksMethods.getWorkbook({siteId:a.siteId,workbookId:e})}),!this.allowedProjectIds.has(s.project?.id??""))return{allowed:!1,message:["The set of allowed workbooks that can be queried is limited by the server configuration.",`The workbook with LUID ${e} cannot be queried because it does not belong to an allowed project.`].join(" ")}}catch(a){return{allowed:!1,message:["The set of allowed workbooks that can be queried is limited by the server configuration.",`An error occurred while checking if the workbook with LUID ${e} is in an allowed project:`,W(a)].join(" ")}}return{allowed:!0,content:s}}async _isViewAllowed({viewId:e,restApiArgs:{config:r,requestId:o,server:i}}){let n=this._cachedViewIds.get(e);if(n)return n;let s="",a="";if(this.allowedWorkbookIds)try{let d=await I({config:r,requestId:o,server:i,jwtScopes:["tableau:content:read"],callback:async l=>await l.viewsMethods.getView({siteId:l.siteId,viewId:e})});if(s=d.workbook?.id??"",a=d.project?.id??"",!this.allowedWorkbookIds.has(s))return{allowed:!1,message:["The set of allowed workbooks that can be queried is limited by the server configuration.",`The view with LUID ${e} cannot be queried because it does not belong to an allowed workbook.`].join(" ")}}catch(d){return{allowed:!1,message:["The set of allowed workbooks that can be queried is limited by the server configuration.",`An error occurred while checking if the workbook containing the view with LUID ${e} is in an allowed workbook:`,W(d)].join(" ")}}if(this.allowedProjectIds)try{if(a=a||await I({config:r,requestId:o,server:i,jwtScopes:["tableau:content:read"],callback:async d=>(await d.viewsMethods.getView({siteId:d.siteId,viewId:e})).project?.id??""}),!this.allowedProjectIds.has(a))return{allowed:!1,message:["The set of allowed views that can be queried is limited by the server configuration.",`The view with LUID ${e} cannot be queried because it does not belong to an allowed project.`].join(" ")}}catch(d){return{allowed:!1,message:["The set of allowed views that can be queried is limited by the server configuration.",`An error occurred while checking if the workbook containing the view with LUID ${e} is in an allowed project:`,W(d)].join(" ")}}return{allowed:!0}}},ge=Bt.create(),dA={createResourceAccessChecker:Bt.createForTesting,resetResourceAccessCheckerSingleton:()=>{ge=Bt.create()}};function Sr({datasourceLuid:t}){if(!t)throw new Error("datasourceLuid must be a non-empty string.")}import{z as v}from"zod";var fd=v.object({name:v.string(),columnClass:v.string(),dataType:v.string().nullable(),defaultAggregation:v.string().nullable(),description:v.string().nullable(),descriptionInherited:v.array(v.object({attribute:v.string(),value:v.string().nullable()}).nullable()).nullable(),dataCategory:v.string().nullable(),role:v.string().nullable(),defaultFormat:v.string().nullable(),semanticRole:v.string().nullable(),aggregation:v.string().nullable(),aggregationParam:v.string().nullable(),formula:v.string().nullable(),isAutoGenerated:v.boolean().nullable(),hasUserReference:v.boolean().nullable(),binSize:v.number().nullable()}).partial(),hd=v.object({name:v.string(),parameterType:v.string(),dataType:v.string().nullable(),value:v.union([v.number(),v.string(),v.boolean(),v.null()]),members:v.array(v.union([v.number(),v.string(),v.boolean(),v.null()])),min:v.number().nullable(),max:v.number().nullable(),step:v.number().nullable(),minDate:v.string().nullable(),maxDate:v.string().nullable(),periodValue:v.number().nullable(),periodType:v.string().nullable()}).partial(),hA=v.object({fields:v.array(fd),parameters:v.array(hd)});function Lo(t){let e={fields:[],parameters:[]};if(!t.data)return e;for(let r of t.data){let o={name:r.fieldCaption,dataType:r.dataType,columnClass:r.columnClass};r.defaultAggregation&&(o.defaultAggregation=r.defaultAggregation),r.formula&&(o.formula=r.formula),e.fields.push(o)}if(t.extraData?.parameters)for(let r of t.extraData.parameters){let o={name:r.parameterCaption,parameterType:r.parameterType,dataType:r.dataType,value:r.value};r.parameterType==="LIST"&&r.members?o.members=r.members:r.parameterType==="QUANTITATIVE_DATE"?(o.minDate=r.minDate,o.maxDate=r.maxDate,o.periodValue=r.periodValue,o.periodType=r.periodType):r.parameterType==="QUANTITATIVE_RANGE"&&(o.min=r.min,o.max=r.max,o.step=r.step),e.parameters.push(o)}return e}function an(t,e){let r={fields:[],parameters:[]};if(!t.data){if(e.data.publishedDatasources[0]?.fields.length)for(let o of e.data.publishedDatasources[0].fields){let i={name:o.name};o.dataType&&(i.dataType=o.dataType),o.aggregation&&(i.defaultAggregation=o.aggregation),nn(o,i),r.fields.push(i)}return r}for(let o of t.data){let i={name:o.fieldCaption,dataType:o.dataType,columnClass:o.columnClass};o.defaultAggregation&&(i.defaultAggregation=o.defaultAggregation),o.formula&&(i.formula=o.formula),r.fields.push(i)}if(t.extraData?.parameters)for(let o of t.extraData.parameters){let i={name:o.parameterCaption,parameterType:o.parameterType,dataType:o.dataType,value:o.value};o.parameterType==="LIST"&&o.members?i.members=o.members:o.parameterType==="QUANTITATIVE_DATE"?(i.minDate=o.minDate,i.maxDate=o.maxDate,i.periodValue=o.periodValue,i.periodType=o.periodType):o.parameterType==="QUANTITATIVE_RANGE"&&(i.min=o.min,i.max=o.max,i.step=o.step),r.parameters.push(i)}if(!e.data.publishedDatasources[0]?.fields.length)return r;for(let o of r.fields){let i=e.data.publishedDatasources[0].fields.find(n=>n.name===o.name);i&&nn(i,o)}return r}function nn(t,e){t.description&&(e.description=t.description),t.descriptionInherited?.length&&(e.descriptionInherited=t.descriptionInherited),t.dataCategory&&(e.dataCategory=t.dataCategory),t.role&&(e.role=t.role),t.defaultFormat&&(e.defaultFormat=t.defaultFormat),t.formula&&(e.formula=t.formula,t.isAutoGenerated!=null&&(e.isAutoGenerated=t.isAutoGenerated),t.hasUserReference!=null&&(e.hasUserReference=t.hasUserReference)),t.binSize!=null&&(e.binSize=t.binSize)}var bd=t=>`
17
+ - 'DEFINITION_VIEW_DEFAULT' - Return the metric definition and the default metric.`}],response:M.object({definitions:M.array(Ro)})}),wu=mt({method:"get",path:"/pulse/definitions/:pulseMetricDefinitionID/metrics",alias:"listPulseMetricsFromMetricDefinitionId",description:"Returns a list of published Pulse Metrics for a specific Pulse Metric Definition.",parameters:[{name:"pulseMetricDefinitionID",type:"Path",schema:M.string().nonempty()}],response:M.object({metrics:M.array(Ar),total_available:M.number()})}),Tu=mt({method:"post",path:"/pulse/metrics%3AbatchGet",alias:"listPulseMetricsFromMetricIds",description:"Returns a list of Pulse Metrics for a list of metric IDs.",parameters:[{name:"metric_ids",type:"Body",schema:M.object({metric_ids:M.array(M.string().nonempty())})}],response:M.object({metrics:M.array(Ar)})}),Au=mt({method:"get",path:"/pulse/subscriptions",alias:"listPulseMetricSubscriptionsForCurrentUser",description:"Returns a list of Pulse Subscriptions for the current user.",parameters:[{name:"user_id",type:"Query",schema:M.string().nonempty()}],response:M.object({subscriptions:M.array(Ns)})}),Eu=mt({method:"post",path:"/pulse/insights/:bundle_type",alias:"generatePulseMetricValueInsightBundle",description:"Generates a bundle for the current aggregated value for the Pulse metric.",parameters:[{name:"bundle_request",type:"Body",schema:Er},{name:"bundle_type",type:"Path",schema:M.enum(_r)}],response:Fs}),_u=gu([Eu,bu,yu,wu,Au,Tu]),Us=[..._u];var Ut=class extends H{constructor(e,r){super(new Su(e,Us),r)}listAllPulseMetricDefinitions=async(e,r,o)=>await ft(async()=>{let i=await this._apiClient.listAllPulseMetricDefinitions({queries:{view:e,page_token:r,page_size:o},...this.authHeader});return{pagination:{next_page_token:i.next_page_token,offset:i.offset,total_available:i.total_available},definitions:i.definitions??[]}});listPulseMetricDefinitionsFromMetricDefinitionIds=async(e,r)=>await ft(async()=>(await this._apiClient.listPulseMetricDefinitionsFromMetricDefinitionIds({definition_ids:e},{queries:{view:r},...this.authHeader})).definitions??[]);listPulseMetricsFromMetricDefinitionId=async e=>await ft(async()=>(await this._apiClient.listPulseMetricsFromMetricDefinitionId({params:{pulseMetricDefinitionID:e},...this.authHeader})).metrics??[]);listPulseMetricsFromMetricIds=async e=>await ft(async()=>(await this._apiClient.listPulseMetricsFromMetricIds({metric_ids:e},{...this.authHeader})).metrics??[]);listPulseMetricSubscriptionsForCurrentUser=async()=>await ft(async()=>(await this._apiClient.listPulseMetricSubscriptionsForCurrentUser({queries:{user_id:this.userId},...this.authHeader})).subscriptions??[]);generatePulseMetricValueInsightBundle=async(e,r)=>await ft(async()=>await this._apiClient.generatePulseMetricValueInsightBundle({bundle_request:e.bundle_request},{params:{bundle_type:r},...this.authHeader})??{})};async function ft(t){try{return new vu(await t())}catch(e){if(xe(e)){if(e.response?.status===404)return new qs("tableau-server");if(e.response?.status===400&&e.response.headers.tableau_error_code==="0xd3408984"&&e.response.headers.validation_code==="400999")return new qs("pulse-disabled")}throw e}}import{isErrorFromAlias as Pu,Zodios as Du}from"@zodios/core";import{Err as ko,Ok as Lu}from"ts-results-es";import{makeApi as Cu,makeEndpoint as zs}from"@zodios/core";import{z as Ie}from"zod";import{z as qt}from"zod";var js=qt.object({productVersion:qt.object({value:qt.string(),build:qt.string()}),restApiVersion:qt.string()});import{z as xo}from"zod";var Vs=xo.object({id:xo.string(),name:xo.string()});import{z as Io}from"zod";var Bs=Io.object({id:Io.string(),name:Io.string()});var Ru=Ie.object({site:Vs,user:Bs}),xu=zs({method:"get",path:"/serverinfo",alias:"getServerInfo",description:"Returns the version of Tableau Server and the supported version of the REST API.",response:Ie.object({serverInfo:js})}),Iu=zs({method:"get",path:"/sessions/current",alias:"getCurrentServerSession",description:"Returns details of the current session of Tableau Server.",response:Ie.object({session:Ru}),errors:[{status:401,schema:Ie.object({error:Ie.object({code:Ie.string(),summary:Ie.string(),detail:Ie.string()})})}]}),ku=Cu([xu,Iu]),Ws=[...ku];var jt=class extends H{constructor(e,r){super(new Du(e,Ws),r)}getServerInfo=async()=>(await this._apiClient.getServerInfo()).serverInfo;getCurrentServerSession=async()=>{try{let e=await this._apiClient.getCurrentServerSession({...this.authHeader});return Lu(e.session)}catch(e){return Pu(this._apiClient.api,"getCurrentServerSession",e)?ko({type:"unauthorized",message:e.response.data.error}):xe(e)&&e.response?ko({type:"unknown",message:e.response.data}):ko({type:"unknown",message:W(e)})}}};import{Zodios as Vu}from"@zodios/core";import{makeApi as Ou,makeEndpoint as Vt}from"@zodios/core";import{z as X}from"zod";import{z as Z}from"zod";var ht=Z.object({id:Z.string(),name:Z.string(),createdAt:Z.string(),updatedAt:Z.string(),workbook:Z.object({id:Z.string()}).optional(),owner:Z.object({id:Z.string()}).optional(),project:Z.object({id:Z.string()}).optional(),tags:Z.object({tag:Z.array(Z.object({label:Z.string()})).optional()}),usage:Z.object({totalViewCount:Z.coerce.number()}).optional()});var Mu=Vt({method:"get",path:"/sites/:siteId/views/:viewId",alias:"getView",description:"Gets the details of a specific view.",response:X.object({view:ht})}),Nu=Vt({method:"get",path:"/sites/:siteId/views/:viewId/data",alias:"queryViewData",description:"Returns a specified view rendered as data in comma separated value (CSV) format.",response:X.string()}),Fu=Vt({method:"get",path:"/sites/:siteId/views/:viewId/image",alias:"queryViewImage",description:"Returns an image of the specified view.",parameters:[{name:"vizWidth",type:"Query",schema:X.number().optional(),description:"The width of the rendered image in pixels that, along with the value of vizHeight determine its resolution and aspect ratio."},{name:"vizHeight",type:"Query",schema:X.number().optional(),description:"The height of the rendered image in pixels that, along with the value of vizWidth determine its resolution and aspect ratio."},{name:"resolution",type:"Query",schema:X.literal("high").optional(),description:"The resolution of the image. Image width and actual pixel density are determined by the display context of the image. Aspect ratio is always preserved. Set the value to high to ensure maximum pixel density."}],response:X.string()}),Uu=Vt({method:"get",path:"/sites/:siteId/workbooks/:workbookId/views",alias:"queryViewsForWorkbook",description:"Returns all the views for the specified workbook, optionally including usage statistics.",parameters:[{name:"includeUsageStatistics",type:"Query",schema:X.boolean().optional(),description:"true to return usage statistics. The default is false."}],response:X.object({views:X.object({view:X.array(ht)})})}),qu=Vt({method:"get",path:"/sites/:siteId/views",alias:"queryViewsForSite",description:"Returns all the views for the specified site, optionally including usage statistics.",parameters:[...rt,{name:"includeUsageStatistics",type:"Query",schema:X.boolean().optional(),description:"true to return usage statistics. The default is false."},{name:"filter",type:"Query",schema:X.string().optional(),description:"An expression that lets you specify a subset of views to return. You can filter on predefined fields such as name, tags, and createdAt. You can include multiple filter expressions."}],response:X.object({pagination:tt,views:X.object({view:X.array(ht).optional()})})}),ju=Ou([Mu,Nu,Fu,Uu,qu]),Hs=[...ju];var Bt=class extends H{constructor(e,r){super(new Vu(e,Hs),r)}getView=async({viewId:e,siteId:r})=>(await this._apiClient.getView({params:{siteId:r,viewId:e},...this.authHeader})).view;queryViewData=async({viewId:e,siteId:r})=>await this._apiClient.queryViewData({params:{siteId:r,viewId:e},...this.authHeader});queryViewImage=async({viewId:e,siteId:r,width:o,height:i,resolution:n})=>await this._apiClient.queryViewImage({params:{siteId:r,viewId:e},queries:{vizWidth:o,vizHeight:i,resolution:n},...this.authHeader,responseType:"arraybuffer"});queryViewsForWorkbook=async({workbookId:e,siteId:r,includeUsageStatistics:o})=>(await this._apiClient.queryViewsForWorkbook({params:{siteId:r,workbookId:e},queries:{includeUsageStatistics:o},...this.authHeader})).views.view;queryViewsForSite=async({siteId:e,includeUsageStatistics:r,filter:o,pageSize:i,pageNumber:n})=>{let s=await this._apiClient.queryViewsForSite({params:{siteId:e},queries:{includeUsageStatistics:r,filter:o,pageSize:i,pageNumber:n},...this.authHeader});return{pagination:s.pagination,views:s.views.view??[]}}};import{isErrorFromAlias as Xs,Zodios as cd,ZodiosError as ud}from"@zodios/core";import{Err as vr,Ok as en}from"ts-results-es";import{makeApi as Bu}from"@zodios/core";import{z as m}from"zod";var zu=m.object({connectionLuid:m.string().optional(),connectionUsername:m.string(),connectionPassword:m.string()}),Gs=m.object({datasourceLuid:m.string().nonempty(),connections:m.array(zu).optional()}),Wu=m.enum(["OBJECTS","ARRAYS"]),$s=m.object({returnFormat:Wu,debug:m.boolean().default(!1)}).partial().passthrough(),Hu=m.object({datasource:Gs,options:$s.optional()}).passthrough(),Lo=m.enum(["SUM","AVG","MEDIAN","COUNT","COUNTD","MIN","MAX","STDEV","VAR","COLLECT","YEAR","QUARTER","MONTH","WEEK","DAY","TRUNC_YEAR","TRUNC_QUARTER","TRUNC_MONTH","TRUNC_WEEK","TRUNC_DAY","AGG","NONE","UNSPECIFIED"]),Qs=m.enum(["INTEGER","REAL","STRING","DATETIME","BOOLEAN","DATE","SPATIAL","UNKNOWN"]),Ks=m.enum(["MINUTES","HOURS","DAYS","WEEKS","MONTHS","QUARTERS","YEARS"]),Gu=m.object({fieldName:m.string(),fieldCaption:m.string(),dataType:Qs,defaultAggregation:Lo,columnClass:m.enum(["COLUMN","BIN","GROUP","CALCULATION","TABLE_CALCULATION"]),formula:m.string(),logicalTableId:m.string()}).partial().passthrough(),Js=m.union([m.number(),m.string(),m.boolean(),m.null()]),Sr=m.object({parameterCaption:m.string(),dataType:Qs.exclude(["DATETIME","SPATIAL","UNKNOWN"]),parameterName:m.string().optional(),value:Js}),$u=m.discriminatedUnion("parameterType",[Sr.extend({parameterType:m.literal("ANY_VALUE")}).strict(),Sr.extend({parameterType:m.literal("LIST"),members:m.array(Js)}).strict(),Sr.extend({parameterType:m.literal("QUANTITATIVE_DATE"),value:m.string().nullable(),minDate:m.string().nullish(),maxDate:m.string().nullish(),periodValue:m.number().nullish(),periodType:Ks.nullish()}).strict(),Sr.extend({parameterType:m.literal("QUANTITATIVE_RANGE"),value:m.number().nullable(),min:m.number().nullish(),max:m.number().nullish(),step:m.number().nullish()}).strict()]),Qu=m.object({data:m.array(Gu),extraData:m.object({parameters:m.array($u)})}).partial().passthrough(),Ku=m.object({errorCode:m.string(),message:m.string(),datetime:m.string().datetime({offset:!0}),debug:m.object({}).partial().passthrough(),"tab-error-code":m.string()}).partial().passthrough(),Ju=m.enum(["ASC","DESC"]),Po=m.object({fieldCaption:m.string(),fieldAlias:m.string().optional(),maxDecimalPlaces:m.number().int().optional(),sortDirection:Ju.optional(),sortPriority:m.number().int().optional()}),Zu=m.union([Po.strict(),Po.extend({function:Lo}).strict(),Po.extend({calculation:m.string()}).strict()]),Zs=m.union([m.object({fieldCaption:m.string()}).strict(),m.object({fieldCaption:m.string(),function:Lo}).strict(),m.object({calculation:m.string()}).strict()]),Oo=m.object({field:Zs,context:m.boolean().optional()}),Mo=m.object({field:m.object({fieldCaption:m.string()}).strict(),context:m.boolean().optional()}),Yu=Mo.extend({filterType:m.literal("SET"),values:m.union([m.array(m.string()),m.array(m.number()),m.array(m.boolean())]),exclude:m.boolean().optional()}),gt=Mo.extend({filterType:m.literal("DATE"),periodType:Ks,anchorDate:m.string().optional(),includeNulls:m.boolean().optional()}),Xu=m.discriminatedUnion("dateRangeType",[gt.extend({dateRangeType:m.literal("CURRENT")}).strict(),gt.extend({dateRangeType:m.literal("LAST")}).strict(),gt.extend({dateRangeType:m.literal("NEXT")}).strict(),gt.extend({dateRangeType:m.literal("TODATE")}).strict(),gt.extend({dateRangeType:m.literal("LASTN"),rangeN:m.number().int()}).strict(),gt.extend({dateRangeType:m.literal("NEXTN"),rangeN:m.number().int()}).strict()]),Do=Mo.extend({filterType:m.literal("MATCH"),startsWith:m.string().optional(),endsWith:m.string().optional(),contains:m.string().optional(),exclude:m.boolean().optional()}),ed=m.union([Do.extend({startsWith:m.string()}).strict(),Do.extend({endsWith:m.string()}).strict(),Do.extend({contains:m.string()}).strict()]),zt=Oo.extend({filterType:m.literal("QUANTITATIVE_NUMERICAL")}),td=m.discriminatedUnion("quantitativeFilterType",[zt.extend({quantitativeFilterType:m.literal("RANGE"),min:m.number(),max:m.number(),includeNulls:m.boolean().optional()}).strict(),zt.extend({quantitativeFilterType:m.literal("MIN"),min:m.number(),includeNulls:m.boolean().optional()}).strict(),zt.extend({quantitativeFilterType:m.literal("MAX"),max:m.number(),includeNulls:m.boolean().optional()}).strict(),zt.extend({quantitativeFilterType:m.literal("ONLY_NULL")}).strict(),zt.extend({quantitativeFilterType:m.literal("ONLY_NON_NULL")}).strict()]),Wt=Oo.extend({filterType:m.literal("QUANTITATIVE_DATE")}),rd=m.discriminatedUnion("quantitativeFilterType",[Wt.extend({quantitativeFilterType:m.literal("RANGE"),minDate:m.string(),maxDate:m.string(),includeNulls:m.boolean().optional()}).strict(),Wt.extend({quantitativeFilterType:m.literal("MIN"),minDate:m.string(),includeNulls:m.boolean().optional()}).strict(),Wt.extend({quantitativeFilterType:m.literal("MAX"),maxDate:m.string(),includeNulls:m.boolean().optional()}).strict(),Wt.extend({quantitativeFilterType:m.literal("ONLY_NULL")}).strict(),Wt.extend({quantitativeFilterType:m.literal("ONLY_NON_NULL")}).strict()]),od=Oo.extend({filterType:m.literal("TOP"),howMany:m.number().int(),fieldToMeasure:Zs,direction:m.enum(["TOP","BOTTOM"]).optional().default("TOP")}),id=m.union([Yu.strict(),od.strict(),...ed.options,...td.options,...rd.options,...Xu.options]),Ht=m.strictObject({fields:m.array(Zu),filters:m.array(id).optional()}),sd=$s.and(m.object({disaggregate:m.boolean()}).partial().passthrough()),nd=m.object({datasource:Gs,query:Ht,options:sd.optional()}).passthrough(),ad=m.object({data:m.array(m.unknown())}).partial().passthrough(),ld=Bu([{method:"post",path:"/query-datasource",alias:"queryDatasource",description:"Queries a specific data source and returns the resulting data.",requestFormat:"json",parameters:[{name:"body",type:"Body",schema:nd}],response:ad,errors:[{status:"default",schema:Ku},{status:404,schema:m.any()}]},{method:"post",path:"/read-metadata",alias:"readMetadata",description:"Requests metadata for a specific data source. The metadata provides information about the data fields, such as field names, data types, and descriptions.",requestFormat:"json",parameters:[{name:"body",type:"Body",schema:Hu}],response:Qu,errors:[{status:404,schema:m.any()}]},{method:"get",path:"/simple-request",alias:"simpleRequest",description:"Sends a request that can be used for testing or doing a health check.",requestFormat:"json",response:m.string()}]),Ys=[...ld];var Gt=class extends H{constructor(e,r){super(new cd(e,Ys),r)}queryDatasource=async e=>{try{return en(await this._apiClient.queryDatasource(e,{...this.authHeader}))}catch(r){if(Xs(this._apiClient.api,"queryDatasource",r))return r.response.status===404?vr("feature-disabled"):vr(r.response.data);if(r instanceof ud)return vr(r);throw r}};readMetadata=async e=>{try{return en(await this._apiClient.readMetadata(e,{...this.authHeader}))}catch(r){if(Xs(this._apiClient.api,"readMetadata",r)&&r.response.status===404)return vr("feature-disabled");throw r}}};import{Zodios as hd}from"@zodios/core";import{makeApi as dd,makeEndpoint as tn}from"@zodios/core";import{z as Ge}from"zod";import{z as ee}from"zod";var No=ee.object({id:ee.string(),name:ee.string(),description:ee.string().optional(),webpageUrl:ee.string().optional(),contentUrl:ee.string(),project:sr.optional(),showTabs:ee.coerce.boolean(),defaultViewId:ee.string().optional(),tags:ee.object({tag:ee.array(ee.object({label:ee.string()})).optional()}),views:ee.optional(ee.object({view:ee.array(ht)}))});var pd=tn({method:"get",path:"/sites/:siteId/workbooks/:workbookId",alias:"getWorkbook",description:"Returns information about the specified workbook, including information about views and tags.",response:Ge.object({workbook:No})}),md=tn({method:"get",path:"/sites/:siteId/workbooks",alias:"queryWorkbooksForSite",description:"Returns the workbooks on a site.",parameters:[...rt,{name:"siteId",type:"Path",schema:Ge.string()},{name:"filter",type:"Query",schema:Ge.string().optional(),description:"An expression that lets you specify a subset of workbooks to return. You can filter on predefined fields such as name, tags, and createdAt. You can include multiple filter expressions."}],response:Ge.object({pagination:tt,workbooks:Ge.object({workbook:Ge.optional(Ge.array(No))})})}),fd=dd([md,pd]),rn=[...fd];var $t=class extends H{constructor(e,r){super(new hd(e,rn),r)}getWorkbook=async({workbookId:e,siteId:r})=>(await this._apiClient.getWorkbook({params:{siteId:r,workbookId:e},...this.authHeader})).workbook;queryWorkbooksForSite=async({siteId:e,filter:r,pageSize:o,pageNumber:i})=>{let n=await this._apiClient.queryWorkbooksForSite({params:{siteId:e},queries:{filter:r,pageSize:o,pageNumber:i},...this.authHeader});return{pagination:n.pagination,workbooks:n.workbooks.workbook??[]}}};var bt=class t{_creds;_host;_baseUrl;_baseUrlWithoutVersion;_authenticationMethods;_authenticatedAuthenticationMethods;_contentExplorationMethods;_datasourcesMethods;_metadataMethods;_pulseMethods;_serverMethods;_vizqlDataServiceMethods;_viewsMethods;_workbooksMethods;static _version="3.24";_requestInterceptor;_responseInterceptor;constructor(e,r){this._host=e,this._baseUrl=`${this._host}/api/${t._version}`,this._baseUrlWithoutVersion=`${this._host}/api/-`,this._requestInterceptor=r?.requestInterceptor,this._responseInterceptor=r?.responseInterceptor}get creds(){if(!this._creds)throw new Error("No credentials found. Authenticate by calling signIn() first.");return this._creds}get siteId(){return this.creds.site.id}get authenticationMethods(){return this._authenticationMethods||(this._authenticationMethods=new _t(this._baseUrl),this._addInterceptors(this._baseUrl,this._authenticationMethods.interceptors)),this._authenticationMethods}get authenticatedAuthenticationMethods(){return this._authenticatedAuthenticationMethods||(this._authenticatedAuthenticationMethods=new ir(this._baseUrl,this.creds),this._addInterceptors(this._baseUrl,this._authenticatedAuthenticationMethods.interceptors)),this._authenticatedAuthenticationMethods}get contentExplorationMethods(){return this._contentExplorationMethods||(this._contentExplorationMethods=new St(this._baseUrlWithoutVersion,this.creds),this._addInterceptors(this._baseUrlWithoutVersion,this._contentExplorationMethods.interceptors)),this._contentExplorationMethods}get datasourcesMethods(){return this._datasourcesMethods||(this._datasourcesMethods=new vt(this._baseUrl,this.creds),this._addInterceptors(this._baseUrl,this._datasourcesMethods.interceptors)),this._datasourcesMethods}get metadataMethods(){if(!this._metadataMethods){let e=`${this._host}/api/metadata`;this._metadataMethods=new Ct(e,this.creds),this._addInterceptors(e,this._metadataMethods.interceptors)}return this._metadataMethods}get pulseMethods(){return this._pulseMethods||(this._pulseMethods=new Ut(this._baseUrlWithoutVersion,this.creds),this._addInterceptors(this._baseUrlWithoutVersion,this._pulseMethods.interceptors)),this._pulseMethods}get serverMethods(){return this._serverMethods||(this._serverMethods=new jt(this._baseUrl,this.creds),this._addInterceptors(this._baseUrl,this._serverMethods.interceptors)),this._serverMethods}get vizqlDataServiceMethods(){if(!this._vizqlDataServiceMethods){let e=`${this._host}/api/v1/vizql-data-service`;this._vizqlDataServiceMethods=new Gt(e,this.creds),this._addInterceptors(e,this._vizqlDataServiceMethods.interceptors)}return this._vizqlDataServiceMethods}get viewsMethods(){return this._viewsMethods||(this._viewsMethods=new Bt(this._baseUrl,this.creds),this._addInterceptors(this._baseUrl,this._viewsMethods.interceptors)),this._viewsMethods}get workbooksMethods(){return this._workbooksMethods||(this._workbooksMethods=new $t(this._baseUrl,this.creds),this._addInterceptors(this._baseUrl,this._workbooksMethods.interceptors)),this._workbooksMethods}signIn=async e=>{this._creds=await this.authenticationMethods.signIn(e)};signOut=async()=>{await this.authenticatedAuthenticationMethods.signOut(),this._creds=void 0};setCredentials=(e,r)=>{let o=e.split("|");if(o.length<3)throw new Error("Could not determine site ID. Access token must have 3 parts.");let i=o[2];this._creds={site:{id:i},user:{id:r},token:e}};_addInterceptors=(e,r)=>{r.request.use(o=>(this._requestInterceptor?.[0]({baseUrl:e,...rr(o)}),o),o=>(this._requestInterceptor?.[1]?.(o,e),Promise.reject(o))),r.response.use(o=>(this._responseInterceptor?.[0]({baseUrl:e,...or(o)}),o),o=>(this._responseInterceptor?.[1]?.(o,e),Promise.reject(o)))}};var gd=async(t,e,r,o,i)=>{let n=t.server||i?.server;ce(n,"Tableau server could not be determined");let s=new bt(n,{requestInterceptor:[bd(r,e),yd(r,e)],responseInterceptor:[wd(r,e),Td(r,e)]});if(t.auth==="pat")await s.signIn({type:"pat",patName:t.patName,patValue:t.patValue,siteName:t.siteName});else if(t.auth==="direct-trust")await s.signIn({type:"direct-trust",siteName:t.siteName,username:Ed(t,i),clientId:t.connectedAppClientId,secretId:t.connectedAppSecretId,secretValue:t.connectedAppSecretValue,scopes:o,additionalPayload:_d(t,i)});else{if(!i?.accessToken||!i?.userId)throw new Error("Auth info is required when not signing in first.");s.setCredentials(i.accessToken,i.userId)}return s},I=async({config:t,requestId:e,server:r,callback:o,jwtScopes:i,authInfo:n})=>{let s=await gd(t,e,r,new Set(i),n);try{return await o(s)}finally{t.auth!=="oauth"&&await s.signOut()}},bd=(t,e)=>r=>(r.headers["User-Agent"]=Ad(t),on(t,r,e),r),yd=(t,e)=>(r,o)=>{if(!xe(r)||!r.request){ue.error(t,`Request ${e} failed with error: ${W(r)}`,{logger:"rest-api",requestId:e});return}let{request:i}=r;on(t,{baseUrl:o,...rr(i)},e)},wd=(t,e)=>r=>(sn(t,r,e),r),Td=(t,e)=>(r,o)=>{if(!xe(r)||!r.response){ue.error(t,`Response from request ${e} failed with error: ${W(r)}`,{logger:"rest-api",requestId:e});return}let{response:i}=r;sn(t,{baseUrl:o,...or(i)},e)};function on(t,e,r){let i=E().disableLogMasking?e:hi(e),n=new URL(i.url??"",i.baseUrl);e.params&&Object.keys(e.params).length>0&&(n.search=new URLSearchParams(e.params).toString());let s={type:"request",requestId:r,method:i.method,url:n.toString(),...Oe("debug")&&{headers:i.headers,data:i.data,params:i.params}};ue.info(t,s,{logger:"rest-api",requestId:r})}function sn(t,e,r){let i=E().disableLogMasking?e:gi(e),n=new URL(i.url??"",i.baseUrl);e.request?.params&&Object.keys(e.request.params).length>0&&(n.search=new URLSearchParams(e.request.params).toString());let s={type:"response",requestId:r,url:n.toString(),status:i.status,...Oe("debug")&&{headers:i.headers,data:i.data}};ue.info(t,s,{logger:"rest-api",requestId:r})}function Ad(t){let e=[Cr];if(t.clientInfo){let{name:r,version:o}=t.clientInfo;r&&e.push(o?`(${r} ${o})`:`(${r})`)}return e.join(" ")}function Ed(t,e){return t.jwtSubClaim.replaceAll("{OAUTH_USERNAME}",e?.username??"")}function _d(t,e){let r=t.jwtAdditionalPayload.replaceAll("{OAUTH_USERNAME}",e?.username??"");return JSON.parse(r||"{}")}import{z as q}from"zod";import{z as Sd}from"zod";var B=t=>Sd.string({message:`${t} is required`}).nonempty({message:`${t} must be non-empty`});var nn=q.object({client_id:B("client_id"),redirect_uri:B("redirect_uri"),response_type:B("response_type"),code_challenge:B("code_challenge"),code_challenge_method:B("code_challenge_method"),state:q.string().optional()}).transform(t=>({clientId:t.client_id,redirectUri:t.redirect_uri,responseType:t.response_type,codeChallenge:t.code_challenge,codeChallengeMethod:t.code_challenge_method,state:t.state})),an=q.discriminatedUnion("grant_type",[q.object({grant_type:q.literal("authorization_code"),code:B("code"),redirect_uri:B("redirect_uri"),code_verifier:B("code_verifier")}),q.object({grant_type:q.literal("refresh_token"),refresh_token:B("refresh_token")}),q.object({grant_type:q.literal("client_credentials")})],{errorMap:(t,e)=>({message:t.code==="invalid_union_discriminator"?`grant_type must be ${t.options.map(r=>`'${String(r)}'`).join(" | ")}, got '${e.data.grant_type}'.`:e.defaultError})}).and(q.object({client_id:q.string().optional(),client_secret:q.string().optional()})).transform(t=>{let{client_id:e,client_secret:r}=t,o={clientId:e,clientSecret:r};return t.grant_type==="authorization_code"?{grantType:t.grant_type,code:t.code,redirectUri:t.redirect_uri,codeVerifier:t.code_verifier,...o}:t.grant_type==="refresh_token"?{grantType:t.grant_type,refreshToken:t.refresh_token,...o}:{grantType:t.grant_type,...o}}),ln=q.object({code:q.string().optional(),state:q.string().optional(),error:q.string().optional()}),Fo=q.object({iss:B("iss"),aud:B("aud"),exp:q.number().int().nonnegative(),sub:B("sub"),clientId:B("clientId"),tableauServer:B("tableauServer"),tableauUserId:q.string().optional()}),cn=Fo.extend({tableauAccessToken:B("tableauAccessToken"),tableauRefreshToken:B("tableauRefreshToken"),tableauExpiresAt:q.number().int().nonnegative(),tableauUserId:B("tableauUserId")}),Rr=q.object({username:q.string(),userId:q.string(),server:q.string(),accessToken:q.string(),refreshToken:q.string()}).partial();var N=t=>{if(!t)return;let e=Rr.safeParse(t.extra);if(e.success)return e.data};import{ZodiosError as un}from"@zodios/core";import{fromError as vd,isZodErrorLike as Cd}from"zod-validation-error";var ke=class{_provider;constructor(e){this._provider=e}get(){return this._provider()}};var O=class{server;name;description;paramsSchema;annotations;argsValidator;callback;constructor({server:e,name:r,description:o,paramsSchema:i,annotations:n,argsValidator:s,callback:a}){this.server=e,this.name=r,this.description=o instanceof ke?o.get():o,this.paramsSchema=i instanceof ke?i.get():i,this.annotations=n instanceof ke?n.get():n,this.argsValidator=s instanceof ke?s.get():s,this.callback=a instanceof ke?a.get():a}logInvocation({requestId:e,args:r,username:o}){ue.debug(this.server,pi({requestId:e,toolName:this.name,args:r,username:o}))}async logAndExecute({requestId:e,args:r,authInfo:o,callback:i,getSuccessResult:n,getErrorText:s,constrainSuccessResult:a}){let c=o?.extra?Rr.safeParse(o.extra).data?.username:void 0;if(this.logInvocation({requestId:e,args:r,username:c}),r)try{this.argsValidator?.(r)}catch(l){return xr(e,l)}try{let l=await i();if(l.isOk()){let u=await a(l.value);return u.type!=="success"?{isError:u.type==="error",content:[{type:"text",text:u.message}]}:n?n(u.result):{isError:!1,content:[{type:"text",text:JSON.stringify(u.result)}]}}return l.error instanceof un?xr(e,l.error):s?{isError:!0,content:[{type:"text",text:s(l.error)}]}:xr(e,l.error)}catch(l){return xr(e,l)}}};function xr(t,e){if(e instanceof un&&Cd(e.cause)){let r=vd(e.cause);return{isError:!1,content:[{type:"text",text:JSON.stringify({data:e.data,warning:r.toString()})}]}}return{isError:!0,content:[{type:"text",text:`requestId: ${t}, error: ${W(e)}`}]}}function dn(t){let e=new Set;return t.flatMap(r=>e.has(r.method)?[]:(e.add(r.method),r.method+(r.sortDirection?`:${r.sortDirection}`:""))).join(",")}function pn(t){let e=[];if(t.contentTypes)if(t.contentTypes.length===1)e.push(`type:eq:${t.contentTypes[0]}`);else{let r=new Set;for(let o of t.contentTypes)r.add(o);e.push(`type:in:[${Array.from(r).join(",")}]`)}if(t.ownerIds)if(t.ownerIds.length===1)e.push(`ownerId:eq:${t.ownerIds[0]}`);else{let r=new Set;for(let o of t.ownerIds)r.add(o);e.push(`ownerId:in:[${Array.from(r).join(",")}]`)}if(t.modifiedTime)if(Array.isArray(t.modifiedTime))if(t.modifiedTime.length===1)e.push(`modifiedTime:eq:${t.modifiedTime[0]}`);else{let r=new Set;for(let o of t.modifiedTime)r.add(o);e.push(`modifiedTime:in:[${Array.from(r).join(",")}]`)}else if(t.modifiedTime.startDate&&t.modifiedTime.endDate){let r=t.modifiedTime.startDate,o=t.modifiedTime.endDate;r>o&&(r=t.modifiedTime.endDate,o=t.modifiedTime.startDate),e.push(`modifiedTime:gte:${r}`),e.push(`modifiedTime:lte:${o}`)}else t.modifiedTime.startDate?e.push(`modifiedTime:gte:${t.modifiedTime.startDate}`):t.modifiedTime.endDate&&e.push(`modifiedTime:lte:${t.modifiedTime.endDate}`);return e.join(",")}function mn(t){let e=[];if(t.items)for(let o of t.items)e.push(Rd(o.content));let r=new Set(e.filter(o=>o.type==="unifieddatasource").map(o=>o.datasourceLuid).filter(o=>typeof o=="string"));e=e.filter(o=>o.type==="datasource"?typeof o.luid=="string"&&!r.has(o.luid):!0);for(let o of e)o.type==="unifieddatasource"&&(o.type="datasource",o.luid=o.datasourceLuid,delete o.datasourceLuid);return e}function Rd(t){let e={};return t.modifiedTime&&(e.modifiedTime=t.modifiedTime),t.sheetType&&(e.sheetType=t.sheetType),t.caption&&(e.caption=t.caption),t.workbookDescription&&(e.workbookDescription=t.workbookDescription),t.type&&(e.type=t.type),t.ownerId&&(e.ownerId=t.ownerId),t.title&&(e.title=t.title),t.ownerName&&(e.ownerName=t.ownerName),t.containerName&&(t.type==="view"?e.parentWorkbookName=t.containerName:e.containerName=t.containerName),t.luid&&(e.luid=t.luid),t.locationName&&(e.locationName=t.locationName),t.comments?.length&&(e.comments=t.comments),t.hitsTotal!=null&&(e.totalViewCount=t.hitsTotal),t.favoritesTotal!=null&&(e.favoritesTotal=t.favoritesTotal),t.tags?.length&&(e.tags=t.tags),t.projectId&&(e.projectId=t.projectId),t.projectName&&(e.projectName=t.projectName),t.hitsSmallSpanTotal!=null&&(e.viewCountLastMonth=t.hitsSmallSpanTotal),t.downstreamWorkbookCount!=null&&(e.downstreamWorkbookCount=t.downstreamWorkbookCount),t.isConnectable!=null&&(e.isConnectable=t.isConnectable),t.datasourceIsPublished!=null&&(e.datasourceIsPublished=t.datasourceIsPublished),t.connectionType&&(e.connectionType=t.connectionType),t.isCertified!=null&&(e.isCertified=t.isCertified),t.hasExtracts!=null&&(e.hasExtracts=t.hasExtracts),t.extractRefreshedAt&&(e.extractRefreshedAt=t.extractRefreshedAt),t.extractUpdatedAt&&(e.extractUpdatedAt=t.extractUpdatedAt),t.connectedWorkbooksCount!=null&&(e.connectedWorkbooksCount=t.connectedWorkbooksCount),t.extractCreationPending!=null&&(e.extractCreationPending=t.extractCreationPending),t.hasSevereDataQualityWarning!=null&&(e.hasSevereDataQualityWarning=t.hasSevereDataQualityWarning),t.datasourceLuid&&(e.datasourceLuid=t.datasourceLuid),t.hasActiveDataQualityWarning!=null&&(e.hasActiveDataQualityWarning=t.hasActiveDataQualityWarning),e}function fn({items:t,boundedContext:e}){if(t.length===0)return{type:"empty",message:"No search results were found. Either none exist or you do not have permission to view them."};let{projectIds:r,datasourceIds:o,workbookIds:i}=e;return r&&(t=t.filter(n=>!!(typeof n.projectId=="number"&&r.has(n.projectId.toString())))),o&&(t=t.filter(n=>!(n.type==="datasource"&&typeof n.luid=="string"&&!o.has(n.luid)))),i&&(t=t.filter(n=>!(n.type==="workbook"&&typeof n.luid=="string"&&!i.has(n.luid)))),t.length===0?{type:"empty",message:["The set of allowed content that can be queried is limited by the server configuration.","While search results were found, they were all filtered out by the server configuration."].join(" ")}:{type:"success",result:t}}var Id={terms:hn.string().trim().nonempty().optional(),limit:hn.number().int().min(1).max(2e3).default(100).optional(),orderBy:Ei.optional(),filter:vi.optional()},gn=t=>{let e=new O({server:t,name:"search-content",description:"\nThis tool searches across all supported content types for objects relevant to the search expression specified by search terms and filters.\n\n**Parameters:**\n\n- `terms` (optional): A string containing one or more search terms that the search uses as the basis for determining which items are relevant to return. If the terms parameter is not provided, it searches for everything bound by the specified filters.\n\n- `filter` (optional): Allows you to limit search results based on:\n - `contentTypes`: Filter by content types. Supported types are: 'lens', 'datasource', 'virtualconnection', 'collection', 'project', 'flow', 'datarole', 'table', 'database', 'view', 'workbook'\n - `ownerIds`: Filter by specific owner IDs (array of integers)\n - `modifiedTime`: Filter by last modified times using ISO 8601 date-time strings. Can be either a range (with startDate/endDate) or an array of specific date-times to include\n\n- `limit` (optional): The number of items to return in the search response (default: 100, max: 2000)\n\n- `orderBy` (optional): Determines the sorting method for returned items. Available sorting methods:\n - `hitsTotal`: Number of times a content item has been viewed since it was created\n - `hitsSmallSpanTotal`: Number of times a content item was viewed in the last month\n - `hitsMediumSpanTotal`: Number of times a content item was viewed in the last 3 months\n - `hitsLargeSpanTotal`: Number of times a content item was viewed in the last year\n - `downstreamWorkbookCount`: Number of workbooks in a given project. This value is only available when the content type filter includes 'database' or 'table'\n \n For each sort method, you can specify a sort direction: 'asc' for ascending or 'desc' for descending (default: 'asc'). The orderBy parameter is an array of objects containing the sorting method and direction. The first element determines primary sorting, with subsequent elements used as tiebreakers.\n\n**Important Notes:**\n- If `orderBy` is omitted, the search will sort items by their \"relevance score\" in descending order, which is Tableau's internal algorithm for providing the most relevant results",paramsSchema:Id,annotations:{title:"Search Content",readOnlyHint:!0,openWorldHint:!1},callback:async({terms:r,limit:o,orderBy:i,filter:n},{requestId:s,authInfo:a})=>{let c=E(),l=i?dn(i):void 0,u=n?pn(n):void 0;return await e.logAndExecute({requestId:s,authInfo:a,args:{},callback:async()=>new xd(await I({config:c,requestId:s,server:t,jwtScopes:["tableau:content:read"],authInfo:N(a),callback:async p=>{let g=await p.contentExplorationMethods.searchContent({terms:r,page:0,limit:c.maxResultLimit?Math.min(c.maxResultLimit,o??100):o??100,orderBy:l,filter:u});return mn(g)}})),constrainSuccessResult:p=>fn({items:p,boundedContext:c.boundedContext})})}});return e};import{Err as wn,Ok as qo}from"ts-results-es";import{z as Dd}from"zod";function Ir(){return["The VizQL Data Service is disabled on this Tableau Server.","To enable it, use TSM using the instructions at https://help.tableau.com/current/server-linux/en-us/cli_configuration-set_tsm.htm#featuresvizqldataservicedeploywithtsm."].join(" ")}var Qt=class t{_allowedProjectIds;_allowedDatasourceIds;_allowedWorkbookIds;_cachedDatasourceIds;_cachedWorkbookIds;_cachedViewIds;static create(){return new t}static createForTesting(e){return new t(e)}constructor(e){this._allowedProjectIds=e?.projectIds,this._allowedDatasourceIds=e?.datasourceIds,this._allowedWorkbookIds=e?.workbookIds,this._cachedDatasourceIds=new Map,this._cachedWorkbookIds=new Map,this._cachedViewIds=new Map}get allowedProjectIds(){return this._allowedProjectIds===void 0&&(this._allowedProjectIds=E().boundedContext.projectIds),this._allowedProjectIds}get allowedDatasourceIds(){return this._allowedDatasourceIds===void 0&&(this._allowedDatasourceIds=E().boundedContext.datasourceIds),this._allowedDatasourceIds}get allowedWorkbookIds(){return this._allowedWorkbookIds===void 0&&(this._allowedWorkbookIds=E().boundedContext.workbookIds),this._allowedWorkbookIds}async isDatasourceAllowed({datasourceLuid:e,restApiArgs:r}){let o=await this._isDatasourceAllowed({datasourceLuid:e,restApiArgs:r});return this.allowedProjectIds||this._cachedDatasourceIds.set(e,o),o}async isWorkbookAllowed({workbookId:e,restApiArgs:r}){let o=await this._isWorkbookAllowed({workbookId:e,restApiArgs:r});return this.allowedProjectIds||this._cachedWorkbookIds.set(e,o),o}async isViewAllowed({viewId:e,restApiArgs:r}){let o=await this._isViewAllowed({viewId:e,restApiArgs:r});return this.allowedProjectIds||this._cachedViewIds.set(e,o),o}async _isDatasourceAllowed({datasourceLuid:e,restApiArgs:{config:r,requestId:o,server:i}}){let n=this._cachedDatasourceIds.get(e);if(n)return n;if(this.allowedDatasourceIds&&!this.allowedDatasourceIds.has(e))return{allowed:!1,message:["The set of allowed data sources that can be queried is limited by the server configuration.",`Querying the datasource with LUID ${e} is not allowed.`].join(" ")};if(this.allowedProjectIds)try{let s=await I({config:r,requestId:o,server:i,jwtScopes:["tableau:content:read"],callback:async a=>(await a.datasourcesMethods.queryDatasource({siteId:a.siteId,datasourceId:e})).project.id});if(!this.allowedProjectIds.has(s))return{allowed:!1,message:["The set of allowed data sources that can be queried is limited by the server configuration.",`The datasource with LUID ${e} cannot be queried because it does not belong to an allowed project.`].join(" ")}}catch(s){return{allowed:!1,message:["The set of allowed data sources that can be queried is limited by the server configuration.",`An error occurred while checking if the datasource with LUID ${e} is in an allowed project:`,W(s)].join(" ")}}return{allowed:!0}}async _isWorkbookAllowed({workbookId:e,restApiArgs:{config:r,requestId:o,server:i}}){let n=this._cachedWorkbookIds.get(e);if(n)return n;if(this.allowedWorkbookIds&&!this.allowedWorkbookIds.has(e))return{allowed:!1,message:["The set of allowed workbooks that can be queried is limited by the server configuration.",`Querying the workbook with LUID ${e} is not allowed.`].join(" ")};let s;if(this.allowedProjectIds)try{if(s=await I({config:r,requestId:o,server:i,jwtScopes:["tableau:content:read"],callback:async a=>await a.workbooksMethods.getWorkbook({siteId:a.siteId,workbookId:e})}),!this.allowedProjectIds.has(s.project?.id??""))return{allowed:!1,message:["The set of allowed workbooks that can be queried is limited by the server configuration.",`The workbook with LUID ${e} cannot be queried because it does not belong to an allowed project.`].join(" ")}}catch(a){return{allowed:!1,message:["The set of allowed workbooks that can be queried is limited by the server configuration.",`An error occurred while checking if the workbook with LUID ${e} is in an allowed project:`,W(a)].join(" ")}}return{allowed:!0,content:s}}async _isViewAllowed({viewId:e,restApiArgs:{config:r,requestId:o,server:i}}){let n=this._cachedViewIds.get(e);if(n)return n;let s="",a="";if(this.allowedWorkbookIds)try{let c=await I({config:r,requestId:o,server:i,jwtScopes:["tableau:content:read"],callback:async l=>await l.viewsMethods.getView({siteId:l.siteId,viewId:e})});if(s=c.workbook?.id??"",a=c.project?.id??"",!this.allowedWorkbookIds.has(s))return{allowed:!1,message:["The set of allowed workbooks that can be queried is limited by the server configuration.",`The view with LUID ${e} cannot be queried because it does not belong to an allowed workbook.`].join(" ")}}catch(c){return{allowed:!1,message:["The set of allowed workbooks that can be queried is limited by the server configuration.",`An error occurred while checking if the workbook containing the view with LUID ${e} is in an allowed workbook:`,W(c)].join(" ")}}if(this.allowedProjectIds)try{if(a=a||await I({config:r,requestId:o,server:i,jwtScopes:["tableau:content:read"],callback:async c=>(await c.viewsMethods.getView({siteId:c.siteId,viewId:e})).project?.id??""}),!this.allowedProjectIds.has(a))return{allowed:!1,message:["The set of allowed views that can be queried is limited by the server configuration.",`The view with LUID ${e} cannot be queried because it does not belong to an allowed project.`].join(" ")}}catch(c){return{allowed:!1,message:["The set of allowed views that can be queried is limited by the server configuration.",`An error occurred while checking if the workbook containing the view with LUID ${e} is in an allowed project:`,W(c)].join(" ")}}return{allowed:!0}}},be=Qt.create(),jA={createResourceAccessChecker:Qt.createForTesting,resetResourceAccessCheckerSingleton:()=>{be=Qt.create()}};function kr({datasourceLuid:t}){if(!t)throw new Error("datasourceLuid must be a non-empty string.")}import{z as C}from"zod";var kd=C.object({name:C.string(),columnClass:C.string(),dataType:C.string().nullable(),defaultAggregation:C.string().nullable(),description:C.string().nullable(),descriptionInherited:C.array(C.object({attribute:C.string(),value:C.string().nullable()}).nullable()).nullable(),dataCategory:C.string().nullable(),role:C.string().nullable(),defaultFormat:C.string().nullable(),semanticRole:C.string().nullable(),aggregation:C.string().nullable(),aggregationParam:C.string().nullable(),formula:C.string().nullable(),isAutoGenerated:C.boolean().nullable(),hasUserReference:C.boolean().nullable(),binSize:C.number().nullable()}).partial(),Pd=C.object({name:C.string(),parameterType:C.string(),dataType:C.string().nullable(),value:C.union([C.number(),C.string(),C.boolean(),C.null()]),members:C.array(C.union([C.number(),C.string(),C.boolean(),C.null()])),min:C.number().nullable(),max:C.number().nullable(),step:C.number().nullable(),minDate:C.string().nullable(),maxDate:C.string().nullable(),periodValue:C.number().nullable(),periodType:C.string().nullable()}).partial(),WA=C.object({fields:C.array(kd),parameters:C.array(Pd)});function Uo(t){let e={fields:[],parameters:[]};if(!t.data)return e;for(let r of t.data){let o={name:r.fieldCaption,dataType:r.dataType,columnClass:r.columnClass};r.defaultAggregation&&(o.defaultAggregation=r.defaultAggregation),r.formula&&(o.formula=r.formula),e.fields.push(o)}if(t.extraData?.parameters)for(let r of t.extraData.parameters){let o={name:r.parameterCaption,parameterType:r.parameterType,dataType:r.dataType,value:r.value};r.parameterType==="LIST"&&r.members?o.members=r.members:r.parameterType==="QUANTITATIVE_DATE"?(o.minDate=r.minDate,o.maxDate=r.maxDate,o.periodValue=r.periodValue,o.periodType=r.periodType):r.parameterType==="QUANTITATIVE_RANGE"&&(o.min=r.min,o.max=r.max,o.step=r.step),e.parameters.push(o)}return e}function yn(t,e){let r={fields:[],parameters:[]};if(!t.data){if(e.data.publishedDatasources[0]?.fields.length)for(let o of e.data.publishedDatasources[0].fields){let i={name:o.name};o.dataType&&(i.dataType=o.dataType),o.aggregation&&(i.defaultAggregation=o.aggregation),bn(o,i),r.fields.push(i)}return r}for(let o of t.data){let i={name:o.fieldCaption,dataType:o.dataType,columnClass:o.columnClass};o.defaultAggregation&&(i.defaultAggregation=o.defaultAggregation),o.formula&&(i.formula=o.formula),r.fields.push(i)}if(t.extraData?.parameters)for(let o of t.extraData.parameters){let i={name:o.parameterCaption,parameterType:o.parameterType,dataType:o.dataType,value:o.value};o.parameterType==="LIST"&&o.members?i.members=o.members:o.parameterType==="QUANTITATIVE_DATE"?(i.minDate=o.minDate,i.maxDate=o.maxDate,i.periodValue=o.periodValue,i.periodType=o.periodType):o.parameterType==="QUANTITATIVE_RANGE"&&(i.min=o.min,i.max=o.max,i.step=o.step),r.parameters.push(i)}if(!e.data.publishedDatasources[0]?.fields.length)return r;for(let o of r.fields){let i=e.data.publishedDatasources[0].fields.find(n=>n.name===o.name);i&&bn(i,o)}return r}function bn(t,e){t.description&&(e.description=t.description),t.descriptionInherited?.length&&(e.descriptionInherited=t.descriptionInherited),t.dataCategory&&(e.dataCategory=t.dataCategory),t.role&&(e.role=t.role),t.defaultFormat&&(e.defaultFormat=t.defaultFormat),t.formula&&(e.formula=t.formula,t.isAutoGenerated!=null&&(e.isAutoGenerated=t.isAutoGenerated),t.hasUserReference!=null&&(e.hasUserReference=t.hasUserReference)),t.binSize!=null&&(e.binSize=t.binSize)}var Ld=t=>`
18
18
  query datasourceFieldInfo {
19
19
  publishedDatasources(filter: { luid: "${t}" }) {
20
20
  name
@@ -75,11 +75,11 @@ var pa=Object.defineProperty;var ma=(t,e)=>{for(var r in e)pa(t,r,{get:e[r],enum
75
75
  }
76
76
  }
77
77
  }
78
- }`,yd={datasourceLuid:gd.string().nonempty()},cn=t=>{let e=new O({server:t,name:"get-datasource-metadata",description:`
78
+ }`,Od={datasourceLuid:Dd.string().nonempty()},Tn=t=>{let e=new O({server:t,name:"get-datasource-metadata",description:`
79
79
  This tool retrieves field metadata for a specified datasource by taking the basic, high level, metadata results from Tableau's VizQL Data Service and enriches them with additional context provided by Tableau's Metadata API.
80
80
  The fields provided by this tool will contain properties such as name and dataType, but may also expose richer context such as descriptions, dataCategories, roles, etc.
81
81
  This tool should be used for getting the metadata to ground the use of a tool that queries Tableau published data sources.
82
- `,paramsSchema:yd,annotations:{title:"Get Datasource Metadata",readOnlyHint:!0,openWorldHint:!1},argsValidator:Sr,callback:async({datasourceLuid:r},{requestId:o,authInfo:i})=>{let n=E(),s=bd(r);return await e.logAndExecute({requestId:o,authInfo:i,args:{datasourceLuid:r},callback:async()=>{let a=await ge.isDatasourceAllowed({datasourceLuid:r,restApiArgs:{config:n,requestId:o,server:t}});return a.allowed?await I({config:n,requestId:o,server:t,jwtScopes:["tableau:content:read","tableau:viz_data_service:read"],authInfo:M(i),callback:async d=>{let l=await d.vizqlDataServiceMethods.readMetadata({datasource:{datasourceLuid:r}});if(l.isErr())return ln({type:"feature-disabled"});if(n.disableMetadataApiRequests)return Oo(Lo(l.value));let c;try{c=await d.metadataMethods.graphql(s)}catch{return Oo(Lo(l.value))}return Oo(an(l.value,c))}}):new ln({type:"datasource-not-allowed",message:a.message})},constrainSuccessResult:a=>({type:"success",result:a}),getErrorText:a=>{switch(a.type){case"feature-disabled":return _r();case"datasource-not-allowed":return a.message}}})}});return e};import{Ok as Sd}from"ts-results-es";import{z as No}from"zod";import{z as Cr}from"zod";var wd=Cr.object({pageSize:Cr.coerce.number().gt(0),pageNumber:Cr.coerce.number().gt(0),limit:Cr.coerce.number().gt(0)}).partial();async function mt({pageConfig:t,getDataFn:e}){let{pageSize:r,limit:o}=wd.parse(t),{pagination:i,data:n}=await e(t),s=[...n],{totalAvailable:a,pageNumber:d}=i;for(;a>s.length&&(!o||o>s.length);){let{pagination:l,data:c}=await e({pageSize:r,pageNumber:d+1,limit:o});if(c.length===0)throw new Error(`No more data available. Last fetched page number: ${d}, Total available: ${a}, Total fetched: ${s.length}`);({totalAvailable:a,pageNumber:d}=l),s.push(...c)}return o&&o<s.length&&(s.length=o),s}var ft="**Supported Operators**\n - `eq`: equals\n - `gt`: greater than\n - `gte`: greater than or equal\n - `in`: any of [list] (for searching tags)\n - `lt`: less than\n - `lte`: less than or equal\n \n **Filter Expression Notes**\n - Filter expressions can't contain ampersand (&) or comma (,) characters even if those characters are encoded.\n - Operators are delimited with colons (:). For example: `filter=name:eq:Project Views`\n - Field names, operator names, and values are case-sensitive.\n - To filter on multiple fields, combine expressions using a comma: `filter=lastLogin:gte:2016-01-01T00:00:00Z,siteRole:eq:Publisher`\n - Multiple expressions are combined using a logical AND.\n - If you include the same field multiple times, only the last reference is used.\n - For date-time values, use ISO 8601 format (e.g., `2016-05-04T21:24:49Z`).\n - Wildcard searches (starts with, ends with, contains) are supported in recent Tableau versions:\n - Starts with: `?filter=name:eq:mark*`\n - Ends with: `?filter=name:eq:*-ample`\n - Contains: `?filter=name:eq:mark*ex*`";import{z as Mo}from"zod";import Td from"zod";var Ge=Td.enum(["eq","in","gt","gte","lt","lte"]);function Ad(t){return/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}Z$/.test(t)}var Ed=["createdAt","updatedAt"];function ht({filterString:t,allowedOperatorsByField:e,filterFieldSchema:r}){function o(s,a){return e[s].includes(a)}let i=t.split(",").map(s=>s.trim()).filter(Boolean),n={};for(let s of i){let[a,d,...l]=s.split(":");if(!a||!d||l.length===0)throw new Error(`Invalid filter expression format: "${s}"`);let c=l.join(":"),m=r.parse(a),g=Ge.parse(d);if(!o(m,g))throw new Error(`Operator '${g}' is not allowed for field '${m}'. Allowed operators: ${e[m].join(", ")}`);if(Ed.includes(m)&&!Ad(c))throw new Error(`Value for field '${m}' must be a valid ISO 8601 date-time string (e.g., 2016-05-04T21:24:49Z)`);n[m]={field:m,operator:g,value:c}}return Object.values(n).map(s=>`${s.field}:${s.operator}:${s.value}`).join(",")}var un=Mo.enum(["authenticationType","connectedWorkbookType","connectionTo","connectionType","contentUrl","createdAt","databaseName","databaseUserName","description","favoritesTotal","hasAlert","hasEmbeddedPassword","hasExtracts","isCertified","isConnectable","isDefaultPort","isHierarchical","isPublished","name","ownerDomain","ownerEmail","ownerName","projectName","serverName","serverPort","size","tableName","tags","type","updatedAt"]),_d={authenticationType:["eq","in"],connectedWorkbookType:["eq","gt","gte","lt","lte"],connectionTo:["eq","in"],connectionType:["eq","in"],contentUrl:["eq","in"],createdAt:["eq","gt","gte","lt","lte"],databaseName:["eq","in"],databaseUserName:["eq","in"],description:["eq","in"],favoritesTotal:["eq","gt","gte","lt","lte"],hasAlert:["eq"],hasEmbeddedPassword:["eq"],hasExtracts:["eq"],isCertified:["eq"],isConnectable:["eq"],isDefaultPort:["eq"],isHierarchical:["eq"],isPublished:["eq"],name:["eq","in"],ownerDomain:["eq","in"],ownerEmail:["eq"],ownerName:["eq","in"],projectName:["eq","in"],serverName:["eq","in"],serverPort:["eq"],size:["eq","gt","gte","lt","lte"],tableName:["eq","in"],tags:["eq","in"],type:["eq"],updatedAt:["eq","gt","gte","lt","lte"]},FA=Mo.object({field:un,operator:Ge,value:Mo.string()});function dn(t){return ht({filterString:t,allowedOperatorsByField:_d,filterFieldSchema:un})}var Cd={filter:No.string().optional(),pageSize:No.number().gt(0).optional(),limit:No.number().gt(0).optional()},pn=t=>{let e=new O({server:t,name:"list-datasources",description:`
82
+ `,paramsSchema:Od,annotations:{title:"Get Datasource Metadata",readOnlyHint:!0,openWorldHint:!1},argsValidator:kr,callback:async({datasourceLuid:r},{requestId:o,authInfo:i})=>{let n=E(),s=Ld(r);return await e.logAndExecute({requestId:o,authInfo:i,args:{datasourceLuid:r},callback:async()=>{let a=await be.isDatasourceAllowed({datasourceLuid:r,restApiArgs:{config:n,requestId:o,server:t}});return a.allowed?await I({config:n,requestId:o,server:t,jwtScopes:["tableau:content:read","tableau:viz_data_service:read"],authInfo:N(i),callback:async c=>{let l=await c.vizqlDataServiceMethods.readMetadata({datasource:{datasourceLuid:r}});if(l.isErr())return wn({type:"feature-disabled"});if(n.disableMetadataApiRequests)return qo(Uo(l.value));let u;try{u=await c.metadataMethods.graphql(s)}catch{return qo(Uo(l.value))}return qo(yn(l.value,u))}}):new wn({type:"datasource-not-allowed",message:a.message})},constrainSuccessResult:a=>({type:"success",result:a}),getErrorText:a=>{switch(a.type){case"feature-disabled":return Ir();case"datasource-not-allowed":return a.message}}})}});return e};import{Ok as Bd}from"ts-results-es";import{z as Vo}from"zod";import{Ok as Md}from"ts-results-es";import{z as $e}from"zod";var Nd=$e.object({pageSize:$e.coerce.number().gt(0),pageNumber:$e.coerce.number().gt(0),limit:$e.coerce.number().gt(0)}).partial();async function yt({pageConfig:t,getDataFn:e}){let{pageSize:r,limit:o}=Nd.parse(t),{pagination:i,data:n}=await e(t),s=[...n],{totalAvailable:a,pageNumber:c}=i;for(;a>s.length&&(!o||o>s.length);){let{pagination:l,data:u}=await e({pageSize:r,pageNumber:c+1,limit:o});if(u.length===0)throw new Error(`No more data available. Last fetched page number: ${c}, Total available: ${a}, Total fetched: ${s.length}`);({totalAvailable:a,pageNumber:c}=l),s.push(...u)}return o&&o<s.length&&(s.length=o),s}var Fd=$e.object({limit:$e.coerce.number().gt(0).optional(),pageSize:$e.coerce.number().gt(0).optional()}).optional();async function An({config:t,getDataFn:e}){let r=Fd.parse(t),o=r?.limit,i=r?.pageSize,n=await e(void 0,i);if(n.isErr())return n;let{pagination:s,data:a}=n.value,c=[...a],l=s.total_available,u=s.next_page_token;for(!i&&l&&(i=Math.min(l-c.length,o?o-c.length:Number.MAX_SAFE_INTEGER));u&&(!o||o>c.length);){let p=await e(u,i);if(p.isErr())return p;let{pagination:g,data:b}=p.value;if(b.length===0)throw new Error(`No more data available. Total fetched: ${c.length}`);({next_page_token:u}=g),c.push(...b)}return o&&o<c.length&&(c.length=o),new Md(c)}var wt="**Supported Operators**\n - `eq`: equals\n - `gt`: greater than\n - `gte`: greater than or equal\n - `in`: any of [list] (for searching tags)\n - `lt`: less than\n - `lte`: less than or equal\n \n **Filter Expression Notes**\n - Filter expressions can't contain ampersand (&) or comma (,) characters even if those characters are encoded.\n - Operators are delimited with colons (:). For example: `filter=name:eq:Project Views`\n - Field names, operator names, and values are case-sensitive.\n - To filter on multiple fields, combine expressions using a comma: `filter=lastLogin:gte:2016-01-01T00:00:00Z,siteRole:eq:Publisher`\n - Multiple expressions are combined using a logical AND.\n - If you include the same field multiple times, only the last reference is used.\n - For date-time values, use ISO 8601 format (e.g., `2016-05-04T21:24:49Z`).\n - Wildcard searches (starts with, ends with, contains) are supported in recent Tableau versions:\n - Starts with: `?filter=name:eq:mark*`\n - Ends with: `?filter=name:eq:*-ample`\n - Contains: `?filter=name:eq:mark*ex*`";import{z as jo}from"zod";import Ud from"zod";var Qe=Ud.enum(["eq","in","gt","gte","lt","lte"]);function qd(t){return/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}Z$/.test(t)}var jd=["createdAt","updatedAt"];function Tt({filterString:t,allowedOperatorsByField:e,filterFieldSchema:r}){function o(s,a){return e[s].includes(a)}let i=t.split(",").map(s=>s.trim()).filter(Boolean),n={};for(let s of i){let[a,c,...l]=s.split(":");if(!a||!c||l.length===0)throw new Error(`Invalid filter expression format: "${s}"`);let u=l.join(":"),p=r.parse(a),g=Qe.parse(c);if(!o(p,g))throw new Error(`Operator '${g}' is not allowed for field '${p}'. Allowed operators: ${e[p].join(", ")}`);if(jd.includes(p)&&!qd(u))throw new Error(`Value for field '${p}' must be a valid ISO 8601 date-time string (e.g., 2016-05-04T21:24:49Z)`);n[p]={field:p,operator:g,value:u}}return Object.values(n).map(s=>`${s.field}:${s.operator}:${s.value}`).join(",")}var En=jo.enum(["authenticationType","connectedWorkbookType","connectionTo","connectionType","contentUrl","createdAt","databaseName","databaseUserName","description","favoritesTotal","hasAlert","hasEmbeddedPassword","hasExtracts","isCertified","isConnectable","isDefaultPort","isHierarchical","isPublished","name","ownerDomain","ownerEmail","ownerName","projectName","serverName","serverPort","size","tableName","tags","type","updatedAt"]),Vd={authenticationType:["eq","in"],connectedWorkbookType:["eq","gt","gte","lt","lte"],connectionTo:["eq","in"],connectionType:["eq","in"],contentUrl:["eq","in"],createdAt:["eq","gt","gte","lt","lte"],databaseName:["eq","in"],databaseUserName:["eq","in"],description:["eq","in"],favoritesTotal:["eq","gt","gte","lt","lte"],hasAlert:["eq"],hasEmbeddedPassword:["eq"],hasExtracts:["eq"],isCertified:["eq"],isConnectable:["eq"],isDefaultPort:["eq"],isHierarchical:["eq"],isPublished:["eq"],name:["eq","in"],ownerDomain:["eq","in"],ownerEmail:["eq"],ownerName:["eq","in"],projectName:["eq","in"],serverName:["eq","in"],serverPort:["eq"],size:["eq","gt","gte","lt","lte"],tableName:["eq","in"],tags:["eq","in"],type:["eq"],updatedAt:["eq","gt","gte","lt","lte"]},mE=jo.object({field:En,operator:Qe,value:jo.string()});function _n(t){return Tt({filterString:t,allowedOperatorsByField:Vd,filterFieldSchema:En})}var zd={filter:Vo.string().optional(),pageSize:Vo.number().gt(0).optional(),limit:Vo.number().gt(0).optional()},Sn=t=>{let e=new O({server:t,name:"list-datasources",description:`
83
83
  Retrieves a list of published data sources from a specified Tableau site using the Tableau REST API. Supports optional filtering via field:operator:value expressions (e.g., name:eq:Views) for precise and flexible data source discovery. Use this tool when a user requests to list, search, or filter Tableau data sources on a site.
84
84
 
85
85
  **Supported Filter Fields and Operators**
@@ -116,7 +116,7 @@ var pa=Object.defineProperty;var ma=(t,e)=>{for(var r in e)pa(t,r,{get:e[r],enum
116
116
  | type | eq |
117
117
  | updatedAt | eq, gt, gte, lt, lte |
118
118
 
119
- ${ft}
119
+ ${wt}
120
120
 
121
121
  **Example Usage:**
122
122
  - List all data sources on a site
@@ -128,7 +128,7 @@ var pa=Object.defineProperty;var ma=(t,e)=>{for(var r in e)pa(t,r,{get:e[r],enum
128
128
  filter: "createdAt:gt:2023-01-01T00:00:00Z"
129
129
  - List data sources with the name "Project Views" in the "Finance" project and created after January 1, 2023:
130
130
  filter: "name:eq:Project Views,projectName:eq:Finance,createdAt:gt:2023-01-01T00:00:00Z"
131
- `,paramsSchema:Cd,annotations:{title:"List Datasources",readOnlyHint:!0,openWorldHint:!1},callback:async({filter:r,pageSize:o,limit:i},{requestId:n,authInfo:s})=>{let a=E(),d=r?dn(r):void 0;return await e.logAndExecute({requestId:n,authInfo:s,args:{filter:r,pageSize:o,limit:i},callback:async()=>{let l=await I({config:a,requestId:n,server:t,jwtScopes:["tableau:content:read"],authInfo:M(s),callback:async c=>await mt({pageConfig:{pageSize:o,limit:a.maxResultLimit?Math.min(a.maxResultLimit,i??Number.MAX_SAFE_INTEGER):i},getDataFn:async g=>{let{pagination:w,datasources:f}=await c.datasourcesMethods.listDatasources({siteId:c.siteId,filter:d??"",pageSize:g.pageSize,pageNumber:g.pageNumber});return{pagination:w,data:f}}})});return new Sd(l)},constrainSuccessResult:l=>vd({datasources:l,boundedContext:a.boundedContext})})}});return e};function vd({datasources:t,boundedContext:e}){if(t.length===0)return{type:"empty",message:"No datasources were found. Either none exist or you do not have permission to view them."};let{projectIds:r,datasourceIds:o}=e;return r&&(t=t.filter(i=>r.has(i.project.id))),o&&(t=t.filter(i=>o.has(i.id))),t.length===0?{type:"empty",message:["The set of allowed data sources that can be queried is limited by the server configuration.","While data sources were found, they were all filtered out by the server configuration."].join(" ")}:{type:"success",result:t}}import{Err as mn}from"ts-results-es";import fn from"zod";function pe(t){switch(t){case"tableau-server":return["Pulse is not available on Tableau Server.","Consider disabling the Pulse MCP tools in your client or removing them using the EXCLUDE_TOOLS environment variable.","To enable Pulse on your Tableau Cloud site, please see the instructions at https://help.tableau.com/current/online/en-us/pulse_set_up.htm."].join(" ");case"pulse-disabled":return["Pulse is disabled on this Tableau Cloud site.","To enable Pulse, please see the instructions at https://help.tableau.com/current/online/en-us/pulse_set_up.htm."].join(" ")}}var Rd={bundleRequest:gr,bundleType:fn.optional(fn.enum(br))},hn=t=>{let e=new O({server:t,name:"generate-pulse-metric-value-insight-bundle",description:`
131
+ `,paramsSchema:zd,annotations:{title:"List Datasources",readOnlyHint:!0,openWorldHint:!1},callback:async({filter:r,pageSize:o,limit:i},{requestId:n,authInfo:s})=>{let a=E(),c=r?_n(r):void 0;return await e.logAndExecute({requestId:n,authInfo:s,args:{filter:r,pageSize:o,limit:i},callback:async()=>{let l=await I({config:a,requestId:n,server:t,jwtScopes:["tableau:content:read"],authInfo:N(s),callback:async u=>await yt({pageConfig:{pageSize:o,limit:a.maxResultLimit?Math.min(a.maxResultLimit,i??Number.MAX_SAFE_INTEGER):i},getDataFn:async g=>{let{pagination:b,datasources:f}=await u.datasourcesMethods.listDatasources({siteId:u.siteId,filter:c??"",pageSize:g.pageSize,pageNumber:g.pageNumber});return{pagination:b,data:f}}})});return new Bd(l)},constrainSuccessResult:l=>Wd({datasources:l,boundedContext:a.boundedContext})})}});return e};function Wd({datasources:t,boundedContext:e}){if(t.length===0)return{type:"empty",message:"No datasources were found. Either none exist or you do not have permission to view them."};let{projectIds:r,datasourceIds:o}=e;return r&&(t=t.filter(i=>r.has(i.project.id))),o&&(t=t.filter(i=>o.has(i.id))),t.length===0?{type:"empty",message:["The set of allowed data sources that can be queried is limited by the server configuration.","While data sources were found, they were all filtered out by the server configuration."].join(" ")}:{type:"success",result:t}}import{Err as vn}from"ts-results-es";import Cn from"zod";function de(t){switch(t){case"tableau-server":return["Pulse is not available on Tableau Server.","Consider disabling the Pulse MCP tools in your client or removing them using the EXCLUDE_TOOLS environment variable.","To enable Pulse on your Tableau Cloud site, please see the instructions at https://help.tableau.com/current/online/en-us/pulse_set_up.htm."].join(" ");case"pulse-disabled":return["Pulse is disabled on this Tableau Cloud site.","To enable Pulse, please see the instructions at https://help.tableau.com/current/online/en-us/pulse_set_up.htm."].join(" ")}}var Hd={bundleRequest:Er,bundleType:Cn.optional(Cn.enum(_r))},Rn=t=>{let e=new O({server:t,name:"generate-pulse-metric-value-insight-bundle",description:`
132
132
  Generate an insight bundle for the current aggregated value for Pulse Metric using Tableau REST API. You need the full information of the Pulse Metric and Pulse Metric Definition to use this tool.
133
133
 
134
134
  **Parameters:**
@@ -235,7 +235,7 @@ Generate an insight bundle for the current aggregated value for Pulse Metric usi
235
235
  - Generate the detail insight bundle for the Pulse metric:
236
236
  bundleType: 'detail',
237
237
  bundleRequest: (See default example above)
238
- `,paramsSchema:Rd,annotations:{title:"Generate Pulse Metric Value Insight Bundle",readOnlyHint:!0,openWorldHint:!1},callback:async({bundleRequest:r,bundleType:o},{requestId:i,authInfo:n})=>{let s=E();return await e.logAndExecute({requestId:i,authInfo:n,args:{bundleRequest:r,bundleType:o},callback:async()=>{let{datasourceIds:a}=s.boundedContext;if(a){let l=r.bundle_request.input.metric.definition.datasource.id;if(!a.has(l))return new mn({type:"datasource-not-allowed",message:["The set of allowed metric insights that can be queried is limited by the server configuration.","Generating the Pulse Metric Value Insight Bundle is not allowed because the definition is derived",`from the data source with LUID ${l}, which is not in the allowed set of data sources.`].join(" ")})}let d=await I({config:s,requestId:i,server:t,jwtScopes:["tableau:insights:read"],authInfo:M(n),callback:async l=>await l.pulseMethods.generatePulseMetricValueInsightBundle(r,o??"ban")});return d.isErr()?new mn({type:"feature-disabled",reason:d.error}):d},constrainSuccessResult:a=>({type:"success",result:a}),getErrorText:a=>{switch(a.type){case"feature-disabled":return pe(a.reason);case"datasource-not-allowed":return a.message}}})}});return e};import{z as gn}from"zod";function vr({boundedContext:t,definitions:e}){if(e.length===0)return{type:"empty",message:"No Pulse Metric Definitions were found. Either none exist or you do not have permission to view them."};let{datasourceIds:r}=t;return r&&(e=e.filter(o=>r.has(o.specification.datasource.id))),e.length===0?{type:"empty",message:["The set of allowed Pulse Metric Definitions that can be queried is limited by the server configuration.","While Pulse Metric Definitions were found, they were all filtered out by the server configuration."].join(" ")}:{type:"success",result:e}}var xd={view:gn.optional(gn.enum(Be))},bn=t=>{let e=new O({server:t,name:"list-all-pulse-metric-definitions",description:`
238
+ `,paramsSchema:Hd,annotations:{title:"Generate Pulse Metric Value Insight Bundle",readOnlyHint:!0,openWorldHint:!1},callback:async({bundleRequest:r,bundleType:o},{requestId:i,authInfo:n})=>{let s=E();return await e.logAndExecute({requestId:i,authInfo:n,args:{bundleRequest:r,bundleType:o},callback:async()=>{let{datasourceIds:a}=s.boundedContext;if(a){let l=r.bundle_request.input.metric.definition.datasource.id;if(!a.has(l))return new vn({type:"datasource-not-allowed",message:["The set of allowed metric insights that can be queried is limited by the server configuration.","Generating the Pulse Metric Value Insight Bundle is not allowed because the definition is derived",`from the data source with LUID ${l}, which is not in the allowed set of data sources.`].join(" ")})}let c=await I({config:s,requestId:i,server:t,jwtScopes:["tableau:insights:read"],authInfo:N(n),callback:async l=>await l.pulseMethods.generatePulseMetricValueInsightBundle(r,o??"ban")});return c.isErr()?new vn({type:"feature-disabled",reason:c.error}):c},constrainSuccessResult:a=>({type:"success",result:a}),getErrorText:a=>{switch(a.type){case"feature-disabled":return de(a.reason);case"datasource-not-allowed":return a.message}}})}});return e};import{Ok as Gd}from"ts-results-es";import{z as Dr}from"zod";function Pr({boundedContext:t,definitions:e}){if(e.length===0)return{type:"empty",message:"No Pulse Metric Definitions were found. Either none exist or you do not have permission to view them."};let{datasourceIds:r}=t;return r&&(e=e.filter(o=>r.has(o.specification.datasource.id))),e.length===0?{type:"empty",message:["The set of allowed Pulse Metric Definitions that can be queried is limited by the server configuration.","While Pulse Metric Definitions were found, they were all filtered out by the server configuration."].join(" ")}:{type:"success",result:e}}var $d={view:Dr.optional(Dr.enum(He)),limit:Dr.coerce.number().gt(0).optional(),pageSize:Dr.coerce.number().gt(0).optional()},xn=t=>{let e=new O({server:t,name:"list-all-pulse-metric-definitions",description:`
239
239
  Retrieves a list of all published Pulse Metric Definitions using the Tableau REST API. Use this tool when a user requests to list all Tableau Pulse Metric Definitions on the current site.
240
240
 
241
241
  **Parameters:**
@@ -243,11 +243,15 @@ Retrieves a list of all published Pulse Metric Definitions using the Tableau RES
243
243
  - \`DEFINITION_VIEW_BASIC\` - Return only the specified metric definition.
244
244
  - \`DEFINITION_VIEW_FULL\` - Return the metric definition and the specified number of metrics.
245
245
  - \`DEFINITION_VIEW_DEFAULT\` - Return the metric definition and the default metric.
246
+ - \`limit\` (optional): Maximum number of metric definitions to return. If not specified, all definitions are returned.
247
+ - \`pageSize\` (optional): Number of results per page. Controls how many definitions are fetched in each API request during pagination.
246
248
 
247
249
  **Example Usage:**
248
250
  - List all Pulse Metric Definitions on the current site
249
251
  - List all Pulse Metric Definitions on the current site with the default view:
250
252
  view: 'DEFINITION_VIEW_DEFAULT'
253
+ - List the first 50 Pulse Metric Definitions:
254
+ limit: 50
251
255
  - List all Pulse Metric Definitions on the current site with the full view:
252
256
  view: 'DEFINITION_VIEW_FULL'
253
257
  In the response you will only get up to 5 metrics, so if you want to see more you need to retrieve all the Pulse Metrics from another tool.
@@ -256,7 +260,7 @@ Retrieves a list of all published Pulse Metric Definitions using the Tableau RES
256
260
  - See all metrics for my Pulse Metric Definitions:
257
261
  view: 'DEFINITION_VIEW_FULL'
258
262
  In the response you will only get up to 5 metrics, so if you want to see more you need to retrieve all the Pulse Metrics from another tool.
259
- `,paramsSchema:xd,annotations:{title:"List All Pulse Metric Definitions",readOnlyHint:!0,openWorldHint:!1},callback:async({view:r},{requestId:o,authInfo:i})=>{let n=E();return await e.logAndExecute({requestId:o,authInfo:i,args:{view:r},callback:async()=>await I({config:n,requestId:o,server:t,jwtScopes:["tableau:insight_definitions_metrics:read"],authInfo:M(i),callback:async s=>await s.pulseMethods.listAllPulseMetricDefinitions(r)}),constrainSuccessResult:s=>vr({definitions:s,boundedContext:n.boundedContext}),getErrorText:pe})}});return e};import{z as Rr}from"zod";var Id={metricDefinitionIds:Rr.array(Rr.string().length(36)).min(1),view:Rr.optional(Rr.enum(Be))},yn=t=>{let e=new O({server:t,name:"list-pulse-metric-definitions-from-definition-ids",description:`
263
+ `,paramsSchema:$d,annotations:{title:"List All Pulse Metric Definitions",readOnlyHint:!0,openWorldHint:!1},callback:async({view:r,limit:o,pageSize:i},{requestId:n,authInfo:s})=>{let a=E();return await e.logAndExecute({requestId:n,authInfo:s,args:{view:r,limit:o,pageSize:i},callback:async()=>await I({config:a,requestId:n,server:t,jwtScopes:["tableau:insight_definitions_metrics:read"],authInfo:N(s),callback:async c=>await An({config:{limit:a.maxResultLimit?Math.min(a.maxResultLimit,o??Number.MAX_SAFE_INTEGER):o,pageSize:i},getDataFn:async(u,p)=>{let g=await c.pulseMethods.listAllPulseMetricDefinitions(r,u,p);return g.isOk()?new Gd({pagination:g.value.pagination,data:g.value.definitions}):g}})}),constrainSuccessResult:c=>Pr({definitions:c,boundedContext:a.boundedContext}),getErrorText:de})}});return e};import{z as Lr}from"zod";var Qd={metricDefinitionIds:Lr.array(Lr.string().length(36)).min(1),view:Lr.optional(Lr.enum(He))},In=t=>{let e=new O({server:t,name:"list-pulse-metric-definitions-from-definition-ids",description:`
260
264
  Retrieves a list of specific Pulse Metric Definitions using the Tableau REST API from a list of metric definition IDs. Use this tool when a user requests information about specific Pulse Metric Definitions on the current site.
261
265
 
262
266
  **Parameters:**
@@ -285,7 +289,7 @@ Retrieves a list of specific Pulse Metric Definitions using the Tableau REST API
285
289
  metricDefinitionIds: ['BBC908D8-29ED-48AB-A78E-ACF8A424C8C3', 'BBC908D8-29ED-48AB-A78E-ACF8A424C8C4'],
286
290
  view: 'DEFINITION_VIEW_FULL'
287
291
  In the response you will only get up to 5 metrics, so if you want to see more you need to retrieve all the Pulse Metrics from another tool.
288
- `,paramsSchema:Id,annotations:{title:"List Pulse Metric Definitions from Metric Definition IDs",readOnlyHint:!0,openWorldHint:!1},callback:async({view:r,metricDefinitionIds:o},{requestId:i,authInfo:n})=>{let s=E();return await e.logAndExecute({requestId:i,authInfo:n,args:{metricDefinitionIds:o,view:r},callback:async()=>await I({config:s,requestId:i,server:t,jwtScopes:["tableau:insight_definitions_metrics:read"],authInfo:M(n),callback:async a=>await a.pulseMethods.listPulseMetricDefinitionsFromMetricDefinitionIds(o,r)}),constrainSuccessResult:a=>vr({definitions:a,boundedContext:s.boundedContext}),getErrorText:pe})}});return e};import{z as kd}from"zod";function xr({metrics:t,boundedContext:e}){if(t.length===0)return{type:"empty",message:"No Pulse Metrics were found. Either none exist or you do not have permission to view them."};let{datasourceIds:r}=e;return r&&(t=t.filter(o=>r.has(o.datasource_luid))),t.length===0?{type:"empty",message:["The set of allowed Pulse Metrics that can be queried is limited by the server configuration.","While Pulse Metrics were found, they were all filtered out by the server configuration."].join(" ")}:{type:"success",result:t}}var Dd={pulseMetricDefinitionID:kd.string().length(36)},wn=t=>{let e=new O({server:t,name:"list-pulse-metrics-from-metric-definition-id",description:`
292
+ `,paramsSchema:Qd,annotations:{title:"List Pulse Metric Definitions from Metric Definition IDs",readOnlyHint:!0,openWorldHint:!1},callback:async({view:r,metricDefinitionIds:o},{requestId:i,authInfo:n})=>{let s=E();return await e.logAndExecute({requestId:i,authInfo:n,args:{metricDefinitionIds:o,view:r},callback:async()=>await I({config:s,requestId:i,server:t,jwtScopes:["tableau:insight_definitions_metrics:read"],authInfo:N(n),callback:async a=>await a.pulseMethods.listPulseMetricDefinitionsFromMetricDefinitionIds(o,r)}),constrainSuccessResult:a=>Pr({definitions:a,boundedContext:s.boundedContext}),getErrorText:de})}});return e};import{z as Kd}from"zod";function Or({metrics:t,boundedContext:e}){if(t.length===0)return{type:"empty",message:"No Pulse Metrics were found. Either none exist or you do not have permission to view them."};let{datasourceIds:r}=e;return r&&(t=t.filter(o=>r.has(o.datasource_luid))),t.length===0?{type:"empty",message:["The set of allowed Pulse Metrics that can be queried is limited by the server configuration.","While Pulse Metrics were found, they were all filtered out by the server configuration."].join(" ")}:{type:"success",result:t}}var Jd={pulseMetricDefinitionID:Kd.string().length(36)},kn=t=>{let e=new O({server:t,name:"list-pulse-metrics-from-metric-definition-id",description:`
289
293
  Retrieves a list of published Pulse Metrics from a Pulse Metric Definition using the Tableau REST API. Use this tool when a user requests to list Tableau Pulse Metrics for a specific Pulse Metric Definition on the current site.
290
294
 
291
295
  **Parameters:**
@@ -293,7 +297,7 @@ Retrieves a list of published Pulse Metrics from a Pulse Metric Definition using
293
297
 
294
298
  **Example Usage:**
295
299
  - List all Pulse Metrics for this Pulse Metric Definition
296
- `,paramsSchema:Dd,annotations:{title:"List Pulse Metrics from Metric Definition ID",readOnlyHint:!0,openWorldHint:!1},callback:async({pulseMetricDefinitionID:r},{requestId:o,authInfo:i})=>{let n=E();return await e.logAndExecute({requestId:o,authInfo:i,args:{pulseMetricDefinitionID:r},callback:async()=>await I({config:n,requestId:o,server:t,jwtScopes:["tableau:insight_definitions_metrics:read"],authInfo:M(i),callback:async s=>await s.pulseMethods.listPulseMetricsFromMetricDefinitionId(r)}),constrainSuccessResult:s=>xr({metrics:s,boundedContext:n.boundedContext}),getErrorText:pe})}});return e};import{z as Tn}from"zod";var Pd={metricIds:Tn.array(Tn.string().length(36))},An=t=>{let e=new O({server:t,name:"list-pulse-metrics-from-metric-ids",description:`
300
+ `,paramsSchema:Jd,annotations:{title:"List Pulse Metrics from Metric Definition ID",readOnlyHint:!0,openWorldHint:!1},callback:async({pulseMetricDefinitionID:r},{requestId:o,authInfo:i})=>{let n=E();return await e.logAndExecute({requestId:o,authInfo:i,args:{pulseMetricDefinitionID:r},callback:async()=>await I({config:n,requestId:o,server:t,jwtScopes:["tableau:insight_definitions_metrics:read"],authInfo:N(i),callback:async s=>await s.pulseMethods.listPulseMetricsFromMetricDefinitionId(r)}),constrainSuccessResult:s=>Or({metrics:s,boundedContext:n.boundedContext}),getErrorText:de})}});return e};import{z as Pn}from"zod";var Zd={metricIds:Pn.array(Pn.string().length(36))},Dn=t=>{let e=new O({server:t,name:"list-pulse-metrics-from-metric-ids",description:`
297
301
  Retrieves a list of published Pulse Metrics from a list of metric IDs using the Tableau REST API. Use this tool when a user requests to list Tableau Pulse Metrics for a list of metric IDs on the current site.
298
302
 
299
303
  **Parameters:**
@@ -307,7 +311,7 @@ Retrieves a list of published Pulse Metrics from a list of metric IDs using the
307
311
  - This tool is recommended for use with data in Pulse Metric Subscriptions.
308
312
  - 00000000-0000-0000-0000-000000000000 is not a valid datasource id.
309
313
  - If you need a valid datasource id, you may need to retrieve the Pulse Metric Definition for the Pulse Metric which should have a valid datasource information.
310
- `,paramsSchema:Pd,annotations:{title:"List Pulse Metrics from Metric IDs",readOnlyHint:!0,openWorldHint:!1},callback:async({metricIds:r},{requestId:o,authInfo:i})=>{let n=E();return await e.logAndExecute({requestId:o,authInfo:i,args:{metricIds:r},callback:async()=>await I({config:n,requestId:o,server:t,jwtScopes:["tableau:insight_metrics:read"],authInfo:M(i),callback:async s=>await s.pulseMethods.listPulseMetricsFromMetricIds(r)}),constrainSuccessResult:s=>xr({metrics:s,boundedContext:n.boundedContext}),getErrorText:pe})}});return e};var Ld={},En=t=>{let e=new O({server:t,name:"list-pulse-metric-subscriptions",description:`
314
+ `,paramsSchema:Zd,annotations:{title:"List Pulse Metrics from Metric IDs",readOnlyHint:!0,openWorldHint:!1},callback:async({metricIds:r},{requestId:o,authInfo:i})=>{let n=E();return await e.logAndExecute({requestId:o,authInfo:i,args:{metricIds:r},callback:async()=>await I({config:n,requestId:o,server:t,jwtScopes:["tableau:insight_metrics:read"],authInfo:N(i),callback:async s=>await s.pulseMethods.listPulseMetricsFromMetricIds(r)}),constrainSuccessResult:s=>Or({metrics:s,boundedContext:n.boundedContext}),getErrorText:de})}});return e};var Yd={},Ln=t=>{let e=new O({server:t,name:"list-pulse-metric-subscriptions",description:`
311
315
  Retrieves a list of published Pulse Metric Subscriptions for the current user using the Tableau REST API. Use this tool when a user requests to list Tableau Pulse Metric Subscriptions for the current user.
312
316
 
313
317
  **Example Usage:**
@@ -318,7 +322,7 @@ Retrieves a list of published Pulse Metric Subscriptions for the current user us
318
322
  - This tool does not directly provide information about Pulse Metric Definitions. If you need to know information about Pulse Metric Defintiions associated with your subscriptions you need to:
319
323
  1. Retrieve Pulse Metrics from the metric ids returned in the Pulse Metric Subscriptions.
320
324
  2. Retrieve Pulse Metric Definitions from the metric definition id returned in the Pulse Metrics.
321
- `,paramsSchema:Ld,annotations:{title:"List Pulse Metric Subscriptions for Current User",readOnlyHint:!0,openWorldHint:!1},callback:async(r,{requestId:o,authInfo:i})=>{let n=E();return await e.logAndExecute({requestId:o,authInfo:i,args:{},callback:async()=>await I({config:n,requestId:o,server:t,jwtScopes:["tableau:metric_subscriptions:read"],authInfo:M(i),callback:async s=>await s.pulseMethods.listPulseMetricSubscriptionsForCurrentUser()}),constrainSuccessResult:async s=>await Od({subscriptions:s,boundedContext:n.boundedContext,restApiArgs:{config:n,requestId:o,server:t}}),getErrorText:pe})}});return e};async function Od({subscriptions:t,boundedContext:e,restApiArgs:r}){if(t.length===0)return{type:"empty",message:"No Pulse Metric Subscriptions were found. Either none exist or you do not have permission to view them."};let{datasourceIds:o}=e;if(!o)return{type:"success",result:t};let{config:i,requestId:n,server:s}=r;try{let a=await I({config:i,requestId:n,server:s,jwtScopes:["tableau:insight_metrics:read"],callback:async l=>await l.pulseMethods.listPulseMetricsFromMetricIds(t.map(c=>c.metric_id))});if(a.isErr())return{type:"error",message:["The set of allowed Pulse Metric Subscriptions that can be queried is limited by the server configuration.","While Pulse Metric Subscriptions were found, an error occurred while retrieving information about them to determine if they are allowed to be viewed.",W(a.error)].join(" ")};let d=new Set(a.value.filter(l=>o.has(l.datasource_luid)).map(l=>l.id));return t=t.filter(l=>d.has(l.metric_id)),t.length===0?{type:"empty",message:["The set of allowed Pulse Metric Subscriptions that can be queried is limited by the server configuration.","While Pulse Metric Subscriptions were found, they were all filtered out by the server configuration."].join(" ")}:{type:"success",result:t}}catch(a){return{type:"error",message:["The set of allowed Pulse Metric Subscriptions that can be queried is limited by the server configuration.","While Pulse Metric Subscriptions were found, an error occurred while retrieving information about them to determine if they are allowed to be viewed.",W(a)].join(" ")}}}import{ZodiosError as zd}from"@zodios/core";import{Err as jo}from"ts-results-es";import{z as Wd}from"zod";import{z as $e}from"zod";var Md=$e.record($e.string().nonempty(),$e.array($e.object({luid:$e.string().optional(),u:$e.string().nonempty(),p:$e.string().nonempty()}).transform(({luid:t,u:e,p:r})=>({connectionLuid:t,connectionUsername:e,connectionPassword:r})))),_n,Sn=!1,Cn=t=>{if(!Sn){Sn=!0;let{datasourceCredentials:e}=E();if(!e)return;let r;try{r=JSON.parse(e)}catch(i){throw new Error(`Invalid datasource credentials format. Could not parse JSON string: ${e}`,{cause:i})}let o=Md.parse(r);_n=new Map(Object.entries(o))}return _n?.get(t)};function vn(t){let e={...t};switch(t.errorCode){case"400000":e.condition="Bad request",e.details="The content of the request body is invalid. Check for missing or incomplete JSON.";break;case"400800":e.condition="Invalid formula for calculation",e.details="Invalid custom calculation syntax. For help, see https://help.tableau.com/current/pro/desktop/en-us/functions_operators.htm";break;case"400802":e.condition="Invalid API request",e.details="The incoming request isn't valid per the OpenAPI specification.";break;case"400803":e.condition="Validation failed",e.details="The incoming request isn't valid per the validation rules.";break;case"400804":e.condition="Response too large",e.details="The response value exceeds the limit. You must apply a filter in your request.";break;case"401001":e.condition="Login error",e.details="The login failed for the given user.";break;case"401002":e.condition="Invalid authorization credentials",e.details="The provided auth token is formatted incorrectly.";break;case"403157":e.condition="Feature disabled",e.details="The feature is disabled.";break;case"403800":e.condition="API access permission denied",e.details="The user doesn't have API Access granted on the given data source. Set the API Access capability for the given data source to Allowed. For help, see https://help.tableau.com/current/online/en-us/permissions_capabilities.htm";break;case"404934":e.condition="Unknown field",e.details="The requested field doesn't exist.";break;case"404950":e.condition="API endpoint not found",e.details="The request endpoint doesn't exist.";break;case"408000":e.condition="Request timeout",e.details="The request timed out.";break;case"409000":e.condition="User already on site",e.details="HTTP status conflict.";break;case"429000":e.condition="Too many requests",e.details="Too many requests in the allotted amount of time. For help, see https://help.tableau.com/current/api/vizql-data-service/en-us/docs/vds_limitations.html#licensing-and-data-transfer";break;case"500000":e.condition="Internal server error",e.details="The request could not be completed.";break;case"500810":e.condition="VDS empty table response",e.details="The underlying data engine returned empty data value response.";break;case"500811":e.condition="VDS missing table",e.details="The underlying data engine returned empty metadata associated with response.";break;case"500812":e.condition="Error while processing an error",e.details="Internal processing error.";break;case"501000":e.condition="Not implemented",e.details="Can't find response from upstream server.";break;case"503800":e.condition="VDS unavailable",e.details="The underlying data engine is unavailable.";break;case"503801":e.condition="VDS discovery error",e.details="The upstream service can't be found.";break;case"504000":e.condition="Gateway timeout",e.details="The upstream service response timed out.";break}return e}function Rn(t){if(t.length===0)throw new Error("The query must include at least one field. The fields property cannot be an empty array.");if(t.some(Nd))throw new Error("The query must not include any fields with an empty fieldCaption.");{let e=t.reduce((o,i)=>(o[i.fieldCaption]||(o[i.fieldCaption]=0),o[i.fieldCaption]++,o),{}),r=Object.entries(e).filter(([o,i])=>i>1);if(r.length>0)throw new Error(`The query must not include duplicate fields. The following fields are duplicated: ${r.map(([o])=>o).join(", ")}.`)}{let e=t.reduce((o,i)=>(i.sortPriority===void 0||(o[i.sortPriority]||(o[i.sortPriority]=[]),o[i.sortPriority].push(i.fieldCaption)),o),{}),r=Object.entries(e).filter(([o,i])=>i.length>1);if(r.length>0){let o=r.reduce((i,[n,s])=>(i.push(`${s.map(a=>`"${a}"`).join(", ")} with a sort priority of ${n}`),i),[]);throw new Error(`The query must not include duplicate sort priorities. The following fields have sort priorities that are duplicated: ${o.join(". ")}.`)}}{let e=t.filter(Fo).map(r=>r.fieldCaption);if(e.length>0)throw new Error(`The query must not include fields that contain both a function and a calculation. The following fields contain both a function and a calculation: ${e.join(", ")}.`)}{let e=t.filter(Fd).map(r=>r.fieldCaption);if(e.length>0)throw new Error(`The query must not include fields that have a maxDecimalPlaces value that is less than 0. The following fields have a maxDecimalPlaces value that is less than 0: ${e.join(", ")}.`)}}function Nd(t){return!t.fieldCaption}function Fo(t){return!!("function"in t&&t.function&&"calculation"in t&&t.calculation)}function xn(t){return!!("fieldCaption"in t&&t.fieldCaption&&"calculation"in t&&t.calculation)}function Fd(t){return t.maxDecimalPlaces!==void 0&&t.maxDecimalPlaces<0}import{Err as Uo,Ok as Ud}from"ts-results-es";function kn(t){if(t){if(t.some(e=>!("field"in e)))throw new Error("The query must not include filters with invalid fields. The following field errors occurred: The filter must include a field property.");{let e=t.reduce((o,i)=>("fieldCaption"in i.field&&(o[i.field.fieldCaption]||(o[i.field.fieldCaption]=0),o[i.field.fieldCaption]++),o),{}),r=Object.entries(e).filter(([o,i])=>i>1);if(r.length>0)throw new Error(`The query must not include multiple filters for the following fields: ${r.map(([o])=>o).join(", ")}.`)}{let e=t.reduce((r,o)=>{if(!("field"in o))return r;let i=In(o.field);return i.isErr()&&r.push(i.error),r},[]);if(e.length>0)throw new Error(`The query must not include filters with invalid fields. The following field errors occurred: ${e.join(", ")}.`)}if(t.filter(r=>["SET","MATCH","DATE"].includes(r.filterType)&&("function"in r.field&&r.field.function||"calculation"in r.field&&r.field.calculation)).length>0)throw new Error("The query must not include Set Filters, Match Filters, or Relative Date Filters with functions or calculations.");if(t.filter(r=>r.filterType==="SET"&&r.values.length===0).length>0)throw new Error("The query must not include Set Filters with an empty values array.");if(t.filter(r=>{if(r.filterType!=="QUANTITATIVE_DATE")return!1;switch(r.quantitativeFilterType){case"RANGE":return isNaN(Date.parse(r.minDate))||isNaN(Date.parse(r.maxDate));case"MIN":return isNaN(Date.parse(r.minDate));case"MAX":return isNaN(Date.parse(r.maxDate))}}).length>0)throw new Error("The query must not include Quantitative Date Filters with invalid dates. Dates must use the RFC 3339 standard. Example: 2025-03-14");if(t.filter(r=>r.filterType==="DATE"&&r.anchorDate&&isNaN(Date.parse(r.anchorDate))).length>0)throw new Error("The query must not include Relative Date Filters with invalid anchor dates. Anchor dates must use the RFC 3339 standard. Example: 2025-03-14");{let e=t.reduce((r,o)=>{if(o.filterType!=="TOP")return r;let i=In(o.fieldToMeasure);return i.isErr()&&r.push(i.error),r},[]);if(e.length>0)throw new Error(`The query must not include Top N filters with invalid fields. The following field errors occurred: ${e.join(", ")}`)}{let e=t.reduce((r,o)=>(o.filterType!=="MATCH"||!o.startsWith&&!o.endsWith&&!o.contains&&r.push(`The match filter for field "${o.field.fieldCaption}" must include at least one of the following properties: startsWith, endsWith, or contains`),r),[]);if(e.length>0)throw new Error(`The query must not include Match Filters with invalid fields. The following field errors occurred: ${e.join(", ")}.`)}}}function In(t){if(qd(t))return new Uo("The fieldCaption property must be a non-empty string.");if(xn(t)){let e="fieldCaption"in t?`"${t.fieldCaption}" `:"";return new Uo(`The field ${e} must not contain both a fieldCaption and a calculation.`.replace(" "," "))}if(Fo(t)){let e="fieldCaption"in t?`"${t.fieldCaption}" `:"";return new Uo(`The field ${e} must not contain both a function and a calculation.`.replace(" "," "))}return Ud.EMPTY}function qd(t){return"fieldCaption"in t&&!t.fieldCaption}function Dn({datasourceLuid:t,query:e}){Sr({datasourceLuid:t});let{fields:r,filters:o}=e;if(Rn(r),kn(o),!qt.safeParse(e).success)throw new Error("The query does not match the expected schema.")}var Pn=`# Query Tableau Data Source Tool
325
+ `,paramsSchema:Yd,annotations:{title:"List Pulse Metric Subscriptions for Current User",readOnlyHint:!0,openWorldHint:!1},callback:async(r,{requestId:o,authInfo:i})=>{let n=E();return await e.logAndExecute({requestId:o,authInfo:i,args:{},callback:async()=>await I({config:n,requestId:o,server:t,jwtScopes:["tableau:metric_subscriptions:read"],authInfo:N(i),callback:async s=>await s.pulseMethods.listPulseMetricSubscriptionsForCurrentUser()}),constrainSuccessResult:async s=>await Xd({subscriptions:s,boundedContext:n.boundedContext,restApiArgs:{config:n,requestId:o,server:t}}),getErrorText:de})}});return e};async function Xd({subscriptions:t,boundedContext:e,restApiArgs:r}){if(t.length===0)return{type:"empty",message:"No Pulse Metric Subscriptions were found. Either none exist or you do not have permission to view them."};let{datasourceIds:o}=e;if(!o)return{type:"success",result:t};let{config:i,requestId:n,server:s}=r;try{let a=await I({config:i,requestId:n,server:s,jwtScopes:["tableau:insight_metrics:read"],callback:async l=>await l.pulseMethods.listPulseMetricsFromMetricIds(t.map(u=>u.metric_id))});if(a.isErr())return{type:"error",message:["The set of allowed Pulse Metric Subscriptions that can be queried is limited by the server configuration.","While Pulse Metric Subscriptions were found, an error occurred while retrieving information about them to determine if they are allowed to be viewed.",W(a.error)].join(" ")};let c=new Set(a.value.filter(l=>o.has(l.datasource_luid)).map(l=>l.id));return t=t.filter(l=>c.has(l.metric_id)),t.length===0?{type:"empty",message:["The set of allowed Pulse Metric Subscriptions that can be queried is limited by the server configuration.","While Pulse Metric Subscriptions were found, they were all filtered out by the server configuration."].join(" ")}:{type:"success",result:t}}catch(a){return{type:"error",message:["The set of allowed Pulse Metric Subscriptions that can be queried is limited by the server configuration.","While Pulse Metric Subscriptions were found, an error occurred while retrieving information about them to determine if they are allowed to be viewed.",W(a)].join(" ")}}}import{ZodiosError as lp}from"@zodios/core";import{Err as Ho}from"ts-results-es";import{z as cp}from"zod";import{z as Ke}from"zod";var ep=Ke.record(Ke.string().nonempty(),Ke.array(Ke.object({luid:Ke.string().optional(),u:Ke.string().nonempty(),p:Ke.string().nonempty()}).transform(({luid:t,u:e,p:r})=>({connectionLuid:t,connectionUsername:e,connectionPassword:r})))),On,Mn=!1,Nn=t=>{if(!Mn){Mn=!0;let{datasourceCredentials:e}=E();if(!e)return;let r;try{r=JSON.parse(e)}catch(i){throw new Error(`Invalid datasource credentials format. Could not parse JSON string: ${e}`,{cause:i})}let o=ep.parse(r);On=new Map(Object.entries(o))}return On?.get(t)};function Fn(t){let e={...t};switch(t.errorCode){case"400000":e.condition="Bad request",e.details="The content of the request body is invalid. Check for missing or incomplete JSON.";break;case"400800":e.condition="Invalid formula for calculation",e.details="Invalid custom calculation syntax. For help, see https://help.tableau.com/current/pro/desktop/en-us/functions_operators.htm";break;case"400802":e.condition="Invalid API request",e.details="The incoming request isn't valid per the OpenAPI specification.";break;case"400803":e.condition="Validation failed",e.details="The incoming request isn't valid per the validation rules.";break;case"400804":e.condition="Response too large",e.details="The response value exceeds the limit. You must apply a filter in your request.";break;case"401001":e.condition="Login error",e.details="The login failed for the given user.";break;case"401002":e.condition="Invalid authorization credentials",e.details="The provided auth token is formatted incorrectly.";break;case"403157":e.condition="Feature disabled",e.details="The feature is disabled.";break;case"403800":e.condition="API access permission denied",e.details="The user doesn't have API Access granted on the given data source. Set the API Access capability for the given data source to Allowed. For help, see https://help.tableau.com/current/online/en-us/permissions_capabilities.htm";break;case"404934":e.condition="Unknown field",e.details="The requested field doesn't exist.";break;case"404950":e.condition="API endpoint not found",e.details="The request endpoint doesn't exist.";break;case"408000":e.condition="Request timeout",e.details="The request timed out.";break;case"409000":e.condition="User already on site",e.details="HTTP status conflict.";break;case"429000":e.condition="Too many requests",e.details="Too many requests in the allotted amount of time. For help, see https://help.tableau.com/current/api/vizql-data-service/en-us/docs/vds_limitations.html#licensing-and-data-transfer";break;case"500000":e.condition="Internal server error",e.details="The request could not be completed.";break;case"500810":e.condition="VDS empty table response",e.details="The underlying data engine returned empty data value response.";break;case"500811":e.condition="VDS missing table",e.details="The underlying data engine returned empty metadata associated with response.";break;case"500812":e.condition="Error while processing an error",e.details="Internal processing error.";break;case"501000":e.condition="Not implemented",e.details="Can't find response from upstream server.";break;case"503800":e.condition="VDS unavailable",e.details="The underlying data engine is unavailable.";break;case"503801":e.condition="VDS discovery error",e.details="The upstream service can't be found.";break;case"504000":e.condition="Gateway timeout",e.details="The upstream service response timed out.";break}return e}function Un(t){if(t.length===0)throw new Error("The query must include at least one field. The fields property cannot be an empty array.");if(t.some(tp))throw new Error("The query must not include any fields with an empty fieldCaption.");{let e=t.reduce((o,i)=>(i.sortPriority===void 0||(o[i.sortPriority]||(o[i.sortPriority]=[]),o[i.sortPriority].push(i.fieldCaption)),o),{}),r=Object.entries(e).filter(([o,i])=>i.length>1);if(r.length>0){let o=r.reduce((i,[n,s])=>(i.push(`${s.map(a=>`"${a}"`).join(", ")} with a sort priority of ${n}`),i),[]);throw new Error(`The query must not include duplicate sort priorities. The following fields have sort priorities that are duplicated: ${o.join(". ")}.`)}}{let e=t.filter(Bo).map(r=>r.fieldCaption);if(e.length>0)throw new Error(`The query must not include fields that contain both a function and a calculation. The following fields contain both a function and a calculation: ${e.join(", ")}.`)}{let e=t.filter(rp).map(r=>r.fieldCaption);if(e.length>0)throw new Error(`The query must not include fields that have a maxDecimalPlaces value that is less than 0. The following fields have a maxDecimalPlaces value that is less than 0: ${e.join(", ")}.`)}}function tp(t){return!t.fieldCaption}function Bo(t){return!!("function"in t&&t.function&&"calculation"in t&&t.calculation)}function qn(t){return!!("fieldCaption"in t&&t.fieldCaption&&"calculation"in t&&t.calculation)}function rp(t){return t.maxDecimalPlaces!==void 0&&t.maxDecimalPlaces<0}import{Err as zo,Ok as op}from"ts-results-es";function Vn(t){if(t){if(t.some(e=>!("field"in e)))throw new Error("The query must not include filters with invalid fields. The following field errors occurred: The filter must include a field property.");{let e=t.reduce((o,i)=>("fieldCaption"in i.field&&(o[i.field.fieldCaption]||(o[i.field.fieldCaption]=0),o[i.field.fieldCaption]++),o),{}),r=Object.entries(e).filter(([o,i])=>i>1);if(r.length>0)throw new Error(`The query must not include multiple filters for the following fields: ${r.map(([o])=>o).join(", ")}.`)}{let e=t.reduce((r,o)=>{if(!("field"in o))return r;let i=jn(o.field);return i.isErr()&&r.push(i.error),r},[]);if(e.length>0)throw new Error(`The query must not include filters with invalid fields. The following field errors occurred: ${e.join(", ")}.`)}if(t.filter(r=>["SET","MATCH","DATE"].includes(r.filterType)&&("function"in r.field&&r.field.function||"calculation"in r.field&&r.field.calculation)).length>0)throw new Error("The query must not include Set Filters, Match Filters, or Relative Date Filters with functions or calculations.");if(t.filter(r=>r.filterType==="SET"&&r.values.length===0).length>0)throw new Error("The query must not include Set Filters with an empty values array.");if(t.filter(r=>{if(r.filterType!=="QUANTITATIVE_DATE")return!1;switch(r.quantitativeFilterType){case"RANGE":return isNaN(Date.parse(r.minDate))||isNaN(Date.parse(r.maxDate));case"MIN":return isNaN(Date.parse(r.minDate));case"MAX":return isNaN(Date.parse(r.maxDate))}}).length>0)throw new Error("The query must not include Quantitative Date Filters with invalid dates. Dates must use the RFC 3339 standard. Example: 2025-03-14");if(t.filter(r=>r.filterType==="DATE"&&r.anchorDate&&isNaN(Date.parse(r.anchorDate))).length>0)throw new Error("The query must not include Relative Date Filters with invalid anchor dates. Anchor dates must use the RFC 3339 standard. Example: 2025-03-14");{let e=t.reduce((r,o)=>{if(o.filterType!=="TOP")return r;let i=jn(o.fieldToMeasure);return i.isErr()&&r.push(i.error),r},[]);if(e.length>0)throw new Error(`The query must not include Top N filters with invalid fields. The following field errors occurred: ${e.join(", ")}`)}{let e=t.reduce((r,o)=>(o.filterType!=="MATCH"||!o.startsWith&&!o.endsWith&&!o.contains&&r.push(`The match filter for field "${o.field.fieldCaption}" must include at least one of the following properties: startsWith, endsWith, or contains`),r),[]);if(e.length>0)throw new Error(`The query must not include Match Filters with invalid fields. The following field errors occurred: ${e.join(", ")}.`)}}}function jn(t){if(ip(t))return new zo("The fieldCaption property must be a non-empty string.");if(qn(t)){let e="fieldCaption"in t?`"${t.fieldCaption}" `:"";return new zo(`The field ${e} must not contain both a fieldCaption and a calculation.`.replace(" "," "))}if(Bo(t)){let e="fieldCaption"in t?`"${t.fieldCaption}" `:"";return new zo(`The field ${e} must not contain both a function and a calculation.`.replace(" "," "))}return op.EMPTY}function ip(t){return"fieldCaption"in t&&!t.fieldCaption}function Bn({datasourceLuid:t,query:e}){kr({datasourceLuid:t});let{fields:r,filters:o}=e;if(Un(r),Vn(o),!Ht.safeParse(e).success)throw new Error("The query does not match the expected schema.")}var zn=`# Query Tableau Data Source Tool
322
326
 
323
327
  Executes VizQL queries against Tableau data sources to answer business questions from published data. This tool allows you to retrieve aggregated and filtered data with proper sorting and grouping.
324
328
 
@@ -627,7 +631,7 @@ Filter relative date periods:
627
631
  **Instead:**
628
632
  - Use metadata tools to understand available fields
629
633
  - Suggest alternative questions that can be answered with available data
630
- - Recommend appropriate aggregation levels for the business question`;import zt from"fast-levenshtein";import{Err as qo,Ok as Qe}from"ts-results-es";async function Ln(t,e,r,o){if(!e.filters)return Qe.EMPTY;let i=[],n=e.filters.filter(s=>(s.filterType==="SET"||s.filterType==="MATCH")&&"fieldCaption"in s.field&&s.field.fieldCaption);if(n.length===0)return Qe.EMPTY;for(let s of n){let a=s.field.fieldCaption;try{if(s.filterType==="SET"){let d=await jd(s,r,o);d.isErr()&&i.push(d.error)}else if(s.filterType==="MATCH"){let d=await Vd(s,r,o);d.isErr()&&i.push(d.error)}}catch(d){de.warning(t,`Filter value validation failed for field ${a}: ${d}`)}}return i.length>0?new qo(i):Qe.EMPTY}async function jd(t,e,r){let o=t.field.fieldCaption,i=t.values.map(m=>String(m)),s={datasource:r,query:{fields:[{fieldCaption:o,fieldAlias:"DistinctValues"}]},options:{returnFormat:"OBJECTS",debug:!0,disaggregate:!1}},a=await e.queryDatasource(s);if(a.isErr())return Qe.EMPTY;let d=a.value.data||[],l=new Set(d.map(m=>String(m.DistinctValues||m[o]||""))),c=i.filter(m=>!l.has(m));if(c.length>0){let m=Bd(c,Array.from(l),3,5),g=`Filter validation failed for field "${o}". The following values were not found: ${c.join(", ")}.`;return m.length>0&&(g+=` Did you mean: ${m.join(", ")}?`),g+=" Please evaluate whether you included the wrong filter value or if you are trying to filter on the wrong field entirely.",new qo({field:o,invalidValues:c,sampleValues:m,message:g})}return Qe.EMPTY}async function Vd(t,e,r){let o=t.field.fieldCaption,n={datasource:r,query:{fields:[{fieldCaption:o,fieldAlias:"SampleValues"}]},options:{returnFormat:"OBJECTS",debug:!0,disaggregate:!1}},s=await e.queryDatasource(n);if(s.isErr())return Qe.EMPTY;let d=(s.value.data||[]).map(c=>String(c.SampleValues||c[o]||""));if(!d.some(c=>!(t.startsWith&&!c.startsWith(t.startsWith)||t.endsWith&&!c.endsWith(t.endsWith)||t.contains&&!c.includes(t.contains)))){let c=new Set;for(let f of d){if(c.size>=5)break;let b=f.toLowerCase(),y=t.startsWith?(()=>{let A=t.startsWith.toLowerCase(),R=A.length,x=Math.min(2,Math.floor(R/2)),q=b.slice(0,R);return zt.get(A,q)<=x})():!0,S=t.endsWith?(()=>{let A=t.endsWith.toLowerCase(),R=A.length,x=Math.min(2,Math.floor(R/2)),q=b.slice(-R);return zt.get(A,q)<=x})():!0,P=t.contains?(()=>{let A=t.contains.toLowerCase(),R=A.length,x=Math.min(2,Math.floor(R/2));return b.length>=R?Array.from({length:b.length-R+1},(q,U)=>zt.get(A,b.slice(U,U+R))).some(q=>q<=x):zt.get(A,b)<=x})():!0;y&&S&&P&&c.add(f)}let m=[];t.startsWith&&m.push(`starts with "${t.startsWith}"`),t.endsWith&&m.push(`ends with "${t.endsWith}"`),t.contains&&m.push(`contains "${t.contains}"`);let g=c.size>0?`Similar values in this field: ${Array.from(c).join(", ")}.`:"",w=`Filter validation failed for field "${o}". No values found that ${m.join(" and ")}. ${g} Please evaluate whether you included the wrong filter value or if you are trying to filter on the wrong field entirely.`;return new qo({field:o,invalidValues:m,sampleValues:Array.from(c),message:w})}return Qe.EMPTY}function Bd(t,e,r=3,o=5){let i=[];for(let d of e){let l=t.map(c=>({value:c,distance:zt.get(c.toLowerCase(),d.toLowerCase())})).filter(c=>c.distance<=r).sort((c,m)=>c.distance-m.distance);if(l.length>0){let c=l[0];i.push({invalidValue:c.value,suggestionForInvalidValue:d,distance:c.distance})}}i.sort((d,l)=>d.distance-l.distance);let n=[],s=Math.ceil(o/t.length),a=new Map;for(let d of t)a.set(d,0);for(let{invalidValue:d,suggestionForInvalidValue:l}of i){if(n.length===o)break;a.get(d)!==s&&(n.push(l),a.set(d,a.get(d)+1))}for(let{suggestionForInvalidValue:d}of i){if(n.length===o)break;if(n.includes(d))continue;n.push(d)}return n}var Hd={datasourceLuid:Wd.string().nonempty(),query:qt},On=t=>{let e=new O({server:t,name:"query-datasource",description:Pn,paramsSchema:Hd,annotations:{title:"Query Datasource",readOnlyHint:!0,openWorldHint:!1},argsValidator:Dn,callback:async({datasourceLuid:r,query:o},{requestId:i,authInfo:n})=>{let s=E();return await e.logAndExecute({requestId:i,authInfo:n,args:{datasourceLuid:r,query:o},callback:async()=>{let a=await ge.isDatasourceAllowed({datasourceLuid:r,restApiArgs:{config:s,requestId:i,server:t}});if(!a.allowed)return new jo({type:"datasource-not-allowed",message:a.message});let d={datasourceLuid:r},l={returnFormat:"OBJECTS",debug:!0,disaggregate:!1},c=Cn(r);c&&(d.connections=c);let m={datasource:d,query:o,options:l};return await I({config:s,requestId:i,server:t,jwtScopes:["tableau:viz_data_service:read"],authInfo:M(n),callback:async g=>{if(!s.disableQueryDatasourceFilterValidation){let f=await Ln(t,o,g.vizqlDataServiceMethods,d);if(f.isErr()){let y=f.error.map(S=>S.message).join(", ");return new jo({type:"filter-validation",message:y})}}let w=await g.vizqlDataServiceMethods.queryDatasource(m);return w.isErr()?new jo(w.error instanceof zd?w.error:w.error==="feature-disabled"?{type:"feature-disabled"}:{type:"tableau-error",error:w.error}):w}})},constrainSuccessResult:a=>({type:"success",result:a}),getErrorText:a=>{switch(a.type){case"feature-disabled":return _r();case"datasource-not-allowed":return a.message;case"filter-validation":return JSON.stringify({requestId:i,errorType:"validation",message:a.message});case"tableau-error":return JSON.stringify({requestId:i,...vn(a.error)})}}})}});return e};import{Err as Gd,Ok as $d}from"ts-results-es";import{z as Qd}from"zod";var Kd={viewId:Qd.string()},Mn=t=>{let e=new O({server:t,name:"get-view-data",description:"Retrieves data in comma separated value (CSV) format for the specified view in a Tableau workbook.",paramsSchema:Kd,annotations:{title:"Get View Data",readOnlyHint:!0,openWorldHint:!1},callback:async({viewId:r},{requestId:o,authInfo:i})=>{let n=E();return await e.logAndExecute({requestId:o,authInfo:i,args:{viewId:r},callback:async()=>{let s=await ge.isViewAllowed({viewId:r,restApiArgs:{config:n,requestId:o,server:t}});return s.allowed?new $d(await I({config:n,requestId:o,server:t,jwtScopes:["tableau:views:download"],authInfo:M(i),callback:async a=>await a.viewsMethods.queryViewData({viewId:r,siteId:a.siteId})})):new Gd({type:"view-not-allowed",message:s.message})},constrainSuccessResult:s=>({type:"success",result:s}),getErrorText:s=>{switch(s.type){case"view-not-allowed":return s.message}}})}});return e};import{Err as Jd,Ok as Zd}from"ts-results-es";import{z as Vo}from"zod";function Nn(t){return{isError:!1,content:[{type:"image",data:Buffer.from(t).toString("base64"),mimeType:"image/png"}]}}var Yd={viewId:Vo.string(),width:Vo.number().gt(0).optional(),height:Vo.number().gt(0).optional()},Fn=t=>{let e=new O({server:t,name:"get-view-image",description:"Retrieves an image of the specified view in a Tableau workbook. The width and height in pixels can be provided. The default width and height are both 800 pixels.",paramsSchema:Yd,annotations:{title:"Get View Image",readOnlyHint:!0,openWorldHint:!1},callback:async({viewId:r,width:o,height:i},{requestId:n,authInfo:s})=>{let a=E();return await e.logAndExecute({requestId:n,authInfo:s,args:{viewId:r},callback:async()=>{let d=await ge.isViewAllowed({viewId:r,restApiArgs:{config:a,requestId:n,server:t}});return d.allowed?new Zd(await I({config:a,requestId:n,server:t,jwtScopes:["tableau:views:download"],authInfo:M(s),callback:async l=>await l.viewsMethods.queryViewImage({viewId:r,siteId:l.siteId,width:o,height:i,resolution:"high"})})):new Jd({type:"view-not-allowed",message:d.message})},constrainSuccessResult:d=>({type:"success",result:d}),getSuccessResult:Nn,getErrorText:d=>{switch(d.type){case"view-not-allowed":return d.message}}})}});return e};import{Ok as ep}from"ts-results-es";import{z as zo}from"zod";import{z as Bo}from"zod";var Un=Bo.enum(["caption","contentUrl","createdAt","favoritesTotal","fields","hitsTotal","name","ownerDomain","ownerEmail","ownerName","projectName","sheetNumber","sheetType","tags","title","updatedAt","viewUrlname","workbookDescription","workbookName"]),Xd={caption:["eq","in"],contentUrl:["eq","in"],createdAt:["eq","gt","gte","lt","lte"],favoritesTotal:["eq","gt","gte","lt","lte"],fields:["eq","in"],hitsTotal:["eq","gt","gte","lt","lte"],name:["eq","in"],ownerDomain:["eq","in"],ownerEmail:["eq","in"],ownerName:["eq","in"],projectName:["eq","in"],sheetNumber:["eq","gt","gte","lt","lte"],sheetType:["eq","in"],tags:["eq","in"],title:["eq","in"],updatedAt:["eq","gt","gte","lt","lte"],viewUrlname:["eq","in"],workbookDescription:["eq","in"],workbookName:["eq","in"]},nS=Bo.object({field:Un,operator:Ge,value:Bo.string()});function qn(t){return ht({filterString:t,allowedOperatorsByField:Xd,filterFieldSchema:Un})}var tp={filter:zo.string().optional(),pageSize:zo.number().gt(0).optional(),limit:zo.number().gt(0).optional()},jn=t=>{let e=new O({server:t,name:"list-views",description:`
634
+ - Recommend appropriate aggregation levels for the business question`;import Kt from"fast-levenshtein";import{Err as Wo,Ok as Je}from"ts-results-es";async function Wn(t,e,r,o){if(!e.filters)return Je.EMPTY;let i=[],n=e.filters.filter(s=>(s.filterType==="SET"||s.filterType==="MATCH")&&"fieldCaption"in s.field&&s.field.fieldCaption);if(n.length===0)return Je.EMPTY;for(let s of n){let a=s.field.fieldCaption;try{if(s.filterType==="SET"){let c=await sp(s,r,o);c.isErr()&&i.push(c.error)}else if(s.filterType==="MATCH"){let c=await np(s,r,o);c.isErr()&&i.push(c.error)}}catch(c){ue.warning(t,`Filter value validation failed for field ${a}: ${c}`)}}return i.length>0?new Wo(i):Je.EMPTY}async function sp(t,e,r){let o=t.field.fieldCaption,i=t.values.map(p=>String(p)),s={datasource:r,query:{fields:[{fieldCaption:o,fieldAlias:"DistinctValues"}]},options:{returnFormat:"OBJECTS",debug:!0,disaggregate:!1}},a=await e.queryDatasource(s);if(a.isErr())return Je.EMPTY;let c=a.value.data||[],l=new Set(c.map(p=>String(p.DistinctValues||p[o]||""))),u=i.filter(p=>!l.has(p));if(u.length>0){let p=ap(u,Array.from(l),3,5),g=`Filter validation failed for field "${o}". The following values were not found: ${u.join(", ")}.`;return p.length>0&&(g+=` Did you mean: ${p.join(", ")}?`),g+=" Please evaluate whether you included the wrong filter value or if you are trying to filter on the wrong field entirely.",new Wo({field:o,invalidValues:u,sampleValues:p,message:g})}return Je.EMPTY}async function np(t,e,r){let o=t.field.fieldCaption,n={datasource:r,query:{fields:[{fieldCaption:o,fieldAlias:"SampleValues"}]},options:{returnFormat:"OBJECTS",debug:!0,disaggregate:!1}},s=await e.queryDatasource(n);if(s.isErr())return Je.EMPTY;let c=(s.value.data||[]).map(u=>String(u.SampleValues||u[o]||""));if(!c.some(u=>!(t.startsWith&&!u.startsWith(t.startsWith)||t.endsWith&&!u.endsWith(t.endsWith)||t.contains&&!u.includes(t.contains)))){let u=new Set;for(let f of c){if(u.size>=5)break;let y=f.toLowerCase(),w=t.startsWith?(()=>{let A=t.startsWith.toLowerCase(),x=A.length,R=Math.min(2,Math.floor(x/2)),j=y.slice(0,x);return Kt.get(A,j)<=R})():!0,v=t.endsWith?(()=>{let A=t.endsWith.toLowerCase(),x=A.length,R=Math.min(2,Math.floor(x/2)),j=y.slice(-x);return Kt.get(A,j)<=R})():!0,D=t.contains?(()=>{let A=t.contains.toLowerCase(),x=A.length,R=Math.min(2,Math.floor(x/2));return y.length>=x?Array.from({length:y.length-x+1},(j,F)=>Kt.get(A,y.slice(F,F+x))).some(j=>j<=R):Kt.get(A,y)<=R})():!0;w&&v&&D&&u.add(f)}let p=[];t.startsWith&&p.push(`starts with "${t.startsWith}"`),t.endsWith&&p.push(`ends with "${t.endsWith}"`),t.contains&&p.push(`contains "${t.contains}"`);let g=u.size>0?`Similar values in this field: ${Array.from(u).join(", ")}.`:"",b=`Filter validation failed for field "${o}". No values found that ${p.join(" and ")}. ${g} Please evaluate whether you included the wrong filter value or if you are trying to filter on the wrong field entirely.`;return new Wo({field:o,invalidValues:p,sampleValues:Array.from(u),message:b})}return Je.EMPTY}function ap(t,e,r=3,o=5){let i=[];for(let c of e){let l=t.map(u=>({value:u,distance:Kt.get(u.toLowerCase(),c.toLowerCase())})).filter(u=>u.distance<=r).sort((u,p)=>u.distance-p.distance);if(l.length>0){let u=l[0];i.push({invalidValue:u.value,suggestionForInvalidValue:c,distance:u.distance})}}i.sort((c,l)=>c.distance-l.distance);let n=[],s=Math.ceil(o/t.length),a=new Map;for(let c of t)a.set(c,0);for(let{invalidValue:c,suggestionForInvalidValue:l}of i){if(n.length===o)break;a.get(c)!==s&&(n.push(l),a.set(c,a.get(c)+1))}for(let{suggestionForInvalidValue:c}of i){if(n.length===o)break;if(n.includes(c))continue;n.push(c)}return n}var up={datasourceLuid:cp.string().nonempty(),query:Ht},Hn=t=>{let e=new O({server:t,name:"query-datasource",description:zn,paramsSchema:up,annotations:{title:"Query Datasource",readOnlyHint:!0,openWorldHint:!1},argsValidator:Bn,callback:async({datasourceLuid:r,query:o},{requestId:i,authInfo:n})=>{let s=E();return await e.logAndExecute({requestId:i,authInfo:n,args:{datasourceLuid:r,query:o},callback:async()=>{let a=await be.isDatasourceAllowed({datasourceLuid:r,restApiArgs:{config:s,requestId:i,server:t}});if(!a.allowed)return new Ho({type:"datasource-not-allowed",message:a.message});let c={datasourceLuid:r},l={returnFormat:"OBJECTS",debug:!0,disaggregate:!1},u=Nn(r);u&&(c.connections=u);let p={datasource:c,query:o,options:l};return await I({config:s,requestId:i,server:t,jwtScopes:["tableau:viz_data_service:read"],authInfo:N(n),callback:async g=>{if(!s.disableQueryDatasourceFilterValidation){let f=await Wn(t,o,g.vizqlDataServiceMethods,c);if(f.isErr()){let w=f.error.map(v=>v.message).join(", ");return new Ho({type:"filter-validation",message:w})}}let b=await g.vizqlDataServiceMethods.queryDatasource(p);return b.isErr()?new Ho(b.error instanceof lp?b.error:b.error==="feature-disabled"?{type:"feature-disabled"}:{type:"tableau-error",error:b.error}):b}})},constrainSuccessResult:a=>({type:"success",result:a}),getErrorText:a=>{switch(a.type){case"feature-disabled":return Ir();case"datasource-not-allowed":return a.message;case"filter-validation":return JSON.stringify({requestId:i,errorType:"validation",message:a.message});case"tableau-error":return JSON.stringify({requestId:i,...Fn(a.error)})}}})}});return e};import{Err as dp,Ok as pp}from"ts-results-es";import{z as mp}from"zod";var fp={viewId:mp.string()},Gn=t=>{let e=new O({server:t,name:"get-view-data",description:"Retrieves data in comma separated value (CSV) format for the specified view in a Tableau workbook.",paramsSchema:fp,annotations:{title:"Get View Data",readOnlyHint:!0,openWorldHint:!1},callback:async({viewId:r},{requestId:o,authInfo:i})=>{let n=E();return await e.logAndExecute({requestId:o,authInfo:i,args:{viewId:r},callback:async()=>{let s=await be.isViewAllowed({viewId:r,restApiArgs:{config:n,requestId:o,server:t}});return s.allowed?new pp(await I({config:n,requestId:o,server:t,jwtScopes:["tableau:views:download"],authInfo:N(i),callback:async a=>await a.viewsMethods.queryViewData({viewId:r,siteId:a.siteId})})):new dp({type:"view-not-allowed",message:s.message})},constrainSuccessResult:s=>({type:"success",result:s}),getErrorText:s=>{switch(s.type){case"view-not-allowed":return s.message}}})}});return e};import{Err as hp,Ok as gp}from"ts-results-es";import{z as Go}from"zod";function $n(t){return{isError:!1,content:[{type:"image",data:Buffer.from(t).toString("base64"),mimeType:"image/png"}]}}var bp={viewId:Go.string(),width:Go.number().gt(0).optional(),height:Go.number().gt(0).optional()},Qn=t=>{let e=new O({server:t,name:"get-view-image",description:"Retrieves an image of the specified view in a Tableau workbook. The width and height in pixels can be provided. The default width and height are both 800 pixels.",paramsSchema:bp,annotations:{title:"Get View Image",readOnlyHint:!0,openWorldHint:!1},callback:async({viewId:r,width:o,height:i},{requestId:n,authInfo:s})=>{let a=E();return await e.logAndExecute({requestId:n,authInfo:s,args:{viewId:r},callback:async()=>{let c=await be.isViewAllowed({viewId:r,restApiArgs:{config:a,requestId:n,server:t}});return c.allowed?new gp(await I({config:a,requestId:n,server:t,jwtScopes:["tableau:views:download"],authInfo:N(s),callback:async l=>await l.viewsMethods.queryViewImage({viewId:r,siteId:l.siteId,width:o,height:i,resolution:"high"})})):new hp({type:"view-not-allowed",message:c.message})},constrainSuccessResult:c=>({type:"success",result:c}),getSuccessResult:$n,getErrorText:c=>{switch(c.type){case"view-not-allowed":return c.message}}})}});return e};import{Ok as wp}from"ts-results-es";import{z as Qo}from"zod";import{z as $o}from"zod";var Kn=$o.enum(["caption","contentUrl","createdAt","favoritesTotal","fields","hitsTotal","name","ownerDomain","ownerEmail","ownerName","projectName","sheetNumber","sheetType","tags","title","updatedAt","viewUrlname","workbookDescription","workbookName"]),yp={caption:["eq","in"],contentUrl:["eq","in"],createdAt:["eq","gt","gte","lt","lte"],favoritesTotal:["eq","gt","gte","lt","lte"],fields:["eq","in"],hitsTotal:["eq","gt","gte","lt","lte"],name:["eq","in"],ownerDomain:["eq","in"],ownerEmail:["eq","in"],ownerName:["eq","in"],projectName:["eq","in"],sheetNumber:["eq","gt","gte","lt","lte"],sheetType:["eq","in"],tags:["eq","in"],title:["eq","in"],updatedAt:["eq","gt","gte","lt","lte"],viewUrlname:["eq","in"],workbookDescription:["eq","in"],workbookName:["eq","in"]},qS=$o.object({field:Kn,operator:Qe,value:$o.string()});function Jn(t){return Tt({filterString:t,allowedOperatorsByField:yp,filterFieldSchema:Kn})}var Tp={filter:Qo.string().optional(),pageSize:Qo.number().gt(0).optional(),limit:Qo.number().gt(0).optional()},Zn=t=>{let e=new O({server:t,name:"list-views",description:`
631
635
  Retrieves a list of views on a Tableau site including their metadata such as name, owner, and the workbook they are found in. Supports optional filtering via field:operator:value expressions (e.g., name:eq:Overview) for precise and flexible view discovery. Use this tool when a user requests to list, search, or filter Tableau views on a site.
632
636
 
633
637
  **Supported Filter Fields and Operators**
@@ -653,7 +657,7 @@ Filter relative date periods:
653
657
  | workbookDescription | eq, in |
654
658
  | workbookName | eq, in |
655
659
 
656
- ${ft}
660
+ ${wt}
657
661
 
658
662
  **Example Usage:**
659
663
  - List all views on a site
@@ -664,7 +668,7 @@ Filter relative date periods:
664
668
  - List views created after January 1, 2023:
665
669
  filter: "createdAt:gt:2023-01-01T00:00:00Z"
666
670
  - List views with the name "Overview" in the "Finance" project and created after January 1, 2023:
667
- filter: "name:eq:Overview,projectName:eq:Finance,createdAt:gt:2023-01-01T00:00:00Z"`,paramsSchema:tp,annotations:{title:"List Views",readOnlyHint:!0,openWorldHint:!1},callback:async({filter:r,pageSize:o,limit:i},{requestId:n,authInfo:s})=>{let a=E(),d=r?qn(r):void 0;return await e.logAndExecute({requestId:n,authInfo:s,args:{},callback:async()=>new ep(await I({config:a,requestId:n,server:t,jwtScopes:["tableau:content:read"],authInfo:M(s),callback:async l=>await mt({pageConfig:{pageSize:o,limit:a.maxResultLimit?Math.min(a.maxResultLimit,i??Number.MAX_SAFE_INTEGER):i},getDataFn:async m=>{let{pagination:g,views:w}=await l.viewsMethods.queryViewsForSite({siteId:l.siteId,filter:d??"",includeUsageStatistics:!0,pageSize:m.pageSize,pageNumber:m.pageNumber});return{pagination:g,data:w}}})})),constrainSuccessResult:l=>rp({views:l,boundedContext:a.boundedContext})})}});return e};function rp({views:t,boundedContext:e}){if(t.length===0)return{type:"empty",message:"No views were found. Either none exist or you do not have permission to view them."};let{projectIds:r,workbookIds:o}=e;return r&&(t=t.filter(i=>i.project?.id?r.has(i.project.id):!1)),o&&(t=t.filter(i=>i.workbook?.id?o.has(i.workbook.id):!1)),t.length===0?{type:"empty",message:["The set of allowed views that can be queried is limited by the server configuration.","While views were found, they were all filtered out by the server configuration."].join(" ")}:{type:"success",result:t}}import{Err as op,Ok as ip}from"ts-results-es";import{z as sp}from"zod";var np={workbookId:sp.string()},Vn=t=>{let e=new O({server:t,name:"get-workbook",description:"Retrieves information about the specified workbook, including information about the views contained in the workbook.",paramsSchema:np,annotations:{title:"Get Workbook",readOnlyHint:!0,openWorldHint:!1},callback:async({workbookId:r},{requestId:o,authInfo:i})=>{let n=E();return await e.logAndExecute({requestId:o,authInfo:i,args:{workbookId:r},callback:async()=>{let s=await ge.isWorkbookAllowed({workbookId:r,restApiArgs:{config:n,requestId:o,server:t}});return s.allowed?new ip(await I({config:n,requestId:o,server:t,jwtScopes:["tableau:content:read"],authInfo:M(i),callback:async a=>{let d=s.content??await a.workbooksMethods.getWorkbook({workbookId:r,siteId:a.siteId});if(d.views){let l=await a.viewsMethods.queryViewsForWorkbook({workbookId:r,siteId:a.siteId,includeUsageStatistics:!0});d.views.view=l}return d}})):new op({type:"workbook-not-allowed",message:s.message})},constrainSuccessResult:s=>({type:"success",result:s}),getErrorText:s=>{switch(s.type){case"workbook-not-allowed":return s.message}}})}});return e};import{Ok as lp}from"ts-results-es";import{z as Ho}from"zod";import{z as Wo}from"zod";var Bn=Wo.enum(["createdAt","contentUrl","displayTabs","favoritesTotal","hasAlerts","hasExtracts","name","ownerDomain","ownerEmail","ownerName","projectName","sheetCount","size","subscriptionTotal","tags","updatedAt"]),ap={createdAt:["eq","gt","gte","lt","lte"],contentUrl:["eq","in"],displayTabs:["eq"],favoritesTotal:["eq","gt","gte","lt","lte"],hasAlerts:["eq"],hasExtracts:["eq"],name:["eq","in"],ownerDomain:["eq","in"],ownerEmail:["eq","in"],ownerName:["eq","in"],projectName:["eq","in"],sheetCount:["eq","gt","gte","lt","lte"],size:["eq","gt","gte","lt","lte"],subscriptionTotal:["eq","gt","gte","lt","lte"],tags:["eq","in"],updatedAt:["eq","gt","gte","lt","lte"]},DS=Wo.object({field:Bn,operator:Ge,value:Wo.string()});function zn(t){return ht({filterString:t,allowedOperatorsByField:ap,filterFieldSchema:Bn})}var cp={filter:Ho.string().optional(),pageSize:Ho.number().gt(0).optional(),limit:Ho.number().gt(0).optional()},Wn=t=>{let e=new O({server:t,name:"list-workbooks",description:`
671
+ filter: "name:eq:Overview,projectName:eq:Finance,createdAt:gt:2023-01-01T00:00:00Z"`,paramsSchema:Tp,annotations:{title:"List Views",readOnlyHint:!0,openWorldHint:!1},callback:async({filter:r,pageSize:o,limit:i},{requestId:n,authInfo:s})=>{let a=E(),c=r?Jn(r):void 0;return await e.logAndExecute({requestId:n,authInfo:s,args:{},callback:async()=>new wp(await I({config:a,requestId:n,server:t,jwtScopes:["tableau:content:read"],authInfo:N(s),callback:async l=>await yt({pageConfig:{pageSize:o,limit:a.maxResultLimit?Math.min(a.maxResultLimit,i??Number.MAX_SAFE_INTEGER):i},getDataFn:async p=>{let{pagination:g,views:b}=await l.viewsMethods.queryViewsForSite({siteId:l.siteId,filter:c??"",includeUsageStatistics:!0,pageSize:p.pageSize,pageNumber:p.pageNumber});return{pagination:g,data:b}}})})),constrainSuccessResult:l=>Ap({views:l,boundedContext:a.boundedContext})})}});return e};function Ap({views:t,boundedContext:e}){if(t.length===0)return{type:"empty",message:"No views were found. Either none exist or you do not have permission to view them."};let{projectIds:r,workbookIds:o}=e;return r&&(t=t.filter(i=>i.project?.id?r.has(i.project.id):!1)),o&&(t=t.filter(i=>i.workbook?.id?o.has(i.workbook.id):!1)),t.length===0?{type:"empty",message:["The set of allowed views that can be queried is limited by the server configuration.","While views were found, they were all filtered out by the server configuration."].join(" ")}:{type:"success",result:t}}import{Err as Ep,Ok as _p}from"ts-results-es";import{z as Sp}from"zod";var vp={workbookId:Sp.string()},Yn=t=>{let e=new O({server:t,name:"get-workbook",description:"Retrieves information about the specified workbook, including information about the views contained in the workbook.",paramsSchema:vp,annotations:{title:"Get Workbook",readOnlyHint:!0,openWorldHint:!1},callback:async({workbookId:r},{requestId:o,authInfo:i})=>{let n=E();return await e.logAndExecute({requestId:o,authInfo:i,args:{workbookId:r},callback:async()=>{let s=await be.isWorkbookAllowed({workbookId:r,restApiArgs:{config:n,requestId:o,server:t}});return s.allowed?new _p(await I({config:n,requestId:o,server:t,jwtScopes:["tableau:content:read"],authInfo:N(i),callback:async a=>{let c=s.content??await a.workbooksMethods.getWorkbook({workbookId:r,siteId:a.siteId});if(c.views){let l=await a.viewsMethods.queryViewsForWorkbook({workbookId:r,siteId:a.siteId,includeUsageStatistics:!0});c.views.view=l}return c}})):new Ep({type:"workbook-not-allowed",message:s.message})},constrainSuccessResult:s=>({type:"success",result:s}),getErrorText:s=>{switch(s.type){case"workbook-not-allowed":return s.message}}})}});return e};import{Ok as Rp}from"ts-results-es";import{z as Jo}from"zod";import{z as Ko}from"zod";var Xn=Ko.enum(["createdAt","contentUrl","displayTabs","favoritesTotal","hasAlerts","hasExtracts","name","ownerDomain","ownerEmail","ownerName","projectName","sheetCount","size","subscriptionTotal","tags","updatedAt"]),Cp={createdAt:["eq","gt","gte","lt","lte"],contentUrl:["eq","in"],displayTabs:["eq"],favoritesTotal:["eq","gt","gte","lt","lte"],hasAlerts:["eq"],hasExtracts:["eq"],name:["eq","in"],ownerDomain:["eq","in"],ownerEmail:["eq","in"],ownerName:["eq","in"],projectName:["eq","in"],sheetCount:["eq","gt","gte","lt","lte"],size:["eq","gt","gte","lt","lte"],subscriptionTotal:["eq","gt","gte","lt","lte"],tags:["eq","in"],updatedAt:["eq","gt","gte","lt","lte"]},uv=Ko.object({field:Xn,operator:Qe,value:Ko.string()});function ea(t){return Tt({filterString:t,allowedOperatorsByField:Cp,filterFieldSchema:Xn})}var xp={filter:Jo.string().optional(),pageSize:Jo.number().gt(0).optional(),limit:Jo.number().gt(0).optional()},ta=t=>{let e=new O({server:t,name:"list-workbooks",description:`
668
672
  Retrieves a list of workbooks on a Tableau site including their metadata such as name, description, and information about the views contained in the workbook. Supports optional filtering via field:operator:value expressions (e.g., name:eq:Superstore) for precise and flexible workbook discovery. Use this tool when a user requests to list, search, or filter Tableau workbooks on a site.
669
673
 
670
674
  **Supported Filter Fields and Operators**
@@ -687,7 +691,7 @@ Filter relative date periods:
687
691
  | tags | eq, in |
688
692
  | updatedAt | eq, gt, gte, lt, lte |
689
693
 
690
- ${ft}
694
+ ${wt}
691
695
 
692
696
  **Example Usage:**
693
697
  - List all workbooks on a site
@@ -698,18 +702,18 @@ Filter relative date periods:
698
702
  - List workbooks created after January 1, 2023:
699
703
  filter: "createdAt:gt:2023-01-01T00:00:00Z"
700
704
  - List workbooks with the name "Superstore" in the "Finance" project and created after January 1, 2023:
701
- filter: "name:eq:Superstore,projectName:eq:Finance,createdAt:gt:2023-01-01T00:00:00Z"`,paramsSchema:cp,annotations:{title:"List Workbooks",readOnlyHint:!0,openWorldHint:!1},callback:async({filter:r,pageSize:o,limit:i},{requestId:n,authInfo:s})=>{let a=E(),d=r?zn(r):void 0;return await e.logAndExecute({requestId:n,authInfo:s,args:{},callback:async()=>new lp(await I({config:a,requestId:n,server:t,jwtScopes:["tableau:content:read"],authInfo:M(s),callback:async l=>await mt({pageConfig:{pageSize:o,limit:a.maxResultLimit?Math.min(a.maxResultLimit,i??Number.MAX_SAFE_INTEGER):i},getDataFn:async m=>{let{pagination:g,workbooks:w}=await l.workbooksMethods.queryWorkbooksForSite({siteId:l.siteId,filter:d??"",pageSize:m.pageSize,pageNumber:m.pageNumber});return{pagination:g,data:w}}})})),constrainSuccessResult:l=>up({workbooks:l,boundedContext:a.boundedContext})})}});return e};function up({workbooks:t,boundedContext:e}){if(t.length===0)return{type:"empty",message:"No workbooks were found. Either none exist or you do not have permission to view them."};let{projectIds:r,workbookIds:o}=e;return r&&(t=t.filter(i=>i.project?.id?r.has(i.project.id):!1)),o&&(t=t.filter(i=>o.has(i.id))),t.length===0?{type:"empty",message:["The set of allowed workbooks that can be queried is limited by the server configuration.","While workbooks were found, they were all filtered out by the server configuration."].join(" ")}:{type:"success",result:t}}var Hn=[cn,pn,On,bn,yn,wn,An,En,hn,Vn,Mn,Fn,Wn,jn,sn];var ke="tableau-mcp",Wt=ii.version,Tr=`${ke}/${Wt}`,gt=class extends dp{name;version;constructor(){super({name:ke,version:Wt},{capabilities:{logging:{},tools:{}}}),this.name=ke,this.version=Wt}registerTools=()=>{for(let{name:e,description:r,paramsSchema:o,annotations:i,callback:n}of this._getToolsToRegister())this.tool(e,r,o,i,n)};registerRequestHandlers=()=>{this.server.setRequestHandler(pp,async e=>(Ke(this,e.params.level),{}))};_getToolsToRegister=()=>{let{includeTools:e,excludeTools:r}=E(),i=Hn.map(n=>n(this)).filter(n=>e.length>0?e.includes(n.name):r.length>0?!r.includes(n.name):!0);if(i.length===0)throw new Error(`
705
+ filter: "name:eq:Superstore,projectName:eq:Finance,createdAt:gt:2023-01-01T00:00:00Z"`,paramsSchema:xp,annotations:{title:"List Workbooks",readOnlyHint:!0,openWorldHint:!1},callback:async({filter:r,pageSize:o,limit:i},{requestId:n,authInfo:s})=>{let a=E(),c=r?ea(r):void 0;return await e.logAndExecute({requestId:n,authInfo:s,args:{},callback:async()=>new Rp(await I({config:a,requestId:n,server:t,jwtScopes:["tableau:content:read"],authInfo:N(s),callback:async l=>await yt({pageConfig:{pageSize:o,limit:a.maxResultLimit?Math.min(a.maxResultLimit,i??Number.MAX_SAFE_INTEGER):i},getDataFn:async p=>{let{pagination:g,workbooks:b}=await l.workbooksMethods.queryWorkbooksForSite({siteId:l.siteId,filter:c??"",pageSize:p.pageSize,pageNumber:p.pageNumber});return{pagination:g,data:b}}})})),constrainSuccessResult:l=>Ip({workbooks:l,boundedContext:a.boundedContext})})}});return e};function Ip({workbooks:t,boundedContext:e}){if(t.length===0)return{type:"empty",message:"No workbooks were found. Either none exist or you do not have permission to view them."};let{projectIds:r,workbookIds:o}=e;return r&&(t=t.filter(i=>i.project?.id?r.has(i.project.id):!1)),o&&(t=t.filter(i=>o.has(i.id))),t.length===0?{type:"empty",message:["The set of allowed workbooks that can be queried is limited by the server configuration.","While workbooks were found, they were all filtered out by the server configuration."].join(" ")}:{type:"success",result:t}}var ra=[Tn,Sn,Hn,xn,In,kn,Dn,Ln,Rn,Yn,Gn,Qn,ta,Zn,gn];var Pe="tableau-mcp",Jt=mi.version,Cr=`${Pe}/${Jt}`,Ze=class extends kp{name;version;_clientInfo;get clientInfo(){return this._clientInfo??this.server.getClientVersion()}constructor({clientInfo:e}={}){super({name:Pe,version:Jt},{capabilities:{logging:{},tools:{}}}),this.name=Pe,this.version=Jt,this._clientInfo=e}registerTools=()=>{for(let{name:e,description:r,paramsSchema:o,annotations:i,callback:n}of this._getToolsToRegister())this.tool(e,r,o,i,n)};registerRequestHandlers=()=>{this.server.setRequestHandler(Pp,async e=>(Xe(this,e.params.level),{}))};_getToolsToRegister=()=>{let{includeTools:e,excludeTools:r}=E(),i=ra.map(n=>n(this)).filter(n=>e.length>0?e.includes(n.name):r.length>0?!r.includes(n.name):!0);if(i.length===0)throw new Error(`
702
706
  No tools to register.
703
- Tools available = [${Or.join(", ")}].
707
+ Tools available = [${jr.join(", ")}].
704
708
  EXCLUDE_TOOLS = [${r.join(", ")}].
705
709
  INCLUDE_TOOLS = [${e.join(", ")}]
706
- `);return i}};import{StreamableHTTPServerTransport as Mp}from"@modelcontextprotocol/sdk/server/streamableHttp.js";import Np from"cors";import Ko from"express";import la,{existsSync as ca}from"fs";import Fp from"http";import Up from"https";function Gn(t,e,r){let o=t.headers["mcp-protocol-version"];if(!o){r();return}let i=["2025-06-18","2025-03-26","2024-11-05"];if(!i.includes(o)){e.status(400).json({jsonrpc:"2.0",error:{code:-32600,message:"Unsupported protocol version",data:{supported:i,requested:o}},id:null});return}r()}import{createPrivateKey as Pp,createPublicKey as Lp}from"crypto";import{readFileSync as Op}from"fs";function $n(t){t.get("/.well-known/oauth-authorization-server",(e,r)=>{let o=E().oauth.issuer;r.json({issuer:o,authorization_endpoint:`${o}/oauth/authorize`,token_endpoint:`${o}/oauth/token`,registration_endpoint:`${o}/oauth/register`,response_types_supported:["code"],grant_types_supported:["authorization_code","refresh_token","client_credentials"],code_challenge_methods_supported:["S256"],scopes_supported:[],token_endpoint_auth_methods_supported:["client_secret_basic"],subject_types_supported:["public"]})})}function Qn(t){t.get("/.well-known/oauth-protected-resource",(e,r)=>{let o=E().oauth.issuer;r.json({resource:`${o}/${ke}`,authorization_servers:[o],bearer_methods_supported:["header"]})})}import{compactDecrypt as mp}from"jose";import{Err as Ht,Ok as fp}from"ts-results-es";import{fromError as Kn}from"zod-validation-error";function Jn(t){return async(e,r,o)=>{let i=e.headers.authorization;if(!i||!i.startsWith("Bearer ")){if(e.method==="GET"&&e.headers.accept?.includes("text/event-stream")){r.writeHead(401,{"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive"}),r.write(`event: error
710
+ `);return i}};import{StreamableHTTPServerTransport as om}from"@modelcontextprotocol/sdk/server/streamableHttp.js";import{isInitializeRequest as im}from"@modelcontextprotocol/sdk/types.js";import sm from"cors";import ri from"express";import Ta,{existsSync as Aa}from"fs";import nm from"http";import am from"https";import{StreamableHTTPServerTransport as Dp}from"@modelcontextprotocol/sdk/server/streamableHttp.js";import{randomUUID as Lp}from"crypto";var Zo={},oa=({clientInfo:t})=>{let e=new Dp({sessionIdGenerator:()=>Lp(),onsessioninitialized:r=>{Zo[r]={transport:e,clientInfo:t}}});return e.onclose=()=>{e.sessionId&&Op(e.sessionId)},e},Yo=t=>Zo[t],Op=t=>{delete Zo[t]};function ia(t,e,r){let o=t.headers["mcp-protocol-version"];if(!o){r();return}let i=["2025-06-18","2025-03-26","2024-11-05"];if(!i.includes(o)){e.status(400).json({jsonrpc:"2.0",error:{code:-32600,message:"Unsupported protocol version",data:{supported:i,requested:o}},id:null});return}r()}import{createPrivateKey as em,createPublicKey as tm}from"crypto";import{readFileSync as rm}from"fs";function sa(t){t.get("/.well-known/oauth-authorization-server",(e,r)=>{let o=E().oauth.issuer;r.json({issuer:o,authorization_endpoint:`${o}/oauth/authorize`,token_endpoint:`${o}/oauth/token`,registration_endpoint:`${o}/oauth/register`,response_types_supported:["code"],grant_types_supported:["authorization_code","refresh_token","client_credentials"],code_challenge_methods_supported:["S256"],scopes_supported:[],token_endpoint_auth_methods_supported:["client_secret_basic","client_secret_post"],subject_types_supported:["public"]})})}function na(t){t.get("/.well-known/oauth-protected-resource",(e,r)=>{let o=E().oauth.issuer;r.json({resource:`${o}/${Pe}`,authorization_servers:[o],bearer_methods_supported:["header"]})})}import{compactDecrypt as Mp}from"jose";import{Err as Zt,Ok as Np}from"ts-results-es";import{fromError as aa}from"zod-validation-error";function la(t){return async(e,r,o)=>{let i=e.headers.authorization;if(!i||!i.startsWith("Bearer ")){if(e.method==="GET"&&e.headers.accept?.includes("text/event-stream")){r.writeHead(401,{"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive"}),r.write(`event: error
707
711
  `),r.write(`data: {"error": "unauthorized", "error_description": "Authorization required"}
708
712
 
709
- `),r.end();return}let a=`${e.protocol}://${e.get("host")}`;r.status(401).header("WWW-Authenticate",`Bearer realm="MCP", resource_metadata="${a}/.well-known/oauth-protected-resource"`).json({error:"unauthorized",error_description:"Authorization required. Use OAuth 2.1 flow."});return}let n=i.slice(7),s=await hp(n,t);if(s.isErr()){if(e.method==="GET"&&e.headers.accept?.includes("text/event-stream")){r.writeHead(401,{"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive"}),r.write(`event: error
713
+ `),r.end();return}let a=`${e.protocol}://${e.get("host")}`;r.status(401).header("WWW-Authenticate",`Bearer realm="MCP", resource_metadata="${a}/.well-known/oauth-protected-resource"`).json({error:"unauthorized",error_description:"Authorization required. Use OAuth 2.1 flow."});return}let n=i.slice(7),s=await Fp(n,t);if(s.isErr()){if(e.method==="GET"&&e.headers.accept?.includes("text/event-stream")){r.writeHead(401,{"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive"}),r.write(`event: error
710
714
  `),r.write(`data: {"error": "invalid_token", "error_description": "${s.error}"}
711
715
 
712
- `),r.end();return}r.status(401).json({error:"invalid_token",error_description:s.error});return}e.auth=s.value,o()}}async function hp(t,e){let r=E();try{let{plaintext:o}=await mp(t,e),i=JSON.parse(new TextDecoder().decode(o)),n=Po.safeParse(i);if(!n.success)return Ht(`Invalid access token: ${Kn(n.error).toString()}`);let{iss:s,aud:a,exp:d,clientId:l}=n.data;if(s!==r.oauth.issuer||a!==Gt||d<Math.floor(Date.now()/1e3))return new Ht("Invalid or expired access token");let c;if(r.auth==="oauth"){let m=Zs.safeParse(i);if(!m.success)return Ht(`Invalid access token: ${Kn(m.error).toString()}`);let{tableauAccessToken:g,tableauRefreshToken:w,tableauExpiresAt:f,tableauUserId:b,tableauServer:y,sub:S}=m.data;if(f<Math.floor(Date.now()/1e3))return new Ht("Invalid or expired access token");c={username:S,userId:b,server:y,accessToken:g,refreshToken:w}}else{let{tableauUserId:m,tableauServer:g,sub:w}=n.data;c={username:w,server:g,...m?{userId:m}:{}}}return fp({token:t,clientId:l,scopes:[],expiresAt:i.exp,extra:c})}catch{return new Ht("Invalid or expired access token")}}import{randomBytes as Go,randomUUID as Zn}from"crypto";import{fromError as bp}from"zod-validation-error";function $t(t,e,...r){return e>2147483647?setTimeout(()=>{$t(t,e-2147483647,...r)},2147483647):setTimeout(t,e,...r)}import{createHash as gp}from"crypto";function Ir(t){return gp("sha256").update(t).digest("base64url")}function kr(t){if(typeof t!="string")return!1;try{let e=new URL(t);return e.protocol==="https:"?!0:e.protocol==="http:"?e.hostname==="localhost"||e.hostname==="127.0.0.1":!!e.protocol.match(/^[a-zA-Z][a-zA-Z0-9+.-]*:$/)}catch{return!1}}function Yn(t,e){let r=E();t.get("/oauth/authorize",(o,i)=>{let n=Qs.safeParse(o.query);if(!n.success){i.status(400).json({error:"invalid_request",error_description:bp(n.error).toString()});return}let{clientId:s,redirectUri:a,responseType:d,codeChallenge:l,codeChallengeMethod:c,state:m}=n.data;if(d!=="code"){i.status(400).json({error:"unsupported_response_type",error_description:"Only authorization code flow is supported"});return}if(c!=="S256"){i.status(400).json({error:"invalid_request",error_description:"Only S256 code challenge method is supported"});return}if(!kr(a)){i.status(400).json({error:"invalid_request",error_description:`Invalid redirect URI: ${a}`});return}let g=Go(32).toString("hex"),w=Go(32).toString("hex"),f=Zn(),b=Math.floor(Math.random()*43)+22,y=Go(b).toString("hex"),S=Ir(y);e.set(w,{clientId:s,redirectUri:a,codeChallenge:l,state:m??"",tableauState:g,tableauClientId:f,tableauCodeVerifier:y}),$t(()=>e.delete(w),r.oauth.authzCodeTimeoutMs);let P=r.server||Dr,A=new URL(`${P}/oauth2/v1/auth`);A.searchParams.set("client_id",f),A.searchParams.set("code_challenge",S),A.searchParams.set("code_challenge_method","S256"),A.searchParams.set("response_type","code"),A.searchParams.set("redirect_uri",r.oauth.redirectUri),A.searchParams.set("state",`${w}:${g}`),A.searchParams.set("device_id",Zn()),A.searchParams.set("target_site",r.siteName),A.searchParams.set("device_name",yp(a,m??"")),A.searchParams.set("client_type","tableau-mcp"),i.redirect(A.toString())})}function yp(t,e){let r="tableau-mcp (Unknown agent)";try{let o=new URL(t);return o.protocol==="https:"||o.protocol==="http:"?t==="https://vscode.dev/redirect"&&new URL(e).protocol==="vscode:"?"tableau-mcp (VS Code)":r:o.protocol==="cursor:"?"tableau-mcp (Cursor)":`tableau-mcp (${o.protocol.slice(0,-1)})`}catch{return r}}import{randomBytes as Ap}from"crypto";import{Err as Ep,Ok as _p}from"ts-results-es";import{fromError as Sp}from"zod-validation-error";import{Zodios as Tp}from"@zodios/core";import{makeApi as wp}from"@zodios/core";import{z as se}from"zod";var Xn=se.discriminatedUnion("grant_type",[se.object({grant_type:se.literal("authorization_code"),code:se.string(),code_verifier:se.string(),redirect_uri:se.string(),client_id:se.string()}),se.object({grant_type:se.literal("refresh_token"),client_id:se.string(),refresh_token:se.string(),site_namespace:se.string()})]),ea=se.object({access_token:B("access_token"),expires_in:se.number().int().nonnegative(),refresh_token:B("refresh_token"),origin_host:B("origin_host")}).transform(t=>({accessToken:t.access_token,expiresInSeconds:t.expires_in,refreshToken:t.refresh_token,originHost:t.origin_host}));var ta=wp([{method:"post",path:"/oauth2/v1/token",alias:"token",response:ea,parameters:[{name:"body",type:"Body",schema:Xn}]}]);var ra=t=>new Tp(t,ta);async function Pr(t,e){return await ra(t).token(e,{headers:{"Content-Type":"application/x-www-form-urlencoded","User-Agent":Tr}})}function oa(t,e,r){let o=E();t.get("/Callback",async(i,n)=>{let s=Js.safeParse(i.query);if(!s.success){n.status(400).json({error:"invalid_request",error_description:Sp(s.error).toString()});return}let{error:a,code:d,state:l}=s.data;if(a){n.status(400).json({error:"access_denied",error_description:"User denied authorization"});return}try{let[c,m]=l?.split(":")??[],g=e.get(c);if(!g||g.tableauState!==m){n.status(400).json({error:"invalid_request",error_description:"Invalid state parameter"});return}let w=await Cp({server:o.server||Dr,code:d??"",redirectUri:o.oauth.redirectUri,clientId:g.tableauClientId,codeVerifier:g.tableauCodeVerifier});if(w.isErr()){n.status(400).json({error:"invalid_request",error_description:w.error});return}let{accessToken:f,refreshToken:b,expiresInSeconds:y,originHost:S}=w.value,P=new URL(`https://${S}`);if(o.server){let le=new URL(o.server);if(P.hostname!==le.hostname){n.status(400).json({error:"invalid_request",error_description:`Invalid origin host: ${S}. Expected: ${new URL(o.server).hostname}`});return}}let A=P.toString(),R=new He(A);R.setCredentials(f,"unknown user id");let x=await R.serverMethods.getCurrentServerSession();if(x.isErr()){x.error.type==="unauthorized"?n.status(401).json({error:"unauthorized",error_description:`Unable to get the Tableau server session. Error: ${JSON.stringify(x.error)}`}):n.status(500).json({error:"server_error",error_description:"Internal server error during authorization. Unable to get the Tableau server session. Contact your administrator."});return}let q=Ap(32).toString("hex");r.set(q,{clientId:g.clientId,redirectUri:g.redirectUri,codeChallenge:g.codeChallenge,user:x.value.user,server:A,tableauClientId:g.tableauClientId,tokens:{accessToken:f,refreshToken:b,expiresInSeconds:y},expiresAt:Math.floor((Date.now()+o.oauth.authzCodeTimeoutMs)/1e3)}),e.delete(c);let U=new URL(g.redirectUri);U.searchParams.set("code",q),U.searchParams.set("state",g.state),n.redirect(U.toString())}catch(c){console.error("OAuth callback error:",c),n.status(500).json({error:"server_error",error_description:"Internal server error during authorization. Contact your administrator."})}})}async function Cp({server:t,code:e,redirectUri:r,clientId:o,codeVerifier:i}){try{let n=await Pr(t,{grant_type:"authorization_code",code:e,redirect_uri:r,client_id:o,code_verifier:i});return _p(n)}catch{return Ep("Failed to exchange authorization code")}}import vp from"express";function ia(t){t.post("/oauth/register",vp.json(),(e,r)=>{let{redirect_uris:o}=e.body,i=[];if(o&&Array.isArray(o))for(let n of o){if(!kr(n)){r.status(400).json({error:"invalid_redirect_uri",error_description:`Invalid redirect URI: ${n}`});return}i.push(n)}r.json({client_id:"mcp-public-client",redirect_uris:i,grant_types:["authorization_code","client_credentials"],response_types:["code"],token_endpoint_auth_method:"client_secret_basic",application_type:"native"})})}import{randomBytes as sa,timingSafeEqual as Rp}from"crypto";import{CompactEncrypt as na}from"jose";import{Err as De,Ok as Qo}from"ts-results-es";import{fromError as xp}from"zod-validation-error";function aa(t,e,r,o){let i=E();t.post("/oauth/token",async(n,s)=>{let a=Ks.safeParse(n.body);if(!a.success){s.status(400).json({error:"invalid_request",error_description:xp(a.error).toString()});return}let d=Dp({required:a.data.grantType==="client_credentials",clientId:a.data.clientId,clientSecret:a.data.clientSecret,clientIdSecretPairs:E().oauth.clientIdSecretPairs,authorizationHeader:n.headers.authorization});if(d.isErr()){s.status(401).json({error:"invalid_client",error_description:d.error});return}try{switch(a.data.grantType){case"authorization_code":{let{code:l,codeVerifier:c}=a.data,m=e.get(l);if(!m||m.expiresAt<Math.floor(Date.now()/1e3)){e.delete(l),s.status(400).json({error:"invalid_grant",error_description:"Invalid or expired authorization code"});return}if(Ir(c)!==m.codeChallenge){s.status(400).json({error:"invalid_grant",error_description:"Invalid code verifier"});return}let w=sa(32).toString("hex"),f=await $o(m,o);r.set(w,{user:m.user,server:m.server,clientId:m.clientId,tokens:m.tokens,expiresAt:Math.floor((Date.now()+i.oauth.refreshTokenTimeoutMs)/1e3),tableauClientId:m.tableauClientId}),$t(()=>r.delete(w),i.oauth.refreshTokenTimeoutMs),e.delete(l),s.json({access_token:f,token_type:"Bearer",expires_in:i.oauth.accessTokenTimeoutMs/1e3,refresh_token:w});return}case"client_credentials":{let l=await Ip({clientId:d.value.clientId,server:i.server},o);s.json({access_token:l,token_type:"Bearer",expires_in:i.oauth.accessTokenTimeoutMs/1e3});return}case"refresh_token":{let{refreshToken:l}=a.data,c=r.get(l);if(!c||c.expiresAt<Math.floor(Date.now()/1e3)){r.delete(l),s.status(400).json({error:"invalid_grant",error_description:"Invalid or expired refresh token"});return}let m,{refreshToken:g}=c.tokens,w=await kp(c.server,g,c.tableauClientId);if(w.isErr())m=await $o({user:c.user,clientId:c.clientId,server:c.server,tokens:c.tokens},o);else{let{accessToken:b,refreshToken:y,expiresInSeconds:S}=w.value;m=await $o({user:c.user,clientId:c.clientId,server:c.server,tokens:{accessToken:b,refreshToken:y,expiresInSeconds:S}},o)}r.delete(l);let f=sa(32).toString("hex");r.set(f,{user:c.user,server:c.server,clientId:c.clientId,tokens:c.tokens,expiresAt:Math.floor((Date.now()+i.oauth.refreshTokenTimeoutMs)/1e3),tableauClientId:c.tableauClientId}),s.json({access_token:m,token_type:"Bearer",expires_in:i.oauth.accessTokenTimeoutMs/1e3,refresh_token:f});return}}}catch(l){console.error("Token endpoint error:",l),s.status(500).json({error:"server_error",error_description:"Internal server error"});return}})}async function $o(t,e){let r=E(),o=JSON.stringify({sub:t.user.name,clientId:t.clientId,tableauServer:t.server,tableauUserId:t.user.id,iat:Math.floor(Date.now()/1e3),exp:Math.floor((Date.now()+r.oauth.accessTokenTimeoutMs)/1e3),aud:Gt,iss:r.oauth.issuer,...r.auth==="oauth"?{tableauAccessToken:t.tokens.accessToken,tableauRefreshToken:t.tokens.refreshToken,tableauExpiresAt:Math.floor(Date.now()/1e3)+t.tokens.expiresInSeconds,tableauUserId:t.user.id}:{}});return await new na(new TextEncoder().encode(o)).setProtectedHeader({alg:"RSA-OAEP-256",enc:"A256GCM"}).encrypt(e)}async function Ip(t,e){let r=E(),o=JSON.stringify({sub:t.clientId,clientId:t.clientId,tableauServer:t.server,iat:Math.floor(Date.now()/1e3),exp:Math.floor((Date.now()+r.oauth.accessTokenTimeoutMs)/1e3),aud:Gt,iss:r.oauth.issuer});return await new na(new TextEncoder().encode(o)).setProtectedHeader({alg:"RSA-OAEP-256",enc:"A256GCM"}).encrypt(e)}async function kp(t,e,r){try{let o=await Pr(t,{grant_type:"refresh_token",refresh_token:e,client_id:r,site_namespace:""});return Qo(o)}catch{return De("Failed to exchange refresh token")}}function Dp({required:t,clientId:e,clientSecret:r,clientIdSecretPairs:o,authorizationHeader:i}){if(!e&&!r&&t){if(!i)return De("Authorization header is required");let[l,c]=i.split(" ");if(l!=="Basic")return De("Invalid authorization type");if([e,r]=Buffer.from(c,"base64").toString().split(":"),!e||!r)return De("Invalid client credentials")}if(!t)return Qo({clientId:""});if(!e)return De("Client ID is required");if(!r)return De("Client secret is required");let n=o?.[e];if(!n||r.length!==n.length)return De("Invalid client credentials");let s=new TextEncoder,a=s.encode(r),d=s.encode(n);return a.byteLength!==d.byteLength||!Rp(a,d)?De("Invalid client credentials"):Qo({clientId:e})}var Dr="https://online.tableau.com",Gt="tableau-mcp-server",Lr=class{config=E();pendingAuthorizations=new Map;authorizationCodes=new Map;refreshTokens=new Map;privateKey;publicKey;constructor(){this.privateKey=this.getPrivateKey(),this.publicKey=Lp(this.privateKey)}get authMiddleware(){return Jn(this.privateKey)}setupRoutes(e){$n(e),Qn(e),ia(e),Yn(e,this.pendingAuthorizations),oa(e,this.pendingAuthorizations,this.authorizationCodes),aa(e,this.authorizationCodes,this.refreshTokens,this.publicKey)}getPrivateKey(){let e=this.config.oauth.jwePrivateKey.replace(/\\n/g,`
713
- `);if(!e)try{e=Op(this.config.oauth.jwePrivateKeyPath,"utf8")}catch{throw new Error("Failed to read private key file")}try{return Pp({key:e,format:"pem",passphrase:this.config.oauth.jwePrivateKeyPassphrase})}catch{throw new Error("Failed to create private key")}}};async function da({basePath:t,config:e,logLevel:r}){let o=Ko();o.use(Ko.json()),o.use(Ko.urlencoded()),o.use(Np({origin:e.corsOriginConfig,credentials:!0,allowedHeaders:["Content-Type","Authorization","Cache-Control","Accept","MCP-Protocol-Version"],exposedHeaders:["mcp-session-id","x-session-id"]}));let i=[];if(e.oauth.enabled){let l=new Lr;l.setupRoutes(o),i.push(l.authMiddleware),i.push(Gn)}let n=`/${t}`;if(o.post(n,...i,d),o.get(n,...i,ua),o.delete(n,...i,ua),!!!(e.sslKey&&e.sslCert))return new Promise(l=>{let c=Fp.createServer(o).listen(e.httpPort,()=>l({url:`http://localhost:${e.httpPort}/${t}`,app:o,server:c}))});if(!ca(e.sslKey))throw new Error("SSL key file does not exist");if(!ca(e.sslCert))throw new Error("SSL cert file does not exist");let a={key:la.readFileSync(e.sslKey),cert:la.readFileSync(e.sslCert)};return new Promise(l=>{let c=Up.createServer(a,o).listen(e.httpPort,()=>l({url:`https://localhost:${e.httpPort}/${t}`,app:o,server:c}))});async function d(l,c){try{let m=new gt,g=new Mp({sessionIdGenerator:void 0});c.on("close",()=>{g.close(),m.close()}),m.registerTools(),m.registerRequestHandlers(),await m.connect(g),Ke(m,r),await g.handleRequest(l,c,l.body)}catch(m){console.error("Error handling MCP request:",m),c.headersSent||c.status(500).json({jsonrpc:"2.0",error:{code:-32603,message:"Internal server error"},id:null})}}}async function ua(t,e){e.writeHead(405).end(JSON.stringify({jsonrpc:"2.0",error:{code:-32e3,message:"Method not allowed."},id:null}))}async function Vp(){jp.config();let t=E(),e=ti(t.defaultLogLevel)?t.defaultLogLevel:"debug";switch(t.enableServerLogging&&ri(new Kt({logDirectory:t.serverLogDirectory})),t.transport){case"stdio":{let r=new gt;r.registerTools(),r.registerRequestHandlers();let o=new qp;await r.connect(o),Ke(r,e),de.info(r,`${r.name} v${r.version} running on stdio`);break}case"http":{let{url:r}=await da({basePath:ke,config:t,logLevel:e});t.oauth.enabled||console.warn('\u26A0\uFE0F TRANSPORT is "http" but OAuth is disabled! Your MCP server may not be protected from unauthorized access! By having explicitly disabled OAuth by setting the DANGEROUSLY_DISABLE_OAUTH environment variable to "true", you accept any and all risks associated with this decision.'),console.log(`${ke} v${Wt} stateless streamable HTTP server available at ${r}`);break}}t.disableLogMasking&&Le("\u26A0\uFE0F Log masking is disabled!")}try{await Vp()}catch(t){Le(`Fatal error when starting the server: ${W(t)}`),process.exit(1)}
716
+ `),r.end();return}r.status(401).json({error:"invalid_token",error_description:s.error});return}e.auth=s.value,o()}}async function Fp(t,e){let r=E();try{let{plaintext:o}=await Mp(t,e),i=JSON.parse(new TextDecoder().decode(o)),n=Fo.safeParse(i);if(!n.success)return Zt(`Invalid access token: ${aa(n.error).toString()}`);let{iss:s,aud:a,exp:c,clientId:l}=n.data;if(s!==r.oauth.issuer||a!==Yt||c<Math.floor(Date.now()/1e3))return new Zt("Invalid or expired access token");let u;if(r.auth==="oauth"){let p=cn.safeParse(i);if(!p.success)return Zt(`Invalid access token: ${aa(p.error).toString()}`);let{tableauAccessToken:g,tableauRefreshToken:b,tableauExpiresAt:f,tableauUserId:y,tableauServer:w,sub:v}=p.data;if(f<Math.floor(Date.now()/1e3))return new Zt("Invalid or expired access token");u={username:v,userId:y,server:w,accessToken:g,refreshToken:b}}else{let{tableauUserId:p,tableauServer:g,sub:b}=n.data;u={username:b,server:g,...p?{userId:p}:{}}}return Np({token:t,clientId:l,scopes:[],expiresAt:i.exp,extra:u})}catch{return new Zt("Invalid or expired access token")}}import{randomBytes as Xo,randomUUID as ca}from"crypto";import{fromError as qp}from"zod-validation-error";function Xt(t,e,...r){return e>2147483647?setTimeout(()=>{Xt(t,e-2147483647,...r)},2147483647):setTimeout(t,e,...r)}import{createHash as Up}from"crypto";function Mr(t){return Up("sha256").update(t).digest("base64url")}function Nr(t){if(typeof t!="string")return!1;try{let e=new URL(t);return e.protocol==="https:"?!0:e.protocol==="http:"?e.hostname==="localhost"||e.hostname==="127.0.0.1":!!e.protocol.match(/^[a-zA-Z][a-zA-Z0-9+.-]*:$/)}catch{return!1}}function ua(t,e){let r=E();t.get("/oauth/authorize",(o,i)=>{let n=nn.safeParse(o.query);if(!n.success){i.status(400).json({error:"invalid_request",error_description:qp(n.error).toString()});return}let{clientId:s,redirectUri:a,responseType:c,codeChallenge:l,codeChallengeMethod:u,state:p}=n.data;if(c!=="code"){i.status(400).json({error:"unsupported_response_type",error_description:"Only authorization code flow is supported"});return}if(u!=="S256"){i.status(400).json({error:"invalid_request",error_description:"Only S256 code challenge method is supported"});return}if(!Nr(a)){i.status(400).json({error:"invalid_request",error_description:`Invalid redirect URI: ${a}`});return}let g=Xo(32).toString("hex"),b=Xo(32).toString("hex"),f=ca(),y=Math.floor(Math.random()*43)+22,w=Xo(y).toString("hex"),v=Mr(w);e.set(b,{clientId:s,redirectUri:a,codeChallenge:l,state:p??"",tableauState:g,tableauClientId:f,tableauCodeVerifier:w}),Xt(()=>e.delete(b),r.oauth.authzCodeTimeoutMs);let D=r.server||Fr,A=new URL(`${D}/oauth2/v1/auth`);A.searchParams.set("client_id",f),A.searchParams.set("code_challenge",v),A.searchParams.set("code_challenge_method","S256"),A.searchParams.set("response_type","code"),A.searchParams.set("redirect_uri",r.oauth.redirectUri),A.searchParams.set("state",`${b}:${g}`),A.searchParams.set("device_id",ca()),A.searchParams.set("target_site",r.siteName),A.searchParams.set("device_name",jp(a,p??"")),A.searchParams.set("client_type","tableau-mcp"),i.redirect(A.toString())})}function jp(t,e){let r="tableau-mcp (Unknown agent)";try{let o=new URL(t);return o.protocol==="https:"||o.protocol==="http:"?t==="https://vscode.dev/redirect"&&new URL(e).protocol==="vscode:"?"tableau-mcp (VS Code)":r:o.protocol==="cursor:"?"tableau-mcp (Cursor)":`tableau-mcp (${o.protocol.slice(0,-1)})`}catch{return r}}import{randomBytes as zp}from"crypto";import{Err as Wp,Ok as Hp}from"ts-results-es";import{fromError as Gp}from"zod-validation-error";import{Zodios as Bp}from"@zodios/core";import{makeApi as Vp}from"@zodios/core";import{z as ie}from"zod";var da=ie.discriminatedUnion("grant_type",[ie.object({grant_type:ie.literal("authorization_code"),code:ie.string(),code_verifier:ie.string(),redirect_uri:ie.string(),client_id:ie.string()}),ie.object({grant_type:ie.literal("refresh_token"),client_id:ie.string(),refresh_token:ie.string(),site_namespace:ie.string()})]),pa=ie.object({access_token:B("access_token"),expires_in:ie.number().int().nonnegative(),refresh_token:B("refresh_token"),origin_host:B("origin_host")}).transform(t=>({accessToken:t.access_token,expiresInSeconds:t.expires_in,refreshToken:t.refresh_token,originHost:t.origin_host}));var ma=Vp([{method:"post",path:"/oauth2/v1/token",alias:"token",response:pa,parameters:[{name:"body",type:"Body",schema:da}]}]);var fa=t=>new Bp(t,ma);async function Ur(t,e){return await fa(t).token(e,{headers:{"Content-Type":"application/x-www-form-urlencoded","User-Agent":Cr}})}function ha(t,e,r){let o=E();t.get("/Callback",async(i,n)=>{let s=ln.safeParse(i.query);if(!s.success){n.status(400).json({error:"invalid_request",error_description:Gp(s.error).toString()});return}let{error:a,code:c,state:l}=s.data;if(a){n.status(400).json({error:"access_denied",error_description:"User denied authorization"});return}try{let[u,p]=l?.split(":")??[],g=e.get(u);if(!g||g.tableauState!==p){n.status(400).json({error:"invalid_request",error_description:"Invalid state parameter"});return}let b=await $p({server:o.server||Fr,code:c??"",redirectUri:o.oauth.redirectUri,clientId:g.tableauClientId,codeVerifier:g.tableauCodeVerifier});if(b.isErr()){n.status(400).json({error:"invalid_request",error_description:b.error});return}let{accessToken:f,refreshToken:y,expiresInSeconds:w,originHost:v}=b.value,D=new URL(`https://${v}`);if(o.server){let ae=new URL(o.server);if(D.hostname!==ae.hostname){n.status(400).json({error:"invalid_request",error_description:`Invalid origin host: ${v}. Expected: ${new URL(o.server).hostname}`});return}}let A=D.toString(),x=new bt(A);x.setCredentials(f,"unknown user id");let R=await x.serverMethods.getCurrentServerSession();if(R.isErr()){R.error.type==="unauthorized"?n.status(401).json({error:"unauthorized",error_description:`Unable to get the Tableau server session. Error: ${JSON.stringify(R.error)}`}):n.status(500).json({error:"server_error",error_description:"Internal server error during authorization. Unable to get the Tableau server session. Contact your administrator."});return}let j=zp(32).toString("hex");r.set(j,{clientId:g.clientId,redirectUri:g.redirectUri,codeChallenge:g.codeChallenge,user:R.value.user,server:A,tableauClientId:g.tableauClientId,tokens:{accessToken:f,refreshToken:y,expiresInSeconds:w},expiresAt:Math.floor((Date.now()+o.oauth.authzCodeTimeoutMs)/1e3)}),e.delete(u);let F=new URL(g.redirectUri);F.searchParams.set("code",j),F.searchParams.set("state",g.state),n.redirect(F.toString())}catch(u){console.error("OAuth callback error:",u),n.status(500).json({error:"server_error",error_description:"Internal server error during authorization. Contact your administrator."})}})}async function $p({server:t,code:e,redirectUri:r,clientId:o,codeVerifier:i}){try{let n=await Ur(t,{grant_type:"authorization_code",code:e,redirect_uri:r,client_id:o,code_verifier:i});return Hp(n)}catch{return Wp("Failed to exchange authorization code")}}import Qp from"express";function ga(t){t.post("/oauth/register",Qp.json(),(e,r)=>{let{redirect_uris:o}=e.body,i=[];if(o&&Array.isArray(o))for(let s of o){if(!Nr(s)){r.status(400).json({error:"invalid_redirect_uri",error_description:`Invalid redirect URI: ${s}`});return}i.push(s)}let{token_endpoint_auth_method:n}=e.body;(!n||typeof n!="string"||!["client_secret_basic","client_secret_post"].includes(n))&&(n="client_secret_basic"),r.json({client_id:"mcp-public-client",redirect_uris:i,grant_types:["authorization_code","client_credentials"],response_types:["code"],token_endpoint_auth_method:n,application_type:"native"})})}import{randomBytes as ba,timingSafeEqual as Kp}from"crypto";import{CompactEncrypt as ya}from"jose";import{Err as De,Ok as ti}from"ts-results-es";import{fromError as Jp}from"zod-validation-error";function wa(t,e,r,o){let i=E();t.post("/oauth/token",async(n,s)=>{let a=an.safeParse(n.body);if(!a.success){s.status(400).json({error:"invalid_request",error_description:Jp(a.error).toString()});return}let c=Xp({required:a.data.grantType==="client_credentials",clientId:a.data.clientId,clientSecret:a.data.clientSecret,clientIdSecretPairs:E().oauth.clientIdSecretPairs,authorizationHeader:n.headers.authorization});if(c.isErr()){s.status(401).json({error:"invalid_client",error_description:c.error});return}try{switch(a.data.grantType){case"authorization_code":{let{code:l,codeVerifier:u}=a.data,p=e.get(l);if(!p||p.expiresAt<Math.floor(Date.now()/1e3)){e.delete(l),s.status(400).json({error:"invalid_grant",error_description:"Invalid or expired authorization code"});return}if(Mr(u)!==p.codeChallenge){s.status(400).json({error:"invalid_grant",error_description:"Invalid code verifier"});return}let b=ba(32).toString("hex"),f=await ei(p,o);r.set(b,{user:p.user,server:p.server,clientId:p.clientId,tokens:p.tokens,expiresAt:Math.floor((Date.now()+i.oauth.refreshTokenTimeoutMs)/1e3),tableauClientId:p.tableauClientId}),Xt(()=>r.delete(b),i.oauth.refreshTokenTimeoutMs),e.delete(l),s.json({access_token:f,token_type:"Bearer",expires_in:i.oauth.accessTokenTimeoutMs/1e3,refresh_token:b});return}case"client_credentials":{let l=await Zp({clientId:c.value.clientId,server:i.server},o);s.json({access_token:l,token_type:"Bearer",expires_in:i.oauth.accessTokenTimeoutMs/1e3});return}case"refresh_token":{let{refreshToken:l}=a.data,u=r.get(l);if(!u||u.expiresAt<Math.floor(Date.now()/1e3)){r.delete(l),s.status(400).json({error:"invalid_grant",error_description:"Invalid or expired refresh token"});return}let p,{refreshToken:g}=u.tokens,b=await Yp(u.server,g,u.tableauClientId);if(b.isErr())p=await ei({user:u.user,clientId:u.clientId,server:u.server,tokens:u.tokens},o);else{let{accessToken:y,refreshToken:w,expiresInSeconds:v}=b.value;p=await ei({user:u.user,clientId:u.clientId,server:u.server,tokens:{accessToken:y,refreshToken:w,expiresInSeconds:v}},o)}r.delete(l);let f=ba(32).toString("hex");r.set(f,{user:u.user,server:u.server,clientId:u.clientId,tokens:u.tokens,expiresAt:Math.floor((Date.now()+i.oauth.refreshTokenTimeoutMs)/1e3),tableauClientId:u.tableauClientId}),s.json({access_token:p,token_type:"Bearer",expires_in:i.oauth.accessTokenTimeoutMs/1e3,refresh_token:f});return}}}catch(l){console.error("Token endpoint error:",l),s.status(500).json({error:"server_error",error_description:"Internal server error"});return}})}async function ei(t,e){let r=E(),o=JSON.stringify({sub:t.user.name,clientId:t.clientId,tableauServer:t.server,tableauUserId:t.user.id,iat:Math.floor(Date.now()/1e3),exp:Math.floor((Date.now()+r.oauth.accessTokenTimeoutMs)/1e3),aud:Yt,iss:r.oauth.issuer,...r.auth==="oauth"?{tableauAccessToken:t.tokens.accessToken,tableauRefreshToken:t.tokens.refreshToken,tableauExpiresAt:Math.floor(Date.now()/1e3)+t.tokens.expiresInSeconds,tableauUserId:t.user.id}:{}});return await new ya(new TextEncoder().encode(o)).setProtectedHeader({alg:"RSA-OAEP-256",enc:"A256GCM"}).encrypt(e)}async function Zp(t,e){let r=E(),o=JSON.stringify({sub:t.clientId,clientId:t.clientId,tableauServer:t.server,iat:Math.floor(Date.now()/1e3),exp:Math.floor((Date.now()+r.oauth.accessTokenTimeoutMs)/1e3),aud:Yt,iss:r.oauth.issuer});return await new ya(new TextEncoder().encode(o)).setProtectedHeader({alg:"RSA-OAEP-256",enc:"A256GCM"}).encrypt(e)}async function Yp(t,e,r){try{let o=await Ur(t,{grant_type:"refresh_token",refresh_token:e,client_id:r,site_namespace:""});return ti(o)}catch{return De("Failed to exchange refresh token")}}function Xp({required:t,clientId:e,clientSecret:r,clientIdSecretPairs:o,authorizationHeader:i}){if(!e&&!r&&t){if(!i)return De("Authorization header is required");let[l,u]=i.split(" ");if(l!=="Basic")return De("Invalid authorization type");if([e,r]=Buffer.from(u,"base64").toString().split(":"),!e||!r)return De("Invalid client credentials")}if(!t)return ti({clientId:""});if(!e)return De("Client ID is required");if(!r)return De("Client secret is required");let n=o?.[e];if(!n||r.length!==n.length)return De("Invalid client credentials");let s=new TextEncoder,a=s.encode(r),c=s.encode(n);return a.byteLength!==c.byteLength||!Kp(a,c)?De("Invalid client credentials"):ti({clientId:e})}var Fr="https://online.tableau.com",Yt="tableau-mcp-server",qr=class{config=E();pendingAuthorizations=new Map;authorizationCodes=new Map;refreshTokens=new Map;privateKey;publicKey;constructor(){this.privateKey=this.getPrivateKey(),this.publicKey=tm(this.privateKey)}get authMiddleware(){return la(this.privateKey)}setupRoutes(e){sa(e),na(e),ga(e),ua(e,this.pendingAuthorizations),ha(e,this.pendingAuthorizations,this.authorizationCodes),wa(e,this.authorizationCodes,this.refreshTokens,this.publicKey)}getPrivateKey(){let e=this.config.oauth.jwePrivateKey.replace(/\\n/g,`
717
+ `);if(!e)try{e=rm(this.config.oauth.jwePrivateKeyPath,"utf8")}catch{throw new Error("Failed to read private key file")}try{return em({key:e,format:"pem",passphrase:this.config.oauth.jwePrivateKeyPassphrase})}catch{throw new Error("Failed to create private key")}}};var oi="mcp-session-id";async function va({basePath:t,config:e,logLevel:r}){let o=ri();o.use(ri.json()),o.use(ri.urlencoded()),o.use(sm({origin:e.corsOriginConfig,credentials:!0,allowedHeaders:["Content-Type","Authorization","Cache-Control","Accept","MCP-Protocol-Version"],exposedHeaders:[oi,"x-session-id"]})),e.trustProxyConfig!==null&&o.set("trust proxy",e.trustProxyConfig);let i=[];if(e.oauth.enabled){let l=new qr;l.setupRoutes(o),i.push(l.authMiddleware),i.push(ia)}let n=`/${t}`;if(o.post(n,...i,c),o.get(n,...i,e.disableSessionManagement?_a:Sa),o.delete(n,...i,e.disableSessionManagement?_a:Sa),!!!(e.sslKey&&e.sslCert))return new Promise(l=>{let u=nm.createServer(o).listen(e.httpPort,()=>l({url:`http://localhost:${e.httpPort}/${t}`,app:o,server:u}))});if(!Aa(e.sslKey))throw new Error("SSL key file does not exist");if(!Aa(e.sslCert))throw new Error("SSL cert file does not exist");let a={key:Ta.readFileSync(e.sslKey),cert:Ta.readFileSync(e.sslCert)};return new Promise(l=>{let u=am.createServer(a,o).listen(e.httpPort,()=>l({url:`https://localhost:${e.httpPort}/${t}`,app:o,server:u}))});async function c(l,u){try{let p;if(e.disableSessionManagement){let g=new Ze;p=new om({sessionIdGenerator:void 0}),u.on("close",()=>{p.close(),g.close()}),await Ea(g,p,r)}else{let g=l.headers[oi],b;if(g&&(b=Yo(g)))p=b.transport;else if(!g&&im(l.body)){let f=l.body.params.clientInfo;p=oa({clientInfo:f});let y=new Ze({clientInfo:f});await Ea(y,p,r)}else{u.status(400).json({jsonrpc:"2.0",error:{code:-32e3,message:"Bad Request: No valid session ID provided"},id:null});return}}await p.handleRequest(l,u,l.body)}catch(p){console.error("Error handling MCP request:",p),u.headersSent||u.status(500).json({jsonrpc:"2.0",error:{code:-32603,message:"Internal server error"},id:null})}}}async function Ea(t,e,r){t.registerTools(),t.registerRequestHandlers(),await t.connect(e),Xe(t,r)}async function _a(t,e){e.writeHead(405).end(JSON.stringify({jsonrpc:"2.0",error:{code:-32e3,message:"Method not allowed."},id:null}))}async function Sa(t,e){let r=t.headers[oi],o;if(!r||!(o=Yo(r))){e.status(400).send("Invalid or missing session ID");return}await o.transport.handleRequest(t,e)}async function um(){cm.config();let t=E(),e=ui(t.defaultLogLevel)?t.defaultLogLevel:"debug";switch(t.enableServerLogging&&di(new tr({logDirectory:t.serverLogDirectory})),t.transport){case"stdio":{let r=new Ze;r.registerTools(),r.registerRequestHandlers();let o=new lm;await r.connect(o),Xe(r,e),ue.info(r,`${r.name} v${r.version} running on stdio`);break}case"http":{let{url:r}=await va({basePath:Pe,config:t,logLevel:e});t.oauth.enabled||console.warn('\u26A0\uFE0F TRANSPORT is "http" but OAuth is disabled! Your MCP server may not be protected from unauthorized access! By having explicitly disabled OAuth by setting the DANGEROUSLY_DISABLE_OAUTH environment variable to "true", you accept any and all risks associated with this decision.'),console.log(`${Pe} v${Jt} ${t.disableSessionManagement?"stateless ":""}streamable HTTP server available at ${r}`);break}}t.disableLogMasking&&Me("\u26A0\uFE0F Log masking is disabled!")}try{await um()}catch(t){Me(`Fatal error when starting the server: ${W(t)}`),process.exit(1)}
714
718
  /* v8 ignore file -- @preserve */
715
719
  //# sourceMappingURL=index.js.map