medusajs / medusa

Building blocks for digital commerce
https://medusajs.com
MIT License
24.85k stars 2.47k forks source link

Cannot add Custom Payment Provider (v2 rc) #9416

Open ogcatt opened 2 days ago

ogcatt commented 2 days ago

Bug report

Describe the bug

Module config is like below:

[Modules.PAYMENT]: {
      resolve: "@medusajs/payment",
      options: {
        providers: [
          {
            resolve: "./modules/providers/crypto",
            id: "crypto",
            options: {
              // provider options...
            },
          },
        ],
      },
    },

System information

Medusa CLI version: 2.0.0-rc-20241001083650 Medusa version: 2.0.0-rc-20241001083650 Node.js version: v21.6.1 Database: localhost postgres Operating system: Linux mint / debian Browser (if relevant): -

Steps to reproduce the behavior

  1. Create a new project in medusajs
  2. Add the payment module to the backend
  3. Make a custom payment provider locally in src/modules
  4. Link it as a provider in medusa config
  5. Attempt to run medusa (medusa start)

Expected behavior

Should detect the local module via index.ts.

Current behavior

Creates this error: Error: Loaders for module Payment failed: Unable to find module ./modules/providers/crypto -- perhaps you need to install its package?

The docs say module provider references are in src/ but they start in dist/. Trying to fix this with for example: resolve: "./../src/modules/providers/crypto" makes the path referenced by normalizedPath in module-provider-loader.js correct, but it still fails to load.

Longer error log:

Error: Cannot find module '/mnt/drive/Coding/medusa/src/modules/providers/crypto'
Require stack:
- /mnt/drive/Coding/medusa/node_modules/@medusajs/utils/dist/common/dynamic-import.js
- /mnt/drive/Coding/medusa/node_modules/@medusajs/utils/dist/common/index.js
- /mnt/drive/Coding/medusa/node_modules/@medusajs/utils/dist/graphql/graphql-to-ts-types.js
- /mnt/drive/Coding/medusa/node_modules/@medusajs/utils/dist/graphql/index.js
- /mnt/drive/Coding/medusa/node_modules/@medusajs/utils/dist/index.js
- /mnt/drive/Coding/medusa/node_modules/@medusajs/framework/dist/utils/index.js
- /mnt/drive/Coding/medusa/node_modules/@medusajs/medusa/dist/commands/start.js
- /usr/local/lib/node_modules/@medusajs/medusa-cli/dist/create-cli.js
- /usr/local/lib/node_modules/@medusajs/medusa-cli/dist/index.js
- /usr/local/lib/node_modules/@medusajs/medusa-cli/cli.js
    at Module._resolveFilename (node:internal/modules/cjs/loader:1149:15)
    at Module._load (node:internal/modules/cjs/loader:990:27)
    at Module.require (node:internal/modules/cjs/loader:1237:19)
    at require (node:internal/modules/helpers:176:18)
    at dynamicImport (/mnt/drive/Coding/medusa/node_modules/@medusajs/utils/dist/common/dynamic-import.js:17:20)
    at loadModuleProvider (/mnt/drive/Coding/medusa/node_modules/@medusajs/modules-sdk/dist/loaders/module-provider-loader.js:23:62)
    at /mnt/drive/Coding/medusa/node_modules/@medusajs/modules-sdk/dist/loaders/module-provider-loader.js:12:15
    at Array.map (<anonymous>)
    at moduleProviderLoader (/mnt/drive/Coding/medusa/node_modules/@medusajs/modules-sdk/dist/loaders/module-provider-loader.js:11:45)
    at exports.default (/mnt/drive/Coding/medusa/node_modules/@medusajs/payment/dist/loaders/providers.js:44:50) {
  code: 'MODULE_NOT_FOUND',
  requireStack: [
    '/mnt/drive/Coding/medusa/node_modules/@medusajs/utils/dist/common/dynamic-import.js',
    '/mnt/drive/Coding/medusa/node_modules/@medusajs/utils/dist/common/index.js',
    '/mnt/drive/Coding/medusa/node_modules/@medusajs/utils/dist/graphql/graphql-to-ts-types.js',
    '/mnt/drive/Coding/medusa/node_modules/@medusajs/utils/dist/graphql/index.js',
    '/mnt/drive/Coding/medusa/node_modules/@medusajs/utils/dist/index.js',
    '/mnt/drive/Coding/medusa/node_modules/@medusajs/framework/dist/utils/index.js',
    '/mnt/drive/Coding/medusa/node_modules/@medusajs/medusa/dist/commands/start.js',
    '/usr/local/lib/node_modules/@medusajs/medusa-cli/dist/create-cli.js',
    '/usr/local/lib/node_modules/@medusajs/medusa-cli/dist/index.js',
    '/usr/local/lib/node_modules/@medusajs/medusa-cli/cli.js'
  ]
}
error:   Could not resolve module: Payment. Error: Loaders for module Payment failed: Unable to find module ./../src/modules/providers/crypto -- perhaps you need to install its package?
thetutlage commented 1 day ago

Hello @ogcatt

I have just created a fresh project with a custom payment provider and it all seems to work fine. I have pushed by example code to this repo. https://github.com/thetutlage/medusa-payment-provider

Please give it a run and lemme know if you face any issues