diff --git a/api/admin.py b/api/admin.py
index 0846ad67..d853d7da 100644
--- a/api/admin.py
+++ b/api/admin.py
@@ -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'
')
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):
"""
diff --git a/api/notifications.py b/api/notifications.py
index 8d1e0e65..c1bd1f46 100644
--- a/api/notifications.py
+++ b/api/notifications.py
@@ -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
diff --git a/api/tasks.py b/api/tasks.py
index 09ac9f5a..dee5709a 100644
--- a/api/tasks.py
+++ b/api/tasks.py
@@ -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
diff --git a/docs/_config.yml b/docs/_config.yml
index b8a72fd6..c8525805 100644
--- a/docs/_config.yml
+++ b/docs/_config.yml
@@ -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 (%)
diff --git a/docs/_data/navigation.yml b/docs/_data/navigation.yml
index beb0ca9f..1f6a8267 100644
--- a/docs/_data/navigation.yml
+++ b/docs/_data/navigation.yml
@@ -91,6 +91,8 @@ tutorial:
url: "/watch/fr/"
- title: ' Polski '
url: "/watch/pl/"
+ - title: ' Π ΡΡΡΠΊΠΈΠΉ '
+ url: "/watch/ru/"
- title: ' Read '
url: "/watch/en/"
children:
@@ -100,6 +102,8 @@ tutorial:
url: "/read/es/"
- title: ' Deutsch '
url: "/read/de/"
+ - title: ' Π ΡΡΡΠΊΠΈΠΉ '
+ url: "/read/ru/"
contribute:
- title: ' Contribute '
diff --git a/docs/_pages/contribute/07-donate.md b/docs/_pages/contribute/07-donate.md
index d0bd113e..2faf1edb 100644
--- a/docs/_pages/contribute/07-donate.md
+++ b/docs/_pages/contribute/07-donate.md
@@ -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:**
+
+
+
+
- **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:**
-
-
-
-
-
-
+ - **Zap us on Nostr:**
+ All Nostr zaps will go towards the social media team.
+ Here is the nPub for RoboSats account :
+ ```
+npub1p2psats79rypr8lpnl9t5qdekfp700x660qsgw284xvq4s09lqrqqk3m82
+ ```
diff --git a/docs/_pages/tutorials/read/how-to-use_ru.md b/docs/_pages/tutorials/read/how-to-use_ru.md
new file mode 100644
index 00000000..c1b66715
--- /dev/null
+++ b/docs/_pages/tutorials/read/how-to-use_ru.md
@@ -0,0 +1,13 @@
+---
+layout: single
+title: Π‘Π°ΠΌΠΎΡΡΠΈΡΠ΅Π»Ρ RoboSats
+permalink: /read/ru/
+toc: true
+toc_sticky: true
+sidebar:
+ title: ' Π£ΡΠ΅Π±Π½ΠΎΠ΅ ΠΏΠΎΡΠΎΠ±ΠΈΠ΅'
+ nav: tutorial
+---
+
+### RoboSats β ΠΡΠΎΡΡΠΎΠΉ ΠΈ ΠΏΡΠΈΠ²Π°ΡΠ½ΡΠΉ ΡΠΏΠΎΡΠΎΠ± ΠΎΠ±ΠΌΠ΅Π½Π° Π±ΠΈΡΠΊΠΎΠΈΠ½Π°
+ΠΠ΅Π»ΠΈΠΊΠΎΠ»Π΅ΠΏΠ½ΠΎΠ΅ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ ΠΏΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ "RoboSats" ΠΎΡ 21ideas.org
\ No newline at end of file
diff --git a/docs/_pages/tutorials/watch/videos-de.md b/docs/_pages/tutorials/watch/videos-de.md
index 1fba7bed..f1dc3cf4 100644
--- a/docs/_pages/tutorials/watch/videos-de.md
+++ b/docs/_pages/tutorials/watch/videos-de.md
@@ -10,6 +10,9 @@ sidebar:
src: "_pages/docs/tutorials/videos-de.md"
---
+#### OrangedMike: ROBOSATS - Bitcoin Kauf, Verkauf und Swap
+VIDEO
+
#### Einundzwanzig: Bitcoin unabhΓ€ngig und ohne Registrierung kaufen
VIDEO
diff --git a/docs/_pages/tutorials/watch/videos-ru.md b/docs/_pages/tutorials/watch/videos-ru.md
new file mode 100644
index 00000000..7ecb4775
--- /dev/null
+++ b/docs/_pages/tutorials/watch/videos-ru.md
@@ -0,0 +1,16 @@
+---
+layout: single
+title: Π‘ΠΌΠΎΡΡΠΈΡΠ΅ ΠΈ ΡΡΠΈΡΠ΅ΡΡ
+permalink: /watch/ru/
+toc: true
+toc_sticky: true
+sidebar:
+ title: ' Π£ΡΠ΅Π±Π½ΠΈΠΊΠΈ'
+ nav: tutorial
+src: "_pages/docs/tutorials/videos-ru.md"
+---
+
+### BitKorn Guide | RoboSats. ΠΠΎΠΊΡΠΏΠΊΠ° ΠΈ ΠΏΡΠΎΠ΄Π°ΠΆΠ° ΠΠΈΡΠΊΠΎΠΈΠ½Π°
+VIDEO
+
+{% include add_tutorials %}
diff --git a/docs/assets/vector/russian.svg b/docs/assets/vector/russian.svg
new file mode 100644
index 00000000..855b805a
--- /dev/null
+++ b/docs/assets/vector/russian.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/frontend/package-lock.json b/frontend/package-lock.json
index 1faa3082..0f328dce 100644
--- a/frontend/package-lock.json
+++ b/frontend/package-lock.json
@@ -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"
diff --git a/frontend/package.json b/frontend/package.json
index d81a072c..117a604b 100644
--- a/frontend/package.json
+++ b/frontend/package.json
@@ -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",
diff --git a/requirements_dev.txt b/requirements_dev.txt
index c4ee4f9f..ce23ccc7 100644
--- a/requirements_dev.txt
+++ b/requirements_dev.txt
@@ -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
\ No newline at end of file
diff --git a/scripts/get_devfund_donations.py b/scripts/get_devfund_donations.py
index c7466a14..9d53cffd 100644
--- a/scripts/get_devfund_donations.py
+++ b/scripts/get_devfund_donations.py
@@ -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')}"
)