@namiml/web-sdk
Version:
Subscription monetization infrastructure — drop-in SDK with no-code paywalls, onboarding flows, A/B testing for web
84 lines (57 loc) • 3.59 kB
Markdown

# Nami Web SDK
Nami is easy subscriptions & in-app purchases, with powerful built-in paywalls and A/B testing.
This library helps you easily offer in-app purchases and subscriptions.
- No IAP code to write.
- Focus on your app experience.
- All edge cases are handled and no server is required.
- Includes is powerful built-in paywalls templates
- Update paywalls easily using a browser-based paywall CMS.
- Conduct paywall A/B tests, to improve your conversion rate.
- Robust subscription analytics, webhooks, and much more.
Requires an account with Nami ML. See https://www.namiml.com/pricing for more details and to create a free account.
## Getting started with Nami's Web SDK
### Install the Web SDK in your project
You can install the SDK via NPM or Yarn
```
npm install @namiml/web-sdk --save
```
```
yarn add @namiml/web-sdk
```
Example apps showing how to use the SDK are available in our [Nami Web SDK repo](https://github.com/namiml/nami-web-sdk).
More information on configuring and using the SDK is available in our docs at [https://learn.namiml.com](https://learn.namiml.com).
## Testing
Unit tests live in `tests/unit/` and mirror the `src/` directory structure. Run them with:
```bash
yarn test
```
### Test infrastructure
The suite uses two transformers side-by-side, each with a distinct role:
| Tool | Role | What it handles |
|---|---|---|
| **ts-jest** | TypeScript transformer | All `.ts` test files and source files — compiles TypeScript to CommonJS for Jest |
| **babel-jest** | JavaScript transformer | Third-party ESM packages from `node_modules` (Lit, `@open-wc`, `@esm-bundle/chai`, `lodash-es`, etc.) that Jest cannot run as-is because they ship as native ES modules |
| **@open-wc/testing** | Web Component test utilities | `fixture()` for rendering Lit components into a real jsdom DOM, `elementUpdated()` for awaiting Lit update cycles, and semantic DOM diff assertions (`expect(el).dom.to.equal(…)`) |
`transformIgnorePatterns` in `jest.config.mjs` lists the packages that babel-jest must transform (all others in `node_modules` are skipped). `babel.config.jest.cjs` configures the babel presets and plugins used for those transformations.
### Strategy for new tests
- **Pure logic** (services, repositories, utilities, managers): use ts-jest only. Import the class under test directly. No `@open-wc/testing` needed.
- **Web Components** (anything in `src/components/`): use `fixture()` from `@open-wc/testing` to mount the component in jsdom and `elementUpdated()` to wait for Lit's render cycle before asserting. See any existing file in `tests/unit/components/` for the pattern.
- Do not add new packages to `transformIgnorePatterns` without also verifying that `babel.config.jest.cjs` can transform them. New ESM-only packages may require additional babel plugins.
## Legacy support
To support older browsers, import our side-effect module before you import the SDK. It installs the necessary polyfills and shims, allowing the main entry point to stay the same for every app.
- ESM:
```js
import '@namiml/web-sdk/legacy-support';
import { Nami } from '@namiml/web-sdk';
```
- CommonJS:
```js
require('@namiml/web-sdk/legacy-support');
const { Nami } = require('@namiml/web-sdk');
```
Modern apps that do not target legacy environments can simply import the default entry:
```js
import { Nami } from '@namiml/web-sdk';
```
This keeps the modern bundle slim, while letting you opt into additional support only when you need it.