@deepnote/database-integrations 1.3.1 → 1.3.3

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.js CHANGED
@@ -17,6 +17,10 @@ const BigQueryAuthMethods = {
17
17
  ServiceAccount: "service-account",
18
18
  GoogleOauth: "google-oauth"
19
19
  };
20
+ const TrinoAuthMethods = {
21
+ Password: "password",
22
+ Oauth: "oauth"
23
+ };
20
24
  const DatabaseAuthMethods = {
21
25
  UsernameAndPassword: "username-and-password",
22
26
  IndividualCredentials: "individual-credentials"
@@ -27,7 +31,8 @@ const federatedAuthMethods = [
27
31
  SnowflakeAuthMethods.AzureAd,
28
32
  SnowflakeAuthMethods.KeyPair,
29
33
  BigQueryAuthMethods.GoogleOauth,
30
- DatabaseAuthMethods.IndividualCredentials
34
+ DatabaseAuthMethods.IndividualCredentials,
35
+ TrinoAuthMethods.Oauth
31
36
  ];
32
37
  function isFederatedAuthMethod(authMethod) {
33
38
  return federatedAuthMethods.includes(authMethod);
@@ -121,9 +126,15 @@ const commonRedshiftMetadataSchema = z.object({
121
126
  caCertificateName: z.string().optional(),
122
127
  caCertificateText: z.string().optional()
123
128
  });
124
- const redshiftMetadataSchema = z.discriminatedUnion("authMethod", [
129
+ const redshiftMetadataSchema = z.preprocess((data) => {
130
+ if (typeof data === "object" && data !== null && (!("authMethod" in data) || !data.authMethod)) return {
131
+ ...data,
132
+ authMethod: DatabaseAuthMethods.UsernameAndPassword
133
+ };
134
+ return data;
135
+ }, z.union([
125
136
  commonRedshiftMetadataSchema.extend({
126
- authMethod: z.literal(DatabaseAuthMethods.UsernameAndPassword),
137
+ authMethod: z.literal(DatabaseAuthMethods.UsernameAndPassword).optional(),
127
138
  user: z.string(),
128
139
  password: z.string()
129
140
  }),
@@ -134,7 +145,7 @@ const redshiftMetadataSchema = z.discriminatedUnion("authMethod", [
134
145
  roleNonce: z.string()
135
146
  }),
136
147
  commonRedshiftMetadataSchema.extend({ authMethod: z.literal(DatabaseAuthMethods.IndividualCredentials) })
137
- ]);
148
+ ]));
138
149
  const commonSnowflakeMetadataSchema = z.object({
139
150
  accountName: z.string(),
140
151
  warehouse: z.string().optional(),
@@ -181,12 +192,10 @@ const spannerMetadataSchema = z.object({
181
192
  instance: z.string(),
182
193
  database: z.string()
183
194
  });
184
- const trinoMetadataSchema = z.object({
195
+ const trinoBaseMetadataSchema = z.object({
185
196
  host: z.string(),
186
- user: z.string(),
187
- password: z.string(),
197
+ port: z.string().optional(),
188
198
  database: z.string(),
189
- port: z.string(),
190
199
  sshEnabled: z.boolean().optional(),
191
200
  sshHost: z.string().optional(),
192
201
  sshPort: z.string().optional(),
@@ -195,6 +204,22 @@ const trinoMetadataSchema = z.object({
195
204
  caCertificateName: z.string().optional(),
196
205
  caCertificateText: z.string().optional()
197
206
  });
207
+ const trinoUsernamePasswordMetadataSchema = trinoBaseMetadataSchema.extend({
208
+ user: z.string(),
209
+ password: z.string()
210
+ });
211
+ const trinoOAuthMetadataSchema = trinoBaseMetadataSchema.extend({
212
+ authMethod: z.literal(TrinoAuthMethods.Oauth),
213
+ clientId: z.string(),
214
+ clientSecret: z.string(),
215
+ authUrl: z.string().url(),
216
+ tokenUrl: z.string().url()
217
+ });
218
+ const trinoMetadataSchema = z.discriminatedUnion("authMethod", [
219
+ trinoUsernamePasswordMetadataSchema.extend({ authMethod: z.literal(null) }),
220
+ trinoUsernamePasswordMetadataSchema.extend({ authMethod: z.literal(TrinoAuthMethods.Password) }),
221
+ trinoOAuthMetadataSchema
222
+ ]);
198
223
  const commonDatabaseSchema = z.object({
199
224
  host: z.string(),
200
225
  user: z.string(),
@@ -604,6 +629,7 @@ const getPostgresSqlAlchemyInput = (integrationId, projectRootDirectory, { user,
604
629
  };
605
630
  };
606
631
  const getRedshiftSqlAlchemyInput = (integrationId, projectRootDirectory, metadata) => {
632
+ if (!metadata.authMethod) metadata.authMethod = DatabaseAuthMethods.UsernameAndPassword;
607
633
  if (isFederatedAuthMethod(metadata.authMethod)) return null;
608
634
  const portSuffix = metadata.port ? `:${metadata.port}` : "";
609
635
  const mode = getPostgresStyleMode(metadata.caCertificateName, metadata.sslEnabled);
@@ -664,6 +690,7 @@ const getMaterializePostgresSqlAlchemyInput = (integrationId, projectRootDirecto
664
690
  };
665
691
  };
666
692
  const getTrinoEnvVars = (integrationId, metadata, projectRootDirectory) => {
693
+ if (metadata.authMethod === TrinoAuthMethods.Oauth) return null;
667
694
  return {
668
695
  url: `trino://${encodeURIComponent(metadata.user)}:${encodeURIComponent(metadata.password)}@${metadata.host}:${metadata.port}/${encodeURIComponent(metadata.database)}`,
669
696
  params: { connect_args: {
@@ -840,4 +867,4 @@ function isDatabaseIntegrationTypeWithSslSupport(type) {
840
867
  }
841
868
 
842
869
  //#endregion
843
- export { AwsAuthMethods, BigQueryAuthMethods, BigQueryServiceAccountParseError, DatabaseAuthMethods, SnowflakeAuthMethods, SpannerServiceAccountParseError, databaseIntegrationConfigSchema, databaseIntegrationTypes, databaseIntegrationTypesWithSslSupport, databaseMetadataSchemasByType, federatedAuthMethods, getEnvironmentVariablesForIntegrations, getSnowflakeFederatedAuthSqlAlchemyInput, getSqlAlchemyInput, isDatabaseIntegrationType, isDatabaseIntegrationTypeWithSslSupport, isFederatedAuthMetadata, isFederatedAuthMethod, isSqlIntegrationType, sqlIntegrationTypes };
870
+ export { AwsAuthMethods, BigQueryAuthMethods, BigQueryServiceAccountParseError, DatabaseAuthMethods, SnowflakeAuthMethods, SpannerServiceAccountParseError, TrinoAuthMethods, databaseIntegrationConfigSchema, databaseIntegrationTypes, databaseIntegrationTypesWithSslSupport, databaseMetadataSchemasByType, federatedAuthMethods, getEnvironmentVariablesForIntegrations, getSnowflakeFederatedAuthSqlAlchemyInput, getSqlAlchemyInput, isDatabaseIntegrationType, isDatabaseIntegrationTypeWithSslSupport, isFederatedAuthMetadata, isFederatedAuthMethod, isSqlIntegrationType, sqlIntegrationTypes };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@deepnote/database-integrations",
3
- "version": "1.3.1",
3
+ "version": "1.3.3",
4
4
  "description": "Deepnote database integration definitions",
5
5
  "keywords": [],
6
6
  "repository": {