diff --git a/README.md b/README.md index 45bb863..4af3e96 100644 --- a/README.md +++ b/README.md @@ -333,6 +333,10 @@ console.log(`Saved to: ${filePath}`); ## Configuration +### Runtime support + +Node.js (>= 20) is the supported and tested runtime. The SDK also runs under Bun, with one caveat: Bun's bundled `undici` omits the optional `dns` interceptor, so DNS-caching is disabled there (requests fall back to the platform resolver and work normally). The SDK detects this automatically and skips the missing interceptor rather than failing. + ### API Token Get your API token from [Bright Data Control Panel](https://brightdata.com/cp/setting/users?=). diff --git a/package.json b/package.json index b04f39c..d067778 100644 --- a/package.json +++ b/package.json @@ -54,7 +54,7 @@ "format": "prettier . --write", "typecheck": "tsc --noEmit --project tsconfig.json", "sanity": "npm run lint && npm run typecheck", - "build": "npm run build:clean && rollup -c && npm run build:dts", + "build": "npm run build:clean && rollup -c && npm run build:dts && node scripts/smoke-dist.mjs", "build:dts": "tsc --project tsconfig.dts.json", "build:clean": "rm -rf ./dist", "build:dev": "npm run build:clean && rollup --watch -c", diff --git a/scripts/add-js-extensions.mjs b/scripts/add-js-extensions.mjs new file mode 100644 index 0000000..de42e78 --- /dev/null +++ b/scripts/add-js-extensions.mjs @@ -0,0 +1,118 @@ +/** + * One-time codemod: add explicit `.js` extensions to relative import/export + * specifiers across src/, so the emitted .d.ts resolve under node16/nodenext. + * + * AST-based (TypeScript compiler API) — covers ImportDeclaration, + * ExportDeclaration (incl. `export *` / `export type *`), inline `import('...')` + * type-nodes, and dynamic `import()` calls. Resolves each relative specifier to + * file (`./x` -> `./x.js`) or barrel directory (`./x` -> `./x/index.js`). + * + * Usage: node scripts/add-js-extensions.mjs [--dry] + * Not a runtime/published dependency — delete after the fix lands if desired. + */ +import ts from 'typescript'; +import fs from 'node:fs'; +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; + +const DRY = process.argv.includes('--dry'); +const ROOT = path.resolve(fileURLToPath(import.meta.url), '../../src'); + +const RELATIVE = /^\.\.?\//; +const HAS_EXT = /\.(js|mjs|cjs|json|node)$/; + +function walk(dir) { + const out = []; + for (const e of fs.readdirSync(dir, { withFileTypes: true })) { + const p = path.join(dir, e.name); + if (e.isDirectory()) out.push(...walk(p)); + else if (e.name.endsWith('.ts') && !e.name.endsWith('.d.ts')) + out.push(p); + } + return out; +} + +/** new specifier, or null to leave as-is */ +function resolveSpecifier(fileDir, spec) { + if (!RELATIVE.test(spec)) return null; // bare package / node: + if (HAS_EXT.test(spec)) return null; // already extensioned + const base = spec.replace(/\/$/, ''); + if ( + fs.existsSync(path.join(fileDir, base + '.ts')) || + fs.existsSync(path.join(fileDir, base + '.tsx')) + ) + return base + '.js'; + if (fs.existsSync(path.join(fileDir, base, 'index.ts'))) + return base + '/index.js'; + return null; // unresolved — report +} + +const files = walk(ROOT); +let filesChanged = 0; +let specsChanged = 0; +const unresolved = []; + +for (const file of files) { + const text = fs.readFileSync(file, 'utf8'); + const sf = ts.createSourceFile( + file, + text, + ts.ScriptTarget.Latest, + /* setParentNodes */ true, + ts.ScriptKind.TS, + ); + const fileDir = path.dirname(file); + const edits = []; + + const consider = (lit) => { + if (!lit || !ts.isStringLiteral(lit)) return; + const spec = lit.text; + const next = resolveSpecifier(fileDir, spec); + if (next === null) { + if (RELATIVE.test(spec) && !HAS_EXT.test(spec)) + unresolved.push(`${path.relative(ROOT, file)}: ${spec}`); + return; + } + const start = lit.getStart(sf); + const quote = text[start]; + edits.push({ start, end: lit.getEnd(), newText: quote + next + quote }); + }; + + const visit = (node) => { + if (ts.isImportDeclaration(node) || ts.isExportDeclaration(node)) { + consider(node.moduleSpecifier); + } else if (ts.isImportTypeNode(node)) { + const arg = node.argument; + if (arg && ts.isLiteralTypeNode(arg)) consider(arg.literal); + } else if ( + ts.isCallExpression(node) && + node.expression.kind === ts.SyntaxKind.ImportKeyword + ) { + consider(node.arguments[0]); + } + ts.forEachChild(node, visit); + }; + visit(sf); + + if (edits.length) { + specsChanged += edits.length; + filesChanged++; + if (!DRY) { + edits.sort((a, b) => b.start - a.start); + let out = text; + for (const e of edits) + out = out.slice(0, e.start) + e.newText + out.slice(e.end); + fs.writeFileSync(file, out); + } + } +} + +console.log( + `${DRY ? '[dry-run] ' : ''}files changed: ${filesChanged}, specifiers changed: ${specsChanged}`, +); +if (unresolved.length) { + console.log(`UNRESOLVED (${unresolved.length}) — left as-is, review:`); + for (const u of unresolved) console.log(' ' + u); +} else { + console.log('no unresolved relative specifiers'); +} diff --git a/scripts/smoke-dist.mjs b/scripts/smoke-dist.mjs new file mode 100644 index 0000000..66d341b --- /dev/null +++ b/scripts/smoke-dist.mjs @@ -0,0 +1,113 @@ +#!/usr/bin/env node +// Built-package runtime smoke. +// +// Loads every published entry point against the *actual* dist/ output, in +// BOTH module formats (ESM via import(), CJS via require()), and constructs +// the client. A broken inter-module specifier surfaces here as a load-time +// throw (ERR_MODULE_NOT_FOUND / "Cannot find module") instead of in a +// consumer's app on the next release. +// +// Why this exists: the vitest suite runs src/ through the bundler, never the +// emitted dist/. After authoring `.js` extensions across every relative +// import in src/, "rollup exited 0" was the only thing standing behind the +// runtime output. This converts that into a real load of the shipped files. +// It is wired into `npm run build` (post-emit) rather than vitest, because CI +// runs the test suite before the build — the artifacts don't exist yet at +// test time. + +import { createRequire } from 'node:module'; +import { fileURLToPath } from 'node:url'; +import path from 'node:path'; + +const require = createRequire(import.meta.url); +const here = path.dirname(fileURLToPath(import.meta.url)); // scripts/ +const dist = path.join(here, '..', 'dist'); + +// Mirror the key the unit tests construct with — long enough to pass apiKey +// validation, no network performed on construction. +const API_KEY = 'test-key-1234567890'; + +// One per `exports` entry in package.json. +const entries = [ + { name: '.', esm: 'esm/index.mjs', cjs: 'cjs/index.cjs', hasClient: true }, + { + name: './scrapers', + esm: 'esm/scrapers.mjs', + cjs: 'cjs/scrapers.cjs', + hasClient: false, + }, + { + name: './search', + esm: 'esm/search.mjs', + cjs: 'cjs/search.cjs', + hasClient: false, + }, + { + name: './datasets', + esm: 'esm/datasets.mjs', + cjs: 'cjs/datasets.cjs', + hasClient: false, + }, +]; + +function assertNonEmpty(mod, label) { + const named = Object.keys(mod).filter((k) => k !== 'default'); + const total = named.length + (mod.default ? 1 : 0); + if (total === 0) { + throw new Error(`${label}: module loaded but exported nothing`); + } +} + +async function constructClient(mod, label) { + const Ctor = mod.bdclient ?? mod.default?.bdclient; + if (typeof Ctor !== 'function') { + throw new Error( + `${label}: bdclient export is not a constructor (got ${typeof Ctor})`, + ); + } + const client = new Ctor({ apiKey: API_KEY }); + if (!client) { + throw new Error(`${label}: client construction returned falsy`); + } + // Best-effort cleanup so the undici agent doesn't keep the process alive. + if (typeof client.close === 'function') { + await client.close(); + } +} + +let failures = 0; + +for (const e of entries) { + // ESM — exercises the import() resolution path. + try { + const mod = await import(path.join(dist, e.esm)); + assertNonEmpty(mod, `esm ${e.name}`); + if (e.hasClient) await constructClient(mod, `esm ${e.name}`); + console.log(` ✓ esm ${e.name}`); + } catch (err) { + failures++; + console.error(` ✗ esm ${e.name}: ${err.message}`); + } + + // CJS — exercises the require() resolution path. + try { + const mod = require(path.join(dist, e.cjs)); + assertNonEmpty(mod, `cjs ${e.name}`); + if (e.hasClient) await constructClient(mod, `cjs ${e.name}`); + console.log(` ✓ cjs ${e.name}`); + } catch (err) { + failures++; + console.error(` ✗ cjs ${e.name}: ${err.message}`); + } +} + +if (failures > 0) { + console.error( + `\nsmoke-dist: ${failures} entry/format combination(s) failed to load from dist/.`, + ); + process.exit(1); +} + +console.log( + 'smoke-dist: all 4 entries load in both ESM and CJS; client constructs.', +); diff --git a/src/api/browser/index.ts b/src/api/browser/index.ts index 86f888a..028f55f 100644 --- a/src/api/browser/index.ts +++ b/src/api/browser/index.ts @@ -1 +1 @@ -export { BrowserService } from './service'; +export { BrowserService } from './service.js'; diff --git a/src/api/browser/service.ts b/src/api/browser/service.ts index c1157a9..cd0ab0e 100644 --- a/src/api/browser/service.ts +++ b/src/api/browser/service.ts @@ -1,6 +1,6 @@ -import { assertSchema } from '../../schemas/utils'; -import { BrowserConnectOptionsSchema } from '../../schemas/browser'; -import type { BrowserConnectOptions } from '../../schemas/browser'; +import { assertSchema } from '../../schemas/utils.js'; +import { BrowserConnectOptionsSchema } from '../../schemas/browser.js'; +import type { BrowserConnectOptions } from '../../schemas/browser.js'; export class BrowserService { static readonly DEFAULT_HOST = 'brd.superproxy.io'; diff --git a/src/api/crawler/index.ts b/src/api/crawler/index.ts index e0ab8fb..dd98e03 100644 --- a/src/api/crawler/index.ts +++ b/src/api/crawler/index.ts @@ -1,7 +1,7 @@ -export { CrawlerService } from './service'; -export { CrawlResult } from './result'; -export type { CrawlRecord, CrawlResultFields } from './result'; +export { CrawlerService } from './service.js'; +export { CrawlResult } from './result.js'; +export type { CrawlRecord, CrawlResultFields } from './result.js'; // CrawlJob is an alias for ScrapeJob — the snapshot-job wrapper is generic. // Re-exported under the crawler name so porters from Python keep the same vocabulary. -export { ScrapeJob as CrawlJob } from '../scrape/job'; +export { ScrapeJob as CrawlJob } from '../scrape/job.js'; diff --git a/src/api/crawler/result.ts b/src/api/crawler/result.ts index 3f657b7..77d0890 100644 --- a/src/api/crawler/result.ts +++ b/src/api/crawler/result.ts @@ -1,4 +1,4 @@ -import { BaseResult, type BaseResultFields } from '../../models/result'; +import { BaseResult, type BaseResultFields } from '../../models/result.js'; export interface CrawlRecord { url?: string; diff --git a/src/api/crawler/service.ts b/src/api/crawler/service.ts index ace783f..6b7832b 100644 --- a/src/api/crawler/service.ts +++ b/src/api/crawler/service.ts @@ -1,19 +1,19 @@ -import { API_ENDPOINT } from '../../utils/constants'; -import { Transport, assertResponse } from '../../core/transport'; -import { parseResponse } from '../../utils/misc'; -import { getLogger } from '../../utils/logger'; -import { assertSchema } from '../../schemas/utils'; +import { API_ENDPOINT } from '../../utils/constants.js'; +import { Transport, assertResponse } from '../../core/transport.js'; +import { parseResponse } from '../../utils/misc.js'; +import { getLogger } from '../../utils/logger.js'; +import { assertSchema } from '../../schemas/utils.js'; import { CrawlInputSchema, CrawlOptionsSchema, CrawlDownloadOptionsSchema, type CrawlOptions, type CrawlDownloadOptions, -} from '../../schemas/crawler'; -import { SnapshotMetaResponseSchema } from '../../schemas/responses'; -import { ScrapeJob } from '../scrape/job'; -import { CrawlResult, type CrawlRecord } from './result'; -import type { SnapshotOperations } from '../../types/datasets'; +} from '../../schemas/crawler.js'; +import { SnapshotMetaResponseSchema } from '../../schemas/responses.js'; +import { ScrapeJob } from '../scrape/job.js'; +import { CrawlResult, type CrawlRecord } from './result.js'; +import type { SnapshotOperations } from '../../types/datasets.js'; const DATASET_ID = 'gd_m6gjtfmeh43we6cqc'; const PLATFORM = 'crawler'; diff --git a/src/api/datasets/base.ts b/src/api/datasets/base.ts index fbffbec..4d2bb4c 100644 --- a/src/api/datasets/base.ts +++ b/src/api/datasets/base.ts @@ -1,14 +1,14 @@ -import { Transport, assertResponse } from '../../core/transport'; -import { API_ENDPOINT } from '../../utils/constants'; -import { parseJSON } from '../../utils/misc'; -import { getLogger } from '../../utils/logger'; -import { pollUntilReady } from '../../utils/polling'; +import { Transport, assertResponse } from '../../core/transport.js'; +import { API_ENDPOINT } from '../../utils/constants.js'; +import { parseJSON } from '../../utils/misc.js'; +import { getLogger } from '../../utils/logger.js'; +import { pollUntilReady } from '../../utils/polling.js'; import type { DatasetMetadata, DatasetSnapshotStatus, DatasetDownloadOptions, DatasetQueryOptions, -} from './types'; +} from './types.js'; export abstract class BaseDataset { abstract readonly datasetId: string; diff --git a/src/api/datasets/client.ts b/src/api/datasets/client.ts index befccce..1dbfd84 100644 --- a/src/api/datasets/client.ts +++ b/src/api/datasets/client.ts @@ -1,16 +1,16 @@ -import { Transport, assertResponse } from '../../core/transport'; -import { API_ENDPOINT } from '../../utils/constants'; -import { parseJSON } from '../../utils/misc'; -import { getLogger } from '../../utils/logger'; -import { BaseDataset } from './base'; -import type { DatasetInfo } from './types'; +import { Transport, assertResponse } from '../../core/transport.js'; +import { API_ENDPOINT } from '../../utils/constants.js'; +import { parseJSON } from '../../utils/misc.js'; +import { getLogger } from '../../utils/logger.js'; +import { BaseDataset } from './base.js'; +import type { DatasetInfo } from './types.js'; import { LinkedinProfilesDataset, LinkedinCompaniesDataset, LinkedinJobListingsDataset, LinkedinPostsDataset, LinkedinProfilesJobListingsDataset, -} from './platforms/linkedin'; +} from './platforms/linkedin.js'; import { AmazonProductsDataset, AmazonReviewsDataset, @@ -19,68 +19,68 @@ import { AmazonProductsSearchDataset, AmazonProductsGlobalDataset, AmazonWalmartDataset, -} from './platforms/amazon'; +} from './platforms/amazon.js'; import { InstagramProfilesDataset, InstagramPostsDataset, InstagramCommentsDataset, InstagramReelsDataset, -} from './platforms/instagram'; +} from './platforms/instagram.js'; import { TiktokProfilesDataset, TiktokPostsDataset, TiktokCommentsDataset, TiktokShopDataset, -} from './platforms/tiktok'; +} from './platforms/tiktok.js'; import { XTwitterPostsDataset, XTwitterProfilesDataset, -} from './platforms/x_twitter'; -import { AgodaPropertiesDataset } from './platforms/agoda'; -import { AirbnbPropertiesDataset } from './platforms/airbnb'; -import { AmericanEagleProductsDataset } from './platforms/american_eagle'; +} from './platforms/x_twitter.js'; +import { AgodaPropertiesDataset } from './platforms/agoda.js'; +import { AirbnbPropertiesDataset } from './platforms/airbnb.js'; +import { AmericanEagleProductsDataset } from './platforms/american_eagle.js'; import { AppleAppStoreDataset, AppleAppStoreReviewsDataset, -} from './platforms/apple'; -import { AsosProductsDataset } from './platforms/asos'; -import { AshleyFurnitureProductsDataset } from './platforms/ashley_furniture'; -import { AustraliaRealEstateDataset } from './platforms/australia_real_estate'; -import { AutozoneProductsDataset } from './platforms/autozone'; -import { BalenciagaProductsDataset } from './platforms/balenciaga'; -import { BbcNewsDataset } from './platforms/bbc'; -import { BerlutiProductsDataset } from './platforms/berluti'; -import { BestBuyProductsDataset } from './platforms/bestbuy'; -import { BhProductsDataset } from './platforms/bh'; +} from './platforms/apple.js'; +import { AsosProductsDataset } from './platforms/asos.js'; +import { AshleyFurnitureProductsDataset } from './platforms/ashley_furniture.js'; +import { AustraliaRealEstateDataset } from './platforms/australia_real_estate.js'; +import { AutozoneProductsDataset } from './platforms/autozone.js'; +import { BalenciagaProductsDataset } from './platforms/balenciaga.js'; +import { BbcNewsDataset } from './platforms/bbc.js'; +import { BerlutiProductsDataset } from './platforms/berluti.js'; +import { BestBuyProductsDataset } from './platforms/bestbuy.js'; +import { BhProductsDataset } from './platforms/bh.js'; import { BlueskyPostsDataset, BlueskyTopProfilesDataset, -} from './platforms/bluesky'; +} from './platforms/bluesky.js'; import { BookingHotelListingsDataset, BookingListingsSearchDataset, -} from './platforms/booking'; -import { BottegaVenetaProductsDataset } from './platforms/bottega_veneta'; -import { CarsalesListingsDataset } from './platforms/carsales'; -import { CartersProductsDataset } from './platforms/carters'; -import { CelineProductsDataset } from './platforms/celine'; -import { ChanelProductsDataset } from './platforms/chanel'; -import { ChileautosChileDataset } from './platforms/chileautos'; -import { CnnNewsDataset } from './platforms/cnn'; -import { CompaniesEnrichedDataset } from './platforms/companies_enriched'; -import { CostcoProductsDataset } from './platforms/costco'; -import { CrateAndBarrelProductsDataset } from './platforms/crate_and_barrel'; +} from './platforms/booking.js'; +import { BottegaVenetaProductsDataset } from './platforms/bottega_veneta.js'; +import { CarsalesListingsDataset } from './platforms/carsales.js'; +import { CartersProductsDataset } from './platforms/carters.js'; +import { CelineProductsDataset } from './platforms/celine.js'; +import { ChanelProductsDataset } from './platforms/chanel.js'; +import { ChileautosChileDataset } from './platforms/chileautos.js'; +import { CnnNewsDataset } from './platforms/cnn.js'; +import { CompaniesEnrichedDataset } from './platforms/companies_enriched.js'; +import { CostcoProductsDataset } from './platforms/costco.js'; +import { CrateAndBarrelProductsDataset } from './platforms/crate_and_barrel.js'; import { CreativeCommons3dModelsDataset, CreativeCommonsImagesDataset, -} from './platforms/creative_commons'; -import { CrunchbaseCompaniesDataset } from './platforms/crunchbase'; -import { DelvauxProductsDataset } from './platforms/delvaux'; -import { DigikeyProductsDataset } from './platforms/digikey'; -import { DiorProductsDataset } from './platforms/dior'; -import { EbayProductsDataset } from './platforms/ebay'; -import { EmployeesEnrichedDataset } from './platforms/employees_enriched'; -import { EtsyProductsDataset } from './platforms/etsy'; +} from './platforms/creative_commons.js'; +import { CrunchbaseCompaniesDataset } from './platforms/crunchbase.js'; +import { DelvauxProductsDataset } from './platforms/delvaux.js'; +import { DigikeyProductsDataset } from './platforms/digikey.js'; +import { DiorProductsDataset } from './platforms/dior.js'; +import { EbayProductsDataset } from './platforms/ebay.js'; +import { EmployeesEnrichedDataset } from './platforms/employees_enriched.js'; +import { EtsyProductsDataset } from './platforms/etsy.js'; import { FacebookCommentsDataset, FacebookCompanyReviewsDataset, @@ -92,142 +92,142 @@ import { FacebookPostsByUrlDataset, FacebookProfilesDataset, FacebookReelsDataset, -} from './platforms/facebook'; -import { FanaticsProductsDataset } from './platforms/fanatics'; -import { FendiProductsDataset } from './platforms/fendi'; -import { G2ProductsDataset, G2ReviewsDataset } from './platforms/g2'; -import { GithubRepositoriesDataset } from './platforms/github'; +} from './platforms/facebook.js'; +import { FanaticsProductsDataset } from './platforms/fanatics.js'; +import { FendiProductsDataset } from './platforms/fendi.js'; +import { G2ProductsDataset, G2ReviewsDataset } from './platforms/g2.js'; +import { GithubRepositoriesDataset } from './platforms/github.js'; import { GlassdoorCompaniesDataset, GlassdoorJobsDataset, GlassdoorReviewsDataset, -} from './platforms/glassdoor'; -import { GoodreadsBooksDataset } from './platforms/goodreads'; +} from './platforms/glassdoor.js'; +import { GoodreadsBooksDataset } from './platforms/goodreads.js'; import { GoogleMapsFullInfoDataset, GoogleMapsReviewsDataset, -} from './platforms/google_maps'; -import { GoogleNewsDataset } from './platforms/google_news'; +} from './platforms/google_maps.js'; +import { GoogleNewsDataset } from './platforms/google_news.js'; import { GooglePlayReviewsDataset, GooglePlayStoreDataset, -} from './platforms/google_play'; +} from './platforms/google_play.js'; import { GoogleShoppingProductsDataset, GoogleShoppingSearchUsDataset, -} from './platforms/google_shopping'; -import { HermesProductsDataset } from './platforms/hermes'; -import { HmProductsDataset } from './platforms/hm'; +} from './platforms/google_shopping.js'; +import { HermesProductsDataset } from './platforms/hermes.js'; +import { HmProductsDataset } from './platforms/hm.js'; import { HomeDepotCaProductsDataset, HomeDepotUsProductsDataset, -} from './platforms/home_depot'; -import { IkeaProductsDataset } from './platforms/ikea'; -import { ImdbMoviesDataset } from './platforms/imdb'; +} from './platforms/home_depot.js'; +import { IkeaProductsDataset } from './platforms/ikea.js'; +import { ImdbMoviesDataset } from './platforms/imdb.js'; import { IndeedCompaniesDataset, IndeedJobsDataset, -} from './platforms/indeed'; -import { InfocasasUruguayDataset } from './platforms/infocasas'; -import { Inmuebles24MexicoDataset } from './platforms/inmuebles24'; -import { KrogerProductsDataset } from './platforms/kroger'; +} from './platforms/indeed.js'; +import { InfocasasUruguayDataset } from './platforms/infocasas.js'; +import { Inmuebles24MexicoDataset } from './platforms/inmuebles24.js'; +import { KrogerProductsDataset } from './platforms/kroger.js'; import { LazadaProductsDataset, LazadaProductsSearchDataset, LazadaReviewsDataset, -} from './platforms/lazada'; -import { LaZBoyProductsDataset } from './platforms/lazboy'; -import { LegoProductsDataset } from './platforms/lego'; -import { LlBeanProductsDataset } from './platforms/llbean'; -import { LoeweProductsDataset } from './platforms/loewe'; -import { LowesProductsDataset } from './platforms/lowes'; -import { MacysProductsDataset } from './platforms/macys'; -import { MangoProductsDataset } from './platforms/mango'; -import { MantaBusinessesDataset } from './platforms/manta'; -import { MassimoDuttiProductsDataset } from './platforms/massimo_dutti'; -import { MattressFirmProductsDataset } from './platforms/mattress_firm'; -import { MediamarktProductsDataset } from './platforms/mediamarkt'; -import { MercadolivreProductsDataset } from './platforms/mercadolivre'; -import { MetrocuadradoPropertiesDataset } from './platforms/metrocuadrado'; -import { MicroCenterProductsDataset } from './platforms/microcenter'; -import { MontblancProductsDataset } from './platforms/montblanc'; -import { MouserProductsDataset } from './platforms/mouser'; -import { MoynatProductsDataset } from './platforms/moynat'; -import { MybobsProductsDataset } from './platforms/mybobs'; -import { MyntraProductsDataset } from './platforms/myntra'; -import { NaverProductsDataset } from './platforms/naver'; -import { NbaPlayersStatsDataset } from './platforms/nba'; -import { OlxBrazilDataset } from './platforms/olx'; -import { OtodomPolandDataset } from './platforms/otodom'; -import { OwlerCompaniesDataset } from './platforms/owler'; -import { OzonProductsDataset } from './platforms/ozon'; +} from './platforms/lazada.js'; +import { LaZBoyProductsDataset } from './platforms/lazboy.js'; +import { LegoProductsDataset } from './platforms/lego.js'; +import { LlBeanProductsDataset } from './platforms/llbean.js'; +import { LoeweProductsDataset } from './platforms/loewe.js'; +import { LowesProductsDataset } from './platforms/lowes.js'; +import { MacysProductsDataset } from './platforms/macys.js'; +import { MangoProductsDataset } from './platforms/mango.js'; +import { MantaBusinessesDataset } from './platforms/manta.js'; +import { MassimoDuttiProductsDataset } from './platforms/massimo_dutti.js'; +import { MattressFirmProductsDataset } from './platforms/mattress_firm.js'; +import { MediamarktProductsDataset } from './platforms/mediamarkt.js'; +import { MercadolivreProductsDataset } from './platforms/mercadolivre.js'; +import { MetrocuadradoPropertiesDataset } from './platforms/metrocuadrado.js'; +import { MicroCenterProductsDataset } from './platforms/microcenter.js'; +import { MontblancProductsDataset } from './platforms/montblanc.js'; +import { MouserProductsDataset } from './platforms/mouser.js'; +import { MoynatProductsDataset } from './platforms/moynat.js'; +import { MybobsProductsDataset } from './platforms/mybobs.js'; +import { MyntraProductsDataset } from './platforms/myntra.js'; +import { NaverProductsDataset } from './platforms/naver.js'; +import { NbaPlayersStatsDataset } from './platforms/nba.js'; +import { OlxBrazilDataset } from './platforms/olx.js'; +import { OtodomPolandDataset } from './platforms/otodom.js'; +import { OwlerCompaniesDataset } from './platforms/owler.js'; +import { OzonProductsDataset } from './platforms/ozon.js'; import { PinterestPostsDataset, PinterestProfilesDataset, -} from './platforms/pinterest'; -import { PitchBookCompaniesDataset } from './platforms/pitchbook'; -import { PradaProductsDataset } from './platforms/prada'; -import { ProperatiPropertiesDataset } from './platforms/properati'; -import { QuoraPostsDataset } from './platforms/quora'; -import { RaymourFlaniganProductsDataset } from './platforms/raymour_flanigan'; -import { RealtorInternationalDataset } from './platforms/realtor'; +} from './platforms/pinterest.js'; +import { PitchBookCompaniesDataset } from './platforms/pitchbook.js'; +import { PradaProductsDataset } from './platforms/prada.js'; +import { ProperatiPropertiesDataset } from './platforms/properati.js'; +import { QuoraPostsDataset } from './platforms/quora.js'; +import { RaymourFlaniganProductsDataset } from './platforms/raymour_flanigan.js'; +import { RealtorInternationalDataset } from './platforms/realtor.js'; import { RedditCommentsDataset, RedditPostsDataset, -} from './platforms/reddit'; -import { RonaProductsDataset } from './platforms/rona'; -import { SephoraProductsDataset } from './platforms/sephora'; -import { SheinProductsDataset } from './platforms/shein'; -import { ShopeeProductsDataset } from './platforms/shopee'; -import { SleepNumberProductsDataset } from './platforms/sleep_number'; -import { SlintelCompaniesDataset } from './platforms/slintel'; -import { SnapchatPostsDataset } from './platforms/snapchat'; -import { TargetProductsDataset } from './platforms/target'; -import { ToctocPropertiesDataset } from './platforms/toctoc'; -import { TokopediaProductsDataset } from './platforms/tokopedia'; -import { ToysRUsProductsDataset } from './platforms/toysrus'; -import { TrustpilotReviewsDataset } from './platforms/trustpilot'; -import { TrustRadiusReviewsDataset } from './platforms/trustradius'; -import { UsLawyersDataset } from './platforms/us_lawyers'; -import { VentureRadarCompaniesDataset } from './platforms/ventureradar'; -import { VimeoVideosDataset } from './platforms/vimeo'; +} from './platforms/reddit.js'; +import { RonaProductsDataset } from './platforms/rona.js'; +import { SephoraProductsDataset } from './platforms/sephora.js'; +import { SheinProductsDataset } from './platforms/shein.js'; +import { ShopeeProductsDataset } from './platforms/shopee.js'; +import { SleepNumberProductsDataset } from './platforms/sleep_number.js'; +import { SlintelCompaniesDataset } from './platforms/slintel.js'; +import { SnapchatPostsDataset } from './platforms/snapchat.js'; +import { TargetProductsDataset } from './platforms/target.js'; +import { ToctocPropertiesDataset } from './platforms/toctoc.js'; +import { TokopediaProductsDataset } from './platforms/tokopedia.js'; +import { ToysRUsProductsDataset } from './platforms/toysrus.js'; +import { TrustpilotReviewsDataset } from './platforms/trustpilot.js'; +import { TrustRadiusReviewsDataset } from './platforms/trustradius.js'; +import { UsLawyersDataset } from './platforms/us_lawyers.js'; +import { VentureRadarCompaniesDataset } from './platforms/ventureradar.js'; +import { VimeoVideosDataset } from './platforms/vimeo.js'; import { WalmartProductsDataset, WalmartSellersInfoDataset, -} from './platforms/walmart'; -import { WayfairProductsDataset } from './platforms/wayfair'; -import { WebmotorsBrasilDataset } from './platforms/webmotors'; -import { WikipediaArticlesDataset } from './platforms/wikipedia'; -import { WildberriesProductsDataset } from './platforms/wildberries'; +} from './platforms/walmart.js'; +import { WayfairProductsDataset } from './platforms/wayfair.js'; +import { WebmotorsBrasilDataset } from './platforms/webmotors.js'; +import { WikipediaArticlesDataset } from './platforms/wikipedia.js'; +import { WildberriesProductsDataset } from './platforms/wildberries.js'; import { WorldPopulationDataset, WorldZipcodesDataset, -} from './platforms/world_data'; -import { XingProfilesDataset } from './platforms/xing'; -import { YahooFinanceBusinessesDataset } from './platforms/yahoo_finance'; -import { YapoChileDataset } from './platforms/yapo'; +} from './platforms/world_data.js'; +import { XingProfilesDataset } from './platforms/xing.js'; +import { YahooFinanceBusinessesDataset } from './platforms/yahoo_finance.js'; +import { YapoChileDataset } from './platforms/yapo.js'; import { YelpBusinessesDataset, YelpReviewsDataset, -} from './platforms/yelp'; +} from './platforms/yelp.js'; import { YoutubeCommentsDataset, YoutubeProfilesDataset, YoutubeVideosDataset, -} from './platforms/youtube'; -import { YslProductsDataset } from './platforms/ysl'; -import { ZalandoProductsDataset } from './platforms/zalando'; +} from './platforms/youtube.js'; +import { YslProductsDataset } from './platforms/ysl.js'; +import { ZalandoProductsDataset } from './platforms/zalando.js'; import { ZaraProductsDataset, ZaraHomeProductsDataset, -} from './platforms/zara'; +} from './platforms/zara.js'; import { ZillowPriceHistoryDataset, ZillowPropertiesDataset, -} from './platforms/zillow'; -import { ZonapropArgentinaDataset } from './platforms/zonaprop'; -import { ZoomInfoCompaniesDataset } from './platforms/zoominfo'; -import { ZooplaPropertiesDataset } from './platforms/zoopla'; +} from './platforms/zillow.js'; +import { ZonapropArgentinaDataset } from './platforms/zonaprop.js'; +import { ZoomInfoCompaniesDataset } from './platforms/zoominfo.js'; +import { ZooplaPropertiesDataset } from './platforms/zoopla.js'; export class DatasetsClient { private transport: Transport; diff --git a/src/api/datasets/index.ts b/src/api/datasets/index.ts index c7d8c3f..d6b2be7 100644 --- a/src/api/datasets/index.ts +++ b/src/api/datasets/index.ts @@ -1,3 +1,3 @@ -export { DatasetsClient } from './client'; -export { BaseDataset } from './base'; -export type * from './types'; +export { DatasetsClient } from './client.js'; +export { BaseDataset } from './base.js'; +export type * from './types.js'; diff --git a/src/api/datasets/platforms/agoda.ts b/src/api/datasets/platforms/agoda.ts index 09a375f..1a9d023 100644 --- a/src/api/datasets/platforms/agoda.ts +++ b/src/api/datasets/platforms/agoda.ts @@ -1,4 +1,4 @@ -import { BaseDataset } from '../base'; +import { BaseDataset } from '../base.js'; export class AgodaPropertiesDataset extends BaseDataset { readonly datasetId = 'gd_m837ssst155rq3a1xo'; diff --git a/src/api/datasets/platforms/airbnb.ts b/src/api/datasets/platforms/airbnb.ts index e94e6e1..80c753d 100644 --- a/src/api/datasets/platforms/airbnb.ts +++ b/src/api/datasets/platforms/airbnb.ts @@ -1,4 +1,4 @@ -import { BaseDataset } from '../base'; +import { BaseDataset } from '../base.js'; export class AirbnbPropertiesDataset extends BaseDataset { readonly datasetId = 'gd_ld7ll037kqy322v05'; diff --git a/src/api/datasets/platforms/amazon.ts b/src/api/datasets/platforms/amazon.ts index 7d84e20..bce996c 100644 --- a/src/api/datasets/platforms/amazon.ts +++ b/src/api/datasets/platforms/amazon.ts @@ -1,4 +1,4 @@ -import { BaseDataset } from '../base'; +import { BaseDataset } from '../base.js'; export class AmazonProductsDataset extends BaseDataset { readonly datasetId = 'gd_l7q7dkf244hwjntr0'; diff --git a/src/api/datasets/platforms/american_eagle.ts b/src/api/datasets/platforms/american_eagle.ts index 46f344c..7cad7ee 100644 --- a/src/api/datasets/platforms/american_eagle.ts +++ b/src/api/datasets/platforms/american_eagle.ts @@ -1,4 +1,4 @@ -import { BaseDataset } from '../base'; +import { BaseDataset } from '../base.js'; export class AmericanEagleProductsDataset extends BaseDataset { readonly datasetId = 'gd_le6plu065keypwyir'; diff --git a/src/api/datasets/platforms/apple.ts b/src/api/datasets/platforms/apple.ts index 2315ae8..fa55603 100644 --- a/src/api/datasets/platforms/apple.ts +++ b/src/api/datasets/platforms/apple.ts @@ -1,4 +1,4 @@ -import { BaseDataset } from '../base'; +import { BaseDataset } from '../base.js'; export class AppleAppStoreDataset extends BaseDataset { readonly datasetId = 'gd_lsk9ki3u2iishmwrui'; diff --git a/src/api/datasets/platforms/ashley_furniture.ts b/src/api/datasets/platforms/ashley_furniture.ts index 37f14a9..579eaf9 100644 --- a/src/api/datasets/platforms/ashley_furniture.ts +++ b/src/api/datasets/platforms/ashley_furniture.ts @@ -1,4 +1,4 @@ -import { BaseDataset } from '../base'; +import { BaseDataset } from '../base.js'; export class AshleyFurnitureProductsDataset extends BaseDataset { readonly datasetId = 'gd_le1ddqrs16uevi5vc4'; diff --git a/src/api/datasets/platforms/asos.ts b/src/api/datasets/platforms/asos.ts index f1689b3..d347509 100644 --- a/src/api/datasets/platforms/asos.ts +++ b/src/api/datasets/platforms/asos.ts @@ -1,4 +1,4 @@ -import { BaseDataset } from '../base'; +import { BaseDataset } from '../base.js'; export class AsosProductsDataset extends BaseDataset { readonly datasetId = 'gd_ldbg7we91cp53nr2z4'; diff --git a/src/api/datasets/platforms/australia_real_estate.ts b/src/api/datasets/platforms/australia_real_estate.ts index ddf5155..d82680c 100644 --- a/src/api/datasets/platforms/australia_real_estate.ts +++ b/src/api/datasets/platforms/australia_real_estate.ts @@ -1,4 +1,4 @@ -import { BaseDataset } from '../base'; +import { BaseDataset } from '../base.js'; export class AustraliaRealEstateDataset extends BaseDataset { readonly datasetId = 'gd_l3cvjh111l943r4awk'; diff --git a/src/api/datasets/platforms/autozone.ts b/src/api/datasets/platforms/autozone.ts index aa8bcc8..a188979 100644 --- a/src/api/datasets/platforms/autozone.ts +++ b/src/api/datasets/platforms/autozone.ts @@ -1,4 +1,4 @@ -import { BaseDataset } from '../base'; +import { BaseDataset } from '../base.js'; export class AutozoneProductsDataset extends BaseDataset { readonly datasetId = 'gd_mkcnp8yy1kf8oxpvij'; diff --git a/src/api/datasets/platforms/balenciaga.ts b/src/api/datasets/platforms/balenciaga.ts index b7862b4..0f18706 100644 --- a/src/api/datasets/platforms/balenciaga.ts +++ b/src/api/datasets/platforms/balenciaga.ts @@ -1,4 +1,4 @@ -import { BaseDataset } from '../base'; +import { BaseDataset } from '../base.js'; export class BalenciagaProductsDataset extends BaseDataset { readonly datasetId = 'gd_lh7oemkb2f9h596dfn'; diff --git a/src/api/datasets/platforms/bbc.ts b/src/api/datasets/platforms/bbc.ts index 292541f..55ce892 100644 --- a/src/api/datasets/platforms/bbc.ts +++ b/src/api/datasets/platforms/bbc.ts @@ -1,4 +1,4 @@ -import { BaseDataset } from '../base'; +import { BaseDataset } from '../base.js'; export class BbcNewsDataset extends BaseDataset { readonly datasetId = 'gd_ly5lkfzd1h8c85feyh'; diff --git a/src/api/datasets/platforms/berluti.ts b/src/api/datasets/platforms/berluti.ts index cf4a493..1347550 100644 --- a/src/api/datasets/platforms/berluti.ts +++ b/src/api/datasets/platforms/berluti.ts @@ -1,4 +1,4 @@ -import { BaseDataset } from '../base'; +import { BaseDataset } from '../base.js'; export class BerlutiProductsDataset extends BaseDataset { readonly datasetId = 'gd_lh7sef5p16tcupyuy3'; diff --git a/src/api/datasets/platforms/bestbuy.ts b/src/api/datasets/platforms/bestbuy.ts index 63cac7c..54bce8f 100644 --- a/src/api/datasets/platforms/bestbuy.ts +++ b/src/api/datasets/platforms/bestbuy.ts @@ -1,4 +1,4 @@ -import { BaseDataset } from '../base'; +import { BaseDataset } from '../base.js'; export class BestBuyProductsDataset extends BaseDataset { readonly datasetId = 'gd_ltre1jqe1jfr7cccf'; diff --git a/src/api/datasets/platforms/bh.ts b/src/api/datasets/platforms/bh.ts index 943c202..54720f3 100644 --- a/src/api/datasets/platforms/bh.ts +++ b/src/api/datasets/platforms/bh.ts @@ -1,4 +1,4 @@ -import { BaseDataset } from '../base'; +import { BaseDataset } from '../base.js'; export class BhProductsDataset extends BaseDataset { readonly datasetId = 'gd_mkce0sox1mchrlpp8g'; diff --git a/src/api/datasets/platforms/bluesky.ts b/src/api/datasets/platforms/bluesky.ts index 52f68e4..903a1b7 100644 --- a/src/api/datasets/platforms/bluesky.ts +++ b/src/api/datasets/platforms/bluesky.ts @@ -1,4 +1,4 @@ -import { BaseDataset } from '../base'; +import { BaseDataset } from '../base.js'; export class BlueskyPostsDataset extends BaseDataset { readonly datasetId = 'gd_m6hn4r5s27zfhc7w4'; diff --git a/src/api/datasets/platforms/booking.ts b/src/api/datasets/platforms/booking.ts index cf6f9ac..79fedae 100644 --- a/src/api/datasets/platforms/booking.ts +++ b/src/api/datasets/platforms/booking.ts @@ -1,4 +1,4 @@ -import { BaseDataset } from '../base'; +import { BaseDataset } from '../base.js'; export class BookingHotelListingsDataset extends BaseDataset { readonly datasetId = 'gd_m5mbdl081229ln6t4a'; diff --git a/src/api/datasets/platforms/bottega_veneta.ts b/src/api/datasets/platforms/bottega_veneta.ts index ec1f0b8..0402a2e 100644 --- a/src/api/datasets/platforms/bottega_veneta.ts +++ b/src/api/datasets/platforms/bottega_veneta.ts @@ -1,4 +1,4 @@ -import { BaseDataset } from '../base'; +import { BaseDataset } from '../base.js'; export class BottegaVenetaProductsDataset extends BaseDataset { readonly datasetId = 'gd_lh7os5q91y20h69xj'; diff --git a/src/api/datasets/platforms/carsales.ts b/src/api/datasets/platforms/carsales.ts index bbc0efe..1fb2af3 100644 --- a/src/api/datasets/platforms/carsales.ts +++ b/src/api/datasets/platforms/carsales.ts @@ -1,4 +1,4 @@ -import { BaseDataset } from '../base'; +import { BaseDataset } from '../base.js'; export class CarsalesListingsDataset extends BaseDataset { readonly datasetId = 'gd_m8h7qkn317z9rvlngb'; diff --git a/src/api/datasets/platforms/carters.ts b/src/api/datasets/platforms/carters.ts index f8c5b01..43961d0 100644 --- a/src/api/datasets/platforms/carters.ts +++ b/src/api/datasets/platforms/carters.ts @@ -1,4 +1,4 @@ -import { BaseDataset } from '../base'; +import { BaseDataset } from '../base.js'; export class CartersProductsDataset extends BaseDataset { readonly datasetId = 'gd_le60f5v0dj17xgv6u'; diff --git a/src/api/datasets/platforms/celine.ts b/src/api/datasets/platforms/celine.ts index 8c7d866..f65701a 100644 --- a/src/api/datasets/platforms/celine.ts +++ b/src/api/datasets/platforms/celine.ts @@ -1,4 +1,4 @@ -import { BaseDataset } from '../base'; +import { BaseDataset } from '../base.js'; export class CelineProductsDataset extends BaseDataset { readonly datasetId = 'gd_lh7qnf8rwtn2c2uuc'; diff --git a/src/api/datasets/platforms/chanel.ts b/src/api/datasets/platforms/chanel.ts index ca6e2df..92eab7a 100644 --- a/src/api/datasets/platforms/chanel.ts +++ b/src/api/datasets/platforms/chanel.ts @@ -1,4 +1,4 @@ -import { BaseDataset } from '../base'; +import { BaseDataset } from '../base.js'; export class ChanelProductsDataset extends BaseDataset { readonly datasetId = 'gd_ldwwuwqe1oh3zav3js'; diff --git a/src/api/datasets/platforms/chileautos.ts b/src/api/datasets/platforms/chileautos.ts index cd41939..e9ebe5b 100644 --- a/src/api/datasets/platforms/chileautos.ts +++ b/src/api/datasets/platforms/chileautos.ts @@ -1,4 +1,4 @@ -import { BaseDataset } from '../base'; +import { BaseDataset } from '../base.js'; export class ChileautosChileDataset extends BaseDataset { readonly datasetId = 'gd_lfsbqgb01iiit5ppju'; diff --git a/src/api/datasets/platforms/cnn.ts b/src/api/datasets/platforms/cnn.ts index dcd7ce4..fcd0b61 100644 --- a/src/api/datasets/platforms/cnn.ts +++ b/src/api/datasets/platforms/cnn.ts @@ -1,4 +1,4 @@ -import { BaseDataset } from '../base'; +import { BaseDataset } from '../base.js'; export class CnnNewsDataset extends BaseDataset { readonly datasetId = 'gd_lycz8783197ch4wvwg'; diff --git a/src/api/datasets/platforms/companies_enriched.ts b/src/api/datasets/platforms/companies_enriched.ts index 2d018f9..9b8d8a0 100644 --- a/src/api/datasets/platforms/companies_enriched.ts +++ b/src/api/datasets/platforms/companies_enriched.ts @@ -1,4 +1,4 @@ -import { BaseDataset } from '../base'; +import { BaseDataset } from '../base.js'; export class CompaniesEnrichedDataset extends BaseDataset { readonly datasetId = 'gd_m3fl0mwzmfpfn4cw4'; diff --git a/src/api/datasets/platforms/costco.ts b/src/api/datasets/platforms/costco.ts index 206345c..503c12d 100644 --- a/src/api/datasets/platforms/costco.ts +++ b/src/api/datasets/platforms/costco.ts @@ -1,4 +1,4 @@ -import { BaseDataset } from '../base'; +import { BaseDataset } from '../base.js'; export class CostcoProductsDataset extends BaseDataset { readonly datasetId = 'gd_mkcbmac44j178pook'; diff --git a/src/api/datasets/platforms/crate_and_barrel.ts b/src/api/datasets/platforms/crate_and_barrel.ts index a31a888..8466cc9 100644 --- a/src/api/datasets/platforms/crate_and_barrel.ts +++ b/src/api/datasets/platforms/crate_and_barrel.ts @@ -1,4 +1,4 @@ -import { BaseDataset } from '../base'; +import { BaseDataset } from '../base.js'; export class CrateAndBarrelProductsDataset extends BaseDataset { readonly datasetId = 'gd_lemtcp2p2qdyd24vq5'; diff --git a/src/api/datasets/platforms/creative_commons.ts b/src/api/datasets/platforms/creative_commons.ts index 4dbccde..3ea68d9 100644 --- a/src/api/datasets/platforms/creative_commons.ts +++ b/src/api/datasets/platforms/creative_commons.ts @@ -1,4 +1,4 @@ -import { BaseDataset } from '../base'; +import { BaseDataset } from '../base.js'; export class CreativeCommons3dModelsDataset extends BaseDataset { readonly datasetId = 'gd_m4jr2hyr2kfhtvba6e'; diff --git a/src/api/datasets/platforms/crunchbase.ts b/src/api/datasets/platforms/crunchbase.ts index d3c1c25..c77a324 100644 --- a/src/api/datasets/platforms/crunchbase.ts +++ b/src/api/datasets/platforms/crunchbase.ts @@ -1,4 +1,4 @@ -import { BaseDataset } from '../base'; +import { BaseDataset } from '../base.js'; export class CrunchbaseCompaniesDataset extends BaseDataset { readonly datasetId = 'gd_l1vijqt9jfj7olije'; diff --git a/src/api/datasets/platforms/delvaux.ts b/src/api/datasets/platforms/delvaux.ts index 297562d..e212596 100644 --- a/src/api/datasets/platforms/delvaux.ts +++ b/src/api/datasets/platforms/delvaux.ts @@ -1,4 +1,4 @@ -import { BaseDataset } from '../base'; +import { BaseDataset } from '../base.js'; export class DelvauxProductsDataset extends BaseDataset { readonly datasetId = 'gd_lhahvbli142qv9r0v1'; diff --git a/src/api/datasets/platforms/digikey.ts b/src/api/datasets/platforms/digikey.ts index a4c06b2..f1e72e6 100644 --- a/src/api/datasets/platforms/digikey.ts +++ b/src/api/datasets/platforms/digikey.ts @@ -1,4 +1,4 @@ -import { BaseDataset } from '../base'; +import { BaseDataset } from '../base.js'; export class DigikeyProductsDataset extends BaseDataset { readonly datasetId = 'gd_lj74waf72416ro0k65'; diff --git a/src/api/datasets/platforms/dior.ts b/src/api/datasets/platforms/dior.ts index 866d352..aadc55b 100644 --- a/src/api/datasets/platforms/dior.ts +++ b/src/api/datasets/platforms/dior.ts @@ -1,4 +1,4 @@ -import { BaseDataset } from '../base'; +import { BaseDataset } from '../base.js'; export class DiorProductsDataset extends BaseDataset { readonly datasetId = 'gd_lh7o3kqu6wp7qmqkl'; diff --git a/src/api/datasets/platforms/ebay.ts b/src/api/datasets/platforms/ebay.ts index e71f038..5ded916 100644 --- a/src/api/datasets/platforms/ebay.ts +++ b/src/api/datasets/platforms/ebay.ts @@ -1,4 +1,4 @@ -import { BaseDataset } from '../base'; +import { BaseDataset } from '../base.js'; export class EbayProductsDataset extends BaseDataset { readonly datasetId = 'gd_ltr9mjt81n0zzdk1fb'; diff --git a/src/api/datasets/platforms/employees_enriched.ts b/src/api/datasets/platforms/employees_enriched.ts index c6827b4..be3bf8a 100644 --- a/src/api/datasets/platforms/employees_enriched.ts +++ b/src/api/datasets/platforms/employees_enriched.ts @@ -1,4 +1,4 @@ -import { BaseDataset } from '../base'; +import { BaseDataset } from '../base.js'; export class EmployeesEnrichedDataset extends BaseDataset { readonly datasetId = 'gd_m18zt6ec11wfqohyrs'; diff --git a/src/api/datasets/platforms/etsy.ts b/src/api/datasets/platforms/etsy.ts index 9bf7a12..1439597 100644 --- a/src/api/datasets/platforms/etsy.ts +++ b/src/api/datasets/platforms/etsy.ts @@ -1,4 +1,4 @@ -import { BaseDataset } from '../base'; +import { BaseDataset } from '../base.js'; export class EtsyProductsDataset extends BaseDataset { readonly datasetId = 'gd_ltppk0jdv1jqz25mz'; diff --git a/src/api/datasets/platforms/facebook.ts b/src/api/datasets/platforms/facebook.ts index 9257e13..fc007e9 100644 --- a/src/api/datasets/platforms/facebook.ts +++ b/src/api/datasets/platforms/facebook.ts @@ -1,4 +1,4 @@ -import { BaseDataset } from '../base'; +import { BaseDataset } from '../base.js'; export class FacebookCommentsDataset extends BaseDataset { readonly datasetId = 'gd_lkay758p1eanlolqw8'; diff --git a/src/api/datasets/platforms/fanatics.ts b/src/api/datasets/platforms/fanatics.ts index 3359764..46508b6 100644 --- a/src/api/datasets/platforms/fanatics.ts +++ b/src/api/datasets/platforms/fanatics.ts @@ -1,4 +1,4 @@ -import { BaseDataset } from '../base'; +import { BaseDataset } from '../base.js'; export class FanaticsProductsDataset extends BaseDataset { readonly datasetId = 'gd_le124kuq1uoj7zj8hb'; diff --git a/src/api/datasets/platforms/fendi.ts b/src/api/datasets/platforms/fendi.ts index 15b5aae..0d1985f 100644 --- a/src/api/datasets/platforms/fendi.ts +++ b/src/api/datasets/platforms/fendi.ts @@ -1,4 +1,4 @@ -import { BaseDataset } from '../base'; +import { BaseDataset } from '../base.js'; export class FendiProductsDataset extends BaseDataset { readonly datasetId = 'gd_lbqsfpfk71ubir3pi'; diff --git a/src/api/datasets/platforms/g2.ts b/src/api/datasets/platforms/g2.ts index fa317a0..caf8460 100644 --- a/src/api/datasets/platforms/g2.ts +++ b/src/api/datasets/platforms/g2.ts @@ -1,4 +1,4 @@ -import { BaseDataset } from '../base'; +import { BaseDataset } from '../base.js'; export class G2ProductsDataset extends BaseDataset { readonly datasetId = 'gd_l88xp4k01qnhvyqlvw'; diff --git a/src/api/datasets/platforms/github.ts b/src/api/datasets/platforms/github.ts index d23d176..1bd1070 100644 --- a/src/api/datasets/platforms/github.ts +++ b/src/api/datasets/platforms/github.ts @@ -1,4 +1,4 @@ -import { BaseDataset } from '../base'; +import { BaseDataset } from '../base.js'; export class GithubRepositoriesDataset extends BaseDataset { readonly datasetId = 'gd_lyrexgxc24b3d4imjt'; diff --git a/src/api/datasets/platforms/glassdoor.ts b/src/api/datasets/platforms/glassdoor.ts index 5cbfcdd..5d27135 100644 --- a/src/api/datasets/platforms/glassdoor.ts +++ b/src/api/datasets/platforms/glassdoor.ts @@ -1,4 +1,4 @@ -import { BaseDataset } from '../base'; +import { BaseDataset } from '../base.js'; export class GlassdoorCompaniesDataset extends BaseDataset { readonly datasetId = 'gd_l7j0bx501ockwldaqf'; diff --git a/src/api/datasets/platforms/goodreads.ts b/src/api/datasets/platforms/goodreads.ts index faa6436..6aacf37 100644 --- a/src/api/datasets/platforms/goodreads.ts +++ b/src/api/datasets/platforms/goodreads.ts @@ -1,4 +1,4 @@ -import { BaseDataset } from '../base'; +import { BaseDataset } from '../base.js'; export class GoodreadsBooksDataset extends BaseDataset { readonly datasetId = 'gd_lreq6ho72fhvovjj7a'; diff --git a/src/api/datasets/platforms/google_maps.ts b/src/api/datasets/platforms/google_maps.ts index 4004094..bbb6501 100644 --- a/src/api/datasets/platforms/google_maps.ts +++ b/src/api/datasets/platforms/google_maps.ts @@ -1,4 +1,4 @@ -import { BaseDataset } from '../base'; +import { BaseDataset } from '../base.js'; export class GoogleMapsFullInfoDataset extends BaseDataset { readonly datasetId = 'gd_m8ebnr0q2qlklc02fz'; diff --git a/src/api/datasets/platforms/google_news.ts b/src/api/datasets/platforms/google_news.ts index 74d0176..615f067 100644 --- a/src/api/datasets/platforms/google_news.ts +++ b/src/api/datasets/platforms/google_news.ts @@ -1,4 +1,4 @@ -import { BaseDataset } from '../base'; +import { BaseDataset } from '../base.js'; export class GoogleNewsDataset extends BaseDataset { readonly datasetId = 'gd_lnsxoxzi1omrwnka5r'; diff --git a/src/api/datasets/platforms/google_play.ts b/src/api/datasets/platforms/google_play.ts index 20115fe..47dbd6f 100644 --- a/src/api/datasets/platforms/google_play.ts +++ b/src/api/datasets/platforms/google_play.ts @@ -1,4 +1,4 @@ -import { BaseDataset } from '../base'; +import { BaseDataset } from '../base.js'; export class GooglePlayReviewsDataset extends BaseDataset { readonly datasetId = 'gd_m6zagkt024uwvvwuyu'; diff --git a/src/api/datasets/platforms/google_shopping.ts b/src/api/datasets/platforms/google_shopping.ts index 47c57d0..a04aca7 100644 --- a/src/api/datasets/platforms/google_shopping.ts +++ b/src/api/datasets/platforms/google_shopping.ts @@ -1,4 +1,4 @@ -import { BaseDataset } from '../base'; +import { BaseDataset } from '../base.js'; export class GoogleShoppingProductsDataset extends BaseDataset { readonly datasetId = 'gd_ltppk50q18kdw67omz'; diff --git a/src/api/datasets/platforms/hermes.ts b/src/api/datasets/platforms/hermes.ts index 9b970da..8eaefa9 100644 --- a/src/api/datasets/platforms/hermes.ts +++ b/src/api/datasets/platforms/hermes.ts @@ -1,4 +1,4 @@ -import { BaseDataset } from '../base'; +import { BaseDataset } from '../base.js'; export class HermesProductsDataset extends BaseDataset { readonly datasetId = 'gd_lh7sn8rz1g95zt4lwk'; diff --git a/src/api/datasets/platforms/hm.ts b/src/api/datasets/platforms/hm.ts index a910f0e..2f6bd04 100644 --- a/src/api/datasets/platforms/hm.ts +++ b/src/api/datasets/platforms/hm.ts @@ -1,4 +1,4 @@ -import { BaseDataset } from '../base'; +import { BaseDataset } from '../base.js'; export class HmProductsDataset extends BaseDataset { readonly datasetId = 'gd_lebec5ir293umvxh5g'; diff --git a/src/api/datasets/platforms/home_depot.ts b/src/api/datasets/platforms/home_depot.ts index 1f5dbaf..f8a0200 100644 --- a/src/api/datasets/platforms/home_depot.ts +++ b/src/api/datasets/platforms/home_depot.ts @@ -1,4 +1,4 @@ -import { BaseDataset } from '../base'; +import { BaseDataset } from '../base.js'; export class HomeDepotCaProductsDataset extends BaseDataset { readonly datasetId = 'gd_lmyvvktscoojdor83'; diff --git a/src/api/datasets/platforms/ikea.ts b/src/api/datasets/platforms/ikea.ts index 92d3495..6921584 100644 --- a/src/api/datasets/platforms/ikea.ts +++ b/src/api/datasets/platforms/ikea.ts @@ -1,4 +1,4 @@ -import { BaseDataset } from '../base'; +import { BaseDataset } from '../base.js'; export class IkeaProductsDataset extends BaseDataset { readonly datasetId = 'gd_le2lfu10qrjmrqo60'; diff --git a/src/api/datasets/platforms/imdb.ts b/src/api/datasets/platforms/imdb.ts index 9540505..a3ddf7c 100644 --- a/src/api/datasets/platforms/imdb.ts +++ b/src/api/datasets/platforms/imdb.ts @@ -1,4 +1,4 @@ -import { BaseDataset } from '../base'; +import { BaseDataset } from '../base.js'; export class ImdbMoviesDataset extends BaseDataset { readonly datasetId = 'gd_l1vikf2h1a4t6x8qzu'; diff --git a/src/api/datasets/platforms/indeed.ts b/src/api/datasets/platforms/indeed.ts index 5c25e83..2e78db5 100644 --- a/src/api/datasets/platforms/indeed.ts +++ b/src/api/datasets/platforms/indeed.ts @@ -1,4 +1,4 @@ -import { BaseDataset } from '../base'; +import { BaseDataset } from '../base.js'; export class IndeedCompaniesDataset extends BaseDataset { readonly datasetId = 'gd_l7qekxkv2i7ve6hx1s'; diff --git a/src/api/datasets/platforms/infocasas.ts b/src/api/datasets/platforms/infocasas.ts index 77c6801..553d324 100644 --- a/src/api/datasets/platforms/infocasas.ts +++ b/src/api/datasets/platforms/infocasas.ts @@ -1,4 +1,4 @@ -import { BaseDataset } from '../base'; +import { BaseDataset } from '../base.js'; export class InfocasasUruguayDataset extends BaseDataset { readonly datasetId = 'gd_lftpmbga1jwon80ddh'; diff --git a/src/api/datasets/platforms/inmuebles24.ts b/src/api/datasets/platforms/inmuebles24.ts index 5c0fe1e..38a2529 100644 --- a/src/api/datasets/platforms/inmuebles24.ts +++ b/src/api/datasets/platforms/inmuebles24.ts @@ -1,4 +1,4 @@ -import { BaseDataset } from '../base'; +import { BaseDataset } from '../base.js'; export class Inmuebles24MexicoDataset extends BaseDataset { readonly datasetId = 'gd_lfsa1vgv183347v45m'; diff --git a/src/api/datasets/platforms/instagram.ts b/src/api/datasets/platforms/instagram.ts index b63e673..b578ca1 100644 --- a/src/api/datasets/platforms/instagram.ts +++ b/src/api/datasets/platforms/instagram.ts @@ -1,4 +1,4 @@ -import { BaseDataset } from '../base'; +import { BaseDataset } from '../base.js'; export class InstagramProfilesDataset extends BaseDataset { readonly datasetId = 'gd_l1vikfch901nx3by4'; diff --git a/src/api/datasets/platforms/kroger.ts b/src/api/datasets/platforms/kroger.ts index 1695484..5f1a87b 100644 --- a/src/api/datasets/platforms/kroger.ts +++ b/src/api/datasets/platforms/kroger.ts @@ -1,4 +1,4 @@ -import { BaseDataset } from '../base'; +import { BaseDataset } from '../base.js'; export class KrogerProductsDataset extends BaseDataset { readonly datasetId = 'gd_mhlod8vh2kwgoi9yw3'; diff --git a/src/api/datasets/platforms/lazada.ts b/src/api/datasets/platforms/lazada.ts index bb934b5..fb3f5f0 100644 --- a/src/api/datasets/platforms/lazada.ts +++ b/src/api/datasets/platforms/lazada.ts @@ -1,4 +1,4 @@ -import { BaseDataset } from '../base'; +import { BaseDataset } from '../base.js'; export class LazadaProductsDataset extends BaseDataset { readonly datasetId = 'gd_lk14r4zxuiw2uxpk6'; diff --git a/src/api/datasets/platforms/lazboy.ts b/src/api/datasets/platforms/lazboy.ts index 48b2aca..bcd3f24 100644 --- a/src/api/datasets/platforms/lazboy.ts +++ b/src/api/datasets/platforms/lazboy.ts @@ -1,4 +1,4 @@ -import { BaseDataset } from '../base'; +import { BaseDataset } from '../base.js'; export class LaZBoyProductsDataset extends BaseDataset { readonly datasetId = 'gd_lg0nhuxkvxagfannn'; diff --git a/src/api/datasets/platforms/lego.ts b/src/api/datasets/platforms/lego.ts index 70a68e9..c031044 100644 --- a/src/api/datasets/platforms/lego.ts +++ b/src/api/datasets/platforms/lego.ts @@ -1,4 +1,4 @@ -import { BaseDataset } from '../base'; +import { BaseDataset } from '../base.js'; export class LegoProductsDataset extends BaseDataset { readonly datasetId = 'gd_leenwt162rg85apy87'; diff --git a/src/api/datasets/platforms/linkedin.ts b/src/api/datasets/platforms/linkedin.ts index bbb7e51..0e4117f 100644 --- a/src/api/datasets/platforms/linkedin.ts +++ b/src/api/datasets/platforms/linkedin.ts @@ -1,4 +1,4 @@ -import { BaseDataset } from '../base'; +import { BaseDataset } from '../base.js'; export class LinkedinProfilesDataset extends BaseDataset { readonly datasetId = 'gd_l1viktl72bvl7bjuj0'; diff --git a/src/api/datasets/platforms/llbean.ts b/src/api/datasets/platforms/llbean.ts index 39d157c..65ea595 100644 --- a/src/api/datasets/platforms/llbean.ts +++ b/src/api/datasets/platforms/llbean.ts @@ -1,4 +1,4 @@ -import { BaseDataset } from '../base'; +import { BaseDataset } from '../base.js'; export class LlBeanProductsDataset extends BaseDataset { readonly datasetId = 'gd_lemtwv4s1mglzlzh57'; diff --git a/src/api/datasets/platforms/loewe.ts b/src/api/datasets/platforms/loewe.ts index 5630278..3040430 100644 --- a/src/api/datasets/platforms/loewe.ts +++ b/src/api/datasets/platforms/loewe.ts @@ -1,4 +1,4 @@ -import { BaseDataset } from '../base'; +import { BaseDataset } from '../base.js'; export class LoeweProductsDataset extends BaseDataset { readonly datasetId = 'gd_lh7rkj4wwka9q19t'; diff --git a/src/api/datasets/platforms/lowes.ts b/src/api/datasets/platforms/lowes.ts index 8cc16be..ec4f285 100644 --- a/src/api/datasets/platforms/lowes.ts +++ b/src/api/datasets/platforms/lowes.ts @@ -1,4 +1,4 @@ -import { BaseDataset } from '../base'; +import { BaseDataset } from '../base.js'; export class LowesProductsDataset extends BaseDataset { readonly datasetId = 'gd_lnvl79pfftqh18u2o'; diff --git a/src/api/datasets/platforms/macys.ts b/src/api/datasets/platforms/macys.ts index 50a80df..8381f8a 100644 --- a/src/api/datasets/platforms/macys.ts +++ b/src/api/datasets/platforms/macys.ts @@ -1,4 +1,4 @@ -import { BaseDataset } from '../base'; +import { BaseDataset } from '../base.js'; export class MacysProductsDataset extends BaseDataset { readonly datasetId = 'gd_miebqh4a18ivg65bpa'; diff --git a/src/api/datasets/platforms/mango.ts b/src/api/datasets/platforms/mango.ts index 7e4cfb2..d919bca 100644 --- a/src/api/datasets/platforms/mango.ts +++ b/src/api/datasets/platforms/mango.ts @@ -1,4 +1,4 @@ -import { BaseDataset } from '../base'; +import { BaseDataset } from '../base.js'; export class MangoProductsDataset extends BaseDataset { readonly datasetId = 'gd_lcyua5iy1go06own9d'; diff --git a/src/api/datasets/platforms/manta.ts b/src/api/datasets/platforms/manta.ts index c6b969e..b2e8051 100644 --- a/src/api/datasets/platforms/manta.ts +++ b/src/api/datasets/platforms/manta.ts @@ -1,4 +1,4 @@ -import { BaseDataset } from '../base'; +import { BaseDataset } from '../base.js'; export class MantaBusinessesDataset extends BaseDataset { readonly datasetId = 'gd_l1vil1d81g0u8763b2'; diff --git a/src/api/datasets/platforms/massimo_dutti.ts b/src/api/datasets/platforms/massimo_dutti.ts index 725e1fe..a127f4f 100644 --- a/src/api/datasets/platforms/massimo_dutti.ts +++ b/src/api/datasets/platforms/massimo_dutti.ts @@ -1,4 +1,4 @@ -import { BaseDataset } from '../base'; +import { BaseDataset } from '../base.js'; export class MassimoDuttiProductsDataset extends BaseDataset { readonly datasetId = 'gd_lcxf9r252p7e46ul5b'; diff --git a/src/api/datasets/platforms/mattress_firm.ts b/src/api/datasets/platforms/mattress_firm.ts index cc3f181..27449fb 100644 --- a/src/api/datasets/platforms/mattress_firm.ts +++ b/src/api/datasets/platforms/mattress_firm.ts @@ -1,4 +1,4 @@ -import { BaseDataset } from '../base'; +import { BaseDataset } from '../base.js'; export class MattressFirmProductsDataset extends BaseDataset { readonly datasetId = 'gd_legw5t6c2bvw9d7e4k'; diff --git a/src/api/datasets/platforms/mediamarkt.ts b/src/api/datasets/platforms/mediamarkt.ts index 64b630d..6b4b7d8 100644 --- a/src/api/datasets/platforms/mediamarkt.ts +++ b/src/api/datasets/platforms/mediamarkt.ts @@ -1,4 +1,4 @@ -import { BaseDataset } from '../base'; +import { BaseDataset } from '../base.js'; export class MediamarktProductsDataset extends BaseDataset { readonly datasetId = 'gd_lbl2lo6y11m37z3gwq'; diff --git a/src/api/datasets/platforms/mercadolivre.ts b/src/api/datasets/platforms/mercadolivre.ts index d169b1e..1f63096 100644 --- a/src/api/datasets/platforms/mercadolivre.ts +++ b/src/api/datasets/platforms/mercadolivre.ts @@ -1,4 +1,4 @@ -import { BaseDataset } from '../base'; +import { BaseDataset } from '../base.js'; export class MercadolivreProductsDataset extends BaseDataset { readonly datasetId = 'gd_m7re62tb1w88ymy86r'; diff --git a/src/api/datasets/platforms/metrocuadrado.ts b/src/api/datasets/platforms/metrocuadrado.ts index ba897eb..ce09be9 100644 --- a/src/api/datasets/platforms/metrocuadrado.ts +++ b/src/api/datasets/platforms/metrocuadrado.ts @@ -1,4 +1,4 @@ -import { BaseDataset } from '../base'; +import { BaseDataset } from '../base.js'; export class MetrocuadradoPropertiesDataset extends BaseDataset { readonly datasetId = 'gd_lfsblgpf2oq16yrbny'; diff --git a/src/api/datasets/platforms/microcenter.ts b/src/api/datasets/platforms/microcenter.ts index 5fc0b79..6a9b3ac 100644 --- a/src/api/datasets/platforms/microcenter.ts +++ b/src/api/datasets/platforms/microcenter.ts @@ -1,4 +1,4 @@ -import { BaseDataset } from '../base'; +import { BaseDataset } from '../base.js'; export class MicroCenterProductsDataset extends BaseDataset { readonly datasetId = 'gd_mkckexq2uquhupguv'; diff --git a/src/api/datasets/platforms/montblanc.ts b/src/api/datasets/platforms/montblanc.ts index f3af597..c4f6269 100644 --- a/src/api/datasets/platforms/montblanc.ts +++ b/src/api/datasets/platforms/montblanc.ts @@ -1,4 +1,4 @@ -import { BaseDataset } from '../base'; +import { BaseDataset } from '../base.js'; export class MontblancProductsDataset extends BaseDataset { readonly datasetId = 'gd_lhahz3n9dr6srx4cm'; diff --git a/src/api/datasets/platforms/mouser.ts b/src/api/datasets/platforms/mouser.ts index 1cbdf04..4bcc650 100644 --- a/src/api/datasets/platforms/mouser.ts +++ b/src/api/datasets/platforms/mouser.ts @@ -1,4 +1,4 @@ -import { BaseDataset } from '../base'; +import { BaseDataset } from '../base.js'; export class MouserProductsDataset extends BaseDataset { readonly datasetId = 'gd_lfjty8942ogxzhmp8t'; diff --git a/src/api/datasets/platforms/moynat.ts b/src/api/datasets/platforms/moynat.ts index 3b2b22b..62c32d8 100644 --- a/src/api/datasets/platforms/moynat.ts +++ b/src/api/datasets/platforms/moynat.ts @@ -1,4 +1,4 @@ -import { BaseDataset } from '../base'; +import { BaseDataset } from '../base.js'; export class MoynatProductsDataset extends BaseDataset { readonly datasetId = 'gd_lh7rh0d12qkaid87e1'; diff --git a/src/api/datasets/platforms/mybobs.ts b/src/api/datasets/platforms/mybobs.ts index bfaee9f..e2a644d 100644 --- a/src/api/datasets/platforms/mybobs.ts +++ b/src/api/datasets/platforms/mybobs.ts @@ -1,4 +1,4 @@ -import { BaseDataset } from '../base'; +import { BaseDataset } from '../base.js'; export class MybobsProductsDataset extends BaseDataset { readonly datasetId = 'gd_lf14k1zw1l3zcxs9m4'; diff --git a/src/api/datasets/platforms/myntra.ts b/src/api/datasets/platforms/myntra.ts index c677aba..0c08331 100644 --- a/src/api/datasets/platforms/myntra.ts +++ b/src/api/datasets/platforms/myntra.ts @@ -1,4 +1,4 @@ -import { BaseDataset } from '../base'; +import { BaseDataset } from '../base.js'; export class MyntraProductsDataset extends BaseDataset { readonly datasetId = 'gd_lptvxr8b1qx1d9thgp'; diff --git a/src/api/datasets/platforms/naver.ts b/src/api/datasets/platforms/naver.ts index ebad597..fa28dc0 100644 --- a/src/api/datasets/platforms/naver.ts +++ b/src/api/datasets/platforms/naver.ts @@ -1,4 +1,4 @@ -import { BaseDataset } from '../base'; +import { BaseDataset } from '../base.js'; export class NaverProductsDataset extends BaseDataset { readonly datasetId = 'gd_m9qqjxxr1hab7okefj'; diff --git a/src/api/datasets/platforms/nba.ts b/src/api/datasets/platforms/nba.ts index 05c1675..a48cfe1 100644 --- a/src/api/datasets/platforms/nba.ts +++ b/src/api/datasets/platforms/nba.ts @@ -1,4 +1,4 @@ -import { BaseDataset } from '../base'; +import { BaseDataset } from '../base.js'; export class NbaPlayersStatsDataset extends BaseDataset { readonly datasetId = 'gd_lrqirmftwxxatiorf'; diff --git a/src/api/datasets/platforms/olx.ts b/src/api/datasets/platforms/olx.ts index 4473223..2938f7c 100644 --- a/src/api/datasets/platforms/olx.ts +++ b/src/api/datasets/platforms/olx.ts @@ -1,4 +1,4 @@ -import { BaseDataset } from '../base'; +import { BaseDataset } from '../base.js'; export class OlxBrazilDataset extends BaseDataset { readonly datasetId = 'gd_lguvsr0wp4rx7fjfo'; diff --git a/src/api/datasets/platforms/otodom.ts b/src/api/datasets/platforms/otodom.ts index 895aeb9..fc1db93 100644 --- a/src/api/datasets/platforms/otodom.ts +++ b/src/api/datasets/platforms/otodom.ts @@ -1,4 +1,4 @@ -import { BaseDataset } from '../base'; +import { BaseDataset } from '../base.js'; export class OtodomPolandDataset extends BaseDataset { readonly datasetId = 'gd_ld739mwou49s5y9ko'; diff --git a/src/api/datasets/platforms/owler.ts b/src/api/datasets/platforms/owler.ts index 1cce1cc..f042f53 100644 --- a/src/api/datasets/platforms/owler.ts +++ b/src/api/datasets/platforms/owler.ts @@ -1,4 +1,4 @@ -import { BaseDataset } from '../base'; +import { BaseDataset } from '../base.js'; export class OwlerCompaniesDataset extends BaseDataset { readonly datasetId = 'gd_l1vilaxi10wutoage7'; diff --git a/src/api/datasets/platforms/ozon.ts b/src/api/datasets/platforms/ozon.ts index 2df02d9..9d66956 100644 --- a/src/api/datasets/platforms/ozon.ts +++ b/src/api/datasets/platforms/ozon.ts @@ -1,4 +1,4 @@ -import { BaseDataset } from '../base'; +import { BaseDataset } from '../base.js'; export class OzonProductsDataset extends BaseDataset { readonly datasetId = 'gd_lutq85sl13rlndbzai'; diff --git a/src/api/datasets/platforms/pinterest.ts b/src/api/datasets/platforms/pinterest.ts index 87927b7..c6eefee 100644 --- a/src/api/datasets/platforms/pinterest.ts +++ b/src/api/datasets/platforms/pinterest.ts @@ -1,4 +1,4 @@ -import { BaseDataset } from '../base'; +import { BaseDataset } from '../base.js'; export class PinterestPostsDataset extends BaseDataset { readonly datasetId = 'gd_lk0sjs4d21kdr7cnlv'; diff --git a/src/api/datasets/platforms/pitchbook.ts b/src/api/datasets/platforms/pitchbook.ts index 9ff8709..e43132f 100644 --- a/src/api/datasets/platforms/pitchbook.ts +++ b/src/api/datasets/platforms/pitchbook.ts @@ -1,4 +1,4 @@ -import { BaseDataset } from '../base'; +import { BaseDataset } from '../base.js'; export class PitchBookCompaniesDataset extends BaseDataset { readonly datasetId = 'gd_m4ijiqfp2n9oe3oluj'; diff --git a/src/api/datasets/platforms/prada.ts b/src/api/datasets/platforms/prada.ts index 81ae02d..fa64f45 100644 --- a/src/api/datasets/platforms/prada.ts +++ b/src/api/datasets/platforms/prada.ts @@ -1,4 +1,4 @@ -import { BaseDataset } from '../base'; +import { BaseDataset } from '../base.js'; export class PradaProductsDataset extends BaseDataset { readonly datasetId = 'gd_lhahqiq52egng5v35i'; diff --git a/src/api/datasets/platforms/properati.ts b/src/api/datasets/platforms/properati.ts index 35bf30c..64e5ed6 100644 --- a/src/api/datasets/platforms/properati.ts +++ b/src/api/datasets/platforms/properati.ts @@ -1,4 +1,4 @@ -import { BaseDataset } from '../base'; +import { BaseDataset } from '../base.js'; export class ProperatiPropertiesDataset extends BaseDataset { readonly datasetId = 'gd_lg3nvn6ibrhbotstw'; diff --git a/src/api/datasets/platforms/quora.ts b/src/api/datasets/platforms/quora.ts index 96a5ce9..78f0abf 100644 --- a/src/api/datasets/platforms/quora.ts +++ b/src/api/datasets/platforms/quora.ts @@ -1,4 +1,4 @@ -import { BaseDataset } from '../base'; +import { BaseDataset } from '../base.js'; export class QuoraPostsDataset extends BaseDataset { readonly datasetId = 'gd_lvz1rbj81afv3m6n5y'; diff --git a/src/api/datasets/platforms/raymour_flanigan.ts b/src/api/datasets/platforms/raymour_flanigan.ts index 919d4d8..5ba3fb6 100644 --- a/src/api/datasets/platforms/raymour_flanigan.ts +++ b/src/api/datasets/platforms/raymour_flanigan.ts @@ -1,4 +1,4 @@ -import { BaseDataset } from '../base'; +import { BaseDataset } from '../base.js'; export class RaymourFlaniganProductsDataset extends BaseDataset { readonly datasetId = 'gd_lf8cwb8wxoiqarizb'; diff --git a/src/api/datasets/platforms/realtor.ts b/src/api/datasets/platforms/realtor.ts index 8fe667a..6ed1ff1 100644 --- a/src/api/datasets/platforms/realtor.ts +++ b/src/api/datasets/platforms/realtor.ts @@ -1,4 +1,4 @@ -import { BaseDataset } from '../base'; +import { BaseDataset } from '../base.js'; export class RealtorInternationalDataset extends BaseDataset { readonly datasetId = 'gd_m517agnc1jppzwgtmw'; diff --git a/src/api/datasets/platforms/reddit.ts b/src/api/datasets/platforms/reddit.ts index 86c6b2e..62df992 100644 --- a/src/api/datasets/platforms/reddit.ts +++ b/src/api/datasets/platforms/reddit.ts @@ -1,4 +1,4 @@ -import { BaseDataset } from '../base'; +import { BaseDataset } from '../base.js'; export class RedditCommentsDataset extends BaseDataset { readonly datasetId = 'gd_lvzdpsdlw09j6t702'; diff --git a/src/api/datasets/platforms/rona.ts b/src/api/datasets/platforms/rona.ts index b7128f8..a5a2ace 100644 --- a/src/api/datasets/platforms/rona.ts +++ b/src/api/datasets/platforms/rona.ts @@ -1,4 +1,4 @@ -import { BaseDataset } from '../base'; +import { BaseDataset } from '../base.js'; export class RonaProductsDataset extends BaseDataset { readonly datasetId = 'gd_mf53alwg1a35fv69pw'; diff --git a/src/api/datasets/platforms/sephora.ts b/src/api/datasets/platforms/sephora.ts index 3e4baab..21e7eb6 100644 --- a/src/api/datasets/platforms/sephora.ts +++ b/src/api/datasets/platforms/sephora.ts @@ -1,4 +1,4 @@ -import { BaseDataset } from '../base'; +import { BaseDataset } from '../base.js'; export class SephoraProductsDataset extends BaseDataset { readonly datasetId = 'gd_lbz49igcthopwaygd'; diff --git a/src/api/datasets/platforms/shein.ts b/src/api/datasets/platforms/shein.ts index 2277239..bef4a28 100644 --- a/src/api/datasets/platforms/shein.ts +++ b/src/api/datasets/platforms/shein.ts @@ -1,4 +1,4 @@ -import { BaseDataset } from '../base'; +import { BaseDataset } from '../base.js'; export class SheinProductsDataset extends BaseDataset { readonly datasetId = 'gd_lemu5ceq1jxjo7vzit'; diff --git a/src/api/datasets/platforms/shopee.ts b/src/api/datasets/platforms/shopee.ts index 2b6bc96..9e106d3 100644 --- a/src/api/datasets/platforms/shopee.ts +++ b/src/api/datasets/platforms/shopee.ts @@ -1,4 +1,4 @@ -import { BaseDataset } from '../base'; +import { BaseDataset } from '../base.js'; export class ShopeeProductsDataset extends BaseDataset { readonly datasetId = 'gd_lk122xxgf86xf97py'; diff --git a/src/api/datasets/platforms/sleep_number.ts b/src/api/datasets/platforms/sleep_number.ts index 59fb548..7cf6998 100644 --- a/src/api/datasets/platforms/sleep_number.ts +++ b/src/api/datasets/platforms/sleep_number.ts @@ -1,4 +1,4 @@ -import { BaseDataset } from '../base'; +import { BaseDataset } from '../base.js'; export class SleepNumberProductsDataset extends BaseDataset { readonly datasetId = 'gd_lf8ctgxj1dpkzvl862'; diff --git a/src/api/datasets/platforms/slintel.ts b/src/api/datasets/platforms/slintel.ts index f93247a..5690f52 100644 --- a/src/api/datasets/platforms/slintel.ts +++ b/src/api/datasets/platforms/slintel.ts @@ -1,4 +1,4 @@ -import { BaseDataset } from '../base'; +import { BaseDataset } from '../base.js'; export class SlintelCompaniesDataset extends BaseDataset { readonly datasetId = 'gd_l1vilg5a1decoahvgq'; diff --git a/src/api/datasets/platforms/snapchat.ts b/src/api/datasets/platforms/snapchat.ts index 101528c..d326d5e 100644 --- a/src/api/datasets/platforms/snapchat.ts +++ b/src/api/datasets/platforms/snapchat.ts @@ -1,4 +1,4 @@ -import { BaseDataset } from '../base'; +import { BaseDataset } from '../base.js'; export class SnapchatPostsDataset extends BaseDataset { readonly datasetId = 'gd_ma0ydx431w6stl16ge'; diff --git a/src/api/datasets/platforms/target.ts b/src/api/datasets/platforms/target.ts index dd28a0f..33ca455 100644 --- a/src/api/datasets/platforms/target.ts +++ b/src/api/datasets/platforms/target.ts @@ -1,4 +1,4 @@ -import { BaseDataset } from '../base'; +import { BaseDataset } from '../base.js'; export class TargetProductsDataset extends BaseDataset { readonly datasetId = 'gd_ltppk5mx2lp0v1k0vo'; diff --git a/src/api/datasets/platforms/tiktok.ts b/src/api/datasets/platforms/tiktok.ts index a782269..c585005 100644 --- a/src/api/datasets/platforms/tiktok.ts +++ b/src/api/datasets/platforms/tiktok.ts @@ -1,4 +1,4 @@ -import { BaseDataset } from '../base'; +import { BaseDataset } from '../base.js'; export class TiktokProfilesDataset extends BaseDataset { readonly datasetId = 'gd_l1villgoiiidt09ci'; diff --git a/src/api/datasets/platforms/toctoc.ts b/src/api/datasets/platforms/toctoc.ts index c4dc3dc..f8fa932 100644 --- a/src/api/datasets/platforms/toctoc.ts +++ b/src/api/datasets/platforms/toctoc.ts @@ -1,4 +1,4 @@ -import { BaseDataset } from '../base'; +import { BaseDataset } from '../base.js'; export class ToctocPropertiesDataset extends BaseDataset { readonly datasetId = 'gd_lgfdx3l01behlrboh7'; diff --git a/src/api/datasets/platforms/tokopedia.ts b/src/api/datasets/platforms/tokopedia.ts index 08cbefb..14d8f4e 100644 --- a/src/api/datasets/platforms/tokopedia.ts +++ b/src/api/datasets/platforms/tokopedia.ts @@ -1,4 +1,4 @@ -import { BaseDataset } from '../base'; +import { BaseDataset } from '../base.js'; export class TokopediaProductsDataset extends BaseDataset { readonly datasetId = 'gd_lxk24yba297r8qd3tp'; diff --git a/src/api/datasets/platforms/toysrus.ts b/src/api/datasets/platforms/toysrus.ts index 811b639..bd8951b 100644 --- a/src/api/datasets/platforms/toysrus.ts +++ b/src/api/datasets/platforms/toysrus.ts @@ -1,4 +1,4 @@ -import { BaseDataset } from '../base'; +import { BaseDataset } from '../base.js'; export class ToysRUsProductsDataset extends BaseDataset { readonly datasetId = 'gd_lemuapao1lkjggvn05'; diff --git a/src/api/datasets/platforms/trustpilot.ts b/src/api/datasets/platforms/trustpilot.ts index a7c52b5..7a9eb79 100644 --- a/src/api/datasets/platforms/trustpilot.ts +++ b/src/api/datasets/platforms/trustpilot.ts @@ -1,4 +1,4 @@ -import { BaseDataset } from '../base'; +import { BaseDataset } from '../base.js'; export class TrustpilotReviewsDataset extends BaseDataset { readonly datasetId = 'gd_lm5zmhwd2sni130p'; diff --git a/src/api/datasets/platforms/trustradius.ts b/src/api/datasets/platforms/trustradius.ts index a7597e8..eef8777 100644 --- a/src/api/datasets/platforms/trustradius.ts +++ b/src/api/datasets/platforms/trustradius.ts @@ -1,4 +1,4 @@ -import { BaseDataset } from '../base'; +import { BaseDataset } from '../base.js'; export class TrustRadiusReviewsDataset extends BaseDataset { readonly datasetId = 'gd_lztojazw1389985ops'; diff --git a/src/api/datasets/platforms/us_lawyers.ts b/src/api/datasets/platforms/us_lawyers.ts index 8f78fcf..d9e07f2 100644 --- a/src/api/datasets/platforms/us_lawyers.ts +++ b/src/api/datasets/platforms/us_lawyers.ts @@ -1,4 +1,4 @@ -import { BaseDataset } from '../base'; +import { BaseDataset } from '../base.js'; export class UsLawyersDataset extends BaseDataset { readonly datasetId = 'gd_l1vil5n11okchcbvax'; diff --git a/src/api/datasets/platforms/ventureradar.ts b/src/api/datasets/platforms/ventureradar.ts index 59c580c..f60cd8e 100644 --- a/src/api/datasets/platforms/ventureradar.ts +++ b/src/api/datasets/platforms/ventureradar.ts @@ -1,4 +1,4 @@ -import { BaseDataset } from '../base'; +import { BaseDataset } from '../base.js'; export class VentureRadarCompaniesDataset extends BaseDataset { readonly datasetId = 'gd_l1vilsfd1xpsndbtpr'; diff --git a/src/api/datasets/platforms/vimeo.ts b/src/api/datasets/platforms/vimeo.ts index edd8a16..360cf64 100644 --- a/src/api/datasets/platforms/vimeo.ts +++ b/src/api/datasets/platforms/vimeo.ts @@ -1,4 +1,4 @@ -import { BaseDataset } from '../base'; +import { BaseDataset } from '../base.js'; export class VimeoVideosDataset extends BaseDataset { readonly datasetId = 'gd_lxk88z3v1ketji4pn'; diff --git a/src/api/datasets/platforms/walmart.ts b/src/api/datasets/platforms/walmart.ts index f02b90d..9eb3415 100644 --- a/src/api/datasets/platforms/walmart.ts +++ b/src/api/datasets/platforms/walmart.ts @@ -1,4 +1,4 @@ -import { BaseDataset } from '../base'; +import { BaseDataset } from '../base.js'; export class WalmartProductsDataset extends BaseDataset { readonly datasetId = 'gd_l95fol7l1ru6rlo116'; diff --git a/src/api/datasets/platforms/wayfair.ts b/src/api/datasets/platforms/wayfair.ts index a4391fe..575ef10 100644 --- a/src/api/datasets/platforms/wayfair.ts +++ b/src/api/datasets/platforms/wayfair.ts @@ -1,4 +1,4 @@ -import { BaseDataset } from '../base'; +import { BaseDataset } from '../base.js'; export class WayfairProductsDataset extends BaseDataset { readonly datasetId = 'gd_ltr9ne3p24zrhrbu28'; diff --git a/src/api/datasets/platforms/webmotors.ts b/src/api/datasets/platforms/webmotors.ts index 25bf5aa..6ac826c 100644 --- a/src/api/datasets/platforms/webmotors.ts +++ b/src/api/datasets/platforms/webmotors.ts @@ -1,4 +1,4 @@ -import { BaseDataset } from '../base'; +import { BaseDataset } from '../base.js'; export class WebmotorsBrasilDataset extends BaseDataset { readonly datasetId = 'gd_ld73zt91j10sphddj'; diff --git a/src/api/datasets/platforms/wikipedia.ts b/src/api/datasets/platforms/wikipedia.ts index 4f29d31..2478d33 100644 --- a/src/api/datasets/platforms/wikipedia.ts +++ b/src/api/datasets/platforms/wikipedia.ts @@ -1,4 +1,4 @@ -import { BaseDataset } from '../base'; +import { BaseDataset } from '../base.js'; export class WikipediaArticlesDataset extends BaseDataset { readonly datasetId = 'gd_lr9978962kkjr3nx49'; diff --git a/src/api/datasets/platforms/wildberries.ts b/src/api/datasets/platforms/wildberries.ts index 5bc7d5a..023e98d 100644 --- a/src/api/datasets/platforms/wildberries.ts +++ b/src/api/datasets/platforms/wildberries.ts @@ -1,4 +1,4 @@ -import { BaseDataset } from '../base'; +import { BaseDataset } from '../base.js'; export class WildberriesProductsDataset extends BaseDataset { readonly datasetId = 'gd_luz4fboh2dicd27hhm'; diff --git a/src/api/datasets/platforms/world_data.ts b/src/api/datasets/platforms/world_data.ts index 69a0307..c2754d7 100644 --- a/src/api/datasets/platforms/world_data.ts +++ b/src/api/datasets/platforms/world_data.ts @@ -1,4 +1,4 @@ -import { BaseDataset } from '../base'; +import { BaseDataset } from '../base.js'; export class WorldPopulationDataset extends BaseDataset { readonly datasetId = 'gd_lrqeq7u3bil0pmelk'; diff --git a/src/api/datasets/platforms/x_twitter.ts b/src/api/datasets/platforms/x_twitter.ts index cb1737d..3e2c720 100644 --- a/src/api/datasets/platforms/x_twitter.ts +++ b/src/api/datasets/platforms/x_twitter.ts @@ -1,4 +1,4 @@ -import { BaseDataset } from '../base'; +import { BaseDataset } from '../base.js'; export class XTwitterPostsDataset extends BaseDataset { readonly datasetId = 'gd_lwxkxvnf1cynvib9co'; diff --git a/src/api/datasets/platforms/xing.ts b/src/api/datasets/platforms/xing.ts index 9d61ff7..93c555a 100644 --- a/src/api/datasets/platforms/xing.ts +++ b/src/api/datasets/platforms/xing.ts @@ -1,4 +1,4 @@ -import { BaseDataset } from '../base'; +import { BaseDataset } from '../base.js'; export class XingProfilesDataset extends BaseDataset { readonly datasetId = 'gd_l3lh4ev31oqrvvblv6'; diff --git a/src/api/datasets/platforms/yahoo_finance.ts b/src/api/datasets/platforms/yahoo_finance.ts index 8fc55de..0f7ab3d 100644 --- a/src/api/datasets/platforms/yahoo_finance.ts +++ b/src/api/datasets/platforms/yahoo_finance.ts @@ -1,4 +1,4 @@ -import { BaseDataset } from '../base'; +import { BaseDataset } from '../base.js'; export class YahooFinanceBusinessesDataset extends BaseDataset { readonly datasetId = 'gd_lmrpz3vxmz972ghd7'; diff --git a/src/api/datasets/platforms/yapo.ts b/src/api/datasets/platforms/yapo.ts index 417f132..c11e27a 100644 --- a/src/api/datasets/platforms/yapo.ts +++ b/src/api/datasets/platforms/yapo.ts @@ -1,4 +1,4 @@ -import { BaseDataset } from '../base'; +import { BaseDataset } from '../base.js'; export class YapoChileDataset extends BaseDataset { readonly datasetId = 'gd_lgfcz12mk6og7lvhs'; diff --git a/src/api/datasets/platforms/yelp.ts b/src/api/datasets/platforms/yelp.ts index f67ffd9..c9cb626 100644 --- a/src/api/datasets/platforms/yelp.ts +++ b/src/api/datasets/platforms/yelp.ts @@ -1,4 +1,4 @@ -import { BaseDataset } from '../base'; +import { BaseDataset } from '../base.js'; export class YelpBusinessesDataset extends BaseDataset { readonly datasetId = 'gd_lgugwl0519h1p14rwk'; diff --git a/src/api/datasets/platforms/youtube.ts b/src/api/datasets/platforms/youtube.ts index 1aa5636..410b637 100644 --- a/src/api/datasets/platforms/youtube.ts +++ b/src/api/datasets/platforms/youtube.ts @@ -1,4 +1,4 @@ -import { BaseDataset } from '../base'; +import { BaseDataset } from '../base.js'; export class YoutubeCommentsDataset extends BaseDataset { readonly datasetId = 'gd_lk9q0ew71spt1mxywf'; diff --git a/src/api/datasets/platforms/ysl.ts b/src/api/datasets/platforms/ysl.ts index 8c6464f..fd86abc 100644 --- a/src/api/datasets/platforms/ysl.ts +++ b/src/api/datasets/platforms/ysl.ts @@ -1,4 +1,4 @@ -import { BaseDataset } from '../base'; +import { BaseDataset } from '../base.js'; export class YslProductsDataset extends BaseDataset { readonly datasetId = 'gd_lhai2io04wilkad5z'; diff --git a/src/api/datasets/platforms/zalando.ts b/src/api/datasets/platforms/zalando.ts index b17e8f6..61331d5 100644 --- a/src/api/datasets/platforms/zalando.ts +++ b/src/api/datasets/platforms/zalando.ts @@ -1,4 +1,4 @@ -import { BaseDataset } from '../base'; +import { BaseDataset } from '../base.js'; export class ZalandoProductsDataset extends BaseDataset { readonly datasetId = 'gd_lbqj6l5s28ofha6mlk'; diff --git a/src/api/datasets/platforms/zara.ts b/src/api/datasets/platforms/zara.ts index 906b954..db1883a 100644 --- a/src/api/datasets/platforms/zara.ts +++ b/src/api/datasets/platforms/zara.ts @@ -1,4 +1,4 @@ -import { BaseDataset } from '../base'; +import { BaseDataset } from '../base.js'; export class ZaraProductsDataset extends BaseDataset { readonly datasetId = 'gd_lct4vafw1tgx27d4o0'; diff --git a/src/api/datasets/platforms/zillow.ts b/src/api/datasets/platforms/zillow.ts index fc3d21b..e06bd39 100644 --- a/src/api/datasets/platforms/zillow.ts +++ b/src/api/datasets/platforms/zillow.ts @@ -1,4 +1,4 @@ -import { BaseDataset } from '../base'; +import { BaseDataset } from '../base.js'; export class ZillowPriceHistoryDataset extends BaseDataset { readonly datasetId = 'gd_lxu1cz9r88uiqsosl'; diff --git a/src/api/datasets/platforms/zonaprop.ts b/src/api/datasets/platforms/zonaprop.ts index 63b674c..3402e51 100644 --- a/src/api/datasets/platforms/zonaprop.ts +++ b/src/api/datasets/platforms/zonaprop.ts @@ -1,4 +1,4 @@ -import { BaseDataset } from '../base'; +import { BaseDataset } from '../base.js'; export class ZonapropArgentinaDataset extends BaseDataset { readonly datasetId = 'gd_lfsbhfgo2bglgrecm6'; diff --git a/src/api/datasets/platforms/zoominfo.ts b/src/api/datasets/platforms/zoominfo.ts index fc2e823..b94a168 100644 --- a/src/api/datasets/platforms/zoominfo.ts +++ b/src/api/datasets/platforms/zoominfo.ts @@ -1,4 +1,4 @@ -import { BaseDataset } from '../base'; +import { BaseDataset } from '../base.js'; export class ZoomInfoCompaniesDataset extends BaseDataset { readonly datasetId = 'gd_m0ci4a4ivx3j5l6nx'; diff --git a/src/api/datasets/platforms/zoopla.ts b/src/api/datasets/platforms/zoopla.ts index 7a45d54..1a1cf56 100644 --- a/src/api/datasets/platforms/zoopla.ts +++ b/src/api/datasets/platforms/zoopla.ts @@ -1,4 +1,4 @@ -import { BaseDataset } from '../base'; +import { BaseDataset } from '../base.js'; export class ZooplaPropertiesDataset extends BaseDataset { readonly datasetId = 'gd_lnabksndfp1pegwzh'; diff --git a/src/api/discover/index.ts b/src/api/discover/index.ts index b1def2b..da9cc3e 100644 --- a/src/api/discover/index.ts +++ b/src/api/discover/index.ts @@ -1,5 +1,5 @@ -export { DiscoverService } from './service'; -export { DiscoverResult } from './result'; -export { DiscoverJob } from './job'; -export type { DiscoverResultItem, DiscoverResultFields } from './result'; -export type { DiscoverPollOptions } from './job'; +export { DiscoverService } from './service.js'; +export { DiscoverResult } from './result.js'; +export { DiscoverJob } from './job.js'; +export type { DiscoverResultItem, DiscoverResultFields } from './result.js'; +export type { DiscoverPollOptions } from './job.js'; diff --git a/src/api/discover/job.ts b/src/api/discover/job.ts index fc53036..9fe473e 100644 --- a/src/api/discover/job.ts +++ b/src/api/discover/job.ts @@ -1,9 +1,9 @@ -import { getLogger } from '../../utils/logger'; -import { sleep } from '../../utils/misc'; -import { TimeoutError, APIError } from '../../utils/errors'; -import { Deadline } from '../../utils/deadline'; -import { DiscoverResult, type DiscoverResultItem } from './result'; -import type { DiscoverOperations } from '../../types/discover'; +import { getLogger } from '../../utils/logger.js'; +import { sleep } from '../../utils/misc.js'; +import { TimeoutError, APIError } from '../../utils/errors.js'; +import { Deadline } from '../../utils/deadline.js'; +import { DiscoverResult, type DiscoverResultItem } from './result.js'; +import type { DiscoverOperations } from '../../types/discover.js'; const logger = getLogger('discover.job'); diff --git a/src/api/discover/result.ts b/src/api/discover/result.ts index 6ca1a37..7980adb 100644 --- a/src/api/discover/result.ts +++ b/src/api/discover/result.ts @@ -1,4 +1,4 @@ -import { BaseResult, type BaseResultFields } from '../../models/result'; +import { BaseResult, type BaseResultFields } from '../../models/result.js'; export interface DiscoverResultItem { link: string; diff --git a/src/api/discover/service.ts b/src/api/discover/service.ts index 8c65000..2be2ad2 100644 --- a/src/api/discover/service.ts +++ b/src/api/discover/service.ts @@ -1,18 +1,18 @@ import type { z } from 'zod'; -import { Transport, assertResponse } from '../../core/transport'; -import { API_ENDPOINT } from '../../utils/constants'; -import { parseResponse } from '../../utils/misc'; -import { getLogger } from '../../utils/logger'; -import { assertSchema } from '../../schemas/utils'; +import { Transport, assertResponse } from '../../core/transport.js'; +import { API_ENDPOINT } from '../../utils/constants.js'; +import { parseResponse } from '../../utils/misc.js'; +import { getLogger } from '../../utils/logger.js'; +import { assertSchema } from '../../schemas/utils.js'; import { DiscoverOptionsSchema, DiscoverQuerySchema, DiscoverTriggerResponseSchema, DiscoverPollResponseSchema, type DiscoverOptions, -} from '../../schemas/discover'; -import { DiscoverJob } from './job'; -import type { DiscoverResult } from './result'; +} from '../../schemas/discover.js'; +import { DiscoverJob } from './job.js'; +import type { DiscoverResult } from './result.js'; const logger = getLogger('discover'); diff --git a/src/api/scrape/amazon.ts b/src/api/scrape/amazon.ts index d322874..e592c9c 100644 --- a/src/api/scrape/amazon.ts +++ b/src/api/scrape/amazon.ts @@ -10,11 +10,11 @@ import type { AmazonDiscoverProductsByCategoryURLFilter, AmazonDiscoverProductsByKeywordFilter, AmazonDiscoverProductsByUPCFilter, -} from '../../types/datasets'; +} from '../../types/datasets.js'; import { DatasetOptionsSchema, DatasetMixedInputSchema, -} from '../../schemas/datasets'; +} from '../../schemas/datasets.js'; import { AmazonCollectProductsFilterSchema, AmazonCollectReviewsFilterSchema, @@ -23,9 +23,9 @@ import { AmazonDiscoverProductsByCategoryURLFilterSchema, AmazonDiscoverProductsByKeywordFilterSchema, AmazonDiscoverProductsByUPCFilterSchema, -} from '../../schemas/filters/amazon'; -import { assertSchema } from '../../schemas/utils'; -import { BaseAPI, type BaseAPIOptions } from './base'; +} from '../../schemas/filters/amazon.js'; +import { assertSchema } from '../../schemas/utils.js'; +import { BaseAPI, type BaseAPIOptions } from './base.js'; const DATASET_ID = { PRODUCT: 'gd_l7q7dkf244hwjntr0', diff --git a/src/api/scrape/base.ts b/src/api/scrape/base.ts index b3c2127..a1256a4 100644 --- a/src/api/scrape/base.ts +++ b/src/api/scrape/base.ts @@ -1,17 +1,17 @@ -import { API_ENDPOINT } from '../../utils/constants'; -import { getLogger } from '../../utils/logger'; -import { Transport, assertResponse } from '../../core/transport'; -import { dropEmptyKeys, parseJSON, parseResponse } from '../../utils/misc'; -import { SnapshotMetaResponseSchema } from '../../schemas/responses'; -import { ScrapeJob } from './job'; +import { API_ENDPOINT } from '../../utils/constants.js'; +import { getLogger } from '../../utils/logger.js'; +import { Transport, assertResponse } from '../../core/transport.js'; +import { dropEmptyKeys, parseJSON, parseResponse } from '../../utils/misc.js'; +import { SnapshotMetaResponseSchema } from '../../schemas/responses.js'; +import { ScrapeJob } from './job.js'; import type { DatasetOptions, OrchestrateOptions, UnknownRecord, SnapshotFormat, SnapshotOperations, -} from '../../types/datasets'; -import type { ScrapeResult } from '../../models/result'; +} from '../../types/datasets.js'; +import type { ScrapeResult } from '../../models/result.js'; interface WebhookDisabled { notify: undefined; diff --git a/src/api/scrape/chatgpt.ts b/src/api/scrape/chatgpt.ts index dbbde55..7e280a8 100644 --- a/src/api/scrape/chatgpt.ts +++ b/src/api/scrape/chatgpt.ts @@ -2,14 +2,14 @@ import type { DatasetOptions, OrchestrateOptions, ChatgptFilter, -} from '../../types/datasets'; +} from '../../types/datasets.js'; import { DatasetOptionsSchema, ChatGPTInputSchema, -} from '../../schemas/datasets'; -import { ChatgptFilterSchema } from '../../schemas/filters/chatgpt'; -import { assertSchema } from '../../schemas/utils'; -import { BaseAPI, type BaseAPIOptions } from './base'; +} from '../../schemas/datasets.js'; +import { ChatgptFilterSchema } from '../../schemas/filters/chatgpt.js'; +import { assertSchema } from '../../schemas/utils.js'; +import { BaseAPI, type BaseAPIOptions } from './base.js'; const DATASET_ID = { CHATGPT: 'gd_m7aof0k82r803d5bjm', diff --git a/src/api/scrape/digikey.ts b/src/api/scrape/digikey.ts index 7f45dc1..6fe3de1 100644 --- a/src/api/scrape/digikey.ts +++ b/src/api/scrape/digikey.ts @@ -3,13 +3,13 @@ import type { DiscoverOptions, OrchestrateOptions, UnknownRecord, -} from '../../types/datasets'; +} from '../../types/datasets.js'; import { DatasetOptionsSchema, DatasetMixedInputSchema, -} from '../../schemas/datasets'; -import { assertSchema } from '../../schemas/utils'; -import { BaseAPI, type BaseAPIOptions } from './base'; +} from '../../schemas/datasets.js'; +import { assertSchema } from '../../schemas/utils.js'; +import { BaseAPI, type BaseAPIOptions } from './base.js'; const DATASET_ID = { PRODUCT: 'gd_lj74waf72416ro0k65', diff --git a/src/api/scrape/facebook.ts b/src/api/scrape/facebook.ts index c308fc8..37c9a61 100644 --- a/src/api/scrape/facebook.ts +++ b/src/api/scrape/facebook.ts @@ -13,11 +13,11 @@ import type { FacebookDiscoverMarketplaceItemsByURLFilter, FacebookDiscoverEventsByURLFilter, FacebookDiscoverEventsByVenueFilter, -} from '../../types/datasets'; +} from '../../types/datasets.js'; import { DatasetOptionsSchema, DatasetMixedInputSchema, -} from '../../schemas/datasets'; +} from '../../schemas/datasets.js'; import { FacebookCollectUserPostsFilterSchema, FacebookCollectGroupPostsFilterSchema, @@ -28,10 +28,10 @@ import { FacebookDiscoverMarketplaceItemsByURLFilterSchema, FacebookDiscoverEventsByURLFilterSchema, FacebookDiscoverEventsByVenueFilterSchema, -} from '../../schemas/filters/facebook'; -import { InstagramDiscoverReelsByProfileURLFilterSchema } from '../../schemas/filters/instagram'; -import { assertSchema } from '../../schemas/utils'; -import { BaseAPI, type BaseAPIOptions } from './base'; +} from '../../schemas/filters/facebook.js'; +import { InstagramDiscoverReelsByProfileURLFilterSchema } from '../../schemas/filters/instagram.js'; +import { assertSchema } from '../../schemas/utils.js'; +import { BaseAPI, type BaseAPIOptions } from './base.js'; const DATASET_ID = { POSTS_USER: 'gd_lkaxegm826bjpoo9m5', diff --git a/src/api/scrape/instagram.ts b/src/api/scrape/instagram.ts index 4462023..2da68fa 100644 --- a/src/api/scrape/instagram.ts +++ b/src/api/scrape/instagram.ts @@ -5,17 +5,17 @@ import type { UnknownRecord, InstagramDiscoverPostsByProfileURLFilter, InstagramDiscoverReelsByProfileURLFilter, -} from '../../types/datasets'; +} from '../../types/datasets.js'; import { DatasetOptionsSchema, DatasetMixedInputSchema, -} from '../../schemas/datasets'; +} from '../../schemas/datasets.js'; import { InstagramDiscoverPostsByProfileURLFilterSchema, InstagramDiscoverReelsByProfileURLFilterSchema, -} from '../../schemas/filters/instagram'; -import { assertSchema } from '../../schemas/utils'; -import { BaseAPI, type BaseAPIOptions } from './base'; +} from '../../schemas/filters/instagram.js'; +import { assertSchema } from '../../schemas/utils.js'; +import { BaseAPI, type BaseAPIOptions } from './base.js'; const DATASET_ID = { PROFILE: 'gd_l1vikfch901nx3by4', diff --git a/src/api/scrape/job.ts b/src/api/scrape/job.ts index 926c043..3752849 100644 --- a/src/api/scrape/job.ts +++ b/src/api/scrape/job.ts @@ -1,16 +1,16 @@ -import { pollUntilReady, type PollOptions } from '../../utils/polling'; -import { DataNotReadyError, TimeoutError } from '../../utils/errors'; -import { sleep } from '../../utils/misc'; -import { getLogger } from '../../utils/logger'; +import { pollUntilReady, type PollOptions } from '../../utils/polling.js'; +import { DataNotReadyError, TimeoutError } from '../../utils/errors.js'; +import { sleep } from '../../utils/misc.js'; +import { getLogger } from '../../utils/logger.js'; const logger = getLogger('scrape.job'); -import { ScrapeResult } from '../../models/result'; -import { Deadline } from '../../utils/deadline'; +import { ScrapeResult } from '../../models/result.js'; +import { Deadline } from '../../utils/deadline.js'; import type { SnapshotOperations, SnapshotFetchOptions, SnapshotDownloadOptions, -} from '../../types/datasets'; +} from '../../types/datasets.js'; export class ScrapeJob { readonly snapshotId: string; diff --git a/src/api/scrape/linkedin.ts b/src/api/scrape/linkedin.ts index a01cb98..b5ce2bb 100644 --- a/src/api/scrape/linkedin.ts +++ b/src/api/scrape/linkedin.ts @@ -6,17 +6,17 @@ import type { UrlFilter, LinkedinJobFilter, LinkedinProfileFilter, -} from '../../types/datasets'; +} from '../../types/datasets.js'; import { DatasetOptionsSchema, DatasetMixedInputSchema, -} from '../../schemas/datasets'; +} from '../../schemas/datasets.js'; import { LinkedinProfileFilterSchema, LinkedinJobFilterSchema, -} from '../../schemas/filters/linkedin'; -import { assertSchema } from '../../schemas/utils'; -import { BaseAPI, type BaseAPIOptions } from './base'; +} from '../../schemas/filters/linkedin.js'; +import { assertSchema } from '../../schemas/utils.js'; +import { BaseAPI, type BaseAPIOptions } from './base.js'; const DATASET_ID = { PROFILE: 'gd_l1viktl72bvl7bjuj0', diff --git a/src/api/scrape/perplexity.ts b/src/api/scrape/perplexity.ts index 585c9e4..aa7db99 100644 --- a/src/api/scrape/perplexity.ts +++ b/src/api/scrape/perplexity.ts @@ -2,13 +2,13 @@ import type { DatasetOptions, OrchestrateOptions, UnknownRecord, -} from '../../types/datasets'; +} from '../../types/datasets.js'; import { DatasetOptionsSchema, DatasetMixedInputSchema, -} from '../../schemas/datasets'; -import { assertSchema } from '../../schemas/utils'; -import { BaseAPI, type BaseAPIOptions } from './base'; +} from '../../schemas/datasets.js'; +import { assertSchema } from '../../schemas/utils.js'; +import { BaseAPI, type BaseAPIOptions } from './base.js'; const DATASET_ID = { SEARCH: 'gd_m7dhdot1vw9a7gc1n', diff --git a/src/api/scrape/pinterest.ts b/src/api/scrape/pinterest.ts index 97ec4a5..b0d1ab9 100644 --- a/src/api/scrape/pinterest.ts +++ b/src/api/scrape/pinterest.ts @@ -2,13 +2,13 @@ import type { DatasetOptions, OrchestrateOptions, UnknownRecord, -} from '../../types/datasets'; +} from '../../types/datasets.js'; import { DatasetOptionsSchema, DatasetMixedInputSchema, -} from '../../schemas/datasets'; -import { assertSchema } from '../../schemas/utils'; -import { BaseAPI, type BaseAPIOptions } from './base'; +} from '../../schemas/datasets.js'; +import { assertSchema } from '../../schemas/utils.js'; +import { BaseAPI, type BaseAPIOptions } from './base.js'; const DATASET_ID = { POST: 'gd_lk0sjs4d21kdr7cnlv', diff --git a/src/api/scrape/reddit.ts b/src/api/scrape/reddit.ts index e79a14f..d9f4856 100644 --- a/src/api/scrape/reddit.ts +++ b/src/api/scrape/reddit.ts @@ -2,13 +2,13 @@ import type { DatasetOptions, OrchestrateOptions, UnknownRecord, -} from '../../types/datasets'; +} from '../../types/datasets.js'; import { DatasetOptionsSchema, DatasetMixedInputSchema, -} from '../../schemas/datasets'; -import { assertSchema } from '../../schemas/utils'; -import { BaseAPI, type BaseAPIOptions } from './base'; +} from '../../schemas/datasets.js'; +import { assertSchema } from '../../schemas/utils.js'; +import { BaseAPI, type BaseAPIOptions } from './base.js'; const DATASET_ID = { POST: 'gd_lvz8ah06191smkebj4', diff --git a/src/api/scrape/router.ts b/src/api/scrape/router.ts index 7ea12cf..36002db 100644 --- a/src/api/scrape/router.ts +++ b/src/api/scrape/router.ts @@ -1,16 +1,16 @@ -import { LinkedinAPI } from './linkedin'; -import { SnapshotAPI } from './snapshot'; -import { ChatgptAPI } from './chatgpt'; -import { AmazonAPI } from './amazon'; -import { BaseAPIOptions } from './base'; -import { InstagramAPI } from './instagram'; -import { FacebookAPI } from './facebook'; -import { PerplexityAPI } from './perplexity'; -import { TiktokAPI } from './tiktok'; -import { YoutubeAPI } from './youtube'; -import { DigikeyAPI } from './digikey'; -import { PinterestAPI } from './pinterest'; -import { RedditAPI } from './reddit'; +import { LinkedinAPI } from './linkedin.js'; +import { SnapshotAPI } from './snapshot.js'; +import { ChatgptAPI } from './chatgpt.js'; +import { AmazonAPI } from './amazon.js'; +import { BaseAPIOptions } from './base.js'; +import { InstagramAPI } from './instagram.js'; +import { FacebookAPI } from './facebook.js'; +import { PerplexityAPI } from './perplexity.js'; +import { TiktokAPI } from './tiktok.js'; +import { YoutubeAPI } from './youtube.js'; +import { DigikeyAPI } from './digikey.js'; +import { PinterestAPI } from './pinterest.js'; +import { RedditAPI } from './reddit.js'; export class ScrapeRouter { snapshot: SnapshotAPI; diff --git a/src/api/scrape/snapshot.ts b/src/api/scrape/snapshot.ts index 962759e..077c69d 100644 --- a/src/api/scrape/snapshot.ts +++ b/src/api/scrape/snapshot.ts @@ -1,24 +1,24 @@ import type { Dispatcher } from 'undici'; -import { API_ENDPOINT } from '../../utils/constants'; -import { DataNotReadyError } from '../../utils/errors'; -import { assertResponse, throwInvalidStatus } from '../../core/transport'; +import { API_ENDPOINT } from '../../utils/constants.js'; +import { DataNotReadyError } from '../../utils/errors.js'; +import { assertResponse, throwInvalidStatus } from '../../core/transport.js'; import { routeDownloadStream, getFilename, getAbsAndEnsureDir, -} from '../../utils/files'; -import { parseJSON, parseResponse } from '../../utils/misc'; -import { pollUntilReady } from '../../utils/polling'; +} from '../../utils/files.js'; +import { parseJSON, parseResponse } from '../../utils/misc.js'; +import { pollUntilReady } from '../../utils/polling.js'; import type { z } from 'zod'; import { SnapshotIdSchema, SnapshotDownloadOptionsSchema, SnapshotFetchOptionsSchema, -} from '../../schemas/datasets'; -import type { SnapshotDownloadOptions, SnapshotFetchOptions } from '../../schemas/datasets'; -import { assertSchema } from '../../schemas/utils'; -import { SnapshotStatusResponseSchema } from '../../schemas/responses'; -import { BaseAPI, BaseAPIOptions } from './base'; +} from '../../schemas/datasets.js'; +import type { SnapshotDownloadOptions, SnapshotFetchOptions } from '../../schemas/datasets.js'; +import { assertSchema } from '../../schemas/utils.js'; +import { SnapshotStatusResponseSchema } from '../../schemas/responses.js'; +import { BaseAPI, BaseAPIOptions } from './base.js'; const assertDownloadStatus = (status: number) => { if (status < 202) return; diff --git a/src/api/scrape/tiktok.ts b/src/api/scrape/tiktok.ts index 8fc2485..bd471e9 100644 --- a/src/api/scrape/tiktok.ts +++ b/src/api/scrape/tiktok.ts @@ -2,13 +2,13 @@ import type { DatasetOptions, OrchestrateOptions, UnknownRecord, -} from '../../types/datasets'; +} from '../../types/datasets.js'; import { DatasetOptionsSchema, DatasetMixedInputSchema, -} from '../../schemas/datasets'; -import { assertSchema } from '../../schemas/utils'; -import { BaseAPI, type BaseAPIOptions } from './base'; +} from '../../schemas/datasets.js'; +import { assertSchema } from '../../schemas/utils.js'; +import { BaseAPI, type BaseAPIOptions } from './base.js'; const DATASET_ID = { POST: 'gd_lu702nij2f790tmv9h', diff --git a/src/api/scrape/youtube.ts b/src/api/scrape/youtube.ts index f8b8dfc..f725582 100644 --- a/src/api/scrape/youtube.ts +++ b/src/api/scrape/youtube.ts @@ -2,13 +2,13 @@ import type { DatasetOptions, OrchestrateOptions, UnknownRecord, -} from '../../types/datasets'; +} from '../../types/datasets.js'; import { DatasetOptionsSchema, DatasetMixedInputSchema, -} from '../../schemas/datasets'; -import { assertSchema } from '../../schemas/utils'; -import { BaseAPI, type BaseAPIOptions } from './base'; +} from '../../schemas/datasets.js'; +import { assertSchema } from '../../schemas/utils.js'; +import { BaseAPI, type BaseAPIOptions } from './base.js'; const DATASET_ID = { VIDEO: 'gd_lk56epmy2i5g7lzu0k', diff --git a/src/api/scraperstudio/index.ts b/src/api/scraperstudio/index.ts index f7f3f71..12510bc 100644 --- a/src/api/scraperstudio/index.ts +++ b/src/api/scraperstudio/index.ts @@ -1,3 +1,3 @@ -export { ScraperStudioService } from './service'; -export { ScraperStudioJob } from './job'; -export type { ScraperStudioPollOptions } from './job'; +export { ScraperStudioService } from './service.js'; +export { ScraperStudioJob } from './job.js'; +export type { ScraperStudioPollOptions } from './job.js'; diff --git a/src/api/scraperstudio/job.ts b/src/api/scraperstudio/job.ts index 31d6c8e..dc5f7e4 100644 --- a/src/api/scraperstudio/job.ts +++ b/src/api/scraperstudio/job.ts @@ -2,12 +2,12 @@ import { DataNotReadyError, NetworkError, TimeoutError, -} from '../../utils/errors'; -import { sleep, parseJSON } from '../../utils/misc'; -import { Deadline } from '../../utils/deadline'; -import { getLogger } from '../../utils/logger'; -import { Transport, assertResponse } from '../../core/transport'; -import { API_ENDPOINT } from '../../utils/constants'; +} from '../../utils/errors.js'; +import { sleep, parseJSON } from '../../utils/misc.js'; +import { Deadline } from '../../utils/deadline.js'; +import { getLogger } from '../../utils/logger.js'; +import { Transport, assertResponse } from '../../core/transport.js'; +import { API_ENDPOINT } from '../../utils/constants.js'; const logger = getLogger('scraperstudio.job'); const MAX_NETWORK_RETRIES = 3; diff --git a/src/api/scraperstudio/service.ts b/src/api/scraperstudio/service.ts index 1da057d..92d15c1 100644 --- a/src/api/scraperstudio/service.ts +++ b/src/api/scraperstudio/service.ts @@ -1,8 +1,8 @@ -import { Transport, assertResponse } from '../../core/transport'; -import { API_ENDPOINT } from '../../utils/constants'; -import { parseResponse } from '../../utils/misc'; -import { getLogger } from '../../utils/logger'; -import { assertSchema } from '../../schemas/utils'; +import { Transport, assertResponse } from '../../core/transport.js'; +import { API_ENDPOINT } from '../../utils/constants.js'; +import { parseResponse } from '../../utils/misc.js'; +import { getLogger } from '../../utils/logger.js'; +import { assertSchema } from '../../schemas/utils.js'; import { CollectorIdSchema, ScraperStudioRunOptionsSchema, @@ -11,8 +11,8 @@ import { type ScraperStudioRunOptions, type JobStatus, type RunResult, -} from '../../schemas/scraperstudio'; -import { ScraperStudioJob } from './job'; +} from '../../schemas/scraperstudio.js'; +import { ScraperStudioJob } from './job.js'; const logger = getLogger('scraperstudio'); diff --git a/src/api/search/router.ts b/src/api/search/router.ts index 8b3797c..693862d 100644 --- a/src/api/search/router.ts +++ b/src/api/search/router.ts @@ -1,5 +1,5 @@ -import { SearchAPI } from '../unlocker/search'; -import type { RequestAPIOptions } from '../unlocker/request'; +import { SearchAPI } from '../unlocker/search.js'; +import type { RequestAPIOptions } from '../unlocker/request.js'; import type { SearchOptions, SearchJSONOptions, @@ -8,7 +8,7 @@ import type { BatchJSONResponse, BatchRawResponse, AnyResponse, -} from '../../types/request'; +} from '../../types/request.js'; type SearchMethodOptions = Omit; type SearchMethodJSONOptions = Omit; diff --git a/src/api/unlocker/request.ts b/src/api/unlocker/request.ts index 851adea..a9700e8 100644 --- a/src/api/unlocker/request.ts +++ b/src/api/unlocker/request.ts @@ -1,11 +1,11 @@ import { PromisePool } from '@supercharge/promise-pool'; -import { API_ENDPOINT, DEFAULT_CONCURRENCY } from '../../utils/constants'; -import { getLogger } from '../../utils/logger'; -import { BRDError } from '../../utils/errors'; -import { Transport, assertResponse } from '../../core/transport'; -import { dropEmptyKeys, parseJSON } from '../../utils/misc'; -import { ZoneNameSchema } from '../../schemas/shared'; -import type { ZoneType } from '../../types/zones'; +import { API_ENDPOINT, DEFAULT_CONCURRENCY } from '../../utils/constants.js'; +import { getLogger } from '../../utils/logger.js'; +import { BRDError } from '../../utils/errors.js'; +import { Transport, assertResponse } from '../../core/transport.js'; +import { dropEmptyKeys, parseJSON } from '../../utils/misc.js'; +import { ZoneNameSchema } from '../../schemas/shared.js'; +import type { ZoneType } from '../../types/zones.js'; import type { RequestOptions, SingleRawResponse, @@ -15,8 +15,8 @@ import type { BatchJSONResponse, SingleResponse, BatchResponse, -} from '../../types/request'; -import type { ZonesAPI } from '../zones'; +} from '../../types/request.js'; +import type { ZonesAPI } from '../zones.js'; interface RequestQueryBody { url: string; diff --git a/src/api/unlocker/scrape.ts b/src/api/unlocker/scrape.ts index d647770..a65143f 100644 --- a/src/api/unlocker/scrape.ts +++ b/src/api/unlocker/scrape.ts @@ -1,5 +1,5 @@ -import type { ScrapeOptions } from '../../types/request'; -import { RequestAPI, type RequestAPIOptions } from './request'; +import type { ScrapeOptions } from '../../types/request.js'; +import { RequestAPI, type RequestAPIOptions } from './request.js'; export class ScrapeAPI extends RequestAPI { constructor(opts: RequestAPIOptions) { diff --git a/src/api/unlocker/search.ts b/src/api/unlocker/search.ts index ec99174..ae2480e 100644 --- a/src/api/unlocker/search.ts +++ b/src/api/unlocker/search.ts @@ -9,11 +9,11 @@ import type { BatchRawResponse, SingleResponse, BatchResponse, -} from '../../types/request'; -import { RequestAPI, type RequestAPIOptions } from './request'; -import { assertSchema } from '../../schemas/utils'; -import { SearchQueryParamSchema } from '../../schemas/client'; -import { SearchOptionsSchema } from '../../schemas/request'; +} from '../../types/request.js'; +import { RequestAPI, type RequestAPIOptions } from './request.js'; +import { assertSchema } from '../../schemas/utils.js'; +import { SearchQueryParamSchema } from '../../schemas/client.js'; +import { SearchOptionsSchema } from '../../schemas/request.js'; const buildSERPUrl = (opt: SearchOptions, query: string) => { const q = encodeURIComponent(query.trim()); diff --git a/src/api/zones.ts b/src/api/zones.ts index 480e9bb..c3b4944 100644 --- a/src/api/zones.ts +++ b/src/api/zones.ts @@ -1,9 +1,9 @@ -import { getLogger } from '../utils/logger'; -import { API_ENDPOINT } from '../utils/constants'; -import { parseJSON } from '../utils/misc'; -import { Transport, assertResponse } from '../core/transport'; -import { ZoneError, BRDError } from '../utils/errors'; -import type { ZoneInfo, ZoneInfoResponse } from '../types/zones'; +import { getLogger } from '../utils/logger.js'; +import { API_ENDPOINT } from '../utils/constants.js'; +import { parseJSON } from '../utils/misc.js'; +import { Transport, assertResponse } from '../core/transport.js'; +import { ZoneError, BRDError } from '../utils/errors.js'; +import type { ZoneInfo, ZoneInfoResponse } from '../types/zones.js'; const logger = getLogger('api.zones'); diff --git a/src/client.ts b/src/client.ts index 1a80f16..6e782b3 100644 --- a/src/client.ts +++ b/src/client.ts @@ -1,36 +1,36 @@ -import { ScrapeAPI } from './api/unlocker/scrape'; -import { ZonesAPI } from './api/zones'; -import { ScrapeRouter } from './api/scrape/router'; -import { SearchRouter } from './api/search/router'; -import { DatasetsClient } from './api/datasets/client'; -import { DiscoverService } from './api/discover/service'; -import type { DiscoverResult } from './api/discover/result'; -import type { DiscoverJob } from './api/discover/job'; -import type { DiscoverOptions } from './schemas/discover'; -import { ScraperStudioService } from './api/scraperstudio/service'; -import { BrowserService } from './api/browser/service'; -import { CrawlerService } from './api/crawler/service'; -import { SnapshotAPI } from './api/scrape/snapshot'; -import { setup as setupLogger, getLogger } from './utils/logger'; +import { ScrapeAPI } from './api/unlocker/scrape.js'; +import { ZonesAPI } from './api/zones.js'; +import { ScrapeRouter } from './api/scrape/router.js'; +import { SearchRouter } from './api/search/router.js'; +import { DatasetsClient } from './api/datasets/client.js'; +import { DiscoverService } from './api/discover/service.js'; +import type { DiscoverResult } from './api/discover/result.js'; +import type { DiscoverJob } from './api/discover/job.js'; +import type { DiscoverOptions } from './schemas/discover.js'; +import { ScraperStudioService } from './api/scraperstudio/service.js'; +import { BrowserService } from './api/browser/service.js'; +import { CrawlerService } from './api/crawler/service.js'; +import { SnapshotAPI } from './api/scrape/snapshot.js'; +import { setup as setupLogger, getLogger } from './utils/logger.js'; import { DEFAULT_WEB_UNLOCKER_ZONE, DEFAULT_SERP_ZONE, -} from './utils/constants'; -import { ValidationError } from './utils/errors'; -import { maskKey } from './utils/misc'; -import { writeContent, stringifyResults, getFilename } from './utils/files'; -import { assertSchema } from './schemas/utils'; -import { ScrapeOptionsSchema } from './schemas/request'; +} from './utils/constants.js'; +import { ValidationError } from './utils/errors.js'; +import { maskKey } from './utils/misc.js'; +import { writeContent, stringifyResults, getFilename } from './utils/files.js'; +import { assertSchema } from './schemas/utils.js'; +import { ScrapeOptionsSchema } from './schemas/request.js'; import { URLParamSchema, ApiKeySchema, VerboseSchema, ClientOptionsSchema, -} from './schemas/client'; -import { SaveOptionsSchema } from './schemas/misc'; -import { Transport } from './core/transport'; -import type { BdClientOptions, SaveOptions } from './types/client'; -import type { ZoneInfo } from './types/zones'; +} from './schemas/client.js'; +import { SaveOptionsSchema } from './schemas/misc.js'; +import { Transport } from './core/transport.js'; +import type { BdClientOptions, SaveOptions } from './types/client.js'; +import type { ZoneInfo } from './types/zones.js'; import type { ScrapeJSONOptions, SingleJSONResponse, @@ -39,7 +39,7 @@ import type { SingleRawResponse, BatchRawResponse, AnyResponse, -} from './types/request'; +} from './types/request.js'; function defineLazy(obj: object, key: string, factory: () => T): void { Object.defineProperty(obj, key, { diff --git a/src/core/rate-limiter.ts b/src/core/rate-limiter.ts index ba5b688..9cd32f5 100644 --- a/src/core/rate-limiter.ts +++ b/src/core/rate-limiter.ts @@ -1,5 +1,5 @@ -import { BRDError } from '../utils/errors'; -import { getLogger } from '../utils/logger'; +import { BRDError } from '../utils/errors.js'; +import { getLogger } from '../utils/logger.js'; const logger = getLogger('rate-limiter'); diff --git a/src/core/transport.ts b/src/core/transport.ts index 06b55f3..9ceaadd 100644 --- a/src/core/transport.ts +++ b/src/core/transport.ts @@ -16,7 +16,7 @@ import { RETRY_STATUSES, RETRY_METHODS, RETRY_ERROR_CODES, -} from '../utils/constants'; +} from '../utils/constants.js'; import { APIError, AuthenticationError, @@ -24,10 +24,10 @@ import { NetworkError, NetworkTimeoutError, ValidationError, -} from '../utils/errors'; -import { getAuthHeaders } from '../utils/auth'; -import { getLogger, logRequest } from '../utils/logger'; -import { RateLimiter } from './rate-limiter'; +} from '../utils/errors.js'; +import { getAuthHeaders } from '../utils/auth.js'; +import { getLogger, logRequest } from '../utils/logger.js'; +import { RateLimiter } from './rate-limiter.js'; const { dns, retry } = interceptors; @@ -93,22 +93,37 @@ export class Transport { opts.rateLimit && opts.rateLimit > 0 ? new RateLimiter(opts.rateLimit, opts.ratePeriod ?? 1000) : null; + // Compose only the interceptors the runtime's undici actually provides. + // Bun's bundled undici ships a subset (redirect/retry/dump) and omits + // `dns`, so calling `dns()` there throws "dns is not a function" (#24). + // Detect by CAPABILITY (is it a function?), never by runtime name: this + // keeps `dns` on Node unchanged, skips it on Bun (undici falls back to + // platform DNS — requests still work), self-retires if Bun later ships + // `dns`, and degrades gracefully for any interceptor a future runtime + // omits, instead of crashing the constructor. + const interceptorChain = [ + typeof dns === 'function' ? dns() : null, + typeof retry === 'function' + ? retry({ + maxRetries: MAX_RETRIES, + timeoutFactor: RETRY_BACKOFF_FACTOR, + statusCodes: RETRY_STATUSES, + methods: + RETRY_METHODS as unknown as Dispatcher.HttpMethod[], + errorCodes: RETRY_ERROR_CODES, + }) + : null, + ].filter( + (i): i is Dispatcher.DispatcherComposeInterceptor => i !== null, + ); + this.agent = new Agent({ connections: opts.connections ?? DEFAULT_CONNECTIONS, keepAliveTimeout: DEFAULT_KEEP_ALIVE_TIMEOUT, keepAliveMaxTimeout: DEFAULT_KEEP_ALIVE_MAX_TIMEOUT, headersTimeout: this.defaultTimeout, bodyTimeout: this.defaultTimeout, - }).compose( - dns(), - retry({ - maxRetries: MAX_RETRIES, - timeoutFactor: RETRY_BACKOFF_FACTOR, - statusCodes: RETRY_STATUSES, - methods: RETRY_METHODS as unknown as Dispatcher.HttpMethod[], - errorCodes: RETRY_ERROR_CODES, - }), - ); + }).compose(...interceptorChain); process.on('beforeExit', this.onBeforeExit); } diff --git a/src/datasets.ts b/src/datasets.ts index fe915b8..f0139e0 100644 --- a/src/datasets.ts +++ b/src/datasets.ts @@ -1,8 +1,8 @@ // Datasets service (pre-collected data). // Usage: import { DatasetsClient } from '@brightdata/sdk/datasets' -export { DatasetsClient } from './api/datasets/client'; -export { BaseDataset } from './api/datasets/base'; +export { DatasetsClient } from './api/datasets/client.js'; +export { BaseDataset } from './api/datasets/base.js'; export type { DatasetInfo, DatasetMetadata, @@ -10,4 +10,4 @@ export type { DatasetSnapshotStatus, DatasetDownloadOptions, DatasetQueryOptions, -} from './api/datasets/types'; +} from './api/datasets/types.js'; diff --git a/src/index.ts b/src/index.ts index 4794ad8..e45b4b9 100644 --- a/src/index.ts +++ b/src/index.ts @@ -10,49 +10,49 @@ export { FSError, APIError, DataNotReadyError, -} from './utils/errors'; -export { PACKAGE_VERSION as VERSION } from './utils/constants'; -export { bdclient } from './client'; -export { BaseResult } from './models/result'; -export { Deadline } from './utils/deadline'; -export type { PollOptions } from './utils/polling'; -export type { BaseResultFields } from './models/result'; -export type * from './types/client'; -export type * from './types/request'; -export type * from './types/zones'; -export type * from './types/discover'; +} from './utils/errors.js'; +export { PACKAGE_VERSION as VERSION } from './utils/constants.js'; +export { bdclient } from './client.js'; +export { BaseResult } from './models/result.js'; +export { Deadline } from './utils/deadline.js'; +export type { PollOptions } from './utils/polling.js'; +export type { BaseResultFields } from './models/result.js'; +export type * from './types/client.js'; +export type * from './types/request.js'; +export type * from './types/zones.js'; +export type * from './types/discover.js'; // ── Discover ───────────────────────────────────────────────────── -export { DiscoverResult } from './api/discover/result'; -export { DiscoverJob } from './api/discover/job'; -export type { DiscoverResultItem, DiscoverResultFields } from './api/discover/result'; -export type { DiscoverPollOptions } from './api/discover/job'; +export { DiscoverResult } from './api/discover/result.js'; +export { DiscoverJob } from './api/discover/job.js'; +export type { DiscoverResultItem, DiscoverResultFields } from './api/discover/result.js'; +export type { DiscoverPollOptions } from './api/discover/job.js'; // ── Crawler ────────────────────────────────────────────────────── -export { CrawlerService } from './api/crawler/service'; -export { CrawlResult } from './api/crawler/result'; -export { ScrapeJob as CrawlJob } from './api/scrape/job'; -export type { CrawlRecord, CrawlResultFields } from './api/crawler/result'; -export type { CrawlOptions, CrawlDownloadOptions } from './schemas/crawler'; +export { CrawlerService } from './api/crawler/service.js'; +export { CrawlResult } from './api/crawler/result.js'; +export { ScrapeJob as CrawlJob } from './api/scrape/job.js'; +export type { CrawlRecord, CrawlResultFields } from './api/crawler/result.js'; +export type { CrawlOptions, CrawlDownloadOptions } from './schemas/crawler.js'; // ── Scraper Studio ────────────────────────────────────────────── -export { ScraperStudioService } from './api/scraperstudio/service'; -export { ScraperStudioJob } from './api/scraperstudio/job'; -export type { ScraperStudioPollOptions } from './api/scraperstudio/job'; +export { ScraperStudioService } from './api/scraperstudio/service.js'; +export { ScraperStudioJob } from './api/scraperstudio/job.js'; +export type { ScraperStudioPollOptions } from './api/scraperstudio/job.js'; export type { ScraperStudioRunOptions, ScraperStudioInput, JobStatus, RunResult, -} from './schemas/scraperstudio'; +} from './schemas/scraperstudio.js'; // ── Browser API ──────────────────────────────────────────────── -export { BrowserService } from './api/browser/service'; -export type { BrowserConnectOptions } from './schemas/browser'; +export { BrowserService } from './api/browser/service.js'; +export type { BrowserConnectOptions } from './schemas/browser.js'; // ── Subpath re-exports (backward compat) ───────────────────────── // Consumers can also import these from '@brightdata/sdk/scrapers', // '@brightdata/sdk/search', or '@brightdata/sdk/datasets'. -export * from './scrapers'; -export * from './search'; -export * from './datasets'; +export * from './scrapers.js'; +export * from './search.js'; +export * from './datasets.js'; diff --git a/src/models/result.ts b/src/models/result.ts index e41d8cd..8aa7e4d 100644 --- a/src/models/result.ts +++ b/src/models/result.ts @@ -1,4 +1,4 @@ -import { writeContent } from '../utils/files'; +import { writeContent } from '../utils/files.js'; export interface BaseResultFields { success: boolean; diff --git a/src/schemas/client.ts b/src/schemas/client.ts index 0c0c04d..840f0b2 100644 --- a/src/schemas/client.ts +++ b/src/schemas/client.ts @@ -1,5 +1,5 @@ import { z } from 'zod'; -import { ZoneNameSchema } from './shared'; +import { ZoneNameSchema } from './shared.js'; export const ApiKeySchema = z .string() diff --git a/src/schemas/crawler.ts b/src/schemas/crawler.ts index 5d9fa9d..9f01fe8 100644 --- a/src/schemas/crawler.ts +++ b/src/schemas/crawler.ts @@ -1,5 +1,5 @@ import { z } from 'zod'; -import { URLParamSchema } from './client'; +import { URLParamSchema } from './client.js'; export const CrawlInputSchema = URLParamSchema; diff --git a/src/schemas/datasets.ts b/src/schemas/datasets.ts index 1e78274..91925f3 100644 --- a/src/schemas/datasets.ts +++ b/src/schemas/datasets.ts @@ -1,5 +1,5 @@ import { z } from 'zod'; -import { FilenameSchema } from './shared'; +import { FilenameSchema } from './shared.js'; const SnapshotFormatSchema = z .enum(['json', 'csv', 'ndjson', 'jsonl']) diff --git a/src/schemas/filters/index.ts b/src/schemas/filters/index.ts index d2a2167..3182dd7 100644 --- a/src/schemas/filters/index.ts +++ b/src/schemas/filters/index.ts @@ -1,5 +1,5 @@ -export * from './chatgpt'; -export * from './linkedin'; -export * from './amazon'; -export * from './instagram'; -export * from './facebook'; +export * from './chatgpt.js'; +export * from './linkedin.js'; +export * from './amazon.js'; +export * from './instagram.js'; +export * from './facebook.js'; diff --git a/src/schemas/misc.ts b/src/schemas/misc.ts index f81490a..c908444 100644 --- a/src/schemas/misc.ts +++ b/src/schemas/misc.ts @@ -1,5 +1,5 @@ import { z } from 'zod'; -import { FilenameSchema } from './shared'; +import { FilenameSchema } from './shared.js'; const ContentFormatSchema = z .enum(['json', 'txt', 'JSON', 'TXT']) diff --git a/src/schemas/request.ts b/src/schemas/request.ts index de75bda..285367a 100644 --- a/src/schemas/request.ts +++ b/src/schemas/request.ts @@ -1,6 +1,6 @@ import { z } from 'zod'; -import { DEFAULT_CONCURRENCY } from '../utils/constants'; -import { ZoneNameSchema } from './shared'; +import { DEFAULT_CONCURRENCY } from '../utils/constants.js'; +import { ZoneNameSchema } from './shared.js'; export const RequestOptionsBaseSchema = z.object({ zone: ZoneNameSchema.optional(), diff --git a/src/schemas/responses.ts b/src/schemas/responses.ts index 49caeef..99515e1 100644 --- a/src/schemas/responses.ts +++ b/src/schemas/responses.ts @@ -17,12 +17,20 @@ export type SnapshotMeta = z.infer; * Response from GET /datasets/v3/progress/{id} * Used by: SnapshotAPI.#getStatus(), polling loop * Critical field: status (without it, poll never sees 'ready') + * + * The Bright Data API owns the status vocabulary and adds lifecycle values over + * time (e.g. "starting", "collecting"). The SDK observes the API's state machine: + * pollUntilReady keeps polling on any status it does not recognize as terminal, so + * the schema must NOT reject unknown values. Validate the SHAPE (status is a + * non-empty string) — not the MEMBERSHIP. Terminal classification lives in + * pollUntilReady, not here. Known values at time of writing: + * running | ready | failed | cancelled | error. */ export const SnapshotStatusResponseSchema = z .object({ snapshot_id: z.string(), dataset_id: z.string(), - status: z.enum(['running', 'ready', 'failed', 'cancelled', 'error']), + status: z.string().min(1), }) .passthrough(); diff --git a/src/schemas/utils.ts b/src/schemas/utils.ts index 5618a38..752bd64 100644 --- a/src/schemas/utils.ts +++ b/src/schemas/utils.ts @@ -1,5 +1,5 @@ import { z } from 'zod'; -import { ValidationError } from '../utils/errors'; +import { ValidationError } from '../utils/errors.js'; export function assertSchema( schema: z.ZodType, diff --git a/src/scrapers.ts b/src/scrapers.ts index a59e989..78ff5ea 100644 --- a/src/scrapers.ts +++ b/src/scrapers.ts @@ -1,8 +1,8 @@ // Scraper platform API: ScrapeRouter, ScrapeJob, results, platform filter types. // Usage: import { ScrapeRouter, ScrapeJob } from '@brightdata/sdk/scrapers' -export { ScrapeJob } from './api/scrape/job'; -export { ScrapeRouter } from './api/scrape/router'; -export { ScrapeResult } from './models/result'; -export type { ScrapeResultFields } from './models/result'; -export type * from './types/datasets'; +export { ScrapeJob } from './api/scrape/job.js'; +export { ScrapeRouter } from './api/scrape/router.js'; +export { ScrapeResult } from './models/result.js'; +export type { ScrapeResultFields } from './models/result.js'; +export type * from './types/datasets.js'; diff --git a/src/search.ts b/src/search.ts index a2e3be8..625b579 100644 --- a/src/search.ts +++ b/src/search.ts @@ -1,6 +1,6 @@ // Search API: SearchRouter, results. // Usage: import { SearchRouter, SearchResult } from '@brightdata/sdk/search' -export { SearchRouter } from './api/search/router'; -export { SearchResult } from './models/result'; -export type { SearchResultFields } from './models/result'; +export { SearchRouter } from './api/search/router.js'; +export { SearchResult } from './models/result.js'; +export type { SearchResultFields } from './models/result.js'; diff --git a/src/types/client.ts b/src/types/client.ts index d76437a..83e4767 100644 --- a/src/types/client.ts +++ b/src/types/client.ts @@ -1,7 +1,7 @@ import type { z } from 'zod'; -import type { LogLevelSchema } from '../schemas/client'; +import type { LogLevelSchema } from '../schemas/client.js'; export type LOG_LEVEL = z.infer; -export type { BdClientOptions } from '../schemas/client'; -export type { SaveOptions, ContentFormat } from '../schemas/misc'; +export type { BdClientOptions } from '../schemas/client.js'; +export type { SaveOptions, ContentFormat } from '../schemas/misc.js'; diff --git a/src/types/datasets.ts b/src/types/datasets.ts index 7b3abe8..a03bfd2 100644 --- a/src/types/datasets.ts +++ b/src/types/datasets.ts @@ -1,5 +1,5 @@ -import type { PollOptions } from '../utils/polling'; -import type { SnapshotStatusResponse } from '../schemas/responses'; +import type { PollOptions } from '../utils/polling.js'; +import type { SnapshotStatusResponse } from '../schemas/responses.js'; export type { DatasetOptionsSync, @@ -8,14 +8,14 @@ export type { DiscoverOptions, SnapshotDownloadOptions, SnapshotFetchOptions, -} from '../schemas/datasets'; +} from '../schemas/datasets.js'; export type SnapshotFormat = 'json' | 'ndjson' | 'jsonl' | 'csv'; export type { SnapshotMeta, SnapshotStatusResponse, -} from '../schemas/responses'; +} from '../schemas/responses.js'; export type SnapshotStatus = SnapshotStatusResponse['status']; @@ -29,11 +29,11 @@ export interface SnapshotOperations { getStatus(snapshotId: string): Promise; fetch( snapshotId: string, - options?: import('../schemas/datasets').SnapshotFetchOptions, + options?: import('../schemas/datasets.js').SnapshotFetchOptions, ): Promise; download( snapshotId: string, - options?: import('../schemas/datasets').SnapshotDownloadOptions, + options?: import('../schemas/datasets.js').SnapshotDownloadOptions, ): Promise; cancel(snapshotId: string): Promise; } @@ -44,11 +44,11 @@ export interface UrlFilter extends UnknownRecord { url: string; } -export type { ChatgptFilter } from '../schemas/filters/chatgpt'; +export type { ChatgptFilter } from '../schemas/filters/chatgpt.js'; export type { LinkedinProfileFilter, LinkedinJobFilter, -} from '../schemas/filters/linkedin'; +} from '../schemas/filters/linkedin.js'; export type { AmazonCollectProductsFilter, @@ -58,12 +58,12 @@ export type { AmazonDiscoverProductsByCategoryURLFilter, AmazonDiscoverProductsByKeywordFilter, AmazonDiscoverProductsByUPCFilter, -} from '../schemas/filters/amazon'; +} from '../schemas/filters/amazon.js'; export type { InstagramDiscoverPostsByProfileURLFilter, InstagramDiscoverReelsByProfileURLFilter, -} from '../schemas/filters/instagram'; +} from '../schemas/filters/instagram.js'; export type { FacebookCollectUserPostsFilter, @@ -75,7 +75,7 @@ export type { FacebookDiscoverMarketplaceItemsByURLFilter, FacebookDiscoverEventsByURLFilter, FacebookDiscoverEventsByVenueFilter, -} from '../schemas/filters/facebook'; +} from '../schemas/filters/facebook.js'; /** * Options for one-call orchestration methods (products, reviews, etc.). diff --git a/src/types/request.ts b/src/types/request.ts index 09e3545..e775e1c 100644 --- a/src/types/request.ts +++ b/src/types/request.ts @@ -1,4 +1,4 @@ -import type { BRDError } from '../utils/errors'; +import type { BRDError } from '../utils/errors.js'; export type { FetchingOptions, @@ -6,10 +6,10 @@ export type { ScrapeOptions, SearchOptions, SearchEngine, -} from '../schemas/request'; +} from '../schemas/request.js'; // Re-derive intersection types from re-exported bases -import type { RequestOptions } from '../schemas/request'; +import type { RequestOptions } from '../schemas/request.js'; export interface RequestJSONOptions extends RequestOptions { format: 'json'; diff --git a/src/utils/auth.ts b/src/utils/auth.ts index dcd2905..705e7ca 100644 --- a/src/utils/auth.ts +++ b/src/utils/auth.ts @@ -1,4 +1,4 @@ -import { USER_AGENT } from './constants'; +import { USER_AGENT } from './constants.js'; export const getAuthHeaders = (apiKey: string) => ({ Authorization: `Bearer ${apiKey}`, diff --git a/src/utils/files.ts b/src/utils/files.ts index b890d42..4ca9336 100644 --- a/src/utils/files.ts +++ b/src/utils/files.ts @@ -2,11 +2,11 @@ import { createWriteStream, type Stats } from 'node:fs'; import fs from 'node:fs/promises'; import path from 'node:path'; import { type Dispatcher } from 'undici'; -import { getLogger } from './logger'; -import { BRDError, FSError } from './errors'; -import { isStrArray } from './misc'; -import type { SingleResponse, BatchResponse } from '../types/request'; -import type { ContentFormat } from '../types/client'; +import { getLogger } from './logger.js'; +import { BRDError, FSError } from './errors.js'; +import { isStrArray } from './misc.js'; +import type { SingleResponse, BatchResponse } from '../types/request.js'; +import type { ContentFormat } from '../types/client.js'; const logger = getLogger('utils.files'); diff --git a/src/utils/logger.ts b/src/utils/logger.ts index e8f07b1..9c46fcf 100644 --- a/src/utils/logger.ts +++ b/src/utils/logger.ts @@ -1,4 +1,4 @@ -import type { LOG_LEVEL } from '../types/client'; +import type { LOG_LEVEL } from '../types/client.js'; let currentLogLevel: LOG_LEVEL = 'INFO'; let isStructuredLogging = true; diff --git a/src/utils/misc.ts b/src/utils/misc.ts index bc5e036..3261768 100644 --- a/src/utils/misc.ts +++ b/src/utils/misc.ts @@ -1,6 +1,6 @@ import { z } from 'zod'; -import { getLogger } from './logger'; -import { APIError } from './errors'; +import { getLogger } from './logger.js'; +import { APIError } from './errors.js'; export function parseJSON(data: string): T { try { diff --git a/src/utils/polling.ts b/src/utils/polling.ts index 7ea6aeb..5f13c2a 100644 --- a/src/utils/polling.ts +++ b/src/utils/polling.ts @@ -1,6 +1,6 @@ -import { BRDError, TimeoutError } from './errors'; -import { sleep } from './misc'; -import { getLogger } from './logger'; +import { BRDError, TimeoutError } from './errors.js'; +import { sleep } from './misc.js'; +import { getLogger } from './logger.js'; const logger = getLogger('polling'); @@ -51,8 +51,12 @@ export async function pollUntilReady( ); return; } - if (status === 'failed' || status === 'error') { - throw new BRDError(`${id} failed with status: ${status}`); + if ( + status === 'failed' || + status === 'error' || + status === 'cancelled' + ) { + throw new BRDError(`${id} stopped with terminal status: ${status}`); } await sleep(interval); diff --git a/tests/polling.test.ts b/tests/polling.test.ts index 4c19ec9..95c09bf 100644 --- a/tests/polling.test.ts +++ b/tests/polling.test.ts @@ -46,6 +46,26 @@ describe('pollUntilReady', () => { ).rejects.toThrow(BRDError); }); + test('throws BRDError when status is cancelled', async () => { + const getStatus = vi + .fn() + .mockResolvedValueOnce({ status: 'cancelled' }); + await expect( + pollUntilReady('snap_123', getStatus, { pollInterval: 10 }), + ).rejects.toThrow(BRDError); + }); + + test('keeps polling through an unknown non-terminal status', async () => { + const getStatus = vi + .fn() + .mockResolvedValueOnce({ status: 'starting' }) + .mockResolvedValueOnce({ status: 'collecting' }) + .mockResolvedValueOnce({ status: 'ready' }); + + await pollUntilReady('snap_123', getStatus, { pollInterval: 10 }); + expect(getStatus).toHaveBeenCalledTimes(3); + }); + test('calls onStatus callback on each poll', async () => { const getStatus = vi .fn() diff --git a/tests/response-schemas.test.ts b/tests/response-schemas.test.ts index 73f477e..f9d6ce8 100644 --- a/tests/response-schemas.test.ts +++ b/tests/response-schemas.test.ts @@ -100,10 +100,32 @@ describe('SnapshotStatusResponseSchema', () => { } }); - test('rejects unknown status value', () => { + // The API owns the status vocabulary; unknown-but-well-formed values + // (e.g. "starting", "collecting") must parse so the poll loop can keep + // polling. Validation guards the shape, not the membership. + test('accepts unknown status value (e.g. "starting")', () => { + const result = SnapshotStatusResponseSchema.parse({ + status: 'starting', + snapshot_id: 's1', + dataset_id: 'd1', + }); + expect(result.status).toBe('starting'); + }); + + test('rejects empty status', () => { + expect(() => + SnapshotStatusResponseSchema.parse({ + status: '', + snapshot_id: 's1', + dataset_id: 'd1', + }), + ).toThrow(); + }); + + test('rejects non-string status', () => { expect(() => SnapshotStatusResponseSchema.parse({ - status: 'unknown', + status: 42, snapshot_id: 's1', dataset_id: 'd1', }), diff --git a/tests/transport-bun.test.ts b/tests/transport-bun.test.ts new file mode 100644 index 0000000..c078e04 --- /dev/null +++ b/tests/transport-bun.test.ts @@ -0,0 +1,51 @@ +import { describe, expect, test, vi } from 'vitest'; + +// Simulate Bun's bundled undici, whose interceptor polyfill ships only a +// subset (redirect/retry/dump) and omits `dns`. Before the fix, Transport +// called `dns()` unconditionally and crashed with "dns is not a function" +// (issue #24). This mock reproduces the Bun shape: `interceptors.dns` is +// absent. vi.mock is hoisted above the imports below, so Transport captures +// this dns-less shape at module load — exactly as it would on real Bun. +vi.mock('undici', () => ({ + request: vi.fn(), + stream: vi.fn(), + Agent: vi.fn(() => ({ + compose: vi.fn(() => ({ close: vi.fn() })), + close: vi.fn(), + })), + interceptors: { + // `dns` intentionally omitted — this is the Bun shape. + redirect: vi.fn(() => vi.fn()), + retry: vi.fn(() => vi.fn()), + dump: vi.fn(() => vi.fn()), + }, +})); + +import * as undici from 'undici'; +import { Transport } from '../src/core/transport'; +import { bdclient } from '../src/index'; + +describe('Transport under a Bun-shaped undici (no `dns` interceptor)', () => { + test('Transport constructor does not throw when interceptors.dns is absent', () => { + expect(() => new Transport({ apiKey: 'test-key' })).not.toThrow(); + }); + + test('bdclient constructor does not throw (the issue #24 repro)', () => { + expect( + () => new bdclient({ apiKey: 'test-key-1234567890' }), + ).not.toThrow(); + }); + + test('composes the present interceptor (retry) and skips the absent one (dns)', () => { + const retry = vi.mocked(undici.interceptors.retry); + retry.mockClear(); + + new Transport({ apiKey: 'test-key' }); + + // retry is present → it was invoked to build the interceptor. + expect(retry).toHaveBeenCalled(); + // dns is absent entirely — there is nothing to call, and the lack of a + // throw above is the assertion that the capability guard handled it. + expect('dns' in undici.interceptors).toBe(false); + }); +});