{"_id":"@anubus298/medusa-product-reviews","_rev":"4-a3fa0844aabb3204911ace3f252549e1","name":"@anubus298/medusa-product-reviews","dist-tags":{"latest":"2.13.5"},"versions":{"2.11.2":{"name":"@anubus298/medusa-product-reviews","version":"2.11.2","keywords":["medusa","plugin","medusa-plugin-other","medusa-plugin","medusa-v2"],"author":{"url":"https://medusajs.com","name":"Medusa"},"license":"MIT","_id":"@anubus298/medusa-product-reviews@2.11.2","maintainers":[{"name":"anubus298","email":"araristaf@gmail.com"}],"dist":{"shasum":"8e55c3350e1ac14e9c766bec97038dd985f40fc8","tarball":"https://registry.npmjs.org/@anubus298/medusa-product-reviews/-/medusa-product-reviews-2.11.2.tgz","fileCount":54,"integrity":"sha512-v3k8RO6eB95CrjK+VLRVLhuosg79PIPYmr96aHYiM/6ts4TSvIK+q96Q9JFDoCZnYu2nQamPC6W15KCvnFQ+Wg==","signatures":[{"sig":"MEUCIQCwpMMeIeZnFk8nqTvLzkuZCWkOFfel/kEboEOp8g/J2gIgC/FsJn7k9UAYPL57DvyaKxxiYYXbI1/RuFK6mza25fk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1010556},"engines":{"node":">=20"},"exports":{"./*":"./.medusa/server/src/*.js","./admin":{"import":"./.medusa/server/src/admin/index.mjs","default":"./.medusa/server/src/admin/index.js","require":"./.medusa/server/src/admin/index.js"},"./modules/*":"./.medusa/server/src/modules/*/index.js","./workflows":"./.medusa/server/src/workflows/index.js","./providers/*":"./.medusa/server/src/providers/*/index.js","./package.json":"./package.json","./.medusa/server/src/modules/*":"./.medusa/server/src/modules/*/index.js"},"gitHead":"348262c6950d5f514eadea099a08d73aac4344d0","scripts":{"dev":"medusa plugin:develop","build":"medusa plugin:build","migrate":"medusa plugin:db:generate","type-check":"tsc --noEmit","publish-local":"medusa plugin:publish","prepublishOnly":"medusa plugin:build"},"_npmUser":{"name":"anubus298","email":"araristaf@gmail.com"},"_npmVersion":"11.6.0","description":"reviews .","directories":{},"_nodeVersion":"22.14.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"yarn@4.9.4+sha512.7b1cb0b62abba6a537b3a2ce00811a843bea02bcf53138581a6ae5b1bf563f734872bd47de49ce32a9ca9dcaff995aa789577ffb16811da7c603dcf69e73750b","devDependencies":{"vite":"^5.2.11","yalc":"^1.0.0-pre.53","react":"^18.2.0","ts-node":"^10.9.2","@swc/core":"1.5.7","react-dom":"^18.2.0","prop-types":"^15.8.1","typescript":"^5.6.2","@types/node":"^20.0.0","@medusajs/ui":"4.0.25","@types/luxon":"^3","@types/react":"^18.3.2","posthog-node":"^4.17.1","@medusajs/cli":"2.11.2","@medusajs/icons":"2.11.2","@medusajs/medusa":"2.11.2","@types/react-dom":"^18.2.25","@medusajs/admin-sdk":"2.11.2","@medusajs/framework":"2.11.2","@medusajs/test-utils":"2.11.2","@lambdacurry/medusa-plugins-sdk":"^0.0.5"},"peerDependencies":{"@medusajs/ui":"^4.0.26","@medusajs/cli":"2.11.2","@medusajs/icons":"2.11.2","@medusajs/medusa":"2.11.2","@medusajs/admin-sdk":"2.11.2","@medusajs/framework":"2.11.2","@medusajs/test-utils":"2.11.2","@lambdacurry/medusa-plugins-sdk":"^0.0.5"},"_npmOperationalInternal":{"tmp":"tmp/medusa-product-reviews_2.11.2_1762564989006_0.8128745023040893","host":"s3://npm-registry-packages-npm-production"}},"2.11.3":{"name":"@anubus298/medusa-product-reviews","version":"2.11.3","keywords":["medusa","plugin","medusa-plugin-other","medusa-plugin","medusa-v2"],"author":{"url":"https://medusajs.com","name":"Medusa"},"license":"MIT","_id":"@anubus298/medusa-product-reviews@2.11.3","maintainers":[{"name":"anubus298","email":"araristaf@gmail.com"}],"dist":{"shasum":"171b87aaa5fa26d51fc949a7f2a1a2fa3635074d","tarball":"https://registry.npmjs.org/@anubus298/medusa-product-reviews/-/medusa-product-reviews-2.11.3.tgz","fileCount":54,"integrity":"sha512-7iPggHFc+5QnVAsqROppdmc5TYaCyr8s2OfyVjdmJhA1E/E3eFB1uP4H3OZfbwfc6lZo3lMlvVx02Z0IxCSoaw==","signatures":[{"sig":"MEYCIQCVN8R1zmPgGAkmkOxbZeTY7j0XpQIdTi4lvaAyHHwitAIhAL7BCNSvrY5jZOMIf6gt3XBIJJ38k0ymCSG3gCJolEsJ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1010617},"engines":{"node":">=20"},"exports":{"./*":"./.medusa/server/src/*.js","./admin":{"import":"./.medusa/server/src/admin/index.mjs","default":"./.medusa/server/src/admin/index.js","require":"./.medusa/server/src/admin/index.js"},"./modules/*":"./.medusa/server/src/modules/*/index.js","./workflows":"./.medusa/server/src/workflows/index.js","./providers/*":"./.medusa/server/src/providers/*/index.js","./package.json":"./package.json","./.medusa/server/src/modules/*":"./.medusa/server/src/modules/*/index.js"},"gitHead":"d040b1da1d486672d4ac5f2945c068a8bcd73130","scripts":{"dev":"medusa plugin:develop","build":"medusa plugin:build","migrate":"medusa plugin:db:generate","type-check":"tsc --noEmit","publish-local":"medusa plugin:publish","prepublishOnly":"medusa plugin:build"},"_npmUser":{"name":"anubus298","email":"araristaf@gmail.com"},"_npmVersion":"11.6.0","description":"reviews .","directories":{},"_nodeVersion":"22.14.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"yarn@4.9.4+sha512.7b1cb0b62abba6a537b3a2ce00811a843bea02bcf53138581a6ae5b1bf563f734872bd47de49ce32a9ca9dcaff995aa789577ffb16811da7c603dcf69e73750b","devDependencies":{"vite":"^5.2.11","yalc":"^1.0.0-pre.53","react":"^18.2.0","ts-node":"^10.9.2","@swc/core":"1.5.7","react-dom":"^18.2.0","prop-types":"^15.8.1","typescript":"^5.6.2","@types/node":"^20.0.0","@medusajs/ui":"4.0.25","@types/luxon":"^3","@types/react":"^18.3.2","posthog-node":"^4.17.1","@medusajs/cli":"2.11.2","@medusajs/icons":"2.11.2","@medusajs/medusa":"2.11.2","@types/react-dom":"^18.2.25","@medusajs/admin-sdk":"2.11.2","@medusajs/framework":"2.11.2","@medusajs/test-utils":"2.11.2","@lambdacurry/medusa-plugins-sdk":"^0.0.5"},"peerDependencies":{"@medusajs/ui":"^4.0.26","@medusajs/cli":"2.11.2","@medusajs/icons":"2.11.2","@medusajs/medusa":"2.11.2","@medusajs/admin-sdk":"2.11.2","@medusajs/framework":"2.11.2","@medusajs/test-utils":"2.11.2","@lambdacurry/medusa-plugins-sdk":"^0.0.5"},"_npmOperationalInternal":{"tmp":"tmp/medusa-product-reviews_2.11.3_1762565428393_0.5044687390024323","host":"s3://npm-registry-packages-npm-production"}},"2.11.4":{"name":"@anubus298/medusa-product-reviews","version":"2.11.4","keywords":["medusa","plugin","medusa-plugin-other","medusa-plugin","medusa-v2"],"author":{"url":"https://medusajs.com","name":"Medusa"},"license":"MIT","_id":"@anubus298/medusa-product-reviews@2.11.4","maintainers":[{"name":"anubus298","email":"araristaf@gmail.com"}],"dist":{"shasum":"9a74d57967d689288d28f041b659120d98308efd","tarball":"https://registry.npmjs.org/@anubus298/medusa-product-reviews/-/medusa-product-reviews-2.11.4.tgz","fileCount":54,"integrity":"sha512-/mA2PC67clU1lQwIICBVxgDdcYkYY3YpD6LElqPmalFVqa+rJ/kQsBJDMCCQEmUxGBHZSqKiIvG8j9nTMjvlVg==","signatures":[{"sig":"MEUCIEmPoytGneREF71d5TULVYcPNCCMIjpjupPytLq/ra6wAiEAwtzz99ECcWiXgLwZIxy34MwwcBpmGYVnrFF3SHRv9fQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1010338},"engines":{"node":">=20"},"exports":{"./*":"./.medusa/server/src/*.js","./admin":{"import":"./.medusa/server/src/admin/index.mjs","default":"./.medusa/server/src/admin/index.js","require":"./.medusa/server/src/admin/index.js"},"./modules/*":"./.medusa/server/src/modules/*/index.js","./workflows":"./.medusa/server/src/workflows/index.js","./providers/*":"./.medusa/server/src/providers/*/index.js","./package.json":"./package.json","./.medusa/server/src/modules/*":"./.medusa/server/src/modules/*/index.js"},"gitHead":"f7d11036c11743141f4577cf2fffae95b723304e","scripts":{"dev":"medusa plugin:develop","build":"medusa plugin:build","migrate":"medusa plugin:db:generate","type-check":"tsc --noEmit","publish-local":"medusa plugin:publish","prepublishOnly":"medusa plugin:build"},"_npmUser":{"name":"anubus298","email":"araristaf@gmail.com"},"_npmVersion":"11.6.0","description":"reviews .","directories":{},"_nodeVersion":"22.14.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"yarn@4.9.4+sha512.7b1cb0b62abba6a537b3a2ce00811a843bea02bcf53138581a6ae5b1bf563f734872bd47de49ce32a9ca9dcaff995aa789577ffb16811da7c603dcf69e73750b","devDependencies":{"vite":"^5.2.11","yalc":"^1.0.0-pre.53","react":"^18.2.0","ts-node":"^10.9.2","@swc/core":"1.5.7","react-dom":"^18.2.0","prop-types":"^15.8.1","typescript":"^5.6.2","@types/node":"^20.0.0","@medusajs/ui":"4.0.25","@types/luxon":"^3","@types/react":"^18.3.2","posthog-node":"^4.17.1","@medusajs/cli":"2.11.2","@medusajs/icons":"2.11.2","@medusajs/medusa":"2.11.2","@types/react-dom":"^18.2.25","@medusajs/admin-sdk":"2.11.2","@medusajs/framework":"2.11.2","@medusajs/test-utils":"2.11.2","@lambdacurry/medusa-plugins-sdk":"^0.0.5"},"peerDependencies":{"@medusajs/ui":"^4.0.26","@medusajs/cli":">=2.11.0","@medusajs/icons":">=2.11.0","@medusajs/medusa":">=2.11.0","@medusajs/admin-sdk":">=2.11.0","@medusajs/framework":">=2.11.0","@medusajs/test-utils":">=2.11.0","@lambdacurry/medusa-plugins-sdk":"^0.0.5"},"_npmOperationalInternal":{"tmp":"tmp/medusa-product-reviews_2.11.4_1762569241638_0.07827734154386379","host":"s3://npm-registry-packages-npm-production"}},"2.13.5":{"name":"@anubus298/medusa-product-reviews","version":"2.13.5","description":"reviews .","publishConfig":{"access":"public"},"author":{"name":"Medusa","url":"https://medusajs.com"},"license":"MIT","exports":{"./package.json":"./package.json","./workflows":"./.medusa/server/src/workflows/index.js","./.medusa/server/src/modules/*":"./.medusa/server/src/modules/*/index.js","./modules/*":"./.medusa/server/src/modules/*/index.js","./providers/*":"./.medusa/server/src/providers/*/index.js","./*":"./.medusa/server/src/*.js","./admin":{"import":"./.medusa/server/src/admin/index.mjs","require":"./.medusa/server/src/admin/index.js","default":"./.medusa/server/src/admin/index.js"}},"keywords":["medusa","plugin","medusa-plugin-other","medusa-plugin","medusa-v2"],"scripts":{"build":"medusa plugin:build","publish-local":"medusa plugin:publish","migrate":"medusa plugin:db:generate","dev":"medusa plugin:develop","prepublishOnly":"medusa plugin:build","type-check":"tsc --noEmit"},"devDependencies":{"@hookform/resolvers":"^5.2.2","@lambdacurry/medusa-plugins-sdk":"^0.0.5","@medusajs/admin-sdk":"2.13.5","@medusajs/cli":"2.13.5","@medusajs/framework":"2.13.5","@medusajs/icons":"2.13.5","@medusajs/medusa":"2.13.5","@medusajs/test-utils":"2.13.5","@medusajs/ui":"4.1.5","@medusajs/workflows-sdk":"^2.13.5","@mikro-orm/core":"7.0.5","@mikro-orm/migrations":"^7.0.5","@mikro-orm/postgresql":"^7.0.5","@swc/core":"1.7.28","@types/luxon":"^3.7.1","@types/multer":"^2.1.0","@types/node":"^20.0.0","@types/react":"^18.3.2","@types/react-dom":"^18.2.25","luxon":"^3.7.2","multer":"^2.1.1","prop-types":"^15.8.1","react":"^18.2.0","react-dom":"^18.2.0","react-hook-form":"^7.72.0","ts-node":"^10.9.2","typescript":"^5.6.2","vite":"^5.2.11","yalc":"^1.0.0-pre.53"},"peerDependencies":{"@lambdacurry/medusa-plugins-sdk":"^0.0.5","@medusajs/admin-sdk":">=2.13.0","@medusajs/cli":">=2.13.0","@medusajs/framework":">=2.13.0","@medusajs/icons":">=2.13.0","@medusajs/medusa":">=2.13.0","@medusajs/test-utils":">=2.13.0","@medusajs/ui":">=4.1.5","react-hook-form":"^7.72.0","@hookform/resolvers":"^5.2.2"},"engines":{"node":">=20"},"packageManager":"pnpm@10.29.3+sha512.498e1fb4cca5aa06c1dcf2611e6fafc50972ffe7189998c409e90de74566444298ffe43e6cd2acdc775ba1aa7cc5e092a8b7054c811ba8c5770f84693d33d2dc","gitHead":"ac28bcec640d33f37408858904d8c593ae54cee5","_id":"@anubus298/medusa-product-reviews@2.13.5","_nodeVersion":"22.14.0","_npmVersion":"11.6.2","dist":{"integrity":"sha512-Z0TmU6GHn/TKwv5/d26NdPIogH2aFT42N5PbzY4uTMICpWoO0SKTB1ESJvnoEzhPh10ji8Q0ODst1XH3Btn+lQ==","shasum":"02e8a395f65d8424962d7f3b967f7ff587634016","tarball":"https://registry.npmjs.org/@anubus298/medusa-product-reviews/-/medusa-product-reviews-2.13.5.tgz","fileCount":54,"unpackedSize":210364,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIC2W8aot7IccEdi9s2VrkztfmTetowaTw9gCNQm/W4rOAiEAoV/IfESQ6dN8kGG35s/UX4ZKr9xWMINWqmDABM/7nYs="}]},"_npmUser":{"name":"anubus298","email":"araristaf@gmail.com"},"directories":{},"maintainers":[{"name":"anubus298","email":"araristaf@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/medusa-product-reviews_2.13.5_1774540102503_0.9917636945894985"},"_hasShrinkwrap":false}},"time":{"created":"2025-11-08T01:23:08.910Z","modified":"2026-03-26T15:48:22.797Z","2.11.2":"2025-11-08T01:23:09.290Z","2.11.3":"2025-11-08T01:30:28.650Z","2.11.4":"2025-11-08T02:34:01.874Z","2.13.5":"2026-03-26T15:48:22.684Z"},"author":{"name":"Medusa","url":"https://medusajs.com"},"license":"MIT","keywords":["medusa","plugin","medusa-plugin-other","medusa-plugin","medusa-v2"],"description":"reviews .","maintainers":[{"name":"anubus298","email":"araristaf@gmail.com"}],"readme":"# @anubus298/medusa-product-reviews\r\n\r\nA plugin that adds product review and moderation capabilities to your Medusa application, with built-in admin responses and review statistics.\r\n\r\n> This plugin extend the [medusa-product-reviews Plugins by Lambda-curry](https://github.com/lambda-curry/medusa-plugins/blob/main/plugins/product-reviews). to include a new route \"/admin/product-reviews/bulk\" to bulk insert reviews that doesnt have a user.\r\n\r\n## Features\r\n\r\n> See a demo in our [Medusa Starter](https://github.com/lambda-curry/medusa2-starter)\r\n\r\n- Product reviews with ratings\r\n- Review statistics and analytics\r\n- Review moderation workflow (`approved`/`pending`/`flagged`)\r\n- Admin response management\r\n- SDK for Store and Admin operations\r\n\r\n## Prerequisites\r\n\r\n- [Medusa >=2.5.0 backend](https://docs.medusajs.com/development/backend/install)\r\n- [PostgreSQL](https://docs.medusajs.com/development/backend/prepare-environment#postgresql)\r\n\r\n## Installation and Configuration\r\n\r\n1. Install the plugin:\r\n\r\n```bash\r\nyarn add @anubus298/medusa-product-reviews\r\n\r\n# or, if you're using yarn workspaces\r\nyarn workspace my-app add @anubus298/medusa-product-reviews\r\n```\r\n\r\n2. Add to `medusa-config.ts`:\r\n\r\n```js\r\nmodule.exports = defineConfig({\r\n  plugins: [\r\n    {\r\n      resolve: \"@anubus298/medusa-product-reviews\",\r\n      options: {\r\n        defaultReviewStatus: \"pending\", // OPTIONAL, default is 'approved'\r\n      },\r\n    },\r\n  ],\r\n});\r\n```\r\n\r\n3. Run migrations:\r\n\r\n```bash\r\nyarn medusa db:migrate\r\n```\r\n\r\n## Using the Plugin SDK\r\n\r\n> For detailed SDK setup and configuration, refer to the [@anubus298/medusa-plugins-sdk README](../packages/plugins-sdk/README.md).\r\n\r\n### Store Operations\r\n\r\n```typescript\r\n// List product reviews\r\nconst { reviews, count } = await sdk.store.productReviews.list(\r\n  query: StoreListProductReviewsQuery,\r\n  headers?: ClientHeaders\r\n);\r\n\r\n// Create/Update a review\r\nconst review = await sdk.store.productReviews.upsert(\r\n  data: StoreUpsertProductReviewsDTO,\r\n  headers?: ClientHeaders\r\n);\r\n\r\n// Get review statistics\r\nconst stats = await sdk.store.productReviews.listStats(\r\n  query: StoreListProductReviewStatsQuery,\r\n  headers?: ClientHeaders\r\n);\r\n```\r\n\r\n### Admin Operations\r\n\r\n```typescript\r\n// List reviews\r\nconst { reviews, count } = await sdk.admin.productReviews.list(\r\n  query: AdminListProductReviewsQuery\r\n);\r\n\r\n// Update review status\r\nconst review = await sdk.admin.productReviews.updateStatus(\r\n  productReviewId: string,\r\n  status: 'pending' | 'approved' | 'flagged'\r\n);\r\n\r\n// Insert bulk reviews (without users)\r\n\r\nconst response = await fetch(`${backendUrl}/admin/product-reviews/bulk`, {\r\n        method: \"POST\",\r\n        headers: {\r\n          \"Content-Type\": \"application/json\",\r\n        },\r\n        body: JSON.stringify(body),\r\n        credentials: \"include\",\r\n      });\r\nreturn await response.json();\r\n\r\n\r\n// Manage review responses\r\nconst review = await sdk.admin.productReviews.createResponse(\r\n  productReviewId: string,\r\n  data: AdminCreateProductReviewResponseDTO\r\n);\r\n\r\nawait sdk.admin.productReviews.updateResponse(\r\n  productReviewId: string,\r\n  data: AdminUpdateProductReviewResponseDTO\r\n);\r\n\r\nawait sdk.admin.productReviews.deleteResponse(\r\n  productReviewId: string\r\n);\r\n```\r\n\r\n## Review Workflow\r\n\r\n1. **Creation**: Reviews are set to:\r\n\r\n   - `approved` status by default\r\n   - `pending` status if `defaultReviewStatus: 'pending'` is set in plugin options\r\n\r\n2. **Moderation**: Admins can:\r\n   - List and filter reviews\r\n   - Update review status (approve/flag)\r\n   - Manage responses (create/update/delete)\r\n\r\n## Available Endpoints\r\n\r\n### Admin Endpoints\r\n\r\n- `GET /admin/product-reviews` - List all reviews\r\n- `POST /admin/product-reviews/bulk` - Bulk insert reviews\r\n- `POST /admin/product-reviews/:id/response` - Add a response\r\n- `PUT /admin/product-reviews/:id/response` - Update response\r\n- `DELETE /admin/product-reviews/:id/response` - Delete response\r\n- `PUT /admin/product-reviews/:id/status` - Update status\r\n\r\n### Store Endpoints\r\n\r\n- `GET /store/product-reviews` - List reviews\r\n- `POST /store/product-reviews` - Create/Update review\r\n- `GET /store/product-review-stats` - Get statistics\r\n\r\n## Local Development\r\n\r\n> **IMPORTANT**: A running PostgreSQL instance is required. The plugin expects `DB_USERNAME` and `DB_PASSWORD` environment variables to be set. If not provided, both default to \"postgres\".\r\n\r\nAvailable scripts:\r\n\r\n```bash\r\n# Build the plugin\r\nyarn build\r\n\r\n# Development mode with hot-reload\r\nyarn dev\r\n\r\n# Publish to local registry for testing\r\nyarn dev:publish\r\n\r\n# Generate database migrations\r\nyarn db:generate\r\n```\r\n\r\n### Installing the plugin in your Medusa project for local development\r\n\r\nAfter publishing the plugin locally by running yarn dev:publish, go to the root of your Medusa project and run the following commands:\r\n\r\n```bash\r\ncd path/to/your/medusa-application\r\n\r\nyarn medusa plugin:add @anubus298/medusa-product-reviews\r\n\r\n# If you are yarn with a monorepo, you may also need to run\r\nyarn install\r\n```\r\n\r\n## Compatibility\r\n\r\nThis plugin is compatible with versions `>= 2.11.0` of `@medusajs/medusa`.\r\n\r\n## License\r\n\r\nMIT License\r\n","readmeFilename":"README.md"}