This commit is contained in:
parent
0e9ca7e2e3
commit
9f731da5be
@ -8,7 +8,18 @@ import useEventPublisher from "Hooks/useEventPublisher";
|
|||||||
import { getMutedKeys } from "Feed/MuteList";
|
import { getMutedKeys } from "Feed/MuteList";
|
||||||
import useModeration from "Hooks/useModeration";
|
import useModeration from "Hooks/useModeration";
|
||||||
import useLogin from "Hooks/useLogin";
|
import useLogin from "Hooks/useLogin";
|
||||||
import { SnortAppData, addSubscription, setAppData, setBlocked, setBookmarked, setFollows, setMuted, setPinned, setRelays, setTags } from "Login";
|
import {
|
||||||
|
SnortAppData,
|
||||||
|
addSubscription,
|
||||||
|
setAppData,
|
||||||
|
setBlocked,
|
||||||
|
setBookmarked,
|
||||||
|
setFollows,
|
||||||
|
setMuted,
|
||||||
|
setPinned,
|
||||||
|
setRelays,
|
||||||
|
setTags,
|
||||||
|
} from "Login";
|
||||||
import { SnortPubKey } from "Const";
|
import { SnortPubKey } from "Const";
|
||||||
import { SubscriptionEvent } from "Subscription";
|
import { SubscriptionEvent } from "Subscription";
|
||||||
import useRelaysFeedFollows from "./RelaysFeedFollows";
|
import useRelaysFeedFollows from "./RelaysFeedFollows";
|
||||||
@ -101,12 +112,11 @@ export default function useLoginFeed() {
|
|||||||
).then(a => addSubscription(login, ...a.filter(a => a !== undefined).map(unwrap)));
|
).then(a => addSubscription(login, ...a.filter(a => a !== undefined).map(unwrap)));
|
||||||
|
|
||||||
const appData = getNewest(loginFeed.data.filter(a => a.kind === EventKind.AppData));
|
const appData = getNewest(loginFeed.data.filter(a => a.kind === EventKind.AppData));
|
||||||
if(appData) {
|
if (appData) {
|
||||||
publisher.decryptGeneric(appData.content, appData.pubkey).then(d => {
|
publisher.decryptGeneric(appData.content, appData.pubkey).then(d => {
|
||||||
setAppData(login, JSON.parse(d) as SnortAppData, appData.created_at * 1000);
|
setAppData(login, JSON.parse(d) as SnortAppData, appData.created_at * 1000);
|
||||||
})
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}, [loginFeed, publisher]);
|
}, [loginFeed, publisher]);
|
||||||
|
|
||||||
|
@ -76,6 +76,6 @@ export default function useModeration() {
|
|||||||
unblock,
|
unblock,
|
||||||
isBlocked,
|
isBlocked,
|
||||||
isMutedWord,
|
isMutedWord,
|
||||||
isEventMuted
|
isEventMuted,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -158,7 +158,7 @@ export function setBookmarked(state: LoginSession, bookmarked: Array<string>, ts
|
|||||||
}
|
}
|
||||||
|
|
||||||
export function setAppData(state: LoginSession, data: SnortAppData, ts: number) {
|
export function setAppData(state: LoginSession, data: SnortAppData, ts: number) {
|
||||||
if(state.appData.timestamp >= ts) {
|
if (state.appData.timestamp >= ts) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
state.appData.item = data;
|
state.appData.item = data;
|
||||||
|
@ -19,7 +19,7 @@ export enum LoginSessionType {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export interface SnortAppData {
|
export interface SnortAppData {
|
||||||
mutedWords: Array<string>
|
mutedWords: Array<string>;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface LoginSession {
|
export interface LoginSession {
|
||||||
|
@ -48,7 +48,7 @@ const LoggedOut = {
|
|||||||
subscriptions: [],
|
subscriptions: [],
|
||||||
appData: {
|
appData: {
|
||||||
item: {
|
item: {
|
||||||
mutedWords: []
|
mutedWords: [],
|
||||||
},
|
},
|
||||||
timestamp: 0,
|
timestamp: 0,
|
||||||
},
|
},
|
||||||
|
@ -6,39 +6,53 @@ import { useState } from "react";
|
|||||||
import { FormattedMessage } from "react-intl";
|
import { FormattedMessage } from "react-intl";
|
||||||
|
|
||||||
export function ModerationSettings() {
|
export function ModerationSettings() {
|
||||||
const login = useLogin();
|
const login = useLogin();
|
||||||
const [muteWord, setMuteWord] = useState("");
|
const [muteWord, setMuteWord] = useState("");
|
||||||
|
|
||||||
function addMutedWord() {
|
function addMutedWord() {
|
||||||
login.appData ??= {
|
login.appData ??= {
|
||||||
item: {
|
item: {
|
||||||
mutedWords: []
|
mutedWords: [],
|
||||||
},
|
},
|
||||||
timestamp: 0
|
timestamp: 0,
|
||||||
};
|
};
|
||||||
setAppData(login, {
|
setAppData(
|
||||||
...login.appData.item,
|
login,
|
||||||
mutedWords: appendDedupe(login.appData.item.mutedWords, [muteWord])
|
{
|
||||||
}, unixNowMs());
|
...login.appData.item,
|
||||||
setMuteWord("");
|
mutedWords: appendDedupe(login.appData.item.mutedWords, [muteWord]),
|
||||||
}
|
},
|
||||||
return <>
|
unixNowMs(),
|
||||||
<h2>
|
);
|
||||||
<FormattedMessage defaultMessage="Muted Words" />
|
setMuteWord("");
|
||||||
</h2>
|
}
|
||||||
<div className="flex-column g12">
|
return (
|
||||||
<div className="flex g8">
|
<>
|
||||||
<input type="text" placeholder="eg. crypto" className="w-max" value={muteWord} onChange={e => setMuteWord(e.target.value)} />
|
<h2>
|
||||||
<button type="button" onClick={addMutedWord}>
|
<FormattedMessage defaultMessage="Muted Words" />
|
||||||
<FormattedMessage defaultMessage="Add" />
|
</h2>
|
||||||
</button>
|
<div className="flex-column g12">
|
||||||
</div>
|
<div className="flex g8">
|
||||||
{login.appData.item.mutedWords.map(v => <div className="p br b flex f-space">
|
<input
|
||||||
<div>{v}</div>
|
type="text"
|
||||||
<button type="button">
|
placeholder="eg. crypto"
|
||||||
<FormattedMessage defaultMessage="Delete" />
|
className="w-max"
|
||||||
</button>
|
value={muteWord}
|
||||||
</div>)}
|
onChange={e => setMuteWord(e.target.value)}
|
||||||
|
/>
|
||||||
|
<button type="button" onClick={addMutedWord}>
|
||||||
|
<FormattedMessage defaultMessage="Add" />
|
||||||
|
</button>
|
||||||
</div>
|
</div>
|
||||||
|
{login.appData.item.mutedWords.map(v => (
|
||||||
|
<div className="p br b flex f-space">
|
||||||
|
<div>{v}</div>
|
||||||
|
<button type="button">
|
||||||
|
<FormattedMessage defaultMessage="Delete" />
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
))}
|
||||||
|
</div>
|
||||||
</>
|
</>
|
||||||
}
|
);
|
||||||
|
}
|
||||||
|
@ -150,7 +150,7 @@
|
|||||||
"GUlSVG": "Beanspruche deine enthaltene Snort Nostr-Adresse",
|
"GUlSVG": "Beanspruche deine enthaltene Snort Nostr-Adresse",
|
||||||
"Gcn9NQ": "Magnet Link",
|
"Gcn9NQ": "Magnet Link",
|
||||||
"GspYR7": "{n} Gefällt nicht",
|
"GspYR7": "{n} Gefällt nicht",
|
||||||
"Gxcr08": "Broadcast Event",
|
"Gxcr08": "Event verbreiten",
|
||||||
"H+vHiz": "Hex-Schlüssel...",
|
"H+vHiz": "Hex-Schlüssel...",
|
||||||
"H0JBH6": "Abmelden",
|
"H0JBH6": "Abmelden",
|
||||||
"H6/kLh": "Bestellung bezahlt!",
|
"H6/kLh": "Bestellung bezahlt!",
|
||||||
@ -186,7 +186,7 @@
|
|||||||
"KoFlZg": "Mint-URL eingeben",
|
"KoFlZg": "Mint-URL eingeben",
|
||||||
"KtsyO0": "PIN eingeben",
|
"KtsyO0": "PIN eingeben",
|
||||||
"LF5kYT": "Weitere Verbindungen",
|
"LF5kYT": "Weitere Verbindungen",
|
||||||
"LR1XjT": "Pin too short",
|
"LR1XjT": "PIN zu kurz",
|
||||||
"LXxsbk": "Anonym",
|
"LXxsbk": "Anonym",
|
||||||
"LgbKvU": "Kommentar",
|
"LgbKvU": "Kommentar",
|
||||||
"Lu5/Bj": "In Zapstr öffnen",
|
"Lu5/Bj": "In Zapstr öffnen",
|
||||||
@ -437,12 +437,12 @@
|
|||||||
"vOKedj": "{n,plural,one {}=1{& {n} anderer} other{& {n} andere}}",
|
"vOKedj": "{n,plural,one {}=1{& {n} anderer} other{& {n} andere}}",
|
||||||
"vZ4quW": "NIP-05 ist eine DNS-basierte Verifizierungsspezifikation, die dabei hilft, dich als echten Benutzer zu validieren.",
|
"vZ4quW": "NIP-05 ist eine DNS-basierte Verifizierungsspezifikation, die dabei hilft, dich als echten Benutzer zu validieren.",
|
||||||
"vhlWFg": "Umfrageoptionen",
|
"vhlWFg": "Umfrageoptionen",
|
||||||
"vlbWtt": "Erhalte eine kostenlos",
|
"vlbWtt": "Eine kostenlos erhalten",
|
||||||
"vrTOHJ": "{amount} sats",
|
"vrTOHJ": "{amount} sats",
|
||||||
"vxwnbh": "Maß an Arbeit, die auf alle veröffentlichte Events angewendet werden soll",
|
"vxwnbh": "Maß an Arbeit, die auf alle veröffentlichte Events angewendet werden soll",
|
||||||
"wEQDC6": "Anpassen",
|
"wEQDC6": "Anpassen",
|
||||||
"wLtRCF": "Dein Schlüssel",
|
"wLtRCF": "Dein Schlüssel",
|
||||||
"wSZR47": "Submit",
|
"wSZR47": "Absenden",
|
||||||
"wWLwvh": "Anon",
|
"wWLwvh": "Anon",
|
||||||
"wYSD2L": "Nostr-Adresse",
|
"wYSD2L": "Nostr-Adresse",
|
||||||
"wih7iJ": "Name ist blockiert",
|
"wih7iJ": "Name ist blockiert",
|
||||||
|
@ -1,27 +1,27 @@
|
|||||||
{
|
{
|
||||||
"+D82kt": "Вы уверены, что хотите сделать репост: {id}",
|
"+D82kt": "Вы уверены, что хотите сделать репост: {id}",
|
||||||
"+PzQ9Y": "Payout Now",
|
"+PzQ9Y": "Выплатить сейчас",
|
||||||
"+Vxixo": "Secret Group Chat",
|
"+Vxixo": "Секретный групповой чат",
|
||||||
"+aZY2h": "Тип запа",
|
"+aZY2h": "Тип запа",
|
||||||
"+tShPg": "following",
|
"+tShPg": "подписки",
|
||||||
"+vA//S": "Логины",
|
"+vA//S": "Логины",
|
||||||
"+vIQlC": "Пожалуйста, обязательно сохраните следующий пароль, чтобы в будущем управлять своим хэндлом",
|
"+vIQlC": "Пожалуйста, обязательно сохраните следующий пароль, чтобы в будущем управлять своим хэндлом",
|
||||||
"+vVZ/G": "Подключиться",
|
"+vVZ/G": "Подключиться",
|
||||||
"+xliwN": "{name} reposted",
|
"+xliwN": "{name} сделал репост",
|
||||||
"/4tOwT": "Пропустить",
|
"/4tOwT": "Пропустить",
|
||||||
"/JE/X+": "Поддержка аккаунта",
|
"/JE/X+": "Поддержка аккаунта",
|
||||||
"/PCavi": "Публичный",
|
"/PCavi": "Публичный",
|
||||||
"/RD0e2": "Nostr использует технологию цифровой подписи для создания защищенных от несанкционированного доступа заметок, которые можно безопасно копировать на множество релеев, обеспечивая резервное хранение Вашего контента.",
|
"/RD0e2": "Nostr использует технологию цифровой подписи для создания защищенных от несанкционированного доступа заметок, которые можно безопасно копировать на множество релеев, обеспечивая резервное хранение Вашего контента.",
|
||||||
"/Xf4UW": "Send anonymous usage metrics",
|
"/Xf4UW": "Отправлять показатели анонимного использования",
|
||||||
"/d6vEc": "Упростить поиск и распространение вашего профиля в Nostr",
|
"/d6vEc": "Упростить поиск и распространение вашего профиля в Nostr",
|
||||||
"/n5KSF": "{n} мс",
|
"/n5KSF": "{n} мс",
|
||||||
"00LcfG": "Load more",
|
"00LcfG": "Загрузить больше",
|
||||||
"08zn6O": "Экспортировать ключи",
|
"08zn6O": "Экспортировать ключи",
|
||||||
"0Azlrb": "Управление",
|
"0Azlrb": "Управление",
|
||||||
"0BUTMv": "Поиск...",
|
"0BUTMv": "Поиск...",
|
||||||
"0jOEtS": "Неверный LNURL",
|
"0jOEtS": "Неверный LNURL",
|
||||||
"0mch2Y": "имя содержит запрещенные символы",
|
"0mch2Y": "имя содержит запрещенные символы",
|
||||||
"0uoY11": "Show Status",
|
"0uoY11": "Показать статус",
|
||||||
"0yO7wF": "{n} секунд",
|
"0yO7wF": "{n} секунд",
|
||||||
"1A7TZk": "Что такое Snort и как он работает?",
|
"1A7TZk": "Что такое Snort и как он работает?",
|
||||||
"1Mo59U": "Вы уверены, что хотите удалить эту заметку из закладок?",
|
"1Mo59U": "Вы уверены, что хотите удалить эту заметку из закладок?",
|
||||||
@ -37,7 +37,7 @@
|
|||||||
"2a2YiP": "{n} Закладок",
|
"2a2YiP": "{n} Закладок",
|
||||||
"2k0Cv+": "Дизлайки ({n})",
|
"2k0Cv+": "Дизлайки ({n})",
|
||||||
"2ukA4d": "{n} часов",
|
"2ukA4d": "{n} часов",
|
||||||
"3KNMbJ": "Articles",
|
"3KNMbJ": "Статьи",
|
||||||
"3Rx6Qo": "Продвинутые",
|
"3Rx6Qo": "Продвинутые",
|
||||||
"3cc4Ct": "Светлый",
|
"3cc4Ct": "Светлый",
|
||||||
"3gOsZq": "Переводчики",
|
"3gOsZq": "Переводчики",
|
||||||
@ -46,7 +46,7 @@
|
|||||||
"3tVy+Z": "{n} Подписчиков",
|
"3tVy+Z": "{n} Подписчиков",
|
||||||
"3xCwbZ": "ИЛИ",
|
"3xCwbZ": "ИЛИ",
|
||||||
"3yk8fB": "Кошелек",
|
"3yk8fB": "Кошелек",
|
||||||
"40VR6s": "Nostr Connect",
|
"40VR6s": "Подключение Nostr",
|
||||||
"450Fty": "Ничьи",
|
"450Fty": "Ничьи",
|
||||||
"47FYwb": "Отменить",
|
"47FYwb": "Отменить",
|
||||||
"4IPzdn": "Основные разработчики",
|
"4IPzdn": "Основные разработчики",
|
||||||
@ -61,14 +61,14 @@
|
|||||||
"5oTnfy": "Приобрести хэндл",
|
"5oTnfy": "Приобрести хэндл",
|
||||||
"5rOdPG": "После того как Вы настроили расширение для управления ключами и сгенерировали ключ, Вы можете последовать нашему гиду для новичков, чтобы настроить свой профиль и найти интересных людей, заслуживающих подписки на Nostr.",
|
"5rOdPG": "После того как Вы настроили расширение для управления ключами и сгенерировали ключ, Вы можете последовать нашему гиду для новичков, чтобы настроить свой профиль и найти интересных людей, заслуживающих подписки на Nostr.",
|
||||||
"5u6iEc": "Перевести на Pubkey",
|
"5u6iEc": "Перевести на Pubkey",
|
||||||
"5vMmmR": "Usernames are not unique on Nostr. The nostr address is your unique human-readable address that is unique to you upon registration.",
|
"5vMmmR": "Имя пользователя не является уникальным на Nostr. Nostr адрес - это ваш уникальный человеко читаемый адрес, который уникален для вас при регистрации.",
|
||||||
"5ykRmX": "Отправить зап",
|
"5ykRmX": "Отправить зап",
|
||||||
"6/SF6e": "<h1>{n}</h1> Cashu sats",
|
"6/SF6e": "<h1>{n}</h1> Cashu sats",
|
||||||
"6/hB3S": "Watch Replay",
|
"6/hB3S": "Смотреть повтор",
|
||||||
"65BmHb": "Не удалось загрузить изображение через {host}, нажмите здесь, чтобы загрузить напрямую",
|
"65BmHb": "Не удалось загрузить изображение через {host}, нажмите здесь, чтобы загрузить напрямую",
|
||||||
"6OSOXl": "Reason: <i>{reason}</i>",
|
"6OSOXl": "Причина: <i>{reason}</i>",
|
||||||
"6Yfvvp": "Получите адрес",
|
"6Yfvvp": "Получите адрес",
|
||||||
"6bgpn+": "Not all clients support this, you may still receive some zaps as if zap splits was not configured",
|
"6bgpn+": "Не все клиенты поддерживают это, вы все равно можете получить некоторые запы, как если бы запределение не было настроено",
|
||||||
"6ewQqw": "Лайки ({n})",
|
"6ewQqw": "Лайки ({n})",
|
||||||
"6uMqL1": "Не оплачено",
|
"6uMqL1": "Не оплачено",
|
||||||
"7+Domh": "Заметки",
|
"7+Domh": "Заметки",
|
||||||
@ -76,13 +76,13 @@
|
|||||||
"7hp70g": "NIP-05",
|
"7hp70g": "NIP-05",
|
||||||
"8/vBbP": "Репосты ({n})",
|
"8/vBbP": "Репосты ({n})",
|
||||||
"89q5wc": "Подтверждать репосты",
|
"89q5wc": "Подтверждать репосты",
|
||||||
"8Kboo2": "Scan this QR code with your signer app to get started",
|
"8Kboo2": "Отсканируйте этот QR код с вашим приложением для регистрации, чтобы начать",
|
||||||
"8QDesP": "Запнуть {n} сат",
|
"8QDesP": "Запнуть {n} сат",
|
||||||
"8Rkoyb": "Recipient",
|
"8Rkoyb": "Получатель",
|
||||||
"8Y6bZQ": "Invalid zap split: {input}",
|
"8Y6bZQ": "Неверный zap сплит: {input}",
|
||||||
"8g2vyB": "имя слишком длинное",
|
"8g2vyB": "имя слишком длинное",
|
||||||
"8v1NN+": "Фраза для сопряжения",
|
"8v1NN+": "Фраза для сопряжения",
|
||||||
"8xNnhi": "Nostr Extension",
|
"8xNnhi": "Расширение Nostr",
|
||||||
"9+Ddtu": "Далее",
|
"9+Ddtu": "Далее",
|
||||||
"9HU8vw": "Ответить",
|
"9HU8vw": "Ответить",
|
||||||
"9SvQep": "Подписан(а) на {n}",
|
"9SvQep": "Подписан(а) на {n}",
|
||||||
@ -91,7 +91,7 @@
|
|||||||
"9pMqYs": "Nostr адрес",
|
"9pMqYs": "Nostr адрес",
|
||||||
"9wO4wJ": "Лайтнинг-инвойс",
|
"9wO4wJ": "Лайтнинг-инвойс",
|
||||||
"ADmfQT": "Ветка",
|
"ADmfQT": "Ветка",
|
||||||
"AGNz71": "Zap All {n} sats",
|
"AGNz71": "Зап Все {n} sats",
|
||||||
"ASRK0S": "Этот автор был заглушен",
|
"ASRK0S": "Этот автор был заглушен",
|
||||||
"Adk34V": "Настройте свой профиль",
|
"Adk34V": "Настройте свой профиль",
|
||||||
"Ai8VHU": "Снятие ограничения срока хранения ваших заметок на релее Snort",
|
"Ai8VHU": "Снятие ограничения срока хранения ваших заметок на релее Snort",
|
||||||
@ -108,7 +108,7 @@
|
|||||||
"BcGMo+": "Заметки содержат текст; наиболее популярное применение этих заметок - передача сообщений \"подобно твиттеру\".",
|
"BcGMo+": "Заметки содержат текст; наиболее популярное применение этих заметок - передача сообщений \"подобно твиттеру\".",
|
||||||
"C5xzTC": "Premium",
|
"C5xzTC": "Premium",
|
||||||
"C81/uG": "Выход",
|
"C81/uG": "Выход",
|
||||||
"C8HhVE": "Suggested Follows",
|
"C8HhVE": "Предложенные подписки",
|
||||||
"CHTbO3": "Не удалось загрузить инвойс",
|
"CHTbO3": "Не удалось загрузить инвойс",
|
||||||
"CVWeJ6": "Популярные профили",
|
"CVWeJ6": "Популярные профили",
|
||||||
"CmZ9ls": "{n} заглушен",
|
"CmZ9ls": "{n} заглушен",
|
||||||
@ -120,12 +120,12 @@
|
|||||||
"DZzCem": "Показать последние {n} заметки",
|
"DZzCem": "Показать последние {n} заметки",
|
||||||
"DcL8P+": "Саппортер",
|
"DcL8P+": "Саппортер",
|
||||||
"Dh3hbq": "Авто Зап",
|
"Dh3hbq": "Авто Зап",
|
||||||
"Dn82AL": "Live",
|
"Dn82AL": "Прямой эфир",
|
||||||
"DtYelJ": "Перевод",
|
"DtYelJ": "Перевод",
|
||||||
"E8a4yq": "Подпишитесь на популярные аккаунты",
|
"E8a4yq": "Подпишитесь на популярные аккаунты",
|
||||||
"ELbg9p": "Data Providers",
|
"ELbg9p": "Данные провайдера",
|
||||||
"EPYwm7": "Ваш приватный ключ - это Ваш пароль. Если Вы потеряете этот ключ, вы потеряете доступ к своей учетной записи! Скопируйте и сохраните его в надежном месте. Восстановить приватный ключ невозможно.",
|
"EPYwm7": "Ваш приватный ключ - это Ваш пароль. Если Вы потеряете этот ключ, вы потеряете доступ к своей учетной записи! Скопируйте и сохраните его в надежном месте. Восстановить приватный ключ невозможно.",
|
||||||
"EQKRE4": "Show badges on profile pages",
|
"EQKRE4": "Показывать значки на страницах профиля",
|
||||||
"EWyQH5": "Глобальная лента",
|
"EWyQH5": "Глобальная лента",
|
||||||
"Ebl/B2": "Перевести на {lang}",
|
"Ebl/B2": "Перевести на {lang}",
|
||||||
"EcZF24": "Кастомные релеи",
|
"EcZF24": "Кастомные релеи",
|
||||||
@ -135,9 +135,9 @@
|
|||||||
"F+B3x1": "Мы также сотрудничаем с nostrplebs.com, чтобы предоставить Вам больше возможностей",
|
"F+B3x1": "Мы также сотрудничаем с nostrplebs.com, чтобы предоставить Вам больше возможностей",
|
||||||
"F3l7xL": "Добавить аккаунт",
|
"F3l7xL": "Добавить аккаунт",
|
||||||
"FDguSC": "{n} Запов",
|
"FDguSC": "{n} Запов",
|
||||||
"FMfjrl": "Show status messages on profile pages",
|
"FMfjrl": "Показывать статусные сообщения на страницах профиля",
|
||||||
"FS3b54": "Готово!",
|
"FS3b54": "Готово!",
|
||||||
"FSYL8G": "Trending Users",
|
"FSYL8G": "Трендовые пользователи",
|
||||||
"FdhSU2": "Получить сейчас",
|
"FdhSU2": "Получить сейчас",
|
||||||
"FfYsOb": "Произошла ошибка!",
|
"FfYsOb": "Произошла ошибка!",
|
||||||
"FmXUJg": "подписан(а) на Вас",
|
"FmXUJg": "подписан(а) на Вас",
|
||||||
@ -145,24 +145,24 @@
|
|||||||
"G1BGCg": "Выберите кошелек",
|
"G1BGCg": "Выберите кошелек",
|
||||||
"GFOoEE": "Соль",
|
"GFOoEE": "Соль",
|
||||||
"GL8aXW": "Закладки ({n})",
|
"GL8aXW": "Закладки ({n})",
|
||||||
"GQPtfk": "Join Stream",
|
"GQPtfk": "Присоединиться к стриму",
|
||||||
"GSye7T": "Lightning Address",
|
"GSye7T": "Lightning Адрес",
|
||||||
"GUlSVG": "Получите Nostr адрес от Snort",
|
"GUlSVG": "Получите Nostr адрес от Snort",
|
||||||
"Gcn9NQ": "Magnet-ссылка",
|
"Gcn9NQ": "Magnet-ссылка",
|
||||||
"GspYR7": "{n} Дизлайк",
|
"GspYR7": "{n} Дизлайк",
|
||||||
"Gxcr08": "Broadcast Event",
|
"Gxcr08": "Трансляция события",
|
||||||
"H+vHiz": "Hex ключа..",
|
"H+vHiz": "Hex ключа..",
|
||||||
"H0JBH6": "Выйти",
|
"H0JBH6": "Выйти",
|
||||||
"H6/kLh": "Заказ оплачен!",
|
"H6/kLh": "Заказ оплачен!",
|
||||||
"HAlOn1": "Имя",
|
"HAlOn1": "Имя",
|
||||||
"HFls6j": "имя будет доступно позже",
|
"HFls6j": "имя будет доступно позже",
|
||||||
"HOzFdo": "Заглушен",
|
"HOzFdo": "Заглушен",
|
||||||
"HWbkEK": "Clear cache and reload",
|
"HWbkEK": "Очистить кэш и перезагрузить",
|
||||||
"HbefNb": "Открыть кошелек",
|
"HbefNb": "Открыть кошелек",
|
||||||
"HhcAVH": "You don't follow this person, click here to load media from <i>{link}</i>, or update <a><i>your preferences</i></a> to always load media from everybody.",
|
"HhcAVH": "Вы не подписаны на этого человека, нажмите здесь, чтобы загрузить медиа из <i>{link}</i>, или обновите <a><i>ваши предпочтения</i></a> чтобы всегда загружать медиа от всех.",
|
||||||
"IDjHJ6": "Спасибо, что выбрали Snort, пожалуйста, поддержите проект, если это возможно.",
|
"IDjHJ6": "Спасибо, что выбрали Snort, пожалуйста, поддержите проект, если это возможно.",
|
||||||
"IEwZvs": "Вы уверены, что хотите открепить эту заметку?",
|
"IEwZvs": "Вы уверены, что хотите открепить эту заметку?",
|
||||||
"IKKHqV": "Follows",
|
"IKKHqV": "Подписки",
|
||||||
"INSqIz": "Имя пользователя в Twitter...",
|
"INSqIz": "Имя пользователя в Twitter...",
|
||||||
"IUZC+0": "Это означает, что никто не может изменить созданные Вами заметки, и каждый может легко убедиться, что увиденные ими заметки созданы Вами.",
|
"IUZC+0": "Это означает, что никто не может изменить созданные Вами заметки, и каждый может легко убедиться, что увиденные ими заметки созданы Вами.",
|
||||||
"Ig9/a1": "Sent {n} sats to {name}",
|
"Ig9/a1": "Sent {n} sats to {name}",
|
||||||
|
@ -277,7 +277,7 @@ export class EventPublisher {
|
|||||||
*/
|
*/
|
||||||
async decryptGeneric(content: string, from: string) {
|
async decryptGeneric(content: string, from: string) {
|
||||||
const pl = decodeEncryptionPayload(content);
|
const pl = decodeEncryptionPayload(content);
|
||||||
switch(pl.v) {
|
switch (pl.v) {
|
||||||
case MessageEncryptorVersion.Nip4: {
|
case MessageEncryptorVersion.Nip4: {
|
||||||
const nip4Payload = `${base64.encode(pl.ciphertext)}?iv=${base64.encode(pl.nonce)}`;
|
const nip4Payload = `${base64.encode(pl.ciphertext)}?iv=${base64.encode(pl.nonce)}`;
|
||||||
return await this.#signer.nip4Decrypt(nip4Payload, from);
|
return await this.#signer.nip4Decrypt(nip4Payload, from);
|
||||||
|
@ -158,4 +158,4 @@ export function decodeEncryptionPayload(p: string) {
|
|||||||
|
|
||||||
export function encodeEncryptionPayload(p: MessageEncryptorPayload) {
|
export function encodeEncryptionPayload(p: MessageEncryptorPayload) {
|
||||||
return base64.encode(new Uint8Array([p.v, ...p.nonce, ...p.ciphertext]));
|
return base64.encode(new Uint8Array([p.v, ...p.nonce, ...p.ciphertext]));
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user