Compare commits
8
Commits
user_onboard
...
0.12.2
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7b4d9bf5db | ||
|
|
c51e7351e8 | ||
|
|
fe12eccc42 | ||
|
|
17b7826753 | ||
|
|
14ae6d8b1a | ||
|
|
7b559991c7 | ||
|
|
decd4cdf0a | ||
|
|
dc7a6551c5 |
+1
-1
@@ -2,7 +2,7 @@ FROM python:3.10-slim-bullseye
|
||||
|
||||
RUN apt-get clean
|
||||
RUN apt-get update
|
||||
RUN apt-get install -y curl pkg-config build-essential
|
||||
RUN apt-get install -y curl pkg-config build-essential libnss-myhostname
|
||||
|
||||
RUN curl -sSL https://install.python-poetry.org | python3 -
|
||||
ENV PATH="/root/.local/bin:$PATH"
|
||||
|
||||
+42
-1
@@ -53,8 +53,45 @@ async def stop_extension_background_work(
|
||||
):
|
||||
"""
|
||||
Stop background work for extension (like asyncio.Tasks, WebSockets, etc).
|
||||
Extensions SHOULD expose a DELETE enpoint at the root level of their API.
|
||||
Extensions SHOULD expose a `api_stop()` function and/or a DELETE enpoint
|
||||
at the root level of their API.
|
||||
"""
|
||||
stopped = await _stop_extension_background_work(ext_id)
|
||||
|
||||
if not stopped:
|
||||
# fallback to REST API call
|
||||
await _stop_extension_background_work_via_api(ext_id, user, access_token)
|
||||
|
||||
|
||||
async def _stop_extension_background_work(ext_id) -> bool:
|
||||
upgrade_hash = settings.extension_upgrade_hash(ext_id) or ""
|
||||
ext = Extension(ext_id, True, False, upgrade_hash=upgrade_hash)
|
||||
|
||||
try:
|
||||
logger.info(f"Stopping background work for extension '{ext.module_name}'.")
|
||||
old_module = importlib.import_module(ext.module_name)
|
||||
|
||||
# Extensions must expose an `{ext_id}_stop()` function at the module level
|
||||
# The `api_stop()` function is for backwards compatibility (will be deprecated)
|
||||
stop_fns = [f"{ext_id}_stop", "api_stop"]
|
||||
stop_fn_name = next((fn for fn in stop_fns if hasattr(old_module, fn)), None)
|
||||
assert stop_fn_name, "No stop function found for '{ext.module_name}'"
|
||||
|
||||
await getattr(old_module, stop_fn_name)()
|
||||
|
||||
logger.info(f"Stopped background work for extension '{ext.module_name}'.")
|
||||
except Exception as ex:
|
||||
logger.warning(f"Failed to stop background work for '{ext.module_name}'.")
|
||||
logger.warning(ex)
|
||||
return False
|
||||
|
||||
return True
|
||||
|
||||
|
||||
async def _stop_extension_background_work_via_api(ext_id, user, access_token):
|
||||
logger.info(
|
||||
f"Stopping background work for extension '{ext_id}' using the REST API."
|
||||
)
|
||||
async with httpx.AsyncClient() as client:
|
||||
try:
|
||||
url = f"http://{settings.host}:{settings.port}/{ext_id}/api/v1?usr={user}"
|
||||
@@ -63,7 +100,11 @@ async def stop_extension_background_work(
|
||||
)
|
||||
resp = await client.delete(url=url, headers=headers)
|
||||
resp.raise_for_status()
|
||||
logger.info(f"Stopped background work for extension '{ext_id}'.")
|
||||
except Exception as ex:
|
||||
logger.warning(
|
||||
f"Failed to stop background work for '{ext_id}' using the REST API."
|
||||
)
|
||||
logger.warning(ex)
|
||||
|
||||
|
||||
|
||||
@@ -18,16 +18,13 @@ from lnbits.core.services import (
|
||||
)
|
||||
from lnbits.settings import get_wallet_class, settings
|
||||
from lnbits.tasks import (
|
||||
SseListenersDict,
|
||||
create_permanent_task,
|
||||
create_task,
|
||||
register_invoice_listener,
|
||||
send_push_notification,
|
||||
)
|
||||
|
||||
api_invoice_listeners: Dict[str, asyncio.Queue] = SseListenersDict(
|
||||
"api_invoice_listeners"
|
||||
)
|
||||
api_invoice_listeners: Dict[str, asyncio.Queue] = {}
|
||||
|
||||
|
||||
def register_killswitch():
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
:content-inset-level="0.5"
|
||||
>
|
||||
<q-card-section>
|
||||
<strong>Node URL: </strong><em v-text="origin"></em><br />
|
||||
<strong>Wallet ID: </strong><em>{{ wallet.id }}</em><br />
|
||||
<strong>Admin key: </strong><em>{{ wallet.adminkey }}</em><br />
|
||||
<strong>Invoice/read key: </strong><em>{{ wallet.inkey }}</em>
|
||||
|
||||
@@ -922,8 +922,11 @@
|
||||
|
||||
<q-dialog v-model="disclaimerDialog.show" position="top">
|
||||
<q-card class="q-pa-lg">
|
||||
<h6 class="q-my-md text-primary">Warning</h6>
|
||||
<p v-text="$t('disclaimer_dialog')"></p>
|
||||
<h6
|
||||
class="q-my-md text-primary"
|
||||
v-text="$t('disclaimer_dialog_title')"
|
||||
></h6>
|
||||
<p class="whitespace-pre-line" v-text="$t('disclaimer_dialog')"></p>
|
||||
<div class="row q-mt-lg">
|
||||
<q-btn
|
||||
outline
|
||||
|
||||
@@ -824,8 +824,9 @@ async def api_install_extension(
|
||||
|
||||
await add_installed_extension(ext_info)
|
||||
|
||||
# call stop while the old routes are still active
|
||||
await stop_extension_background_work(data.ext_id, user.id, access_token)
|
||||
if extension.is_upgrade_extension:
|
||||
# call stop while the old routes are still active
|
||||
await stop_extension_background_work(data.ext_id, user.id, access_token)
|
||||
|
||||
if data.ext_id not in settings.lnbits_deactivated_extensions:
|
||||
settings.lnbits_deactivated_extensions += [data.ext_id]
|
||||
|
||||
@@ -92,6 +92,10 @@ def template_renderer(additional_folders: Optional[List] = None) -> Jinja2Templa
|
||||
|
||||
def get_current_extension_name() -> str:
|
||||
"""
|
||||
DEPRECATED: Use the repo name instead, will be removed in the future
|
||||
before: `register_invoice_listener(invoice_queue, get_current_extension_name())`
|
||||
after: `register_invoice_listener(invoice_queue, "my-extension")`
|
||||
|
||||
Returns the name of the extension that calls this method.
|
||||
"""
|
||||
import inspect
|
||||
|
||||
@@ -68,6 +68,16 @@ class InstalledExtensionsSettings(LNbitsSettings):
|
||||
# list of redirects that extensions want to perform
|
||||
lnbits_extensions_redirects: List[Any] = Field(default=[])
|
||||
|
||||
def extension_upgrade_path(self, ext_id: str) -> Optional[str]:
|
||||
return next(
|
||||
(e for e in self.lnbits_upgraded_extensions if e.endswith(f"/{ext_id}")),
|
||||
None,
|
||||
)
|
||||
|
||||
def extension_upgrade_hash(self, ext_id: str) -> Optional[str]:
|
||||
path = settings.extension_upgrade_path(ext_id)
|
||||
return path.split("/")[0] if path else None
|
||||
|
||||
|
||||
class ThemesSettings(LNbitsSettings):
|
||||
lnbits_site_title: str = Field(default="LNbits")
|
||||
|
||||
Vendored
+1
-1
File diff suppressed because one or more lines are too long
Vendored
+10
-10
File diff suppressed because one or more lines are too long
@@ -550,3 +550,7 @@ video {
|
||||
padding: 0.2rem;
|
||||
border-radius: 0.2rem;
|
||||
}
|
||||
|
||||
.whitespace-pre-line {
|
||||
white-space: pre-line;
|
||||
}
|
||||
|
||||
@@ -61,9 +61,10 @@ window.localisation.br = {
|
||||
service_fee_tooltip:
|
||||
'Taxa de serviço cobrada pelo administrador do servidor LNbits por transação de saída',
|
||||
toggle_darkmode: 'Alternar modo escuro',
|
||||
payment_reactions: 'Reações de Pagamento',
|
||||
view_swagger_docs: 'Ver a documentação da API do LNbits Swagger',
|
||||
api_docs: 'Documentação da API',
|
||||
api_keys_api_docs: 'Chaves de API e documentação da API',
|
||||
api_keys_api_docs: 'URL do Node, chaves da API e documentação da API',
|
||||
lnbits_version: 'Versão do LNbits',
|
||||
runs_on: 'Executa em',
|
||||
credit_hint: 'Pressione Enter para creditar a conta',
|
||||
@@ -190,6 +191,12 @@ window.localisation.br = {
|
||||
allow_access_hint: 'Permitir acesso por IP (substituirá os IPs bloqueados)',
|
||||
enter_ip: 'Digite o IP e pressione enter',
|
||||
rate_limiter: 'Limitador de Taxa',
|
||||
wallet_limiter: 'Limitador de Carteira',
|
||||
wallet_limit_max_withdraw_per_day:
|
||||
'Retirada máxima diária da carteira em sats (0 para desativar)',
|
||||
wallet_max_ballance: 'Saldo máximo da carteira em sats (0 para desativar)',
|
||||
wallet_limit_secs_between_trans:
|
||||
'Minutos e segundos entre transações por carteira (0 para desativar)',
|
||||
number_of_requests: 'Número de solicitações',
|
||||
time_unit: 'Unidade de tempo',
|
||||
minute: 'minuto',
|
||||
@@ -208,6 +215,7 @@ window.localisation.br = {
|
||||
account_settings: 'Configurações da Conta',
|
||||
signin_with_google: 'Entrar com o Google',
|
||||
signin_with_github: 'Entrar com GitHub',
|
||||
signin_with_keycloak: 'Entrar com Keycloak',
|
||||
username_or_email: 'Nome de usuário ou E-mail',
|
||||
password: 'Senha',
|
||||
password_config: 'Configuração de Senha',
|
||||
@@ -230,5 +238,8 @@ window.localisation.br = {
|
||||
auth_provider: 'Provedor de Autenticação',
|
||||
my_account: 'Minha Conta',
|
||||
back: 'Voltar',
|
||||
logout: 'Sair'
|
||||
logout: 'Sair',
|
||||
look_and_feel: 'Aparência',
|
||||
language: 'Idioma',
|
||||
color_scheme: 'Esquema de Cores'
|
||||
}
|
||||
|
||||
@@ -57,9 +57,10 @@ window.localisation.cn = {
|
||||
service_fee_max: '服务费:%{amount}% 每笔交易(最高 %{max} sats)',
|
||||
service_fee_tooltip: 'LNbits服务器管理员每笔外发交易收取的服务费',
|
||||
toggle_darkmode: '切换暗黑模式',
|
||||
payment_reactions: '支付反应',
|
||||
view_swagger_docs: '查看 LNbits Swagger API 文档',
|
||||
api_docs: 'API文档',
|
||||
api_keys_api_docs: 'API密钥和API文档',
|
||||
api_keys_api_docs: '节点URL、API密钥和API文档',
|
||||
lnbits_version: 'LNbits版本',
|
||||
runs_on: '可运行在',
|
||||
credit_hint: '按 Enter 键充值账户',
|
||||
@@ -179,6 +180,11 @@ window.localisation.cn = {
|
||||
allow_access_hint: '允许通过IP访问(将覆盖被屏蔽的IP)',
|
||||
enter_ip: '输入IP地址并按回车键',
|
||||
rate_limiter: '速率限制器',
|
||||
wallet_limiter: '钱包限制器',
|
||||
wallet_limit_max_withdraw_per_day:
|
||||
'每日钱包最大提现额度(单位:sats)(设为0则禁用)',
|
||||
wallet_max_ballance: '钱包最大余额(以sats计)(设为0则禁用)',
|
||||
wallet_limit_secs_between_trans: '每个钱包交易间最少秒数(设为0则禁用)',
|
||||
number_of_requests: '请求次数',
|
||||
time_unit: '时间单位',
|
||||
minute: '分钟',
|
||||
@@ -196,7 +202,8 @@ window.localisation.cn = {
|
||||
create_account: '创建账户',
|
||||
account_settings: '账户设置',
|
||||
signin_with_google: '使用谷歌账号登录',
|
||||
signin_with_github: '使用 GitHub 登录',
|
||||
signin_with_github: '使用GitHub登录',
|
||||
signin_with_keycloak: '使用Keycloak登录',
|
||||
username_or_email: '用户名或电子邮箱',
|
||||
password: '密码',
|
||||
password_config: '密码配置',
|
||||
@@ -219,5 +226,8 @@ window.localisation.cn = {
|
||||
auth_provider: '认证提供者',
|
||||
my_account: '我的账户',
|
||||
back: '返回',
|
||||
logout: '注销'
|
||||
logout: '注销',
|
||||
look_and_feel: '外观和感觉',
|
||||
language: '语言',
|
||||
color_scheme: '配色方案'
|
||||
}
|
||||
|
||||
@@ -61,9 +61,10 @@ window.localisation.cs = {
|
||||
service_fee_tooltip:
|
||||
'Servisní poplatek účtovaný správcem LNbits serveru za odchozí transakci',
|
||||
toggle_darkmode: 'Přepnout tmavý režim',
|
||||
payment_reactions: 'Reakce na platby',
|
||||
view_swagger_docs: 'Zobrazit LNbits Swagger API dokumentaci',
|
||||
api_docs: 'API dokumentace',
|
||||
api_keys_api_docs: 'API klíče a API dokumentace',
|
||||
api_keys_api_docs: 'Adresa uzlu, API klíče a API dokumentace',
|
||||
lnbits_version: 'Verze LNbits',
|
||||
runs_on: 'Běží na',
|
||||
credit_hint: 'Stiskněte Enter pro připsání na účet',
|
||||
@@ -187,6 +188,12 @@ window.localisation.cs = {
|
||||
allow_access_hint: 'Povolit přístup podle IP (přepíše blokované IP)',
|
||||
enter_ip: 'Zadejte IP a stiskněte enter',
|
||||
rate_limiter: 'Omezovač počtu požadavků',
|
||||
wallet_limiter: 'Omezení peněženky',
|
||||
wallet_limit_max_withdraw_per_day:
|
||||
'Maximální denní limit pro výběr z peněženky v sats (0 pro deaktivaci)',
|
||||
wallet_max_ballance: 'Maximální zůstatek v peněžence v sats (0 pro zakázání)',
|
||||
wallet_limit_secs_between_trans:
|
||||
'Minimální počet sekund mezi transakcemi na peněženku (0 pro vypnutí)',
|
||||
number_of_requests: 'Počet požadavků',
|
||||
time_unit: 'Časová jednotka',
|
||||
minute: 'minuta',
|
||||
@@ -205,6 +212,7 @@ window.localisation.cs = {
|
||||
account_settings: 'Nastavení účtu',
|
||||
signin_with_google: 'Přihlásit se přes Google',
|
||||
signin_with_github: 'Přihlásit se přes GitHub',
|
||||
signin_with_keycloak: 'Přihlásit se přes Keycloak',
|
||||
username_or_email: 'Uživatelské jméno nebo Email',
|
||||
password: 'Heslo',
|
||||
password_config: 'Konfigurace hesla',
|
||||
@@ -227,5 +235,8 @@ window.localisation.cs = {
|
||||
auth_provider: 'Poskytovatel ověření',
|
||||
my_account: 'Můj účet',
|
||||
back: 'Zpět',
|
||||
logout: 'Odhlásit se'
|
||||
logout: 'Odhlásit se',
|
||||
look_and_feel: 'Vzhled a chování',
|
||||
language: 'Jazyk',
|
||||
color_scheme: 'Barevné schéma'
|
||||
}
|
||||
|
||||
@@ -63,9 +63,10 @@ window.localisation.de = {
|
||||
service_fee_tooltip:
|
||||
'Bearbeitungsgebühr, die vom LNbits Server-Administrator pro ausgehender Transaktion berechnet wird',
|
||||
toggle_darkmode: 'Auf Dark Mode umschalten',
|
||||
payment_reactions: 'Zahlungsreaktionen',
|
||||
view_swagger_docs: 'LNbits Swagger API-Dokumentation',
|
||||
api_docs: 'API-Dokumentation',
|
||||
api_keys_api_docs: 'API-Schlüssel und API-Dokumentation',
|
||||
api_keys_api_docs: 'Knoten-URL, API-Schlüssel und API-Dokumentation',
|
||||
lnbits_version: 'LNbits-Version',
|
||||
runs_on: 'Läuft auf',
|
||||
credit_hint: 'Klicke Enter, um das Konto zu belasten',
|
||||
@@ -192,6 +193,13 @@ window.localisation.de = {
|
||||
allow_access_hint: 'Zugriff durch IP erlauben (überschreibt blockierte IPs)',
|
||||
enter_ip: 'Geben Sie die IP ein und drücken Sie die Eingabetaste',
|
||||
rate_limiter: 'Ratenbegrenzer',
|
||||
wallet_limiter: 'Geldbeutel-Limiter',
|
||||
wallet_limit_max_withdraw_per_day:
|
||||
'Maximales tägliches Wallet-Auszahlungslimit in Sats (0 zum Deaktivieren)',
|
||||
wallet_max_ballance:
|
||||
'Maximales Guthaben der Wallet in Sats (0 zum Deaktivieren)',
|
||||
wallet_limit_secs_between_trans:
|
||||
'Mindestsekunden zwischen Transaktionen pro Wallet (0 zum Deaktivieren)',
|
||||
number_of_requests: 'Anzahl der Anfragen',
|
||||
time_unit: 'Zeiteinheit',
|
||||
minute: 'Minute',
|
||||
@@ -211,6 +219,7 @@ window.localisation.de = {
|
||||
account_settings: 'Kontoeinstellungen',
|
||||
signin_with_google: 'Mit Google anmelden',
|
||||
signin_with_github: 'Anmelden mit GitHub',
|
||||
signin_with_keycloak: 'Mit Keycloak anmelden',
|
||||
username_or_email: 'Benutzername oder E-Mail',
|
||||
password: 'Passwort',
|
||||
password_config: 'Passwortkonfiguration',
|
||||
@@ -233,5 +242,8 @@ window.localisation.de = {
|
||||
auth_provider: 'Anbieter für Authentifizierung',
|
||||
my_account: 'Mein Konto',
|
||||
back: 'Zurück',
|
||||
logout: 'Abmelden'
|
||||
logout: 'Abmelden',
|
||||
look_and_feel: 'Aussehen und Verhalten',
|
||||
language: 'Sprache',
|
||||
color_scheme: 'Farbschema'
|
||||
}
|
||||
|
||||
@@ -62,7 +62,7 @@ window.localisation.en = {
|
||||
payment_reactions: 'Payment Reactions',
|
||||
view_swagger_docs: 'View LNbits Swagger API docs',
|
||||
api_docs: 'API docs',
|
||||
api_keys_api_docs: 'API keys and API docs',
|
||||
api_keys_api_docs: 'Node URL, API keys and API docs',
|
||||
lnbits_version: 'LNbits version',
|
||||
runs_on: 'Runs on',
|
||||
credit_hint: 'Press Enter to credit account',
|
||||
@@ -97,8 +97,12 @@ window.localisation.en = {
|
||||
'This is an LNURL-withdraw QR code for slurping everything from this wallet. Do not share with anyone. It is compatible with balanceCheck and balanceNotify so your wallet may keep pulling the funds continuously from here after the first withdraw.',
|
||||
i_understand: 'I understand',
|
||||
copy_wallet_url: 'Copy wallet URL',
|
||||
disclaimer_dialog:
|
||||
'To ensure continuous access to your wallets, please remember to securely store your login credentials! Please visit the "My Account" page. This service is in BETA, and we hold no responsibility for people losing access to funds.',
|
||||
disclaimer_dialog_title: 'Important!',
|
||||
disclaimer_dialog: `You *must* save your login credentials to be able to access your wallet again.If you lose them, you will lose access to your wallet and funds.
|
||||
|
||||
Find your login credentials on your account settings page.
|
||||
|
||||
This service is in BETA. LNbits holds no responsibility for loss of access to funds.`,
|
||||
no_transactions: 'No transactions made yet',
|
||||
manage: 'Manage',
|
||||
extensions: 'Extensions',
|
||||
|
||||
@@ -61,9 +61,10 @@ window.localisation.es = {
|
||||
service_fee_tooltip:
|
||||
'Comisión de servicio cobrada por el administrador del servidor LNbits por cada transacción saliente',
|
||||
toggle_darkmode: 'Cambiar modo oscuro',
|
||||
payment_reactions: 'Reacciones de Pago',
|
||||
view_swagger_docs: 'Ver documentación de API de LNbits Swagger',
|
||||
api_docs: 'Documentación de API',
|
||||
api_keys_api_docs: 'Claves de API y documentación de API',
|
||||
api_keys_api_docs: 'URL del nodo, claves de API y documentación de API',
|
||||
lnbits_version: 'Versión de LNbits',
|
||||
runs_on: 'Corre en',
|
||||
credit_hint: 'Presione Enter para cargar la cuenta',
|
||||
@@ -190,6 +191,13 @@ window.localisation.es = {
|
||||
allow_access_hint: 'Permitir acceso por IP (anulará las IPs bloqueadas)',
|
||||
enter_ip: 'Ingrese la IP y presione enter',
|
||||
rate_limiter: 'Limitador de tasa',
|
||||
wallet_limiter: 'Limitador de Cartera',
|
||||
wallet_limit_max_withdraw_per_day:
|
||||
'Límite diario de retiro de la cartera en sats (0 para deshabilitar)',
|
||||
wallet_max_ballance:
|
||||
'Saldo máximo de la billetera en sats (0 para desactivar)',
|
||||
wallet_limit_secs_between_trans:
|
||||
'Mín. segs entre transacciones por cartera (0 para desactivar)',
|
||||
number_of_requests: 'Número de solicitudes',
|
||||
time_unit: 'Unidad de tiempo',
|
||||
minute: 'minuto',
|
||||
@@ -209,6 +217,7 @@ window.localisation.es = {
|
||||
account_settings: 'Configuración de la cuenta',
|
||||
signin_with_google: 'Inicia sesión con Google',
|
||||
signin_with_github: 'Inicia sesión con GitHub',
|
||||
signin_with_keycloak: 'Iniciar sesión con Keycloak',
|
||||
username_or_email: 'Nombre de usuario o correo electrónico',
|
||||
password: 'Contraseña',
|
||||
password_config: 'Configuración de Contraseña',
|
||||
@@ -231,5 +240,8 @@ window.localisation.es = {
|
||||
auth_provider: 'Proveedor de Autenticación',
|
||||
my_account: 'Mi cuenta',
|
||||
back: 'Atrás',
|
||||
logout: 'Cerrar sesión'
|
||||
logout: 'Cerrar sesión',
|
||||
look_and_feel: 'Apariencia',
|
||||
language: 'Idioma',
|
||||
color_scheme: 'Esquema de colores'
|
||||
}
|
||||
|
||||
@@ -67,7 +67,7 @@ window.localisation.fi = {
|
||||
toggle_reactions: 'Käytä tapahtuma efektejä',
|
||||
view_swagger_docs: 'Näytä LNbits Swagger API-dokumentit',
|
||||
api_docs: 'API-dokumentaatio',
|
||||
api_keys_api_docs: 'API-avaimet ja -dokumentaatio',
|
||||
api_keys_api_docs: 'Solmun URL, API-avaimet ja -dokumentaatio',
|
||||
lnbits_version: 'LNbits versio',
|
||||
runs_on: 'Mukana menossa',
|
||||
credit_hint: 'Hyväksy painamalla Enter',
|
||||
@@ -191,6 +191,12 @@ window.localisation.fi = {
|
||||
allow_access_hint: 'Salli pääsy IP-osoitteen perusteella (ohittaa estot)',
|
||||
enter_ip: 'Anna IP ja paina +',
|
||||
rate_limiter: 'Toiston rajoitin',
|
||||
wallet_limiter: 'Lompakon Rajoitin',
|
||||
wallet_limit_max_withdraw_per_day:
|
||||
'Maksimi päivittäinen lompakon nosto sateissa (0 poistaa käytöstä)',
|
||||
wallet_max_ballance: 'Lompakon maksimisaldo satosheina (0 poistaa käytöstä)',
|
||||
wallet_limit_secs_between_trans:
|
||||
'Min sekuntia transaktioiden välillä lompakkoa kohden (0 poistaa käytöstä)',
|
||||
number_of_requests: 'Pyyntöjen lukumäärä',
|
||||
time_unit: 'aikayksikkö',
|
||||
minute: 'minuutti',
|
||||
@@ -209,6 +215,7 @@ window.localisation.fi = {
|
||||
account_settings: 'Tilin asetukset',
|
||||
signin_with_google: 'Kirjaudu Google-tunnuksella',
|
||||
signin_with_github: 'Kirjaudu GitHub-tunnuksella',
|
||||
signin_with_keycloak: 'Kirjaudu Keycloak-tunnuksella',
|
||||
username_or_email: 'Käyttäjänimi tai sähköposti',
|
||||
password: 'Anna uusi salasana',
|
||||
password_config: 'Salasanan määritys',
|
||||
|
||||
@@ -65,9 +65,10 @@ window.localisation.fr = {
|
||||
service_fee_tooltip:
|
||||
"Frais de service facturés par l'administrateur du serveur LNbits pour chaque transaction sortante",
|
||||
toggle_darkmode: 'Basculer le mode sombre',
|
||||
payment_reactions: 'Réactions de paiement',
|
||||
view_swagger_docs: "Voir les documentation de l'API Swagger de LNbits",
|
||||
api_docs: "Documentation de l'API",
|
||||
api_keys_api_docs: "Clés API et documentation de l'API",
|
||||
api_keys_api_docs: 'URL du nœud, clés API et documentation API',
|
||||
lnbits_version: 'Version de LNbits',
|
||||
runs_on: 'Fonctionne sur',
|
||||
credit_hint: 'Appuyez sur Entrée pour créditer le compte',
|
||||
@@ -195,6 +196,13 @@ window.localisation.fr = {
|
||||
"Autoriser l'accès par IP (cela passera outre les IP bloquées)",
|
||||
enter_ip: "Entrez l'adresse IP et appuyez sur Entrée",
|
||||
rate_limiter: 'Limiteur de débit',
|
||||
wallet_limiter: 'Limiteur de portefeuille',
|
||||
wallet_limit_max_withdraw_per_day:
|
||||
'Retrait quotidien maximum du portefeuille en sats (0 pour désactiver)',
|
||||
wallet_max_ballance:
|
||||
'Solde maximum du portefeuille en sats (0 pour désactiver)',
|
||||
wallet_limit_secs_between_trans:
|
||||
'Minutes et secondes entre les transactions par portefeuille (0 pour désactiver)',
|
||||
number_of_requests: 'Nombre de requêtes',
|
||||
time_unit: 'Unité de temps',
|
||||
minute: 'minute',
|
||||
@@ -213,6 +221,7 @@ window.localisation.fr = {
|
||||
account_settings: 'Paramètres du compte',
|
||||
signin_with_google: 'Connectez-vous avec Google',
|
||||
signin_with_github: 'Connectez-vous avec GitHub',
|
||||
signin_with_keycloak: 'Connectez-vous avec Keycloak',
|
||||
username_or_email: "Nom d'utilisateur ou e-mail",
|
||||
password: 'Mot de passe',
|
||||
password_config: 'Configuration du mot de passe',
|
||||
@@ -235,5 +244,8 @@ window.localisation.fr = {
|
||||
auth_provider: "Fournisseur d'authentification",
|
||||
my_account: 'Mon compte',
|
||||
back: 'Retour',
|
||||
logout: 'Déconnexion'
|
||||
logout: 'Déconnexion',
|
||||
look_and_feel: 'Apparence',
|
||||
language: 'Langue',
|
||||
color_scheme: 'Schéma de couleurs'
|
||||
}
|
||||
|
||||
@@ -62,9 +62,10 @@ window.localisation.it = {
|
||||
service_fee_tooltip:
|
||||
"Commissione di servizio addebitata dall'amministratore del server LNbits per ogni transazione in uscita",
|
||||
toggle_darkmode: 'Attiva la modalità notturna',
|
||||
payment_reactions: 'Reazioni al Pagamento',
|
||||
view_swagger_docs: "Visualizza i documentazione dell'API Swagger di LNbits",
|
||||
api_docs: "Documentazione dell'API",
|
||||
api_keys_api_docs: "Chiavi API e documentazione dell'API",
|
||||
api_keys_api_docs: 'URL del nodo, chiavi API e documentazione API',
|
||||
lnbits_version: 'Versione di LNbits',
|
||||
runs_on: 'Esegue su',
|
||||
credit_hint: 'Premere Invio per accreditare i fondi',
|
||||
@@ -191,6 +192,13 @@ window.localisation.it = {
|
||||
"Consenti l'accesso per IP (sovrascriverà gli IP bloccati)",
|
||||
enter_ip: "Inserisci l'IP e premi invio",
|
||||
rate_limiter: 'Limitatore di frequenza',
|
||||
wallet_limiter: 'Limitatore del Portafoglio',
|
||||
wallet_limit_max_withdraw_per_day:
|
||||
'Prelievo massimo giornaliero dal portafoglio in sats (0 per disabilitare)',
|
||||
wallet_max_ballance:
|
||||
'Saldo massimo del portafoglio in sats (0 per disabilitare)',
|
||||
wallet_limit_secs_between_trans:
|
||||
'Minuti e secondi tra transazioni per portafoglio (0 per disabilitare)',
|
||||
number_of_requests: 'Numero di richieste',
|
||||
time_unit: 'Unità di tempo',
|
||||
minute: 'minuto',
|
||||
@@ -210,6 +218,7 @@ window.localisation.it = {
|
||||
account_settings: "Impostazioni dell'account",
|
||||
signin_with_google: 'Accedi con Google',
|
||||
signin_with_github: 'Accedi con GitHub',
|
||||
signin_with_keycloak: 'Accedi con Keycloak',
|
||||
username_or_email: 'Nome utente o Email',
|
||||
password: 'Password',
|
||||
password_config: 'Configurazione della password',
|
||||
@@ -232,5 +241,8 @@ window.localisation.it = {
|
||||
auth_provider: 'Provider di Autenticazione',
|
||||
my_account: 'Il mio account',
|
||||
back: 'Indietro',
|
||||
logout: 'Esci'
|
||||
logout: 'Esci',
|
||||
look_and_feel: 'Aspetto e Comportamento',
|
||||
language: 'Lingua',
|
||||
color_scheme: 'Schema dei colori'
|
||||
}
|
||||
|
||||
@@ -59,9 +59,10 @@ window.localisation.jp = {
|
||||
service_fee_max: '取引手数料:%{amount}%(最大%{max}サトシ)',
|
||||
service_fee_tooltip: 'LNbitsサーバー管理者が発生する送金ごとの手数料',
|
||||
toggle_darkmode: 'ダークモードを切り替える',
|
||||
payment_reactions: '支払いの反応',
|
||||
view_swagger_docs: 'Swaggerドキュメントを表示',
|
||||
api_docs: 'APIドキュメント',
|
||||
api_keys_api_docs: 'APIキーとAPIドキュメント',
|
||||
api_keys_api_docs: 'ノードURL、APIキー、APIドキュメント',
|
||||
lnbits_version: 'LNbits バージョン',
|
||||
runs_on: 'で実行',
|
||||
credit_hint:
|
||||
@@ -188,6 +189,12 @@ window.localisation.jp = {
|
||||
'IPによるアクセスを許可する(ブロックされたIPを上書きします)',
|
||||
enter_ip: 'IPを入力してエンターキーを押してください',
|
||||
rate_limiter: 'レートリミッター',
|
||||
wallet_limiter: 'ウォレットリミッター',
|
||||
wallet_limit_max_withdraw_per_day:
|
||||
'1日あたりの最大ウォレット出金額をsatsで入力してください(0 で無効)。',
|
||||
wallet_max_ballance: 'ウォレットの最大残高(sats)(0は無効)',
|
||||
wallet_limit_secs_between_trans:
|
||||
'トランザクション間の最小秒数(ウォレットごと)(0は無効)',
|
||||
number_of_requests: 'リクエストの数',
|
||||
time_unit: '時間単位',
|
||||
minute: '分',
|
||||
@@ -207,6 +214,7 @@ window.localisation.jp = {
|
||||
account_settings: 'アカウント設定',
|
||||
signin_with_google: 'Googleでサインイン',
|
||||
signin_with_github: 'GitHubでサインイン',
|
||||
signin_with_keycloak: 'Keycloakでサインイン',
|
||||
username_or_email: 'ユーザー名またはメールアドレス',
|
||||
password: 'パスワード',
|
||||
password_config: 'パスワード設定',
|
||||
@@ -229,5 +237,8 @@ window.localisation.jp = {
|
||||
auth_provider: '認証プロバイダ',
|
||||
my_account: 'マイアカウント',
|
||||
back: '戻る',
|
||||
logout: 'ログアウト'
|
||||
logout: 'ログアウト',
|
||||
look_and_feel: 'ルック・アンド・フィール',
|
||||
language: '言語',
|
||||
color_scheme: 'カラースキーム'
|
||||
}
|
||||
|
||||
@@ -60,9 +60,10 @@ window.localisation.kr = {
|
||||
service_fee_tooltip:
|
||||
'지불 결제 시마다 LNBits 서버 관리자에게 납부되는 서비스 수수료',
|
||||
toggle_darkmode: '다크 모드 전환',
|
||||
payment_reactions: '결제 반응',
|
||||
view_swagger_docs: 'LNbits Swagger API 문서를 봅니다',
|
||||
api_docs: 'API 문서',
|
||||
api_keys_api_docs: 'API 키와 API 문서',
|
||||
api_keys_api_docs: '노드 URL, API 키와 API 문서',
|
||||
lnbits_version: 'LNbits 버전',
|
||||
runs_on: 'Runs on',
|
||||
credit_hint: '계정에 자금을 넣으려면 Enter를 눌러주세요',
|
||||
@@ -187,6 +188,11 @@ window.localisation.kr = {
|
||||
allow_access_hint: 'IP 기준으로 접속 허용하기 (차단한 IP들을 무시합니다)',
|
||||
enter_ip: 'IP 주소를 입력하고 Enter를 눌러주세요',
|
||||
rate_limiter: '횟수로 제한하기',
|
||||
wallet_limiter: '지갑 제한기',
|
||||
wallet_limit_max_withdraw_per_day:
|
||||
'일일 최대 지갑 출금액(sats) (0은 비활성화)',
|
||||
wallet_max_ballance: '지갑 최대 잔액(sats) (0은 비활성화)',
|
||||
wallet_limit_secs_between_trans: '지갑 당 거래 사이 최소 초 (0은 비활성화)',
|
||||
number_of_requests: '요청 횟수',
|
||||
time_unit: '시간 단위',
|
||||
minute: '분',
|
||||
@@ -205,6 +211,7 @@ window.localisation.kr = {
|
||||
account_settings: '계정 설정',
|
||||
signin_with_google: 'Google으로 로그인',
|
||||
signin_with_github: 'GitHub으로 로그인',
|
||||
signin_with_keycloak: 'Keycloak으로 로그인',
|
||||
username_or_email: '사용자 이름 또는 이메일',
|
||||
password: '비밀번호',
|
||||
password_config: '비밀번호 설정',
|
||||
@@ -227,5 +234,8 @@ window.localisation.kr = {
|
||||
auth_provider: '인증 제공자',
|
||||
my_account: '내 계정',
|
||||
back: '뒤로',
|
||||
logout: '로그아웃'
|
||||
logout: '로그아웃',
|
||||
look_and_feel: '외관과 느낌',
|
||||
language: '언어',
|
||||
color_scheme: '색상 구성'
|
||||
}
|
||||
|
||||
@@ -63,9 +63,10 @@ window.localisation.nl = {
|
||||
service_fee_tooltip:
|
||||
'Transactiekosten in rekening gebracht door de LNbits serverbeheerder per uitgaande transactie',
|
||||
toggle_darkmode: 'Donkere modus aan/uit',
|
||||
payment_reactions: 'Betalingsreacties',
|
||||
view_swagger_docs: 'Bekijk LNbits Swagger API-documentatie',
|
||||
api_docs: 'API-documentatie',
|
||||
api_keys_api_docs: 'API-sleutels en API-documentatie',
|
||||
api_keys_api_docs: 'Node URL, API-sleutels en API-documentatie',
|
||||
lnbits_version: 'LNbits-versie',
|
||||
runs_on: 'Draait op',
|
||||
credit_hint: 'Druk op Enter om de rekening te crediteren',
|
||||
@@ -191,6 +192,13 @@ window.localisation.nl = {
|
||||
"Toegang verlenen op basis van IP (zal geblokkeerde IP's overschrijven)",
|
||||
enter_ip: 'Voer IP in en druk op enter',
|
||||
rate_limiter: 'Snelheidsbegrenzer',
|
||||
wallet_limiter: 'Portemonnee Limietsteller',
|
||||
wallet_limit_max_withdraw_per_day:
|
||||
'Maximale dagelijkse opname van wallet in sats (0 om uit te schakelen)',
|
||||
wallet_max_ballance:
|
||||
'Maximale portefeuillesaldo in sats (0 om uit te schakelen)',
|
||||
wallet_limit_secs_between_trans:
|
||||
'Min seconden tussen transacties per portemonnee (0 om uit te schakelen)',
|
||||
number_of_requests: 'Aantal verzoeken',
|
||||
time_unit: 'Tijdeenheid',
|
||||
minute: 'minuut',
|
||||
@@ -209,6 +217,7 @@ window.localisation.nl = {
|
||||
account_settings: 'Accountinstellingen',
|
||||
signin_with_google: 'Inloggen met Google',
|
||||
signin_with_github: 'Inloggen met GitHub',
|
||||
signin_with_keycloak: 'Inloggen met Keycloak',
|
||||
username_or_email: 'Gebruikersnaam of e-mail',
|
||||
password: 'Wachtwoord',
|
||||
password_config: 'Wachtwoordconfiguratie',
|
||||
@@ -231,5 +240,8 @@ window.localisation.nl = {
|
||||
auth_provider: 'Auth Provider',
|
||||
my_account: 'Mijn Account',
|
||||
back: 'Terug',
|
||||
logout: 'Afmelden'
|
||||
logout: 'Afmelden',
|
||||
look_and_feel: 'Uiterlijk en gedrag',
|
||||
language: 'Taal',
|
||||
color_scheme: 'Kleurenschema'
|
||||
}
|
||||
|
||||
@@ -61,9 +61,10 @@ window.localisation.pi = {
|
||||
service_fee_tooltip:
|
||||
"Service fee charged by the LNbits server admin per goin' transaction",
|
||||
toggle_darkmode: 'Toggle Dark Mode, arr!',
|
||||
payment_reactions: 'Payment Reactions',
|
||||
view_swagger_docs: 'View LNbits Swagger API docs and learn the secrets',
|
||||
api_docs: 'API docs for the scallywags',
|
||||
api_keys_api_docs: 'API keys and API docs',
|
||||
api_keys_api_docs: 'Node URL, API keys and API docs',
|
||||
lnbits_version: 'LNbits version, arr!',
|
||||
runs_on: 'Runs on, matey',
|
||||
credit_hint: 'Press Enter to credit account and make it richer',
|
||||
@@ -189,6 +190,12 @@ window.localisation.pi = {
|
||||
allow_access_hint: 'Grant permission by IP (will override barred IPs)',
|
||||
enter_ip: 'Enter IP and hit enter',
|
||||
rate_limiter: 'Rate Limiter',
|
||||
wallet_limiter: 'Pouch Limitar',
|
||||
wallet_limit_max_withdraw_per_day:
|
||||
'Max daily wallet withdrawal in sats (0 ter disable)',
|
||||
wallet_max_ballance: 'Purse max heaviness in sats (0 fer scuttle)',
|
||||
wallet_limit_secs_between_trans:
|
||||
"Min secs 'tween transactions per wallet (0 to disable)",
|
||||
number_of_requests: "Number o' requests",
|
||||
time_unit: "time bein'",
|
||||
minute: 'minnit',
|
||||
@@ -207,6 +214,7 @@ window.localisation.pi = {
|
||||
account_settings: "Account Settin's",
|
||||
signin_with_google: "Sign in wit' Google",
|
||||
signin_with_github: "Sign in wit' GitHub",
|
||||
signin_with_keycloak: "Sign in wit' Keycloak",
|
||||
username_or_email: 'Usarrrname or Email',
|
||||
password: 'Passwarrd',
|
||||
password_config: 'Passwarrd Config',
|
||||
@@ -229,5 +237,8 @@ window.localisation.pi = {
|
||||
auth_provider: 'Auth Provider becometh Auth Provider, ye see?',
|
||||
my_account: 'Me Arrrccount',
|
||||
back: 'Return',
|
||||
logout: 'Log out yer session'
|
||||
logout: 'Log out yer session',
|
||||
look_and_feel: 'Look and Feel',
|
||||
language: 'Langwidge',
|
||||
color_scheme: 'Colour Scheme'
|
||||
}
|
||||
|
||||
@@ -60,9 +60,10 @@ window.localisation.pl = {
|
||||
service_fee_tooltip:
|
||||
'Opłata serwisowa pobierana przez administratora serwera LNbits za każdą wychodzącą transakcję',
|
||||
toggle_darkmode: 'Tryb nocny',
|
||||
payment_reactions: 'Reakcje na płatność',
|
||||
view_swagger_docs: 'Dokumentacja Swagger API',
|
||||
api_docs: 'Dokumentacja API',
|
||||
api_keys_api_docs: 'Klucze API i dokumentacja API',
|
||||
api_keys_api_docs: 'Adres URL węzła, klucze API i dokumentacja API',
|
||||
lnbits_version: 'Wersja LNbits',
|
||||
runs_on: 'Działa na',
|
||||
credit_hint: 'Naciśnij Enter aby doładować konto',
|
||||
@@ -188,6 +189,12 @@ window.localisation.pl = {
|
||||
'Zezwól na dostęp przez IP (zignoruje zablokowane adresy IP)',
|
||||
enter_ip: 'Wpisz adres IP i naciśnij enter',
|
||||
rate_limiter: 'Ogranicznik Częstotliwości',
|
||||
wallet_limiter: 'Ogranicznik Portfela',
|
||||
wallet_limit_max_withdraw_per_day:
|
||||
'Maksymalna dzienna wypłata z portfela w satoshi (0 aby wyłączyć)',
|
||||
wallet_max_ballance: 'Maksymalny stan portfela w satoshi (0 aby wyłączyć)',
|
||||
wallet_limit_secs_between_trans:
|
||||
'Min sekund pomiędzy transakcjami na portfel (0 aby wyłączyć)',
|
||||
number_of_requests: 'Liczba żądań',
|
||||
time_unit: 'Jednostka czasu',
|
||||
minute: 'minuta',
|
||||
@@ -206,6 +213,7 @@ window.localisation.pl = {
|
||||
account_settings: 'Ustawienia konta',
|
||||
signin_with_google: 'Zaloguj się przez Google',
|
||||
signin_with_github: 'Zaloguj się przez GitHub',
|
||||
signin_with_keycloak: 'Zaloguj się przez Keycloak',
|
||||
username_or_email: 'Nazwa użytkownika lub Email',
|
||||
password: 'Hasło',
|
||||
password_config: 'Konfiguracja Hasła',
|
||||
@@ -228,5 +236,8 @@ window.localisation.pl = {
|
||||
auth_provider: 'Dostawca uwierzytelniania',
|
||||
my_account: 'Moje Konto',
|
||||
back: 'Wstecz',
|
||||
logout: 'Wyloguj'
|
||||
logout: 'Wyloguj',
|
||||
look_and_feel: 'Wygląd i zachowanie',
|
||||
language: 'Język',
|
||||
color_scheme: 'Schemat kolorów'
|
||||
}
|
||||
|
||||
@@ -61,9 +61,10 @@ window.localisation.pt = {
|
||||
service_fee_tooltip:
|
||||
'Taxa de serviço cobrada pelo administrador do servidor LNbits por transação de saída',
|
||||
toggle_darkmode: 'Alternar modo escuro',
|
||||
payment_reactions: 'Reações de Pagamento',
|
||||
view_swagger_docs: 'Ver a documentação da API do LNbits Swagger',
|
||||
api_docs: 'Documentação da API',
|
||||
api_keys_api_docs: 'Chaves de API e documentação de API',
|
||||
api_keys_api_docs: 'URL do Nó, chaves de API e documentação de API',
|
||||
lnbits_version: 'Versão do LNbits',
|
||||
runs_on: 'Executa em',
|
||||
credit_hint: 'Pressione Enter para creditar a conta',
|
||||
@@ -189,6 +190,12 @@ window.localisation.pt = {
|
||||
allow_access_hint: 'Permitir acesso por IP (substituirá IPs bloqueados)',
|
||||
enter_ip: 'Digite o IP e pressione enter.',
|
||||
rate_limiter: 'Limitador de Taxa',
|
||||
wallet_limiter: 'Limitador de Carteira',
|
||||
wallet_limit_max_withdraw_per_day:
|
||||
'Limite diário máximo de saque da carteira em sats (0 para desativar)',
|
||||
wallet_max_ballance: 'Saldo máximo da carteira em sats (0 para desativar)',
|
||||
wallet_limit_secs_between_trans:
|
||||
'Minutos seg. entre transações por carteira (0 para desativar)',
|
||||
number_of_requests: 'Número de solicitações',
|
||||
time_unit: 'Unidade de tempo',
|
||||
minute: 'minuto',
|
||||
@@ -207,6 +214,7 @@ window.localisation.pt = {
|
||||
account_settings: 'Configurações da Conta',
|
||||
signin_with_google: 'Entrar com o Google',
|
||||
signin_with_github: 'Entrar com o GitHub',
|
||||
signin_with_keycloak: 'Entrar com o Keycloak',
|
||||
username_or_email: 'Nome de usuário ou Email',
|
||||
password: 'Senha',
|
||||
password_config: 'Configuração de Senha',
|
||||
@@ -229,5 +237,8 @@ window.localisation.pt = {
|
||||
auth_provider: 'Provedor de Autenticação',
|
||||
my_account: 'Minha Conta',
|
||||
back: 'Voltar',
|
||||
logout: 'Sair'
|
||||
logout: 'Sair',
|
||||
look_and_feel: 'Aparência e Sensação',
|
||||
language: 'Idioma',
|
||||
color_scheme: 'Esquema de Cores'
|
||||
}
|
||||
|
||||
@@ -60,9 +60,10 @@ window.localisation.sk = {
|
||||
service_fee_tooltip:
|
||||
'Servisný poplatok účtovaný správcom LNbits servera za odchádzajúcu transakciu',
|
||||
toggle_darkmode: 'Prepnúť Tmavý režim',
|
||||
payment_reactions: 'Reakcie na platbu',
|
||||
view_swagger_docs: 'Zobraziť LNbits Swagger API dokumentáciu',
|
||||
api_docs: 'API dokumentácia',
|
||||
api_keys_api_docs: 'API kľúče a API dokumentácia',
|
||||
api_keys_api_docs: 'Adresa uzla, API kľúče a API dokumentácia',
|
||||
lnbits_version: 'Verzia LNbits',
|
||||
runs_on: 'Beží na',
|
||||
credit_hint: 'Stlačte Enter pre pripísanie na účet',
|
||||
@@ -187,6 +188,13 @@ window.localisation.sk = {
|
||||
allow_access_hint: 'Povoliť prístup podľa IP (prebije blokované IP)',
|
||||
enter_ip: 'Zadajte IP a stlačte enter',
|
||||
rate_limiter: 'Obmedzovač počtu požiadaviek',
|
||||
wallet_limiter: 'Obmedzovač peňaženky',
|
||||
wallet_limit_max_withdraw_per_day:
|
||||
'Maximálny denný výber z peňaženky v satošiach (0 pre zrušenie)',
|
||||
wallet_max_ballance:
|
||||
'Maximálny zostatok v peňaženke v satošiach (0 pre deaktiváciu)',
|
||||
wallet_limit_secs_between_trans:
|
||||
'Minimálny počet sekúnd medzi transakciami na peňaženku (0 na deaktiváciu)',
|
||||
number_of_requests: 'Počet požiadaviek',
|
||||
time_unit: 'Časová jednotka',
|
||||
minute: 'minúta',
|
||||
@@ -203,8 +211,9 @@ window.localisation.sk = {
|
||||
login_to_account: 'Prihláste sa do vášho účtu',
|
||||
create_account: 'Vytvoriť účet',
|
||||
account_settings: 'Nastavenia účtu',
|
||||
signin_with_google: 'Prihlásiť sa cez Google',
|
||||
signin_with_github: 'Prihláste sa pomocou GitHub',
|
||||
signin_with_google: 'Prihlásiť sa pomocou Google',
|
||||
signin_with_github: 'Prihlásiť sa pomocou GitHub',
|
||||
signin_with_keycloak: 'Prihlásiť sa pomocou Keycloak',
|
||||
username_or_email: 'Používateľské meno alebo email',
|
||||
password: 'Heslo',
|
||||
password_config: 'Konfigurácia hesla',
|
||||
@@ -227,5 +236,8 @@ window.localisation.sk = {
|
||||
auth_provider: 'Poskytovateľ autentifikácie',
|
||||
my_account: 'Môj účet',
|
||||
back: 'Späť',
|
||||
logout: 'Odhlásiť sa'
|
||||
logout: 'Odhlásiť sa',
|
||||
look_and_feel: 'Vzhľad a dojem',
|
||||
language: 'Jazyk',
|
||||
color_scheme: 'Farebná schéma'
|
||||
}
|
||||
|
||||
@@ -61,9 +61,10 @@ window.localisation.we = {
|
||||
service_fee_tooltip:
|
||||
"Ffi gwasanaeth a godir gan weinyddwr gweinydd LNbits ym mhob trafodiad sy'n mynd allan",
|
||||
toggle_darkmode: 'Toglo Modd Tywyll',
|
||||
payment_reactions: 'Adweithiau Talu',
|
||||
view_swagger_docs: 'Gweld dogfennau API LNbits Swagger',
|
||||
api_docs: 'Dogfennau API',
|
||||
api_keys_api_docs: 'Allweddi API a dogfennau API',
|
||||
api_keys_api_docs: 'URL y nod, allweddi API a dogfennau API',
|
||||
lnbits_version: 'Fersiwn LNbits',
|
||||
runs_on: 'Yn rhedeg ymlaen',
|
||||
credit_hint: 'Pwyswch Enter i gyfrif credyd',
|
||||
@@ -188,6 +189,12 @@ window.localisation.we = {
|
||||
"Caniatáu mynediad gan IP (bydd yn diystyru IPs sydd wedi'u blocio)",
|
||||
enter_ip: 'Rhowch IP a gwasgwch enter',
|
||||
rate_limiter: 'Cyfyngydd Cyfradd',
|
||||
wallet_limiter: 'Cyfyngwr Waled',
|
||||
wallet_limit_max_withdraw_per_day:
|
||||
'Uchafswm tynnu’n ôl waled dyddiol mewn sats (0 i analluogi)',
|
||||
wallet_max_ballance: 'Uchafswm balans y waled mewn sats (0 i analluogi)',
|
||||
wallet_limit_secs_between_trans:
|
||||
'Eiliadau lleiaf rhwng trafodion fesul waled (0 i analluogi)',
|
||||
number_of_requests: 'Nifer y ceisiadau',
|
||||
time_unit: 'Uned amser',
|
||||
minute: 'munud',
|
||||
@@ -206,6 +213,7 @@ window.localisation.we = {
|
||||
account_settings: 'Gosodiadau Cyfrif',
|
||||
signin_with_google: 'Mewngofnodi gyda Google',
|
||||
signin_with_github: 'Mewngofnodi gyda GitHub',
|
||||
signin_with_keycloak: 'Mewngofnodi gyda Keycloak',
|
||||
username_or_email: 'Defnyddiwr neu E-bost',
|
||||
password: 'Cyfrinair',
|
||||
password_config: 'Ffurfweddiad Cyfrinair',
|
||||
@@ -228,5 +236,8 @@ window.localisation.we = {
|
||||
auth_provider: 'Darparwr Dilysiad',
|
||||
my_account: 'Fy Nghyfrif',
|
||||
back: 'Yn ôl',
|
||||
logout: 'Allgofnodi'
|
||||
logout: 'Allgofnodi',
|
||||
look_and_feel: 'Edrych a Theimlo',
|
||||
language: 'Iaith',
|
||||
color_scheme: 'Cynllun Lliw'
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
// update cache version every time there is a new deployment
|
||||
// so the service worker reinitializes the cache
|
||||
const CACHE_VERSION = 115
|
||||
const CACHE_VERSION = 117
|
||||
const CURRENT_CACHE = `lnbits-${CACHE_VERSION}-`
|
||||
|
||||
const getApiKey = request => {
|
||||
|
||||
@@ -90,6 +90,7 @@ new Vue({
|
||||
mixins: [windowMixin],
|
||||
data: function () {
|
||||
return {
|
||||
origin: window.location.origin,
|
||||
user: LNbits.map.user(window.user),
|
||||
receive: {
|
||||
show: false,
|
||||
|
||||
@@ -227,3 +227,7 @@ video {
|
||||
padding: 0.2rem;
|
||||
border-radius: 0.2rem;
|
||||
}
|
||||
|
||||
.whitespace-pre-line {
|
||||
white-space: pre-line;
|
||||
}
|
||||
|
||||
+17
-32
@@ -58,42 +58,25 @@ async def send_push_promise(a, b) -> None:
|
||||
pass
|
||||
|
||||
|
||||
class SseListenersDict(dict):
|
||||
"""
|
||||
A dict of sse listeners.
|
||||
"""
|
||||
|
||||
def __init__(self, name: Optional[str] = None):
|
||||
self.name = name or f"sse_listener_{str(uuid.uuid4())[:8]}"
|
||||
|
||||
def __setitem__(self, key, value):
|
||||
assert isinstance(key, str), f"{key} is not a string"
|
||||
assert isinstance(value, asyncio.Queue), f"{value} is not an asyncio.Queue"
|
||||
logger.trace(f"sse: adding listener {key} to {self.name}. len = {len(self)+1}")
|
||||
return super().__setitem__(key, value)
|
||||
|
||||
def __delitem__(self, key):
|
||||
logger.trace(f"sse: removing listener from {self.name}. len = {len(self)-1}")
|
||||
return super().__delitem__(key)
|
||||
|
||||
_RaiseKeyError = object() # singleton for no-default behavior
|
||||
|
||||
def pop(self, key, v=_RaiseKeyError) -> None:
|
||||
logger.trace(f"sse: removing listener from {self.name}. len = {len(self)-1}")
|
||||
return super().pop(key)
|
||||
|
||||
|
||||
invoice_listeners: Dict[str, asyncio.Queue] = SseListenersDict("invoice_listeners")
|
||||
invoice_listeners: Dict[str, asyncio.Queue] = {}
|
||||
|
||||
|
||||
# TODO: name should not be optional
|
||||
# some extensions still dont use a name, but they should
|
||||
def register_invoice_listener(send_chan: asyncio.Queue, name: Optional[str] = None):
|
||||
"""
|
||||
A method intended for extensions (and core/tasks.py) to call when they want to be
|
||||
notified about new invoice payments incoming. Will emit all incoming payments.
|
||||
"""
|
||||
name_unique = f"{name or 'no_name'}_{str(uuid.uuid4())[:8]}"
|
||||
logger.trace(f"sse: registering invoice listener {name_unique}")
|
||||
invoice_listeners[name_unique] = send_chan
|
||||
if not name:
|
||||
# fallback to a random name if extension didn't provide one
|
||||
name = f"no_name_{str(uuid.uuid4())[:8]}"
|
||||
|
||||
if invoice_listeners.get(name):
|
||||
logger.warning(f"invoice listener `{name}` already exists, replacing it")
|
||||
|
||||
logger.trace(f"registering invoice listener `{name}`")
|
||||
invoice_listeners[name] = send_chan
|
||||
|
||||
|
||||
async def webhook_handler():
|
||||
@@ -191,10 +174,12 @@ async def invoice_callback_dispatcher(checking_id: str):
|
||||
"""
|
||||
payment = await get_standalone_payment(checking_id, incoming=True)
|
||||
if payment and payment.is_in:
|
||||
logger.trace(f"sse sending invoice callback for payment {checking_id}")
|
||||
logger.trace(
|
||||
f"invoice listeners: sending invoice callback for payment {checking_id}"
|
||||
)
|
||||
await payment.set_pending(False)
|
||||
for chan_name, send_chan in invoice_listeners.items():
|
||||
logger.trace(f"sse sending to chan: {chan_name}")
|
||||
for name, send_chan in invoice_listeners.items():
|
||||
logger.trace(f"invoice listeners: sending to `{name}`")
|
||||
await send_chan.put(payment)
|
||||
|
||||
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
[tool.poetry]
|
||||
name = "lnbits"
|
||||
version = "0.12.1"
|
||||
version = "0.12.2"
|
||||
description = "LNbits, free and open-source Lightning wallet and accounts system."
|
||||
authors = ["Alan Bits <alan@lnbits.com>"]
|
||||
|
||||
|
||||
@@ -64,6 +64,7 @@ def translate_string(lang_from, lang_to, text):
|
||||
"cs": "Czech",
|
||||
"sk": "Slovak",
|
||||
"kr": "Korean",
|
||||
"fi": "Finnish",
|
||||
}[lang_to]
|
||||
assert os.getenv("OPENAI_API_KEY"), "OPENAI_API_KEY env var not set"
|
||||
client = OpenAI()
|
||||
|
||||
Reference in New Issue
Block a user