@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 +374 -221
- package/dist/index.d.cts +1761 -47
- package/dist/index.d.ts +1761 -47
- package/dist/index.js +368 -220
- package/package.json +1 -2
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((
|
|
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((
|
|
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).
|
|
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;
|