0.1.2 • Published 9 months ago

@hunterhod/payments v0.1.2

Weekly downloads
-
License
ISC
Repository
-
Last release
9 months ago

Installation

npm i @hunterhod/payments

Usage

import BenchmarkPayments from '@benchmark/payments';

// Initialize the BenchmarkPayments library.
// The developer will be issued an API key upon signing up for BenchmarkPayments
// and can re-issue API keys from their BenchmarkPayments dashboard, similiar to
// how OpenAI manages API keys.
const benchmarkPayments = new BenchmarkPayments({
	// API keys are always a UUID
	apiKey: '550e8400-e29b-41d4-a716-446655440000',
});

// This function would be present in a server-side ExpressJS route
// Example file path: pages/api/chat.js
export default function handler(req, res) {
	// Get a unique identifier for your user. Can be any string or number that
  // is guaranteed to be unique. You will likely fetch the user ID from
  // authentication cookies that you will probably have present in the request
  // object.
	// getUserIDFromRequestCookies() is a contrived function that is assumed to
	// be implemented somewhere else in this example.
	const userId = await getUserIDFromRequestCookies(req);

	// Check to see if your user has credits avaiable to generate a response from
  // the LLM.
	if (benchmarkPayments.userHasCredits(userId)) {
		// Generate a response from your LLM.
    // getResponseFromLLM() is a contrived function that is assumed to
		// be implemented somewhere else in this example.
		const {
			llmResponse,
			numTokens
		} = await getResponseFromLLM(req.body.messageFromUser);

		// Deduct credits from user for the generation of the response.
		// There is the possibility that the user could "overdraft" credits,
		// but we allow this to happen since it would be hard to guess at
		// how many credits the next content generation will require.
		// Better to just detect "credits <= 0" and send them to the checkout
    // page.
		await benchmarkPayments.deductCreditsFromUser({
			// 'tokens' can be used as a type if the developer merely wants to pass
			// along their API costs to the user. They would expose the token count
			// from a service provider like OpenAI in this case.
			// 'generations' can be used as a type if the developer wants to charge
			// the user for each time they generated a piece of content, regardless
			// of the API costs.
			type: 'tokens',
			quantity: numTokens, // e.g. 24
		});

		// User has credits
	  res.status(200).json({ llmResponse: llmResponse });
	} else {
		// Take the user to a checkout page where they can purchase additional
		// credits to continue using the application.
		const paymentURL = await benchmarkPayments.getPaymentURLForUser(userId);
		// HTTP 402 Payment Required
		res.status(402).json({ paymentURL: paymentURL });
	}
}
0.1.2

9 months ago

0.1.1

9 months ago

0.1.0

9 months ago