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.
- package/README.md +30 -31
- package/dist/cjs/api.d.ts +2 -2
- package/dist/cjs/api.js.map +1 -1
- package/dist/cjs/cli/cli.js +4 -4
- package/dist/cjs/cli/cli.js.map +1 -1
- package/dist/cjs/cli/commands/codegen.js.map +1 -1
- package/dist/cjs/lib/actions/scrapeListing.js.map +1 -1
- package/dist/cjs/lib/actor/actor.d.ts +5 -5
- package/dist/cjs/lib/actor/actor.js +2 -2
- package/dist/cjs/lib/actor/actor.js.map +1 -1
- package/dist/cjs/lib/error/errorHandler.d.ts +6 -8
- package/dist/cjs/lib/error/errorHandler.js +3 -3
- package/dist/cjs/lib/error/errorHandler.js.map +1 -1
- package/dist/cjs/lib/input.d.ts +2 -2
- package/dist/cjs/lib/input.js +28 -28
- package/dist/cjs/lib/input.js.map +1 -1
- package/dist/cjs/lib/integrations/apify.js.map +1 -1
- package/dist/cjs/lib/io/dataset.js.map +1 -1
- package/dist/cjs/lib/io/pushData.js +3 -3
- package/dist/cjs/lib/io/pushData.js.map +1 -1
- package/dist/cjs/lib/io/pushRequests.d.ts +1 -1
- package/dist/cjs/lib/io/pushRequests.js.map +1 -1
- package/dist/cjs/lib/log.d.ts +1 -1
- package/dist/cjs/lib/migrate/localMigrator.js.map +1 -1
- package/dist/cjs/lib/router/router.d.ts +14 -18
- package/dist/cjs/lib/router/router.js +2 -2
- package/dist/cjs/lib/router/router.js.map +1 -1
- package/dist/cjs/lib/telemetry/sentry.d.ts +1 -1
- package/dist/cjs/lib/test/actor.d.ts +9 -9
- package/dist/cjs/lib/test/actor.js +2 -2
- package/dist/cjs/lib/test/actor.js.map +1 -1
- package/dist/cjs/lib/test/mockApifyClient.d.ts +6 -6
- package/dist/cjs/lib/test/mockApifyClient.js.map +1 -1
- package/dist/cjs/utils/async.js +1 -1
- package/dist/cjs/utils/async.js.map +1 -1
- package/dist/cjs/utils/error.d.ts +1 -1
- package/dist/cjs/utils/package.js.map +1 -1
- package/dist/cjs/utils/url.js.map +1 -1
- package/dist/cjs/utils/valueMonitor.js.map +1 -1
- 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").
|
|
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[
|
|
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").
|
|
84
|
-
sendToTelemetry?: boolean
|
|
85
|
-
onSendErrorToTelemetry?: T[
|
|
86
|
-
}) => ErrorHandler<T[
|
|
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: (
|
|
134
|
-
var
|
|
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 ((
|
|
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"]}
|
package/dist/cjs/lib/input.d.ts
CHANGED
|
@@ -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" | "
|
|
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" | "
|
|
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>;
|
package/dist/cjs/lib/input.js
CHANGED
|
@@ -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 = {
|