Skip to content
SPSP server with invoices, as a proof of concept
Branch: master
Clone or download
sharafian Merge pull request #1 from sabinebertram/master
feat: update to STREAM, use current invoice spec (draft 2)
Latest commit 5ae23bb Jun 8, 2019
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
src feat: update to use ilp-exchange-rate Jun 7, 2019
test
.eslintrc feat: npm scripts Feb 11, 2018
.gitignore
README.md feat: update to STREAM, use current invoice spec (draft 2) May 17, 2019
index.js
package-lock.json
package.json

README.md

ILP SPSP Invoice Server

SPSP server that supports invoices

Usage

Make sure you have moneyd running. Then start the SPSP Invoice Server:

SPSP_LOCALTUNNEL=true SPSP_LOCALTUNNEL_SUBDOMAIN=mysubdomain npm start

Create an invoice with an amount due of 10 XRP. amount, assetCode, and assetScale are mandatory, you may add additional fields. See Create an Invoice for more information. Here, we add a reason for the invoice.

http POST mysubdomain.localtunnel.me amount=10000000 assetCode=XRP assetScale=6 reason=lunch Authorization:"Bearer test"

HTTP/1.1 200 OK
Connection: keep-alive
Content-Length: 73
Content-Type: application/json; charset=utf-8
Date: Thu, 16 May 2019 16:37:52 GMT
Server: nginx/1.10.1

{
    "invoice": "$mysubdomain.localtunnel.me/ef6e2a39-ba3c-a5cc-0849-9730ed56d525"
}

Query the invoice:

ilp-spsp query -p '$mysubdomain.localtunnel.me/ef6e2a39-ba3c-a5cc-0849-9730ed56d525'

{
  "destinationAccount": "private.moneyd.local.QGF2HflZ81d1uF1qXW9s-AjWtC23XY4tF-jZHhBdF_I.4eRM1t--cUUQqV5v8tsB0H9S~ef6e2a39-ba3c-a5cc-0849-9730ed56d525",
  "sharedSecret": "4v82v2ho4b3DYxqhBKRWncQdIRePcB6/s8Gksc6EH/4=",
  "push": {
    "balance": "0",
    "invoice": {
      "amount": "10000000",
      "asset": {
        "code": "XRP",
        "scale": "6"
      },
      "additionalFields": {
        "reason": "lunch"
      }
    }
  },
  "contentType": "application/spsp4+json"
}

Pay the invoice. Note that the amount depends on moneyd's uplink. Here, we assume XRP with a scale of 9:

ilp-spsp send -a 10000000000 -p '$mysubdomain.localtunnel.me/ef6e2a39-ba3c-a5cc-0849-9730ed56d525'

paying 10000000000 to "$mysubdomain.localtunnel.me/ef6e2a39-ba3c-a5cc-0849-9730ed56d525"...
sent 10000000000 units!

Query again:

ilp-spsp query -p '$mysubdomain.localtunnel.me/ef6e2a39-ba3c-a5cc-0849-9730ed56d525'

{
  "destinationAccount": "private.moneyd.local.QGF2HflZ81d1uF1qXW9s-AjWtC23XY4tF-jZHhBdF_I.4eRM1t--cUUQqV5v8tsB0H9S~ef6e2a39-ba3c-a5cc-0849-9730ed56d525",
  "sharedSecret": "4v82v2ho4b3DYxqhBKRWncQdIRePcB6/s8Gksc6EH/4=",
  "push": {
    "balance": "10000000",
    "invoice": {
      "amount": "10000000",
      "asset": {
        "code": "XRP",
        "scale": "6"
      },
      "additionalFields": {
        "reason": "lunch"
      }
    }
  },
  "contentType": "application/spsp4+json"
}

Environment Variables

Name Default Description
SPSP_PORT 6000 port to listen on locally.
SPSP_LOCALTUNNEL If this variable is defined, SPSP_PORT will be proxied by localtunnel under SPSP_LOCALTUNNEL_SUBDOMAIN.
SPSP_LOCALTUNNEL_SUBDOMAIN Subdomain to forward SPSP_PORT to. Must be defined if you set SPSP_LOCALTUNNEL
SPSP_DB_PATH Path for leveldb database. Uses in-memory database if unspecified.
SPSP_AUTH_TOKEN test Bearer token for creating invoices and receiving webhooks.
SPSP_HOST localhost or localtunnel Host to include in payment pointers

API

Create an Invoice

POST /

Create an invoice.

Request

  • amount - Invoice amount in units of assetCode and assetScale.
  • assetCode - Asset code to identify the invoice's currency. Currencies that have ISO 4217 codes should use those.
  • assetScale - Scale of amount denoted in assetCode (e.g. an amount of "1000" with an assetScale of 2 translates to 10.00 units of assetCode).
  • webhook - (Optional) Webhook to POST to after the invoice is fully paid. See Webhooks
  • "anything" - (Optional) Any additional fields can just be passed as named values, e.g. reason=lunch.

Response

  • invoice - Payment pointer created for this invoice.

Query an Invoice

GET /:invoice_id

SPSP endpoint for the invoice with :invoice_id. The payment pointer returned by Create an Invoice resolves to this endpoint.

Webhooks

When you Create an Invoice and specify a webhook, it will call the specified webhook when the invoice is paid. The request is a POST with

Authorization: Bearer <SPSP_AUTH_TOKEN>

{
  "balance": 1000000,
  "amount": 1000000,
  "pointer": "$mysubdomain.localtunnel.me/ef6e2a39-ba3c-a5cc-0849-9730ed56d525",
}
You can’t perform that action at this time.