chore: meku fixes

This commit is contained in:
2024-04-29 10:21:28 +01:00
parent 9abb236ede
commit a591a3c176
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": "めく", "appNameCapitalized": "めく",
"appTitle": "めく", "appTitle": "めく",
"hostname": "meku.app", "hostname": "meku.app",
@ -26,7 +26,8 @@
}, },
"defaultPreferences": { "defaultPreferences": {
"hideMutedNotes": false, "hideMutedNotes": false,
"defaultRootTab": "following" "defaultRootTab": "following",
"language": "ja"
}, },
"media": { "media": {
"bypassImgProxyError": false, "bypassImgProxyError": false,

View File

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

View File

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

View File

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

View File

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