@@ -3031,6 +3063,7 @@ https://archiveweb.page/images/${"logo.svg"}`}
| "extraHops"
| "useSitemap"
| "failOnFailedSeed"
+ | "failOnContentCheck"
> {
const jsonSeeds = this.formState.seedListFormat === SeedListFormat.JSON;
@@ -3048,6 +3081,7 @@ https://archiveweb.page/images/${"logo.svg"}`}
extraHops: this.formState.includeLinkedPages ? 1 : 0,
useSitemap: false,
failOnFailedSeed: this.formState.failOnFailedSeed,
+ failOnContentCheck: this.formState.failOnContentCheck,
};
return config;
@@ -3055,7 +3089,11 @@ https://archiveweb.page/images/${"logo.svg"}`}
private parseSeededConfig(): Pick<
CrawlConfigParams["config"],
- "seeds" | "scopeType" | "useSitemap" | "failOnFailedSeed"
+ | "seeds"
+ | "scopeType"
+ | "useSitemap"
+ | "failOnFailedSeed"
+ | "failOnContentCheck"
> {
const primarySeedUrl = this.formState.primarySeedUrl;
const includeUrlList = this.formState.customIncludeUrlList
@@ -3086,6 +3124,7 @@ https://archiveweb.page/images/${"logo.svg"}`}
scopeType: this.formState.scopeType as ScopeType,
useSitemap: this.formState.useSitemap,
failOnFailedSeed: false,
+ failOnContentCheck: this.formState.failOnContentCheck,
};
return config;
}
diff --git a/frontend/src/features/crawl-workflows/workflow-list.ts b/frontend/src/features/crawl-workflows/workflow-list.ts
index fdedc926..ef416e8d 100644
--- a/frontend/src/features/crawl-workflows/workflow-list.ts
+++ b/frontend/src/features/crawl-workflows/workflow-list.ts
@@ -244,7 +244,8 @@ export class WorkflowListItem extends BtrixElement {
}
e.preventDefault();
await this.updateComplete;
- const href = `/orgs/${this.orgSlugState}/workflows/${this.workflow?.id}/${this.workflow?.lastCrawlState === "failed" ? WorkflowTab.Logs : WorkflowTab.LatestCrawl}`;
+ const failedStates = ["failed", "failed_not_logged_in"];
+ const href = `/orgs/${this.orgSlugState}/workflows/${this.workflow?.id}/${failedStates.includes(this.workflow?.lastCrawlState || "") ? WorkflowTab.Logs : WorkflowTab.LatestCrawl}`;
this.navigate.to(href);
}}
>
diff --git a/frontend/src/pages/org/workflow-detail.ts b/frontend/src/pages/org/workflow-detail.ts
index fd44fec2..5777f94f 100644
--- a/frontend/src/pages/org/workflow-detail.ts
+++ b/frontend/src/pages/org/workflow-detail.ts
@@ -1909,6 +1909,7 @@ export class WorkflowDetail extends BtrixElement {
message = msg("This crawl can’t be replayed since it was canceled.");
break;
case "failed":
+ case "failed_not_logged_in":
message = msg("This crawl can’t be replayed because it failed.");
break;
default:
@@ -1920,7 +1921,9 @@ export class WorkflowDetail extends BtrixElement {
const actionButton = (workflow: Workflow) => {
if (!workflow.lastCrawlId) return;
- if (workflow.lastCrawlState === "failed") {
+ const failedStates = ["failed", "failed_not_logged_in"];
+
+ if (failedStates.includes(workflow.lastCrawlState || "")) {
return html`
>;
export default infoTextFor;
diff --git a/frontend/src/types/crawlState.ts b/frontend/src/types/crawlState.ts
index 1a63aecb..9c56c48d 100644
--- a/frontend/src/types/crawlState.ts
+++ b/frontend/src/types/crawlState.ts
@@ -28,6 +28,7 @@ export const SUCCESSFUL_STATES = [
export const FAILED_STATES = [
"canceled",
"failed",
+ "failed_not_logged_in",
"skipped_storage_quota_reached",
"skipped_time_quota_reached",
] as const;
diff --git a/frontend/src/types/crawler.ts b/frontend/src/types/crawler.ts
index fcbab10a..45aa5d4f 100644
--- a/frontend/src/types/crawler.ts
+++ b/frontend/src/types/crawler.ts
@@ -44,6 +44,7 @@ export type SeedConfig = Expand<
extraHops?: number | null;
useSitemap?: boolean;
failOnFailedSeed?: boolean;
+ failOnContentCheck?: boolean;
depth?: number | null;
userAgent?: string | null;
selectLinks: string[];
diff --git a/frontend/src/utils/workflow.ts b/frontend/src/utils/workflow.ts
index 0f288af9..6d877ab6 100644
--- a/frontend/src/utils/workflow.ts
+++ b/frontend/src/utils/workflow.ts
@@ -115,6 +115,7 @@ export type FormState = {
includeLinkedPages: boolean;
useSitemap: boolean;
failOnFailedSeed: boolean;
+ failOnContentCheck: boolean;
customIncludeUrlList: string;
crawlTimeoutMinutes: number;
behaviorTimeoutSeconds: number | null;
@@ -177,6 +178,7 @@ export const getDefaultFormState = (): FormState => ({
includeLinkedPages: false,
useSitemap: false,
failOnFailedSeed: false,
+ failOnContentCheck: false,
customIncludeUrlList: "",
crawlTimeoutMinutes: 0,
maxCrawlSizeGB: 0,
@@ -269,6 +271,7 @@ export function getInitialFormState(params: {
}
formState.failOnFailedSeed = seedsConfig.failOnFailedSeed;
+ formState.failOnContentCheck = seedsConfig.failOnContentCheck;
}
if (params.initialWorkflow.schedule) {
@@ -354,6 +357,8 @@ export function getInitialFormState(params: {
useSitemap: seedsConfig.useSitemap ?? defaultFormState.useSitemap,
failOnFailedSeed:
seedsConfig.failOnFailedSeed ?? defaultFormState.failOnFailedSeed,
+ failOnContentCheck:
+ seedsConfig.failOnContentCheck ?? defaultFormState.failOnContentCheck,
pageLimit:
params.initialWorkflow.config.limit ?? defaultFormState.pageLimit,
autoscrollBehavior: params.initialWorkflow.config.behaviors