From 1ef9c78cea080c3b7c136f909c6cddec9d8f0c62 Mon Sep 17 00:00:00 2001 From: Adrien de Peretti Date: Thu, 21 Mar 2024 15:45:11 +0100 Subject: [PATCH] chore: Deprecate extra in favor of driver options (#6772) **What** Deprecate databse_extra in favor of database_driver_options Co-authored-by: Sebastian Rindom <7554214+srindom@users.noreply.github.com> --- .changeset/violet-lizards-help.md | 8 +++++ .../src/medusa-test-runner-utils/use-db.js | 1 + packages/medusa/src/loaders/medusa-app.ts | 10 +++--- packages/medusa/src/loaders/pg-connection.ts | 12 +++---- packages/types/src/common/config-module.ts | 35 +++++++++++++++++++ packages/types/src/modules-sdk/index.ts | 4 ++- .../mikro-orm/mikro-orm-create-connection.ts | 2 +- .../src/modules-sdk/create-pg-connection.ts | 6 +++- 8 files changed, 64 insertions(+), 14 deletions(-) create mode 100644 .changeset/violet-lizards-help.md diff --git a/.changeset/violet-lizards-help.md b/.changeset/violet-lizards-help.md new file mode 100644 index 0000000000..972fd17d69 --- /dev/null +++ b/.changeset/violet-lizards-help.md @@ -0,0 +1,8 @@ +--- +"@medusajs/medusa": patch +"medusa-test-utils": patch +"@medusajs/types": patch +"@medusajs/utils": patch +--- + +chore: v2 - deprecate extra in favor of driver options diff --git a/packages/medusa-test-utils/src/medusa-test-runner-utils/use-db.js b/packages/medusa-test-utils/src/medusa-test-runner-utils/use-db.js index e97c63e5c6..0bf4a6bc3c 100644 --- a/packages/medusa-test-utils/src/medusa-test-runner-utils/use-db.js +++ b/packages/medusa-test-utils/src/medusa-test-runner-utils/use-db.js @@ -15,6 +15,7 @@ const { logger } = require("@medusajs/medusa-cli/dist/reporter") module.exports = { initDb: async function ({ cwd, + // use for v1 datasource only database_extra, env, force_modules_migration, diff --git a/packages/medusa/src/loaders/medusa-app.ts b/packages/medusa/src/loaders/medusa-app.ts index 491fbe7da7..45df6f0f71 100644 --- a/packages/medusa/src/loaders/medusa-app.ts +++ b/packages/medusa/src/loaders/medusa-app.ts @@ -8,15 +8,15 @@ import { import { ContainerRegistrationKeys, FlagRouter, - MedusaV2Flag, isObject, + MedusaV2Flag, } from "@medusajs/utils" import { - MODULE_PACKAGE_NAMES, MedusaApp, MedusaAppMigrateUp, MedusaAppOutput, MedusaModule, + MODULE_PACKAGE_NAMES, Modules, ModulesDefinition, } from "@medusajs/modules-sdk" @@ -71,7 +71,7 @@ export async function migrateMedusaApp( injectedDependencies[ContainerRegistrationKeys.PG_CONNECTION]?.client ?.config?.connection?.connectionString ?? configModule.projectConfig.database_url, - driverOptions: configModule.projectConfig.database_extra, + driverOptions: configModule.projectConfig.database_driver_options, debug: !!(configModule.projectConfig.database_logging ?? false), }, } @@ -136,7 +136,7 @@ export const loadMedusaApp = async ( const sharedResourcesConfig = { database: { clientUrl: configModule.projectConfig.database_url, - driverOptions: configModule.projectConfig.database_extra, + driverOptions: configModule.projectConfig.database_driver_options, debug: !!(configModule.projectConfig.database_logging ?? false), }, } @@ -262,7 +262,7 @@ export async function runModulesLoader({ const sharedResourcesConfig = { database: { clientUrl: configModule.projectConfig.database_url, - driverOptions: configModule.projectConfig.database_extra, + driverOptions: configModule.projectConfig.database_driver_options, debug: !!(configModule.projectConfig.database_logging ?? false), }, } diff --git a/packages/medusa/src/loaders/pg-connection.ts b/packages/medusa/src/loaders/pg-connection.ts index e86cb1567d..a8a66a3547 100644 --- a/packages/medusa/src/loaders/pg-connection.ts +++ b/packages/medusa/src/loaders/pg-connection.ts @@ -14,18 +14,18 @@ export default async ({ container, configModule }: Options): Promise => { // Share a knex connection to be consumed by the shared modules const connectionString = configModule.projectConfig.database_url - const extra: any = configModule.projectConfig.database_extra || {} + const driverOptions: any = + configModule.projectConfig.database_driver_options || {} const schema = configModule.projectConfig.database_schema || "public" - const idleTimeoutMillis = extra.idleTimeoutMillis ?? undefined // prevent null to be passed - const poolMax = extra.max + const idleTimeoutMillis = driverOptions.pool?.idleTimeoutMillis ?? undefined // prevent null to be passed + const poolMax = driverOptions.pool?.max - delete extra.max - delete extra.idleTimeoutMillis + delete driverOptions.pool const pgConnection = ModulesSdkUtils.createPgConnection({ clientUrl: connectionString, schema, - driverOptions: extra, + driverOptions, pool: { max: poolMax, idleTimeoutMillis, diff --git a/packages/types/src/common/config-module.ts b/packages/types/src/common/config-module.ts index 76ba212426..2d67d93f3f 100644 --- a/packages/types/src/common/config-module.ts +++ b/packages/types/src/common/config-module.ts @@ -355,6 +355,41 @@ export type ProjectConfigOptions = { } } + /** + * An object that includes additional configurations to pass to the database connection for v2. You can pass any configuration. One defined configuration to pass is + * `ssl` which enables support for TLS/SSL connections. + * + * This is useful for production databases, which can be supported by setting the `rejectUnauthorized` attribute of `ssl` object to `false`. + * During development, it’s recommended not to pass this option. + * + * @example + * ```js title="medusa-config.js" + * module.exports = { + * projectConfig: { + * database_driver_options: + * process.env.NODE_ENV !== "development" + * ? { connection: { ssl: { rejectUnauthorized: false } } } + * : {}, + * // ... + * }, + * // ... + * } + * ``` + */ + database_driver_options?: Record & { + connection?: { + /** + * Configure support for TLS/SSL connection + */ + ssl?: { + /** + * Whether to fail connection if the server certificate is verified against the list of supplied CAs and the hostname and no match is found. + */ + rejectUnauthorized?: false + } + } + } + /** * Used to specify the URL to connect to Redis. This is only used for scheduled jobs. If you omit this configuration, scheduled jobs won't work. * diff --git a/packages/types/src/modules-sdk/index.ts b/packages/types/src/modules-sdk/index.ts index 4ce4b5b08f..f2cdb042aa 100644 --- a/packages/types/src/modules-sdk/index.ts +++ b/packages/types/src/modules-sdk/index.ts @@ -254,7 +254,9 @@ export interface ModuleServiceInitializeOptions { user?: string password?: string database?: string - driverOptions?: Record + driverOptions?: Record & { + connection?: Record + } debug?: boolean pool?: Record } diff --git a/packages/utils/src/dal/mikro-orm/mikro-orm-create-connection.ts b/packages/utils/src/dal/mikro-orm/mikro-orm-create-connection.ts index a580bbf301..b9754f1859 100644 --- a/packages/utils/src/dal/mikro-orm/mikro-orm-create-connection.ts +++ b/packages/utils/src/dal/mikro-orm/mikro-orm-create-connection.ts @@ -75,7 +75,7 @@ export async function mikroOrmCreateConnection( let schema = database.schema || "public" let driverOptions = database.driverOptions ?? { - connection: { ssl: true }, + connection: { ssl: false }, } let clientUrl = database.clientUrl diff --git a/packages/utils/src/modules-sdk/create-pg-connection.ts b/packages/utils/src/modules-sdk/create-pg-connection.ts index be5d361d0b..40d75bdb55 100644 --- a/packages/utils/src/modules-sdk/create-pg-connection.ts +++ b/packages/utils/src/modules-sdk/create-pg-connection.ts @@ -1,5 +1,6 @@ import { knex } from "@mikro-orm/knex" import { ModuleServiceInitializeOptions } from "@medusajs/types" +import { isDefined } from "../common" type Options = ModuleServiceInitializeOptions["database"] @@ -9,7 +10,10 @@ type Options = ModuleServiceInitializeOptions["database"] */ export function createPgConnection(options: Options) { const { pool, schema = "public", clientUrl, driverOptions } = options - const ssl = options.driverOptions?.ssl ?? false + const ssl = + options.driverOptions?.ssl ?? + options.driverOptions?.connection?.ssl ?? + false return knex({ client: "pg",