import {z} from 'zod' export type GetApiFoodsSearchByTextNlpQueueArgs = {search_text: string, meal_date?: string | undefined, meal_time?: string | undefined, meal_name?: ('breakfast' | 'lunch' | 'dinner' | 'snack') | undefined}; export type GetApiFoodsSearchByTextNlpQueueOptions = {baseUrl: string, bearerAuth?: string | undefined, fetch?: typeof fetch | undefined}; 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 ccServingsResponse = z.record(z.string(), z.number()).nullable(); 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 mealItemCustomAddonResponse = z.object({calculated_servings: z.number().nullable().optional(), carbohydrate_g: z.number().optional(), cc_columns: ccColumnsRequest.optional(), cc_servings: ccServingsResponse.optional(), custom_item: z.boolean().nullable().optional(), energy_kcal: z.number().optional(), fat_g: z.number().optional(), fiber_g: z.number().optional(), food_image_url: z.string().nullable(), food_name: z.string(), food_name_translations: z.object({}).nullable(), id: z.number().int().optional(), is_foundational_item: z.boolean().optional(), netcarb_g: z.number().optional(), nutrient_overrides: nutrientOverrideCollection.optional(), preparation_method: preparationMethodEnum.optional(), protein_g: z.number().optional(), rxfood_id: z.string().nullable().optional(), serving_unit_amount: z.number(), serving_unit_label: z.string(), serving_unit_label_translations: z.object({}).nullable(), servings: z.number(), source_meal_id: z.number().int().nullable().optional(), source_meal_item_custom_addon_id: z.number().int().nullable().optional(), source_meal_item_id: z.number().int().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 mealItemResponse = z.object({addons: z.array(z.string()), audio_photo_id: z.number().int().nullable().optional(), base_food_name: z.string().optional(), calcium_mg: z.number().nullable().optional(), calculated_servings: z.number().optional(), carbohydrate_g: z.number(), cc_columns: ccColumnsRequest.optional(), cc_servings: ccServingsResponse.optional(), cholesterol_mg: z.number().nullable().optional(), created_by_user_id: z.number().int().nullable().optional(), created_time: z.string(), custom_addons: z.array(mealItemCustomAddonResponse).nullable().optional(), custom_item: z.boolean().nullable().optional(), custom_item_source: z.string().nullable().optional(), custom_item_source_id: z.string().nullable().optional(), custom_nutrient_estimates: nutrientEstimatesRequest.optional(), energy_kcal: z.number(), extra_addons: z.array(z.string()).optional(), fat_g: z.number().optional(), fiber_g: z.number().optional(), 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(), food_ontology: z.array(z.string()).nullable().optional(), food_photo_url: z.string().nullable(), food_replacement_name: z.string().nullable().optional(), ghg_equivalent_kg: z.number().nullable().optional(), glycemic_load: z.string().nullable().optional(), grams_per_cubic_inch: z.number().nullable().optional(), id: z.number().int(), is_foundational_item: z.boolean().optional(), k_level: z.string().nullable().optional(), last_updated_by_user_id: z.number().int().nullable().optional(), meal_audio_url: z.string().nullable().optional(), meal_nlp_phrase: z.string().nullable().optional(), meal_photo_id: z.number().int().nullable().optional(), meal_photo_url: z.string().nullable().optional(), net_serving_size_g: z.number().optional(), netcarb_g: z.number().optional(), note: z.string().nullable().optional(), nutrient_overrides: nutrientOverrideCollection.optional(), nutrition_response: usdaNutritionResponse.optional(), nutrition_source: z.string().nullable().optional(), original_meal_photo_url: z.string().nullable().optional(), parent_food_name: z.string().nullable().optional(), patient_id: z.number().int(), percent_eaten: z.number().optional(), preparation_method: preparationMethodEnum.optional(), protein_g: z.number().optional(), recipe_id: z.number().int().nullable().optional(), recipe_structure: z.record(z.string(), z.unknown()).nullable().optional(), rxfood_id: z.string().nullable().optional(), serving_type_label: z.string().nullable().optional(), serving_type_multiplier: z.number().nullable().optional(), serving_unit_amount: z.number(), serving_unit_label: z.string(), serving_unit_label_translations: z.object({}).nullable(), servings: z.number(), similar_items: z.array(z.string()).optional(), sodium_mg: z.number().nullable().optional(), source_meal_id: z.number().int().nullable().optional(), source_meal_item_custom_addon_id: z.number().int().nullable().optional(), source_meal_item_id: z.number().int().nullable().optional(), updated_time: z.string(), vitamin_d_iu: z.number().nullable().optional()}); export const mealResponse = z.object({created_by_user_id: z.number().int().nullable().optional(), id: z.number().int(), is_deleted: z.boolean().optional(), last_updated_by_user_id: z.number().int().nullable().optional(), meal_date: z.string(), meal_items: z.array(mealItemResponse), meal_name: z.enum(["breakfast", "lunch", "dinner", "snack"]), meal_name_translations: z.object({}).nullable().optional(), meal_photo_id: z.number().int().nullable().optional(), meal_photo_original_url: z.string().nullable().optional(), meal_photo_resized_url: z.string().nullable().optional(), meal_time: z.string(), patient_id: z.number().int()}); 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 }; /** * Log a meal with descriptive words with results analyzed and queued for review (if required) * * GET /foods/search_by_text_nlp_queue */ export const getApiFoodsSearchByTextNlpQueue = async (args: GetApiFoodsSearchByTextNlpQueueArgs, options: GetApiFoodsSearchByTextNlpQueueOptions) => { const {baseUrl, fetch: fetchFn = fetch, bearerAuth} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('accept', "application/json") if (args.search_text != null) query.append("search_text", String(args.search_text)) if (args.meal_date != null) query.append("meal_date", String(args.meal_date)) if (args.meal_time != null) query.append("meal_time", String(args.meal_time)) if (args.meal_name != null) query.append("meal_name", String(args.meal_name)) if (bearerAuth !== undefined) headers.set('authorization', `Bearer ${bearerAuth}`) const url = `${baseUrl.replace(/\/+$/, '')}/foods/search_by_text_nlp_queue${query.size > 0 ? `?${query}` : ''}` const res = await fetchFn(url, {method: "GET", headers}) if (!res.ok) throw new Error(`Request failed with status ${res.status}`, {cause: {status: res.status, body: await res.text()}}) return validateResponse(mealResponse, await res.json()) };