1import { fetchJSON } from "https://esm.town/v/stevekrouse/fetchJSON?v=41";
2
3export const gsheet_call = async (service_account, sheet_id, method, action, data) => {
9 };
10 const token = await getToken(service_account, googleAuthOptions);
11 const result = fetchJSON(
12 `https://sheets.googleapis.com/v4/spreadsheets/${sheet_id}/${action}`,
13 {
1/** @jsxImportSource https://esm.sh/hono@4.0.8/jsx **/
2
3import { modifyFetchHandler } from "https://esm.town/v/andreterron/codeOnValTown?v=50";
4import view_route from "https://esm.town/v/pomdtr/blob_admin_blob";
5import create_route from "https://esm.town/v/pomdtr/blob_admin_create";
137});
138
139export default modifyFetchHandler(passwordAuth(app.fetch));
5
6export const resumeConfig = {
7 // URL to fetch the resume JSON data. This should point to your raw resume JSON.
8 // If you want to host your resume JSON somewhere I recommend a setup like this on val town (https://www.val.town/v/iamseeley/resumeDetails) or a github gist.
9 // You can test out the resume view using my resume: https://iamseeley-resumedetails.web.val.run
1/** @jsxImportSource https://esm.sh/hono@latest/jsx **/
2
3import { modifyFetchHandler } from "https://esm.town/v/andreterron/codeOnValTown?v=50";
4import { iframeHandler } from "https://esm.town/v/nbbaier/iframeHandler";
5import { resetStyle } from "https://esm.town/v/nbbaier/resetStyle";
16import { verifyToken } from "https://esm.town/v/pomdtr/verifyToken";
17import { ResultSet, sqlite } from "https://esm.town/v/std/sqlite";
18import { reloadOnSaveFetchMiddleware } from "https://esm.town/v/stevekrouse/reloadOnSave";
19import { Hono } from "npm:hono";
20import type { FC } from "npm:hono/jsx";
175});
176
177export const handler = app.fetch;
178export default iframeHandler(modifyFetchHandler(passwordAuth(handler, { verifyPassword: verifyToken })));
102 tokenUrl.searchParams.set("state", store.state);
103
104 const tokenResp = await fetch(tokenUrl.toString());
105 if (!tokenResp.ok) {
106 throw new Error(await tokenResp.text());
111 };
112
113 const resp = await fetch("https://lastlogin.io/userinfo", {
114 headers: {
115 Authorization: `Bearer ${access_token}`,
44
45 useEffect(() => {
46 fetchAnswersAndRankings();
47 }, [user]);
48
49 const fetchAnswersAndRankings = async () => {
50 if (user) {
51 const response = await fetch("/api/answers");
52 const data = await response.json();
53 setAnswers(data.answers);
59 const saveAnswer = useCallback(async (newAnswer: Answer, losingAnswer: string) => {
60 if (user) {
61 await fetch("/api/answer", {
62 method: "POST",
63 headers: { "Content-Type": "application/json" },
64 body: JSON.stringify({ ...newAnswer, losingAnswer }),
65 });
66 fetchAnswersAndRankings();
67 }
68 }, [user]);
70 const clearAnswers = useCallback(async () => {
71 if (user) {
72 await fetch("/api/clear-answers", { method: "POST" });
73 setAnswers([]);
74 setRankings([]);
242 const handleLogin = useCallback(async (e: React.FormEvent) => {
243 e.preventDefault();
244 const response = await fetch("/api/login", {
245 method: "POST",
246 headers: { "Content-Type": "application/json" },
34
35 useEffect(() => {
36 fetchOffers();
37 }, []);
38
52 }, [selectedOffer]);
53
54 const fetchOffers = async () => {
55 try {
56 const response = await fetch("/offers");
57 if (response.ok) {
58 const data = await response.json();
64 setOffers(validOffers);
65 } else {
66 console.error("Failed to fetch offers");
67 }
68 } catch (error) {
69 console.error("Error fetching offers:", error);
70 }
71 };
96 };
97 try {
98 const response = await fetch("/offers", {
99 method: "POST",
100 headers: { "Content-Type": "application/json" },
102 });
103 if (response.ok) {
104 fetchOffers();
105 setNewOffer({ lender: "", rate: 0, term: 30, closingCosts: 0 });
106 } else {
114 const handleDelete = async (id: string) => {
115 try {
116 const response = await fetch(`/offers/${id}`, { method: "DELETE" });
117 if (response.ok) {
118 fetchOffers();
119 } else {
120 console.error("Failed to delete offer");
1import { fetch } from "https://esm.town/v/std/fetch";
2
3export async function extractText(data, name) {
4 const fileUrl =
5 "https://www.gcmgrosvenor.com/wp-content/uploads/Private-Credit-Co-investing-GCM-Grosvenor.pdf";
6 const blob = await fetch(fileUrl).then((r) => r.blob());
7 const pdfjs = await import("npm:pdfjs-dist"); //https://www.npmjs.com/package/pdf-to-text
8 return Object.keys(pdfjs);
14 try {
15 const sanitizedPhoneNumber = phoneNumber.replace(/\D/g, "");
16 const response = await fetch("/submit", {
17 method: "POST",
18 headers: { "Content-Type": "application/json" },
75 // submit to relayUrl/register as a post with phone in json body
76 // use shared secret as bearer auth
77 const response = await fetch(relayURL + "/register", {
78 method: "POST",
79 headers: {
2 * This val creates an enhanced NPM package explorer using the npm registry API.
3 * It displays a grid of npm packages with basic information, categories, and navigation.
4 * The approach uses React for the frontend and fetch for API calls.
5 * It includes a details view for each package, a link to the npm page, and category navigation.
6 * Icons are added for each category, and additional pill boxes are included for specific topics.
106 const [loading, setLoading] = useState(false);
107
108 const fetchPackages = useCallback(async () => {
109 setLoading(true);
110 let url = `/search?q=${encodeURIComponent(searchTerm)}&size=${ITEMS_PER_PAGE}&from=${(page - 1) * ITEMS_PER_PAGE}`;
113 }
114 try {
115 const response = await fetch(url);
116 const data = await response.json();
117 setPackages(data.objects || []);
118 } catch (error) {
119 console.error("Error fetching packages:", error);
120 setPackages([]);
121 } finally {
125
126 useEffect(() => {
127 fetchPackages();
128 }, [fetchPackages]);
129
130 const handleSearch = (e) => {
131 e.preventDefault();
132 setPage(1);
133 fetchPackages();
134 };
135
289
290 try {
291 const response = await fetch(apiUrl);
292 const data = await response.json();
293 return new Response(JSON.stringify(data), {
295 });
296 } catch (error) {
297 console.error("Error fetching from npm registry:", error);
298 return new Response(JSON.stringify({ objects: [] }), {
299 status: 500,