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 🙏

© 2024 – Pkg Stats / Ryan Hefner

@deox/gumroad

v0.0.8

Published

API client for Gumroad

Downloads

77

Readme

@deox/gumroad

API client for Gumroad. All the methods in API v2 are available.

Installation

Install the package by running the following command in terminal:

npm install @deox/gumroad

Usage

Warning: The library uses Fetch standard (Fetch API including fetch, Response, etc) which means that the environment must support it to make the library work!

The module can be imported using import in ES Modules and require in Common JS as shown below:

ES Modules:

// index.ts
import { Gumroad } from "@deox/gumroad";

const gumroad = new Gumroad(process.env.GUMROAD_ACCESS_TOKEN);

Common JS:

// index.cjs
const { Gumroad } = require("@deox/gumroad");

const gumroad = new Gumroad(process.env.GUMROAD_ACCESS_TOKEN);

API

Currently, all the methods in Gumroad API v2 are available.

Some examples are:

// index.ts
import { Gumroad } from "@deox/gumroad";

const gumroad = new Gumroad(process.env.GUMROAD_ACCESS_TOKEN);

const products = await gumroad.products.list(); // type: Product[]

const sales = await gumroad.sales.list(); // type: Sale[]

// ...

There are more methods. You can explore it by installing the package!

Webhook (Resource Subscriptions)

You can handle webhook requests with ease by using this library. An example is shown below which is written for Cloudflare Workers:

// src/index.ts
import { Gumroad } from "@deox/gumroad";

export type Env = Readonly<{
 GUMROAD_ACCESS_TOKEN: string;
}>;

const handleWebhook = async (request: Request, env: Env) => {
 const gumroad = new Gumroad(env.GUMROAD_ACCESS_TOKEN);

 gumroad.on(
  "ping",
  async (ctx, next) => {
   console.log(
    `Good news! A new sale was made using an email address ${ctx.data.email}`
   );

   const sale = await ctx.api.sales.get(ctx.data.sale_id);

   console.log(sale);

   // ...

   if (ctx.data.test) {
    await next();
   }
  },
  () => {
   // This will be called only on test pings
   console.log("A test ping!");
  }
 );

 // Second parameter is type of resource subscription
 // which is going to be posted on this endpoint
 // Make sure you specify the correct type
 return gumroad.handle(request, "ping");
};

const workers: ExportedHandler<Env> = {
 fetch: (request, env) => {
  const url = new URL(request.url);

  // Check for pathname and request method
  if (request.method === "POST" && url.pathname === "/ping") {
   return handleWebhook(request, env);
  }

  return new Response(null, { status: 404 });
 }
};

export default workers;