crawlee-one 2.0.0 → 2.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/README.md +30 -31
  2. package/dist/cjs/api.d.ts +2 -2
  3. package/dist/cjs/api.js.map +1 -1
  4. package/dist/cjs/cli/cli.js +4 -4
  5. package/dist/cjs/cli/cli.js.map +1 -1
  6. package/dist/cjs/cli/commands/codegen.js.map +1 -1
  7. package/dist/cjs/lib/actions/scrapeListing.js.map +1 -1
  8. package/dist/cjs/lib/actor/actor.d.ts +5 -5
  9. package/dist/cjs/lib/actor/actor.js +2 -2
  10. package/dist/cjs/lib/actor/actor.js.map +1 -1
  11. package/dist/cjs/lib/error/errorHandler.d.ts +6 -8
  12. package/dist/cjs/lib/error/errorHandler.js +3 -3
  13. package/dist/cjs/lib/error/errorHandler.js.map +1 -1
  14. package/dist/cjs/lib/input.d.ts +2 -2
  15. package/dist/cjs/lib/input.js +28 -28
  16. package/dist/cjs/lib/input.js.map +1 -1
  17. package/dist/cjs/lib/integrations/apify.js.map +1 -1
  18. package/dist/cjs/lib/io/dataset.js.map +1 -1
  19. package/dist/cjs/lib/io/pushData.js +3 -3
  20. package/dist/cjs/lib/io/pushData.js.map +1 -1
  21. package/dist/cjs/lib/io/pushRequests.d.ts +1 -1
  22. package/dist/cjs/lib/io/pushRequests.js.map +1 -1
  23. package/dist/cjs/lib/log.d.ts +1 -1
  24. package/dist/cjs/lib/migrate/localMigrator.js.map +1 -1
  25. package/dist/cjs/lib/router/router.d.ts +14 -18
  26. package/dist/cjs/lib/router/router.js +2 -2
  27. package/dist/cjs/lib/router/router.js.map +1 -1
  28. package/dist/cjs/lib/telemetry/sentry.d.ts +1 -1
  29. package/dist/cjs/lib/test/actor.d.ts +9 -9
  30. package/dist/cjs/lib/test/actor.js +2 -2
  31. package/dist/cjs/lib/test/actor.js.map +1 -1
  32. package/dist/cjs/lib/test/mockApifyClient.d.ts +6 -6
  33. package/dist/cjs/lib/test/mockApifyClient.js.map +1 -1
  34. package/dist/cjs/utils/async.js +1 -1
  35. package/dist/cjs/utils/async.js.map +1 -1
  36. package/dist/cjs/utils/error.d.ts +1 -1
  37. package/dist/cjs/utils/package.js.map +1 -1
  38. package/dist/cjs/utils/url.js.map +1 -1
  39. package/dist/cjs/utils/valueMonitor.js.map +1 -1
  40. package/package.json +21 -20
@@ -1 +1 @@
1
- {"version":3,"file":"actor.js","sourceRoot":"","sources":["../../../../src/lib/actor/actor.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n RouterHandler,\n BasicCrawlerOptions,\n Router,\n Log,\n Request as CrawleeRequest,\n} from 'crawlee';\nimport { omitBy, pick, defaults } from 'lodash';\nimport { gotScraping } from 'got-scraping';\n\nimport type { CrawlerMeta, CrawlerType } from '../../types';\nimport { actorClassByType } from '../../constants';\nimport type { MaybePromise, PickPartial } from '../../utils/types';\nimport { createErrorHandler } from '../error/errorHandler';\nimport { type PushDataOptions, itemCacheKey, pushData } from '../io/pushData';\nimport { getColumnFromDataset } from '../io/dataset';\nimport { PushRequestsOptions, pushRequests } from '../io/pushRequests';\nimport type { CrawleeOneIO } from '../integrations/types';\nimport { apifyIO } from '../integrations/apify';\nimport { registerHandlers, setupDefaultHandlers } from '../router/router';\nimport {\n CrawlerConfigActorInput,\n OutputActorInput,\n MetamorphActorInput,\n PrivacyActorInput,\n crawlerInput,\n StartUrlsActorInput,\n InputActorInput,\n RequestActorInput,\n LoggingActorInput,\n} from '../input';\nimport { logLevelHandlerWrapper, logLevelToCrawlee } from '../log';\nimport type {\n CrawleeOneActorInst,\n CrawleeOneActorDef,\n CrawleeOneHookCtx,\n CrawleeOneActorRouterCtx,\n Metamorph,\n RunCrawler,\n CrawleeOneCtx,\n CrawleeOneHookFn,\n CrawleeOneActorDefWithInput,\n} from './types';\n\nconst isRouter = (r: any): r is RouterHandler<any> => {\n return !!((r as RouterHandler)?.addHandler && (r as RouterHandler)?.addDefaultHandler);\n};\n\nconst isFunc = (f: any): f is (...args: any[]) => any => {\n return typeof f === 'function';\n};\n\n/** Run a function that was defined as a string via Actor input */\nconst genHookFn = <\n TArgs extends any[] = [],\n TReturn = unknown,\n T extends CrawleeOneCtx = CrawleeOneCtx\n>(\n actor: Pick<CrawleeOneActorInst<T>, 'input' | 'state' | 'io'>,\n fnOrStr: string | CrawleeOneHookFn<TArgs, TReturn, T> | undefined | null,\n funcName: string\n) => {\n if (!fnOrStr) return null;\n\n const hookCtx = {\n io: actor.io,\n input: actor.input,\n state: actor.state,\n itemCacheKey,\n sendRequest: gotScraping,\n } satisfies CrawleeOneHookCtx<T>;\n\n const hookFn = (typeof fnOrStr === 'function'\n ? fnOrStr\n : eval(fnOrStr) as unknown\n ) // prettier-ignore\n if (!hookFn) return null;\n if (typeof hookFn !== 'function') {\n throw Error(`Hook \"${funcName}\" is not a function, got ${typeof hookFn} instead: ${hookFn}`);\n }\n\n // NOTE: If eval didn't return func, but something else, we want to let the code fail\n //\n return async (...args: TArgs) =>\n (hookFn as CrawleeOneHookFn<TArgs, TReturn, T>)(...args, hookCtx);\n};\n\n/**\n * Options available when creating default configuration for an opinionated Crawlee actor,\n * which is then run within Apify's `Actor.main()` context.\n *\n * Apify context can be replaced with custom implementation using the `actorConfig.io` option.\n *\n * Read more about what this actor does at {@link createCrawleeOne}.\n */\nexport interface RunCrawleeOneOptions<\n TType extends CrawlerType,\n T extends CrawleeOneCtx<CrawlerMeta<TType>['context']>\n> {\n /** String idetifying the actor class, e.g. `'cheerio'` */\n actorType: TType;\n actorName?: string;\n /** Config passed to the {@link createCrawleeOne} */\n actorConfig: PickPartial<CrawleeOneActorDef<T>, 'router' | 'createCrawler' | 'io' | 'telemetry'>;\n /**\n * If using default `createCrawler` implementation, these are crawler options\n * that may be overriden by user input.\n */\n crawlerConfigDefaults?: Omit<CrawlerMeta<TType>['options'], 'requestHandler'>;\n /**\n * If using default `createCrawler` implementation, these are crawler options\n * that will override user input.\n *\n * This is useful for testing env.\n */\n crawlerConfigOverrides?: Omit<CrawlerMeta<TType>['options'], 'requestHandler'>;\n /**\n * Callback with the created actor. The callback is called within\n * the `Actor.main()` context.\n */\n onReady?: (actor: CrawleeOneActorInst<T>) => MaybePromise<void>;\n}\n\n/**\n * Create opinionated Crawlee crawler that uses, and run it within Apify's `Actor.main()` context.\n *\n * Apify context can be replaced with custom implementation using the `actorConfig.io` option.\n *\n * This function does the following for you:\n *\n * 1) Full TypeScript coverage - Ensure all components use the same Crawler / CrawlerContext.\n *\n * 2) Get Actor input from `io.getInput()`, which by default\n * corresponds to Apify's `Actor.getInput()`.\n *\n * 3) (Optional) Validate Actor input\n *\n * 4) Set up router such that requests that reach default route are\n * redirected to labelled routes based on which item from \"routes\" they match.\n *\n * 5) Register all route handlers for you.\n *\n * 6) (Optional) Wrap all route handlers in a wrapper. Use this e.g.\n * if you want to add a field to the context object, or handle errors\n * from a single place.\n *\n * 7) (Optional) Support transformation and filtering of (scraped) entries,\n * configured via Actor input.\n *\n * 8) (Optional) Support Actor metamorphing, configured via Actor input.\n *\n * 9) Apify context (e.g. calling `Actor.getInput`) can be replaced with custom\n * implementation using the `io` option.\n */\nexport const runCrawleeOne = async <\n TType extends CrawlerType,\n T extends CrawleeOneCtx<CrawlerMeta<TType>['context']>\n>(\n args: RunCrawleeOneOptions<TType, T>\n): Promise<void> => {\n const { actorType, actorConfig, crawlerConfigDefaults, crawlerConfigOverrides, onReady } = args;\n\n const { io = apifyIO as any as T['io'] } = actorConfig;\n\n // See docs:\n // - https://docs.apify.com/sdk/js/\n // - https://docs.apify.com/academy/deploying-your-code/inputs-outputs#accepting-input-with-the-apify-sdk\n // - https://docs.apify.com/sdk/js/docs/upgrading/upgrading-to-v3#apify-sdk\n await io.runInContext(\n async () => {\n const actorDefaults: Pick<\n CrawleeOneActorDef<T>,\n 'router' | 'routeHandlerWrappers' | 'createCrawler'\n > = {\n router: Router.create<T['context']>(),\n routeHandlerWrappers: ({ input }) => [logLevelHandlerWrapper(input?.logLevel ?? 'info')],\n createCrawler: ({ router, proxy, input, telemetry }) => {\n const options = createHttpCrawlerOptions({\n input,\n defaults: crawlerConfigDefaults as BasicCrawlerOptions<T['context']>,\n overrides: {\n requestHandler: router,\n proxyConfiguration: proxy,\n // Capture errors in a separate (Apify) Dataset and pass errors to telemetry\n failedRequestHandler: createErrorHandler({\n io,\n reportingDatasetId: input?.errorReportingDatasetId ?? 'REPORTING',\n sendToTelemetry: input?.errorTelemetry ?? true,\n onSendErrorToTelemetry: telemetry?.onSendErrorToTelemetry,\n }),\n ...crawlerConfigOverrides,\n } as BasicCrawlerOptions<T['context']>,\n });\n const CrawlerClass = actorClassByType[actorType] as any;\n return new CrawlerClass(options);\n },\n };\n\n const actor = await createCrawleeOne({\n ...actorConfig,\n io,\n router: actorConfig.router ?? (actorDefaults.router as any),\n routeHandlerWrappers:\n actorConfig.routeHandlerWrappers ?? (actorDefaults.routeHandlerWrappers as any),\n createCrawler: actorConfig.createCrawler ?? (actorDefaults.createCrawler as any),\n });\n\n await onReady?.(actor);\n },\n { statusMessage: 'Crawling finished!' }\n );\n};\n\n/**\n * NOTE: If you want to run a scraper, see {@link runCrawleeOne}. This is lower-level\n * function that should be used only if you want to override the default behaviour of runCrawleeOne.\n *\n * Create opinionated Crawlee crawler that uses router for handling requests.\n *\n * This is a quality-of-life function that does the following for you:\n *\n * 1) Full TypeScript coverage - Ensure all components use the same Crawler / CrawlerContext.\n *\n * 2) Get Actor input from `io.getInput()`, which by default\n * corresponds to Apify's `Actor.getInput()`.\n *\n * 3) (Optional) Validate Actor input\n *\n * 4) Set up router such that requests that reach default route are\n * redirected to labelled routes based on which item from \"routes\" they match.\n *\n * 5) Register all route handlers for you.\n *\n * 6) (Optional) Wrap all route handlers in a wrapper. Use this e.g.\n * if you want to add a field to the context object, or handle errors\n * from a single place.\n *\n * 7) (Optional) Support transformation and filtering of (scraped) entries,\n * configured via Actor input.\n *\n * 8) (Optional) Support Actor metamorphing, configured via Actor input.\n *\n * 9) Apify context (e.g. calling `Actor.getInput`) can be replaced with custom\n * implementation using the `io` option.\n */\nconst createCrawleeOne = async <T extends CrawleeOneCtx>(\n config: PickPartial<CrawleeOneActorDef<T>, 'io'>\n): Promise<CrawleeOneActorInst<T>> => {\n const { io = apifyIO as any as T['io'] } = config;\n\n // Mutable state that is available to the actor hooks\n const state = {};\n\n // Initialize actor inputs\n const input = await createActorInput({ ...config, io }, state);\n\n if (config.validateInput) await config.validateInput(input);\n\n const { logLevel } = (input ?? {}) as LoggingActorInput;\n const log = new Log({ level: logLevel ? logLevelToCrawlee[logLevel] : undefined });\n\n // This is context that is available to options that use initialization function\n const getConfig = () =>\n ({ ...config, input, state, io } satisfies CrawleeOneActorDefWithInput<T>);\n\n // Set up proxy\n const defaultProxy =\n config.proxy == null ? await io.createDefaultProxyConfiguration(input ?? undefined) : undefined;\n const proxy =\n config.proxy == null\n ? defaultProxy\n : isFunc(config.proxy)\n ? await config.proxy(getConfig())\n : config.proxy;\n\n // Run initialization functions\n const router: RouterHandler<T['context']> = isRouter(config.router)\n ? config.router\n : await (config.router as any)(getConfig());\n const routes = isFunc(config.routes) ? await config.routes(getConfig()) : config.routes; // prettier-ignore\n const routeHandlerWrappers = isFunc(config.routeHandlerWrappers) ? await config.routeHandlerWrappers(getConfig()) : config.routeHandlerWrappers; // prettier-ignore\n const telemetry = isFunc(config.telemetry) ? await config.telemetry(getConfig()) : config.telemetry; // prettier-ignore\n\n // NOTE: TypeScript workaround!\n // Issue - We need to initialize functions that themselves may become available via the \"Actor Context\"\n // Solution - We provide the \"Actor Context\" indirectly via getter, so the dependants can use\n // the latest version of the object.\n // To do that, we store the latest version of the context and add fields to it as we go.\n // HOWEVER, TypeScript doesn't like that. So we use a \"factory function\" to declare what type\n // is made avaialble via the getter.\n let actorCtx = {} as any;\n const actorCtxFactory = <Ctx extends Partial<CrawleeOneActorInst<T>>>(newActorCtx: Ctx) => {\n actorCtx = { ...newActorCtx };\n return (): Ctx => ({ ...actorCtx });\n };\n\n const getPreActorNoCrawler = actorCtxFactory({\n io,\n telemetry,\n router,\n routes,\n proxy,\n config,\n input,\n state,\n log,\n handlerCtx: null,\n } satisfies Omit<CrawleeOneActorInst<T>, 'crawler' | 'runCrawler' | 'metamorph' | 'pushData' | 'pushRequests' | 'startUrls'>);\n\n // Create Crawlee crawler\n const crawler = await config.createCrawler(getPreActorNoCrawler());\n const getPreActor = actorCtxFactory({ ...getPreActorNoCrawler(), crawler });\n\n // Create actor (our custom entity)\n const actor: CrawleeOneActorInst<T> = {\n ...getPreActor(),\n runCrawler: createScopedCrawlerRun(getPreActor),\n metamorph: createScopedMetamorph(getPreActor),\n pushData: createScopedPushData(getPreActor),\n pushRequests: createScopedPushRequests(getPreActor),\n startUrls: await getStartUrlsFromInput(getPreActor()),\n };\n\n // Extra data that we make available to the route handlers\n const routerContext: CrawleeOneActorRouterCtx<T> = {\n actor,\n metamorph: actor.metamorph,\n pushData: actor.pushData,\n pushRequests: actor.pushRequests,\n };\n\n // Set up router\n await setupDefaultHandlers<T, CrawleeOneActorRouterCtx<T>>({\n onSetCtx: (ctx) => {\n actorCtx.handlerCtx = ctx;\n },\n io,\n router,\n routeHandlerWrappers,\n routerContext,\n routes,\n input,\n });\n\n // Register labelled handlers\n await registerHandlers<T, CrawleeOneActorRouterCtx<T>>(router, routes, {\n routerContext,\n handlerWrappers: routeHandlerWrappers,\n onSetCtx: (ctx) => {\n actorCtx.handlerCtx = ctx;\n },\n });\n\n // Prepare telemetry\n const isEnabled = await actor.io.isTelemetryEnabled();\n if (isEnabled) {\n await telemetry?.setup(actor);\n }\n\n // Now that the actor is ready, enqueue the URLs right away\n await actor.pushRequests(actor.startUrls as CrawleeRequest[]);\n\n return actor;\n};\n\nconst createActorInput = async <T extends CrawleeOneCtx>(\n config: CrawleeOneActorDef<T>,\n state: Record<string, any>\n) => {\n // Initialize actor inputs\n const rawInput = !config.input\n ? {}\n : isFunc(config.input)\n ? await config.input(config)\n : config.input;\n\n const rawInputDefaults = !config.inputDefaults\n ? {}\n : isFunc(config.inputDefaults)\n ? await config.inputDefaults(config)\n : config.inputDefaults;\n\n // This is equivalent to Apify's `Actor.getInput()` and it is used so that\n // input can be configured not only by scraper developers, but also scraper users,\n // e.g. via Apify platform.\n const inputFromIO =\n config.input && !config.mergeInput ? {} : await config.io.getInput<T['input']>();\n\n // Define whether to take input from the user (AKA from the env vars via `inputFromIO`)\n // or from the deeloper that called this scraper (AKA from the `input` argument).\n // NOTE: Uses both if `config.mergeInput` is truthy\n const inputMergeFn = config.mergeInput\n ? typeof config.mergeInput === 'function'\n ? config.mergeInput\n : ({ defaults, overrides, env }) => ({ ...defaults, ...env, ...overrides })\n : config.input\n ? ({ defaults, overrides }) => ({ ...defaults, ...overrides })\n : ({ defaults, env }) => ({ ...defaults, ...env });\n\n const mergedInput = inputMergeFn({ defaults: rawInputDefaults, env: inputFromIO ?? {}, overrides: rawInput ?? {} }); // prettier-ignore\n\n // Next, we allow to enrich the input we already have by downloading remote inputs\n // or generating it from a user-defined function.\n const input = Object.freeze(await resolveInput<T['input'] | null>(mergedInput, config.io, state));\n\n return input;\n};\n\nconst resolveInput = async <T extends Record<string, any> | null>(\n input: object | null,\n io: CrawleeOneIO,\n state: Record<string, unknown>\n) => {\n const { inputExtendUrl, inputExtendFromFunction } = (input ?? {}) as InputActorInput;\n\n const inputFromUrl = inputExtendUrl ? await gotScraping.get(inputExtendUrl).json<object>() : null;\n const inputFn = genHookFn({ state, input, io }, inputExtendFromFunction, 'inputExtendFromFunction'); // prettier-ignore\n const inputFromFunc = (await inputFn?.()) ?? null;\n const extendedInput = { ...inputFromUrl, ...inputFromFunc, ...input };\n\n return extendedInput as T;\n};\n\n/**\n * Create a function that wraps `crawler.run(requests, runOtions)` with additional\n * features like:\n * - Automatically metamorph into another actor after the run finishes\n */\nconst createScopedCrawlerRun = <T extends CrawleeOneCtx>(\n getActor: () => Omit<\n CrawleeOneActorInst<T>,\n 'runCrawler' | 'metamorph' | 'pushData' | 'pushRequests' | 'startUrls'\n >\n) => {\n const metamorph = createScopedMetamorph(getActor);\n\n const runCrawler: RunCrawler<T['context']> = async (requests, options) => {\n const actor = getActor();\n const {\n requestTransformBefore,\n requestTransformAfter,\n requestFilterBefore,\n requestFilterAfter,\n outputTransformBefore,\n outputTransformAfter,\n outputFilterBefore,\n outputFilterAfter,\n outputCacheStoreId,\n outputCacheActionOnResult,\n } = (actor.input ?? {}) as OutputActorInput & RequestActorInput;\n\n // Clear cache if it was set from the input\n if (outputCacheStoreId && outputCacheActionOnResult === 'overwrite') {\n const store = await actor.io.openKeyValueStore(outputCacheStoreId);\n await store.drop();\n }\n\n await genHookFn(actor, outputTransformBefore, 'outputTransformBefore')?.(); // prettier-ignore\n await genHookFn(actor, outputFilterBefore, 'outputFilterBefore')?.(); // prettier-ignore\n await genHookFn(actor, requestTransformBefore, 'requestTransformBefore')?.(); // prettier-ignore\n await genHookFn(actor, requestFilterBefore, 'requestFilterBefore')?.(); // prettier-ignore\n\n const runRes = await actor.crawler.run(requests, options);\n\n await genHookFn(actor, outputTransformAfter, 'outputTransformAfter')?.(); // prettier-ignore\n await genHookFn(actor, outputFilterAfter, 'outputFilterAfter')?.(); // prettier-ignore\n await genHookFn(actor, requestTransformAfter, 'requestTransformAfter')?.(); // prettier-ignore\n await genHookFn(actor, requestFilterAfter, 'requestFilterAfter')?.(); // prettier-ignore\n\n // Trigger metamorph if it was set from the input\n await metamorph();\n\n return runRes;\n };\n\n return runCrawler;\n};\n\n/** Create a function that triggers metamorph, using Actor's inputs as defaults. */\nconst createScopedMetamorph = <T extends CrawleeOneCtx>(\n getActor: () => Pick<CrawleeOneActorInst<T>, 'input' | 'io'>\n) => {\n // Trigger metamorph if it was set from the input\n const metamorph: Metamorph = async (overrides?: MetamorphActorInput) => {\n const actor = getActor();\n const {\n metamorphActorId,\n metamorphActorBuild,\n metamorphActorInput,\n } = defaults({}, overrides, actor.input ?? {}); // prettier-ignore\n\n if (!metamorphActorId) return;\n\n await actor.io.triggerDownstreamCrawler(metamorphActorId, metamorphActorInput, {\n build: metamorphActorBuild,\n });\n };\n\n return metamorph;\n};\n\n/** pushData wrapper that pre-populates options based on actor input */\nconst createScopedPushData = <T extends CrawleeOneCtx>(\n getActor: () => Pick<CrawleeOneActorInst<T>, 'input' | 'state' | 'io' | 'log' | 'handlerCtx'>\n) => {\n const scopedPushData: CrawleeOneActorInst<T>['pushData'] = async (entries, options) => {\n const actor = getActor();\n const handlerCtx = actor.handlerCtx;\n if (!handlerCtx) {\n throw Error(\n 'Function pushData scoped to crawler instance was called outside of the crawling context'\n );\n }\n\n const {\n includePersonalData,\n requestQueueId,\n outputMaxEntries,\n outputTransform,\n outputFilter,\n outputDatasetId,\n outputPickFields,\n outputRenameFields,\n outputCacheStoreId,\n outputCachePrimaryKeys,\n outputCacheActionOnResult,\n } = (actor.input ?? {}) as OutputActorInput & PrivacyActorInput & RequestActorInput;\n\n const transformFn = genHookFn(actor, outputTransform, 'outputTransform');\n const filterFn = genHookFn(actor, outputFilter, 'outputFilter');\n\n const mergedOptions = {\n io: actor.io,\n log: actor.log,\n showPrivate: includePersonalData,\n maxCount: outputMaxEntries,\n pickKeys: outputPickFields,\n remapKeys: outputRenameFields,\n transform: transformFn ?? undefined,\n filter: filterFn ?? undefined,\n datasetId: outputDatasetId,\n requestQueueId,\n cacheStoreId: outputCacheStoreId,\n cachePrimaryKeys: outputCachePrimaryKeys,\n cacheActionOnResult: outputCacheActionOnResult,\n ...options,\n } satisfies PushDataOptions<object>;\n\n return pushData(handlerCtx, entries, mergedOptions);\n };\n\n return scopedPushData;\n};\n\n/** pushRequests wrapper that pre-populates options based on actor input */\nconst createScopedPushRequests = <T extends CrawleeOneCtx>(\n getActor: () => Pick<CrawleeOneActorInst<T>, 'input' | 'state' | 'io' | 'log'>\n) => {\n const scopedPushRequest: CrawleeOneActorInst<T>['pushRequests'] = async (entries, options) => {\n const actor = getActor();\n const { requestQueueId, requestMaxEntries, requestTransform, requestFilter } = (actor.input ??\n {}) as RequestActorInput;\n\n const transformFn = genHookFn(actor, requestTransform, 'requestTransform');\n const filterFn = genHookFn(actor, requestFilter, 'requestFilter');\n\n const mergedOptions = {\n io: actor.io,\n log: actor.log,\n maxCount: requestMaxEntries,\n transform: transformFn ?? undefined,\n filter: filterFn ?? undefined,\n requestQueueId,\n ...options,\n } satisfies PushRequestsOptions<any>;\n\n return pushRequests<any>(entries, mergedOptions);\n };\n\n return scopedPushRequest;\n};\n\n/** Given the actor input, create common crawler options. */\nexport const createHttpCrawlerOptions = <\n T extends CrawleeOneCtx,\n TOpts extends BasicCrawlerOptions<T['context']>\n>({\n input,\n defaults,\n overrides,\n}: {\n /** Actor input */\n input: T['input'] | null;\n /**\n * Default config options set by us. These may be overriden\n * by values from actor input (set by user).\n */\n defaults?: TOpts;\n /**\n * These config options will overwrite both the default and user\n * options. This is useful for hard-setting values e.g. in tests.\n */\n overrides?: TOpts;\n}) => {\n const pickCrawlerInputFields = <T extends CrawlerConfigActorInput>(config: T) =>\n pick(config, Object.keys(crawlerInput));\n\n return {\n // ----- 1. DEFAULTS -----\n ...omitBy(defaults ?? ({} as TOpts), (field) => field === undefined),\n // ----- 2. CONFIG FROM INPUT -----\n ...omitBy(pickCrawlerInputFields(input ?? {}), (field) => field === undefined),\n // ----- 3. OVERRIDES - E.G. TEST CONFIG -----\n ...omitBy(overrides ?? ({} as TOpts), (field) => field === undefined),\n } satisfies Partial<TOpts>;\n};\n\nconst getStartUrlsFromInput = async <T extends CrawleeOneCtx>(\n actor: Pick<CrawleeOneActorInst<T>, 'input' | 'state' | 'io' | 'log'>\n) => {\n const { startUrls, startUrlsFromDataset, startUrlsFromFunction } = (actor.input ??\n {}) as StartUrlsActorInput;\n\n const urlsAgg = [...(startUrls ?? [])];\n\n if (startUrlsFromDataset) {\n actor.log.debug(`Loading start URLs from Dataset ${startUrlsFromDataset}`);\n const [datasetId, field] = startUrlsFromDataset.split('#');\n const urlsFromDataset = await getColumnFromDataset<any>(datasetId, field, { io: actor.io });\n urlsAgg.push(...urlsFromDataset);\n }\n\n if (startUrlsFromFunction) {\n actor.log.debug(`Loading start URLs from function`);\n const urlsFromFn =\n (await genHookFn(actor, startUrlsFromFunction, 'startUrlsFromFunction')?.()) ?? [];\n if (!Array.isArray(urlsFromFn)) {\n throw Error(\n `Hook \"startUrlsFromFunction\" must return an array of URLs or Requests, got ${urlsFromFn}`\n );\n }\n urlsAgg.push(...urlsFromFn);\n }\n\n return urlsAgg;\n};\n"]}
1
+ {"version":3,"file":"actor.js","sourceRoot":"","sources":["../../../../src/lib/actor/actor.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n RouterHandler,\n BasicCrawlerOptions,\n Router,\n Log,\n LogLevel,\n Request as CrawleeRequest,\n} from 'crawlee';\nimport { omitBy, pick, defaults } from 'lodash';\nimport { gotScraping } from 'got-scraping';\n\nimport type { CrawlerMeta, CrawlerType } from '../../types';\nimport { actorClassByType } from '../../constants';\nimport type { MaybePromise, PickPartial } from '../../utils/types';\nimport { createErrorHandler } from '../error/errorHandler';\nimport { type PushDataOptions, itemCacheKey, pushData } from '../io/pushData';\nimport { getColumnFromDataset } from '../io/dataset';\nimport { PushRequestsOptions, pushRequests } from '../io/pushRequests';\nimport type { CrawleeOneIO } from '../integrations/types';\nimport { apifyIO } from '../integrations/apify';\nimport { registerHandlers, setupDefaultHandlers } from '../router/router';\nimport {\n CrawlerConfigActorInput,\n OutputActorInput,\n MetamorphActorInput,\n PrivacyActorInput,\n crawlerInput,\n StartUrlsActorInput,\n InputActorInput,\n RequestActorInput,\n LoggingActorInput,\n} from '../input';\nimport { logLevelHandlerWrapper, logLevelToCrawlee } from '../log';\nimport type {\n CrawleeOneActorInst,\n CrawleeOneActorDef,\n CrawleeOneHookCtx,\n CrawleeOneActorRouterCtx,\n Metamorph,\n RunCrawler,\n CrawleeOneCtx,\n CrawleeOneHookFn,\n CrawleeOneActorDefWithInput,\n} from './types';\n\nconst isRouter = (r: any): r is RouterHandler<any> => {\n return !!((r as RouterHandler)?.addHandler && (r as RouterHandler)?.addDefaultHandler);\n};\n\nconst isFunc = (f: any): f is (...args: any[]) => any => {\n return typeof f === 'function';\n};\n\n/** Run a function that was defined as a string via Actor input */\nconst genHookFn = <\n TArgs extends any[] = [],\n TReturn = unknown,\n T extends CrawleeOneCtx = CrawleeOneCtx\n>(\n actor: Pick<CrawleeOneActorInst<T>, 'input' | 'state' | 'io'>,\n fnOrStr: string | CrawleeOneHookFn<TArgs, TReturn, T> | undefined | null,\n funcName: string\n) => {\n if (!fnOrStr) return null;\n\n const hookCtx = {\n io: actor.io,\n input: actor.input,\n state: actor.state,\n itemCacheKey,\n sendRequest: gotScraping,\n } satisfies CrawleeOneHookCtx<T>;\n\n const hookFn = (typeof fnOrStr === 'function'\n ? fnOrStr\n : eval(fnOrStr) as unknown\n ) // prettier-ignore\n if (!hookFn) return null;\n if (typeof hookFn !== 'function') {\n throw Error(`Hook \"${funcName}\" is not a function, got ${typeof hookFn} instead: ${hookFn}`);\n }\n\n // NOTE: If eval didn't return func, but something else, we want to let the code fail\n //\n return async (...args: TArgs) =>\n (hookFn as CrawleeOneHookFn<TArgs, TReturn, T>)(...args, hookCtx);\n};\n\n/**\n * Options available when creating default configuration for an opinionated Crawlee actor,\n * which is then run within Apify's `Actor.main()` context.\n *\n * Apify context can be replaced with custom implementation using the `actorConfig.io` option.\n *\n * Read more about what this actor does at {@link createCrawleeOne}.\n */\nexport interface RunCrawleeOneOptions<\n TType extends CrawlerType,\n T extends CrawleeOneCtx<CrawlerMeta<TType>['context']>\n> {\n /** String idetifying the actor class, e.g. `'cheerio'` */\n actorType: TType;\n actorName?: string;\n /** Config passed to the {@link createCrawleeOne} */\n actorConfig: PickPartial<CrawleeOneActorDef<T>, 'router' | 'createCrawler' | 'io' | 'telemetry'>;\n /**\n * If using default `createCrawler` implementation, these are crawler options\n * that may be overriden by user input.\n */\n crawlerConfigDefaults?: Omit<CrawlerMeta<TType>['options'], 'requestHandler'>;\n /**\n * If using default `createCrawler` implementation, these are crawler options\n * that will override user input.\n *\n * This is useful for testing env.\n */\n crawlerConfigOverrides?: Omit<CrawlerMeta<TType>['options'], 'requestHandler'>;\n /**\n * Callback with the created actor. The callback is called within\n * the `Actor.main()` context.\n */\n onReady?: (actor: CrawleeOneActorInst<T>) => MaybePromise<void>;\n}\n\n/**\n * Create opinionated Crawlee crawler that uses, and run it within Apify's `Actor.main()` context.\n *\n * Apify context can be replaced with custom implementation using the `actorConfig.io` option.\n *\n * This function does the following for you:\n *\n * 1) Full TypeScript coverage - Ensure all components use the same Crawler / CrawlerContext.\n *\n * 2) Get Actor input from `io.getInput()`, which by default\n * corresponds to Apify's `Actor.getInput()`.\n *\n * 3) (Optional) Validate Actor input\n *\n * 4) Set up router such that requests that reach default route are\n * redirected to labelled routes based on which item from \"routes\" they match.\n *\n * 5) Register all route handlers for you.\n *\n * 6) (Optional) Wrap all route handlers in a wrapper. Use this e.g.\n * if you want to add a field to the context object, or handle errors\n * from a single place.\n *\n * 7) (Optional) Support transformation and filtering of (scraped) entries,\n * configured via Actor input.\n *\n * 8) (Optional) Support Actor metamorphing, configured via Actor input.\n *\n * 9) Apify context (e.g. calling `Actor.getInput`) can be replaced with custom\n * implementation using the `io` option.\n */\nexport const runCrawleeOne = async <\n TType extends CrawlerType,\n T extends CrawleeOneCtx<CrawlerMeta<TType>['context']>\n>(\n args: RunCrawleeOneOptions<TType, T>\n): Promise<void> => {\n const { actorType, actorConfig, crawlerConfigDefaults, crawlerConfigOverrides, onReady } = args;\n\n const { io = apifyIO as any as T['io'] } = actorConfig;\n\n // See docs:\n // - https://docs.apify.com/sdk/js/\n // - https://docs.apify.com/academy/deploying-your-code/inputs-outputs#accepting-input-with-the-apify-sdk\n // - https://docs.apify.com/sdk/js/docs/upgrading/upgrading-to-v3#apify-sdk\n await io.runInContext(\n async () => {\n const actorDefaults: Pick<\n CrawleeOneActorDef<T>,\n 'router' | 'routeHandlerWrappers' | 'createCrawler'\n > = {\n router: Router.create<T['context']>(),\n routeHandlerWrappers: ({ input }) => [logLevelHandlerWrapper(input?.logLevel ?? 'info')],\n createCrawler: ({ router, proxy, input, telemetry }) => {\n const options = createHttpCrawlerOptions({\n input,\n defaults: crawlerConfigDefaults as BasicCrawlerOptions<T['context']>,\n overrides: {\n requestHandler: router,\n proxyConfiguration: proxy,\n // Capture errors in a separate (Apify) Dataset and pass errors to telemetry\n failedRequestHandler: createErrorHandler({\n io,\n reportingDatasetId: input?.errorReportingDatasetId ?? 'REPORTING',\n sendToTelemetry: input?.errorTelemetry ?? true,\n onSendErrorToTelemetry: telemetry?.onSendErrorToTelemetry,\n }),\n ...crawlerConfigOverrides,\n } as BasicCrawlerOptions<T['context']>,\n });\n const CrawlerClass = actorClassByType[actorType] as any;\n return new CrawlerClass(options);\n },\n };\n\n const actor = await createCrawleeOne({\n ...actorConfig,\n io,\n router: actorConfig.router ?? (actorDefaults.router as any),\n routeHandlerWrappers:\n actorConfig.routeHandlerWrappers ?? (actorDefaults.routeHandlerWrappers as any),\n createCrawler: actorConfig.createCrawler ?? (actorDefaults.createCrawler as any),\n });\n\n await onReady?.(actor);\n },\n { statusMessage: 'Crawling finished!' }\n );\n};\n\n/**\n * NOTE: If you want to run a scraper, see {@link runCrawleeOne}. This is lower-level\n * function that should be used only if you want to override the default behaviour of runCrawleeOne.\n *\n * Create opinionated Crawlee crawler that uses router for handling requests.\n *\n * This is a quality-of-life function that does the following for you:\n *\n * 1) Full TypeScript coverage - Ensure all components use the same Crawler / CrawlerContext.\n *\n * 2) Get Actor input from `io.getInput()`, which by default\n * corresponds to Apify's `Actor.getInput()`.\n *\n * 3) (Optional) Validate Actor input\n *\n * 4) Set up router such that requests that reach default route are\n * redirected to labelled routes based on which item from \"routes\" they match.\n *\n * 5) Register all route handlers for you.\n *\n * 6) (Optional) Wrap all route handlers in a wrapper. Use this e.g.\n * if you want to add a field to the context object, or handle errors\n * from a single place.\n *\n * 7) (Optional) Support transformation and filtering of (scraped) entries,\n * configured via Actor input.\n *\n * 8) (Optional) Support Actor metamorphing, configured via Actor input.\n *\n * 9) Apify context (e.g. calling `Actor.getInput`) can be replaced with custom\n * implementation using the `io` option.\n */\nconst createCrawleeOne = async <T extends CrawleeOneCtx>(\n config: PickPartial<CrawleeOneActorDef<T>, 'io'>\n): Promise<CrawleeOneActorInst<T>> => {\n const { io = apifyIO as any as T['io'] } = config;\n\n // Mutable state that is available to the actor hooks\n const state = {};\n\n // Initialize actor inputs\n const input = await createActorInput({ ...config, io }, state);\n\n if (config.validateInput) await config.validateInput(input);\n\n const { logLevel } = (input ?? {}) as LoggingActorInput;\n const log = new Log({ level: logLevel ? logLevelToCrawlee[logLevel] : LogLevel.INFO });\n\n // This is context that is available to options that use initialization function\n const getConfig = () =>\n ({ ...config, input, state, io } satisfies CrawleeOneActorDefWithInput<T>);\n\n // Set up proxy\n const defaultProxy =\n config.proxy == null ? await io.createDefaultProxyConfiguration(input ?? undefined) : undefined;\n const proxy =\n config.proxy == null\n ? defaultProxy\n : isFunc(config.proxy)\n ? await config.proxy(getConfig())\n : config.proxy;\n\n // Run initialization functions\n const router: RouterHandler<T['context']> = isRouter(config.router)\n ? config.router\n : await (config.router as any)(getConfig());\n const routes = isFunc(config.routes) ? await config.routes(getConfig()) : config.routes; // prettier-ignore\n const routeHandlerWrappers = isFunc(config.routeHandlerWrappers) ? await config.routeHandlerWrappers(getConfig()) : config.routeHandlerWrappers; // prettier-ignore\n const telemetry = isFunc(config.telemetry) ? await config.telemetry(getConfig()) : config.telemetry; // prettier-ignore\n\n // NOTE: TypeScript workaround!\n // Issue - We need to initialize functions that themselves may become available via the \"Actor Context\"\n // Solution - We provide the \"Actor Context\" indirectly via getter, so the dependants can use\n // the latest version of the object.\n // To do that, we store the latest version of the context and add fields to it as we go.\n // HOWEVER, TypeScript doesn't like that. So we use a \"factory function\" to declare what type\n // is made avaialble via the getter.\n let actorCtx = {} as any;\n const actorCtxFactory = <Ctx extends Partial<CrawleeOneActorInst<T>>>(newActorCtx: Ctx) => {\n actorCtx = { ...newActorCtx };\n return (): Ctx => ({ ...actorCtx });\n };\n\n const getPreActorNoCrawler = actorCtxFactory({\n io,\n telemetry,\n router,\n routes,\n proxy,\n config,\n input,\n state,\n log,\n handlerCtx: null,\n } satisfies Omit<CrawleeOneActorInst<T>, 'crawler' | 'runCrawler' | 'metamorph' | 'pushData' | 'pushRequests' | 'startUrls'>);\n\n // Create Crawlee crawler\n const crawler = await config.createCrawler(getPreActorNoCrawler());\n const getPreActor = actorCtxFactory({ ...getPreActorNoCrawler(), crawler });\n\n // Create actor (our custom entity)\n const actor: CrawleeOneActorInst<T> = {\n ...getPreActor(),\n runCrawler: createScopedCrawlerRun(getPreActor),\n metamorph: createScopedMetamorph(getPreActor),\n pushData: createScopedPushData(getPreActor),\n pushRequests: createScopedPushRequests(getPreActor),\n startUrls: await getStartUrlsFromInput(getPreActor()),\n };\n\n // Extra data that we make available to the route handlers\n const routerContext: CrawleeOneActorRouterCtx<T> = {\n actor,\n metamorph: actor.metamorph,\n pushData: actor.pushData,\n pushRequests: actor.pushRequests,\n };\n\n // Set up router\n await setupDefaultHandlers<T, CrawleeOneActorRouterCtx<T>>({\n onSetCtx: (ctx) => {\n actorCtx.handlerCtx = ctx;\n },\n io,\n router,\n routeHandlerWrappers,\n routerContext,\n routes,\n input,\n });\n\n // Register labelled handlers\n await registerHandlers<T, CrawleeOneActorRouterCtx<T>>(router, routes, {\n routerContext,\n handlerWrappers: routeHandlerWrappers,\n onSetCtx: (ctx) => {\n actorCtx.handlerCtx = ctx;\n },\n });\n\n // Prepare telemetry\n const isEnabled = await actor.io.isTelemetryEnabled();\n if (isEnabled) {\n await telemetry?.setup(actor);\n }\n\n // Now that the actor is ready, enqueue the URLs right away\n await actor.pushRequests(actor.startUrls as CrawleeRequest[]);\n\n return actor;\n};\n\nconst createActorInput = async <T extends CrawleeOneCtx>(\n config: CrawleeOneActorDef<T>,\n state: Record<string, any>\n) => {\n // Initialize actor inputs\n const rawInput = !config.input\n ? {}\n : isFunc(config.input)\n ? await config.input(config)\n : config.input;\n\n const rawInputDefaults = !config.inputDefaults\n ? {}\n : isFunc(config.inputDefaults)\n ? await config.inputDefaults(config)\n : config.inputDefaults;\n\n // This is equivalent to Apify's `Actor.getInput()` and it is used so that\n // input can be configured not only by scraper developers, but also scraper users,\n // e.g. via Apify platform.\n const inputFromIO =\n config.input && !config.mergeInput ? {} : await config.io.getInput<T['input']>();\n\n // Define whether to take input from the user (AKA from the env vars via `inputFromIO`)\n // or from the deeloper that called this scraper (AKA from the `input` argument).\n // NOTE: Uses both if `config.mergeInput` is truthy\n const inputMergeFn = config.mergeInput\n ? typeof config.mergeInput === 'function'\n ? config.mergeInput\n : ({ defaults, overrides, env }: any) => ({ ...defaults, ...env, ...overrides })\n : config.input\n ? ({ defaults, overrides }: any) => ({ ...defaults, ...overrides })\n : ({ defaults, env }: any) => ({ ...defaults, ...env });\n\n const mergedInput = inputMergeFn({ defaults: rawInputDefaults, env: inputFromIO ?? {}, overrides: rawInput ?? {} }); // prettier-ignore\n\n // Next, we allow to enrich the input we already have by downloading remote inputs\n // or generating it from a user-defined function.\n const input = Object.freeze(await resolveInput<T['input'] | null>(mergedInput, config.io, state));\n\n return input;\n};\n\nconst resolveInput = async <T extends Record<string, any> | null>(\n input: object | null,\n io: CrawleeOneIO,\n state: Record<string, unknown>\n) => {\n const { inputExtendUrl, inputExtendFromFunction } = (input ?? {}) as InputActorInput;\n\n const inputFromUrl = inputExtendUrl ? await gotScraping.get(inputExtendUrl).json<object>() : null;\n const inputFn = genHookFn({ state, input, io }, inputExtendFromFunction, 'inputExtendFromFunction'); // prettier-ignore\n const inputFromFunc = (await inputFn?.()) ?? null;\n const extendedInput = { ...inputFromUrl, ...inputFromFunc, ...input };\n\n return extendedInput as T;\n};\n\n/**\n * Create a function that wraps `crawler.run(requests, runOtions)` with additional\n * features like:\n * - Automatically metamorph into another actor after the run finishes\n */\nconst createScopedCrawlerRun = <T extends CrawleeOneCtx>(\n getActor: () => Omit<\n CrawleeOneActorInst<T>,\n 'runCrawler' | 'metamorph' | 'pushData' | 'pushRequests' | 'startUrls'\n >\n) => {\n const metamorph = createScopedMetamorph(getActor);\n\n const runCrawler: RunCrawler<T['context']> = async (requests, options) => {\n const actor = getActor();\n const {\n requestTransformBefore,\n requestTransformAfter,\n requestFilterBefore,\n requestFilterAfter,\n outputTransformBefore,\n outputTransformAfter,\n outputFilterBefore,\n outputFilterAfter,\n outputCacheStoreId,\n outputCacheActionOnResult,\n } = (actor.input ?? {}) as OutputActorInput & RequestActorInput;\n\n // Clear cache if it was set from the input\n if (outputCacheStoreId && outputCacheActionOnResult === 'overwrite') {\n const store = await actor.io.openKeyValueStore(outputCacheStoreId);\n await store.clear();\n }\n\n await genHookFn(actor, outputTransformBefore, 'outputTransformBefore')?.(); // prettier-ignore\n await genHookFn(actor, outputFilterBefore, 'outputFilterBefore')?.(); // prettier-ignore\n await genHookFn(actor, requestTransformBefore, 'requestTransformBefore')?.(); // prettier-ignore\n await genHookFn(actor, requestFilterBefore, 'requestFilterBefore')?.(); // prettier-ignore\n\n const runRes = await actor.crawler.run(requests, options);\n\n await genHookFn(actor, outputTransformAfter, 'outputTransformAfter')?.(); // prettier-ignore\n await genHookFn(actor, outputFilterAfter, 'outputFilterAfter')?.(); // prettier-ignore\n await genHookFn(actor, requestTransformAfter, 'requestTransformAfter')?.(); // prettier-ignore\n await genHookFn(actor, requestFilterAfter, 'requestFilterAfter')?.(); // prettier-ignore\n\n // Trigger metamorph if it was set from the input\n await metamorph();\n\n return runRes;\n };\n\n return runCrawler;\n};\n\n/** Create a function that triggers metamorph, using Actor's inputs as defaults. */\nconst createScopedMetamorph = <T extends CrawleeOneCtx>(\n getActor: () => Pick<CrawleeOneActorInst<T>, 'input' | 'io'>\n) => {\n // Trigger metamorph if it was set from the input\n const metamorph: Metamorph = async (overrides?: MetamorphActorInput) => {\n const actor = getActor();\n const {\n metamorphActorId,\n metamorphActorBuild,\n metamorphActorInput,\n } = defaults({}, overrides, actor.input ?? {}); // prettier-ignore\n\n if (!metamorphActorId) return;\n\n await actor.io.triggerDownstreamCrawler(metamorphActorId, metamorphActorInput, {\n build: metamorphActorBuild,\n });\n };\n\n return metamorph;\n};\n\n/** pushData wrapper that pre-populates options based on actor input */\nconst createScopedPushData = <T extends CrawleeOneCtx>(\n getActor: () => Pick<CrawleeOneActorInst<T>, 'input' | 'state' | 'io' | 'log' | 'handlerCtx'>\n) => {\n const scopedPushData: CrawleeOneActorInst<T>['pushData'] = async (entries, options) => {\n const actor = getActor();\n const handlerCtx = actor.handlerCtx;\n if (!handlerCtx) {\n throw Error(\n 'Function pushData scoped to crawler instance was called outside of the crawling context'\n );\n }\n\n const {\n includePersonalData,\n requestQueueId,\n outputMaxEntries,\n outputTransform,\n outputFilter,\n outputDatasetId,\n outputPickFields,\n outputRenameFields,\n outputCacheStoreId,\n outputCachePrimaryKeys,\n outputCacheActionOnResult,\n } = (actor.input ?? {}) as OutputActorInput & PrivacyActorInput & RequestActorInput;\n\n const transformFn = genHookFn(actor, outputTransform, 'outputTransform');\n const filterFn = genHookFn(actor, outputFilter, 'outputFilter');\n\n const mergedOptions = {\n io: actor.io,\n log: actor.log,\n showPrivate: includePersonalData,\n maxCount: outputMaxEntries,\n pickKeys: outputPickFields,\n remapKeys: outputRenameFields,\n transform: transformFn ?? undefined,\n filter: filterFn ?? undefined,\n datasetId: outputDatasetId,\n requestQueueId,\n cacheStoreId: outputCacheStoreId,\n cachePrimaryKeys: outputCachePrimaryKeys,\n cacheActionOnResult: outputCacheActionOnResult,\n ...options,\n } satisfies PushDataOptions<object>;\n\n return pushData(handlerCtx, entries, mergedOptions);\n };\n\n return scopedPushData;\n};\n\n/** pushRequests wrapper that pre-populates options based on actor input */\nconst createScopedPushRequests = <T extends CrawleeOneCtx>(\n getActor: () => Pick<CrawleeOneActorInst<T>, 'input' | 'state' | 'io' | 'log'>\n) => {\n const scopedPushRequest: CrawleeOneActorInst<T>['pushRequests'] = async (entries, options) => {\n const actor = getActor();\n const { requestQueueId, requestMaxEntries, requestTransform, requestFilter } = (actor.input ??\n {}) as RequestActorInput;\n\n const transformFn = genHookFn(actor, requestTransform, 'requestTransform');\n const filterFn = genHookFn(actor, requestFilter, 'requestFilter');\n\n const mergedOptions = {\n io: actor.io,\n log: actor.log,\n maxCount: requestMaxEntries,\n transform: transformFn ?? undefined,\n filter: filterFn ?? undefined,\n requestQueueId,\n ...options,\n } satisfies PushRequestsOptions<any>;\n\n return pushRequests<any>(entries, mergedOptions);\n };\n\n return scopedPushRequest;\n};\n\n/** Given the actor input, create common crawler options. */\nexport const createHttpCrawlerOptions = <\n T extends CrawleeOneCtx,\n TOpts extends BasicCrawlerOptions<T['context']>\n>({\n input,\n defaults,\n overrides,\n}: {\n /** Actor input */\n input: T['input'] | null;\n /**\n * Default config options set by us. These may be overriden\n * by values from actor input (set by user).\n */\n defaults?: TOpts;\n /**\n * These config options will overwrite both the default and user\n * options. This is useful for hard-setting values e.g. in tests.\n */\n overrides?: TOpts;\n}) => {\n const pickCrawlerInputFields = <T extends CrawlerConfigActorInput>(config: T) =>\n pick(config, Object.keys(crawlerInput));\n\n return {\n // ----- 1. DEFAULTS -----\n ...omitBy(defaults ?? ({} as TOpts), (field) => field === undefined),\n // ----- 2. CONFIG FROM INPUT -----\n ...omitBy(pickCrawlerInputFields(input ?? {}), (field) => field === undefined),\n // ----- 3. OVERRIDES - E.G. TEST CONFIG -----\n ...omitBy(overrides ?? ({} as TOpts), (field) => field === undefined),\n } satisfies Partial<TOpts>;\n};\n\nconst getStartUrlsFromInput = async <T extends CrawleeOneCtx>(\n actor: Pick<CrawleeOneActorInst<T>, 'input' | 'state' | 'io' | 'log'>\n) => {\n const { startUrls, startUrlsFromDataset, startUrlsFromFunction } = (actor.input ??\n {}) as StartUrlsActorInput;\n\n const urlsAgg = [...(startUrls ?? [])];\n\n if (startUrlsFromDataset) {\n actor.log.debug(`Loading start URLs from Dataset ${startUrlsFromDataset}`);\n const [datasetId, field] = startUrlsFromDataset.split('#');\n const urlsFromDataset = await getColumnFromDataset<any>(datasetId, field, { io: actor.io });\n urlsAgg.push(...urlsFromDataset);\n }\n\n if (startUrlsFromFunction) {\n actor.log.debug(`Loading start URLs from function`);\n const urlsFromFn =\n (await genHookFn(actor, startUrlsFromFunction, 'startUrlsFromFunction')?.()) ?? [];\n if (!Array.isArray(urlsFromFn)) {\n throw Error(\n `Hook \"startUrlsFromFunction\" must return an array of URLs or Requests, got ${urlsFromFn}`\n );\n }\n urlsAgg.push(...urlsFromFn);\n }\n\n return urlsAgg;\n};\n"]}
@@ -37,11 +37,9 @@ export declare const captureErrorWrapper: <TIO extends CrawleeOneIO<object, obje
37
37
  * })
38
38
  * );
39
39
  */
40
- export declare const captureErrorRouteHandler: <T extends CrawleeOneCtx<import("crawlee").CrawlingContext<import("crawlee").BasicCrawler<BasicCrawlingContext<import("crawlee").Dictionary>> | import("crawlee").PuppeteerCrawler | import("crawlee").PlaywrightCrawler | import("crawlee").JSDOMCrawler | import("crawlee").CheerioCrawler | import("crawlee").HttpCrawler<import("crawlee").InternalHttpCrawlingContext<any, any, import("crawlee").HttpCrawler<any>>>, import("crawlee").Dictionary>, string, Record<string, any>, CrawleeOneIO<object, object, object>, import("../..").CrawleeOneTelemetry<any, any>>>(handler: (ctx: Omit<T["context"] & {}, "request"> & {
41
- request: import("crawlee").Request<import("crawlee").Dictionary>;
42
- } & {
40
+ export declare const captureErrorRouteHandler: <T extends CrawleeOneCtx<import("crawlee").CrawlingContext<import("crawlee").JSDOMCrawler | import("crawlee").CheerioCrawler | import("crawlee").PlaywrightCrawler | import("crawlee").PuppeteerCrawler | import("crawlee").BasicCrawler<BasicCrawlingContext<import("crawlee").Dictionary>> | import("crawlee").HttpCrawler<import("crawlee").InternalHttpCrawlingContext<any, any, import("crawlee").HttpCrawler<any>>>, import("crawlee").Dictionary>, string, Record<string, any>, CrawleeOneIO<object, object, object>, import("../..").CrawleeOneTelemetry<any, any>>>(handler: (ctx: CrawleeOneRouteCtx<T> & {
43
41
  captureError: CaptureError;
44
- }) => MaybePromise<void>, options: CrawleeOneErrorHandlerOptions<T["io"]>) => CrawleeOneRouteHandler<T, CrawleeOneRouteCtx<T>>;
42
+ }) => MaybePromise<void>, options: CrawleeOneErrorHandlerOptions<T['io']>) => CrawleeOneRouteHandler<T, CrawleeOneRouteCtx<T>>;
45
43
  export declare const basicCaptureErrorRouteHandler: <T extends CrawleeOneCtx<BasicCrawlingContext<import("crawlee").Dictionary>, string, Record<string, any>, CrawleeOneIO<object, object, object>, import("../..").CrawleeOneTelemetry<any, any>>>(handler: (ctx: Omit<T["context"] & {}, "request"> & {
46
44
  request: import("crawlee").Request<import("crawlee").Dictionary>;
47
45
  } & {
@@ -80,7 +78,7 @@ export declare const puppeteerCaptureErrorRouteHandler: <T extends CrawleeOneCtx
80
78
  *
81
79
  * By default, error reports are saved to Apify Dataset.
82
80
  */
83
- export declare const createErrorHandler: <T extends CrawleeOneCtx<import("crawlee").CrawlingContext<import("crawlee").BasicCrawler<BasicCrawlingContext<import("crawlee").Dictionary>> | import("crawlee").PuppeteerCrawler | import("crawlee").PlaywrightCrawler | import("crawlee").JSDOMCrawler | import("crawlee").CheerioCrawler | import("crawlee").HttpCrawler<import("crawlee").InternalHttpCrawlingContext<any, any, import("crawlee").HttpCrawler<any>>>, import("crawlee").Dictionary>, string, Record<string, any>, CrawleeOneIO<object, object, object>, import("../..").CrawleeOneTelemetry<any, any>>>(options: CrawleeOneErrorHandlerOptions<T["io"]> & {
84
- sendToTelemetry?: boolean | undefined;
85
- onSendErrorToTelemetry?: T["telemetry"]["onSendErrorToTelemetry"] | undefined;
86
- }) => ErrorHandler<T["context"]>;
81
+ export declare const createErrorHandler: <T extends CrawleeOneCtx<import("crawlee").CrawlingContext<import("crawlee").JSDOMCrawler | import("crawlee").CheerioCrawler | import("crawlee").PlaywrightCrawler | import("crawlee").PuppeteerCrawler | import("crawlee").BasicCrawler<BasicCrawlingContext<import("crawlee").Dictionary>> | import("crawlee").HttpCrawler<import("crawlee").InternalHttpCrawlingContext<any, any, import("crawlee").HttpCrawler<any>>>, import("crawlee").Dictionary>, string, Record<string, any>, CrawleeOneIO<object, object, object>, import("../..").CrawleeOneTelemetry<any, any>>>(options: CrawleeOneErrorHandlerOptions<T['io']> & {
82
+ sendToTelemetry?: boolean;
83
+ onSendErrorToTelemetry?: T['telemetry']['onSendErrorToTelemetry'];
84
+ }) => ErrorHandler<T['context']>;
@@ -130,11 +130,11 @@ const createErrorHandler = (options) => {
130
130
  return (ctx, error) => __awaiter(void 0, void 0, void 0, function* () {
131
131
  const { request, log, page } = ctx;
132
132
  const url = request.loadedUrl || request.url;
133
- (0, exports.captureError)({ error, url, log, page: page }, Object.assign(Object.assign({}, optionsWithDefaults), { onErrorCapture: ({ error, report }) => __awaiter(void 0, void 0, void 0, function* () {
134
- var _b;
133
+ (0, exports.captureError)({ error, url, log, page: page }, Object.assign(Object.assign({}, optionsWithDefaults), { onErrorCapture: (_b) => __awaiter(void 0, [_b], void 0, function* ({ error, report }) {
134
+ var _c;
135
135
  if (!options.sendToTelemetry)
136
136
  return;
137
- yield ((_b = options.onSendErrorToTelemetry) === null || _b === void 0 ? void 0 : _b.call(options, error, report, optionsWithDefaults, ctx));
137
+ yield ((_c = options.onSendErrorToTelemetry) === null || _c === void 0 ? void 0 : _c.call(options, error, report, optionsWithDefaults, ctx));
138
138
  }) }));
139
139
  });
140
140
  };
@@ -1 +1 @@
1
- {"version":3,"file":"errorHandler.js","sourceRoot":"","sources":["../../../../src/lib/error/errorHandler.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n BasicCrawlingContext,\n CheerioCrawlingContext,\n ErrorHandler,\n HttpCrawlingContext,\n JSDOMCrawlingContext,\n PlaywrightCrawlingContext,\n PuppeteerCrawlingContext,\n} from 'crawlee';\nimport type { Page } from 'playwright';\n\nimport type { MaybePromise, PickRequired } from '../../utils/types';\nimport type { CrawleeOneRouteHandler, CrawleeOneRouteCtx } from '../router/types';\nimport type {\n CrawleeOneErrorHandlerInput,\n CrawleeOneErrorHandlerOptions,\n CrawleeOneIO,\n ExtractIOReport,\n} from '../integrations/types';\nimport type { CrawleeOneCtx } from '../actor/types';\nimport { apifyIO } from '../integrations/apify';\n\nexport type CaptureErrorInput = PickRequired<Partial<CrawleeOneErrorHandlerInput>, 'error'>;\nexport type CaptureError = (input: CaptureErrorInput) => MaybePromise<void>;\n\n/**\n * Error handling for CrawleeOne crawlers.\n *\n * By default, error reports are saved to Apify Dataset.\n *\n * See https://docs.apify.com/academy/node-js/analyzing-pages-and-fixing-errors#error-reporting\n */\nexport const captureError = async <TIO extends CrawleeOneIO = CrawleeOneIO>(\n input: CaptureErrorInput,\n options: CrawleeOneErrorHandlerOptions<TIO>\n) => {\n const { error, log: parentLog } = input;\n const { io = apifyIO as any as TIO, reportingDatasetId, onErrorCapture } = options;\n\n const log = parentLog?.child({ prefix: '[Error capture] ' }) ?? null;\n\n log?.error(`ERROR ${error.name}: ${error.message}`, error);\n console.error(`ERROR ${error.name}: ${error.message}`, error);\n\n // Let's create reporting dataset\n // If you already have one, this will continue adding to it\n const reportingDataset = reportingDatasetId ? await io.openDataset(reportingDatasetId) : null;\n const report = await io.generateErrorReport(\n { error, page: input.page ?? null, url: input.url ?? null, log },\n { ...options, io, onErrorCapture: onErrorCapture as any }\n );\n\n log?.error('[Error capture] Error captured', report);\n\n // And we push the report\n if (reportingDatasetId) {\n log?.info(`[Error capture] Pushing error to dataset ${reportingDatasetId}`);\n await reportingDataset?.pushData(report);\n log?.info(`[Error capture] DONE pushing error to dataset ${reportingDatasetId}`);\n }\n\n log?.error('[Error capture] Calling onErrorCapture');\n await onErrorCapture?.({ error, report: report as ExtractIOReport<TIO> });\n log?.error('[Error capture] Done calling onErrorCapture');\n\n // @ts-expect-error Tag the error, so we don't capture it twice.\n error._crawleeOneErrorCaptured = true;\n // Propagate the error\n throw error;\n};\n\n/**\n * Error handling for Crawlers as a function wrapper\n *\n * By default, error reports are saved to Apify Dataset.\n */\nexport const captureErrorWrapper = async <TIO extends CrawleeOneIO = CrawleeOneIO>(\n fn: (input: { captureError: CaptureError }) => MaybePromise<void>,\n options: CrawleeOneErrorHandlerOptions<TIO>\n) => {\n const captureErrorWithArgs: CaptureError = (input) => captureError(input, options);\n\n try {\n // Pass the error capturing function to the wrapped function, so it can trigger it by itself\n await fn({ captureError: captureErrorWithArgs });\n } catch (error: any) {\n if (!error._crawleeOneErrorCaptured) {\n // And if the wrapped function fails, we capture error for them\n await captureErrorWithArgs({ error, url: null, page: null, log: null });\n }\n }\n};\n\n/**\n * Drop-in replacement for regular request handler callback for Crawlee route\n * that automatically tracks errors.\n *\n * By default, error reports are saved to Apify Dataset.\n *\n * @example\n *\n * router.addDefaultHandler(\n * captureErrorRouteHandler(async (ctx) => {\n * const { page, crawler } = ctx;\n * const url = page.url();\n * ...\n * })\n * );\n */\nexport const captureErrorRouteHandler = <T extends CrawleeOneCtx>(\n handler: (ctx: CrawleeOneRouteCtx<T> & { captureError: CaptureError }) => MaybePromise<void>,\n options: CrawleeOneErrorHandlerOptions<T['io']>\n) => {\n // Wrap the original handler, so we can additionally pass it the captureError function\n const wrapperHandler: CrawleeOneRouteHandler<T, CrawleeOneRouteCtx<T>> = (ctx) => {\n return captureErrorWrapper(({ captureError }) => {\n return handler({\n ...(ctx as any),\n // And automatically feed contextual args (page, url, log) to captureError\n captureError: (input) =>\n captureError({\n error: input.error,\n page: input.page ?? (ctx.page as any),\n url: input.url || ctx.request.url,\n log: input.log ?? ctx.log,\n }),\n });\n }, options);\n };\n return wrapperHandler;\n};\n\nexport const basicCaptureErrorRouteHandler = <T extends CrawleeOneCtx<BasicCrawlingContext>,>(...args: Parameters<typeof captureErrorRouteHandler<T>>) => captureErrorRouteHandler<T>(...args); // prettier-ignore\nexport const httpCaptureErrorRouteHandler = <T extends CrawleeOneCtx<HttpCrawlingContext>>(...args: Parameters<typeof captureErrorRouteHandler<T>>) => captureErrorRouteHandler<T>(...args); // prettier-ignore\nexport const jsdomCaptureErrorRouteHandler = <T extends CrawleeOneCtx<JSDOMCrawlingContext>>(...args: Parameters<typeof captureErrorRouteHandler<T>>) => captureErrorRouteHandler<T>(...args); // prettier-ignore\nexport const cheerioCaptureErrorRouteHandler = <T extends CrawleeOneCtx<CheerioCrawlingContext>>(...args: Parameters<typeof captureErrorRouteHandler<T>>) => captureErrorRouteHandler<T>(...args); // prettier-ignore\nexport const playwrightCaptureErrorRouteHandler = <T extends CrawleeOneCtx<PlaywrightCrawlingContext>>(...args: Parameters<typeof captureErrorRouteHandler<T>>) => captureErrorRouteHandler<T>(...args); // prettier-ignore\nexport const puppeteerCaptureErrorRouteHandler = <T extends CrawleeOneCtx<PuppeteerCrawlingContext>>(...args: Parameters<typeof captureErrorRouteHandler<T>>) => captureErrorRouteHandler<T>(...args); // prettier-ignore\n\n/**\n * Create an `ErrorHandler` function that can be assigned to\n * `failedRequestHandler` option of `BasicCrawlerOptions`.\n *\n * The function saves error to a Dataset, and optionally forwards it to Sentry.\n *\n * By default, error reports are saved to Apify Dataset.\n */\nexport const createErrorHandler = <T extends CrawleeOneCtx>(\n options: CrawleeOneErrorHandlerOptions<T['io']> & {\n sendToTelemetry?: boolean;\n onSendErrorToTelemetry?: T['telemetry']['onSendErrorToTelemetry'];\n }\n): ErrorHandler<T['context']> => {\n const optionsWithDefaults = {\n io: options.io,\n reportingDatasetId: options.reportingDatasetId,\n allowScreenshot: options.allowScreenshot ?? true,\n };\n\n return async (ctx, error) => {\n const { request, log, page } = ctx;\n const url = request.loadedUrl || request.url;\n captureError(\n { error, url, log, page: page as Page },\n {\n ...optionsWithDefaults,\n onErrorCapture: async ({ error, report }) => {\n if (!options.sendToTelemetry) return;\n\n await options.onSendErrorToTelemetry?.(error, report, optionsWithDefaults, ctx);\n },\n }\n );\n };\n};\n"]}
1
+ {"version":3,"file":"errorHandler.js","sourceRoot":"","sources":["../../../../src/lib/error/errorHandler.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n BasicCrawlingContext,\n CheerioCrawlingContext,\n ErrorHandler,\n HttpCrawlingContext,\n JSDOMCrawlingContext,\n PlaywrightCrawlingContext,\n PuppeteerCrawlingContext,\n} from 'crawlee';\nimport type { Page } from 'playwright';\n\nimport type { MaybePromise, PickRequired } from '../../utils/types';\nimport type { CrawleeOneRouteHandler, CrawleeOneRouteCtx } from '../router/types';\nimport type {\n CrawleeOneErrorHandlerInput,\n CrawleeOneErrorHandlerOptions,\n CrawleeOneIO,\n ExtractIOReport,\n} from '../integrations/types';\nimport type { CrawleeOneCtx } from '../actor/types';\nimport { apifyIO } from '../integrations/apify';\n\nexport type CaptureErrorInput = PickRequired<Partial<CrawleeOneErrorHandlerInput>, 'error'>;\nexport type CaptureError = (input: CaptureErrorInput) => MaybePromise<void>;\n\n/**\n * Error handling for CrawleeOne crawlers.\n *\n * By default, error reports are saved to Apify Dataset.\n *\n * See https://docs.apify.com/academy/node-js/analyzing-pages-and-fixing-errors#error-reporting\n */\nexport const captureError = async <TIO extends CrawleeOneIO = CrawleeOneIO>(\n input: CaptureErrorInput,\n options: CrawleeOneErrorHandlerOptions<TIO>\n) => {\n const { error, log: parentLog } = input;\n const { io = apifyIO as any as TIO, reportingDatasetId, onErrorCapture } = options;\n\n const log = parentLog?.child({ prefix: '[Error capture] ' }) ?? null;\n\n log?.error(`ERROR ${error.name}: ${error.message}`, error);\n console.error(`ERROR ${error.name}: ${error.message}`, error);\n\n // Let's create reporting dataset\n // If you already have one, this will continue adding to it\n const reportingDataset = reportingDatasetId ? await io.openDataset(reportingDatasetId) : null;\n const report = await io.generateErrorReport(\n { error, page: input.page ?? null, url: input.url ?? null, log },\n { ...options, io, onErrorCapture: onErrorCapture as any }\n );\n\n log?.error('[Error capture] Error captured', report);\n\n // And we push the report\n if (reportingDatasetId) {\n log?.info(`[Error capture] Pushing error to dataset ${reportingDatasetId}`);\n await reportingDataset?.pushData(report);\n log?.info(`[Error capture] DONE pushing error to dataset ${reportingDatasetId}`);\n }\n\n log?.error('[Error capture] Calling onErrorCapture');\n await onErrorCapture?.({ error, report: report as ExtractIOReport<TIO> });\n log?.error('[Error capture] Done calling onErrorCapture');\n\n // @ts-expect-error Tag the error, so we don't capture it twice.\n error._crawleeOneErrorCaptured = true;\n // Propagate the error\n throw error;\n};\n\n/**\n * Error handling for Crawlers as a function wrapper\n *\n * By default, error reports are saved to Apify Dataset.\n */\nexport const captureErrorWrapper = async <TIO extends CrawleeOneIO = CrawleeOneIO>(\n fn: (input: { captureError: CaptureError }) => MaybePromise<void>,\n options: CrawleeOneErrorHandlerOptions<TIO>\n) => {\n const captureErrorWithArgs: CaptureError = (input) => captureError(input, options);\n\n try {\n // Pass the error capturing function to the wrapped function, so it can trigger it by itself\n await fn({ captureError: captureErrorWithArgs });\n } catch (error: any) {\n if (!error._crawleeOneErrorCaptured) {\n // And if the wrapped function fails, we capture error for them\n await captureErrorWithArgs({ error, url: null, page: null, log: null });\n }\n }\n};\n\n/**\n * Drop-in replacement for regular request handler callback for Crawlee route\n * that automatically tracks errors.\n *\n * By default, error reports are saved to Apify Dataset.\n *\n * @example\n *\n * router.addDefaultHandler(\n * captureErrorRouteHandler(async (ctx) => {\n * const { page, crawler } = ctx;\n * const url = page.url();\n * ...\n * })\n * );\n */\nexport const captureErrorRouteHandler = <T extends CrawleeOneCtx>(\n handler: (ctx: CrawleeOneRouteCtx<T> & { captureError: CaptureError }) => MaybePromise<void>,\n options: CrawleeOneErrorHandlerOptions<T['io']>\n) => {\n // Wrap the original handler, so we can additionally pass it the captureError function\n const wrapperHandler: CrawleeOneRouteHandler<T, CrawleeOneRouteCtx<T>> = (ctx) => {\n return captureErrorWrapper(({ captureError }) => {\n return handler({\n ...(ctx as any),\n // And automatically feed contextual args (page, url, log) to captureError\n captureError: (input) =>\n captureError({\n error: input.error,\n page: input.page ?? (ctx.page as any),\n url: input.url || ctx.request.url,\n log: input.log ?? ctx.log,\n }),\n });\n }, options);\n };\n return wrapperHandler;\n};\n\nexport const basicCaptureErrorRouteHandler = <T extends CrawleeOneCtx<BasicCrawlingContext>,>(...args: Parameters<typeof captureErrorRouteHandler<T>>) => captureErrorRouteHandler<T>(...args); // prettier-ignore\nexport const httpCaptureErrorRouteHandler = <T extends CrawleeOneCtx<HttpCrawlingContext>>(...args: Parameters<typeof captureErrorRouteHandler<T>>) => captureErrorRouteHandler<T>(...args); // prettier-ignore\nexport const jsdomCaptureErrorRouteHandler = <T extends CrawleeOneCtx<JSDOMCrawlingContext>>(...args: Parameters<typeof captureErrorRouteHandler<T>>) => captureErrorRouteHandler<T>(...args); // prettier-ignore\nexport const cheerioCaptureErrorRouteHandler = <T extends CrawleeOneCtx<CheerioCrawlingContext>>(...args: Parameters<typeof captureErrorRouteHandler<T>>) => captureErrorRouteHandler<T>(...args); // prettier-ignore\nexport const playwrightCaptureErrorRouteHandler = <T extends CrawleeOneCtx<PlaywrightCrawlingContext>>(...args: Parameters<typeof captureErrorRouteHandler<T>>) => captureErrorRouteHandler<T>(...args); // prettier-ignore\nexport const puppeteerCaptureErrorRouteHandler = <T extends CrawleeOneCtx<PuppeteerCrawlingContext>>(...args: Parameters<typeof captureErrorRouteHandler<T>>) => captureErrorRouteHandler<T>(...args); // prettier-ignore\n\n/**\n * Create an `ErrorHandler` function that can be assigned to\n * `failedRequestHandler` option of `BasicCrawlerOptions`.\n *\n * The function saves error to a Dataset, and optionally forwards it to Sentry.\n *\n * By default, error reports are saved to Apify Dataset.\n */\nexport const createErrorHandler = <T extends CrawleeOneCtx>(\n options: CrawleeOneErrorHandlerOptions<T['io']> & {\n sendToTelemetry?: boolean;\n onSendErrorToTelemetry?: T['telemetry']['onSendErrorToTelemetry'];\n }\n): ErrorHandler<T['context']> => {\n const optionsWithDefaults = {\n io: options.io,\n reportingDatasetId: options.reportingDatasetId,\n allowScreenshot: options.allowScreenshot ?? true,\n };\n\n return async (ctx, error) => {\n const { request, log, page } = ctx;\n const url = request.loadedUrl || request.url;\n captureError(\n { error, url, log, page: page as Page },\n {\n ...optionsWithDefaults,\n onErrorCapture: async ({ error, report }) => {\n if (!options.sendToTelemetry) return;\n\n await options.onSendErrorToTelemetry?.(error, report, optionsWithDefaults, ctx);\n },\n }\n );\n };\n};\n"]}
@@ -339,7 +339,7 @@ export declare const startUrlsInput: {
339
339
  };
340
340
  /** Common input fields related to logging setup */
341
341
  export declare const loggingInput: {
342
- logLevel: import("apify-actor-config").StringField<"error" | "off" | "info" | "debug" | "warn", string>;
342
+ logLevel: import("apify-actor-config").StringField<"error" | "debug" | "info" | "warn" | "off", string>;
343
343
  errorReportingDatasetId: import("apify-actor-config").StringField<string, string>;
344
344
  errorTelemetry: import("apify-actor-config").BooleanField<boolean>;
345
345
  };
@@ -394,7 +394,7 @@ export declare const allActorInputs: {
394
394
  metamorphActorInput: import("apify-actor-config").ObjectField<{
395
395
  uploadDatasetToGDrive: boolean;
396
396
  }>;
397
- logLevel: import("apify-actor-config").StringField<"error" | "off" | "info" | "debug" | "warn", string>;
397
+ logLevel: import("apify-actor-config").StringField<"error" | "debug" | "info" | "warn" | "off", string>;
398
398
  errorReportingDatasetId: import("apify-actor-config").StringField<string, string>;
399
399
  errorTelemetry: import("apify-actor-config").BooleanField<boolean>;
400
400
  perfBatchSize: import("apify-actor-config").IntegerField<number, string>;
@@ -138,7 +138,7 @@ exports.inputInput = {
138
138
  nullable: true,
139
139
  sectionCaption: 'Programmatic Input (Advanced)',
140
140
  sectionDescription: "With these options you can configure other Actor options programmatically or from remote source.",
141
- }),
141
+ }), // prettier-ignore
142
142
  inputExtendFromFunction: (0, apify_actor_config_1.createStringField)({
143
143
  title: 'Extend Actor input from custom function',
144
144
  type: 'string',
@@ -181,7 +181,7 @@ exports.crawlerInput = {
181
181
  ${newLine(1)} <strong>NOTE:</strong> In cases of parallel crawling, the actual number of pages visited might be slightly higher than this value.`,
182
182
  minimum: 1,
183
183
  nullable: true,
184
- }),
184
+ }), // prettier-ignore
185
185
  minConcurrency: (0, apify_actor_config_1.createIntegerField)({
186
186
  title: 'minConcurrency',
187
187
  type: 'integer',
@@ -191,7 +191,7 @@ exports.crawlerInput = {
191
191
  prefill: 1,
192
192
  minimum: 1,
193
193
  nullable: true,
194
- }),
194
+ }), // prettier-ignore
195
195
  maxConcurrency: (0, apify_actor_config_1.createIntegerField)({
196
196
  title: 'maxConcurrency',
197
197
  type: 'integer',
@@ -263,7 +263,7 @@ exports.perfInput = {
263
263
  nullable: true,
264
264
  sectionCaption: 'Performance configuration (Advanced)',
265
265
  sectionDescription: 'Standalone performance options. These are not passed to the Crawler.',
266
- }),
266
+ }), // prettier-ignore
267
267
  perfBatchWaitSecs: (0, apify_actor_config_1.createIntegerField)({
268
268
  title: 'Wait (in seconds) between processing requests in a single batch',
269
269
  type: 'integer',
@@ -294,7 +294,7 @@ exports.startUrlsInput = {
294
294
  pattern: datasetIdWithFieldPattern,
295
295
  example: 'datasetid123#url',
296
296
  nullable: true,
297
- }),
297
+ }), // prettier-ignore
298
298
  startUrlsFromFunction: (0, apify_actor_config_1.createStringField)({
299
299
  title: 'Start URLs from custom function',
300
300
  type: 'string',
@@ -389,7 +389,7 @@ exports.requestInput = {
389
389
  minimum: 0,
390
390
  nullable: true,
391
391
  sectionCaption: 'Requests limit, transformation & filtering (Advanced)',
392
- }),
392
+ }), // prettier-ignore
393
393
  requestTransform: (0, apify_actor_config_1.createStringField)({
394
394
  title: 'Transform requests',
395
395
  type: 'string',
@@ -399,7 +399,7 @@ exports.requestInput = {
399
399
  example: createHookFnExample({ request: 'Request holding URL to be scraped' }, CODE_EXAMPLES.requestTransform, false),
400
400
  prefill: createHookFnExample({ request: 'Request holding URL to be scraped' }, CODE_EXAMPLES.requestTransform, true),
401
401
  nullable: true,
402
- }),
402
+ }), // prettier-ignore
403
403
  requestTransformBefore: (0, apify_actor_config_1.createStringField)({
404
404
  title: 'Transform requests - Setup',
405
405
  type: 'string',
@@ -408,7 +408,7 @@ exports.requestInput = {
408
408
  example: createHookFnExample({}, CODE_EXAMPLES.requestTransformBefore, false),
409
409
  prefill: createHookFnExample({}, CODE_EXAMPLES.requestTransformBefore, true),
410
410
  nullable: true,
411
- }),
411
+ }), // prettier-ignore
412
412
  requestTransformAfter: (0, apify_actor_config_1.createStringField)({
413
413
  title: 'Transform requests - Teardown',
414
414
  type: 'string',
@@ -417,7 +417,7 @@ exports.requestInput = {
417
417
  example: createHookFnExample({}, CODE_EXAMPLES.requestTransformAfter, false),
418
418
  prefill: createHookFnExample({}, CODE_EXAMPLES.requestTransformAfter, true),
419
419
  nullable: true,
420
- }),
420
+ }), // prettier-ignore
421
421
  requestFilter: (0, apify_actor_config_1.createStringField)({
422
422
  title: 'Filter requests',
423
423
  type: 'string',
@@ -428,7 +428,7 @@ exports.requestInput = {
428
428
  example: createHookFnExample({ request: 'Request holding URL to be scraped' }, CODE_EXAMPLES.requestFilter, false),
429
429
  prefill: createHookFnExample({ request: 'Request holding URL to be scraped' }, CODE_EXAMPLES.requestFilter, true),
430
430
  nullable: true,
431
- }),
431
+ }), // prettier-ignore
432
432
  requestFilterBefore: (0, apify_actor_config_1.createStringField)({
433
433
  title: 'Filter requests - Setup',
434
434
  type: 'string',
@@ -437,7 +437,7 @@ exports.requestInput = {
437
437
  example: createHookFnExample({}, CODE_EXAMPLES.requestFilterBefore, false),
438
438
  prefill: createHookFnExample({}, CODE_EXAMPLES.requestFilterBefore, true),
439
439
  nullable: true,
440
- }),
440
+ }), // prettier-ignore
441
441
  requestFilterAfter: (0, apify_actor_config_1.createStringField)({
442
442
  title: 'Filter requests - Teardown',
443
443
  type: 'string',
@@ -446,7 +446,7 @@ exports.requestInput = {
446
446
  example: createHookFnExample({}, CODE_EXAMPLES.requestFilterAfter, false),
447
447
  prefill: createHookFnExample({}, CODE_EXAMPLES.requestFilterAfter, true),
448
448
  nullable: true,
449
- }),
449
+ }), // prettier-ignore
450
450
  requestQueueId: (0, apify_actor_config_1.createStringField)({
451
451
  title: 'RequestQueue ID',
452
452
  type: 'string',
@@ -497,7 +497,7 @@ exports.outputInput = {
497
497
  editor: 'stringList',
498
498
  example: ['fieldName', 'another.nested[0].field'],
499
499
  nullable: true,
500
- }),
500
+ }), // prettier-ignore
501
501
  outputTransform: (0, apify_actor_config_1.createStringField)({
502
502
  title: 'Transform entries',
503
503
  type: 'string',
@@ -508,7 +508,7 @@ exports.outputInput = {
508
508
  example: createHookFnExample({ entry: 'Scraped entry' }, CODE_EXAMPLES.outputTransform, false),
509
509
  prefill: createHookFnExample({ entry: 'Scraped entry' }, CODE_EXAMPLES.outputTransform, true),
510
510
  nullable: true,
511
- }),
511
+ }), // prettier-ignore
512
512
  outputTransformBefore: (0, apify_actor_config_1.createStringField)({
513
513
  title: 'Transform entries - Setup',
514
514
  type: 'string',
@@ -517,7 +517,7 @@ exports.outputInput = {
517
517
  example: createHookFnExample({}, CODE_EXAMPLES.outputTransformBefore, false),
518
518
  prefill: createHookFnExample({}, CODE_EXAMPLES.outputTransformBefore, true),
519
519
  nullable: true,
520
- }),
520
+ }), // prettier-ignore
521
521
  outputTransformAfter: (0, apify_actor_config_1.createStringField)({
522
522
  title: 'Transform entries - Teardown',
523
523
  type: 'string',
@@ -526,7 +526,7 @@ exports.outputInput = {
526
526
  example: createHookFnExample({}, CODE_EXAMPLES.outputTransformAfter, false),
527
527
  prefill: createHookFnExample({}, CODE_EXAMPLES.outputTransformAfter, true),
528
528
  nullable: true,
529
- }),
529
+ }), // prettier-ignore
530
530
  outputFilter: (0, apify_actor_config_1.createStringField)({
531
531
  title: 'Filter entries',
532
532
  type: 'string',
@@ -537,7 +537,7 @@ exports.outputInput = {
537
537
  example: createHookFnExample({ entry: 'Scraped entry' }, CODE_EXAMPLES.outputFilter, false),
538
538
  prefill: createHookFnExample({ entry: 'Scraped entry' }, CODE_EXAMPLES.outputFilter, true),
539
539
  nullable: true,
540
- }),
540
+ }), // prettier-ignore
541
541
  outputFilterBefore: (0, apify_actor_config_1.createStringField)({
542
542
  title: 'Filter entries - Setup',
543
543
  type: 'string',
@@ -546,7 +546,7 @@ exports.outputInput = {
546
546
  example: createHookFnExample({}, CODE_EXAMPLES.outputFilterBefore, false),
547
547
  prefill: createHookFnExample({}, CODE_EXAMPLES.outputFilterBefore, true),
548
548
  nullable: true,
549
- }),
549
+ }), // prettier-ignore
550
550
  outputFilterAfter: (0, apify_actor_config_1.createStringField)({
551
551
  title: 'Filter entries - Teardown',
552
552
  type: 'string',
@@ -555,7 +555,7 @@ exports.outputInput = {
555
555
  example: createHookFnExample({}, CODE_EXAMPLES.outputFilterAfter, false),
556
556
  prefill: createHookFnExample({}, CODE_EXAMPLES.outputFilterAfter, true),
557
557
  nullable: true,
558
- }),
558
+ }), // prettier-ignore
559
559
  outputDatasetId: (0, apify_actor_config_1.createStringField)({
560
560
  title: 'Dataset ID',
561
561
  type: 'string',
@@ -568,7 +568,7 @@ exports.outputInput = {
568
568
  pattern: datasetIdPattern,
569
569
  nullable: true,
570
570
  sectionCaption: 'Output Dataset & Caching (L in ETL) (Advanced)',
571
- }),
571
+ }), // prettier-ignore
572
572
  outputCacheStoreId: (0, apify_actor_config_1.createStringField)({
573
573
  title: 'Cache ID',
574
574
  type: 'string',
@@ -580,7 +580,7 @@ exports.outputInput = {
580
580
  example: 'mIJVZsRQrDQf4rUAf',
581
581
  pattern: datasetIdPattern,
582
582
  nullable: true,
583
- }),
583
+ }), // prettier-ignore
584
584
  outputCachePrimaryKeys: (0, apify_actor_config_1.createArrayField)({
585
585
  title: 'Cache primary keys',
586
586
  type: 'array',
@@ -589,7 +589,7 @@ exports.outputInput = {
589
589
  editor: 'stringList',
590
590
  example: ['name', 'city'],
591
591
  nullable: true,
592
- }),
592
+ }), // prettier-ignore
593
593
  outputCacheActionOnResult: (0, apify_actor_config_1.createStringField)({
594
594
  title: 'Cache action on result',
595
595
  type: 'string',
@@ -615,7 +615,7 @@ exports.metamorphInput = {
615
615
  example: 'apify/web-scraper',
616
616
  nullable: true,
617
617
  sectionCaption: 'Integrations (Metamorphing) (Advanced)',
618
- }),
618
+ }), // prettier-ignore
619
619
  metamorphActorBuild: (0, apify_actor_config_1.createStringField)({
620
620
  title: 'Metamorph actor build',
621
621
  type: 'string',
@@ -658,12 +658,12 @@ exports.inputInputValidationFields = {
658
658
  };
659
659
  exports.startUrlsInputValidationFields = {
660
660
  startUrls: joi_1.default.array().items(joi_1.default.string().min(1), joi_1.default.object()).optional(),
661
- startUrlsFromDataset: joi_1.default.string().min(1).pattern(new RegExp(datasetIdWithFieldPattern)).optional(),
661
+ startUrlsFromDataset: joi_1.default.string().min(1).pattern(new RegExp(datasetIdWithFieldPattern)).optional(), // prettier-ignore
662
662
  startUrlsFromFunction: joi_1.default.string().min(1).optional(),
663
663
  };
664
664
  exports.loggingInputValidationFields = {
665
- logLevel: joi_1.default.string().valid(...log_1.LOG_LEVEL).optional(),
666
- errorReportingDatasetId: joi_1.default.string().min(1).pattern(new RegExp(datasetIdPattern)).optional(),
665
+ logLevel: joi_1.default.string().valid(...log_1.LOG_LEVEL).optional(), // prettier-ignore
666
+ errorReportingDatasetId: joi_1.default.string().min(1).pattern(new RegExp(datasetIdPattern)).optional(), // prettier-ignore
667
667
  errorTelemetry: joi_1.default.boolean().optional(),
668
668
  };
669
669
  exports.proxyInputValidationFields = {
@@ -693,9 +693,9 @@ exports.outputInputValidationFields = {
693
693
  outputFilter: joi_1.default.string().min(1).optional(),
694
694
  outputFilterBefore: joi_1.default.string().min(1).optional(),
695
695
  outputFilterAfter: joi_1.default.string().min(1).optional(),
696
- outputCacheStoreId: joi_1.default.string().min(1).pattern(new RegExp(datasetIdPattern)).optional(),
696
+ outputCacheStoreId: joi_1.default.string().min(1).pattern(new RegExp(datasetIdPattern)).optional(), // prettier-ignore
697
697
  outputCachePrimaryKeys: joi_1.default.array().items(joi_1.default.string().min(1)).optional(),
698
- outputCacheActionOnResult: joi_1.default.string().min(1).allow('add', 'remove', 'overwrite').optional(),
698
+ outputCacheActionOnResult: joi_1.default.string().min(1).allow('add', 'remove', 'overwrite').optional(), // prettier-ignore
699
699
  outputDatasetId: joi_1.default.string().min(1).pattern(new RegExp(datasetIdPattern)).optional(), // prettier-ignore
700
700
  };
701
701
  exports.metamorphInputValidationFields = {