stophy 1.0.2 → 1.0.3

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 CHANGED
@@ -122,8 +122,7 @@ function bindSurface(call) {
122
122
  endpoints: get("/v1/endpoints", call),
123
123
  web: {
124
124
  search: post("/v1/web/search", call),
125
- news: postOptional("/v1/web/news", call),
126
- contacts: post("/v1/web/contacts", call)
125
+ news: postOptional("/v1/web/news", call)
127
126
  },
128
127
  youtube: {
129
128
  search: post("/v1/youtube/search", call),
@@ -204,7 +203,7 @@ function bindSurface(call) {
204
203
  seo: post("/v1/site/seo", call)
205
204
  },
206
205
  email: {
207
- check: post("/v1/email/check", call),
206
+ verify: post("/v1/email/verify", call),
208
207
  find: post("/v1/email/find", call)
209
208
  },
210
209
  crypto: {
@@ -297,7 +296,7 @@ function bindSurface(call) {
297
296
  }
298
297
 
299
298
  // package.json
300
- var version = "1.0.2";
299
+ var version = "1.0.3";
301
300
 
302
301
  // src/transport.ts
303
302
  var DEFAULT_BASE_URL = "https://api.stophy.dev";
package/dist/index.js.map CHANGED
@@ -1 +1 @@
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 } from \"./transport\";\n\nexport interface RequestOptions {\n\tsignal?: AbortSignal;\n}\n\nexport function post<Body, Response>(path: string, call: Caller) {\n\treturn (body: Body, options?: RequestOptions): Promise<Response> =>\n\t\tcall({ method: \"POST\", path, body, options }) as Promise<Response>;\n}\n\nexport function postOptional<Body, Response>(path: string, call: Caller) {\n\treturn (body?: Body, options?: RequestOptions): Promise<Response> =>\n\t\tcall({\n\t\t\tmethod: \"POST\",\n\t\t\tpath,\n\t\t\tbody: body ?? {},\n\t\t\toptions,\n\t\t}) as Promise<Response>;\n}\n\nexport function get<Response>(path: string, call: Caller) {\n\treturn (options?: RequestOptions): Promise<Response> =>\n\t\tcall({ method: \"GET\", path, options }) as Promise<Response>;\n}\n","// Generated by scripts/gen-surface.ts. Do not edit.\n\nimport { get, post, postOptional } from \"../bind\";\nimport type {\n\tAdsAdData,\n\tAdsAdResponse,\n\tAdsAdvertisersData,\n\tAdsAdvertisersResponse,\n\tAdsSearchData,\n\tAdsSearchResponse,\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\tAppstoreAppData,\n\tAppstoreAppResponse,\n\tAppstoreReviewsData,\n\tAppstoreReviewsResponse,\n\tAppstoreSearchData,\n\tAppstoreSearchResponse,\n\tAppstoreTopData,\n\tAppstoreTopResponse,\n\tBlueskyFollowersData,\n\tBlueskyFollowersResponse,\n\tBlueskyPostData,\n\tBlueskyPostResponse,\n\tBlueskyProfileData,\n\tBlueskyProfileResponse,\n\tCryptoCoinData,\n\tCryptoCoinResponse,\n\tCryptoCoinsData,\n\tCryptoCoinsResponse,\n\tCryptoDexSearchData,\n\tCryptoDexSearchResponse,\n\tCryptoDexTokenData,\n\tCryptoDexTokenResponse,\n\tCryptoHistoryData,\n\tCryptoHistoryResponse,\n\tCryptoWalletData,\n\tCryptoWalletResponse,\n\tEmailCheckData,\n\tEmailCheckResponse,\n\tEmailFindData,\n\tEmailFindResponse,\n\tFinanceHistoryData,\n\tFinanceHistoryResponse,\n\tFinanceQuoteData,\n\tFinanceQuoteResponse,\n\tFinanceSearchData,\n\tFinanceSearchResponse,\n\tFinanceStockData,\n\tFinanceStockResponse,\n\tGoogleTrendsData,\n\tGoogleTrendsRelatedData,\n\tGoogleTrendsRelatedResponse,\n\tGoogleTrendsResponse,\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\tInstagramCommentsResponse,\n\tInstagramPostData,\n\tInstagramPostResponse,\n\tInstagramProfileData,\n\tInstagramProfileResponse,\n\tInstagramSearchData,\n\tInstagramSearchResponse,\n\tLinkedinCompanyData,\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\tMetaAdsPageData,\n\tMetaAdsPageResponse,\n\tPinterestBoardData,\n\tPinterestBoardResponse,\n\tPinterestPinData,\n\tPinterestPinResponse,\n\tPinterestSearchData,\n\tPinterestSearchResponse,\n\tPinterestUserData,\n\tPinterestUserResponse,\n\tRedditDomainData,\n\tRedditDomainResponse,\n\tRedditPostData,\n\tRedditPostResponse,\n\tRedditSearchData,\n\tRedditSearchResponse,\n\tRedditSubredditData,\n\tRedditSubredditResponse,\n\tRedditUserData,\n\tRedditUserResponse,\n\tRightmovePropertyData,\n\tRightmovePropertyResponse,\n\tRightmoveSearchData,\n\tRightmoveSearchResponse,\n\tShopifyCollectionsData,\n\tShopifyCollectionsResponse,\n\tShopifyProductsData,\n\tShopifyProductsResponse,\n\tShopifyStoreData,\n\tShopifyStoreResponse,\n\tSiteSeoData,\n\tSiteSeoResponse,\n\tSuggestData,\n\tSuggestResponse,\n\tTelegramPostData,\n\tTelegramPostResponse,\n\tTelegramPostsData,\n\tTelegramPostsResponse,\n\tThreadsPostData,\n\tThreadsPostResponse,\n\tThreadsProfileData,\n\tThreadsProfileResponse,\n\tThreadsSearchData,\n\tThreadsSearchResponse,\n\tTiktokCommentsData,\n\tTiktokCommentsResponse,\n\tTiktokHashtagData,\n\tTiktokHashtagResponse,\n\tTiktokProfileData,\n\tTiktokProfileResponse,\n\tTiktokSearchData,\n\tTiktokSearchResponse,\n\tTiktokVideoData,\n\tTiktokVideoResponse,\n\tTranscriptData,\n\tTranscriptResponse,\n\tTripadvisorPlaceData,\n\tTripadvisorPlaceResponse,\n\tTripadvisorReviewsData,\n\tTripadvisorReviewsResponse,\n\tTripadvisorSearchData,\n\tTripadvisorSearchResponse,\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\tXPostData,\n\tXPostResponse,\n\tYoutubeChannelData,\n\tYoutubeChannelResponse,\n\tYoutubeCommentsData,\n\tYoutubeCommentsResponse,\n\tYoutubePlaylistData,\n\tYoutubePlaylistResponse,\n\tYoutubeSearchData,\n\tYoutubeSearchResponse,\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\tcomments: post<YoutubeCommentsData[\"body\"], YoutubeCommentsResponse>(\"/v1/youtube/comments\", call),\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},\n\t\ttranscript: post<TranscriptData[\"body\"], TranscriptResponse>(\"/v1/transcript\", call),\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\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\tpost: post<InstagramPostData[\"body\"], InstagramPostResponse>(\"/v1/instagram/post\", call),\n\t\t\tsearch: post<InstagramSearchData[\"body\"], InstagramSearchResponse>(\"/v1/instagram/search\", call),\n\t\t\tcomments: post<InstagramCommentsData[\"body\"], InstagramCommentsResponse>(\"/v1/instagram/comments\", call),\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\thashtag: post<TiktokHashtagData[\"body\"], TiktokHashtagResponse>(\"/v1/tiktok/hashtag\", call),\n\t\t\tcomments: post<TiktokCommentsData[\"body\"], TiktokCommentsResponse>(\"/v1/tiktok/comments\", call),\n\t\t\tsearch: post<TiktokSearchData[\"body\"], TiktokSearchResponse>(\"/v1/tiktok/search\", call),\n\t\t},\n\t\tbluesky: {\n\t\t\tprofile: post<BlueskyProfileData[\"body\"], BlueskyProfileResponse>(\"/v1/bluesky/profile\", 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\tthreads: {\n\t\t\tprofile: post<ThreadsProfileData[\"body\"], ThreadsProfileResponse>(\"/v1/threads/profile\", 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\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\tpage: post<MetaAdsPageData[\"body\"], MetaAdsPageResponse>(\"/v1/meta/ads/page\", 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\tcompany: post<LinkedinCompanyData[\"body\"], LinkedinCompanyResponse>(\"/v1/linkedin/company\", call),\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: post<ZillowSearchData[\"body\"], ZillowSearchResponse>(\"/v1/zillow/search\", call),\n\t\t\tproperty: post<ZillowPropertyData[\"body\"], ZillowPropertyResponse>(\"/v1/zillow/property\", call),\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\tgoogle: {\n\t\t\ttrends: Object.assign(post<GoogleTrendsData[\"body\"], GoogleTrendsResponse>(\"/v1/google/trends\", call), {\n\t\t\t\t\trelated: post<GoogleTrendsRelatedData[\"body\"], GoogleTrendsRelatedResponse>(\"/v1/google/trends/related\", call),\n\t\t\t\t\ttrending: postOptional<GoogleTrendsTrendingData[\"body\"], GoogleTrendsTrendingResponse>(\"/v1/google/trends/trending\", call),\n\t\t\t\t}),\n\t\t},\n\t\tsite: {\n\t\t\tseo: post<SiteSeoData[\"body\"], SiteSeoResponse>(\"/v1/site/seo\", call),\n\t\t},\n\t\temail: {\n\t\t\tcheck: post<EmailCheckData[\"body\"], EmailCheckResponse>(\"/v1/email/check\", call),\n\t\t\tfind: post<EmailFindData[\"body\"], EmailFindResponse>(\"/v1/email/find\", 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\tdex: {\n\t\t\t\tsearch: post<CryptoDexSearchData[\"body\"], CryptoDexSearchResponse>(\"/v1/crypto/dex/search\", call),\n\t\t\t\ttoken: post<CryptoDexTokenData[\"body\"], CryptoDexTokenResponse>(\"/v1/crypto/dex/token\", call),\n\t\t\t},\n\t\t\twallet: post<CryptoWalletData[\"body\"], CryptoWalletResponse>(\"/v1/crypto/wallet\", call),\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\tamazon: {\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\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\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},\n\t\tx: {\n\t\t\tpost: post<XPostData[\"body\"], XPostResponse>(\"/v1/x/post\", 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\tstock: post<FinanceStockData[\"body\"], FinanceStockResponse>(\"/v1/finance/stock\", call),\n\t\t},\n\t\tads: {\n\t\t\tsearch: post<AdsSearchData[\"body\"], AdsSearchResponse>(\"/v1/ads/search\", call),\n\t\t\tad: post<AdsAdData[\"body\"], AdsAdResponse>(\"/v1/ads/ad\", call),\n\t\t\tadvertisers: post<AdsAdvertisersData[\"body\"], AdsAdvertisersResponse>(\"/v1/ads/advertisers\", call),\n\t\t},\n\t\tsuggest: post<SuggestData[\"body\"], SuggestResponse>(\"/v1/suggest\", call),\n\t};\n}\n\nexport type Surface = ReturnType<typeof bindSurface>;\n","{\n \"name\": \"stophy\",\n \"version\": \"1.0.2\",\n \"description\": \"Live data from 40+ sites for AI agents in TypeScript: web search, YouTube, Reddit, Google Maps, Amazon, jobs, real estate, ads, stocks and crypto.\",\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 \"google-maps\",\n \"transcripts\",\n \"ads\",\n \"finance\",\n \"crypto\"\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\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 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\", \"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\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\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);\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(response: Response): Promise<unknown> {\n\tif (!response.ok) throw await errorFrom(response);\n\tconst text = await response.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"]}
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 } from \"./transport\";\n\nexport interface RequestOptions {\n\tsignal?: AbortSignal;\n}\n\nexport function post<Body, Response>(path: string, call: Caller) {\n\treturn (body: Body, options?: RequestOptions): Promise<Response> =>\n\t\tcall({ method: \"POST\", path, body, options }) as Promise<Response>;\n}\n\nexport function postOptional<Body, Response>(path: string, call: Caller) {\n\treturn (body?: Body, options?: RequestOptions): Promise<Response> =>\n\t\tcall({\n\t\t\tmethod: \"POST\",\n\t\t\tpath,\n\t\t\tbody: body ?? {},\n\t\t\toptions,\n\t\t}) as Promise<Response>;\n}\n\nexport function get<Response>(path: string, call: Caller) {\n\treturn (options?: RequestOptions): Promise<Response> =>\n\t\tcall({ method: \"GET\", path, options }) as Promise<Response>;\n}\n","// Generated by scripts/gen-surface.ts. Do not edit.\n\nimport { get, post, postOptional } from \"../bind\";\nimport type {\n\tAdsAdData,\n\tAdsAdResponse,\n\tAdsAdvertisersData,\n\tAdsAdvertisersResponse,\n\tAdsSearchData,\n\tAdsSearchResponse,\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\tAppstoreAppData,\n\tAppstoreAppResponse,\n\tAppstoreReviewsData,\n\tAppstoreReviewsResponse,\n\tAppstoreSearchData,\n\tAppstoreSearchResponse,\n\tAppstoreTopData,\n\tAppstoreTopResponse,\n\tBlueskyFollowersData,\n\tBlueskyFollowersResponse,\n\tBlueskyPostData,\n\tBlueskyPostResponse,\n\tBlueskyProfileData,\n\tBlueskyProfileResponse,\n\tCryptoCoinData,\n\tCryptoCoinResponse,\n\tCryptoCoinsData,\n\tCryptoCoinsResponse,\n\tCryptoDexSearchData,\n\tCryptoDexSearchResponse,\n\tCryptoDexTokenData,\n\tCryptoDexTokenResponse,\n\tCryptoHistoryData,\n\tCryptoHistoryResponse,\n\tCryptoWalletData,\n\tCryptoWalletResponse,\n\tEmailFindData,\n\tEmailFindResponse,\n\tEmailVerifyData,\n\tEmailVerifyResponse,\n\tFinanceHistoryData,\n\tFinanceHistoryResponse,\n\tFinanceQuoteData,\n\tFinanceQuoteResponse,\n\tFinanceSearchData,\n\tFinanceSearchResponse,\n\tFinanceStockData,\n\tFinanceStockResponse,\n\tGoogleTrendsData,\n\tGoogleTrendsRelatedData,\n\tGoogleTrendsRelatedResponse,\n\tGoogleTrendsResponse,\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\tInstagramCommentsResponse,\n\tInstagramPostData,\n\tInstagramPostResponse,\n\tInstagramProfileData,\n\tInstagramProfileResponse,\n\tInstagramSearchData,\n\tInstagramSearchResponse,\n\tLinkedinCompanyData,\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\tMetaAdsPageData,\n\tMetaAdsPageResponse,\n\tPinterestBoardData,\n\tPinterestBoardResponse,\n\tPinterestPinData,\n\tPinterestPinResponse,\n\tPinterestSearchData,\n\tPinterestSearchResponse,\n\tPinterestUserData,\n\tPinterestUserResponse,\n\tRedditDomainData,\n\tRedditDomainResponse,\n\tRedditPostData,\n\tRedditPostResponse,\n\tRedditSearchData,\n\tRedditSearchResponse,\n\tRedditSubredditData,\n\tRedditSubredditResponse,\n\tRedditUserData,\n\tRedditUserResponse,\n\tRightmovePropertyData,\n\tRightmovePropertyResponse,\n\tRightmoveSearchData,\n\tRightmoveSearchResponse,\n\tShopifyCollectionsData,\n\tShopifyCollectionsResponse,\n\tShopifyProductsData,\n\tShopifyProductsResponse,\n\tShopifyStoreData,\n\tShopifyStoreResponse,\n\tSiteSeoData,\n\tSiteSeoResponse,\n\tSuggestData,\n\tSuggestResponse,\n\tTelegramPostData,\n\tTelegramPostResponse,\n\tTelegramPostsData,\n\tTelegramPostsResponse,\n\tThreadsPostData,\n\tThreadsPostResponse,\n\tThreadsProfileData,\n\tThreadsProfileResponse,\n\tThreadsSearchData,\n\tThreadsSearchResponse,\n\tTiktokCommentsData,\n\tTiktokCommentsResponse,\n\tTiktokHashtagData,\n\tTiktokHashtagResponse,\n\tTiktokProfileData,\n\tTiktokProfileResponse,\n\tTiktokSearchData,\n\tTiktokSearchResponse,\n\tTiktokVideoData,\n\tTiktokVideoResponse,\n\tTranscriptData,\n\tTranscriptResponse,\n\tTripadvisorPlaceData,\n\tTripadvisorPlaceResponse,\n\tTripadvisorReviewsData,\n\tTripadvisorReviewsResponse,\n\tTripadvisorSearchData,\n\tTripadvisorSearchResponse,\n\tUpworkJobData,\n\tUpworkJobResponse,\n\tUpworkSearchData,\n\tUpworkSearchResponse,\n\tWalmartProductData,\n\tWalmartProductResponse,\n\tWalmartSearchData,\n\tWalmartSearchResponse,\n\tWebNewsData,\n\tWebNewsResponse,\n\tWebSearchData,\n\tWebSearchResponse,\n\tXPostData,\n\tXPostResponse,\n\tYoutubeChannelData,\n\tYoutubeChannelResponse,\n\tYoutubeCommentsData,\n\tYoutubeCommentsResponse,\n\tYoutubePlaylistData,\n\tYoutubePlaylistResponse,\n\tYoutubeSearchData,\n\tYoutubeSearchResponse,\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},\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\tcomments: post<YoutubeCommentsData[\"body\"], YoutubeCommentsResponse>(\"/v1/youtube/comments\", call),\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},\n\t\ttranscript: post<TranscriptData[\"body\"], TranscriptResponse>(\"/v1/transcript\", call),\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\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\tpost: post<InstagramPostData[\"body\"], InstagramPostResponse>(\"/v1/instagram/post\", call),\n\t\t\tsearch: post<InstagramSearchData[\"body\"], InstagramSearchResponse>(\"/v1/instagram/search\", call),\n\t\t\tcomments: post<InstagramCommentsData[\"body\"], InstagramCommentsResponse>(\"/v1/instagram/comments\", call),\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\thashtag: post<TiktokHashtagData[\"body\"], TiktokHashtagResponse>(\"/v1/tiktok/hashtag\", call),\n\t\t\tcomments: post<TiktokCommentsData[\"body\"], TiktokCommentsResponse>(\"/v1/tiktok/comments\", call),\n\t\t\tsearch: post<TiktokSearchData[\"body\"], TiktokSearchResponse>(\"/v1/tiktok/search\", call),\n\t\t},\n\t\tbluesky: {\n\t\t\tprofile: post<BlueskyProfileData[\"body\"], BlueskyProfileResponse>(\"/v1/bluesky/profile\", 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\tthreads: {\n\t\t\tprofile: post<ThreadsProfileData[\"body\"], ThreadsProfileResponse>(\"/v1/threads/profile\", 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\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\tpage: post<MetaAdsPageData[\"body\"], MetaAdsPageResponse>(\"/v1/meta/ads/page\", 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\tcompany: post<LinkedinCompanyData[\"body\"], LinkedinCompanyResponse>(\"/v1/linkedin/company\", call),\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: post<ZillowSearchData[\"body\"], ZillowSearchResponse>(\"/v1/zillow/search\", call),\n\t\t\tproperty: post<ZillowPropertyData[\"body\"], ZillowPropertyResponse>(\"/v1/zillow/property\", call),\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\tgoogle: {\n\t\t\ttrends: Object.assign(post<GoogleTrendsData[\"body\"], GoogleTrendsResponse>(\"/v1/google/trends\", call), {\n\t\t\t\t\trelated: post<GoogleTrendsRelatedData[\"body\"], GoogleTrendsRelatedResponse>(\"/v1/google/trends/related\", call),\n\t\t\t\t\ttrending: postOptional<GoogleTrendsTrendingData[\"body\"], GoogleTrendsTrendingResponse>(\"/v1/google/trends/trending\", call),\n\t\t\t\t}),\n\t\t},\n\t\tsite: {\n\t\t\tseo: post<SiteSeoData[\"body\"], SiteSeoResponse>(\"/v1/site/seo\", call),\n\t\t},\n\t\temail: {\n\t\t\tverify: post<EmailVerifyData[\"body\"], EmailVerifyResponse>(\"/v1/email/verify\", call),\n\t\t\tfind: post<EmailFindData[\"body\"], EmailFindResponse>(\"/v1/email/find\", 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\tdex: {\n\t\t\t\tsearch: post<CryptoDexSearchData[\"body\"], CryptoDexSearchResponse>(\"/v1/crypto/dex/search\", call),\n\t\t\t\ttoken: post<CryptoDexTokenData[\"body\"], CryptoDexTokenResponse>(\"/v1/crypto/dex/token\", call),\n\t\t\t},\n\t\t\twallet: post<CryptoWalletData[\"body\"], CryptoWalletResponse>(\"/v1/crypto/wallet\", call),\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\tamazon: {\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\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\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},\n\t\tx: {\n\t\t\tpost: post<XPostData[\"body\"], XPostResponse>(\"/v1/x/post\", 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\tstock: post<FinanceStockData[\"body\"], FinanceStockResponse>(\"/v1/finance/stock\", call),\n\t\t},\n\t\tads: {\n\t\t\tsearch: post<AdsSearchData[\"body\"], AdsSearchResponse>(\"/v1/ads/search\", call),\n\t\t\tad: post<AdsAdData[\"body\"], AdsAdResponse>(\"/v1/ads/ad\", call),\n\t\t\tadvertisers: post<AdsAdvertisersData[\"body\"], AdsAdvertisersResponse>(\"/v1/ads/advertisers\", call),\n\t\t},\n\t\tsuggest: post<SuggestData[\"body\"], SuggestResponse>(\"/v1/suggest\", call),\n\t};\n}\n\nexport type Surface = ReturnType<typeof bindSurface>;\n","{\n \"name\": \"stophy\",\n \"version\": \"1.0.3\",\n \"description\": \"Live data from 40+ sites for AI agents in TypeScript: web search, YouTube, Reddit, Google Maps, Amazon, jobs, real estate, ads, stocks and crypto.\",\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 \"google-maps\",\n \"transcripts\",\n \"ads\",\n \"finance\",\n \"crypto\"\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\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 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\", \"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\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\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);\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(response: Response): Promise<unknown> {\n\tif (!response.ok) throw await errorFrom(response);\n\tconst text = await response.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,6 +1,6 @@
1
1
  {
2
2
  "name": "stophy",
3
- "version": "1.0.2",
3
+ "version": "1.0.3",
4
4
  "description": "Live data from 40+ sites for AI agents in TypeScript: web search, YouTube, Reddit, Google Maps, Amazon, jobs, real estate, ads, stocks and crypto.",
5
5
  "type": "module",
6
6
  "license": "MIT",