Val Town Code SearchReturn to Val Town

API Access

You can access search results via JSON API by adding format=json to your query:

https://codesearch.val.run/$%7BsvgDataUrl%7D?q=api&page=5&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 18960 results for "api"(2809ms)

cardamonindex.ts5 matches

@connnollyโ€ขUpdated 12 hours ago
15await runMigrations();
16
17// API routes
18app.route('/api/recipes', recipesRoutes);
19app.route('/api/parse', parseRoutes);
20
21// Health check endpoint
22app.get('/api/health', (c) => {
23 return c.json({ status: 'ok', timestamp: new Date().toISOString() });
24});
25
26// Test delete endpoint
27app.get('/api/test-delete', async (c) => {
28 try {
29 const { createRecipe, deleteRecipe, getAllRecipes } = await import('./database/queries.ts');

cardamonRecipeView.tsx1 match

@connnollyโ€ขUpdated 13 hours ago
34 const handleDelete = async () => {
35 try {
36 const response = await fetch(`/api/recipes/${recipe.id}`, {
37 method: 'DELETE'
38 });

cardamonRecipeList.tsx1 match

@connnollyโ€ขUpdated 13 hours ago
48 const handleDelete = async (recipeId: number) => {
49 try {
50 const response = await fetch(`/api/recipes/${recipeId}`, {
51 method: 'DELETE'
52 });

cardamonApp.tsx1 match

@connnollyโ€ขUpdated 13 hours ago
33 setState(prev => ({ ...prev, loading: true, error: null }));
34 try {
35 const response = await fetch('/api/recipes');
36 const data = await response.json();
37

cardamonrecipes.ts20 matches

@connnollyโ€ขUpdated 13 hours ago
1import { Hono } from "https://esm.sh/hono@3.11.7";
2import type { Recipe, RecipeFilters, ApiResponse } from "../../shared/types.ts";
3import {
4 createRecipe,
28
29 const recipes = await getAllRecipes(filters);
30 return c.json({ success: true, data: recipes } as ApiResponse<Recipe[]>);
31 } catch (error) {
32 console.error('Error fetching recipes:', error);
33 return c.json({ success: false, error: 'Failed to fetch recipes' } as ApiResponse, 500);
34 }
35});
40 const id = parseInt(c.req.param('id'));
41 if (isNaN(id)) {
42 return c.json({ success: false, error: 'Invalid recipe ID' } as ApiResponse, 400);
43 }
44
45 const recipe = await getRecipeById(id);
46 if (!recipe) {
47 return c.json({ success: false, error: 'Recipe not found' } as ApiResponse, 404);
48 }
49
50 return c.json({ success: true, data: recipe } as ApiResponse<Recipe>);
51 } catch (error) {
52 console.error('Error fetching recipe:', error);
53 return c.json({ success: false, error: 'Failed to fetch recipe' } as ApiResponse, 500);
54 }
55});
65 success: false,
66 error: 'Missing required fields: title, ingredients, and steps are required'
67 } as ApiResponse, 400);
68 }
69
72 success: false,
73 error: 'At least one ingredient is required'
74 } as ApiResponse, 400);
75 }
76
79 success: false,
80 error: 'At least one cooking step is required'
81 } as ApiResponse, 400);
82 }
83
84 const recipe = await createRecipe(recipeData);
85 return c.json({ success: true, data: recipe } as ApiResponse<Recipe>, 201);
86 } catch (error) {
87 console.error('Error creating recipe:', error);
88 return c.json({ success: false, error: 'Failed to create recipe' } as ApiResponse, 500);
89 }
90});
95 const id = parseInt(c.req.param('id'));
96 if (isNaN(id)) {
97 return c.json({ success: false, error: 'Invalid recipe ID' } as ApiResponse, 400);
98 }
99
102 const recipe = await updateRecipe(id, updates);
103 if (!recipe) {
104 return c.json({ success: false, error: 'Recipe not found' } as ApiResponse, 404);
105 }
106
107 return c.json({ success: true, data: recipe } as ApiResponse<Recipe>);
108 } catch (error) {
109 console.error('Error updating recipe:', error);
110 return c.json({ success: false, error: 'Failed to update recipe' } as ApiResponse, 500);
111 }
112});
117 const id = parseInt(c.req.param('id'));
118 if (isNaN(id)) {
119 return c.json({ success: false, error: 'Invalid recipe ID' } as ApiResponse, 400);
120 }
121
122 const deleted = await deleteRecipe(id);
123 if (!deleted) {
124 return c.json({ success: false, error: 'Recipe not found' } as ApiResponse, 404);
125 }
126
127 return c.json({ success: true, data: { deleted: true } } as ApiResponse);
128 } catch (error) {
129 console.error('Error deleting recipe:', error);
130 return c.json({ success: false, error: 'Failed to delete recipe' } as ApiResponse, 500);
131 }
132});

cardamontypes.ts1 match

@connnollyโ€ขUpdated 13 hours ago
38}
39
40export interface ApiResponse<T = any> {
41 success: boolean;
42 data?: T;

cardamonREADME.md11 matches

@connnollyโ€ขUpdated 13 hours ago
20
21- **Frontend**: React with TypeScript, TailwindCSS
22- **Backend**: Hono API framework
23- **Database**: SQLite for recipe storage
24- **AI**: OpenAI GPT-4 for intelligent recipe parsing
35โ”‚ โ”‚ โ”œโ”€โ”€ recipes.ts # Recipe CRUD operations
36โ”‚ โ”‚ โ””โ”€โ”€ parse.ts # Recipe parsing endpoints
37โ”‚ โ””โ”€โ”€ index.ts # Main API entry point
38โ”œโ”€โ”€ frontend/
39โ”‚ โ”œโ”€โ”€ components/
48```
49
50## API Endpoints
51
52- `POST /api/parse/url` - Parse recipe from URL
53- `POST /api/parse/pdf` - Parse recipe from PDF
54- `POST /api/parse/image` - Parse recipe from image
55- `GET /api/recipes` - Get all recipes
56- `POST /api/recipes` - Save a recipe
57- `GET /api/recipes/:id` - Get specific recipe
58- `PUT /api/recipes/:id` - Update recipe
59- `DELETE /api/recipes/:id` - Delete recipe
60
61## Usage

zerto-lifecycle-matrixREADME.md1 match

@captn3m0โ€ขUpdated 13 hours ago
5Generated using Val.town
6
7Relies on the Zoomin Software bundle API to fetch the data using the JSON API, and then pluck and render the HTML part.

zerto-lifecycle-matrixmain.tsx1 match

@captn3m0โ€ขUpdated 13 hours ago
1export default async function (req: Request): Promise<Response> {
2 try {
3 const response = await fetch("https://help-be.zerto.com/api/bundle/Lifecycle.Matrix.HTML/page/product_version_lifecycle_matrix_for_zerto.html");
4
5 if (!response.ok) {

Loudaily_lineup_scheduler.tsx24 matches

@jeffvincentโ€ขUpdated 14 hours ago
22}
23
24export interface YahooAPIConfig {
25 access_token: string;
26 refresh_token: string;
99 }
100
101 // Initialize Yahoo Fantasy API client
102 const yahooAPI = new YahooFantasyAPIClient(tokenData, this.tokenStorage, userId);
103
104 // Get user's leagues
105 const leagues = await yahooAPI.getUserLeagues(userId);
106 console.log(`๐ŸŸ๏ธ Found ${leagues.length} leagues for user ${userId}`);
107
111
112 // Get user's team in this league
113 const teamKey = await yahooAPI.getTeamKey(userId, league.league_id);
114 if (!teamKey) {
115 throw new Error(`Could not find team key for league ${league.league_id}`);
117
118 // Schedule pitchers for today
119 const scheduleResult = await this.schedulePitchersForTeam(yahooAPI, teamKey, date);
120
121 results.leagues_processed.push({
139 }
140
141 private async schedulePitchersForTeam(yahooAPI: YahooFantasyAPIClient, teamKey: string, date: Date) {
142 // Get today's probable pitchers from MLB API
143 const probablePitchers = await this.getTodaysProbablePitchers(date);
144 console.log(`๐ŸŽฏ Found ${probablePitchers.length} probable pitchers for ${date.toDateString()}`);
145
146 // Get current team roster
147 const roster = await yahooAPI.getTeamRoster(teamKey);
148 console.log(`๐Ÿ‘ฅ Team roster has ${roster.length} players`);
149
166 for (const change of optimization.changes) {
167 try {
168 await yahooAPI.setPlayerPosition(teamKey, change.playerId, change.newPosition);
169 results.pitchers_scheduled.push(change.playerId);
170 results.changes_made.push(change);
186 ): Promise<Array<{ name: string; team: string; game_time?: string }>> {
187 try {
188 // Call MLB Stats API for probable pitchers
189 const dateStr = date.toISOString().split("T")[0];
190 const response = await fetch(
191 `https://statsapi.mlb.com/api/v1/schedule?sportId=1&date=${dateStr}&hydrate=probablePitcher`,
192 );
193
194 if (!response.ok) {
195 throw new Error(`MLB API error: ${response.status}`);
196 }
197
440}
441
442// Simplified Yahoo Fantasy API client for Val.town
443class YahooFantasyAPIClient {
444 private config: YahooAPIConfig;
445 private baseUrl = "https://fantasysports.yahooapis.com/fantasy/v2";
446 private tokenStorage: LouTokenStorage;
447 private userId: string;
448
449 constructor(config: YahooAPIConfig, tokenStorage: LouTokenStorage, userId: string) {
450 this.config = config;
451 this.tokenStorage = tokenStorage;
465 private async refreshAccessToken(): Promise<void> {
466 try {
467 const response = await fetch("https://api.login.yahoo.com/oauth2/get_token", {
468 method: "POST",
469 headers: {
551
552 if (!retryResponse.ok) {
553 throw new Error(`Yahoo API error after refresh: ${retryResponse.status} ${retryResponse.statusText}`);
554 }
555
558
559 if (!response.ok) {
560 throw new Error(`Yahoo API error: ${response.status} ${response.statusText}`);
561 }
562
744 await this.ensureValidToken();
745
746 // Yahoo Fantasy API requires XML for roster changes
747 const dateStr = new Date().toISOString().split("T")[0];
748
776 if (!response.ok) {
777 const responseText = await response.text();
778 console.error(`โŒ Yahoo API error response: ${responseText}`);
779 throw new Error(`Failed to set player position: ${response.status} ${response.statusText}`);
780 }
796
797 // Store results in Val.town's blob storage for history
798 await fetch("https://api.val.town/v1/blob/scheduler_results", {
799 method: "POST",
800 headers: {

beeminder-api4 file matches

@cricks_unmixed4uโ€ขUpdated 16 hours ago

shippingAPI1 file match

@dynamic_silverโ€ขUpdated 1 day ago
apiry
snartapi