import {z} from 'zod' export type UpdateRecipeStoryModerationRequest = {story_moderation_status: 'draft' | 'approved' | 'rejected'}; export type UpdateApiChefsRecipesRecipeIdStoryModerationArgs = {recipe_id: number, body: UpdateRecipeStoryModerationRequest}; export type UpdateApiChefsRecipesRecipeIdStoryModerationOptions = {baseUrl: string, bearerAuth?: string | undefined, fetch?: typeof fetch | undefined}; export const authoredNutrition = z.object({basis: z.enum(["per_serving", "total"]), values: z.record(z.string(), z.number().nullable())}); export const ccColumnsRequest = z.object({cc_added_sugars: z.boolean().nullable().optional(), cc_additives: z.boolean().nullable().optional(), cc_beverage: z.boolean().nullable().optional(), cc_calcium: z.boolean().nullable().optional(), cc_complexcarbs: z.boolean().nullable().optional(), cc_composite_dish: z.boolean().nullable().optional(), cc_cooked: z.boolean().nullable().optional(), cc_fish: z.boolean().nullable().optional(), cc_fried: z.boolean().nullable().optional(), cc_fruit: z.boolean().nullable().optional(), cc_gluten_free: z.boolean().nullable().optional(), cc_grains: z.boolean().nullable().optional(), cc_healthy_fat: z.boolean().nullable().optional(), cc_high_fiber: z.boolean().nullable().optional(), cc_legume: z.boolean().nullable().optional(), cc_meat: z.boolean().nullable().optional(), cc_non_meat_animal_protein: z.boolean().nullable().optional(), cc_nuts_seeds: z.boolean().nullable().optional(), cc_omega_three: z.boolean().nullable().optional(), cc_plant_based: z.boolean().nullable().optional(), cc_plant_based_whole: z.boolean().nullable().optional(), cc_plant_protein: z.boolean().nullable().optional(), cc_pork: z.boolean().nullable().optional(), cc_poultry: z.boolean().nullable().optional(), cc_processed: z.boolean().nullable().optional(), cc_protein: z.boolean().nullable().optional(), cc_raw: z.boolean().nullable().optional(), cc_redmeat: z.boolean().nullable().optional(), cc_shellfish: z.boolean().nullable().optional(), cc_simplecarbs: z.boolean().nullable().optional(), cc_standalone_food: z.boolean().nullable().optional(), cc_sugar_free: z.boolean().nullable().optional(), cc_sugary_beverage: z.boolean().nullable().optional(), cc_supplement: z.boolean().nullable().optional(), cc_ultraprocessed: z.boolean().nullable().optional(), cc_unhealthy_fat: z.boolean().nullable().optional(), cc_vegetable: z.boolean().nullable().optional(), cc_whole: z.boolean().nullable().optional(), cc_whole_foods: z.boolean().nullable().optional()}); export const nutrientEstimatesRequest = z.object({added_sugars_g: z.number().nullable().optional(), alcohol_g: z.number().nullable().optional(), caffeine_mg: z.number().nullable().optional(), calcium_mg: z.number().nullable().optional(), carbohydrate_g: z.number().nullable().optional(), cholesterol_mg: z.number().nullable().optional(), choline_mg: z.number().nullable().optional(), energy_kcal: z.number().nullable().optional(), fat_g: z.number().nullable().optional(), fattyacids_totalmonounsaturated_g: z.number().nullable().optional(), fattyacids_totalpolyunsaturated_g: z.number().nullable().optional(), fattyacids_totalsaturated_g: z.number().nullable().optional(), fattyacids_totaltrans_g: z.number().nullable().optional(), fiber_g: z.number().nullable().optional(), folate_dfe_ug: z.number().nullable().optional(), grams_per_cubic_inch: z.number().nullable().optional(), insoluble_dietary_fiber_g: z.number().nullable().optional(), iron_mg: z.number().nullable().optional(), magnesium_mg: z.number().nullable().optional(), netcarb_g: z.number().nullable().optional(), niacin_mg: z.number().nullable().optional(), omega_three_fatty_acids_g: z.number().nullable().optional(), pantothenic_acid_mg: z.number().nullable().optional(), phosphorus_mg: z.number().nullable().optional(), polyols_g: z.number().nullable().optional(), potassium_mg: z.number().nullable().optional(), protein_g: z.number().nullable().optional(), riboflavin_mg: z.number().nullable().optional(), selenium_mcg: z.number().nullable().optional(), sodium_mg: z.number().nullable().optional(), soluble_dietary_fiber_g: z.number().nullable().optional(), sugars_g: z.number().nullable().optional(), thiamin_mg: z.number().nullable().optional(), vitamin_a_iu: z.number().nullable().optional(), vitamin_a_rae_ug: z.number().nullable().optional(), vitamin_b12_ug: z.number().nullable().optional(), vitamin_b6_mg: z.number().nullable().optional(), vitamin_c_mg: z.number().nullable().optional(), vitamin_d2d3_ug: z.number().nullable().optional(), vitamin_d_iu: z.number().nullable().optional(), vitamin_e_mg: z.number().nullable().optional(), vitamin_k_ug: z.number().nullable().optional(), water_g: z.number().nullable().optional(), zinc_mg: z.number().nullable().optional()}); export const foodOntologyVTO = z.object({adult_serving_size_g: z.number().nullable().optional(), ghg_equivalent_kg: z.number().nullable().optional(), id: z.number().int().nullable().optional(), levels: z.array(z.string())}); export const nutrientOverridesResponse = z.object({cc_columns: ccColumnsRequest.optional(), created_time: z.string(), metadata: z.record(z.string(), z.unknown()).nullable().optional(), nutrients: nutrientEstimatesRequest.optional(), ontology: foodOntologyVTO.optional(), source_id: z.string(), source_name: z.enum(["patient", "reviewer", "external", "estimate", "validation"]), updated_time: z.string()}); export const nutrientOverrideCollection = z.object({aa_patient: nutrientOverridesResponse.optional(), bb_reviewer: nutrientOverridesResponse.optional(), cc_external: nutrientOverridesResponse.optional(), dd_estimate: nutrientOverridesResponse.optional(), ee_validation: nutrientOverridesResponse.optional()}); export const preparationMethodEnum = z.enum(["", "homemade", "restaurant", "cpg", "store_bought", "other"]); export const recipeIngredientResponse = z.object({calculated_servings: z.number().nullable().optional(), child_recipe_id: z.number().int().nullable().optional(), created_time: z.string().nullable().optional(), custom_item: z.boolean().nullable().optional(), description: z.string(), food_name: z.string(), food_name_alias: z.string().nullable().optional(), food_name_alias_translations: z.object({}).nullable().optional(), food_name_translations: z.object({}).nullable().optional(), group_id: z.number().int().nullable().optional(), id: z.number().int().nullable().optional(), net_serving_size_g: z.number().nullable().optional(), note: z.string().nullable().optional(), nutrient_overrides: nutrientOverrideCollection.optional(), percent_eaten: z.number().nullable().optional(), preparation_method: preparationMethodEnum.optional(), recipe_id: z.number().int().nullable().optional(), rxfood_id: z.string().nullable().optional(), serving_unit_amount: z.number().nullable().optional(), serving_unit_label: z.string().nullable().optional(), serving_unit_label_translations: z.object({}).nullable().optional(), servings: z.number(), sort_order: z.number().int().optional(), updated_time: z.string().nullable().optional()}); export const recipeIngredientGroupResponse = z.object({id: z.number().int(), ingredients: z.array(recipeIngredientResponse), name: z.string(), recipe_id: z.number().int(), sort_order: z.number().int()}); export const recipeNutrition = z.object({added_sugars_g: z.number().nullable().optional(), alcohol_g: z.number().nullable().optional(), caffeine_mg: z.number().nullable().optional(), calcium_mg: z.number().nullable().optional(), carbohydrate_g: z.number().nullable().optional(), cholesterol_mg: z.number().nullable().optional(), choline_mg: z.number().nullable().optional(), energy_kcal: z.number().nullable().optional(), fat_g: z.number().nullable().optional(), fattyacids_totalmonounsaturated_g: z.number().nullable().optional(), fattyacids_totalpolyunsaturated_g: z.number().nullable().optional(), fattyacids_totalsaturated_g: z.number().nullable().optional(), fattyacids_totaltrans_g: z.number().nullable().optional(), fiber_g: z.number().nullable().optional(), folate_dfe_ug: z.number().nullable().optional(), grams_per_cubic_inch: z.number().nullable().optional(), insoluble_dietary_fiber_g: z.number().nullable().optional(), iron_mg: z.number().nullable().optional(), magnesium_mg: z.number().nullable().optional(), netcarb_g: z.number().nullable().optional(), niacin_mg: z.number().nullable().optional(), omega_three_fatty_acids_g: z.number().nullable().optional(), pantothenic_acid_mg: z.number().nullable().optional(), phosphorus_mg: z.number().nullable().optional(), polyols_g: z.number().nullable().optional(), potassium_mg: z.number().nullable().optional(), protein_g: z.number().nullable().optional(), riboflavin_mg: z.number().nullable().optional(), selenium_mcg: z.number().nullable().optional(), servings: z.number().nullable().optional(), sodium_mg: z.number().nullable().optional(), soluble_dietary_fiber_g: z.number().nullable().optional(), sugars_g: z.number().nullable().optional(), thiamin_mg: z.number().nullable().optional(), vitamin_a_iu: z.number().nullable().optional(), vitamin_a_rae_ug: z.number().nullable().optional(), vitamin_b12_ug: z.number().nullable().optional(), vitamin_b6_mg: z.number().nullable().optional(), vitamin_c_mg: z.number().nullable().optional(), vitamin_d2d3_ug: z.number().nullable().optional(), vitamin_d_iu: z.number().nullable().optional(), vitamin_e_mg: z.number().nullable().optional(), vitamin_k_ug: z.number().nullable().optional(), water_g: z.number().nullable().optional(), zinc_mg: z.number().nullable().optional()}); export const recipeDuration = z.object({display_text: z.string().nullable().optional(), minutes: z.number().int().nullable().optional()}); export const recipeDetails = z.object({cook_time: recipeDuration.optional(), extras: z.object({}).nullable().optional(), prep_time: recipeDuration.optional()}); export const recipeStory = z.object({contributors: z.array(z.object({name: z.string().max(200), role: z.string().max(200).nullable().optional()})).nullable().optional(), origin: z.object({country: z.string().max(200).nullable().optional(), cuisine: z.string().max(200).nullable().optional(), region: z.string().max(200).nullable().optional()}).nullable().optional(), text: z.string().max(4000).nullable().optional()}); export const usdaNutritionResponse = z.object({acetic_acid_g: z.number().nullable().optional(), added_sugars_g: z.number().nullable().optional(), alanine_g: z.number().nullable().optional(), alcohol_g: z.number().nullable().optional(), alpha_linolenic_acid_g: z.number().nullable().optional(), alpha_tocopherol_mg: z.number().nullable().optional(), arginine_g: z.number().nullable().optional(), ash_g: z.number().nullable().optional(), aspartic_acid_g: z.number().nullable().optional(), beta_sitosterol_mg: z.number().nullable().optional(), beta_tocopherol_mg: z.number().nullable().optional(), caffeine_mg: z.number().nullable().optional(), calcium_mg: z.number().nullable().optional(), campesterol_mg: z.number().nullable().optional(), carbohydrate_g: z.number().nullable().optional(), carotene_alpha_ug: z.number().nullable().optional(), carotene_beta_ug: z.number().nullable().optional(), cholesterol_mg: z.number().nullable().optional(), choline_mg: z.number().nullable().optional(), chromium_ug: z.number().nullable().optional(), citric_acid_g: z.number().nullable().optional(), copper_mg: z.number().nullable().optional(), cryptoxanthin_beta_ug: z.number().nullable().optional(), cystine_g: z.number().nullable().optional(), delta_tocopherol_mg: z.number().nullable().optional(), energy_kcal: z.number().nullable().optional(), energy_kj: z.number().nullable().optional(), erythritol_g: z.number().nullable().optional(), fat_g: z.number().nullable().optional(), fattyacid_10_0_g: z.number().nullable().optional(), fattyacid_12_0_g: z.number().nullable().optional(), fattyacid_14_0_g: z.number().nullable().optional(), fattyacid_14_1_g: z.number().nullable().optional(), fattyacid_15_0_g: z.number().nullable().optional(), fattyacid_15_1_g: z.number().nullable().optional(), fattyacid_16_0_g: z.number().nullable().optional(), fattyacid_16_1_g: z.number().nullable().optional(), fattyacid_17_0_g: z.number().nullable().optional(), fattyacid_17_1_g: z.number().nullable().optional(), fattyacid_18_0_g: z.number().nullable().optional(), fattyacid_18_1_g: z.number().nullable().optional(), fattyacid_18_2_g: z.number().nullable().optional(), fattyacid_18_3_g: z.number().nullable().optional(), fattyacid_18_4_g: z.number().nullable().optional(), fattyacid_20_0_g: z.number().nullable().optional(), fattyacid_20_1_g: z.number().nullable().optional(), fattyacid_20_4_g: z.number().nullable().optional(), fattyacid_20_5_n3_g: z.number().nullable().optional(), fattyacid_22_0_g: z.number().nullable().optional(), fattyacid_22_1_g: z.number().nullable().optional(), fattyacid_22_5_n3_g: z.number().nullable().optional(), fattyacid_22_6_n3_g: z.number().nullable().optional(), fattyacid_24_0_g: z.number().nullable().optional(), fattyacid_24_1_g: z.number().nullable().optional(), fattyacid_4_0_g: z.number().nullable().optional(), fattyacid_6_0_g: z.number().nullable().optional(), fattyacid_8_0_g: z.number().nullable().optional(), fattyacids_totalmonounsaturated_g: z.number().nullable().optional(), fattyacids_totalpolyunsaturated_g: z.number().nullable().optional(), fattyacids_totalsaturated_g: z.number().nullable().optional(), fattyacids_totaltrans_g: z.number().nullable().optional(), fattyacids_trans_monoenoic_g: z.number().nullable().optional(), fattyacids_trans_polyenoic_g: z.number().nullable().optional(), fiber_g: z.number().nullable().optional(), fluoride_ug: z.number().nullable().optional(), folate_dfe_ug: z.number().nullable().optional(), folate_food_ug: z.number().nullable().optional(), folate_total_ug: z.number().nullable().optional(), folic_acid_ug: z.number().nullable().optional(), fructose_g: z.number().nullable().optional(), galactose_g: z.number().nullable().optional(), gamma_tocopherol_mg: z.number().nullable().optional(), glucose_g: z.number().nullable().optional(), glutamic_acid_g: z.number().nullable().optional(), glycine_g: z.number().nullable().optional(), grams_per_cubic_inch: z.number().nullable().optional(), histidine_g: z.number().nullable().optional(), hydroxyproline_g: z.number().nullable().optional(), insoluble_dietary_fiber_g: z.number().nullable().optional(), iodine_ug: z.number().nullable().optional(), iron_mg: z.number().nullable().optional(), isoleucine_g: z.number().nullable().optional(), isomalt_g: z.number().nullable().optional(), lactic_acid_g: z.number().nullable().optional(), lactitol_g: z.number().nullable().optional(), lactose_g: z.number().nullable().optional(), leucine_g: z.number().nullable().optional(), linoleic_acid_g: z.number().nullable().optional(), lutein_zeaxanthin_ug: z.number().nullable().optional(), lycopene_ug: z.number().nullable().optional(), lysine_g: z.number().nullable().optional(), magnesium_mg: z.number().nullable().optional(), malic_acid_g: z.number().nullable().optional(), maltitol_g: z.number().nullable().optional(), maltose_g: z.number().nullable().optional(), manganese_mg: z.number().nullable().optional(), mannitol_g: z.number().nullable().optional(), methionine_g: z.number().nullable().optional(), molybdenum_ug: z.number().nullable().optional(), netcarb_g: z.number().nullable().optional(), niacin_mg: z.number().nullable().optional(), nitrogen_g: z.number().nullable().optional(), omega_six_fatty_acids_g: z.number().nullable().optional(), omega_three_fatty_acids_g: z.number().nullable().optional(), pantothenic_acid_mg: z.number().nullable().optional(), phenylalanine_g: z.number().nullable().optional(), phosphorus_mg: z.number().nullable().optional(), phytosterols_mg: z.number().nullable().optional(), polyols_g: z.number().nullable().optional(), potassium_mg: z.number().nullable().optional(), proline_g: z.number().nullable().optional(), protein_g: z.number().nullable().optional(), retinol_ug: z.number().nullable().optional(), riboflavin_mg: z.number().nullable().optional(), selenium_mcg: z.number().nullable().optional(), serine_g: z.number().nullable().optional(), sodium_mg: z.number().nullable().optional(), soluble_dietary_fiber_g: z.number().nullable().optional(), sorbitol_g: z.number().nullable().optional(), starch_g: z.number().nullable().optional(), stigmasterol_mg: z.number().nullable().optional(), sucrose_g: z.number().nullable().optional(), sugars_g: z.number().nullable().optional(), theobromine_mg: z.number().nullable().optional(), thiamin_mg: z.number().nullable().optional(), threonine_g: z.number().nullable().optional(), total_sterols_mg: z.number().nullable().optional(), tryptophan_g: z.number().nullable().optional(), tyrosine_g: z.number().nullable().optional(), usda_id: z.number().int().nullable().optional(), valine_g: z.number().nullable().optional(), vitamin_a_iu: z.number().nullable().optional(), vitamin_a_rae_ug: z.number().nullable().optional(), vitamin_b12_added_ug: z.number().nullable().optional(), vitamin_b12_ug: z.number().nullable().optional(), vitamin_b6_mg: z.number().nullable().optional(), vitamin_c_mg: z.number().nullable().optional(), vitamin_d2_ug: z.number().nullable().optional(), vitamin_d2d3_ug: z.number().nullable().optional(), vitamin_d3_ug: z.number().nullable().optional(), vitamin_d_iu: z.number().nullable().optional(), vitamin_e_added_mg: z.number().nullable().optional(), vitamin_e_mg: z.number().nullable().optional(), vitamin_k_dihydrophylloquinone_ug: z.number().nullable().optional(), vitamin_k_menaquinone_ug: z.number().nullable().optional(), vitamin_k_ug: z.number().nullable().optional(), water_g: z.number().nullable().optional(), xylitol_g: z.number().nullable().optional(), zinc_mg: z.number().nullable().optional()}); export const recipeResponse = z.object({author: z.string().nullable().optional(), authored_nutrition: authoredNutrition.optional(), calculated_servings: z.number().nullable().optional(), calculation_version: z.string().nullable().optional(), cc_columns: ccColumnsRequest.optional(), cc_override_keys: z.array(z.string()).nullable().optional(), chef_id: z.number().int().nullable().optional(), curation_status: z.enum(["draft", "published", "archived"]).optional(), custom_item: z.boolean().nullable().optional(), filter_tags: z.array(z.string()).nullable().optional(), food_name: z.string().nullable().optional(), food_name_alias: z.string().nullable().optional(), food_name_alias_translations: z.object({}).nullable().optional(), food_name_translations: z.object({}).nullable().optional(), forked_from_recipe_id: z.number().int().nullable().optional(), id: z.number(), image_url: z.string().nullable().optional(), ingredient_groups: z.array(recipeIngredientGroupResponse).optional(), ingredient_responses: z.array(recipeIngredientResponse).optional(), ingredients: z.array(z.string()), instructions_str: z.string().nullable().optional(), internal_notes: z.string().nullable().optional(), label: z.string(), label_translations: z.object({}).nullable(), net_serving_size_g: z.number().nullable().optional(), note: z.string().nullable().optional(), nutrient_overrides: nutrientOverrideCollection.optional(), nutrients: recipeNutrition.optional(), organization: z.string().nullable().optional(), patient_id: z.number().int().nullable().optional(), percent_eaten: z.number().nullable().optional(), preparation_method: preparationMethodEnum.optional(), recipe_details: recipeDetails.optional(), serving_unit_amount: z.number().nullable().optional(), serving_unit_label: z.string().nullable().optional(), serving_unit_label_translations: z.object({}).nullable().optional(), servings: z.number().nullable().optional(), source: z.enum(["user", "chef", "imported", "edamam"]).nullable().optional(), story: recipeStory.optional(), story_moderation_status: z.enum(["draft", "approved", "rejected"]).nullable().optional(), tag_override_keys: z.array(z.string()).nullable().optional(), unresolved_ingredient_count: z.number().int().nullable().optional(), url: z.string().nullable(), usda_nutrition_per_yield: usdaNutritionResponse.optional(), usda_nutrition_response: usdaNutritionResponse.optional(), variant_labels: z.array(z.string()).nullable().optional(), visibility: z.enum(["private", "public", "shared"]).optional(), yield_amount: z.number().nullable().optional(), yield_unit_label: z.string().nullable().optional()}); export const validateResponse = async ( schema: { readonly '~standard': { readonly validate: (value: unknown) => ({ readonly value: Output; readonly issues?: undefined } | { readonly issues: ReadonlyArray<{ readonly message: string; readonly path?: ReadonlyArray | undefined }> }) | Promise<{ readonly value: Output; readonly issues?: undefined } | { readonly issues: ReadonlyArray<{ readonly message: string; readonly path?: ReadonlyArray | undefined }> }> } }, value: unknown ): Promise => { const result = await schema['~standard'].validate(value) if (result.issues !== undefined) { const detail = result.issues .map(({ message, path }) => path?.length ? `${path.map((segment) => String(typeof segment === 'object' ? segment.key : segment)).join('.')}: ${message}` : message ) .join('; ') throw new Error(`Response does not match the schema: ${detail}`, { cause: { issues: result.issues } }) } return result.value }; /** * Approve, reject, or return a recipe story to draft * * PUT /chefs/recipes/{recipe_id}/story/moderation */ export const updateApiChefsRecipesRecipeIdStoryModeration = async (args: UpdateApiChefsRecipesRecipeIdStoryModerationArgs, options: UpdateApiChefsRecipesRecipeIdStoryModerationOptions) => { const {baseUrl, fetch: fetchFn = fetch, bearerAuth} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('content-type', "application/json") headers.set('accept', "application/json") if (bearerAuth !== undefined) headers.set('authorization', `Bearer ${bearerAuth}`) const url = `${baseUrl.replace(/\/+$/, '')}/chefs/recipes/${encodeURIComponent(String(args.recipe_id))}/story/moderation${query.size > 0 ? `?${query}` : ''}` const res = await fetchFn(url, {method: "PUT", headers, body: JSON.stringify(args.body)}) if (!res.ok) throw new Error(`Request failed with status ${res.status}`, {cause: {status: res.status, body: await res.text()}}) return validateResponse(recipeResponse, await res.json()) };