stophy 0.3.0 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/generated/client.gen.ts","../src/generated/sdk.gen.ts","../src/errors.ts","../src/transport.ts","../src/methods/account.ts","../src/methods/channel.ts","../src/methods/kids.ts","../src/methods/music.ts","../src/methods/playlist.ts","../src/methods/search.ts","../src/methods/suggest.ts","../src/methods/video.ts","../src/client.ts"],"names":["createClient","createConfig","client"],"mappings":"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","file":"index.js","sourcesContent":["// This file is auto-generated by @hey-api/openapi-ts\n\nimport type { ClientOptions } from \"./types.gen\";\nimport {\n type Config,\n type ClientOptions as DefaultClientOptions,\n createClient,\n createConfig,\n} from \"@hey-api/client-fetch\";\n\n/**\n * The `createClientConfig()` function will be called on client initialization\n * and the returned object will become the client's initial configuration.\n *\n * You may want to initialize your client this way instead of calling\n * `setConfig()`. This is useful for example if you're using Next.js\n * to ensure your client always has the correct values.\n */\nexport type CreateClientConfig<T extends DefaultClientOptions = ClientOptions> =\n (\n override?: Config<DefaultClientOptions & T>\n ) => Config<Required<DefaultClientOptions> & T>;\n\nexport const client = createClient(\n createConfig<ClientOptions>({\n baseUrl: \"https://api.stophy.dev\",\n })\n);\n","// This file is auto-generated by @hey-api/openapi-ts\n\nimport type {\n Options as ClientOptions,\n TDataShape,\n Client,\n} from \"@hey-api/client-fetch\";\nimport type {\n SearchVideosData,\n SearchVideosResponse,\n SearchVideosError,\n GetVideoData,\n GetVideoResponse,\n GetVideoError,\n GetChannelData,\n GetChannelResponse,\n GetChannelError,\n GetPlaylistData,\n GetPlaylistResponse,\n GetPlaylistError,\n GetSuggestionsData,\n GetSuggestionsResponse,\n GetSuggestionsError,\n YoutubeMusicData,\n YoutubeMusicResponse,\n YoutubeMusicError,\n YoutubeKidsData,\n YoutubeKidsResponse,\n YoutubeKidsError,\n GetCreditsData,\n GetCreditsResponse,\n GetCreditsError,\n GetUsageData,\n GetUsageResponse,\n GetUsageError,\n GetLogsData,\n GetLogsResponse,\n GetLogsError,\n McpTransportHeaderData,\n McpTransportHeaderResponse,\n McpTransportHeaderError,\n McpTransportPathData,\n McpTransportPathResponse,\n McpTransportPathError,\n} from \"./types.gen\";\nimport { client as _heyApiClient } from \"./client.gen\";\n\nexport type Options<\n TData extends TDataShape = TDataShape,\n ThrowOnError extends boolean = boolean\n> = ClientOptions<TData, ThrowOnError> & {\n /**\n * You can provide a client instance returned by `createClient()` instead of\n * individual options. This might be also useful if you want to implement a\n * custom client.\n */\n client?: Client;\n /**\n * You can pass arbitrary values through the `meta` object. This can be\n * used to access values that aren't defined as part of the SDK function.\n */\n meta?: Record<string, unknown>;\n};\n\n/**\n * Search\n * Search YouTube with optional filters for content type, sort order, upload date, duration, and features. Returns paginated results.\n */\nexport const searchVideos = <ThrowOnError extends boolean = false>(\n options: Options<SearchVideosData, ThrowOnError>\n) => {\n return (options.client ?? _heyApiClient).post<\n SearchVideosResponse,\n SearchVideosError,\n ThrowOnError\n >({\n security: [\n {\n scheme: \"bearer\",\n type: \"http\",\n },\n ],\n url: \"/v1/search\",\n ...options,\n headers: {\n \"Content-Type\": \"application/json\",\n ...options?.headers,\n },\n });\n};\n\n/**\n * Video\n * Fetch video details, transcript, comments, replies, or live chat. Pass type: details for metadata, transcript for timestamped captions, comments for top-level comments, replies for a comment thread (pass the repliesToken from a comment as continuationToken), or livechat for live stream chat messages.\n */\nexport const getVideo = <ThrowOnError extends boolean = false>(\n options: Options<GetVideoData, ThrowOnError>\n) => {\n return (options.client ?? _heyApiClient).post<\n GetVideoResponse,\n GetVideoError,\n ThrowOnError\n >({\n security: [\n {\n scheme: \"bearer\",\n type: \"http\",\n },\n ],\n url: \"/v1/video\",\n ...options,\n headers: {\n \"Content-Type\": \"application/json\",\n ...options?.headers,\n },\n });\n};\n\n/**\n * Channel\n * Retrieve channel metadata and content by channelUrl. Use the tab field to switch between videos, Shorts, live streams, playlists, community posts, courses, and about info. Set query to search within the channel.\n */\nexport const getChannel = <ThrowOnError extends boolean = false>(\n options: Options<GetChannelData, ThrowOnError>\n) => {\n return (options.client ?? _heyApiClient).post<\n GetChannelResponse,\n GetChannelError,\n ThrowOnError\n >({\n security: [\n {\n scheme: \"bearer\",\n type: \"http\",\n },\n ],\n url: \"/v1/channel\",\n ...options,\n headers: {\n \"Content-Type\": \"application/json\",\n ...options?.headers,\n },\n });\n};\n\n/**\n * Playlist\n * Retrieve items from a YouTube playlist. Use continuationToken to page through long playlists.\n */\nexport const getPlaylist = <ThrowOnError extends boolean = false>(\n options: Options<GetPlaylistData, ThrowOnError>\n) => {\n return (options.client ?? _heyApiClient).post<\n GetPlaylistResponse,\n GetPlaylistError,\n ThrowOnError\n >({\n security: [\n {\n scheme: \"bearer\",\n type: \"http\",\n },\n ],\n url: \"/v1/playlist\",\n ...options,\n headers: {\n \"Content-Type\": \"application/json\",\n ...options?.headers,\n },\n });\n};\n\n/**\n * Suggest\n * Get YouTube search autocomplete suggestions for a query.\n */\nexport const getSuggestions = <ThrowOnError extends boolean = false>(\n options: Options<GetSuggestionsData, ThrowOnError>\n) => {\n return (options.client ?? _heyApiClient).post<\n GetSuggestionsResponse,\n GetSuggestionsError,\n ThrowOnError\n >({\n security: [\n {\n scheme: \"bearer\",\n type: \"http\",\n },\n ],\n url: \"/v1/suggest\",\n ...options,\n headers: {\n \"Content-Type\": \"application/json\",\n ...options?.headers,\n },\n });\n};\n\n/**\n * YouTube Music\n * Search YouTube Music, fetch suggestions, song metadata, lyrics, albums, artists, and playlists. The `type` request field selects the operation.\n */\nexport const youtubeMusic = <ThrowOnError extends boolean = false>(\n options: Options<YoutubeMusicData, ThrowOnError>\n) => {\n return (options.client ?? _heyApiClient).post<\n YoutubeMusicResponse,\n YoutubeMusicError,\n ThrowOnError\n >({\n security: [\n {\n scheme: \"bearer\",\n type: \"http\",\n },\n ],\n url: \"/v1/music\",\n ...options,\n headers: {\n \"Content-Type\": \"application/json\",\n ...options?.headers,\n },\n });\n};\n\n/**\n * YouTube Kids\n * Search YouTube Kids or fetch Kids video details. The `type` request field selects the operation.\n */\nexport const youtubeKids = <ThrowOnError extends boolean = false>(\n options: Options<YoutubeKidsData, ThrowOnError>\n) => {\n return (options.client ?? _heyApiClient).post<\n YoutubeKidsResponse,\n YoutubeKidsError,\n ThrowOnError\n >({\n security: [\n {\n scheme: \"bearer\",\n type: \"http\",\n },\n ],\n url: \"/v1/kids\",\n ...options,\n headers: {\n \"Content-Type\": \"application/json\",\n ...options?.headers,\n },\n });\n};\n\n/**\n * Credits\n * Return the current credit balance for the authenticated API key.\n */\nexport const getCredits = <ThrowOnError extends boolean = false>(\n options?: Options<GetCreditsData, ThrowOnError>\n) => {\n return (options?.client ?? _heyApiClient).get<\n GetCreditsResponse,\n GetCreditsError,\n ThrowOnError\n >({\n security: [\n {\n scheme: \"bearer\",\n type: \"http\",\n },\n ],\n url: \"/v1/credits\",\n ...options,\n });\n};\n\n/**\n * Usage\n * Return daily credit and request counts for the authenticated key.\n */\nexport const getUsage = <ThrowOnError extends boolean = false>(\n options?: Options<GetUsageData, ThrowOnError>\n) => {\n return (options?.client ?? _heyApiClient).get<\n GetUsageResponse,\n GetUsageError,\n ThrowOnError\n >({\n security: [\n {\n scheme: \"bearer\",\n type: \"http\",\n },\n ],\n url: \"/v1/usage\",\n ...options,\n });\n};\n\n/**\n * Logs\n * Return recent API request logs for the authenticated key.\n */\nexport const getLogs = <ThrowOnError extends boolean = false>(\n options?: Options<GetLogsData, ThrowOnError>\n) => {\n return (options?.client ?? _heyApiClient).get<\n GetLogsResponse,\n GetLogsError,\n ThrowOnError\n >({\n security: [\n {\n scheme: \"bearer\",\n type: \"http\",\n },\n ],\n url: \"/v1/logs\",\n ...options,\n });\n};\n\n/**\n * MCP transport (header auth)\n * Streamable HTTP MCP transport. Auth via Authorization: Bearer st_<key> header. Use this with MCP clients like Cursor or Claude Desktop. Each tool call costs 1 credit except stophy_get_credits which is free.\n */\nexport const mcpTransportHeader = <ThrowOnError extends boolean = false>(\n options: Options<McpTransportHeaderData, ThrowOnError>\n) => {\n return (options.client ?? _heyApiClient).post<\n McpTransportHeaderResponse,\n McpTransportHeaderError,\n ThrowOnError\n >({\n security: [\n {\n scheme: \"bearer\",\n type: \"http\",\n },\n ],\n url: \"/v1/mcp\",\n ...options,\n headers: {\n \"Content-Type\": \"application/json\",\n ...options?.headers,\n },\n });\n};\n\n/**\n * MCP transport (path auth)\n * Streamable HTTP MCP transport. Auth via the API key in the URL path. Useful when header auth isn't possible. Note that the key will appear in logs and referrer headers.\n */\nexport const mcpTransportPath = <ThrowOnError extends boolean = false>(\n options: Options<McpTransportPathData, ThrowOnError>\n) => {\n return (options.client ?? _heyApiClient).post<\n McpTransportPathResponse,\n McpTransportPathError,\n ThrowOnError\n >({\n security: [\n {\n scheme: \"bearer\",\n type: \"http\",\n },\n ],\n url: \"/v1/mcp/{apiKey}\",\n ...options,\n headers: {\n \"Content-Type\": \"application/json\",\n ...options?.headers,\n },\n });\n};\n","import type { ErrorResponse } from \"./generated/types.gen\";\n\n/** Thrown when the Stophy API responds with a non-success status. */\nexport class StophyError extends Error {\n\treadonly code?: ErrorResponse[\"code\"];\n\treadonly status: number;\n\treadonly requestId?: string;\n\treadonly details?: unknown;\n\n\tconstructor(\n\t\tmessage: string,\n\t\toptions: {\n\t\t\tstatus: number;\n\t\t\tcode?: ErrorResponse[\"code\"];\n\t\t\trequestId?: string;\n\t\t\tdetails?: unknown;\n\t\t},\n\t) {\n\t\tsuper(message);\n\t\tthis.name = \"StophyError\";\n\t\tthis.status = options.status;\n\t\tthis.code = options.code;\n\t\tthis.requestId = options.requestId;\n\t\tthis.details = options.details;\n\t}\n}\n","import { type Client, createClient, createConfig } from \"@hey-api/client-fetch\";\nimport { StophyError } from \"./errors\";\nimport type { ErrorResponse } from \"./generated/types.gen\";\n\nconst DEFAULT_BASE_URL = \"https://api.stophy.dev\";\nconst RETRYABLE_STATUS = new Set([429, 500, 502, 503, 504]);\n\nexport interface TransportOptions {\n\tapiKey: string;\n\tbaseUrl?: string;\n\tfetch?: typeof globalThis.fetch;\n\theaders?: Record<string, string>;\n\tmaxRetries?: number;\n\tretryInitialDelayMs?: number;\n}\n\nexport function createTransport(options: TransportOptions): Client {\n\tconst baseFetch = options.fetch ?? globalThis.fetch;\n\treturn createClient(\n\t\tcreateConfig({\n\t\t\tbaseUrl: options.baseUrl ?? DEFAULT_BASE_URL,\n\t\t\tauth: () => options.apiKey,\n\t\t\theaders: options.headers,\n\t\t\tfetch: withRetries(\n\t\t\t\tbaseFetch,\n\t\t\t\toptions.maxRetries ?? 2,\n\t\t\t\toptions.retryInitialDelayMs ?? 500,\n\t\t\t),\n\t\t}),\n\t);\n}\n\ntype FetchFn = (\n\tinput: Request | URL | string,\n\tinit?: RequestInit,\n) => Promise<Response>;\n\nfunction withRetries(\n\tbaseFetch: typeof globalThis.fetch,\n\tmaxRetries: number,\n\tinitialDelayMs: number,\n): FetchFn {\n\tif (maxRetries <= 0) return baseFetch;\n\n\treturn async (input, init) => {\n\t\tfor (let attempt = 0; ; attempt++) {\n\t\t\tconst request = input instanceof Request ? input.clone() : input;\n\t\t\ttry {\n\t\t\t\tconst response = await baseFetch(request, init);\n\t\t\t\tif (attempt < maxRetries && RETRYABLE_STATUS.has(response.status)) {\n\t\t\t\t\tawait sleep(\n\t\t\t\t\t\tretryAfterMs(response) ?? backoffMs(attempt, initialDelayMs),\n\t\t\t\t\t);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\treturn response;\n\t\t\t} catch (error) {\n\t\t\t\tif (attempt >= maxRetries) throw error;\n\t\t\t\tawait sleep(backoffMs(attempt, initialDelayMs));\n\t\t\t}\n\t\t}\n\t};\n}\n\nfunction backoffMs(attempt: number, base: number): number {\n\tconst window = base * 2 ** attempt;\n\treturn window / 2 + Math.random() * (window / 2);\n}\n\nfunction retryAfterMs(response: Response): number | null {\n\tconst header = response.headers.get(\"retry-after\");\n\tif (!header) return null;\n\tconst seconds = Number(header);\n\tif (!Number.isNaN(seconds)) return seconds * 1000;\n\tconst date = Date.parse(header);\n\treturn Number.isNaN(date) ? null : Math.max(0, date - Date.now());\n}\n\nfunction sleep(ms: number): Promise<void> {\n\treturn new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nexport function unwrap<T>(result: {\n\tdata?: T;\n\terror?: unknown;\n\tresponse: Response;\n}): T {\n\tif (result.error === undefined && result.data !== undefined)\n\t\treturn result.data;\n\n\tconst error = (result.error ?? {}) as Partial<ErrorResponse>;\n\tthrow new StophyError(\n\t\terror.error ??\n\t\t\t`Stophy request failed with status ${result.response.status}`,\n\t\t{\n\t\t\tstatus: result.response.status,\n\t\t\tcode: error.code,\n\t\t\trequestId: result.response.headers.get(\"x-request-id\") ?? undefined,\n\t\t\tdetails: error.details,\n\t\t},\n\t);\n}\n","import type { Client } from \"@hey-api/client-fetch\";\nimport { getCredits, getLogs, getUsage } from \"../generated/sdk.gen\";\nimport type {\n\tGetCreditsResponse,\n\tGetLogsData,\n\tGetLogsResponse,\n\tGetUsageData,\n\tGetUsageResponse,\n} from \"../generated/types.gen\";\nimport { unwrap } from \"../transport\";\nimport type { AccountResponse } from \"./response\";\n\nexport type CreditsResponse = AccountResponse<\n\tNonNullable<GetCreditsResponse[\"data\"]>\n>;\nexport type LogsResponse = AccountResponse<\n\tNonNullable<GetLogsResponse[\"data\"]>\n>;\nexport type UsageResponse = AccountResponse<\n\tNonNullable<GetUsageResponse[\"data\"]>\n>;\n\nexport function credits(client: Client): Promise<CreditsResponse> {\n\treturn getCredits({ client }).then(unwrap) as Promise<CreditsResponse>;\n}\n\nexport function logs(\n\tclient: Client,\n\tquery?: GetLogsData[\"query\"],\n): Promise<LogsResponse> {\n\treturn getLogs({ client, query }).then(unwrap) as Promise<LogsResponse>;\n}\n\nexport function usage(\n\tclient: Client,\n\tquery?: GetUsageData[\"query\"],\n): Promise<UsageResponse> {\n\treturn getUsage({ client, query }).then(unwrap) as Promise<UsageResponse>;\n}\n","import type { Client } from \"@hey-api/client-fetch\";\nimport { getChannel } from \"../generated/sdk.gen\";\nimport type {\n\tGetChannelData,\n\tGetChannelResponse,\n} from \"../generated/types.gen\";\nimport { unwrap } from \"../transport\";\nimport type { MeteredResponse } from \"./response\";\n\ntype ChannelBody = GetChannelData[\"body\"];\nexport type ChannelOptions = Omit<ChannelBody, \"channelUrl\">;\ntype GeneratedChannelData = NonNullable<GetChannelResponse[\"data\"]>;\ntype GeneratedChannelItem = GeneratedChannelData[\"items\"][number];\n\nexport interface ChannelCourseItem {\n\ttype: \"course\";\n\tid: string;\n\turl: string;\n\tcourseUrl: string;\n\tplaylistUrl: string;\n\ttitle: string | null;\n\tauthor: string | null;\n\tauthorId: string | null;\n\tvideoCount: number | null;\n\tvideoCountText: string | null;\n\tthumbnails: Array<{ url: string; width: number; height: number }>;\n}\n\nexport type ChannelData = Omit<GeneratedChannelData, \"items\" | \"tab\"> & {\n\titems: Array<GeneratedChannelItem | ChannelCourseItem>;\n\ttab: ChannelBody[\"tab\"] | \"community\" | \"course\";\n};\n\nexport type ChannelResponse = MeteredResponse<ChannelData>;\n\nexport function channel(\n\tclient: Client,\n\turlOrBody: string | ChannelBody,\n\toptions: ChannelOptions = {},\n): Promise<ChannelResponse> {\n\tconst body =\n\t\ttypeof urlOrBody === \"string\"\n\t\t\t? { channelUrl: urlOrBody, ...options }\n\t\t\t: urlOrBody;\n\treturn getChannel({ client, body }).then(unwrap) as Promise<ChannelResponse>;\n}\n","import type { Client } from \"@hey-api/client-fetch\";\nimport { youtubeKids } from \"../generated/sdk.gen\";\nimport type { KidsSearchData, KidsVideoData } from \"../generated/types.gen\";\nimport { unwrap } from \"../transport\";\nimport type { MeteredResponse } from \"./response\";\n\nexport type KidsInput =\n\t| { type: \"search\"; q: string; continuationToken?: string }\n\t| { type: \"video\"; videoUrl: string };\n\nexport type KidsDataFor<T extends KidsInput[\"type\"]> = T extends \"search\"\n\t? KidsSearchData\n\t: KidsVideoData;\n\nexport function kids<T extends KidsInput>(\n\tclient: Client,\n\tbody: T,\n): Promise<MeteredResponse<KidsDataFor<T[\"type\"]>>> {\n\treturn youtubeKids({ client, body }).then(unwrap) as Promise<\n\t\tMeteredResponse<KidsDataFor<T[\"type\"]>>\n\t>;\n}\n","import type { Client } from \"@hey-api/client-fetch\";\nimport { youtubeMusic } from \"../generated/sdk.gen\";\nimport type {\n\tMusicAlbumData,\n\tMusicArtistData,\n\tMusicLyricsData,\n\tMusicPlaylistData,\n\tMusicSearchData,\n\tMusicSongData,\n\tMusicSuggestData,\n\tYoutubeMusicData,\n} from \"../generated/types.gen\";\nimport { unwrap } from \"../transport\";\nimport type { MeteredResponse } from \"./response\";\n\ntype GeneratedMusicBody = YoutubeMusicData[\"body\"];\ntype SearchType = NonNullable<GeneratedMusicBody[\"searchType\"]>;\n\nexport type MusicInput =\n\t| {\n\t\t\ttype: \"search\";\n\t\t\tq: string;\n\t\t\tsearchType?: SearchType;\n\t\t\tcontinuationToken?: string;\n\t }\n\t| { type: \"suggest\"; q: string }\n\t| { type: \"song\" | \"lyrics\"; videoUrl: string }\n\t| { type: \"album\"; albumUrl: string }\n\t| { type: \"artist\"; artistUrl: string }\n\t| {\n\t\t\ttype: \"playlist\";\n\t\t\tplaylistUrl: string;\n\t\t\tcontinuationToken?: string;\n\t };\n\nexport type MusicDataFor<T extends MusicInput[\"type\"]> = T extends \"search\"\n\t? MusicSearchData\n\t: T extends \"suggest\"\n\t\t? MusicSuggestData\n\t\t: T extends \"song\"\n\t\t\t? MusicSongData\n\t\t\t: T extends \"lyrics\"\n\t\t\t\t? MusicLyricsData\n\t\t\t\t: T extends \"album\"\n\t\t\t\t\t? MusicAlbumData\n\t\t\t\t\t: T extends \"artist\"\n\t\t\t\t\t\t? MusicArtistData\n\t\t\t\t\t\t: MusicPlaylistData;\n\nexport function music<T extends MusicInput>(\n\tclient: Client,\n\tbody: T,\n): Promise<MeteredResponse<MusicDataFor<T[\"type\"]>>> {\n\treturn youtubeMusic({ client, body }).then(unwrap) as Promise<\n\t\tMeteredResponse<MusicDataFor<T[\"type\"]>>\n\t>;\n}\n","import type { Client } from \"@hey-api/client-fetch\";\nimport { getPlaylist } from \"../generated/sdk.gen\";\nimport type {\n\tGetPlaylistData,\n\tGetPlaylistResponse,\n} from \"../generated/types.gen\";\nimport { unwrap } from \"../transport\";\nimport type { MeteredResponse } from \"./response\";\n\ntype PlaylistBody = GetPlaylistData[\"body\"];\nexport type PlaylistOptions = Omit<PlaylistBody, \"playlistUrl\">;\nexport type PlaylistResponse = MeteredResponse<\n\tNonNullable<GetPlaylistResponse[\"data\"]>\n>;\n\nexport function playlist(\n\tclient: Client,\n\turlOrBody: string | PlaylistBody,\n\toptions: PlaylistOptions = {},\n): Promise<PlaylistResponse> {\n\tconst body =\n\t\ttypeof urlOrBody === \"string\"\n\t\t\t? { playlistUrl: urlOrBody, ...options }\n\t\t\t: urlOrBody;\n\treturn getPlaylist({ client, body }).then(\n\t\tunwrap,\n\t) as Promise<PlaylistResponse>;\n}\n","import type { Client } from \"@hey-api/client-fetch\";\nimport { searchVideos } from \"../generated/sdk.gen\";\nimport type {\n\tSearchVideosData,\n\tSearchVideosResponse,\n} from \"../generated/types.gen\";\nimport { unwrap } from \"../transport\";\nimport type { MeteredResponse } from \"./response\";\n\ntype SearchBody = SearchVideosData[\"body\"];\nexport type SearchOptions = Omit<SearchBody, \"q\">;\nexport type SearchResponse = MeteredResponse<\n\tNonNullable<SearchVideosResponse[\"data\"]>\n>;\n\nexport function search(\n\tclient: Client,\n\tqueryOrBody: string | SearchBody,\n\toptions: SearchOptions = {},\n): Promise<SearchResponse> {\n\tif (typeof queryOrBody === \"string\" && !queryOrBody.trim()) {\n\t\tthrow new Error(\"query cannot be empty\");\n\t}\n\tconst body =\n\t\ttypeof queryOrBody === \"string\"\n\t\t\t? { q: queryOrBody, ...options }\n\t\t\t: queryOrBody;\n\treturn searchVideos({ client, body }).then(unwrap) as Promise<SearchResponse>;\n}\n","import type { Client } from \"@hey-api/client-fetch\";\nimport { getSuggestions } from \"../generated/sdk.gen\";\nimport type {\n\tGetSuggestionsData,\n\tGetSuggestionsResponse,\n} from \"../generated/types.gen\";\nimport { unwrap } from \"../transport\";\nimport type { MeteredResponse } from \"./response\";\n\ntype SuggestBody = GetSuggestionsData[\"body\"];\nexport type SuggestOptions = Omit<SuggestBody, \"q\">;\nexport type SuggestResponse = MeteredResponse<\n\tNonNullable<GetSuggestionsResponse[\"data\"]>\n>;\n\nexport function suggest(\n\tclient: Client,\n\tqueryOrOptions: string | SuggestBody,\n\toptions: SuggestOptions = {},\n): Promise<SuggestResponse> {\n\tif (typeof queryOrOptions === \"string\" && !queryOrOptions.trim()) {\n\t\tthrow new Error(\"query cannot be empty\");\n\t}\n\tconst body =\n\t\ttypeof queryOrOptions === \"string\"\n\t\t\t? { q: queryOrOptions, ...options }\n\t\t\t: queryOrOptions;\n\treturn getSuggestions({ client, body }).then(\n\t\tunwrap,\n\t) as Promise<SuggestResponse>;\n}\n","import type { Client } from \"@hey-api/client-fetch\";\nimport { getVideo } from \"../generated/sdk.gen\";\nimport type {\n\tGetVideoData,\n\tVideoResponseComments,\n\tVideoResponseDetails,\n\tVideoResponseLivechat,\n\tVideoResponseReplies,\n\tVideoResponseTranscript,\n} from \"../generated/types.gen\";\nimport { unwrap } from \"../transport\";\nimport type { MeteredResponse } from \"./response\";\n\nexport type VideoResponseFor<T> = MeteredResponse<T>;\ntype VideoUrlBody = Extract<GetVideoData[\"body\"], { videoUrl: string }>;\nexport type CommentsOptions = Pick<\n\tVideoUrlBody,\n\t\"sortBy\" | \"continuationToken\"\n>;\nexport type TranscriptOptions = Pick<VideoUrlBody, \"lang\">;\nexport type LiveChatOptions = Pick<\n\tVideoUrlBody,\n\t\"chatType\" | \"continuationToken\"\n>;\n\nexport async function video(\n\tclient: Client,\n\tbody: GetVideoData[\"body\"],\n): Promise<\n\tVideoResponseFor<\n\t\t| VideoResponseDetails\n\t\t| VideoResponseTranscript\n\t\t| VideoResponseComments\n\t\t| VideoResponseReplies\n\t\t| VideoResponseLivechat\n\t>\n> {\n\treturn unwrap(await getVideo({ client, body })) as VideoResponseFor<\n\t\t| VideoResponseDetails\n\t\t| VideoResponseTranscript\n\t\t| VideoResponseComments\n\t\t| VideoResponseReplies\n\t\t| VideoResponseLivechat\n\t>;\n}\n\nexport function videoDetails(\n\tclient: Client,\n\tvideoUrl: string,\n): Promise<VideoResponseFor<VideoResponseDetails>> {\n\treturn video(client, { type: \"details\", videoUrl }) as Promise<\n\t\tVideoResponseFor<VideoResponseDetails>\n\t>;\n}\n\nexport function transcript(\n\tclient: Client,\n\tvideoUrl: string,\n\toptions: TranscriptOptions = {},\n): Promise<VideoResponseFor<VideoResponseTranscript>> {\n\treturn video(client, { type: \"transcript\", videoUrl, ...options }) as Promise<\n\t\tVideoResponseFor<VideoResponseTranscript>\n\t>;\n}\n\nexport function comments(\n\tclient: Client,\n\tvideoUrl: string,\n\toptions: CommentsOptions = {},\n): Promise<VideoResponseFor<VideoResponseComments>> {\n\treturn video(client, {\n\t\ttype: \"comments\",\n\t\tvideoUrl,\n\t\t...options,\n\t}) as Promise<VideoResponseFor<VideoResponseComments>>;\n}\n\nexport function replies(\n\tclient: Client,\n\tcontinuationToken: string,\n): Promise<VideoResponseFor<VideoResponseReplies>> {\n\treturn video(client, {\n\t\ttype: \"replies\",\n\t\tcontinuationToken,\n\t}) as Promise<VideoResponseFor<VideoResponseReplies>>;\n}\n\nexport function liveChat(\n\tclient: Client,\n\tvideoUrl: string,\n\toptions: LiveChatOptions = {},\n): Promise<VideoResponseFor<VideoResponseLivechat>> {\n\treturn video(client, {\n\t\ttype: \"livechat\",\n\t\tvideoUrl,\n\t\t...options,\n\t}) as Promise<VideoResponseFor<VideoResponseLivechat>>;\n}\n","import type { Client } from \"@hey-api/client-fetch\";\nimport type {\n\tGetChannelData,\n\tGetLogsData,\n\tGetPlaylistData,\n\tGetSuggestionsData,\n\tGetUsageData,\n\tGetVideoData,\n\tGetVideoResponse,\n\tSearchVideosData,\n\tVideoResponseComments,\n\tVideoResponseDetails,\n\tVideoResponseLivechat,\n\tVideoResponseReplies,\n\tVideoResponseTranscript,\n} from \"./generated/types.gen\";\nimport type {\n\tCreditsResponse,\n\tLogsResponse,\n\tUsageResponse,\n} from \"./methods/account\";\nimport * as accountMethods from \"./methods/account\";\nimport {\n\ttype ChannelOptions,\n\ttype ChannelResponse,\n\tchannel as getChannel,\n} from \"./methods/channel\";\nimport {\n\tkids as getKids,\n\ttype KidsDataFor,\n\ttype KidsInput,\n} from \"./methods/kids\";\nimport {\n\tmusic as getMusic,\n\ttype MusicDataFor,\n\ttype MusicInput,\n} from \"./methods/music\";\nimport {\n\tplaylist as getPlaylist,\n\ttype PlaylistOptions,\n\ttype PlaylistResponse,\n} from \"./methods/playlist\";\nimport type { MeteredResponse } from \"./methods/response\";\nimport {\n\ttype SearchOptions,\n\ttype SearchResponse,\n\tsearch as searchVideos,\n} from \"./methods/search\";\nimport {\n\tsuggest as getSuggestions,\n\ttype SuggestOptions,\n\ttype SuggestResponse,\n} from \"./methods/suggest\";\nimport type {\n\tCommentsOptions,\n\tLiveChatOptions,\n\tTranscriptOptions,\n\tVideoResponseFor,\n} from \"./methods/video\";\nimport * as videoMethods from \"./methods/video\";\nimport { createTransport } from \"./transport\";\n\nexport interface StophyOptions {\n\t/** Defaults to `STOPHY_API_KEY`. */\n\tapiKey?: string;\n\t/** Defaults to `STOPHY_BASE_URL` or `https://api.stophy.dev`. */\n\tbaseUrl?: string;\n\tfetch?: typeof globalThis.fetch;\n\theaders?: Record<string, string>;\n\tmaxRetries?: number;\n\tretryInitialDelayMs?: number;\n}\n\nexport type StophyClientInput = StophyOptions | string;\n\nfunction env(name: string): string | undefined {\n\treturn typeof process === \"undefined\" ? undefined : process.env[name];\n}\n\n/** Typed client for the Stophy API. */\nexport class Stophy {\n\treadonly client: Client;\n\n\tconstructor(input: StophyClientInput = {}) {\n\t\tconst options = typeof input === \"string\" ? { apiKey: input } : input;\n\t\tconst apiKey = options.apiKey?.trim() || env(\"STOPHY_API_KEY\")?.trim();\n\t\tif (!apiKey) {\n\t\t\tthrow new Error(\n\t\t\t\t\"Stophy: provide `apiKey` or set the STOPHY_API_KEY environment variable.\",\n\t\t\t);\n\t\t}\n\n\t\tthis.client = createTransport({\n\t\t\t...options,\n\t\t\tapiKey,\n\t\t\tbaseUrl: options.baseUrl ?? env(\"STOPHY_BASE_URL\"),\n\t\t});\n\t}\n\n\tasync video(\n\t\tbody: GetVideoData[\"body\"] & { type: \"details\" },\n\t): Promise<VideoResponseFor<VideoResponseDetails>>;\n\tasync video(\n\t\tbody: GetVideoData[\"body\"] & { type: \"transcript\" },\n\t): Promise<VideoResponseFor<VideoResponseTranscript>>;\n\tasync video(\n\t\tbody: GetVideoData[\"body\"] & { type: \"comments\" },\n\t): Promise<VideoResponseFor<VideoResponseComments>>;\n\tasync video(\n\t\tbody: GetVideoData[\"body\"] & { type: \"replies\" },\n\t): Promise<VideoResponseFor<VideoResponseReplies>>;\n\tasync video(\n\t\tbody: GetVideoData[\"body\"] & { type: \"livechat\" },\n\t): Promise<VideoResponseFor<VideoResponseLivechat>>;\n\tasync video(body: GetVideoData[\"body\"]): Promise<GetVideoResponse>;\n\tasync video(body: GetVideoData[\"body\"]): Promise<GetVideoResponse> {\n\t\treturn videoMethods.video(this.client, body);\n\t}\n\n\tvideoDetails(\n\t\tvideoUrl: string,\n\t): Promise<VideoResponseFor<VideoResponseDetails>> {\n\t\treturn videoMethods.videoDetails(this.client, videoUrl);\n\t}\n\n\ttranscript(\n\t\tvideoUrl: string,\n\t\toptions?: TranscriptOptions,\n\t): Promise<VideoResponseFor<VideoResponseTranscript>> {\n\t\treturn videoMethods.transcript(this.client, videoUrl, options);\n\t}\n\n\tcomments(\n\t\tvideoUrl: string,\n\t\toptions?: CommentsOptions,\n\t): Promise<VideoResponseFor<VideoResponseComments>> {\n\t\treturn videoMethods.comments(this.client, videoUrl, options);\n\t}\n\n\treplies(\n\t\tcontinuationToken: string,\n\t): Promise<VideoResponseFor<VideoResponseReplies>> {\n\t\treturn videoMethods.replies(this.client, continuationToken);\n\t}\n\n\tliveChat(\n\t\tvideoUrl: string,\n\t\toptions?: LiveChatOptions,\n\t): Promise<VideoResponseFor<VideoResponseLivechat>> {\n\t\treturn videoMethods.liveChat(this.client, videoUrl, options);\n\t}\n\n\tasync search(body: SearchVideosData[\"body\"]): Promise<SearchResponse>;\n\tasync search(query: string, options?: SearchOptions): Promise<SearchResponse>;\n\tasync search(\n\t\tqueryOrBody: string | SearchVideosData[\"body\"],\n\t\toptions?: SearchOptions,\n\t): Promise<SearchResponse> {\n\t\treturn searchVideos(this.client, queryOrBody, options);\n\t}\n\n\tasync channel(body: GetChannelData[\"body\"]): Promise<ChannelResponse>;\n\tasync channel(\n\t\tchannelUrl: string,\n\t\toptions?: ChannelOptions,\n\t): Promise<ChannelResponse>;\n\tasync channel(\n\t\turlOrBody: string | GetChannelData[\"body\"],\n\t\toptions?: ChannelOptions,\n\t): Promise<ChannelResponse> {\n\t\treturn getChannel(this.client, urlOrBody, options);\n\t}\n\n\tasync playlist(body: GetPlaylistData[\"body\"]): Promise<PlaylistResponse>;\n\tasync playlist(\n\t\tplaylistUrl: string,\n\t\toptions?: PlaylistOptions,\n\t): Promise<PlaylistResponse>;\n\tasync playlist(\n\t\turlOrBody: string | GetPlaylistData[\"body\"],\n\t\toptions?: PlaylistOptions,\n\t): Promise<PlaylistResponse> {\n\t\treturn getPlaylist(this.client, urlOrBody, options);\n\t}\n\n\tasync suggest(query: GetSuggestionsData[\"body\"]): Promise<SuggestResponse>;\n\tasync suggest(\n\t\tquery: string,\n\t\toptions?: SuggestOptions,\n\t): Promise<SuggestResponse>;\n\tasync suggest(\n\t\tqueryOrOptions: string | GetSuggestionsData[\"body\"],\n\t\toptions?: SuggestOptions,\n\t): Promise<SuggestResponse> {\n\t\treturn getSuggestions(this.client, queryOrOptions, options);\n\t}\n\n\tmusic<T extends MusicInput>(\n\t\tbody: T,\n\t): Promise<MeteredResponse<MusicDataFor<T[\"type\"]>>> {\n\t\treturn getMusic(this.client, body);\n\t}\n\n\tkids<T extends KidsInput>(\n\t\tbody: T,\n\t): Promise<MeteredResponse<KidsDataFor<T[\"type\"]>>> {\n\t\treturn getKids(this.client, body);\n\t}\n\n\tcredits(): Promise<CreditsResponse> {\n\t\treturn accountMethods.credits(this.client);\n\t}\n\n\tlogs(query?: GetLogsData[\"query\"]): Promise<LogsResponse> {\n\t\treturn accountMethods.logs(this.client, query);\n\t}\n\n\tusage(query?: GetUsageData[\"query\"]): Promise<UsageResponse> {\n\t\treturn accountMethods.usage(this.client, query);\n\t}\n}\n"]}
1
+ {"version":3,"sources":["../src/errors.ts","../src/account.ts","../src/bind.ts","../src/generated/surface.gen.ts","../package.json","../src/transport.ts","../src/client.ts"],"names":["isRecord"],"mappings":"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","file":"index.js","sourcesContent":["import type { _Error } from \"./generated/types.gen\";\n\nexport type StophyErrorCode = _Error[\"error\"][\"code\"];\n\n/** Thrown when the Stophy API responds with a non-success status. */\nexport class StophyError extends Error {\n\treadonly code?: string;\n\treadonly retryable: boolean;\n\treadonly retryAfterSeconds?: number;\n\treadonly status: number;\n\treadonly requestId?: string;\n\n\tconstructor(\n\t\tmessage: string,\n\t\toptions: {\n\t\t\tstatus: number;\n\t\t\tcode?: string;\n\t\t\tretryable: boolean;\n\t\t\tretryAfterSeconds?: number;\n\t\t\trequestId?: string;\n\t\t},\n\t) {\n\t\tsuper(message);\n\t\tthis.name = \"StophyError\";\n\t\tthis.status = options.status;\n\t\tthis.code = options.code;\n\t\tthis.retryable = options.retryable;\n\t\tthis.retryAfterSeconds = options.retryAfterSeconds;\n\t\tthis.requestId = options.requestId;\n\t}\n}\n","import { StophyError } from \"./errors\";\nimport type { Caller } from \"./transport\";\n\nexport interface Usage {\n\tbalanceMicros: number;\n\tcreditsUsed: number;\n\trequestCount: number;\n}\n\nexport interface LogEntry {\n\tapiKeyId: string | null;\n\tapiKeyName: string | null;\n\tcreatedAt: string;\n\tcredits: number;\n\tdurationMs: number | null;\n\tendpoint: string;\n\tid: string;\n\tmethod: string;\n\tresponse: string;\n\tstatus: number;\n}\n\nexport interface Logs {\n\tendpoints: string[];\n\tlogs: LogEntry[];\n\tpage: number;\n\tpageSize: number;\n\ttotal: number;\n\ttotalPages: number;\n}\n\nexport interface LogsQuery {\n\tapiKeyId?: string;\n\tdays?: number;\n\tendpoint?: string;\n\tpage?: number;\n}\n\nexport function usage(call: Caller): Promise<Usage> {\n\treturn call({ method: \"GET\", path: \"/v1/usage\" }).then(parseUsage);\n}\n\nexport function logs(call: Caller, query?: LogsQuery): Promise<Logs> {\n\tconst params: Record<string, string | number | undefined> = {};\n\tif (query?.apiKeyId !== undefined) params.apiKeyId = query.apiKeyId;\n\tif (query?.days !== undefined) params.days = query.days;\n\tif (query?.endpoint !== undefined) params.endpoint = query.endpoint;\n\tif (query?.page !== undefined) params.page = query.page;\n\treturn call({ method: \"GET\", path: \"/v1/logs\", query: params }).then(\n\t\tparseLogs,\n\t);\n}\n\nfunction parseUsage(value: unknown): Usage {\n\tif (!isRecord(value)) return unexpected(\"usage\");\n\tconst balanceMicros = numberField(value, \"balanceMicros\");\n\tconst creditsUsed = numberField(value, \"creditsUsed\");\n\tconst requestCount = numberField(value, \"requestCount\");\n\treturn { balanceMicros, creditsUsed, requestCount };\n}\n\nfunction parseLogs(value: unknown): Logs {\n\tif (\n\t\t!isRecord(value) ||\n\t\t!Array.isArray(value.logs) ||\n\t\t!Array.isArray(value.endpoints)\n\t) {\n\t\treturn unexpected(\"logs\");\n\t}\n\treturn {\n\t\tendpoints: value.endpoints.map((item) => {\n\t\t\tif (typeof item !== \"string\") return unexpected(\"logs.endpoints\");\n\t\t\treturn item;\n\t\t}),\n\t\tlogs: value.logs.map(parseLog),\n\t\tpage: numberField(value, \"page\"),\n\t\tpageSize: numberField(value, \"pageSize\"),\n\t\ttotal: numberField(value, \"total\"),\n\t\ttotalPages: numberField(value, \"totalPages\"),\n\t};\n}\n\nfunction parseLog(value: unknown): LogEntry {\n\tif (!isRecord(value)) return unexpected(\"logs.logs\");\n\treturn {\n\t\tapiKeyId: stringOrNull(value, \"apiKeyId\"),\n\t\tapiKeyName: stringOrNull(value, \"apiKeyName\"),\n\t\tcreatedAt: stringField(value, \"createdAt\"),\n\t\tcredits: numberField(value, \"credits\"),\n\t\tdurationMs: numberOrNull(value, \"durationMs\"),\n\t\tendpoint: stringField(value, \"endpoint\"),\n\t\tid: stringField(value, \"id\"),\n\t\tmethod: stringField(value, \"method\"),\n\t\tresponse: stringField(value, \"response\"),\n\t\tstatus: numberField(value, \"status\"),\n\t};\n}\n\nfunction numberField(record: Record<string, unknown>, field: string): number {\n\tconst value = record[field];\n\tif (typeof value !== \"number\") return unexpected(field);\n\treturn value;\n}\n\nfunction numberOrNull(\n\trecord: Record<string, unknown>,\n\tfield: string,\n): number | null {\n\tconst value = record[field];\n\tif (value === null) return null;\n\tif (typeof value !== \"number\") return unexpected(field);\n\treturn value;\n}\n\nfunction stringField(record: Record<string, unknown>, field: string): string {\n\tconst value = record[field];\n\tif (typeof value !== \"string\") return unexpected(field);\n\treturn value;\n}\n\nfunction stringOrNull(\n\trecord: Record<string, unknown>,\n\tfield: string,\n): string | null {\n\tconst value = record[field];\n\tif (value === null) return null;\n\tif (typeof value !== \"string\") return unexpected(field);\n\treturn value;\n}\n\nfunction unexpected(field: string): never {\n\tthrow new StophyError(`Stophy returned an unexpected ${field}`, {\n\t\tstatus: 200,\n\t\tretryable: false,\n\t});\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n","import type { Caller, CallOptions } from \"./transport\";\n\nexport interface MarkdownOptions {\n\tformat: \"markdown\";\n\tsignal?: AbortSignal;\n}\n\nexport interface JsonOptions {\n\tformat?: undefined;\n\tsignal?: AbortSignal;\n}\n\nexport function post<Body, Response>(path: string, call: Caller) {\n\tfunction run(body: Body, options: MarkdownOptions): Promise<string>;\n\tfunction run(body: Body, options?: JsonOptions): Promise<Response>;\n\tfunction run(body: Body, options?: CallOptions): Promise<unknown> {\n\t\treturn call({ method: \"POST\", path, body, options });\n\t}\n\treturn run;\n}\n\nexport function postOptional<Body, Response>(path: string, call: Caller) {\n\tfunction run(options: MarkdownOptions): Promise<string>;\n\tfunction run(\n\t\tbody: Body | undefined,\n\t\toptions: MarkdownOptions,\n\t): Promise<string>;\n\tfunction run(body?: Body, options?: JsonOptions): Promise<Response>;\n\tfunction run(\n\t\tbody?: Body | MarkdownOptions,\n\t\toptions?: CallOptions,\n\t): Promise<unknown> {\n\t\tif (isMarkdownOptions(body) && options === undefined) {\n\t\t\treturn call({ method: \"POST\", path, body: {}, options: body });\n\t\t}\n\t\treturn call({ method: \"POST\", path, body: body ?? {}, options });\n\t}\n\treturn run;\n}\n\nexport function get<Response>(path: string, call: Caller) {\n\tfunction run(options: MarkdownOptions): Promise<string>;\n\tfunction run(options?: JsonOptions): Promise<Response>;\n\tfunction run(options?: CallOptions): Promise<unknown> {\n\t\treturn call({ method: \"GET\", path, options });\n\t}\n\treturn run;\n}\n\nfunction isMarkdownOptions(value: unknown): value is MarkdownOptions {\n\tif (typeof value !== \"object\" || value === null) return false;\n\treturn \"format\" in value && value.format === \"markdown\";\n}\n","// Generated by scripts/gen-surface.ts. Do not edit.\n\nimport { get, post, postOptional } from \"../bind\";\nimport type {\n\tAirbnbCalendarData,\n\tAirbnbCalendarResponse,\n\tAirbnbListingData,\n\tAirbnbListingResponse,\n\tAirbnbReviewsData,\n\tAirbnbReviewsResponse,\n\tAirbnbSearchData,\n\tAirbnbSearchResponse,\n\tAliexpressProductData,\n\tAliexpressProductResponse,\n\tAliexpressSearchData,\n\tAliexpressSearchResponse,\n\tAmazonBestsellersData,\n\tAmazonBestsellersResponse,\n\tAmazonProductData,\n\tAmazonProductResponse,\n\tAmazonSearchData,\n\tAmazonSearchResponse,\n\tAmazonSuggestData,\n\tAmazonSuggestResponse,\n\tAppstoreAppData,\n\tAppstoreAppResponse,\n\tAppstoreReviewsData,\n\tAppstoreReviewsResponse,\n\tAppstoreSearchData,\n\tAppstoreSearchResponse,\n\tAppstoreTopData,\n\tAppstoreTopResponse,\n\tBlueskyFollowersData,\n\tBlueskyFollowersResponse,\n\tBlueskyPostData,\n\tBlueskyPostResponse,\n\tBlueskyPostsData,\n\tBlueskyPostsResponse,\n\tBlueskyProfileData,\n\tBlueskyProfileResponse,\n\tCryptoBinanceAnnouncementsData,\n\tCryptoBinanceAnnouncementsResponse,\n\tCryptoCategoriesData,\n\tCryptoCategoriesResponse,\n\tCryptoCoinData,\n\tCryptoCoinResponse,\n\tCryptoCoinsData,\n\tCryptoCoinsResponse,\n\tCryptoDexNewData,\n\tCryptoDexNewResponse,\n\tCryptoDexPairsData,\n\tCryptoDexPairsResponse,\n\tCryptoDexSearchData,\n\tCryptoDexSearchResponse,\n\tCryptoDexTokenData,\n\tCryptoDexTokenResponse,\n\tCryptoHistoryData,\n\tCryptoHistoryResponse,\n\tCryptoMoversData,\n\tCryptoMoversResponse,\n\tCryptoNewData,\n\tCryptoNewResponse,\n\tCryptoPumpCoinData,\n\tCryptoPumpCoinResponse,\n\tCryptoPumpCoinsData,\n\tCryptoPumpCoinsResponse,\n\tCryptoPumpTradesData,\n\tCryptoPumpTradesResponse,\n\tCryptoTokenHoldersData,\n\tCryptoTokenHoldersResponse,\n\tCryptoTrendingData,\n\tCryptoTrendingResponse,\n\tCryptoWalletData,\n\tCryptoWalletResponse,\n\tDomainDnsData,\n\tDomainDnsResponse,\n\tDomainTechData,\n\tDomainTechResponse,\n\tDomainWhoisData,\n\tDomainWhoisResponse,\n\tEmailCheckData,\n\tEmailCheckResponse,\n\tFinanceHistoryData,\n\tFinanceHistoryResponse,\n\tFinanceProfileData,\n\tFinanceProfileResponse,\n\tFinanceQuoteData,\n\tFinanceQuoteResponse,\n\tFinanceSearchData,\n\tFinanceSearchResponse,\n\tGoogleAdsAdData,\n\tGoogleAdsAdResponse,\n\tGoogleAdsAdvertisersData,\n\tGoogleAdsAdvertisersResponse,\n\tGoogleAdsSearchData,\n\tGoogleAdsSearchResponse,\n\tGoogleSuggestData,\n\tGoogleSuggestResponse,\n\tGoogleTrendsInterestData,\n\tGoogleTrendsInterestResponse,\n\tGoogleTrendsRegionsData,\n\tGoogleTrendsRegionsResponse,\n\tGoogleTrendsRelatedData,\n\tGoogleTrendsRelatedResponse,\n\tGoogleTrendsTrendingData,\n\tGoogleTrendsTrendingResponse,\n\tGoogleplayAppData,\n\tGoogleplayAppResponse,\n\tGoogleplayReviewsData,\n\tGoogleplayReviewsResponse,\n\tGoogleplaySearchData,\n\tGoogleplaySearchResponse,\n\tGoogletravelFlightsData,\n\tGoogletravelFlightsResponse,\n\tImmoscoutListingData,\n\tImmoscoutListingResponse,\n\tImmoscoutSearchData,\n\tImmoscoutSearchResponse,\n\tIndeedJobData,\n\tIndeedJobResponse,\n\tIndeedSearchData,\n\tIndeedSearchResponse,\n\tInstagramCommentsData,\n\tInstagramCommentsRepliesData,\n\tInstagramCommentsRepliesResponse,\n\tInstagramCommentsResponse,\n\tInstagramPostData,\n\tInstagramPostResponse,\n\tInstagramPostsData,\n\tInstagramPostsResponse,\n\tInstagramProfileData,\n\tInstagramProfileResponse,\n\tInstagramSearchData,\n\tInstagramSearchResponse,\n\tInstagramTranscriptData,\n\tInstagramTranscriptResponse,\n\tInstagramUrlData,\n\tInstagramUrlResponse,\n\tKickChannelData,\n\tKickChannelResponse,\n\tKickClipsData,\n\tKickClipsResponse,\n\tKickVideosData,\n\tKickVideosResponse,\n\tLinkedinAdsAdData,\n\tLinkedinAdsAdResponse,\n\tLinkedinAdsSearchData,\n\tLinkedinAdsSearchResponse,\n\tLinkedinCompanyData,\n\tLinkedinCompanyPostsData,\n\tLinkedinCompanyPostsResponse,\n\tLinkedinCompanyResponse,\n\tLinkedinJobsJobData,\n\tLinkedinJobsJobResponse,\n\tLinkedinJobsSearchData,\n\tLinkedinJobsSearchResponse,\n\tLinkedinPostsData,\n\tLinkedinPostsResponse,\n\tLinkedinProfileData,\n\tLinkedinProfileResponse,\n\tListEndpointsResponse,\n\tMapsPlaceData,\n\tMapsPlaceResponse,\n\tMapsReviewsData,\n\tMapsReviewsResponse,\n\tMapsSearchData,\n\tMapsSearchResponse,\n\tMastodonHashtagData,\n\tMastodonHashtagResponse,\n\tMastodonPostData,\n\tMastodonPostResponse,\n\tMastodonPostsData,\n\tMastodonPostsResponse,\n\tMastodonProfileData,\n\tMastodonProfileResponse,\n\tMetaAdsAdData,\n\tMetaAdsAdResponse,\n\tMetaAdsPageData,\n\tMetaAdsPageResponse,\n\tMetaAdsSearchData,\n\tMetaAdsSearchResponse,\n\tMicrosoftAdsAdData,\n\tMicrosoftAdsAdResponse,\n\tMicrosoftAdsAdvertisersData,\n\tMicrosoftAdsAdvertisersResponse,\n\tMicrosoftAdsSearchData,\n\tMicrosoftAdsSearchResponse,\n\tPinterestAdsAdData,\n\tPinterestAdsAdResponse,\n\tPinterestAdsSearchData,\n\tPinterestAdsSearchResponse,\n\tPinterestBoardData,\n\tPinterestBoardResponse,\n\tPinterestPinData,\n\tPinterestPinResponse,\n\tPinterestSearchData,\n\tPinterestSearchResponse,\n\tPinterestUserData,\n\tPinterestUserResponse,\n\tQuoraQuestionData,\n\tQuoraQuestionResponse,\n\tRealtorPropertyData,\n\tRealtorPropertyResponse,\n\tRealtorSearchData,\n\tRealtorSearchResponse,\n\tRedditCommentsMoreData,\n\tRedditCommentsMoreResponse,\n\tRedditDomainData,\n\tRedditDomainResponse,\n\tRedditPostData,\n\tRedditPostResponse,\n\tRedditSearchData,\n\tRedditSearchResponse,\n\tRedditSubredditData,\n\tRedditSubredditResponse,\n\tRedditUserData,\n\tRedditUserResponse,\n\tRedfinPropertyData,\n\tRedfinPropertyResponse,\n\tRedfinSearchData,\n\tRedfinSearchResponse,\n\tRightmovePropertyData,\n\tRightmovePropertyResponse,\n\tRightmoveSearchData,\n\tRightmoveSearchResponse,\n\tShopifyCollectionsData,\n\tShopifyCollectionsResponse,\n\tShopifyProductsData,\n\tShopifyProductsResponse,\n\tShopifyStoreData,\n\tShopifyStoreResponse,\n\tSiteMapData,\n\tSiteMapResponse,\n\tSiteSeoData,\n\tSiteSeoResponse,\n\tSnapchatAdsAdData,\n\tSnapchatAdsAdResponse,\n\tSnapchatAdsSearchData,\n\tSnapchatAdsSearchResponse,\n\tSnapchatProfileData,\n\tSnapchatProfileResponse,\n\tTelegramChannelData,\n\tTelegramChannelResponse,\n\tTelegramPostData,\n\tTelegramPostResponse,\n\tTelegramPostsData,\n\tTelegramPostsResponse,\n\tThreadsPostData,\n\tThreadsPostResponse,\n\tThreadsPostsData,\n\tThreadsPostsResponse,\n\tThreadsProfileData,\n\tThreadsProfileResponse,\n\tThreadsSearchData,\n\tThreadsSearchResponse,\n\tTiktokAdsAdData,\n\tTiktokAdsAdResponse,\n\tTiktokAdsSearchData,\n\tTiktokAdsSearchResponse,\n\tTiktokCommentsData,\n\tTiktokCommentsRepliesData,\n\tTiktokCommentsRepliesResponse,\n\tTiktokCommentsResponse,\n\tTiktokHashtagData,\n\tTiktokHashtagResponse,\n\tTiktokPostsData,\n\tTiktokPostsResponse,\n\tTiktokProfileData,\n\tTiktokProfileResponse,\n\tTiktokSearchData,\n\tTiktokSearchResponse,\n\tTiktokTranscriptData,\n\tTiktokTranscriptResponse,\n\tTiktokUrlData,\n\tTiktokUrlResponse,\n\tTiktokVideoData,\n\tTiktokVideoResponse,\n\tTripadvisorPlaceData,\n\tTripadvisorPlaceResponse,\n\tTripadvisorReviewsData,\n\tTripadvisorReviewsResponse,\n\tTripadvisorSearchData,\n\tTripadvisorSearchResponse,\n\tTumblrBlogData,\n\tTumblrBlogResponse,\n\tTumblrPostData,\n\tTumblrPostResponse,\n\tTumblrPostsData,\n\tTumblrPostsResponse,\n\tTumblrSearchData,\n\tTumblrSearchResponse,\n\tUpworkJobData,\n\tUpworkJobResponse,\n\tUpworkSearchData,\n\tUpworkSearchResponse,\n\tWalmartProductData,\n\tWalmartProductResponse,\n\tWalmartSearchData,\n\tWalmartSearchResponse,\n\tWebContactsData,\n\tWebContactsResponse,\n\tWebNewsData,\n\tWebNewsResponse,\n\tWebSearchData,\n\tWebSearchResponse,\n\tXTweetData,\n\tXTweetResponse,\n\tYoutubeChannelData,\n\tYoutubeChannelResponse,\n\tYoutubeCommentsData,\n\tYoutubeCommentsRepliesData,\n\tYoutubeCommentsRepliesResponse,\n\tYoutubeCommentsResponse,\n\tYoutubePlaylistData,\n\tYoutubePlaylistResponse,\n\tYoutubeSearchData,\n\tYoutubeSearchResponse,\n\tYoutubeSuggestData,\n\tYoutubeSuggestResponse,\n\tYoutubeTranscriptData,\n\tYoutubeTranscriptResponse,\n\tYoutubeVideoData,\n\tYoutubeVideoResponse,\n\tZillowPropertyData,\n\tZillowPropertyResponse,\n\tZillowSearchData,\n\tZillowSearchResponse,\n} from \"./types.gen\";\nimport type { Caller } from \"../transport\";\n\nexport function bindSurface(call: Caller) {\n\treturn {\n\t\tendpoints: get<ListEndpointsResponse>(\"/v1/endpoints\", call),\n\t\tweb: {\n\t\t\tsearch: post<WebSearchData[\"body\"], WebSearchResponse>(\"/v1/web/search\", call),\n\t\t\tnews: postOptional<WebNewsData[\"body\"], WebNewsResponse>(\"/v1/web/news\", call),\n\t\t\tcontacts: post<WebContactsData[\"body\"], WebContactsResponse>(\"/v1/web/contacts\", call),\n\t\t},\n\t\tyoutube: {\n\t\t\tsearch: post<YoutubeSearchData[\"body\"], YoutubeSearchResponse>(\"/v1/youtube/search\", call),\n\t\t\tvideo: post<YoutubeVideoData[\"body\"], YoutubeVideoResponse>(\"/v1/youtube/video\", call),\n\t\t\ttranscript: post<YoutubeTranscriptData[\"body\"], YoutubeTranscriptResponse>(\"/v1/youtube/transcript\", call),\n\t\t\tcomments: Object.assign(post<YoutubeCommentsData[\"body\"], YoutubeCommentsResponse>(\"/v1/youtube/comments\", call), {\n\t\t\t\t\treplies: post<YoutubeCommentsRepliesData[\"body\"], YoutubeCommentsRepliesResponse>(\"/v1/youtube/comments/replies\", call),\n\t\t\t\t}),\n\t\t\tchannel: post<YoutubeChannelData[\"body\"], YoutubeChannelResponse>(\"/v1/youtube/channel\", call),\n\t\t\tplaylist: post<YoutubePlaylistData[\"body\"], YoutubePlaylistResponse>(\"/v1/youtube/playlist\", call),\n\t\t\tsuggest: post<YoutubeSuggestData[\"body\"], YoutubeSuggestResponse>(\"/v1/youtube/suggest\", call),\n\t\t},\n\t\treddit: {\n\t\t\tsearch: post<RedditSearchData[\"body\"], RedditSearchResponse>(\"/v1/reddit/search\", call),\n\t\t\tpost: post<RedditPostData[\"body\"], RedditPostResponse>(\"/v1/reddit/post\", call),\n\t\t\tcomments: {\n\t\t\t\tmore: post<RedditCommentsMoreData[\"body\"], RedditCommentsMoreResponse>(\"/v1/reddit/comments/more\", call),\n\t\t\t},\n\t\t\tsubreddit: post<RedditSubredditData[\"body\"], RedditSubredditResponse>(\"/v1/reddit/subreddit\", call),\n\t\t\tuser: post<RedditUserData[\"body\"], RedditUserResponse>(\"/v1/reddit/user\", call),\n\t\t\tdomain: post<RedditDomainData[\"body\"], RedditDomainResponse>(\"/v1/reddit/domain\", call),\n\t\t},\n\t\tmaps: {\n\t\t\tsearch: post<MapsSearchData[\"body\"], MapsSearchResponse>(\"/v1/maps/search\", call),\n\t\t\tplace: post<MapsPlaceData[\"body\"], MapsPlaceResponse>(\"/v1/maps/place\", call),\n\t\t\treviews: post<MapsReviewsData[\"body\"], MapsReviewsResponse>(\"/v1/maps/reviews\", call),\n\t\t},\n\t\tinstagram: {\n\t\t\tprofile: post<InstagramProfileData[\"body\"], InstagramProfileResponse>(\"/v1/instagram/profile\", call),\n\t\t\tposts: post<InstagramPostsData[\"body\"], InstagramPostsResponse>(\"/v1/instagram/posts\", call),\n\t\t\tpost: post<InstagramPostData[\"body\"], InstagramPostResponse>(\"/v1/instagram/post\", call),\n\t\t\turl: post<InstagramUrlData[\"body\"], InstagramUrlResponse>(\"/v1/instagram/url\", call),\n\t\t\tsearch: post<InstagramSearchData[\"body\"], InstagramSearchResponse>(\"/v1/instagram/search\", call),\n\t\t\ttranscript: post<InstagramTranscriptData[\"body\"], InstagramTranscriptResponse>(\"/v1/instagram/transcript\", call),\n\t\t\tcomments: Object.assign(post<InstagramCommentsData[\"body\"], InstagramCommentsResponse>(\"/v1/instagram/comments\", call), {\n\t\t\t\t\treplies: post<InstagramCommentsRepliesData[\"body\"], InstagramCommentsRepliesResponse>(\"/v1/instagram/comments/replies\", call),\n\t\t\t\t}),\n\t\t},\n\t\ttiktok: {\n\t\t\tprofile: post<TiktokProfileData[\"body\"], TiktokProfileResponse>(\"/v1/tiktok/profile\", call),\n\t\t\tvideo: post<TiktokVideoData[\"body\"], TiktokVideoResponse>(\"/v1/tiktok/video\", call),\n\t\t\turl: post<TiktokUrlData[\"body\"], TiktokUrlResponse>(\"/v1/tiktok/url\", call),\n\t\t\ttranscript: post<TiktokTranscriptData[\"body\"], TiktokTranscriptResponse>(\"/v1/tiktok/transcript\", call),\n\t\t\tposts: post<TiktokPostsData[\"body\"], TiktokPostsResponse>(\"/v1/tiktok/posts\", call),\n\t\t\thashtag: post<TiktokHashtagData[\"body\"], TiktokHashtagResponse>(\"/v1/tiktok/hashtag\", call),\n\t\t\tcomments: Object.assign(post<TiktokCommentsData[\"body\"], TiktokCommentsResponse>(\"/v1/tiktok/comments\", call), {\n\t\t\t\t\treplies: post<TiktokCommentsRepliesData[\"body\"], TiktokCommentsRepliesResponse>(\"/v1/tiktok/comments/replies\", call),\n\t\t\t\t}),\n\t\t\tsearch: post<TiktokSearchData[\"body\"], TiktokSearchResponse>(\"/v1/tiktok/search\", call),\n\t\t\tads: {\n\t\t\t\tsearch: postOptional<TiktokAdsSearchData[\"body\"], TiktokAdsSearchResponse>(\"/v1/tiktok/ads/search\", call),\n\t\t\t\tad: post<TiktokAdsAdData[\"body\"], TiktokAdsAdResponse>(\"/v1/tiktok/ads/ad\", call),\n\t\t\t},\n\t\t},\n\t\tbluesky: {\n\t\t\tprofile: post<BlueskyProfileData[\"body\"], BlueskyProfileResponse>(\"/v1/bluesky/profile\", call),\n\t\t\tposts: post<BlueskyPostsData[\"body\"], BlueskyPostsResponse>(\"/v1/bluesky/posts\", call),\n\t\t\tpost: post<BlueskyPostData[\"body\"], BlueskyPostResponse>(\"/v1/bluesky/post\", call),\n\t\t\tfollowers: post<BlueskyFollowersData[\"body\"], BlueskyFollowersResponse>(\"/v1/bluesky/followers\", call),\n\t\t},\n\t\tmastodon: {\n\t\t\tprofile: post<MastodonProfileData[\"body\"], MastodonProfileResponse>(\"/v1/mastodon/profile\", call),\n\t\t\tposts: post<MastodonPostsData[\"body\"], MastodonPostsResponse>(\"/v1/mastodon/posts\", call),\n\t\t\tpost: post<MastodonPostData[\"body\"], MastodonPostResponse>(\"/v1/mastodon/post\", call),\n\t\t\thashtag: post<MastodonHashtagData[\"body\"], MastodonHashtagResponse>(\"/v1/mastodon/hashtag\", call),\n\t\t},\n\t\tthreads: {\n\t\t\tprofile: post<ThreadsProfileData[\"body\"], ThreadsProfileResponse>(\"/v1/threads/profile\", call),\n\t\t\tposts: post<ThreadsPostsData[\"body\"], ThreadsPostsResponse>(\"/v1/threads/posts\", call),\n\t\t\tpost: post<ThreadsPostData[\"body\"], ThreadsPostResponse>(\"/v1/threads/post\", call),\n\t\t\tsearch: post<ThreadsSearchData[\"body\"], ThreadsSearchResponse>(\"/v1/threads/search\", call),\n\t\t},\n\t\ttelegram: {\n\t\t\tchannel: post<TelegramChannelData[\"body\"], TelegramChannelResponse>(\"/v1/telegram/channel\", call),\n\t\t\tposts: post<TelegramPostsData[\"body\"], TelegramPostsResponse>(\"/v1/telegram/posts\", call),\n\t\t\tpost: post<TelegramPostData[\"body\"], TelegramPostResponse>(\"/v1/telegram/post\", call),\n\t\t},\n\t\tmeta: {\n\t\t\tads: {\n\t\t\t\tsearch: post<MetaAdsSearchData[\"body\"], MetaAdsSearchResponse>(\"/v1/meta/ads/search\", call),\n\t\t\t\tpage: post<MetaAdsPageData[\"body\"], MetaAdsPageResponse>(\"/v1/meta/ads/page\", call),\n\t\t\t\tad: post<MetaAdsAdData[\"body\"], MetaAdsAdResponse>(\"/v1/meta/ads/ad\", call),\n\t\t\t},\n\t\t},\n\t\tlinkedin: {\n\t\t\tjobs: {\n\t\t\t\tsearch: postOptional<LinkedinJobsSearchData[\"body\"], LinkedinJobsSearchResponse>(\"/v1/linkedin/jobs/search\", call),\n\t\t\t\tjob: post<LinkedinJobsJobData[\"body\"], LinkedinJobsJobResponse>(\"/v1/linkedin/jobs/job\", call),\n\t\t\t},\n\t\t\tads: {\n\t\t\t\tsearch: postOptional<LinkedinAdsSearchData[\"body\"], LinkedinAdsSearchResponse>(\"/v1/linkedin/ads/search\", call),\n\t\t\t\tad: post<LinkedinAdsAdData[\"body\"], LinkedinAdsAdResponse>(\"/v1/linkedin/ads/ad\", call),\n\t\t\t},\n\t\t\tcompany: Object.assign(post<LinkedinCompanyData[\"body\"], LinkedinCompanyResponse>(\"/v1/linkedin/company\", call), {\n\t\t\t\t\tposts: post<LinkedinCompanyPostsData[\"body\"], LinkedinCompanyPostsResponse>(\"/v1/linkedin/company/posts\", call),\n\t\t\t\t}),\n\t\t\tprofile: post<LinkedinProfileData[\"body\"], LinkedinProfileResponse>(\"/v1/linkedin/profile\", call),\n\t\t\tposts: postOptional<LinkedinPostsData[\"body\"], LinkedinPostsResponse>(\"/v1/linkedin/posts\", call),\n\t\t},\n\t\tzillow: {\n\t\t\tsearch: postOptional<ZillowSearchData[\"body\"], ZillowSearchResponse>(\"/v1/zillow/search\", call),\n\t\t\tproperty: post<ZillowPropertyData[\"body\"], ZillowPropertyResponse>(\"/v1/zillow/property\", call),\n\t\t},\n\t\tgoogle: {\n\t\t\tads: {\n\t\t\t\tadvertisers: post<GoogleAdsAdvertisersData[\"body\"], GoogleAdsAdvertisersResponse>(\"/v1/google/ads/advertisers\", call),\n\t\t\t\tsearch: postOptional<GoogleAdsSearchData[\"body\"], GoogleAdsSearchResponse>(\"/v1/google/ads/search\", call),\n\t\t\t\tad: post<GoogleAdsAdData[\"body\"], GoogleAdsAdResponse>(\"/v1/google/ads/ad\", call),\n\t\t\t},\n\t\t\tsuggest: post<GoogleSuggestData[\"body\"], GoogleSuggestResponse>(\"/v1/google/suggest\", call),\n\t\t\ttrends: {\n\t\t\t\tinterest: post<GoogleTrendsInterestData[\"body\"], GoogleTrendsInterestResponse>(\"/v1/google/trends/interest\", call),\n\t\t\t\tregions: post<GoogleTrendsRegionsData[\"body\"], GoogleTrendsRegionsResponse>(\"/v1/google/trends/regions\", call),\n\t\t\t\trelated: post<GoogleTrendsRelatedData[\"body\"], GoogleTrendsRelatedResponse>(\"/v1/google/trends/related\", call),\n\t\t\t\ttrending: postOptional<GoogleTrendsTrendingData[\"body\"], GoogleTrendsTrendingResponse>(\"/v1/google/trends/trending\", call),\n\t\t\t},\n\t\t},\n\t\tupwork: {\n\t\t\tsearch: postOptional<UpworkSearchData[\"body\"], UpworkSearchResponse>(\"/v1/upwork/search\", call),\n\t\t\tjob: post<UpworkJobData[\"body\"], UpworkJobResponse>(\"/v1/upwork/job\", call),\n\t\t},\n\t\tamazon: {\n\t\t\tsuggest: post<AmazonSuggestData[\"body\"], AmazonSuggestResponse>(\"/v1/amazon/suggest\", call),\n\t\t\tsearch: postOptional<AmazonSearchData[\"body\"], AmazonSearchResponse>(\"/v1/amazon/search\", call),\n\t\t\tproduct: post<AmazonProductData[\"body\"], AmazonProductResponse>(\"/v1/amazon/product\", call),\n\t\t\tbestsellers: post<AmazonBestsellersData[\"body\"], AmazonBestsellersResponse>(\"/v1/amazon/bestsellers\", call),\n\t\t},\n\t\tsite: {\n\t\t\tmap: post<SiteMapData[\"body\"], SiteMapResponse>(\"/v1/site/map\", call),\n\t\t\tseo: post<SiteSeoData[\"body\"], SiteSeoResponse>(\"/v1/site/seo\", call),\n\t\t},\n\t\tdomain: {\n\t\t\twhois: post<DomainWhoisData[\"body\"], DomainWhoisResponse>(\"/v1/domain/whois\", call),\n\t\t\tdns: post<DomainDnsData[\"body\"], DomainDnsResponse>(\"/v1/domain/dns\", call),\n\t\t\ttech: post<DomainTechData[\"body\"], DomainTechResponse>(\"/v1/domain/tech\", call),\n\t\t},\n\t\temail: {\n\t\t\tcheck: post<EmailCheckData[\"body\"], EmailCheckResponse>(\"/v1/email/check\", call),\n\t\t},\n\t\tcrypto: {\n\t\t\tcoins: postOptional<CryptoCoinsData[\"body\"], CryptoCoinsResponse>(\"/v1/crypto/coins\", call),\n\t\t\tcoin: post<CryptoCoinData[\"body\"], CryptoCoinResponse>(\"/v1/crypto/coin\", call),\n\t\t\thistory: post<CryptoHistoryData[\"body\"], CryptoHistoryResponse>(\"/v1/crypto/history\", call),\n\t\t\ttrending: postOptional<CryptoTrendingData[\"body\"], CryptoTrendingResponse>(\"/v1/crypto/trending\", call),\n\t\t\tcategories: postOptional<CryptoCategoriesData[\"body\"], CryptoCategoriesResponse>(\"/v1/crypto/categories\", call),\n\t\t\tmovers: postOptional<CryptoMoversData[\"body\"], CryptoMoversResponse>(\"/v1/crypto/movers\", call),\n\t\t\tnew: postOptional<CryptoNewData[\"body\"], CryptoNewResponse>(\"/v1/crypto/new\", call),\n\t\t\tdex: {\n\t\t\t\tsearch: post<CryptoDexSearchData[\"body\"], CryptoDexSearchResponse>(\"/v1/crypto/dex/search\", call),\n\t\t\t\tpairs: post<CryptoDexPairsData[\"body\"], CryptoDexPairsResponse>(\"/v1/crypto/dex/pairs\", call),\n\t\t\t\ttoken: post<CryptoDexTokenData[\"body\"], CryptoDexTokenResponse>(\"/v1/crypto/dex/token\", call),\n\t\t\t\tnew: postOptional<CryptoDexNewData[\"body\"], CryptoDexNewResponse>(\"/v1/crypto/dex/new\", call),\n\t\t\t},\n\t\t\tpump: {\n\t\t\t\tcoins: postOptional<CryptoPumpCoinsData[\"body\"], CryptoPumpCoinsResponse>(\"/v1/crypto/pump/coins\", call),\n\t\t\t\tcoin: post<CryptoPumpCoinData[\"body\"], CryptoPumpCoinResponse>(\"/v1/crypto/pump/coin\", call),\n\t\t\t\ttrades: post<CryptoPumpTradesData[\"body\"], CryptoPumpTradesResponse>(\"/v1/crypto/pump/trades\", call),\n\t\t\t},\n\t\t\twallet: post<CryptoWalletData[\"body\"], CryptoWalletResponse>(\"/v1/crypto/wallet\", call),\n\t\t\ttoken: {\n\t\t\t\tholders: post<CryptoTokenHoldersData[\"body\"], CryptoTokenHoldersResponse>(\"/v1/crypto/token/holders\", call),\n\t\t\t},\n\t\t\tbinance: {\n\t\t\t\tannouncements: postOptional<CryptoBinanceAnnouncementsData[\"body\"], CryptoBinanceAnnouncementsResponse>(\"/v1/crypto/binance/announcements\", call),\n\t\t\t},\n\t\t},\n\t\tindeed: {\n\t\t\tsearch: postOptional<IndeedSearchData[\"body\"], IndeedSearchResponse>(\"/v1/indeed/search\", call),\n\t\t\tjob: post<IndeedJobData[\"body\"], IndeedJobResponse>(\"/v1/indeed/job\", call),\n\t\t},\n\t\ttripadvisor: {\n\t\t\tsearch: post<TripadvisorSearchData[\"body\"], TripadvisorSearchResponse>(\"/v1/tripadvisor/search\", call),\n\t\t\tplace: post<TripadvisorPlaceData[\"body\"], TripadvisorPlaceResponse>(\"/v1/tripadvisor/place\", call),\n\t\t\treviews: post<TripadvisorReviewsData[\"body\"], TripadvisorReviewsResponse>(\"/v1/tripadvisor/reviews\", call),\n\t\t},\n\t\tgoogletravel: {\n\t\t\tflights: post<GoogletravelFlightsData[\"body\"], GoogletravelFlightsResponse>(\"/v1/googletravel/flights\", call),\n\t\t},\n\t\tshopify: {\n\t\t\tproducts: post<ShopifyProductsData[\"body\"], ShopifyProductsResponse>(\"/v1/shopify/products\", call),\n\t\t\tcollections: post<ShopifyCollectionsData[\"body\"], ShopifyCollectionsResponse>(\"/v1/shopify/collections\", call),\n\t\t\tstore: post<ShopifyStoreData[\"body\"], ShopifyStoreResponse>(\"/v1/shopify/store\", call),\n\t\t},\n\t\twalmart: {\n\t\t\tsearch: post<WalmartSearchData[\"body\"], WalmartSearchResponse>(\"/v1/walmart/search\", call),\n\t\t\tproduct: post<WalmartProductData[\"body\"], WalmartProductResponse>(\"/v1/walmart/product\", call),\n\t\t},\n\t\taliexpress: {\n\t\t\tsearch: post<AliexpressSearchData[\"body\"], AliexpressSearchResponse>(\"/v1/aliexpress/search\", call),\n\t\t\tproduct: post<AliexpressProductData[\"body\"], AliexpressProductResponse>(\"/v1/aliexpress/product\", call),\n\t\t},\n\t\tappstore: {\n\t\t\tapp: post<AppstoreAppData[\"body\"], AppstoreAppResponse>(\"/v1/appstore/app\", call),\n\t\t\tsearch: post<AppstoreSearchData[\"body\"], AppstoreSearchResponse>(\"/v1/appstore/search\", call),\n\t\t\treviews: post<AppstoreReviewsData[\"body\"], AppstoreReviewsResponse>(\"/v1/appstore/reviews\", call),\n\t\t\ttop: postOptional<AppstoreTopData[\"body\"], AppstoreTopResponse>(\"/v1/appstore/top\", call),\n\t\t},\n\t\tgoogleplay: {\n\t\t\tapp: post<GoogleplayAppData[\"body\"], GoogleplayAppResponse>(\"/v1/googleplay/app\", call),\n\t\t\tsearch: post<GoogleplaySearchData[\"body\"], GoogleplaySearchResponse>(\"/v1/googleplay/search\", call),\n\t\t\treviews: post<GoogleplayReviewsData[\"body\"], GoogleplayReviewsResponse>(\"/v1/googleplay/reviews\", call),\n\t\t},\n\t\tairbnb: {\n\t\t\tsearch: post<AirbnbSearchData[\"body\"], AirbnbSearchResponse>(\"/v1/airbnb/search\", call),\n\t\t\tlisting: post<AirbnbListingData[\"body\"], AirbnbListingResponse>(\"/v1/airbnb/listing\", call),\n\t\t\tcalendar: post<AirbnbCalendarData[\"body\"], AirbnbCalendarResponse>(\"/v1/airbnb/calendar\", call),\n\t\t\treviews: post<AirbnbReviewsData[\"body\"], AirbnbReviewsResponse>(\"/v1/airbnb/reviews\", call),\n\t\t},\n\t\tredfin: {\n\t\t\tsearch: post<RedfinSearchData[\"body\"], RedfinSearchResponse>(\"/v1/redfin/search\", call),\n\t\t\tproperty: post<RedfinPropertyData[\"body\"], RedfinPropertyResponse>(\"/v1/redfin/property\", call),\n\t\t},\n\t\trealtor: {\n\t\t\tsearch: post<RealtorSearchData[\"body\"], RealtorSearchResponse>(\"/v1/realtor/search\", call),\n\t\t\tproperty: post<RealtorPropertyData[\"body\"], RealtorPropertyResponse>(\"/v1/realtor/property\", call),\n\t\t},\n\t\trightmove: {\n\t\t\tsearch: post<RightmoveSearchData[\"body\"], RightmoveSearchResponse>(\"/v1/rightmove/search\", call),\n\t\t\tproperty: post<RightmovePropertyData[\"body\"], RightmovePropertyResponse>(\"/v1/rightmove/property\", call),\n\t\t},\n\t\timmoscout: {\n\t\t\tsearch: post<ImmoscoutSearchData[\"body\"], ImmoscoutSearchResponse>(\"/v1/immoscout/search\", call),\n\t\t\tlisting: post<ImmoscoutListingData[\"body\"], ImmoscoutListingResponse>(\"/v1/immoscout/listing\", call),\n\t\t},\n\t\tpinterest: {\n\t\t\tsearch: post<PinterestSearchData[\"body\"], PinterestSearchResponse>(\"/v1/pinterest/search\", call),\n\t\t\tpin: post<PinterestPinData[\"body\"], PinterestPinResponse>(\"/v1/pinterest/pin\", call),\n\t\t\tboard: post<PinterestBoardData[\"body\"], PinterestBoardResponse>(\"/v1/pinterest/board\", call),\n\t\t\tuser: post<PinterestUserData[\"body\"], PinterestUserResponse>(\"/v1/pinterest/user\", call),\n\t\t\tads: {\n\t\t\t\tsearch: post<PinterestAdsSearchData[\"body\"], PinterestAdsSearchResponse>(\"/v1/pinterest/ads/search\", call),\n\t\t\t\tad: post<PinterestAdsAdData[\"body\"], PinterestAdsAdResponse>(\"/v1/pinterest/ads/ad\", call),\n\t\t\t},\n\t\t},\n\t\tx: {\n\t\t\ttweet: post<XTweetData[\"body\"], XTweetResponse>(\"/v1/x/tweet\", call),\n\t\t},\n\t\tkick: {\n\t\t\tchannel: post<KickChannelData[\"body\"], KickChannelResponse>(\"/v1/kick/channel\", call),\n\t\t\tvideos: post<KickVideosData[\"body\"], KickVideosResponse>(\"/v1/kick/videos\", call),\n\t\t\tclips: post<KickClipsData[\"body\"], KickClipsResponse>(\"/v1/kick/clips\", call),\n\t\t},\n\t\tfinance: {\n\t\t\tquote: post<FinanceQuoteData[\"body\"], FinanceQuoteResponse>(\"/v1/finance/quote\", call),\n\t\t\thistory: post<FinanceHistoryData[\"body\"], FinanceHistoryResponse>(\"/v1/finance/history\", call),\n\t\t\tsearch: post<FinanceSearchData[\"body\"], FinanceSearchResponse>(\"/v1/finance/search\", call),\n\t\t\tprofile: post<FinanceProfileData[\"body\"], FinanceProfileResponse>(\"/v1/finance/profile\", call),\n\t\t},\n\t\tmicrosoft: {\n\t\t\tads: {\n\t\t\t\tsearch: postOptional<MicrosoftAdsSearchData[\"body\"], MicrosoftAdsSearchResponse>(\"/v1/microsoft/ads/search\", call),\n\t\t\t\tad: post<MicrosoftAdsAdData[\"body\"], MicrosoftAdsAdResponse>(\"/v1/microsoft/ads/ad\", call),\n\t\t\t\tadvertisers: post<MicrosoftAdsAdvertisersData[\"body\"], MicrosoftAdsAdvertisersResponse>(\"/v1/microsoft/ads/advertisers\", call),\n\t\t\t},\n\t\t},\n\t\tsnapchat: {\n\t\t\tprofile: post<SnapchatProfileData[\"body\"], SnapchatProfileResponse>(\"/v1/snapchat/profile\", call),\n\t\t\tads: {\n\t\t\t\tsearch: post<SnapchatAdsSearchData[\"body\"], SnapchatAdsSearchResponse>(\"/v1/snapchat/ads/search\", call),\n\t\t\t\tad: post<SnapchatAdsAdData[\"body\"], SnapchatAdsAdResponse>(\"/v1/snapchat/ads/ad\", call),\n\t\t\t},\n\t\t},\n\t\ttumblr: {\n\t\t\tblog: post<TumblrBlogData[\"body\"], TumblrBlogResponse>(\"/v1/tumblr/blog\", call),\n\t\t\tposts: post<TumblrPostsData[\"body\"], TumblrPostsResponse>(\"/v1/tumblr/posts\", call),\n\t\t\tpost: post<TumblrPostData[\"body\"], TumblrPostResponse>(\"/v1/tumblr/post\", call),\n\t\t\tsearch: post<TumblrSearchData[\"body\"], TumblrSearchResponse>(\"/v1/tumblr/search\", call),\n\t\t},\n\t\tquora: {\n\t\t\tquestion: post<QuoraQuestionData[\"body\"], QuoraQuestionResponse>(\"/v1/quora/question\", call),\n\t\t},\n\t};\n}\n\nexport type Surface = ReturnType<typeof bindSurface>;\n","{\n \"name\": \"stophy\",\n \"version\": \"1.0.0\",\n \"description\": \"Public web data for AI agents in TypeScript: search, video, social, places, shopping, jobs and real estate.\",\n \"type\": \"module\",\n \"license\": \"MIT\",\n \"homepage\": \"https://stophy.dev\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/stophydotdev/sdk.git\",\n \"directory\": \"packages/typescript\"\n },\n \"keywords\": [\n \"stophy\",\n \"sdk\",\n \"web-data\",\n \"web-search\",\n \"scraping\",\n \"ai-agents\",\n \"llm\",\n \"youtube\",\n \"reddit\",\n \"maps\"\n ],\n \"main\": \"./dist/index.cjs\",\n \"module\": \"./dist/index.js\",\n \"types\": \"./dist/index.d.ts\",\n \"exports\": {\n \".\": {\n \"types\": \"./dist/index.d.ts\",\n \"import\": \"./dist/index.js\",\n \"require\": \"./dist/index.cjs\"\n }\n },\n \"files\": [\n \"dist\"\n ],\n \"scripts\": {\n \"generate\": \"openapi-ts && bun ../../scripts/gen-surface.ts\",\n \"build\": \"tsup\",\n \"test\": \"bun test ../../test/typescript\",\n \"check-types\": \"tsc --noEmit && tsc --noEmit -p tsconfig.tests.json\",\n \"prepublishOnly\": \"bun run generate && bun run build\"\n },\n \"devDependencies\": {\n \"@hey-api/client-fetch\": \"^0.10.2\",\n \"@hey-api/openapi-ts\": \"^0.64.0\",\n \"@types/bun\": \"^1.1.14\",\n \"tsup\": \"^8.3.5\",\n \"typescript\": \"^5.7.0\"\n }\n}\n","import { version } from \"../package.json\";\nimport { StophyError } from \"./errors\";\n\nconst DEFAULT_BASE_URL = \"https://api.stophy.dev\";\nconst DEFAULT_TIMEOUT_MS = 30_000;\nconst MAX_RETRY_WAIT_SECONDS = 60;\nconst RETRYABLE_STATUS = new Set([429, 500, 502, 503, 504]);\nconst USER_AGENT = `stophy-typescript/${version}`;\n\nexport interface CallOptions {\n\t/** Send `Accept: text/markdown` and return the response body as a string. */\n\tformat?: \"markdown\";\n\tsignal?: AbortSignal;\n}\n\nexport interface RequestSpec {\n\tmethod: \"GET\" | \"POST\";\n\tpath: string;\n\tbody?: unknown;\n\tquery?: Record<string, string | number | undefined>;\n\toptions?: CallOptions;\n}\n\nexport type Caller = (spec: RequestSpec) => Promise<unknown>;\n\nexport type FetchLike = (\n\tinput: RequestInfo | URL,\n\tinit?: RequestInit,\n) => Promise<Response>;\n\nexport interface TransportOptions {\n\tapiKey?: string;\n\tbaseUrl?: string;\n\tfetch?: FetchLike;\n\theaders?: Record<string, string>;\n\tmaxRetries?: number;\n\tretryInitialDelayMs?: number;\n\ttimeoutMs?: number;\n}\n\nexport function createCaller(options: TransportOptions): Caller {\n\tconst baseFetch: FetchLike = options.fetch ?? globalThis.fetch;\n\tconst baseUrl = (options.baseUrl ?? DEFAULT_BASE_URL).replace(/\\/$/, \"\");\n\tconst retry: RetryPolicy = {\n\t\tmaxRetries: options.maxRetries ?? 2,\n\t\tinitialDelayMs: options.retryInitialDelayMs ?? 500,\n\t\ttimeoutMs: options.timeoutMs ?? DEFAULT_TIMEOUT_MS,\n\t};\n\n\treturn async (spec) => {\n\t\tconst markdown = spec.options?.format === \"markdown\";\n\t\tconst headers = new Headers(options.headers);\n\t\tif (typeof document === \"undefined\" && !headers.has(\"user-agent\")) {\n\t\t\theaders.set(\"user-agent\", USER_AGENT);\n\t\t}\n\t\tif (options.apiKey) {\n\t\t\theaders.set(\"authorization\", `Bearer ${options.apiKey}`);\n\t\t}\n\t\theaders.set(\"accept\", markdown ? \"text/markdown\" : \"application/json\");\n\t\tif (spec.body !== undefined)\n\t\t\theaders.set(\"content-type\", \"application/json\");\n\n\t\tconst url = withQuery(`${baseUrl}${spec.path}`, spec.query);\n\t\treturn send(\n\t\t\tbaseFetch,\n\t\t\turl,\n\t\t\t(signal) => ({\n\t\t\t\tmethod: spec.method,\n\t\t\t\theaders,\n\t\t\t\tbody: spec.body === undefined ? undefined : JSON.stringify(spec.body),\n\t\t\t\tsignal,\n\t\t\t}),\n\t\t\tmarkdown,\n\t\t\tspec.options?.signal,\n\t\t\tretry,\n\t\t);\n\t};\n}\n\ninterface RetryPolicy {\n\tmaxRetries: number;\n\tinitialDelayMs: number;\n\ttimeoutMs: number;\n}\n\nasync function send(\n\tbaseFetch: FetchLike,\n\turl: string,\n\tinit: (signal: AbortSignal) => RequestInit,\n\tmarkdown: boolean,\n\tsignal: AbortSignal | undefined,\n\tretry: RetryPolicy,\n): Promise<unknown> {\n\tfor (let n = 0; ; n += 1) {\n\t\tconst deadline = withDeadline(signal, retry.timeoutMs);\n\t\tlet waitMs: number;\n\t\ttry {\n\t\t\tconst response = await baseFetch(url, init(deadline.signal)).catch(\n\t\t\t\t(error: unknown) => {\n\t\t\t\t\tif (deadline.signal.aborted || n >= retry.maxRetries) throw error;\n\t\t\t\t\treturn undefined;\n\t\t\t\t},\n\t\t\t);\n\t\t\tif (response === undefined) {\n\t\t\t\twaitMs = backoffMs(n, retry.initialDelayMs);\n\t\t\t} else if (\n\t\t\t\tn < retry.maxRetries &&\n\t\t\t\tRETRYABLE_STATUS.has(response.status)\n\t\t\t) {\n\t\t\t\tconst error = await errorFrom(response);\n\t\t\t\tconst seconds = error.retryAfterSeconds;\n\t\t\t\tif (seconds !== undefined && seconds > MAX_RETRY_WAIT_SECONDS) {\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\t\t\t\twaitMs =\n\t\t\t\t\tseconds === undefined\n\t\t\t\t\t\t? backoffMs(n, retry.initialDelayMs)\n\t\t\t\t\t\t: seconds * 1000;\n\t\t\t} else {\n\t\t\t\treturn await readBody(response, markdown);\n\t\t\t}\n\t\t} finally {\n\t\t\tdeadline.clear();\n\t\t}\n\t\tawait sleep(waitMs);\n\t}\n}\n\nfunction withDeadline(signal: AbortSignal | undefined, timeoutMs: number) {\n\tconst controller = new AbortController();\n\tconst abort = () => controller.abort(signal?.reason);\n\tif (signal?.aborted) abort();\n\telse signal?.addEventListener(\"abort\", abort, { once: true });\n\tconst timer = setTimeout(\n\t\t() =>\n\t\t\tcontroller.abort(\n\t\t\t\tnew DOMException(\n\t\t\t\t\t`Stophy request timed out after ${timeoutMs} ms`,\n\t\t\t\t\t\"TimeoutError\",\n\t\t\t\t),\n\t\t\t),\n\t\ttimeoutMs,\n\t);\n\treturn {\n\t\tsignal: controller.signal,\n\t\tclear: () => {\n\t\t\tclearTimeout(timer);\n\t\t\tsignal?.removeEventListener(\"abort\", abort);\n\t\t},\n\t};\n}\n\nasync function readBody(\n\tresponse: Response,\n\tmarkdown: boolean,\n): Promise<unknown> {\n\tif (!response.ok) throw await errorFrom(response);\n\tconst text = await response.text();\n\tif (markdown) return text;\n\tif (!text) {\n\t\tthrow failed(response, \"Stophy returned an empty response\", {});\n\t}\n\ttry {\n\t\treturn JSON.parse(text);\n\t} catch {\n\t\tthrow failed(response, \"Stophy returned a non-JSON response\", {});\n\t}\n}\n\nasync function errorFrom(response: Response): Promise<StophyError> {\n\tconst text = await response.text();\n\tlet body: unknown;\n\tif (text) {\n\t\ttry {\n\t\t\tbody = JSON.parse(text);\n\t\t} catch {\n\t\t\tbody = undefined;\n\t\t}\n\t}\n\tconst error = readError(body);\n\tconst retryAfterSeconds =\n\t\terror.retryAfterSeconds ?? headerRetryAfter(response);\n\treturn failed(\n\t\tresponse,\n\t\terror.message ?? `Stophy request failed with status ${response.status}`,\n\t\t{\n\t\t\tcode: error.code,\n\t\t\tretryable: error.retryable ?? RETRYABLE_STATUS.has(response.status),\n\t\t\tretryAfterSeconds,\n\t\t\trequestId: error.requestId ?? headerRequestId(response),\n\t\t},\n\t);\n}\n\nfunction failed(\n\tresponse: Response,\n\tmessage: string,\n\toptions: {\n\t\tcode?: string;\n\t\tretryable?: boolean;\n\t\tretryAfterSeconds?: number;\n\t\trequestId?: string;\n\t},\n): StophyError {\n\treturn new StophyError(message, {\n\t\tstatus: response.status,\n\t\tcode: options.code,\n\t\tretryable: options.retryable ?? false,\n\t\tretryAfterSeconds: options.retryAfterSeconds,\n\t\trequestId: options.requestId ?? headerRequestId(response),\n\t});\n}\n\ninterface ErrorFields {\n\tcode?: string;\n\tmessage?: string;\n\tretryable?: boolean;\n\tretryAfterSeconds?: number;\n\trequestId?: string;\n}\n\nfunction readError(body: unknown): ErrorFields {\n\tif (!isRecord(body) || !isRecord(body.error)) return {};\n\tconst error = body.error;\n\treturn {\n\t\tcode: typeof error.code === \"string\" ? error.code : undefined,\n\t\tmessage: typeof error.message === \"string\" ? error.message : undefined,\n\t\tretryable:\n\t\t\ttypeof error.retryable === \"boolean\" ? error.retryable : undefined,\n\t\tretryAfterSeconds:\n\t\t\ttypeof error.retryAfterSeconds === \"number\"\n\t\t\t\t? error.retryAfterSeconds\n\t\t\t\t: undefined,\n\t\trequestId:\n\t\t\ttypeof error.requestId === \"string\" ? error.requestId : undefined,\n\t};\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction headerRequestId(response: Response): string | undefined {\n\treturn response.headers.get(\"x-request-id\") ?? undefined;\n}\n\nfunction headerRetryAfter(response: Response): number | undefined {\n\tconst header = response.headers.get(\"retry-after\");\n\tif (!header) return undefined;\n\tconst seconds = Number(header);\n\tif (Number.isFinite(seconds)) return seconds;\n\tconst date = Date.parse(header);\n\tif (Number.isNaN(date)) return undefined;\n\treturn Math.max(0, Math.ceil((date - Date.now()) / 1000));\n}\n\nfunction withQuery(\n\turl: string,\n\tquery: Record<string, string | number | undefined> | undefined,\n): string {\n\tif (!query) return url;\n\tconst params = new URLSearchParams();\n\tfor (const [key, value] of Object.entries(query)) {\n\t\tif (value !== undefined) params.set(key, String(value));\n\t}\n\tconst text = params.toString();\n\treturn text ? `${url}?${text}` : url;\n}\n\nfunction backoffMs(attempt: number, base: number): number {\n\tconst window = base * 2 ** attempt;\n\treturn window / 2 + Math.random() * (window / 2);\n}\n\nfunction sleep(ms: number): Promise<void> {\n\treturn new Promise((resolve) => setTimeout(resolve, ms));\n}\n","import { type Logs, type LogsQuery, logs, type Usage, usage } from \"./account\";\nimport { bindSurface, type Surface } from \"./generated/surface.gen\";\nimport {\n\ttype Caller,\n\ttype CallOptions,\n\tcreateCaller,\n\ttype FetchLike,\n} from \"./transport\";\n\nexport interface StophyOptions {\n\t/** Defaults to `STOPHY_API_KEY`. Without a key, only the free endpoints answer. */\n\tapiKey?: string;\n\t/** Defaults to `STOPHY_BASE_URL` or `https://api.stophy.dev`. */\n\tbaseUrl?: string;\n\tfetch?: FetchLike;\n\theaders?: Record<string, string>;\n\tmaxRetries?: number;\n\tretryInitialDelayMs?: number;\n\t/** Per-attempt timeout. Defaults to 30000. */\n\ttimeoutMs?: number;\n}\n\nexport type { CallOptions, FetchLike };\n\nexport type StophyClientInput = StophyOptions | string;\n\nfunction env(name: string): string | undefined {\n\treturn typeof process === \"undefined\" ? undefined : process.env[name];\n}\n\n/** Typed client for the Stophy web data API. Namespaces come from the OpenAPI document. */\n// The generated surface is copied onto this instance in the constructor.\n// biome-ignore lint/suspicious/noUnsafeDeclarationMerging: namespaces are assigned from bindSurface\nexport class Stophy {\n\treadonly #call: Caller;\n\n\tconstructor(input: StophyClientInput = {}) {\n\t\tconst options = typeof input === \"string\" ? { apiKey: input } : input;\n\t\tconst apiKey = options.apiKey?.trim() || env(\"STOPHY_API_KEY\")?.trim();\n\t\tthis.#call = createCaller({\n\t\t\t...options,\n\t\t\tapiKey,\n\t\t\tbaseUrl: options.baseUrl ?? env(\"STOPHY_BASE_URL\"),\n\t\t});\n\t\tObject.assign(this, bindSurface(this.#call));\n\t}\n\n\t/** Current balance and lifetime usage. Requires an API key. */\n\tusage(): Promise<Usage> {\n\t\treturn usage(this.#call);\n\t}\n\n\t/** Recent metered requests. Requires an API key. */\n\tlogs(query?: LogsQuery): Promise<Logs> {\n\t\treturn logs(this.#call, query);\n\t}\n}\n\nexport interface Stophy extends Surface {}\n"]}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "stophy",
3
- "version": "0.3.0",
4
- "description": "Official TypeScript SDK for Stophy - The YouTube context API for AI agents.",
3
+ "version": "1.0.0",
4
+ "description": "Public web data for AI agents in TypeScript: search, video, social, places, shopping, jobs and real estate.",
5
5
  "type": "module",
6
6
  "license": "MIT",
7
7
  "homepage": "https://stophy.dev",
@@ -12,10 +12,15 @@
12
12
  },
13
13
  "keywords": [
14
14
  "stophy",
15
- "youtube",
16
- "transcript",
17
15
  "sdk",
18
- "ai-agents"
16
+ "web-data",
17
+ "web-search",
18
+ "scraping",
19
+ "ai-agents",
20
+ "llm",
21
+ "youtube",
22
+ "reddit",
23
+ "maps"
19
24
  ],
20
25
  "main": "./dist/index.cjs",
21
26
  "module": "./dist/index.js",
@@ -31,19 +36,17 @@
31
36
  "dist"
32
37
  ],
33
38
  "scripts": {
34
- "generate": "openapi-ts",
39
+ "generate": "openapi-ts && bun ../../scripts/gen-surface.ts",
35
40
  "build": "tsup",
36
41
  "test": "bun test ../../test/typescript",
37
- "check-types": "tsc --noEmit",
42
+ "check-types": "tsc --noEmit && tsc --noEmit -p tsconfig.tests.json",
38
43
  "prepublishOnly": "bun run generate && bun run build"
39
44
  },
40
45
  "devDependencies": {
46
+ "@hey-api/client-fetch": "^0.10.2",
41
47
  "@hey-api/openapi-ts": "^0.64.0",
42
48
  "@types/bun": "^1.1.14",
43
49
  "tsup": "^8.3.5",
44
50
  "typescript": "^5.7.0"
45
- },
46
- "dependencies": {
47
- "@hey-api/client-fetch": "^0.10.2"
48
51
  }
49
52
  }