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

@swell/js

v0.1.0

Published

## Description

Downloads

5

Readme

@swell/js

Description

@swell/js is a JavaScript SDK that connects to Swell's Front-end API, providing helper methods for common data transforms and for the actions needed to create storefronts and purchase flows.

Getting Started

The first step in setting up @swell/js for usage is to initialize your client.

const options: SwellClientInitOptions = {
	store: "test-store",
	key: "test-key",
};
const client = init(options);

Client Options

  • store (required): string

    Your store's ID. Can be found inside your store's admin dashboard, under Developer > API keys.

  • key (required): string

    A public key from your store. Can likewise be found in your store's admin dashboard, under Developer > API keys.

  • url (optional): string

    Your storefront's URL.

  • vaultUrl (optional): string

    The URL for your credit card token's vault.

  • useCamelCase (optional): boolean

    Whether or not to convert the response syntax to camel case.

  • previewContent (optional): boolean

    Should be set to true when retrieving preview editor data.

  • locale (optional): string

    The locale to use when fetching data.

  • currency (optional): string

    The currency to use when fetching pricing data.

  • sessionToken (optional): string

    The @swell/js client already managed user sessions through cookies, but this property can be set to override the session used to fetch data.

Methods

getProduct

Fetches a product using the passed-in identifier, which can be either the product's ID or the product's slug.

Example

const product = getProduct(client, "my-product", {
	locale: "en",
	currency: "USD",
});

API

const product = getProduct(client, id, requestOptions);
  • client (SwellClient): The client returned from the init function.
  • id (string): Identifier for the product. Can be either the product's slug or the product's id.
  • options: (object, optional): Options for expanding and setting custom request options for the request.
    • expand (object, optional): An array of the fields to expand. See Expandable fields for a list of the possible expand options.
    • requestOptions (object, optional): Overwrites the client options for the current request. Parameters:
      • locale (string, optional): The requested product's locale.
      • currency (string, optional): The requested product's currency.
      • sessionToken (string, optional): The token from the session to be used.

getProductList

Returns a paginated list of the store's products, which can optionally be filtered by the passed-in attributes.

Example

const products = getProductList(client, {
  filters: {
    category: 'books'
    search: 'ring',
    author: 'J.R.R. Tolkien'
  },
})

In this example, the getProductList function will attempt to retrieve a list of products that satisfies the following conditions (if any):

  • The products must be inside of a category 'books'.
  • Either the product title, the product slug or the product SKU must contain the term 'ring'.
  • The product must have an 'author' attribute with the value of 'J.R.R. Tolkien'. Author is a custom product attribute specific to this store.

API

const products = getProductList(client, options);
  • client: See SwellClient.
  • options (object, optional): Options for filtering and paginating the response.
    • filters (object, optional): Properties by which to narrow down the product list. Attributes to filter by:
      • price (number tuple, optional): Lower and upper bounds of the desired price range of the products to be retrieved. Example: [10, 100]
      • category (string, optional): The ID or slug of the category to filter by.
      • attributes (object, optional): A key-value object of attributes to filter by. The key is the attribute's name, and the value is the attribute's value (string | number) or an array representing the different allowed values ((string | number)[]).
    • requestOptions: See requestOptions
    • page (number, optional): For pagination purposes. The products retrieved will start at the pointer specified by this field.
    • limit (number, optional): Max number of products to return per page. Defaults to 15, with a maximum of 100.
    • sort (string, optional): Field to sort responses by.

getActiveVariant

Normalizes and returns the price data for a product based on the customer's selected options, alongside the rest of the matching variant's data, if found.

Example

const activeVariant = getActiveVariant(
	// Product
	{
		// ...
		id: "product-1",
		purchaseOptions: {
			standard: {
				price: 30,
			},
			subscription: {
				plans: [
					{
						id: "plan-1",
						name: "Monthly",
						price: 25,
					},
					{
						id: "plan-2",
						name: "Weekly",
						price: 20,
					},
				],
			},
		},
		options: [
			{
				id: "option-1",
				name: "Size",
				values: [
					{
						id: "option-value-1",
						name: "S",
					},
					{
						id: "option-value-2",
						name: "M",
					},
				],
			},
		],
		variants: {
			results: [
				{
					id: "variant-1",
					optionValueIds: ["option-value-1"],
					price: 30,
				},
				{
					id: "variant-2",
					optionValueIds: ["option-value-2"],
					price: 35,
				},
			],
		},
	},
	// Selected product options
	[
		{
			optionId: "option-1",
			valueId: "option-value-2",
		},
	],
	// Selected purchase option (subscription plan id)
	"plan-2",
);

In this case, activeVariant will look something like

{
  productId: "product-1",
  id: "variant-2",
  priceData: {
    standard: {
      price: 35,
      // ...
    },
    subscription: {
      id: "plan-2",
      name: "Weekly",
      price: 20,
      // ...
    },
  },
  // ...
};

API

const activeVariant = getActiveVariant(
	product,
	selectedOptions,
	selectedPlanId,
);
  • product: See Product. Should be expanded to include the product's variants.
  • selectedOptions: (SelectedOption[] | null | undefined): The selected options for the product. Can be left empty if no options are selected.
    • optionId (string): The ID of the option.
    • valueId (string): The ID of the option's value.
  • selectedPlan (string | null | undefined): The ID of the selected plan. Can be left empty if no plan is selected.

Returned object

  • activeVariant: The resolved price data for the product and selected options (under a priceData field) merged with the matching variant, if found.