# ranked-profile

> Use the Web Monetization API to bring better personalization to your users

Latest version **1.0.1** (published 2020-06-18) · MIT license · 0 weekly downloads

## Install

```sh
npm install ranked-profile
pnpm add ranked-profile
yarn add ranked-profile
bun add ranked-profile
```

## Health

**Score 15/100 (F)** — status: abandoned.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 1.0.1 |
| Published | 2020-06-18 |
| First published | 2020-06-18 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 0 |
| Unpacked size | 59.7 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| Author | Keith Brewster |
| Maintainers | powerglove22 |
| Keywords | webmonetization |

## Links

- npm: https://www.npmjs.com/package/ranked-profile
- Repository: https://github.com/brewsterbhg/ranked-profile
- Homepage: https://github.com/brewsterbhg/ranked-profile#readme
- Issues: https://github.com/brewsterbhg/ranked-profile/issues
- npm.io page: https://npm.io/package/ranked-profile

## Recent versions

- 1.0.1 (latest) — 2020-06-18

## README

<h1 align="center">Ranked Profile 🥇</h1>

<div align="center">
	<a href="https://www.npmjs.com/package/ranked-profile" rel="external" aria-label="NPM package">
	  <img src="https://img.shields.io/npm/v/ranked-profile.svg" alt="npm badge" />
	</a>
    <img src="https://travis-ci.com/brewsterbhg/ranked-profile.svg?branch=master" alt="Travis CI badge">
  <p><em>Reward users who support you through web monetization by building a personalized experience around their contributions.</em></p> <p>Demo: <a href="https://ranked-profile-demo.netlify.app/">https://ranked-profile-demo.netlify.app/</a></p>
</div>

## Overview

This project acts as a way to integrate a personalized experience for your users who support you through web monetization by tying an experience/levelling mechanic around payment dispatches. Experience is determined by the payment amount (controlled with a multiplier), with callbacks on experience update and level up functions to integrate into your own application.

## Requirements

Check out the official Web Monetization [Quick Start Guide](https://webmonetization.org/docs/getting-started) to learn how to set up a wallet for receiving payments. This library assumes you have a meta tag with both the `name="moneization"` and `content={your payment pointer}` properties. Example:

```
<meta
  name="monetization"
  content="$wallet.example.com/alice"
>
```

## Installation

```
npm install ranked-profile --save
```

## Example

```
const rp = new RankedProfile()

rp.init({
    level: 1,
    xp: 0,
    levelThresholds: [10, 20, 50],
    multiplier: 1000,
    onXPUpdate: (xp) => console.log(xp),
    onLevelUp: (level) => console.log(level),
});
```

## Options

| Name            | Type     | Required | Description                                                  |
| --------------- | -------- | -------- | ------------------------------------------------------------ |
| xp              | number   | yes      | The current experience for a user.                           |
| level           | number   | yes      | The current level for a user.                                |
| levelThresholds | array    | yes      | The experience thresholds needed for each level.             |
| multiplier      | number   | no       | The multiplier for controlling the payment/experience ratio. |
| onXPUpdate      | function | no       | The callback function when experience is updated.            |
| onLevelUp       | function | no       | The callback function when level is updated.                 |

## API

| Name                      | Returns | Description                                                                               |
| ------------------------- | ------- | ----------------------------------------------------------------------------------------- |
| init                      | void    | Initialize a new RankedProfile instance.                                                  |
| getCurrentXP              | number  | Returns the user's current experience.                                                    |
| getExperienceToNextLevel  | number  | Returns the amount of experience needed to reach the next level (returns 0 at max level). |
| getPercentageTowardsLevel | number  | Returns the current percentage towards the next level (returns 100 at max level).         |
| getCurrentLevel           | number  | Returns the user's current level.                                                         |
| startMonetization         | void    | Starts the monetization event (called automatically with `init`).                         |
| stopMonetization          | void    | Stops the monetization event (called automatically with `cleanup`).                       |
| isActive                  | boolean | Returns whether a RankedProfile instance has been initialized.                            |
| cleanup                   | void    | Cleanup function to remove event listeners and clean up callbacks.                        |

## Contributing

If you've noticed a bug or have a feature you'd like to suggest, please open a [GitHub Issue](https://github.com/brewsterbhg/ranked-profile/issues). If you would like to contribute to the project, feel free to fork this repo, create a new branch & open a pull request.

## Licence

MIT © [brewsterbhg](https://github.com/brewsterbhg)

---
_Source: https://npm.io/package/ranked-profile · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
