npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

strapi-plugin-masterclass

v5.1.2

Published

Masterclass plugin

Readme

Strapi Plugin Masterclass

Transform your Strapi app into a Learning Management System to create and sell courses online effortlessly.

Features

Requirements

  • Strapi V5.x.x
  • Must have installed strapi-plugin-mux-video-uploader
  • Mux account
    • Access token ID
    • Secret Key
    • Webhook signing secret
    • Signing Key ID
    • Base64-encoded Private Key
  • Stripe account
    • Secret key
    • Checkout success URL
    • Checkout cancel URL

Installation

In the root of your strapi application, run the following command:

npm i strapi-plugin-masterclass

Configuring .env variables

Once installed, set the following values in your project's .env:

ACCESS_TOKEN_ID={Mux access token ID}
ACCESS_TOKEN_SECRET={Mux secret key}
WEBHOOK_SIGNING_SECRET={Mux webhook signing secret}
SIGNING_KEY_ID={Mux signing Key ID}
SIGNING_KEY_PRIVATE_KEY={Mux base64-encoded Private Key}

STRIPE_SECRET_KEY={Stripe secret key}
STRIPE_CHECKOUT_SUCCESS_URL={Frontend checkout success URL}
STRIPE_CHECKOUT_CANCEL_URL={Frontend checkout cancel URL}

Finally, add the following configuration in config/plugins.ts:

export default ({ env }: { env: any }) => ({
  "masterclass": {
    enabled: true,
    config: {
      stripeSecretKey: env('STRIPE_SECRET_KEY'),
      checkoutSuccessUrl: env('STRIPE_CHECKOUT_SUCCESS_URL'),
      checkoutCancelUrl: env('STRIPE_CHECKOUT_CANCEL_URL'),
    }
  },
  "mux-video-uploader": {
    enabled: true,
    config: {
      accessTokenId: env('ACCESS_TOKEN_ID'),
      secretKey: env('ACCESS_TOKEN_SECRET'),
      webhookSigningSecret: env('WEBHOOK_SIGNING_SECRET'),
      playbackSigningId: env('SIGNING_KEY_ID'),
      playbackSigningSecret: env('SIGNING_KEY_PRIVATE_KEY'),
    }
  }
});

And that's it, now you can start the server with npm run develop.

Setting up permissions

In order for the plugin to serve content, manage users and create and confirm orders, you must enable some endpoints in the Users & Permissions Pluginfor the Masterclass plugin.

For Authenticated users, enable the following:

From courses:

  • checkLecture
  • getClassesCompleted
  • getCurrentLecture
  • getCourseDetails
  • getItemsPurchased
  • getMyLearning
  • getPlayAuth
  • resumeCourse

From orders:

  • confirmWithUser
  • create
  • find
  • findOne

For Public users, enable the following:

From categories:

  • findOne
  • index

From courses:

  • find
  • findOne
  • findSlugs

From orders:

  • confirm
  • create
  • finishRegister

Usage

Creating courses is done through the Strapi Admin Dashboard.

API

The Masterclass plugin exposes a REST API for managing and consuming courses, categories, orders, and user progress. Below is a list of available endpoints, grouped by resource, with their methods, paths, authentication requirements, and descriptions.


Categories

Get all categories

GET /categories/index
Auth: Public
Returns a list of all categories, each with its thumbnail and associated courses (with thumbnails and modules/lectures).

Get a single category

GET /categories/:slug
Auth: Public
Returns a single category by slug, including its thumbnail and courses (with thumbnails and modules/lectures).


Courses

Get all courses

GET /courses
Auth: Public
Returns all courses with thumbnails, modules, lectures, category, students, and instructor info.

Get a single course

GET /courses/:slug
Auth: Public
Returns a course by slug, including modules, lectures, category, students, and instructor info.

Get all course slugs

GET /courses-slugs
Auth: Public
Returns a list of all course slugs.

Get course details (students & user progress)

GET /course-details/:courseId
Auth: Authenticated
Returns the number of students and, if authenticated, the classes the user has completed for a course.

Get classes completed by user

GET /courses/:courseId/classes-completed
Auth: Authenticated
Returns the lectures the user has completed for a course.

Get current lecture to resume

GET /courses/:courseId/get-current-lecture
Auth: Authenticated
Returns the current lecture for the user to resume in a course.

Resume course

GET /courses/:courseId/resume-course
Auth: Authenticated
Resumes the course for the user, returning the next lecture to watch.

Get play authorization for a lecture

GET /courses/:courseId/get-play-auth-lecture
Auth: Authenticated
Returns play authorization for a lecture video (e.g., Mux playback token).

Mark lecture as completed

PUT /courses/:courseId/check-lecture
Auth: Authenticated
Marks a lecture as completed for the user.

Get purchased course IDs

GET /my-items-purchased
Auth: Authenticated
Returns the IDs of all courses purchased by the user.

Get purchased courses (full info)

GET /my-learning
Auth: Authenticated
Returns full information for all courses purchased by the user.


Orders

List orders

GET /orders
Auth: Authenticated
Returns all orders for the authenticated user.

Get a single order

GET /orders/:id
Auth: Authenticated
Returns a single order by ID, only if it belongs to the user.

Create an order

POST /orders
Auth: Public or Authenticated
Creates a new order for one or more courses. Requires courses (array of course IDs), payment_method (credit_card or paypal), and optionally email (for guest checkout). Returns a checkout session for Stripe or PayPal.

Confirm an order (public)

PUT /orders/confirm
Auth: Public
Confirms an order after payment (Stripe/PayPal webhook or redirect). Marks the order as confirmed and enrolls the user in the purchased courses.

Confirm an order with user

PUT /orders/confirm-with-user
Auth: Authenticated
Confirms an order for the authenticated user after payment. Enrolls the user in the purchased courses.

Finish registration after order

PUT /orders/finish-register
Auth: Public
Completes registration for a user after a guest checkout and order confirmation.


Services

The plugin provides internal services for advanced usage and extension:

  • courses: Register users to courses, calculate lecture durations, etc.
  • payments: Handles order creation and payment confirmation for Stripe and PayPal.
  • stripe: Integrates with Stripe for checkout sessions and payment status.
  • paypal: Integrates with PayPal for checkout sessions and payment status.

Data Models

The plugin defines the following main content-types:

  • Category: title, description, thumbnail, slug, courses
  • Course: title, duration, description, price, thumbnail, long_description, difficulty, language, category, slug, students, modules, instructor
  • Module: title, duration, course, lectures, slug, description
  • Lecture: title, slug, duration, video, module, description
  • StudentCourse: course, student, current_lecture, lectures_completed
  • Order: amount, user, confirmed, checkout_session, payment_method, items, response, courses
  • Instructor: name, bio, image, slug, designation, courses

See the server/src/content-types/ directory for full schema details.

Bug reports

If you find a bug or need support for using this plugin, open an issue at https://github.com/luisguve/strapi-plugin-masterclass