@moonbase.sh/storefront-api
v1.0.6
Published
Package to let you build storefronts with Moonbase.sh as payment and delivery provider
Readme
@moonbase.sh/storefront-api
Browser-first Moonbase SDK for storefront and customer flows: storefront data, identity, carts/orders, vouchers, inventory, and activation requests. Learn more about our storefront API in our official docs: https://moonbase.sh/docs/storefronts/api/
Install
pnpm add @moonbase.sh/storefront-apiCreate a client
import { MoonbaseClient } from '@moonbase.sh/storefront-api'
const client = new MoonbaseClient({
endpoint: 'https://demo.moonbase.sh',
persistUtm: true,
})Configuration notes:
endpoint: your Moonbase storefront URL.includeManifests: include downloadable file manifests when available.persistUtm: store detected UTM values in localStorage instead of sessionStorage.
Common usage
Load storefront and create an order
const storefront = await client.storefront.get()
const order = await client.orders.pushContent(
{
id: crypto.randomUUID(),
currency: storefront.suggestedCurrency,
items: [
{
type: 'Product',
productId: storefront.products[0].id,
variationId: storefront.products[0].defaultVariation?.id ?? '',
quantity: 1,
},
],
},
{
returnUrl: `${window.location.origin}/checkout-complete`,
},
)
if (order.checkoutUrl)
window.location.href = order.checkoutUrlSign in a customer
await client.identity.signIn('[email protected]', 'password')
const user = await client.identity.get()
console.log(user.email)Redeem a voucher
const preview = await client.vouchers.peek('MY-CODE')
console.log(preview)
await client.identity.signIn('[email protected]', 'password')
const redeemed = await client.vouchers.redeem('MY-CODE')
console.log(redeemed)Inventory flow
Most inventory endpoints require an authenticated user:
const products = await client.inventory.products.getOwned()
const licenses = await client.inventory.licenses.get()Pagination on inventory endpoints is done by passing the next URL back into the same method:
let page = await client.inventory.products.getOwned()
while (page.hasMore && page.next) {
page = await client.inventory.products.getOwned(page.next)
}Endpoint groups
client.storefront, client.identity, client.orders, client.vouchers, client.inventory, client.activationRequests, client.vendor.
Token storage and logging
By default, credentials are stored in localStorage (or in-memory if localStorage is unavailable).
You can inject your own storage/logger implementations:
import { ConsoleLogger, InMemoryStore, LogLevel, MoonbaseClient } from '@moonbase.sh/storefront-api'
const client = new MoonbaseClient({
endpoint: 'https://demo.moonbase.sh',
store: new InMemoryStore(),
logger: new ConsoleLogger(LogLevel.Debug),
})