@crawlkit-sh/sdk 1.0.0 → 1.0.1
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/CHANGELOG.md +2 -2
- package/README.md +1 -1
- package/dist/index.cjs +2 -2
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -9,10 +9,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
9
9
|
|
|
10
10
|
### Added
|
|
11
11
|
|
|
12
|
-
- Initial release of @crawlkit/sdk
|
|
12
|
+
- Initial release of @crawlkit-sh/sdk
|
|
13
13
|
- Core scraping functionality (`scrape()`)
|
|
14
14
|
- AI-powered data extraction (`extract()`)
|
|
15
|
-
- Web search
|
|
15
|
+
- Web search (`search()`)
|
|
16
16
|
- Full-page screenshots (`screenshot()`)
|
|
17
17
|
- LinkedIn scraping (`linkedin.company()`, `linkedin.person()`)
|
|
18
18
|
- Instagram scraping (`instagram.profile()`, `instagram.content()`)
|
package/README.md
CHANGED
|
@@ -13,7 +13,7 @@ Turn any website into structured data with a single API call. CrawlKit handles p
|
|
|
13
13
|
|
|
14
14
|
- **Web Scraping** - Convert any webpage to clean Markdown, HTML, or raw content
|
|
15
15
|
- **AI Data Extraction** - Extract structured data using JSON Schema with LLM
|
|
16
|
-
- **Web Search** - Search the web
|
|
16
|
+
- **Web Search** - Search the web programmatically
|
|
17
17
|
- **Screenshots** - Capture full-page screenshots
|
|
18
18
|
- **LinkedIn Scraping** - Scrape company profiles and person profiles
|
|
19
19
|
- **Instagram Scraping** - Scrape profiles and posts/reels
|
package/dist/index.cjs
CHANGED
|
@@ -305,7 +305,7 @@ var CrawlResource = class extends BaseResource {
|
|
|
305
305
|
return this.post("/v1/crawl/extract", params);
|
|
306
306
|
}
|
|
307
307
|
/**
|
|
308
|
-
* Perform a web search
|
|
308
|
+
* Perform a web search
|
|
309
309
|
*
|
|
310
310
|
* @param params - Search parameters
|
|
311
311
|
* @returns Search results with titles, URLs, and snippets
|
|
@@ -673,7 +673,7 @@ var CrawlKit = class {
|
|
|
673
673
|
return this.crawl.extract(params);
|
|
674
674
|
}
|
|
675
675
|
/**
|
|
676
|
-
* Perform a web search
|
|
676
|
+
* Perform a web search
|
|
677
677
|
*
|
|
678
678
|
* @param params - Search parameters
|
|
679
679
|
* @returns Search results with titles, URLs, and snippets
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/errors/index.ts","../src/resources/base.ts","../src/resources/crawl.ts","../src/resources/linkedin.ts","../src/resources/instagram.ts","../src/resources/appstore.ts","../src/client.ts"],"names":[],"mappings":"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","file":"index.cjs","sourcesContent":["import type { ErrorCode } from '../types/common.js';\n\n/**\n * Base error class for all CrawlKit errors\n */\nexport class CrawlKitError extends Error {\n /** Error code from API */\n public readonly code: ErrorCode;\n /** HTTP status code */\n public readonly statusCode: number;\n /** Credits refunded if operation failed */\n public readonly creditsRefunded?: number;\n /** Remaining credits after operation */\n public readonly creditsRemaining?: number;\n\n constructor(\n code: ErrorCode,\n message: string,\n statusCode: number,\n creditsRefunded?: number,\n creditsRemaining?: number\n ) {\n super(message);\n this.name = 'CrawlKitError';\n this.code = code;\n this.statusCode = statusCode;\n this.creditsRefunded = creditsRefunded;\n this.creditsRemaining = creditsRemaining;\n\n // Maintains proper stack trace for where our error was thrown\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n }\n }\n}\n\n/**\n * Authentication error - invalid or missing API key\n */\nexport class AuthenticationError extends CrawlKitError {\n constructor(message: string = 'Invalid or missing API key') {\n super('VALIDATION_ERROR', message, 401);\n this.name = 'AuthenticationError';\n }\n}\n\n/**\n * Insufficient credits to perform the operation\n */\nexport class InsufficientCreditsError extends CrawlKitError {\n /** Credits required for the operation */\n public readonly required?: number;\n /** Credits available */\n public readonly available?: number;\n\n constructor(\n message: string,\n creditsRefunded?: number,\n creditsRemaining?: number\n ) {\n super('INSUFFICIENT_CREDITS', message, 402, creditsRefunded, creditsRemaining);\n this.name = 'InsufficientCreditsError';\n this.available = creditsRemaining;\n }\n}\n\n/**\n * Validation error - invalid request parameters\n */\nexport class ValidationError extends CrawlKitError {\n constructor(message: string) {\n super('VALIDATION_ERROR', message, 400);\n this.name = 'ValidationError';\n }\n}\n\n/**\n * Rate limit exceeded\n */\nexport class RateLimitError extends CrawlKitError {\n constructor(message: string = 'Rate limit exceeded') {\n super('RATE_LIMITED', message, 429);\n this.name = 'RateLimitError';\n }\n}\n\n/**\n * Request timeout\n */\nexport class TimeoutError extends CrawlKitError {\n constructor(\n message: string,\n creditsRefunded?: number,\n creditsRemaining?: number\n ) {\n super('TIMEOUT', message, 408, creditsRefunded, creditsRemaining);\n this.name = 'TimeoutError';\n }\n}\n\n/**\n * Resource not found (404)\n */\nexport class NotFoundError extends CrawlKitError {\n constructor(message: string = 'Resource not found') {\n super('NOT_FOUND', message, 404);\n this.name = 'NotFoundError';\n }\n}\n\n/**\n * Network or connection error\n */\nexport class NetworkError extends CrawlKitError {\n constructor(\n code: ErrorCode,\n message: string,\n creditsRefunded?: number,\n creditsRemaining?: number\n ) {\n super(code, message, 502, creditsRefunded, creditsRemaining);\n this.name = 'NetworkError';\n }\n}\n\n/**\n * Create appropriate error instance from API response\n */\nexport function createErrorFromResponse(\n code: string,\n message: string,\n statusCode: number,\n creditsRefunded?: number,\n creditsRemaining?: number\n): CrawlKitError {\n const errorCode = code as ErrorCode;\n\n switch (statusCode) {\n case 401:\n return new AuthenticationError(message);\n case 402:\n return new InsufficientCreditsError(message, creditsRefunded, creditsRemaining);\n case 429:\n return new RateLimitError(message);\n case 404:\n return new NotFoundError(message);\n }\n\n switch (errorCode) {\n case 'VALIDATION_ERROR':\n return new ValidationError(message);\n case 'INSUFFICIENT_CREDITS':\n return new InsufficientCreditsError(message, creditsRefunded, creditsRemaining);\n case 'TIMEOUT':\n return new TimeoutError(message, creditsRefunded, creditsRemaining);\n case 'RATE_LIMITED':\n return new RateLimitError(message);\n case 'NOT_FOUND':\n return new NotFoundError(message);\n case 'DNS_FAILED':\n case 'CONNECTION_REFUSED':\n case 'SSL_ERROR':\n case 'TOO_MANY_REDIRECTS':\n case 'PROXY_ERROR':\n return new NetworkError(errorCode, message, creditsRefunded, creditsRemaining);\n default:\n return new CrawlKitError(\n errorCode,\n message,\n statusCode,\n creditsRefunded,\n creditsRemaining\n );\n }\n}\n","import { createErrorFromResponse, CrawlKitError } from '../errors/index.js';\nimport type { ApiResponse, ApiErrorResponse } from '../types/common.js';\n\n/**\n * Configuration for resource instances\n */\nexport interface ResourceConfig {\n /** API key for authentication */\n apiKey: string;\n /** Base URL for the API */\n baseUrl: string;\n /** Default timeout in milliseconds */\n timeout: number;\n /** Fetch implementation */\n fetch: typeof globalThis.fetch;\n}\n\n/**\n * Base class for API resources\n * Provides common HTTP functionality for all resource classes\n */\nexport abstract class BaseResource {\n protected readonly config: ResourceConfig;\n\n constructor(config: ResourceConfig) {\n this.config = config;\n }\n\n /**\n * Make a POST request to the API\n * @param endpoint - API endpoint path (e.g., '/v1/crawl/scrape')\n * @param body - Request body object\n * @returns Parsed response data\n * @throws {CrawlKitError} On API errors\n */\n protected async post<T, B extends object = object>(\n endpoint: string,\n body: B\n ): Promise<T> {\n const url = `${this.config.baseUrl}${endpoint}`;\n\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), this.config.timeout);\n\n try {\n const response = await this.config.fetch(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'Authorization': `ApiKey ${this.config.apiKey}`,\n 'User-Agent': '@crawlkit/sdk',\n },\n body: JSON.stringify(body),\n signal: controller.signal,\n });\n\n clearTimeout(timeoutId);\n\n let json: ApiResponse<T>;\n try {\n json = await response.json() as ApiResponse<T>;\n } catch {\n throw new CrawlKitError(\n 'PARSE_ERROR',\n 'Failed to parse API response',\n response.status\n );\n }\n\n if (!json.success) {\n const errorResponse = json as ApiErrorResponse;\n throw createErrorFromResponse(\n errorResponse.error.code,\n errorResponse.error.message,\n response.status,\n errorResponse.creditsRefunded,\n errorResponse.creditsRemaining\n );\n }\n\n return json.data;\n } catch (error) {\n clearTimeout(timeoutId);\n\n // Re-throw CrawlKitError instances\n if (error instanceof CrawlKitError) {\n throw error;\n }\n\n // Handle abort/timeout\n if (error instanceof Error) {\n if (error.name === 'AbortError') {\n throw new CrawlKitError(\n 'TIMEOUT',\n `Request timed out after ${this.config.timeout}ms`,\n 408\n );\n }\n\n // Handle network errors\n throw new CrawlKitError(\n 'UNKNOWN',\n error.message || 'An unknown error occurred',\n 500\n );\n }\n\n throw new CrawlKitError('UNKNOWN', 'An unknown error occurred', 500);\n }\n }\n\n /**\n * Make a GET request to the API\n * @param endpoint - API endpoint path\n * @param params - Query parameters\n * @returns Parsed response data\n * @throws {CrawlKitError} On API errors\n */\n protected async get<T>(\n endpoint: string,\n params?: Record<string, string | number | boolean | undefined>\n ): Promise<T> {\n let url = `${this.config.baseUrl}${endpoint}`;\n\n // Add query parameters\n if (params) {\n const searchParams = new URLSearchParams();\n for (const [key, value] of Object.entries(params)) {\n if (value !== undefined) {\n searchParams.append(key, String(value));\n }\n }\n const queryString = searchParams.toString();\n if (queryString) {\n url += `?${queryString}`;\n }\n }\n\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), this.config.timeout);\n\n try {\n const response = await this.config.fetch(url, {\n method: 'GET',\n headers: {\n 'Authorization': `ApiKey ${this.config.apiKey}`,\n 'User-Agent': '@crawlkit/sdk',\n },\n signal: controller.signal,\n });\n\n clearTimeout(timeoutId);\n\n let json: ApiResponse<T>;\n try {\n json = await response.json() as ApiResponse<T>;\n } catch {\n throw new CrawlKitError(\n 'PARSE_ERROR',\n 'Failed to parse API response',\n response.status\n );\n }\n\n if (!json.success) {\n const errorResponse = json as ApiErrorResponse;\n throw createErrorFromResponse(\n errorResponse.error.code,\n errorResponse.error.message,\n response.status,\n errorResponse.creditsRefunded,\n errorResponse.creditsRemaining\n );\n }\n\n return json.data;\n } catch (error) {\n clearTimeout(timeoutId);\n\n if (error instanceof CrawlKitError) {\n throw error;\n }\n\n if (error instanceof Error) {\n if (error.name === 'AbortError') {\n throw new CrawlKitError(\n 'TIMEOUT',\n `Request timed out after ${this.config.timeout}ms`,\n 408\n );\n }\n\n throw new CrawlKitError(\n 'UNKNOWN',\n error.message || 'An unknown error occurred',\n 500\n );\n }\n\n throw new CrawlKitError('UNKNOWN', 'An unknown error occurred', 500);\n }\n }\n}\n","import { BaseResource } from './base.js';\nimport type {\n ScrapeParams,\n ScrapeData,\n ExtractParams,\n ExtractData,\n SearchParams,\n SearchData,\n ScreenshotParams,\n ScreenshotData,\n} from '../types/index.js';\n\n/**\n * Core crawl operations resource\n * Provides scrape, extract, search, and screenshot functionality\n */\nexport class CrawlResource extends BaseResource {\n /**\n * Scrape a URL and return markdown, HTML, metadata, and links\n *\n * @param params - Scrape parameters\n * @returns Scraped page data including markdown, HTML, metadata, and links\n * @throws {CrawlKitError} On API errors\n *\n * @example\n * ```typescript\n * const result = await crawlkit.scrape({\n * url: 'https://example.com',\n * options: {\n * onlyMainContent: true,\n * waitFor: '#content'\n * }\n * });\n * console.log(result.markdown);\n * ```\n *\n * @costs 1 credit\n */\n async scrape(params: ScrapeParams): Promise<ScrapeData> {\n return this.post<ScrapeData>('/v1/crawl/scrape', params);\n }\n\n /**\n * Extract structured data from a URL using AI\n *\n * @param params - Extract parameters including JSON schema\n * @returns Extracted structured data along with page content\n * @throws {CrawlKitError} On API errors\n *\n * @example\n * ```typescript\n * interface Product {\n * name: string;\n * price: number;\n * }\n *\n * const result = await crawlkit.extract<Product>({\n * url: 'https://example.com/product',\n * schema: {\n * type: 'object',\n * properties: {\n * name: { type: 'string' },\n * price: { type: 'number' }\n * }\n * }\n * });\n * console.log(result.json.name, result.json.price);\n * ```\n *\n * @costs 5 credits\n */\n async extract<T = unknown>(params: ExtractParams): Promise<ExtractData<T>> {\n return this.post<ExtractData<T>>('/v1/crawl/extract', params);\n }\n\n /**\n * Perform a web search using DuckDuckGo\n *\n * @param params - Search parameters\n * @returns Search results with titles, URLs, and snippets\n * @throws {CrawlKitError} On API errors\n *\n * @example\n * ```typescript\n * const result = await crawlkit.search({\n * query: 'typescript best practices',\n * options: {\n * maxResults: 10,\n * timeRange: 'w' // Past week\n * }\n * });\n * result.results.forEach(r => console.log(r.title, r.url));\n * ```\n *\n * @costs 1 credit per page (~10 results)\n */\n async search(params: SearchParams): Promise<SearchData> {\n return this.post<SearchData>('/v1/crawl/search', params);\n }\n\n /**\n * Take a full-page screenshot of a URL\n *\n * @param params - Screenshot parameters\n * @returns Public URL of the screenshot\n * @throws {CrawlKitError} On API errors\n *\n * @example\n * ```typescript\n * const result = await crawlkit.screenshot({\n * url: 'https://example.com',\n * options: {\n * width: 1920,\n * height: 1080,\n * waitForSelector: '#content'\n * }\n * });\n * console.log('Screenshot URL:', result.url);\n * ```\n *\n * @costs 1 credit\n */\n async screenshot(params: ScreenshotParams): Promise<ScreenshotData> {\n return this.post<ScreenshotData>('/v1/crawl/screenshot', params);\n }\n}\n","import { BaseResource } from './base.js';\nimport type {\n LinkedInCompanyParams,\n LinkedInCompanyData,\n LinkedInPersonParams,\n LinkedInPersonData,\n} from '../types/index.js';\n\n/**\n * LinkedIn scraping operations\n * Provides company and person profile scraping\n */\nexport class LinkedInResource extends BaseResource {\n /**\n * Scrape a LinkedIn company profile\n *\n * @param params - Company profile parameters\n * @returns Company profile data including description, employees, jobs, posts\n * @throws {CrawlKitError} On API errors\n *\n * @example\n * ```typescript\n * const result = await crawlkit.linkedin.company({\n * url: 'https://www.linkedin.com/company/openai',\n * options: { includeJobs: true }\n * });\n * console.log(result.company.name);\n * console.log(result.company.followers);\n * console.log(result.company.jobs);\n * ```\n *\n * @costs 1 credit\n */\n async company(params: LinkedInCompanyParams): Promise<LinkedInCompanyData> {\n return this.post<LinkedInCompanyData>('/v1/crawl/linkedin/company', params);\n }\n\n /**\n * Scrape LinkedIn person profile(s)\n *\n * @param params - Person profile parameters (single URL or array of URLs, max 10)\n * @returns Person profile data for each URL\n * @throws {CrawlKitError} On API errors\n *\n * @example\n * ```typescript\n * // Single profile\n * const result = await crawlkit.linkedin.person({\n * url: 'https://www.linkedin.com/in/username'\n * });\n *\n * // Multiple profiles (batch)\n * const batchResult = await crawlkit.linkedin.person({\n * url: [\n * 'https://www.linkedin.com/in/user1',\n * 'https://www.linkedin.com/in/user2'\n * ]\n * });\n * console.log(`Success: ${batchResult.successCount}, Failed: ${batchResult.failedCount}`);\n * ```\n *\n * @costs 3 credits per URL\n */\n async person(params: LinkedInPersonParams): Promise<LinkedInPersonData> {\n return this.post<LinkedInPersonData>('/v1/crawl/linkedin/person', params);\n }\n}\n","import { BaseResource } from './base.js';\nimport type {\n InstagramProfileParams,\n InstagramProfileData,\n InstagramContentParams,\n InstagramContentData,\n} from '../types/index.js';\n\n/**\n * Instagram scraping operations\n * Provides profile and content (posts/reels) scraping\n */\nexport class InstagramResource extends BaseResource {\n /**\n * Scrape an Instagram profile\n *\n * @param params - Profile parameters (username or URL)\n * @returns Profile data including bio, follower count, and recent posts\n * @throws {CrawlKitError} On API errors\n *\n * @example\n * ```typescript\n * const result = await crawlkit.instagram.profile({\n * username: 'instagram'\n * });\n * console.log(result.profile.full_name);\n * console.log(result.profile.follower_count);\n * console.log(result.profile.posts.length);\n * ```\n *\n * @costs 1 credit\n */\n async profile(params: InstagramProfileParams): Promise<InstagramProfileData> {\n return this.post<InstagramProfileData>('/v1/crawl/instagram/profile', params);\n }\n\n /**\n * Scrape Instagram content (post, reel, or video)\n *\n * @param params - Content parameters (shortcode or full URL)\n * @returns Content data including media URLs, likes, comments, and owner info\n * @throws {CrawlKitError} On API errors\n *\n * @example\n * ```typescript\n * // Using shortcode\n * const result = await crawlkit.instagram.content({\n * shortcode: 'CxIIgCCq8mg'\n * });\n *\n * // Using full URL\n * const result = await crawlkit.instagram.content({\n * shortcode: 'https://www.instagram.com/p/CxIIgCCq8mg/'\n * });\n *\n * console.log(result.post.like_count);\n * console.log(result.post.video_url);\n * ```\n *\n * @costs 1 credit\n */\n async content(params: InstagramContentParams): Promise<InstagramContentData> {\n return this.post<InstagramContentData>('/v1/crawl/instagram/content', params);\n }\n}\n","import { BaseResource } from './base.js';\nimport type {\n PlayStoreReviewsParams,\n PlayStoreReviewsData,\n PlayStoreDetailParams,\n PlayStoreDetailData,\n AppStoreReviewsParams,\n AppStoreReviewsData,\n} from '../types/index.js';\n\n/**\n * App store operations\n * Provides Google Play Store and Apple App Store data scraping\n */\nexport class AppStoreResource extends BaseResource {\n /**\n * Fetch Google Play Store reviews for an app\n *\n * @param params - Reviews parameters including app ID and optional pagination cursor\n * @returns Reviews with pagination information\n * @throws {CrawlKitError} On API errors\n *\n * @example\n * ```typescript\n * // First page\n * const result = await crawlkit.appstore.playstoreReviews({\n * appId: 'com.example.app',\n * options: { lang: 'en' }\n * });\n *\n * // Next page\n * if (result.pagination.hasMore) {\n * const nextPage = await crawlkit.appstore.playstoreReviews({\n * appId: 'com.example.app',\n * cursor: result.pagination.nextCursor\n * });\n * }\n * ```\n *\n * @costs 1 credit per page\n */\n async playstoreReviews(params: PlayStoreReviewsParams): Promise<PlayStoreReviewsData> {\n return this.post<PlayStoreReviewsData>('/v1/crawl/playstore/reviews', params);\n }\n\n /**\n * Fetch Google Play Store app details\n *\n * @param params - App detail parameters\n * @returns Comprehensive app information including ratings, screenshots, permissions\n * @throws {CrawlKitError} On API errors\n *\n * @example\n * ```typescript\n * const result = await crawlkit.appstore.playstoreDetail({\n * appId: 'com.example.app',\n * options: { lang: 'en' }\n * });\n * console.log(result.appName);\n * console.log(result.rating);\n * console.log(result.installs);\n * ```\n *\n * @costs 1 credit\n */\n async playstoreDetail(params: PlayStoreDetailParams): Promise<PlayStoreDetailData> {\n return this.post<PlayStoreDetailData>('/v1/crawl/playstore/detail', params);\n }\n\n /**\n * Fetch Apple App Store reviews for an app\n *\n * @param params - Reviews parameters including app ID and optional pagination cursor\n * @returns Reviews with pagination information\n * @throws {CrawlKitError} On API errors\n *\n * @example\n * ```typescript\n * // First page\n * const result = await crawlkit.appstore.appstoreReviews({\n * appId: '123456789',\n * options: { lang: 'en' }\n * });\n *\n * // Paginate through all reviews\n * let cursor = result.pagination.nextCursor;\n * while (cursor) {\n * const nextPage = await crawlkit.appstore.appstoreReviews({\n * appId: '123456789',\n * cursor\n * });\n * cursor = nextPage.pagination.nextCursor;\n * }\n * ```\n *\n * @costs 1 credit per page\n */\n async appstoreReviews(params: AppStoreReviewsParams): Promise<AppStoreReviewsData> {\n return this.post<AppStoreReviewsData>('/v1/crawl/appstore/reviews', params);\n }\n}\n","import { CrawlResource } from './resources/crawl.js';\nimport { LinkedInResource } from './resources/linkedin.js';\nimport { InstagramResource } from './resources/instagram.js';\nimport { AppStoreResource } from './resources/appstore.js';\nimport { AuthenticationError } from './errors/index.js';\nimport type { ResourceConfig } from './resources/base.js';\nimport type {\n ScrapeParams,\n ScrapeData,\n ExtractParams,\n ExtractData,\n SearchParams,\n SearchData,\n ScreenshotParams,\n ScreenshotData,\n} from './types/index.js';\n\n/**\n * Configuration options for the CrawlKit client\n */\nexport interface CrawlKitConfig {\n /**\n * API key for authentication\n * Must start with 'ck_' prefix\n * Get your API key at https://crawlkit.sh\n */\n apiKey: string;\n\n /**\n * Base URL for the API\n * @default 'https://api.crawlkit.sh'\n */\n baseUrl?: string;\n\n /**\n * Default timeout in milliseconds for all requests\n * @default 30000\n */\n timeout?: number;\n\n /**\n * Custom fetch implementation\n * Useful for testing or environments without native fetch\n */\n fetch?: typeof globalThis.fetch;\n}\n\n/**\n * CrawlKit SDK client for web scraping API\n *\n * @example\n * ```typescript\n * import { CrawlKit } from '@crawlkit/sdk';\n *\n * const crawlkit = new CrawlKit({ apiKey: 'ck_your_api_key' });\n *\n * // Scrape a webpage\n * const page = await crawlkit.scrape({ url: 'https://example.com' });\n * console.log(page.markdown);\n *\n * // Extract structured data with AI\n * const data = await crawlkit.extract({\n * url: 'https://example.com/product',\n * schema: {\n * type: 'object',\n * properties: {\n * name: { type: 'string' },\n * price: { type: 'number' }\n * }\n * }\n * });\n *\n * // Scrape social media\n * const company = await crawlkit.linkedin.company({\n * url: 'https://linkedin.com/company/openai'\n * });\n * ```\n */\nexport class CrawlKit {\n private readonly config: Required<Omit<CrawlKitConfig, 'fetch'>> & { fetch: typeof globalThis.fetch };\n private readonly crawl: CrawlResource;\n\n /**\n * LinkedIn scraping operations\n * Provides company and person profile scraping\n */\n public readonly linkedin: LinkedInResource;\n\n /**\n * Instagram scraping operations\n * Provides profile and content scraping\n */\n public readonly instagram: InstagramResource;\n\n /**\n * App store operations\n * Provides Google Play Store and Apple App Store data\n */\n public readonly appstore: AppStoreResource;\n\n /**\n * Create a new CrawlKit client\n *\n * @param config - Client configuration\n * @throws {AuthenticationError} If API key is invalid or missing\n *\n * @example\n * ```typescript\n * const crawlkit = new CrawlKit({\n * apiKey: 'ck_your_api_key',\n * timeout: 60000 // 60 seconds\n * });\n * ```\n */\n constructor(config: CrawlKitConfig) {\n // Validate API key\n if (!config.apiKey) {\n throw new AuthenticationError('API key is required');\n }\n\n if (!config.apiKey.startsWith('ck_')) {\n throw new AuthenticationError(\n 'Invalid API key format. API keys must start with \"ck_\"'\n );\n }\n\n this.config = {\n apiKey: config.apiKey,\n baseUrl: config.baseUrl ?? 'https://api.crawlkit.sh',\n timeout: config.timeout ?? 30000,\n fetch: config.fetch ?? globalThis.fetch.bind(globalThis),\n };\n\n // Initialize resources\n const resourceConfig: ResourceConfig = {\n apiKey: this.config.apiKey,\n baseUrl: this.config.baseUrl,\n timeout: this.config.timeout,\n fetch: this.config.fetch,\n };\n\n this.crawl = new CrawlResource(resourceConfig);\n this.linkedin = new LinkedInResource(resourceConfig);\n this.instagram = new InstagramResource(resourceConfig);\n this.appstore = new AppStoreResource(resourceConfig);\n }\n\n /**\n * Scrape a URL and return markdown, HTML, metadata, and links\n *\n * @param params - Scrape parameters\n * @returns Scraped page data including markdown, HTML, metadata, and links\n * @throws {CrawlKitError} On API errors\n *\n * @example\n * ```typescript\n * // Basic scraping\n * const result = await crawlkit.scrape({\n * url: 'https://example.com'\n * });\n * console.log(result.markdown);\n * console.log(result.metadata.title);\n *\n * // With browser automation\n * const spaResult = await crawlkit.scrape({\n * url: 'https://example.com/spa',\n * options: {\n * waitFor: '#content-loaded',\n * actions: [\n * { type: 'click', selector: '#load-more' },\n * { type: 'wait', milliseconds: 2000 }\n * ]\n * }\n * });\n * ```\n *\n * @costs 1 credit\n */\n async scrape(params: ScrapeParams): Promise<ScrapeData> {\n return this.crawl.scrape(params);\n }\n\n /**\n * Extract structured data from a URL using AI\n *\n * Uses LLM to extract data according to the provided JSON schema.\n *\n * @param params - Extract parameters including JSON schema\n * @returns Extracted structured data along with page content\n * @throws {CrawlKitError} On API errors\n *\n * @example\n * ```typescript\n * interface Product {\n * name: string;\n * price: number;\n * description: string;\n * inStock: boolean;\n * }\n *\n * const result = await crawlkit.extract<Product>({\n * url: 'https://example.com/product/123',\n * schema: {\n * type: 'object',\n * properties: {\n * name: { type: 'string' },\n * price: { type: 'number' },\n * description: { type: 'string' },\n * inStock: { type: 'boolean' }\n * }\n * },\n * options: {\n * prompt: 'Extract product information from this page'\n * }\n * });\n *\n * // TypeScript knows result.json is Product\n * console.log(result.json.name);\n * console.log(result.json.price);\n * ```\n *\n * @costs 5 credits\n */\n async extract<T = unknown>(params: ExtractParams): Promise<ExtractData<T>> {\n return this.crawl.extract<T>(params);\n }\n\n /**\n * Perform a web search using DuckDuckGo\n *\n * @param params - Search parameters\n * @returns Search results with titles, URLs, and snippets\n * @throws {CrawlKitError} On API errors\n *\n * @example\n * ```typescript\n * const result = await crawlkit.search({\n * query: 'typescript best practices 2024',\n * options: {\n * maxResults: 20,\n * timeRange: 'm', // Past month\n * region: 'us-en'\n * }\n * });\n *\n * for (const item of result.results) {\n * console.log(`${item.position}. ${item.title}`);\n * console.log(` ${item.url}`);\n * console.log(` ${item.snippet}\\n`);\n * }\n * ```\n *\n * @costs 1 credit per page (~10 results)\n */\n async search(params: SearchParams): Promise<SearchData> {\n return this.crawl.search(params);\n }\n\n /**\n * Take a full-page screenshot of a URL\n *\n * @param params - Screenshot parameters\n * @returns Public URL of the screenshot\n * @throws {CrawlKitError} On API errors\n *\n * @example\n * ```typescript\n * const result = await crawlkit.screenshot({\n * url: 'https://example.com',\n * options: {\n * width: 1920,\n * height: 1080,\n * waitForSelector: '#main-content'\n * }\n * });\n *\n * console.log('Screenshot URL:', result.url);\n * console.log(`Dimensions: ${result.width}x${result.height}`);\n * ```\n *\n * @costs 1 credit\n */\n async screenshot(params: ScreenshotParams): Promise<ScreenshotData> {\n return this.crawl.screenshot(params);\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/errors/index.ts","../src/resources/base.ts","../src/resources/crawl.ts","../src/resources/linkedin.ts","../src/resources/instagram.ts","../src/resources/appstore.ts","../src/client.ts"],"names":[],"mappings":"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","file":"index.cjs","sourcesContent":["import type { ErrorCode } from '../types/common.js';\n\n/**\n * Base error class for all CrawlKit errors\n */\nexport class CrawlKitError extends Error {\n /** Error code from API */\n public readonly code: ErrorCode;\n /** HTTP status code */\n public readonly statusCode: number;\n /** Credits refunded if operation failed */\n public readonly creditsRefunded?: number;\n /** Remaining credits after operation */\n public readonly creditsRemaining?: number;\n\n constructor(\n code: ErrorCode,\n message: string,\n statusCode: number,\n creditsRefunded?: number,\n creditsRemaining?: number\n ) {\n super(message);\n this.name = 'CrawlKitError';\n this.code = code;\n this.statusCode = statusCode;\n this.creditsRefunded = creditsRefunded;\n this.creditsRemaining = creditsRemaining;\n\n // Maintains proper stack trace for where our error was thrown\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n }\n }\n}\n\n/**\n * Authentication error - invalid or missing API key\n */\nexport class AuthenticationError extends CrawlKitError {\n constructor(message: string = 'Invalid or missing API key') {\n super('VALIDATION_ERROR', message, 401);\n this.name = 'AuthenticationError';\n }\n}\n\n/**\n * Insufficient credits to perform the operation\n */\nexport class InsufficientCreditsError extends CrawlKitError {\n /** Credits required for the operation */\n public readonly required?: number;\n /** Credits available */\n public readonly available?: number;\n\n constructor(\n message: string,\n creditsRefunded?: number,\n creditsRemaining?: number\n ) {\n super('INSUFFICIENT_CREDITS', message, 402, creditsRefunded, creditsRemaining);\n this.name = 'InsufficientCreditsError';\n this.available = creditsRemaining;\n }\n}\n\n/**\n * Validation error - invalid request parameters\n */\nexport class ValidationError extends CrawlKitError {\n constructor(message: string) {\n super('VALIDATION_ERROR', message, 400);\n this.name = 'ValidationError';\n }\n}\n\n/**\n * Rate limit exceeded\n */\nexport class RateLimitError extends CrawlKitError {\n constructor(message: string = 'Rate limit exceeded') {\n super('RATE_LIMITED', message, 429);\n this.name = 'RateLimitError';\n }\n}\n\n/**\n * Request timeout\n */\nexport class TimeoutError extends CrawlKitError {\n constructor(\n message: string,\n creditsRefunded?: number,\n creditsRemaining?: number\n ) {\n super('TIMEOUT', message, 408, creditsRefunded, creditsRemaining);\n this.name = 'TimeoutError';\n }\n}\n\n/**\n * Resource not found (404)\n */\nexport class NotFoundError extends CrawlKitError {\n constructor(message: string = 'Resource not found') {\n super('NOT_FOUND', message, 404);\n this.name = 'NotFoundError';\n }\n}\n\n/**\n * Network or connection error\n */\nexport class NetworkError extends CrawlKitError {\n constructor(\n code: ErrorCode,\n message: string,\n creditsRefunded?: number,\n creditsRemaining?: number\n ) {\n super(code, message, 502, creditsRefunded, creditsRemaining);\n this.name = 'NetworkError';\n }\n}\n\n/**\n * Create appropriate error instance from API response\n */\nexport function createErrorFromResponse(\n code: string,\n message: string,\n statusCode: number,\n creditsRefunded?: number,\n creditsRemaining?: number\n): CrawlKitError {\n const errorCode = code as ErrorCode;\n\n switch (statusCode) {\n case 401:\n return new AuthenticationError(message);\n case 402:\n return new InsufficientCreditsError(message, creditsRefunded, creditsRemaining);\n case 429:\n return new RateLimitError(message);\n case 404:\n return new NotFoundError(message);\n }\n\n switch (errorCode) {\n case 'VALIDATION_ERROR':\n return new ValidationError(message);\n case 'INSUFFICIENT_CREDITS':\n return new InsufficientCreditsError(message, creditsRefunded, creditsRemaining);\n case 'TIMEOUT':\n return new TimeoutError(message, creditsRefunded, creditsRemaining);\n case 'RATE_LIMITED':\n return new RateLimitError(message);\n case 'NOT_FOUND':\n return new NotFoundError(message);\n case 'DNS_FAILED':\n case 'CONNECTION_REFUSED':\n case 'SSL_ERROR':\n case 'TOO_MANY_REDIRECTS':\n case 'PROXY_ERROR':\n return new NetworkError(errorCode, message, creditsRefunded, creditsRemaining);\n default:\n return new CrawlKitError(\n errorCode,\n message,\n statusCode,\n creditsRefunded,\n creditsRemaining\n );\n }\n}\n","import { createErrorFromResponse, CrawlKitError } from '../errors/index.js';\nimport type { ApiResponse, ApiErrorResponse } from '../types/common.js';\n\n/**\n * Configuration for resource instances\n */\nexport interface ResourceConfig {\n /** API key for authentication */\n apiKey: string;\n /** Base URL for the API */\n baseUrl: string;\n /** Default timeout in milliseconds */\n timeout: number;\n /** Fetch implementation */\n fetch: typeof globalThis.fetch;\n}\n\n/**\n * Base class for API resources\n * Provides common HTTP functionality for all resource classes\n */\nexport abstract class BaseResource {\n protected readonly config: ResourceConfig;\n\n constructor(config: ResourceConfig) {\n this.config = config;\n }\n\n /**\n * Make a POST request to the API\n * @param endpoint - API endpoint path (e.g., '/v1/crawl/scrape')\n * @param body - Request body object\n * @returns Parsed response data\n * @throws {CrawlKitError} On API errors\n */\n protected async post<T, B extends object = object>(\n endpoint: string,\n body: B\n ): Promise<T> {\n const url = `${this.config.baseUrl}${endpoint}`;\n\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), this.config.timeout);\n\n try {\n const response = await this.config.fetch(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'Authorization': `ApiKey ${this.config.apiKey}`,\n 'User-Agent': '@crawlkit/sdk',\n },\n body: JSON.stringify(body),\n signal: controller.signal,\n });\n\n clearTimeout(timeoutId);\n\n let json: ApiResponse<T>;\n try {\n json = await response.json() as ApiResponse<T>;\n } catch {\n throw new CrawlKitError(\n 'PARSE_ERROR',\n 'Failed to parse API response',\n response.status\n );\n }\n\n if (!json.success) {\n const errorResponse = json as ApiErrorResponse;\n throw createErrorFromResponse(\n errorResponse.error.code,\n errorResponse.error.message,\n response.status,\n errorResponse.creditsRefunded,\n errorResponse.creditsRemaining\n );\n }\n\n return json.data;\n } catch (error) {\n clearTimeout(timeoutId);\n\n // Re-throw CrawlKitError instances\n if (error instanceof CrawlKitError) {\n throw error;\n }\n\n // Handle abort/timeout\n if (error instanceof Error) {\n if (error.name === 'AbortError') {\n throw new CrawlKitError(\n 'TIMEOUT',\n `Request timed out after ${this.config.timeout}ms`,\n 408\n );\n }\n\n // Handle network errors\n throw new CrawlKitError(\n 'UNKNOWN',\n error.message || 'An unknown error occurred',\n 500\n );\n }\n\n throw new CrawlKitError('UNKNOWN', 'An unknown error occurred', 500);\n }\n }\n\n /**\n * Make a GET request to the API\n * @param endpoint - API endpoint path\n * @param params - Query parameters\n * @returns Parsed response data\n * @throws {CrawlKitError} On API errors\n */\n protected async get<T>(\n endpoint: string,\n params?: Record<string, string | number | boolean | undefined>\n ): Promise<T> {\n let url = `${this.config.baseUrl}${endpoint}`;\n\n // Add query parameters\n if (params) {\n const searchParams = new URLSearchParams();\n for (const [key, value] of Object.entries(params)) {\n if (value !== undefined) {\n searchParams.append(key, String(value));\n }\n }\n const queryString = searchParams.toString();\n if (queryString) {\n url += `?${queryString}`;\n }\n }\n\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), this.config.timeout);\n\n try {\n const response = await this.config.fetch(url, {\n method: 'GET',\n headers: {\n 'Authorization': `ApiKey ${this.config.apiKey}`,\n 'User-Agent': '@crawlkit/sdk',\n },\n signal: controller.signal,\n });\n\n clearTimeout(timeoutId);\n\n let json: ApiResponse<T>;\n try {\n json = await response.json() as ApiResponse<T>;\n } catch {\n throw new CrawlKitError(\n 'PARSE_ERROR',\n 'Failed to parse API response',\n response.status\n );\n }\n\n if (!json.success) {\n const errorResponse = json as ApiErrorResponse;\n throw createErrorFromResponse(\n errorResponse.error.code,\n errorResponse.error.message,\n response.status,\n errorResponse.creditsRefunded,\n errorResponse.creditsRemaining\n );\n }\n\n return json.data;\n } catch (error) {\n clearTimeout(timeoutId);\n\n if (error instanceof CrawlKitError) {\n throw error;\n }\n\n if (error instanceof Error) {\n if (error.name === 'AbortError') {\n throw new CrawlKitError(\n 'TIMEOUT',\n `Request timed out after ${this.config.timeout}ms`,\n 408\n );\n }\n\n throw new CrawlKitError(\n 'UNKNOWN',\n error.message || 'An unknown error occurred',\n 500\n );\n }\n\n throw new CrawlKitError('UNKNOWN', 'An unknown error occurred', 500);\n }\n }\n}\n","import { BaseResource } from './base.js';\nimport type {\n ScrapeParams,\n ScrapeData,\n ExtractParams,\n ExtractData,\n SearchParams,\n SearchData,\n ScreenshotParams,\n ScreenshotData,\n} from '../types/index.js';\n\n/**\n * Core crawl operations resource\n * Provides scrape, extract, search, and screenshot functionality\n */\nexport class CrawlResource extends BaseResource {\n /**\n * Scrape a URL and return markdown, HTML, metadata, and links\n *\n * @param params - Scrape parameters\n * @returns Scraped page data including markdown, HTML, metadata, and links\n * @throws {CrawlKitError} On API errors\n *\n * @example\n * ```typescript\n * const result = await crawlkit.scrape({\n * url: 'https://example.com',\n * options: {\n * onlyMainContent: true,\n * waitFor: '#content'\n * }\n * });\n * console.log(result.markdown);\n * ```\n *\n * @costs 1 credit\n */\n async scrape(params: ScrapeParams): Promise<ScrapeData> {\n return this.post<ScrapeData>('/v1/crawl/scrape', params);\n }\n\n /**\n * Extract structured data from a URL using AI\n *\n * @param params - Extract parameters including JSON schema\n * @returns Extracted structured data along with page content\n * @throws {CrawlKitError} On API errors\n *\n * @example\n * ```typescript\n * interface Product {\n * name: string;\n * price: number;\n * }\n *\n * const result = await crawlkit.extract<Product>({\n * url: 'https://example.com/product',\n * schema: {\n * type: 'object',\n * properties: {\n * name: { type: 'string' },\n * price: { type: 'number' }\n * }\n * }\n * });\n * console.log(result.json.name, result.json.price);\n * ```\n *\n * @costs 5 credits\n */\n async extract<T = unknown>(params: ExtractParams): Promise<ExtractData<T>> {\n return this.post<ExtractData<T>>('/v1/crawl/extract', params);\n }\n\n /**\n * Perform a web search\n *\n * @param params - Search parameters\n * @returns Search results with titles, URLs, and snippets\n * @throws {CrawlKitError} On API errors\n *\n * @example\n * ```typescript\n * const result = await crawlkit.search({\n * query: 'typescript best practices',\n * options: {\n * maxResults: 10,\n * timeRange: 'w' // Past week\n * }\n * });\n * result.results.forEach(r => console.log(r.title, r.url));\n * ```\n *\n * @costs 1 credit per page (~10 results)\n */\n async search(params: SearchParams): Promise<SearchData> {\n return this.post<SearchData>('/v1/crawl/search', params);\n }\n\n /**\n * Take a full-page screenshot of a URL\n *\n * @param params - Screenshot parameters\n * @returns Public URL of the screenshot\n * @throws {CrawlKitError} On API errors\n *\n * @example\n * ```typescript\n * const result = await crawlkit.screenshot({\n * url: 'https://example.com',\n * options: {\n * width: 1920,\n * height: 1080,\n * waitForSelector: '#content'\n * }\n * });\n * console.log('Screenshot URL:', result.url);\n * ```\n *\n * @costs 1 credit\n */\n async screenshot(params: ScreenshotParams): Promise<ScreenshotData> {\n return this.post<ScreenshotData>('/v1/crawl/screenshot', params);\n }\n}\n","import { BaseResource } from './base.js';\nimport type {\n LinkedInCompanyParams,\n LinkedInCompanyData,\n LinkedInPersonParams,\n LinkedInPersonData,\n} from '../types/index.js';\n\n/**\n * LinkedIn scraping operations\n * Provides company and person profile scraping\n */\nexport class LinkedInResource extends BaseResource {\n /**\n * Scrape a LinkedIn company profile\n *\n * @param params - Company profile parameters\n * @returns Company profile data including description, employees, jobs, posts\n * @throws {CrawlKitError} On API errors\n *\n * @example\n * ```typescript\n * const result = await crawlkit.linkedin.company({\n * url: 'https://www.linkedin.com/company/openai',\n * options: { includeJobs: true }\n * });\n * console.log(result.company.name);\n * console.log(result.company.followers);\n * console.log(result.company.jobs);\n * ```\n *\n * @costs 1 credit\n */\n async company(params: LinkedInCompanyParams): Promise<LinkedInCompanyData> {\n return this.post<LinkedInCompanyData>('/v1/crawl/linkedin/company', params);\n }\n\n /**\n * Scrape LinkedIn person profile(s)\n *\n * @param params - Person profile parameters (single URL or array of URLs, max 10)\n * @returns Person profile data for each URL\n * @throws {CrawlKitError} On API errors\n *\n * @example\n * ```typescript\n * // Single profile\n * const result = await crawlkit.linkedin.person({\n * url: 'https://www.linkedin.com/in/username'\n * });\n *\n * // Multiple profiles (batch)\n * const batchResult = await crawlkit.linkedin.person({\n * url: [\n * 'https://www.linkedin.com/in/user1',\n * 'https://www.linkedin.com/in/user2'\n * ]\n * });\n * console.log(`Success: ${batchResult.successCount}, Failed: ${batchResult.failedCount}`);\n * ```\n *\n * @costs 3 credits per URL\n */\n async person(params: LinkedInPersonParams): Promise<LinkedInPersonData> {\n return this.post<LinkedInPersonData>('/v1/crawl/linkedin/person', params);\n }\n}\n","import { BaseResource } from './base.js';\nimport type {\n InstagramProfileParams,\n InstagramProfileData,\n InstagramContentParams,\n InstagramContentData,\n} from '../types/index.js';\n\n/**\n * Instagram scraping operations\n * Provides profile and content (posts/reels) scraping\n */\nexport class InstagramResource extends BaseResource {\n /**\n * Scrape an Instagram profile\n *\n * @param params - Profile parameters (username or URL)\n * @returns Profile data including bio, follower count, and recent posts\n * @throws {CrawlKitError} On API errors\n *\n * @example\n * ```typescript\n * const result = await crawlkit.instagram.profile({\n * username: 'instagram'\n * });\n * console.log(result.profile.full_name);\n * console.log(result.profile.follower_count);\n * console.log(result.profile.posts.length);\n * ```\n *\n * @costs 1 credit\n */\n async profile(params: InstagramProfileParams): Promise<InstagramProfileData> {\n return this.post<InstagramProfileData>('/v1/crawl/instagram/profile', params);\n }\n\n /**\n * Scrape Instagram content (post, reel, or video)\n *\n * @param params - Content parameters (shortcode or full URL)\n * @returns Content data including media URLs, likes, comments, and owner info\n * @throws {CrawlKitError} On API errors\n *\n * @example\n * ```typescript\n * // Using shortcode\n * const result = await crawlkit.instagram.content({\n * shortcode: 'CxIIgCCq8mg'\n * });\n *\n * // Using full URL\n * const result = await crawlkit.instagram.content({\n * shortcode: 'https://www.instagram.com/p/CxIIgCCq8mg/'\n * });\n *\n * console.log(result.post.like_count);\n * console.log(result.post.video_url);\n * ```\n *\n * @costs 1 credit\n */\n async content(params: InstagramContentParams): Promise<InstagramContentData> {\n return this.post<InstagramContentData>('/v1/crawl/instagram/content', params);\n }\n}\n","import { BaseResource } from './base.js';\nimport type {\n PlayStoreReviewsParams,\n PlayStoreReviewsData,\n PlayStoreDetailParams,\n PlayStoreDetailData,\n AppStoreReviewsParams,\n AppStoreReviewsData,\n} from '../types/index.js';\n\n/**\n * App store operations\n * Provides Google Play Store and Apple App Store data scraping\n */\nexport class AppStoreResource extends BaseResource {\n /**\n * Fetch Google Play Store reviews for an app\n *\n * @param params - Reviews parameters including app ID and optional pagination cursor\n * @returns Reviews with pagination information\n * @throws {CrawlKitError} On API errors\n *\n * @example\n * ```typescript\n * // First page\n * const result = await crawlkit.appstore.playstoreReviews({\n * appId: 'com.example.app',\n * options: { lang: 'en' }\n * });\n *\n * // Next page\n * if (result.pagination.hasMore) {\n * const nextPage = await crawlkit.appstore.playstoreReviews({\n * appId: 'com.example.app',\n * cursor: result.pagination.nextCursor\n * });\n * }\n * ```\n *\n * @costs 1 credit per page\n */\n async playstoreReviews(params: PlayStoreReviewsParams): Promise<PlayStoreReviewsData> {\n return this.post<PlayStoreReviewsData>('/v1/crawl/playstore/reviews', params);\n }\n\n /**\n * Fetch Google Play Store app details\n *\n * @param params - App detail parameters\n * @returns Comprehensive app information including ratings, screenshots, permissions\n * @throws {CrawlKitError} On API errors\n *\n * @example\n * ```typescript\n * const result = await crawlkit.appstore.playstoreDetail({\n * appId: 'com.example.app',\n * options: { lang: 'en' }\n * });\n * console.log(result.appName);\n * console.log(result.rating);\n * console.log(result.installs);\n * ```\n *\n * @costs 1 credit\n */\n async playstoreDetail(params: PlayStoreDetailParams): Promise<PlayStoreDetailData> {\n return this.post<PlayStoreDetailData>('/v1/crawl/playstore/detail', params);\n }\n\n /**\n * Fetch Apple App Store reviews for an app\n *\n * @param params - Reviews parameters including app ID and optional pagination cursor\n * @returns Reviews with pagination information\n * @throws {CrawlKitError} On API errors\n *\n * @example\n * ```typescript\n * // First page\n * const result = await crawlkit.appstore.appstoreReviews({\n * appId: '123456789',\n * options: { lang: 'en' }\n * });\n *\n * // Paginate through all reviews\n * let cursor = result.pagination.nextCursor;\n * while (cursor) {\n * const nextPage = await crawlkit.appstore.appstoreReviews({\n * appId: '123456789',\n * cursor\n * });\n * cursor = nextPage.pagination.nextCursor;\n * }\n * ```\n *\n * @costs 1 credit per page\n */\n async appstoreReviews(params: AppStoreReviewsParams): Promise<AppStoreReviewsData> {\n return this.post<AppStoreReviewsData>('/v1/crawl/appstore/reviews', params);\n }\n}\n","import { CrawlResource } from './resources/crawl.js';\nimport { LinkedInResource } from './resources/linkedin.js';\nimport { InstagramResource } from './resources/instagram.js';\nimport { AppStoreResource } from './resources/appstore.js';\nimport { AuthenticationError } from './errors/index.js';\nimport type { ResourceConfig } from './resources/base.js';\nimport type {\n ScrapeParams,\n ScrapeData,\n ExtractParams,\n ExtractData,\n SearchParams,\n SearchData,\n ScreenshotParams,\n ScreenshotData,\n} from './types/index.js';\n\n/**\n * Configuration options for the CrawlKit client\n */\nexport interface CrawlKitConfig {\n /**\n * API key for authentication\n * Must start with 'ck_' prefix\n * Get your API key at https://crawlkit.sh\n */\n apiKey: string;\n\n /**\n * Base URL for the API\n * @default 'https://api.crawlkit.sh'\n */\n baseUrl?: string;\n\n /**\n * Default timeout in milliseconds for all requests\n * @default 30000\n */\n timeout?: number;\n\n /**\n * Custom fetch implementation\n * Useful for testing or environments without native fetch\n */\n fetch?: typeof globalThis.fetch;\n}\n\n/**\n * CrawlKit SDK client for web scraping API\n *\n * @example\n * ```typescript\n * import { CrawlKit } from '@crawlkit/sdk';\n *\n * const crawlkit = new CrawlKit({ apiKey: 'ck_your_api_key' });\n *\n * // Scrape a webpage\n * const page = await crawlkit.scrape({ url: 'https://example.com' });\n * console.log(page.markdown);\n *\n * // Extract structured data with AI\n * const data = await crawlkit.extract({\n * url: 'https://example.com/product',\n * schema: {\n * type: 'object',\n * properties: {\n * name: { type: 'string' },\n * price: { type: 'number' }\n * }\n * }\n * });\n *\n * // Scrape social media\n * const company = await crawlkit.linkedin.company({\n * url: 'https://linkedin.com/company/openai'\n * });\n * ```\n */\nexport class CrawlKit {\n private readonly config: Required<Omit<CrawlKitConfig, 'fetch'>> & { fetch: typeof globalThis.fetch };\n private readonly crawl: CrawlResource;\n\n /**\n * LinkedIn scraping operations\n * Provides company and person profile scraping\n */\n public readonly linkedin: LinkedInResource;\n\n /**\n * Instagram scraping operations\n * Provides profile and content scraping\n */\n public readonly instagram: InstagramResource;\n\n /**\n * App store operations\n * Provides Google Play Store and Apple App Store data\n */\n public readonly appstore: AppStoreResource;\n\n /**\n * Create a new CrawlKit client\n *\n * @param config - Client configuration\n * @throws {AuthenticationError} If API key is invalid or missing\n *\n * @example\n * ```typescript\n * const crawlkit = new CrawlKit({\n * apiKey: 'ck_your_api_key',\n * timeout: 60000 // 60 seconds\n * });\n * ```\n */\n constructor(config: CrawlKitConfig) {\n // Validate API key\n if (!config.apiKey) {\n throw new AuthenticationError('API key is required');\n }\n\n if (!config.apiKey.startsWith('ck_')) {\n throw new AuthenticationError(\n 'Invalid API key format. API keys must start with \"ck_\"'\n );\n }\n\n this.config = {\n apiKey: config.apiKey,\n baseUrl: config.baseUrl ?? 'https://api.crawlkit.sh',\n timeout: config.timeout ?? 30000,\n fetch: config.fetch ?? globalThis.fetch.bind(globalThis),\n };\n\n // Initialize resources\n const resourceConfig: ResourceConfig = {\n apiKey: this.config.apiKey,\n baseUrl: this.config.baseUrl,\n timeout: this.config.timeout,\n fetch: this.config.fetch,\n };\n\n this.crawl = new CrawlResource(resourceConfig);\n this.linkedin = new LinkedInResource(resourceConfig);\n this.instagram = new InstagramResource(resourceConfig);\n this.appstore = new AppStoreResource(resourceConfig);\n }\n\n /**\n * Scrape a URL and return markdown, HTML, metadata, and links\n *\n * @param params - Scrape parameters\n * @returns Scraped page data including markdown, HTML, metadata, and links\n * @throws {CrawlKitError} On API errors\n *\n * @example\n * ```typescript\n * // Basic scraping\n * const result = await crawlkit.scrape({\n * url: 'https://example.com'\n * });\n * console.log(result.markdown);\n * console.log(result.metadata.title);\n *\n * // With browser automation\n * const spaResult = await crawlkit.scrape({\n * url: 'https://example.com/spa',\n * options: {\n * waitFor: '#content-loaded',\n * actions: [\n * { type: 'click', selector: '#load-more' },\n * { type: 'wait', milliseconds: 2000 }\n * ]\n * }\n * });\n * ```\n *\n * @costs 1 credit\n */\n async scrape(params: ScrapeParams): Promise<ScrapeData> {\n return this.crawl.scrape(params);\n }\n\n /**\n * Extract structured data from a URL using AI\n *\n * Uses LLM to extract data according to the provided JSON schema.\n *\n * @param params - Extract parameters including JSON schema\n * @returns Extracted structured data along with page content\n * @throws {CrawlKitError} On API errors\n *\n * @example\n * ```typescript\n * interface Product {\n * name: string;\n * price: number;\n * description: string;\n * inStock: boolean;\n * }\n *\n * const result = await crawlkit.extract<Product>({\n * url: 'https://example.com/product/123',\n * schema: {\n * type: 'object',\n * properties: {\n * name: { type: 'string' },\n * price: { type: 'number' },\n * description: { type: 'string' },\n * inStock: { type: 'boolean' }\n * }\n * },\n * options: {\n * prompt: 'Extract product information from this page'\n * }\n * });\n *\n * // TypeScript knows result.json is Product\n * console.log(result.json.name);\n * console.log(result.json.price);\n * ```\n *\n * @costs 5 credits\n */\n async extract<T = unknown>(params: ExtractParams): Promise<ExtractData<T>> {\n return this.crawl.extract<T>(params);\n }\n\n /**\n * Perform a web search\n *\n * @param params - Search parameters\n * @returns Search results with titles, URLs, and snippets\n * @throws {CrawlKitError} On API errors\n *\n * @example\n * ```typescript\n * const result = await crawlkit.search({\n * query: 'typescript best practices 2024',\n * options: {\n * maxResults: 20,\n * timeRange: 'm', // Past month\n * region: 'us-en'\n * }\n * });\n *\n * for (const item of result.results) {\n * console.log(`${item.position}. ${item.title}`);\n * console.log(` ${item.url}`);\n * console.log(` ${item.snippet}\\n`);\n * }\n * ```\n *\n * @costs 1 credit per page (~10 results)\n */\n async search(params: SearchParams): Promise<SearchData> {\n return this.crawl.search(params);\n }\n\n /**\n * Take a full-page screenshot of a URL\n *\n * @param params - Screenshot parameters\n * @returns Public URL of the screenshot\n * @throws {CrawlKitError} On API errors\n *\n * @example\n * ```typescript\n * const result = await crawlkit.screenshot({\n * url: 'https://example.com',\n * options: {\n * width: 1920,\n * height: 1080,\n * waitForSelector: '#main-content'\n * }\n * });\n *\n * console.log('Screenshot URL:', result.url);\n * console.log(`Dimensions: ${result.width}x${result.height}`);\n * ```\n *\n * @costs 1 credit\n */\n async screenshot(params: ScreenshotParams): Promise<ScreenshotData> {\n return this.crawl.screenshot(params);\n }\n}\n"]}
|
package/dist/index.d.cts
CHANGED
|
@@ -1294,7 +1294,7 @@ declare class CrawlKit {
|
|
|
1294
1294
|
*/
|
|
1295
1295
|
extract<T = unknown>(params: ExtractParams): Promise<ExtractData<T>>;
|
|
1296
1296
|
/**
|
|
1297
|
-
* Perform a web search
|
|
1297
|
+
* Perform a web search
|
|
1298
1298
|
*
|
|
1299
1299
|
* @param params - Search parameters
|
|
1300
1300
|
* @returns Search results with titles, URLs, and snippets
|
package/dist/index.d.ts
CHANGED
|
@@ -1294,7 +1294,7 @@ declare class CrawlKit {
|
|
|
1294
1294
|
*/
|
|
1295
1295
|
extract<T = unknown>(params: ExtractParams): Promise<ExtractData<T>>;
|
|
1296
1296
|
/**
|
|
1297
|
-
* Perform a web search
|
|
1297
|
+
* Perform a web search
|
|
1298
1298
|
*
|
|
1299
1299
|
* @param params - Search parameters
|
|
1300
1300
|
* @returns Search results with titles, URLs, and snippets
|
package/dist/index.js
CHANGED
|
@@ -303,7 +303,7 @@ var CrawlResource = class extends BaseResource {
|
|
|
303
303
|
return this.post("/v1/crawl/extract", params);
|
|
304
304
|
}
|
|
305
305
|
/**
|
|
306
|
-
* Perform a web search
|
|
306
|
+
* Perform a web search
|
|
307
307
|
*
|
|
308
308
|
* @param params - Search parameters
|
|
309
309
|
* @returns Search results with titles, URLs, and snippets
|
|
@@ -671,7 +671,7 @@ var CrawlKit = class {
|
|
|
671
671
|
return this.crawl.extract(params);
|
|
672
672
|
}
|
|
673
673
|
/**
|
|
674
|
-
* Perform a web search
|
|
674
|
+
* Perform a web search
|
|
675
675
|
*
|
|
676
676
|
* @param params - Search parameters
|
|
677
677
|
* @returns Search results with titles, URLs, and snippets
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/errors/index.ts","../src/resources/base.ts","../src/resources/crawl.ts","../src/resources/linkedin.ts","../src/resources/instagram.ts","../src/resources/appstore.ts","../src/client.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["import type { ErrorCode } from '../types/common.js';\n\n/**\n * Base error class for all CrawlKit errors\n */\nexport class CrawlKitError extends Error {\n /** Error code from API */\n public readonly code: ErrorCode;\n /** HTTP status code */\n public readonly statusCode: number;\n /** Credits refunded if operation failed */\n public readonly creditsRefunded?: number;\n /** Remaining credits after operation */\n public readonly creditsRemaining?: number;\n\n constructor(\n code: ErrorCode,\n message: string,\n statusCode: number,\n creditsRefunded?: number,\n creditsRemaining?: number\n ) {\n super(message);\n this.name = 'CrawlKitError';\n this.code = code;\n this.statusCode = statusCode;\n this.creditsRefunded = creditsRefunded;\n this.creditsRemaining = creditsRemaining;\n\n // Maintains proper stack trace for where our error was thrown\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n }\n }\n}\n\n/**\n * Authentication error - invalid or missing API key\n */\nexport class AuthenticationError extends CrawlKitError {\n constructor(message: string = 'Invalid or missing API key') {\n super('VALIDATION_ERROR', message, 401);\n this.name = 'AuthenticationError';\n }\n}\n\n/**\n * Insufficient credits to perform the operation\n */\nexport class InsufficientCreditsError extends CrawlKitError {\n /** Credits required for the operation */\n public readonly required?: number;\n /** Credits available */\n public readonly available?: number;\n\n constructor(\n message: string,\n creditsRefunded?: number,\n creditsRemaining?: number\n ) {\n super('INSUFFICIENT_CREDITS', message, 402, creditsRefunded, creditsRemaining);\n this.name = 'InsufficientCreditsError';\n this.available = creditsRemaining;\n }\n}\n\n/**\n * Validation error - invalid request parameters\n */\nexport class ValidationError extends CrawlKitError {\n constructor(message: string) {\n super('VALIDATION_ERROR', message, 400);\n this.name = 'ValidationError';\n }\n}\n\n/**\n * Rate limit exceeded\n */\nexport class RateLimitError extends CrawlKitError {\n constructor(message: string = 'Rate limit exceeded') {\n super('RATE_LIMITED', message, 429);\n this.name = 'RateLimitError';\n }\n}\n\n/**\n * Request timeout\n */\nexport class TimeoutError extends CrawlKitError {\n constructor(\n message: string,\n creditsRefunded?: number,\n creditsRemaining?: number\n ) {\n super('TIMEOUT', message, 408, creditsRefunded, creditsRemaining);\n this.name = 'TimeoutError';\n }\n}\n\n/**\n * Resource not found (404)\n */\nexport class NotFoundError extends CrawlKitError {\n constructor(message: string = 'Resource not found') {\n super('NOT_FOUND', message, 404);\n this.name = 'NotFoundError';\n }\n}\n\n/**\n * Network or connection error\n */\nexport class NetworkError extends CrawlKitError {\n constructor(\n code: ErrorCode,\n message: string,\n creditsRefunded?: number,\n creditsRemaining?: number\n ) {\n super(code, message, 502, creditsRefunded, creditsRemaining);\n this.name = 'NetworkError';\n }\n}\n\n/**\n * Create appropriate error instance from API response\n */\nexport function createErrorFromResponse(\n code: string,\n message: string,\n statusCode: number,\n creditsRefunded?: number,\n creditsRemaining?: number\n): CrawlKitError {\n const errorCode = code as ErrorCode;\n\n switch (statusCode) {\n case 401:\n return new AuthenticationError(message);\n case 402:\n return new InsufficientCreditsError(message, creditsRefunded, creditsRemaining);\n case 429:\n return new RateLimitError(message);\n case 404:\n return new NotFoundError(message);\n }\n\n switch (errorCode) {\n case 'VALIDATION_ERROR':\n return new ValidationError(message);\n case 'INSUFFICIENT_CREDITS':\n return new InsufficientCreditsError(message, creditsRefunded, creditsRemaining);\n case 'TIMEOUT':\n return new TimeoutError(message, creditsRefunded, creditsRemaining);\n case 'RATE_LIMITED':\n return new RateLimitError(message);\n case 'NOT_FOUND':\n return new NotFoundError(message);\n case 'DNS_FAILED':\n case 'CONNECTION_REFUSED':\n case 'SSL_ERROR':\n case 'TOO_MANY_REDIRECTS':\n case 'PROXY_ERROR':\n return new NetworkError(errorCode, message, creditsRefunded, creditsRemaining);\n default:\n return new CrawlKitError(\n errorCode,\n message,\n statusCode,\n creditsRefunded,\n creditsRemaining\n );\n }\n}\n","import { createErrorFromResponse, CrawlKitError } from '../errors/index.js';\nimport type { ApiResponse, ApiErrorResponse } from '../types/common.js';\n\n/**\n * Configuration for resource instances\n */\nexport interface ResourceConfig {\n /** API key for authentication */\n apiKey: string;\n /** Base URL for the API */\n baseUrl: string;\n /** Default timeout in milliseconds */\n timeout: number;\n /** Fetch implementation */\n fetch: typeof globalThis.fetch;\n}\n\n/**\n * Base class for API resources\n * Provides common HTTP functionality for all resource classes\n */\nexport abstract class BaseResource {\n protected readonly config: ResourceConfig;\n\n constructor(config: ResourceConfig) {\n this.config = config;\n }\n\n /**\n * Make a POST request to the API\n * @param endpoint - API endpoint path (e.g., '/v1/crawl/scrape')\n * @param body - Request body object\n * @returns Parsed response data\n * @throws {CrawlKitError} On API errors\n */\n protected async post<T, B extends object = object>(\n endpoint: string,\n body: B\n ): Promise<T> {\n const url = `${this.config.baseUrl}${endpoint}`;\n\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), this.config.timeout);\n\n try {\n const response = await this.config.fetch(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'Authorization': `ApiKey ${this.config.apiKey}`,\n 'User-Agent': '@crawlkit/sdk',\n },\n body: JSON.stringify(body),\n signal: controller.signal,\n });\n\n clearTimeout(timeoutId);\n\n let json: ApiResponse<T>;\n try {\n json = await response.json() as ApiResponse<T>;\n } catch {\n throw new CrawlKitError(\n 'PARSE_ERROR',\n 'Failed to parse API response',\n response.status\n );\n }\n\n if (!json.success) {\n const errorResponse = json as ApiErrorResponse;\n throw createErrorFromResponse(\n errorResponse.error.code,\n errorResponse.error.message,\n response.status,\n errorResponse.creditsRefunded,\n errorResponse.creditsRemaining\n );\n }\n\n return json.data;\n } catch (error) {\n clearTimeout(timeoutId);\n\n // Re-throw CrawlKitError instances\n if (error instanceof CrawlKitError) {\n throw error;\n }\n\n // Handle abort/timeout\n if (error instanceof Error) {\n if (error.name === 'AbortError') {\n throw new CrawlKitError(\n 'TIMEOUT',\n `Request timed out after ${this.config.timeout}ms`,\n 408\n );\n }\n\n // Handle network errors\n throw new CrawlKitError(\n 'UNKNOWN',\n error.message || 'An unknown error occurred',\n 500\n );\n }\n\n throw new CrawlKitError('UNKNOWN', 'An unknown error occurred', 500);\n }\n }\n\n /**\n * Make a GET request to the API\n * @param endpoint - API endpoint path\n * @param params - Query parameters\n * @returns Parsed response data\n * @throws {CrawlKitError} On API errors\n */\n protected async get<T>(\n endpoint: string,\n params?: Record<string, string | number | boolean | undefined>\n ): Promise<T> {\n let url = `${this.config.baseUrl}${endpoint}`;\n\n // Add query parameters\n if (params) {\n const searchParams = new URLSearchParams();\n for (const [key, value] of Object.entries(params)) {\n if (value !== undefined) {\n searchParams.append(key, String(value));\n }\n }\n const queryString = searchParams.toString();\n if (queryString) {\n url += `?${queryString}`;\n }\n }\n\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), this.config.timeout);\n\n try {\n const response = await this.config.fetch(url, {\n method: 'GET',\n headers: {\n 'Authorization': `ApiKey ${this.config.apiKey}`,\n 'User-Agent': '@crawlkit/sdk',\n },\n signal: controller.signal,\n });\n\n clearTimeout(timeoutId);\n\n let json: ApiResponse<T>;\n try {\n json = await response.json() as ApiResponse<T>;\n } catch {\n throw new CrawlKitError(\n 'PARSE_ERROR',\n 'Failed to parse API response',\n response.status\n );\n }\n\n if (!json.success) {\n const errorResponse = json as ApiErrorResponse;\n throw createErrorFromResponse(\n errorResponse.error.code,\n errorResponse.error.message,\n response.status,\n errorResponse.creditsRefunded,\n errorResponse.creditsRemaining\n );\n }\n\n return json.data;\n } catch (error) {\n clearTimeout(timeoutId);\n\n if (error instanceof CrawlKitError) {\n throw error;\n }\n\n if (error instanceof Error) {\n if (error.name === 'AbortError') {\n throw new CrawlKitError(\n 'TIMEOUT',\n `Request timed out after ${this.config.timeout}ms`,\n 408\n );\n }\n\n throw new CrawlKitError(\n 'UNKNOWN',\n error.message || 'An unknown error occurred',\n 500\n );\n }\n\n throw new CrawlKitError('UNKNOWN', 'An unknown error occurred', 500);\n }\n }\n}\n","import { BaseResource } from './base.js';\nimport type {\n ScrapeParams,\n ScrapeData,\n ExtractParams,\n ExtractData,\n SearchParams,\n SearchData,\n ScreenshotParams,\n ScreenshotData,\n} from '../types/index.js';\n\n/**\n * Core crawl operations resource\n * Provides scrape, extract, search, and screenshot functionality\n */\nexport class CrawlResource extends BaseResource {\n /**\n * Scrape a URL and return markdown, HTML, metadata, and links\n *\n * @param params - Scrape parameters\n * @returns Scraped page data including markdown, HTML, metadata, and links\n * @throws {CrawlKitError} On API errors\n *\n * @example\n * ```typescript\n * const result = await crawlkit.scrape({\n * url: 'https://example.com',\n * options: {\n * onlyMainContent: true,\n * waitFor: '#content'\n * }\n * });\n * console.log(result.markdown);\n * ```\n *\n * @costs 1 credit\n */\n async scrape(params: ScrapeParams): Promise<ScrapeData> {\n return this.post<ScrapeData>('/v1/crawl/scrape', params);\n }\n\n /**\n * Extract structured data from a URL using AI\n *\n * @param params - Extract parameters including JSON schema\n * @returns Extracted structured data along with page content\n * @throws {CrawlKitError} On API errors\n *\n * @example\n * ```typescript\n * interface Product {\n * name: string;\n * price: number;\n * }\n *\n * const result = await crawlkit.extract<Product>({\n * url: 'https://example.com/product',\n * schema: {\n * type: 'object',\n * properties: {\n * name: { type: 'string' },\n * price: { type: 'number' }\n * }\n * }\n * });\n * console.log(result.json.name, result.json.price);\n * ```\n *\n * @costs 5 credits\n */\n async extract<T = unknown>(params: ExtractParams): Promise<ExtractData<T>> {\n return this.post<ExtractData<T>>('/v1/crawl/extract', params);\n }\n\n /**\n * Perform a web search using DuckDuckGo\n *\n * @param params - Search parameters\n * @returns Search results with titles, URLs, and snippets\n * @throws {CrawlKitError} On API errors\n *\n * @example\n * ```typescript\n * const result = await crawlkit.search({\n * query: 'typescript best practices',\n * options: {\n * maxResults: 10,\n * timeRange: 'w' // Past week\n * }\n * });\n * result.results.forEach(r => console.log(r.title, r.url));\n * ```\n *\n * @costs 1 credit per page (~10 results)\n */\n async search(params: SearchParams): Promise<SearchData> {\n return this.post<SearchData>('/v1/crawl/search', params);\n }\n\n /**\n * Take a full-page screenshot of a URL\n *\n * @param params - Screenshot parameters\n * @returns Public URL of the screenshot\n * @throws {CrawlKitError} On API errors\n *\n * @example\n * ```typescript\n * const result = await crawlkit.screenshot({\n * url: 'https://example.com',\n * options: {\n * width: 1920,\n * height: 1080,\n * waitForSelector: '#content'\n * }\n * });\n * console.log('Screenshot URL:', result.url);\n * ```\n *\n * @costs 1 credit\n */\n async screenshot(params: ScreenshotParams): Promise<ScreenshotData> {\n return this.post<ScreenshotData>('/v1/crawl/screenshot', params);\n }\n}\n","import { BaseResource } from './base.js';\nimport type {\n LinkedInCompanyParams,\n LinkedInCompanyData,\n LinkedInPersonParams,\n LinkedInPersonData,\n} from '../types/index.js';\n\n/**\n * LinkedIn scraping operations\n * Provides company and person profile scraping\n */\nexport class LinkedInResource extends BaseResource {\n /**\n * Scrape a LinkedIn company profile\n *\n * @param params - Company profile parameters\n * @returns Company profile data including description, employees, jobs, posts\n * @throws {CrawlKitError} On API errors\n *\n * @example\n * ```typescript\n * const result = await crawlkit.linkedin.company({\n * url: 'https://www.linkedin.com/company/openai',\n * options: { includeJobs: true }\n * });\n * console.log(result.company.name);\n * console.log(result.company.followers);\n * console.log(result.company.jobs);\n * ```\n *\n * @costs 1 credit\n */\n async company(params: LinkedInCompanyParams): Promise<LinkedInCompanyData> {\n return this.post<LinkedInCompanyData>('/v1/crawl/linkedin/company', params);\n }\n\n /**\n * Scrape LinkedIn person profile(s)\n *\n * @param params - Person profile parameters (single URL or array of URLs, max 10)\n * @returns Person profile data for each URL\n * @throws {CrawlKitError} On API errors\n *\n * @example\n * ```typescript\n * // Single profile\n * const result = await crawlkit.linkedin.person({\n * url: 'https://www.linkedin.com/in/username'\n * });\n *\n * // Multiple profiles (batch)\n * const batchResult = await crawlkit.linkedin.person({\n * url: [\n * 'https://www.linkedin.com/in/user1',\n * 'https://www.linkedin.com/in/user2'\n * ]\n * });\n * console.log(`Success: ${batchResult.successCount}, Failed: ${batchResult.failedCount}`);\n * ```\n *\n * @costs 3 credits per URL\n */\n async person(params: LinkedInPersonParams): Promise<LinkedInPersonData> {\n return this.post<LinkedInPersonData>('/v1/crawl/linkedin/person', params);\n }\n}\n","import { BaseResource } from './base.js';\nimport type {\n InstagramProfileParams,\n InstagramProfileData,\n InstagramContentParams,\n InstagramContentData,\n} from '../types/index.js';\n\n/**\n * Instagram scraping operations\n * Provides profile and content (posts/reels) scraping\n */\nexport class InstagramResource extends BaseResource {\n /**\n * Scrape an Instagram profile\n *\n * @param params - Profile parameters (username or URL)\n * @returns Profile data including bio, follower count, and recent posts\n * @throws {CrawlKitError} On API errors\n *\n * @example\n * ```typescript\n * const result = await crawlkit.instagram.profile({\n * username: 'instagram'\n * });\n * console.log(result.profile.full_name);\n * console.log(result.profile.follower_count);\n * console.log(result.profile.posts.length);\n * ```\n *\n * @costs 1 credit\n */\n async profile(params: InstagramProfileParams): Promise<InstagramProfileData> {\n return this.post<InstagramProfileData>('/v1/crawl/instagram/profile', params);\n }\n\n /**\n * Scrape Instagram content (post, reel, or video)\n *\n * @param params - Content parameters (shortcode or full URL)\n * @returns Content data including media URLs, likes, comments, and owner info\n * @throws {CrawlKitError} On API errors\n *\n * @example\n * ```typescript\n * // Using shortcode\n * const result = await crawlkit.instagram.content({\n * shortcode: 'CxIIgCCq8mg'\n * });\n *\n * // Using full URL\n * const result = await crawlkit.instagram.content({\n * shortcode: 'https://www.instagram.com/p/CxIIgCCq8mg/'\n * });\n *\n * console.log(result.post.like_count);\n * console.log(result.post.video_url);\n * ```\n *\n * @costs 1 credit\n */\n async content(params: InstagramContentParams): Promise<InstagramContentData> {\n return this.post<InstagramContentData>('/v1/crawl/instagram/content', params);\n }\n}\n","import { BaseResource } from './base.js';\nimport type {\n PlayStoreReviewsParams,\n PlayStoreReviewsData,\n PlayStoreDetailParams,\n PlayStoreDetailData,\n AppStoreReviewsParams,\n AppStoreReviewsData,\n} from '../types/index.js';\n\n/**\n * App store operations\n * Provides Google Play Store and Apple App Store data scraping\n */\nexport class AppStoreResource extends BaseResource {\n /**\n * Fetch Google Play Store reviews for an app\n *\n * @param params - Reviews parameters including app ID and optional pagination cursor\n * @returns Reviews with pagination information\n * @throws {CrawlKitError} On API errors\n *\n * @example\n * ```typescript\n * // First page\n * const result = await crawlkit.appstore.playstoreReviews({\n * appId: 'com.example.app',\n * options: { lang: 'en' }\n * });\n *\n * // Next page\n * if (result.pagination.hasMore) {\n * const nextPage = await crawlkit.appstore.playstoreReviews({\n * appId: 'com.example.app',\n * cursor: result.pagination.nextCursor\n * });\n * }\n * ```\n *\n * @costs 1 credit per page\n */\n async playstoreReviews(params: PlayStoreReviewsParams): Promise<PlayStoreReviewsData> {\n return this.post<PlayStoreReviewsData>('/v1/crawl/playstore/reviews', params);\n }\n\n /**\n * Fetch Google Play Store app details\n *\n * @param params - App detail parameters\n * @returns Comprehensive app information including ratings, screenshots, permissions\n * @throws {CrawlKitError} On API errors\n *\n * @example\n * ```typescript\n * const result = await crawlkit.appstore.playstoreDetail({\n * appId: 'com.example.app',\n * options: { lang: 'en' }\n * });\n * console.log(result.appName);\n * console.log(result.rating);\n * console.log(result.installs);\n * ```\n *\n * @costs 1 credit\n */\n async playstoreDetail(params: PlayStoreDetailParams): Promise<PlayStoreDetailData> {\n return this.post<PlayStoreDetailData>('/v1/crawl/playstore/detail', params);\n }\n\n /**\n * Fetch Apple App Store reviews for an app\n *\n * @param params - Reviews parameters including app ID and optional pagination cursor\n * @returns Reviews with pagination information\n * @throws {CrawlKitError} On API errors\n *\n * @example\n * ```typescript\n * // First page\n * const result = await crawlkit.appstore.appstoreReviews({\n * appId: '123456789',\n * options: { lang: 'en' }\n * });\n *\n * // Paginate through all reviews\n * let cursor = result.pagination.nextCursor;\n * while (cursor) {\n * const nextPage = await crawlkit.appstore.appstoreReviews({\n * appId: '123456789',\n * cursor\n * });\n * cursor = nextPage.pagination.nextCursor;\n * }\n * ```\n *\n * @costs 1 credit per page\n */\n async appstoreReviews(params: AppStoreReviewsParams): Promise<AppStoreReviewsData> {\n return this.post<AppStoreReviewsData>('/v1/crawl/appstore/reviews', params);\n }\n}\n","import { CrawlResource } from './resources/crawl.js';\nimport { LinkedInResource } from './resources/linkedin.js';\nimport { InstagramResource } from './resources/instagram.js';\nimport { AppStoreResource } from './resources/appstore.js';\nimport { AuthenticationError } from './errors/index.js';\nimport type { ResourceConfig } from './resources/base.js';\nimport type {\n ScrapeParams,\n ScrapeData,\n ExtractParams,\n ExtractData,\n SearchParams,\n SearchData,\n ScreenshotParams,\n ScreenshotData,\n} from './types/index.js';\n\n/**\n * Configuration options for the CrawlKit client\n */\nexport interface CrawlKitConfig {\n /**\n * API key for authentication\n * Must start with 'ck_' prefix\n * Get your API key at https://crawlkit.sh\n */\n apiKey: string;\n\n /**\n * Base URL for the API\n * @default 'https://api.crawlkit.sh'\n */\n baseUrl?: string;\n\n /**\n * Default timeout in milliseconds for all requests\n * @default 30000\n */\n timeout?: number;\n\n /**\n * Custom fetch implementation\n * Useful for testing or environments without native fetch\n */\n fetch?: typeof globalThis.fetch;\n}\n\n/**\n * CrawlKit SDK client for web scraping API\n *\n * @example\n * ```typescript\n * import { CrawlKit } from '@crawlkit/sdk';\n *\n * const crawlkit = new CrawlKit({ apiKey: 'ck_your_api_key' });\n *\n * // Scrape a webpage\n * const page = await crawlkit.scrape({ url: 'https://example.com' });\n * console.log(page.markdown);\n *\n * // Extract structured data with AI\n * const data = await crawlkit.extract({\n * url: 'https://example.com/product',\n * schema: {\n * type: 'object',\n * properties: {\n * name: { type: 'string' },\n * price: { type: 'number' }\n * }\n * }\n * });\n *\n * // Scrape social media\n * const company = await crawlkit.linkedin.company({\n * url: 'https://linkedin.com/company/openai'\n * });\n * ```\n */\nexport class CrawlKit {\n private readonly config: Required<Omit<CrawlKitConfig, 'fetch'>> & { fetch: typeof globalThis.fetch };\n private readonly crawl: CrawlResource;\n\n /**\n * LinkedIn scraping operations\n * Provides company and person profile scraping\n */\n public readonly linkedin: LinkedInResource;\n\n /**\n * Instagram scraping operations\n * Provides profile and content scraping\n */\n public readonly instagram: InstagramResource;\n\n /**\n * App store operations\n * Provides Google Play Store and Apple App Store data\n */\n public readonly appstore: AppStoreResource;\n\n /**\n * Create a new CrawlKit client\n *\n * @param config - Client configuration\n * @throws {AuthenticationError} If API key is invalid or missing\n *\n * @example\n * ```typescript\n * const crawlkit = new CrawlKit({\n * apiKey: 'ck_your_api_key',\n * timeout: 60000 // 60 seconds\n * });\n * ```\n */\n constructor(config: CrawlKitConfig) {\n // Validate API key\n if (!config.apiKey) {\n throw new AuthenticationError('API key is required');\n }\n\n if (!config.apiKey.startsWith('ck_')) {\n throw new AuthenticationError(\n 'Invalid API key format. API keys must start with \"ck_\"'\n );\n }\n\n this.config = {\n apiKey: config.apiKey,\n baseUrl: config.baseUrl ?? 'https://api.crawlkit.sh',\n timeout: config.timeout ?? 30000,\n fetch: config.fetch ?? globalThis.fetch.bind(globalThis),\n };\n\n // Initialize resources\n const resourceConfig: ResourceConfig = {\n apiKey: this.config.apiKey,\n baseUrl: this.config.baseUrl,\n timeout: this.config.timeout,\n fetch: this.config.fetch,\n };\n\n this.crawl = new CrawlResource(resourceConfig);\n this.linkedin = new LinkedInResource(resourceConfig);\n this.instagram = new InstagramResource(resourceConfig);\n this.appstore = new AppStoreResource(resourceConfig);\n }\n\n /**\n * Scrape a URL and return markdown, HTML, metadata, and links\n *\n * @param params - Scrape parameters\n * @returns Scraped page data including markdown, HTML, metadata, and links\n * @throws {CrawlKitError} On API errors\n *\n * @example\n * ```typescript\n * // Basic scraping\n * const result = await crawlkit.scrape({\n * url: 'https://example.com'\n * });\n * console.log(result.markdown);\n * console.log(result.metadata.title);\n *\n * // With browser automation\n * const spaResult = await crawlkit.scrape({\n * url: 'https://example.com/spa',\n * options: {\n * waitFor: '#content-loaded',\n * actions: [\n * { type: 'click', selector: '#load-more' },\n * { type: 'wait', milliseconds: 2000 }\n * ]\n * }\n * });\n * ```\n *\n * @costs 1 credit\n */\n async scrape(params: ScrapeParams): Promise<ScrapeData> {\n return this.crawl.scrape(params);\n }\n\n /**\n * Extract structured data from a URL using AI\n *\n * Uses LLM to extract data according to the provided JSON schema.\n *\n * @param params - Extract parameters including JSON schema\n * @returns Extracted structured data along with page content\n * @throws {CrawlKitError} On API errors\n *\n * @example\n * ```typescript\n * interface Product {\n * name: string;\n * price: number;\n * description: string;\n * inStock: boolean;\n * }\n *\n * const result = await crawlkit.extract<Product>({\n * url: 'https://example.com/product/123',\n * schema: {\n * type: 'object',\n * properties: {\n * name: { type: 'string' },\n * price: { type: 'number' },\n * description: { type: 'string' },\n * inStock: { type: 'boolean' }\n * }\n * },\n * options: {\n * prompt: 'Extract product information from this page'\n * }\n * });\n *\n * // TypeScript knows result.json is Product\n * console.log(result.json.name);\n * console.log(result.json.price);\n * ```\n *\n * @costs 5 credits\n */\n async extract<T = unknown>(params: ExtractParams): Promise<ExtractData<T>> {\n return this.crawl.extract<T>(params);\n }\n\n /**\n * Perform a web search using DuckDuckGo\n *\n * @param params - Search parameters\n * @returns Search results with titles, URLs, and snippets\n * @throws {CrawlKitError} On API errors\n *\n * @example\n * ```typescript\n * const result = await crawlkit.search({\n * query: 'typescript best practices 2024',\n * options: {\n * maxResults: 20,\n * timeRange: 'm', // Past month\n * region: 'us-en'\n * }\n * });\n *\n * for (const item of result.results) {\n * console.log(`${item.position}. ${item.title}`);\n * console.log(` ${item.url}`);\n * console.log(` ${item.snippet}\\n`);\n * }\n * ```\n *\n * @costs 1 credit per page (~10 results)\n */\n async search(params: SearchParams): Promise<SearchData> {\n return this.crawl.search(params);\n }\n\n /**\n * Take a full-page screenshot of a URL\n *\n * @param params - Screenshot parameters\n * @returns Public URL of the screenshot\n * @throws {CrawlKitError} On API errors\n *\n * @example\n * ```typescript\n * const result = await crawlkit.screenshot({\n * url: 'https://example.com',\n * options: {\n * width: 1920,\n * height: 1080,\n * waitForSelector: '#main-content'\n * }\n * });\n *\n * console.log('Screenshot URL:', result.url);\n * console.log(`Dimensions: ${result.width}x${result.height}`);\n * ```\n *\n * @costs 1 credit\n */\n async screenshot(params: ScreenshotParams): Promise<ScreenshotData> {\n return this.crawl.screenshot(params);\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/errors/index.ts","../src/resources/base.ts","../src/resources/crawl.ts","../src/resources/linkedin.ts","../src/resources/instagram.ts","../src/resources/appstore.ts","../src/client.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["import type { ErrorCode } from '../types/common.js';\n\n/**\n * Base error class for all CrawlKit errors\n */\nexport class CrawlKitError extends Error {\n /** Error code from API */\n public readonly code: ErrorCode;\n /** HTTP status code */\n public readonly statusCode: number;\n /** Credits refunded if operation failed */\n public readonly creditsRefunded?: number;\n /** Remaining credits after operation */\n public readonly creditsRemaining?: number;\n\n constructor(\n code: ErrorCode,\n message: string,\n statusCode: number,\n creditsRefunded?: number,\n creditsRemaining?: number\n ) {\n super(message);\n this.name = 'CrawlKitError';\n this.code = code;\n this.statusCode = statusCode;\n this.creditsRefunded = creditsRefunded;\n this.creditsRemaining = creditsRemaining;\n\n // Maintains proper stack trace for where our error was thrown\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n }\n }\n}\n\n/**\n * Authentication error - invalid or missing API key\n */\nexport class AuthenticationError extends CrawlKitError {\n constructor(message: string = 'Invalid or missing API key') {\n super('VALIDATION_ERROR', message, 401);\n this.name = 'AuthenticationError';\n }\n}\n\n/**\n * Insufficient credits to perform the operation\n */\nexport class InsufficientCreditsError extends CrawlKitError {\n /** Credits required for the operation */\n public readonly required?: number;\n /** Credits available */\n public readonly available?: number;\n\n constructor(\n message: string,\n creditsRefunded?: number,\n creditsRemaining?: number\n ) {\n super('INSUFFICIENT_CREDITS', message, 402, creditsRefunded, creditsRemaining);\n this.name = 'InsufficientCreditsError';\n this.available = creditsRemaining;\n }\n}\n\n/**\n * Validation error - invalid request parameters\n */\nexport class ValidationError extends CrawlKitError {\n constructor(message: string) {\n super('VALIDATION_ERROR', message, 400);\n this.name = 'ValidationError';\n }\n}\n\n/**\n * Rate limit exceeded\n */\nexport class RateLimitError extends CrawlKitError {\n constructor(message: string = 'Rate limit exceeded') {\n super('RATE_LIMITED', message, 429);\n this.name = 'RateLimitError';\n }\n}\n\n/**\n * Request timeout\n */\nexport class TimeoutError extends CrawlKitError {\n constructor(\n message: string,\n creditsRefunded?: number,\n creditsRemaining?: number\n ) {\n super('TIMEOUT', message, 408, creditsRefunded, creditsRemaining);\n this.name = 'TimeoutError';\n }\n}\n\n/**\n * Resource not found (404)\n */\nexport class NotFoundError extends CrawlKitError {\n constructor(message: string = 'Resource not found') {\n super('NOT_FOUND', message, 404);\n this.name = 'NotFoundError';\n }\n}\n\n/**\n * Network or connection error\n */\nexport class NetworkError extends CrawlKitError {\n constructor(\n code: ErrorCode,\n message: string,\n creditsRefunded?: number,\n creditsRemaining?: number\n ) {\n super(code, message, 502, creditsRefunded, creditsRemaining);\n this.name = 'NetworkError';\n }\n}\n\n/**\n * Create appropriate error instance from API response\n */\nexport function createErrorFromResponse(\n code: string,\n message: string,\n statusCode: number,\n creditsRefunded?: number,\n creditsRemaining?: number\n): CrawlKitError {\n const errorCode = code as ErrorCode;\n\n switch (statusCode) {\n case 401:\n return new AuthenticationError(message);\n case 402:\n return new InsufficientCreditsError(message, creditsRefunded, creditsRemaining);\n case 429:\n return new RateLimitError(message);\n case 404:\n return new NotFoundError(message);\n }\n\n switch (errorCode) {\n case 'VALIDATION_ERROR':\n return new ValidationError(message);\n case 'INSUFFICIENT_CREDITS':\n return new InsufficientCreditsError(message, creditsRefunded, creditsRemaining);\n case 'TIMEOUT':\n return new TimeoutError(message, creditsRefunded, creditsRemaining);\n case 'RATE_LIMITED':\n return new RateLimitError(message);\n case 'NOT_FOUND':\n return new NotFoundError(message);\n case 'DNS_FAILED':\n case 'CONNECTION_REFUSED':\n case 'SSL_ERROR':\n case 'TOO_MANY_REDIRECTS':\n case 'PROXY_ERROR':\n return new NetworkError(errorCode, message, creditsRefunded, creditsRemaining);\n default:\n return new CrawlKitError(\n errorCode,\n message,\n statusCode,\n creditsRefunded,\n creditsRemaining\n );\n }\n}\n","import { createErrorFromResponse, CrawlKitError } from '../errors/index.js';\nimport type { ApiResponse, ApiErrorResponse } from '../types/common.js';\n\n/**\n * Configuration for resource instances\n */\nexport interface ResourceConfig {\n /** API key for authentication */\n apiKey: string;\n /** Base URL for the API */\n baseUrl: string;\n /** Default timeout in milliseconds */\n timeout: number;\n /** Fetch implementation */\n fetch: typeof globalThis.fetch;\n}\n\n/**\n * Base class for API resources\n * Provides common HTTP functionality for all resource classes\n */\nexport abstract class BaseResource {\n protected readonly config: ResourceConfig;\n\n constructor(config: ResourceConfig) {\n this.config = config;\n }\n\n /**\n * Make a POST request to the API\n * @param endpoint - API endpoint path (e.g., '/v1/crawl/scrape')\n * @param body - Request body object\n * @returns Parsed response data\n * @throws {CrawlKitError} On API errors\n */\n protected async post<T, B extends object = object>(\n endpoint: string,\n body: B\n ): Promise<T> {\n const url = `${this.config.baseUrl}${endpoint}`;\n\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), this.config.timeout);\n\n try {\n const response = await this.config.fetch(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'Authorization': `ApiKey ${this.config.apiKey}`,\n 'User-Agent': '@crawlkit/sdk',\n },\n body: JSON.stringify(body),\n signal: controller.signal,\n });\n\n clearTimeout(timeoutId);\n\n let json: ApiResponse<T>;\n try {\n json = await response.json() as ApiResponse<T>;\n } catch {\n throw new CrawlKitError(\n 'PARSE_ERROR',\n 'Failed to parse API response',\n response.status\n );\n }\n\n if (!json.success) {\n const errorResponse = json as ApiErrorResponse;\n throw createErrorFromResponse(\n errorResponse.error.code,\n errorResponse.error.message,\n response.status,\n errorResponse.creditsRefunded,\n errorResponse.creditsRemaining\n );\n }\n\n return json.data;\n } catch (error) {\n clearTimeout(timeoutId);\n\n // Re-throw CrawlKitError instances\n if (error instanceof CrawlKitError) {\n throw error;\n }\n\n // Handle abort/timeout\n if (error instanceof Error) {\n if (error.name === 'AbortError') {\n throw new CrawlKitError(\n 'TIMEOUT',\n `Request timed out after ${this.config.timeout}ms`,\n 408\n );\n }\n\n // Handle network errors\n throw new CrawlKitError(\n 'UNKNOWN',\n error.message || 'An unknown error occurred',\n 500\n );\n }\n\n throw new CrawlKitError('UNKNOWN', 'An unknown error occurred', 500);\n }\n }\n\n /**\n * Make a GET request to the API\n * @param endpoint - API endpoint path\n * @param params - Query parameters\n * @returns Parsed response data\n * @throws {CrawlKitError} On API errors\n */\n protected async get<T>(\n endpoint: string,\n params?: Record<string, string | number | boolean | undefined>\n ): Promise<T> {\n let url = `${this.config.baseUrl}${endpoint}`;\n\n // Add query parameters\n if (params) {\n const searchParams = new URLSearchParams();\n for (const [key, value] of Object.entries(params)) {\n if (value !== undefined) {\n searchParams.append(key, String(value));\n }\n }\n const queryString = searchParams.toString();\n if (queryString) {\n url += `?${queryString}`;\n }\n }\n\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), this.config.timeout);\n\n try {\n const response = await this.config.fetch(url, {\n method: 'GET',\n headers: {\n 'Authorization': `ApiKey ${this.config.apiKey}`,\n 'User-Agent': '@crawlkit/sdk',\n },\n signal: controller.signal,\n });\n\n clearTimeout(timeoutId);\n\n let json: ApiResponse<T>;\n try {\n json = await response.json() as ApiResponse<T>;\n } catch {\n throw new CrawlKitError(\n 'PARSE_ERROR',\n 'Failed to parse API response',\n response.status\n );\n }\n\n if (!json.success) {\n const errorResponse = json as ApiErrorResponse;\n throw createErrorFromResponse(\n errorResponse.error.code,\n errorResponse.error.message,\n response.status,\n errorResponse.creditsRefunded,\n errorResponse.creditsRemaining\n );\n }\n\n return json.data;\n } catch (error) {\n clearTimeout(timeoutId);\n\n if (error instanceof CrawlKitError) {\n throw error;\n }\n\n if (error instanceof Error) {\n if (error.name === 'AbortError') {\n throw new CrawlKitError(\n 'TIMEOUT',\n `Request timed out after ${this.config.timeout}ms`,\n 408\n );\n }\n\n throw new CrawlKitError(\n 'UNKNOWN',\n error.message || 'An unknown error occurred',\n 500\n );\n }\n\n throw new CrawlKitError('UNKNOWN', 'An unknown error occurred', 500);\n }\n }\n}\n","import { BaseResource } from './base.js';\nimport type {\n ScrapeParams,\n ScrapeData,\n ExtractParams,\n ExtractData,\n SearchParams,\n SearchData,\n ScreenshotParams,\n ScreenshotData,\n} from '../types/index.js';\n\n/**\n * Core crawl operations resource\n * Provides scrape, extract, search, and screenshot functionality\n */\nexport class CrawlResource extends BaseResource {\n /**\n * Scrape a URL and return markdown, HTML, metadata, and links\n *\n * @param params - Scrape parameters\n * @returns Scraped page data including markdown, HTML, metadata, and links\n * @throws {CrawlKitError} On API errors\n *\n * @example\n * ```typescript\n * const result = await crawlkit.scrape({\n * url: 'https://example.com',\n * options: {\n * onlyMainContent: true,\n * waitFor: '#content'\n * }\n * });\n * console.log(result.markdown);\n * ```\n *\n * @costs 1 credit\n */\n async scrape(params: ScrapeParams): Promise<ScrapeData> {\n return this.post<ScrapeData>('/v1/crawl/scrape', params);\n }\n\n /**\n * Extract structured data from a URL using AI\n *\n * @param params - Extract parameters including JSON schema\n * @returns Extracted structured data along with page content\n * @throws {CrawlKitError} On API errors\n *\n * @example\n * ```typescript\n * interface Product {\n * name: string;\n * price: number;\n * }\n *\n * const result = await crawlkit.extract<Product>({\n * url: 'https://example.com/product',\n * schema: {\n * type: 'object',\n * properties: {\n * name: { type: 'string' },\n * price: { type: 'number' }\n * }\n * }\n * });\n * console.log(result.json.name, result.json.price);\n * ```\n *\n * @costs 5 credits\n */\n async extract<T = unknown>(params: ExtractParams): Promise<ExtractData<T>> {\n return this.post<ExtractData<T>>('/v1/crawl/extract', params);\n }\n\n /**\n * Perform a web search\n *\n * @param params - Search parameters\n * @returns Search results with titles, URLs, and snippets\n * @throws {CrawlKitError} On API errors\n *\n * @example\n * ```typescript\n * const result = await crawlkit.search({\n * query: 'typescript best practices',\n * options: {\n * maxResults: 10,\n * timeRange: 'w' // Past week\n * }\n * });\n * result.results.forEach(r => console.log(r.title, r.url));\n * ```\n *\n * @costs 1 credit per page (~10 results)\n */\n async search(params: SearchParams): Promise<SearchData> {\n return this.post<SearchData>('/v1/crawl/search', params);\n }\n\n /**\n * Take a full-page screenshot of a URL\n *\n * @param params - Screenshot parameters\n * @returns Public URL of the screenshot\n * @throws {CrawlKitError} On API errors\n *\n * @example\n * ```typescript\n * const result = await crawlkit.screenshot({\n * url: 'https://example.com',\n * options: {\n * width: 1920,\n * height: 1080,\n * waitForSelector: '#content'\n * }\n * });\n * console.log('Screenshot URL:', result.url);\n * ```\n *\n * @costs 1 credit\n */\n async screenshot(params: ScreenshotParams): Promise<ScreenshotData> {\n return this.post<ScreenshotData>('/v1/crawl/screenshot', params);\n }\n}\n","import { BaseResource } from './base.js';\nimport type {\n LinkedInCompanyParams,\n LinkedInCompanyData,\n LinkedInPersonParams,\n LinkedInPersonData,\n} from '../types/index.js';\n\n/**\n * LinkedIn scraping operations\n * Provides company and person profile scraping\n */\nexport class LinkedInResource extends BaseResource {\n /**\n * Scrape a LinkedIn company profile\n *\n * @param params - Company profile parameters\n * @returns Company profile data including description, employees, jobs, posts\n * @throws {CrawlKitError} On API errors\n *\n * @example\n * ```typescript\n * const result = await crawlkit.linkedin.company({\n * url: 'https://www.linkedin.com/company/openai',\n * options: { includeJobs: true }\n * });\n * console.log(result.company.name);\n * console.log(result.company.followers);\n * console.log(result.company.jobs);\n * ```\n *\n * @costs 1 credit\n */\n async company(params: LinkedInCompanyParams): Promise<LinkedInCompanyData> {\n return this.post<LinkedInCompanyData>('/v1/crawl/linkedin/company', params);\n }\n\n /**\n * Scrape LinkedIn person profile(s)\n *\n * @param params - Person profile parameters (single URL or array of URLs, max 10)\n * @returns Person profile data for each URL\n * @throws {CrawlKitError} On API errors\n *\n * @example\n * ```typescript\n * // Single profile\n * const result = await crawlkit.linkedin.person({\n * url: 'https://www.linkedin.com/in/username'\n * });\n *\n * // Multiple profiles (batch)\n * const batchResult = await crawlkit.linkedin.person({\n * url: [\n * 'https://www.linkedin.com/in/user1',\n * 'https://www.linkedin.com/in/user2'\n * ]\n * });\n * console.log(`Success: ${batchResult.successCount}, Failed: ${batchResult.failedCount}`);\n * ```\n *\n * @costs 3 credits per URL\n */\n async person(params: LinkedInPersonParams): Promise<LinkedInPersonData> {\n return this.post<LinkedInPersonData>('/v1/crawl/linkedin/person', params);\n }\n}\n","import { BaseResource } from './base.js';\nimport type {\n InstagramProfileParams,\n InstagramProfileData,\n InstagramContentParams,\n InstagramContentData,\n} from '../types/index.js';\n\n/**\n * Instagram scraping operations\n * Provides profile and content (posts/reels) scraping\n */\nexport class InstagramResource extends BaseResource {\n /**\n * Scrape an Instagram profile\n *\n * @param params - Profile parameters (username or URL)\n * @returns Profile data including bio, follower count, and recent posts\n * @throws {CrawlKitError} On API errors\n *\n * @example\n * ```typescript\n * const result = await crawlkit.instagram.profile({\n * username: 'instagram'\n * });\n * console.log(result.profile.full_name);\n * console.log(result.profile.follower_count);\n * console.log(result.profile.posts.length);\n * ```\n *\n * @costs 1 credit\n */\n async profile(params: InstagramProfileParams): Promise<InstagramProfileData> {\n return this.post<InstagramProfileData>('/v1/crawl/instagram/profile', params);\n }\n\n /**\n * Scrape Instagram content (post, reel, or video)\n *\n * @param params - Content parameters (shortcode or full URL)\n * @returns Content data including media URLs, likes, comments, and owner info\n * @throws {CrawlKitError} On API errors\n *\n * @example\n * ```typescript\n * // Using shortcode\n * const result = await crawlkit.instagram.content({\n * shortcode: 'CxIIgCCq8mg'\n * });\n *\n * // Using full URL\n * const result = await crawlkit.instagram.content({\n * shortcode: 'https://www.instagram.com/p/CxIIgCCq8mg/'\n * });\n *\n * console.log(result.post.like_count);\n * console.log(result.post.video_url);\n * ```\n *\n * @costs 1 credit\n */\n async content(params: InstagramContentParams): Promise<InstagramContentData> {\n return this.post<InstagramContentData>('/v1/crawl/instagram/content', params);\n }\n}\n","import { BaseResource } from './base.js';\nimport type {\n PlayStoreReviewsParams,\n PlayStoreReviewsData,\n PlayStoreDetailParams,\n PlayStoreDetailData,\n AppStoreReviewsParams,\n AppStoreReviewsData,\n} from '../types/index.js';\n\n/**\n * App store operations\n * Provides Google Play Store and Apple App Store data scraping\n */\nexport class AppStoreResource extends BaseResource {\n /**\n * Fetch Google Play Store reviews for an app\n *\n * @param params - Reviews parameters including app ID and optional pagination cursor\n * @returns Reviews with pagination information\n * @throws {CrawlKitError} On API errors\n *\n * @example\n * ```typescript\n * // First page\n * const result = await crawlkit.appstore.playstoreReviews({\n * appId: 'com.example.app',\n * options: { lang: 'en' }\n * });\n *\n * // Next page\n * if (result.pagination.hasMore) {\n * const nextPage = await crawlkit.appstore.playstoreReviews({\n * appId: 'com.example.app',\n * cursor: result.pagination.nextCursor\n * });\n * }\n * ```\n *\n * @costs 1 credit per page\n */\n async playstoreReviews(params: PlayStoreReviewsParams): Promise<PlayStoreReviewsData> {\n return this.post<PlayStoreReviewsData>('/v1/crawl/playstore/reviews', params);\n }\n\n /**\n * Fetch Google Play Store app details\n *\n * @param params - App detail parameters\n * @returns Comprehensive app information including ratings, screenshots, permissions\n * @throws {CrawlKitError} On API errors\n *\n * @example\n * ```typescript\n * const result = await crawlkit.appstore.playstoreDetail({\n * appId: 'com.example.app',\n * options: { lang: 'en' }\n * });\n * console.log(result.appName);\n * console.log(result.rating);\n * console.log(result.installs);\n * ```\n *\n * @costs 1 credit\n */\n async playstoreDetail(params: PlayStoreDetailParams): Promise<PlayStoreDetailData> {\n return this.post<PlayStoreDetailData>('/v1/crawl/playstore/detail', params);\n }\n\n /**\n * Fetch Apple App Store reviews for an app\n *\n * @param params - Reviews parameters including app ID and optional pagination cursor\n * @returns Reviews with pagination information\n * @throws {CrawlKitError} On API errors\n *\n * @example\n * ```typescript\n * // First page\n * const result = await crawlkit.appstore.appstoreReviews({\n * appId: '123456789',\n * options: { lang: 'en' }\n * });\n *\n * // Paginate through all reviews\n * let cursor = result.pagination.nextCursor;\n * while (cursor) {\n * const nextPage = await crawlkit.appstore.appstoreReviews({\n * appId: '123456789',\n * cursor\n * });\n * cursor = nextPage.pagination.nextCursor;\n * }\n * ```\n *\n * @costs 1 credit per page\n */\n async appstoreReviews(params: AppStoreReviewsParams): Promise<AppStoreReviewsData> {\n return this.post<AppStoreReviewsData>('/v1/crawl/appstore/reviews', params);\n }\n}\n","import { CrawlResource } from './resources/crawl.js';\nimport { LinkedInResource } from './resources/linkedin.js';\nimport { InstagramResource } from './resources/instagram.js';\nimport { AppStoreResource } from './resources/appstore.js';\nimport { AuthenticationError } from './errors/index.js';\nimport type { ResourceConfig } from './resources/base.js';\nimport type {\n ScrapeParams,\n ScrapeData,\n ExtractParams,\n ExtractData,\n SearchParams,\n SearchData,\n ScreenshotParams,\n ScreenshotData,\n} from './types/index.js';\n\n/**\n * Configuration options for the CrawlKit client\n */\nexport interface CrawlKitConfig {\n /**\n * API key for authentication\n * Must start with 'ck_' prefix\n * Get your API key at https://crawlkit.sh\n */\n apiKey: string;\n\n /**\n * Base URL for the API\n * @default 'https://api.crawlkit.sh'\n */\n baseUrl?: string;\n\n /**\n * Default timeout in milliseconds for all requests\n * @default 30000\n */\n timeout?: number;\n\n /**\n * Custom fetch implementation\n * Useful for testing or environments without native fetch\n */\n fetch?: typeof globalThis.fetch;\n}\n\n/**\n * CrawlKit SDK client for web scraping API\n *\n * @example\n * ```typescript\n * import { CrawlKit } from '@crawlkit/sdk';\n *\n * const crawlkit = new CrawlKit({ apiKey: 'ck_your_api_key' });\n *\n * // Scrape a webpage\n * const page = await crawlkit.scrape({ url: 'https://example.com' });\n * console.log(page.markdown);\n *\n * // Extract structured data with AI\n * const data = await crawlkit.extract({\n * url: 'https://example.com/product',\n * schema: {\n * type: 'object',\n * properties: {\n * name: { type: 'string' },\n * price: { type: 'number' }\n * }\n * }\n * });\n *\n * // Scrape social media\n * const company = await crawlkit.linkedin.company({\n * url: 'https://linkedin.com/company/openai'\n * });\n * ```\n */\nexport class CrawlKit {\n private readonly config: Required<Omit<CrawlKitConfig, 'fetch'>> & { fetch: typeof globalThis.fetch };\n private readonly crawl: CrawlResource;\n\n /**\n * LinkedIn scraping operations\n * Provides company and person profile scraping\n */\n public readonly linkedin: LinkedInResource;\n\n /**\n * Instagram scraping operations\n * Provides profile and content scraping\n */\n public readonly instagram: InstagramResource;\n\n /**\n * App store operations\n * Provides Google Play Store and Apple App Store data\n */\n public readonly appstore: AppStoreResource;\n\n /**\n * Create a new CrawlKit client\n *\n * @param config - Client configuration\n * @throws {AuthenticationError} If API key is invalid or missing\n *\n * @example\n * ```typescript\n * const crawlkit = new CrawlKit({\n * apiKey: 'ck_your_api_key',\n * timeout: 60000 // 60 seconds\n * });\n * ```\n */\n constructor(config: CrawlKitConfig) {\n // Validate API key\n if (!config.apiKey) {\n throw new AuthenticationError('API key is required');\n }\n\n if (!config.apiKey.startsWith('ck_')) {\n throw new AuthenticationError(\n 'Invalid API key format. API keys must start with \"ck_\"'\n );\n }\n\n this.config = {\n apiKey: config.apiKey,\n baseUrl: config.baseUrl ?? 'https://api.crawlkit.sh',\n timeout: config.timeout ?? 30000,\n fetch: config.fetch ?? globalThis.fetch.bind(globalThis),\n };\n\n // Initialize resources\n const resourceConfig: ResourceConfig = {\n apiKey: this.config.apiKey,\n baseUrl: this.config.baseUrl,\n timeout: this.config.timeout,\n fetch: this.config.fetch,\n };\n\n this.crawl = new CrawlResource(resourceConfig);\n this.linkedin = new LinkedInResource(resourceConfig);\n this.instagram = new InstagramResource(resourceConfig);\n this.appstore = new AppStoreResource(resourceConfig);\n }\n\n /**\n * Scrape a URL and return markdown, HTML, metadata, and links\n *\n * @param params - Scrape parameters\n * @returns Scraped page data including markdown, HTML, metadata, and links\n * @throws {CrawlKitError} On API errors\n *\n * @example\n * ```typescript\n * // Basic scraping\n * const result = await crawlkit.scrape({\n * url: 'https://example.com'\n * });\n * console.log(result.markdown);\n * console.log(result.metadata.title);\n *\n * // With browser automation\n * const spaResult = await crawlkit.scrape({\n * url: 'https://example.com/spa',\n * options: {\n * waitFor: '#content-loaded',\n * actions: [\n * { type: 'click', selector: '#load-more' },\n * { type: 'wait', milliseconds: 2000 }\n * ]\n * }\n * });\n * ```\n *\n * @costs 1 credit\n */\n async scrape(params: ScrapeParams): Promise<ScrapeData> {\n return this.crawl.scrape(params);\n }\n\n /**\n * Extract structured data from a URL using AI\n *\n * Uses LLM to extract data according to the provided JSON schema.\n *\n * @param params - Extract parameters including JSON schema\n * @returns Extracted structured data along with page content\n * @throws {CrawlKitError} On API errors\n *\n * @example\n * ```typescript\n * interface Product {\n * name: string;\n * price: number;\n * description: string;\n * inStock: boolean;\n * }\n *\n * const result = await crawlkit.extract<Product>({\n * url: 'https://example.com/product/123',\n * schema: {\n * type: 'object',\n * properties: {\n * name: { type: 'string' },\n * price: { type: 'number' },\n * description: { type: 'string' },\n * inStock: { type: 'boolean' }\n * }\n * },\n * options: {\n * prompt: 'Extract product information from this page'\n * }\n * });\n *\n * // TypeScript knows result.json is Product\n * console.log(result.json.name);\n * console.log(result.json.price);\n * ```\n *\n * @costs 5 credits\n */\n async extract<T = unknown>(params: ExtractParams): Promise<ExtractData<T>> {\n return this.crawl.extract<T>(params);\n }\n\n /**\n * Perform a web search\n *\n * @param params - Search parameters\n * @returns Search results with titles, URLs, and snippets\n * @throws {CrawlKitError} On API errors\n *\n * @example\n * ```typescript\n * const result = await crawlkit.search({\n * query: 'typescript best practices 2024',\n * options: {\n * maxResults: 20,\n * timeRange: 'm', // Past month\n * region: 'us-en'\n * }\n * });\n *\n * for (const item of result.results) {\n * console.log(`${item.position}. ${item.title}`);\n * console.log(` ${item.url}`);\n * console.log(` ${item.snippet}\\n`);\n * }\n * ```\n *\n * @costs 1 credit per page (~10 results)\n */\n async search(params: SearchParams): Promise<SearchData> {\n return this.crawl.search(params);\n }\n\n /**\n * Take a full-page screenshot of a URL\n *\n * @param params - Screenshot parameters\n * @returns Public URL of the screenshot\n * @throws {CrawlKitError} On API errors\n *\n * @example\n * ```typescript\n * const result = await crawlkit.screenshot({\n * url: 'https://example.com',\n * options: {\n * width: 1920,\n * height: 1080,\n * waitForSelector: '#main-content'\n * }\n * });\n *\n * console.log('Screenshot URL:', result.url);\n * console.log(`Dimensions: ${result.width}x${result.height}`);\n * ```\n *\n * @costs 1 credit\n */\n async screenshot(params: ScreenshotParams): Promise<ScreenshotData> {\n return this.crawl.screenshot(params);\n }\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@crawlkit-sh/sdk",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.1",
|
|
4
4
|
"description": "Official TypeScript/JavaScript SDK for CrawlKit - the modern web scraping API. Scrape websites, extract structured data with AI, capture screenshots, and collect social media data.",
|
|
5
5
|
"author": "CrawlKit <support@crawlkit.sh>",
|
|
6
6
|
"license": "MIT",
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
"type": "git",
|
|
9
9
|
"url": "https://github.com/crawlkit/sdk.git"
|
|
10
10
|
},
|
|
11
|
-
"homepage": "https://
|
|
11
|
+
"homepage": "https://crawlkit.sh",
|
|
12
12
|
"bugs": {
|
|
13
13
|
"url": "https://github.com/crawlkit/sdk/issues"
|
|
14
14
|
},
|