diff --git a/.changeset/giant-llamas-study.md b/.changeset/giant-llamas-study.md new file mode 100644 index 0000000000..5f70c3088a --- /dev/null +++ b/.changeset/giant-llamas-study.md @@ -0,0 +1,7 @@ +--- +"@medusajs/types": patch +"@medusajs/medusa": patch +"@medusajs/js-sdk": patch +--- + +feat(medusa,types,js-sdk): add enabled plugins route diff --git a/packages/core/js-sdk/src/admin/index.ts b/packages/core/js-sdk/src/admin/index.ts index f6c9b0d90a..d734bbe241 100644 --- a/packages/core/js-sdk/src/admin/index.ts +++ b/packages/core/js-sdk/src/admin/index.ts @@ -17,6 +17,7 @@ import { Order } from "./order" import { OrderEdit } from "./order-edit" import { Payment } from "./payment" import { PaymentCollection } from "./payment-collection" +import { Plugin } from "./plugin" import { PriceList } from "./price-list" import { PricePreference } from "./price-preference" import { Product } from "./product" @@ -211,6 +212,10 @@ export class Admin { * @tags promotion */ public campaign: Campaign + /** + * @tags plugin + */ + public plugin: Plugin constructor(client: Client) { this.invite = new Invite(client) @@ -255,5 +260,6 @@ export class Admin { this.customerGroup = new CustomerGroup(client) this.promotion = new Promotion(client) this.campaign = new Campaign(client) + this.plugin = new Plugin(client) } } diff --git a/packages/core/js-sdk/src/admin/plugin.ts b/packages/core/js-sdk/src/admin/plugin.ts new file mode 100644 index 0000000000..c665ebc6f4 --- /dev/null +++ b/packages/core/js-sdk/src/admin/plugin.ts @@ -0,0 +1,21 @@ +import { HttpTypes } from "@medusajs/types" +import { Client } from "../client" +import { ClientHeaders } from "../types" + +export class Plugin { + private client: Client + + constructor(client: Client) { + this.client = client + } + + async list(headers?: ClientHeaders) { + return await this.client.fetch( + `/admin/plugins`, + { + headers, + query: {}, + } + ) + } +} diff --git a/packages/core/types/src/http/index.ts b/packages/core/types/src/http/index.ts index 6b03f73528..7a1af0bb65 100644 --- a/packages/core/types/src/http/index.ts +++ b/packages/core/types/src/http/index.ts @@ -22,6 +22,7 @@ export * from "./notification" export * from "./order" export * from "./order-edit" export * from "./payment" +export * from "./plugins" export * from "./price-list" export * from "./pricing" export * from "./product" diff --git a/packages/core/types/src/http/plugins/admin/responses.ts b/packages/core/types/src/http/plugins/admin/responses.ts new file mode 100644 index 0000000000..854e304f07 --- /dev/null +++ b/packages/core/types/src/http/plugins/admin/responses.ts @@ -0,0 +1,10 @@ +export interface AdminPlugin { + name: string +} + +export interface AdminPluginsListResponse { + /** + * The plugin's details. + */ + plugins: AdminPlugin[] +} diff --git a/packages/core/types/src/http/plugins/index.ts b/packages/core/types/src/http/plugins/index.ts new file mode 100644 index 0000000000..dc4fd187a8 --- /dev/null +++ b/packages/core/types/src/http/plugins/index.ts @@ -0,0 +1 @@ +export * from "./admin/responses" diff --git a/packages/medusa/src/api/admin/plugins/route.ts b/packages/medusa/src/api/admin/plugins/route.ts new file mode 100644 index 0000000000..f4d182976f --- /dev/null +++ b/packages/medusa/src/api/admin/plugins/route.ts @@ -0,0 +1,23 @@ +import { MedusaRequest, MedusaResponse } from "@medusajs/framework/http" +import { HttpTypes } from "@medusajs/framework/types" +import { ContainerRegistrationKeys } from "@medusajs/framework/utils" +import { isString } from "lodash" + +export const GET = async ( + req: MedusaRequest, + res: MedusaResponse +) => { + const configModule = req.scope.resolve( + ContainerRegistrationKeys.CONFIG_MODULE + ) + + const configPlugins = configModule.plugins ?? [] + + const plugins = configPlugins.map((plugin) => ({ + name: isString(plugin) ? plugin : plugin.resolve, + })) + + res.json({ + plugins, + }) +}