chore: meku fixes
continuous-integration/drone/push Build encountered an error Details

This commit is contained in:
kieran 2024-04-29 10:21:28 +01:00
parent 9abb236ede
commit a591a3c176
Signed by: Kieran
GPG Key ID: DE71CEB3925BE941
9 changed files with 589 additions and 87 deletions

View File

@ -0,0 +1,8 @@
{
"version": 1,
"description": "Generated by wrangler@3.52.0",
"include": [
"/*"
],
"exclude": []
}

View File

@ -0,0 +1,13 @@
{
"routes": [
{
"routePath": "/",
"mountPath": "/",
"method": "",
"middleware": [
"_middleware.ts:onRequest"
]
}
],
"baseURL": "/"
}

View File

@ -0,0 +1,11 @@
import { onRequest as ___middleware_ts_onRequest } from "/home/kieran/git/snort/functions/_middleware.ts"
export const routes = [
{
routePath: "/",
mountPath: "/",
method: "",
middlewares: [___middleware_ts_onRequest],
modules: [],
},
]

View File

@ -0,0 +1,478 @@
// _middleware.ts
var HOST = "snort.social";
var onRequest = async (context) => {
const u = new URL(context.request.url);
const prefixes = ["npub1", "nprofile1", "naddr1", "nevent1", "note1"];
const isEntityPath = prefixes.some(
(a) => u.pathname.startsWith(`/${a}`) || u.pathname.startsWith(`/e/${a}`) || u.pathname.startsWith(`/p/${a}`)
);
const nostrAddress = u.pathname.match(/^\/([a-zA-Z0-9_]+)$/i);
const next = await context.next();
if (u.pathname != "/" && (isEntityPath || nostrAddress)) {
try {
let id = u.pathname.split("/").at(-1);
if (!isEntityPath && nostrAddress) {
id = `${id}@${HOST}`;
}
const fetchApi = `https://nostr.api.v0l.io/api/v1/opengraph/${id}?canonical=${encodeURIComponent(
`https://${HOST}/%s`
)}`;
console.log("Fetching tags from: ", fetchApi);
const rsp = await fetch(fetchApi, {
method: "POST",
body: await next.arrayBuffer(),
headers: {
"user-agent": `SnortFunctions/1.0 (https://${HOST})`,
"content-type": "text/html",
accept: "text/html"
}
});
if (rsp.ok) {
const body = await rsp.text();
if (body.length > 0) {
return new Response(body, {
headers: {
...Object.fromEntries(rsp.headers.entries()),
"cache-control": "public, max-age=60"
}
});
}
}
} catch (e) {
console.error(e);
}
}
return next;
};
// ../.wrangler/tmp/pages-aYZOs0/functionsRoutes-0.08773921858373512.mjs
var routes = [
{
routePath: "/",
mountPath: "/",
method: "",
middlewares: [onRequest],
modules: []
}
];
// ../../../.npm/_npx/32026684e21afda6/node_modules/path-to-regexp/dist.es2015/index.js
function lexer(str) {
var tokens = [];
var i = 0;
while (i < str.length) {
var char = str[i];
if (char === "*" || char === "+" || char === "?") {
tokens.push({ type: "MODIFIER", index: i, value: str[i++] });
continue;
}
if (char === "\\") {
tokens.push({ type: "ESCAPED_CHAR", index: i++, value: str[i++] });
continue;
}
if (char === "{") {
tokens.push({ type: "OPEN", index: i, value: str[i++] });
continue;
}
if (char === "}") {
tokens.push({ type: "CLOSE", index: i, value: str[i++] });
continue;
}
if (char === ":") {
var name = "";
var j = i + 1;
while (j < str.length) {
var code = str.charCodeAt(j);
if (
// `0-9`
code >= 48 && code <= 57 || // `A-Z`
code >= 65 && code <= 90 || // `a-z`
code >= 97 && code <= 122 || // `_`
code === 95
) {
name += str[j++];
continue;
}
break;
}
if (!name)
throw new TypeError("Missing parameter name at ".concat(i));
tokens.push({ type: "NAME", index: i, value: name });
i = j;
continue;
}
if (char === "(") {
var count = 1;
var pattern = "";
var j = i + 1;
if (str[j] === "?") {
throw new TypeError('Pattern cannot start with "?" at '.concat(j));
}
while (j < str.length) {
if (str[j] === "\\") {
pattern += str[j++] + str[j++];
continue;
}
if (str[j] === ")") {
count--;
if (count === 0) {
j++;
break;
}
} else if (str[j] === "(") {
count++;
if (str[j + 1] !== "?") {
throw new TypeError("Capturing groups are not allowed at ".concat(j));
}
}
pattern += str[j++];
}
if (count)
throw new TypeError("Unbalanced pattern at ".concat(i));
if (!pattern)
throw new TypeError("Missing pattern at ".concat(i));
tokens.push({ type: "PATTERN", index: i, value: pattern });
i = j;
continue;
}
tokens.push({ type: "CHAR", index: i, value: str[i++] });
}
tokens.push({ type: "END", index: i, value: "" });
return tokens;
}
function parse(str, options) {
if (options === void 0) {
options = {};
}
var tokens = lexer(str);
var _a = options.prefixes, prefixes = _a === void 0 ? "./" : _a;
var defaultPattern = "[^".concat(escapeString(options.delimiter || "/#?"), "]+?");
var result = [];
var key = 0;
var i = 0;
var path = "";
var tryConsume = function(type) {
if (i < tokens.length && tokens[i].type === type)
return tokens[i++].value;
};
var mustConsume = function(type) {
var value2 = tryConsume(type);
if (value2 !== void 0)
return value2;
var _a2 = tokens[i], nextType = _a2.type, index = _a2.index;
throw new TypeError("Unexpected ".concat(nextType, " at ").concat(index, ", expected ").concat(type));
};
var consumeText = function() {
var result2 = "";
var value2;
while (value2 = tryConsume("CHAR") || tryConsume("ESCAPED_CHAR")) {
result2 += value2;
}
return result2;
};
while (i < tokens.length) {
var char = tryConsume("CHAR");
var name = tryConsume("NAME");
var pattern = tryConsume("PATTERN");
if (name || pattern) {
var prefix = char || "";
if (prefixes.indexOf(prefix) === -1) {
path += prefix;
prefix = "";
}
if (path) {
result.push(path);
path = "";
}
result.push({
name: name || key++,
prefix,
suffix: "",
pattern: pattern || defaultPattern,
modifier: tryConsume("MODIFIER") || ""
});
continue;
}
var value = char || tryConsume("ESCAPED_CHAR");
if (value) {
path += value;
continue;
}
if (path) {
result.push(path);
path = "";
}
var open = tryConsume("OPEN");
if (open) {
var prefix = consumeText();
var name_1 = tryConsume("NAME") || "";
var pattern_1 = tryConsume("PATTERN") || "";
var suffix = consumeText();
mustConsume("CLOSE");
result.push({
name: name_1 || (pattern_1 ? key++ : ""),
pattern: name_1 && !pattern_1 ? defaultPattern : pattern_1,
prefix,
suffix,
modifier: tryConsume("MODIFIER") || ""
});
continue;
}
mustConsume("END");
}
return result;
}
function match(str, options) {
var keys = [];
var re = pathToRegexp(str, keys, options);
return regexpToFunction(re, keys, options);
}
function regexpToFunction(re, keys, options) {
if (options === void 0) {
options = {};
}
var _a = options.decode, decode = _a === void 0 ? function(x) {
return x;
} : _a;
return function(pathname) {
var m = re.exec(pathname);
if (!m)
return false;
var path = m[0], index = m.index;
var params = /* @__PURE__ */ Object.create(null);
var _loop_1 = function(i2) {
if (m[i2] === void 0)
return "continue";
var key = keys[i2 - 1];
if (key.modifier === "*" || key.modifier === "+") {
params[key.name] = m[i2].split(key.prefix + key.suffix).map(function(value) {
return decode(value, key);
});
} else {
params[key.name] = decode(m[i2], key);
}
};
for (var i = 1; i < m.length; i++) {
_loop_1(i);
}
return { path, index, params };
};
}
function escapeString(str) {
return str.replace(/([.+*?=^!:${}()[\]|/\\])/g, "\\$1");
}
function flags(options) {
return options && options.sensitive ? "" : "i";
}
function regexpToRegexp(path, keys) {
if (!keys)
return path;
var groupsRegex = /\((?:\?<(.*?)>)?(?!\?)/g;
var index = 0;
var execResult = groupsRegex.exec(path.source);
while (execResult) {
keys.push({
// Use parenthesized substring match if available, index otherwise
name: execResult[1] || index++,
prefix: "",
suffix: "",
modifier: "",
pattern: ""
});
execResult = groupsRegex.exec(path.source);
}
return path;
}
function arrayToRegexp(paths, keys, options) {
var parts = paths.map(function(path) {
return pathToRegexp(path, keys, options).source;
});
return new RegExp("(?:".concat(parts.join("|"), ")"), flags(options));
}
function stringToRegexp(path, keys, options) {
return tokensToRegexp(parse(path, options), keys, options);
}
function tokensToRegexp(tokens, keys, options) {
if (options === void 0) {
options = {};
}
var _a = options.strict, strict = _a === void 0 ? false : _a, _b = options.start, start = _b === void 0 ? true : _b, _c = options.end, end = _c === void 0 ? true : _c, _d = options.encode, encode = _d === void 0 ? function(x) {
return x;
} : _d, _e = options.delimiter, delimiter = _e === void 0 ? "/#?" : _e, _f = options.endsWith, endsWith = _f === void 0 ? "" : _f;
var endsWithRe = "[".concat(escapeString(endsWith), "]|$");
var delimiterRe = "[".concat(escapeString(delimiter), "]");
var route = start ? "^" : "";
for (var _i = 0, tokens_1 = tokens; _i < tokens_1.length; _i++) {
var token = tokens_1[_i];
if (typeof token === "string") {
route += escapeString(encode(token));
} else {
var prefix = escapeString(encode(token.prefix));
var suffix = escapeString(encode(token.suffix));
if (token.pattern) {
if (keys)
keys.push(token);
if (prefix || suffix) {
if (token.modifier === "+" || token.modifier === "*") {
var mod = token.modifier === "*" ? "?" : "";
route += "(?:".concat(prefix, "((?:").concat(token.pattern, ")(?:").concat(suffix).concat(prefix, "(?:").concat(token.pattern, "))*)").concat(suffix, ")").concat(mod);
} else {
route += "(?:".concat(prefix, "(").concat(token.pattern, ")").concat(suffix, ")").concat(token.modifier);
}
} else {
if (token.modifier === "+" || token.modifier === "*") {
route += "((?:".concat(token.pattern, ")").concat(token.modifier, ")");
} else {
route += "(".concat(token.pattern, ")").concat(token.modifier);
}
}
} else {
route += "(?:".concat(prefix).concat(suffix, ")").concat(token.modifier);
}
}
}
if (end) {
if (!strict)
route += "".concat(delimiterRe, "?");
route += !options.endsWith ? "$" : "(?=".concat(endsWithRe, ")");
} else {
var endToken = tokens[tokens.length - 1];
var isEndDelimited = typeof endToken === "string" ? delimiterRe.indexOf(endToken[endToken.length - 1]) > -1 : endToken === void 0;
if (!strict) {
route += "(?:".concat(delimiterRe, "(?=").concat(endsWithRe, "))?");
}
if (!isEndDelimited) {
route += "(?=".concat(delimiterRe, "|").concat(endsWithRe, ")");
}
}
return new RegExp(route, flags(options));
}
function pathToRegexp(path, keys, options) {
if (path instanceof RegExp)
return regexpToRegexp(path, keys);
if (Array.isArray(path))
return arrayToRegexp(path, keys, options);
return stringToRegexp(path, keys, options);
}
// ../../../.npm/_npx/32026684e21afda6/node_modules/wrangler/templates/pages-template-worker.ts
var escapeRegex = /[.+?^${}()|[\]\\]/g;
function* executeRequest(request) {
const requestPath = new URL(request.url).pathname;
for (const route of [...routes].reverse()) {
if (route.method && route.method !== request.method) {
continue;
}
const routeMatcher = match(route.routePath.replace(escapeRegex, "\\$&"), {
end: false
});
const mountMatcher = match(route.mountPath.replace(escapeRegex, "\\$&"), {
end: false
});
const matchResult = routeMatcher(requestPath);
const mountMatchResult = mountMatcher(requestPath);
if (matchResult && mountMatchResult) {
for (const handler of route.middlewares.flat()) {
yield {
handler,
params: matchResult.params,
path: mountMatchResult.path
};
}
}
}
for (const route of routes) {
if (route.method && route.method !== request.method) {
continue;
}
const routeMatcher = match(route.routePath.replace(escapeRegex, "\\$&"), {
end: true
});
const mountMatcher = match(route.mountPath.replace(escapeRegex, "\\$&"), {
end: false
});
const matchResult = routeMatcher(requestPath);
const mountMatchResult = mountMatcher(requestPath);
if (matchResult && mountMatchResult && route.modules.length) {
for (const handler of route.modules.flat()) {
yield {
handler,
params: matchResult.params,
path: matchResult.path
};
}
break;
}
}
}
var pages_template_worker_default = {
async fetch(originalRequest, env, workerContext) {
let request = originalRequest;
const handlerIterator = executeRequest(request);
let data = {};
let isFailOpen = false;
const next = async (input, init) => {
if (input !== void 0) {
let url = input;
if (typeof input === "string") {
url = new URL(input, request.url).toString();
}
request = new Request(url, init);
}
const result = handlerIterator.next();
if (result.done === false) {
const { handler, params, path } = result.value;
const context = {
request: new Request(request.clone()),
functionPath: path,
next,
params,
get data() {
return data;
},
set data(value) {
if (typeof value !== "object" || value === null) {
throw new Error("context.data must be an object");
}
data = value;
},
env,
waitUntil: workerContext.waitUntil.bind(workerContext),
passThroughOnException: () => {
isFailOpen = true;
}
};
const response = await handler(context);
if (!(response instanceof Response)) {
throw new Error("Your Pages function should return a Response");
}
return cloneResponse(response);
} else if ("ASSETS") {
const response = await env["ASSETS"].fetch(request);
return cloneResponse(response);
} else {
const response = await fetch(request);
return cloneResponse(response);
}
};
try {
return await next();
} catch (error) {
if (isFailOpen) {
const response = await env["ASSETS"].fetch(request);
return cloneResponse(response);
}
throw error;
}
}
};
var cloneResponse = (response) => (
// https://fetch.spec.whatwg.org/#null-body-status
new Response(
[101, 204, 205, 304].includes(response.status) ? null : response.body,
response
)
);
export {
pages_template_worker_default as default
};

View File

@ -1,5 +1,5 @@
{
"appName": "meku.app",
"appName": "めく",
"appNameCapitalized": "めく",
"appTitle": "めく",
"hostname": "meku.app",
@ -26,7 +26,8 @@
},
"defaultPreferences": {
"hideMutedNotes": false,
"defaultRootTab": "following"
"defaultRootTab": "following",
"language": "ja"
},
"media": {
"bypassImgProxyError": false,

View File

@ -109,6 +109,9 @@ export default function NavSidebar({ narrow = false }: { narrow?: boolean }) {
if ((CONFIG.hideFromNavbar ?? []).includes(a.link)) {
return false;
}
if (!CONFIG.features.deck && a.link === "/deck") {
return false;
}
if (readonly && a.hideReadOnly) {
return false;
}

View File

@ -5,6 +5,9 @@
"+PzQ9Y": {
"defaultMessage": "Payout Now"
},
"+QM0PJ": {
"defaultMessage": "Sync all events for your profile into local cache"
},
"+UjDmN": {
"defaultMessage": "Logged in with write access"
},
@ -41,10 +44,6 @@
"/JE/X+": {
"defaultMessage": "Account Support"
},
"/PCavi": {
"defaultMessage": "Public",
"description": "Public Zap"
},
"/Xf4UW": {
"defaultMessage": "Send anonymous usage metrics"
},
@ -63,9 +62,6 @@
"01iNut": {
"defaultMessage": "Nostr address does not belong to you"
},
"08zn6O": {
"defaultMessage": "Export Keys"
},
"0Azlrb": {
"defaultMessage": "Manage"
},
@ -181,9 +177,6 @@
"3tVy+Z": {
"defaultMessage": "{n} Followers"
},
"3yk8fB": {
"defaultMessage": "Wallet"
},
"450Fty": {
"defaultMessage": "None"
},
@ -235,9 +228,6 @@
"5ykRmX": {
"defaultMessage": "Send zap"
},
"6/SF6e": {
"defaultMessage": "<h1>{n}</h1> Cashu sats"
},
"6/hB3S": {
"defaultMessage": "Watch Replay"
},
@ -356,10 +346,6 @@
"Am8glJ": {
"defaultMessage": "Game"
},
"AnLrRC": {
"defaultMessage": "Non-Zap",
"description": "Non-Zap, Regular LN payment"
},
"Aujn2T": {
"defaultMessage": "Count"
},
@ -522,9 +508,6 @@
"FmXUJg": {
"defaultMessage": "follows you"
},
"FvanT6": {
"defaultMessage": "Accounts"
},
"G/yZLu": {
"defaultMessage": "Remove"
},
@ -589,15 +572,15 @@
"HhcAVH": {
"defaultMessage": "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."
},
"HqRNN8": {
"defaultMessage": "Support"
},
"I1AoOu": {
"defaultMessage": "Last post {time}"
},
"IEwZvs": {
"defaultMessage": "Are you sure you want to unpin this note?"
},
"IIOul1": {
"defaultMessage": "Account Data"
},
"IKKHqV": {
"defaultMessage": "Follows"
},
@ -673,19 +656,12 @@
"KAhAcM": {
"defaultMessage": "Enter LNDHub config"
},
"KHK8B9": {
"defaultMessage": "Relay",
"description": "Label for reading global feed from specific relays"
},
"KQvWvD": {
"defaultMessage": "Deleted"
},
"KahimY": {
"defaultMessage": "Unknown event kind: {kind}"
},
"KoFlZg": {
"defaultMessage": "Enter mint URL"
},
"KtsyO0": {
"defaultMessage": "Enter Pin"
},
@ -798,6 +774,12 @@
"ORGv1Q": {
"defaultMessage": "Created"
},
"OoZgbB": {
"defaultMessage": "Failed to update, please try again"
},
"OxPdQ0": {
"defaultMessage": "Scanning {date}"
},
"P2o+ZZ": {
"defaultMessage": "Invalid Nostr Address"
},
@ -813,10 +795,6 @@
"PCSt5T": {
"defaultMessage": "Preferences"
},
"PJeJFc": {
"defaultMessage": "Summary",
"description": "Notifications summary"
},
"PXQ0z0": {
"defaultMessage": "Receiving to <b>{wallet}</b>"
},
@ -832,15 +810,15 @@
"QDFTjG": {
"defaultMessage": "{n} Relays"
},
"QJfhKt": {
"defaultMessage": "The private key is like a password, but it cannot be reset. Guard it carefully and never show it to anyone. Once someone has your private key, they will have access to your account forever."
},
"QWhotP": {
"defaultMessage": "Zap Pool only works if you use one of the supported wallet connections (WebLN, LNC, LNDHub or Nostr Wallet Connect)"
},
"Qxv0B2": {
"defaultMessage": "You currently have {number} sats in your zap pool."
},
"R/6nsx": {
"defaultMessage": "Subscription"
},
"R81upa": {
"defaultMessage": "People you follow"
},
@ -862,6 +840,9 @@
"RoOyAh": {
"defaultMessage": "Relays"
},
"RrCui3": {
"defaultMessage": "Summary"
},
"Rs4kCE": {
"defaultMessage": "Bookmark"
},
@ -926,9 +907,6 @@
"TvKqBp": {
"defaultMessage": "liked"
},
"TwyMau": {
"defaultMessage": "Account"
},
"U1aPPi": {
"defaultMessage": "Stop listening"
},
@ -1019,6 +997,9 @@
"XQiFEl": {
"defaultMessage": "Follows Relay Health"
},
"XSdWHA": {
"defaultMessage": "Redeem"
},
"XXm7jJ": {
"defaultMessage": "Trending Hashtags"
},
@ -1031,10 +1012,6 @@
"Xopqkl": {
"defaultMessage": "Your default zap amount is {number} sats, example values are calculated from this."
},
"XrSk2j": {
"defaultMessage": "Redeem",
"description": "Button: Redeem Cashu token"
},
"YDURw6": {
"defaultMessage": "Service URL"
},
@ -1168,6 +1145,9 @@
"d7d0/x": {
"defaultMessage": "LN Address"
},
"dK2CcV": {
"defaultMessage": "The public key is like your username, you can share it with anyone."
},
"dOQCL8": {
"defaultMessage": "Display name"
},
@ -1294,6 +1274,9 @@
"hF6IN2": {
"defaultMessage": "Prune Follow List"
},
"hMQmIw": {
"defaultMessage": "Sync Account"
},
"hMzcSq": {
"defaultMessage": "Messages"
},
@ -1303,9 +1286,6 @@
"hY4lzx": {
"defaultMessage": "Supports"
},
"hYOE+U": {
"defaultMessage": "Invite"
},
"ha8JKG": {
"defaultMessage": "Show graph"
},
@ -1318,9 +1298,6 @@
"hniz8Z": {
"defaultMessage": "here"
},
"hvFRBo": {
"defaultMessage": "Interaction"
},
"i/dBAR": {
"defaultMessage": "Zap Pool"
},
@ -1345,6 +1322,9 @@
"iXPL0Z": {
"defaultMessage": "Can't login with private key on an insecure connection, please use a Nostr key manager extension instead"
},
"iYc3Ld": {
"defaultMessage": "Payments"
},
"ieGrWo": {
"defaultMessage": "Follow"
},
@ -1420,12 +1400,18 @@
"lD3+8a": {
"defaultMessage": "Pay"
},
"lEnclp": {
"defaultMessage": "My events: {n}"
},
"lPWASz": {
"defaultMessage": "Snort nostr address"
},
"lTbT3s": {
"defaultMessage": "Wallet password"
},
"lfOesV": {
"defaultMessage": "Non-Zap"
},
"lgg1KN": {
"defaultMessage": "account page"
},
@ -1453,6 +1439,9 @@
"mKhgP9": {
"defaultMessage": "{n,plural,=0{} =1{zapped} other{zapped}}"
},
"mOFG3K": {
"defaultMessage": "Start"
},
"mfe8RW": {
"defaultMessage": "Option: {n}"
},
@ -1474,6 +1463,9 @@
"nUT0Lv": {
"defaultMessage": "Tools"
},
"nWQFic": {
"defaultMessage": "Renew"
},
"nihgfo": {
"defaultMessage": "Listen to this article"
},
@ -1513,10 +1505,6 @@
"puLNUJ": {
"defaultMessage": "Pin"
},
"pukxg/": {
"defaultMessage": "Payments",
"description": "Wallet transation history"
},
"pzTOmv": {
"defaultMessage": "Followers"
},
@ -1535,6 +1523,9 @@
"qUJTsT": {
"defaultMessage": "Blocked"
},
"qXCbgZ": {
"defaultMessage": "Unlock"
},
"qZsKBR": {
"defaultMessage": "Renew {tier}"
},
@ -1634,6 +1625,12 @@
"uc0din": {
"defaultMessage": "Send sats splits to"
},
"ufvXH1": {
"defaultMessage": "Found {n} events"
},
"uhu5aG": {
"defaultMessage": "Public"
},
"un1nGw": {
"defaultMessage": "{n} notes"
},
@ -1679,10 +1676,6 @@
"wSZR47": {
"defaultMessage": "Submit"
},
"wWLwvh": {
"defaultMessage": "Anon",
"description": "Anonymous Zap"
},
"whSrs+": {
"defaultMessage": "Nostr Public Chat"
},
@ -1713,10 +1706,6 @@
"xIoGG9": {
"defaultMessage": "Go to"
},
"xQtL3v": {
"defaultMessage": "Unlock",
"description": "Unlock wallet"
},
"xSoIUU": {
"defaultMessage": "Worker Relay"
},
@ -1744,6 +1733,9 @@
"y1Z3or": {
"defaultMessage": "Language"
},
"yAztTU": {
"defaultMessage": "{n} eSats"
},
"yCLnBC": {
"defaultMessage": "LNURL or Lightning Address"
},
@ -1771,9 +1763,6 @@
"zvCDao": {
"defaultMessage": "Automatically show latest notes"
},
"zwb6LR": {
"defaultMessage": "<b>Mint:</b> {url}"
},
"zxvhnE": {
"defaultMessage": "Daily"
}

View File

@ -1,6 +1,7 @@
{
"+D82kt": "Are you sure you want to repost: {id}",
"+PzQ9Y": "Payout Now",
"+QM0PJ": "Sync all events for your profile into local cache",
"+UjDmN": "Logged in with write access",
"+Vxixo": "Secret Group Chat",
"+aZY2h": "Zap Type",
@ -13,14 +14,12 @@
"/B8zwF": "Your space the way you want it 😌",
"/GCoTA": "Clear",
"/JE/X+": "Account Support",
"/PCavi": "Public",
"/Xf4UW": "Send anonymous usage metrics",
"/clOBU": "Weekly",
"/d6vEc": "Make your profile easier to find and share",
"/n5KSF": "{n} ms",
"00LcfG": "Load more",
"01iNut": "Nostr address does not belong to you",
"08zn6O": "Export Keys",
"0Azlrb": "Manage",
"0BUTMv": "Search...",
"0HFX0T": "Use Exact Location",
@ -59,7 +58,6 @@
"3qnJlS": "You are voting with {amount} sats",
"3t3kok": "{n,plural,=1{{n} new note} other{{n} new notes}}",
"3tVy+Z": "{n} Followers",
"3yk8fB": "Wallet",
"450Fty": "None",
"47FYwb": "Cancel",
"4IPzdn": "Primary Developers",
@ -77,7 +75,6 @@
"5u6iEc": "Transfer to Pubkey",
"5vMmmR": "Usernames are not unique on Nostr. The nostr address is your unique human-readable address that is unique to you upon registration.",
"5ykRmX": "Send zap",
"6/SF6e": "<h1>{n}</h1> Cashu sats",
"6/hB3S": "Watch Replay",
"62nsdy": "Retry",
"6559gb": "New follow list length {length}",
@ -117,7 +114,6 @@
"Ai8VHU": "Unlimited note retention on Snort relay",
"AkCxS/": "Reason",
"Am8glJ": "Game",
"AnLrRC": "Non-Zap",
"Aujn2T": "Count",
"Awq32I": "Push notifications",
"AxDOiG": "Months",
@ -172,7 +168,6 @@
"FdhSU2": "Claim Now",
"FfYsOb": "An error has occured!",
"FmXUJg": "follows you",
"FvanT6": "Accounts",
"G/yZLu": "Remove",
"G1BGCg": "Select Wallet",
"G3A56c": "Subscribed to Push",
@ -194,9 +189,9 @@
"HWbkEK": "Clear cache and reload",
"HbefNb": "Open Wallet",
"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.",
"HqRNN8": "Support",
"I1AoOu": "Last post {time}",
"IEwZvs": "Are you sure you want to unpin this note?",
"IIOul1": "Account Data",
"IKKHqV": "Follows",
"IOu4Xh": "You must be a {tier} subscriber to access {app} deck",
"IVbtTS": "Zap all {n} sats",
@ -222,10 +217,8 @@
"K3r6DQ": "Delete",
"K7AkdL": "Show",
"KAhAcM": "Enter LNDHub config",
"KHK8B9": "Relay",
"KQvWvD": "Deleted",
"KahimY": "Unknown event kind: {kind}",
"KoFlZg": "Enter mint URL",
"KtsyO0": "Enter Pin",
"LBAnc7": "View as user?",
"LF5kYT": "Other Connections",
@ -263,20 +256,21 @@
"OQSOJF": "Get a free nostr address",
"OQXnew": "You subscription is still active, you can't renew yet",
"ORGv1Q": "Created",
"OoZgbB": "Failed to update, please try again",
"OxPdQ0": "Scanning {date}",
"P2o+ZZ": "Invalid Nostr Address",
"P61BTu": "Copy Event JSON",
"P7FD0F": "System (Default)",
"P7nJT9": "Total today (UTC): {amount} sats",
"PCSt5T": "Preferences",
"PJeJFc": "Summary",
"PXQ0z0": "Receiving to <b>{wallet}</b>",
"PamNxw": "Unknown file header: {name}",
"Pe0ogR": "Theme",
"PrsIg7": "Reactions will be shown on every page, if disabled no reactions will be shown",
"QDFTjG": "{n} Relays",
"QJfhKt": "The private key is like a password, but it cannot be reset. Guard it carefully and never show it to anyone. Once someone has your private key, they will have access to your account forever.",
"QWhotP": "Zap Pool only works if you use one of the supported wallet connections (WebLN, LNC, LNDHub or Nostr Wallet Connect)",
"Qxv0B2": "You currently have {number} sats in your zap pool.",
"R/6nsx": "Subscription",
"R81upa": "People you follow",
"RDha9y": "Service Worker Not Running",
"RSr2uB": "Username must only contain lowercase letters and numbers",
@ -284,6 +278,7 @@
"RfhLwC": "By: {author}",
"RhDAoS": "Are you sure you want to delete {id}",
"RoOyAh": "Relays",
"RrCui3": "Summary",
"Rs4kCE": "Bookmark",
"SLZGPn": "Enter a pin to encrypt your private key, you must enter this pin every time you open {site}.",
"SMO+on": "Send zap to {name}",
@ -305,7 +300,6 @@
"TpgeGw": "Hex Salt..",
"Tpy00S": "People",
"TvKqBp": "liked",
"TwyMau": "Account",
"U1aPPi": "Stop listening",
"UDYlxu": "Pending Subscriptions",
"UJTWqI": "Remove from my relays",
@ -336,11 +330,11 @@
"XICsE8": "File hosts",
"XPB8VV": "Alby wallet connection",
"XQiFEl": "Follows Relay Health",
"XSdWHA": "Redeem",
"XXm7jJ": "Trending Hashtags",
"XgWvGA": "Reactions",
"Xnimz0": "Sending from <b>{wallet}</b>",
"Xopqkl": "Your default zap amount is {number} sats, example values are calculated from this.",
"XrSk2j": "Redeem",
"YDURw6": "Service URL",
"YR2I9M": "No keys, no {app}, There is no way to reset it if you don't back up. It only takes a minute.",
"YXA3AH": "Enable reactions",
@ -385,6 +379,7 @@
"d+6YsV": "Lists to mute:",
"d2ebEu": "Not Subscribed to Push",
"d7d0/x": "LN Address",
"dK2CcV": "The public key is like your username, you can share it with anyone.",
"dOQCL8": "Display name",
"deEeEI": "Register",
"djLctd": "Amount in sats",
@ -427,15 +422,14 @@
"h7jvCs": "{site} is more fun together!",
"h8XMJL": "Badges",
"hF6IN2": "Prune Follow List",
"hMQmIw": "Sync Account",
"hMzcSq": "Messages",
"hRTfTR": "PRO",
"hY4lzx": "Supports",
"hYOE+U": "Invite",
"ha8JKG": "Show graph",
"hicxcO": "Show replies",
"hmZ3Bz": "Media",
"hniz8Z": "here",
"hvFRBo": "Interaction",
"i/dBAR": "Zap Pool",
"i5gBFz": "Your sent and received payments will show up here.",
"iCqGww": "Reactions ({n})",
@ -444,6 +438,7 @@
"iICVoL": "{x} follows ({y} duplicates)",
"iNWbVV": "Handle",
"iXPL0Z": "Can't login with private key on an insecure connection, please use a Nostr key manager extension instead",
"iYc3Ld": "Payments",
"ieGrWo": "Follow",
"ipHVx5": "Generate Invoice",
"itPgxd": "Profile",
@ -469,8 +464,10 @@
"l3H1EK": "Invite your friends",
"lCILNz": "Buy Now",
"lD3+8a": "Pay",
"lEnclp": "My events: {n}",
"lPWASz": "Snort nostr address",
"lTbT3s": "Wallet password",
"lfOesV": "Non-Zap",
"lgg1KN": "account page",
"ll3xBp": "Image proxy service",
"lnaT9F": "Following {n}",
@ -480,6 +477,7 @@
"mKAr6h": "Follow all",
"mKh2HS": "File upload service",
"mKhgP9": "{n,plural,=0{} =1{zapped} other{zapped}}",
"mOFG3K": "Start",
"mfe8RW": "Option: {n}",
"n1Whvj": "Switch",
"nDejmx": "Unblock",
@ -487,6 +485,7 @@
"nGGDsi": "Notifications Allowed",
"nIchMQ": "Searching for account activity ({progress})",
"nUT0Lv": "Tools",
"nWQFic": "Renew",
"nihgfo": "Listen to this article",
"nwZXeh": "{n} blocked",
"o/gK53": "Deck",
@ -500,13 +499,13 @@
"pI+77w": "Downloadable backups from Snort relay",
"pRess9": "ZapPool",
"puLNUJ": "Pin",
"pukxg/": "Payments",
"pzTOmv": "Followers",
"qD9EUF": "Email <> DM bridge for your Snort nostr address",
"qDwvZ4": "Unknown error",
"qMePPG": "Note",
"qMx1sA": "Default Zap amount",
"qUJTsT": "Blocked",
"qXCbgZ": "Unlock",
"qZsKBR": "Renew {tier}",
"qcJFEJ": "Notifications API Disabled",
"qdGuQo": "Your Private Key Is (do not share this with anyone)",
@ -540,6 +539,8 @@
"uCk8r+": "Already have an account?",
"uSV4Ti": "Reposts need to be manually confirmed",
"uc0din": "Send sats splits to",
"ufvXH1": "Found {n} events",
"uhu5aG": "Public",
"un1nGw": "{n} notes",
"usAvMr": "Edit Profile",
"v8lolG": "Start chat",
@ -555,7 +556,6 @@
"w6qrwX": "NSFW",
"wEQDC6": "Edit",
"wSZR47": "Submit",
"wWLwvh": "Anon",
"whSrs+": "Nostr Public Chat",
"wih7iJ": "name is blocked",
"wofVHy": "Moderation",
@ -566,7 +566,6 @@
"xEjBS7": "For you",
"xIcAOU": "Votes by {type}",
"xIoGG9": "Go to",
"xQtL3v": "Unlock",
"xSoIUU": "Worker Relay",
"xaj9Ba": "Provider",
"xbVgIm": "Automatically load media",
@ -576,6 +575,7 @@
"xybOUv": "FAN",
"y/bmsG": "Allow",
"y1Z3or": "Language",
"yAztTU": "{n} eSats",
"yCLnBC": "LNURL or Lightning Address",
"zCb8fX": "Weight",
"zFegDD": "Contact",
@ -585,6 +585,5 @@
"zm6qS1": "{n} mins to read",
"zonsdq": "Failed to load LNURL service",
"zvCDao": "Automatically show latest notes",
"zwb6LR": "<b>Mint:</b> {url}",
"zxvhnE": "Daily"
}

View File

@ -400,7 +400,7 @@
"eSzf2G": "{nIn} satsを1回ザップすると、{nOut} satsがZap Poolに割り当てられます。",
"eXT2QQ": "グループチャット",
"egib+2": "{n,plural,=1{と他 {n} 人} other{と他 {n} 人}}",
"ejEGdx": "Home",
"ejEGdx": "ホーム",
"f1OxTe": "コミュニティーリーダーとは、ローカルコミュニティーで積極的に活動し、新しいユーザーの参加を支援することで、nostrのエコシステムを成長させる個人のことです。コミュニティーリーダーには誰でもなることができますが、現在の名誉ある称号を持つ人はほとんどいません。",
"f2CAxA": "出力",
"fBI91o": "ザップ",