// _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 };