From 771813706ce9f87d237e45a03292184c42b20b58 Mon Sep 17 00:00:00 2001 From: Melissa Henderson <57110301+melissahenderson@users.noreply.github.com> Date: Tue, 28 Jan 2025 15:31:00 -0500 Subject: [PATCH 1/5] docs: rewrite --- astro.config.mjs | 238 ++++++--------- .../ProbRevshare/components/_active-view.jsx | 4 +- .../docs/developers/about-receiving.mdx | 211 ++++++++++++++ src/content/docs/developers/csp.mdx | 70 +++++ src/content/docs/developers/events.mdx | 244 ++++++++++++++++ src/content/docs/developers/get-started.mdx | 62 ++++ src/content/docs/developers/interfaces.mdx | 65 +++++ .../resources => developers}/libraries.mdx | 0 src/content/docs/developers/link-element.mdx | 136 +++++++++ src/content/docs/developers/overview.mdx | 60 ++++ .../docs/developers/permissions-policy.mdx | 55 ++++ src/content/docs/docs.mdx | 66 +---- .../add-a-streaming-payments-counter.mdx | 102 ------- .../docs/docs/guides/monetize-page.mdx | 37 --- .../docs/guides/provide-exclusive-content.mdx | 191 ------------- src/content/docs/docs/guides/remove-ads.mdx | 128 --------- .../set-up-probabilistic-revenue-sharing.mdx | 120 -------- .../docs/docs/intro/receiving-payments.mdx | 58 ---- .../docs/docs/intro/sending-payments.mdx | 75 ----- .../docs/docs/intro/web-monetization-flow.mdx | 270 ------------------ .../docs/references/attributes/amount.mdx | 41 --- .../docs/references/attributes/amountsent.mdx | 38 --- .../docs/references/attributes/assetcode.mdx | 41 --- .../docs/references/attributes/assetscale.mdx | 41 --- .../references/attributes/incomingpayment.mdx | 53 ---- .../references/attributes/paymentpointer.mdx | 28 -- .../docs/references/attributes/receipt.mdx | 36 --- .../docs/references/csp-monetization-src.mdx | 70 ----- .../references/html-link-rel-monetization.mdx | 34 --- .../docs/references/monetizationevent.mdx | 80 ------ .../docs/docs/references/onmonetization.mdx | 36 --- .../permissions-policy-monetization.mdx | 40 --- .../docs/docs/resources/get-involved.mdx | 45 --- src/content/docs/docs/resources/glossary.mdx | 130 --------- .../docs/docs/resources/op-wallets.mdx | 17 -- src/content/docs/es/docs.mdx | 68 ----- src/content/docs/fr/docs.mdx | 68 ----- src/content/docs/resources/get-involved.mdx | 45 +++ src/content/docs/resources/glossary.mdx | 92 ++++++ src/content/docs/supporters/about-sending.mdx | 58 ++++ .../get-started.mdx} | 44 +-- src/content/docs/supporters/overview.mdx | 55 ++++ .../docs/tutorials/contribution-counter.mdx | 128 +++++++++ src/content/docs/tutorials/remove-content.mdx | 134 +++++++++ .../docs/tutorials/revenue-sharing.mdx | 89 ++++++ src/content/docs/tutorials/show-content.mdx | 206 +++++++++++++ .../docs/tutorials/test-web-monetization.mdx | 7 + src/content/docs/wallets.mdx | 24 ++ src/pages/prob-revshare.astro | 4 +- src/partials/glitch.mdx | 3 + src/partials/wallet-prereq.mdx | 2 + 51 files changed, 1874 insertions(+), 2075 deletions(-) create mode 100644 src/content/docs/developers/about-receiving.mdx create mode 100644 src/content/docs/developers/csp.mdx create mode 100644 src/content/docs/developers/events.mdx create mode 100644 src/content/docs/developers/get-started.mdx create mode 100644 src/content/docs/developers/interfaces.mdx rename src/content/docs/{docs/resources => developers}/libraries.mdx (100%) create mode 100644 src/content/docs/developers/link-element.mdx create mode 100644 src/content/docs/developers/overview.mdx create mode 100644 src/content/docs/developers/permissions-policy.mdx delete mode 100644 src/content/docs/docs/guides/add-a-streaming-payments-counter.mdx delete mode 100644 src/content/docs/docs/guides/monetize-page.mdx delete mode 100644 src/content/docs/docs/guides/provide-exclusive-content.mdx delete mode 100644 src/content/docs/docs/guides/remove-ads.mdx delete mode 100644 src/content/docs/docs/guides/set-up-probabilistic-revenue-sharing.mdx delete mode 100644 src/content/docs/docs/intro/receiving-payments.mdx delete mode 100644 src/content/docs/docs/intro/sending-payments.mdx delete mode 100644 src/content/docs/docs/intro/web-monetization-flow.mdx delete mode 100644 src/content/docs/docs/references/attributes/amount.mdx delete mode 100644 src/content/docs/docs/references/attributes/amountsent.mdx delete mode 100644 src/content/docs/docs/references/attributes/assetcode.mdx delete mode 100644 src/content/docs/docs/references/attributes/assetscale.mdx delete mode 100644 src/content/docs/docs/references/attributes/incomingpayment.mdx delete mode 100644 src/content/docs/docs/references/attributes/paymentpointer.mdx delete mode 100644 src/content/docs/docs/references/attributes/receipt.mdx delete mode 100644 src/content/docs/docs/references/csp-monetization-src.mdx delete mode 100644 src/content/docs/docs/references/html-link-rel-monetization.mdx delete mode 100644 src/content/docs/docs/references/monetizationevent.mdx delete mode 100644 src/content/docs/docs/references/onmonetization.mdx delete mode 100644 src/content/docs/docs/references/permissions-policy-monetization.mdx delete mode 100644 src/content/docs/docs/resources/get-involved.mdx delete mode 100644 src/content/docs/docs/resources/glossary.mdx delete mode 100644 src/content/docs/docs/resources/op-wallets.mdx delete mode 100644 src/content/docs/es/docs.mdx delete mode 100644 src/content/docs/fr/docs.mdx create mode 100644 src/content/docs/resources/get-involved.mdx create mode 100644 src/content/docs/resources/glossary.mdx create mode 100644 src/content/docs/supporters/about-sending.mdx rename src/content/docs/{docs/intro/web-monetization-extension.mdx => supporters/get-started.mdx} (85%) create mode 100644 src/content/docs/supporters/overview.mdx create mode 100644 src/content/docs/tutorials/contribution-counter.mdx create mode 100644 src/content/docs/tutorials/remove-content.mdx create mode 100644 src/content/docs/tutorials/revenue-sharing.mdx create mode 100644 src/content/docs/tutorials/show-content.mdx create mode 100644 src/content/docs/tutorials/test-web-monetization.mdx create mode 100644 src/content/docs/wallets.mdx create mode 100644 src/partials/glitch.mdx create mode 100644 src/partials/wallet-prereq.mdx diff --git a/astro.config.mjs b/astro.config.mjs index 634afdcb..100a3dbb 100644 --- a/astro.config.mjs +++ b/astro.config.mjs @@ -39,19 +39,12 @@ export default defineConfig({ borderRadius: 'var(--border-radius)', }, }, + defaultLocale: 'root', locales: { root: { label: 'English', lang: 'en', }, - es: { - label: 'Español', - lang: 'es', - }, - fr: { - label: 'Français', - lang: 'fr', - }, }, components: { Header: './src/components/docs/Header.astro', @@ -62,185 +55,142 @@ export default defineConfig({ }, sidebar: [ { - label: 'Intro to Web Monetization', - collapsed: true, + label: 'Overview', + link: '/docs/', + }, + { + label: 'For content consumers', + collapsed: false, items: [ { label: 'Overview', - link: '/docs/', - }, - { - label: 'Sending payments', - link: '/docs/intro/sending-payments', - }, - { - label: 'Receiving payments', - link: '/docs/intro/receiving-payments', + link: 'supporters/overview', }, { - label: 'Web Monetization flow', - link: '/docs/intro/web-monetization-flow', + label: 'Get started', + link: 'supporters/get-started', }, { - label: 'Web Monetization extension', - link: '/docs/intro/web-monetization-extension', + label: 'Learn about sending payments', + link: '/supporters/about-sending', }, ], }, { - label: 'References', - collapsed: true, + label: 'For developers', + collapsed: false, items: [ { - label: 'Web Monetization API', + label: 'Overview', + link: '/developers/overview', + }, + { + label: 'Get started', + link: '/developers/get-started', + }, + { + label: 'Learn about receiving payments', + link: '/developers/about-receiving', + }, + { + label: 'Tutorials', + collapsed: true, items: [ { - label: 'HTML rel=monetization', - link: '/docs/references/html-link-rel-monetization', + label: 'Show content to paying visitors', + link: '/tutorials/show-content', }, { - label: 'Monetization events', - collapsed: true, - items: [ - { - label: 'MonetizationEvent', - link: '/docs/references/monetizationevent', - }, - { - label: 'amountSent', - link: '/docs/references/attributes/amountsent', - }, - { - label: 'incomingPayment', - link: '/docs/references/attributes/incomingpayment', - }, - { - label: 'paymentPointer', - link: '/docs/references/attributes/paymentpointer', - }, - { - label: 'amount', - link: '/docs/references/attributes/amount', - badge: { text: 'deprecated', variant: 'danger' }, - }, - { - label: 'assetCode', - link: '/docs/references/attributes/assetcode', - badge: { text: 'deprecated', variant: 'danger' }, - }, - { - label: 'assetScale', - link: '/docs/references/attributes/assetscale', - badge: { text: 'deprecated', variant: 'danger' }, - }, - { - label: 'receipt', - link: '/docs/references/attributes/receipt', - badge: { text: 'deprecated', variant: 'danger' }, - }, - ], + label: 'Remove content for paying visitors', + link: '/tutorials/remove-content', }, - ], - }, - { - label: 'HTTP headers', - items: [ { - label: 'Content-Security-Policy: monetization-src', - link: '/docs/references/csp-monetization-src', + label: 'Show visitors how much they\'ve contributed', + link: '/tutorials/contribution-counter', }, { - label: 'Permissions-Policy: monetization', - link: '/docs/references/permissions-policy-monetization', + label: 'Set up probabilistic revenue sharing', + link: '/tutorials/revenue-sharing', }, - ], - }, - { - label: 'Events', - items: [ { - label: 'GlobalEventHandlers: onmonetization', - link: '/docs/references/onmonetization', + label: 'Test Web Monetization', + link: '/tutorials/test-web-monetization', }, ], }, - ], - }, - { - label: 'Guides', - collapsed: true, - items: [ - { - label: 'Add Web Monetization to a page', - link: '/docs/guides/monetize-page', - }, - { - label: 'Remove ads', - link: '/docs/guides/remove-ads', - }, { - label: 'Provide exclusive content', - link: '/docs/guides/provide-exclusive-content', - }, - { - label: 'Set up probabilistic revenue sharing', - link: '/docs/guides/set-up-probabilistic-revenue-sharing', + label: 'Libraries', + link: '/developers/libraries', }, { - label: 'Add a streaming payments counter', - link: '/docs/guides/add-a-streaming-payments-counter', + label: 'API docs', + collapsed: true, + items: [ + { + label: 'HTML DOM API', + collapsed: false, + items: [ + { + label: 'Monetization element', + link: '/developers/link-element', + }, + ], + }, + { + label: 'Web Monetization API', + collapsed: false, + items: [ + { + label: 'Monetization interfaces', + link: '/developers/interfaces', + }, + { + label: 'Monetization events', + link: '/developers/events', + }, + ], + }, + { + label: 'HTTP Headers', + collapsed: true, + items: [ + { + label: 'Content Security Policy (CSP)', + link: '/developers/csp', + }, + { + label: 'Permissions Policy', + link: '/developers/permissions-policy', + }, + ], + }, + { + label: 'Web Monetization Specification', + link: 'https://webmonetization.org/specification/', + attrs: { target: '_blank', }, + }, + ], }, ], }, + { + label: 'Compatible digital wallets', + link: '/wallets', + }, { label: 'Resources', - collapsed: true, + collapsed: false, items: [ { label: 'Glossary', - link: '/docs/resources/glossary', - }, - { - label: 'Libraries', - link: '/docs/resources/libraries', - }, - { - label: 'Web Monetization-enabled wallets', - link: '/docs/resources/op-wallets', + link: '/resources/glossary', }, { label: 'Get involved', - link: '/docs/resources/get-involved', - }, - { - label: 'Interledger', - link: 'https://interledger.org/', - attrs: { - target: '_blank', - rel: 'noopener noreferrer', - 'data-icon': 'external', - }, - }, - { - label: 'Open Payments API', - link: 'https://openpayments.guide/', - attrs: { - target: '_blank', - rel: 'noopener noreferrer', - 'data-icon': 'external', - }, + link: '/resources/get-involved', }, ], }, - { - label: 'Specification', - link: 'https://webmonetization.org/specification/', - attrs: { - target: '_blank', - rel: 'noopener noreferrer', - 'data-icon': 'external', - }, - }, ], }), react(), diff --git a/src/components/pages/ProbRevshare/components/_active-view.jsx b/src/components/pages/ProbRevshare/components/_active-view.jsx index 59a7297a..efe11114 100644 --- a/src/components/pages/ProbRevshare/components/_active-view.jsx +++ b/src/components/pages/ProbRevshare/components/_active-view.jsx @@ -33,8 +33,8 @@ export function ActiveView() { If you make any changes to the table, your monetization{' '} link will change. Be sure to replace your old{' '} link element with the updated version. Check out{' '} - - Add Web Monetization to a page + + this page {' '} if you need help.

diff --git a/src/content/docs/developers/about-receiving.mdx b/src/content/docs/developers/about-receiving.mdx new file mode 100644 index 00000000..8a1faa6c --- /dev/null +++ b/src/content/docs/developers/about-receiving.mdx @@ -0,0 +1,211 @@ +--- +title: About receiving payments +--- + +import { LinkOut, CodeBlock, Disclosure } from "@interledger/docs-design-system"; +import { Badge, Tabs, TabItem, Steps } from '@astrojs/starlight/components'; + +Receiving Web Monetization payments requires you to have an account with a compatible digital wallet provider. Not all wallet providers support receiving Web Monetization payments. + +Your digital wallet provider will supply you with the financial account you’ll use to receive payments. Withdrawing your funds typically requires you to link a card or bank account to your wallet. + +Since wallet providers are financial entities, they are regulated within the countries they operate. One regulation, known as KYC (Know Your Customer), requires financial entities to collect your personal information and verify your identity before allowing you to open an account. + +## Web Monetization-compatible digital wallets + +You must have an account with a compatible [digital wallet provider](/wallets) to receive payments. Be sure to select a provider that: + +* Is available in your region +* Supports your preferred currency +* Allows you to withdraw your funds if you choose to transact in fiat + +Your wallet provider will assign your wallet a unique identifier called a _wallet address_ or a _payment pointer_. You’ll need this identifier to web monetize your content. + +| Identifier | Example format | +| ------- | -------------- | +| Payment pointer | `$wallet.example.com/alice` | +| Wallet address | `https://wallet.example.com/alice` | + +## Web monetized content + +Once you have your payment pointer or wallet address, you're ready to add the Web Monetization `` element to each page of your site you want to monetize. Visit the [get started](/developers/get-started) page for more information. + +When you include the `` element on a page, you're telling your website visitors' browsers that you can accept Web Monetization payments. Visitors using the [Web Monetization extension](/supporters/get-started#set-up-the-extension) in their browsers can then choose to send you payments in the amount and frequency of their choosing. + +## Payments + +Your visitors' Web Monetization extension acts like a messaging service. When they land on your page, their extension identifies your `` element and uses it to request information from your wallet provider. This begins a number of API requests and responses between the extension and your wallet provider, and the extension and your visitor's wallet provider to facilitate a payment. + +### Micropayments + +If you're already familiar with Web Monetization, you may have heard about how it supports micropayments. + +In general, a micropayment is a very small payment. Each wallet provider is responsible for a few things: +* Deciding whether to support receiving and/or sending micropayments +* Defining what a micropayment is in the context of their business +* Determining the minimum amount for a micropayment + +Let's say your wallet provider allows you to receive micropayments. Your provider defines a micropayment as any payment under $0.05 USD. This means you could, for example, receive a payment of one US cent--as long as the sender's wallet provider allows them to send that amount. + +Your wallet provider may also have business rules set up such that micropayments accumulate on your account but aren't deposited until you reach a minimum (e.g., $1.00 USD). + +Web Monetization can even support payments of a fraction of a cent (e.g., $0.00001); however, sending and receiving fractional amounts must be supported by the respective wallet providers. + +### A deeper dive into payments + +#### Open Payments + +For a wallet to be compatible with Web Monetization, the provider must implement the Open Payments standard. When implemented, a set of APIs becomes available for third-party applications, such as your visitor's Web Monetization extension, to communicate with the wallet providers. + +#### Web Monetization extension + +A component within the extension--called the [Web Monetization agent](/developers/link-element#web-monetization-agent)--is responsible for communicating with a wallet provider via the Open Payments APIs. The next section describes the series of API calls required to initiate a payment. + +#### Web Monetization payment sequence + +:::note +The examples below are simplified representations of the Open Payments API calls. +::: + + +1. The Web Monetization agent locates your [monetization link](/developers/link-element) and extracts your payment URL (the `href` value). + + ```html + + ``` + +2. The agent issues a request to the URL. + + ```http + GET /alice HTTP/1.1 + Accept: application/json + Host: wallet.example + ``` + +3. The response from your wallet provider to the agent contains information such as the currency your account is denominated in and the URLs of your wallet provider's authorization and resource servers. + + ```http + HTTP/1.1 200 Success + Content-Type: application/json + + { + "assetCode": "USD", + "assetScale": 2, + "authServer": "https://wallet.example/auth", + "resourceServer": "https://wallet.example/resource" + } + ``` + +4. The agent issues a request to your wallet provider's `authServer` URL. The request contains the access permissions the agent is requesting. + + ```http + POST /auth/ HTTP/1.1 + Accept: application/json + Content-Type: application/json + Host: wallet.example + + { + "access_token": { + "access": [ + { + "type": "incoming-payment", + "actions": ["create", "read"], + "identifier": "https://wallet.example/alice" + } + ] + }, + "client": "https://cloudninewallet.example/visitor" + } + ``` + :::note + The `client` in the response above is your visitor's wallet address/payment pointer. This URL is only used by the agent and is not available to you. + ::: + +5. The response to the agent contains an access token that the agent needs to make its next request. + + ```http wrap + { + "access_token": { + "value": "OS9M2PMHKUR64TB8N6BW7OZB8CDFONP219RP1LT0", + "manage": "https://wallet.example/auth/token/dd17a202-9982-4ed9-ae31-564947fb6379", + "access": [ + { + "type": "incoming-payment", + "actions": ["create", "read"], + "identifier": "https://wallet.example/alice" + } + ] + } + } + ``` + +6. The agent issues a request to your wallet provider's `resourceServer` URL. The purpose of this call is to request the information needed by your visitor's wallet provider so their provider correctly addresses the payment to you. + + ```http + POST /alice/incoming-payments HTTP/1.1 + Accept: application/json + Content-Type: application/json + Authorization: OS9M2PMHKUR64TB8N6BW7OZB8CDFONP219RP1LT0 + Host: wallet.example + ``` + +7. The response to the agent contains unique payment details that will be used to address the payment to your payment account. + + ```http wrap + { + "id": "https://wallet.example/alice/incoming-payments/08394f02-7b7b-45e2-b645-51d04e7c330c", + "walletAddress": "https://wallet.example/alice", + "receivedAmount": { + "value": "0", + "assetCode": "USD", + "assetScale": 2 + }, + "completed": false, + "createdAt": "2022-03-12T23:20:50.52Z" + } + ``` + +8. At this point, the agent has finished communicating with your wallet provider. Now, the agent issues a request to your visitor's wallet provider. The purpose of this call is to give your visitor's wallet provider what it needs to send the payment. + + ```http wrap + POST /visitor/outgoing-payment HTTP/1.1 + Accept: application/json + Content-Type: application/json + Authorization: {{ GNAP outgoingPaymentGrant.accessToken.value }} + Host: cloudninewallet.example + + { + "walletAddress": "https://wallet.example/alice", + "quoteId": "https://wallet.example/quotes/ab03296b-0c8b-4776-b94e-7ee27d868d4d", + } + ``` + +9. The response from your visitor's wallet provider indicates whether the outgoing payment was created on their side. A payment could fail if the visitor has insufficient funds, for example. The following example indicates the outgoing payment was successfully created. + + + ```http wrap + { + "id": "https://cloudninewallet.example/visitor/outgoing-payments/8c68d3cc-0a0f-4216-98b4-4fa44a6c88cf", + "walletAddress": "https://cloudninewallet.example/visitor/", + "receiver": "https://wallet.example/alice/incoming-payments/08394f02-7b7b-45e2-b645-51d04e7c330c", + "receiveAmount": { + "value": "2", + "assetCode": "USD", + "assetScale": 2 + }, + "debitAmount": { + "value": "2", + "assetCode": "USD", + "assetScale": 2 + }, + "sentAmount": { + "value": "0", + "assetCode": "USD", + "assetScale": 2 + }, + "createdAt": "2022-03-12T23:20:55.52Z", + "updatedAt": "2022-03-12T23:20:55.52Z" + } + ``` + + \ No newline at end of file diff --git a/src/content/docs/developers/csp.mdx b/src/content/docs/developers/csp.mdx new file mode 100644 index 00000000..bf09ceee --- /dev/null +++ b/src/content/docs/developers/csp.mdx @@ -0,0 +1,70 @@ +--- +title: Content Security Policy (CSP) +--- + +import { LinkOut, Hidden } from "@interledger/docs-design-system"; +import Specification from '/src/components/docs/Specification.astro' +import BrowserCompat from '/src/components/docs/BrowserCompat.astro' +import data from '/src/data/browser-compat-data/csp-monetization-src.json' + +A Content Security Policy (CSP) is an extra layer of security that allows you to control the resources a user agent, such as a web browser, is allowed to load for a given page. CSPs use directives to describe the policies for a certain resource type. + +The `monetization-src` fetch directive allows you to define the payment pointer and wallet address URLs that a browser can load. If an attempt is made to load an undefined URL, a network error will occur and the URL will not load. + + + + + + + + + + + + + + +
CSP Version3
Directive`monetization-src`
Directive typeFetch directive
+ +## Syntax + +```http +Content-Security-Policy: monetization-src ; +Content-Security-Policy: monetization-src , ; +``` + +Where `` is a payment pointer or wallet address URL that's allowed to load. + +```http +Content-Security-Policy: monetization-src https://example.com; +``` + +## Example + +Your wallet address is `https://wallet.example.com/alice`. You want to ensure that no other URLs can be loaded. + +You configure your web server to return the following `Content-Security-Policy` HTTP header on each applicable page of your website. + +```http +Content-Security-Policy: monetization-src https://wallet.example.com/alice; +``` + +A bad actor injects their wallet address into your site. + +```html + +``` + +However, fetches for the injected URL will return a network error and not load because the URL doesn't match what you've defined in your CSP. + + + +// ## Browser compatibility + + + + + +## Specifications + + \ No newline at end of file diff --git a/src/content/docs/developers/events.mdx b/src/content/docs/developers/events.mdx new file mode 100644 index 00000000..cbb59c10 --- /dev/null +++ b/src/content/docs/developers/events.mdx @@ -0,0 +1,244 @@ +--- +title: Monetization events +--- + +import { LinkOut, Hidden, Tooltip } from "@interledger/docs-design-system"; +import Specification from '/src/components/docs/Specification.astro' +import { Tabs, TabItem, Steps, Badge } from '@astrojs/starlight/components'; +import BrowserCompat from '/src/components/docs/BrowserCompat.astro' +import amountSent from '/src/data/browser-compat-data/amountSent.json' +import incomingPayment from '/src/data/browser-compat-data/incomingPayment.json' +import paymentPointer from '/src/data/browser-compat-data/paymentPointer.json' + + + +One responsibility of the [Web Monetization agent](/resources/glossary/#web-monetization-agent) is to instrument payments. The agent does this by calling the Open Payments APIs, which are APIs implemented by wallet providers. + +The agent makes calls to the `/incoming-payments` endpoint at your wallet provider and to the `/outgoing-payments` endpoint at your site visitor's wallet provider. + +Each time the agent receives a `201 outgoing payment created` response from the site visitor's wallet provider, the agent fires a `monetization` event on the browser window. + +### Specifications + + + +## Event listeners + +When a `monetization` event fires, there's no guarantee that payments will follow or, if they do, how often or how large the payments will be. + +A `monetization` event indicates that the site visitor's wallet provider has created the resources needed for it to send a payment. + +By adding an event listener to the relevant monetization `` element (or one of its ancestors), you can use the `monetization` event properties to verify payments. These properties provide: + +* Information about the [amount and currency](#amountsent) of a sent (not received) payment +* A URL representing an [incoming payment](#incomingpayment) that can be used to determine the amount received, similar to a receipt +* The URL representing the [payment pointer or wallet address](#paymentpointer) that an incoming payment request was sent to + +### High-level flow + + +1. You add an event listener to a monetization ``. +2. The site visitor accesses your page. +3. The site visitor's Web Monetization agent calls the Open Payments APIs to begin setting up the payment. More information about these API calls can be found [here](/developers/about-receiving#a-deeper-dive-into-payments). +4. The Web Monetization agent receives a `201 (outgoing payment created)` response from the site visitor's wallet provider. +5. The Web Monetization agent fires a `monetization` event. +6. Your event listener calls its defined function. + + +## Event properties + +### amountSent + +The `amountSent` property returns the `value` and `currency` of the sent payment. + +* `value` - The amount. A valid decimal monetary value containing the amount that was sent. +* `currency` - The currency code. A well-formed 3-letter ISO4217 code that represents the currency that was sent, such as USD or GBP. + +```js title="Example" +"value": "1.23" +"currency": "USD" +``` + +:::note[Received amount] +The `amountSent` is not necessarily the amount received. For example, if your payment account is set up to receive GBP, but your site visitor's account sends in USD, then exchange rates and currency conversion fees could affect the amount you receive. +::: + +#### Examples using `amountSent` + +In this example, you have a single monetization link element and are listening for `monetization` events on the element. + +```js + + +``` + +In this example, you have multiple link elements (not shown). You're listening for `monetization` events on the `window`, which provides events for all monetization link elements on the page. The `event.target` will correspond to the relevant link element. + +```js + +``` + + + +// #### amountSent browser compatibility + + + + + +#### Specifications + + + +### incomingPayment + +:::tip[Experimental] +`incomingPayment` is an experimental technology. +::: + +The `incomingPayment` property allows you to check whether a payment was received and, if so, the amount received. + +The property returns a URL that represents the incoming payment at your wallet provider. By querying the URL, you can get the `receivedAmount`. + +#### Example using `incomingPayment` + +This example shows a hypothetical verification method that makes a basic request to the `incomingPayment` URL and returns the results. For simplicity, it has no logic for authenticating the request. + +:::note[Authentication] +In many cases, requests to the `incomingPayment` URL must be authenticated because you're fetching sensitive details. The payment account owner should request these specifics from their wallet provider. +::: + +```js +/** @type {MonetizationEvent} event */ +async function verifyPayment(event) { + // Legacy receivers don't support returning incoming payment URLs + if (!event.incomingPayment) { + throw new Error('No incoming payment URL') + } + + const response = await fetch(event.incomingPayment, { + method: 'GET', + credentials: 'same-origin', + mode: 'same-origin', + cache: 'no-cache', + headers: { + 'Content-Type': 'application/json', + }, + }) + + if (response.ok) { + const { receivedAmount } = JSON.parse(response.json()) + const { amount, assetCode, assetScale } = receivedAmount + console.log(`Received ${assetCode}${amount / Math.pow(10, assetScale)}.`) + } +} +``` + + + +// #### incomingPayment browser compatibility + + + + + +#### Specifications + + + +### paymentPointer + +The `paymentPointer` property returns the URL that represents the payment pointer or wallet address that the payment was sent to. In most cases, the value will be the same as the `href` URL in the monetization ``. + +:::note[Property name] +Earlier versions of the Web Monetization specification only used Interledger's Simple Payment Setup Protocol (SPSP), which calls for payment pointers. This is why the property was named `paymentPointer`. + +As of v3, both payment pointers and Open Payments wallet addresses are returned by this property. GitHub issue 439 is created for discussing a change to the property name. +::: + +#### Example using `paymentPointer` + +```js + + +``` + + + +// #### paymentPointer browser compatibility + + + + + +#### Specifications + + + +## Example use cases + +### amountSent + +Program your website to show a thank you message to your site visitor when the `amountSent` returns a non-zero amount. In this use case, you're only checking that an amount -- any amount -- was sent. + +### incomingPayment + +Program your website to remove ads or provide access to exclusive content to your site visitor after receiving a specific amount. + +In this use case, you'll query the URL returned by `incomingPayment` to track the `receivedAmount`. If appropriate, you can ensure the amount is increasing after each `monetization` event to verify that a new payment was received. + +### paymentPointer + +This section describes two use cases: one for vanity payment addresses and one for probabilistic revenue sharing. + +#### Vanity payment address + +Let's say your payment pointer or wallet address is: + +``` +https://wallet.example.com/GK9D420BL42M +``` + +That's hard to remember. Fortunately, your wallet provider offers vanity addresses which act as aliases. Your vanity address is: + +``` +https://wallet.example.com/bob +``` + +You add the vanity address as the `href` value in the monetization ``. Then, you set up an event listener for `paymentPointer`. The value that's returned will be: + +``` +https://wallet.example.com/GK9D420BL42M +``` + +#### Probabilistic revenue sharing + +For this use case, let's assume you are familiar with [probabilistic revenue sharing](/tutorials/revenue-sharing), which is iteself an advanced use case. + +When you use our Probabilistic Revshare Generator, you enter multiple payment pointers and/or wallet addresses and assign each one a weight. When finished, the generator creates a unique URL. + +For example, after entering five wallet addresses and weights, the generator creates: + +```http wrap +https://webmonetization.org/api/revshare/pay/W1siJGFsaWNlLndhbGxldC5jb20iLDUwLCIkYWxpY2" +``` + +You add the generated URL as the `href` value in the monetization ``. Then, you set up an event listener for `paymentPointer`. The value that's returned will be which one of the five wallet addresses that the payment was sent to. \ No newline at end of file diff --git a/src/content/docs/developers/get-started.mdx b/src/content/docs/developers/get-started.mdx new file mode 100644 index 00000000..0aec83df --- /dev/null +++ b/src/content/docs/developers/get-started.mdx @@ -0,0 +1,62 @@ +--- +title: Get started +--- + +import { LinkOut } from '@interledger/docs-design-system' +import { Steps } from '@astrojs/starlight/components'; +import Wallet from "/src/partials/wallet-prereq.mdx"; + +## Prerequisites + + + +## Step 1 - Get your payment URL + +### Payment pointer + +If you have a payment pointer that starts with `$`, visit paymentpointers.org. Enter your payment pointer into the _Payment Pointer_ field. Take note of the URL that automatically generates in the adjacent field. This is your payment URL. You'll need it in the next step. + +```http title="Example" +$wallet.example.com/alice +``` + +### Wallet address + +If you have a wallet address that starts with `https://`, then you have your payment URL. Proceed to the next step. + +```http title="Example" +https://wallet.example.com/alice +``` + + + +## Step 2 - Web monetize your page + + + +1. Create your Web Monetization link tag using the format below. Add your payment URL as the `href` value. + + ```http + + ``` + + For example: + + ```http + + ``` + +2. Add the `` to the `` section of your page. + ```html title="Example" wrap + + + My Site + + + + ``` + + +Congratulations! Your page is now web monetized. Add the `` to any page of your site you want to monetize. + +For more information, visit the [Monetization link element](/developers/link-element) page. \ No newline at end of file diff --git a/src/content/docs/developers/interfaces.mdx b/src/content/docs/developers/interfaces.mdx new file mode 100644 index 00000000..b3d53b29 --- /dev/null +++ b/src/content/docs/developers/interfaces.mdx @@ -0,0 +1,65 @@ +--- +title: Monetization interfaces +--- + +import { LinkOut, Hidden } from "@interledger/docs-design-system"; +import { Badge } from '@astrojs/starlight/components'; +import Specification from '/src/components/docs/Specification.astro' +import BrowserCompat from '/src/components/docs/BrowserCompat.astro' +import data from '/src/data/browser-compat-data/monetizationevent.json' + + + +The Web Monetization API consists of two interfaces: `MonetizationEvent` and `MonetizationCurrencyAmount`. + +## `MonetizationEvent` + +The `MonetizationEvent` interface describes the [`monetization`](/developers/events) event that fires when an outgoing payment is successfully created. + + + + + + + + + + + + + + +
BubblesYes
CancelableNo
Event handler property`onmonetization`
+ +By listening for `monetization` events, you can use the information returned in the following properties to verify payments. + +* [amountSent](/developers/events#amountsent) - The currency amount and code of the sent payment. Contains two variables, `value` and `currency`, constructed by the [`MonetizationCurrencyAmount`](#monetizationcurrencyamount) interface. +* [incomingPayment](/developers/events#incomingpayment) - A URL you can use to determine if a payment was received and, if so, the amount received. +* [paymentPointer](/developers/events#paymentpointer) - The URL of the payment pointer or wallet address that the incoming payment request was sent to. + +Visit the [Monetization Events](/developers/events) page for more information. + + + +// ## Browser compatibility + + + + + +### Specifications + + + +## `MonetizationCurrencyAmount` + +The `MonetizationCurrencyAmount` interface is used to populate the `value` and `currency` variables contained within the `MonetizationEvent amountSent` property. + +* Value - The amount. A valid decimal monetary value containing the amount that was sent. +* Currency - The currency code. An ISO 4217-compliant currency code, when possible, that represents the currency that was sent, such as USD or GBP. + +The `MonetizationCurrencyAmount` interface is modeled on the Payment Request API’s `PaymentCurrencyAmount` dictionary. + +### Specifications + + \ No newline at end of file diff --git a/src/content/docs/docs/resources/libraries.mdx b/src/content/docs/developers/libraries.mdx similarity index 100% rename from src/content/docs/docs/resources/libraries.mdx rename to src/content/docs/developers/libraries.mdx diff --git a/src/content/docs/developers/link-element.mdx b/src/content/docs/developers/link-element.mdx new file mode 100644 index 00000000..9435fc85 --- /dev/null +++ b/src/content/docs/developers/link-element.mdx @@ -0,0 +1,136 @@ +--- +title: Monetization element +tableOfContents: + maxHeadingLevel: 4 +--- + +import { LinkOut, Hidden } from "@interledger/docs-design-system"; +import Specification from '/src/components/docs/Specification.astro' +import BrowserCompat from '/src/components/docs/BrowserCompat.astro' +import data from '/src/data/browser-compat-data/link.json' +import { Steps, Tabs, TabItem, Badge } from '@astrojs/starlight/components'; + + + +From a creator/developer perspective, the monetization `` element is one of the two key pieces to web monetizing a page. The second piece is a wallet address/payment pointer. + +## Prerequisites + +To web monetize an HTML page, such as a web page: +* You must have an account with a [compatible wallet provider](/wallets) +* You must have the wallet address, or payment pointer in URL format, from your wallet provider +* Your document must be served over HTTPS + +## Monetization `` element + +The monetization `` element is what indicates your HTML page supports Web Monetization. + +### Syntax + +```html + +``` + +* The `rel` attribute is always `monetization` +* The `href` attribute equals your wallet address or your payment pointer in URL format + +For example: + +```html + +``` + +### Placement + +A monetization `` is `body-ok`, meaning it's allowed in your page's `` and/or ``. + +### Multiple monetization links + +An HTML page can contain multiple monetization `` elements; however, your site visitor’s [Web Monetization agent](#web-monetization-agent) could be designed to handle multiple links in a particular way. For example, an agent might: +* Split payments evenly between all links +* Split payments between the first few links it finds +* Send the amount only to the first link it finds and ignore all others + +:::tip[Recommendation] +The Web Monetization agent built into the Interledger Foundation's extension splits payments evenly between all links. We recommend other extension developers follow this approach. +::: + +### Iframes + +Nested browsing contexts (iframes) can contain monetization `` elements; however, your site visitor's [Web Monetization agent](#web-monetization-agent) determines how iframes are monetized. A few examples of how a Web Monetization agent can monetize iframes include: + +* Splitting payments evenly between all monetization links within both the parent and the iframe +* Splitting payments evenly between all monetization links in the parent and the first monetization link it finds in the iframe's ``, while ignoring any other monetization links in the iframe + :::note + This is the approach used in the Interledger Foundation's extension. + ::: +* Sending payments to the first monetization link it finds in the parent browsing context and ignoring all other monetization links in the parent and the iframe + +### Audio, video, and picture elements + +The following HTML elements can be web monetized by adding the `` element between the open and close tags. + + + + ```html + + ``` + + + ```html + + ``` + + + ```html + + + + ``` + + + +## How it works + +### HTMLLinkElement + +The HTML DOM API's `HTMLLinkElement` interface defines how the `` element functions. The `` element is what allows you to link your HTML page to a resource. + +The two most recognizable `HTMLLinkElement` properties are `href` and `rel`. The `href` property defines the URL to the resource. The `rel` property indicates the type of link, or relationship, the resource has to the current page. + +### rel="monetization" link type + +Browsers already know how to interpret certain `rel` values because of web standards. One such standard is `stylesheet`. When a browser loads a page that contains ``, the browser automatically knows to import a style sheet from the given URL. + +The `monetization` link type, however, is not yet a standard. Major web browsers don't automatically know what to do when encountering this link type in a page. Until `monetization` becomes a standard, browsers must rely on a Web Monetization agent. + +### Web Monetization agent + +A Web Monetization agent is a non-user facing component of the Interledger Foundation's extension. + +The purpose of the Web Monetization agent is to recognize when a page is web monetized and automatically carry out certain tasks. These tasks include: + +* Extending the HTML DOM API so that `monetization` is a valid link type +* Processing the monetization link or links within an HTML page +* Instrumenting payments by calling the [Open Payments APIs](/developers/about-receiving#a-deeper-dive-into-payments), which are APIs implemented by wallet providers +* Firing [`monetization`](/developers/events) events after an outgoing payment is created +* Processing `monetization` events sent to the browser window via the `onmonetization` event handler +* Enabling the CSP [`monetization-src`](/developers/csp) and Permissions Policy [`monetization`](/developers/permissions-policy) directives + +Until Web Monetization agents are natively built in to web browsers, an agent must be added to browsers in some other way. That's why the agent is included as part of the Interledger Foundation's extension. + + + +// ## Browser compatibility + + + + + +## Specifications + + \ No newline at end of file diff --git a/src/content/docs/developers/overview.mdx b/src/content/docs/developers/overview.mdx new file mode 100644 index 00000000..1c22630b --- /dev/null +++ b/src/content/docs/developers/overview.mdx @@ -0,0 +1,60 @@ +--- +title: Overview +tableOfContents: + maxHeadingLevel: 2 +--- + +import { LinkOut } from '@interledger/docs-design-system' + +Web Monetization is a light-weight and non-intrusive way for you to monetize your content while preserving the privacy of your supporters. You can use Web Monetization to replace or complement your existing revenue models. All it takes is a [wallet address or payment pointer](/wallets) and a [single line of code](/developers/link-element). + +## Benefits + +### You choose your wallet provider. + +Other solutions may require both you and your supporters to use the same application, platform, or service provider. Web Monetization doesn't have this limitation. As long as both you and your supporters' chosen wallet providers are compatible with Web Monetization, they can send you a payment. + +### Complement existing revenue models. + +* **Reach a wider paying audience.** Some offerings, such as subscriptions, can result in missed revenue opportunities due to concerns about price, renewal frequencies, accepted currencies, and fees. Plus, some supporters simply don't want to create and keep track of another account. Web Monetization can supplement your current offerings by allowing your supporters to pay how, when, and what they want without creating site-by-site accounts. +* **Regain lost ad revenue.** If your site is even partially sustained by ad revenue, then every impression counts. Many ad networks pay per thousand impressions, pay different amounts based on the country your supporter is in, and may require you to earn a minimum amount before you can access your revenue. While ad blockers can improve user experience, they also make earning ad revenue more difficult. Web Monetization can help make up the difference. + +### Use in place of other revenue models. + +Certain recurring revenue models, like subscriptions, can have overhead costs beyond the time, effort, and money required for set up. For example, you may be required to provide customer support, manage chargebacks, and administer records through various Content Management System (CMS) tools. With Web Monetization, payments are anonymous. There are no customer records to maintain. You aren't liable for chargebacks or refunds because your supporters are in control of if, when, and how much they pay. + +### Receive payments to your wallet in real time. + +Some services require you to wait until a given day of the month or until you reach a minimum balance before paying out. Should a platform temporarily or permanently ban you, the platform could choose to keep your balance permanently. Web Monetization removes this issue. When a supporter sends you a payment, the payment is sent directly from their wallet to your wallet. Note that your wallet provider may require you reach a specific balance before you can transfer out your funds. Be sure to check with your wallet provider. + +### Receive payments in your preferred currency. + +Some solutions require both you and your supporters to use the same currency. Web Monetization allows you to receive payments in a currency of your choosing, while your supporters can send payments in their preferred currency. + +### The exclusivity of your content is in your hands. + +Web Monetization allows a supporter to send a payment to a web monetized page. How you want your page to respond is up to you. By listening for the `monetization` event, you can verify the amount and currency of a payment, then programmatically show or hide content or have your page respond in some other way. + +## Constraints + +### The network of Web Monetization-enabled wallet providers is nascent, but growing. + +Sending and receiving payments via Web Monetization requires the sender and the recipient to have an account with a Web Monetization-enabled wallet provider. + +In general, wallet providers are regulated entities within the countries they operate. Obtaining the proper licensing and registration to become a wallet provider can be an expensive, complex, and time consuming process. Also, there are technical integrations required to support Web Monetization. All of this means a compatible wallet provider may not yet be available in your area. + +### Web Monetization does not track or collect personally identifiable information. + +Web Monetization is designed to preserve the privacy of your supporters. While you can use `monetization` events to determine sent and received amounts, Web Monetization does not track your supporters' names, wallet addresses/payment pointers, IP addresses, or other information that could enable you to correlate a payment with a specific individual or determine their browsing behavior. + +### Web Monetization does not allow you to pull payments from your supporters' accounts. + +One key differentiator of Web Monetization is that your supporters are in control of if, when, and how much they pay. Web Monetization does not allow you to pull a payment on behalf of your supporters. When you web monetize a page, you are embedding your wallet address/payment pointer so that your supporters' extension knows you're able to accept Web Monetization payments. It's up to your supporters to decide whether to pay. + +### Coding your page to respond after receiving a specific amount will take some work. + +Web Monetization is designed to allow supporters to control when to pay, how much to pay, and how often to pay. If you want to, for example, unlock exclusive content after receiving a specific amount, you'll need to add your own code to make that happen. + +### There might be fees. + +Web Monetization does not charge or collect fees; however, your digital wallet provider might. For example, you may be charged a currency conversion fee if you are sent a payment in USD, but receive your payments in GBP. Be sure to consider supported currencies and fees when choosing a wallet provider that's best for you. \ No newline at end of file diff --git a/src/content/docs/developers/permissions-policy.mdx b/src/content/docs/developers/permissions-policy.mdx new file mode 100644 index 00000000..7067e206 --- /dev/null +++ b/src/content/docs/developers/permissions-policy.mdx @@ -0,0 +1,55 @@ +--- +title: Permissions Policy +next: + link: /wallets/ + label: Compatible digital wallets +--- + +import { LinkOut, Hidden } from "@interledger/docs-design-system"; +import Specification from '/src/components/docs/Specification.astro' +import BrowserCompat from '/src/components/docs/BrowserCompat.astro' +import data from '/src/data/browser-compat-data/permissionpolicy.json' + +A Permissions Policy provides a mechanism for you to explicitly declare what functionality can and cannot be used on your website. + +The `monetization` policy directive allows you to enable and disable the Web Monetization API within a document and within any of the document's nested browsing contexts (iframes). + +## Syntax + +```http +Permissions-Policy: monetization=(allowlist) +``` + +Where `(allowlist)` is a list of origins permitted to use the Web Monetization API. + +The default allowlist is `self`. + +```http +Permissions-Policy: monetization=(self) +``` + +:::note +The `allow` attribute determines the container policy that will be used when the permissions policy for a `Document` in the iframe's content navigable is initialized. Adding or removing the `monetization` attribute has no effect on an already-loaded `Document`. +::: + +## Example + +You want to allow Web Monetization on your website and in all nested browsing contexts (iframes) in the same origin. + +You configure your web server to return the `Permissions-Policy` HTTP header on each of your pages. + +```http +Permissions-Policy: monetization=(self) +``` + + + +// ## Browser compatibility + + + + + +## Specifications + + \ No newline at end of file diff --git a/src/content/docs/docs.mdx b/src/content/docs/docs.mdx index 5d58896c..4b8a5bf3 100644 --- a/src/content/docs/docs.mdx +++ b/src/content/docs/docs.mdx @@ -1,68 +1,6 @@ --- title: Intro to Web Monetization +next: Content consumer overview --- -import { LargeImg, LinkOut, Tooltip } from '@interledger/docs-design-system' - -As a website user, it’s common to encounter a headline that captures your attention, only to find the article locked behind a paywall. How often do you pay for a subscription to read a single article? What if you could pay a fraction of the subscription price to access the article and avoid the subscription altogether? - -As a website owner, you anticipate losing a few visitors due to paywalled content. Even if you offer weekly subscriptions, the price may be more than a visitor is willing to pay. But instead of subscriptions, what if you could generate revenue per piece of content, or even based on the amount of time a visitor spends on the content? - -These are just two ways in which Web Monetization can make payments easier. With Web Monetization, website visitors can send payments directly to websites using a browser extension or any browser that natively implements the Web Monetization specification. - -## Current payments infrastructure - -It can take a bit of work to implement payments on a website. If your site already accepts payments, you may be familiar with what it takes to accept multiple payment methods and currencies. The process typically looks something like this: - -1. You sign up with one or more payment providers, depending on the payment methods and currencies you want to accept. -2. You integrate their service(s) into your site. For example, you may create and host your own payment form that is connected to the service, or you use a form supplied by the payment provider. -3. Depending on the payment method your visitor wants to use, they may need to create an account with you or the payment provider. -4. Your visitor fills out the payment form. Ideally, they remain on your site to complete the transaction but may be required to access the provider’s site instead. - -## Introducing Web Monetization - -Web Monetization aims to simplify the payment experience for you and your website visitors. It’s an open technology that allows websites to automatically receive payments from visitors. - -It’s a proposed standard that allows your visitors to pay an amount of their choosing with little to no user interaction. It enables a website to automatically signal to web browsers that it can accept payments. With this signal, web browsers facilitate a payment from the visitor to the site by: - -- Obtaining authorization to initiate the payment. -- Gathering details and issuing instructions to start the money movement process. -- Creating a payment session. -- Communicating payment events to the site so the site can optionally respond. For example, the site could [remove ads](/docs/guides/remove-ads) or provide [access to exclusive content](/docs/guides/provide-exclusive-content) for paying visitors. - -### High-level flow - -The following image shows the Web Monetization flow at a high level. Some steps have been combined or excluded. A more in-depth explanation is provided in the [Web Monetization flow](/docs/intro/web-monetization-flow) page. - - - -1. Bob visits a [web monetized page](/docs/guides/monetize-page). The monetization `` element is how the website signals its acceptance of payments to the browser. -2. Bob’s browser, either natively or via a browser extension, parses the `` element to get the wallet address for Alice, the site owner. -3. Bob’s browser/extension sends requests to Alice’s wallet address to obtain authorization and instructions for sending a payment. -4. With authorization granted and payment instructions received, the browser/extension sends requests to Bob’s wallet address to initiate the outgoing payment. -5. The Web Monetization flow ends. Payment processing, currency exchange, and settlement occurs between the two accounts via a common payment rail. - -### Specifying payment amounts and currencies - -Web Monetization doesn’t allow a website to specify a payment amount or currency. It only allows the site to tell the browser it can accept payments. - -With the help of a Web Monetization provider, your visitor decides whether to make a payment, how much and how often to pay, and in which currency. Your Web Monetization receiver can then exchange the currency of incoming payments based on what you want to receive. This flexibility allows you and your visitors to choose the monetization methods that best suit you both. - -### Processing and settling payments - -Web Monetization’s role is to help coordinate payments. It does not process or settle payments. - -At each end of Web Monetization is an account that supports Open Payments. The Web Monetization provider supplies your visitor with a funded sending account. In some cases, the visitor could even act as their own Web Monetization provider. The Web Monetization receiver supplies you with a receiving account. - -Web Monetization communicates with the sending and receiving accounts to obtain the necessary authorizations and instructions for a payment to be sent and received. Payment processing and settlement then occurs between the sending and receiving accounts, outside of the Web Monetization flow. - -## Prior specification version - -A new version of the Web Monetization specification was published in June 2023. Users of the previous version should be aware of the following: - -- The previous version only used Interledger's Simple Payment Setup Protocol (SPSP). The new version uses Open Payments. -- The `` element is deprecated in favor of the [``](/docs/references/html-link-rel-monetization/) element. -- The `` element does not support the shorthand form of a payment pointer (e.g., `$wallet.example/alice`). You must use the endpoint URL that the payment pointer resolves to (e.g., `https://wallet.example/alice`). If you need help converting a payment pointer from shorthand to its equivalent URL, enter your payment pointer into the input field on paymentpointers.org. In most cases, you can simply replace the `$` with `https://`. +

Need help with this page

\ No newline at end of file diff --git a/src/content/docs/docs/guides/add-a-streaming-payments-counter.mdx b/src/content/docs/docs/guides/add-a-streaming-payments-counter.mdx deleted file mode 100644 index f9ca2847..00000000 --- a/src/content/docs/docs/guides/add-a-streaming-payments-counter.mdx +++ /dev/null @@ -1,102 +0,0 @@ ---- -title: Add a streaming payments counter ---- - -import NoPay from '/src/partials/glitchNoPay.mdx' -import ViewAs from '/src/partials/glitchViewAs.mdx' - -Web Monetization allows you to know exactly how much a web monetized visitor has sent to you. In cases where a web monetized visitor has chosen to pay you in time-based increments (such as per second or per minute), a streaming payments counter can be a helpful tool to show your visitor how much they've sent. The amount updates in real time as more payments come in during the session. - -## Example - -The example below illustrates how to use the `monetization` event to show a web monetized visitor how much they've sent you during their current browsing session. - -```html - - - - - - - - -

- Thanks to you, I've made - 0.00 USD - -

- -``` - -## How it works - -First, we'll bind the `monetization` event if the visitor is web monetized (`window.MonetizationEvent` is defined). - -The `monetization` event contains details about the payments that occur. The `amountSent` attribute of the event returns the amount (`value`) and currency code of the sent payment. A currency code is a three-letter code, like USD, EUR, or GBP. - -```js - if (window.MonetizationEvent) { - const link = document.querySelector('link[rel="monetization"]'); - - link.addEventListener("monetization", (event) => { - const { - amountSent: { value, currency }, - } = event; - console.log(`Browser sent ${currency} ${value}.`); -``` - -The `currency` is set on the first payment and doesn't change. Remember, it represents the sent payment's currency, which may be different from the currency you receive (depending on how your receiving account is set up with your Web Monetization receiver). - -```js -// initialize currency on first progress event -if (total === 0) { - document.getElementById('currency').innerText = currency -} -``` - -The amount in `value` is an integer, which we add to our total. - -```js -total += Number(value) -``` - -Finally, we update the text on the page with the new total. We want the total to be in a readable format, so we convert the number to a string and round it to a specified number of decimals, which is `9` in this example. This formatted version of the amount gets written to the `total` span on the page. - -```js -document.getElementById('total').innerText = total.toFixed(9) -``` - -## Interactive example - -This example simulates showing a visitor how much they are sending you based off how long they remain on your web monetized page. - - - - - - diff --git a/src/content/docs/docs/guides/monetize-page.mdx b/src/content/docs/docs/guides/monetize-page.mdx deleted file mode 100644 index 53eacd2e..00000000 --- a/src/content/docs/docs/guides/monetize-page.mdx +++ /dev/null @@ -1,37 +0,0 @@ ---- -title: Add Web Monetization to a page ---- - -import { LinkOut } from '@interledger/docs-design-system' - -This page provides basic instructions for adding Web Monetization to a web page. If you're new to web monetizing content, this guide is a great place to start. - -## Prerequisites - -- Web monetized pages must be secure and served over HTTPS. -- You must have the wallet address assigned to you by your Web Monetization-enabled [wallet provider](/docs/resources/op-wallets). - -## Monetize a page - -To add Web Monetization to a page, add the monetization `` element to the page's ``. - -The element’s `rel` value is always `monetization`. The `href` value is your wallet address. If your wallet address is a payment pointer, it must be entered in URL format. - -For example: - -```html - - - My Site - - - -``` - -### Multiple monetization links - -A single HTML document can contain multiple monetization `` elements; however, it's up to each Web Monetization provider to decide how they want to handle this scenario. We recommend Web Monetization providers split the payments evenly between the links. - -## Next steps - -Now that you've web monetized your page, you can choose to [remove ads](/docs/guides/remove-ads), [provide exclusive content](/docs/guides/provide-exclusive-content), or respond to [`monetization` events](/docs/references/monetizationevent) in some other way when a web monetized visitor accesses your page. diff --git a/src/content/docs/docs/guides/provide-exclusive-content.mdx b/src/content/docs/docs/guides/provide-exclusive-content.mdx deleted file mode 100644 index 8bb0beb8..00000000 --- a/src/content/docs/docs/guides/provide-exclusive-content.mdx +++ /dev/null @@ -1,191 +0,0 @@ ---- -title: Provide exclusive content ---- - -import NoPay from '/src/partials/glitchNoPay.mdx' -import ViewAs from '/src/partials/glitchViewAs.mdx' - -Give your paying visitors access to exclusive content when the `monetization` event fires. Since the `monetization` event only fires when an outgoing payment request is successfully created, your exclusive content only appears to web monetized visitors. - -## Example 1 - Simple - -The example below illustrates a simple way to show exclusive content to web monetized visitors. - -```html - - - - - - - - - - -

Content will appear below here if you are Web monetized.

-
- - -``` - -### How it works - -First, we want to check whether Web Monetization is supported. We do this by calling `supports()` on a link element's `relList` and passing `"monetization"` as a parameter. If this check doesn't exist, we can't listen for the `monetization` event to tell us when Web Monetization initializes. - -```jsx -const link = document.querySelector('link[rel="monetization"]') -if (link.relList.supports('monetization')) { -``` - -Next, we add an event listener to the `link` element. The `monetization` event is emitted when Web Monetization initializes. - -```jsx -link.addEventListener('monetization', (ev) => { -``` - -Finally, we select the exclusive content element we want to make available to web monetized visitors. Since we defined a CSS class to hide the content, removing the class will make the content appear. - -```js -document.getElementById('exclusive').classList.remove('hidden') -``` - -### Interactive example - -This example simulates hiding and showing exclusive content based on a visitor's Web Monetization state. - - - - - - - -## Example 2 - Complex - -In reality, you'll probably want your site to do more than simply show and hide content. In this example, we illustrate how to: - -- Show web monetized visitors an indicator while they wait for Web Monetization to initialize -- Tell non-web monetized visitors that there's exclusive content they're missing out on - -The example below covers three states for showing: - -- A call-to-action to non-web monetized visitors -- A loading message to web monetized visitors -- Exclusive content to web monetized visitors - -```html - - - - - - - - - - - - - - -``` - -### How it works - -There are three functions to activate the three states: - -- `showLoading` displays the loader -- `showCTA` displays the call-to-action to non-web monetized users -- `showExclusiveContent` displays the exclusive content to web monetized users - -These functions work just like the [simple example](#example-1---simple) where we turn the `hidden` class on/off for our `div`s. - -When the page loads, we'll check whether the visitor is web monetized. - -```js -window.addEventListener('load', () => { - if (!window.MonetizationEvent) { -``` - -The loader will appear to web monetized visitors and the CTA will appear to everyone else. - -```js -if (!window.MonetizationEvent) { - showCTA() -} else { - showLoading() -} -``` - -If the visitor is web monetized, we'll listen for the `monetization` event that occurs when an outgoing payment request is successfully created. When this event fires, the exclusive content will appear and the other `div`s will be hidden. - -```js -if (window.MonetizationEvent) { - const link = document.querySelector('link[rel="monetization"]') - link.addEventListener('monetization', (ev) => { - showExclusiveContent() -``` - -### Interactive example - -This example simulates hiding and showing exclusive content based on a visitor's Web Monetization state. Web monetized visitors will see exclusive content while non-web monetized users will not. Conversely, non-web monetized users will see the message, "Please install a Web Monetization extension to support me!". - - - - - - diff --git a/src/content/docs/docs/guides/remove-ads.mdx b/src/content/docs/docs/guides/remove-ads.mdx deleted file mode 100644 index 62020cf4..00000000 --- a/src/content/docs/docs/guides/remove-ads.mdx +++ /dev/null @@ -1,128 +0,0 @@ ---- -title: Remove ads ---- - -import NoPay from '/src/partials/glitchNoPay.mdx' -import ViewAs from '/src/partials/glitchViewAs.mdx' - -Give your web monetized visitors an ad-free experience by hiding ads when the `monetization` event fires. Since the `monetization` event only fires when an outgoing payment request is successfully created, your ads will continue to appear to non-web monetized visitors. - -## Before you begin - -For visitors without Web Monetization, ads will appear as soon as the page loads. - -For visitors with Web Monetization in their browser, there's a three-second grace period before ads are shown. This gives Web Monetization a chance to initialize and prevent ads from briefly appearing to paying visitors. - -**If Web Monetization...** - -- Initializes within the grace period, then ads are removed -- Fails to initialize within the grace period, then ads are shown -- Initializes any time after the grace period, then ads are removed - -## Example - -The example below shows how to remove ads from web monetized visitors. - -```html - - - - - - - - - - Here's where your site's content will go! - -``` - -## How it works - -Let's start with the code for showing an ad. - -```jsx -const adCode = - '
Ad! Buy product A! Ad!
' -function showAds() { - document.getElementById('ad').innerHTML = adCode -} -``` - -We want to bind the `monetization` event to its respective event handler if the visitor is web monetized. This prevents the ad from loading on the page once Web Monetization initializes. Assuming it initializes within the grace period, the ad isn't added to the page at all. This means any related images and trackers aren't loaded either. - -The `hasPaid` variable in the timer is for when/if Web Monetization starts after the grace period. - -```jsx -let hasPaid = false -if (window.MonetizationEvent) { - const link = document.querySelector('link[rel="monetization"]') - link.addEventListener('monetization', () => { - hasPaid = true - removeAds() - }) -} -``` - -As soon as the page loads, the ad will immediately appear to any visitor who isn't web monetized. This is handled via `!window.MonetizationEvent`, shown below. - -If the visitor has Web Monetization in their browser, then the `monetization` event must fire within 3 seconds (3000ms) to indicate that Web Monetization has initialized. If it doesn't initialize by the timeout, the ad is shown to the visitor. - -```jsx -window.addEventListener('load', () => { - if (!window.MonetizationEvent) { - showAds() - } else { - setTimeout(() => { - if (!hasPaid) { - showAds() - } - }, 3000) - } -}) -``` - -## Interactive example - -This example simulates showing and hiding an ad based on a visitor's Web Monetization state. - - - - - - diff --git a/src/content/docs/docs/guides/set-up-probabilistic-revenue-sharing.mdx b/src/content/docs/docs/guides/set-up-probabilistic-revenue-sharing.mdx deleted file mode 100644 index 3765131c..00000000 --- a/src/content/docs/docs/guides/set-up-probabilistic-revenue-sharing.mdx +++ /dev/null @@ -1,120 +0,0 @@ ---- -title: Set up probabilistic revenue sharing ---- - -import NoPay from '/src/partials/glitchNoPay.mdx' - -How do you share a portion of a web monetized page's earnings when a monetization `` element only supports one wallet address as its `href` value? - -One way is through probabilistic revenue sharing. Probabilistic revenue sharing works by choosing from a list of predefined wallet addresses each time a web monetized visitor loads the page. Payments are sent to the chosen wallet address until the visitor reloads or closes the page. - -The chance of a wallet address being chosen is based on its assigned weight. For example, if Alice's wallet address has a weight of 50 (out of 100), then her wallet address has a 50% chance of being chosen. The laws of probability state that Alice's share of the page's total revenue will approach 50% as more web monetized visitors access the page. - -## Example - -This example shows how to use probabilistic revenue sharing by including a script on your web monetized page. It also uses payment pointers, but you can use any Open Payments-enabled wallet addresses. - -:::note -If you don't want to include a script on your page, you can use our [Probabilistic Revshare Generator](/prob-revshare). After entering your payment pointers and/or other Open Payments-enabled wallet addresses, along with weights, the generator will provide you with a monetization `` element that contains a unique `href` URL hosted on `https://webmonetization.org/prob-revshare/`. -::: - -The example below shows a list of weighted [payment pointers](/docs/resources/glossary#payment-pointer). The easiest way to establish weight is to assign values that add up to 100. - -```html - - - -``` - -### How it works - -First, we list the payment pointers and assign each one a weight. - -If the combined weights equal 100, then each weight represents the percentage at which each payment pointer will be chosen. For example, `$wallet.example.com/connie` has a 9.5% chance of being chosen, resulting in Connie's share approaching 9.5% of the page's total revenue as more web monetized visitors access the site. - -```js -const pointers = { - '$wallet.example.com/alice': 50, - '$wallet.example.com/bob': 40, - '$wallet.example.com/connie': 9.5, - '$wallet.example.com/dave': 0.5, -} -``` - -:::info -Since this method bypasses the need to include a monetization `` element, you can choose to use a payment pointer's shorthand form (e.g., `$wallet.example.com/alice`) rather than the endpoint URL that the payment pointer resolves to (e.g. `https://wallet.example.com/alice`). -::: - -Next, we define the function to cause payment pointers to be chosen based on weight. - -```jsx -function pickPointer() { - const sum = Object.values(pointers).reduce((sum, weight) => sum + weight, 0) - let choice = Math.random() * sum - - for (const pointer in pointers) { - const weight = pointers[pointer] - if ((choice -= weight) <= 0) { - return pointer - } - } -} -``` - -Finally, we add the code that dynamically inserts the randomly chosen payment pointer into the page on each load/refresh. - -```jsx -window.addEventListener('load', () => { - const monetizationTag = document.createElement('link') - monetizationTag.rel = 'monetization' - monetizationTag.href = pickPointer() - - document.head.appendChild(monetizationTag) -}) -``` - -### Interactive example - -This example shows how the random choices will approach the correct percentages over enough tries. You can customize the number of times to randomly choose a pointer and it will show you the results. - - - -If you see the source files instead of the example, click **View App** in the bottom right. - - diff --git a/src/content/docs/docs/intro/receiving-payments.mdx b/src/content/docs/docs/intro/receiving-payments.mdx deleted file mode 100644 index b8ff48f5..00000000 --- a/src/content/docs/docs/intro/receiving-payments.mdx +++ /dev/null @@ -1,58 +0,0 @@ ---- -title: Receiving payments ---- - -import { LinkOut } from '@interledger/docs-design-system' - -Two key components of receiving a Web Monetization payment are Web Monetization receivers and Open Payments-enabled accounts. - -:::note -This page describes the role of Web Monetization receivers within the Web Monetization ecosystem. It does not explain how to become a receiver. -::: - -## Web Monetization receivers - -A Web Monetization receiver is an entity that provides an Open Payments-enabled account into which payments can be received. Individuals interested in receiving Web Monetization payments can establish a relationship with a Web Monetization receiver of their choice by signing up for an account. - -We anticipate most Web Monetization receivers to offer some form of digital wallet to their users. Many digital wallet providers, not just Web Monetization receivers, are often required to verify their users’ identities before allowing funds to be withdrawn. - -## Open Payments and wallet addresses - -Open Payments enables open and interoperable payments between Web Monetization providers and Web Monetization receivers. As such, accounts supplied by both Web Monetization providers and Web Monetization receivers must implement the Open Payments (OP) specification. - -The OP specification defines standards for **_access_** to accounts. When granted access, applications and other entities can integrate payments into their feature sets by connecting to their users’ accounts. The ability to then **_execute_** payments between OP-enabled accounts relies on the availability of a common payment rail between the accounts. - -### Wallet addresses - -Access to an OP-enabled account, whether for sending or receiving, always starts with a wallet address. In this context, a wallet address is a unique URL that identifies an OP account and provides an entry point for the Open Payments API. - -When an individual establishes an account with a Web Monetization receiver, the receiver assigns the account one or more wallet addresses. Wallet addresses allow certain account details to be safely shared with third-parties. Third-parties use the details to initiate payments to or from the account. A Web Monetization agent is an example of a third-party. - -A wallet address is required to web monetize a page and must be added as the `href` value within the monetization `` element. - -For example: - -```html - -``` - -The Web Monetization agent uses the wallet address to begin the money movement process. - -## Receiving a payment - -When an individual visits a web monetized page, their Web Monetization agent detects the monetization `` element and associated wallet address. The Web Monetization agent sends a request to the wallet address, which is the beginning of a series of API calls needed to: - -1. Get the details about the underlying receiving account -2. Receive permission to send a payment to the account -3. Create a monetization session within the site visitor's browser tab/window -4. Create the outgoing payment request - -When the payment is successful, the funds are deducted from the Web Monetization provider’s account and deposited into the Web Monetization receiver’s account. - -For more information, visit the [Web Monetization flow](/docs/intro/web-monetization-flow) page. - -## Specifying a payment amount - -Web Monetization does not enable a site to specify the amount it wants to receive. The amount, frequency, and other payment parameters are controlled by the web monetized visitor, through their relationship with their Web Monetization provider. - -If a site should specify a price, then integration with the W3C’s Payment Request API may be a better alternative to Web Monetization. The Payment Request API allows sites to ask to be paid a certain amount, then the browser (typically with the user’s approval) pays that amount. diff --git a/src/content/docs/docs/intro/sending-payments.mdx b/src/content/docs/docs/intro/sending-payments.mdx deleted file mode 100644 index 126bfc3a..00000000 --- a/src/content/docs/docs/intro/sending-payments.mdx +++ /dev/null @@ -1,75 +0,0 @@ ---- -title: Sending payments ---- - -import { LinkOut, Tooltip } from '@interledger/docs-design-system' - -Three key components of sending a Web Monetization payment are: - -- Web Monetization providers -- Open Payments-enabled accounts -- Web Monetization agents - -:::note -This page describes the roles of Web Monetization providers and Web Monetization agents within the Web Monetization ecosystem. It does not explain how to become a provider or develop an agent. -::: - -## Web Monetization providers - -For a site visitor to send a Web Monetization payment, the visitor must have some kind of relationship with a Web Monetization provider. A Web Monetization provider is an entity that provides a funded Open Payments-enabled account from which payments can be sent. A provider can take a number of different forms, such as: - -- A company that uses its own account to make payments on behalf of its customers -- An app that’s authorized to hook directly into a user’s personal account -- An individual that hooks their personal account up to a Web Monetization agent - -In addition to providing funded accounts, Web Monetization providers are responsible for defining the payment models they support and implementing business logic and rules. For example, a Web Monetization provider might: - -- Only send payments in fiat currencies -- Support one-time payments and micropayments, but not real-time streaming payments -- Stream real-time payments at a fixed rate, for example $0.006 per minute -- Allow user-defined payout rates, frequencies, limits, and so on - -For a provider to send a Web Monetization payment on behalf of an individual, the provider must support the Open Payments specification. - -## Open Payments and wallet addresses - -Open Payments enables open and interoperable payments between Web Monetization providers and Web Monetization receivers. As such, accounts supplied by both Web Monetization providers and Web Monetization receivers must implement the Open Payments (OP) specification. - -The OP specification defines standards for **_access_** to accounts. When granted access, applications and other entities can integrate payments into their feature sets by connecting to their users’ accounts. The ability to then **_execute_** payments between OP-enabled accounts relies on the availability of a common payment rail between the accounts. - -### Wallet addresses - -Access to an OP-enabled account, whether for sending or receiving, always starts with a wallet address. In this context, a wallet address is a unique URL that identifies an OP account and provides an entry point for the Open Payments API. - -A wallet address allows certain account details to be safely shared with third-parties. Third-parties use the details to initiate payments to or from the account. A Web Monetization agent is an example of a third-party. - -Depending on the form a Web Monetization provider takes, the provider's user may not know, nor have a need to know, any details about the sending account's wallet address. - -## Web Monetization agents - -One goal of Web Monetization is for vendors to natively build the standard into web browsers. But we aren’t there yet. For now, users must install a separate Web Monetization agent, such as an extension, into their browsers. - -The Web Monetization agent is code that discovers web monetized pages, exposes the Web Monetization API, and communicates via the Open Payments APIs to obtain authorization and issue instructions for making a payment. - -### How it works - -The Web Monetization agent checks each page an individual visits for a monetization `` element. A monetization `` element must contain a valid Open Payments wallet address. For example: - -```html - -``` - -When detected, the Web Monetization agent begins a series of API calls to: - -1. Get the details about the underlying account -2. Receive permission to send a payment to the account -3. Create a monetization session within the site visitor's browser tab/window -4. Create the outgoing payment request - -Visit the [Add Web Monetization to a page](/docs/guides/monetize-page) and [Web Monetization flow](/docs/intro/web-monetization-flow) pages for more information. - -### Link a Web Monetization agent to a Web Monetization provider - -The Interledger Foundation has developed an open-source Web Monetization [browser extension](/docs/intro/web-monetization-extension) (agent) for users. Web Monetization providers could also choose to develop their own Web Monetization agents. Regardless of who supplies the Web Monetization agent, the agent must have a way to link to a provider. For example, a browser extension could allow individuals to select and sign in to their provider from within the extension UI. By signing in, the individual authorizes the extension to obtain settings from the provider and send payments on their behalf. - -Note that the Web Monetization specification itself doesn’t define the interface between the browser and the Web Monetization provider. This is intentional. How a browser ultimately chooses to allow Web Monetization providers to integrate is up to the browser. We feel that a browser’s extension system is the ideal way to support integration. diff --git a/src/content/docs/docs/intro/web-monetization-flow.mdx b/src/content/docs/docs/intro/web-monetization-flow.mdx deleted file mode 100644 index 09b8e758..00000000 --- a/src/content/docs/docs/intro/web-monetization-flow.mdx +++ /dev/null @@ -1,270 +0,0 @@ ---- -title: Web Monetization flow ---- - -import { Tabs, TabItem } from '@astrojs/starlight/components' -import { - CodeBlock, - LinkOut, - Mermaid, - MermaidWrapper, - Tooltip, -} from '@interledger/docs-design-system' - -Web Monetization relies on Open Payments (OP) and OP-enabled accounts to coordinate payments. - -The Web Monetization agent first issues a series of API calls to the receiving account's wallet address, then to the sending account's wallet address, to obtain the necessary authorization and instructions for sending a payment. - -## Sequence diagram - - - -sending account - end - participant WMA as WM agent - participant page as Web page - box aliceblue WM receiver - participant OPR as Open Payments
receiving account - participant AS as Auth server - end - note over AS,OPR: The auth server can be
located outside of the
WM receiver's domain - WMA->>page: Detects monetization element,
extracts wallet address - WMA->>OPR: Requests the public info for the wallet address - OPR->>WMA: Returns info, including auth server URL - WMA->>AS: Requests access rights - AS->>WMA: Returns access token - WMA->>OPR: Requests creation of an incoming payment resource - OPR->>WMA: Responds with unique payment details for addressing the payment to the account - WMA->>+OPS: Requests an outgoing payment be
created against the sending account - note left of OPS: Connection persists until
request moves from 'pending'
state to 'sending' state - OPS->>-WMA: Responds with details about the
'receive', 'send', and 'sent' amounts - WMA->>WMA: Fires monetization event - note over OPS,OPR: Payment processing and settlement occurs between the WM provider and WM receiver, outside of the WM flow -`} -/> - -
- -## Web Monetization flow example - -This section provides an example of the API calls that occur when a web monetized user visits a web monetized site. - -There's a few points to keep in mind as you review the example. - -- It's up to the site visitor, not the web monetized site, to decide how often and how much to pay, as well as the currency in which to send a payment. -- While Web Monetization and Open Payments work together to coordinate payments, neither moves money. Payment processing and settlement must occur between the sending and receiving accounts over a common payment rail. - -### Scenario - -Alice adds the monetization `` element to her website. Included within the `` is her wallet address, `https://wallet.example/alice`, assigned to her by her Web Monetization receiver. - -Bob signs up with a Web Monetization provider who supplies him with a funded sending account. The sending account's wallet address is `https://anotherwallet.example/bob`. After installing a Web Monetization agent in his browser and linking the Web Monetization agent to his Web Monetization provider, his Web Monetization agent now has permission to request payments be sent from his account. - -:::note -This example assumes the Web Monetization provider and Web Monetization receiver have already peered with each other and share a common payment rail over which transactions can be processed and settled. -::: - -### 1 - Check for Web Monetization - -As Bob browses Alice's site, his Web Monetization agent detects a monetization `` element. - -```html - -``` - -### 2 - Send request to wallet address (receiving account) - - - - The Web Monetization agent issues a request to Alice's wallet address to discover the Open Payments service endpoint. - - - ```http - GET /alice HTTP/1.1 - Accept: application/json - Host: wallet.example - ``` - - - - The response includes, among other details, the URL for her Web Monetization receiver's grant request endpoint (authorization server). - - - ```http - HTTP/1.1 200 Success - Content-Type: application/json - - { - "id":"https://wallet.example/alice", - "assetCode":"USD", - "assetScale":2, - "authServer":"https://wallet.example/auth" - } - ``` - - - - - -### 3 - Send grant request to Web Monetization receiver's auth server - - - - The Web Monetization agent issues a request to the Web Monetization receiver's grant request endpoint (authorization server) to get an access token. - - In this example, the Web Monetization agent requests access to create and read incoming payments (i.e., payments coming in to Alice's Web Monetization receiver). - - - ```http - POST /auth/ HTTP/1.1 - Accept: application/json - Content-Type: application/json - Host: wallet.example - Content-Length: 218 - - { - "access_token":{ - "access":[ - { - "type":"incoming-payment", - "actions":[ - "create", - "read" - ], - "identifier":"https://wallet.example/alice" - } - ] - }, - "interact":{ - "finish":{ - "method":"redirect" - } - }, - "client":"https://anotherwallet.example/bob" - } - ``` - - - - The grant request is non-interactive, so the Web Monetization receiver grants the request and issues an access token. - - - ```http - { - "access_token":{ - "value":"OS9M2PMHKUR64TB8N6BW7OZB8CDFONP219RP1LT0", - "manage":"https://wallet.example/auth/token/dd17a202-9982-4ed9-ae31-564947fb6379", - "access":[ - { - "type":"incoming-payment", - "actions":[ - "create", - "read" - ], - "identifier":"https://wallet.example/alice" - } - ] - } - } - ``` - - - - -### 4 - Send incoming payment request to wallet address (receiving account) - - - - The Web Monetization agent creates an incoming payment for the session (e.g., the open browser tab) by issuing an incoming payment request to Alice's wallet address. The request uses details obtained from the previous API calls. - -:::note -The request is for an _incoming_ payment because the Web Monetization agent is requesting that Alice's account accept an incoming payment. The payment itself has not been sent yet. -::: - - - ```http - POST /alice/incoming-payments HTTP/1.1 - Accept: application/json - Content-Type: application/json - Authorization: OS9M2PMHKUR64TB8N6BW7OZB8CDFONP219RP1LT0 - Host: wallet.example - ``` - - - - - Alice's Web Monetization receiver (who hosts her account and wallet address) approves the request by supplying unique payment details for the Web Monetization agent to use to address the payment to Alice's account. - - - ```http - { - "id":"https://wallet.example/alice/incoming-payments/08394f02-7b7b-45e2-b645-51d04e7c330c", - "walletAddress":"https://wallet.example/alice", - "receivedAmount":{ - "value":"0", - "assetCode":"USD", - "assetScale":2 - }, - "completed":false, - "createdAt":"2022-03-12T23:20:50.52Z", - "updatedAt":"2022-03-12T23:20:50.52Z" - } - ``` - - - - -### 5 - Send outgoing payment request to wallet address (sending account) - - - - The Web Monetization agent uses the details obtained thus far to create an outgoing payment request against Bob's account (via his wallet address). Note that this is just a request to send a payment. The payment itself has not been sent and the request is in a pending state. - - - ```http - POST /bob/outgoing-payment HTTP/1.1 - Accept: application/json - Content-Type: application/json - Authorization: {{ outgoingPaymentGrant.accessToken.value }} - Host: anotherwallet.example - ``` - - - - A successful response indicates the request has moved from a pending state to a sending state. This means Bob's account has the funds to cover the payment. Note that the payment itself has still not been sent (`"sentAmount":{"value":"0"}`). - - - ```http - { - "id":"https://anotherwallet.example/bob/outgoing-payments/8c68d3cc-0a0f-4216-98b4-4fa44a6c88cf", - "walletAddress":"https://anotherwallet.example/bob/", - "receiver":"https://wallet.example/alice/incoming-payments/08394f02-7b7b-45e2-b645-51d04e7c330c", - "receiveAmount":{ - "value":"2", - "assetCode":"USD", - "assetScale":2 - }, - "sendAmount":{ - "value":"2", - "assetCode":"USD", - "assetScale":2 - }, - "sentAmount":{ - "value":"0", - "assetCode":"USD", - "assetScale":2 - }, - "createdAt":"2022-03-12T23:20:55.52Z", - "updatedAt":"2022-03-12T23:20:55.52Z" - } - ``` - - - The Web Monetization flow is complete. It's now up to the Web Monetization provider to process the payment and settle with the Web Monetization receiver. - - - diff --git a/src/content/docs/docs/references/attributes/amount.mdx b/src/content/docs/docs/references/attributes/amount.mdx deleted file mode 100644 index 7ac493f5..00000000 --- a/src/content/docs/docs/references/attributes/amount.mdx +++ /dev/null @@ -1,41 +0,0 @@ ---- -title: amount ---- - -import Specification from '/src/components/docs/Specification.astro' -import BrowserCompat from '/src/components/docs/BrowserCompat.astro' -import data from '/src/data/browser-compat-data/amount.json' - -:::danger[Caution - Deprecated Attribute] -The `amount` attribute is deprecated. Consider using the [amountSent](/docs/references/attributes/amountsent) attribute instead. -::: - -The `MonetizationEvent` `amount` attribute returned the amount of money that was successfully received on the last payment. - -### Value - -An integer representing the amount of money received. - -### Example - -```html - - -``` - -## Specifications - - - -{/* ## Browser compatibility */} - -{/* */} diff --git a/src/content/docs/docs/references/attributes/amountsent.mdx b/src/content/docs/docs/references/attributes/amountsent.mdx deleted file mode 100644 index 4dbd94cb..00000000 --- a/src/content/docs/docs/references/attributes/amountsent.mdx +++ /dev/null @@ -1,38 +0,0 @@ ---- -title: amountSent ---- - -import Specification from '/src/components/docs/Specification.astro' -import BrowserCompat from '/src/components/docs/BrowserCompat.astro' -import data from '/src/data/browser-compat-data/amountSent.json' -import { LinkOut, Tooltip } from '@interledger/docs-design-system' - -The `monetization` event's `amountSent` attribute returns you the amount (`value`) and currency code (`currency`) of the Web Monetization payment sent to you. - -## Value - -The `value` uses the same data structure as the `PaymentCurrencyAmount` dictionary in the Payment Request API. The returned value is the value it was initialized with. - -## Example - -```html - - -``` - -## Specifications - - - -{/* ## Browser compatibility */} - -{/* */} diff --git a/src/content/docs/docs/references/attributes/assetcode.mdx b/src/content/docs/docs/references/attributes/assetcode.mdx deleted file mode 100644 index b05c8bf7..00000000 --- a/src/content/docs/docs/references/attributes/assetcode.mdx +++ /dev/null @@ -1,41 +0,0 @@ ---- -title: assetCode ---- - -import Specification from '/src/components/docs/Specification.astro' -import BrowserCompat from '/src/components/docs/BrowserCompat.astro' -import data from '/src/data/browser-compat-data/assetCode.json' - -:::danger[Caution - Deprecated Attribute] -The `assetCode` attribute is deprecated. Consider using the [amountSent](/docs/references/attributes/amountsent) attribute instead. -::: - -The `MonetizationEvent` `assetCode` attribute returned the currency code of the last payment received. - -### Value - -A string representing the three-character currency code on the last payment received. - -### Example - -```html - - -``` - -## Specifications - - - -{/* ## Browser compatibility */} - -{/* */} diff --git a/src/content/docs/docs/references/attributes/assetscale.mdx b/src/content/docs/docs/references/attributes/assetscale.mdx deleted file mode 100644 index 261f056d..00000000 --- a/src/content/docs/docs/references/attributes/assetscale.mdx +++ /dev/null @@ -1,41 +0,0 @@ ---- -title: assetScale ---- - -import Specification from '/src/components/docs/Specification.astro' -import BrowserCompat from '/src/components/docs/BrowserCompat.astro' -import data from '/src/data/browser-compat-data/assetScale.json' - -:::danger[Caution - Deprecated Attribute] -The `assetScale` attribute is deprecated. Consider using the [amountSent](/docs/references/attributes/amountsent) attribute instead. -::: - -The `MonetizationEvent` `assetScale` attribute returned the scale of the paid amount - -### Value - -An integer that represents the scale on the amount of money received in the last payment. - -### Example - -```html - - -``` - -## Specifications - - - -{/* ## Browser compatibility */} - -{/* */} diff --git a/src/content/docs/docs/references/attributes/incomingpayment.mdx b/src/content/docs/docs/references/attributes/incomingpayment.mdx deleted file mode 100644 index c163c231..00000000 --- a/src/content/docs/docs/references/attributes/incomingpayment.mdx +++ /dev/null @@ -1,53 +0,0 @@ ---- -title: incomingPayment ---- - -import Specification from '/src/components/docs/Specification.astro' -import BrowserCompat from '/src/components/docs/BrowserCompat.astro' -import data from '/src/data/browser-compat-data/incomingPayment.json' -import { LinkOut, Hidden } from '@interledger/docs-design-system' - -:::tip[Experimental Attribute] -`incomingPayment` is an experimental technology. -::: - -The `monetization` event's `incomingPayment` attribute can be used to verify the receipt of a payment. Today, the `monetization` event fires when the Web Monetization agent successfully creates an outgoing payment request at the Web Monetization provider. Since it's only a request to send an outgoing payment, there's no guarantee at this point that a payment has been received. - -The `incomingPayment` attribute returns the URL that represents the incoming payment at the Web Monetization receiver. The returned value is the value it was initialized with. By querying the URL, you can get the `receivedAmount`. - -## Example - -```jsx -/** @type {MonetizationEvent} event */ -async function verifyPayment(event) { - // Legacy receivers don't support returning incoming payment URLs - if (!event.incomingPayment) { - throw new Error('No incoming payment URL') - } - - const response = await fetch(event.incomingPayment, { - method: 'GET', - credentials: 'same-origin', - mode: 'same-origin', - cache: 'no-cache', - headers: { - 'Content-Type': 'application/json', - }, - }) - - if (response.ok) { - // The incoming payment was fetched successfully - const { receivedAmount } = await response.json() - const { amount, assetCode, assetScale } = receivedAmount - console.log(`Received ${assetCode}${amount / Math.pow(10, assetScale)}.`) - } -} -``` - -## Specifications - - - -{/* ## Browser compatibility */} - -{/* */} diff --git a/src/content/docs/docs/references/attributes/paymentpointer.mdx b/src/content/docs/docs/references/attributes/paymentpointer.mdx deleted file mode 100644 index 32ab3cf4..00000000 --- a/src/content/docs/docs/references/attributes/paymentpointer.mdx +++ /dev/null @@ -1,28 +0,0 @@ ---- -title: paymentPointer ---- - -import Specification from '/src/components/docs/Specification.astro' -import BrowserCompat from '/src/components/docs/BrowserCompat.astro' -import data from '/src/data/browser-compat-data/paymentPointer.json' - -The `monetization` event's `paymentPointer` attribute returns the URL representing the payment endpoint used by the incoming Web Monetization payment. The returned value is the value it was initialized with. - -## Example - -```html - - -``` - -## Specifications - - - -{/* ## Browser compatibility */} - -{/* */} diff --git a/src/content/docs/docs/references/attributes/receipt.mdx b/src/content/docs/docs/references/attributes/receipt.mdx deleted file mode 100644 index 4b417e63..00000000 --- a/src/content/docs/docs/references/attributes/receipt.mdx +++ /dev/null @@ -1,36 +0,0 @@ ---- -title: receipt ---- - -import Specification from '/src/components/docs/Specification.astro' -import BrowserCompat from '/src/components/docs/BrowserCompat.astro' -import data from '/src/data/browser-compat-data/receipt.json' - -:::danger[Caution - Deprecated Attribute] -Receipts and its associated `receipt` attribute are deprecated. Consider using the [incomingPayment](/docs/references/attributes/incomingpayment) attribute instead. -::: - -The `MonetizationEvent` `receipt` attribute returned an optional proof-of-payment receipt. It was issued from the monetization receiver to the monetization provider as proof of the total current amount received in a stream. - -### Value - -A base64-encoded STREAM receipt. Returned null if receipts were not enabled on the payment pointer. The receipt had the total running amount streamed in the current session. - -### Example - -```html - - -``` - -## Specifications - - - -{/* ## Browser compatibility */} - -{/* */} diff --git a/src/content/docs/docs/references/csp-monetization-src.mdx b/src/content/docs/docs/references/csp-monetization-src.mdx deleted file mode 100644 index 699068a2..00000000 --- a/src/content/docs/docs/references/csp-monetization-src.mdx +++ /dev/null @@ -1,70 +0,0 @@ ---- -title: 'Content-Security-Policy: monetization-src' ---- - -import Specification from '/src/components/docs/Specification.astro' -import BrowserCompat from '/src/components/docs/BrowserCompat.astro' -import data from '/src/data/browser-compat-data/csp-monetization-src.json' -import { LinkOut } from '@interledger/docs-design-system' - -The `monetization-src` directive within the HTTP Content-Security-Policy (CSP) allows you to restrict the URLs from which an Open Payments-enabled wallet address, such as a payment pointer, can be loaded. - - - - - - - - - - - - -
- CSP version - 3
- Directive type - - - Fetch directive - -
- -## Syntax - -The basic syntax is as follows, where `source` is a serialized source list. More than one source can be allowed for the `monetization-src` policy: - -```http -Content-Security-Policy: monetization-src ; -Content-Security-Policy: monetization-src , ; -``` - -### Sources - -`` can be any one of the values listed in CSP Source Values. - -## Example - -### Violation case - -A website administrator wants to restrict the URLs from which a wallet address can be loaded. - -Given this CSP header: - -```http -Content-Security-Policy: monetization-src https://www.wallet.example; -``` - -Fetches for the following monetization source will return a network error and not load, as the URL does not match the URL defined in the CSP source list. - -```html - -``` - -## Specifications - - - -{/* ## Browser compatibility */} - -{/* */} diff --git a/src/content/docs/docs/references/html-link-rel-monetization.mdx b/src/content/docs/docs/references/html-link-rel-monetization.mdx deleted file mode 100644 index 9bc31d57..00000000 --- a/src/content/docs/docs/references/html-link-rel-monetization.mdx +++ /dev/null @@ -1,34 +0,0 @@ ---- -title: 'HTML rel=monetization' ---- - -import Specification from '/src/components/docs/Specification.astro' -import BrowserCompat from '/src/components/docs/BrowserCompat.astro' -import data from '/src/data/browser-compat-data/link.json' -import { LinkOut } from '@interledger/docs-design-system' - -The `` element enables you to [add Web Monetization to an HTML document](/docs/guides/monetize-page). The `rel` value must be `monetization`. The `href` value must be a URL representing an Open Payments-enabled wallet address, such as a payment pointer. - -```html - -``` - -A single HTML document can contain multiple monetization `` elements; however, it's up to each Web Monetization provider to decide how they want to handle this scenario. We recommend Web Monetization providers split the payments evenly between the links. - -## Payment pointers and meta elements - -The first version of the Web Monetization spec supported both the `` and `` elements. The `` element supported payment pointers written in shorthand form (e.g., `$wallet.example/alice`). - -Now, Web Monetization only supports the `` element. The `` element does not support shorthand and requires payment pointers be in URL format (e.g., `https://wallet.example/alice`). In most cases, you can simply replace the `$` with `https://`. However, we suggest entering your payment pointer into the input field on paymentpointers.org to convert it from shorthand to URL. - -:::note -The Web Monetization specification references payment pointers, but any Open Payments-enabled wallet address in URL form can be used as the 'href' value. -::: - -## Specifications - - - -{/* ## Browser compatibility */} - -{/* */} diff --git a/src/content/docs/docs/references/monetizationevent.mdx b/src/content/docs/docs/references/monetizationevent.mdx deleted file mode 100644 index b0872202..00000000 --- a/src/content/docs/docs/references/monetizationevent.mdx +++ /dev/null @@ -1,80 +0,0 @@ ---- -title: MonetizationEvent ---- - -import Specification from '/src/components/docs/Specification.astro' -import BrowserCompat from '/src/components/docs/BrowserCompat.astro' -import data from '/src/data/browser-compat-data/monetizationevent.json' - -The `MonetizationEvent` DOM events provide information about payments sent to Web Monetization receivers. - -The `monetization` event fires when a Web Monetization agent successfully creates an outgoing payment request at the Web Monetization provider. There’s no guarantee that any payments will follow or, if they do, how often or how large the payments will be. - -By listening for `monetization` events, you can use the returned details to verify the receipt of a payment. You can then choose to have the page programmatically respond to successful payments. For example, you could [remove ads](/docs/guides/remove-ads) or provide access to [exclusive content](/docs/guides/provide-exclusive-content). - - - - - - - - - - - - - - - - - - -
BubblesYes
CancelableNo
InterfaceMonetizationEvent
Event handler property - onmonetization -
- -## Current attributes - -- [amountSent](/docs/references/attributes/amountsent) - Returns the amount and currency code of the sent payment -- [incomingPayment](/docs/references/attributes/incomingpayment) - Returns the incoming payment URL -- [paymentPointer](/docs/references/attributes/paymentpointer) - A URL representing the payment pointer endpoint - -## Deprecated attributes - -- [amount](/docs/references/attributes/amount) - An integer amount delivered by an Interledger packet -- [assetCode](/docs/references/attributes/assetcode) - A string representing the currency code of the received amount -- [assetScale](/docs/references/attributes/assetscale) - The scale of the received amount -- [receipt](/docs/references/attributes/receipt) - The base-64 encoded Interledger STREAM receipt that the browser received - -## Example - -```html - - -``` - -## Specifications - - - -{/* ## Browser compatibility */} - -{/* */} diff --git a/src/content/docs/docs/references/onmonetization.mdx b/src/content/docs/docs/references/onmonetization.mdx deleted file mode 100644 index 2cf5a3e3..00000000 --- a/src/content/docs/docs/references/onmonetization.mdx +++ /dev/null @@ -1,36 +0,0 @@ ---- -title: 'GlobalEventHandlers: onmonetization' ---- - -import Specification from '/src/components/docs/Specification.astro' -import BrowserCompat from '/src/components/docs/BrowserCompat.astro' -import data from '/src/data/browser-compat-data/onmonetization.json' -import { Tooltip } from '@interledger/docs-design-system' - -The `onmonetization` attribute of the `GlobalEventHandlers` mixin is used to process `monetization` events sent to the `Window`. - -`onmonetization` can be applied to any element and is used by the user agent (such as a web browser or Web Monetization agent) to notify that some `` element is monetized. - -## Syntax - -```js -window.onmonetization = functionRef -``` - -## Example - -Show a visitor an alert box and message when a Web Monetization event is triggered. - -```js -window.onmonetization = function () { - alert('This page supports Web Monetization.') -} -``` - -## Specifications - - - -{/* ## Browser compatibility */} - -{/* */} diff --git a/src/content/docs/docs/references/permissions-policy-monetization.mdx b/src/content/docs/docs/references/permissions-policy-monetization.mdx deleted file mode 100644 index 003e77cb..00000000 --- a/src/content/docs/docs/references/permissions-policy-monetization.mdx +++ /dev/null @@ -1,40 +0,0 @@ ---- -title: Permissions Policy ---- - -import Specification from '/src/components/docs/Specification.astro' -import BrowserCompat from '/src/components/docs/BrowserCompat.astro' -import data from '/src/data/browser-compat-data/permissionpolicy.json' -import { LinkOut } from '@interledger/docs-design-system' - -The `monetization` directive within the HTTP Permissions-Policy header controls whether the current document and any nesting browsing contexts (iframes) are allowed to use the Web Monetization API. - -## Syntax - -The basic syntax is as follows, where `allowlist` is a list of origins permitted to use Web Monetization. - -```http -Permissions-Policy: monetization=(allowlist) -``` - -## Example - -Allow Web Monetization in the document and in all nested browsing contexts (iframes) in the same origin. - -```http -Permissions-Policy: monetization=(self) -``` - -This is the default policy for `monetization`. - -:::note -The `allowlist` attributes only take effect when the _content navigable_ of the iframe is navigated. Adding or removing the monetization attribute has no effect on an already-loaded document. -::: - -## Specifications - - - -{/* ## Browser compatibility */} - -{/* */} diff --git a/src/content/docs/docs/resources/get-involved.mdx b/src/content/docs/docs/resources/get-involved.mdx deleted file mode 100644 index a24f3dfd..00000000 --- a/src/content/docs/docs/resources/get-involved.mdx +++ /dev/null @@ -1,45 +0,0 @@ ---- -title: Get involved ---- - -import { LinkOut } from '@interledger/docs-design-system' - -## Participation - -- Join our Web Monetization Community calls. -- Begin a new discussion or contribute to existing discussions in the WICG Web Monetization GitHub repo. -- Contribute something you've built, open a new issue, or contribute to existing issues in the WICG Web Monetization GitHub repo. -- Suggest changes to the specification by submitting a pull request. For more details about spec contributions and development, visit contributing.md. - -## Coding - -- Update the existing Web Monetization v1 [tools/libraries](/docs/resources/libraries/) to the latest spec. -- Create new Web Monetization tools/plugins for frameworks and libraries. -- Build applications with new and varied use cases around Web Monetization. For example, you could: - - Add Web Monetization to your favorite open source project. - - Create tools to allow websites to interact with web monetized visitors. Visual indicators, like celebration confetti, thank you notes, or payment counters are just a few ways to promote interaction. -- Contribute to the ILF's Web Monetization extension by coding or testing. - -## Community events and hackathons - -- Join us at the Interledger Summit and participate in our annual hackathon. -- Organize your own hackathons, coding sprints, and installa-thons, both online and offline. Run campaigns and encourage participants to develop, collaborate on, and test projects. - -## Localization - -- Translate and localize the [Intro to Web Monetization](/docs/) page into one of the following languages: - - Arabic - - Chinese - - French - - German - - Japanese - - Portuguese - - Spanish -- Review translated and localized content. - -## Documentation - -- Contribute to the docs by suggesting additions and improvements. -- Create tutorials and guides to help others in the community work with Web Monetization. - -Review our contribution guide for details. \ No newline at end of file diff --git a/src/content/docs/docs/resources/glossary.mdx b/src/content/docs/docs/resources/glossary.mdx deleted file mode 100644 index e2cf53ac..00000000 --- a/src/content/docs/docs/resources/glossary.mdx +++ /dev/null @@ -1,130 +0,0 @@ ---- -title: Glossary ---- - -import { LinkOut } from '@interledger/docs-design-system' - -## A - -
- -### Account - -The definition of account depends on its context. When we refer to an account, we typically mean an Open Payments-enabled payment account. A payment account is an arrangement by which an entity sends, receives, holds, and keeps records of a user's credit or debit transactions. An Open Payments-enabled account is an account that supports the Open Payments APIs. - -An account can also be an arrangement by which a user is given access to a service by entering a username and password. - -### Account servicing entity (ASE) - -An entity that provides and maintains a payment account for a payer and/or payee. An ASE is a regulated entity within the country or countries it operates. Examples include digital wallets, banks, crypto wallets, and mobile money providers. - -## D - -
- -### Digital wallet - -The term _digital wallet_ means different things to different people, services, and technologies. We try to avoid over-using the term for this reason. However, in cases where we do reference digital wallets, it's within the context of Open Payments. As such, we assume the digital wallets have implemented the Open Payments standard. - -Open Payments defines a digital wallet as any Internet-connected system that acts as an agent of a person or business that is capable of sending and receiving payments from or to that person or business. - -## O - -
- -### Open Payments (OP) - -Open Payments is a specification -that aims to define standards for access to digital wallets. When a digital wallet -provider implements the spec, third-party applications and other entities can integrate -payments into their feature sets by connecting to their users' existing financial -accounts, rather than requiring users to create new accounts. The ability to then -execute payments between accounts contained within Open Payments-enabled wallets -relies on the availability of a common payment rail between the wallets.{' '} - -Web Monetization relies on Open Payments though its use of wallet addresses. - -## P - -
- -### Payment pointer - -A payment pointer is a type of Open Payments-enabled [wallet address](#wallet-address). Payment pointers usually begin with a `$`. For example: `$wallet.example.com/alice`. Visit paymentpointers.org for additional information. - -### Payment session - -A session between a Web Monetization provider and Web Monetization receiver, initialized by a user agent, whereby the provider initiates a payment to the receiver. - -The provider can initiate multiple payment sessions during a Web Monetization session: - -- At the same time, when there’s multiple monetization `` elements on a page -- Sequentially, when an incoming payment completes/expires and a new incoming payment is created on the same wallet address - -## U - -
- -### User agent - -A user agent is any software that retrieves, renders and facilitates end user interaction with Web content, or whose user interface is implemented using Web technologies. (W3C) - -A web browser is an example of a user agent. - -## W - -
- -### Wallet address - -Every Open Payments account within a digital wallet, or the Open Payments-enabled digital wallet itself (depending on implementation), is identified by a unique URL called a wallet address. The URL not only identifies the account or wallet, but also provides the entry point to the Open Payments APIs. - -Conceptually, a wallet address is like an email address for an account or wallet. It's a publicly shareable address used to request and/or grant authorization to interact with the underlying account or wallet. Example interactions include sending and receiving payments. - -The `` value within the monetization `` element must be an Open Payments-enabled wallet address. - -### Web Monetization - -A specification for allowing websites to automatically receive payments from users, facilitated by a user agent or Web Monetization agent, and the site visitor's preferred Web Monetization provider. - -### Web Monetization agent - -Code within a web browser that discovers web monetized pages, exposes the Web Monetization API and communicates with the Open Payments APIs. - -When a vendor natively builds Web Monetization into their browser, the browser (user agent) acts as the Web Monetization agent. Until then, a separate Web Monetization agent, such as a browser extension, is required. - -Visit the [Sending Payments](/docs/intro/sending-payments/#web-monetization-agents) page for additional information. - -### Web Monetization payment - -A payment that occurs due to a web monetized visitor accessing a web monetized page. Typically shortened to _payment_ within the docs. - -Visit the [Web Monetization flow](/docs/intro/web-monetization-flow) page for additional information. - -### Web Monetization provider - -An entity or collection of entities that together enable Web Monetization payments to be sent on behalf of an individual when the individual visits a web monetized page. At minimum, a Web Monetization provider is an account servicing entity that supplies a funded Open Payments-enabled account from which to send payments. - -Visit the [Sending Payments](/docs/intro/sending-payments/#web-monetization-providers) page for additional information. - -### Web Monetization receiver - -An entity or collection of entities that together enable Web Monetization payments to be received and held on behalf of an individual. At minimum, a Web Monetization receiver is an account servicing entity that supplies an Open Payments-enabled account capable of receiving payments. - -Visit the [Receiving Payments](/docs/intro/receiving-payments/#web-monetization-receivers) page for additional information. - -### Web Monetization session - -A way to describe a web session on a Web Monetized page/site. Each page load or refresh is a unique Web Monetization session (sometimes shortened to _monetization session_). The web browser generates a unique session ID which the website can use to correlate incoming payments to a client-side context. - -### Web monetized page/site - -Describes a page/site that has implemented Web Monetization. - -The terms _page_ and _site_ are used interchangeably within the docs; however, there is a technical difference to be aware of. - -Web Monetization is configured at the page level. A web monetized page is a page that contains a well-formed monetization `` element. For an entire site to be web monetized, each page of the site must have a `` element. - -### Web monetized user - -A website visitor who has a relationship with a Web Monetization provider and on whose behalf the Web Monetization provider sends payments. diff --git a/src/content/docs/docs/resources/op-wallets.mdx b/src/content/docs/docs/resources/op-wallets.mdx deleted file mode 100644 index 39609283..00000000 --- a/src/content/docs/docs/resources/op-wallets.mdx +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: Web Monetization-enabled wallets ---- - -import { LinkOut } from '@interledger/docs-design-system' - -A Web Monetization-enabled wallet is required to send and/or receive payments. The wallet providers on this page are set up to support Web Monetization. - -Be sure to select a provider that is available in your **region** and supports your preferred **currency**. - -Your provider will assign you a wallet address. You'll need this address when setting up the [extension](/docs/intro/web-monetization-extension) and/or web monetizing your [content](/docs/guides/monetize-page). - -## Wallet providers - -|   Provider | -| - | -|   Interledger Wallet | diff --git a/src/content/docs/es/docs.mdx b/src/content/docs/es/docs.mdx deleted file mode 100644 index 1e82e8a3..00000000 --- a/src/content/docs/es/docs.mdx +++ /dev/null @@ -1,68 +0,0 @@ ---- -title: Introducción a la Monetización Web ---- - -import { LargeImg, LinkOut, Tooltip } from '@interledger/docs-design-system' - -Como usuario de un sitio web, es común encontrar un titular que capte tu atención, sólo para encontrar el artículo bloqueado detrás de un muro de pago. ¿Con qué frecuencia pagas una suscripción para leer un solo artículo? ¿Qué pasaría si pudieras pagar una fracción del precio de la suscripción para acceder al artículo y evitar la suscripción por completo? - -Como propietario de un sitio web, anticipas perder algunos visitantes debido al contenido de pago. Incluso si ofreces suscripciones semanales, el precio puede ser mayor de lo que un visitante está dispuesto a pagar. Pero en lugar de suscripciones, ¿qué pasaría si pudieras generar ingresos por contenido, o incluso en función de la cantidad de tiempo que un visitante dedica al contenido? - -Éstas son sólo dos formas en que la monetización web puede facilitar los pagos. Con la monetización web, los visitantes del sitio web pueden enviar pagos directamente a los sitios web utilizando una extensión de navegador o cualquier navegador que implemente de forma nativa la especificación de monetización web. - -## Infraestructura de pagos actual - -Puede llevar un poco de trabajo implementar pagos en un sitio web. Si tu sitio ya acepta pagos, es posible que estés familiarizado con lo que se necesita para aceptar múltiples métodos de pago y monedas. El proceso normalmente se parece a esto: - -1. Te registras con uno o más proveedores de pago, según los métodos de pago y las monedas que desees aceptar. -2. Tú integras sus servicios en tu sitio. Por ejemplo, puedes crear y alojar tu propio formulario de pago que esté conectado al servicio, o utilizar un formulario proporcionado por el proveedor de pagos. -3. Dependiendo del método de pago que tu visitante desee utilizar, es posible que deba crear una cuenta contigo o con el proveedor de pagos. -4. Tu visitante completa el formulario de pago. Lo ideal es que permanezcan en tu sitio para completar la transacción, pero es posible que deban acceder al sitio del proveedor. - -## Introduciendo la Monetización Web - -La Monetización Web (WM por sus siglas en inglés) tiene como objetivo simplificar la experiencia de pago para ti y los visitantes de tu sitio web. Es una tecnología abierta que permite a los sitios web recibir automáticamente pagos de los visitantes, facilitados por el navegador del visitante y su proveedor de WM preferido. - -Es un estándar propuesto que permite a los visitantes pagar una cantidad de su elección con poca o ninguna interacción del usuario. Permite que un sitio web indique automáticamente a los navegadores web que puede aceptar pagos y permite a los navegadores web facilitar un pago mediante: - -- Obtención de autorización para iniciar el pago. -- Recopilar detalles y emitir instrucciones para iniciar el proceso de movimiento de dinero. -- Crear una sesión de pago. -- Comunicar eventos de pago al sitio para que el sitio pueda responder opcionalmente. Por ejemplo, el sitio podría [eliminar anuncios](/es/docs/guides/remove-ads) o proporcionar [acceso a contenido exclusivo](/es/docs/guides/provide-exclusive-content) para los visitantes que pagan. - -### Flujo de alto nivel - -La siguiente imagen muestra el flujo de monetización web en un nivel alto. Algunos pasos se han combinado o excluido. Se proporciona una explicación más detallada en la página [Flujo de monetización web](/es/docs/intro/web-monetization-flow). - - - -1. Bob visita una [página web monetizada](/es/docs/guides/monetize-page). El elemento de monetización `` es la forma en que el sitio web indica su aceptación de pagos al navegador. -2. El navegador de Bob, ya sea de forma nativa o mediante una extensión del navegador, analiza el elemento `` para obtener dirección de billetera de Alice, la propietaria del sitio. -3. El navegador/extensión de Bob envía solicitudes a la dirección de la billetera de Alice para obtener autorización e instrucciones para enviar un pago. -4. Con la autorización concedida y las instrucciones de pago recibidas, el navegador/extensión envía solicitudes a la dirección de la billetera de Bob para iniciar el pago. -5. El flujo de Monetización Web finaliza. El procesamiento de pagos, el cambio de divisas y la liquidación se realizan entre las dos cuentas a través de una vía de pago común. - -### Especificación de montos de pago y monedas - -La monetización web no permite que un sitio web especifique un monto de pago o moneda. Solo permite que el sitio le indique al navegador que puede aceptar pagos. - -Con la ayuda de un proveedor de WM, tu visitante decide si realiza un pago, cuánto y con qué frecuencia y en qué moneda. Tu receptor de WM puede entonces cambiar la moneda de pagos entrantes en función de lo que deseas recibir. Esta flexibilidad te permite a ti y a tus visitantes elegir los métodos de monetización que mejor se adapten a sus necesidades. - -### Procesamiento y liquidación de pagos - -La función de la monetización web es ayudar a coordinar los pagos. No procesar ni liquidar pagos. - -En cada extremo de la monetización web hay una cuenta que admite Open Payments. El proveedor de WM proporciona a tu visitante una cuenta de envío con fondos. En algunos casos, el visitante podría incluso actuar como su propio proveedor de WM. El receptor WM te proporciona una cuenta receptora. - -La monetización web se comunica con las cuentas emisoras y receptoras para obtener las autorizaciones e instrucciones necesarias para que un pago sea enviado y recibido. Luego, el procesamiento y la liquidación de pagos se producen entre las cuentas emisoras y receptoras, fuera del flujo de monetización web. - -## Versión de la especificación anterior - -En junio de 2023 se publicó una nueva versión de la especificación de Monetización web. Los usuarios de la versión anterior deben tener en cuenta lo siguiente: - -- La versión anterior solo utilizaba el Protocolo de configuración de pago simple (SPSP) de Interledger. La nueva versión utiliza Open Payments. -- El elemento `` está obsoleto en favor del elemento [``](/es/docs/references/html-link-rel-monetization/). -- El elemento `` no admite la forma abreviada de un puntero de pago (por ejemplo, `$wallet.example/alice`). Debes utilizar la URL completa a la que se resuelve el puntero de pago (por ejemplo, `https://wallet.example/alice`). Si necesitas ayuda para convertir un indicador de pago de una abreviatura a su URL equivalente, ingresa su indicador de pago en el campo de entrada en paymentpointers.org. En la mayoría de los casos, puedes simplemente reemplazar `$` por `https://`. diff --git a/src/content/docs/fr/docs.mdx b/src/content/docs/fr/docs.mdx deleted file mode 100644 index 9b674f0a..00000000 --- a/src/content/docs/fr/docs.mdx +++ /dev/null @@ -1,68 +0,0 @@ ---- -title: Introduction à la Web Monetization ---- - -import { LargeImg, LinkOut, Tooltip } from '@interledger/docs-design-system' - -En tant qu'utilisateur d'un site web, il est fréquent de tomber sur un titre qui capte l'attention, mais de découvrir que l'article est bloqué derrière un paywall. Combien de fois avez-vous payé un abonnement pour lire un seul article ? Et si vous pouviez payer une fraction du prix de l'abonnement pour accéder à l'article et éviter l'abonnement ? - -En tant que propriétaire d'un site web, vous vous attendez à perdre quelques visiteurs à cause d'un contenu payant. Même si vous proposez des abonnements hebdomadaires, le prix peut être supérieur à ce qu'un visiteur est prêt à payer. Et si, au lieu de proposer des abonnements, vous pouviez générer des revenus par morceau de contenu, ou même en fonction du temps qu'un visiteur passe sur le contenu ? - -Ce ne sont là que deux façons dont la Web Monetization peut faciliter les paiements. Grâce à la Web Monetization, les visiteurs d'un site web peuvent envoyer des paiements directement aux sites web à l'aide d'une extension de navigateur ou de n'importe quel navigateur qui implémente nativement la spécification de Web Monetization. - -## Infrastructure des paiements actuels - -La mise en place de paiements sur un site web peut demander un peu de travail. Si votre site accepte déjà les paiements, vous savez peut-être ce qu'il faut faire pour accepter plusieurs méthodes de paiement et plusieurs devises. Le processus ressemble généralement à ceci : - -1. Vous vous inscrivez auprès d'un ou de plusieurs prestataires de services de paiement, en fonction des méthodes de paiement et des devises que vous souhaitez accepter. -2. Vous intégrez leur(s) service(s) dans votre site. Par exemple, vous pouvez créer et héberger votre propre formulaire de paiement qui est connecté au service, ou vous utilisez un formulaire fourni par le fournisseur de paiement. -3. En fonction de la méthode de paiement que votre visiteur souhaite utiliser, il peut avoir besoin de créer un compte auprès de vous ou du fournisseur de services de paiement. -4. Votre visiteur remplit le formulaire de paiement. Dans l'idéal, il reste sur votre site pour terminer la transaction, mais il peut lui être demandé d'accéder au site du prestataire. - -## Présentation de la Web Monetization - -La Web Monetization (WM) vise à simplifier l'expérience de paiement pour vous et les visiteurs de votre site Web. Il s'agit d'une technologie ouverte qui permet aux sites web de recevoir automatiquement des paiements de la part des visiteurs, grâce au navigateur de ces derniers et à leur fournisseur WM préféré. - -Il s'agit d'une norme proposée qui permet à vos visiteurs de payer le montant de leur choix avec peu ou pas d'interaction avec l'utilisateur. Elle permet à un site web de signaler automatiquement aux navigateurs web qu'il peut accepter les paiements et aux navigateurs web de faciliter le paiement : - -- Obtenir l'autorisation d'initier le paiement. -- Recueillir des informations et donner des instructions pour lancer le processus de transfert de fonds. -- Création d'une session de paiement. -- Communiquer les événements de paiement au site pour qu'il puisse éventuellement y répondre. Par exemple, le site pourrait [supprimer les publicités](/fr/docs/guides/remove-ads) ou fournir [l'accès à un contenu exclusif](/fr/docs/guides/provide-exclusive-content) aux visiteurs payants. - -### Flux à haut niveau - -L'image suivante montre le flux de la Web Monetization à un niveau élevé. Certaines étapes ont été combinées ou exclues. Une explication plus détaillée est fournie dans la page [Flux de la Web Monetisation](/fr/docs/intro/web-monetization-flow). - - - -1. Bob visite une [page monétisé](/fr/docs/guides/monetize-page). L'élément `` de monétisation est la façon dont le site web signale au navigateur qu'il accepte les paiements. -2. Le navigateur de Bob, soit de manière native, soit via une extension du navigateur, analyse l'élément `` pour obtenir l'élément l'adresse du portefeuille pour Alice, propriétaire du site. -3. Le navigateur de Bob ou l'extension, envoie des demandes à l'adresse du portefeuille d'Alice pour obtenir l'autorisation et les instructions nécessaires à l'envoi d'un paiement. -4. Une fois l'autorisation accordée et les instructions de paiement reçues, le navigateur/extension envoie des demandes à l'adresse du portefeuille de Bob pour initier le paiement sortant. -5. Le flux de la Web Monetization se fini. Le traitement des paiements, l'échange de devises et le règlement ont lieu entre les deux comptes par l'intermédiaire d'un rail de paiement commun. - -### Spécification des montants et des devises de paiement - -La Web Monetization ne permet pas à un site web de spécifier un montant ou une devise de paiement. Elle permet seulement au site d'indiquer au navigateur qu'il peut accepter des paiements. - -Avec l'aide d'un fournisseur WM, votre visiteur décide s'il doit effectuer un paiement, combien et à quelle fréquence, et dans quelle devise. Votre récepteur WM peut alors échanger la devise des paiements entrants en fonction de ce que vous souhaitez recevoir. Cette flexibilité vous permet, ainsi qu'à vos visiteurs, de choisir les méthodes de monétisation qui répondent le mieux à vos besoins. - -### Traitement et règlement des paiements - -Le rôle de la Web Monetization est d'aider à coordonner les paiements. Elle ne traite ni ne règle les paiements. - -À chaque extrémité de la Web Monetization se trouve un compte qui prend en charge les Paiements ouverts. Le fournisseur WM fournit à votre visiteur un compte d'envoi financé. Dans certains cas, le visiteur peut même agir comme son propre fournisseur WM. Le destinataire WM vous fournit un compte de réception. - -La Web Monetization communique avec les comptes émetteur et récepteur afin d'obtenir les autorisations et instructions nécessaires à l'envoi et à la réception d'un paiement. Le traitement et le règlement du paiement s'effectuent ensuite entre les comptes émetteur et récepteur, en dehors du flux de la Web Monetisation. - -## Version antérieure de la spécification - -Une nouvelle version de la spécification relative à la Web Monetization a été publiée en juin 2023. Les utilisateurs de la version précédente doivent tenir compte des éléments suivants : - -- La version précédente n'utilisait que le Simple Payment Setup Protocol (SPSP) d'Interledger. La nouvelle version utilise Open Payments. -- L'élément `` est obsolète en faveur de l'élément [``](/fr/docs/references/html-link-rel-monetization/). -- L'élément `` ne supporte pas la forme abrégée d'un pointeur de paiement (par exemple, `$wallet.example/alice`). Vous devez utiliser l'URL du point de terminaison auquel le pointeur de paiement se réfère (par exemple, `https://wallet.example/alice`). Si vous avez besoin d'aide pour convertir un pointeur de paiement en son URL équivalent, entrez votre pointeur de paiement dans le champ de saisie sur paymentpointers.org. Dans la plupart des cas, vous pouvez simplement remplacer le `$` par `https://`. diff --git a/src/content/docs/resources/get-involved.mdx b/src/content/docs/resources/get-involved.mdx new file mode 100644 index 00000000..918efaaa --- /dev/null +++ b/src/content/docs/resources/get-involved.mdx @@ -0,0 +1,45 @@ +--- +title: Get involved +--- + +import { LinkOut } from "@interledger/docs-design-system"; + +## Participation + +* Join our Web Monetization Community calls. +* Begin a new discussion or contribute to existing discussions in the WICG Web Monetization GitHub repo. +* Contribute something you’ve built, open a new issue, or contribute to existing issues in the WICG Web Monetization GitHub repo. +* Suggest changes to the specification by submitting a pull request. For more details about spec contributions and development, visit contributing.md. + +## Coding + +* Update the existing Web Monetization v1 [tools/libraries](/developers/libraries/) to the latest spec. +* Create new Web Monetization tools/plugins for frameworks and libraries. +* Build applications with new and varied use cases around Web Monetization. For example, you could: + * Add Web Monetization to your favorite open source project. + * Create tools to allow websites to interact with web monetized visitors. Visual indicators, like celebration confetti, thank you notes, or payment counters are just a few ways to promote interaction. +* Contribute to the ILF’s Web Monetization extension by coding or testing. + +## Community events and hackathons + +* Join us at the Interledger Summit and participate in our annual hackathon. +* Organize your own hackathons, coding sprints, and installa-thons, both online and offline. Run campaigns and encourage participants to develop, collaborate on, and test projects. + +## Localization + +* Translate and localize the site's [Overview](/docs/) into one of the following languages: + * Arabic + * Chinese + * French + * German + * Japanese + * Portuguese + * Spanish +* Review translated and localized content. + +## Documentation + +* Contribute to the docs by suggesting additions and improvements. +* Create tutorials and guides to help others in the community work with Web Monetization. + +Review our contribution guide for details. \ No newline at end of file diff --git a/src/content/docs/resources/glossary.mdx b/src/content/docs/resources/glossary.mdx new file mode 100644 index 00000000..01908a8b --- /dev/null +++ b/src/content/docs/resources/glossary.mdx @@ -0,0 +1,92 @@ +--- +title: Glossary +--- + +import { LinkOut } from "@interledger/docs-design-system"; + +## I + +
+ +### Interledger Foundation (ILF) + +The Interledger Foundation (ILF) is a global nonprofit foundation and steward of the Interledger Protocol, the Open Payments standard, and Web Monetization. + +The ILF offers an open source [Web Monetization browser extension](/supporters/get-started#set-up-the-extension) that showcases a pay-as-you-browse model, allowing you to define how often and how much to pay to web monetized websites. + +## O + +
+ +### Open Payments + +Open Payments is an open standard for implementation by wallet providers. When implemented, third-party applications, like the Web Monetization extension, can set up payments to and from payment accounts. + +Wallet providers who support Open Payments will issue each of their customers' accounts with a unique ID that's either called a wallet address or a payment pointer. + +## P + +
+ +### Payment pointer + +A payment pointer is a secure, unique identifier that's assigned to payment accounts that use Interledger's Simple Payment Setup Protocol (SPSP) to exchange payment information. The shorthand for a payment pointer starts with `$`. For example, `$wallet.example.com/alice`. + +As a supporter of web monetized content, you'll enter your payment pointer into your Web Monetization extension to link the extension to your wallet. + +To web monetize your own content, you must convert your payment pointer to its URL equivalent because the monetization `` element does not support the `$` in the `href` value. Enter your payment pointer into the field provided on paymentpointers.org to get your URL. + +## T + +
+ +### Test network + +

The ILF provides...

+ +### Test wallet + +

The ILF provides...

+ +## W + +
+ +### Wallet address + +A wallet address is a secure, unique identifier that's assigned to payment accounts that use Open Payments to exchange payment information. All wallet addresses are URLs (e.g., `https://wallet.example.com/alice`); however, not all URLs are wallet addresses. + +As a supporter of web monetized content, you'll enter your wallet address into your Web Monetization extension to link the extension to your account. + +To web monetize your own content, you'll add your wallet address as the `href` value within the monetization `` element. + +### Wallet provider + +A digital wallet provider, such as Fynbos or GateHub, that can assign your payment account a payment pointer or a wallet address to enable you to send and/or receive payments using Web Monetization. + +Wallet providers are regulated entities within the countries they operate. + +### Web Monetization agent + +A non-user facing component of a Web Monetization extension or web browser. The purpose of the Web Monetization agent is to: + +* Recognize when an HTML page contains one or more monetization `` elements +* Parse the payment pointer or wallet address in a monetization `` +* Extend the HTML DOM API so that `monetization` is a valid link type +* Instrument payments by calling the Open Payments APIs +* Fire `monetization` events after an outgoing payment request is created +* Process `monetization` events sent to the browser window via the `onmonetization` event handler +* Enable CSP `monetization-src` and Permissions Policy `monetization` directives + +### Web Monetization service provider + +An entity that has: +* Full control over the financial account from which payments will be made +* Ownership of the financial account's associated payment pointer or wallet address +* The ability to grant authorization for payments to be sent from the account + +If you, as an individual, meet the criteria above, then you are acting as your own Web Monetization service provider. + +In some jurisdictions, it may be impossible to obtain your own Web Monetization payment account. If you're unable to obtain your own account for this or any other reason, you may be able to sign up with a third-party Web Monetization service provider. + +A third-party Web Monetization service provider is an entity that meets the above criteria and with whom you enter into a service agreement. In return, the service provider authorizes you to send payments from their account. The service provider retains full control over the account and can grant/revoke your authorization to send from the account at any time. \ No newline at end of file diff --git a/src/content/docs/supporters/about-sending.mdx b/src/content/docs/supporters/about-sending.mdx new file mode 100644 index 00000000..e601b938 --- /dev/null +++ b/src/content/docs/supporters/about-sending.mdx @@ -0,0 +1,58 @@ +--- +title: About sending payments +next: Developer overview +--- + +import { CodeBlock,Tooltip,LinkOut } from "@interledger/docs-design-system"; + +Sending Web Monetization payments requires you to have an account with a compatible digital wallet provider. Not all wallet providers support sending Web Monetization payments. + +Your digital wallet provider will supply you with the financial account you'll use to send payments. Funding your wallet typically requires you to link a card or bank account to your wallet or make a deposit into your wallet. + +Since wallet providers are financial entities, they are regulated within the countries they operate. One regulation, known as KYC (Know Your Customer), requires financial entities to collect your personal information and verify your identity before allowing you to open an account. + +## Web Monetization-compatible digital wallets + +Be sure to sign up with a compatible [digital wallet provider](/wallets) that's available in your region and supports your preferred currency. + +:::tip[Tech tip] +For a wallet to be compatible with Web Monetization, the provider must implement the Open Payments standard. +::: + +Your wallet provider will assign your wallet a unique identifier called a *wallet address* or a *payment pointer*. You'll need this identifier to link the Web Monetization extension to your wallet. + +| Identifier | Example format | +| ------- | -------------- | +| Payment pointer | `$wallet.example.com/alice` | +| Wallet address | `https://wallet.example.com/alice` | + +## Web Monetization extension + +The [Web Monetization extension](/supporters/get-started#1-download-and-install-the-extension) allows you to send payments. It links to your digital wallet account so that it can send payments from your wallet on your behalf. + +When you set up the extension, you set your budget. Your budget is the max amount that the extension has access to. You can also set the amount that the extension will send per hour. The default is $0.60. + +As you browse, the extension checks each page for Web Monetization. When found, the extension grabs the information it needs from the page's code to set up a payment based on your settings. + +You can also choose to send a web monetized page a one-time payment. The amount is deducted from your budget. + +## Payments + +Your Web Monetization extension acts like a messaging service. It requests information from the recipient's wallet provider, then passes the information, along with your payment instructions, to your wallet provider. It's then up to your wallet provider to deduct the payment from your account and [send it to the recipient](/developers/about-receiving). + +### Micropayments + +If you're already familiar with Web Monetization, you may have heard about how it supports micropayments. + +In general, a micropayment is a very small payment. Each wallet provider is responsible for: +* Deciding whether to support sending and/or receiving micropayments +* Defining what a micropayment is in the context of their business +* Determining the minimum amount for a micropayment + +#### Example 1 + +Your wallet provider allows you to send micropayments. They've decided that a micropayment is any payment under $0.05 USD; however, the minimum amount they support is $0.01. This means you could, for example, send a payment as low as one US cent. + +#### Example 2 + +Your wallet provider allows you to send micropayments. They've decided that a micropayment is a fraction of a US cent, with a minimum value of one hundredth of a cent. This means you could, for example, send a payment as low as $0.0001 USD. \ No newline at end of file diff --git a/src/content/docs/docs/intro/web-monetization-extension.mdx b/src/content/docs/supporters/get-started.mdx similarity index 85% rename from src/content/docs/docs/intro/web-monetization-extension.mdx rename to src/content/docs/supporters/get-started.mdx index 9458b19b..00eac302 100644 --- a/src/content/docs/docs/intro/web-monetization-extension.mdx +++ b/src/content/docs/supporters/get-started.mdx @@ -1,28 +1,28 @@ --- -title: Web Monetization extension +title: Get started --- -import { Steps } from '@astrojs/starlight/components'; +import { Steps, Tabs, TabItem } from '@astrojs/starlight/components'; import { LinkOut, StylishHeader } from "@interledger/docs-design-system"; The Interledger Foundation's Web Monetization [browser extension](#1-download-and-install-the-extension) allows you to support your favorite web monetized sites directly from your web browser in a quick, non-intrusive, and privacy-preserving way. Web monetized sites -To use the extension to make Web Monetization payments, the site you visit must be web monetized. Since Web Monetization is fairly new, we encourage content owners and publishers tell their audience they're web monetized via a banner or some other method. +You can only use the extension to send payments to web monetized sites. Since Web Monetization is a newer technology, the ILF encourages content owners and publishers tell their audience they're web monetized via a banner or some other method. -If you're interested in web monetizing your own content, the [Add Web Monetization to a page](/docs/guides/monetize-page) guide is a good place to start. +If you're interested in web monetizing your own content, the [get started](/developers/get-started) page for developers is a good place to start. Web Monetization payments -To make Web Monetization payments, you only need a digital wallet from a Web Monetization-compatible [wallet provider](/docs/resources/op-wallets). There's no site-by-site account or subscription required for each individual site you want to support. +To make Web Monetization payments, you only need a digital wallet from a Web Monetization-compatible [wallet provider](/wallets). There's no site-by-site account or subscription required for each individual site you want to support. -A web monetized site cannot initiate payments from your digital wallet. When you link the browser extension to your digital wallet, you're giving the extension permission to send payments on your behalf. These payments are automatically and continuously sent to each web monetized site you visit. You can also globally [disable continuous payments](#change-your-continuous-payment-settings). +A web monetized site cannot pull payments from your digital wallet. When you link the browser extension to your digital wallet, you're giving the extension permission to send payments on your behalf. These payments are automatically and continuously sent to each web monetized site you visit. You can also globally [disable continuous payments](#change-your-continuous-payment-settings). The sites you pay are not provided with any of your personally identifiable information, such as your name, email address, or IP address. :::note -Sending a payment to a web monetized site does not guarantee an ad-free experience. The decision to show or hide ads in response to a Web Monetization payment is entirely up to each content owner or publisher. +Sending a payment to a web monetized site doesn't guarantee an ad-free experience. The decision to show or hide ads in response to a Web Monetization payment is entirely up to each content owner or publisher. ::: ## Set up the extension @@ -36,18 +36,27 @@ The extension is currently supported in the following browsers. We plan to suppo * Microsoft Edge :::note[Permissions] -The extension will ask for permission to access your browser tabs and your data for all websites. The extension requires these permissions to check each page you visit for the Web Monetization [``](/docs/references/html-link-rel-monetization) element. +The extension will ask for permission to access your browser tabs and your data for all websites. The extension requires these permissions to check each page you visit for the Web Monetization [``](/developers/link-element) element. ::: ### 2. Sign up with a compatible digital wallet -Sign up with a Web Monetization-compatible [wallet provider](/docs/resources/op-wallets). +Sign up with a Web Monetization-compatible [wallet provider](/wallets). -After you've created your digital wallet, you'll be provided with a type of URL called a *wallet address*. You need this address in the next step. +After you've created your digital wallet, you'll be provided with a type of URL called a *wallet address* or *payment pointer*. You need this address in the next step. -```html title="Example wallet address" -https://wallet.example.com/alice -``` + + + ``` + https://wallet.example.com/alice + ``` + + + ``` + $wallet.example.com/alice + ``` + + ### 3. Configure the extension @@ -161,7 +170,7 @@ When this happens, you must copy the key that appears in the extension and manua Interledger Wallet -Follow these steps if your wallet provider is [Interledger wallet](https://interledger.app). +Follow these steps if your wallet provider is Interledger wallet. 1. Sign in to your Interledger Wallet. @@ -210,5 +219,8 @@ Click **Connect** and try linking your extension again. I know the page I'm visiting is web monetized, but the extension says its not. Why? The most likely reason is that your wallet provider and the content owner or publisher's wallet provider are not yet able to transact with one another. Your extension will display an exclamation mark within an orange circle. Open the extension to read the messaging. -Visit the [Web Monetization-enabled wallets](/docs/resources/op-wallets) page for a list of compatible wallet providers. - \ No newline at end of file +Visit the [Web Monetization-enabled wallets](/wallets) page for a list of compatible wallet providers. + + + + diff --git a/src/content/docs/supporters/overview.mdx b/src/content/docs/supporters/overview.mdx new file mode 100644 index 00000000..f648055b --- /dev/null +++ b/src/content/docs/supporters/overview.mdx @@ -0,0 +1,55 @@ +--- +title: Overview +tableOfContents: + maxHeadingLevel: 2 +--- + +import { LinkOut } from '@interledger/docs-design-system' + +

Need overview specific to users

+ +* support web monetized content owners and publishers +* support/contribute/give/say thank you/token or sign of appreciation/express your gratitude +* privacy preserving, non-intrusive; no sharing with the platform/owners/publishers +* no site by site subscriptions + +"Why not just use Venmo?" + +## Benefits + +### Control who, when, and how much to pay. + +All payments to web monetized sites must be explicitly authorized or pre-authorized by you. Sites cannot pull payments from your payment account under any circumstance. + +### Your payments are private. + +Web Monetization does not provide the recipient with personally identifiable information such as your name, wallet address/payment pointer, IP address, or anything else the recipient could use to correlate a payment with you. + +### You choose your wallet provider. + +Some solutions require you to sign up for a particular application, platform, or service provider to support your favorite content. As long as your chosen wallet provider is compatible with Web Monetization, you can send payments to any web monetized sites. + +### Your payment details are stored with your wallet. + +Part of setting up the Web Monetization extension involves linking the extension to your wallet. This link allows the extension to communicate with your wallet without storing sensitive payment details in the extension or in the browser itself. + +### Web Monetization is not tied to a specific currency. + +Part of choosing a compatible digital wallet is selecting one that allows you to pay in your preferred currency. When you send a payment, the recipient will receive it in the currency they selected when signing up with their compatible wallet provider. + +### There's no separate Web Monetization account(s). + +The only account you need is the one you create with your wallet provider. You don't have to create separate accounts for each website you want to pay. + +## Constraints + +### Web Monetization is not an ad blocker. + +Sending a payment to a web monetized site does not guarantee an ad-free experience. Web Monetization provides publishers an alternative +revenue model to ads, but the decision to not load ads in response to a payment is entirely theirs. + +### The network of Web Monetization-enabled wallet providers is nascent, but growing. + +Sending and receiving payments via Web Monetization requires the sender and the recipient to have an account with a Web Monetization-enabled wallet provider. + +In general, wallet providers are regulated entities within the countries they operate. Obtaining the proper licensing and registration to become a wallet provider can be an expensive, complex, and time consuming process. In addition, there are technical integrations required to support Web Monetization. All of this means a compatible wallet provider may not yet be available in your area. \ No newline at end of file diff --git a/src/content/docs/tutorials/contribution-counter.mdx b/src/content/docs/tutorials/contribution-counter.mdx new file mode 100644 index 00000000..4df52313 --- /dev/null +++ b/src/content/docs/tutorials/contribution-counter.mdx @@ -0,0 +1,128 @@ +--- +title: Show visitors how much they've contributed +--- + +import Wallet from "/src/partials/wallet-prereq.mdx"; +import Disclaimer from "/src/partials/glitch.mdx"; + +This guide describes how to display a counter on your page to show your visitors how much they've contributed while on the page during their current browsing session. The counter updates in real time and reflects both time-based payments (e.g., X amount per minute) and one-time payments. + +### Before you begin + + + +## User experience + +For visitors without Web Monetization, the counter will show 0.00. + +For visitors with Web Monetization, the counter will update based on the amount sent during the current browsing session. The counter resets to 0.00 when your visitor: + +* Closes the tab, browser window, or browser. +* Clicks a link or performs some other action that redirects the visitor to another page. This includes navigating backward or forward. +* Refreshes the page. + +## Example + +This example illustrates how to use the `monetization` event to show a web monetized visitor how much they've sent in USD. + +### The code + +```html wrap + + + + + + + + +

+ Thanks for contributing + 0.00 USD + +

+ +``` + +### How it works + +We’ll bind the `monetization` event if the visitor is web monetized (`window.MonetizationEvent` is defined). + +The `monetization` event contains details about the payments that occur. The `amountSent` attribute of the event returns the amount (`value`) and `currency` code of the sent payment. A currency code is a three-letter code, like USD, EUR, or GBP. + +```javascript {1,6} + if (window.MonetizationEvent) { + const link = document.querySelector('link[rel="monetization"]'); + + link.addEventListener("monetization", (event) => { + const { + amountSent: { value, currency }, + } = event; + console.log(`Browser sent ${currency} ${value}.`); +``` + +The `currency` code is set on the visitor's first payment and doesn’t change. The code represents the sender's currency which may be different from the currency you receive (depending on the currency you chose when setting up your wallet account). + +```javascript +// initialize currency on first progress event +if (total === 0) { + document.getElementById('currency').innerText = currency +} +``` + +The amount in `value` is an integer, which we add to the total. + +```javascript +total += Number(value) +``` + +Lastly, we tell the text on your page to update with the new total. The total should be in a human-readable format, so we need to convert the number to a string and round it to a specified number of decimals. This example uses `9`. + +```javascript +document.getElementById('total').innerText = total.toFixed(9) +``` + +The formatted version of the amount gets written to the `total` span on the page. + +```html {4} + +

+ Thanks for contributing + 0.00 USD + +

+ +``` + +### Interactive example + +This example simulates showing a visitor how much they've sent you based off how long they remain on your web monetized page. + + + + \ No newline at end of file diff --git a/src/content/docs/tutorials/remove-content.mdx b/src/content/docs/tutorials/remove-content.mdx new file mode 100644 index 00000000..cea53273 --- /dev/null +++ b/src/content/docs/tutorials/remove-content.mdx @@ -0,0 +1,134 @@ +--- +title: Remove content for paying visitors +--- + +import Wallet from "/src/partials/wallet-prereq.mdx"; +import Disclaimer from "/src/partials/glitch.mdx"; + +This guide describes one way you can remove content for paying visitors after the `monetization` event fires. The event only fires after an outgoing payment request is successfully created. If the event doesn't fire, then the content remains visible on your page. + +### Before you begin + + + +## User experience + +For visitors without Web Monetization, your content appears as soon as your page loads. + +For visitors with Web Monetization, there's a three-second grace period before your content appears. This gives Web Monetization a chance to initialize and prevents the content from briefly appearing to paying visitors. + +**If Web Monetization:** + +* Initializes within the grace period, the content is hidden +* Fails to initialize within the grace period, the content is shown +* Initializes any time after the grace period, the content is hidden + +## Example use case: Remove ads + +In this example, you'll give your paying visitors an ad-free experience by preventing the ad from loading on the page once Web Monetization initializes. + +Assuming Web Monetization initializes within the grace period, neither the ad nor any related images and/or trackers (which aren't part of this example) are loaded onto the page at all. + +### The code + +```html wrap + + + + + + + + + + Here's where your site's content will go! + +``` + +### How it works + +Let’s start with the code for showing your ad. + +```javascript wrap +const adCode = + '
Ad! Buy product A! Ad!
' +function showAds() { + document.getElementById('ad').innerHTML = adCode +} +``` + +We'll bind the `monetization` event to its respective event handler if the visitor is web monetized. This prevents the ad from loading on the page once Web Monetization initializes. Assuming it initializes within the grace period, the ad isn’t added to the page at all. This means any related images and trackers aren’t loaded either. + +The `hasPaid` variable in the timer is for when/if Web Monetization starts after the grace period. + +```javascript {1} +let hasPaid = false +if (window.MonetizationEvent) { + const link = document.querySelector('link[rel="monetization"]') + link.addEventListener('monetization', () => { + hasPaid = true + removeAds() + }) +} +``` + +As soon as the page loads, the ad will immediately appear to any visitor who isn’t web monetized. This is handled via `!window.MonetizationEvent`, shown below. + +```javascript {2} +window.addEventListener('load', () => { + if (!window.MonetizationEvent) { + showAds() + } else { + setTimeout(() => { + if (!hasPaid) { + showAds() + } + }, 3000) + } +}) +``` + +If the visitor has Web Monetization in their browser, then the `monetization` event must fire within 3 seconds (3000ms) to indicate that Web Monetization has initialized. If it doesn’t initialize by the timeout, the ad is shown to the visitor. + +### Interactive example + +This example simulates showing and hiding an ad based on a visitor’s Web Monetization state. + + + + \ No newline at end of file diff --git a/src/content/docs/tutorials/revenue-sharing.mdx b/src/content/docs/tutorials/revenue-sharing.mdx new file mode 100644 index 00000000..35e8cc48 --- /dev/null +++ b/src/content/docs/tutorials/revenue-sharing.mdx @@ -0,0 +1,89 @@ +--- +title: Set up probabilistic revenue sharing +--- + +import { LinkOut } from "@interledger/docs-design-system"; +import Wallet from "/src/partials/wallet-prereq.mdx"; +import Disclaimer from "/src/partials/glitch.mdx"; + +Probabilistic revenue sharing is a way for a monetized page's total revenue to be split between multiple wallet addresses/payment pointers based on the probability of one address being chosen over the others on each page load. + +Why take this approach? First, the monetization `` element itself only supports one URL as the `href` value. Second, although your page can contain multiple monetization links, there are a [few reasons](/experiment/link-element#multiple-monetization-links) why some of the links might not be monetized. + +Probabilistic revenue sharing works by choosing from a list of predefined wallet addresses/payment pointers in URL format each time a web monetized visitor loads your page. Payments are sent to the chosen address until the visitor reloads or closes the page. + +The chance of and address being chosen is based on its assigned weight. For example, if Alice’s address has a weight of 50 (out of 100), then her address has a 50% chance of being chosen. The laws of probability state that Alice’s share of the page’s total revenue will approach 50% as more web monetized visitors access the page. + +This guide presents two ways in which to set up probabilistic revenue sharing. The first is by adding a [script](#example-dev-scenario-use-a-script) to your page. If you'd prefer to not use a script, you can use our [generator](#example-dev-scenario-use-the-probabilistic-revshare-generator). + +### Before you begin + + + +## User experience + +Probabilistic revenue sharing does not affect the user experience for your web monetized visitors. + +## Example dev scenario: Use a script + +In this scenario, you'll set up probabilistic revenue sharing via a script. For simplicity, the total amount of the assigned weights equal 100. + +### The code + +```html wrap + + + +``` + +### Interactive example + +This example shows how the random choices will approach the correct percentages over enough tries. You can customize the number of times to randomly choose a pointer and it will show you the results. + +The example doesn’t require you to have Web Monetization enabled in your browser and no real payments are occurring. + +If source files appear instead of the example, click **View App** in the bottom-right corner. + + + +## Example dev scenario: Use the Probabilistic Revshare Generator + +As an alternative to including a script in your page, you can use our Probabilistic Revshare Generator. + +Follow the instructions on the page to generate a monetization `` element that contains a unique URL hosted on `webmonetization.org`. Then, include monetization link on each page you want to web monetize. \ No newline at end of file diff --git a/src/content/docs/tutorials/show-content.mdx b/src/content/docs/tutorials/show-content.mdx new file mode 100644 index 00000000..add68d27 --- /dev/null +++ b/src/content/docs/tutorials/show-content.mdx @@ -0,0 +1,206 @@ +--- +title: Show content to paying visitors +--- + +import Wallet from "/src/partials/wallet-prereq.mdx"; +import Disclaimer from "/src/partials/glitch.mdx"; + +This guide describes one way you can show otherwise hidden content to paying visitors after the `monetization` event fires. The event only fires after an outgoing payment request is successfully created. If the event doesn't fire, then the content remains hidden on your page. + +### Before you begin + + + +## User experience + +For visitors without Web Monetization, your content is always hidden. + +For visitors with Web Monetization, your content appears; however, there's a three-second grace period. This gives Web Monetization a chance to initialize. + +**If Web Monetization:** + +* Initializes within the grace period, the content remains visible +* Fails to initialize within the grace period, the content is hidden +* Initializes any time after the grace period, the hidden content becomes visible + +## Example use case: Show exclusive content + +In this example, you'll give your paying visitors access to exclusive content. + +### The code + +```html wrap + + + + + + + + + + +

Content will appear below here for web monetized visitors.

+
+ + +``` + +### How it works + +First, we'll check whether Web Monetization is supported. We do this by calling `supports()` on a link element’s `relList` and passing `"monetization"` as a parameter. If this check doesn’t exist, we can’t listen for the `monetization` event to tell us when Web Monetization initializes. + +```javascript +const link = document.querySelector('link[rel="monetization"]') +if (link.relList.supports('monetization')) { +``` + +Next, we'll add an event listener to the `link` element. The `monetization` event emits when Web Monetization initializes. + +```javascript +link.addEventListener('monetization', (ev) => { +``` + +Finally, we'll select the exclusive content element we want to make available to web monetized visitors. Since we defined a CSS class to hide the content, removing the class will make the content appear. + +```javascript +document.getElementById('exclusive').classList.remove('hidden') +``` + +### Interactive example + +This example simulates showing and hiding exclusive content based on a visitor’s Web Monetization state. + + + + + +## Example use case: Show an indicator and exclusive content + +In this example, you'll not only give your paying visitors access to exclusive content, but also: + +* Show web monetized visitors an indicator while they wait for Web Monetization to initialize +* Tell non-web monetized visitors that there’s exclusive content they’re missing out on + +### The code + +This example contains three states: + +* A call-to-action for non-web monetized visitors +* A loading message for web monetized visitors +* Exclusive content for web monetized visitors + +```html wrap + + + + + + + + + + + + + +

This is content that everyone can see.

+ +``` + +### How it works + +There are three functions to activate the three states: + +* `showLoading` displays the loading message +* `showCTA` displays the call-to-action for non-web monetized users +* `showExclusiveContent` displays exclusive content to web monetized users + +When the page loads, we’ll check whether the visitor is web monetized. + +```javascript +window.addEventListener('load', () => { + if (!window.MonetizationEvent) { +``` + +The loading message will appear to web monetized visitors and the CTA will appear to everyone else. + +```javascript +if (!window.MonetizationEvent) { + showCTA() +} else { + showLoading() +} +``` + +If the visitor is web monetized, we’ll listen for the `monetization` event that occurs when an outgoing payment request is successfully created. If the event fires, the exclusive content will appear (`
`) and the other divs will be hidden (`
` and `
`) + +```javascript +if (window.MonetizationEvent) { + const link = document.querySelector('link[rel="monetization"]') + link.addEventListener('monetization', (ev) => { + showExclusiveContent() +``` + +### Interactive example + +This example simulates hiding and showing exclusive content based on a visitor’s Web Monetization state. Web monetized visitors will see exclusive content while non-web monetized users will not. Conversely, non-web monetized users will see the message, “Please install a Web Monetization extension to support me!“. + + + + diff --git a/src/content/docs/tutorials/test-web-monetization.mdx b/src/content/docs/tutorials/test-web-monetization.mdx new file mode 100644 index 00000000..5ed80bf1 --- /dev/null +++ b/src/content/docs/tutorials/test-web-monetization.mdx @@ -0,0 +1,7 @@ +--- +title: Test Web Monetization +--- + +To do + +step-by-step directions for creating an account on the Interledger test network and setting up your test wallet \ No newline at end of file diff --git a/src/content/docs/wallets.mdx b/src/content/docs/wallets.mdx new file mode 100644 index 00000000..6153d018 --- /dev/null +++ b/src/content/docs/wallets.mdx @@ -0,0 +1,24 @@ +--- +title: Web Monetization-compatible wallets +tableOfContents: false +--- + +import { LinkOut } from "@interledger/docs-design-system"; + +The following providers offer Web Monetization-compatible digital wallets. You must have a wallet address or payment pointer from a compatible wallet to send and receive payments. + +Be sure to select a wallet that's available in your **region** and supports your preferred **currency**. + +## Wallet providers + +| Provider | Payment Address Label | Available In | +| --------------- | --------------- | ----------- | +| Interledger Wallet | Wallet address | USA, EU, Canada, South Africa | +| Fynbos | Wallet address | USA, EU, Canada, South Africa | +| GateHub | Payment pointer | x | + +## Interledger test wallet + +The Interledger test wallet provides a great way to test Web Monetization without using real money. The test wallet is an open-source application developed and maintained by the [Interledger Foundation](https://interledger.org). + +The [Test Web Monetization](/tutorials/test-web-monetization) page gives step-by-step directions for creating an account on the Interledger test network and setting up your test wallet. \ No newline at end of file diff --git a/src/pages/prob-revshare.astro b/src/pages/prob-revshare.astro index 4a626ed6..9bed476f 100644 --- a/src/pages/prob-revshare.astro +++ b/src/pages/prob-revshare.astro @@ -13,11 +13,11 @@ const description = t("site.description");

Probabilistic Revshare Generator

Probabilistic revenue sharing (revshare) is one way to share a portion of a web monetized page’s earnings between multiple payment pointers.

-

Use this tool to define a list of payment pointers and their weights. Then, add the generated monetization link element to your site. The link will contain a unique URL hosted on https://webmonetization.org/api/revshare/pay/. If you'd prefer to not use a hosted URL, you can set up revshare by adding a script to your site.

+

Use this tool to define a list of payment pointers and their weights. Then, add the generated monetization link element to your site. The link will contain a unique URL hosted on https://webmonetization.org/api/revshare/pay/. If you'd prefer to not use a hosted URL, you can set up revshare by adding a script to your site.

Define a new revshare

Enter each payment pointer that will receive a split of the revenue into the table below. Names are optional. Click Add Share to add more rows.

You can adjust by percent after two payment pointers are added to the table. Updating one field will update the remaining fields automatically.

-

As you adjust weights and percentages, the link element generated below will change. Don’t copy the link until you’re finished. Then, add the link to your site.

+

As you adjust weights and percentages, the link element generated below will change. Don’t copy the link until you’re finished. Then, add the link to your site.

diff --git a/src/partials/glitch.mdx b/src/partials/glitch.mdx new file mode 100644 index 00000000..0aa3fbf1 --- /dev/null +++ b/src/partials/glitch.mdx @@ -0,0 +1,3 @@ +The example doesn’t require you to have Web Monetization enabled in your browser and no real payments are occurring. + +Click **View as web monetized/non-web monetized visitor** to toggle your monetization state. If source files appear instead of the example, click **View App** in the bottom-right corner. \ No newline at end of file diff --git a/src/partials/wallet-prereq.mdx b/src/partials/wallet-prereq.mdx new file mode 100644 index 00000000..a7a8e329 --- /dev/null +++ b/src/partials/wallet-prereq.mdx @@ -0,0 +1,2 @@ +- You must have a wallet address or payment pointer assigned to you by your [wallet provider](/wallets). +- Each page you want to monetize must be served over HTTPS. \ No newline at end of file From 6d212efe06c94a2d26239bc4ce413e1f556f184a Mon Sep 17 00:00:00 2001 From: Melissa Henderson <57110301+melissahenderson@users.noreply.github.com> Date: Tue, 28 Jan 2025 15:35:13 -0500 Subject: [PATCH 2/5] docs: fix broken link --- src/content/docs/tutorials/revenue-sharing.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/docs/tutorials/revenue-sharing.mdx b/src/content/docs/tutorials/revenue-sharing.mdx index 35e8cc48..70c24a52 100644 --- a/src/content/docs/tutorials/revenue-sharing.mdx +++ b/src/content/docs/tutorials/revenue-sharing.mdx @@ -8,7 +8,7 @@ import Disclaimer from "/src/partials/glitch.mdx"; Probabilistic revenue sharing is a way for a monetized page's total revenue to be split between multiple wallet addresses/payment pointers based on the probability of one address being chosen over the others on each page load. -Why take this approach? First, the monetization `` element itself only supports one URL as the `href` value. Second, although your page can contain multiple monetization links, there are a [few reasons](/experiment/link-element#multiple-monetization-links) why some of the links might not be monetized. +Why take this approach? First, the monetization `` element itself only supports one URL as the `href` value. Second, although your page can contain multiple monetization links, there are a [few reasons](/developers/link-element#multiple-monetization-links) why some of the links might not be monetized. Probabilistic revenue sharing works by choosing from a list of predefined wallet addresses/payment pointers in URL format each time a web monetized visitor loads your page. Payments are sent to the chosen address until the visitor reloads or closes the page. From 6ac5864ce64bd52879cb2768c3980c9ac8e95a0c Mon Sep 17 00:00:00 2001 From: Melissa Henderson <57110301+melissahenderson@users.noreply.github.com> Date: Wed, 29 Jan 2025 11:54:21 -0500 Subject: [PATCH 3/5] docs: glossary and testing updates --- src/content/docs/resources/glossary.mdx | 30 +++++------ .../docs/tutorials/test-web-monetization.mdx | 52 ++++++++++++++++++- 2 files changed, 65 insertions(+), 17 deletions(-) diff --git a/src/content/docs/resources/glossary.mdx b/src/content/docs/resources/glossary.mdx index 01908a8b..aca173d4 100644 --- a/src/content/docs/resources/glossary.mdx +++ b/src/content/docs/resources/glossary.mdx @@ -20,7 +20,7 @@ The ILF offers an open source [Web Monetization browser extension](/supporters/g ### Open Payments -Open Payments is an open standard for implementation by wallet providers. When implemented, third-party applications, like the Web Monetization extension, can set up payments to and from payment accounts. +Open Payments is an open standard for implementation by wallet providers. When implemented, third-party applications, like the Web Monetization extension, can set up payments to and from users' wallet accounts. Wallet providers who support Open Payments will issue each of their customers' accounts with a unique ID that's either called a wallet address or a payment pointer. @@ -32,21 +32,19 @@ Wallet providers who support Open Payments will issue each of their customers' a A payment pointer is a secure, unique identifier that's assigned to payment accounts that use Interledger's Simple Payment Setup Protocol (SPSP) to exchange payment information. The shorthand for a payment pointer starts with `$`. For example, `$wallet.example.com/alice`. -As a supporter of web monetized content, you'll enter your payment pointer into your Web Monetization extension to link the extension to your wallet. +As a consumer of web monetized content, you'll enter your payment pointer into your Web Monetization extension to link the extension to your wallet. -To web monetize your own content, you must convert your payment pointer to its URL equivalent because the monetization `` element does not support the `$` in the `href` value. Enter your payment pointer into the field provided on paymentpointers.org to get your URL. +To web monetize your own content, you must convert your payment pointer to its URL equivalent as the monetization `` element does not support the `$` in the `href` value. Enter your payment pointer into the field provided on paymentpointers.org to get your URL. ## T
-### Test network - -

The ILF provides...

- ### Test wallet -

The ILF provides...

+The test wallet is a wallet application provided by the ILF that lets you experiment with Web Monetization without using real money. You'll go through a typical Know Your Customer (KYC) sign-up flow, fund an account with play money, and get a payment pointer. + +Review the [Test Web Monetization](/tutorials/test-web-monetization) tutorial to learn more about sending and receiving payments through the test wallet. Go to wallet.interledger-test.dev to sign up for an account. ## W @@ -56,19 +54,21 @@ To web monetize your own content, you must convert your payment pointer to its U A wallet address is a secure, unique identifier that's assigned to payment accounts that use Open Payments to exchange payment information. All wallet addresses are URLs (e.g., `https://wallet.example.com/alice`); however, not all URLs are wallet addresses. -As a supporter of web monetized content, you'll enter your wallet address into your Web Monetization extension to link the extension to your account. +As a consumer of web monetized content, you'll enter your wallet address into your Web Monetization extension to link the extension to your account. To web monetize your own content, you'll add your wallet address as the `href` value within the monetization `` element. ### Wallet provider -A digital wallet provider, such as Fynbos or GateHub, that can assign your payment account a payment pointer or a wallet address to enable you to send and/or receive payments using Web Monetization. +A digital wallet provider is an entity that supplies you with the financial account you'll use to send or receive payments. + +Not all wallet providers support Web Monetization payments. A provider must implement the Open Payments standard and be able to assign your account a payment pointer or wallet address for you to use the account for Web Monetization. -Wallet providers are regulated entities within the countries they operate. +Wallet providers are regulated within the countries they operate and are often required by law to collect certain personal information and verify your identity before allowing you to open an account. ### Web Monetization agent -A non-user facing component of a Web Monetization extension or web browser. The purpose of the Web Monetization agent is to: +A Web Monetization agent is a non-user facing component of a Web Monetization extension or web browser. The purpose of the Web Monetization agent is to: * Recognize when an HTML page contains one or more monetization `` elements * Parse the payment pointer or wallet address in a monetization `` @@ -80,13 +80,13 @@ A non-user facing component of a Web Monetization extension or web browser. The ### Web Monetization service provider -An entity that has: +A Web Monetization service provider is an entity that has: * Full control over the financial account from which payments will be made * Ownership of the financial account's associated payment pointer or wallet address * The ability to grant authorization for payments to be sent from the account If you, as an individual, meet the criteria above, then you are acting as your own Web Monetization service provider. -In some jurisdictions, it may be impossible to obtain your own Web Monetization payment account. If you're unable to obtain your own account for this or any other reason, you may be able to sign up with a third-party Web Monetization service provider. +In some jurisdictions, it may be impossible to get an account with a Web Monetization-compatible wallet provider. If you're unable to get a wallet account for this or any other reason, you may be able to sign up with a third-party Web Monetization service provider. -A third-party Web Monetization service provider is an entity that meets the above criteria and with whom you enter into a service agreement. In return, the service provider authorizes you to send payments from their account. The service provider retains full control over the account and can grant/revoke your authorization to send from the account at any time. \ No newline at end of file +A third-party Web Monetization service provider is an entity that meets the criteria above and with whom you enter into a service agreement. In return, the service provider authorizes you to send payments from their account. The service provider retains full control over the account and can grant/revoke your authorization to send from the account at any time. \ No newline at end of file diff --git a/src/content/docs/tutorials/test-web-monetization.mdx b/src/content/docs/tutorials/test-web-monetization.mdx index 5ed80bf1..6b91c967 100644 --- a/src/content/docs/tutorials/test-web-monetization.mdx +++ b/src/content/docs/tutorials/test-web-monetization.mdx @@ -2,6 +2,54 @@ title: Test Web Monetization --- -To do +import { Steps } from '@astrojs/starlight/components'; +import { LinkOut } from "@interledger/docs-design-system"; + +By signing up for the ILF's test wallet, you can send and receive Web Monetization payments without using real money. + +The test wallet allows you to go through a mock Know Your Customer (KYC) sign up flow, create a payment account, add a payment pointer, and fund the account. + +## Sign up for a test wallet account + +### Create an account + + +1. Go to wallet.interledger-test.dev and click **Create account**. +2. Enter your email address and a password, then click the arrowhead. A verification email will be sent to you. +3. Click **Confirm my email address** within the verification email. +4. Log in to your newly created account and complete the KYC and liveness checks. + + +### Complete KYC and liveness checks + +As you go through KYC, the only real information you need to share is your email address and phone number. We ask for your phone number in case we need to send you a verification code. + +All other information, including identity documentation, can be fake. If you're asked to upload a photo, it can be of anything as long as it's not blank. A face scan may also be required but is not used by the test wallet in any way. + +:::note[Why are there so many steps?] +The Interledger test wallet runs on a GateHub pre-production environment. This environment mimics their live production environment, including the KYC steps. +::: + +## Set up your account for Web Monetization + + +1. Select **New Account** on the Test Wallet dashboard. +2. Enter any account name, select any asset (currency), then click **Create account**. +3. Click **Close**, then select your new account from the dashboard. +4. Select **Add payment pointer**, then enter a payment pointer name and public name of your choosing. +5. Click **Create**. Your payment pointer should show within the _Payment Pointers_ section. +6. Click **Deposit**. Enter an amount of **1,000 or less**. + :::caution + Deposit amounts greater than 1,000 require manual approval, which may take up to 24 hours. + ::: + + +You're ready to start testing Web Monetization after your deposit appears in your account. + +## Test sending payments + + + +## Test receiving payments + -step-by-step directions for creating an account on the Interledger test network and setting up your test wallet \ No newline at end of file From 6f0c20f8cdf549555af400516bca06c736962a7c Mon Sep 17 00:00:00 2001 From: Melissa Henderson <57110301+melissahenderson@users.noreply.github.com> Date: Thu, 30 Jan 2025 10:51:37 -0500 Subject: [PATCH 4/5] added jeremiah's docs Also ran prettier which was a huge mistake. Still need to work out the sidenav order and change the collapse values. --- astro.config.mjs | 116 ++++++----- public/ns.jsonld | 9 + src/content.config.ts | 2 +- .../docs/developers/about-receiving.mdx | 128 ++++++------ .../docs/developers/activity-streams.mdx | 117 +++++++++++ src/content/docs/developers/csp.mdx | 22 +- src/content/docs/developers/events.mdx | 44 ++-- src/content/docs/developers/get-started.mdx | 28 ++- src/content/docs/developers/interfaces.mdx | 26 ++- src/content/docs/developers/link-element.mdx | 60 +++--- src/content/docs/developers/overview.mdx | 8 +- .../docs/developers/permissions-policy.mdx | 16 +- .../docs/developers/rss-atom-jsonfeed.mdx | 193 ++++++++++++++++++ src/content/docs/docs.mdx | 4 +- src/content/docs/resources/get-involved.mdx | 48 ++--- src/content/docs/resources/glossary.mdx | 50 ++--- src/content/docs/supporters/about-sending.mdx | 31 +-- src/content/docs/supporters/get-started.mdx | 178 +++++++--------- src/content/docs/supporters/overview.mdx | 16 +- .../docs/tutorials/contribution-counter.mdx | 20 +- src/content/docs/tutorials/remove-content.mdx | 14 +- .../docs/tutorials/revenue-sharing.mdx | 14 +- src/content/docs/tutorials/show-content.mdx | 26 +-- .../docs/tutorials/test-web-monetization.mdx | 44 ++-- src/content/docs/wallets.mdx | 19 +- .../specification/specification-respec.html | 6 +- src/partials/glitch.mdx | 2 +- src/partials/wallet-prereq.mdx | 4 +- 28 files changed, 779 insertions(+), 466 deletions(-) create mode 100644 public/ns.jsonld create mode 100644 src/content/docs/developers/activity-streams.mdx create mode 100644 src/content/docs/developers/rss-atom-jsonfeed.mdx diff --git a/astro.config.mjs b/astro.config.mjs index 100a3dbb..d07d6444 100644 --- a/astro.config.mjs +++ b/astro.config.mjs @@ -19,9 +19,9 @@ export default defineConfig({ defer: true, 'data-website-id': '3b8cb97a-2a94-43c2-85e7-277c92c9cf48', src: 'https://ilf-site-analytics.netlify.app/script.js', - 'data-domains': 'webmonetization.org' - } - } + 'data-domains': 'webmonetization.org', + }, + }, ], customCss: [ './node_modules/@interledger/docs-design-system/src/styles/teal-theme.css', @@ -76,22 +76,28 @@ export default defineConfig({ }, ], }, + { + label: 'For content owners', + collapsed: false, + items: [ + { + label: 'Overview', + link: '/developers/overview', + }, + { + label: 'Get started', + link: '/developers/get-started', + }, + { + label: 'Learn about receiving payments', + link: '/developers/about-receiving', + }, + ], + }, { label: 'For developers', collapsed: false, items: [ - { - label: 'Overview', - link: '/developers/overview', - }, - { - label: 'Get started', - link: '/developers/get-started', - }, - { - label: 'Learn about receiving payments', - link: '/developers/about-receiving', - }, { label: 'Tutorials', collapsed: true, @@ -105,7 +111,7 @@ export default defineConfig({ link: '/tutorials/remove-content', }, { - label: 'Show visitors how much they\'ve contributed', + label: "Show visitors how much they've contributed", link: '/tutorials/contribution-counter', }, { @@ -126,51 +132,59 @@ export default defineConfig({ label: 'API docs', collapsed: true, items: [ + { + label: 'HTML DOM API', + collapsed: false, + items: [ { - label: 'HTML DOM API', - collapsed: false, - items: [ - { - label: 'Monetization element', - link: '/developers/link-element', - }, - ], + label: 'Monetization element', + link: '/developers/link-element', }, + ], + }, + { + label: 'Web Monetization API', + collapsed: false, + items: [ { - label: 'Web Monetization API', - collapsed: false, - items: [ - { - label: 'Monetization interfaces', - link: '/developers/interfaces', - }, - { - label: 'Monetization events', - link: '/developers/events', - }, - ], + label: 'Monetization interfaces', + link: '/developers/interfaces', }, { - label: 'HTTP Headers', - collapsed: true, - items: [ - { - label: 'Content Security Policy (CSP)', - link: '/developers/csp', - }, - { - label: 'Permissions Policy', - link: '/developers/permissions-policy', - }, - ], + label: 'Monetization events', + link: '/developers/events', + }, + ], + }, + { + label: 'HTTP Headers', + collapsed: true, + items: [ + { + label: 'Content Security Policy (CSP)', + link: '/developers/csp', }, { - label: 'Web Monetization Specification', - link: 'https://webmonetization.org/specification/', - attrs: { target: '_blank', }, + label: 'Permissions Policy', + link: '/developers/permissions-policy', }, + ], + }, ], }, + { + label: 'Feed (RSS, Atom, JSON Feed)', + link: '/developers/rss-atom-jsonfeed', + }, + { + label: 'Social (Activity Streams)', + link: '/developers/activity-streams', + }, + { + label: 'Web Monetization Specification', + link: 'https://webmonetization.org/specification/', + attrs: { target: '_blank' }, + }, ], }, { diff --git a/public/ns.jsonld b/public/ns.jsonld new file mode 100644 index 00000000..215e6fb0 --- /dev/null +++ b/public/ns.jsonld @@ -0,0 +1,9 @@ +{ + "@context": { + "wm": "https://webmonetization.org/ns#", + "monetization": { + "@id": "wm:monetization", + "@type": "@id" + } + } +} \ No newline at end of file diff --git a/src/content.config.ts b/src/content.config.ts index 76002a67..5ef6dfdf 100644 --- a/src/content.config.ts +++ b/src/content.config.ts @@ -4,5 +4,5 @@ import { docsSchema, i18nSchema } from '@astrojs/starlight/schema' export const collections = { docs: defineCollection({ loader: docsLoader(), schema: docsSchema() }), - i18n: defineCollection({ type: 'data', schema: i18nSchema() }) + i18n: defineCollection({ type: 'data', schema: i18nSchema() }), } diff --git a/src/content/docs/developers/about-receiving.mdx b/src/content/docs/developers/about-receiving.mdx index 8a1faa6c..bafa5736 100644 --- a/src/content/docs/developers/about-receiving.mdx +++ b/src/content/docs/developers/about-receiving.mdx @@ -2,8 +2,8 @@ title: About receiving payments --- -import { LinkOut, CodeBlock, Disclosure } from "@interledger/docs-design-system"; -import { Badge, Tabs, TabItem, Steps } from '@astrojs/starlight/components'; +import { LinkOut, CodeBlock, Disclosure } from '@interledger/docs-design-system' +import { Badge, Tabs, TabItem, Steps } from '@astrojs/starlight/components' Receiving Web Monetization payments requires you to have an account with a compatible digital wallet provider. Not all wallet providers support receiving Web Monetization payments. @@ -15,16 +15,16 @@ Since wallet providers are financial entities, they are regulated within the cou You must have an account with a compatible [digital wallet provider](/wallets) to receive payments. Be sure to select a provider that: -* Is available in your region -* Supports your preferred currency -* Allows you to withdraw your funds if you choose to transact in fiat +- Is available in your region +- Supports your preferred currency +- Allows you to withdraw your funds if you choose to transact in fiat Your wallet provider will assign your wallet a unique identifier called a _wallet address_ or a _payment pointer_. You’ll need this identifier to web monetize your content. -| Identifier | Example format | -| ------- | -------------- | -| Payment pointer | `$wallet.example.com/alice` | -| Wallet address | `https://wallet.example.com/alice` | +| Identifier | Example format | +| --------------- | ---------------------------------- | +| Payment pointer | `$wallet.example.com/alice` | +| Wallet address | `https://wallet.example.com/alice` | ## Web monetized content @@ -41,21 +41,22 @@ Your visitors' Web Monetization extension acts like a messaging service. When th If you're already familiar with Web Monetization, you may have heard about how it supports micropayments. In general, a micropayment is a very small payment. Each wallet provider is responsible for a few things: -* Deciding whether to support receiving and/or sending micropayments -* Defining what a micropayment is in the context of their business -* Determining the minimum amount for a micropayment + +- Deciding whether to support receiving and/or sending micropayments +- Defining what a micropayment is in the context of their business +- Determining the minimum amount for a micropayment Let's say your wallet provider allows you to receive micropayments. Your provider defines a micropayment as any payment under $0.05 USD. This means you could, for example, receive a payment of one US cent--as long as the sender's wallet provider allows them to send that amount. -Your wallet provider may also have business rules set up such that micropayments accumulate on your account but aren't deposited until you reach a minimum (e.g., $1.00 USD). +Your wallet provider may also have business rules set up such that micropayments accumulate on your account but aren't deposited until you reach a minimum (e.g., $1.00 USD). -Web Monetization can even support payments of a fraction of a cent (e.g., $0.00001); however, sending and receiving fractional amounts must be supported by the respective wallet providers. +Web Monetization can even support payments of a fraction of a cent (e.g., $0.00001); however, sending and receiving fractional amounts must be supported by the respective wallet providers. ### A deeper dive into payments #### Open Payments -For a wallet to be compatible with Web Monetization, the provider must implement the Open Payments standard. When implemented, a set of APIs becomes available for third-party applications, such as your visitor's Web Monetization extension, to communicate with the wallet providers. +For a wallet to be compatible with Web Monetization, the provider must implement the Open Payments standard. When implemented, a set of APIs becomes available for third-party applications, such as your visitor's Web Monetization extension, to communicate with the wallet providers. #### Web Monetization extension @@ -64,7 +65,7 @@ A component within the extension--called the [Web Monetization agent](/developer #### Web Monetization payment sequence :::note -The examples below are simplified representations of the Open Payments API calls. +The examples below are simplified representations of the Open Payments API calls. ::: @@ -96,14 +97,13 @@ The examples below are simplified representations of the Open Payments API calls } ``` -4. The agent issues a request to your wallet provider's `authServer` URL. The request contains the access permissions the agent is requesting. +4. The agent issues a request to your wallet provider's `authServer` URL. The request contains the access permissions the agent is requesting. ```http POST /auth/ HTTP/1.1 Accept: application/json Content-Type: application/json - Host: wallet.example - + Host: wallet.example { "access_token": { "access": [ @@ -126,27 +126,24 @@ The examples below are simplified representations of the Open Payments API calls ```http wrap { "access_token": { - "value": "OS9M2PMHKUR64TB8N6BW7OZB8CDFONP219RP1LT0", - "manage": "https://wallet.example/auth/token/dd17a202-9982-4ed9-ae31-564947fb6379", - "access": [ - { - "type": "incoming-payment", - "actions": ["create", "read"], - "identifier": "https://wallet.example/alice" - } - ] + "value": "OS9M2PMHKUR64TB8N6BW7OZB8CDFONP219RP1LT0", + "manage": "https://wallet.example/auth/token/dd17a202-9982-4ed9-ae31-564947fb6379", + "access": [ + { + "type": "incoming-payment", + "actions": ["create", "read"], + "identifier": "https://wallet.example/alice" + } + ] } } ``` 6. The agent issues a request to your wallet provider's `resourceServer` URL. The purpose of this call is to request the information needed by your visitor's wallet provider so their provider correctly addresses the payment to you. - - ```http - POST /alice/incoming-payments HTTP/1.1 - Accept: application/json - Content-Type: application/json - Authorization: OS9M2PMHKUR64TB8N6BW7OZB8CDFONP219RP1LT0 - Host: wallet.example + + ```http wrap + POST /alice/incoming-payments HTTP/1.1 Accept: application/json + Content-Type: application/json Authorization: OS9M2PMHKUR64TB8N6BW7OZB8CDFONP219RP1LT0 Host: wallet.example ``` 7. The response to the agent contains unique payment details that will be used to address the payment to your payment account. @@ -173,39 +170,38 @@ The examples below are simplified representations of the Open Payments API calls Content-Type: application/json Authorization: {{ GNAP outgoingPaymentGrant.accessToken.value }} Host: cloudninewallet.example - - { - "walletAddress": "https://wallet.example/alice", - "quoteId": "https://wallet.example/quotes/ab03296b-0c8b-4776-b94e-7ee27d868d4d", - } - ``` - -9. The response from your visitor's wallet provider indicates whether the outgoing payment was created on their side. A payment could fail if the visitor has insufficient funds, for example. The following example indicates the outgoing payment was successfully created. - - - ```http wrap { - "id": "https://cloudninewallet.example/visitor/outgoing-payments/8c68d3cc-0a0f-4216-98b4-4fa44a6c88cf", - "walletAddress": "https://cloudninewallet.example/visitor/", - "receiver": "https://wallet.example/alice/incoming-payments/08394f02-7b7b-45e2-b645-51d04e7c330c", - "receiveAmount": { - "value": "2", - "assetCode": "USD", - "assetScale": 2 - }, - "debitAmount": { - "value": "2", - "assetCode": "USD", - "assetScale": 2 - }, - "sentAmount": { - "value": "0", - "assetCode": "USD", - "assetScale": 2 - }, - "createdAt": "2022-03-12T23:20:55.52Z", - "updatedAt": "2022-03-12T23:20:55.52Z" + "walletAddress": "https://wallet.example/alice", + "quoteId": "https://wallet.example/quotes/ab03296b-0c8b-4776-b94e-7ee27d868d4d", } ``` +9. The response from your visitor's wallet provider indicates whether the outgoing payment was created on their side. A payment could fail if the visitor has insufficient funds, for example. The following example indicates the outgoing payment was successfully created. + + + ```http wrap + { + "id": "https://cloudninewallet.example/visitor/outgoing-payments/8c68d3cc-0a0f-4216-98b4-4fa44a6c88cf", + "walletAddress": "https://cloudninewallet.example/visitor/", + "receiver": "https://wallet.example/alice/incoming-payments/08394f02-7b7b-45e2-b645-51d04e7c330c", + "receiveAmount": { + "value": "2", + "assetCode": "USD", + "assetScale": 2 + }, + "debitAmount": { + "value": "2", + "assetCode": "USD", + "assetScale": 2 + }, + "sentAmount": { + "value": "0", + "assetCode": "USD", + "assetScale": 2 + }, + "createdAt": "2022-03-12T23:20:55.52Z", + "updatedAt": "2022-03-12T23:20:55.52Z" + } + ``` + \ No newline at end of file diff --git a/src/content/docs/developers/activity-streams.mdx b/src/content/docs/developers/activity-streams.mdx new file mode 100644 index 00000000..c0ac1039 --- /dev/null +++ b/src/content/docs/developers/activity-streams.mdx @@ -0,0 +1,117 @@ +--- +title: Activity Streams JSON-LD +--- + +import { LinkOut } from '@interledger/docs-design-system' + +Social web community servers and apps can expose the wallet address or payment pointer of a user’s profile or post to a Web Monetization client, such as the ILF's [Web Monetization browser extension](/supporters/get-started#1-download-and-install-the-extension) or embedded SDK. + +Web Monetization links are represented in Activity Streams 2.0 Object Types using the `monetization` property from the Web Monetization namespace (`https://webmonetization.org/ns.jsonld`). + +### User `Profile` example + +```jsonc wrap +{ + "@context": [ + "https://www.w3.org/ns/activitystreams", + "https://w3id.org/security/v1", + + // Add the Web Monetization namespace + "https://webmonetization.org/ns.jsonld", + + { + "Hashtag": "as:Hashtag", + }, + ], + "id": "https://alpaca.gold/users/Jeremiah", + "type": "Person", + "following": "https://alpaca.gold/users/Jeremiah/following", + "followers": "https://alpaca.gold/users/Jeremiah/followers", + "inbox": "https://alpaca.gold/users/Jeremiah/inbox", + "outbox": "https://alpaca.gold/users/Jeremiah/outbox", + "preferredUsername": "Jeremiah", + "name": "Jeremiah Lee", + "summary": "

I want you to get paid when you go viral. #WebMonetizationRocks

", + "url": "https://alpaca.gold/@Jeremiah", + "published": "2023-01-06T00:00:00Z", + "publicKey": {}, + "endpoints": { + "sharedInbox": "https://alpaca.gold/inbox", + }, + "tag": [ + { + "type": "Hashtag", + "href": "https://alpaca.gold/tags/WebMonetizationRocks", + "name": "#WebMonetizationRocks", + }, + ], + + // Wallet address when viewing this user’s profile + "monetization": "https://fynbos.me/jeremiah", +} +``` + +### User post (`Note`) example + +```jsonc wrap +{ + "@context": [ + "https://www.w3.org/ns/activitystreams", + + // Add the Web Monetization namespace + "https://webmonetization.org/ns.jsonld", + + { + "ostatus": "http://ostatus.org#", + "atomUri": "ostatus:atomUri", + "inReplyToAtomUri": "ostatus:inReplyToAtomUri", + "conversation": "ostatus:conversation", + "sensitive": "as:sensitive", + "Hashtag": "as:Hashtag", + }, + ], + "id": "https://alpaca.gold/users/Jeremiah/statuses/113677237228956618", + "type": "Note", + "published": "2024-12-19T02:56:24Z", + "url": "https://alpaca.gold/@Jeremiah/113677237228956618", + "attributedTo": "https://alpaca.gold/users/Jeremiah", + "to": ["https://www.w3.org/ns/activitystreams#Public"], + "cc": ["https://alpaca.gold/users/Jeremiah/followers"], + "sensitive": false, + "atomUri": "https://alpaca.gold/users/Jeremiah/statuses/113677237228956618", + "inReplyToAtomUri": null, + "conversation": "tag:alpaca.gold,2024-12-19:objectId=3727991:objectType=Conversation", + "content": "

When you go viral, you should get paid. #WebMonetizationRocks

", + "attachment": [], + "tag": [ + { + "type": "Hashtag", + "href": "https://alpaca.gold/tags/webmonetizationrocks", + "name": "#webmonetizationrocks", + }, + ], + "replies": { + "id": "https://alpaca.gold/users/Jeremiah/statuses/113677237228956618/replies", + "type": "Collection", + "first": { + "type": "CollectionPage", + "next": "https://alpaca.gold/users/Jeremiah/statuses/113677237228956618/replies?only_other_accounts=true&page=true", + "partOf": "https://alpaca.gold/users/Jeremiah/statuses/113677237228956618/replies", + "items": [], + }, + }, + "likes": { + "id": "https://alpaca.gold/users/Jeremiah/statuses/113677237228956618/likes", + "type": "Collection", + "totalItems": 42, + }, + "shares": { + "id": "https://alpaca.gold/users/Jeremiah/statuses/113677237228956618/shares", + "type": "Collection", + "totalItems": 9, + }, + + // Wallet address when viewing this Note + "monetization": "https://fynbos.me/jeremiah", +} +``` diff --git a/src/content/docs/developers/csp.mdx b/src/content/docs/developers/csp.mdx index bf09ceee..f8edc995 100644 --- a/src/content/docs/developers/csp.mdx +++ b/src/content/docs/developers/csp.mdx @@ -2,14 +2,14 @@ title: Content Security Policy (CSP) --- -import { LinkOut, Hidden } from "@interledger/docs-design-system"; +import { LinkOut, Hidden } from '@interledger/docs-design-system' import Specification from '/src/components/docs/Specification.astro' import BrowserCompat from '/src/components/docs/BrowserCompat.astro' import data from '/src/data/browser-compat-data/csp-monetization-src.json' -A Content Security Policy (CSP) is an extra layer of security that allows you to control the resources a user agent, such as a web browser, is allowed to load for a given page. CSPs use directives to describe the policies for a certain resource type. +A Content Security Policy (CSP) is an extra layer of security that allows you to control the resources a user agent, such as a web browser, is allowed to load for a given page. CSPs use directives to describe the policies for a certain resource type. -The `monetization-src` fetch directive allows you to define the payment pointer and wallet address URLs that a browser can load. If an attempt is made to load an undefined URL, a network error will occur and the URL will not load. +The `monetization-src` fetch directive allows you to define the payment pointer and wallet address URLs that a browser can load. If an attempt is made to load an undefined URL, a network error will occur and the URL will not load. @@ -22,7 +22,11 @@ The `monetization-src` fetch directive allows you to define the payment pointer - +
Directive typeFetch directive + + Fetch directive + +
@@ -41,18 +45,18 @@ Content-Security-Policy: monetization-src https://example.com; ## Example -Your wallet address is `https://wallet.example.com/alice`. You want to ensure that no other URLs can be loaded. +Your wallet address is `https://wallet.example.com/alice`. You want to ensure that no other URLs can be loaded. -You configure your web server to return the following `Content-Security-Policy` HTTP header on each applicable page of your website. +You configure your web server to return the following `Content-Security-Policy` HTTP header on each applicable page of your website. ```http Content-Security-Policy: monetization-src https://wallet.example.com/alice; ``` -A bad actor injects their wallet address into your site. +A bad actor injects their wallet address into your site. ```html - + ``` However, fetches for the injected URL will return a network error and not load because the URL doesn't match what you've defined in your CSP. @@ -67,4 +71,4 @@ However, fetches for the injected URL will return a network error and not load b ## Specifications - \ No newline at end of file + diff --git a/src/content/docs/developers/events.mdx b/src/content/docs/developers/events.mdx index cbb59c10..c65a3361 100644 --- a/src/content/docs/developers/events.mdx +++ b/src/content/docs/developers/events.mdx @@ -2,21 +2,25 @@ title: Monetization events --- -import { LinkOut, Hidden, Tooltip } from "@interledger/docs-design-system"; +import { LinkOut, Hidden, Tooltip } from '@interledger/docs-design-system' import Specification from '/src/components/docs/Specification.astro' -import { Tabs, TabItem, Steps, Badge } from '@astrojs/starlight/components'; +import { Tabs, TabItem, Steps, Badge } from '@astrojs/starlight/components' import BrowserCompat from '/src/components/docs/BrowserCompat.astro' import amountSent from '/src/data/browser-compat-data/amountSent.json' import incomingPayment from '/src/data/browser-compat-data/incomingPayment.json' import paymentPointer from '/src/data/browser-compat-data/paymentPointer.json' - + -One responsibility of the [Web Monetization agent](/resources/glossary/#web-monetization-agent) is to instrument payments. The agent does this by calling the Open Payments APIs, which are APIs implemented by wallet providers. +One responsibility of the [Web Monetization agent](/resources/glossary/#web-monetization-agent) is to instrument payments. The agent does this by calling the Open Payments APIs, which are APIs implemented by wallet providers. The agent makes calls to the `/incoming-payments` endpoint at your wallet provider and to the `/outgoing-payments` endpoint at your site visitor's wallet provider. -Each time the agent receives a `201 outgoing payment created` response from the site visitor's wallet provider, the agent fires a `monetization` event on the browser window. +Each time the agent receives a `201 outgoing payment created` response from the site visitor's wallet provider, the agent fires a `monetization` event on the browser window. ### Specifications @@ -24,15 +28,15 @@ Each time the agent receives a `201 outgoing payment created` response from the ## Event listeners -When a `monetization` event fires, there's no guarantee that payments will follow or, if they do, how often or how large the payments will be. +When a `monetization` event fires, there's no guarantee that payments will follow or, if they do, how often or how large the payments will be. -A `monetization` event indicates that the site visitor's wallet provider has created the resources needed for it to send a payment. +A `monetization` event indicates that the site visitor's wallet provider has created the resources needed for it to send a payment. By adding an event listener to the relevant monetization `` element (or one of its ancestors), you can use the `monetization` event properties to verify payments. These properties provide: -* Information about the [amount and currency](#amountsent) of a sent (not received) payment -* A URL representing an [incoming payment](#incomingpayment) that can be used to determine the amount received, similar to a receipt -* The URL representing the [payment pointer or wallet address](#paymentpointer) that an incoming payment request was sent to +- Information about the [amount and currency](#amountsent) of a sent (not received) payment +- A URL representing an [incoming payment](#incomingpayment) that can be used to determine the amount received, similar to a receipt +- The URL representing the [payment pointer or wallet address](#paymentpointer) that an incoming payment request was sent to ### High-level flow @@ -49,10 +53,10 @@ By adding an event listener to the relevant monetization `` element (or on ### amountSent -The `amountSent` property returns the `value` and `currency` of the sent payment. +The `amountSent` property returns the `value` and `currency` of the sent payment. -* `value` - The amount. A valid decimal monetary value containing the amount that was sent. -* `currency` - The currency code. A well-formed 3-letter ISO4217 code that represents the currency that was sent, such as USD or GBP. +- `value` - The amount. A valid decimal monetary value containing the amount that was sent. +- `currency` - The currency code. A well-formed 3-letter ISO4217 code that represents the currency that was sent, such as USD or GBP. ```js title="Example" "value": "1.23" @@ -110,13 +114,13 @@ In this example, you have multiple link elements (not shown). You're listening f `incomingPayment` is an experimental technology. ::: -The `incomingPayment` property allows you to check whether a payment was received and, if so, the amount received. +The `incomingPayment` property allows you to check whether a payment was received and, if so, the amount received. The property returns a URL that represents the incoming payment at your wallet provider. By querying the URL, you can get the `receivedAmount`. #### Example using `incomingPayment` -This example shows a hypothetical verification method that makes a basic request to the `incomingPayment` URL and returns the results. For simplicity, it has no logic for authenticating the request. +This example shows a hypothetical verification method that makes a basic request to the `incomingPayment` URL and returns the results. For simplicity, it has no logic for authenticating the request. :::note[Authentication] In many cases, requests to the `incomingPayment` URL must be authenticated because you're fetching sensitive details. The payment account owner should request these specifics from their wallet provider. @@ -165,7 +169,7 @@ async function verifyPayment(event) { The `paymentPointer` property returns the URL that represents the payment pointer or wallet address that the payment was sent to. In most cases, the value will be the same as the `href` URL in the monetization ``. :::note[Property name] -Earlier versions of the Web Monetization specification only used Interledger's Simple Payment Setup Protocol (SPSP), which calls for payment pointers. This is why the property was named `paymentPointer`. +Earlier versions of the Web Monetization specification only used Interledger's Simple Payment Setup Protocol (SPSP), which calls for payment pointers. This is why the property was named `paymentPointer`. As of v3, both payment pointers and Open Payments wallet addresses are returned by this property. GitHub issue 439 is created for discussing a change to the property name. ::: @@ -197,11 +201,11 @@ As of v3, both payment pointers and Open Payments wallet addresses are returned ### amountSent -Program your website to show a thank you message to your site visitor when the `amountSent` returns a non-zero amount. In this use case, you're only checking that an amount -- any amount -- was sent. +Program your website to show a thank you message to your site visitor when the `amountSent` returns a non-zero amount. In this use case, you're only checking that an amount -- any amount -- was sent. ### incomingPayment -Program your website to remove ads or provide access to exclusive content to your site visitor after receiving a specific amount. +Program your website to remove ads or provide access to exclusive content to your site visitor after receiving a specific amount. In this use case, you'll query the URL returned by `incomingPayment` to track the `receivedAmount`. If appropriate, you can ensure the amount is increasing after each `monetization` event to verify that a new payment was received. @@ -223,7 +227,7 @@ That's hard to remember. Fortunately, your wallet provider offers vanity address https://wallet.example.com/bob ``` -You add the vanity address as the `href` value in the monetization ``. Then, you set up an event listener for `paymentPointer`. The value that's returned will be: +You add the vanity address as the `href` value in the monetization ``. Then, you set up an event listener for `paymentPointer`. The value that's returned will be: ``` https://wallet.example.com/GK9D420BL42M @@ -241,4 +245,4 @@ For example, after entering five wallet addresses and weights, the generator cre https://webmonetization.org/api/revshare/pay/W1siJGFsaWNlLndhbGxldC5jb20iLDUwLCIkYWxpY2" ``` -You add the generated URL as the `href` value in the monetization ``. Then, you set up an event listener for `paymentPointer`. The value that's returned will be which one of the five wallet addresses that the payment was sent to. \ No newline at end of file +You add the generated URL as the `href` value in the monetization ``. Then, you set up an event listener for `paymentPointer`. The value that's returned will be which one of the five wallet addresses that the payment was sent to. diff --git a/src/content/docs/developers/get-started.mdx b/src/content/docs/developers/get-started.mdx index 0aec83df..d7371415 100644 --- a/src/content/docs/developers/get-started.mdx +++ b/src/content/docs/developers/get-started.mdx @@ -3,14 +3,14 @@ title: Get started --- import { LinkOut } from '@interledger/docs-design-system' -import { Steps } from '@astrojs/starlight/components'; -import Wallet from "/src/partials/wallet-prereq.mdx"; +import { Steps } from '@astrojs/starlight/components' +import Wallet from '/src/partials/wallet-prereq.mdx' ## Prerequisites -## Step 1 - Get your payment URL +## Step 1 - Get your payment URL ### Payment pointer @@ -22,32 +22,30 @@ $wallet.example.com/alice ### Wallet address -If you have a wallet address that starts with `https://`, then you have your payment URL. Proceed to the next step. +If you have a wallet address that starts with `https://`, then you have your payment URL. Proceed to the next step. ```http title="Example" https://wallet.example.com/alice ``` - - ## Step 2 - Web monetize your page 1. Create your Web Monetization link tag using the format below. Add your payment URL as the `href` value. - ```http - - ``` + ```http + + ``` - For example: + For example: - ```http - - ``` + ```http + + ``` 2. Add the `` to the `` section of your page. - ```html title="Example" wrap + ```html title="Example" wrap My Site @@ -57,6 +55,6 @@ https://wallet.example.com/alice ``` -Congratulations! Your page is now web monetized. Add the `` to any page of your site you want to monetize. +Congratulations! Your page is now web monetized. Add the `` to any page of your site you want to monetize. For more information, visit the [Monetization link element](/developers/link-element) page. \ No newline at end of file diff --git a/src/content/docs/developers/interfaces.mdx b/src/content/docs/developers/interfaces.mdx index b3d53b29..a7801b1b 100644 --- a/src/content/docs/developers/interfaces.mdx +++ b/src/content/docs/developers/interfaces.mdx @@ -2,19 +2,23 @@ title: Monetization interfaces --- -import { LinkOut, Hidden } from "@interledger/docs-design-system"; -import { Badge } from '@astrojs/starlight/components'; +import { LinkOut, Hidden } from '@interledger/docs-design-system' +import { Badge } from '@astrojs/starlight/components' import Specification from '/src/components/docs/Specification.astro' import BrowserCompat from '/src/components/docs/BrowserCompat.astro' import data from '/src/data/browser-compat-data/monetizationevent.json' - + The Web Monetization API consists of two interfaces: `MonetizationEvent` and `MonetizationCurrencyAmount`. ## `MonetizationEvent` -The `MonetizationEvent` interface describes the [`monetization`](/developers/events) event that fires when an outgoing payment is successfully created. +The `MonetizationEvent` interface describes the [`monetization`](/developers/events) event that fires when an outgoing payment is successfully created. @@ -33,9 +37,11 @@ The `MonetizationEvent` interface describes the [`monetization`](/developers/eve By listening for `monetization` events, you can use the information returned in the following properties to verify payments. -* [amountSent](/developers/events#amountsent) - The currency amount and code of the sent payment. Contains two variables, `value` and `currency`, constructed by the [`MonetizationCurrencyAmount`](#monetizationcurrencyamount) interface. -* [incomingPayment](/developers/events#incomingpayment) - A URL you can use to determine if a payment was received and, if so, the amount received. -* [paymentPointer](/developers/events#paymentpointer) - The URL of the payment pointer or wallet address that the incoming payment request was sent to. +| Property | Description | +| - | - | +| [amountSent](/developers/events#amountsent) | The currency amount and code of the sent payment. Contains two variables, `value` and `currency`, constructed by the [`MonetizationCurrencyAmount`](#monetizationcurrencyamount) interface. | +| [incomingPayment](/developers/events#incomingpayment) | A URL you can use to determine if a payment was received and, if so, the amount received. | +| [paymentPointer](/developers/events#paymentpointer) | The URL of the payment pointer or wallet address that the incoming payment request was sent to. | Visit the [Monetization Events](/developers/events) page for more information. @@ -55,11 +61,11 @@ Visit the [Monetization Events](/developers/events) page for more information. The `MonetizationCurrencyAmount` interface is used to populate the `value` and `currency` variables contained within the `MonetizationEvent amountSent` property. -* Value - The amount. A valid decimal monetary value containing the amount that was sent. -* Currency - The currency code. An ISO 4217-compliant currency code, when possible, that represents the currency that was sent, such as USD or GBP. +- Value - The amount. A valid decimal monetary value containing the amount that was sent. +- Currency - The currency code. An ISO 4217-compliant currency code, when possible, that represents the currency that was sent, such as USD or GBP. The `MonetizationCurrencyAmount` interface is modeled on the Payment Request API’s `PaymentCurrencyAmount` dictionary. ### Specifications - \ No newline at end of file + diff --git a/src/content/docs/developers/link-element.mdx b/src/content/docs/developers/link-element.mdx index 9435fc85..a0721d17 100644 --- a/src/content/docs/developers/link-element.mdx +++ b/src/content/docs/developers/link-element.mdx @@ -1,25 +1,26 @@ --- title: Monetization element tableOfContents: - maxHeadingLevel: 4 + maxHeadingLevel: 4 --- -import { LinkOut, Hidden } from "@interledger/docs-design-system"; +import { LinkOut, Hidden } from '@interledger/docs-design-system' import Specification from '/src/components/docs/Specification.astro' import BrowserCompat from '/src/components/docs/BrowserCompat.astro' import data from '/src/data/browser-compat-data/link.json' -import { Steps, Tabs, TabItem, Badge } from '@astrojs/starlight/components'; +import { Steps, Tabs, TabItem, Badge } from '@astrojs/starlight/components' - + From a creator/developer perspective, the monetization `` element is one of the two key pieces to web monetizing a page. The second piece is a wallet address/payment pointer. ## Prerequisites -To web monetize an HTML page, such as a web page: -* You must have an account with a [compatible wallet provider](/wallets) -* You must have the wallet address, or payment pointer in URL format, from your wallet provider -* Your document must be served over HTTPS +To web monetize an HTML page: + +- You must have an account with a [compatible wallet provider](/wallets) +- You must have the wallet address, or payment pointer in URL format, from your wallet provider +- Your document must be served over HTTPS ## Monetization `` element @@ -28,16 +29,16 @@ The monetization `` element is what indicates your HTML page supports Web ### Syntax ```html - + ``` -* The `rel` attribute is always `monetization` -* The `href` attribute equals your wallet address or your payment pointer in URL format +- The `rel` attribute is always `monetization` +- The `href` attribute equals your wallet address or your payment pointer in URL format For example: ```html - + ``` ### Placement @@ -47,9 +48,10 @@ A monetization `` is `body-ok`, meaning it's allowed in your page's `` elements; however, your site visitor’s [Web Monetization agent](#web-monetization-agent) could be designed to handle multiple links in a particular way. For example, an agent might: -* Split payments evenly between all links -* Split payments between the first few links it finds -* Send the amount only to the first link it finds and ignore all others + +- Split payments evenly between all links +- Split payments between the first few links it finds +- Send the amount only to the first link it finds and ignore all others :::tip[Recommendation] The Web Monetization agent built into the Interledger Foundation's extension splits payments evenly between all links. We recommend other extension developers follow this approach. @@ -59,12 +61,12 @@ The Web Monetization agent built into the Interledger Foundation's extension. - ::: -* Sending payments to the first monetization link it finds in the parent browsing context and ignoring all other monetization links in the parent and the iframe +- Splitting payments evenly between all monetization links within both the parent and the iframe +- Splitting payments evenly between all monetization links in the parent and the first monetization link it finds in the iframe's ``, while ignoring any other monetization links in the iframe + :::note + This is the approach used in the Interledger Foundation's extension. + ::: +- Sending payments to the first monetization link it finds in the parent browsing context and ignoring all other monetization links in the parent and the iframe ### Audio, video, and picture elements @@ -98,7 +100,7 @@ The following HTML elements can be web monetized by adding the `` element ### HTMLLinkElement -The HTML DOM API's `HTMLLinkElement` interface defines how the `` element functions. The `` element is what allows you to link your HTML page to a resource. +The HTML DOM API's `HTMLLinkElement` interface defines how the `` element functions. The `` element is what allows you to link your HTML page to a resource. The two most recognizable `HTMLLinkElement` properties are `href` and `rel`. The `href` property defines the URL to the resource. The `rel` property indicates the type of link, or relationship, the resource has to the current page. @@ -114,12 +116,12 @@ A Web Monetization agent is a non-user facing component of the provides a mechanism for you to explicitly declare what functionality can and cannot be used on your website. +A Permissions Policy provides a mechanism for you to explicitly declare what functionality can and cannot be used on your website. The `monetization` policy directive allows you to enable and disable the Web Monetization API within a document and within any of the document's nested browsing contexts (iframes). @@ -20,7 +20,7 @@ The `monetization` policy directive allows you to enable and disable the Web Mon Permissions-Policy: monetization=(allowlist) ``` -Where `(allowlist)` is a list of origins permitted to use the Web Monetization API. +Where `(allowlist)` is a list of origins permitted to use the Web Monetization API. The default allowlist is `self`. @@ -32,11 +32,11 @@ Permissions-Policy: monetization=(self) The `allow` attribute determines the container policy that will be used when the permissions policy for a `Document` in the iframe's content navigable is initialized. Adding or removing the `monetization` attribute has no effect on an already-loaded `Document`. ::: -## Example +## Example You want to allow Web Monetization on your website and in all nested browsing contexts (iframes) in the same origin. -You configure your web server to return the `Permissions-Policy` HTTP header on each of your pages. +You configure your web server to return the `Permissions-Policy` HTTP header on each of your pages. ```http Permissions-Policy: monetization=(self) @@ -52,4 +52,4 @@ Permissions-Policy: monetization=(self) ## Specifications - \ No newline at end of file + diff --git a/src/content/docs/developers/rss-atom-jsonfeed.mdx b/src/content/docs/developers/rss-atom-jsonfeed.mdx new file mode 100644 index 00000000..9242f0a1 --- /dev/null +++ b/src/content/docs/developers/rss-atom-jsonfeed.mdx @@ -0,0 +1,193 @@ +--- +title: RSS, Atom, and JSON Feed +--- + +import { LinkOut } from '@interledger/docs-design-system' + +Web Monetization links can be used with content syndication formats [RSS 2.0](#rss-20), [Atom XML](#atom), and [JSON Feed](#json-feed). Feed readers and podcasting apps can expose a piece of content’s wallet address or payment pointer to a Web Monetization client, such as the ILF's [Web Monetization browser extension](/supporters/get-started#1-download-and-install-the-extension) or embedded SDK. + +## RSS 2.0 + +Web Monetization wallet addresses are represented in RSS 2.0 using the `` element. The `rel` attribute value must be `monetization`. The `href` attribute must be a URL of an Open Payments-enabled wallet address or payment pointer. + +RSS must be extended with the Atom Syndication Format by adding the Atom namespace to the `rss` element: + +``` + +``` + +Monetization `` elements may be children of `` and `` elements. + +Monetization `` elements added as children of the `` element apply to the channel itself and its items. + +An `` element inherits the channel’s monetization links unless the `` element has monetization `` child elements of its own. + +### Podcast example + +```xml wrap + + + + + Fintech News Podcast + 0000a0a0-0000-0000-0000-0a000aa0a0a0 + https://podcast.example/fintech-news + podcast + episodic + Technology + + Fintech News + + + + + + Support the show! + + + + Big Fun Conference announcements + + https://example.com/bfc-2024/ + Thu, 05 Dec 2024 15:56:55 GMT + Episode description… + 123 + https://example.com/bfc-2024/ + + 1 + 1 + full + 1 + 1 + + + + + Canada is calling + + https://example.com/2024-canada/ + Thu, 05 Dec 2024 16:06:17 GMT + Episode description… + 321 + https://example.com/2024-canada/ + + 2 + 1 + full + 1 + 2 + + + + + + +``` + +## Atom + +Web Monetization wallet addresses and payment pointers are represented in Atom Syndication Format using the `` element with the `rel="monetization"` attribute. The `rel` value must be `monetization`. The `href` value must be a URL of an Open Payments-enabled wallet address or payment pointer. + +Monetization `` elements may be added as children of `` and `` elements. + +Monetization `` elements added as children of the `` element apply to the feed itself and its entries. + +An `` element inherits the feeds’s monetization links unless the `` element has monetization `` child elements of its own. + +### Example + +```xml wrap + + + Fintech News + + + https://example.com/atom.xml + 2024-12-18T19:54:03Z + + + + + + + Big Fun Conference announcements + + 2024-12-05T16:56:55+01:00 + https://example.com/bfc-2024/ + Article content here… + + + + + Canada is calling + + + + 2024-12-05T17:06:17+01:00 + https://example.com/2024-canada/ + Article content here… + + +``` + +## JSON Feed + +Web Monetization wallet addresses are represented in JSON Feed 1.1 using the `_monetization` extension object. + +Per the JSON Feed 1.1 specification, extensions must have a property name that begins with an underscore and be assigned an object. + +### `_monetization` extension object + +| Property | Required | Data type | Description | +| -------- | -------- | ---------------- | ----------------------------------------------------------------------------------------------------------------------------- | +| `about` | No | string | A link to the page explaining the extension object's purpose. It should appear in the first use of the extension object only. | +| `links` | Yes | Array of strings | Specifies one or more Open Payments-enabled wallet addresses or payment pointers. | + +The `_monetization` extension may be added to the top-level document and to individual items in the `items` array. + +An item in the `items` array inherits the top-level `_monetization` values unless the item contains a `_monetization` extension object of its own. + +### Example + +```jsonc wrap +{ + "version": "https://jsonfeed.org/version/1.1", + "title": "Fintech News", + "home_page_url": "https://example.com/", + "feed_url": "https://example.com/jsonfeed.json", + + // Web Monetization wallet address/payment pointer for feed and items + "_monetization": { + "about": "https://webmonetization.org/docs/references/rss-atom-jsonfeed/", + "links": ["https://wallet.example/fintech-news"], + }, + + "items": [ + { + // This item will inherit the feed’s _monetization + "title": "Big Fun Conference announcements", + "date_published": "2024-12-05T16:56:55+01:00", + "id": "https://example.com/bfc-2024/", + "url": "https://example.com/bfc-2024/", + "content_html": "Article content here…", + }, + { + // This item specifies its own monetization links + "title": "Canada is calling", + "date_published": "2024-12-05T17:06:17+01:00", + "id": "https://example.com/2024-canada/", + "url": "https://example.com/2024-canada/", + "_monetization": { + "links": [ + "https://wallet.example/fintech-news", + "https://wallet.example/erica", + ], + }, + "content_html": "Article content here…", + }, + ], +} +``` diff --git a/src/content/docs/docs.mdx b/src/content/docs/docs.mdx index 4b8a5bf3..541b487f 100644 --- a/src/content/docs/docs.mdx +++ b/src/content/docs/docs.mdx @@ -3,4 +3,6 @@ title: Intro to Web Monetization next: Content consumer overview --- -

Need help with this page

\ No newline at end of file +

+ Need help with this page +

diff --git a/src/content/docs/resources/get-involved.mdx b/src/content/docs/resources/get-involved.mdx index 918efaaa..c4b5dfba 100644 --- a/src/content/docs/resources/get-involved.mdx +++ b/src/content/docs/resources/get-involved.mdx @@ -2,44 +2,44 @@ title: Get involved --- -import { LinkOut } from "@interledger/docs-design-system"; +import { LinkOut } from '@interledger/docs-design-system' ## Participation -* Join our Web Monetization Community calls. -* Begin a new discussion or contribute to existing discussions in the WICG Web Monetization GitHub repo. -* Contribute something you’ve built, open a new issue, or contribute to existing issues in the WICG Web Monetization GitHub repo. -* Suggest changes to the specification by submitting a pull request. For more details about spec contributions and development, visit contributing.md. +- Join our Web Monetization Community calls. +- Begin a new discussion or contribute to existing discussions in the WICG Web Monetization GitHub repo. +- Contribute something you’ve built, open a new issue, or contribute to existing issues in the WICG Web Monetization GitHub repo. +- Suggest changes to the specification by submitting a pull request. For more details about spec contributions and development, visit contributing.md. ## Coding -* Update the existing Web Monetization v1 [tools/libraries](/developers/libraries/) to the latest spec. -* Create new Web Monetization tools/plugins for frameworks and libraries. -* Build applications with new and varied use cases around Web Monetization. For example, you could: - * Add Web Monetization to your favorite open source project. - * Create tools to allow websites to interact with web monetized visitors. Visual indicators, like celebration confetti, thank you notes, or payment counters are just a few ways to promote interaction. -* Contribute to the ILF’s Web Monetization extension by coding or testing. +- Update the existing Web Monetization v1 [tools/libraries](/developers/libraries/) to the latest spec. +- Create new Web Monetization tools/plugins for frameworks and libraries. +- Build applications with new and varied use cases around Web Monetization. For example, you could: + - Add Web Monetization to your favorite open source project. + - Create tools to allow websites to interact with web monetized visitors. Visual indicators, like celebration confetti, thank you notes, or payment counters are just a few ways to promote interaction. +- Contribute to the ILF’s Web Monetization extension by coding or testing. ## Community events and hackathons -* Join us at the Interledger Summit and participate in our annual hackathon. -* Organize your own hackathons, coding sprints, and installa-thons, both online and offline. Run campaigns and encourage participants to develop, collaborate on, and test projects. +- Join us at the Interledger Summit and participate in our annual hackathon. +- Organize your own hackathons, coding sprints, and installa-thons, both online and offline. Run campaigns and encourage participants to develop, collaborate on, and test projects. ## Localization -* Translate and localize the site's [Overview](/docs/) into one of the following languages: - * Arabic - * Chinese - * French - * German - * Japanese - * Portuguese - * Spanish -* Review translated and localized content. +- Translate and localize the site's [Overview](/docs/) into one of the following languages: + * Arabic + * Chinese + * French + * German + * Japanese + * Portuguese + * Spanish +- Review translated and localized content. ## Documentation -* Contribute to the docs by suggesting additions and improvements. -* Create tutorials and guides to help others in the community work with Web Monetization. +- Contribute to the docs by suggesting additions and improvements. +- Create tutorials and guides to help others in the community work with Web Monetization. Review our contribution guide for details. \ No newline at end of file diff --git a/src/content/docs/resources/glossary.mdx b/src/content/docs/resources/glossary.mdx index aca173d4..910a3d5b 100644 --- a/src/content/docs/resources/glossary.mdx +++ b/src/content/docs/resources/glossary.mdx @@ -2,11 +2,11 @@ title: Glossary --- -import { LinkOut } from "@interledger/docs-design-system"; +import { LinkOut } from '@interledger/docs-design-system' ## I -
+
### Interledger Foundation (ILF) @@ -16,17 +16,20 @@ The ILF offers an open source [Web Monetization browser extension](/supporters/g ## O -
+
### Open Payments -Open Payments is an open standard for implementation by wallet providers. When implemented, third-party applications, like the Web Monetization extension, can set up payments to and from users' wallet accounts. +Open Payments is an open +standard for implementation by wallet providers. When implemented, third-party +applications, like the Web Monetization extension, can set up payments to and +from users' wallet accounts. -Wallet providers who support Open Payments will issue each of their customers' accounts with a unique ID that's either called a wallet address or a payment pointer. +Wallet providers who support Open Payments will issue each of their customers' accounts with a unique ID that's either called a wallet address or a payment pointer. ## P -
+
### Payment pointer @@ -38,9 +41,9 @@ To web monetize your own content, you must convert your payment pointer to its U ## T -
+
-### Test wallet +### Test wallet The test wallet is a wallet application provided by the ILF that lets you experiment with Web Monetization without using real money. You'll go through a typical Know Your Customer (KYC) sign-up flow, fund an account with play money, and get a payment pointer. @@ -48,11 +51,11 @@ Review the [Test Web Monetization](/tutorials/test-web-monetization) tutorial to ## W -
+
### Wallet address -A wallet address is a secure, unique identifier that's assigned to payment accounts that use Open Payments to exchange payment information. All wallet addresses are URLs (e.g., `https://wallet.example.com/alice`); however, not all URLs are wallet addresses. +A wallet address is a secure, unique identifier that's assigned to payment accounts that use Open Payments to exchange payment information. All wallet addresses are URLs (e.g., `https://wallet.example.com/alice`); however, not all URLs are wallet addresses. As a consumer of web monetized content, you'll enter your wallet address into your Web Monetization extension to link the extension to your account. @@ -60,7 +63,7 @@ To web monetize your own content, you'll add your wallet address as the `href` v ### Wallet provider -A digital wallet provider is an entity that supplies you with the financial account you'll use to send or receive payments. +A digital wallet provider is an entity that supplies you with the financial account you'll use to send or receive payments. Not all wallet providers support Web Monetization payments. A provider must implement the Open Payments standard and be able to assign your account a payment pointer or wallet address for you to use the account for Web Monetization. @@ -70,23 +73,24 @@ Wallet providers are regulated within the countries they operate and are often r A Web Monetization agent is a non-user facing component of a Web Monetization extension or web browser. The purpose of the Web Monetization agent is to: -* Recognize when an HTML page contains one or more monetization `` elements -* Parse the payment pointer or wallet address in a monetization `` -* Extend the HTML DOM API so that `monetization` is a valid link type -* Instrument payments by calling the Open Payments APIs -* Fire `monetization` events after an outgoing payment request is created -* Process `monetization` events sent to the browser window via the `onmonetization` event handler -* Enable CSP `monetization-src` and Permissions Policy `monetization` directives +- Recognize when an HTML page contains one or more monetization `` elements +- Parse the payment pointer or wallet address in a monetization `` +- Extend the HTML DOM API so that `monetization` is a valid link type +- Instrument payments by calling the Open Payments APIs +- Fire `monetization` events after an outgoing payment request is created +- Process `monetization` events sent to the browser window via the `onmonetization` event handler +- Enable CSP `monetization-src` and Permissions Policy `monetization` directives ### Web Monetization service provider A Web Monetization service provider is an entity that has: -* Full control over the financial account from which payments will be made -* Ownership of the financial account's associated payment pointer or wallet address -* The ability to grant authorization for payments to be sent from the account + +- Full control over the financial account from which payments will be made +- Ownership of the financial account's associated payment pointer or wallet address +- The ability to grant authorization for payments to be sent from the account If you, as an individual, meet the criteria above, then you are acting as your own Web Monetization service provider. -In some jurisdictions, it may be impossible to get an account with a Web Monetization-compatible wallet provider. If you're unable to get a wallet account for this or any other reason, you may be able to sign up with a third-party Web Monetization service provider. +In some jurisdictions, it may be impossible to get an account with a Web Monetization-compatible wallet provider. If you're unable to get a wallet account for this or any other reason, you may be able to sign up with a third-party Web Monetization service provider. -A third-party Web Monetization service provider is an entity that meets the criteria above and with whom you enter into a service agreement. In return, the service provider authorizes you to send payments from their account. The service provider retains full control over the account and can grant/revoke your authorization to send from the account at any time. \ No newline at end of file +A third-party Web Monetization service provider is an entity that meets the criteria above and with whom you enter into a service agreement. In return, the service provider authorizes you to send payments from their account. The service provider retains full control over the account and can grant/revoke your authorization to send from the account at any time. diff --git a/src/content/docs/supporters/about-sending.mdx b/src/content/docs/supporters/about-sending.mdx index e601b938..c4af5c6d 100644 --- a/src/content/docs/supporters/about-sending.mdx +++ b/src/content/docs/supporters/about-sending.mdx @@ -3,9 +3,9 @@ title: About sending payments next: Developer overview --- -import { CodeBlock,Tooltip,LinkOut } from "@interledger/docs-design-system"; +import { CodeBlock, Tooltip, LinkOut } from '@interledger/docs-design-system' -Sending Web Monetization payments requires you to have an account with a compatible digital wallet provider. Not all wallet providers support sending Web Monetization payments. +Sending Web Monetization payments requires you to have an account with a compatible digital wallet provider. Not all wallet providers support sending Web Monetization payments. Your digital wallet provider will supply you with the financial account you'll use to send payments. Funding your wallet typically requires you to link a card or bank account to your wallet or make a deposit into your wallet. @@ -16,19 +16,19 @@ Since wallet providers are financial entities, they are regulated within the cou Be sure to sign up with a compatible [digital wallet provider](/wallets) that's available in your region and supports your preferred currency. :::tip[Tech tip] -For a wallet to be compatible with Web Monetization, the provider must implement the Open Payments standard. +For a wallet to be compatible with Web Monetization, the provider must implement the Open Payments standard. ::: -Your wallet provider will assign your wallet a unique identifier called a *wallet address* or a *payment pointer*. You'll need this identifier to link the Web Monetization extension to your wallet. +Your wallet provider will assign your wallet a unique identifier called a _wallet address_ or a _payment pointer_. You'll need this identifier to link the Web Monetization extension to your wallet. -| Identifier | Example format | -| ------- | -------------- | -| Payment pointer | `$wallet.example.com/alice` | -| Wallet address | `https://wallet.example.com/alice` | +| Identifier | Example format | +| --------------- | ---------------------------------- | +| Payment pointer | `$wallet.example.com/alice` | +| Wallet address | `https://wallet.example.com/alice` | ## Web Monetization extension -The [Web Monetization extension](/supporters/get-started#1-download-and-install-the-extension) allows you to send payments. It links to your digital wallet account so that it can send payments from your wallet on your behalf. +The [Web Monetization extension](/supporters/get-started#1-download-and-install-the-extension) allows you to send payments. It links to your digital wallet account so that it can send payments from your wallet on your behalf. When you set up the extension, you set your budget. Your budget is the max amount that the extension has access to. You can also set the amount that the extension will send per hour. The default is $0.60. @@ -38,21 +38,22 @@ You can also choose to send a web monetized page a one-time payment. The amount ## Payments -Your Web Monetization extension acts like a messaging service. It requests information from the recipient's wallet provider, then passes the information, along with your payment instructions, to your wallet provider. It's then up to your wallet provider to deduct the payment from your account and [send it to the recipient](/developers/about-receiving). +Your Web Monetization extension acts like a messaging service. It requests information from the recipient's wallet provider, then passes the information, along with your payment instructions, to your wallet provider. It's then up to your wallet provider to deduct the payment from your account and [send it to the recipient](/developers/about-receiving). ### Micropayments If you're already familiar with Web Monetization, you may have heard about how it supports micropayments. In general, a micropayment is a very small payment. Each wallet provider is responsible for: -* Deciding whether to support sending and/or receiving micropayments -* Defining what a micropayment is in the context of their business -* Determining the minimum amount for a micropayment + +- Deciding whether to support sending and/or receiving micropayments +- Defining what a micropayment is in the context of their business +- Determining the minimum amount for a micropayment #### Example 1 -Your wallet provider allows you to send micropayments. They've decided that a micropayment is any payment under $0.05 USD; however, the minimum amount they support is $0.01. This means you could, for example, send a payment as low as one US cent. +Your wallet provider allows you to send micropayments. They've decided that a micropayment is any payment under $0.05 USD; however, the minimum amount they support is $0.01. This means you could, for example, send a payment as low as one US cent. #### Example 2 -Your wallet provider allows you to send micropayments. They've decided that a micropayment is a fraction of a US cent, with a minimum value of one hundredth of a cent. This means you could, for example, send a payment as low as $0.0001 USD. \ No newline at end of file +Your wallet provider allows you to send micropayments. They've decided that a micropayment is a fraction of a US cent, with a minimum value of one hundredth of a cent. This means you could, for example, send a payment as low as $0.0001 USD. diff --git a/src/content/docs/supporters/get-started.mdx b/src/content/docs/supporters/get-started.mdx index 00eac302..6d787af7 100644 --- a/src/content/docs/supporters/get-started.mdx +++ b/src/content/docs/supporters/get-started.mdx @@ -2,8 +2,8 @@ title: Get started --- -import { Steps, Tabs, TabItem } from '@astrojs/starlight/components'; -import { LinkOut, StylishHeader } from "@interledger/docs-design-system"; +import { Steps, Tabs, TabItem } from '@astrojs/starlight/components' +import { LinkOut, StylishHeader } from '@interledger/docs-design-system' The Interledger Foundation's Web Monetization [browser extension](#1-download-and-install-the-extension) allows you to support your favorite web monetized sites directly from your web browser in a quick, non-intrusive, and privacy-preserving way. @@ -19,7 +19,7 @@ To make Web Monetization payments, you only need a digital wallet from a Web Mon A web monetized site cannot pull payments from your digital wallet. When you link the browser extension to your digital wallet, you're giving the extension permission to send payments on your behalf. These payments are automatically and continuously sent to each web monetized site you visit. You can also globally [disable continuous payments](#change-your-continuous-payment-settings). -The sites you pay are not provided with any of your personally identifiable information, such as your name, email address, or IP address. +The sites you pay are not provided with any of your personally identifiable information, such as your name, email address, or IP address. :::note Sending a payment to a web monetized site doesn't guarantee an ad-free experience. The decision to show or hide ads in response to a Web Monetization payment is entirely up to each content owner or publisher. @@ -29,11 +29,11 @@ Sending a payment to a web monetized site doesn't guarantee an ad-free experienc ### 1. Download and install the extension -The extension is currently supported in the following browsers. We plan to support more browsers in the future. +The extension is currently supported in the following browsers. We plan to support more browsers in the future. -* Google Chrome and Chromium-based browsers -* Mozilla Firefox -* Microsoft Edge +- Google Chrome and Chromium-based browsers +- Mozilla Firefox +- Microsoft Edge :::note[Permissions] The extension will ask for permission to access your browser tabs and your data for all websites. The extension requires these permissions to check each page you visit for the Web Monetization [``](/developers/link-element) element. @@ -43,85 +43,67 @@ The extension will ask for permission to access your browser tabs and your data Sign up with a Web Monetization-compatible [wallet provider](/wallets). -After you've created your digital wallet, you'll be provided with a type of URL called a *wallet address* or *payment pointer*. You need this address in the next step. +After you've created your digital wallet, you'll be provided with a type of URL called a _wallet address_ or _payment pointer_. You need this address in the next step. - - ``` + + ``` https://wallet.example.com/alice ``` - - + + ``` $wallet.example.com/alice ``` - + ### 3. Configure the extension -1. Open the extension and enter your wallet address in the given field. - Extension setup screen with wallet address and amount fields, renew monthly toggle, and connect button -2. Enter the amount to make available to spend. -3. Optionally select the **Renew monthly** toggle. If you choose to not renew monthly, you'll need to manually [add more funds](#adjust-your-budget) when your remaining balance is zero. -4. Click **Connect**. -5. Click **Agree** to allow the extension to connect to your wallet and add a key to your account.
Consent screen to allow the extension to connect to your wallet provider with agree and decline buttons
If your wallet provider's website opens in your browser, proceed to the next step. If you receive a connection error, review the instructions for [resolving the error](#resolve-a-key-addition-failure). -6. Sign in to your wallet account if you haven't already, then confirm the connection and budget amount. Below is an example confirmation screen.
Example budget confirmation screen with accept and decline buttonsA success screen appears when the connection is successful.
Web page displaying a connection successful screen -
+ 1. Open the extension and enter your wallet address in the given field.Extension setup screen with wallet address and amount fields, renew monthly toggle, and connect button + 2. Enter the amount to make available to spend. + 3. Optionally select the **Renew monthly** toggle. If you choose to not renew monthly, you'll need to manually [add more funds](#adjust-your-budget) when your remaining balance is zero. + 4. Click **Connect**. + 5. Click **Agree** to allow the extension to connect to your wallet and add a key to your account.
Consent screen to allow the extension to connect to your wallet provider with agree and decline buttons
If your wallet provider's website opens in your browser, proceed to the next step. If you receive a connection error, review the instructions for [resolving the error](#resolve-a-key-addition-failure). + 6. Sign in to your wallet account if you haven't already, then confirm the connection and budget amount. Below is an example confirmation screen.
Example budget confirmation screen with accept and decline buttonsA success screen appears when the connection is successful.
Web page displaying a connection successful screen + ## Change your continuous payment settings A continuous payment is a payment that recurs at your set rate for as long as you are active on a web monetized page. When you leave the page, the payments stop. -Continuous payments are enabled by default and sent at a rate of $0.60 USD per hour. Use the instructions below to change the rate or disable continuous payments. +Continuous payments are enabled by default and sent at a rate of $0.60 USD per hour. Use the instructions below to change the rate or disable continuous payments. -1. Click the **Settings** icon in the upper-right of the extension. -
Extension showing a cog icon in the upper-right -2. Select the *Rate* tab. -
Rate tab with rate of pay per hour field and continuous payment toggle -3. Enter the amount the extension will send, per hour, to web monetized sites. -4. Select the **Continuous payment** toggle to enable/disable continuous payments. This is a global setting that applies to all web monetized pages you visit. + 1. Click the **Settings** icon in the upper-right of the extension.
Extension showing a cog icon in the upper-right + 2. Select the *Rate* tab.
Rate tab with rate of pay per hour field and continuous payment toggle + 3. Enter the amount the extension will send, per hour, to web monetized sites. + 4. Select the **Continuous payment** toggle to enable/disable continuous payments. This is a global setting that applies to all web monetized pages you visit.
-## Make a one-time payment +## Make a one-time payment -You can make a one-time payment to a page instead of -- or in addition to -- continuous payments. The amount of the one-time payment is deducted from your budget. +You can make a one-time payment to a page instead of -- or in addition to -- continuous payments. The amount of the one-time payment is deducted from your budget. -1. Ensure the URL shown above the amount field is the page you intend to pay. -
Extension showing an available balance of five dollars, with one dollar in the amount field and send now button active -2. Enter an amount. Be sure your balance can cover the amount, otherwise the payment will fail. Click **Send now**. -
Extension showing an available balance of four dollars, with a success message indicating one dollar was sent + 1. Ensure the URL shown above the amount field is the page you intend to pay.
Extension showing an available balance of five dollars, with one dollar in the amount field and send now button active + 2. Enter an amount. Be sure your balance can cover the amount, otherwise the payment will fail. Click **Send now**.
Extension showing an available balance of four dollars, with a success message indicating one dollar was sent
-## Adjust your budget +## Adjust your budget -1. Click the **Settings** icon in the upper-right of the extension. -
Extension showing a cog icon in the upper-right -2. Select the *Budget* tab. -
Budget tab showing your remaining balance and options to change budget amount and renewal -3. Enter the new amount in the **Budget amount** field. -4. Select the **Monthly** toggle to enable/disable monthly renewals of your budget. -5. Click **Submit changes**. A new tab opens to your wallet provider. -6. Sign in to your wallet account if you haven't already, then confirm the new budget. + 1. Click the **Settings** icon in the upper-right of the extension.
Extension showing a cog icon in the upper-right + 2. Select the *Budget* tab.
Budget tab showing your remaining balance and options to change budget amount and renewal + 3. Enter the new amount in the **Budget amount** field. + 4. Select the **Monthly** toggle to enable/disable monthly renewals of your budget. + 5. Click **Submit changes**. A new tab opens to your wallet provider. + 6. Sign in to your wallet account if you haven't already, then confirm the new budget.
## Disconnect the extension from your wallet @@ -129,57 +111,44 @@ You can make a one-time payment to a page instead of -- or in addition to -- con When you disconnect the extension from your wallet, the extension can no longer make payments. You can always reconnect your wallet later. :::tip[Remaining balance] -You won't lose your remaining balance if you disconnect the extension from your wallet. Your remaining balance will remain in your wallet account. +You won't lose your remaining balance if you disconnect the extension from your wallet. Your remaining balance will remain in your wallet account. ::: -The extension only supports one wallet connection at a time. If, for example, you have two wallet accounts from which you want to make payments, you must disconnect from the first wallet before you can connect the extension to your second wallet. +The extension only supports one wallet connection at a time. If, for example, you have two wallet accounts from which you want to make payments, you must disconnect from the first wallet before you can connect the extension to your second wallet. -1. Click the **Settings** icon in the upper-right of the extension. -
Extension showing a cog icon in the upper-right -2. Click **Disconnect**. -
Extension's wallet tab showing the disconnect button - The extension's setup screen appears with your previously used wallet address and budget settings prefilled. - Extension's setup screen with previously used wallet address, budget amount, and recurrence setting saved + 1. Click the **Settings** icon in the upper-right of the extension.
Extension showing a cog icon in the upper-right + 2. Click **Disconnect**.
Extension's wallet tab showing the disconnect buttonThe extension's setup screen appears with your previously used wallet address and budget settings prefilled.Extension's setup screen with previously used wallet address, budget amount, and recurrence setting saved
## Resolve a key addition failure -When you try to connect the extension to your digital wallet, the extension attempts to automatically connect with your wallet provider to add a key to your wallet account. +When you try to connect the extension to your digital wallet, the extension attempts to automatically connect with your wallet provider to add a key to your wallet account. -You'll receive an error if the extension is unable to add the key. +You'll receive an error if the extension is unable to add the key. Extension showing an automatic connection error, the key you must copy, and a copy button for the key + src='/img/docs/extension/connection-failed.png' + alt='Extension showing an automatic connection error, the key you must copy, and a copy button for the key' + style='max-width:300px' + class='img-outline' +/> When this happens, you must copy the key that appears in the extension and manually add it to your wallet account. The steps for adding the key to your account will vary between wallet providers. Interledger Wallet -Follow these steps if your wallet provider is Interledger wallet. +Follow these steps if your wallet provider is Interledger wallet. -1. Sign in to your Interledger Wallet. -2. Select **Settings** from the left menu. -3. Select **Keys**. -4. Click **Add a public key**. -5. Enter a nickname for the key, then paste the key into the public key field. -6. Click **Save**. -7. Go back to your extension and try connecting again. + 1. Sign in to your Interledger Wallet. + 2. Select **Settings** from the left menu. + 3. Select **Keys**. + 4. Click **Add a public key**. + 5. Enter a nickname for the key, then paste the key into the public key field. + 6. Click **Save**. + 7. Go back to your extension and try connecting again. Contact Interledger Wallet at support@interledger.app if you need additional help. @@ -190,29 +159,30 @@ When the **Continuous payment** toggle is on, the extension icon appears in colo #### Continuous payment toggled on -| Icon | State | -| :----: | ----- | -|
![Continuous payments turned on in extension, extension is paying](/img/docs/extension/enabled-monetized.png "Active icon state with green circle and checkmark")
| Page is web monetized and the extension is continuously paying | -|
![Continuous payments turned on in extension, extension is not paying and needs user attention](/img/docs/extension/enabled-attention.png "Active icon state with orange circle and exclamation mark")
| Page is web monetized, but the extension needs user attention and is **not** continuously paying | -|
![Continuous payments turned on in extension, page is not web monetized](/img/docs/extension/enabled-unmonetized.png "Active icon state with red circle and x")
| Page is **not** web monetized, the extension is **not** continuously paying | +| Icon | State | +| :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | ------------------------------------------------------------------------------------------------ | +|
![Continuous payments turned on in extension, extension is paying](/img/docs/extension/enabled-monetized.png 'Active icon state with green circle and checkmark')
| Page is web monetized and the extension is continuously paying | +|
![Continuous payments turned on in extension, extension is not paying and needs user attention](/img/docs/extension/enabled-attention.png 'Active icon state with orange circle and exclamation mark')
| Page is web monetized, but the extension needs user attention and is **not** continuously paying | +|
![Continuous payments turned on in extension, page is not web monetized](/img/docs/extension/enabled-unmonetized.png 'Active icon state with red circle and x')
| Page is **not** web monetized, the extension is **not** continuously paying | #### Continuous payment toggled off -| Icon | State | -| :----: | ----- | -|
![Continuous payments turned off in extension](/img/docs/extension/disabled-monetized.png "Inactive icon state with green circle and checkmark")
| Page is web monetized, but the extension is **not** continuously paying | -|
![Continuous payments turned off in extension, needs user attention](/img/docs/extension/disabled-attention.png "Inactive icon state with orange circle and exclamation mark")
| Page is web monetized, but the extension needs user attention and is **not** continuously paying | -|
![Continuous payments turned off in extension, page is not web monetized](/img/docs/extension/disabled-unmonetized.png "Inactive icon state with red circle and x")
| Page is **not** web monetized, so the extension is **not** continuously paying | +| Icon | State | +| :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | ------------------------------------------------------------------------------------------------ | +|
![Continuous payments turned off in extension](/img/docs/extension/disabled-monetized.png 'Inactive icon state with green circle and checkmark')
| Page is web monetized, but the extension is **not** continuously paying | +|
![Continuous payments turned off in extension, needs user attention](/img/docs/extension/disabled-attention.png 'Inactive icon state with orange circle and exclamation mark')
| Page is web monetized, but the extension needs user attention and is **not** continuously paying | +|
![Continuous payments turned off in extension, page is not web monetized](/img/docs/extension/disabled-unmonetized.png 'Inactive icon state with red circle and x')
| Page is **not** web monetized, so the extension is **not** continuously paying | ## FAQ
I get an error from my wallet provider when linking the extension to my wallet. Why? It's hard to say without a specific error message. Two likely scenarios are: -* You waited too long to accept the connection. Your wallet provider might only give you a short window to accept the connection to keep your account safe. +* You waited too long to accept the connection. Your wallet provider might only give you a short window to accept the connection to keep your account safe. * You accepted the connection too quickly--within seconds. Your wallet provider may do this as a security measure against bots or to ensure you've read the contents of the screen. Interledger Wallet, for example, enforces a minimum five second wait. Click **Connect** and try linking your extension again. +
@@ -220,7 +190,5 @@ Click **Connect** and try linking your extension again. The most likely reason is that your wallet provider and the content owner or publisher's wallet provider are not yet able to transact with one another. Your extension will display an exclamation mark within an orange circle. Open the extension to read the messaging. Visit the [Web Monetization-enabled wallets](/wallets) page for a list of compatible wallet providers. -
- - + \ No newline at end of file diff --git a/src/content/docs/supporters/overview.mdx b/src/content/docs/supporters/overview.mdx index f648055b..68dbc6ac 100644 --- a/src/content/docs/supporters/overview.mdx +++ b/src/content/docs/supporters/overview.mdx @@ -1,17 +1,19 @@ --- title: Overview tableOfContents: - maxHeadingLevel: 2 + maxHeadingLevel: 2 --- import { LinkOut } from '@interledger/docs-design-system' -

Need overview specific to users

+

+ Need overview specific to users +

-* support web monetized content owners and publishers -* support/contribute/give/say thank you/token or sign of appreciation/express your gratitude -* privacy preserving, non-intrusive; no sharing with the platform/owners/publishers -* no site by site subscriptions +- support web monetized content owners and publishers +- support/contribute/give/say thank you/token or sign of appreciation/express your gratitude +- privacy preserving, non-intrusive; no sharing with the platform/owners/publishers +- no site by site subscriptions "Why not just use Venmo?" @@ -52,4 +54,4 @@ revenue model to ads, but the decision to not load ads in response to a payment Sending and receiving payments via Web Monetization requires the sender and the recipient to have an account with a Web Monetization-enabled wallet provider. -In general, wallet providers are regulated entities within the countries they operate. Obtaining the proper licensing and registration to become a wallet provider can be an expensive, complex, and time consuming process. In addition, there are technical integrations required to support Web Monetization. All of this means a compatible wallet provider may not yet be available in your area. \ No newline at end of file +In general, wallet providers are regulated entities within the countries they operate. Obtaining the proper licensing and registration to become a wallet provider can be an expensive, complex, and time consuming process. In addition, there are technical integrations required to support Web Monetization. All of this means a compatible wallet provider may not yet be available in your area. diff --git a/src/content/docs/tutorials/contribution-counter.mdx b/src/content/docs/tutorials/contribution-counter.mdx index 4df52313..bce11ddd 100644 --- a/src/content/docs/tutorials/contribution-counter.mdx +++ b/src/content/docs/tutorials/contribution-counter.mdx @@ -2,8 +2,8 @@ title: Show visitors how much they've contributed --- -import Wallet from "/src/partials/wallet-prereq.mdx"; -import Disclaimer from "/src/partials/glitch.mdx"; +import Wallet from '/src/partials/wallet-prereq.mdx' +import Disclaimer from '/src/partials/glitch.mdx' This guide describes how to display a counter on your page to show your visitors how much they've contributed while on the page during their current browsing session. The counter updates in real time and reflects both time-based payments (e.g., X amount per minute) and one-time payments. @@ -17,11 +17,11 @@ For visitors without Web Monetization, the counter will show 0.00. For visitors with Web Monetization, the counter will update based on the amount sent during the current browsing session. The counter resets to 0.00 when your visitor: -* Closes the tab, browser window, or browser. -* Clicks a link or performs some other action that redirects the visitor to another page. This includes navigating backward or forward. -* Refreshes the page. +- Closes the tab, browser window, or browser. +- Clicks a link or performs some other action that redirects the visitor to another page. This includes navigating backward or forward. +- Refreshes the page. -## Example +## Example This example illustrates how to use the `monetization` event to show a web monetized visitor how much they've sent in USD. @@ -58,7 +58,7 @@ This example illustrates how to use the `monetization` event to show a web monet

- Thanks for contributing + Thanks for contributing 0.00 USD

@@ -97,7 +97,7 @@ The amount in `value` is an integer, which we add to the total. total += Number(value) ``` -Lastly, we tell the text on your page to update with the new total. The total should be in a human-readable format, so we need to convert the number to a string and round it to a specified number of decimals. This example uses `9`. +Lastly, we tell the text on your page to update with the new total. The total should be in a human-readable format, so we need to convert the number to a string and round it to a specified number of decimals. This example uses `9`. ```javascript document.getElementById('total').innerText = total.toFixed(9) @@ -115,7 +115,7 @@ The formatted version of the amount gets written to the `total` span on the page ``` -### Interactive example +### Interactive example This example simulates showing a visitor how much they've sent you based off how long they remain on your web monetized page. @@ -125,4 +125,4 @@ This example simulates showing a visitor how much they've sent you based off how src='https://glitch.com/embed/#!/embed/wm2-count-revenue' title='wm2-exclusive-content-simple on Glitch' style='height:100%;width:100%;border:0;min-height:420px' -> \ No newline at end of file +> diff --git a/src/content/docs/tutorials/remove-content.mdx b/src/content/docs/tutorials/remove-content.mdx index cea53273..a7b88ef3 100644 --- a/src/content/docs/tutorials/remove-content.mdx +++ b/src/content/docs/tutorials/remove-content.mdx @@ -2,8 +2,8 @@ title: Remove content for paying visitors --- -import Wallet from "/src/partials/wallet-prereq.mdx"; -import Disclaimer from "/src/partials/glitch.mdx"; +import Wallet from '/src/partials/wallet-prereq.mdx' +import Disclaimer from '/src/partials/glitch.mdx' This guide describes one way you can remove content for paying visitors after the `monetization` event fires. The event only fires after an outgoing payment request is successfully created. If the event doesn't fire, then the content remains visible on your page. @@ -19,13 +19,13 @@ For visitors with Web Monetization, there's a three-second grace period before y **If Web Monetization:** -* Initializes within the grace period, the content is hidden -* Fails to initialize within the grace period, the content is shown -* Initializes any time after the grace period, the content is hidden +- Initializes within the grace period, the content is hidden +- Fails to initialize within the grace period, the content is shown +- Initializes any time after the grace period, the content is hidden ## Example use case: Remove ads -In this example, you'll give your paying visitors an ad-free experience by preventing the ad from loading on the page once Web Monetization initializes. +In this example, you'll give your paying visitors an ad-free experience by preventing the ad from loading on the page once Web Monetization initializes. Assuming Web Monetization initializes within the grace period, neither the ad nor any related images and/or trackers (which aren't part of this example) are loaded onto the page at all. @@ -131,4 +131,4 @@ This example simulates showing and hiding an ad based on a visitor’s Web Monet src='https://glitch.com/embed/#!/embed/wm2-ad-free-experience?path=README.md&previewSize=100' title='wm2-ad-free-experience on Glitch' style='height:100%;width:100%;border:0;min-height:420px' -> \ No newline at end of file +> diff --git a/src/content/docs/tutorials/revenue-sharing.mdx b/src/content/docs/tutorials/revenue-sharing.mdx index 70c24a52..0c3e0a37 100644 --- a/src/content/docs/tutorials/revenue-sharing.mdx +++ b/src/content/docs/tutorials/revenue-sharing.mdx @@ -2,15 +2,15 @@ title: Set up probabilistic revenue sharing --- -import { LinkOut } from "@interledger/docs-design-system"; -import Wallet from "/src/partials/wallet-prereq.mdx"; -import Disclaimer from "/src/partials/glitch.mdx"; +import { LinkOut } from '@interledger/docs-design-system' +import Wallet from '/src/partials/wallet-prereq.mdx' +import Disclaimer from '/src/partials/glitch.mdx' Probabilistic revenue sharing is a way for a monetized page's total revenue to be split between multiple wallet addresses/payment pointers based on the probability of one address being chosen over the others on each page load. Why take this approach? First, the monetization `` element itself only supports one URL as the `href` value. Second, although your page can contain multiple monetization links, there are a [few reasons](/developers/link-element#multiple-monetization-links) why some of the links might not be monetized. -Probabilistic revenue sharing works by choosing from a list of predefined wallet addresses/payment pointers in URL format each time a web monetized visitor loads your page. Payments are sent to the chosen address until the visitor reloads or closes the page. +Probabilistic revenue sharing works by choosing from a list of predefined wallet addresses/payment pointers in URL format each time a web monetized visitor loads your page. Payments are sent to the chosen address until the visitor reloads or closes the page. The chance of and address being chosen is based on its assigned weight. For example, if Alice’s address has a weight of 50 (out of 100), then her address has a 50% chance of being chosen. The laws of probability state that Alice’s share of the page’s total revenue will approach 50% as more web monetized visitors access the page. @@ -22,7 +22,7 @@ This guide presents two ways in which to set up probabilistic revenue sharing. T ## User experience -Probabilistic revenue sharing does not affect the user experience for your web monetized visitors. +Probabilistic revenue sharing does not affect the user experience for your web monetized visitors. ## Example dev scenario: Use a script @@ -84,6 +84,6 @@ If source files appear instead of the example, click **View App** in the bottom- ## Example dev scenario: Use the Probabilistic Revshare Generator -As an alternative to including a script in your page, you can use our Probabilistic Revshare Generator. +As an alternative to including a script in your page, you can use our Probabilistic Revshare Generator. -Follow the instructions on the page to generate a monetization `` element that contains a unique URL hosted on `webmonetization.org`. Then, include monetization link on each page you want to web monetize. \ No newline at end of file +Follow the instructions on the page to generate a monetization `` element that contains a unique URL hosted on `webmonetization.org`. Then, include monetization link on each page you want to web monetize. diff --git a/src/content/docs/tutorials/show-content.mdx b/src/content/docs/tutorials/show-content.mdx index add68d27..1d6cdc3e 100644 --- a/src/content/docs/tutorials/show-content.mdx +++ b/src/content/docs/tutorials/show-content.mdx @@ -2,8 +2,8 @@ title: Show content to paying visitors --- -import Wallet from "/src/partials/wallet-prereq.mdx"; -import Disclaimer from "/src/partials/glitch.mdx"; +import Wallet from '/src/partials/wallet-prereq.mdx' +import Disclaimer from '/src/partials/glitch.mdx' This guide describes one way you can show otherwise hidden content to paying visitors after the `monetization` event fires. The event only fires after an outgoing payment request is successfully created. If the event doesn't fire, then the content remains hidden on your page. @@ -19,9 +19,9 @@ For visitors with Web Monetization, your content appears; however, there's a thr **If Web Monetization:** -* Initializes within the grace period, the content remains visible -* Fails to initialize within the grace period, the content is hidden -* Initializes any time after the grace period, the hidden content becomes visible +- Initializes within the grace period, the content remains visible +- Fails to initialize within the grace period, the content is hidden +- Initializes any time after the grace period, the hidden content becomes visible ## Example use case: Show exclusive content @@ -94,16 +94,16 @@ This example simulates showing and hiding exclusive content based on a visitor In this example, you'll not only give your paying visitors access to exclusive content, but also: -* Show web monetized visitors an indicator while they wait for Web Monetization to initialize -* Tell non-web monetized visitors that there’s exclusive content they’re missing out on +- Show web monetized visitors an indicator while they wait for Web Monetization to initialize +- Tell non-web monetized visitors that there’s exclusive content they’re missing out on ### The code This example contains three states: -* A call-to-action for non-web monetized visitors -* A loading message for web monetized visitors -* Exclusive content for web monetized visitors +- A call-to-action for non-web monetized visitors +- A loading message for web monetized visitors +- Exclusive content for web monetized visitors ```html wrap @@ -163,9 +163,9 @@ This example contains three states: There are three functions to activate the three states: -* `showLoading` displays the loading message -* `showCTA` displays the call-to-action for non-web monetized users -* `showExclusiveContent` displays exclusive content to web monetized users +- `showLoading` displays the loading message +- `showCTA` displays the call-to-action for non-web monetized users +- `showExclusiveContent` displays exclusive content to web monetized users When the page loads, we’ll check whether the visitor is web monetized. diff --git a/src/content/docs/tutorials/test-web-monetization.mdx b/src/content/docs/tutorials/test-web-monetization.mdx index 6b91c967..a9538e2d 100644 --- a/src/content/docs/tutorials/test-web-monetization.mdx +++ b/src/content/docs/tutorials/test-web-monetization.mdx @@ -2,29 +2,30 @@ title: Test Web Monetization --- -import { Steps } from '@astrojs/starlight/components'; -import { LinkOut } from "@interledger/docs-design-system"; +import { Steps } from '@astrojs/starlight/components' +import { LinkOut } from '@interledger/docs-design-system' -By signing up for the ILF's test wallet, you can send and receive Web Monetization payments without using real money. +By signing up for the ILF's test wallet, you can send and receive Web Monetization payments without using real money. The test wallet allows you to go through a mock Know Your Customer (KYC) sign up flow, create a payment account, add a payment pointer, and fund the account. -## Sign up for a test wallet account +## Sign up for a test wallet account ### Create an account -1. Go to wallet.interledger-test.dev and click **Create account**. -2. Enter your email address and a password, then click the arrowhead. A verification email will be sent to you. -3. Click **Confirm my email address** within the verification email. -4. Log in to your newly created account and complete the KYC and liveness checks. + 1. Go to wallet.interledger-test.dev + and click **Create account**. + 2. Enter your email address and a password, then click the arrowhead. A verification email will be sent to you. + 3. Click **Confirm my email address** within the verification email. + 4. Log in to your newly created account and complete the KYC and liveness checks. ### Complete KYC and liveness checks -As you go through KYC, the only real information you need to share is your email address and phone number. We ask for your phone number in case we need to send you a verification code. +As you go through KYC, the only real information you need to share is your email address and phone number. We ask for your phone number in case we need to send you a verification code. -All other information, including identity documentation, can be fake. If you're asked to upload a photo, it can be of anything as long as it's not blank. A face scan may also be required but is not used by the test wallet in any way. +All other information, including identity documentation, can be fake. If you're asked to upload a photo, it can be of anything as long as it's not blank. A face scan may also be required but is not used by the test wallet in any way. :::note[Why are there so many steps?] The Interledger test wallet runs on a GateHub pre-production environment. This environment mimics their live production environment, including the KYC steps. @@ -33,23 +34,16 @@ The Interledger test wallet runs on a GateHub pre-production environment. This e ## Set up your account for Web Monetization -1. Select **New Account** on the Test Wallet dashboard. -2. Enter any account name, select any asset (currency), then click **Create account**. -3. Click **Close**, then select your new account from the dashboard. -4. Select **Add payment pointer**, then enter a payment pointer name and public name of your choosing. -5. Click **Create**. Your payment pointer should show within the _Payment Pointers_ section. -6. Click **Deposit**. Enter an amount of **1,000 or less**. - :::caution - Deposit amounts greater than 1,000 require manual approval, which may take up to 24 hours. - ::: + 1. Select **New Account** on the Test Wallet dashboard. + 2. Enter any account name, select any asset (currency), then click **Create account**. + 3. Click **Close**, then select your new account from the dashboard. + 4. Select **Add payment pointer**, then enter a payment pointer name and public name of your choosing. + 5. Click **Create**. Your payment pointer should show within the _Payment Pointers_ section. + 6. Click **Deposit**. Enter an amount of **1,000 or less**. Deposit amounts greater than 1,000 require manual approval, which may take up to 24 hours. You're ready to start testing Web Monetization after your deposit appears in your account. -## Test sending payments - - - -## Test receiving payments - +## Test sending payments +## Test receiving payments diff --git a/src/content/docs/wallets.mdx b/src/content/docs/wallets.mdx index 6153d018..3a5d079f 100644 --- a/src/content/docs/wallets.mdx +++ b/src/content/docs/wallets.mdx @@ -3,22 +3,21 @@ title: Web Monetization-compatible wallets tableOfContents: false --- -import { LinkOut } from "@interledger/docs-design-system"; +import { LinkOut } from '@interledger/docs-design-system' -The following providers offer Web Monetization-compatible digital wallets. You must have a wallet address or payment pointer from a compatible wallet to send and receive payments. +The following providers offer Web Monetization-compatible digital wallets. You must have a wallet address or payment pointer from a compatible wallet to send and receive payments. -Be sure to select a wallet that's available in your **region** and supports your preferred **currency**. +Be sure to select a wallet that's available in your **region** and supports your preferred **currency**. ## Wallet providers -| Provider | Payment Address Label | Available In | -| --------------- | --------------- | ----------- | -| Interledger Wallet | Wallet address | USA, EU, Canada, South Africa | -| Fynbos | Wallet address | USA, EU, Canada, South Africa | -| GateHub | Payment pointer | x | +| Provider | Payment Address Label | Available In | +| --------------------------------------------------------------------- | --------------------- | ----------------------------- | +| Interledger Wallet | Wallet address | USA, EU, Canada, South Africa | +| GateHub | Payment pointer | x | ## Interledger test wallet -The Interledger test wallet provides a great way to test Web Monetization without using real money. The test wallet is an open-source application developed and maintained by the [Interledger Foundation](https://interledger.org). +The Interledger test wallet provides a great way to test Web Monetization without using real money. The test wallet is an open-source application developed and maintained by the [Interledger Foundation](https://interledger.org). -The [Test Web Monetization](/tutorials/test-web-monetization) page gives step-by-step directions for creating an account on the Interledger test network and setting up your test wallet. \ No newline at end of file +The [Test Web Monetization](/tutorials/test-web-monetization) page gives step-by-step directions for creating an account on the Interledger test network and setting up your test wallet. diff --git a/src/pages/specification/specification-respec.html b/src/pages/specification/specification-respec.html index 0e53b811..67d62111 100644 --- a/src/pages/specification/specification-respec.html +++ b/src/pages/specification/specification-respec.html @@ -79,7 +79,7 @@ }, 'Open Payments': { title: 'Open Payments', - href: 'https://openpayments.guide/', + href: 'https://openpayments.dev/', }, }, } @@ -98,7 +98,7 @@

This specification is a work in progress within the community on the best shape it should take. Please see the explainer for more info. + "https://webmonetization.org/docs/">documentation for more info.

The specification reflects the desired end-state of the Web @@ -111,7 +111,7 @@

For the most accurate reflection of the APIs that have been implemented by providers see the + "https://webmonetization.org/developers/link-element/"> API documentation.

diff --git a/src/partials/glitch.mdx b/src/partials/glitch.mdx index 0aa3fbf1..9ca7a24f 100644 --- a/src/partials/glitch.mdx +++ b/src/partials/glitch.mdx @@ -1,3 +1,3 @@ The example doesn’t require you to have Web Monetization enabled in your browser and no real payments are occurring. -Click **View as web monetized/non-web monetized visitor** to toggle your monetization state. If source files appear instead of the example, click **View App** in the bottom-right corner. \ No newline at end of file +Click **View as web monetized/non-web monetized visitor** to toggle your monetization state. If source files appear instead of the example, click **View App** in the bottom-right corner. diff --git a/src/partials/wallet-prereq.mdx b/src/partials/wallet-prereq.mdx index a7a8e329..a14cf6a6 100644 --- a/src/partials/wallet-prereq.mdx +++ b/src/partials/wallet-prereq.mdx @@ -1,2 +1,2 @@ -- You must have a wallet address or payment pointer assigned to you by your [wallet provider](/wallets). -- Each page you want to monetize must be served over HTTPS. \ No newline at end of file +- You must have a wallet address or payment pointer assigned to you by your [wallet provider](/wallets). +- Each page you want to monetize must be served over HTTPS. From c5ab057d3497143f8f991ce9244fb0adff84bd1d Mon Sep 17 00:00:00 2001 From: Melissa Henderson <57110301+melissahenderson@users.noreply.github.com> Date: Thu, 30 Jan 2025 14:11:52 -0500 Subject: [PATCH 5/5] incremental updates --- .../testwallet-account-nobalance.png | Bin 0 -> 56250 bytes .../docs/testwallet/testwallet-balance-pp.png | Bin 0 -> 64911 bytes .../testwallet/testwallet-create-account.png | Bin 0 -> 77217 bytes .../docs/testwallet/testwallet-create-pp.png | Bin 0 -> 117904 bytes .../docs/testwallet/testwallet-dashboard.png | Bin 0 -> 88756 bytes .../docs/testwallet/testwallet-deposit.png | Bin 0 -> 54591 bytes .../testwallet/testwallet-nobalance-pp.png | Bin 0 -> 94360 bytes src/content/docs/resources/glossary.mdx | 2 +- src/content/docs/supporters/get-started.mdx | 8 +- .../docs/tutorials/test-web-monetization.mdx | 105 +++++++++++++----- src/content/docs/wallets.mdx | 11 +- 11 files changed, 90 insertions(+), 36 deletions(-) create mode 100644 public/img/docs/testwallet/testwallet-account-nobalance.png create mode 100644 public/img/docs/testwallet/testwallet-balance-pp.png create mode 100644 public/img/docs/testwallet/testwallet-create-account.png create mode 100644 public/img/docs/testwallet/testwallet-create-pp.png create mode 100644 public/img/docs/testwallet/testwallet-dashboard.png create mode 100644 public/img/docs/testwallet/testwallet-deposit.png create mode 100644 public/img/docs/testwallet/testwallet-nobalance-pp.png diff --git a/public/img/docs/testwallet/testwallet-account-nobalance.png b/public/img/docs/testwallet/testwallet-account-nobalance.png new file mode 100644 index 0000000000000000000000000000000000000000..4862f12afbfda02788a82f4d43dcb51044c6e26c GIT binary patch literal 56250 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%0Db1(1_i(aS z0q7i0kq#4Tr?`Or)KawoM3vdiPm7k_xz-t~Gj(CS&)hrJ<$Vw6m(T+sn*z?hwf+iW zeT_VY`4C~1{Ey-ZcfNwQ$^jRWgyR-2cIIqH>hVT_5I9;g1?za+60-oTn z`HJyYVA@ph5rMb)Tj@6J8Isc6`M_KSIw6sTP5U+^uv>@UqPh3q;x zK0^hU`PxSU9o`=pPG+j@ z#}5nbj{*!@t!p6gqnmZ6l^X+c`pGRADNFgjNX$E9ms663HaO;(iwiJ9u<1^KksMvA z25nsy6iaH!NaYbU=7UHI?e&qY+-rWm2KuR+H&W>Wc%SF;oR2|pjH1{L2fBh2L6}UT z^DiDxhbJvBj|NAx-aLDf{zBl$|KL{B%V2vWSku_slcKM#w5>MX2DVR(3giuklFiH+ zn(`bs#yY-|*)b3KRW#t7R4*iTCgV|MlInA0$C$eMnvA4bUYAPA1Jw|f zZLf}P7le9E=h5A@oVH_?j@RTjvk!FnIR(S**%Qhvb`2K*^K5%*)hWxT{8JX+0EUXpsi30wZ~{N0+V?>qjsk|hfzZa(&J>@m&}nl*`9rQ%E4irdr; zx1T2HZ4PqL&t-E`5k^lX(4$5n)v9Y+B(d!9x+P1=jpLo!UkSp13qHQ{iIt;Bm3Xw} zp5)$vO`BKm+aUqV^+Ul~z(d=~K6d*UFga}uf4h$!blfd$Jr(fqytM-x1vsZwydl+X zZ{~r3T0f~3df-e0awpEdfFXVC@lzJsqJYH%Ya9L%m_1GGWHJ@Sl*ZFiag-rt2E#> z0YdT8l{K>9Vlr&xuoQ@4^sxa!6(-RtTx6N$4gj_9>Rfj>ikkV6of{j1(0G162z+?V zJ~pOBv#n{kf_&^=7rVBJGc$6*f3$oi(0dOWFn+;5`ukHLWIBG~^6krSPsxtWlr>x5 zG%&Xor-9=$Jg-N-Q`-LOsAG_($LthIYZtMdk5HXDz@UQpQjaR_O`sjsCMW5}787BQ zQNKZi>E(Ea47oqh8#2v%H8UBi;j(Z01*HX~^NVW?RqvL3<&D(9Mvdh9plU}P+ zA16k$Y=#T4*`2N@Pr+G_;pLAKbk--hL2F{(B_1lS2=JMD0Fdx+{YPEI&fkjf&btm2)Q?k{Tl@@O8OSX?Ux1sFI*v2+9#+-YM z@AG@k@0{nH^WXXB`KMQ}Ui0d6@AvzCUDx}%QHa{|{)Qcp=si?Nq66cVnR)J#Q3!tn zvS_tT2pYE8w;E?=R7|8i5*(Er6~*UO-q)w;=@PY(%B-SRLpWT6qlei5x)Of__=kZyx^5zj40yFfk{KRI#v_|{UqQ%t1X^8?+|^Dh!6SCK{s9ry>F z%UVtmeX&Xzhu)${*I%x$7+9yahd|Ue(8R63OAAShKwf#*<#zo=cae!atnOG3#6Z*{ zdezB?p5@QIn{Q7pxp@$+SN=zBiqK}X+xruZkdfT@iMHsZVTbcOjKHHs8y>2Ck1xSw=Al&a*A#T6(*Kf|2g3$TOUk{1`w%ee+b1{R`VjEdhJDzmI@kDbT@p?=7($M z%1i8L4Z#-a_4eXP=AQ^E#SUbTis3dzX~s}=zuLXEg(YkvRx%M|26IrV9c3Fg_W&2{ ze&p(>k-T^9hDduVlj<+LacXoBIQF8R+t?0lFEQo?{5m;S5QKTrvbraK8k*1H{6oGO z*rXqcKk%0bz(@zCdEHCRlKUL>NDQ>DONWEt_dN!~Y7-Zd4}aTgP-C}a zQ1jS2CtcCtzrQq`w07V^fH|z#LNHmW-Wqajt622Eh;fz!7}OBc>f6@A3UsYh&6WYQ0EWGT21@ zB3hLDsrkNexWHOw2H!3!RE75Ui1m3<*DwOoF>{CrySbk1yF`9`?RNgefW9c>f#Y$Vq^|EX6V>1i01yvs0uMX@Btj(Qu!n}*%N zo^zQvEh_Gv-!dYrEcT*q2iq=V#hF=e0c3g^D!;910#GHhsEI&J_AJseA9x?#?0QSJvMW zu~D;%P#o`uo4WHzy+X9RobJ0xnFt#JX8|Nhc8QX+a;SQBY7Lt1^j0D&N;W%{dP3Bz zAbcl3*7AgCh|@ylCq$?gE;dGu-d0w7I-e8am@UGjUo`WQ#Ntf z_SEHPNAQM9f%sSVP?ma|!p9S;@VHarCm`Ik6Z6uN|BhVb) z9P*=%g-xkCE(x7%AHR)XSi)~WQit>Ed|y}p=OZZj-qIyzcLJ(iF|5MlJ*JG&QLjhj zLVKYkdD(w<<;ED7)AT-{Jlt*8O0%heEcI4%$h2yK^tzxu18Qz-ZOoOdvPMa&Ih)=_ z(&TzUdG&~4DPS^jphDDDbri9>bs^XA zYjHaZVQveSv|SR&UpXjJ%2YkROj>oV`sE-;_L%!_?^|;FT)JPuvrg?XOoZdbNeA5h zd$}$@mYjw)mb*wJy%G!X^^~CX?B=HD#zO&`joxK$S?G?0!Y8j)2CMikq9UcZgZb{9 zJ_VtZu-wjL+te`Q8o%T9iy+LhLQ^Evoco1jo?k5EUJ-nb-GicK`i9q1SC|_QF@Eb8 zwdL~6HqH&ZfMT;m|FI)eJ?=xt{%}=wj9Ls|c^XLv9;3iGZHZVSwL{stZiQPfLA*s3 ztU4L_hlA!r7@L~myK{aQ%-7}Z-hHqa<2P-6xLfvP$uy{>+CRBa{h8XhHrUlGe)XNgk$wmpTQJsiQftSTLu^)C?bLok$W+-;E7XqmgusnX z_A`g}g0mAZ8S_pOzep{Hb~YH17ig#{oZ|IUfhVi1fG0sC2HO`@`1gv*ZO_5FULF?+%i_IG*v*it7puHmvhf}a2xtZIU?Yi?yz^Lh3jwPe#~9OOOtY+(3Vr{<$w%m zhwYd&GiPa}^G$7+yJSG29sHv`eRlqsGYwDu*4|IaZ0g;&*{8l9R(FKgXz{`2HL_u@ zan@^_)|p##yJZNSv8v{=G9lj8tGCy4NrI(x3X8Z8V71mxA%U#TLJ*N zcHPz97scE+=}Nr!$+YcfBKv(3Y8Pv+Yh`z@%C9m0JuBRS9PxzQJ;z?!l87}&Iox5q zI%1I*oHPBoFW}2Skj3e{f_WBav3;X4=7sVujH8a>XQ(67$wuZX6VlVj^-sHD3R?im z?`K42iMq;C8nxcS{eJ!78)p~6YsfJw^)ii(+nwU~d&SdCN&<73aD#n#+r!QCOQmIx zY=1dInzD8dFZfbfdzj(p)B0v!_)a_+=TK9YUy2iV42s69Ev{Jgq_y9f5%s_-7{9L% zx{bJU+xq~Qcy#*=_1wepzM*h8wVmoVQ1OIjW$xzTuLBD^U$L1DAlG`9@bs(xqsXikufi4BmeKC#D-g4n2n`6jnoI zk3ClX@(;k?$uJEff7PB5;W+@y8rtaHttre@#8V9%qF@1-39Z=yYm1JDy#v&9H9OJW zjs$D0;Cbc^0q*tldJYH{*J_C_wX(^>eT~fqRa{S~4wmaLnB{^eEje%xN1gvzHF)dE z>ooAyZNF|MYWTnS`K&&Numh1hrPZgD0g1@Fjmdh#+tYz4enXfm{9vN;?U;MEo7vd2 z9qx0wUi4Rv)ms3dX``RN$)0jD_hZ(FG}6~y~Tthrqkl@FVvdxj}_Q3^j_ zmumfxIbpD*M+Y)~L(fq75DZpQP zvm6>2^LX0vXpfS^`<5R|0Yce3s?NAWR)7Q`hmrip<9~kEFV4?vf!k4`2j=9wj+25; zW5Ut5PgG?F%LeS+Co67SBkm&Y!V^35&ABl8o<07ZYp50?86v(&5Q(&hUyNCi475fe zMYbWwO)hzsUrZ^|-MN%TY)@5tF>F0-M13ihlS!(B0nH%qWJ_S8=~C;*LYbYTCbcQ5 zPzE?&4G0*gNVXBR7a_8RO~@#|{wK9rlT#(@Q59m347*j|oUnwFnug0B zTgW&(G=xswiypsJ6(+f=#(&tkw6S$-B%prEbpzq~%(O~j#5azT;rB7CYx&@#RM8M; zi$U+B^_ykY4#NzHSLFe-+oivXe_!?(BxM)7y{?Emf$Z~Cy|<>3j$CdF8Sl1EEI7sY z*m;gn05dK38sJVZvX+Ui)NJF``>f{0G-Oru);FW(te&}>03GfHJ=#`yuWwdt741Gm zn&{&ur3^QOPBktXx9&%Fllv6-(bGZXflpr>jz*1l2SVsz$;Cm*6ebvcvx~9rY@P1~ z_?eSEfsrkIE4jS-|DG$!#)LS^oY6cz_YV_N8*xbJ)|gdtS5p8!BMeUy(hQFMxLW7bo0(UY zM(7E1umy=EnMXS6f|B8nPjk)3OE-@S63WA8q=!v&C*S~+W7n{ULqEiT-uQxO!S&#WJYx0SJ zpzRm7Hjh5gkAZ#wi2-@?l~=niCqUVPB!-XnH{g9$Cr!jEU=sY43@ zgZz&i`HpvEH+=JrY2nW84rHf~M@6L614@?)GO=qON)dJzWn=HZ$5pwlfB1s&ZxN4y zp-`U2r>fQMwFbnpg!cL2eBGTZ?$_i4D8&IvWOL$^UWI#Zd85M1xvNhtX23|Uj+xT8 zeQ-0l>@0h&pT1VVxJSpByaPfNGRK2yf$Rq~_{)E&>)6oE@eOikz4KOYLn2mdYPnA%_-}d7(tO z_??dIVa4Kwx}}c|$8AzIu4e0ug%+h0cO0hRQ&{r%+NDQp*RR`8U#VZ*)9jh_gLWx1 zN8gdUY$Y@u5SYyO1V7ZSkSfzMGPFS+PFlPBP zfXzdxbpK2Wnq=UIzn<8Q2r2gSSAvF!g?rcX#PLUL;zn&PzO=tRYx~5<@fpOve|)NA|LhogugK`j<93g; z%O6iw>cG-Ezv0$zj5n>H7(Z0D?uHwz_GnhMH_D4DJ--0AbFTt*Rla50!NJaI0ROX~ zp=HC09jR121!%uneR|9<&oeD_7m8Lp+WNtF3ND8~^F3sFwr?~=+H8I9thrCB#mPsV zW*U2te{pddxVmW3m!Gqk_WHTzL6p_ujWD?$E0K$Voz>S;2aU&d*>v?1o6y>QN|~vD zZG~S$ac_-kj(*j%weSBDQy$^hW0Pu*X}&t{fLV8A&q9L&_mAs!q4^q9o570hIxFO` zcU>=n)I>|ewyH(+BOW4b7Z(7pEE$O7fE%wiwb*@pNaSw?ZxNDv-Kk63J5=L}U*f;K z9XyJgY+gj^0om4ph(<(u?zVYxp#D(d}-m zQ`&J9O_J(*yb4O>l>J@JL5@PZ1WM&^C^2Bs!B8qe4#o-HDy!T8=-mu@#{Bvz|Bd}L zYR8cAw=<0JI_E}>dZ&duxk_W9uRT}yZxu%BcLK){V&e9^MdGw{?%kS_Bw4k&!UNNG znJZe)tr^#IJ-e;_9BynABrmrQPyDA`@2w0qH5#P!Kl@=GsXb>~OF#zmOO~5?SJ*t} z3$|7}l__9S#V+$VP!4IdO@G^@g6t{s_93AK#IHXK#b?x9~vM~hy*2DoBQQ+L4% zN^P^uY5S3Rj&T-sA>Q4t{KH=f=7&LSQs7Ccp^+LTxmQd!DDEAI=t_VIMmzDapZDf| z$~V!bJC-_sFd2q^fGi1|hzQnzP*q#>zcO+kyzowO`#A5&c-3h=qcEi-x#!~e-?CO% zPz*l=v`zml;o+abLrNYRdbvdx_1`D=X$`c|M`e7h}5 zw;I#SpFAfdK6j6-R3NHd-@>D$z~yNd!uOZj-CqIFAITBW&bS1Amv%{>hgU}J%;h|` z`$t!CTaph4-)mfj+Zi}AKo%tSQB(8YIjDNnoRIJ;c-ZI{{qX0TT8p#&Li=`xDm=jn z*IM9weVBf8ZGlsS{QA2u%yQ)(#51Of(xCDo4I%D^;3RMxd7i0Rna8gJaOA$m$GM8O zt)(*mLyf5V`4445HF`nYE_Qk6aCr~J4pLKdlmPAftES%$#^#qW`6t|c8+E6sL0hR? ztH(RpO=EFYjCyWJ0Ux)N;LPSXsV_Kht0?hh-jVF*e8Ep^zXvRJ8MX6mv(%(5u%BO1 zMA|Av=MXMQ>k!U8!ouyA*8qm_-pLXp)`LvwopKl&KH#2ItiN=qRIf>{&+0z=92(yD z7m?Hj!H<`e-FgnE>y*Wv17;^pCrRe+%{}$_F|CN{ubaGq)pS?gB|>J$Dasm&HsS(q*#&w?)R+AJ#b+(ccjSj+TP%5@`jlvl2b=)|iMKd<5_ zsjXk03LlT`n;wRZY$$qmT=Sjh8nwHcI)8Cc`G$n7X6hz2-=b30x z?$}Ny!lDjZ?7usor}lKs;fiX{!}lNu0U~J4M?H}0s%zEnFq#!naEGXBXZ#(N!^*!W ziS=By&+Zu-1RYoHzOMxatXVUYVh^^zvPXnpx%XQX?(~D=}N=?CJt0 zoGG`H8QZ>|vB-pgLYUg-oXzUYoy`O0DvwQbn5x@Lri|)O=7^O>k%X>gH)t|dPBjhI zCt~4%vL$N0r0IyoH;6lr2gANbvW*oJPPWoz4^j^dd`g9vS>X)g4DV~~JC88Y{nph@ zKp=Tv>c^vx)~wqbkj*9#NHwJcxdCHonBKDny+LJ;jqOh!`^4ge+xduzzRg?DcqQK` zwHq&&t5n;x-d`P=u10@Ef>(W)Xzcdl^psH_Z+q6gOW9pO>^tNFd{H`1{_v|=(Vv>1 zSc#vUtR&pg^n`)T<%p9?YyJ>PO9k!_NR!Iq7*JC^mW*ma7+S0ZQQ3lG@yk1z)<|#D z_LCd01cp7nSH^vfHnfwsk#$)&j5;A(Q&R)d;3&Wf#^+*q;#(;CWrbwp9m*zTTtAe- z9Uk|fXeQNIc$wQMyjth{1EzVXIBO;3rIy_+{FJi~JO8evC=T?W)k&Vpw4-42bo!Gm zi8w4e>U;OPZ-)=Nc_90O;>D=Z?w&{!6&a<~*vO6Tmppcjn9PKJg2MwqTTBtw9F+R~ zlZ?v=vAumi6;W8EVIhCQ;=D&3WgtlI` zZoWGKBtTF$+3Ewdj}zzxtP* ztrf;n2^4zy(hu)}lqduUh z=K|Yho(Bnhh81zs8{as%xUPIxR5&#??-|=-rkj7lQaheDQJib<{iK95r@Y zDSsfQx)@ia`N0a^8v3X+W)s@1cT40lPjVNath!%y8A*8$1$)MnV~PBR4W<(Q%}-Ai zx~vGF2u&3_Y6Fx>;UT%F=w!=zkS=R+$`lwY#+sKp=VaN>XyGRTyP4R-ftS5A6-oY< z5@b77Y*e%zF;(LCXuGwV&|*(TOf3mK=5XKK&b%JcSM0oD^&>4xI0VYN)|c*7GG8Q; zA6w@!vj0sl6OQN;Qi}2je8Fcrnuw)7sPsa*H72wf8yktE2Y)K%+^*4Z^v$mU{vW*! zdK4C6BXBlp2X4?`-%}q17j)MYS5Ijw0J2pE7!}P96d+orQ}MMUxIKv4LuHyUojbCs z;sF%6_bWXt1O3z#uU7lOOBDqd(zTCmfqH$WD>8)}_frKll|#JQ$9NV@{*KGNx|k-e zcG@~xCWPwJC^BneV}ey`w6HFX_6!$Zj%ONW5v~b#p{NmmDDKJ6eu2{7^dQVj^b?Wg zydoO%bHv&Xk4?A$Gp9g|)*_Hdp#1EGNfsb^FPm4?WQt^Orw$PEXCm@fp_|rfemta;gfM+#HX1 z7_M$L>di!Y&;RT^SeL(r>bQI$?2nFWJAnFxEEgC%J8kitZUobFy#M`9<9Z8cdeh9J zN5Gkil}H9@CqrgT3&=QRLR41zbO?v4tNu_8F89%@a8}3S3MkN(M1zM6qto~)qp9EK zEj}sjBr?;?JHw?nOA2`2Vp?t4$1hSWW2)oE0kgz6*jQ}#w0E66i*P8otE5ZLH0&mv zV_cvyOl2hq21NJQD)PV~#sFOAqCmeh%}Sw8*>8w*TGaI!F|3>x&|dV14XXmTdJU`$k0eT1s23xR_K>%EbUS??@|ka zW&j!(NFFTo1(Yw?ijFu%siNWmJaKD^zd0q{Wt>m1JjuIXLsSQv*cbOjz7FUcfM`XIk5)lYel9QJ+K!o@Qt0jS&=ZB)}^67&?TWxW#~Fp% zR-X7t>8((C_m3;7gLZBGXQe9%14u$|1&GLR=8J9JGj$l1d4V{S>0fDwI@ZbrGbT-i zxx}D;_IOd+UV#WFMm~;N`SmUY5!+xM&p~4Mp~mTqQ8bLE=)B~Z!`m}&1OPoe@mMQz z_eCr$|L*Fyvtyw4bsn$Bj}RtuPxai0GfziQi3Z&57H2{7;mma)0J*Ll{O@cFGH}5E3P)TlCitoP76< z^+%gcLJ^Dc!$gn4%xR=&O$u7mPmT}rL`LqOI;Ph1ER_wa_xy<6()rK#a2s`}3>imS zeQex1qIb%lrJ2tZj2;?g@wo-GNsi)eE4$@AUrmAfHKbrV9Sd#TtmM5FJw#|+SD20; zQCs35!PdL4-5Z(`caIaG65s!zPEL|`nTO6U73D|r|hmB^WL#m%gKBPn_8aeozbPp*yHk+|#v2UY5oooxcUQd)I)THv6i z?0$mf#-7Q=ji=4^ERQ9CzgA@k3&-xQw*LjN^I{CuVX73R7bW@)X+*ANuWn8T452h55}_i81L0q z%`N>szVRG5e(~d540l(WFzA1Pdx?-%i298^#Nx(Rr*I(oUsGu1f4NLAFLDJ#seI|( z4J>kRCZPx(0ki^;k>DQNMIPHd;uS&vV>1O64>6tD^E^BA&DMrV7TibnIQ6IWw^f3{ zP~t*rg&AO6^d!2Hgcw>_5{1FU%v~M3Ht7G>?r9M6au5D|={j%{Nc?Bu zNeV~lS&4u4+t!3+ysrodl9U+GBjzRt+nk-DWwv<9RlvC6i8pR`P>*M{saBn*IW;~|c5R^_ zH&4ZYQ{(7;ZI#^N_u+v8bgkFaKP~#l4@1oSk}b$aWm^9)Et+(Qd*fo0+~4qJ4AJl)|FhzrAQf#8RHM>XPFtM+IW2LroVz6 zOg>PeKStngJbN7aWZf`L!9MYbi^52DI4{#tZ4B)e{-~RY36yuD8!a_tUo@0iquyvN zwvuF-!BML^4hrnOC^O3myg#ALYfn&fM%kVR(rs+im3JfB;$SM)IPdR0Mc}9MLK7Et zYSc#wPk&>qIAs)xuXCf*t#6WoH$WL9jv8l_7cRD<8^Xb0&%@$1dFutV;hEAg5`tzi zsg0poyADRZ5vL!q+AcJ+)VX_u8IZDAu*kMbp8JUetp;=O_P1$0<7N8$aL#@tpI82b z%%4g#0;mc2Rq@N(*(G%|Ds5*;^4k^g30Fs|0Xe#8 zQd@PI!CRcmwEGjmrE1gyQ zPmgrmPXx^^*0MsQjQUxN9dh|o81eL&eF!iX)7|+{p4G4NYyv0xgW;I>v&@*yLQk#c z=cu6G!LS_~)0Og^<`XM7aaNdq0v{6@OJaht=8CylYRbR4_M`CD$&<>Or%jo z$^i{qKguF8HnjuUez{lGhE=B7>>3ktkZz@B!!)pVMc>gai{-}o_c(&8fA_II3r`Nu zuWM8q=Y7=dv?&QOBlM7!ehoHCjtw&59Fi`Y%IM|3aCtivJ{@ovm!ehJmLN3avD!-t z5CR#(dH@+G$oz1gWLZ>y67rzuLxlTw|Enye020DT?i}-Rjs22q)bs9!dsbG3oUVZk zOMLbWbkdUU!L@r40{8hXmgW8v^!S24R2`&|G#`02JXa_m`7^#6XIXrxdChuAp1`x|GOXl zQAyBLADv>ze>8Hh&1Y!l4f~>Q(P!&FeVJzbQ<*iuK_A$EeTNeS2wK4npZ@hP^uK+l z+04LxE&Tfn03j@(Z$em`JOBRWKQtpxN&5}D{9-qj-2FqH3G|I~?8}9J|MCiOPmD^C uCDY3({(Bn!dm8q(%jy50yI~s=-o$b2`F$bq$i}{XIvV;n3a?rJ{XYOe$OeD_ literal 0 HcmV?d00001 diff --git a/public/img/docs/testwallet/testwallet-balance-pp.png b/public/img/docs/testwallet/testwallet-balance-pp.png new file mode 100644 index 0000000000000000000000000000000000000000..ba4543249a9d04365e4dfa06a201cbca47e30e02 GIT binary patch literal 64911 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%0A_?!sg-gVV&mJLe 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 z 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

2EORBB|4Z)tzf|Ej6T5NHBI&3YMHrd5 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 Ik4;|v4;;%{y8r+H literal 0 HcmV?d00001 diff --git a/public/img/docs/testwallet/testwallet-nobalance-pp.png b/public/img/docs/testwallet/testwallet-nobalance-pp.png new file mode 100644 index 0000000000000000000000000000000000000000..b6b6f2068856e9dd1569293b1bd96c4a160dd3c3 GIT binary patch literal 94360 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 z%0A<%2TynRlzHH5l}elJ)auy^4V72bBg(SxF&ffq!i z{=(g17Kt7DqqRtujPuhm_ObzIu@~9n1u3cyt7o{`5p}Us2j2doX;94?ax|a?Fg-Zm zj!0g{gq_K>07g3HV19V!u-gw6P3WMtbR`^Z0MI>2&-N2%cG7ahm9yRWVXbq`G5Pf8hk_p62H5yQ`6!Rr5gcb7z|uqvXs5EGHKa7LY|zrXG%uTtODABJ@IcusQ*s zE?I=(w76O=BR08=sm^L}Xbw^wgTj`|FRw_qFyoXal``_W595e@YJ+(B_Wn+vu@d;& z)|At0X<|Nv(vq5ZFkMw1FKC8)X0zA5OPSO>WZpZKx}(bVBFF4#U0E4fcoOJ^c#(I< zKlBq-n|C308Jl~m~Y+Ts+R`T+x2O6L8-su)Y{g# z$Ri9w%O~Jl2|V^ffrQ{AbF~_E1FXvys4_b5Y^{GOv6^T|y4YHY?pok?T-%1oDqZC& z^NQKQiS(1#1XYFkX-8Yu=E|+jZ9KTZrN318{aQA-PLN#DGz4L2#g%rzJk}XJ@5?pY zdDOQD@6x2dioE07LEl_hW*5t#IjK$k{rnSvs)#WR(MB!VhzXstLOm^SdVUMhTPvq9aiNnOjlDzl94j=!_n$ zY^IA{e|Z*2%)2^Xl$smHu1VM_zi?CB)=*-y?)ZHkb+J!@6mhrxRViUmpzczx44~W& z7nWI!m=4m%MXqcE_gnP32Rcd*&B4Y=KuX;+@VFi-_06|(1qKheoEH4^)Qd*%@oOS= zPx>^sZ_=vqLkS2iPMkB>VY`{yLfJ8(jQ6V=S1i=R3Z1!Gl9vqEHrrsw6!-?ydKk( zq9Z#Wr=Wxv10@o21xDCHegL)mNAyc;xd&%Od415-MS&0@!`L{?79V=T~^8gogQbrNp zBmw9(^1g)rb%N7?6HJUX3nUe>KVvY~T8bSn^)OX&N8k( zf%Sss%Rgb1U`!iH!?n0EKw^h;2}{Qo7cZug&c3 z!zjcRhjIaPnFjdF5#6MQC*(=zq5rAtU77eUzxy**yDQNpu=5Hc{}NB93RVUTnAAx< z=V*?pHo)T3McLPxO2hBw^u2)-L_>|R_AY_Mr0NI5BUhC6(Go=u5t-l)jb&%Q9_!`2 zYX)EdD8e56nFUZiwwX-g=eHmWYm25zx#x!Lkv9GK%;Sd_2a%=EZB3UH?K$Rw{D;c8 zIIBIK#x9{U@7mS#w_Guv38*&2?Jd9gLamZKhdvz8$_w8v?mQ(v_2Lu1p3t)7O*l%sn zNRMjfhFo|4UVwhH`9m>U!0;V+hCLd$rLmNl>BV^g5p{i;*{Sc&XO+&w zLqqy!eoO4g%|=3Ohl;f-ysj|@hO10j8LClD-LJnf2V2;i5+7Kh?|5sgY@%9k>F<;$ z-`*z??^*{TQN{({x^%WT%j5f6+ws&Zwee5Ybu$Bw_$Wwu6P@==ad8fe^K_U4@ZZu<0Idk-=kOCZ0* z$_4_Jl4zdOGyHRGH)3jn3zyR4^oOq&er%>L$?^mi(6Fh8u|YG!0uX6YLLe{d+W5`tAEv4(cmU!!-r=-KKKKVbpb&o5GzVtl@-q`OWsh$J6|p?7G~ zv?iCV9Kd9LR|+M7C(*9_1E|Sp)7(-XvYr_ZKPQJ?b@HMRy0Y{ZoEeg(2aBmdnU8E!#%Tsaj?Zr z*PB2zccqQ6xHN{ALV5dgr8)6`Qyo?$E`9d_>Au_T>noq+ceRCstxyBjENTr|9JVK6 z|BWUI{*zeTis3o6r5{0$eYp5}*W3~YljL*R9T(;LDCp(}Sf*t2Gfc0lfC5cxGdgtP{&e~kgC?Mfrc|4pq^{`g0kT08t1lR8Trli| z_h`vTOAM9PxDAmv+D4|@F?u?oV&LWiRNV47!IgrcK z;NP3R!xqap%W&SR5x6Py2P$Xd5amEP*qu5@JOVugIbTq#h?2oc-qlHVvjDS|6Dz5&m1e&ud1G$5t)h+a0cSM4;)k&gVUW9w#Xh?N`(Ool z8BhcT*PbDBH#?+8vU)sjp&V{YMef-K-1OVM*PFmnv)}41(6y~p!dJ6gR&TV7E}pm} zUE;c0Gux3yLh3jwiwdNS;nf>-U82MF!2m1jI7)6rX|#VL`|hKl7jSjBNQa>9b-c<8 zxIjI%SqQL;IoWkn*xgV01YXXhI!dgSL7xLQq%81#qBTsB)6qhb_FO~AR*}!)d=mh6 zkZ1Qp*p};t48&d_;DH>LGhu+OcC1U>32wKQ=mK?W_C|-c?X%24viLIt6GI>5!<*|N zJVBMcYJ5PD(0MF2;suhX@ubzvPrBy@O?NUIowcX0=*obCJE~YCdy1RgCfjQ8K-oz>D~ba!@4p_Ga4$>pv7lTR>|v!k&XDFnb~MU9CU8b0%>V@c%hQt+7$nGwmxT&KtfjfY^_xKoPnH5NDke>BMP*JKnYBSCNMQDoB}M`zUpsT@hz0 zY3KZI?joGLJFk4^VvVg+@nvik$uMyMP#YP#T@~Q?+d9?6_WHk3@UbS6v3P;xg^v9RM0$|c$Vgb@`K;H$g4KB2~ zmfy~u%-{I-O-;b=*bx()Tq|c1T=*5<*#bI&54P)pf^mQ3_Hpkf?|#Ao8c$#be@cnH zW<`O9U03^^+Q<&QWAo;pmK!&PG9I9SuDYk#yo-O#z z80DrEFcuK;lj`eZK><)MZX!Dm5$})dBshOcO>y*q-eU5AF_%L7VsX8W|I@E|gDj*t zgs|wdaP2OOU)jaxu?gZ&m4EQQ%IsqNTgl{rx`%N7HPf~D%?AZY;KZKj_c5>ksYaQ& zyutb12k(co-^$PBg=_yhAOW=Y$o-kbir(_4B(X&*ybcE)@GlhuPiUO4L5_lyR|cZ# zxozMFraxiH1zO`>ky5}rzQz`yxhC}fs055&?LJz(5ShgvM9(5;{j;DE(BNet+EcT+1f&0n<`O zh{f$GIQ?g5Oe;)cej305c3psVO62uj=K(-Zl>RKsPY(Xf*1G$Rxc9Gt4jOOvw{3T? z{i_jBeV;XIH9&we_Xk;=%jnWV_xb`Xf|38Dy4U~Ff8z*}J-jk*AHulW3;&cjeYm{+ z1BF5jn5`7=#L#O>96@>j1JD2B*++)M@n;b@6c2>SK!8F?ST}Bk>e{9cCIe3S-P9hg zFLi$ij8oDZG*1SB*?Pct7RP(-U)8R<0I?C--TCj9{qL6j|8>jalqT)W*XdH4SC2$| z$e)IGMn75x`gs6{>gVKwzZiA-z<7 zoXDWt2NHa}#jSN2%!w8ESMm7kyC^RJv8?l}Y*=O3BCp|eCX4NajcGh83J$t|V>cv6 za^9j}Eg=67WAy)Sco_D+;yPg=F*E9pE;bkxG36u2 ztGsw59Iq>q@-cASoigzD^0h?g#x2=fLYRc|nNn1VL{AV)ybIw3yQ6c7@Gcdh8=opM z!=Rc9CsL+MV}fPt@Wr9yZVUaLx+Wy)>>Lr(LsYxE3kqunPQzwPMWC{hBV#K6pTzLcod>e4G7DB|t1$U~EcL_(SPJ;Wbl_jv`Jr;~_HYZf__L z<#_7CCqkTNo2rV^q$bG6$d|G~WWJ@h-?Dsi`1k`5!2FtkLstFkSrHC8)hEaMgqknw zseP=>=Ya{AQY)H^iG~c(zZRriFYkT)-`VW4xIv1sR#dT{C)2kavdQMRMSM{o}CfRon5qu3G z1xtIqD4JHdLsG2~WDwfJ#d72tl$y&wi~id8qx0olFi_pzU+%fq4_FNDBH4bZi)@5ZedbV|p8tgpA>|GPHpI)QlOCfZe`w>^RT&yKqO zEd_Am$5hu>^co1E3%KoeFVM9PTmSs=2JqOkJAePwe~w`zAS_AM6(;;2M&u##H?;82 z^M9xS$RIQM{r~%TZU|8{Tp#A@xZ&r ze~sdwDFBx7f0(w9|6RuaF5`bsIT3PLoKe6N5-G=_@a?L2;r~R^|2x?80kFx1NFb1Wz%<~X zVxB#mAzX^ZM!HG6EUoF|!1MHZJ__r>skQ(Yq>79e|>BZ{QdM z9f5__0f@A;J!s}S3IVvw6>=OVA>Cuxn{fKHC!z7rVIcn_{0ld72}rC2AsoI=RVWhoNVpcoE&j+*{{bDaaqZ+7fe3D z+hPP*Aq0&e)xY1=6 zxnx;>rgCmAW^!hi$!c6K$Key`$q$56=joqP{Wa2G11Ea0 zt)3h#VcqnU5-KfLxl=k@!^CpiOGb7 zulBm<%#A67q@wpBcm6%5OUfVP!t=4?me~rv4*P)E<1#Hs>y-HFnb@kiArvbevxf1| zk0Dy*HN+?jVonnU0ba7J82T1*o|@;|E!d1y4xx@ z|2ECzqxW4`Ghqs7&Cyz`>B+*d%yZ$E?XEG^wB;b})H?$Ew&k2%PG4_$i7eI1615MQP1lxo)Die z6EVw!U-@$mu1qx%ppI9Dk*P9Z;PVsl)$T=EXuAl~9B3tlqA^xal@252GGyLPx`|0< zvrs-5D|+qi5T6c-l^&W$lZm%z&im2M294_mo_w&q?aN_kvQ z!j|NThQFqVUJxX?{qP+xDmnjR!Xtby{PtUi?&%Wii_Bc-VjGhaeJ7QXt+FbhoxS%M^oaeu~q@+Ro{UWM^<%`v?&UQJ=& zCtSBQ`M|M##B~y)4vDGDbKu5!9C|G~iCC&=8#uL0q+romoy$2nyxJzwLaR!2{Gvwp z=*)guCF}OT*S!91<1)Y*ebpIC(LHC#l*gBxhS|l7;4#)SC480`?R%wKFDWU@@3%1G zSUBMzTZ`ULQXaw1G-IenLql|gi z`Ih@-DylB~P+9`L*-*ZN%3C8Cly{LSHeRPKz(6s~QL}fiy6CHpN&u4-?$I05|e%QBqMjD z&avU%$7<*-KV(0SPJcZ|2CL-UBiu%=;;a4JAZUfr2)>53o6oa5Yr~`GvcyZkEqy#A zn!_8)b2Dblg%8sokm4RCuwlBM$MM^J{ZbYqc^O}6pw#m+zBP&K@}SskHfye?Vk=AM zOTj+S*)7#O8v4E_A2a(^e?u8tJ<0e5gEettyLkMd&zF53<@ zH34viDn7$-WE>$`0wVZ+Hv`cjjTC8N%(FLN#d^_{(u8qs>P4MW7DRZCFc%GU!K?y3qU+&YT%T!*pQC>5lf7$aNugHJw2~&7# zL7Xbn1y$&kEvsz~GT>1oM%o%Xl!zY5Bu#zVPx*3ck4Z%;pfizjo~a0EPzri*6B^Bm zPMPgta(AZXirfY`^PKqobDSJ18l;Bwo~WgQ1C8aD35R{Sb{O_Lr_}6Om{z_{1z#=V zUL77&?c|=DF`$!Vh%XIqbI_usA!zF!xeRvOP#@eqyHD@iGK|I~JH?V3zq?ekzW&~q zV41Z!gE6jJNRq}Zqnsj#Ub?)G|6jLD{oCV!WVk!>SNjAi=})7Rv5NcU)^_o;30+k&_=zt~B>CdSdl$oCD$7YziQlPfh+PNLd+e9ofyHAghwHQz`&Kk5fwA4L=u2%-guEGQvh$^1hnl@GWfZ zjiGOr`h2VWBV9xqTb&zHB-?@#L|FDTq!dHjL6)JQ2WG^V#}Zy}8md|@zuKQzoA%}S z&QRH21w*&`-2m*?Ffi+bp}fJ(QJR5*GSPb__J~iFprcxb_Ljvzay0&ub%zD7fucDXz?7}&b+A;kWcS0KPR3X{FGxa zCH8fm0K1DecFlb5U51SCw}VP>wrM33rEf6@w3borUuzwnLBW|{25<=RgJ$10*sG_I z3>i#0=qb`EBG6(%V6bDg^)VB-y0nzN-Tg}E_1tAk`CcNv`?*3!_uA&fjMf{HXcrmd zxGFsu%k}2)2*>q{7{h(WB{ZF#lO_mdbjxzz2RDwn@e;#>jpj{-Q(I}H4a(?w)bhw( zx?Tz}d~VxnbuNS~gP7MNbHAD)yZftkUHW(wM({@Nz<`OFcf{^8=og9AeY!@?9n)|wyq^cSAD1&`|c=`=HF$GPLnbIbc?#~UOM zGtC=qCAOEX18*#|*&x_}N0LG;AK>`PhleVz1@wYbh0hB<20VoHhq5&<#WHAyQvm73 z58QRfdU%keXZ$cL)39O@xoPkfdAR?fr`jQmR@nqnJawubc_~?kkSfc&Bu5Xxm)7FY z++)l064A-aFKJ+4s!4D+fMLI|wF{2GUO8E;>4JS-zsV-u^kly`Nc-KLBBi+S zJ&$-(YGUM+apWU>ADT6go?pl&8ORY+M;wk{QD z_i;Deog`gHu|9SCL2u^0;?@DAA2{n>x(2&>E{{P3U*K5J!iiaHXCU^(ClL=l>oEJ3 zyh8|j=Gd0+S!U5PmAo>*VyWk_4(LBx0FT41JugJFNAzkpV(_R=*z6^ zVIjw8c*?c{*a#PI=k}=(N$r$9%prz+3l3T~nO=L3P-#5L4u-h$~sdbhdZz);Y z4Df!;Wc^km?peZO$ybDmRL!z0n^(lZguRaWup!mq=fq+4h^^Ffb(z8D8ky&xw@u>N zC2dZ4AvzKf?8$J#U>w5H2Q7I2=MgIr)@>1ckR|lqIA?&eA$_2c$_?uOs&cc0lz8gHBj2OmDK^T4L z0qutgndRxC^dud+G(JM|4t7Nvk^!HU@ZR~~(smb-_PXT`6`jRB?#l8FQR2dv zQ7ASb>E;FkyL2Tg5tRt$r{isP-ExyBPErVGNu!0+bldP*km+I!vE*~Cyth2hSbD~! z^|yx3h=#mf7we1cB!)A8f?#EBj&*Vtey2x3z5yxe;-57%>ouafv!wx!IvI&K7`}5@ z*6jt0FrC_EEm0X7!^&*op$F}j1lLKBKI;F<*TjAHL)-AV6AUGc3v6&+BJH zVnC{rSD=1DoD)LTICLvCGxCydGn%rACFHi32Yd4~Xvu;D4^zmz;CQE7WNZDmWwM z`0zH9K_p-dWDlb5F?>DcwBNqpu>NjzRn6DruFS5%r{l}G98dYc5Buh4Fz78sGc`fL z$+}1yjWB&}M2o9TXHD;p(cmfPA4)!Z@_`L3muOa<*dXkH5v9=&nq9BbQxod4(p#)B z9Jc-`?i{Dk%+75jZrc?t;Ax&x+Wu@Mf@-Ya!q7_uudYVvDfDjj5P9iy_j{{+CCP=n z{w9@fh!FYPZv`|8qX^&i&J1aqYWV7PBuKalb{iT=y}*6-`0t~61LZ8_qYQcgIk{oE zfsPnV4-xU9+x*4x!a>emA;cG)@_q97C~6LCQ$t8`ITXCoL?D~;CPNY5J4Ou!Uh5hJ zti%B99R+amWRwfSSsjU)OIE{*Lj&`ih6a5E)N-Y!%>1Y<@>QP|;SQZVO*PwHjPEwI zl-tm#TcoVvbjjFY&i|xY9W#*Hrw1!y5pz@;c0`C75e?YgG1n**El6p}U*mH*^N>il zGxyyG(ofh;d-4xzmx>M%`DW=F`S!BIO46jYuca{VvGjr|?XZoxV#oR}rb_EoMO4rO ziWQ5dp>u5YsaUC|9pdae%<=d`#o|+DLwOFhv>--)u8(u*xgx2Jc!L7&Gc!Y7Tdd@3 z`Md%X`^U>YuvlP^L^j35kH?&EwXmgHaK{_iZ|tCDeT;b|#W%?V!Fi1G_rAYzQ-J0w z=l|Xy?U!A=)D+3f&U^oWrih)0=R_=&oVHc+p`?obn>2Kt`^{F>t6$9O^vjgg{8E~V z{G!|pALnV+PUd{cl-b)?WgEf4Q$u>CN2o?kyP)Yf4FK= zPJz_mp4KbYmdA!ziH2gr@?eKyeA$EUG`v8E85y?AWCf)UJHs7?L^Qi$tEwrQxj6i; zoG>fXQsW1y#&a4I5-&lqDc#77jWy})`nNr@HI1fRc#=8{g)m&VM8Ku``?eX0S}pO1 zK1D_Vu~%onoECd5yZO>viOr|&`3$JN{G}b{oDT`T%VS=d8f=8*R^pP<@$*9{_=Qzb z%R{vGrwr6M3@cbRW^)*J|Iav$@<)a6e4Tnwm@zc4He{DjhqsPNJ%K4M#&@HK3=HM} zK4Q~4NN9SJ-KvCeD+<2{JvJ=mkBJ^|)VV}8p?31sveid<6G%9?SxSANB8}N*rZDs< z-AB?En^66k(nSsryxv)xcKlE9R#QIWrLMe5FO4$-IiY->f$?CCU1}*!?E$3af3f$L zVNteg+wiT3lyoRV35c`^4Bd@144u+LcQc@p0s~4n4oG)PBi#($p>%iGce&Pj*YiF1 z`rd!v&-HI$+Ze9%ypHpzecz9>XFH}}8w0Kx|9Q74FfINCs(Y*ID@5H|fhq+$Tw2|B zOuMx>wmjvvN`GD98=S1X5!(KDx~Z(gVLPdmR!Il6VL#j;p?bgDKdQb>7I#or${-;T z&q^|<(Yv}k%4n+fs2;B1sz|n|1~w6Djxl)mYvZ~9CGu16$xHKV$s8*82y$bqy{0JO z5pMB6O(m^02ZF&nMq&zH+!=bW=@I2M0>$(d7Pi#VD`)X$|W` zQ~x!`$S0`GmUIX@@MOsj_M zlirWA!Fwru$8T9!=z@cQi3Y#5XKSwl$HSNN;yl-xfv>L2U*^Qn8A$RO4~ygM=i{A| zFl=|aM+oN(yBE4&3gVz+-RcBP5%?g3VPyOWTj$=Ms)} zR_So|(}!Sd6TKMsB`MBmn5*i@o3Ps~JQxM7SGHqLFjvv;bPu)MzHZE-A){F zR#8Ei6d5R;UeFJ5A8d;iX13Z7Jp*ruvdN`#q#Lu#K%TaXLsKiVn6rn>g!g6+CG`~= zeO3^O?sF3*B!SWbuPEO+N<-BTl$&{$!hBAu%Z9wK4@nIOB15#v=YKeszLpl)9?uaF zhk^mxRgXmZY|Tvd@YRrZYyMu39y+{>WR`;#*638~tX?NY4XfzB!0NEFn8}GlUPfK2 zj7j;H9jPzdBv1q;v34)-I#Djd#H#~WSS zvQ@VNklsKeN#?qIdCB|;)oZj;Rxrq@rRQu~6p)BWc{VwVR zo1ekTd<0sp{$YN1*WX7qTD|LWlK_t24?A>t2^QR~KK8pVgsEhD40DGwWJ8hL%`2o=~Ab~rV{E8#- zyqAzPk$>;c0`O*5h2cVCq2@IOA}i@R@ZYUe&heF?6A1CB4b zpsl9Vm5Lh8x}i?vZ?ao^w5?$oCUf(hyK53IRp2Whm-3v(9h$}8pmvfrbL`#JXwUZe zf0t~3q5CpC5tc=a$b~L{6mZ$(;2IJ^x<1=Mi_O`#3rk)XpaoZCCB(IvjHD$fbCxUa zs{qfuKtF|eOzhmZQ1h`UIvZk!(o~bqc8BSv%q@7o9Dc%`VA_6^k!fj5k7~_^2@&*Vl`gFIZB_Dxjx1 zNCuBEsqUhs+^h^a%dAvX4z=jv6~41wBLR=+*jBrN(2YMml8E&kwBSwE|_rI>ol#ESqK1Q!*|*Y7w2ad2)d@~m7SY&a;dsF8Oy|C8;_!(WttHzzc98|P$&ol2=D~4N zCa2RGq`Evi{WqCNh6|_rU(EmzV9WO|Jf-+uA+hLxt~KJ%S~>igLkLrcfr8Ro8X-A& zkbjrAEv=)QTq#bgrA=$tL7UPTYJ)BJb;V~Ga+2BpooEFLSmS(*+my6gM-P640G(R5 zyN;why*=09lx2q!UO+N#o~+2-ZFPla(oC$o5k5!{yV$m_X1(Y9#A>aI;(F|K<_<{$ zqVO`?xT!E+d=$JhX+C^Ghiy1IKdM_N7ynlX#18&+1%Sjj*W?sUC#yO6?da^5CJD#O z8-0}Ckr#*D9GpYOn|GmOraPRM0TO5Doq1|8kNb4fr3hv`c{>5ImdM?34i&i23yn7+{$9qGM4&%Bq0uY7HY57TTasNa1FS`xB=7`+> z=v3Wj1(GbE@^-Y-1-#=x_hz>6ZDw&(_<3i(;gnj=%E|hK9%$12%|C)~1en>gwz5EWy7#a(oq;o7d*c1NF#vf>#IH}FIh)lPbiQm#R!P8<% zsUZ}qzv!sIhFScpMSE>#*JAbYC-+94d1z>y=l|)q>Cbaeidfm|I({!TPYPP$9vK&A z-a0GfiC;TSiY%h56V&6!y>%lo5OgyzGMI}ZW~;wkRuL<5x`eN@gdSwmeAcx#AE41J z60DOp9mMI(w@*;(82*vi89FwZs%yL`Q5d%j(e=} zqC>pm^dzaZ4$6M3pNZcXb3UteWY?j=b0v4C2Ey^_L97CtDuig&C|fiGm!mT&t~=YX zdcPwasc`(D=-hXC3e*v=$=3q09`Z|`eicE7lUC$rI*|!XpDi$a42t$RSe!8v0Pe;Ueh%X5yv=X zSyR5!jpQ+}^@s3=)iaVe=r=j)g}O;Hj=p~7ciurXOtfB#+sp*+yK8j0dqgnWBKUn@Ckx#g6ieQA&ry$|H%pN1F%fcR3})I5pwH#1yZt1CUTxOy8(N%~|Oy z=h+WAoY0j|Le2!g{|4T^T%P(9GLOa_GcXGq#E1;gLl@CYFyWC;(5j;*TDHWd*ydF| zSZj?L!Oq9k9h{jbP2BmSsUnM%T%tfd2@N`u0vipC7) z*tfO|Q@gVlX?SIJ$ZsMsH;_#&ubUW|C?IZnFazHVA<$8rOC7zyO&0J?vuYNmEeevZ z7I_5OQN4GbnOMNH^C%Hecr@`ERP&2@=>7Omxzysa)F6ZLF|Tzr1W09T5t%JFGcu z8V12A{{WcW-Q$)CiTWfUB7~<>rj8mQ=z>#uhQULTgSoqqh7R*NVs|)q4rP z@vb64;LumHBq6hrc?IY%q?HVx6)?OLJl|zZ6l#A%80odY;0e`K*BN88&rA%yvcxgS z>AFG#t)nUtYHFIpi;E0fd?kRW#Zk0jYm$?ipKnt6xWlk&C5#J=RytDj^z-Eb;Zc;B z=gm3=vC{iDCS>YI)&zRQ6+D)ecq%T@Q^h5o`2jhwK1PTGJoVG&O_x%P1uk&W`CF=J zH?Fg8o>>t9V61+_HTrs|dvt~f4Z{6-G;(nyI@Wy4&3heL4Q_g1s{0}D)NE8(#Uwd% z>??*5C}U0X5@j2n)P^t)pKDll<9vjDA!MKm&+N# zCg9en=+Twzr=Tlv;Q$)-t%2~NYLQYcc8FZu46p1$ zmhVMP9Bs%-CaS~B=7+qxvVm*7wgjWx?*PoLa_st~utFfUgPl;ik+2t}^sR&xN}j;(b)8Q-hR)>KL8EJj1>a@>xrIpI@RbwA>}W$!K_2 zm~#L=^V>zd`9_LMAe$&y;z_ysJ%SISs!+b#YT35pyUKvSxs~8&6DMd-Uq;l)0z1R1Abo_S6zDW|JV$OFWws$OH2@E8iVPx>k?ntI|8;8$AYD4)A6q zQJVJ#4uVT|2*!NP{!ZcfH!%A_1P`bQ5vtp7Yn~Dpe1TZ)#VCs)4)NRgY_A4)YSo#f z1QJqPd2NYM|F*jS`SIm5bW!Lj-l?k1EK;j(tbRP1UMREP^*zylP>=pyjNlRi|CIV0 z5D=oM1hb4d+z8W4jlA;Ep#M=j{`=pwMFLDA+;R^os4sB3CWaP5fd0-JA}fpZ-{1Q8 z59oT2@jyZyOFD?7kvmHw6;m3DtDB;b$Owynf9u~ryxheA)`EO-n!XTvOf+mVJsWOW zx;Z&9|KIlT-+lS-zWm!i{MWzyUyR|ue)r!t^8fzuUwiqlz5LrA{u@dDFUIiyS4MW3 z7u03dP!EaC!_T*_X~n~q=`=cl1a+ata+jpGNKy2`ou&2(Aq0`P0$d48H>MT+2O1*X?DgQc6O2gY?TPzcK$M3em4wlIr|CnG3$N zCmZZj{9&U&l|f1S_E#-85u-D5No&PVPweJA?O1ybivDDt4q2-#B$o_MSA(5xFI0K< zy5}Y{X`Q1n8C?5h?^f@4tm-031-@8}>^ZqtS(;z`iuHY3G;gBH(_0{?|} z@X`|Jyz%)R;f$Y%EQ6JLmtq{m(~%E<979uzh2KhmCM*)@RcRzbUn+zM{vGe zR($-2pUy2mdf@tZ-$#iZ9s|Gh zC|qs1@Gd*&>=Xv9$5etJ7n`@rIhXJkk47MZKBB4Pg+Mb-tA_$87*m3{itC zkZqsB8-7xZ?1mRHLVGGmxI-dHXfa{OTl8|EKxr~CqJq;8A|sc^p6^^FlCYaiJ!l!y z=hOuI5+rk@`pUSjFqlES3Z05QwE_#Fn*E8DP#b2&8x)1-YIo|ue-}Vh*-Y~3tQA#^ z%4_j+LNA9E|0wej$9DfOQ+&{shf`a;(yU5RYIA^eOZrlj#~L4+uO5H= z830nviO8=iaoyq%!lB|T-Aj?ud~+cGs|{5L-r{)`#-zS$rKv6-g3LpRc6|6t&rYN0 zFh(rWZ4`ir^A+m;+7TzIGiC+9F&qzQ3&Fb9bDlnws#+Z^#IaojC@y8fNTlX2=nzh;p%%YaG{mzV^lGUxztSc^?<6~t z|FL}}?~u`#h<$rU87P>4@&}xPLE>Cp4#0+K#TOOzd^1Hl-@SnF^|Z_>tKL*(HTkr@ zwQjNq`K?|n&$zaU2Wp4n`JR@g9H9D(QH^;~v!+xH%J^*i)gH&+C3`E_eB)A~(b4AOr@F?XNN zsHv5-k;d&T|EY`p_U&s+FdQ0Ve@uK;$y;T#NZ(}&lvW-+wbcW#TAg%@VlgO~mat}v zDgc?tAf=z|Q&#)bySpG@91uv@Em6@fUMiN37rm77b3im3-&59mU6qJrie-qk+B~6= ze5Tw_axr?})dIVrp2+9vIrc2p)B4tiT4`e*jH4&12S~HhKN+n~aDjLnghhejgHy8r za&{_Ct9NeD=sHH77=oKVnq2+B%VMe7Y7pM#x)rS!NiNn;w19ts9e%q11RcJwa^g$T zgzOpHR8Ff`04`Mjw%SXmk{Rg4pgAyXi*tK@MpmF+$8*G8g%a3>e7%3S0t1Vi4o1@D zMP3@ECGVo!!O5F8lO1;nl7Eu1(IIC1{Y3y9TA~m`ha)(-@jwzGm4z}_F9N$hhNq~O zJQkzcy(xlvE26a zmM)tnQZ8y^ud_d=;S?B8BrkydZspu~#%q8l!gkA}*v!HMooMwaJ&M_x5p8l?6Q+|T zIhE-Fn8pm6x0|!GX8MN`1pmPF02-IV!>w1UJyv)>E?0*#D5aS>Iq6MW^E(-jjLO@r z(a?`PfnCa--Xcb8N)iBTOS1dI@Ed2FX+`d1pXhrUJxsYYMhqdp%LpZkAG@)<`|$j+ zKWsgRj4;#8-c?3rU~sh>5fY zOKgUa-@azXs+<#HcP9B&i+axN{+x4II_7>lCPqwmHd|%xx9KBOqr}4N9|VwNT|vsH^DNtM7xOc6 zbI|gO{4y)1Ow=7ItB8PXr6~VD`^$Zq(vF&ar=L4Hxw-80yuSP)rkIy$jNyt{W+x0A zj-*{CZODWsEl(J)4zUGnJmi9(M&)tL7idU7TVwHrdrHR16Ggb3VlOw)@!p_q56 zk>K%Ah74m_*Q=1bBeO@!>}1Uq#OC+h@X=}%|Fj(YxbCqJQY~sg)>XY_X5A9CE6hBp zL!R|n!!T$C)hzyu zEr5K@t&saC00BeCBH)CwPnHk!teu4@U zq616ADTAI4IEZhxD80j{MJvunq;Jge9Bd9C5>({Z$OUEYNq>mXr$dv6PG zYN;T@vyeQcglHw7wDp~=sez|q?{m*XYKJLXzL5q@A+gyf%K9Cu<5);I`oHhLd|nxz z+nXBUt>hpIn1A`zi=U`hUdJ2JLTye+@&<2dj6Xn&uX#X@r2(Hu_%>`Q;W%zsY4Aqt zJ1>UGwEC|Tk>d-UZ4HNHEtZB=pLarKzPN`+UgT%L76)b2>Eu0N6@$(6NsPYN8puiI zYQ8ViUT43#C>C7OyIgf8pDPQY=~GMn>=t2OJ?2Z$KLqdeN{=R?-!o~ zsJ3GpMz3qO$c&79xT$jeuyY%B-DVdo@s_6gheNG`4>I^%q>FM%QM5Su$68I6R`(35 zZbvAdBmWSjVKVs5Y?vB-*~Eou4Y&rvFo`)WT3;o)0<_O)g2Dh`l51(tInEt zB>qrtZr5C(ZI6ulP5Id}*J5h(rLb%FIXG<Ga_r-v_18$4J`_);+p z+x_~ePrNiCSZODlA=cX>D;ZPku319e>}S2UZFl_$E)obkyFZAA%_(Vn%WdE;Z6DwY zWHH4{&R>v5tJJ=8>yT-GY3X{*XVBmn@{~L6oy-FtJw5II2hob}M^?WBxpngw9>{Zr zVQ`AuyHg0s_BbL;)BV?PJFsb&x1AAuyjU-yFMcR%f7VVW%0N1W`_3j|p8=6{h?yc{ zq!~uQcX>cn(mu7&kmm8y3Hpo;;GtjfhJZ8Jf)1CMv2Xps@ z)X7oNMfwZMx9W-0`p8;FwN(&8ll~k;5%wUS2eG$G|O+5XCHCf6WGk@ z@(O(hadDjOs)mnd%S+>Tc7ym1Jx@XiYL;Qw<6gA5${6q2pxEI1Y`qP?pIbQCKwNEXbTs0jpR39WHg?D(hXf^Rt>|&*M$L zPDLUxcE@IGLJ*zGif@4Uph+KOAm@QlmT?r-%a7lGx4_w2+CQ~$!&ggNK%;M3V_~9( zWgy<}i`JY6U7L8;OssH?99eZe+=A6+^38+T+v)=UEp}=O|1mX$6XBw=U zy_<{56Te-@66U(u&EyAw%u>(mXyT!)$NZ133{WEG)8$ivs-7^mJ+@S&meZ^5?sN#d=VIm_ zK)9vZCiSjVnYC$JLb!mKtRt3JI~y06knOY*XQn3a;qzpi*C~R z6XR8eXE}+OJn5cKi+M!?GrPkI$RkDc@1pZlyrJ#I_mnl>(%WRqQH;0LauivWG9@Zm zjVPy`v3J5QAV~Ueoo6TG9X=-Y)rM7CC)zCaG=4XyKM4m;?T-Cq{l@D2Hjb+EWY-+{ ztY37Yv1CiFaFec+(s}>(Q=4PeW~6sZ(Uw`Lo;T!oiP`p@n=6aB^)b^Hl{5S0{Jv5L zr&B{&FkqUUDk=lC?Kd@bDDiY-cy>{e6r!V#t`0hNDtSgf1?f$^+MX`Q zT)Si6)VVyKuwgPngv4(sm~DRPO6GNa_-R_8I(C_~qoBuNs?-W-*7U^SpqbR@*Pm^? zk!ZLXYGy}ABF^7K2r~mxd6&of>=NG2A&E0miSE7h`co2 zvK_bamcXvNef&MlNK-sOQ#EXW581z-{Ux^{FJ83yC0NctBj?*lmhT%ZAki^^eY0`jN^hjGWoV0UYFt{pJ(Z=$@E=IF{F-pAwf{_BA5yK1D zi|Ux-hT-`is1~O-1-Yf(JqHP&1KN@*n~yuk;UjkJTn|S9mK~5blMWnjFRi&f72{`n z&mr)^Pk?*ak*^+FgNe`kYp)xT=vA?5DNMyvB#%JRR9S7j0wvtl$AG{@udGK?Ltmyk@QOv6 z2y*mu_uhf09u!w(Y}3?wJL6+JzWJ5WFM2wex2@Z`tFQ>*d~g-kJ~3z3t#ST3)*w4&`4?O{ zPQ=m0!XxergV0Pfs1~{ z@>5YsV=gKlCxsNtn%PI3fIe~fn|oGAwGrp#Z0W6rN547GstyWEy_Vb0f|i*NVd@B{ z!zoh|51mymOmD>3Qq^?f49)qQ?GxqV?oTVU>^1p;ad{w;e<@7&ne>#|E3HoNlw^at z`dBf?*aq!bL2Ewa07VRPL6`wzb1L6%Qz2U)&S?JLFRtSIx-qbFMTo>_VxyK>oc1C9 z(BXi>_=-xECE<(8t$kmMm+!4GcJ4?#-3_1hbHTG`n5>Aebu-$>;Vqp)y)I$&li?ARgXa!2`yWkUEhv_;?GKmjTH|#Pjbdhv z!iy}KsC4U_NE)nlG&S&%UeC|I*)dgtp4!*TRtTqoJd#*`w?hX|3(CCzVW6R)zZ3>R zM@3!wc)AV-976B$t>-si;nU{V>N~8KL4ZiA(&AkfH^O%9=2Ot&MyCID>zK`4)tzES z1PqtJQ3|@+UJ+yy+aop=Fmvgj!i<9Ybi8VdPVaJ|@l4dq|J|3j@#}oaSVum_YXz_l zuEWus$Pr-MrJK`%3m5Ii!2V_?A@7}jOAO-5fOP#B_e-#ptJ6fDrv!L!efyFU)U79%~K@o+LfhK}7X+V*WQ5@Of ztpi=P5qEn5DR8H>7RUtgHEsoquVQccud53Hhrw=_nMENr!HMX|E?jZ z{|61&``E8wwjQ198B3O%%g;m+E0ZYm*=A5LFu#Or4`PTLN5@@V%24 zKn~)snF4M_FkBI^7AdGd7v#QCyjbOw^*8Y8&r}U^`nBqIbi>|h(fe2W`l1DtnEw?^ zvV>0^S+&u9<6sOur`sO+t$yO$E!^uB+_|VBmdimv?hbOlgGF4Q0h4n0=le*E0TOSM z&lF=3fP0G9ucOPBZyjX+2hxbE*gKqPyX*th`#F{4i zCKpbsQ#UxdB(IQwGuzHe+@mWzCxM)J(ZOTGG zGSqRK$lNb6L1|&cqN$6C6^q&COMcvX)S_&R_Zuyb>f(7E`aYUZx(rSQp5Tq8WkyQr zPmdGK5w$np>#e!WZCoFer{~`}Rb`Rvp7!(3GN&?<2E{#KPZUAn*RQA82|#O6RL(k) z0w8(V)tCJcN$4q<)9d<8>B;1B$THnqap!cvDV5+)Mifju*ISBLSe&%qdrm_3oV+~k z*zy(F`bA$*Gptu*$eK`-6+QIenVd9vcq0qssAqQh zH``0BjR#@K&E6X;Wb}G0r~enve$8nq0{(lL#!czcG3T34Wj!9N+Vb})ALkgp78NhJ zt@m20Kr!KD&+jErlAjoqdJ8vF&9&Y6;`#QzCtb(8T?8Rb8xd^TKj> z8;=TNa5$)-nrSKk*+V2ev|NB>V9RgqI2{fKO<>`d8s|MV+;BX7aT67hx>RZe>pNc@ zjaz!ethKk}*dz^v3+^H9A1_rZznfvnSDq1g^@iog%-OVH4G9WJ0PZFwiJzpo{*EC~ zx~cQA(cy0B$EH`#49R(Mh;}?nG{t+AX)P8|g3_#-`2M7_~S)KFL z{lm#cJ?(ahiB(ZaX|Jgcletg(*2M02tK0SWPOY*7HuHt#8uqHPHgne23-va%c17N2 zQ%_sQiyMU1Y{H-a+Hk8Hcq~w1Tu6cAONqMjv_*7tXEUe^soyNR^gIg&Y!XnrvRZnD z**b;0QNxEiSq1?f`khRM9W$;9oAHPl(JC%|s>45QSiSUSSUt;*y;#5kM|bt+bMYqG z?F-*wn>a<9-OaEB>g8o))@sX-j0-+~6g_1BE&>3&ax0BNi|G!~EQg=g=xC&Pp<9`wlMz6wHN8yjr_ z)}3-fb~qfKDzu$roPcuo$EbNgF_|4^^6n2>@OG{%4-_0xV$@>e{A6w`La&D6J3`_) zlljeger~ap`_4H^fu2Lzq;z(eSH4MSM(kad3>&%(Z)H`ZW^o_nt2kfmouvuCX|~ZP zkx}a)yd(5S%9wEG__L85F1_Ny-Znn0P3sTHyy(lz8h|o*%o${L6heA0n)UQ*<*A7B z)y&TWA!%x*)E8m&He69t61SGa7;aOJJ0(c%Dp@7#natG5b=O}5HeVgL%}G`_gp~_R zAP!%2ROy6XiD%U&>A26Mafkq2%3KT z=Mu+inYGZOS0o25%p^xVn7cZau4&6|7N_Fjsuaq(b^Qt?pkhgbbY~*o?DR=HFFPex z)#n(Wfm8GJVe_7oDdn{%zSn|rtU>xvX_##;j{f%?)PM)k*#4a$>50Mu{jLd5*}yJ< zoNK+~yf@>T${)T}q-op^A0ZMp;mt<(@r`eqI`)p=_BPcTUdl=4^G@cb!>W`PH_fPP zdnZ}WA_tQh`*~)PaeuwB<+uAt8(Tte5W!XHp5NfEcm9Ik&GPW{@i~8K32h!*k%;@) zCF}D_<8Z^EE!dXYM+ilCgr6h14b$vbr2fO%j2P<-c&{EY>fK4V+To^g7fx zv$`!Agi9+gD#N|w5lpP%c?L8!%eX~+pViUqbc4h3Yve8kO$p@UsM)je3^PnSaSfFj z3$z6ygdl|opEHaq8@t00W@V88ae1gdhZ7cjr$SqZ)mBL1TYXt;{%f7(@nVrcPdi>N z7M*#BOS04ct()~sUp1-lJ~}+6^R(mDL7La$X)}|_9Y^6?dj)1Y{@tWXt$eqXZ!HaG zHVSK|#o$4w(ZHHmu$5r8PR%|eN1IBo7XN8DzdE+ zRS&w@sHn?cGjwMvbvO{rwR4XA;nZL4%a`e~{Rp9&bK=x#0My?pu*uR<=$F&q-)0UdGps;aEl%Ak=LQO@9v!rw&o6VzPUIJxDWF3 z3Kv5Is`lLFK~kva#%^BHWMuu~aq3sc9Fi$4xL!hd{_nG#f*E_e1z=G+L!)CT)uzYt zH+wr5T-2X9PdAc8d0kaWceUNVc#kI+O(aP5(E4MIh@!Jv7z1j!WO@f$!wN?mI#HJ! zimu6TzbBf1<@+0xuBw)HsBQ9l}~V|&K!q3_VRlv zgde-{QopZjXZ-ApvX2R0e4k_Fp}a?rb(M>2@I63a2zh<=km#qP+P_l^2>!MysQ-)_ zQkR?%c+WuqYC3vmBE!!ZwA}tNVdXuR1>Z9rrg)j2i|pu*mNZ+6gCg_z+eY&pXgc>k zLy!1Mb1{9M=~cNd@zw2`&)av~PryD#NDh+gC_HBhW#QThrJz+F13QTpH!bMt>RpFn z{RZW(`H8}+Uq$DpKYhsvBFz%IQ{mqU^M1DkYlpe_jQPGtWl|B&T>#Yw6H8|L^g21>)BF$g(bnu9%>Km%@L_3VeLjWZD$i~)cqk3F9&GLg89Q>5CQus#h8lcV>wCXqxXzi0RsjcbtX}ruzwymAeGnyg( zLNHG}`2BS(RMt=qsKy+s5h9WIQhFlU8b*s`z|D&>L0v8~rE2XN5xHAIH9*OCTi4ew z_hJkS4%|U&ap$N7y#=OFYztL>)v3f8!@YM)HVgTyBG0^LGG~^d)W3Hp-{~y@=y?YD zH?O#6+D6}p=(-f$3Hv!o1($m%1rN;t!(FUI-KgV){t}CZ#=GJh6W!Z6l6LP3WDjIL zj1J?zeWdJ@)bG+eCY8>dpElVqi0xiCN@Ps?|77TYt4JC1uW298`nL$1Iu%GNPP^4F zuDmzLmOZ5ARmO^Ht~WA9bR9I$gyN=bEF`YW)wzrL?%V)%psX|X`5<0q1}FkJ-GTvq zTz&GaPoI|37uL4MiI9+!;4teZfb!i(oKqTPEw)8k@-;2izi@$Jt=4u+EHqefZ%gHh zjh(-Y4QgG^sIy6D%Hf94)2Ezu2h>-J33FdpoHN!Ke>;;_{-8ggZ<2VCWm<7~dGkS| z3aVdb9@$K;7pOct*=hArwRoxY$aS`gVfrd4H$w~@Y^Kchdv01(*HYuLSpGGBzea8F z-NkY?berde9FKi)3F0F#`16ng00l(uVuSeI@-jz2yim%$OXlfJy?#$Bo#rYYsZcz_ znE+&7?#a<^0~2^Cc_!$0XcVV4!<9=}S)S3H2J6c1BowX>Gw=xNN*WV@%>Q6N9pq~| z*qi}k-V4w`s&MaHrpplwIEUpKt~-fHLDd^uTEU7615QhaKME-Q&bRv|&>RPrS8Q}Z zEqcXlmiwXi=UABe4lXRCvHIW*rx6io#)V0lF+N}-0l$vCo2oqEF`*2WH^S+IqhpyW zFF*P_z~IJ>c;?ZxhFlKf3CHV9kg-%kl@#Jco75eTDqpf41NmLwPGkkDNp{3fk;rTA zv$6Zr$I7KT@XhXMooefnR9Y<%?WDAU@Qn7im>_9pG_u*BtTaH);~hh)T)tNQI3_33 zK`bE8A!{k^cxaDP9H^ehj6#lkx6>%L0Izu0;bu^0KbS5i80U5eSDj_~YlcZ@xZEc0 zsLH2ZwQerQ$*YgU{{?e=RW&63OF9t}b1rteo0^K@tr1hHY@DosPQoVS z<`z)t0HaARgfe)pI!?T;)Ven3#~hCB5& zfO*(D-P%9{J=6LH`>obBjRA+bR@&2rVjH*L&-HPX)003r2v?6}HFQy`+weq59hKUM?IoNs^*-*;q2F6UU-84P=? zxnaOp6>3IOArbhmnQqil-^YP)d7Z%Qf%6-f%QdzJ=+cWRIKIQa79;K#{K94vD2l6# zqXq<~Q-DFDg|Emk;Doj4;oU`IBvIZWxYsrHN=1r6Olzaj6E{YRc{AltCie8z7P7^U z^myq$L5W#tDv+BICs^S*3_ka4TM6qwaU3K1aPX9ZBU0%|uMJ`&}d-0n-0uq+8`oNsMOrWdI zvFQC2zJN^USielg6{~=xm+#D}cBSUWxoQ=;wA}L3-PJHoXIiYCQh+P=e6uNJ9z4~c ztEOJzN#2xz>(QD+I!G{q3--LW{eGWoza4m0f?DHkX*02EMF<_s9$%Rl9#c-zEZ#rS zY*EUOTVYMl941M!Mn2qoUX%V&#M*r5mM53rN}f=_dh@N8VDjNUZzH651KsS3i3@vk zNz|rHW2fBpe4Z;h7tdk7DnmL_KQqpW`*#7dXRnV2x$hr|CBs^oCX{MWr&}GSvL<&G zdrGgI0a;^$$yP5n`dr{s5Zk<6zhjp*Gsmr9(Oet&YRKsSt4+~*(j?X(MfQ;V5#Xi- z)8cZg3yeosHL6V3-ndQKGaDt8L95zNMqUB!HR;a;pGh!=2e;KXd@iUUgSseS&D~gc+34c(YGf)kci})-L;JJ|RNk&~x++pbOXk<^B`H|^E zP0ToA{zZuC@*n44S)hRnhQ0lCFUA z9m_b~aXRz&Nib4dQ9FbSkJ6lvmmqt>FHi4^&f_0yvBDky#6mkjnl0;sTn$ayO`DX3 z0{1Wp=K`btlEVUkerA?J-KQr6`{DOe%52-aKAY&N**2C|E#Rb`(hVntBIz zeL4J7f}gTk*_&c_QbtkmeLo~ds2)6%5@FR5c4*=?2AtOp>GzFJ&cATNxiokd$%}Q$ z%d^s3LF**F$8|lEy@GK`sFTl!4f~`NR?P$GQrH!bKO&)=9m18g;bDc7yE%g?xX44q&widNs~fU3VVBOe`@T<+oFs7H z4@%$^7uuul{8Cp+LhDZ!mT7U9Vw_F`M0tbLdkXbOIfn)B=V^ z)j|lZPTp_ulLP$2SY%Hn)+I=@JxruyT9JdYp{I?;t~WE?TJ;mafV|wK0pbgs>_H)0 z9<|h{R9Chixw?_YlTHO>6(kL|bvp{sh5EVUAX7;kfUV5e)F$zbJ(RJa zAXMqWeg1DL|2ZsU{MY3V=HxB1_)Y@L=iOR!Uv`{l4^XtmSbnWdF-$Ay`P{{ay|T4Z zA9&5`{^>=mth474K=iABBdAzUHgCSJh*0(05_Gu)Mx8w0z3dqA>U&Jk^0wSG#4;*F zpkV#&5}A0GA#a(pIO5Nu4fQa^}p2Kde9eMM^L z%D*d^Km=;K=}$@h!K48y!y%}6H;r5WQhDN)0D|56l%Z zmK7v4LIoqM2xYhI@J^n!%x(_-)y$JbN_hyQ(R0JmA+TLrjhHg62_vs6OPaLZn}=;4 zZ;{P53*evIvKT>FxXVze3t#$3tUDK4+)K6V4RaRJU}@^N{;_LTW#NEJ&ttS7LMc&W z=fr4vz%-52>?f9;o-^!NTCuq%Xw_zSrMWlPBCkC6=ant) z#+4hEDz|vuN{FglgLP$UBwIXo@HK8L!jsKwCwvAcvEV>!MJkNo>!cwz$p z;ULzce7a&no8Lot+WBO4t3TFIp;D7Ie%2#VlwQfu`Q}I7X5t56ij#1(;E*pikFDT9 z8A@DdeO7hHb(S?c!0&BlBVn19ifs5P{x4$K5N#=?FM*2{epnP~sx($l}V_@uj3H6ZoQ!1=Gg zUhKY;6jP@nPk9lgKapJFo1s*Aaru*zDTaSKP`BTa1HhjgFyR&1DTNys|3akqcHxEv zRSJv*bh>6^ThaOhWa6eY?5JKPiD5;-R(Dz>y9k>JgZ^ScdwnFSaY#RDTJGXbNfK|K z(dv>cG=lPmQ`gV^%Q+f2AwTw=Cq5ww#QClB`)`X6&UHaDo$5bciIJe$QtNQpe1oLV zz=t6AS|r>+h>vYLJWftdV~U7ta3H-P;VcZWxcP+zYOaXWG!q>oHNhSenr&7M6iH^m z9|{c z;GcHvf(i6iNC|PK5 z6={kHilBlB!ce73fT0LjK#&ds(wiVX^d5?+I6^3*fC*Kk1W1Aqf`l&8q=c5x6Qn~Z zQbSE{X6BoFzxnR`yMOQbb$;ygthL^K)^qk*d+qmaWxT8V@n_W{9?tY_X#CgfDt@ub z!GV1O*3nv(c{AnxnIeX+E912g{4gcj(9|J$dA!l`MX`cfG-XgK;$P(yXkZwq`bR6o zHW6l*0}KL9(1bH&2Q$l+lV9h>Cx)RGDWq?PDi-O2QWB&zCK0 zSZQATy^C0i!^8N8eIw2wV((`V0KUOT+Xv`;$7?GVRFuc`OU6k=>%|qbh|+u)4r?>{ zC3DE2tBzLhIo5odqyV?V25WvQ+b`ClpMCp_cC?kzi}j9ta}VrBJm;hDi#p9QKf28l zHuQ47Jat#1$sye{GoutGs`q*3VNF#Qm|eD>-RPC+KJ$-v=+Sd!L0uOEy@0;zkA{y4 z?f!3AxX*&K2!B%Q$vu4UYy1Qz-=|_UYyV}dX8526GR~H2)u-(?jKsE)sJjS7T>lt@ zHEMXn{LLHlUi}&bp&0Y^9&Hm4)Bh{g*Zxt8#L|31?g!qN{a@@=6|>LgxT0xfI~b{~ zyLudUo@7ecB!WhFUlD{Jx0jkO4?-NSE-D`z=cj%#@Ud&`u9NzGyIRetyQRr!j4`a* zc_oA7P*%G9bt3Ry7bJ^?wuH`F2R~!4=^pZUi1h9@uB!;&GvLPiBWy8hH?^|dP^&!} zYZR3~T7GB84;^R=klJK|Q@eLOt&fnz!*DPjr1^U#2jCIJ<40`Ee>qF}#AzCGRm$|@ zegx>d#RAXT<-~6xCzv-{<_%shW6?gQ`Y9GXfJ?uxL9A$0{xdILC3j(4X`H(3NI@8* z9VKrzlY3mgmv$P!Ou4ao{>oI_SMCncMBbV#Jfe!C;qo|nX!0U=E#ZqST-2=e#dWi< zISnE(YIE(*;rkO7;NI#oj7Ed^rgIoQ6ghq>ezVc8TN{Ojhowwle%qGfb+KQ7h2ay}JrJwX4KT(-$+hQm$C z-47~?r{MWa$z`R6yrw5*A^YknV_`c59L$W|)oOk3%hYr*v1toahqpM~HiO|-*&>Ge z*Jlg{F-weWVdhC6FiPHv{!i_fNAtnFL5G|d-Hs0u}Q_6+O!>!A%h^|b{m*0~Ac*euns!E7#|Lvsvb zu-mIUxQ=|eyTn-TUUGqs59pfAw6Z%e2fn?~MB5_}qQKRi9`G#(?g}Zmi|I;DJ%-k* zye~R)jl*r{klJ?nikjE+kRbg&t~HdlY4u7mU81t2MCT`Iyn1*LjjYKeqt_iWk3cGB zqtmahEfW=el5L9Pp0@K z>;;kWb)enA9`@6QkaM7ny9GhRdDs=!Gf+}%AC2~UhrJhIxm4|xa2GP<=^sOR=$7pS zG5v|-oQ)ibXWRr#R~Prw%l2Tv+awju{sy?$g@!#bOY#qMV(^-FDIK`wm1tlD28mv( zwCgybx_i0#6x=wY@*QMI^avSP_N;J??*i3f={w3s%EiG@SKVL(UVHY<@x#_g(o$y} z6^ET;tR2io#CA)Pg1Z{0n1n{2ysQRXm+mjwea=}3zw2>xMr)AI#vTG*jNB7 z^*YEY!8N25Oua{{uI6XVWk~wcZYW85{T5RMOc3xUKK`X9dhxN3ab3<@aYWvL zb#(F6vt1Sc=>R3anHO^I8L-kg&KPho_${ri1$AgFEN+u(Bf-bxD$wB;61R z%R9Myp(s9yH{~NopIbZTm-4Yw<~v+iigr(-m|J^zg}J^B!S=y?Nf9Xq z81dp1F>)bAZTqO&<;ikl`Ri=Gc}I_K_8E*!HWr>8O#0wRXQ-HcPW63pXSg^W7zQvc z*rFJY;IpKc`zLSLodBzSRxfyV?;eF51)#EIaE6m(?jP$Cd0%fuZE-o{$zmYkr2s!H z8k?mBL47Xbt}Y$ZPmmhIJqG&?Ugp>h9s`p)%gts%ST9gJA~Ym!sr!Jz8@j&|wu9i| zavMG{R*PdyZWsWJ?tnt7_D&F^^%nCV4n^YlP6ghj14~(qv(g8IFJD+uYN#EV%|ETS zar(SM+txU`k8I%o%DW7w{IS+eZDIqP57#W9fQ5_*Sp1kl2=$DqOY1A%;Nj((I#g|9^h_`j05mA5;3s`;yEVUD z%o0hGxzwN`)Bhx0@&%{&Nc*o|1~&S-0Z!h>pZaTqw;+I@)%Bh=oLp|@_DxBNQ9abu z2N}T862!zx1%YSW!Kfl)8_sq~;Xy$+Qv#5Ll1_>idZ_>2B;3%g<{9v_>fUH~pG>rg zAp3cM@Wh)O=oR}Mk$?q>gt{eGYGmys$byX+**kCXC7@}Q7@}QjffNUGq; zTce>hzcebjS~?c_aHj?m#a^kz8dPZ)52+gnwz~7}#aX$v5+oIBSx~68Yr1g*vyPZ* zGkNl5L`OuW4E+>(=;sN!o`Qy|Y~1;9IHb7h=0>d--gWu@?kIA5hoIuW!@|KQdhqLx z#dZ&VW}%}u=*FsvJJ+N+2AsPYtJQ0qr%C!6#s4z~Nw3K@x5x1gQi(FqoT3}B(6$rQy+c3bvCR4bi!M@t4s7KW&^~DVHlzh6z0v|A z5u?o%a$$=F(d%RNR+yLu0j0@>LcVL$u=&LXrxYTfbZ_S&h}YgCasoIiE`^ zN3bawml0^mc}9@17SBpjbHA|TuzS_9dj-JidmP@z(Rj+<*RuDAN;yfcrAv0Un8R)O zoARXZXI00XYrm}vorpfQwjBxj-2uB{EWf^KokJ2Z8%>O4Uve%L)y6L~r72nG1~;f% z+Pe9tQl3@foEC}&`b&6p-hU{vB~X_Mn0NBom4S{}l<0;CFi&B<|R@JTwdL{+$DZ?qcLYdF8d^7pnN`RFK{t8Z<{jz@*$1)YGz!vP%?Ia)VVP^jLdwX9RU zx35v~l44G>S-yixa~pt^zp5_u*sYpMcycDds`!W2(5cPim$2i}NwNwIN!v)RsaV<}-84c6Q; zZ}C5XpY@98%osR1XRe(q+RUz+G??hw*Y0^_BV1k87Zi6YxZ$bNdu{;inbip|w_?X{ zMFnI$hOMTPB;6#)LOr?<4b-!byJ{P5&*cm!sRwN!KP8MkoKSYJfN+&l}1GcDbl8ngi zaBEBb%QDr=<`3-S`dfwf(vyTwnTt%!;g2y%@^#XMup0vBs*Z9=w=C>N+UKrHibXls zY^;&uZ^8wfwoa<_q=x3q^g>5)7;e7E{9IH+{fB^T`sD4|Lg-wh4>ru=Ebj${d-*K- z^@|x>O-)hKfd>`8S?O#HG1A^~cgbolZ(b8O??B%Ls20LXTWo)jPH#|ar>T#D_ss;4^it=6@F4saUblQi zcdfiZ}M$*^yiLmE~mB%KM-UgP2LHPK1w1TJ{WNE8*3meAW*1p*q0 zNc^7Bguw31{y?wroq~%?KyH_1Pwr=8hF7>A;{#D<%U#$DyExdhA@%UpFNrd3q};Ft z1I4Sg`^kLWpLD8L1q_-r6NDShM?i9EiS=YkZq`h>4i^V&3^D9kNbS}ebCWuAa3<*} zVb=Z;k}&&LsP%Y=omt_nQ`%rNQFiDQj_@(A67(=t!oJatvcK-3Qui3d8lKFj$X^uo zWaB$TH=?zO_cn0-=p$S^1KsVNwKmKI;|nSMK$@EHmH}J2b6)yQnRR8#V_k*Ei_IE6 zN>865Wqpf*A>lqrnbo>@f;9s=Gi{+<`=l&*y;D>5>4eBJu%g)+u zg>%ZJh)sAo>IOhN%8Z;KgbcfHNgYrKTLix^21Rn7oIj@!9)N-4sCW7tHKB!DR|{x; zS7S)lPC!FNs%duY!m&yP`E}%BaduyWrI*@tI(kTBqm9_m43oCbMIKU}Ki5)pp}Im-DXn39x{i^sM7O6WfzIg zpuHnBN!EJ!CwJRcWv$`brzI~TPp_n3S?G$L5v=t6@o21u>Y%xPX`)Z#G%H%(GhNVo zd=4rw6g0n|5uKj>@@UR9?Y{qP(bsdFFv}{;wq8U3Ft9YXWd?fz+PtDBQtbON#-TJs zIlK3xS}+}WfpPim9f_j#ypnv=Y&+VAvb09`komE~X<+I%!;$rOcZ*ttlE!Od(p z05}QN!Cw8yo+g8gki~RLH@Z&X%)g7d8i~;}10Wg&T!n)IX76hS`=5Nk-Z;APK4#&; zqsJRdn#8`4l^3Xqh?By$t>gO)!SB>)x~dXJ6$?6D-(hQ?AP5}8gUHTb;!n|Wipl^l z@UeA&&n*cJu^e&=yNGD1v}dr1b5YbqF^)J0WPg`O-X`+UbL;1A>Xit_YdFt`yH(V{ zF7D@k?JBa%j7}+xej-^FbzJ0S)zEtII&U{{Mo4TK2v0_Te(ApQS{9{*K)h9#JTXQ)MxHCr;X(d!yl25un)8Hu6 z$8{BJB;h+ppn_3pnOvqRy9b%%6AD02=H$jCRWKanicyTzf1rAlRMu({#I%47;AajLKbQp@UuS^u}vo zc6_9X%l@fPq2WLJlxiSupO*#Wle%)&+6;8tq?17Rldh|#f1l#_{u?ATbGJ=mG@P|^ zf-i9Y-SnTH#JVvs1GGpw9{>I_#QY@`|Mb(T*!D!#wd;U?l*b-8$L^MhPaFQ1-tOOH z>(o9?2fh|IuH^Qg9{n-=BPW0VRk#T3=6@UeAJuLClvFx;Zn-T~K>t6w_28C9o~)Ij z$^E}u{1Z}sL0UwvbMA|I{|oKkhrc$b!GX&8^y;q||IKWSh88WNp3b4ZyZ@mB{O2Hc zI1LWBJ36fYh-Bhr{{GC=;_NuBe{{==2FF17Tkd~E@|qYeB0)nHCh$MHg`&Yxu=|Vr nKO*`66a2U7_`gkXGx5~8hs@Y3Zl={!v`a_R-~r;E!}I?F^?$}` literal 0 HcmV?d00001 diff --git a/src/content/docs/resources/glossary.mdx b/src/content/docs/resources/glossary.mdx index 910a3d5b..d363f515 100644 --- a/src/content/docs/resources/glossary.mdx +++ b/src/content/docs/resources/glossary.mdx @@ -47,7 +47,7 @@ To web monetize your own content, you must convert your payment pointer to its U The test wallet is a wallet application provided by the ILF that lets you experiment with Web Monetization without using real money. You'll go through a typical Know Your Customer (KYC) sign-up flow, fund an account with play money, and get a payment pointer. -Review the [Test Web Monetization](/tutorials/test-web-monetization) tutorial to learn more about sending and receiving payments through the test wallet. Go to wallet.interledger-test.dev to sign up for an account. +Review the [Test Web Monetization](/tutorials/test-web-monetization) tutorial to learn more about sending and receiving payments through the test wallet. Go to wallet.interledger-test.dev to sign up for an account. ## W diff --git a/src/content/docs/supporters/get-started.mdx b/src/content/docs/supporters/get-started.mdx index 6d787af7..a7454080 100644 --- a/src/content/docs/supporters/get-started.mdx +++ b/src/content/docs/supporters/get-started.mdx @@ -159,11 +159,11 @@ When the **Continuous payment** toggle is on, the extension icon appears in colo #### Continuous payment toggled on -| Icon | State | -| :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | ------------------------------------------------------------------------------------------------ | -|

![Continuous payments turned on in extension, extension is paying](/img/docs/extension/enabled-monetized.png 'Active icon state with green circle and checkmark')
| Page is web monetized and the extension is continuously paying | +| Icon | State | +| :--: | ----- | +|
![Continuous payments turned on in extension, extension is paying](/img/docs/extension/enabled-monetized.png 'Active icon state with green circle and checkmark')
| Page is web monetized and the extension is continuously paying | |
![Continuous payments turned on in extension, extension is not paying and needs user attention](/img/docs/extension/enabled-attention.png 'Active icon state with orange circle and exclamation mark')
| Page is web monetized, but the extension needs user attention and is **not** continuously paying | -|
![Continuous payments turned on in extension, page is not web monetized](/img/docs/extension/enabled-unmonetized.png 'Active icon state with red circle and x')
| Page is **not** web monetized, the extension is **not** continuously paying | +|
![Continuous payments turned on in extension, page is not web monetized](/img/docs/extension/enabled-unmonetized.png 'Active icon state with red circle and x')
| Page is **not** web monetized, the extension is **not** continuously paying | #### Continuous payment toggled off diff --git a/src/content/docs/tutorials/test-web-monetization.mdx b/src/content/docs/tutorials/test-web-monetization.mdx index a9538e2d..e0b12f4e 100644 --- a/src/content/docs/tutorials/test-web-monetization.mdx +++ b/src/content/docs/tutorials/test-web-monetization.mdx @@ -1,49 +1,94 @@ --- title: Test Web Monetization +tableOfContents: false --- -import { Steps } from '@astrojs/starlight/components' +import { Steps, Tabs, TabItem } from '@astrojs/starlight/components' import { LinkOut } from '@interledger/docs-design-system' -By signing up for the ILF's test wallet, you can send and receive Web Monetization payments without using real money. +
By signing up for the ILF's test wallet, you can send and receive Web Monetization payments without using real money. -The test wallet allows you to go through a mock Know Your Customer (KYC) sign up flow, create a payment account, add a payment pointer, and fund the account. + + + The test wallet allows you to go through a mock Know Your Customer (KYC) sign up flow, create a payment account, add a payment pointer, and fund the account. -## Sign up for a test wallet account + * [Create an account](#create-an-account) + * [Complete KYC and liveness checks](#complete-kyc-and-liveness-checks) + * [Set up your account for Web Monetization](#set-up-your-account-for-web-monetization) + * [Add a payment pointer](#add-a-payment-pointer) + * [Make a deposit](#make-a-deposit) -### Create an account + ### Create an account - - 1. Go to wallet.interledger-test.dev - and click **Create account**. - 2. Enter your email address and a password, then click the arrowhead. A verification email will be sent to you. - 3. Click **Confirm my email address** within the verification email. - 4. Log in to your newly created account and complete the KYC and liveness checks. - + + 1. Go to wallet.interledger-test.dev + and click **Create account**. + 2. Enter your email address and a password, then click the arrowhead. A verification email will be sent to you. + 3. Click **Confirm my email address** within the verification email. + 4. Log in to your newly created account and complete the KYC and liveness checks. + -### Complete KYC and liveness checks + ### Complete KYC and liveness checks -As you go through KYC, the only real information you need to share is your email address and phone number. We ask for your phone number in case we need to send you a verification code. + As you go through KYC, the only real information you need to share is your email address and phone number. We ask for your phone number in case we need to send you a verification code. -All other information, including identity documentation, can be fake. If you're asked to upload a photo, it can be of anything as long as it's not blank. A face scan may also be required but is not used by the test wallet in any way. + All other information, including identity documentation, can be fake. If you're asked to upload a photo, it can be of anything as long as it's not blank. A face scan may also be required but is not used by the test wallet in any way. -:::note[Why are there so many steps?] -The Interledger test wallet runs on a GateHub pre-production environment. This environment mimics their live production environment, including the KYC steps. -::: + :::note[Why are there so many steps?] + The Interledger test wallet runs on a GateHub pre-production environment. This environment mimics their live production environment, including the KYC steps. + ::: -## Set up your account for Web Monetization + [⬆️ Back to top](#top) - - 1. Select **New Account** on the Test Wallet dashboard. - 2. Enter any account name, select any asset (currency), then click **Create account**. - 3. Click **Close**, then select your new account from the dashboard. - 4. Select **Add payment pointer**, then enter a payment pointer name and public name of your choosing. - 5. Click **Create**. Your payment pointer should show within the _Payment Pointers_ section. - 6. Click **Deposit**. Enter an amount of **1,000 or less**. Deposit amounts greater than 1,000 require manual approval, which may take up to 24 hours. - + ## Set up your account for Web Monetization -You're ready to start testing Web Monetization after your deposit appears in your account. + * [Add a payment pointer](#add-a-payment-pointer) + * [Make a deposit](#make-a-deposit) -## Test sending payments + ### Add a payment pointer -## Test receiving payments + + 1. Select **New Account** on the Test Wallet dashboard.
Test wallet dashboard with new account button + 2. Enter any account name, select any asset (currency), then click **Create account**.
Create new account screen with name field and asset drop-down menu + 3. Click **Close**, then select your new account from the dashboard. + 4. Select **Add payment pointer**, then enter a payment pointer name and public name of your choosing.
Newly created account showing zero balance and buttons for add payment pointer and depositCreate payment pointer screen with account, payment pointer name, and public name fields + 5. Click **Create**. Your payment pointer should show within the _Payment Pointers_ section.
Account showing no balance and newly created payment pointer +
+ + [⬆️ Back to top](#top) + + ### Make a deposit + + + 1. Click **Deposit**.
Account showing no balance and newly created payment pointer + 2. Enter an amount between 50 and 1,000, then click **Deposit**.
Deposit to account screen with amount field + + :::note + Even though you aren't using real money, large deposits will be manually reviewed and approved. This can take up to 24 hours. If you're wanting to test immediately, make smaller deposits. + + Similarly, depositing more than 10,000 in a 24 hour period will cause your deposits to go into the manual review process. + ::: + + You're ready to start testing Web Monetization after your deposit appears in your account.
Account showing balance amount and payment pointer +
+ + [⬆️ Back to top](#top) + +
+ + + Sign in to your wallet account if you haven’t already. + + Download and install the ILF's [Web Monetization browser extension](/supporters/get-started#set-up-the-extension). + + Enter the payment pointer associated with your test wallet account and click Connect. + + Click Agree to allow the extension to connect to your test wallet account. + + Click Accept on the Interledger test wallet request screen. + + + + + +
\ No newline at end of file diff --git a/src/content/docs/wallets.mdx b/src/content/docs/wallets.mdx index 3a5d079f..809ea152 100644 --- a/src/content/docs/wallets.mdx +++ b/src/content/docs/wallets.mdx @@ -1,8 +1,8 @@ --- title: Web Monetization-compatible wallets -tableOfContents: false --- +import { Steps, Tabs, TabItem } from '@astrojs/starlight/components' import { LinkOut } from '@interledger/docs-design-system' The following providers offer Web Monetization-compatible digital wallets. You must have a wallet address or payment pointer from a compatible wallet to send and receive payments. @@ -21,3 +21,12 @@ Be sure to select a wallet that's available in your **region** and supports your The Interledger test wallet provides a great way to test Web Monetization without using real money. The test wallet is an open-source application developed and maintained by the [Interledger Foundation](https://interledger.org). The [Test Web Monetization](/tutorials/test-web-monetization) page gives step-by-step directions for creating an account on the Interledger test network and setting up your test wallet. + +## Where is my payment address? + + + + + + +