@deepnote/database-integrations 1.5.0 → 1.7.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 +78 -47
- package/dist/index.d.cts +1016 -992
- package/dist/index.d.ts +1016 -992
- package/dist/index.js +69 -38
- package/package.json +5 -5
package/dist/index.js
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import z, { z as z$1 } from "zod";
|
|
2
2
|
import { isMap, isSeq, parseDocument } from "yaml";
|
|
3
3
|
import { parseYaml } from "@deepnote/blocks";
|
|
4
|
-
|
|
5
4
|
//#region src/sql-integration-auth-methods.ts
|
|
6
5
|
const AwsAuthMethods = {
|
|
7
6
|
AccessKeys: "access-keys",
|
|
@@ -42,7 +41,6 @@ function isFederatedAuthMethod(authMethod) {
|
|
|
42
41
|
function isFederatedAuthMetadata(metadata) {
|
|
43
42
|
return metadata.authMethod !== void 0 && isFederatedAuthMethod(metadata.authMethod);
|
|
44
43
|
}
|
|
45
|
-
|
|
46
44
|
//#endregion
|
|
47
45
|
//#region src/database-integration-metadata-schemas.ts
|
|
48
46
|
const athenaMetadataSchema = z$1.object({
|
|
@@ -270,8 +268,6 @@ const pgsqlMetadataSchema = commonDatabaseSchema.extend({
|
|
|
270
268
|
caCertificateName: z$1.string().optional(),
|
|
271
269
|
caCertificateText: z$1.string().optional()
|
|
272
270
|
});
|
|
273
|
-
const materializeMetadataSchema = pgsqlMetadataSchema.extend({ cluster: z$1.string() });
|
|
274
|
-
const sqlServerMetadataSchema = commonDatabaseSchema.extend({ port: z$1.string() });
|
|
275
271
|
const databaseMetadataSchemasByType = {
|
|
276
272
|
"alloydb": alloydbMetadataSchema,
|
|
277
273
|
"athena": athenaMetadataSchema,
|
|
@@ -281,7 +277,7 @@ const databaseMetadataSchemasByType = {
|
|
|
281
277
|
"databricks": databricksMetadataSchema,
|
|
282
278
|
"dremio": dremioMetadataSchema,
|
|
283
279
|
"mariadb": mariadbMetadataSchema,
|
|
284
|
-
"materialize":
|
|
280
|
+
"materialize": pgsqlMetadataSchema.extend({ cluster: z$1.string() }),
|
|
285
281
|
"mindsdb": mindsdbMetadataSchema,
|
|
286
282
|
"mongodb": mongodbMetadataSchema,
|
|
287
283
|
"mysql": mysqlMetadataSchema,
|
|
@@ -290,10 +286,9 @@ const databaseMetadataSchemasByType = {
|
|
|
290
286
|
"redshift": redshiftMetadataSchema,
|
|
291
287
|
"snowflake": snowflakeMetadataSchema,
|
|
292
288
|
"spanner": spannerMetadataSchema,
|
|
293
|
-
"sql-server":
|
|
289
|
+
"sql-server": commonDatabaseSchema.extend({ port: z$1.string() }),
|
|
294
290
|
"trino": trinoMetadataSchema
|
|
295
291
|
};
|
|
296
|
-
|
|
297
292
|
//#endregion
|
|
298
293
|
//#region src/database-integration-config.ts
|
|
299
294
|
const commonIntegrationConfig = z.object({
|
|
@@ -408,7 +403,6 @@ const databaseIntegrationConfigSchema = z.discriminatedUnion("type", [
|
|
|
408
403
|
federated_auth_method: z.enum(["trino-oauth", "password"]).optional().nullable()
|
|
409
404
|
})
|
|
410
405
|
]);
|
|
411
|
-
|
|
412
406
|
//#endregion
|
|
413
407
|
//#region src/snowflake-integration-env-vars.ts
|
|
414
408
|
/**
|
|
@@ -474,7 +468,6 @@ function createSqlAlchemyInputFromUrl(url, keyPair) {
|
|
|
474
468
|
param_style: "pyformat"
|
|
475
469
|
};
|
|
476
470
|
}
|
|
477
|
-
|
|
478
471
|
//#endregion
|
|
479
472
|
//#region src/database-integration-env-vars.ts
|
|
480
473
|
function getEnvironmentVariablesForIntegrations(integrations, params) {
|
|
@@ -839,7 +832,6 @@ function getSqlEnvVarName(integrationId) {
|
|
|
839
832
|
function assertNever(value) {
|
|
840
833
|
throw new Error(`Unexpected value: ${value}`);
|
|
841
834
|
}
|
|
842
|
-
|
|
843
835
|
//#endregion
|
|
844
836
|
//#region src/database-integration-types.ts
|
|
845
837
|
const sqlIntegrationTypes = [
|
|
@@ -884,7 +876,6 @@ function isSqlIntegrationType(type) {
|
|
|
884
876
|
function isDatabaseIntegrationTypeWithSslSupport(type) {
|
|
885
877
|
return databaseIntegrationTypesWithSslSupport.includes(type);
|
|
886
878
|
}
|
|
887
|
-
|
|
888
879
|
//#endregion
|
|
889
880
|
//#region src/loading/api-error.ts
|
|
890
881
|
/**
|
|
@@ -898,18 +889,31 @@ var ApiError = class extends Error {
|
|
|
898
889
|
this.statusCode = statusCode;
|
|
899
890
|
}
|
|
900
891
|
};
|
|
901
|
-
|
|
902
892
|
//#endregion
|
|
903
893
|
//#region src/loading/constants.ts
|
|
904
|
-
/** Built-in integrations that don't require external configuration. */
|
|
905
|
-
const BUILTIN_INTEGRATIONS = new Set(["deepnote-dataframe-sql", "pandas-dataframe"]);
|
|
894
|
+
/** Built-in integrations that don't require external configuration. Keys are canonical lowercase IDs. */
|
|
895
|
+
const BUILTIN_INTEGRATIONS = /* @__PURE__ */ new Set(["deepnote-dataframe-sql", "pandas-dataframe"]);
|
|
896
|
+
/**
|
|
897
|
+
* Return whether the given integration ID refers to a built-in integration.
|
|
898
|
+
*
|
|
899
|
+
* The comparison is case-insensitive: built-in IDs are stored as canonical
|
|
900
|
+
* lowercase strings in {@link BUILTIN_INTEGRATIONS}, and SQL block metadata may
|
|
901
|
+
* reference them in any casing (e.g. `Pandas-DataFrame`). This mirrors the
|
|
902
|
+
* case-insensitive env-var derivation in `getSqlEnvVarName`, so a built-in is
|
|
903
|
+
* recognized regardless of how a notebook cased its `sql_integration_id`.
|
|
904
|
+
*
|
|
905
|
+
* @param integrationId - The integration ID from SQL block metadata.
|
|
906
|
+
* @returns `true` when the ID matches a built-in integration regardless of casing.
|
|
907
|
+
*/
|
|
908
|
+
function isBuiltinIntegration(integrationId) {
|
|
909
|
+
return BUILTIN_INTEGRATIONS.has(integrationId.toLowerCase());
|
|
910
|
+
}
|
|
906
911
|
/** Default `.env` file name for storing integration secrets. */
|
|
907
912
|
const DEFAULT_ENV_FILE = ".env";
|
|
908
913
|
/** Default integrations file name. */
|
|
909
914
|
const DEFAULT_INTEGRATIONS_FILE = ".deepnote.env.yaml";
|
|
910
915
|
/** Default Deepnote API base URL. */
|
|
911
916
|
const DEFAULT_API_URL = "https://api.deepnote.com";
|
|
912
|
-
|
|
913
917
|
//#endregion
|
|
914
918
|
//#region src/loading/env-var-refs.ts
|
|
915
919
|
const ENV_VAR_REF_PREFIX = "env:";
|
|
@@ -918,7 +922,7 @@ function generateEnvVarName(integrationId, fieldPath) {
|
|
|
918
922
|
}
|
|
919
923
|
function parseEnvVarRef(value) {
|
|
920
924
|
if (typeof value !== "string") return null;
|
|
921
|
-
if (!value.startsWith(
|
|
925
|
+
if (!value.startsWith("env:")) return null;
|
|
922
926
|
const varName = value.slice(4);
|
|
923
927
|
if (!varName) return null;
|
|
924
928
|
return {
|
|
@@ -981,7 +985,6 @@ function resolveEnvVarRefsFromMap(obj, vars, currentPath) {
|
|
|
981
985
|
}
|
|
982
986
|
return obj;
|
|
983
987
|
}
|
|
984
|
-
|
|
985
988
|
//#endregion
|
|
986
989
|
//#region src/loading/fetch-integrations.ts
|
|
987
990
|
/**
|
|
@@ -992,15 +995,19 @@ const apiIntegrationSchema = z$1.object({
|
|
|
992
995
|
name: z$1.string(),
|
|
993
996
|
type: z$1.string(),
|
|
994
997
|
metadata: z$1.unknown(),
|
|
995
|
-
is_public: z$1.boolean(),
|
|
996
|
-
created_at: z$1.string(),
|
|
997
|
-
updated_at: z$1.string(),
|
|
998
|
-
federated_auth_method: z$1.string().
|
|
998
|
+
is_public: z$1.boolean().nullish(),
|
|
999
|
+
created_at: z$1.string().nullish(),
|
|
1000
|
+
updated_at: z$1.string().nullish(),
|
|
1001
|
+
federated_auth_method: z$1.string().nullish()
|
|
999
1002
|
}).passthrough();
|
|
1000
1003
|
/**
|
|
1001
1004
|
* Schema for the full API response.
|
|
1002
1005
|
*/
|
|
1003
1006
|
const apiResponseSchema = z$1.object({ integrations: z$1.array(apiIntegrationSchema) }).passthrough();
|
|
1007
|
+
const REQUEST_TIMEOUT_MS = 3e4;
|
|
1008
|
+
function trimTrailingSlash(url) {
|
|
1009
|
+
return url.replace(/\/+$/, "");
|
|
1010
|
+
}
|
|
1004
1011
|
/**
|
|
1005
1012
|
* Fetch integrations from the Deepnote API.
|
|
1006
1013
|
*
|
|
@@ -1008,21 +1015,25 @@ const apiResponseSchema = z$1.object({ integrations: z$1.array(apiIntegrationSch
|
|
|
1008
1015
|
*
|
|
1009
1016
|
* @param baseUrl - The base URL of the Deepnote API
|
|
1010
1017
|
* @param token - The authentication token
|
|
1011
|
-
* @param integrationIds - Optional list of integration
|
|
1018
|
+
* @param integrationIds - Optional list of integration UUIDs to fetch. When provided, only these integrations are returned.
|
|
1012
1019
|
* @returns Array of integrations from the API
|
|
1013
1020
|
* @throws ApiError if the request fails
|
|
1014
1021
|
*/
|
|
1015
1022
|
async function fetchIntegrations(baseUrl, token, integrationIds) {
|
|
1016
|
-
const endpoint = new URL(`${baseUrl}/v2/integrations`);
|
|
1023
|
+
const endpoint = new URL(`${trimTrailingSlash(baseUrl)}/v2/integrations`);
|
|
1017
1024
|
endpoint.searchParams.set("includeMetadata", "true");
|
|
1018
|
-
if (integrationIds && integrationIds.length > 0)
|
|
1025
|
+
if (integrationIds && integrationIds.length > 0) {
|
|
1026
|
+
const normalizedIntegrationIds = new Set(integrationIds.map((id) => id.toLowerCase()));
|
|
1027
|
+
endpoint.searchParams.set("integrationIds", Array.from(normalizedIntegrationIds).join(","));
|
|
1028
|
+
}
|
|
1019
1029
|
const url = endpoint.toString();
|
|
1020
1030
|
const response = await fetch(url, {
|
|
1021
1031
|
method: "GET",
|
|
1022
1032
|
headers: {
|
|
1023
1033
|
Authorization: `Bearer ${token}`,
|
|
1024
1034
|
"Content-Type": "application/json"
|
|
1025
|
-
}
|
|
1035
|
+
},
|
|
1036
|
+
signal: AbortSignal.timeout(REQUEST_TIMEOUT_MS)
|
|
1026
1037
|
});
|
|
1027
1038
|
if (!response.ok) {
|
|
1028
1039
|
if (response.status === 401) throw new ApiError(401, "Authentication failed. Please check your API token.");
|
|
@@ -1034,21 +1045,38 @@ async function fetchIntegrations(baseUrl, token, integrationIds) {
|
|
|
1034
1045
|
if (!parseResult.success) throw new Error(`Invalid API response: ${parseResult.error.message}`);
|
|
1035
1046
|
return parseResult.data.integrations;
|
|
1036
1047
|
}
|
|
1037
|
-
|
|
1038
1048
|
//#endregion
|
|
1039
1049
|
//#region src/loading/integrations-document.ts
|
|
1040
1050
|
/**
|
|
1051
|
+
* Error thrown when integrations YAML content cannot be parsed.
|
|
1052
|
+
*/
|
|
1053
|
+
var IntegrationsYamlParseError = class extends Error {
|
|
1054
|
+
/** The underlying parse errors reported by the `yaml` library. */
|
|
1055
|
+
errors;
|
|
1056
|
+
constructor(errors) {
|
|
1057
|
+
super(`Failed to parse integrations YAML: ${errors[0]?.message ?? "unknown parse error"}`);
|
|
1058
|
+
this.name = "IntegrationsYamlParseError";
|
|
1059
|
+
this.errors = errors;
|
|
1060
|
+
}
|
|
1061
|
+
};
|
|
1062
|
+
/**
|
|
1041
1063
|
* Parse integrations YAML content into a mutable `yaml` Document that preserves
|
|
1042
1064
|
* comments and formatting. Returns `null` for empty content.
|
|
1043
1065
|
*
|
|
1044
1066
|
* This is the content-accepting counterpart of the Node-only `readIntegrationsDocument`.
|
|
1067
|
+
*
|
|
1068
|
+
* @throws {IntegrationsYamlParseError} If the content is not valid YAML. Malformed
|
|
1069
|
+
* content is rejected here rather than at serialization time, where `yaml` would
|
|
1070
|
+
* otherwise fail with an opaque "Document with errors cannot be stringified".
|
|
1045
1071
|
*/
|
|
1046
1072
|
function parseIntegrationsDocument(content) {
|
|
1047
1073
|
if (!content.trim()) return null;
|
|
1048
|
-
|
|
1074
|
+
const doc = parseDocument(content, {
|
|
1049
1075
|
strict: true,
|
|
1050
1076
|
version: "1.2"
|
|
1051
1077
|
});
|
|
1078
|
+
if (doc.errors.length > 0) throw new IntegrationsYamlParseError(doc.errors);
|
|
1079
|
+
return doc;
|
|
1052
1080
|
}
|
|
1053
1081
|
/**
|
|
1054
1082
|
* Serialize an integrations Document back to YAML text, preserving comments and
|
|
@@ -1057,7 +1085,6 @@ function parseIntegrationsDocument(content) {
|
|
|
1057
1085
|
function serializeIntegrationsDocument(doc) {
|
|
1058
1086
|
return doc.toString({ lineWidth: 0 });
|
|
1059
1087
|
}
|
|
1060
|
-
|
|
1061
1088
|
//#endregion
|
|
1062
1089
|
//#region src/loading/integrations-file-schema.ts
|
|
1063
1090
|
/**
|
|
@@ -1078,7 +1105,6 @@ function serializeIntegrationsDocument(doc) {
|
|
|
1078
1105
|
*/
|
|
1079
1106
|
const baseIntegrationsFileSchema = z$1.object({ integrations: z$1.array(z$1.record(z$1.unknown())).optional().default([]) });
|
|
1080
1107
|
const integrationsFileSchema = z$1.object({ integrations: z$1.array(databaseIntegrationConfigSchema) });
|
|
1081
|
-
|
|
1082
1108
|
//#endregion
|
|
1083
1109
|
//#region src/secret-field-paths.ts
|
|
1084
1110
|
/**
|
|
@@ -1114,7 +1140,8 @@ const SECRET_PATHS = {
|
|
|
1114
1140
|
"password",
|
|
1115
1141
|
"clientSecret",
|
|
1116
1142
|
"privateKey",
|
|
1117
|
-
"privateKeyPassphrase"
|
|
1143
|
+
"privateKeyPassphrase",
|
|
1144
|
+
"dbtServiceToken"
|
|
1118
1145
|
],
|
|
1119
1146
|
redshift: ["password", "caCertificateText"],
|
|
1120
1147
|
trino: [
|
|
@@ -1131,12 +1158,11 @@ const SECRET_PATHS = {
|
|
|
1131
1158
|
*
|
|
1132
1159
|
* @example
|
|
1133
1160
|
* getSecretFieldPaths('pgsql') // => ['password', 'caCertificateText']
|
|
1134
|
-
* getSecretFieldPaths('snowflake') // => ['password', 'clientSecret', 'privateKey', 'privateKeyPassphrase']
|
|
1161
|
+
* getSecretFieldPaths('snowflake') // => ['password', 'clientSecret', 'privateKey', 'privateKeyPassphrase', 'dbtServiceToken']
|
|
1135
1162
|
*/
|
|
1136
1163
|
function getSecretFieldPaths(type) {
|
|
1137
1164
|
return SECRET_PATHS[type] ?? [];
|
|
1138
1165
|
}
|
|
1139
|
-
|
|
1140
1166
|
//#endregion
|
|
1141
1167
|
//#region src/loading/merge-integrations.ts
|
|
1142
1168
|
/**
|
|
@@ -1206,7 +1232,7 @@ function updateIntegrationMetadataMap({ metadataMap, integrationId, integrationM
|
|
|
1206
1232
|
* @returns Record of extracted secrets (envVarName -> secretValue)
|
|
1207
1233
|
*/
|
|
1208
1234
|
function updateIntegrationInDocument(doc, integrationMap, integration) {
|
|
1209
|
-
const { id, name, type, metadata, federated_auth_method
|
|
1235
|
+
const { id, name, type, metadata, federated_auth_method, ...rest } = integration;
|
|
1210
1236
|
integrationMap.set("id", id);
|
|
1211
1237
|
integrationMap.set("name", name);
|
|
1212
1238
|
integrationMap.set("type", type);
|
|
@@ -1229,7 +1255,7 @@ function updateIntegrationInDocument(doc, integrationMap, integration) {
|
|
|
1229
1255
|
*/
|
|
1230
1256
|
function addIntegrationToSeq(doc, integrationsSeq, integration) {
|
|
1231
1257
|
const secretPaths = getSecretFieldPaths(integration.type);
|
|
1232
|
-
const { metadata
|
|
1258
|
+
const { metadata, ...restIntegration } = integration;
|
|
1233
1259
|
const integrationMap = doc.createNode(restIntegration);
|
|
1234
1260
|
const metadataMap = doc.createNode({});
|
|
1235
1261
|
const secrets = updateIntegrationMetadataMap({
|
|
@@ -1356,7 +1382,6 @@ function mergeApiIntegrationsIntoDocument(doc, apiIntegrations) {
|
|
|
1356
1382
|
skipped
|
|
1357
1383
|
};
|
|
1358
1384
|
}
|
|
1359
|
-
|
|
1360
1385
|
//#endregion
|
|
1361
1386
|
//#region src/loading/merge-into-yaml.ts
|
|
1362
1387
|
/**
|
|
@@ -1370,6 +1395,14 @@ function mergeApiIntegrationsIntoDocument(doc, apiIntegrations) {
|
|
|
1370
1395
|
*
|
|
1371
1396
|
* @param existingContent - Current YAML content, or `null` if the file doesn't exist yet
|
|
1372
1397
|
* @param apiIntegrations - Integrations fetched from the API
|
|
1398
|
+
*
|
|
1399
|
+
* @throws {IntegrationsYamlParseError} If `existingContent` is not valid YAML (for
|
|
1400
|
+
* example, unresolved git merge conflict markers). Callers that want to rebuild the
|
|
1401
|
+
* file from scratch instead of surfacing the error can catch it and re-run with
|
|
1402
|
+
* `mergeApiIntegrationsIntoYaml(null, apiIntegrations)` — note this discards the
|
|
1403
|
+
* existing content, including any local-only integrations and comments.
|
|
1404
|
+
* @throws {InvalidIntegrationsTypeError} If the existing `integrations` property is
|
|
1405
|
+
* present but is not a list.
|
|
1373
1406
|
*/
|
|
1374
1407
|
function mergeApiIntegrationsIntoYaml(existingContent, apiIntegrations) {
|
|
1375
1408
|
const doc = (existingContent != null ? parseIntegrationsDocument(existingContent) : null) ?? createNewDocument();
|
|
@@ -1382,7 +1415,6 @@ function mergeApiIntegrationsIntoYaml(existingContent, apiIntegrations) {
|
|
|
1382
1415
|
skipped
|
|
1383
1416
|
};
|
|
1384
1417
|
}
|
|
1385
|
-
|
|
1386
1418
|
//#endregion
|
|
1387
1419
|
//#region src/loading/parse-integrations.ts
|
|
1388
1420
|
/**
|
|
@@ -1471,6 +1503,5 @@ function parseIntegrations({ yaml, env = {} }) {
|
|
|
1471
1503
|
issues
|
|
1472
1504
|
};
|
|
1473
1505
|
}
|
|
1474
|
-
|
|
1475
1506
|
//#endregion
|
|
1476
|
-
export { ApiError, AwsAuthMethods, BUILTIN_INTEGRATIONS, BigQueryAuthMethods, BigQueryServiceAccountParseError, DEFAULT_API_URL, DEFAULT_ENV_FILE, DEFAULT_INTEGRATIONS_FILE, DatabaseAuthMethods, ENV_VAR_REF_PREFIX, EnvVarResolutionError, InvalidIntegrationError, InvalidIntegrationsTypeError, JSON_SCHEMA_URL, SCHEMA_COMMENT, SnowflakeAuthMethods, SpannerServiceAccountParseError, TrinoAuthMethods, addIntegrationToSeq, apiIntegrationSchema, apiResponseSchema, baseIntegrationsFileSchema, convertApiIntegrations, createEnvVarRef, createNewDocument, databaseIntegrationConfigSchema, databaseIntegrationTypes, databaseIntegrationTypesWithSslSupport, databaseMetadataSchemasByType, extractEnvVarName, federatedAuthMethods, fetchIntegrations, generateEnvVarName, getEnvironmentVariablesForIntegrations, getOrCreateIntegrationMetadata, getOrCreateIntegrationsFromDocument, getSecretFieldPaths, getSnowflakeFederatedAuthSqlAlchemyInput, getSqlAlchemyInput, getSqlEnvVarName, integrationsFileSchema, isDatabaseIntegrationType, isDatabaseIntegrationTypeWithSslSupport, isEnvVarRef, isFederatedAuthMetadata, isFederatedAuthMethod, isSqlIntegrationType, mergeApiIntegrationsIntoDocument, mergeApiIntegrationsIntoYaml, mergeProcessedIntegrations, parseEnvVarRef, parseIntegrations, parseIntegrationsDocument, resolveEnvVarRefsFromMap, serializeIntegrationsDocument, sqlIntegrationTypes, updateIntegrationInDocument, updateIntegrationMetadataMap };
|
|
1507
|
+
export { ApiError, AwsAuthMethods, BUILTIN_INTEGRATIONS, BigQueryAuthMethods, BigQueryServiceAccountParseError, DEFAULT_API_URL, DEFAULT_ENV_FILE, DEFAULT_INTEGRATIONS_FILE, DatabaseAuthMethods, ENV_VAR_REF_PREFIX, EnvVarResolutionError, IntegrationsYamlParseError, InvalidIntegrationError, InvalidIntegrationsTypeError, JSON_SCHEMA_URL, SCHEMA_COMMENT, SnowflakeAuthMethods, SpannerServiceAccountParseError, TrinoAuthMethods, addIntegrationToSeq, apiIntegrationSchema, apiResponseSchema, baseIntegrationsFileSchema, convertApiIntegrations, createEnvVarRef, createNewDocument, databaseIntegrationConfigSchema, databaseIntegrationTypes, databaseIntegrationTypesWithSslSupport, databaseMetadataSchemasByType, extractEnvVarName, federatedAuthMethods, fetchIntegrations, generateEnvVarName, getEnvironmentVariablesForIntegrations, getOrCreateIntegrationMetadata, getOrCreateIntegrationsFromDocument, getSecretFieldPaths, getSnowflakeFederatedAuthSqlAlchemyInput, getSqlAlchemyInput, getSqlEnvVarName, integrationsFileSchema, isBuiltinIntegration, isDatabaseIntegrationType, isDatabaseIntegrationTypeWithSslSupport, isEnvVarRef, isFederatedAuthMetadata, isFederatedAuthMethod, isSqlIntegrationType, mergeApiIntegrationsIntoDocument, mergeApiIntegrationsIntoYaml, mergeProcessedIntegrations, parseEnvVarRef, parseIntegrations, parseIntegrationsDocument, resolveEnvVarRefsFromMap, serializeIntegrationsDocument, sqlIntegrationTypes, updateIntegrationInDocument, updateIntegrationMetadataMap };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@deepnote/database-integrations",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.7.0",
|
|
4
4
|
"description": "Deepnote database integration definitions",
|
|
5
5
|
"keywords": [],
|
|
6
6
|
"repository": {
|
|
@@ -27,17 +27,17 @@
|
|
|
27
27
|
"package.json"
|
|
28
28
|
],
|
|
29
29
|
"dependencies": {
|
|
30
|
-
"yaml": "^2.
|
|
30
|
+
"yaml": "^2.9.0",
|
|
31
31
|
"zod": "3.25.76",
|
|
32
|
-
"@deepnote/blocks": "4.
|
|
32
|
+
"@deepnote/blocks": "4.8.0"
|
|
33
33
|
},
|
|
34
34
|
"publishConfig": {
|
|
35
35
|
"access": "public",
|
|
36
36
|
"registry": "https://registry.npmjs.org"
|
|
37
37
|
},
|
|
38
38
|
"scripts": {
|
|
39
|
-
"build": "tsdown --format esm --format cjs --dts",
|
|
39
|
+
"build": "tsdown --format esm --format cjs --dts --no-fixed-extension",
|
|
40
40
|
"test": "vitest",
|
|
41
|
-
"watch": "tsdown --watch --format esm --format cjs --dts"
|
|
41
|
+
"watch": "tsdown --watch --format esm --format cjs --dts --no-fixed-extension"
|
|
42
42
|
}
|
|
43
43
|
}
|