@deepnote/database-integrations 1.1.0 → 1.2.0

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/dist/index.cjs CHANGED
@@ -21,8 +21,6 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
21
21
  }) : target, mod));
22
22
 
23
23
  //#endregion
24
- let build_url_ts = require("build-url-ts");
25
- build_url_ts = __toESM(build_url_ts);
26
24
  let zod = require("zod");
27
25
  zod = __toESM(zod);
28
26
 
@@ -62,12 +60,349 @@ function isFederatedAuthMetadata(metadata) {
62
60
  return isFederatedAuthMethod(metadata.authMethod);
63
61
  }
64
62
 
63
+ //#endregion
64
+ //#region src/database-integration-metadata-schemas.ts
65
+ const athenaMetadataSchema = zod.z.object({
66
+ access_key_id: zod.z.string(),
67
+ region: zod.z.string(),
68
+ s3_output_path: zod.z.string(),
69
+ secret_access_key: zod.z.string(),
70
+ workgroup: zod.z.string().optional()
71
+ });
72
+ const bigqueryMetadataSchema = zod.z.discriminatedUnion("authMethod", [zod.z.object({
73
+ authMethod: zod.z.literal(BigQueryAuthMethods.ServiceAccount),
74
+ service_account: zod.z.string()
75
+ }), zod.z.object({
76
+ authMethod: zod.z.literal(BigQueryAuthMethods.GoogleOauth),
77
+ project: zod.z.string(),
78
+ clientId: zod.z.string(),
79
+ clientSecret: zod.z.string()
80
+ })]);
81
+ const clickhouseMetadataSchema = zod.z.object({
82
+ host: zod.z.string(),
83
+ user: zod.z.string(),
84
+ password: zod.z.string().optional(),
85
+ database: zod.z.string(),
86
+ port: zod.z.string().optional(),
87
+ sshEnabled: zod.z.boolean().optional(),
88
+ sshHost: zod.z.string().optional(),
89
+ sshPort: zod.z.string().optional(),
90
+ sshUser: zod.z.string().optional(),
91
+ sslEnabled: zod.z.boolean().optional(),
92
+ caCertificateName: zod.z.string().optional(),
93
+ caCertificateText: zod.z.string().optional()
94
+ });
95
+ const databricksMetadataSchema = zod.z.object({
96
+ host: zod.z.string(),
97
+ httpPath: zod.z.string(),
98
+ token: zod.z.string(),
99
+ port: zod.z.string(),
100
+ schema: zod.z.string().optional(),
101
+ catalog: zod.z.string().optional(),
102
+ sshEnabled: zod.z.boolean().optional(),
103
+ sshHost: zod.z.string().optional(),
104
+ sshPort: zod.z.string().optional(),
105
+ sshUser: zod.z.string().optional()
106
+ });
107
+ const dremioMetadataSchema = zod.z.object({
108
+ schema: zod.z.string(),
109
+ host: zod.z.string(),
110
+ port: zod.z.string(),
111
+ token: zod.z.string(),
112
+ sshEnabled: zod.z.boolean().optional(),
113
+ sshHost: zod.z.string().optional(),
114
+ sshPort: zod.z.string().optional(),
115
+ sshUser: zod.z.string().optional()
116
+ });
117
+ const mongodbMetadataSchema = zod.z.object({
118
+ connection_string: zod.z.string(),
119
+ rawConnectionString: zod.z.string().optional(),
120
+ prefix: zod.z.string().optional(),
121
+ host: zod.z.string().optional(),
122
+ port: zod.z.string().optional(),
123
+ user: zod.z.string().optional(),
124
+ password: zod.z.string().optional(),
125
+ database: zod.z.string().optional(),
126
+ options: zod.z.string().optional(),
127
+ sshEnabled: zod.z.boolean().optional(),
128
+ sshHost: zod.z.string().optional(),
129
+ sshPort: zod.z.string().optional(),
130
+ sshUser: zod.z.string().optional(),
131
+ sslEnabled: zod.z.boolean().optional(),
132
+ caCertificateName: zod.z.string().optional(),
133
+ caCertificateText: zod.z.string().optional()
134
+ });
135
+ const pandasDataframeMetadataSchema = zod.z.object({});
136
+ const commonRedshiftMetadataSchema = zod.z.object({
137
+ database: zod.z.string(),
138
+ host: zod.z.string(),
139
+ port: zod.z.string().optional(),
140
+ sshEnabled: zod.z.boolean().optional(),
141
+ sshHost: zod.z.string().optional(),
142
+ sshPort: zod.z.string().optional(),
143
+ sshUser: zod.z.string().optional(),
144
+ sslEnabled: zod.z.boolean().optional(),
145
+ caCertificateName: zod.z.string().optional(),
146
+ caCertificateText: zod.z.string().optional()
147
+ });
148
+ const redshiftMetadataSchema = zod.z.discriminatedUnion("authMethod", [
149
+ commonRedshiftMetadataSchema.extend({
150
+ authMethod: zod.z.literal(DatabaseAuthMethods.UsernameAndPassword),
151
+ user: zod.z.string(),
152
+ password: zod.z.string()
153
+ }),
154
+ commonRedshiftMetadataSchema.extend({
155
+ authMethod: zod.z.literal(AwsAuthMethods.IamRole),
156
+ roleArn: zod.z.string(),
157
+ roleExternalId: zod.z.string(),
158
+ roleNonce: zod.z.string()
159
+ }),
160
+ commonRedshiftMetadataSchema.extend({ authMethod: zod.z.literal(DatabaseAuthMethods.IndividualCredentials) })
161
+ ]);
162
+ const commonSnowflakeMetadataSchema = zod.z.object({
163
+ accountName: zod.z.string(),
164
+ warehouse: zod.z.string().optional(),
165
+ database: zod.z.string().optional(),
166
+ role: zod.z.string().optional()
167
+ });
168
+ const snowflakeMetadataSchema = zod.z.discriminatedUnion("authMethod", [
169
+ commonSnowflakeMetadataSchema.extend({
170
+ authMethod: zod.z.literal(SnowflakeAuthMethods.Password),
171
+ username: zod.z.string(),
172
+ password: zod.z.string()
173
+ }),
174
+ commonSnowflakeMetadataSchema.extend({
175
+ authMethod: zod.z.literal(SnowflakeAuthMethods.Okta),
176
+ clientId: zod.z.string(),
177
+ clientSecret: zod.z.string(),
178
+ oktaSubdomain: zod.z.string(),
179
+ identityProvider: zod.z.string(),
180
+ authorizationServer: zod.z.string()
181
+ }),
182
+ commonSnowflakeMetadataSchema.extend({
183
+ authMethod: zod.z.literal(SnowflakeAuthMethods.NativeSnowflake),
184
+ clientId: zod.z.string(),
185
+ clientSecret: zod.z.string()
186
+ }),
187
+ commonSnowflakeMetadataSchema.extend({
188
+ authMethod: zod.z.literal(SnowflakeAuthMethods.AzureAd),
189
+ clientId: zod.z.string(),
190
+ clientSecret: zod.z.string(),
191
+ resource: zod.z.string(),
192
+ tenant: zod.z.string()
193
+ }),
194
+ commonSnowflakeMetadataSchema.extend({ authMethod: zod.z.literal(SnowflakeAuthMethods.KeyPair) }),
195
+ commonSnowflakeMetadataSchema.extend({
196
+ authMethod: zod.z.literal(SnowflakeAuthMethods.ServiceAccountKeyPair),
197
+ username: zod.z.string(),
198
+ privateKey: zod.z.string(),
199
+ privateKeyPassphrase: zod.z.string().optional()
200
+ })
201
+ ]);
202
+ const spannerMetadataSchema = zod.z.object({
203
+ service_account: zod.z.string(),
204
+ dataBoostEnabled: zod.z.boolean(),
205
+ instance: zod.z.string(),
206
+ database: zod.z.string()
207
+ });
208
+ const trinoMetadataSchema = zod.z.object({
209
+ host: zod.z.string(),
210
+ user: zod.z.string(),
211
+ password: zod.z.string(),
212
+ database: zod.z.string(),
213
+ port: zod.z.string(),
214
+ sshEnabled: zod.z.boolean().optional(),
215
+ sshHost: zod.z.string().optional(),
216
+ sshPort: zod.z.string().optional(),
217
+ sshUser: zod.z.string().optional(),
218
+ sslEnabled: zod.z.boolean().optional(),
219
+ caCertificateName: zod.z.string().optional(),
220
+ caCertificateText: zod.z.string().optional()
221
+ });
222
+ const commonDatabaseSchema = zod.z.object({
223
+ host: zod.z.string(),
224
+ user: zod.z.string(),
225
+ password: zod.z.string(),
226
+ database: zod.z.string(),
227
+ sshEnabled: zod.z.boolean().optional(),
228
+ sshHost: zod.z.string().optional(),
229
+ sshPort: zod.z.string().optional(),
230
+ sshUser: zod.z.string().optional()
231
+ });
232
+ const alloydbMetadataSchema = commonDatabaseSchema.extend({
233
+ port: zod.z.string().optional(),
234
+ sslEnabled: zod.z.boolean().optional(),
235
+ caCertificateName: zod.z.string().optional(),
236
+ caCertificateText: zod.z.string().optional()
237
+ });
238
+ const mariadbMetadataSchema = commonDatabaseSchema.extend({
239
+ port: zod.z.string().optional(),
240
+ sslEnabled: zod.z.boolean().optional(),
241
+ caCertificateName: zod.z.string().optional(),
242
+ caCertificateText: zod.z.string().optional()
243
+ });
244
+ const mindsdbMetadataSchema = commonDatabaseSchema.extend({
245
+ port: zod.z.string().optional(),
246
+ sslEnabled: zod.z.boolean().optional(),
247
+ caCertificateName: zod.z.string().optional(),
248
+ caCertificateText: zod.z.string().optional()
249
+ });
250
+ const mysqlMetadataSchema = commonDatabaseSchema.extend({
251
+ port: zod.z.string().optional(),
252
+ sslEnabled: zod.z.boolean().optional(),
253
+ caCertificateName: zod.z.string().optional(),
254
+ caCertificateText: zod.z.string().optional()
255
+ });
256
+ const pgsqlMetadataSchema = commonDatabaseSchema.extend({
257
+ port: zod.z.string().optional(),
258
+ sslEnabled: zod.z.boolean().optional(),
259
+ caCertificateName: zod.z.string().optional(),
260
+ caCertificateText: zod.z.string().optional()
261
+ });
262
+ const materializeMetadataSchema = pgsqlMetadataSchema.extend({ cluster: zod.z.string() });
263
+ const sqlServerMetadataSchema = commonDatabaseSchema.extend({ port: zod.z.string() });
264
+ const databaseMetadataSchemasByType = {
265
+ "alloydb": alloydbMetadataSchema,
266
+ "athena": athenaMetadataSchema,
267
+ "big-query": bigqueryMetadataSchema,
268
+ "clickhouse": clickhouseMetadataSchema,
269
+ "databricks": databricksMetadataSchema,
270
+ "dremio": dremioMetadataSchema,
271
+ "mariadb": mariadbMetadataSchema,
272
+ "materialize": materializeMetadataSchema,
273
+ "mindsdb": mindsdbMetadataSchema,
274
+ "mongodb": mongodbMetadataSchema,
275
+ "mysql": mysqlMetadataSchema,
276
+ "pandas-dataframe": pandasDataframeMetadataSchema,
277
+ "pgsql": pgsqlMetadataSchema,
278
+ "redshift": redshiftMetadataSchema,
279
+ "snowflake": snowflakeMetadataSchema,
280
+ "spanner": spannerMetadataSchema,
281
+ "sql-server": sqlServerMetadataSchema,
282
+ "trino": trinoMetadataSchema
283
+ };
284
+
285
+ //#endregion
286
+ //#region src/database-integration-config.ts
287
+ const commonIntegrationConfig = zod.default.object({
288
+ id: zod.default.string(),
289
+ name: zod.default.string()
290
+ });
291
+ const databaseIntegrationConfigSchema = zod.default.discriminatedUnion("type", [
292
+ commonIntegrationConfig.extend({
293
+ type: zod.default.literal("alloydb"),
294
+ metadata: databaseMetadataSchemasByType["alloydb"],
295
+ federated_auth_method: zod.default.null().optional()
296
+ }),
297
+ commonIntegrationConfig.extend({
298
+ type: zod.default.literal("athena"),
299
+ metadata: databaseMetadataSchemasByType["athena"],
300
+ federated_auth_method: zod.default.null().optional()
301
+ }),
302
+ commonIntegrationConfig.extend({
303
+ type: zod.default.literal("big-query"),
304
+ metadata: databaseMetadataSchemasByType["big-query"],
305
+ federated_auth_method: zod.default.enum(["google-oauth"]).optional().nullable()
306
+ }),
307
+ commonIntegrationConfig.extend({
308
+ type: zod.default.literal("clickhouse"),
309
+ metadata: databaseMetadataSchemasByType["clickhouse"],
310
+ federated_auth_method: zod.default.null().optional()
311
+ }),
312
+ commonIntegrationConfig.extend({
313
+ type: zod.default.literal("databricks"),
314
+ metadata: databaseMetadataSchemasByType["databricks"],
315
+ federated_auth_method: zod.default.null().optional()
316
+ }),
317
+ commonIntegrationConfig.extend({
318
+ type: zod.default.literal("dremio"),
319
+ metadata: databaseMetadataSchemasByType["dremio"],
320
+ federated_auth_method: zod.default.null().optional()
321
+ }),
322
+ commonIntegrationConfig.extend({
323
+ type: zod.default.literal("mariadb"),
324
+ metadata: databaseMetadataSchemasByType["mariadb"],
325
+ federated_auth_method: zod.default.null().optional()
326
+ }),
327
+ commonIntegrationConfig.extend({
328
+ type: zod.default.literal("materialize"),
329
+ metadata: databaseMetadataSchemasByType["materialize"],
330
+ federated_auth_method: zod.default.null().optional()
331
+ }),
332
+ commonIntegrationConfig.extend({
333
+ type: zod.default.literal("mindsdb"),
334
+ metadata: databaseMetadataSchemasByType["mindsdb"],
335
+ federated_auth_method: zod.default.null().optional()
336
+ }),
337
+ commonIntegrationConfig.extend({
338
+ type: zod.default.literal("mongodb"),
339
+ metadata: databaseMetadataSchemasByType["mongodb"],
340
+ federated_auth_method: zod.default.null().optional()
341
+ }),
342
+ commonIntegrationConfig.extend({
343
+ type: zod.default.literal("mysql"),
344
+ metadata: databaseMetadataSchemasByType["mysql"],
345
+ federated_auth_method: zod.default.null().optional()
346
+ }),
347
+ commonIntegrationConfig.extend({
348
+ type: zod.default.literal("pandas-dataframe"),
349
+ metadata: databaseMetadataSchemasByType["pandas-dataframe"],
350
+ federated_auth_method: zod.default.null().optional()
351
+ }),
352
+ commonIntegrationConfig.extend({
353
+ type: zod.default.literal("pgsql"),
354
+ metadata: databaseMetadataSchemasByType["pgsql"],
355
+ federated_auth_method: zod.default.null().optional()
356
+ }),
357
+ commonIntegrationConfig.extend({
358
+ type: zod.default.literal("redshift"),
359
+ metadata: databaseMetadataSchemasByType["redshift"],
360
+ federated_auth_method: zod.default.enum(["individual-credentials"]).optional().nullable()
361
+ }),
362
+ commonIntegrationConfig.extend({
363
+ type: zod.default.literal("snowflake"),
364
+ metadata: databaseMetadataSchemasByType["snowflake"],
365
+ federated_auth_method: zod.default.enum([
366
+ "okta",
367
+ "snowflake",
368
+ "azure",
369
+ "key-pair"
370
+ ]).optional().nullable()
371
+ }),
372
+ commonIntegrationConfig.extend({
373
+ type: zod.default.literal("spanner"),
374
+ metadata: databaseMetadataSchemasByType["spanner"],
375
+ federated_auth_method: zod.default.null().optional()
376
+ }),
377
+ commonIntegrationConfig.extend({
378
+ type: zod.default.literal("sql-server"),
379
+ metadata: databaseMetadataSchemasByType["sql-server"],
380
+ federated_auth_method: zod.default.null().optional()
381
+ }),
382
+ commonIntegrationConfig.extend({
383
+ type: zod.default.literal("trino"),
384
+ metadata: databaseMetadataSchemasByType["trino"],
385
+ federated_auth_method: zod.default.null().optional()
386
+ })
387
+ ]);
388
+
65
389
  //#endregion
66
390
  //#region src/snowflake-integration-env-vars.ts
391
+ /**
392
+ * Build a URL with path and query parameters using native URL API
393
+ */
394
+ function buildUrl(baseUrl, options) {
395
+ const url = new URL(baseUrl.replace(/^(\w+):\/\//, "http://"));
396
+ if (options.path) url.pathname = options.path;
397
+ if (options.queryParams) {
398
+ for (const [key, value] of Object.entries(options.queryParams)) if (value !== void 0) url.searchParams.set(key, value);
399
+ }
400
+ return url.href.replace(/^http:\/\//, baseUrl.match(/^(\w+):\/\//)?.[0] || "http://");
401
+ }
67
402
  function getSnowflakeSqlAlchemyInput(metadata, params) {
68
403
  if (isFederatedAuthMetadata(metadata)) return null;
69
404
  const { username, accountName, database, authMethod } = metadata;
70
- if (authMethod === SnowflakeAuthMethods.ServiceAccountKeyPair) return createSqlAlchemyInputFromUrl((0, build_url_ts.default)(`snowflake://${encodeURIComponent(username)}@${encodeURIComponent(accountName)}`, {
405
+ if (authMethod === SnowflakeAuthMethods.ServiceAccountKeyPair) return createSqlAlchemyInputFromUrl(buildUrl(`snowflake://${encodeURIComponent(username)}@${encodeURIComponent(accountName)}`, {
71
406
  path: database,
72
407
  queryParams: {
73
408
  ...createBaseQueryParams(metadata, params.snowflakePartnerIdentifier),
@@ -78,11 +413,27 @@ function getSnowflakeSqlAlchemyInput(metadata, params) {
78
413
  password: metadata.privateKeyPassphrase,
79
414
  username: metadata.username
80
415
  });
81
- return createSqlAlchemyInputFromUrl((0, build_url_ts.default)(`snowflake://${encodeURIComponent(username)}:${encodeURIComponent(metadata.password)}@${encodeURIComponent(accountName)}`, {
416
+ return createSqlAlchemyInputFromUrl(buildUrl(`snowflake://${encodeURIComponent(username)}:${encodeURIComponent(metadata.password)}@${encodeURIComponent(accountName)}`, {
82
417
  path: database,
83
418
  queryParams: { ...createBaseQueryParams(metadata, params.snowflakePartnerIdentifier) }
84
419
  }));
85
420
  }
421
+ function getSnowflakeFederatedAuthSqlAlchemyInput(metadata, options = {}) {
422
+ return createSqlAlchemyInputFromUrl(buildSnowflakeUrlForFederatedAuth(metadata, options), options.keyPair);
423
+ }
424
+ function buildSnowflakeUrlForFederatedAuth(metadata, options) {
425
+ const queryParams = { ...createBaseQueryParams(metadata, options.snowflakePartnerIdentifier) };
426
+ if (options.role) queryParams.role = options.role;
427
+ if (options.accessToken) {
428
+ queryParams.token = options.accessToken;
429
+ queryParams.authenticator = "oauth";
430
+ }
431
+ const accountIdentifier = metadata.accountName.replace(".privatelink", "");
432
+ return buildUrl(options.keyPair?.username ? `snowflake://${encodeURIComponent(options.keyPair.username)}@${encodeURIComponent(accountIdentifier)}` : `snowflake://:@${encodeURIComponent(accountIdentifier)}`, {
433
+ path: metadata.database,
434
+ queryParams
435
+ });
436
+ }
86
437
  function createBaseQueryParams(metadata, snowflakePartnerIdentifier) {
87
438
  return {
88
439
  warehouse: metadata.warehouse,
@@ -108,7 +459,9 @@ function getEnvironmentVariablesForIntegrations(integrations, params) {
108
459
  const errors = [];
109
460
  integrations.forEach((integration) => {
110
461
  const namePrefix = convertToEnvironmentVariableName(integration.name);
111
- const envVarsForThisIntegration = Object.entries(integration.metadata).map(([key, rawValue]) => {
462
+ const envVarsForThisIntegration = Object.entries(integration.metadata).filter(([key]) => {
463
+ return key !== "caCertificateText";
464
+ }).map(([key, rawValue]) => {
112
465
  const name = `${namePrefix}_${key.toUpperCase()}`;
113
466
  const value = String(rawValue);
114
467
  if (integration.type === "mongodb" && integration.metadata.sslEnabled && key === "connection_string") return {
@@ -460,222 +813,6 @@ function assertNever(value) {
460
813
  throw new Error(`Unexpected value: ${value}`);
461
814
  }
462
815
 
463
- //#endregion
464
- //#region src/database-integration-metadata-schemas.ts
465
- const athenaMetadataSchema = zod.z.object({
466
- access_key_id: zod.z.string(),
467
- region: zod.z.string(),
468
- s3_output_path: zod.z.string(),
469
- secret_access_key: zod.z.string(),
470
- workgroup: zod.z.string().optional()
471
- });
472
- const bigqueryMetadataSchema = zod.z.discriminatedUnion("authMethod", [zod.z.object({
473
- authMethod: zod.z.literal(BigQueryAuthMethods.ServiceAccount),
474
- service_account: zod.z.string()
475
- }), zod.z.object({
476
- authMethod: zod.z.literal(BigQueryAuthMethods.GoogleOauth),
477
- project: zod.z.string(),
478
- clientId: zod.z.string(),
479
- clientSecret: zod.z.string()
480
- })]);
481
- const clickhouseMetadataSchema = zod.z.object({
482
- host: zod.z.string(),
483
- user: zod.z.string(),
484
- password: zod.z.string().optional(),
485
- database: zod.z.string(),
486
- port: zod.z.string().optional(),
487
- sshEnabled: zod.z.boolean().optional(),
488
- sshHost: zod.z.string().optional(),
489
- sshPort: zod.z.string().optional(),
490
- sshUser: zod.z.string().optional(),
491
- sslEnabled: zod.z.boolean().optional(),
492
- caCertificateName: zod.z.string().optional(),
493
- caCertificateText: zod.z.string().optional()
494
- });
495
- const databricksMetadataSchema = zod.z.object({
496
- host: zod.z.string(),
497
- httpPath: zod.z.string(),
498
- token: zod.z.string(),
499
- port: zod.z.string(),
500
- schema: zod.z.string().optional(),
501
- catalog: zod.z.string().optional(),
502
- sshEnabled: zod.z.boolean().optional(),
503
- sshHost: zod.z.string().optional(),
504
- sshPort: zod.z.string().optional(),
505
- sshUser: zod.z.string().optional()
506
- });
507
- const dremioMetadataSchema = zod.z.object({
508
- schema: zod.z.string(),
509
- host: zod.z.string(),
510
- port: zod.z.string(),
511
- token: zod.z.string(),
512
- sshEnabled: zod.z.boolean().optional(),
513
- sshHost: zod.z.string().optional(),
514
- sshPort: zod.z.string().optional(),
515
- sshUser: zod.z.string().optional()
516
- });
517
- const mongodbMetadataSchema = zod.z.object({
518
- connection_string: zod.z.string(),
519
- rawConnectionString: zod.z.string().optional(),
520
- prefix: zod.z.string().optional(),
521
- host: zod.z.string().optional(),
522
- port: zod.z.string().optional(),
523
- user: zod.z.string().optional(),
524
- password: zod.z.string().optional(),
525
- database: zod.z.string().optional(),
526
- options: zod.z.string().optional(),
527
- sshEnabled: zod.z.boolean().optional(),
528
- sshHost: zod.z.string().optional(),
529
- sshPort: zod.z.string().optional(),
530
- sshUser: zod.z.string().optional(),
531
- sslEnabled: zod.z.boolean().optional(),
532
- caCertificateName: zod.z.string().optional(),
533
- caCertificateText: zod.z.string().optional()
534
- });
535
- const pandasDataframeMetadataSchema = zod.z.object({});
536
- const commonRedshiftMetadataSchema = zod.z.object({
537
- database: zod.z.string(),
538
- host: zod.z.string(),
539
- port: zod.z.string().optional(),
540
- sshEnabled: zod.z.boolean().optional(),
541
- sshHost: zod.z.string().optional(),
542
- sshPort: zod.z.string().optional(),
543
- sshUser: zod.z.string().optional(),
544
- sslEnabled: zod.z.boolean().optional(),
545
- caCertificateName: zod.z.string().optional(),
546
- caCertificateText: zod.z.string().optional()
547
- });
548
- const redshiftMetadataSchema = zod.z.discriminatedUnion("authMethod", [
549
- commonRedshiftMetadataSchema.extend({
550
- authMethod: zod.z.literal(DatabaseAuthMethods.UsernameAndPassword),
551
- user: zod.z.string(),
552
- password: zod.z.string()
553
- }),
554
- commonRedshiftMetadataSchema.extend({
555
- authMethod: zod.z.literal(AwsAuthMethods.IamRole),
556
- roleArn: zod.z.string(),
557
- roleExternalId: zod.z.string(),
558
- roleNonce: zod.z.string()
559
- }),
560
- commonRedshiftMetadataSchema.extend({ authMethod: zod.z.literal(DatabaseAuthMethods.IndividualCredentials) })
561
- ]);
562
- const commonSnowflakeMetadataSchema = zod.z.object({
563
- accountName: zod.z.string(),
564
- warehouse: zod.z.string().optional(),
565
- database: zod.z.string().optional(),
566
- role: zod.z.string().optional()
567
- });
568
- const snowflakeMetadataSchema = zod.z.discriminatedUnion("authMethod", [
569
- commonSnowflakeMetadataSchema.extend({
570
- authMethod: zod.z.literal(SnowflakeAuthMethods.Password),
571
- username: zod.z.string(),
572
- password: zod.z.string()
573
- }),
574
- commonSnowflakeMetadataSchema.extend({
575
- authMethod: zod.z.literal(SnowflakeAuthMethods.Okta),
576
- clientId: zod.z.string(),
577
- clientSecret: zod.z.string(),
578
- oktaSubdomain: zod.z.string(),
579
- identityProvider: zod.z.string(),
580
- authorizationServer: zod.z.string()
581
- }),
582
- commonSnowflakeMetadataSchema.extend({
583
- authMethod: zod.z.literal(SnowflakeAuthMethods.NativeSnowflake),
584
- clientId: zod.z.string(),
585
- clientSecret: zod.z.string()
586
- }),
587
- commonSnowflakeMetadataSchema.extend({
588
- authMethod: zod.z.literal(SnowflakeAuthMethods.AzureAd),
589
- clientId: zod.z.string(),
590
- clientSecret: zod.z.string(),
591
- resource: zod.z.string(),
592
- tenant: zod.z.string()
593
- }),
594
- commonSnowflakeMetadataSchema.extend({ authMethod: zod.z.literal(SnowflakeAuthMethods.KeyPair) }),
595
- commonSnowflakeMetadataSchema.extend({
596
- authMethod: zod.z.literal(SnowflakeAuthMethods.ServiceAccountKeyPair),
597
- username: zod.z.string(),
598
- privateKey: zod.z.string(),
599
- privateKeyPassphrase: zod.z.string().optional()
600
- })
601
- ]);
602
- const spannerMetadataSchema = zod.z.object({
603
- service_account: zod.z.string(),
604
- dataBoostEnabled: zod.z.boolean(),
605
- instance: zod.z.string(),
606
- database: zod.z.string()
607
- });
608
- const trinoMetadataSchema = zod.z.object({
609
- host: zod.z.string(),
610
- user: zod.z.string(),
611
- password: zod.z.string(),
612
- database: zod.z.string(),
613
- port: zod.z.string(),
614
- sshEnabled: zod.z.boolean().optional(),
615
- sshHost: zod.z.string().optional(),
616
- sshPort: zod.z.string().optional(),
617
- sshUser: zod.z.string().optional(),
618
- sslEnabled: zod.z.boolean().optional(),
619
- caCertificateName: zod.z.string().optional(),
620
- caCertificateText: zod.z.string().optional()
621
- });
622
- const commonDatabaseSchema = zod.z.object({
623
- host: zod.z.string(),
624
- user: zod.z.string(),
625
- password: zod.z.string(),
626
- database: zod.z.string(),
627
- sshEnabled: zod.z.boolean().optional(),
628
- sshHost: zod.z.string().optional(),
629
- sshPort: zod.z.string().optional(),
630
- sshUser: zod.z.string().optional()
631
- });
632
- const alloydbMetadataSchema = commonDatabaseSchema.extend({
633
- port: zod.z.string().optional(),
634
- sslEnabled: zod.z.boolean().optional(),
635
- caCertificateName: zod.z.string().optional(),
636
- caCertificateText: zod.z.string().optional()
637
- });
638
- const mariadbMetadataSchema = commonDatabaseSchema.extend({
639
- port: zod.z.string().optional(),
640
- caCertificateName: zod.z.string().optional()
641
- });
642
- const mindsdbMetadataSchema = commonDatabaseSchema.extend({
643
- port: zod.z.string().optional(),
644
- caCertificateName: zod.z.string().optional()
645
- });
646
- const mysqlMetadataSchema = commonDatabaseSchema.extend({
647
- port: zod.z.string().optional(),
648
- caCertificateName: zod.z.string().optional()
649
- });
650
- const pgsqlMetadataSchema = commonDatabaseSchema.extend({
651
- port: zod.z.string().optional(),
652
- sslEnabled: zod.z.boolean().optional(),
653
- caCertificateName: zod.z.string().optional(),
654
- caCertificateText: zod.z.string().optional()
655
- });
656
- const materializeMetadataSchema = pgsqlMetadataSchema.extend({ cluster: zod.z.string() });
657
- const sqlServerMetadataSchema = commonDatabaseSchema.extend({ port: zod.z.string() });
658
- const databaseMetadataSchemasByType = {
659
- "alloydb": alloydbMetadataSchema,
660
- "athena": athenaMetadataSchema,
661
- "big-query": bigqueryMetadataSchema,
662
- "clickhouse": clickhouseMetadataSchema,
663
- "databricks": databricksMetadataSchema,
664
- "dremio": dremioMetadataSchema,
665
- "mariadb": mariadbMetadataSchema,
666
- "materialize": materializeMetadataSchema,
667
- "mindsdb": mindsdbMetadataSchema,
668
- "mongodb": mongodbMetadataSchema,
669
- "mysql": mysqlMetadataSchema,
670
- "pandas-dataframe": pandasDataframeMetadataSchema,
671
- "pgsql": pgsqlMetadataSchema,
672
- "redshift": redshiftMetadataSchema,
673
- "snowflake": snowflakeMetadataSchema,
674
- "spanner": spannerMetadataSchema,
675
- "sql-server": sqlServerMetadataSchema,
676
- "trino": trinoMetadataSchema
677
- };
678
-
679
816
  //#endregion
680
817
  //#region src/database-integration-types.ts
681
818
  const sqlIntegrationTypes = [
@@ -699,6 +836,7 @@ const sqlIntegrationTypes = [
699
836
  ];
700
837
  const databaseIntegrationTypes = [...sqlIntegrationTypes, "mongodb"];
701
838
  const databaseIntegrationTypesWithSslSupport = [
839
+ "alloydb",
702
840
  "clickhouse",
703
841
  "dremio",
704
842
  "mariadb",
@@ -709,6 +847,15 @@ const databaseIntegrationTypesWithSslSupport = [
709
847
  "redshift",
710
848
  "trino"
711
849
  ];
850
+ function isDatabaseIntegrationType(type) {
851
+ return databaseIntegrationTypes.includes(type);
852
+ }
853
+ function isSqlIntegrationType(type) {
854
+ return sqlIntegrationTypes.includes(type);
855
+ }
856
+ function isDatabaseIntegrationTypeWithSslSupport(type) {
857
+ return databaseIntegrationTypesWithSslSupport.includes(type);
858
+ }
712
859
 
713
860
  //#endregion
714
861
  exports.AwsAuthMethods = AwsAuthMethods;
@@ -717,11 +864,17 @@ exports.BigQueryServiceAccountParseError = BigQueryServiceAccountParseError;
717
864
  exports.DatabaseAuthMethods = DatabaseAuthMethods;
718
865
  exports.SnowflakeAuthMethods = SnowflakeAuthMethods;
719
866
  exports.SpannerServiceAccountParseError = SpannerServiceAccountParseError;
867
+ exports.databaseIntegrationConfigSchema = databaseIntegrationConfigSchema;
720
868
  exports.databaseIntegrationTypes = databaseIntegrationTypes;
721
869
  exports.databaseIntegrationTypesWithSslSupport = databaseIntegrationTypesWithSslSupport;
722
870
  exports.databaseMetadataSchemasByType = databaseMetadataSchemasByType;
871
+ exports.federatedAuthMethods = federatedAuthMethods;
723
872
  exports.getEnvironmentVariablesForIntegrations = getEnvironmentVariablesForIntegrations;
873
+ exports.getSnowflakeFederatedAuthSqlAlchemyInput = getSnowflakeFederatedAuthSqlAlchemyInput;
724
874
  exports.getSqlAlchemyInput = getSqlAlchemyInput;
875
+ exports.isDatabaseIntegrationType = isDatabaseIntegrationType;
876
+ exports.isDatabaseIntegrationTypeWithSslSupport = isDatabaseIntegrationTypeWithSslSupport;
725
877
  exports.isFederatedAuthMetadata = isFederatedAuthMetadata;
726
878
  exports.isFederatedAuthMethod = isFederatedAuthMethod;
879
+ exports.isSqlIntegrationType = isSqlIntegrationType;
727
880
  exports.sqlIntegrationTypes = sqlIntegrationTypes;