UNPKG

@codybrom/denim

Version:

A Deno/TypeScript library for the Threads API

47 lines (41 loc) 1.55 kB
import { LOCATION_FIELDS, THREADS_API_BASE_URL } from "../constants.ts"; import type { LocationSearchOptions, ThreadsLocation } from "../types.ts"; import { getAPI } from "../utils/getAPI.ts"; /** * Searches for locations on Threads. * * @param accessToken - The access token for authentication * @param options - Search options including query and coordinates * @param fields - Optional array of fields to return * @returns A Promise that resolves to an array of locations * @throws Will throw an error if the API request fails */ export async function searchLocations( accessToken: string, options: LocationSearchOptions, fields?: string[], ): Promise<{ data: ThreadsLocation[] }> { const api = getAPI(); if (api) { return api.searchLocations(accessToken, options, fields); } const fieldList = (fields ?? LOCATION_FIELDS).join(","); const url = new URL(`${THREADS_API_BASE_URL}/location_search`); url.searchParams.append("access_token", accessToken); url.searchParams.append("fields", fieldList); if (options.query) url.searchParams.append("query", options.query); if (options.latitude !== undefined) { url.searchParams.append("latitude", options.latitude.toString()); } if (options.longitude !== undefined) { url.searchParams.append("longitude", options.longitude.toString()); } const response = await fetch(url.toString()); if (!response.ok) { const errorBody = await response.text(); throw new Error( `Failed to search locations (${response.status}): ${errorBody}`, ); } return await response.json(); }