@deepnote/database-integrations
Advanced tools
+361
-217
@@ -64,2 +64,328 @@ //#region rolldown:runtime | ||
| //#endregion | ||
| //#region src/database-integration-metadata-schemas.ts | ||
| const athenaMetadataSchema = zod.z.object({ | ||
| access_key_id: zod.z.string(), | ||
| region: zod.z.string(), | ||
| s3_output_path: zod.z.string(), | ||
| secret_access_key: zod.z.string(), | ||
| workgroup: zod.z.string().optional() | ||
| }); | ||
| const bigqueryMetadataSchema = zod.z.discriminatedUnion("authMethod", [zod.z.object({ | ||
| authMethod: zod.z.literal(BigQueryAuthMethods.ServiceAccount), | ||
| service_account: zod.z.string() | ||
| }), zod.z.object({ | ||
| authMethod: zod.z.literal(BigQueryAuthMethods.GoogleOauth), | ||
| project: zod.z.string(), | ||
| clientId: zod.z.string(), | ||
| clientSecret: zod.z.string() | ||
| })]); | ||
| const clickhouseMetadataSchema = zod.z.object({ | ||
| host: zod.z.string(), | ||
| user: zod.z.string(), | ||
| password: zod.z.string().optional(), | ||
| database: zod.z.string(), | ||
| port: zod.z.string().optional(), | ||
| sshEnabled: zod.z.boolean().optional(), | ||
| sshHost: zod.z.string().optional(), | ||
| sshPort: zod.z.string().optional(), | ||
| sshUser: zod.z.string().optional(), | ||
| sslEnabled: zod.z.boolean().optional(), | ||
| caCertificateName: zod.z.string().optional(), | ||
| caCertificateText: zod.z.string().optional() | ||
| }); | ||
| const databricksMetadataSchema = zod.z.object({ | ||
| host: zod.z.string(), | ||
| httpPath: zod.z.string(), | ||
| token: zod.z.string(), | ||
| port: zod.z.string(), | ||
| schema: zod.z.string().optional(), | ||
| catalog: zod.z.string().optional(), | ||
| sshEnabled: zod.z.boolean().optional(), | ||
| sshHost: zod.z.string().optional(), | ||
| sshPort: zod.z.string().optional(), | ||
| sshUser: zod.z.string().optional() | ||
| }); | ||
| const dremioMetadataSchema = zod.z.object({ | ||
| schema: zod.z.string(), | ||
| host: zod.z.string(), | ||
| port: zod.z.string(), | ||
| token: zod.z.string(), | ||
| sshEnabled: zod.z.boolean().optional(), | ||
| sshHost: zod.z.string().optional(), | ||
| sshPort: zod.z.string().optional(), | ||
| sshUser: zod.z.string().optional() | ||
| }); | ||
| const mongodbMetadataSchema = zod.z.object({ | ||
| connection_string: zod.z.string(), | ||
| rawConnectionString: zod.z.string().optional(), | ||
| prefix: zod.z.string().optional(), | ||
| host: zod.z.string().optional(), | ||
| port: zod.z.string().optional(), | ||
| user: zod.z.string().optional(), | ||
| password: zod.z.string().optional(), | ||
| database: zod.z.string().optional(), | ||
| options: zod.z.string().optional(), | ||
| sshEnabled: zod.z.boolean().optional(), | ||
| sshHost: zod.z.string().optional(), | ||
| sshPort: zod.z.string().optional(), | ||
| sshUser: zod.z.string().optional(), | ||
| sslEnabled: zod.z.boolean().optional(), | ||
| caCertificateName: zod.z.string().optional(), | ||
| caCertificateText: zod.z.string().optional() | ||
| }); | ||
| const pandasDataframeMetadataSchema = zod.z.object({}); | ||
| const commonRedshiftMetadataSchema = zod.z.object({ | ||
| database: zod.z.string(), | ||
| host: zod.z.string(), | ||
| port: zod.z.string().optional(), | ||
| sshEnabled: zod.z.boolean().optional(), | ||
| sshHost: zod.z.string().optional(), | ||
| sshPort: zod.z.string().optional(), | ||
| sshUser: zod.z.string().optional(), | ||
| sslEnabled: zod.z.boolean().optional(), | ||
| caCertificateName: zod.z.string().optional(), | ||
| caCertificateText: zod.z.string().optional() | ||
| }); | ||
| const redshiftMetadataSchema = zod.z.discriminatedUnion("authMethod", [ | ||
| commonRedshiftMetadataSchema.extend({ | ||
| authMethod: zod.z.literal(DatabaseAuthMethods.UsernameAndPassword), | ||
| user: zod.z.string(), | ||
| password: zod.z.string() | ||
| }), | ||
| commonRedshiftMetadataSchema.extend({ | ||
| authMethod: zod.z.literal(AwsAuthMethods.IamRole), | ||
| roleArn: zod.z.string(), | ||
| roleExternalId: zod.z.string(), | ||
| roleNonce: zod.z.string() | ||
| }), | ||
| commonRedshiftMetadataSchema.extend({ authMethod: zod.z.literal(DatabaseAuthMethods.IndividualCredentials) }) | ||
| ]); | ||
| const commonSnowflakeMetadataSchema = zod.z.object({ | ||
| accountName: zod.z.string(), | ||
| warehouse: zod.z.string().optional(), | ||
| database: zod.z.string().optional(), | ||
| role: zod.z.string().optional() | ||
| }); | ||
| const snowflakeMetadataSchema = zod.z.discriminatedUnion("authMethod", [ | ||
| commonSnowflakeMetadataSchema.extend({ | ||
| authMethod: zod.z.literal(SnowflakeAuthMethods.Password), | ||
| username: zod.z.string(), | ||
| password: zod.z.string() | ||
| }), | ||
| commonSnowflakeMetadataSchema.extend({ | ||
| authMethod: zod.z.literal(SnowflakeAuthMethods.Okta), | ||
| clientId: zod.z.string(), | ||
| clientSecret: zod.z.string(), | ||
| oktaSubdomain: zod.z.string(), | ||
| identityProvider: zod.z.string(), | ||
| authorizationServer: zod.z.string() | ||
| }), | ||
| commonSnowflakeMetadataSchema.extend({ | ||
| authMethod: zod.z.literal(SnowflakeAuthMethods.NativeSnowflake), | ||
| clientId: zod.z.string(), | ||
| clientSecret: zod.z.string() | ||
| }), | ||
| commonSnowflakeMetadataSchema.extend({ | ||
| authMethod: zod.z.literal(SnowflakeAuthMethods.AzureAd), | ||
| clientId: zod.z.string(), | ||
| clientSecret: zod.z.string(), | ||
| resource: zod.z.string(), | ||
| tenant: zod.z.string() | ||
| }), | ||
| commonSnowflakeMetadataSchema.extend({ authMethod: zod.z.literal(SnowflakeAuthMethods.KeyPair) }), | ||
| commonSnowflakeMetadataSchema.extend({ | ||
| authMethod: zod.z.literal(SnowflakeAuthMethods.ServiceAccountKeyPair), | ||
| username: zod.z.string(), | ||
| privateKey: zod.z.string(), | ||
| privateKeyPassphrase: zod.z.string().optional() | ||
| }) | ||
| ]); | ||
| const spannerMetadataSchema = zod.z.object({ | ||
| service_account: zod.z.string(), | ||
| dataBoostEnabled: zod.z.boolean(), | ||
| instance: zod.z.string(), | ||
| database: zod.z.string() | ||
| }); | ||
| const trinoMetadataSchema = zod.z.object({ | ||
| host: zod.z.string(), | ||
| user: zod.z.string(), | ||
| password: zod.z.string(), | ||
| database: zod.z.string(), | ||
| port: zod.z.string(), | ||
| sshEnabled: zod.z.boolean().optional(), | ||
| sshHost: zod.z.string().optional(), | ||
| sshPort: zod.z.string().optional(), | ||
| sshUser: zod.z.string().optional(), | ||
| sslEnabled: zod.z.boolean().optional(), | ||
| caCertificateName: zod.z.string().optional(), | ||
| caCertificateText: zod.z.string().optional() | ||
| }); | ||
| const commonDatabaseSchema = zod.z.object({ | ||
| host: zod.z.string(), | ||
| user: zod.z.string(), | ||
| password: zod.z.string(), | ||
| database: zod.z.string(), | ||
| sshEnabled: zod.z.boolean().optional(), | ||
| sshHost: zod.z.string().optional(), | ||
| sshPort: zod.z.string().optional(), | ||
| sshUser: zod.z.string().optional() | ||
| }); | ||
| const alloydbMetadataSchema = commonDatabaseSchema.extend({ | ||
| port: zod.z.string().optional(), | ||
| sslEnabled: zod.z.boolean().optional(), | ||
| caCertificateName: zod.z.string().optional(), | ||
| caCertificateText: zod.z.string().optional() | ||
| }); | ||
| const mariadbMetadataSchema = commonDatabaseSchema.extend({ | ||
| port: zod.z.string().optional(), | ||
| sslEnabled: zod.z.boolean().optional(), | ||
| caCertificateName: zod.z.string().optional(), | ||
| caCertificateText: zod.z.string().optional() | ||
| }); | ||
| const mindsdbMetadataSchema = commonDatabaseSchema.extend({ | ||
| port: zod.z.string().optional(), | ||
| sslEnabled: zod.z.boolean().optional(), | ||
| caCertificateName: zod.z.string().optional(), | ||
| caCertificateText: zod.z.string().optional() | ||
| }); | ||
| const mysqlMetadataSchema = commonDatabaseSchema.extend({ | ||
| port: zod.z.string().optional(), | ||
| sslEnabled: zod.z.boolean().optional(), | ||
| caCertificateName: zod.z.string().optional(), | ||
| caCertificateText: zod.z.string().optional() | ||
| }); | ||
| const pgsqlMetadataSchema = commonDatabaseSchema.extend({ | ||
| port: zod.z.string().optional(), | ||
| sslEnabled: zod.z.boolean().optional(), | ||
| caCertificateName: zod.z.string().optional(), | ||
| caCertificateText: zod.z.string().optional() | ||
| }); | ||
| const materializeMetadataSchema = pgsqlMetadataSchema.extend({ cluster: zod.z.string() }); | ||
| const sqlServerMetadataSchema = commonDatabaseSchema.extend({ port: zod.z.string() }); | ||
| const databaseMetadataSchemasByType = { | ||
| "alloydb": alloydbMetadataSchema, | ||
| "athena": athenaMetadataSchema, | ||
| "big-query": bigqueryMetadataSchema, | ||
| "clickhouse": clickhouseMetadataSchema, | ||
| "databricks": databricksMetadataSchema, | ||
| "dremio": dremioMetadataSchema, | ||
| "mariadb": mariadbMetadataSchema, | ||
| "materialize": materializeMetadataSchema, | ||
| "mindsdb": mindsdbMetadataSchema, | ||
| "mongodb": mongodbMetadataSchema, | ||
| "mysql": mysqlMetadataSchema, | ||
| "pandas-dataframe": pandasDataframeMetadataSchema, | ||
| "pgsql": pgsqlMetadataSchema, | ||
| "redshift": redshiftMetadataSchema, | ||
| "snowflake": snowflakeMetadataSchema, | ||
| "spanner": spannerMetadataSchema, | ||
| "sql-server": sqlServerMetadataSchema, | ||
| "trino": trinoMetadataSchema | ||
| }; | ||
| //#endregion | ||
| //#region src/database-integration-config.ts | ||
| const commonIntegrationConfig = zod.default.object({ | ||
| id: zod.default.string(), | ||
| name: zod.default.string() | ||
| }); | ||
| const databaseIntegrationConfigSchema = zod.default.discriminatedUnion("type", [ | ||
| commonIntegrationConfig.extend({ | ||
| type: zod.default.literal("alloydb"), | ||
| metadata: databaseMetadataSchemasByType["alloydb"], | ||
| federated_auth_method: zod.default.null().optional() | ||
| }), | ||
| commonIntegrationConfig.extend({ | ||
| type: zod.default.literal("athena"), | ||
| metadata: databaseMetadataSchemasByType["athena"], | ||
| federated_auth_method: zod.default.null().optional() | ||
| }), | ||
| commonIntegrationConfig.extend({ | ||
| type: zod.default.literal("big-query"), | ||
| metadata: databaseMetadataSchemasByType["big-query"], | ||
| federated_auth_method: zod.default.enum(["google-oauth"]).optional().nullable() | ||
| }), | ||
| commonIntegrationConfig.extend({ | ||
| type: zod.default.literal("clickhouse"), | ||
| metadata: databaseMetadataSchemasByType["clickhouse"], | ||
| federated_auth_method: zod.default.null().optional() | ||
| }), | ||
| commonIntegrationConfig.extend({ | ||
| type: zod.default.literal("databricks"), | ||
| metadata: databaseMetadataSchemasByType["databricks"], | ||
| federated_auth_method: zod.default.null().optional() | ||
| }), | ||
| commonIntegrationConfig.extend({ | ||
| type: zod.default.literal("dremio"), | ||
| metadata: databaseMetadataSchemasByType["dremio"], | ||
| federated_auth_method: zod.default.null().optional() | ||
| }), | ||
| commonIntegrationConfig.extend({ | ||
| type: zod.default.literal("mariadb"), | ||
| metadata: databaseMetadataSchemasByType["mariadb"], | ||
| federated_auth_method: zod.default.null().optional() | ||
| }), | ||
| commonIntegrationConfig.extend({ | ||
| type: zod.default.literal("materialize"), | ||
| metadata: databaseMetadataSchemasByType["materialize"], | ||
| federated_auth_method: zod.default.null().optional() | ||
| }), | ||
| commonIntegrationConfig.extend({ | ||
| type: zod.default.literal("mindsdb"), | ||
| metadata: databaseMetadataSchemasByType["mindsdb"], | ||
| federated_auth_method: zod.default.null().optional() | ||
| }), | ||
| commonIntegrationConfig.extend({ | ||
| type: zod.default.literal("mongodb"), | ||
| metadata: databaseMetadataSchemasByType["mongodb"], | ||
| federated_auth_method: zod.default.null().optional() | ||
| }), | ||
| commonIntegrationConfig.extend({ | ||
| type: zod.default.literal("mysql"), | ||
| metadata: databaseMetadataSchemasByType["mysql"], | ||
| federated_auth_method: zod.default.null().optional() | ||
| }), | ||
| commonIntegrationConfig.extend({ | ||
| type: zod.default.literal("pandas-dataframe"), | ||
| metadata: databaseMetadataSchemasByType["pandas-dataframe"], | ||
| federated_auth_method: zod.default.null().optional() | ||
| }), | ||
| commonIntegrationConfig.extend({ | ||
| type: zod.default.literal("pgsql"), | ||
| metadata: databaseMetadataSchemasByType["pgsql"], | ||
| federated_auth_method: zod.default.null().optional() | ||
| }), | ||
| commonIntegrationConfig.extend({ | ||
| type: zod.default.literal("redshift"), | ||
| metadata: databaseMetadataSchemasByType["redshift"], | ||
| federated_auth_method: zod.default.enum(["individual-credentials"]).optional().nullable() | ||
| }), | ||
| commonIntegrationConfig.extend({ | ||
| type: zod.default.literal("snowflake"), | ||
| metadata: databaseMetadataSchemasByType["snowflake"], | ||
| federated_auth_method: zod.default.enum([ | ||
| "okta", | ||
| "snowflake", | ||
| "azure", | ||
| "key-pair" | ||
| ]).optional().nullable() | ||
| }), | ||
| commonIntegrationConfig.extend({ | ||
| type: zod.default.literal("spanner"), | ||
| metadata: databaseMetadataSchemasByType["spanner"], | ||
| federated_auth_method: zod.default.null().optional() | ||
| }), | ||
| commonIntegrationConfig.extend({ | ||
| type: zod.default.literal("sql-server"), | ||
| metadata: databaseMetadataSchemasByType["sql-server"], | ||
| federated_auth_method: zod.default.null().optional() | ||
| }), | ||
| commonIntegrationConfig.extend({ | ||
| type: zod.default.literal("trino"), | ||
| metadata: databaseMetadataSchemasByType["trino"], | ||
| federated_auth_method: zod.default.null().optional() | ||
| }) | ||
| ]); | ||
| //#endregion | ||
| //#region src/snowflake-integration-env-vars.ts | ||
@@ -96,2 +422,18 @@ /** | ||
| } | ||
| function getSnowflakeFederatedAuthSqlAlchemyInput(metadata, options = {}) { | ||
| return createSqlAlchemyInputFromUrl(buildSnowflakeUrlForFederatedAuth(metadata, options), options.keyPair); | ||
| } | ||
| function buildSnowflakeUrlForFederatedAuth(metadata, options) { | ||
| const queryParams = { ...createBaseQueryParams(metadata, options.snowflakePartnerIdentifier) }; | ||
| if (options.role) queryParams.role = options.role; | ||
| if (options.accessToken) { | ||
| queryParams.token = options.accessToken; | ||
| queryParams.authenticator = "oauth"; | ||
| } | ||
| const accountIdentifier = metadata.accountName.replace(".privatelink", ""); | ||
| return buildUrl(options.keyPair?.username ? `snowflake://${encodeURIComponent(options.keyPair.username)}@${encodeURIComponent(accountIdentifier)}` : `snowflake://:@${encodeURIComponent(accountIdentifier)}`, { | ||
| path: metadata.database, | ||
| queryParams | ||
| }); | ||
| } | ||
| function createBaseQueryParams(metadata, snowflakePartnerIdentifier) { | ||
@@ -122,3 +464,5 @@ return { | ||
| const namePrefix = convertToEnvironmentVariableName(integration.name); | ||
| const envVarsForThisIntegration = Object.entries(integration.metadata).map(([key, rawValue]) => { | ||
| const envVarsForThisIntegration = Object.entries(integration.metadata).filter(([key]) => { | ||
| return key !== "caCertificateText"; | ||
| }).map(([key, rawValue]) => { | ||
| const name = `${namePrefix}_${key.toUpperCase()}`; | ||
@@ -476,218 +820,2 @@ const value = String(rawValue); | ||
| //#endregion | ||
| //#region src/database-integration-metadata-schemas.ts | ||
| const athenaMetadataSchema = zod.z.object({ | ||
| access_key_id: zod.z.string(), | ||
| region: zod.z.string(), | ||
| s3_output_path: zod.z.string(), | ||
| secret_access_key: zod.z.string(), | ||
| workgroup: zod.z.string().optional() | ||
| }); | ||
| const bigqueryMetadataSchema = zod.z.discriminatedUnion("authMethod", [zod.z.object({ | ||
| authMethod: zod.z.literal(BigQueryAuthMethods.ServiceAccount), | ||
| service_account: zod.z.string() | ||
| }), zod.z.object({ | ||
| authMethod: zod.z.literal(BigQueryAuthMethods.GoogleOauth), | ||
| project: zod.z.string(), | ||
| clientId: zod.z.string(), | ||
| clientSecret: zod.z.string() | ||
| })]); | ||
| const clickhouseMetadataSchema = zod.z.object({ | ||
| host: zod.z.string(), | ||
| user: zod.z.string(), | ||
| password: zod.z.string().optional(), | ||
| database: zod.z.string(), | ||
| port: zod.z.string().optional(), | ||
| sshEnabled: zod.z.boolean().optional(), | ||
| sshHost: zod.z.string().optional(), | ||
| sshPort: zod.z.string().optional(), | ||
| sshUser: zod.z.string().optional(), | ||
| sslEnabled: zod.z.boolean().optional(), | ||
| caCertificateName: zod.z.string().optional(), | ||
| caCertificateText: zod.z.string().optional() | ||
| }); | ||
| const databricksMetadataSchema = zod.z.object({ | ||
| host: zod.z.string(), | ||
| httpPath: zod.z.string(), | ||
| token: zod.z.string(), | ||
| port: zod.z.string(), | ||
| schema: zod.z.string().optional(), | ||
| catalog: zod.z.string().optional(), | ||
| sshEnabled: zod.z.boolean().optional(), | ||
| sshHost: zod.z.string().optional(), | ||
| sshPort: zod.z.string().optional(), | ||
| sshUser: zod.z.string().optional() | ||
| }); | ||
| const dremioMetadataSchema = zod.z.object({ | ||
| schema: zod.z.string(), | ||
| host: zod.z.string(), | ||
| port: zod.z.string(), | ||
| token: zod.z.string(), | ||
| sshEnabled: zod.z.boolean().optional(), | ||
| sshHost: zod.z.string().optional(), | ||
| sshPort: zod.z.string().optional(), | ||
| sshUser: zod.z.string().optional() | ||
| }); | ||
| const mongodbMetadataSchema = zod.z.object({ | ||
| connection_string: zod.z.string(), | ||
| rawConnectionString: zod.z.string().optional(), | ||
| prefix: zod.z.string().optional(), | ||
| host: zod.z.string().optional(), | ||
| port: zod.z.string().optional(), | ||
| user: zod.z.string().optional(), | ||
| password: zod.z.string().optional(), | ||
| database: zod.z.string().optional(), | ||
| options: zod.z.string().optional(), | ||
| sshEnabled: zod.z.boolean().optional(), | ||
| sshHost: zod.z.string().optional(), | ||
| sshPort: zod.z.string().optional(), | ||
| sshUser: zod.z.string().optional(), | ||
| sslEnabled: zod.z.boolean().optional(), | ||
| caCertificateName: zod.z.string().optional(), | ||
| caCertificateText: zod.z.string().optional() | ||
| }); | ||
| const pandasDataframeMetadataSchema = zod.z.object({}); | ||
| const commonRedshiftMetadataSchema = zod.z.object({ | ||
| database: zod.z.string(), | ||
| host: zod.z.string(), | ||
| port: zod.z.string().optional(), | ||
| sshEnabled: zod.z.boolean().optional(), | ||
| sshHost: zod.z.string().optional(), | ||
| sshPort: zod.z.string().optional(), | ||
| sshUser: zod.z.string().optional(), | ||
| sslEnabled: zod.z.boolean().optional(), | ||
| caCertificateName: zod.z.string().optional(), | ||
| caCertificateText: zod.z.string().optional() | ||
| }); | ||
| const redshiftMetadataSchema = zod.z.discriminatedUnion("authMethod", [ | ||
| commonRedshiftMetadataSchema.extend({ | ||
| authMethod: zod.z.literal(DatabaseAuthMethods.UsernameAndPassword), | ||
| user: zod.z.string(), | ||
| password: zod.z.string() | ||
| }), | ||
| commonRedshiftMetadataSchema.extend({ | ||
| authMethod: zod.z.literal(AwsAuthMethods.IamRole), | ||
| roleArn: zod.z.string(), | ||
| roleExternalId: zod.z.string(), | ||
| roleNonce: zod.z.string() | ||
| }), | ||
| commonRedshiftMetadataSchema.extend({ authMethod: zod.z.literal(DatabaseAuthMethods.IndividualCredentials) }) | ||
| ]); | ||
| const commonSnowflakeMetadataSchema = zod.z.object({ | ||
| accountName: zod.z.string(), | ||
| warehouse: zod.z.string().optional(), | ||
| database: zod.z.string().optional(), | ||
| role: zod.z.string().optional() | ||
| }); | ||
| const snowflakeMetadataSchema = zod.z.discriminatedUnion("authMethod", [ | ||
| commonSnowflakeMetadataSchema.extend({ | ||
| authMethod: zod.z.literal(SnowflakeAuthMethods.Password), | ||
| username: zod.z.string(), | ||
| password: zod.z.string() | ||
| }), | ||
| commonSnowflakeMetadataSchema.extend({ | ||
| authMethod: zod.z.literal(SnowflakeAuthMethods.Okta), | ||
| clientId: zod.z.string(), | ||
| clientSecret: zod.z.string(), | ||
| oktaSubdomain: zod.z.string(), | ||
| identityProvider: zod.z.string(), | ||
| authorizationServer: zod.z.string() | ||
| }), | ||
| commonSnowflakeMetadataSchema.extend({ | ||
| authMethod: zod.z.literal(SnowflakeAuthMethods.NativeSnowflake), | ||
| clientId: zod.z.string(), | ||
| clientSecret: zod.z.string() | ||
| }), | ||
| commonSnowflakeMetadataSchema.extend({ | ||
| authMethod: zod.z.literal(SnowflakeAuthMethods.AzureAd), | ||
| clientId: zod.z.string(), | ||
| clientSecret: zod.z.string(), | ||
| resource: zod.z.string(), | ||
| tenant: zod.z.string() | ||
| }), | ||
| commonSnowflakeMetadataSchema.extend({ authMethod: zod.z.literal(SnowflakeAuthMethods.KeyPair) }), | ||
| commonSnowflakeMetadataSchema.extend({ | ||
| authMethod: zod.z.literal(SnowflakeAuthMethods.ServiceAccountKeyPair), | ||
| username: zod.z.string(), | ||
| privateKey: zod.z.string(), | ||
| privateKeyPassphrase: zod.z.string().optional() | ||
| }) | ||
| ]); | ||
| const spannerMetadataSchema = zod.z.object({ | ||
| service_account: zod.z.string(), | ||
| dataBoostEnabled: zod.z.boolean(), | ||
| instance: zod.z.string(), | ||
| database: zod.z.string() | ||
| }); | ||
| const trinoMetadataSchema = zod.z.object({ | ||
| host: zod.z.string(), | ||
| user: zod.z.string(), | ||
| password: zod.z.string(), | ||
| database: zod.z.string(), | ||
| port: zod.z.string(), | ||
| sshEnabled: zod.z.boolean().optional(), | ||
| sshHost: zod.z.string().optional(), | ||
| sshPort: zod.z.string().optional(), | ||
| sshUser: zod.z.string().optional(), | ||
| sslEnabled: zod.z.boolean().optional(), | ||
| caCertificateName: zod.z.string().optional(), | ||
| caCertificateText: zod.z.string().optional() | ||
| }); | ||
| const commonDatabaseSchema = zod.z.object({ | ||
| host: zod.z.string(), | ||
| user: zod.z.string(), | ||
| password: zod.z.string(), | ||
| database: zod.z.string(), | ||
| sshEnabled: zod.z.boolean().optional(), | ||
| sshHost: zod.z.string().optional(), | ||
| sshPort: zod.z.string().optional(), | ||
| sshUser: zod.z.string().optional() | ||
| }); | ||
| const alloydbMetadataSchema = commonDatabaseSchema.extend({ | ||
| port: zod.z.string().optional(), | ||
| sslEnabled: zod.z.boolean().optional(), | ||
| caCertificateName: zod.z.string().optional(), | ||
| caCertificateText: zod.z.string().optional() | ||
| }); | ||
| const mariadbMetadataSchema = commonDatabaseSchema.extend({ | ||
| port: zod.z.string().optional(), | ||
| caCertificateName: zod.z.string().optional() | ||
| }); | ||
| const mindsdbMetadataSchema = commonDatabaseSchema.extend({ | ||
| port: zod.z.string().optional(), | ||
| caCertificateName: zod.z.string().optional() | ||
| }); | ||
| const mysqlMetadataSchema = commonDatabaseSchema.extend({ | ||
| port: zod.z.string().optional(), | ||
| caCertificateName: zod.z.string().optional() | ||
| }); | ||
| const pgsqlMetadataSchema = commonDatabaseSchema.extend({ | ||
| port: zod.z.string().optional(), | ||
| sslEnabled: zod.z.boolean().optional(), | ||
| caCertificateName: zod.z.string().optional(), | ||
| caCertificateText: zod.z.string().optional() | ||
| }); | ||
| const materializeMetadataSchema = pgsqlMetadataSchema.extend({ cluster: zod.z.string() }); | ||
| const sqlServerMetadataSchema = commonDatabaseSchema.extend({ port: zod.z.string() }); | ||
| const databaseMetadataSchemasByType = { | ||
| "alloydb": alloydbMetadataSchema, | ||
| "athena": athenaMetadataSchema, | ||
| "big-query": bigqueryMetadataSchema, | ||
| "clickhouse": clickhouseMetadataSchema, | ||
| "databricks": databricksMetadataSchema, | ||
| "dremio": dremioMetadataSchema, | ||
| "mariadb": mariadbMetadataSchema, | ||
| "materialize": materializeMetadataSchema, | ||
| "mindsdb": mindsdbMetadataSchema, | ||
| "mongodb": mongodbMetadataSchema, | ||
| "mysql": mysqlMetadataSchema, | ||
| "pandas-dataframe": pandasDataframeMetadataSchema, | ||
| "pgsql": pgsqlMetadataSchema, | ||
| "redshift": redshiftMetadataSchema, | ||
| "snowflake": snowflakeMetadataSchema, | ||
| "spanner": spannerMetadataSchema, | ||
| "sql-server": sqlServerMetadataSchema, | ||
| "trino": trinoMetadataSchema | ||
| }; | ||
| //#endregion | ||
| //#region src/database-integration-types.ts | ||
@@ -715,2 +843,3 @@ const sqlIntegrationTypes = [ | ||
| const databaseIntegrationTypesWithSslSupport = [ | ||
| "alloydb", | ||
| "clickhouse", | ||
@@ -726,2 +855,11 @@ "dremio", | ||
| ]; | ||
| function isDatabaseIntegrationType(type) { | ||
| return databaseIntegrationTypes.includes(type); | ||
| } | ||
| function isSqlIntegrationType(type) { | ||
| return sqlIntegrationTypes.includes(type); | ||
| } | ||
| function isDatabaseIntegrationTypeWithSslSupport(type) { | ||
| return databaseIntegrationTypesWithSslSupport.includes(type); | ||
| } | ||
@@ -735,9 +873,15 @@ //#endregion | ||
| exports.SpannerServiceAccountParseError = SpannerServiceAccountParseError; | ||
| exports.databaseIntegrationConfigSchema = databaseIntegrationConfigSchema; | ||
| exports.databaseIntegrationTypes = databaseIntegrationTypes; | ||
| exports.databaseIntegrationTypesWithSslSupport = databaseIntegrationTypesWithSslSupport; | ||
| exports.databaseMetadataSchemasByType = databaseMetadataSchemasByType; | ||
| exports.federatedAuthMethods = federatedAuthMethods; | ||
| exports.getEnvironmentVariablesForIntegrations = getEnvironmentVariablesForIntegrations; | ||
| exports.getSnowflakeFederatedAuthSqlAlchemyInput = getSnowflakeFederatedAuthSqlAlchemyInput; | ||
| exports.getSqlAlchemyInput = getSqlAlchemyInput; | ||
| exports.isDatabaseIntegrationType = isDatabaseIntegrationType; | ||
| exports.isDatabaseIntegrationTypeWithSslSupport = isDatabaseIntegrationTypeWithSslSupport; | ||
| exports.isFederatedAuthMetadata = isFederatedAuthMetadata; | ||
| exports.isFederatedAuthMethod = isFederatedAuthMethod; | ||
| exports.isSqlIntegrationType = isSqlIntegrationType; | ||
| exports.sqlIntegrationTypes = sqlIntegrationTypes; |
+357
-219
@@ -1,2 +0,2 @@ | ||
| import { z } from "zod"; | ||
| import z$1, { z } from "zod"; | ||
@@ -40,2 +40,328 @@ //#region src/sql-integration-auth-methods.ts | ||
| //#endregion | ||
| //#region src/database-integration-metadata-schemas.ts | ||
| const athenaMetadataSchema = z.object({ | ||
| access_key_id: z.string(), | ||
| region: z.string(), | ||
| s3_output_path: z.string(), | ||
| secret_access_key: z.string(), | ||
| workgroup: z.string().optional() | ||
| }); | ||
| const bigqueryMetadataSchema = z.discriminatedUnion("authMethod", [z.object({ | ||
| authMethod: z.literal(BigQueryAuthMethods.ServiceAccount), | ||
| service_account: z.string() | ||
| }), z.object({ | ||
| authMethod: z.literal(BigQueryAuthMethods.GoogleOauth), | ||
| project: z.string(), | ||
| clientId: z.string(), | ||
| clientSecret: z.string() | ||
| })]); | ||
| const clickhouseMetadataSchema = z.object({ | ||
| host: z.string(), | ||
| user: z.string(), | ||
| password: z.string().optional(), | ||
| database: z.string(), | ||
| port: z.string().optional(), | ||
| sshEnabled: z.boolean().optional(), | ||
| sshHost: z.string().optional(), | ||
| sshPort: z.string().optional(), | ||
| sshUser: z.string().optional(), | ||
| sslEnabled: z.boolean().optional(), | ||
| caCertificateName: z.string().optional(), | ||
| caCertificateText: z.string().optional() | ||
| }); | ||
| const databricksMetadataSchema = z.object({ | ||
| host: z.string(), | ||
| httpPath: z.string(), | ||
| token: z.string(), | ||
| port: z.string(), | ||
| schema: z.string().optional(), | ||
| catalog: z.string().optional(), | ||
| sshEnabled: z.boolean().optional(), | ||
| sshHost: z.string().optional(), | ||
| sshPort: z.string().optional(), | ||
| sshUser: z.string().optional() | ||
| }); | ||
| const dremioMetadataSchema = z.object({ | ||
| schema: z.string(), | ||
| host: z.string(), | ||
| port: z.string(), | ||
| token: z.string(), | ||
| sshEnabled: z.boolean().optional(), | ||
| sshHost: z.string().optional(), | ||
| sshPort: z.string().optional(), | ||
| sshUser: z.string().optional() | ||
| }); | ||
| const mongodbMetadataSchema = z.object({ | ||
| connection_string: z.string(), | ||
| rawConnectionString: z.string().optional(), | ||
| prefix: z.string().optional(), | ||
| host: z.string().optional(), | ||
| port: z.string().optional(), | ||
| user: z.string().optional(), | ||
| password: z.string().optional(), | ||
| database: z.string().optional(), | ||
| options: z.string().optional(), | ||
| sshEnabled: z.boolean().optional(), | ||
| sshHost: z.string().optional(), | ||
| sshPort: z.string().optional(), | ||
| sshUser: z.string().optional(), | ||
| sslEnabled: z.boolean().optional(), | ||
| caCertificateName: z.string().optional(), | ||
| caCertificateText: z.string().optional() | ||
| }); | ||
| const pandasDataframeMetadataSchema = z.object({}); | ||
| const commonRedshiftMetadataSchema = z.object({ | ||
| database: z.string(), | ||
| host: z.string(), | ||
| port: z.string().optional(), | ||
| sshEnabled: z.boolean().optional(), | ||
| sshHost: z.string().optional(), | ||
| sshPort: z.string().optional(), | ||
| sshUser: z.string().optional(), | ||
| sslEnabled: z.boolean().optional(), | ||
| caCertificateName: z.string().optional(), | ||
| caCertificateText: z.string().optional() | ||
| }); | ||
| const redshiftMetadataSchema = z.discriminatedUnion("authMethod", [ | ||
| commonRedshiftMetadataSchema.extend({ | ||
| authMethod: z.literal(DatabaseAuthMethods.UsernameAndPassword), | ||
| user: z.string(), | ||
| password: z.string() | ||
| }), | ||
| commonRedshiftMetadataSchema.extend({ | ||
| authMethod: z.literal(AwsAuthMethods.IamRole), | ||
| roleArn: z.string(), | ||
| roleExternalId: z.string(), | ||
| roleNonce: z.string() | ||
| }), | ||
| commonRedshiftMetadataSchema.extend({ authMethod: z.literal(DatabaseAuthMethods.IndividualCredentials) }) | ||
| ]); | ||
| const commonSnowflakeMetadataSchema = z.object({ | ||
| accountName: z.string(), | ||
| warehouse: z.string().optional(), | ||
| database: z.string().optional(), | ||
| role: z.string().optional() | ||
| }); | ||
| const snowflakeMetadataSchema = z.discriminatedUnion("authMethod", [ | ||
| commonSnowflakeMetadataSchema.extend({ | ||
| authMethod: z.literal(SnowflakeAuthMethods.Password), | ||
| username: z.string(), | ||
| password: z.string() | ||
| }), | ||
| commonSnowflakeMetadataSchema.extend({ | ||
| authMethod: z.literal(SnowflakeAuthMethods.Okta), | ||
| clientId: z.string(), | ||
| clientSecret: z.string(), | ||
| oktaSubdomain: z.string(), | ||
| identityProvider: z.string(), | ||
| authorizationServer: z.string() | ||
| }), | ||
| commonSnowflakeMetadataSchema.extend({ | ||
| authMethod: z.literal(SnowflakeAuthMethods.NativeSnowflake), | ||
| clientId: z.string(), | ||
| clientSecret: z.string() | ||
| }), | ||
| commonSnowflakeMetadataSchema.extend({ | ||
| authMethod: z.literal(SnowflakeAuthMethods.AzureAd), | ||
| clientId: z.string(), | ||
| clientSecret: z.string(), | ||
| resource: z.string(), | ||
| tenant: z.string() | ||
| }), | ||
| commonSnowflakeMetadataSchema.extend({ authMethod: z.literal(SnowflakeAuthMethods.KeyPair) }), | ||
| commonSnowflakeMetadataSchema.extend({ | ||
| authMethod: z.literal(SnowflakeAuthMethods.ServiceAccountKeyPair), | ||
| username: z.string(), | ||
| privateKey: z.string(), | ||
| privateKeyPassphrase: z.string().optional() | ||
| }) | ||
| ]); | ||
| const spannerMetadataSchema = z.object({ | ||
| service_account: z.string(), | ||
| dataBoostEnabled: z.boolean(), | ||
| instance: z.string(), | ||
| database: z.string() | ||
| }); | ||
| const trinoMetadataSchema = z.object({ | ||
| host: z.string(), | ||
| user: z.string(), | ||
| password: z.string(), | ||
| database: z.string(), | ||
| port: z.string(), | ||
| sshEnabled: z.boolean().optional(), | ||
| sshHost: z.string().optional(), | ||
| sshPort: z.string().optional(), | ||
| sshUser: z.string().optional(), | ||
| sslEnabled: z.boolean().optional(), | ||
| caCertificateName: z.string().optional(), | ||
| caCertificateText: z.string().optional() | ||
| }); | ||
| const commonDatabaseSchema = z.object({ | ||
| host: z.string(), | ||
| user: z.string(), | ||
| password: z.string(), | ||
| database: z.string(), | ||
| sshEnabled: z.boolean().optional(), | ||
| sshHost: z.string().optional(), | ||
| sshPort: z.string().optional(), | ||
| sshUser: z.string().optional() | ||
| }); | ||
| const alloydbMetadataSchema = commonDatabaseSchema.extend({ | ||
| port: z.string().optional(), | ||
| sslEnabled: z.boolean().optional(), | ||
| caCertificateName: z.string().optional(), | ||
| caCertificateText: z.string().optional() | ||
| }); | ||
| const mariadbMetadataSchema = commonDatabaseSchema.extend({ | ||
| port: z.string().optional(), | ||
| sslEnabled: z.boolean().optional(), | ||
| caCertificateName: z.string().optional(), | ||
| caCertificateText: z.string().optional() | ||
| }); | ||
| const mindsdbMetadataSchema = commonDatabaseSchema.extend({ | ||
| port: z.string().optional(), | ||
| sslEnabled: z.boolean().optional(), | ||
| caCertificateName: z.string().optional(), | ||
| caCertificateText: z.string().optional() | ||
| }); | ||
| const mysqlMetadataSchema = commonDatabaseSchema.extend({ | ||
| port: z.string().optional(), | ||
| sslEnabled: z.boolean().optional(), | ||
| caCertificateName: z.string().optional(), | ||
| caCertificateText: z.string().optional() | ||
| }); | ||
| const pgsqlMetadataSchema = commonDatabaseSchema.extend({ | ||
| port: z.string().optional(), | ||
| sslEnabled: z.boolean().optional(), | ||
| caCertificateName: z.string().optional(), | ||
| caCertificateText: z.string().optional() | ||
| }); | ||
| const materializeMetadataSchema = pgsqlMetadataSchema.extend({ cluster: z.string() }); | ||
| const sqlServerMetadataSchema = commonDatabaseSchema.extend({ port: z.string() }); | ||
| const databaseMetadataSchemasByType = { | ||
| "alloydb": alloydbMetadataSchema, | ||
| "athena": athenaMetadataSchema, | ||
| "big-query": bigqueryMetadataSchema, | ||
| "clickhouse": clickhouseMetadataSchema, | ||
| "databricks": databricksMetadataSchema, | ||
| "dremio": dremioMetadataSchema, | ||
| "mariadb": mariadbMetadataSchema, | ||
| "materialize": materializeMetadataSchema, | ||
| "mindsdb": mindsdbMetadataSchema, | ||
| "mongodb": mongodbMetadataSchema, | ||
| "mysql": mysqlMetadataSchema, | ||
| "pandas-dataframe": pandasDataframeMetadataSchema, | ||
| "pgsql": pgsqlMetadataSchema, | ||
| "redshift": redshiftMetadataSchema, | ||
| "snowflake": snowflakeMetadataSchema, | ||
| "spanner": spannerMetadataSchema, | ||
| "sql-server": sqlServerMetadataSchema, | ||
| "trino": trinoMetadataSchema | ||
| }; | ||
| //#endregion | ||
| //#region src/database-integration-config.ts | ||
| const commonIntegrationConfig = z$1.object({ | ||
| id: z$1.string(), | ||
| name: z$1.string() | ||
| }); | ||
| const databaseIntegrationConfigSchema = z$1.discriminatedUnion("type", [ | ||
| commonIntegrationConfig.extend({ | ||
| type: z$1.literal("alloydb"), | ||
| metadata: databaseMetadataSchemasByType["alloydb"], | ||
| federated_auth_method: z$1.null().optional() | ||
| }), | ||
| commonIntegrationConfig.extend({ | ||
| type: z$1.literal("athena"), | ||
| metadata: databaseMetadataSchemasByType["athena"], | ||
| federated_auth_method: z$1.null().optional() | ||
| }), | ||
| commonIntegrationConfig.extend({ | ||
| type: z$1.literal("big-query"), | ||
| metadata: databaseMetadataSchemasByType["big-query"], | ||
| federated_auth_method: z$1.enum(["google-oauth"]).optional().nullable() | ||
| }), | ||
| commonIntegrationConfig.extend({ | ||
| type: z$1.literal("clickhouse"), | ||
| metadata: databaseMetadataSchemasByType["clickhouse"], | ||
| federated_auth_method: z$1.null().optional() | ||
| }), | ||
| commonIntegrationConfig.extend({ | ||
| type: z$1.literal("databricks"), | ||
| metadata: databaseMetadataSchemasByType["databricks"], | ||
| federated_auth_method: z$1.null().optional() | ||
| }), | ||
| commonIntegrationConfig.extend({ | ||
| type: z$1.literal("dremio"), | ||
| metadata: databaseMetadataSchemasByType["dremio"], | ||
| federated_auth_method: z$1.null().optional() | ||
| }), | ||
| commonIntegrationConfig.extend({ | ||
| type: z$1.literal("mariadb"), | ||
| metadata: databaseMetadataSchemasByType["mariadb"], | ||
| federated_auth_method: z$1.null().optional() | ||
| }), | ||
| commonIntegrationConfig.extend({ | ||
| type: z$1.literal("materialize"), | ||
| metadata: databaseMetadataSchemasByType["materialize"], | ||
| federated_auth_method: z$1.null().optional() | ||
| }), | ||
| commonIntegrationConfig.extend({ | ||
| type: z$1.literal("mindsdb"), | ||
| metadata: databaseMetadataSchemasByType["mindsdb"], | ||
| federated_auth_method: z$1.null().optional() | ||
| }), | ||
| commonIntegrationConfig.extend({ | ||
| type: z$1.literal("mongodb"), | ||
| metadata: databaseMetadataSchemasByType["mongodb"], | ||
| federated_auth_method: z$1.null().optional() | ||
| }), | ||
| commonIntegrationConfig.extend({ | ||
| type: z$1.literal("mysql"), | ||
| metadata: databaseMetadataSchemasByType["mysql"], | ||
| federated_auth_method: z$1.null().optional() | ||
| }), | ||
| commonIntegrationConfig.extend({ | ||
| type: z$1.literal("pandas-dataframe"), | ||
| metadata: databaseMetadataSchemasByType["pandas-dataframe"], | ||
| federated_auth_method: z$1.null().optional() | ||
| }), | ||
| commonIntegrationConfig.extend({ | ||
| type: z$1.literal("pgsql"), | ||
| metadata: databaseMetadataSchemasByType["pgsql"], | ||
| federated_auth_method: z$1.null().optional() | ||
| }), | ||
| commonIntegrationConfig.extend({ | ||
| type: z$1.literal("redshift"), | ||
| metadata: databaseMetadataSchemasByType["redshift"], | ||
| federated_auth_method: z$1.enum(["individual-credentials"]).optional().nullable() | ||
| }), | ||
| commonIntegrationConfig.extend({ | ||
| type: z$1.literal("snowflake"), | ||
| metadata: databaseMetadataSchemasByType["snowflake"], | ||
| federated_auth_method: z$1.enum([ | ||
| "okta", | ||
| "snowflake", | ||
| "azure", | ||
| "key-pair" | ||
| ]).optional().nullable() | ||
| }), | ||
| commonIntegrationConfig.extend({ | ||
| type: z$1.literal("spanner"), | ||
| metadata: databaseMetadataSchemasByType["spanner"], | ||
| federated_auth_method: z$1.null().optional() | ||
| }), | ||
| commonIntegrationConfig.extend({ | ||
| type: z$1.literal("sql-server"), | ||
| metadata: databaseMetadataSchemasByType["sql-server"], | ||
| federated_auth_method: z$1.null().optional() | ||
| }), | ||
| commonIntegrationConfig.extend({ | ||
| type: z$1.literal("trino"), | ||
| metadata: databaseMetadataSchemasByType["trino"], | ||
| federated_auth_method: z$1.null().optional() | ||
| }) | ||
| ]); | ||
| //#endregion | ||
| //#region src/snowflake-integration-env-vars.ts | ||
@@ -72,2 +398,18 @@ /** | ||
| } | ||
| function getSnowflakeFederatedAuthSqlAlchemyInput(metadata, options = {}) { | ||
| return createSqlAlchemyInputFromUrl(buildSnowflakeUrlForFederatedAuth(metadata, options), options.keyPair); | ||
| } | ||
| function buildSnowflakeUrlForFederatedAuth(metadata, options) { | ||
| const queryParams = { ...createBaseQueryParams(metadata, options.snowflakePartnerIdentifier) }; | ||
| if (options.role) queryParams.role = options.role; | ||
| if (options.accessToken) { | ||
| queryParams.token = options.accessToken; | ||
| queryParams.authenticator = "oauth"; | ||
| } | ||
| const accountIdentifier = metadata.accountName.replace(".privatelink", ""); | ||
| return buildUrl(options.keyPair?.username ? `snowflake://${encodeURIComponent(options.keyPair.username)}@${encodeURIComponent(accountIdentifier)}` : `snowflake://:@${encodeURIComponent(accountIdentifier)}`, { | ||
| path: metadata.database, | ||
| queryParams | ||
| }); | ||
| } | ||
| function createBaseQueryParams(metadata, snowflakePartnerIdentifier) { | ||
@@ -98,3 +440,5 @@ return { | ||
| const namePrefix = convertToEnvironmentVariableName(integration.name); | ||
| const envVarsForThisIntegration = Object.entries(integration.metadata).map(([key, rawValue]) => { | ||
| const envVarsForThisIntegration = Object.entries(integration.metadata).filter(([key]) => { | ||
| return key !== "caCertificateText"; | ||
| }).map(([key, rawValue]) => { | ||
| const name = `${namePrefix}_${key.toUpperCase()}`; | ||
@@ -452,218 +796,2 @@ const value = String(rawValue); | ||
| //#endregion | ||
| //#region src/database-integration-metadata-schemas.ts | ||
| const athenaMetadataSchema = z.object({ | ||
| access_key_id: z.string(), | ||
| region: z.string(), | ||
| s3_output_path: z.string(), | ||
| secret_access_key: z.string(), | ||
| workgroup: z.string().optional() | ||
| }); | ||
| const bigqueryMetadataSchema = z.discriminatedUnion("authMethod", [z.object({ | ||
| authMethod: z.literal(BigQueryAuthMethods.ServiceAccount), | ||
| service_account: z.string() | ||
| }), z.object({ | ||
| authMethod: z.literal(BigQueryAuthMethods.GoogleOauth), | ||
| project: z.string(), | ||
| clientId: z.string(), | ||
| clientSecret: z.string() | ||
| })]); | ||
| const clickhouseMetadataSchema = z.object({ | ||
| host: z.string(), | ||
| user: z.string(), | ||
| password: z.string().optional(), | ||
| database: z.string(), | ||
| port: z.string().optional(), | ||
| sshEnabled: z.boolean().optional(), | ||
| sshHost: z.string().optional(), | ||
| sshPort: z.string().optional(), | ||
| sshUser: z.string().optional(), | ||
| sslEnabled: z.boolean().optional(), | ||
| caCertificateName: z.string().optional(), | ||
| caCertificateText: z.string().optional() | ||
| }); | ||
| const databricksMetadataSchema = z.object({ | ||
| host: z.string(), | ||
| httpPath: z.string(), | ||
| token: z.string(), | ||
| port: z.string(), | ||
| schema: z.string().optional(), | ||
| catalog: z.string().optional(), | ||
| sshEnabled: z.boolean().optional(), | ||
| sshHost: z.string().optional(), | ||
| sshPort: z.string().optional(), | ||
| sshUser: z.string().optional() | ||
| }); | ||
| const dremioMetadataSchema = z.object({ | ||
| schema: z.string(), | ||
| host: z.string(), | ||
| port: z.string(), | ||
| token: z.string(), | ||
| sshEnabled: z.boolean().optional(), | ||
| sshHost: z.string().optional(), | ||
| sshPort: z.string().optional(), | ||
| sshUser: z.string().optional() | ||
| }); | ||
| const mongodbMetadataSchema = z.object({ | ||
| connection_string: z.string(), | ||
| rawConnectionString: z.string().optional(), | ||
| prefix: z.string().optional(), | ||
| host: z.string().optional(), | ||
| port: z.string().optional(), | ||
| user: z.string().optional(), | ||
| password: z.string().optional(), | ||
| database: z.string().optional(), | ||
| options: z.string().optional(), | ||
| sshEnabled: z.boolean().optional(), | ||
| sshHost: z.string().optional(), | ||
| sshPort: z.string().optional(), | ||
| sshUser: z.string().optional(), | ||
| sslEnabled: z.boolean().optional(), | ||
| caCertificateName: z.string().optional(), | ||
| caCertificateText: z.string().optional() | ||
| }); | ||
| const pandasDataframeMetadataSchema = z.object({}); | ||
| const commonRedshiftMetadataSchema = z.object({ | ||
| database: z.string(), | ||
| host: z.string(), | ||
| port: z.string().optional(), | ||
| sshEnabled: z.boolean().optional(), | ||
| sshHost: z.string().optional(), | ||
| sshPort: z.string().optional(), | ||
| sshUser: z.string().optional(), | ||
| sslEnabled: z.boolean().optional(), | ||
| caCertificateName: z.string().optional(), | ||
| caCertificateText: z.string().optional() | ||
| }); | ||
| const redshiftMetadataSchema = z.discriminatedUnion("authMethod", [ | ||
| commonRedshiftMetadataSchema.extend({ | ||
| authMethod: z.literal(DatabaseAuthMethods.UsernameAndPassword), | ||
| user: z.string(), | ||
| password: z.string() | ||
| }), | ||
| commonRedshiftMetadataSchema.extend({ | ||
| authMethod: z.literal(AwsAuthMethods.IamRole), | ||
| roleArn: z.string(), | ||
| roleExternalId: z.string(), | ||
| roleNonce: z.string() | ||
| }), | ||
| commonRedshiftMetadataSchema.extend({ authMethod: z.literal(DatabaseAuthMethods.IndividualCredentials) }) | ||
| ]); | ||
| const commonSnowflakeMetadataSchema = z.object({ | ||
| accountName: z.string(), | ||
| warehouse: z.string().optional(), | ||
| database: z.string().optional(), | ||
| role: z.string().optional() | ||
| }); | ||
| const snowflakeMetadataSchema = z.discriminatedUnion("authMethod", [ | ||
| commonSnowflakeMetadataSchema.extend({ | ||
| authMethod: z.literal(SnowflakeAuthMethods.Password), | ||
| username: z.string(), | ||
| password: z.string() | ||
| }), | ||
| commonSnowflakeMetadataSchema.extend({ | ||
| authMethod: z.literal(SnowflakeAuthMethods.Okta), | ||
| clientId: z.string(), | ||
| clientSecret: z.string(), | ||
| oktaSubdomain: z.string(), | ||
| identityProvider: z.string(), | ||
| authorizationServer: z.string() | ||
| }), | ||
| commonSnowflakeMetadataSchema.extend({ | ||
| authMethod: z.literal(SnowflakeAuthMethods.NativeSnowflake), | ||
| clientId: z.string(), | ||
| clientSecret: z.string() | ||
| }), | ||
| commonSnowflakeMetadataSchema.extend({ | ||
| authMethod: z.literal(SnowflakeAuthMethods.AzureAd), | ||
| clientId: z.string(), | ||
| clientSecret: z.string(), | ||
| resource: z.string(), | ||
| tenant: z.string() | ||
| }), | ||
| commonSnowflakeMetadataSchema.extend({ authMethod: z.literal(SnowflakeAuthMethods.KeyPair) }), | ||
| commonSnowflakeMetadataSchema.extend({ | ||
| authMethod: z.literal(SnowflakeAuthMethods.ServiceAccountKeyPair), | ||
| username: z.string(), | ||
| privateKey: z.string(), | ||
| privateKeyPassphrase: z.string().optional() | ||
| }) | ||
| ]); | ||
| const spannerMetadataSchema = z.object({ | ||
| service_account: z.string(), | ||
| dataBoostEnabled: z.boolean(), | ||
| instance: z.string(), | ||
| database: z.string() | ||
| }); | ||
| const trinoMetadataSchema = z.object({ | ||
| host: z.string(), | ||
| user: z.string(), | ||
| password: z.string(), | ||
| database: z.string(), | ||
| port: z.string(), | ||
| sshEnabled: z.boolean().optional(), | ||
| sshHost: z.string().optional(), | ||
| sshPort: z.string().optional(), | ||
| sshUser: z.string().optional(), | ||
| sslEnabled: z.boolean().optional(), | ||
| caCertificateName: z.string().optional(), | ||
| caCertificateText: z.string().optional() | ||
| }); | ||
| const commonDatabaseSchema = z.object({ | ||
| host: z.string(), | ||
| user: z.string(), | ||
| password: z.string(), | ||
| database: z.string(), | ||
| sshEnabled: z.boolean().optional(), | ||
| sshHost: z.string().optional(), | ||
| sshPort: z.string().optional(), | ||
| sshUser: z.string().optional() | ||
| }); | ||
| const alloydbMetadataSchema = commonDatabaseSchema.extend({ | ||
| port: z.string().optional(), | ||
| sslEnabled: z.boolean().optional(), | ||
| caCertificateName: z.string().optional(), | ||
| caCertificateText: z.string().optional() | ||
| }); | ||
| const mariadbMetadataSchema = commonDatabaseSchema.extend({ | ||
| port: z.string().optional(), | ||
| caCertificateName: z.string().optional() | ||
| }); | ||
| const mindsdbMetadataSchema = commonDatabaseSchema.extend({ | ||
| port: z.string().optional(), | ||
| caCertificateName: z.string().optional() | ||
| }); | ||
| const mysqlMetadataSchema = commonDatabaseSchema.extend({ | ||
| port: z.string().optional(), | ||
| caCertificateName: z.string().optional() | ||
| }); | ||
| const pgsqlMetadataSchema = commonDatabaseSchema.extend({ | ||
| port: z.string().optional(), | ||
| sslEnabled: z.boolean().optional(), | ||
| caCertificateName: z.string().optional(), | ||
| caCertificateText: z.string().optional() | ||
| }); | ||
| const materializeMetadataSchema = pgsqlMetadataSchema.extend({ cluster: z.string() }); | ||
| const sqlServerMetadataSchema = commonDatabaseSchema.extend({ port: z.string() }); | ||
| const databaseMetadataSchemasByType = { | ||
| "alloydb": alloydbMetadataSchema, | ||
| "athena": athenaMetadataSchema, | ||
| "big-query": bigqueryMetadataSchema, | ||
| "clickhouse": clickhouseMetadataSchema, | ||
| "databricks": databricksMetadataSchema, | ||
| "dremio": dremioMetadataSchema, | ||
| "mariadb": mariadbMetadataSchema, | ||
| "materialize": materializeMetadataSchema, | ||
| "mindsdb": mindsdbMetadataSchema, | ||
| "mongodb": mongodbMetadataSchema, | ||
| "mysql": mysqlMetadataSchema, | ||
| "pandas-dataframe": pandasDataframeMetadataSchema, | ||
| "pgsql": pgsqlMetadataSchema, | ||
| "redshift": redshiftMetadataSchema, | ||
| "snowflake": snowflakeMetadataSchema, | ||
| "spanner": spannerMetadataSchema, | ||
| "sql-server": sqlServerMetadataSchema, | ||
| "trino": trinoMetadataSchema | ||
| }; | ||
| //#endregion | ||
| //#region src/database-integration-types.ts | ||
@@ -691,2 +819,3 @@ const sqlIntegrationTypes = [ | ||
| const databaseIntegrationTypesWithSslSupport = [ | ||
| "alloydb", | ||
| "clickhouse", | ||
@@ -702,4 +831,13 @@ "dremio", | ||
| ]; | ||
| function isDatabaseIntegrationType(type) { | ||
| return databaseIntegrationTypes.includes(type); | ||
| } | ||
| function isSqlIntegrationType(type) { | ||
| return sqlIntegrationTypes.includes(type); | ||
| } | ||
| function isDatabaseIntegrationTypeWithSslSupport(type) { | ||
| return databaseIntegrationTypesWithSslSupport.includes(type); | ||
| } | ||
| //#endregion | ||
| export { AwsAuthMethods, BigQueryAuthMethods, BigQueryServiceAccountParseError, DatabaseAuthMethods, SnowflakeAuthMethods, SpannerServiceAccountParseError, databaseIntegrationTypes, databaseIntegrationTypesWithSslSupport, databaseMetadataSchemasByType, getEnvironmentVariablesForIntegrations, getSqlAlchemyInput, isFederatedAuthMetadata, isFederatedAuthMethod, sqlIntegrationTypes }; | ||
| export { AwsAuthMethods, BigQueryAuthMethods, BigQueryServiceAccountParseError, DatabaseAuthMethods, SnowflakeAuthMethods, SpannerServiceAccountParseError, databaseIntegrationConfigSchema, databaseIntegrationTypes, databaseIntegrationTypesWithSslSupport, databaseMetadataSchemasByType, federatedAuthMethods, getEnvironmentVariablesForIntegrations, getSnowflakeFederatedAuthSqlAlchemyInput, getSqlAlchemyInput, isDatabaseIntegrationType, isDatabaseIntegrationTypeWithSslSupport, isFederatedAuthMetadata, isFederatedAuthMethod, isSqlIntegrationType, sqlIntegrationTypes }; |
+1
-1
| { | ||
| "name": "@deepnote/database-integrations", | ||
| "version": "1.1.1", | ||
| "version": "1.2.0", | ||
| "description": "Deepnote database integration definitions", | ||
@@ -5,0 +5,0 @@ "keywords": [], |
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
247193
84.06%4343
84.89%