diff --git a/packages/server/src/integrations/index.ts b/packages/server/src/integrations/index.ts index e2dd69da24..edbce6db0a 100644 --- a/packages/server/src/integrations/index.ts +++ b/packages/server/src/integrations/index.ts @@ -67,6 +67,15 @@ if ( INTEGRATIONS[SourceName.ORACLE] = oracle.integration } +export async function getDefinition(source: SourceName): Promise { + // check if its integrated, faster + if (DEFINITIONS[source]) { + return DEFINITIONS[source] + } + const allDefinitions = await getDefinitions() + return allDefinitions[source] +} + export async function getDefinitions() { const pluginSchemas: { [key: string]: Integration } = {} if (env.SELF_HOSTED) { diff --git a/packages/server/src/integrations/microsoftSqlServer.ts b/packages/server/src/integrations/microsoftSqlServer.ts index 48cb244b84..2da190df5e 100644 --- a/packages/server/src/integrations/microsoftSqlServer.ts +++ b/packages/server/src/integrations/microsoftSqlServer.ts @@ -108,9 +108,6 @@ class SqlServerIntegration extends Sql implements DatasourcePlus { constructor(config: MSSQLConfig) { super(SqlClient.MS_SQL) this.config = config - if (typeof this.config?.port === "string") { - this.config.port = parseInt(this.config.port) - } const clientCfg = { ...this.config, options: { diff --git a/packages/server/src/sdk/app/datasources/datasources.ts b/packages/server/src/sdk/app/datasources/datasources.ts index dfcde96cfc..3a1f33b151 100644 --- a/packages/server/src/sdk/app/datasources/datasources.ts +++ b/packages/server/src/sdk/app/datasources/datasources.ts @@ -3,6 +3,7 @@ import { findHBSBlocks, processObjectSync } from "@budibase/string-templates" import { Datasource, DatasourceFieldType, + Integration, PASSWORD_REPLACEMENT, RestAuthConfig, RestAuthType, @@ -11,16 +12,38 @@ import { } from "@budibase/types" import { cloneDeep } from "lodash/fp" import { getEnvironmentVariables } from "../../utils" -import { getDefinitions } from "../../../integrations" +import { getDefinitions, getDefinition } from "../../../integrations" const ENV_VAR_PREFIX = "env." +export function checkDatasourceTypes(schema: Integration, config: any) { + for (let key of Object.keys(config)) { + if (!schema.datasource[key]) { + continue + } + const type = schema.datasource[key].type + if ( + type === DatasourceFieldType.NUMBER && + typeof config[key] === "string" + ) { + config[key] = parseFloat(config[key]) + } + } + return config +} + async function enrichDatasourceWithValues(datasource: Datasource) { const cloned = cloneDeep(datasource) const env = await getEnvironmentVariables() - const processed = processObjectSync(cloned, { env }, { onlyFound: true }) + const processed = processObjectSync( + cloned, + { env }, + { onlyFound: true } + ) as Datasource + const definition = await getDefinition(processed.source) + processed.config = checkDatasourceTypes(definition, processed.config) return { - datasource: processed as Datasource, + datasource: processed, envVars: env as Record, } }