Merge branch 'main' into the-federation-layer-v0.6.0

This commit is contained in:
Reckless_Satoshi 2024-01-28 20:52:41 +00:00 committed by GitHub
commit 0f8ebdc0b1
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
14 changed files with 215 additions and 192 deletions

View File

@ -11,6 +11,7 @@ from rest_framework.authtoken.models import TokenProxy
from api.logics import Logics
from api.models import Currency, LNPayment, MarketTick, OnchainPayment, Order, Robot
from api.utils import objects_to_hyperlinks
from api.tasks import send_notification
admin.site.unregister(Group)
admin.site.unregister(User)
@ -135,6 +136,7 @@ class OrderAdmin(AdminChangeLinksMixin, admin.ModelAdmin):
return format_html(f'<table style="width: 100%">{with_hyperlinks}</table>')
actions = [
"cancel_public_order",
"maker_wins",
"taker_wins",
"return_everything",
@ -142,6 +144,37 @@ class OrderAdmin(AdminChangeLinksMixin, admin.ModelAdmin):
"compute_median_trade_time",
]
@admin.action(description="Close public order")
def cancel_public_order(self, request, queryset):
"""
Closes an existing Public/Paused order.
"""
for order in queryset:
if order.status in [Order.Status.PUB, Order.Status.PAU]:
if Logics.return_bond(order.maker_bond):
order.update_status(Order.Status.UCA)
self.message_user(
request,
f"Order {order.id} successfully closed",
messages.SUCCESS,
)
send_notification.delay(
order_id=order.id, message="coordinator_cancelled"
)
else:
self.message_user(
request,
f"Could not unlock bond of {order.id}",
messages.ERROR,
)
else:
self.message_user(
request,
f"Order {order.id} is not public or paused",
messages.ERROR,
)
@admin.action(description="Solve dispute: maker wins")
def maker_wins(self, request, queryset):
"""

View File

@ -185,3 +185,9 @@ class Telegram:
self.send_message(user.robot.telegram_chat_id, text)
return
def coordinator_cancelled(self, order):
if order.maker.robot.telegram_enabled:
text = f"🛠️ Your order with ID {order.id} has been cancelled by the coordinator {config('COORDINATOR_ALIAS', cast=str, default='NoAlias')} for the upcoming maintenance stop."
self.send_message(order.maker.robot.telegram_chat_id, text)
return

View File

@ -304,4 +304,7 @@ def send_notification(order_id=None, chat_message_id=None, message=None):
elif message == "new_chat_message":
telegram.new_chat_message(order, chat_message)
elif message == "coordinator_cancelled":
telegram.coordinator_cancelled(order)
return

View File

@ -30,7 +30,7 @@ masthead_title : # overrides the website title displayed in the masthe
# breadcrumbs : false # true, false (default)
words_per_minute :
robosats:
node_id : 0282eb467bc073833a039940392592bf10cf338a830ba4e392c1667d7697654c7e
node_id : 037ff12b6a4e4bcb4b944b6d20af08cdff61b3461c1dff0d00a88697414d891bc7
maker_fee : 0.025 # In percent (%)
taker_fee : 0.175 # In percent (%)
total_fee : 0.2 # In percent (%)

View File

@ -91,6 +91,8 @@ tutorial:
url: "/watch/fr/"
- title: '<span class="side-bar-item">&nbsp;&nbsp;<img style="width:22px;height:13px" src="/assets/vector/polish.svg"/> Polski</span>'
url: "/watch/pl/"
- title: '<span class="side-bar-item">&nbsp;&nbsp;<img style="width:22px;height:13px" src="/assets/vector/russian.svg"/> Русский</span>'
url: "/watch/ru/"
- title: '<span class="side-bar-item"><img id="side-icon-big" src="/assets/vector/readme.svg"/>Read</span>'
url: "/watch/en/"
children:
@ -100,6 +102,8 @@ tutorial:
url: "/read/es/"
- title: '<span class="side-bar-item">&nbsp;&nbsp;<img style="width:22px;height:13px" src="/assets/vector/german.svg"/> Deutsch</span>'
url: "/read/de/"
- title: '<span class="side-bar-item">&nbsp;&nbsp;<img style="width:22px;height:13px" src="/assets/vector/russian.svg"/> Русский</span>'
url: "/read/ru/"
contribute:
- title: '<span class="side-bar-item"><img id="side-icon-big" src="/assets/vector/handshake-angle.svg"/>Contribute</span>'

View File

@ -15,13 +15,11 @@ We do, however, get approached by very enthusiastic bitcoiners who want to boost
You can donate the following ways:
- **Zap us on Nostr:**
All Nostr zaps will go towards the social media team.
Here is the nPub for RoboSats account :
```
npub1p2psats79rypr8lpnl9t5qdekfp700x660qsgw284xvq4s09lqrqqk3m82
```
- **Tip the [RoboSats DevFund Node](https://amboss.space/node/{{site.robosats.node_id}}) via KeySend:**
<div>
<lightning-widget name="DevFund Node" accent="#9c27b0" to="robodevfund@vlt.ge" image="https://pbs.twimg.com/profile_images/1524391291475406850/ULKOymid_400x400.jpg"/>
<script src="https://embed.twentyuno.net/js/app.js"></script>
</div>
- **Directly tip the developer working on the features you like.** Check the [active PRs](https://github.com/RoboSats/robosats/pulls) and show your support to the developers with via Lightning tips. Simply write a message, for example "@developer_name, I would like to fund your development of this feature with 6000 Sats". The developer should reply with an LN invoice with a long expiration time.
@ -47,14 +45,13 @@ npub1p2psats79rypr8lpnl9t5qdekfp700x660qsgw284xvq4s09lqrqqk3m82
{{site.robosats.leaddev_paynym_code}}
```
- **Tip the [experimental RoboSats coordinator](https://amboss.space/node/{{site.robosats.node_id}}) via KeySend:**
<div>
<lightning-widget name="Experimental Coordinator" accent="#9c27b0" to="{{site.robosats.node_id}}" image="https://pbs.twimg.com/profile_images/1524391291475406850/ULKOymid_400x400.jpg"/>
<script src="https://embed.twentyuno.net/js/app.js"></script>
</div>
- **Zap us on Nostr:**
All Nostr zaps will go towards the social media team.
Here is the nPub for RoboSats account :
```
npub1p2psats79rypr8lpnl9t5qdekfp700x660qsgw284xvq4s09lqrqqk3m82
```

View File

@ -0,0 +1,13 @@
---
layout: single
title: Самоучитель RoboSats
permalink: /read/ru/
toc: true
toc_sticky: true
sidebar:
title: '<img id="side-icon-verybig" src="/assets/vector/chalkboard-user.svg"/>Учебное пособие'
nav: tutorial
---
![image](https://21ideas.org/img/main-section/main_light.png)
### <a href="https://21ideas.org/robosats/" target="_blank">RoboSats Простой и приватный способ обмена биткоина</a>
Великолепное руководство по использованию "RoboSats" от 21ideas.org

View File

@ -10,6 +10,9 @@ sidebar:
src: "_pages/docs/tutorials/videos-de.md"
---
#### OrangedMike: ROBOSATS - Bitcoin Kauf, Verkauf und Swap
<iframe width="560" height="315" src="https://www.youtube.com/embed/f5LZzvEp_Zw" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
#### Einundzwanzig: Bitcoin unabhängig und ohne Registrierung kaufen
<iframe width="560" height="315" src="https://www.youtube.com/embed/kmd46irWXvw" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>

View File

@ -0,0 +1,16 @@
---
layout: single
title: Смотрите и учитесь
permalink: /watch/ru/
toc: true
toc_sticky: true
sidebar:
title: '<img id="side-icon-verybig" src="/assets/vector/circle-play.svg"/>Учебники'
nav: tutorial
src: "_pages/docs/tutorials/videos-ru.md"
---
### BitKorn Guide | RoboSats. Покупка и продажа Биткоина
<iframe width="560" height="315" src="https://www.youtube.com/embed/QCGWXObIsKY" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
{% include add_tutorials %}

View File

@ -0,0 +1 @@
<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 9 6" width="900" height="600"><rect fill="#fff" width="9" height="3"/><rect fill="#d52b1e" y="3" width="9" height="3"/><rect fill="#0039a6" y="2" width="9" height="2"/></svg>

After

Width:  |  Height:  |  Size: 265 B

View File

@ -18,8 +18,8 @@
"@mui/lab": "^5.0.0-alpha.136",
"@mui/material": "^5.15.3",
"@mui/system": "^5.15.3",
"@mui/x-data-grid": "^6.17.0",
"@mui/x-date-pickers": "^6.17.0",
"@mui/x-data-grid": "^6.19.2",
"@mui/x-date-pickers": "^6.19.2"
"@nivo/core": "^0.84.0",
"@nivo/line": "^0.84.0",
"base-ex": "^0.8.1",
@ -33,13 +33,13 @@
"js-sha256": "^0.10.1",
"leaflet": "^1.9.4",
"light-bolt11-decoder": "^3.0.0",
"npm": "^10.3.0",
"npm": "^10.4.0",
"openpgp": "^5.11.0",
"react": "^18.2.0",
"react-countdown": "^2.3.5",
"react-dom": "^18.2.0",
"react-grid-layout": "^1.4.4",
"react-i18next": "^14.0.0",
"react-i18next": "^14.0.1",
"react-image": "^4.1.0",
"react-leaflet": "^4.2.1",
"react-qr-code": "^2.0.11",
@ -3408,12 +3408,12 @@
}
},
"node_modules/@mui/x-data-grid": {
"version": "6.17.0",
"resolved": "https://registry.npmjs.org/@mui/x-data-grid/-/x-data-grid-6.17.0.tgz",
"integrity": "sha512-HlpavV9jR7bLDYfi7n05R0xSsLl5ZxCTy3J5g4OfQtxhg9Zsu1uOkkLfudsM5LFqTbi5o+3PvZ9Kh33VvNUN/w==",
"version": "6.19.2",
"resolved": "https://registry.npmjs.org/@mui/x-data-grid/-/x-data-grid-6.19.2.tgz",
"integrity": "sha512-+wizP1jEzCKB5BSQ6OD5TP6RspEbWmFWcxi1XBgKrzryUZii1o4G2BW1+d/n4p3xETCUMKRkYfItrOJGlM/dBw==",
"dependencies": {
"@babel/runtime": "^7.23.2",
"@mui/utils": "^5.14.14",
"@mui/utils": "^5.14.16",
"clsx": "^2.0.0",
"prop-types": "^15.8.1",
"reselect": "^4.1.8"
@ -3441,9 +3441,9 @@
}
},
"node_modules/@mui/x-date-pickers": {
"version": "6.17.0",
"resolved": "https://registry.npmjs.org/@mui/x-date-pickers/-/x-date-pickers-6.17.0.tgz",
"integrity": "sha512-rBKiw6GL1bTJpfSuD0KnOgxrERhoSip7eyqXzHbh0GODmp9f5bonE9gRZ74XmlyMQT7tcSzXdzk0c1X0HhmP1A==",
"version": "6.19.2",
"resolved": "https://registry.npmjs.org/@mui/x-date-pickers/-/x-date-pickers-6.19.2.tgz",
"integrity": "sha512-/bdWZabexuz+1rKG15XryxiMGb5D0XVx65NU7CZYKm/1+HuUzc0FX9smKEa/YVZnLSNsAp6SULIyPZtAKE+3AA==",
"dependencies": {
"@babel/runtime": "^7.23.2",
"@mui/base": "^5.0.0-beta.20",
@ -10360,9 +10360,9 @@
}
},
"node_modules/npm": {
"version": "10.3.0",
"resolved": "https://registry.npmjs.org/npm/-/npm-10.3.0.tgz",
"integrity": "sha512-9u5GFc1UqI2DLlGI7QdjkpIaBs3UhTtY8KoCqYJK24gV/j/tByaI4BA4R7RkOc+ASqZMzFPKt4Pj2Z8JcGo//A==",
"version": "10.4.0",
"resolved": "https://registry.npmjs.org/npm/-/npm-10.4.0.tgz",
"integrity": "sha512-RS7Mx0OVfXlOcQLRePuDIYdFCVBPCNapWHplDK+mh7GDdP/Tvor4ocuybRRPSvfcRb2vjRJt1fHCqw3cr8qACQ==",
"bundleDependencies": [
"@isaacs/string-locale-compare",
"@npmcli/arborist",
@ -10426,7 +10426,6 @@
"semver",
"spdx-expression-parse",
"ssri",
"strip-ansi",
"supports-color",
"tar",
"text-table",
@ -10444,8 +10443,8 @@
"@npmcli/map-workspaces": "^3.0.4",
"@npmcli/package-json": "^5.0.0",
"@npmcli/promise-spawn": "^7.0.1",
"@npmcli/run-script": "^7.0.3",
"@sigstore/tuf": "^2.2.0",
"@npmcli/run-script": "^7.0.4",
"@sigstore/tuf": "^2.3.0",
"abbrev": "^2.0.0",
"archy": "~1.0.0",
"cacache": "^18.0.2",
@ -10491,7 +10490,7 @@
"npm-user-validate": "^2.0.0",
"npmlog": "^7.0.1",
"p-map": "^4.0.0",
"pacote": "^17.0.5",
"pacote": "^17.0.6",
"parse-conflict-json": "^3.0.1",
"proc-log": "^3.0.0",
"qrcode-terminal": "^0.12.0",
@ -10499,7 +10498,6 @@
"semver": "^7.5.4",
"spdx-expression-parse": "^3.0.1",
"ssri": "^10.0.5",
"strip-ansi": "^7.1.0",
"supports-color": "^9.4.0",
"tar": "^6.2.0",
"text-table": "~0.2.0",
@ -10554,6 +10552,17 @@
"node": ">=12"
}
},
"node_modules/npm/node_modules/@isaacs/cliui/node_modules/ansi-regex": {
"version": "6.0.1",
"inBundle": true,
"license": "MIT",
"engines": {
"node": ">=12"
},
"funding": {
"url": "https://github.com/chalk/ansi-regex?sponsor=1"
}
},
"node_modules/npm/node_modules/@isaacs/cliui/node_modules/emoji-regex": {
"version": "9.2.2",
"inBundle": true,
@ -10575,6 +10584,20 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/npm/node_modules/@isaacs/cliui/node_modules/strip-ansi": {
"version": "7.1.0",
"inBundle": true,
"license": "MIT",
"dependencies": {
"ansi-regex": "^6.0.1"
},
"engines": {
"node": ">=12"
},
"funding": {
"url": "https://github.com/chalk/strip-ansi?sponsor=1"
}
},
"node_modules/npm/node_modules/@isaacs/string-locale-compare": {
"version": "1.1.0",
"inBundle": true,
@ -10596,7 +10619,7 @@
}
},
"node_modules/npm/node_modules/@npmcli/arborist": {
"version": "7.3.0",
"version": "7.3.1",
"inBundle": true,
"license": "ISC",
"dependencies": {
@ -10627,7 +10650,7 @@
"parse-conflict-json": "^3.0.0",
"proc-log": "^3.0.0",
"promise-all-reject-late": "^1.0.0",
"promise-call-limit": "^1.0.2",
"promise-call-limit": "^3.0.1",
"read-package-json-fast": "^3.0.2",
"semver": "^7.3.7",
"ssri": "^10.0.5",
@ -10812,14 +10835,14 @@
}
},
"node_modules/npm/node_modules/@npmcli/run-script": {
"version": "7.0.3",
"version": "7.0.4",
"inBundle": true,
"license": "ISC",
"dependencies": {
"@npmcli/node-gyp": "^3.0.0",
"@npmcli/package-json": "^5.0.0",
"@npmcli/promise-spawn": "^7.0.0",
"node-gyp": "^10.0.0",
"read-package-json-fast": "^3.0.0",
"which": "^4.0.0"
},
"engines": {
@ -10836,7 +10859,7 @@
}
},
"node_modules/npm/node_modules/@sigstore/bundle": {
"version": "2.1.0",
"version": "2.1.1",
"inBundle": true,
"license": "Apache-2.0",
"dependencies": {
@ -10846,6 +10869,14 @@
"node": "^16.14.0 || >=18.0.0"
}
},
"node_modules/npm/node_modules/@sigstore/core": {
"version": "0.2.0",
"inBundle": true,
"license": "Apache-2.0",
"engines": {
"node": "^16.14.0 || >=18.0.0"
}
},
"node_modules/npm/node_modules/@sigstore/protobuf-specs": {
"version": "0.2.1",
"inBundle": true,
@ -10855,11 +10886,12 @@
}
},
"node_modules/npm/node_modules/@sigstore/sign": {
"version": "2.2.0",
"version": "2.2.1",
"inBundle": true,
"license": "Apache-2.0",
"dependencies": {
"@sigstore/bundle": "^2.1.0",
"@sigstore/bundle": "^2.1.1",
"@sigstore/core": "^0.2.0",
"@sigstore/protobuf-specs": "^0.2.1",
"make-fetch-happen": "^13.0.0"
},
@ -10868,12 +10900,25 @@
}
},
"node_modules/npm/node_modules/@sigstore/tuf": {
"version": "2.2.0",
"version": "2.3.0",
"inBundle": true,
"license": "Apache-2.0",
"dependencies": {
"@sigstore/protobuf-specs": "^0.2.1",
"tuf-js": "^2.1.0"
"tuf-js": "^2.2.0"
},
"engines": {
"node": "^16.14.0 || >=18.0.0"
}
},
"node_modules/npm/node_modules/@sigstore/verify": {
"version": "0.1.0",
"inBundle": true,
"license": "Apache-2.0",
"dependencies": {
"@sigstore/bundle": "^2.1.1",
"@sigstore/core": "^0.2.0",
"@sigstore/protobuf-specs": "^0.2.1"
},
"engines": {
"node": "^16.14.0 || >=18.0.0"
@ -10931,14 +10976,11 @@
}
},
"node_modules/npm/node_modules/ansi-regex": {
"version": "6.0.1",
"version": "5.0.1",
"inBundle": true,
"license": "MIT",
"engines": {
"node": ">=12"
},
"funding": {
"url": "https://github.com/chalk/ansi-regex?sponsor=1"
"node": ">=8"
}
},
"node_modules/npm/node_modules/ansi-styles": {
@ -11099,25 +11141,6 @@
"node": ">= 10"
}
},
"node_modules/npm/node_modules/cli-columns/node_modules/ansi-regex": {
"version": "5.0.1",
"inBundle": true,
"license": "MIT",
"engines": {
"node": ">=8"
}
},
"node_modules/npm/node_modules/cli-columns/node_modules/strip-ansi": {
"version": "6.0.1",
"inBundle": true,
"license": "MIT",
"dependencies": {
"ansi-regex": "^5.0.1"
},
"engines": {
"node": ">=8"
}
},
"node_modules/npm/node_modules/cli-table3": {
"version": "0.6.3",
"inBundle": true,
@ -11184,25 +11207,6 @@
"node": ">=8.0.0"
}
},
"node_modules/npm/node_modules/columnify/node_modules/ansi-regex": {
"version": "5.0.1",
"inBundle": true,
"license": "MIT",
"engines": {
"node": ">=8"
}
},
"node_modules/npm/node_modules/columnify/node_modules/strip-ansi": {
"version": "6.0.1",
"inBundle": true,
"license": "MIT",
"dependencies": {
"ansi-regex": "^5.0.1"
},
"engines": {
"node": ">=8"
}
},
"node_modules/npm/node_modules/common-ancestor-path": {
"version": "1.0.1",
"inBundle": true,
@ -11388,25 +11392,6 @@
"node": "^14.17.0 || ^16.13.0 || >=18.0.0"
}
},
"node_modules/npm/node_modules/gauge/node_modules/ansi-regex": {
"version": "5.0.1",
"inBundle": true,
"license": "MIT",
"engines": {
"node": ">=8"
}
},
"node_modules/npm/node_modules/gauge/node_modules/strip-ansi": {
"version": "6.0.1",
"inBundle": true,
"license": "MIT",
"dependencies": {
"ansi-regex": "^5.0.1"
},
"engines": {
"node": ">=8"
}
},
"node_modules/npm/node_modules/glob": {
"version": "10.3.10",
"inBundle": true,
@ -11673,7 +11658,7 @@
}
},
"node_modules/npm/node_modules/libnpmdiff": {
"version": "6.0.5",
"version": "6.0.6",
"inBundle": true,
"license": "ISC",
"dependencies": {
@ -11692,7 +11677,7 @@
}
},
"node_modules/npm/node_modules/libnpmexec": {
"version": "7.0.6",
"version": "7.0.7",
"inBundle": true,
"license": "ISC",
"dependencies": {
@ -11713,7 +11698,7 @@
}
},
"node_modules/npm/node_modules/libnpmfund": {
"version": "5.0.3",
"version": "5.0.4",
"inBundle": true,
"license": "ISC",
"dependencies": {
@ -11748,7 +11733,7 @@
}
},
"node_modules/npm/node_modules/libnpmpack": {
"version": "6.0.5",
"version": "6.0.6",
"inBundle": true,
"license": "ISC",
"dependencies": {
@ -11762,7 +11747,7 @@
}
},
"node_modules/npm/node_modules/libnpmpublish": {
"version": "9.0.3",
"version": "9.0.4",
"inBundle": true,
"license": "ISC",
"dependencies": {
@ -11772,7 +11757,7 @@
"npm-registry-fetch": "^16.0.0",
"proc-log": "^3.0.0",
"semver": "^7.3.7",
"sigstore": "^2.1.0",
"sigstore": "^2.2.0",
"ssri": "^10.0.5"
},
"engines": {
@ -12230,7 +12215,7 @@
}
},
"node_modules/npm/node_modules/pacote": {
"version": "17.0.5",
"version": "17.0.6",
"inBundle": true,
"license": "ISC",
"dependencies": {
@ -12249,7 +12234,7 @@
"promise-retry": "^2.0.1",
"read-package-json": "^7.0.0",
"read-package-json-fast": "^3.0.0",
"sigstore": "^2.0.0",
"sigstore": "^2.2.0",
"ssri": "^10.0.0",
"tar": "^6.1.11"
},
@ -12325,7 +12310,7 @@
}
},
"node_modules/npm/node_modules/promise-call-limit": {
"version": "1.0.2",
"version": "3.0.1",
"inBundle": true,
"license": "ISC",
"funding": {
@ -12487,14 +12472,16 @@
}
},
"node_modules/npm/node_modules/sigstore": {
"version": "2.1.0",
"version": "2.2.0",
"inBundle": true,
"license": "Apache-2.0",
"dependencies": {
"@sigstore/bundle": "^2.1.0",
"@sigstore/bundle": "^2.1.1",
"@sigstore/core": "^0.2.0",
"@sigstore/protobuf-specs": "^0.2.1",
"@sigstore/sign": "^2.1.0",
"@sigstore/tuf": "^2.1.0"
"@sigstore/sign": "^2.2.1",
"@sigstore/tuf": "^2.3.0",
"@sigstore/verify": "^0.1.0"
},
"engines": {
"node": "^16.14.0 || >=18.0.0"
@ -12601,56 +12588,15 @@
"node": ">=8"
}
},
"node_modules/npm/node_modules/string-width-cjs/node_modules/ansi-regex": {
"version": "5.0.1",
"inBundle": true,
"license": "MIT",
"engines": {
"node": ">=8"
}
},
"node_modules/npm/node_modules/string-width-cjs/node_modules/strip-ansi": {
"version": "6.0.1",
"inBundle": true,
"license": "MIT",
"dependencies": {
"ansi-regex": "^5.0.1"
},
"engines": {
"node": ">=8"
}
},
"node_modules/npm/node_modules/string-width/node_modules/ansi-regex": {
"version": "5.0.1",
"inBundle": true,
"license": "MIT",
"engines": {
"node": ">=8"
}
},
"node_modules/npm/node_modules/string-width/node_modules/strip-ansi": {
"version": "6.0.1",
"inBundle": true,
"license": "MIT",
"dependencies": {
"ansi-regex": "^5.0.1"
},
"engines": {
"node": ">=8"
}
},
"node_modules/npm/node_modules/strip-ansi": {
"version": "7.1.0",
"version": "6.0.1",
"inBundle": true,
"license": "MIT",
"dependencies": {
"ansi-regex": "^6.0.1"
"ansi-regex": "^5.0.1"
},
"engines": {
"node": ">=12"
},
"funding": {
"url": "https://github.com/chalk/strip-ansi?sponsor=1"
"node": ">=8"
}
},
"node_modules/npm/node_modules/strip-ansi-cjs": {
@ -12665,14 +12611,6 @@
"node": ">=8"
}
},
"node_modules/npm/node_modules/strip-ansi-cjs/node_modules/ansi-regex": {
"version": "5.0.1",
"inBundle": true,
"license": "MIT",
"engines": {
"node": ">=8"
}
},
"node_modules/npm/node_modules/supports-color": {
"version": "9.4.0",
"inBundle": true,
@ -12749,7 +12687,7 @@
}
},
"node_modules/npm/node_modules/tuf-js": {
"version": "2.1.0",
"version": "2.2.0",
"inBundle": true,
"license": "MIT",
"dependencies": {
@ -12884,14 +12822,6 @@
"url": "https://github.com/chalk/wrap-ansi?sponsor=1"
}
},
"node_modules/npm/node_modules/wrap-ansi-cjs/node_modules/ansi-regex": {
"version": "5.0.1",
"inBundle": true,
"license": "MIT",
"engines": {
"node": ">=8"
}
},
"node_modules/npm/node_modules/wrap-ansi-cjs/node_modules/ansi-styles": {
"version": "4.3.0",
"inBundle": true,
@ -12906,15 +12836,15 @@
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
"node_modules/npm/node_modules/wrap-ansi-cjs/node_modules/strip-ansi": {
"node_modules/npm/node_modules/wrap-ansi/node_modules/ansi-regex": {
"version": "6.0.1",
"inBundle": true,
"license": "MIT",
"dependencies": {
"ansi-regex": "^5.0.1"
},
"engines": {
"node": ">=8"
"node": ">=12"
},
"funding": {
"url": "https://github.com/chalk/ansi-regex?sponsor=1"
}
},
"node_modules/npm/node_modules/wrap-ansi/node_modules/emoji-regex": {
@ -12938,6 +12868,20 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/npm/node_modules/wrap-ansi/node_modules/strip-ansi": {
"version": "7.1.0",
"inBundle": true,
"license": "MIT",
"dependencies": {
"ansi-regex": "^6.0.1"
},
"engines": {
"node": ">=12"
},
"funding": {
"url": "https://github.com/chalk/strip-ansi?sponsor=1"
}
},
"node_modules/npm/node_modules/write-file-atomic": {
"version": "5.0.1",
"inBundle": true,
@ -13624,9 +13568,9 @@
}
},
"node_modules/react-i18next": {
"version": "14.0.0",
"resolved": "https://registry.npmjs.org/react-i18next/-/react-i18next-14.0.0.tgz",
"integrity": "sha512-OCrS8rHNAmnr8ggGRDxjakzihrMW7HCbsplduTm3EuuQ6fyvWGT41ksZpqbduYoqJurBmEsEVZ1pILSUWkHZng==",
"version": "14.0.1",
"resolved": "https://registry.npmjs.org/react-i18next/-/react-i18next-14.0.1.tgz",
"integrity": "sha512-TMV8hFismBmpMdIehoFHin/okfvgjFhp723RYgIqB4XyhDobVMyukyM3Z8wtTRmajyFMZrBl/OaaXF2P6WjUAw==",
"dependencies": {
"@babel/runtime": "^7.22.5",
"html-parse-stringify": "^3.0.1"

View File

@ -57,8 +57,8 @@
"@mui/lab": "^5.0.0-alpha.136",
"@mui/material": "^5.15.3",
"@mui/system": "^5.15.3",
"@mui/x-data-grid": "^6.17.0",
"@mui/x-date-pickers": "^6.17.0",
"@mui/x-data-grid": "^6.19.2",
"@mui/x-date-pickers": "^6.19.2",
"@nivo/core": "^0.84.0",
"@nivo/line": "^0.84.0",
"base-ex": "^0.8.1",
@ -72,13 +72,13 @@
"js-sha256": "^0.10.1",
"leaflet": "^1.9.4",
"light-bolt11-decoder": "^3.0.0",
"npm": "^10.3.0",
"npm": "^10.4.0",
"openpgp": "^5.11.0",
"react": "^18.2.0",
"react-countdown": "^2.3.5",
"react-dom": "^18.2.0",
"react-grid-layout": "^1.4.4",
"react-i18next": "^14.0.0",
"react-i18next": "^14.0.1",
"react-image": "^4.1.0",
"react-leaflet": "^4.2.1",
"react-qr-code": "^2.0.11",

View File

@ -1,4 +1,4 @@
coverage==7.4.0
coverage==7.4.1
ruff==0.1.14
drf-openapi-tester==2.3.3
pre-commit==3.6.0

View File

@ -2,6 +2,7 @@ import os
import json
import requests
import base64
from datetime import datetime
devfund_data_path = os.path.normpath(os.path.join("..", "devfund_pubkey.json"))
@ -19,7 +20,9 @@ response_data = r.json()
for invoice in response_data["invoices"]:
if invoice["is_keysend"] and invoice["htlcs"][0]["custom_records"]["34349334"]:
dt = datetime.fromtimestamp(int(invoice["creation_date"]))
print(f"Index {invoice['add_index']}")
print(f'Timestamp {dt.strftime("%Y-%m-%d %H:%M:%S")}')
print(
f"{base64.b64decode(invoice['htlcs'][0]['custom_records']['34349334']).decode('utf-8')}"
)