@lambdacurry/medusa-plugins-sdk
Version:
183 lines (140 loc) • 4.47 kB
Markdown
# /medusa-plugins-sdk
SDK for Medusa plugins by Lambda Curry.
This package is built on top of `/js-sdk` and adds a set of resources and methods for interacting with the [Medusa Plugins Collection](https://github.com/lambda-curry/medusa-plugins?tab=readme-ov-file#available-plugins).
## Installation
```bash
yarn install /medusa-plugins-sdk
# or, if you're using yarn workspaces
yarn workspace my-app add /medusa-plugins-sdk
```
> Read more about working with **monorepos** in the [Development](#development) section.
## Usage
```typescript
import {
MedusaPluginsSDK,
StoreListProductReviewsQuery,
StoreListProductReviewStatsQuery,
} from '/medusa-plugins-sdk';
// Initialize the SDK
const sdk = new MedusaPluginsSDK({
baseUrl: process.env.MEDUSA_BACKEND_URL || 'http://localhost:9000',
publishableKey: process.env.MEDUSA_PUBLISHABLE_KEY,
});
// List product reviews
const productReviews = await sdk.store.productReviews.list({
product_id: product.id,
offset: 0,
limit: 10,
})
```
### Extending my own SDK
If you need to extend the SDK with your own resources, you can do so by creating your own classes and extending the SDK.
Available resources:
- `AdminProductReviewsResource`
- `StoreProductReviewsResource`
#### Example
```typescript
import Medusa, { Admin, Store, type Client, type Config } from '@medusajs/js-sdk';
import { AdminProductReviewsResource } from '@lambdacurry/medusa-plugins-sdk';
type MyCustom = {
id: string;
name: string;
};
type MyQuery = {
name: string;
};
type MyResponse = {
myCustom: MyCustom[];
};
export class AdminMyCustomResource {
constructor(private client: Client) {}
// example admin method
async list(query: MyQuery) {
return this.client.fetch<MyResponse>(`/admin/my-custom`, {
method: 'GET',
query,
});
}
// custom admin methods
}
class MyAdmin extends Admin {
public productReviews: AdminProductReviewsResource;
public myCustom: AdminMyCustomResource;
constructor(client: Client) {
super(client);
this.productReviews = new AdminProductReviewsResource(client);
this.myCustom = new AdminMyCustomResource(client);
}
}
class StoreMyCustomResource {
constructor(private client: Client) {}
// custom store methods
}
class MyStore extends Store {
public store: StoreMyCustomResource;
constructor(client: Client) {
super(client);
this.store = new StoreMyCustomResource(client);
}
}
export class MyExtendedSDK extends Medusa {
public override admin: MyAdmin;
public override store: MyStore;
constructor(config: Config) {
super(config);
this.admin = new MyAdmin(this.client);
this.store = new MyStore(this.client);
}
}
```
## Development
> Visit the [README.md](https://github.com/lambda-curry/medusa-plugins/blob/main/README.md) for setting up the development environment.
We use [`yalc`](https://github.com/wclr/yalc) for local development, which allows us to publish the package locally and use it in other projects. So, make sure you have `yalc` installed as a dev dependency in your project.
To publish the package locally, run:
```bash
# from medusa-plugins/packages/plugins-sdk
yarn dev:publish
# from your project
yarn yalc add /medusa-plugins-sdk
```
### Working with medusa applications
When working with a Medusa application, you need to ensure that the SDK is included in the Vite config's `optimizeDeps` option.
```typescript
// medusa-config.ts
module.exports = defineConfig({
// other configs...
admin: {
// other admin configs...
vite: () => {
return {
optimizeDeps: {
include: ['/medusa-plugins-sdk'],
},
};
},
},
});
```
### Working with Vite applications
When working with a Vite application, you need to ensure that the SDK is included in the Vite config's `ssr.noExternal` option.
```typescript
// vite.config.ts
export default defineConfig({
// other configs...
ssr: {
noExternal: ['/js-sdk', '@lambdacurry/medusa-plugins-sdk'],
},
});
```
### Working with monorepos
If you're using a monorepo setup, you can use the `hoistingLimits` option in your `package.json` to ensure that the SDK is installed in the correct location.
```typescript
// monorepo/path-to/your-app/package.json
{
"installConfig": {
"hoistingLimits": "workspaces"
},
}
```
## License
MIT © [Lambda Curry](https://lambdacurry.dev)