spackle-node v0.0.8
Spackle Node Library
The Spackle Node library provides optimized access to billing aware flags created on the Spackle platform.
Documentation
See the Node API docs.
Setup
Install the Spackle library
npm install spackle-node
Configure your environment
In order to use Spackle, create a new Spackle
client with your secret key. You can find your secret key in Spackle app settings page.
import Spackle from 'spackle-node';
const spackle = new Spackle('<api-key>')
Usage
Pricing Tables
Fetch a pricing table
await spackle.pricingTables.retrieve('abcde123')
Pricing table object
{
id: string
name: string
intervals: string[]
products: {
id: string
name: string
description: string
features: {
id: string
name: string
key: string
type: number
value_flag: boolean
value_limit: number | null
}[]
prices: {
month?: {
id: string
unit_amount: number
currency: string
}
year?: {
id: string
unit_amount: number
currency: string
}
}
}[]
}
Entitlements
Fetch a customer
Spackle uses stripe ids as references to customer features.
customer = await spackle.customers.retrieve('cus_000000000')
Verify feature access
customer.enabled("feature_key")
Fetch a feature limit
customer.limit("feature_key")
Examine a customer's subscriptions
A customer's current subscriptions are available on the subscriptions
property. These are valid stripe.Subscription
objects as defined in the Stripe Node library.
customer.subscriptions
Waiters
There is a brief delay between when an action takes place in Stripe and when it is reflected in Spackle. To account for this, Spackle provides a waiters
resource that can be used to wait for a Stripe object to be updated and replicated.
- Wait for a customer to be created
await spackle.waiters.waitForCustomer("cus_00000000")
- Wait for a subscription to be created
await spackle.waiters.waitForSubscription("cus_000000000", "sub_00000000")
- Wait for a subscription to be updated
await spackle.waiters.waitForSubscription("cus_000000000", "sub_00000000", status="active")
These will block until Spackle is updated with the latest information from Stripe or until a timeout occurs.
Usage in development environments
In production, Spackle requires a valid Stripe customer. However, that is not development environments where state needs to be controlled. As an alternative, you can use a file store to test your application with seed data.
/app/spackle.json
{
"cus_000000000": {
"features": [
{
"type": 0,
"key": "flag_feature",
"value_flag": true
},
{
"type": 1,
"key": "limit_feature",
"value_limit": 100
}
],
"subscriptions": [
{
"id": "sub_000000000",
"status": "trialing",
"quantity": 1
}
]
}
}
Then configure the file store in your application:
import Spackle, { FileStore } from 'spackle-node';
const store = new FileStore("/app/spackle.json")
const spackle = new Spackle("<api-key>", store)
Usage in testing environments
In production, Spackle requires a valid Stripe customer. However, that is not ideal in testing or some development environments. As an alternative, you can use an in-memory store to test your application with seed data.
import Spackle, { FileStore } from 'spackle-node';
const store = new FileStore("/app/spackle.json")
const spackle = new Spackle("<api-key>", store)
spackle.get_store().set_customer_data("cus_000000000", {
"features": [
{
"type": 0,
"key": "flag_feature",
"value_flag": True,
},
{
"type": 1,
"key": "limit_feature",
"value_limit": 100,
},
],
"subscriptions": [
{
"id": "sub_000000000",
"status": "trialing",
"quantity": 1,
}
]
})
Note: The in-memory store is not thread-safe and state will reset on each application restart.