{"version":3,"file":"qscheck.cjs","sources":["../../../src/utils/qscheck.ts"],"sourcesContent":["import { type DataSourceInstanceSettings, type DataSourceJsonData } from '@grafana/data';\n\ninterface JsonData extends DataSourceJsonData {\n  oauthPassThru?: unknown; // we do not assume boolean, to be more robust\n  azureCredentials?: {\n    authType?: unknown;\n  };\n}\n\nfunction isOauthEnabled(ds: DataSourceInstanceSettings<JsonData>): boolean {\n  const oauth = ds.jsonData.oauthPassThru;\n  // we are working with json-data here, the content may not necessarily be a boolean,\n  // so we do this in a careful way.\n  if (oauth === undefined) {\n    return false;\n  }\n\n  if (oauth === false) {\n    return false;\n  }\n\n  if (oauth === true) {\n    return true;\n  }\n\n  // for us it is safer to assume true when there is some weird value used in the jsondata.\n  return true;\n}\n\ntype DSSettings = DataSourceInstanceSettings<JsonData>;\n\nfunction isProblematicAzureAuth(ds: DSSettings): boolean {\n  return ds.jsonData.azureCredentials?.authType === 'currentuser';\n}\n\ntype AllowedTypes = {\n  types: string[];\n};\n\n// TODO: consider using a data-validation library\nfunction parseAllowedTypes(data: unknown): AllowedTypes {\n  // we want to be safe, this should never crash\n  if (data != null && typeof data === 'object' && 'types' in data && Array.isArray(data.types)) {\n    // typescript infers the array as any[], not unknown[], we need to correct this to have\n    // typescript protect us.\n    const types: unknown[] = data.types;\n\n    if (types.every((x) => typeof x === 'string')) {\n      return { types };\n    } else {\n      console.error('qscheck.parseFlags: non-string item in allowed');\n      return { types: [] };\n    }\n  } else {\n    console.error('qscheck.parseFlags: invalid data');\n    return { types: [] };\n  }\n}\n\nexport function isQueryServiceCompatible(datasources: DSSettings[], allowedTypes: unknown) {\n  if (datasources.length === 0) {\n    // note: this probably means something went wrong,\n    // we should not have no-queries. still,\n    // in this case we take the safer choice,\n    // and say no to query service.\n    return false;\n  }\n\n  const at = parseAllowedTypes(allowedTypes);\n  if (!areDataSourceTypesAllowed(datasources, new Set(at.types))) {\n    return false;\n  }\n\n  for (const ds of datasources) {\n    if (isOauthEnabled(ds)) {\n      return false;\n    }\n\n    if (isProblematicAzureAuth(ds)) {\n      return false;\n    }\n  }\n  return true;\n}\n\nfunction areDataSourceTypesAllowed(datasources: DSSettings[], allowedTypes: Set<string>): boolean {\n  for (const ds of datasources) {\n    if (!allowedTypes.has(ds.type)) {\n      return false;\n    }\n  }\n  return true;\n}\n"],"names":[],"mappings":";;;;;AASA,SAAS,eAAe,EAAA,EAAmD;AACzE,EAAA,MAAM,KAAA,GAAQ,GAAG,QAAA,CAAS,aAAA;AAG1B,EAAA,IAAI,UAAU,KAAA,CAAA,EAAW;AACvB,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,IAAI,UAAU,KAAA,EAAO;AACnB,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,IAAI,UAAU,IAAA,EAAM;AAClB,IAAA,OAAO,IAAA;AAAA,EACT;AAGA,EAAA,OAAO,IAAA;AACT;AAIA,SAAS,uBAAuB,EAAA,EAAyB;AA/BzD,EAAA,IAAA,EAAA;AAgCE,EAAA,OAAA,CAAA,CAAO,EAAA,GAAA,EAAA,CAAG,QAAA,CAAS,gBAAA,KAAZ,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAA8B,QAAA,MAAa,aAAA;AACpD;AAOA,SAAS,kBAAkB,IAAA,EAA6B;AAEtD,EAAA,IAAI,IAAA,IAAQ,IAAA,IAAQ,OAAO,IAAA,KAAS,QAAA,IAAY,OAAA,IAAW,IAAA,IAAQ,KAAA,CAAM,OAAA,CAAQ,IAAA,CAAK,KAAK,CAAA,EAAG;AAG5F,IAAA,MAAM,QAAmB,IAAA,CAAK,KAAA;AAE9B,IAAA,IAAI,MAAM,KAAA,CAAM,CAAC,MAAM,OAAO,CAAA,KAAM,QAAQ,CAAA,EAAG;AAC7C,MAAA,OAAO,EAAE,KAAA,EAAM;AAAA,IACjB,CAAA,MAAO;AACL,MAAA,OAAA,CAAQ,MAAM,gDAAgD,CAAA;AAC9D,MAAA,OAAO,EAAE,KAAA,EAAO,EAAC,EAAE;AAAA,IACrB;AAAA,EACF,CAAA,MAAO;AACL,IAAA,OAAA,CAAQ,MAAM,kCAAkC,CAAA;AAChD,IAAA,OAAO,EAAE,KAAA,EAAO,EAAC,EAAE;AAAA,EACrB;AACF;AAEO,SAAS,wBAAA,CAAyB,aAA2B,YAAA,EAAuB;AACzF,EAAA,IAAI,WAAA,CAAY,WAAW,CAAA,EAAG;AAK5B,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,MAAM,EAAA,GAAK,kBAAkB,YAAY,CAAA;AACzC,EAAA,IAAI,CAAC,0BAA0B,WAAA,EAAa,IAAI,IAAI,EAAA,CAAG,KAAK,CAAC,CAAA,EAAG;AAC9D,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,KAAA,MAAW,MAAM,WAAA,EAAa;AAC5B,IAAA,IAAI,cAAA,CAAe,EAAE,CAAA,EAAG;AACtB,MAAA,OAAO,KAAA;AAAA,IACT;AAEA,IAAA,IAAI,sBAAA,CAAuB,EAAE,CAAA,EAAG;AAC9B,MAAA,OAAO,KAAA;AAAA,IACT;AAAA,EACF;AACA,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,yBAAA,CAA0B,aAA2B,YAAA,EAAoC;AAChG,EAAA,KAAA,MAAW,MAAM,WAAA,EAAa;AAC5B,IAAA,IAAI,CAAC,YAAA,CAAa,GAAA,CAAI,EAAA,CAAG,IAAI,CAAA,EAAG;AAC9B,MAAA,OAAO,KAAA;AAAA,IACT;AAAA,EACF;AACA,EAAA,OAAO,IAAA;AACT;;;;"}