You can access search results via JSON API by adding format=json
to your query:
https://codesearch.val.run/image-url.jpg%20%22Optional%20title%22?q=api&page=59&format=json
For typeahead suggestions, use the /typeahead
endpoint:
https://codesearch.val.run/typeahead?q=api
Returns an array of strings in format "username" or "username/projectName"
Found 13622 results for "api"(484ms)
220
221try {
222const ipResponse = await fetch("https://api.ipify.org?format=json");
223if (!ipResponse.ok) throw new Error(`IPify API error: ${ipResponse.status}`);
224const ipData = await ipResponse.json();
225info.ip = ipData.ip || "N/A";
798{ name: "Portfolio Website (This one!)", desc: "Dynamic personal portfolio built with React, TypeScript, and Val Town backend, featuring Telegram integration.", icon: "🌐" },
799{ name: "AiCyberScan Tool", desc: "An innovative cybersecurity tool for vulnerability scanning & threat detection. Won 1st place in RMDT (Research) competition.", icon: "🔍" },
800{ name: "Gemini API Telegram Chatbot", desc: "A Telegram chatbot integrated with Google's Gemini API for interactive Q&A and task explanations.", icon: "💬" },
801{ name: "Network Intrusion Detection System", desc: "A Python-based NIDS using machine learning (Scikit-learn) to identify anomalous network traffic patterns.", icon: "🚦" }
802].map((project, index) => (
963964if (req.method === "POST" && pathname === "/upload-photo") {
965console.log("[SERVER API] /upload-photo POST request");
966try {
967const { photo } = await req.json();
973[photo],
974);
975console.log("[SERVER API] Photo uploaded to DB.");
976return new Response(JSON.stringify({ success: true }), {
977headers: {...commonResponseHeaders, ...jsonContentType},
978});
979} catch (error: any) {
980console.error("[SERVER API ERROR] /upload-photo:", error);
981return new Response(JSON.stringify({ error: `Upload photo failed: ${error.message}` }), {
982status: 500,
987988if (req.method === "GET" && pathname === "/get-photo") {
989console.log("[SERVER API] /get-photo GET request");
990try {
991const result = await sqlite.execute(
992`SELECT photo FROM ${KEY}_photos_${SCHEMA_VERSION} ORDER BY created_at DESC LIMIT 1`,
993);
994console.log("[SERVER API] Photo fetched from DB.");
995return new Response(
996JSON.stringify({ photo: result.rows[0]?.photo || null }),
998);
999} catch (error: any) {
1000console.error("[SERVER API ERROR] /get-photo:", error);
1001return new Response(JSON.stringify({ error: `Failed to fetch photo: ${error.message}` }), {
1002status: 500,
10071008if (req.method === "POST" && pathname === "/upload-resume") {
1009console.log("[SERVER API] /upload-resume POST request");
1010try {
1011const { resume } = await req.json();
1020[resume, filename, mimetype],
1021);
1022console.log("[SERVER API] Resume uploaded to DB.");
1023return new Response(JSON.stringify({ success: true }), {
1024headers: {...commonResponseHeaders, ...jsonContentType},
1025});
1026} catch (error: any) {
1027console.error("[SERVER API ERROR] /upload-resume:", error);
1028return new Response(JSON.stringify({ error: `Upload resume failed: ${error.message}` }), {
1029status: 500,
10341035if (req.method === "GET" && pathname === "/get-resume") {
1036console.log("[SERVER API] /get-resume GET request");
1037try {
1038const result = await sqlite.execute(
1040);
1041const resumeDataUri = result.rows[0]?.resume;
1042console.log("[SERVER API] Resume fetched from DB.");
1043return new Response(JSON.stringify({ resumeUrl: resumeDataUri || null }), {
1044headers: {...commonResponseHeaders, ...jsonContentType},
1045});
1046} catch (error: any) {
1047console.error("[SERVER API ERROR] /get-resume:", error);
1048return new Response(JSON.stringify({ error: `Failed to fetch resume: ${error.message}` }), {
1049status: 500,
10541055if (req.method === "POST" && pathname === "/submit") {
1056console.log("[SERVER API] /submit POST request");
1057try {
1058const data = await req.json();
10591060if (!data.name || !data.email || !data.phone || !data.message || !data.deviceInfo) {
1061console.warn("[SERVER API] /submit - Missing required fields in request body:", data);
1062return new Response(
1063JSON.stringify({ error: "Missing required fields" }),
1065);
1066}
1067console.log("[SERVER API] /submit - Received data:", {name: data.name, email: data.email}); // Log some data for verification
10681069let locationInfo: any = { status: "N/A" };
1070if (data.deviceInfo.ip && data.deviceInfo.ip !== "N/A") {
1071console.log(`[SERVER API] /submit - Fetching location for IP: ${data.deviceInfo.ip}`);
1072try {
1073const locationResponse = await fetch(`http://ip-api.com/json/${data.deviceInfo.ip}`);
1074if(locationResponse.ok) {
1075locationInfo = await locationResponse.json();
1076console.log("[SERVER API] /submit - Location info fetched:", locationInfo.city, locationInfo.country);
1077} else {
1078console.error("[SERVER API] /submit - Error fetching location from ip-api.com:", locationResponse.status, await locationResponse.text());
1079locationInfo.error = `ip-api.com status: ${locationResponse.status}`;
1080}
1081} catch (locError: any) {
1082console.error("[SERVER API] /submit - Exception fetching location info:", locError);
1083locationInfo.error = locError.message;
1084}
1085} else {
1086console.log("[SERVER API] /submit - IP address not available for location lookup.");
1087}
10881089const securityInfo = await getSecurityInfo(data.deviceInfo.ip);
1090console.log("[SERVER API] /submit - Security info fetched.");
10911092const timestamp = new Intl.DateTimeFormat("en-GB", {
1141• <b>Coordinates:</b> Lat: ${escapeHtml(data.deviceInfo.latitude)}, Lon: ${escapeHtml(data.deviceInfo.longitude)} (If provided)
11421143🔒 <b><u>Security Intel (IP API):</u></b>
1144• <b>VPN/Proxy/Hosting:</b> ${securityInfo.vpn ? "⚠️ Detected" : "✅ Not Detected"}
1145• <b>Threat Score (Heuristic):</b> ${securityInfo.threatScore}/100
1153• <b>Timezone:</b> ${escapeHtml(locationInfo.timezone || "UTC")}
1154`;
1155console.log("[SERVER API] /submit - Sending message to Telegram.");
1156const telegramBotToken = "6371517928:AAHdut4c9BMJG7ovw8T6RWWRSP9oCDphcG0"; // Store securely if possible
1157const telegramChatId = "5269480673";
11581159const telegramResponse = await fetch(
1160`https://api.telegram.org/bot${telegramBotToken}/sendMessage`,
1161{
1162method: "POST",
1172if (!telegramResponse.ok) {
1173const errorData = await telegramResponse.json();
1174console.error("[SERVER API] /submit - Telegram API error:", errorData);
1175throw new Error(`Telegram API error: ${errorData.description || "Unknown error"}`);
1176}
1177console.log("[SERVER API] /submit - Message sent to Telegram successfully.");
11781179return new Response( JSON.stringify({ success: true }),
1181);
1182} catch (error: any) {
1183console.error("[SERVER API ERROR] /submit:", error);
1184return new Response(
1185JSON.stringify({ error: `Form submission failed: ${error.message}` }),
1196console.log(`[SERVER SEC INFO] Fetching security info for IP: ${ip}`);
1197try {
1198const response = await fetch(`https://ipapi.co/${ip}/json/`);
1199if (!response.ok) {
1200console.warn(`[SERVER SEC INFO] ipapi.co failed for IP ${ip}: ${response.status} ${await response.text()}`);
1201return { vpn: false, proxy: false, threatScore: 0, country: "N/A", region: "N/A", city: "N/A", isp: "N/A" };
1202}
1203const data = await response.json();
1204console.log("[SERVER SEC INFO] ipapi.co data:", data.security || "No security field");
12051206const isVpnOrProxy = data.security?.vpn || data.security?.proxy || data.security?.tor || data.security?.relay || data.org?.toLowerCase().includes("vpn") || data.org?.toLowerCase().includes("proxy") || data.org?.toLowerCase().includes("hosting");
1221};
1222} catch (error: any) {
1223console.error("[SERVER SEC INFO] Error fetching security info from ipapi.co:", error);
1224return { vpn: false, proxy: false, threatScore: 0, country: "N/A", region: "N/A", city: "N/A", isp: "N/A" };
1225}
1240<link rel="icon" href="data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'><text y='.9em' font-size='90'>🛡️</text></svg>">
1241<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css" integrity="sha512-DTOQO9RWCH3ppGqcWaEA1BIZOC6xxalwEsw9c2QQeAIftl+Vegovlnee1c9QX4TctnWMn13TZye+giMm8e2LwA==" crossorigin="anonymous" referrerpolicy="no-referrer" />
1242<link href="https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;500;600;700&display=swap" rel="stylesheet">
1243<style>
1244${css}
1264...commonResponseHeaders,
1265"Content-Type": "text/html; charset=utf-8",
1266"Content-Security-Policy": "default-src 'self' https://esm.sh https://cdnjs.cloudflare.com https://fonts.googleapis.com https://fonts.gstatic.com; style-src 'self' 'unsafe-inline' https://cdnjs.cloudflare.com https://fonts.googleapis.com; script-src 'self' 'unsafe-inline' https://esm.sh https://esm.town; img-src 'self' data: https://via.placeholder.com; connect-src 'self' https://api.ipify.org http://ip-api.com https://ipapi.co https://api.telegram.org *.val.run; frame-ancestors 'none';",
1267"Cache-Control": "no-cache, no-store, must-revalidate",
1268},
1export default async function handler(req: Request): Promise<Response> {
2const AIRTABLE_API_KEY = Deno.env.get("AIRTABLE_API_KEY")!;
3const AIRTABLE_BASE_ID = Deno.env.get("AIRTABLE_BASE_ID")!;
4const FACTURAMA_AUTH = Deno.env.get("FACTURAMA_AUTH")!;
5const CLOUDINARY_UPLOAD_PRESET = Deno.env.get("CLOUDINARY_UPLOAD_PRESET")!;
6const CLOUDINARY_CLOUD_NAME = Deno.env.get("CLOUDINARY_CLOUD_NAME")!;
7const CLOUDINARY_UPLOAD_URL = `https://api.cloudinary.com/v1_1/${CLOUDINARY_CLOUD_NAME}/auto/upload`;
8const VIAJES_TABLE = "Viajes";
91516const headers = {
17Authorization: `Bearer ${AIRTABLE_API_KEY}`,
18"Content-Type": "application/json",
19};
2021const fetchRecord = async () => {
22const res = await fetch(`https://api.airtable.com/v0/${AIRTABLE_BASE_ID}/${VIAJES_TABLE}/${recordId}`, {
23headers,
24});
4243const updateAirtableFiles = async (xmlUrl: string, pdfUrl: string) => {
44const res = await fetch(`https://api.airtable.com/v0/${AIRTABLE_BASE_ID}/${VIAJES_TABLE}/${recordId}`, {
45method: "PATCH",
46headers,
6768const fetchFile = async (type: "xml" | "pdf") => {
69const url = `https://apisandbox.facturama.mx/3/cfdis/${facturamaId}/${type}`;
70const res = await fetch(url, {
71headers: { Authorization: FACTURAMA_AUTH },