GroundControl/openapi.yaml
2023-04-03 18:57:29 +01:00

359 lines
10 KiB
YAML

openapi: 3.0.0
info:
title: GroundControl push server API
description: Push notifications server for BlueWallet
version: 0.0.13
servers:
- url: http://localhost:3001
- url: https://groundcontrol-bluewallet-stg.herokuapp.com
- url: https://groundcontrol-bluewallet.herokuapp.com
paths:
/lightningInvoiceGotSettled:
post:
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/LightningInvoiceSettledNotification"
responses:
"200":
description: OK
/majorTomToGroundControl:
post:
summary: "Associate bitcoin addressess / ln preimage hashes / txids that you wish to be notified about to specific push token. Token serves as unique identifier of a device/user. Also, OS of the token"
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
addresses:
type: array
items:
type: string
hashes:
type: array
items:
type: string
txids:
type: array
items:
type: string
token:
type: string
os:
type: string
responses:
"201":
description: Created
/unsubscribe:
post:
summary: "This call is a reverse call for /majorTomToGroundControl. In case user doesnt want to track addresses/txids/ln invoice hashes, he makes this call along with his token/os so GroundControl can remove them from the database"
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
addresses:
type: array
items:
type: string
hashes:
type: array
items:
type: string
txids:
type: array
items:
type: string
token:
type: string
os:
type: string
responses:
"201":
description: Created
/ping:
get:
responses:
"200":
description: OK
content:
application/json:
schema:
$ref: "#/components/schemas/ServerInfo"
/getTokenConfiguration:
post:
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
token:
type: string
os:
type: string
summary: "Returns levels of notifications user currently subscribed to"
responses:
"200":
description: OK
content:
application/json:
schema:
$ref: "#/components/schemas/TokenConfiguration"
/setTokenConfiguration:
post:
summary: "Sets levels of notifications user is subscribed to; also saves some user info, like lang or app version"
requestBody:
required: true
content:
application/json:
schema:
allOf:
- $ref: "#/components/schemas/TokenConfiguration"
- type: object
required:
- token
- os
properties:
token:
type: "string"
os:
type: "string"
responses:
"200":
description: OK
/enqueue:
post:
summary: "Puts push in send queue. Push body should be any descendant of `/components/schemas/PushNotificationBase`"
requestBody:
required: true
content:
application/json:
schema:
oneOf:
- $ref: "#/components/schemas/PushNotificationLightningInvoicePaid"
- $ref: "#/components/schemas/PushNotificationOnchainAddressGotPaid"
- $ref: "#/components/schemas/PushNotificationOnchainAddressGotUnconfirmedTransaction"
- $ref: "#/components/schemas/PushNotificationTxidGotConfirmed"
responses:
"200":
description: OK
components:
schemas:
ServerInfo:
type: "object"
properties:
name:
type: "string"
description:
type: "string"
version:
type: "string"
uptime:
type: "number"
last_processed_block:
type: "number"
send_queue_size:
type: "number"
sent_24h:
type: "number"
NotificationLevel:
type: string
enum:
- transactions
- news
- price
- tips
TokenConfiguration:
type: "object"
properties:
level_all:
type: "boolean"
level_transactions:
type: "boolean"
level_news:
type: "boolean"
level_price:
type: "boolean"
level_tips:
type: "boolean"
lang:
type: "string"
app_version:
type: "string"
LightningInvoiceSettledNotification:
description: object thats posted to GroundControl to notify end-user that his specific invoice was paid by someone
type: "object"
properties:
memo:
type: "string"
description: "text that was embedded in invoice paid"
preimage:
type: "string"
description: "hex string preimage"
hash:
type: "string"
description: "hex string preimage hash"
amt_paid_sat:
type: "number"
description: "exactly how much satoshis was paid to make this invoice settked (>= invoice amount)"
PushNotificationBase:
description: payload for push notification delivered to phone
type: object
required:
- type
- level
- os
- token
properties:
"type":
type: "integer"
enum:
- 1
- 2
- 3
- 4
- 5
description: >
type:
* `1` - Your lightning invoice was paid
* `2` - New transaction to one of your addresses
* `3` - New unconfirmed transaction to one of your addresses
* `4` - Transaction confirmed
* `5` - Arbitrary text message
"token":
type: "string"
"os":
type: "string"
enum:
- "android"
- "ios"
badge:
type: "integer"
level:
$ref: "#/components/schemas/NotificationLevel"
PushNotificationLightningInvoicePaid:
allOf: # Combines PushNotificationBase and the inline model
- $ref: "#/components/schemas/PushNotificationBase"
- type: object
required:
- sat
- hash
- memo
properties:
type:
type: "integer"
enum: [1]
level:
type: "string"
enum: ["transactions"]
sat:
type: "integer"
description: amount of satoshis
hash:
type: "string"
description: hash of specific ln invoice preimage
memo:
type: "string"
description: text attached to bolt11
PushNotificationOnchainAddressGotPaid:
allOf: # Combines PushNotificationBase and the inline model
- $ref: "#/components/schemas/PushNotificationBase"
- type: object
required:
- address
- sat
- txid
properties:
type:
type: "integer"
enum: [2]
level:
type: "string"
enum: ["transactions"]
sat:
type: "integer"
description: amount of satoshis
address:
type: "string"
description: user's onchain address that has incoming transaction
txid:
type: "string"
description: txid of the transaction where this address is one of the outputs
PushNotificationOnchainAddressGotUnconfirmedTransaction:
allOf: # Combines PushNotificationBase and the inline model
- $ref: "#/components/schemas/PushNotificationBase"
- type: object
required:
- address
- sat
- txid
properties:
type:
type: "integer"
enum: [3]
level:
type: "string"
enum: ["transactions"]
sat:
type: "integer"
description: amount of satoshis
address:
type: "string"
description: user's onchain address that has incoming transaction
txid:
type: "string"
description: txid of the transaction where this address is one of the outputs
PushNotificationTxidGotConfirmed:
allOf: # Combines PushNotificationBase and the inline model
- $ref: "#/components/schemas/PushNotificationBase"
- type: object
required:
- txid
properties:
type:
type: "integer"
enum: [4]
level:
type: "string"
enum: ["transactions"]
txid:
type: "string"
description: txid of the transaction that got confirmed
PushNotificationMessage:
allOf: # Combines PushNotificationBase and the inline model
- $ref: "#/components/schemas/PushNotificationBase"
- type: object
required:
- text
properties:
type:
type: "integer"
enum: [5]
text:
type: "string"
description: custom text thats displayed on push notification buble