seo 0.3.0-beta.2 → 0.4.0

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/dist/index.d.ts CHANGED
@@ -42,13 +42,6 @@ declare const tokenStoreSchema: z.ZodObject<{
42
42
  type StoredTokenStore = z.infer<typeof tokenStoreSchema>;
43
43
  //#endregion
44
44
  //#region packages/core/src/types/config.d.ts
45
- declare const siteSchema: z.ZodObject<{
46
- siteUrl: z.ZodString;
47
- displayName: z.ZodOptional<z.ZodString>;
48
- permission: z.ZodOptional<z.ZodString>;
49
- addedAt: z.ZodOptional<z.ZodNumber>;
50
- isDefault: z.ZodOptional<z.ZodBoolean>;
51
- }, z.core.$strip>;
52
45
  declare const providerPreferenceSchema: z.ZodEnum<{
53
46
  cheap: "cheap";
54
47
  authoritative: "authoritative";
@@ -69,102 +62,7 @@ declare const analyticsConnectionSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
69
62
  providerId: z.ZodString;
70
63
  account: z.ZodRecord<z.ZodString, z.ZodString>;
71
64
  }, z.core.$strip>], "provider">;
72
- declare const analyticsConnectionsSchema: z.ZodDefault<z.ZodObject<{
73
- selected: z.ZodOptional<z.ZodUnion<readonly [z.ZodEnum<{
74
- google: "google";
75
- clicky: "clicky";
76
- }>, z.ZodString]>>;
77
- google: z.ZodOptional<z.ZodObject<{
78
- propertyId: z.ZodString;
79
- }, z.core.$strip>>;
80
- clicky: z.ZodOptional<z.ZodObject<{
81
- siteId: z.ZodString;
82
- }, z.core.$strip>>;
83
- extensions: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
84
- account: z.ZodRecord<z.ZodString, z.ZodString>;
85
- }, z.core.$strict>>>;
86
- }, z.core.$strip>>;
87
- declare const clientProfileSchema: z.ZodObject<{
88
- id: z.ZodString;
89
- name: z.ZodString;
90
- siteUrl: z.ZodString;
91
- startUrl: z.ZodOptional<z.ZodString>;
92
- watchUrls: z.ZodDefault<z.ZodArray<z.ZodString>>;
93
- brandTerms: z.ZodDefault<z.ZodArray<z.ZodString>>;
94
- analytics: z.ZodDefault<z.ZodObject<{
95
- selected: z.ZodOptional<z.ZodUnion<readonly [z.ZodEnum<{
96
- google: "google";
97
- clicky: "clicky";
98
- }>, z.ZodString]>>;
99
- google: z.ZodOptional<z.ZodObject<{
100
- propertyId: z.ZodString;
101
- }, z.core.$strip>>;
102
- clicky: z.ZodOptional<z.ZodObject<{
103
- siteId: z.ZodString;
104
- }, z.core.$strip>>;
105
- extensions: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
106
- account: z.ZodRecord<z.ZodString, z.ZodString>;
107
- }, z.core.$strict>>>;
108
- }, z.core.$strip>>;
109
- googleAccounts: z.ZodOptional<z.ZodObject<{
110
- searchConsole: z.ZodOptional<z.ZodString>;
111
- googleAnalytics: z.ZodOptional<z.ZodString>;
112
- }, z.core.$strip>>;
113
- technicalWeekday: z.ZodOptional<z.ZodNumber>;
114
- isDefault: z.ZodOptional<z.ZodBoolean>;
115
- createdAt: z.ZodNumber;
116
- updatedAt: z.ZodNumber;
117
- }, z.core.$strip>;
118
65
  declare const configSchema: z.ZodObject<{
119
- defaultSite: z.ZodOptional<z.ZodString>;
120
- sites: z.ZodDefault<z.ZodArray<z.ZodObject<{
121
- siteUrl: z.ZodString;
122
- displayName: z.ZodOptional<z.ZodString>;
123
- permission: z.ZodOptional<z.ZodString>;
124
- addedAt: z.ZodOptional<z.ZodNumber>;
125
- isDefault: z.ZodOptional<z.ZodBoolean>;
126
- }, z.core.$strip>>>;
127
- clients: z.ZodDefault<z.ZodArray<z.ZodObject<{
128
- id: z.ZodString;
129
- name: z.ZodString;
130
- siteUrl: z.ZodString;
131
- startUrl: z.ZodOptional<z.ZodString>;
132
- watchUrls: z.ZodDefault<z.ZodArray<z.ZodString>>;
133
- brandTerms: z.ZodDefault<z.ZodArray<z.ZodString>>;
134
- analytics: z.ZodDefault<z.ZodObject<{
135
- selected: z.ZodOptional<z.ZodUnion<readonly [z.ZodEnum<{
136
- google: "google";
137
- clicky: "clicky";
138
- }>, z.ZodString]>>;
139
- google: z.ZodOptional<z.ZodObject<{
140
- propertyId: z.ZodString;
141
- }, z.core.$strip>>;
142
- clicky: z.ZodOptional<z.ZodObject<{
143
- siteId: z.ZodString;
144
- }, z.core.$strip>>;
145
- extensions: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
146
- account: z.ZodRecord<z.ZodString, z.ZodString>;
147
- }, z.core.$strict>>>;
148
- }, z.core.$strip>>;
149
- googleAccounts: z.ZodOptional<z.ZodObject<{
150
- searchConsole: z.ZodOptional<z.ZodString>;
151
- googleAnalytics: z.ZodOptional<z.ZodString>;
152
- }, z.core.$strip>>;
153
- technicalWeekday: z.ZodOptional<z.ZodNumber>;
154
- isDefault: z.ZodOptional<z.ZodBoolean>;
155
- createdAt: z.ZodNumber;
156
- updatedAt: z.ZodNumber;
157
- }, z.core.$strip>>>;
158
- analytics: z.ZodDefault<z.ZodObject<{
159
- google: z.ZodDefault<z.ZodObject<{
160
- defaultPropertyId: z.ZodOptional<z.ZodString>;
161
- propertyMappings: z.ZodDefault<z.ZodArray<z.ZodObject<{
162
- siteUrl: z.ZodString;
163
- propertyId: z.ZodString;
164
- addedAt: z.ZodOptional<z.ZodNumber>;
165
- }, z.core.$strip>>>;
166
- }, z.core.$strip>>;
167
- }, z.core.$strip>>;
168
66
  providers: z.ZodDefault<z.ZodObject<{
169
67
  dataForSeoLogin: z.ZodOptional<z.ZodString>;
170
68
  dataForSeoPassword: z.ZodOptional<z.ZodString>;
@@ -181,11 +79,10 @@ declare const configSchema: z.ZodObject<{
181
79
  sharedClientId: z.ZodOptional<z.ZodString>;
182
80
  sharedClientSecret: z.ZodOptional<z.ZodString>;
183
81
  }, z.core.$strip>>;
184
- }, z.core.$strip>;
82
+ }, z.core.$loose>;
185
83
  type AppConfig = z.infer<typeof configSchema>;
186
84
  type AnalyticsConnection = z.infer<typeof analyticsConnectionSchema>;
187
85
  type AnalyticsProvider = z.infer<typeof analyticsProviderSchema>;
188
- type ClientProfile = z.infer<typeof clientProfileSchema>;
189
86
  //#endregion
190
87
  //#region packages/core/src/extract/canonical.d.ts
191
88
  type CanonicalSource = 'html-head' | 'html-body' | 'http-header';
@@ -1074,7 +971,7 @@ declare const RULE_DEFINITIONS: readonly [{
1074
971
  readonly howToVerify: "Re-run the crawl with the same GSC property and review the query, sampled text, and any deliberate wording changes together.";
1075
972
  readonly agentHints: {
1076
973
  readonly evidenceFields: ["page.topQuery", "issue.evidence.missingTerms", "issue.evidence.coverage"];
1077
- readonly suggestedCommands: ["seo crawl <url> --project <id> --json"];
974
+ readonly suggestedCommands: ["seo crawl <url> --site <site> --json"];
1078
975
  };
1079
976
  }, {
1080
977
  readonly id: "image_missing_alt";
@@ -2516,91 +2413,6 @@ declare function contentOptimizationReport(input: {
2516
2413
  js?: boolean | 'auto';
2517
2414
  }): Promise<ContentOptimizationReport>;
2518
2415
  //#endregion
2519
- //#region packages/core/src/analyze/monitoring/sitemaps.d.ts
2520
- type SitemapInvalidLoc = {
2521
- sitemapUrl: string;
2522
- kind: 'url' | 'sitemap';
2523
- value: string;
2524
- };
2525
- type SitemapLastmodObservation = {
2526
- sitemapUrl: string;
2527
- kind: 'url' | 'sitemap';
2528
- loc: string;
2529
- value: string;
2530
- };
2531
- type SitemapDocument = {
2532
- url: string;
2533
- finalUrl?: string;
2534
- redirected?: true;
2535
- dataStatus: 'complete' | 'partial' | 'unavailable';
2536
- status?: number;
2537
- contentType?: string;
2538
- compression: 'gzip' | 'none';
2539
- bytes?: number;
2540
- uncompressedBytes?: number;
2541
- root?: 'urlset' | 'sitemapindex';
2542
- warning?: string;
2543
- };
2544
- type SitemapFetchResult = {
2545
- sitemapUrl: string;
2546
- dataStatus: 'complete' | 'partial';
2547
- urls: string[];
2548
- nestedSitemaps: string[];
2549
- source: {
2550
- sitemapsFetched: number;
2551
- urlLocs: number;
2552
- sitemapLocs: number;
2553
- duplicateUrlLocs: number;
2554
- duplicateSitemapLocs: number;
2555
- invalidLocs: {
2556
- count: number;
2557
- samples: SitemapInvalidLoc[];
2558
- };
2559
- lastmods: {
2560
- trust: 'unverified';
2561
- observed: number;
2562
- parseable: number;
2563
- malformed: {
2564
- count: number;
2565
- samples: SitemapLastmodObservation[];
2566
- };
2567
- future: {
2568
- count: number;
2569
- samples: SitemapLastmodObservation[];
2570
- };
2571
- };
2572
- documents: SitemapDocument[];
2573
- };
2574
- truncation: {
2575
- possiblyTruncated: boolean;
2576
- urlLimitExceeded: boolean;
2577
- nestedSitemapLimitExceeded: boolean;
2578
- omittedUrlsAtLeast: number;
2579
- unprocessedSitemaps: number;
2580
- limits: {
2581
- urls: number;
2582
- sitemaps: number;
2583
- };
2584
- };
2585
- warnings: string[];
2586
- };
2587
- type BoundedSitemapInventory = {
2588
- urls: string[];
2589
- truncation: {
2590
- possiblyTruncated: boolean;
2591
- sourceTruncated: boolean;
2592
- inventoryLimitExceeded: boolean;
2593
- omittedUrlsAtLeast: number;
2594
- limit: number;
2595
- };
2596
- };
2597
- declare function boundedSitemapInventory(results: Array<Pick<SitemapFetchResult, 'urls' | 'truncation'>>, limit: number): BoundedSitemapInventory;
2598
- declare function fetchSitemapUrls(input: {
2599
- sitemapUrl: string;
2600
- limit?: number;
2601
- maxNested?: number;
2602
- }): Promise<SitemapFetchResult>;
2603
- //#endregion
2604
2416
  //#region packages/core/src/analyze/monitoring/types.d.ts
2605
2417
  type CrawlPageSnapshot = {
2606
2418
  url: string;
@@ -2829,242 +2641,91 @@ type CrawlRequestObservation = CrawlResponseObservation | {
2829
2641
  error: string;
2830
2642
  extraction: 'not-applicable';
2831
2643
  };
2832
- type CrawlRun = {
2833
- id: string;
2834
- site: string;
2835
- startUrl: string;
2836
- createdAt: string;
2837
- limit: number;
2838
- urlCount: number;
2839
- };
2840
- type CrawlDiffItem = {
2841
- url: string;
2842
- kind: 'added' | 'removed' | 'changed';
2843
- changes: string[];
2844
- before?: Partial<CrawlPageSnapshot>;
2845
- after?: Partial<CrawlPageSnapshot>;
2846
- recommendation?: CrawlDiffRecommendation;
2847
- };
2848
- type CrawlDiffRecommendation = {
2849
- severity: 'high' | 'medium' | 'low';
2850
- category: 'status' | 'indexability' | 'canonical' | 'metadata' | 'content' | 'inventory';
2851
- title: string;
2852
- action: string;
2853
- confidence: 'high' | 'medium' | 'low';
2644
+ //#endregion
2645
+ //#region packages/core/src/analyze/monitoring/sitemaps.d.ts
2646
+ type SitemapInvalidLoc = {
2647
+ sitemapUrl: string;
2648
+ kind: 'url' | 'sitemap';
2649
+ value: string;
2854
2650
  };
2855
- type CrawlDiffReport = {
2856
- run: CrawlRun;
2857
- previousRun?: CrawlRun;
2858
- summary: {
2859
- crawled: number;
2860
- added: number;
2861
- removed: number;
2862
- changed: number;
2863
- newErrors: number;
2864
- indexabilityFlips: number;
2865
- highPriorityRecommendations: number;
2866
- };
2867
- recommendations: Array<CrawlDiffRecommendation & {
2868
- url: string;
2869
- }>;
2870
- items: CrawlDiffItem[];
2871
- warnings: string[];
2651
+ type SitemapLastmodObservation = {
2652
+ sitemapUrl: string;
2653
+ kind: 'url' | 'sitemap';
2654
+ loc: string;
2655
+ value: string;
2872
2656
  };
2873
- type IndexWatchIssueCode = 'canonical_mismatch' | 'indexing_blocked_header' | 'indexing_blocked_meta' | 'inspection_failed' | 'inspection_quota_blocked' | 'page_fetch_failed' | 'robots_disallowed' | 'verdict_excluded' | 'verdict_invalid';
2874
- type IndexWatchChangeKind = 'baseline' | 'changed' | 'not-comparable' | 'recovery' | 'regression' | 'unchanged';
2875
- type IndexWatchChange = {
2876
- field: 'googleCanonical' | 'indexingState' | 'pageFetchState' | 'robotsTxtState' | 'userCanonical' | 'verdict';
2877
- before?: string;
2878
- after?: string;
2879
- };
2880
- type IndexWatchPrevious = {
2881
- inspectedAt: string;
2882
- verdict?: string;
2883
- coverageState?: string;
2884
- indexingState?: string;
2885
- robotsTxtState?: string;
2886
- pageFetchState?: string;
2887
- googleCanonical?: string;
2888
- userCanonical?: string;
2889
- lastCrawlTime?: string;
2890
- };
2891
- type IndexWatchItem = {
2892
- rootSite: string;
2893
- property: string;
2657
+ type SitemapDocument = {
2894
2658
  url: string;
2895
- inspectedAt: string;
2896
- inspectionStatus: 'deferred' | 'failed' | 'quota-blocked' | 'succeeded';
2897
- requestSent: boolean;
2898
- indexStatus: 'excluded' | 'indexed' | 'invalid' | 'unknown';
2899
- verdict?: string;
2900
- coverageState?: string;
2901
- indexingState?: string;
2902
- robotsTxtState?: string;
2903
- pageFetchState?: string;
2904
- googleCanonical?: string;
2905
- userCanonical?: string;
2906
- lastCrawlTime?: string;
2907
- previous?: IndexWatchPrevious;
2908
- issueCodes: IndexWatchIssueCode[];
2909
- currentIssue: boolean;
2910
- severity: 'high' | 'medium' | 'none';
2911
- changes: IndexWatchChange[];
2912
- changeKind: IndexWatchChangeKind;
2913
- changed: boolean;
2914
- regression: boolean;
2915
- recovery: boolean;
2916
- alert: boolean;
2917
- errorCode?: string;
2918
- errorMessage?: string;
2919
- retryAt?: string;
2920
- };
2921
- type IndexWatchReport = {
2922
- schemaVersion: 1;
2923
- methodology: 'index-watch-v2';
2924
- site: string;
2925
- generatedAt: string;
2659
+ finalUrl?: string;
2660
+ redirected?: true;
2661
+ dataStatus: 'complete' | 'partial' | 'unavailable';
2662
+ status?: number;
2663
+ contentType?: string;
2664
+ compression: 'gzip' | 'none';
2665
+ bytes?: number;
2666
+ uncompressedBytes?: number;
2667
+ root?: 'urlset' | 'sitemapindex';
2668
+ warning?: string;
2669
+ };
2670
+ type SitemapFetchResult = {
2671
+ sitemapUrl: string;
2926
2672
  dataStatus: 'complete' | 'partial';
2673
+ urls: string[];
2674
+ nestedSitemaps: string[];
2927
2675
  source: {
2928
- type: 'url-inspection-indexed-snapshot';
2929
- property: string;
2930
- dailyLimit: number;
2931
- languageCode?: string;
2676
+ sitemapsFetched: number;
2677
+ urlLocs: number;
2678
+ sitemapLocs: number;
2679
+ duplicateUrlLocs: number;
2680
+ duplicateSitemapLocs: number;
2681
+ invalidLocs: {
2682
+ count: number;
2683
+ samples: SitemapInvalidLoc[];
2684
+ };
2685
+ lastmods: {
2686
+ trust: 'unverified';
2687
+ observed: number;
2688
+ parseable: number;
2689
+ malformed: {
2690
+ count: number;
2691
+ samples: SitemapLastmodObservation[];
2692
+ };
2693
+ future: {
2694
+ count: number;
2695
+ samples: SitemapLastmodObservation[];
2696
+ };
2697
+ };
2698
+ documents: SitemapDocument[];
2932
2699
  };
2933
- summary: {
2934
- requested: number;
2935
- unique: number;
2936
- attempted: number;
2937
- inspected: number;
2938
- failed: number;
2939
- quotaBlocked: number;
2940
- deferred: number;
2941
- currentIssues: number;
2942
- changed: number;
2943
- regressions: number;
2944
- recoveries: number;
2945
- alerts: number;
2700
+ truncation: {
2701
+ possiblyTruncated: boolean;
2702
+ urlLimitExceeded: boolean;
2703
+ nestedSitemapLimitExceeded: boolean;
2704
+ omittedUrlsAtLeast: number;
2705
+ unprocessedSitemaps: number;
2706
+ limits: {
2707
+ urls: number;
2708
+ sitemaps: number;
2709
+ };
2946
2710
  };
2947
- caveats: string[];
2948
2711
  warnings: string[];
2949
- items: IndexWatchItem[];
2950
- };
2951
- type IndexMonitorPropertyRun = {
2952
- property: string;
2953
- inventoryUrls: number;
2954
- selectedUrls: number;
2955
- attempted: number;
2956
- inspected: number;
2957
- failed: number;
2958
- quotaBlocked: number;
2959
- deferred: number;
2960
- currentIssues: number;
2961
- changed: number;
2962
- regressions: number;
2963
- recoveries: number;
2964
- alerts: number;
2965
- sampleUrls: string[];
2966
2712
  };
2967
- type IndexMonitorReport = {
2968
- schemaVersion: 1;
2969
- methodology: 'index-monitor-v2';
2970
- site: string;
2971
- generatedAt: string;
2972
- dataStatus: 'complete' | 'partial';
2973
- source: {
2974
- type: 'sitemap-url-inspection-indexed-snapshot';
2975
- sitemaps: string[];
2976
- maxUrls: number;
2977
- dailyLimit: number;
2978
- inspectLimit: number;
2979
- staleAfterDays: number;
2980
- failureRetryHours: number;
2713
+ type BoundedSitemapInventory = {
2714
+ urls: string[];
2715
+ truncation: {
2981
2716
  possiblyTruncated: boolean;
2717
+ sourceTruncated: boolean;
2982
2718
  inventoryLimitExceeded: boolean;
2983
2719
  omittedUrlsAtLeast: number;
2984
- discoveredUrls: number;
2985
- invalidUrls: number;
2986
- };
2987
- summary: {
2988
- inventoryUrls: number;
2989
- properties: number;
2990
- dailyCapacity: number;
2991
- neverAttempted: number;
2992
- neverSucceeded: number;
2993
- retryWaiting: number;
2994
- fresh: number;
2995
- stale: number;
2996
- due: number;
2997
- selected: number;
2998
- unselectedDue: number;
2999
- attempted: number;
3000
- inspected: number;
3001
- failed: number;
3002
- quotaBlocked: number;
3003
- deferred: number;
3004
- currentIssues: number;
3005
- changed: number;
3006
- regressions: number;
3007
- recoveries: number;
3008
- alerts: number;
3009
- skipped: number;
2720
+ limit: number;
3010
2721
  };
3011
- properties: IndexMonitorPropertyRun[];
3012
- items: IndexWatchItem[];
3013
- caveats: string[];
3014
- warnings: string[];
3015
- };
3016
- type CrawlRunRow = {
3017
- id: string;
3018
- site_url: string;
3019
- start_url: string;
3020
- created_at: number;
3021
- limit_count: number;
3022
- url_count: number;
3023
- };
3024
- type CrawlPageRow = {
3025
- run_id: string;
3026
- url: string;
3027
- final_url: string;
3028
- status: number;
3029
- title?: string | null;
3030
- meta_description?: string | null;
3031
- canonical?: string | null;
3032
- meta_robots?: string | null;
3033
- x_robots_tag?: string | null;
3034
- h1?: string | null;
3035
- indexable: number;
3036
- word_count: number;
3037
- content_hash: string;
3038
- outgoing_internal_count: number;
3039
- snapshot_json?: string | null;
3040
- };
3041
- type IndexWatchRow = {
3042
- id?: string;
3043
- root_site_url?: string | null;
3044
- property_site_url?: string | null;
3045
- verdict?: string | null;
3046
- coverage_state?: string | null;
3047
- indexing_state?: string | null;
3048
- robots_txt_state?: string | null;
3049
- page_fetch_state?: string | null;
3050
- google_canonical?: string | null;
3051
- user_canonical?: string | null;
3052
- last_crawl_time?: string | null;
3053
- error_code?: string | null;
3054
- error_message?: string | null;
3055
- inspection_status?: string | null;
3056
- inspected_at?: number | null;
3057
- };
3058
- type LatestCrawlSummaryRow = CrawlRunRow & {
3059
- status_errors: number;
3060
- non_indexable: number;
3061
- recommendation_count: number;
3062
- high_recommendation_count: number;
3063
- top_recommendation_url?: string | null;
3064
- top_recommendation_title?: string | null;
3065
- top_recommendation_action?: string | null;
3066
- top_recommendation_severity?: string | null;
3067
2722
  };
2723
+ declare function boundedSitemapInventory(results: Array<Pick<SitemapFetchResult, 'urls' | 'truncation'>>, limit: number): BoundedSitemapInventory;
2724
+ declare function fetchSitemapUrls(input: {
2725
+ sitemapUrl: string;
2726
+ limit?: number;
2727
+ maxNested?: number;
2728
+ }): Promise<SitemapFetchResult>;
3068
2729
  //#endregion
3069
2730
  //#region packages/core/src/analyze/crawler/crawl-skip-reasons.d.ts
3070
2731
  declare const CRAWL_SKIP_REASONS: readonly ["asset-url", "configured-exclusion", "duplicate-normalization", "invalid-url", "memory-pressure", "off-origin", "origin-backpressure", "queue-safety-limit", "robots-disallowed", "robots-uncertain", "legacy-unclassified"];
@@ -3150,7 +2811,6 @@ type CrawlConfig = {
3150
2811
  type CrawlConfigInput = Omit<Partial<CrawlConfig>, 'url' | 'js'> & {
3151
2812
  url: string;
3152
2813
  js?: JavaScriptRenderingInput;
3153
- projectId?: string;
3154
2814
  site?: string;
3155
2815
  searchMetricsLimit?: number;
3156
2816
  googleAnalyticsPropertyId?: string;
@@ -3350,7 +3010,6 @@ type CrawlAccessSummary = {
3350
3010
  type CrawlReport = {
3351
3011
  id: string;
3352
3012
  definitionId: string;
3353
- projectId?: string;
3354
3013
  site?: string;
3355
3014
  googleAnalyticsPropertyId?: string;
3356
3015
  analyticsConnection?: AnalyticsConnection;
@@ -3403,7 +3062,6 @@ declare function createCrawlReport(input: {
3403
3062
  additionalIssues?: CrawlIssue[];
3404
3063
  linkGraph?: CrawlLinkGraph;
3405
3064
  ai?: CrawlAiSignals;
3406
- projectId?: string;
3407
3065
  site?: string;
3408
3066
  googleAnalyticsPropertyId?: string;
3409
3067
  analyticsConnection?: AnalyticsConnection;
@@ -3419,469 +3077,17 @@ declare function createCrawlReport(input: {
3419
3077
  }): CrawlReport;
3420
3078
  declare function normalizeLoadedCrawlReport(report: CrawlReport): CrawlReport;
3421
3079
  //#endregion
3422
- //#region packages/core/src/analyze/crawler/affected-urls.d.ts
3423
- type AffectedUrlFilters = {
3424
- ruleId?: string;
3425
- category?: string;
3426
- severity?: string;
3427
- limit?: number;
3428
- };
3429
- type AffectedUrl = {
3430
- url: string;
3431
- ruleId: RuleId;
3432
- title: string;
3433
- category: RuleCategory;
3434
- severity: RuleSeverity;
3435
- detail?: string;
3436
- evidence?: Record<string, unknown>;
3437
- clicks: number;
3438
- impressions: number;
3439
- sessions: number;
3440
- };
3441
- type AffectedUrlSelection = {
3442
- totalMatchedRows: number;
3443
- returnedRows: number;
3444
- limit: number;
3445
- truncated: boolean;
3446
- };
3447
- type AffectedUrlResult = {
3448
- affectedUrls: AffectedUrl[];
3449
- selection: AffectedUrlSelection;
3450
- };
3451
- declare function affectedUrls(report: CrawlReport, filters?: AffectedUrlFilters): AffectedUrl[];
3452
- declare function selectAffectedUrls(report: CrawlReport, filters?: AffectedUrlFilters): AffectedUrlResult;
3453
- //#endregion
3454
3080
  //#region packages/core/src/analyze/crawler/audit.d.ts
3455
3081
  declare function auditCrawlRequests(requests: CrawlRequestObservation[]): CrawlIssue[];
3456
3082
  declare function auditCrawlPages(pages: CrawlPageSnapshot[], opts?: {
3457
3083
  startUrl?: string;
3458
3084
  }): CrawlIssue[];
3459
3085
  //#endregion
3460
- //#region packages/core/src/analyze/crawler/report-store.d.ts
3461
- declare const CRAWL_REPORT_STORAGE_VERSION = 6;
3462
- declare const AUTOMATIC_BASELINE_SITE_RETENTION = 2;
3463
- declare const AUTOMATIC_BASELINE_TOTAL_RETENTION = 50;
3464
- type CrawlReportSaveOptions = {
3465
- retention?: 'saved' | 'baseline';
3466
- };
3467
- type CrawlReportMeta = {
3468
- id: string;
3469
- configHash: string;
3470
- site?: string;
3471
- url: string;
3472
- status: CrawlReport['status'];
3473
- totalPages: number;
3474
- issueCount: number;
3475
- createdAt: string;
3476
- storageVersion: number;
3477
- };
3478
- type CrawlReportStorageEnvelope = {
3479
- kind: 'seo.crawl_report';
3480
- version: typeof CRAWL_REPORT_STORAGE_VERSION;
3481
- savedAt: string;
3482
- tenant?: {
3483
- projectId?: string;
3484
- site?: string;
3485
- };
3486
- report: CrawlReport;
3487
- };
3488
- type CrawlReportStoreAdapter = {
3489
- save: (report: CrawlReport, options?: CrawlReportSaveOptions) => CrawlReportMeta;
3490
- list: (input?: {
3491
- site?: string;
3492
- limit?: number;
3493
- }) => CrawlReportMeta[];
3494
- load: (id: string) => CrawlReport | undefined;
3495
- delete: (id: string) => boolean;
3496
- latest: (site?: string) => CrawlReport | undefined;
3497
- };
3498
- declare const sqliteCrawlReportStore: CrawlReportStoreAdapter;
3499
- declare const crawlReportStore: CrawlReportStoreAdapter;
3500
- declare function saveCrawlReport(report: CrawlReport, store?: CrawlReportStoreAdapter, options?: CrawlReportSaveOptions): CrawlReportMeta;
3501
- declare function listCrawlReports(input?: {
3502
- site?: string;
3503
- limit?: number;
3504
- }, store?: CrawlReportStoreAdapter): CrawlReportMeta[];
3505
- declare function loadCrawlReport(id: string, store?: CrawlReportStoreAdapter): CrawlReport | undefined;
3506
- declare function deleteCrawlReport(id: string, store?: CrawlReportStoreAdapter): boolean;
3507
- declare function latestCrawlReport(site?: string, store?: CrawlReportStoreAdapter): CrawlReport | undefined;
3508
- //#endregion
3509
- //#region packages/core/src/fetch/crawler-identity.d.ts
3510
- declare const SEO_CRAWLER_TOKEN = "SEO-Skill";
3511
- declare const SEO_CRAWLER_USER_AGENT: string;
3512
- declare const SEO_CRAWLER_IDENTITY: CrawlerIdentity;
3513
- //#endregion
3514
- //#region packages/core/src/fetch/http-client.d.ts
3515
- type HttpProfile = 'browser' | 'bot';
3516
- declare class ResponseSizeLimitError extends Error {
3517
- readonly maxBytes: number;
3518
- constructor(maxBytes: number, label?: string);
3519
- }
3520
- /** @deprecated Use SEO_CRAWLER_USER_AGENT. */
3521
- declare const BROWSER_USER_AGENT: string;
3522
- declare function requestHeaders(profile: HttpProfile): Headers$1;
3523
- declare function publicHttpFetch(url: string, input?: RequestInit$1 & {
3524
- profile?: HttpProfile;
3525
- }): Promise<import("undici").Response>;
3526
- declare function readBoundedResponseText(response: Awaited<ReturnType<typeof publicHttpFetch>>, maxBytes: number, label?: string): Promise<string>;
3527
- //#endregion
3528
- //#region packages/core/src/provider-extensions/contracts.d.ts
3529
- declare const providerExtensionIdSchema: z.ZodString;
3530
- declare const providerPackageNameSchema: z.ZodString;
3531
- declare const providerExactVersionSchema: z.ZodString;
3532
- declare const providerIntegritySchema: z.ZodString;
3533
- declare const providerKindSchema: z.ZodEnum<{
3534
- "traffic-analytics": "traffic-analytics";
3535
- "search-results": "search-results";
3536
- "keyword-data": "keyword-data";
3537
- "domain-data": "domain-data";
3538
- "link-data": "link-data";
3539
- "local-search": "local-search";
3540
- "ai-data": "ai-data";
3541
- other: "other";
3542
- }>;
3543
- declare const providerConnectionFieldSchema: z.ZodObject<{
3544
- id: z.ZodString;
3545
- label: z.ZodString;
3546
- description: z.ZodOptional<z.ZodString>;
3547
- kind: z.ZodEnum<{
3548
- account: "account";
3549
- secret: "secret";
3550
- }>;
3551
- required: z.ZodOptional<z.ZodBoolean>;
3552
- envVar: z.ZodOptional<z.ZodString>;
3553
- }, z.core.$strict>;
3554
- declare const providerPackageManifestSchema: z.ZodObject<{
3555
- apiVersion: z.ZodLiteral<1>;
3556
- providers: z.ZodArray<z.ZodString>;
3557
- }, z.core.$strict>;
3558
- declare const installedProviderPackageSchema: z.ZodObject<{
3559
- id: z.ZodString;
3560
- package: z.ZodString;
3561
- version: z.ZodString;
3562
- integrity: z.ZodString;
3563
- enabled: z.ZodBoolean;
3564
- installedAt: z.ZodString;
3565
- }, z.core.$strict>;
3566
- declare const installedProviderPackagesSchema: z.ZodObject<{
3567
- schemaVersion: z.ZodLiteral<1>;
3568
- packages: z.ZodArray<z.ZodObject<{
3569
- id: z.ZodString;
3570
- package: z.ZodString;
3571
- version: z.ZodString;
3572
- integrity: z.ZodString;
3573
- enabled: z.ZodBoolean;
3574
- installedAt: z.ZodString;
3575
- }, z.core.$strict>>;
3576
- }, z.core.$strict>;
3577
- declare const providerRegistrationSchema: z.ZodObject<{
3578
- id: z.ZodString;
3579
- displayName: z.ZodString;
3580
- description: z.ZodString;
3581
- kinds: z.ZodArray<z.ZodEnum<{
3582
- "traffic-analytics": "traffic-analytics";
3583
- "search-results": "search-results";
3584
- "keyword-data": "keyword-data";
3585
- "domain-data": "domain-data";
3586
- "link-data": "link-data";
3587
- "local-search": "local-search";
3588
- "ai-data": "ai-data";
3589
- other: "other";
3590
- }>>;
3591
- connection: z.ZodCustom<SeoProviderConnectionAdapter, SeoProviderConnectionAdapter>;
3592
- capabilities: z.ZodArray<z.ZodType<SeoProviderCapabilityAdapter, unknown, z.core.$ZodTypeInternals<SeoProviderCapabilityAdapter, unknown>>>;
3593
- actions: z.ZodOptional<z.ZodArray<z.ZodCustom<SeoProviderActionAdapter, SeoProviderActionAdapter>>>;
3594
- }, z.core.$strict>;
3595
- type ProviderPackageManifest = z.infer<typeof providerPackageManifestSchema>;
3596
- type InstalledProviderPackage = z.infer<typeof installedProviderPackageSchema>;
3597
- type InstalledProviderPackages = z.infer<typeof installedProviderPackagesSchema>;
3598
- //#endregion
3599
- //#region packages/core/src/provider-extensions/registry.d.ts
3600
- type RegisteredProviderExtension = SeoProviderRegistration & {
3601
- package: string;
3602
- version: string;
3603
- };
3604
- declare class ProviderExtensionRegistry {
3605
- #private;
3606
- hostFor(input: {
3607
- package: string;
3608
- version: string;
3609
- }): SeoProviderHost;
3610
- get(id: string): RegisteredProviderExtension | undefined;
3611
- capability<TId extends SeoProviderCapabilityId>(providerId: string, capabilityId: TId): Extract<SeoProviderCapabilityAdapter, {
3612
- id: TId;
3613
- }> | undefined;
3614
- providersFor(capabilityId: SeoProviderCapabilityId): RegisteredProviderExtension[];
3615
- action(providerId: string, actionId: string): SeoProviderActionAdapter | undefined;
3616
- list(): RegisteredProviderExtension[];
3617
- }
3618
- //#endregion
3619
- //#region packages/core/src/provider-extensions/loader.d.ts
3620
- type ImportedProviderModule = {
3621
- default?: unknown;
3622
- };
3623
- type ProviderExtensionLoadFailure = {
3624
- id: string;
3625
- package: string;
3626
- message: string;
3627
- };
3628
- type LoadedProviderExtensions = {
3629
- registry: ProviderExtensionRegistry;
3630
- failures: ProviderExtensionLoadFailure[];
3631
- };
3632
- type ProviderExtensionLoaderOptions = {
3633
- registry?: ProviderExtensionRegistry;
3634
- packagesDir?: string;
3635
- installed?: readonly InstalledProviderPackage[];
3636
- importModule?: (url: string) => Promise<ImportedProviderModule>;
3637
- };
3638
- declare function loadProviderPackage(input: {
3639
- package: string;
3640
- version: string;
3641
- }, options: {
3642
- packagesDir: string;
3643
- importModule?: (url: string) => Promise<ImportedProviderModule>;
3644
- }): Promise<RegisteredProviderExtension[]>;
3645
- declare function loadInstalledProviderExtensions(options?: ProviderExtensionLoaderOptions): Promise<LoadedProviderExtensions>;
3646
- //#endregion
3647
- //#region packages/core/src/providers/imports/research-columns.d.ts
3648
- declare const RESEARCH_IMPORT_COLUMN_KEYS: readonly ["keyword", "url", "position", "absolutePosition", "searchVolume", "keywordDifficulty", "cpc", "paidCompetition", "intent", "resultCount", "estimatedTraffic", "resultType", "searchVolumeUpdatedAt"];
3649
- type ResearchImportColumn = (typeof RESEARCH_IMPORT_COLUMN_KEYS)[number];
3650
- type ResearchImportColumns = Partial<Record<ResearchImportColumn, string>>;
3651
- declare function normalizedResearchColumnName(value: string): string;
3652
- declare function researchImportColumns(value: ResearchImportColumns | undefined): ResearchImportColumns | undefined;
3653
- declare function validateResearchImportColumnSources(columns: ResearchImportColumns | undefined, includedFields: Iterable<string>): void;
3654
- //#endregion
3655
- //#region packages/core/src/providers/contracts.d.ts
3656
- declare const providerIdSchema: z.ZodString;
3657
- type ProviderId = z.infer<typeof providerIdSchema>;
3658
- type ExternalServiceId = string;
3659
- declare const providerCapabilitySchema: z.ZodEnum<{
3660
- "local-search": "local-search";
3661
- "serp-snapshot": "serp-snapshot";
3662
- "keyword-metrics": "keyword-metrics";
3663
- "keyword-discovery": "keyword-discovery";
3664
- "domain-overview": "domain-overview";
3665
- "ranked-keywords": "ranked-keywords";
3666
- "relevant-pages": "relevant-pages";
3667
- "serp-competitors": "serp-competitors";
3668
- "link-summary": "link-summary";
3669
- "referring-domains": "referring-domains";
3670
- backlinks: "backlinks";
3671
- "domain-rating": "domain-rating";
3672
- "ai-mentions": "ai-mentions";
3673
- "ai-prompt-observation": "ai-prompt-observation";
3674
- }>;
3675
- type ProviderCapability = z.infer<typeof providerCapabilitySchema>;
3676
- type ProviderValue<T> = {
3677
- state: 'observed';
3678
- value: T;
3679
- } | {
3680
- state: 'missing' | 'unavailable' | 'invalid';
3681
- value: null;
3682
- reason: string;
3683
- };
3684
- type ProviderWarning = {
3685
- code: string;
3686
- message: string;
3687
- field?: string;
3688
- row?: number;
3689
- };
3690
- type ProviderImportEvidence = {
3691
- provider: ProviderId;
3692
- path: string;
3693
- format: 'csv' | 'json' | 'jsonl';
3694
- encoding: 'utf-8' | 'utf-16be' | 'utf-16le';
3695
- delimiter: ',' | ';' | '\t' | null;
3696
- columnMapping: ResearchImportColumns | null;
3697
- sha256: string;
3698
- exportedAt: string;
3699
- importedAt: string;
3700
- includedFields: string[];
3701
- fileBytes: number;
3702
- bytesRead: number;
3703
- fileRows: number;
3704
- suppliedRows: number;
3705
- validRows: number;
3706
- filteredRows: number;
3707
- invalidRows: number;
3708
- duplicateRows: number;
3709
- capped: boolean;
3710
- rowLimit: number;
3711
- };
3712
- type KeywordMetric = {
3713
- keyword: string;
3714
- monthlySearchVolume: ProviderValue<number>;
3715
- monthlySearches: ProviderValue<KeywordMonthlySearch[]>;
3716
- searchVolumeUpdatedAt: ProviderValue<string>;
3717
- cpcUsd: ProviderValue<number>;
3718
- paidCompetition: ProviderValue<number>;
3719
- keywordDifficulty: ProviderValue<number>;
3720
- intent: ProviderValue<string>;
3721
- resultCount: ProviderValue<number>;
3722
- };
3723
- type KeywordMonthlySearch = {
3724
- year: number;
3725
- month: number;
3726
- searchVolume: number;
3727
- };
3728
- //#endregion
3729
- //#region packages/core/src/providers/transport.d.ts
3730
- type ProviderFetch = (url: string | URL, init?: RequestInit$1) => Promise<Response$1>;
3731
- type ProviderRequestInput = {
3732
- provider: ExternalServiceId;
3733
- operation: string;
3734
- url: string | URL;
3735
- init?: RequestInit$1;
3736
- fetch: ProviderFetch;
3737
- maxResponseBytes: number;
3738
- timeoutMs: number;
3739
- retry?: 'never' | 'safe';
3740
- retryDelayMs?: number;
3741
- onResponse?: (response: Response$1) => void;
3742
- };
3743
- declare function providerRequestText(input: ProviderRequestInput): Promise<string>;
3744
- declare function providerRequestJson<T>(input: ProviderRequestInput & {
3745
- schema: z.ZodType<T>;
3746
- }): Promise<T>;
3747
- //#endregion
3748
- //#region packages/core/src/provider-extensions/runtime.d.ts
3749
- type ProviderRuntimeOptions = {
3750
- fetch?: ProviderFetch;
3751
- maxRequests?: number;
3752
- now?: () => Date;
3753
- };
3754
- declare function normalizeProviderExtensionAccount(provider: Pick<SeoProviderRegistration, 'displayName' | 'connection'>, account: Readonly<Record<string, string>>): Record<string, string>;
3755
- declare function loadProviderExtensions(): Promise<LoadedProviderExtensions>;
3756
- declare function safeProviderAdapterError(providerId: string, error: unknown, credentials: Readonly<Record<string, string>>): Error;
3757
- declare function runtimeForProvider(provider: string, options?: ProviderRuntimeOptions): SeoProviderRuntime;
3758
- declare function verifyProviderExtension(input: {
3759
- providerId: string;
3760
- account: Readonly<Record<string, string>>;
3761
- credentials: Readonly<Record<string, string>>;
3762
- runtime?: ProviderRuntimeOptions;
3763
- }): Promise<void>;
3764
- //#endregion
3765
- //#region packages/core/src/provider-extensions/analytics.d.ts
3766
- type AnalyticsProviderRuntimeOptions = ProviderRuntimeOptions;
3767
- declare function verifyAnalyticsProvider(input: {
3768
- providerId: string;
3769
- account: Readonly<Record<string, string>>;
3770
- credentials: Readonly<Record<string, string>>;
3771
- runtime?: AnalyticsProviderRuntimeOptions;
3772
- }): Promise<void>;
3773
- declare function runAnalyticsProviderLandingPages(input: {
3774
- providerId: string;
3775
- account: Readonly<Record<string, string>>;
3776
- credentials?: Readonly<Record<string, string>>;
3777
- startDate: string;
3778
- endDate: string;
3779
- limit: number;
3780
- refresh?: boolean;
3781
- runtime?: AnalyticsProviderRuntimeOptions;
3782
- }): Promise<SeoLandingPageVisitsResult>;
3783
- //#endregion
3784
- //#region packages/core/src/analyze/workflows/analytics-value.d.ts
3785
- type LandingPageValue = {
3786
- sessions: number;
3787
- totalUsers?: number;
3788
- conversions?: number;
3789
- };
3790
- type LandingPageValueSource = {
3791
- provider?: string;
3792
- observedMetrics?: Array<'sessions' | 'totalUsers' | 'conversions'>;
3793
- dataStatus?: 'complete' | 'partial';
3794
- returnedRows: number;
3795
- availableRows?: number;
3796
- retainedRowLimit: number;
3797
- retainedRowLimitReached: boolean;
3798
- qualityWarnings?: string[];
3799
- };
3800
- type LandingPageValueResult = {
3801
- values: Map<string, LandingPageValue>;
3802
- source?: LandingPageValueSource;
3803
- warning?: string;
3804
- };
3805
- type LandingPageValueDependencies = {
3806
- runGa4Report: typeof runGa4Report;
3807
- analyticsLandingPages: typeof runAnalyticsProviderLandingPages;
3808
- };
3809
- declare function landingValueForUrl(values: Map<string, LandingPageValue>, url: string): LandingPageValue | undefined;
3810
- declare function fetchLandingPageValues(input: {
3811
- connection?: AnalyticsConnection;
3812
- propertyId?: string;
3813
- startDate: string;
3814
- endDate: string;
3815
- limit?: number;
3816
- refresh?: boolean;
3817
- }, dependencies?: Partial<LandingPageValueDependencies>): Promise<LandingPageValueResult>;
3818
- //#endregion
3819
- //#region packages/core/src/analyze/crawler/site-crawl-dependencies.d.ts
3820
- type ResolvedCrawlSiteDependencies = {
3821
- fetchPage: typeof crawlOne;
3822
- fetchStatusPage: typeof crawlStatusOnly;
3823
- fetchSitemapUrls: typeof fetchSitemapUrls;
3824
- fetch: typeof publicHttpFetch;
3825
- queryPageMetrics: typeof queryPageMetrics;
3826
- queryPageTopQuery: typeof queryPageTopQuery;
3827
- queryPagesMetrics?: typeof queryPagesMetrics;
3828
- queryPagesTopQueries?: typeof queryPagesTopQueries;
3829
- queryPagesMetricsBatch?: typeof queryPagesMetricsBatch;
3830
- queryPagesTopQueriesBatch?: typeof queryPagesTopQueriesBatch;
3831
- fetchLandingPageValues: typeof fetchLandingPageValues;
3832
- landingValueForUrl: typeof landingValueForUrl;
3833
- now: () => Date;
3834
- memoryUsage: () => Pick<NodeJS.MemoryUsage, 'rss' | 'heapUsed' | 'external'>;
3835
- totalMemory: () => number;
3836
- };
3837
- type CrawlSiteDependencies = Partial<ResolvedCrawlSiteDependencies>;
3838
- //#endregion
3839
- //#region packages/core/src/analyze/crawler/site-crawl.d.ts
3840
- declare function crawlSite(input: CrawlConfigInput, dependencies?: CrawlSiteDependencies): Promise<CrawlReport>;
3841
- //#endregion
3842
- //#region packages/core/src/analyze/crawler/baseline.d.ts
3843
- declare const REPORT_BASELINE_MAX_PAGES = 100;
3844
- declare const REPORT_BASELINE_MAX_DEPTH = 4;
3845
- declare const REPORT_BASELINE_MAX_AGE_MS: number;
3846
- type TechnicalBaselineStatus = 'created' | 'refreshed' | 'reused' | 'skipped' | 'unavailable';
3847
- type TechnicalBaseline = {
3848
- status: TechnicalBaselineStatus;
3849
- report?: CrawlReport;
3850
- reason?: string;
3851
- };
3852
- type ResolveTechnicalBaselineInput = {
3853
- /** Stable local identity used to find and save the crawl baseline. */
3854
- site: string;
3855
- /** Optional verified Search Console property used for Google data joins. */
3856
- searchSite?: string;
3857
- url?: string;
3858
- projectId?: string;
3859
- googleAnalyticsPropertyId?: string;
3860
- analyticsConnection?: CrawlConfigInput['analyticsConnection'];
3861
- crawl?: boolean;
3862
- refresh?: boolean;
3863
- maxPages?: number;
3864
- maxDepth?: number;
3865
- maxAgeMs?: number;
3866
- };
3867
- type TechnicalBaselineDependencies = {
3868
- latestCrawlReport: typeof latestCrawlReport;
3869
- crawlSite: typeof crawlSite;
3870
- saveCrawlReport: typeof saveCrawlReport;
3871
- now: () => Date;
3872
- };
3873
- declare function isCompatibleTechnicalBaseline(report: CrawlReport, input: Pick<ResolveTechnicalBaselineInput, 'url' | 'maxPages' | 'maxDepth' | 'googleAnalyticsPropertyId' | 'analyticsConnection'>): boolean;
3874
- declare function isCurrentTechnicalBaseline(report: CrawlReport, input: Pick<ResolveTechnicalBaselineInput, 'maxAgeMs'> & {
3875
- now: Date;
3876
- }): boolean;
3877
- declare function resolveTechnicalBaseline(input: ResolveTechnicalBaselineInput, dependencies?: TechnicalBaselineDependencies): Promise<TechnicalBaseline>;
3878
- //#endregion
3879
3086
  //#region packages/core/src/analyze/crawler/top-fixes.d.ts
3880
3087
  type TopFixFilters = {
3881
3088
  category?: RuleCategory | string;
3882
3089
  severity?: RuleSeverity | string;
3883
3090
  url?: string;
3884
- projectId?: string;
3885
3091
  limit?: number;
3886
3092
  recommendation?: RuleRecommendation;
3887
3093
  };
@@ -3921,136 +3127,6 @@ declare function renderCrawlJunit(report: CrawlReport): string;
3921
3127
  declare function renderCrawlHtml(report: CrawlReport, fixes?: TopFix[]): string;
3922
3128
  declare function renderCrawlMarkdownTickets(report: CrawlReport, fixes?: TopFix[]): string;
3923
3129
  //#endregion
3924
- //#region packages/core/src/analyze/crawler/history-provenance.d.ts
3925
- type CrawlSnapshotCaps = {
3926
- maxPages: number;
3927
- maxDepth: number;
3928
- timeoutMs: number;
3929
- searchConsolePageLimit?: number;
3930
- searchConsoleRetainedRowLimit?: number;
3931
- analyticsRetainedRowLimit?: number;
3932
- };
3933
- type CrawlSnapshotRequestScope = {
3934
- startUrl: string;
3935
- mode: CrawlConfig['mode'];
3936
- explicitUrls: string[];
3937
- include: string[];
3938
- exclude: string[];
3939
- respectRobots: boolean;
3940
- useSitemap: boolean;
3941
- checkExternal: boolean;
3942
- js: CrawlConfig['js'];
3943
- };
3944
- type CrawlSnapshotCompleteness = {
3945
- status: 'complete' | 'partial' | 'failed';
3946
- truncated: boolean;
3947
- reasons: string[];
3948
- requestEvidenceStatus: CrawlReport['requestEvidenceStatus'];
3949
- pageLimitReached: boolean;
3950
- skippedUrls: number;
3951
- skipReasons: CrawlSkipReasonCount[];
3952
- skippedUrlsByImpact: CrawlSkippedUrlsByImpact;
3953
- failedRequests: number;
3954
- abortedRequests: number;
3955
- extractionFailures: number;
3956
- dataSources?: CrawlReportDataSources;
3957
- };
3958
- type CrawlSnapshotInput = {
3959
- id: string;
3960
- definitionId: string;
3961
- generatedAt: string;
3962
- projectId?: string;
3963
- site?: string;
3964
- googleAnalyticsPropertyId?: string;
3965
- analyticsConnection?: CrawlReport['analyticsConnection'];
3966
- url: string;
3967
- status: CrawlReport['status'];
3968
- configHash: string;
3969
- config: CrawlConfig;
3970
- caps: CrawlSnapshotCaps;
3971
- requestScope: CrawlSnapshotRequestScope;
3972
- requestEvidenceStatus: CrawlReport['requestEvidenceStatus'];
3973
- dataSources?: CrawlReportDataSources;
3974
- warnings: string[];
3975
- caveats: string[];
3976
- completeness: CrawlSnapshotCompleteness;
3977
- summary: CrawlReportSummary;
3978
- };
3979
- type CrawlComparisonMetadata = {
3980
- before: CrawlSnapshotInput;
3981
- after: CrawlSnapshotInput;
3982
- comparability: {
3983
- status: 'comparable' | 'review-required';
3984
- sameDefinitionId: boolean;
3985
- sameConfigHash: boolean;
3986
- sameSite: boolean;
3987
- sameStartUrl: boolean;
3988
- sameMode: boolean;
3989
- sameRequestScope: boolean;
3990
- sameCaps: boolean;
3991
- };
3992
- completeness: {
3993
- status: 'complete' | 'partial' | 'failed';
3994
- truncated: boolean;
3995
- before: CrawlSnapshotCompleteness;
3996
- after: CrawlSnapshotCompleteness;
3997
- };
3998
- caveats: string[];
3999
- };
4000
- //#endregion
4001
- //#region packages/core/src/analyze/crawler/history.d.ts
4002
- type CrawlSnapshotPageChange = {
4003
- url: string;
4004
- kind: 'added' | 'removed' | 'changed';
4005
- changes: string[];
4006
- before?: Pick<CrawlPageSnapshot, 'url' | 'finalUrl' | 'status' | 'title' | 'metaDescription' | 'canonical' | 'h1' | 'indexable' | 'wordCount'>;
4007
- after?: Pick<CrawlPageSnapshot, 'url' | 'finalUrl' | 'status' | 'title' | 'metaDescription' | 'canonical' | 'h1' | 'indexable' | 'wordCount'>;
4008
- };
4009
- type CrawlSnapshotIssueChange = {
4010
- ruleId: string;
4011
- title: string;
4012
- severity: string;
4013
- category: string;
4014
- before: number;
4015
- after: number;
4016
- delta: number;
4017
- };
4018
- type CrawlSnapshotDiffReport = {
4019
- schemaVersion: 1;
4020
- before: CrawlComparisonMetadata['before'];
4021
- after: CrawlComparisonMetadata['after'];
4022
- comparability: CrawlComparisonMetadata['comparability'];
4023
- completeness: CrawlComparisonMetadata['completeness'];
4024
- caveats: string[];
4025
- summary: {
4026
- pageDelta: number;
4027
- issueDelta: number;
4028
- addedPages: number;
4029
- removedPages: number;
4030
- changedPages: number;
4031
- newStatusErrors: number;
4032
- fixedStatusErrors: number;
4033
- indexabilityFlips: number;
4034
- titleChanges: number;
4035
- contentChanges: number;
4036
- issueGroupsWorse: number;
4037
- issueGroupsBetter: number;
4038
- };
4039
- headline: string;
4040
- topActions: Array<{
4041
- title: string;
4042
- plainEnglish: string;
4043
- action: string;
4044
- urls?: string[];
4045
- }>;
4046
- pageChanges: CrawlSnapshotPageChange[];
4047
- issueChanges: CrawlSnapshotIssueChange[];
4048
- };
4049
- declare function compareCrawlReports(input: {
4050
- before: CrawlReport;
4051
- after: CrawlReport;
4052
- }): CrawlSnapshotDiffReport;
4053
- //#endregion
4054
3130
  //#region packages/core/src/analyze/crawler/schemas.d.ts
4055
3131
  declare const crawlerRuleSeveritySchema: z.ZodEnum<{
4056
3132
  high: "high";
@@ -5141,7 +4217,6 @@ declare const crawlReportSummarySchema: z.ZodObject<{
5141
4217
  declare const crawlReportSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
5142
4218
  id: z.ZodString;
5143
4219
  definitionId: z.ZodString;
5144
- projectId: z.ZodOptional<z.ZodString>;
5145
4220
  site: z.ZodOptional<z.ZodString>;
5146
4221
  googleAnalyticsPropertyId: z.ZodOptional<z.ZodString>;
5147
4222
  analyticsConnection: z.ZodOptional<z.ZodDiscriminatedUnion<[z.ZodObject<{
@@ -6384,7 +5459,6 @@ declare const crawlReportSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
6384
5459
  }, z.core.$strip>, z.ZodObject<{
6385
5460
  id: z.ZodString;
6386
5461
  definitionId: z.ZodString;
6387
- projectId: z.ZodOptional<z.ZodString>;
6388
5462
  site: z.ZodOptional<z.ZodString>;
6389
5463
  googleAnalyticsPropertyId: z.ZodOptional<z.ZodString>;
6390
5464
  analyticsConnection: z.ZodOptional<z.ZodDiscriminatedUnion<[z.ZodObject<{
@@ -7627,7 +6701,6 @@ declare const crawlReportSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
7627
6701
  }, z.core.$strip>, z.ZodObject<{
7628
6702
  id: z.ZodString;
7629
6703
  definitionId: z.ZodString;
7630
- projectId: z.ZodOptional<z.ZodString>;
7631
6704
  site: z.ZodOptional<z.ZodString>;
7632
6705
  googleAnalyticsPropertyId: z.ZodOptional<z.ZodString>;
7633
6706
  analyticsConnection: z.ZodOptional<z.ZodDiscriminatedUnion<[z.ZodObject<{
@@ -8872,7 +7945,6 @@ declare const crawlerSchemas: {
8872
7945
  crawlReport: z.ZodDiscriminatedUnion<[z.ZodObject<{
8873
7946
  id: z.ZodString;
8874
7947
  definitionId: z.ZodString;
8875
- projectId: z.ZodOptional<z.ZodString>;
8876
7948
  site: z.ZodOptional<z.ZodString>;
8877
7949
  googleAnalyticsPropertyId: z.ZodOptional<z.ZodString>;
8878
7950
  analyticsConnection: z.ZodOptional<z.ZodDiscriminatedUnion<[z.ZodObject<{
@@ -10115,7 +9187,6 @@ declare const crawlerSchemas: {
10115
9187
  }, z.core.$strip>, z.ZodObject<{
10116
9188
  id: z.ZodString;
10117
9189
  definitionId: z.ZodString;
10118
- projectId: z.ZodOptional<z.ZodString>;
10119
9190
  site: z.ZodOptional<z.ZodString>;
10120
9191
  googleAnalyticsPropertyId: z.ZodOptional<z.ZodString>;
10121
9192
  analyticsConnection: z.ZodOptional<z.ZodDiscriminatedUnion<[z.ZodObject<{
@@ -11358,7 +10429,6 @@ declare const crawlerSchemas: {
11358
10429
  }, z.core.$strip>, z.ZodObject<{
11359
10430
  id: z.ZodString;
11360
10431
  definitionId: z.ZodString;
11361
- projectId: z.ZodOptional<z.ZodString>;
11362
10432
  site: z.ZodOptional<z.ZodString>;
11363
10433
  googleAnalyticsPropertyId: z.ZodOptional<z.ZodString>;
11364
10434
  analyticsConnection: z.ZodOptional<z.ZodDiscriminatedUnion<[z.ZodObject<{
@@ -13529,7 +12599,6 @@ declare const crawlerJsonSchemas: {
13529
12599
  crawlReport: z.core.ZodStandardJSONSchemaPayload<z.ZodDiscriminatedUnion<[z.ZodObject<{
13530
12600
  id: z.ZodString;
13531
12601
  definitionId: z.ZodString;
13532
- projectId: z.ZodOptional<z.ZodString>;
13533
12602
  site: z.ZodOptional<z.ZodString>;
13534
12603
  googleAnalyticsPropertyId: z.ZodOptional<z.ZodString>;
13535
12604
  analyticsConnection: z.ZodOptional<z.ZodDiscriminatedUnion<[z.ZodObject<{
@@ -14772,7 +13841,6 @@ declare const crawlerJsonSchemas: {
14772
13841
  }, z.core.$strip>, z.ZodObject<{
14773
13842
  id: z.ZodString;
14774
13843
  definitionId: z.ZodString;
14775
- projectId: z.ZodOptional<z.ZodString>;
14776
13844
  site: z.ZodOptional<z.ZodString>;
14777
13845
  googleAnalyticsPropertyId: z.ZodOptional<z.ZodString>;
14778
13846
  analyticsConnection: z.ZodOptional<z.ZodDiscriminatedUnion<[z.ZodObject<{
@@ -16015,7 +15083,6 @@ declare const crawlerJsonSchemas: {
16015
15083
  }, z.core.$strip>, z.ZodObject<{
16016
15084
  id: z.ZodString;
16017
15085
  definitionId: z.ZodString;
16018
- projectId: z.ZodOptional<z.ZodString>;
16019
15086
  site: z.ZodOptional<z.ZodString>;
16020
15087
  googleAnalyticsPropertyId: z.ZodOptional<z.ZodString>;
16021
15088
  analyticsConnection: z.ZodOptional<z.ZodDiscriminatedUnion<[z.ZodObject<{
@@ -18183,6 +17250,339 @@ declare const crawlerJsonSchemas: {
18183
17250
  }, z.core.$strip>>;
18184
17251
  };
18185
17252
  //#endregion
17253
+ //#region packages/core/src/fetch/crawler-identity.d.ts
17254
+ declare const SEO_CRAWLER_TOKEN = "SEO-Skill";
17255
+ declare const SEO_CRAWLER_USER_AGENT: string;
17256
+ declare const SEO_CRAWLER_IDENTITY: CrawlerIdentity;
17257
+ //#endregion
17258
+ //#region packages/core/src/fetch/http-client.d.ts
17259
+ type HttpProfile = 'browser' | 'bot';
17260
+ declare class ResponseSizeLimitError extends Error {
17261
+ readonly maxBytes: number;
17262
+ constructor(maxBytes: number, label?: string);
17263
+ }
17264
+ /** @deprecated Use SEO_CRAWLER_USER_AGENT. */
17265
+ declare const BROWSER_USER_AGENT: string;
17266
+ declare function requestHeaders(profile: HttpProfile): Headers$1;
17267
+ declare function publicHttpFetch(url: string, input?: RequestInit$1 & {
17268
+ profile?: HttpProfile;
17269
+ }): Promise<import("undici").Response>;
17270
+ declare function readBoundedResponseText(response: Awaited<ReturnType<typeof publicHttpFetch>>, maxBytes: number, label?: string): Promise<string>;
17271
+ //#endregion
17272
+ //#region packages/core/src/provider-extensions/contracts.d.ts
17273
+ declare const providerExtensionIdSchema: z.ZodString;
17274
+ declare const providerPackageNameSchema: z.ZodString;
17275
+ declare const providerExactVersionSchema: z.ZodString;
17276
+ declare const providerIntegritySchema: z.ZodString;
17277
+ declare const providerKindSchema: z.ZodEnum<{
17278
+ "traffic-analytics": "traffic-analytics";
17279
+ "search-results": "search-results";
17280
+ "keyword-data": "keyword-data";
17281
+ "domain-data": "domain-data";
17282
+ "link-data": "link-data";
17283
+ "local-search": "local-search";
17284
+ "ai-data": "ai-data";
17285
+ other: "other";
17286
+ }>;
17287
+ declare const providerConnectionFieldSchema: z.ZodObject<{
17288
+ id: z.ZodString;
17289
+ label: z.ZodString;
17290
+ description: z.ZodOptional<z.ZodString>;
17291
+ kind: z.ZodEnum<{
17292
+ account: "account";
17293
+ secret: "secret";
17294
+ }>;
17295
+ required: z.ZodOptional<z.ZodBoolean>;
17296
+ envVar: z.ZodOptional<z.ZodString>;
17297
+ }, z.core.$strict>;
17298
+ declare const providerPackageManifestSchema: z.ZodObject<{
17299
+ apiVersion: z.ZodLiteral<1>;
17300
+ providers: z.ZodArray<z.ZodString>;
17301
+ }, z.core.$strict>;
17302
+ declare const installedProviderPackageSchema: z.ZodObject<{
17303
+ id: z.ZodString;
17304
+ package: z.ZodString;
17305
+ version: z.ZodString;
17306
+ integrity: z.ZodString;
17307
+ enabled: z.ZodBoolean;
17308
+ installedAt: z.ZodString;
17309
+ }, z.core.$strict>;
17310
+ declare const installedProviderPackagesSchema: z.ZodObject<{
17311
+ schemaVersion: z.ZodLiteral<1>;
17312
+ packages: z.ZodArray<z.ZodObject<{
17313
+ id: z.ZodString;
17314
+ package: z.ZodString;
17315
+ version: z.ZodString;
17316
+ integrity: z.ZodString;
17317
+ enabled: z.ZodBoolean;
17318
+ installedAt: z.ZodString;
17319
+ }, z.core.$strict>>;
17320
+ }, z.core.$strict>;
17321
+ declare const providerRegistrationSchema: z.ZodObject<{
17322
+ id: z.ZodString;
17323
+ displayName: z.ZodString;
17324
+ description: z.ZodString;
17325
+ kinds: z.ZodArray<z.ZodEnum<{
17326
+ "traffic-analytics": "traffic-analytics";
17327
+ "search-results": "search-results";
17328
+ "keyword-data": "keyword-data";
17329
+ "domain-data": "domain-data";
17330
+ "link-data": "link-data";
17331
+ "local-search": "local-search";
17332
+ "ai-data": "ai-data";
17333
+ other: "other";
17334
+ }>>;
17335
+ connection: z.ZodCustom<SeoProviderConnectionAdapter, SeoProviderConnectionAdapter>;
17336
+ capabilities: z.ZodArray<z.ZodType<SeoProviderCapabilityAdapter, unknown, z.core.$ZodTypeInternals<SeoProviderCapabilityAdapter, unknown>>>;
17337
+ actions: z.ZodOptional<z.ZodArray<z.ZodCustom<SeoProviderActionAdapter, SeoProviderActionAdapter>>>;
17338
+ }, z.core.$strict>;
17339
+ type ProviderPackageManifest = z.infer<typeof providerPackageManifestSchema>;
17340
+ type InstalledProviderPackage = z.infer<typeof installedProviderPackageSchema>;
17341
+ type InstalledProviderPackages = z.infer<typeof installedProviderPackagesSchema>;
17342
+ //#endregion
17343
+ //#region packages/core/src/provider-extensions/registry.d.ts
17344
+ type RegisteredProviderExtension = SeoProviderRegistration & {
17345
+ package: string;
17346
+ version: string;
17347
+ };
17348
+ declare class ProviderExtensionRegistry {
17349
+ #private;
17350
+ hostFor(input: {
17351
+ package: string;
17352
+ version: string;
17353
+ }): SeoProviderHost;
17354
+ get(id: string): RegisteredProviderExtension | undefined;
17355
+ capability<TId extends SeoProviderCapabilityId>(providerId: string, capabilityId: TId): Extract<SeoProviderCapabilityAdapter, {
17356
+ id: TId;
17357
+ }> | undefined;
17358
+ providersFor(capabilityId: SeoProviderCapabilityId): RegisteredProviderExtension[];
17359
+ action(providerId: string, actionId: string): SeoProviderActionAdapter | undefined;
17360
+ list(): RegisteredProviderExtension[];
17361
+ }
17362
+ //#endregion
17363
+ //#region packages/core/src/provider-extensions/loader.d.ts
17364
+ type ImportedProviderModule = {
17365
+ default?: unknown;
17366
+ };
17367
+ type ProviderExtensionLoadFailure = {
17368
+ id: string;
17369
+ package: string;
17370
+ message: string;
17371
+ };
17372
+ type LoadedProviderExtensions = {
17373
+ registry: ProviderExtensionRegistry;
17374
+ failures: ProviderExtensionLoadFailure[];
17375
+ };
17376
+ type ProviderExtensionLoaderOptions = {
17377
+ registry?: ProviderExtensionRegistry;
17378
+ packagesDir?: string;
17379
+ installed?: readonly InstalledProviderPackage[];
17380
+ importModule?: (url: string) => Promise<ImportedProviderModule>;
17381
+ };
17382
+ declare function loadProviderPackage(input: {
17383
+ package: string;
17384
+ version: string;
17385
+ }, options: {
17386
+ packagesDir: string;
17387
+ importModule?: (url: string) => Promise<ImportedProviderModule>;
17388
+ }): Promise<RegisteredProviderExtension[]>;
17389
+ declare function loadInstalledProviderExtensions(options?: ProviderExtensionLoaderOptions): Promise<LoadedProviderExtensions>;
17390
+ //#endregion
17391
+ //#region packages/core/src/providers/imports/research-columns.d.ts
17392
+ declare const RESEARCH_IMPORT_COLUMN_KEYS: readonly ["keyword", "url", "position", "absolutePosition", "searchVolume", "keywordDifficulty", "cpc", "paidCompetition", "intent", "resultCount", "estimatedTraffic", "resultType", "searchVolumeUpdatedAt"];
17393
+ type ResearchImportColumn = (typeof RESEARCH_IMPORT_COLUMN_KEYS)[number];
17394
+ type ResearchImportColumns = Partial<Record<ResearchImportColumn, string>>;
17395
+ declare function normalizedResearchColumnName(value: string): string;
17396
+ declare function researchImportColumns(value: ResearchImportColumns | undefined): ResearchImportColumns | undefined;
17397
+ declare function validateResearchImportColumnSources(columns: ResearchImportColumns | undefined, includedFields: Iterable<string>): void;
17398
+ //#endregion
17399
+ //#region packages/core/src/providers/contracts.d.ts
17400
+ declare const providerIdSchema: z.ZodString;
17401
+ type ProviderId = z.infer<typeof providerIdSchema>;
17402
+ type ExternalServiceId = string;
17403
+ declare const providerCapabilitySchema: z.ZodEnum<{
17404
+ "local-search": "local-search";
17405
+ "serp-snapshot": "serp-snapshot";
17406
+ "keyword-metrics": "keyword-metrics";
17407
+ "keyword-discovery": "keyword-discovery";
17408
+ "domain-overview": "domain-overview";
17409
+ "ranked-keywords": "ranked-keywords";
17410
+ "relevant-pages": "relevant-pages";
17411
+ "serp-competitors": "serp-competitors";
17412
+ "link-summary": "link-summary";
17413
+ "referring-domains": "referring-domains";
17414
+ backlinks: "backlinks";
17415
+ "domain-rating": "domain-rating";
17416
+ "ai-mentions": "ai-mentions";
17417
+ "ai-prompt-observation": "ai-prompt-observation";
17418
+ }>;
17419
+ type ProviderCapability = z.infer<typeof providerCapabilitySchema>;
17420
+ type ProviderValue<T> = {
17421
+ state: 'observed';
17422
+ value: T;
17423
+ } | {
17424
+ state: 'missing' | 'unavailable' | 'invalid';
17425
+ value: null;
17426
+ reason: string;
17427
+ };
17428
+ type ProviderWarning = {
17429
+ code: string;
17430
+ message: string;
17431
+ field?: string;
17432
+ row?: number;
17433
+ };
17434
+ type ProviderImportEvidence = {
17435
+ provider: ProviderId;
17436
+ path: string;
17437
+ format: 'csv' | 'json' | 'jsonl';
17438
+ encoding: 'utf-8' | 'utf-16be' | 'utf-16le';
17439
+ delimiter: ',' | ';' | '\t' | null;
17440
+ columnMapping: ResearchImportColumns | null;
17441
+ sha256: string;
17442
+ exportedAt: string;
17443
+ importedAt: string;
17444
+ includedFields: string[];
17445
+ fileBytes: number;
17446
+ bytesRead: number;
17447
+ fileRows: number;
17448
+ suppliedRows: number;
17449
+ validRows: number;
17450
+ filteredRows: number;
17451
+ invalidRows: number;
17452
+ duplicateRows: number;
17453
+ capped: boolean;
17454
+ rowLimit: number;
17455
+ };
17456
+ type KeywordMetric = {
17457
+ keyword: string;
17458
+ monthlySearchVolume: ProviderValue<number>;
17459
+ monthlySearches: ProviderValue<KeywordMonthlySearch[]>;
17460
+ searchVolumeUpdatedAt: ProviderValue<string>;
17461
+ cpcUsd: ProviderValue<number>;
17462
+ paidCompetition: ProviderValue<number>;
17463
+ keywordDifficulty: ProviderValue<number>;
17464
+ intent: ProviderValue<string>;
17465
+ resultCount: ProviderValue<number>;
17466
+ };
17467
+ type KeywordMonthlySearch = {
17468
+ year: number;
17469
+ month: number;
17470
+ searchVolume: number;
17471
+ };
17472
+ //#endregion
17473
+ //#region packages/core/src/providers/transport.d.ts
17474
+ type ProviderFetch = (url: string | URL, init?: RequestInit$1) => Promise<Response$1>;
17475
+ type ProviderRequestInput = {
17476
+ provider: ExternalServiceId;
17477
+ operation: string;
17478
+ url: string | URL;
17479
+ init?: RequestInit$1;
17480
+ fetch: ProviderFetch;
17481
+ maxResponseBytes: number;
17482
+ timeoutMs: number;
17483
+ retry?: 'never' | 'safe';
17484
+ retryDelayMs?: number;
17485
+ onResponse?: (response: Response$1) => void;
17486
+ };
17487
+ declare function providerRequestText(input: ProviderRequestInput): Promise<string>;
17488
+ declare function providerRequestJson<T>(input: ProviderRequestInput & {
17489
+ schema: z.ZodType<T>;
17490
+ }): Promise<T>;
17491
+ //#endregion
17492
+ //#region packages/core/src/provider-extensions/runtime.d.ts
17493
+ type ProviderRuntimeOptions = {
17494
+ fetch?: ProviderFetch;
17495
+ maxRequests?: number;
17496
+ now?: () => Date;
17497
+ };
17498
+ declare function normalizeProviderExtensionAccount(provider: Pick<SeoProviderRegistration, 'displayName' | 'connection'>, account: Readonly<Record<string, string>>): Record<string, string>;
17499
+ declare function loadProviderExtensions(): Promise<LoadedProviderExtensions>;
17500
+ declare function safeProviderAdapterError(providerId: string, error: unknown, credentials: Readonly<Record<string, string>>): Error;
17501
+ declare function runtimeForProvider(provider: string, options?: ProviderRuntimeOptions): SeoProviderRuntime;
17502
+ declare function verifyProviderExtension(input: {
17503
+ providerId: string;
17504
+ account: Readonly<Record<string, string>>;
17505
+ credentials: Readonly<Record<string, string>>;
17506
+ runtime?: ProviderRuntimeOptions;
17507
+ }): Promise<void>;
17508
+ //#endregion
17509
+ //#region packages/core/src/provider-extensions/analytics.d.ts
17510
+ type AnalyticsProviderRuntimeOptions = ProviderRuntimeOptions;
17511
+ declare function verifyAnalyticsProvider(input: {
17512
+ providerId: string;
17513
+ account: Readonly<Record<string, string>>;
17514
+ credentials: Readonly<Record<string, string>>;
17515
+ runtime?: AnalyticsProviderRuntimeOptions;
17516
+ }): Promise<void>;
17517
+ declare function runAnalyticsProviderLandingPages(input: {
17518
+ providerId: string;
17519
+ account: Readonly<Record<string, string>>;
17520
+ credentials?: Readonly<Record<string, string>>;
17521
+ startDate: string;
17522
+ endDate: string;
17523
+ limit: number;
17524
+ refresh?: boolean;
17525
+ runtime?: AnalyticsProviderRuntimeOptions;
17526
+ }): Promise<SeoLandingPageVisitsResult>;
17527
+ //#endregion
17528
+ //#region packages/core/src/analyze/workflows/analytics-value.d.ts
17529
+ type LandingPageValue = {
17530
+ sessions: number;
17531
+ totalUsers?: number;
17532
+ conversions?: number;
17533
+ };
17534
+ type LandingPageValueSource = {
17535
+ provider?: string;
17536
+ observedMetrics?: Array<'sessions' | 'totalUsers' | 'conversions'>;
17537
+ dataStatus?: 'complete' | 'partial';
17538
+ returnedRows: number;
17539
+ availableRows?: number;
17540
+ retainedRowLimit: number;
17541
+ retainedRowLimitReached: boolean;
17542
+ qualityWarnings?: string[];
17543
+ };
17544
+ type LandingPageValueResult = {
17545
+ values: Map<string, LandingPageValue>;
17546
+ source?: LandingPageValueSource;
17547
+ warning?: string;
17548
+ };
17549
+ type LandingPageValueDependencies = {
17550
+ runGa4Report: typeof runGa4Report;
17551
+ analyticsLandingPages: typeof runAnalyticsProviderLandingPages;
17552
+ };
17553
+ declare function landingValueForUrl(values: Map<string, LandingPageValue>, url: string): LandingPageValue | undefined;
17554
+ declare function fetchLandingPageValues(input: {
17555
+ connection?: AnalyticsConnection;
17556
+ propertyId?: string;
17557
+ startDate: string;
17558
+ endDate: string;
17559
+ limit?: number;
17560
+ refresh?: boolean;
17561
+ }, dependencies?: Partial<LandingPageValueDependencies>): Promise<LandingPageValueResult>;
17562
+ //#endregion
17563
+ //#region packages/core/src/analyze/crawler/site-crawl-dependencies.d.ts
17564
+ type ResolvedCrawlSiteDependencies = {
17565
+ fetchPage: typeof crawlOne;
17566
+ fetchStatusPage: typeof crawlStatusOnly;
17567
+ fetchSitemapUrls: typeof fetchSitemapUrls;
17568
+ fetch: typeof publicHttpFetch;
17569
+ queryPageMetrics: typeof queryPageMetrics;
17570
+ queryPageTopQuery: typeof queryPageTopQuery;
17571
+ queryPagesMetrics?: typeof queryPagesMetrics;
17572
+ queryPagesTopQueries?: typeof queryPagesTopQueries;
17573
+ queryPagesMetricsBatch?: typeof queryPagesMetricsBatch;
17574
+ queryPagesTopQueriesBatch?: typeof queryPagesTopQueriesBatch;
17575
+ fetchLandingPageValues: typeof fetchLandingPageValues;
17576
+ landingValueForUrl: typeof landingValueForUrl;
17577
+ now: () => Date;
17578
+ memoryUsage: () => Pick<NodeJS.MemoryUsage, 'rss' | 'heapUsed' | 'external'>;
17579
+ totalMemory: () => number;
17580
+ };
17581
+ type CrawlSiteDependencies = Partial<ResolvedCrawlSiteDependencies>;
17582
+ //#endregion
17583
+ //#region packages/core/src/analyze/crawler/site-crawl.d.ts
17584
+ declare function crawlSite(input: CrawlConfigInput, dependencies?: CrawlSiteDependencies): Promise<CrawlReport>;
17585
+ //#endregion
18186
17586
  //#region packages/core/src/analyze/query-quality.d.ts
18187
17587
  type QueryFlag = 'likely-automated' | 'navigational-other';
18188
17588
  declare const QUERY_FLAG_METHOD: {
@@ -19649,194 +19049,6 @@ declare function findOverlappingSearchUpdates(input: {
19649
19049
  paddingDays?: number;
19650
19050
  }): SearchUpdate[];
19651
19051
  //#endregion
19652
- //#region packages/core/src/analyze/experiments/types.d.ts
19653
- type ContentGroupDimension = 'page' | 'query';
19654
- type ContentGroupMatchType = 'equals' | 'contains' | 'regex';
19655
- type ContentGroup = {
19656
- id: string;
19657
- site: string;
19658
- name: string;
19659
- dimension: ContentGroupDimension;
19660
- matchType: ContentGroupMatchType;
19661
- pattern: string;
19662
- createdAt: string;
19663
- };
19664
- type ChangeScope = 'site' | 'page' | 'query' | 'group';
19665
- type SeoChange = {
19666
- id: string;
19667
- site: string;
19668
- scope: ChangeScope;
19669
- target: string;
19670
- title: string;
19671
- description?: string;
19672
- changedAt: string;
19673
- createdAt: string;
19674
- };
19675
- type TestMetrics = {
19676
- clicks: number;
19677
- impressions: number;
19678
- ctr: number;
19679
- position: number;
19680
- };
19681
- type AnalyticsTestMetrics = {
19682
- sessions: number;
19683
- engagedSessions: number;
19684
- conversions: number;
19685
- totalRevenue: number;
19686
- };
19687
- type MetricDelta = {
19688
- clicks: number | null;
19689
- clickPct: number | null;
19690
- impressions: number | null;
19691
- impressionPct: number | null;
19692
- ctr: number | null;
19693
- position: number | null;
19694
- };
19695
- type AnalyticsMetricDelta = {
19696
- sessions: number;
19697
- sessionPct: number | null;
19698
- engagedSessions: number;
19699
- engagedSessionPct: number | null;
19700
- conversions: number;
19701
- conversionPct: number | null;
19702
- totalRevenue: number;
19703
- revenuePct: number | null;
19704
- };
19705
- type ChangeMeasurement = {
19706
- schemaVersion: 1;
19707
- methodology: 'equal-finalized-calendar-windows-v1';
19708
- dataStatus: 'complete' | 'partial';
19709
- change: SeoChange;
19710
- window: {
19711
- requestedDays: number;
19712
- effectiveDays: number;
19713
- afterWindowTruncated: boolean;
19714
- gscTimezone: 'America/Los_Angeles';
19715
- availableDateWindow: {
19716
- earliestDate: string;
19717
- latestFinalDate: string;
19718
- };
19719
- };
19720
- source: {
19721
- searchAnalytics: {
19722
- status: 'complete' | 'partial';
19723
- completeness: 'date-aggregates' | 'retained-query-date-aggregates';
19724
- dimensions: ['date'];
19725
- searchType: 'web';
19726
- dataState: 'final';
19727
- before: {
19728
- calls: number;
19729
- rowsFetched: number;
19730
- returnedRows: number;
19731
- invalidRows: number;
19732
- duplicateRows: number;
19733
- };
19734
- after: {
19735
- calls: number;
19736
- rowsFetched: number;
19737
- returnedRows: number;
19738
- invalidRows: number;
19739
- duplicateRows: number;
19740
- };
19741
- control?: {
19742
- status: 'complete' | 'partial';
19743
- completeness: 'date-aggregates' | 'retained-query-date-aggregates';
19744
- before: ChangeMeasurement['source']['searchAnalytics']['before'];
19745
- after: ChangeMeasurement['source']['searchAnalytics']['after'];
19746
- };
19747
- warnings: string[];
19748
- };
19749
- analytics?: {
19750
- status: 'complete' | 'partial';
19751
- before: {
19752
- rows: number;
19753
- rowCount: number;
19754
- timeZone?: string;
19755
- currencyCode?: string;
19756
- };
19757
- after: {
19758
- rows: number;
19759
- rowCount: number;
19760
- timeZone?: string;
19761
- currencyCode?: string;
19762
- };
19763
- warnings: string[];
19764
- };
19765
- };
19766
- before: {
19767
- startDate: string;
19768
- endDate: string;
19769
- metrics: TestMetrics | null;
19770
- };
19771
- after: {
19772
- startDate: string;
19773
- endDate: string;
19774
- metrics: TestMetrics | null;
19775
- };
19776
- delta: MetricDelta;
19777
- analytics?: {
19778
- propertyId: string;
19779
- before: {
19780
- startDate: string;
19781
- endDate: string;
19782
- metrics: AnalyticsTestMetrics;
19783
- };
19784
- after: {
19785
- startDate: string;
19786
- endDate: string;
19787
- metrics: AnalyticsTestMetrics;
19788
- };
19789
- delta: AnalyticsMetricDelta;
19790
- note: string;
19791
- };
19792
- control?: {
19793
- change: SeoChange;
19794
- before: {
19795
- startDate: string;
19796
- endDate: string;
19797
- metrics: TestMetrics | null;
19798
- };
19799
- after: {
19800
- startDate: string;
19801
- endDate: string;
19802
- metrics: TestMetrics | null;
19803
- };
19804
- delta: MetricDelta;
19805
- adjusted: {
19806
- methodology: 'control-ratio-counterfactual-v1';
19807
- clickDelta: number | null;
19808
- clickPctPoints: number | null;
19809
- impressionDelta: number | null;
19810
- impressionPctPoints: number | null;
19811
- };
19812
- note: string;
19813
- };
19814
- verdict: 'positive' | 'negative' | 'mixed' | 'flat' | 'not-enough-data';
19815
- confidence: 'high' | 'medium' | 'low';
19816
- note: string;
19817
- warnings: string[];
19818
- caveats: string[];
19819
- };
19820
- type ContentGroupRow = {
19821
- id: string;
19822
- site_url: string;
19823
- name: string;
19824
- dimension: ContentGroupDimension;
19825
- match_type: ContentGroupMatchType;
19826
- pattern: string;
19827
- created_at: number;
19828
- };
19829
- type ChangeRow = {
19830
- id: string;
19831
- site_url: string;
19832
- scope: ChangeScope;
19833
- target: string;
19834
- title: string;
19835
- description?: string | null;
19836
- changed_at: string;
19837
- created_at: number;
19838
- };
19839
- //#endregion
19840
19052
  //#region packages/core/src/analyze/traffic-anomaly-analysis.d.ts
19841
19053
  interface TrafficAnomaly {
19842
19054
  site: string;
@@ -19851,10 +19063,41 @@ interface TrafficAnomaly {
19851
19063
  comparisonTotal: number;
19852
19064
  percentChange: number | null;
19853
19065
  zScore: number | null;
19854
- significanceMethod: 'z-score' | 'outside-flat-baseline' | 'none';
19066
+ significanceMethod: 'z-score' | 'outside-flat-baseline' | 'step-change' | 'none';
19855
19067
  direction: 'drop' | 'spike' | 'normal';
19856
19068
  significant: boolean;
19069
+ /**
19070
+ * How the comparison was chosen. `step-change`: the daily series has a
19071
+ * sustained level change, so the baseline is every day before it and the
19072
+ * comparison is every day from it. `recent-window`: no step change, so the
19073
+ * last recentDays are compared with the days before them. Optional only
19074
+ * for older fixtures.
19075
+ */
19076
+ detection?: 'step-change' | 'recent-window';
19077
+ /** First observed day at the new level for a step change, else null. */
19078
+ changeDate?: string | null;
19857
19079
  }
19080
+ /** The step-change heuristic and its thresholds, returned with the report. */
19081
+ declare const STEP_CHANGE_RULES: {
19082
+ readonly method: "best-split";
19083
+ readonly description: "Heuristic. The change date is the split of the daily series where the mean before and the mean after differ most, weighted by segment length. It counts as a step change only when it is sudden and sustained. Sudden: the median of up to localDays observed days after the date differs from the median of up to localDays days before it by at least minLocalShiftInStdDevs pooled within-segment standard deviations, so one unusual day is not a step and a slow trend is not a step. Sustained: the mean of every day from the date differs from the mean before it by a z-score of at least minZScore, stricter than the recent-window test because the date is chosen from the data. Otherwise the last recentDays are compared with the days before them.";
19084
+ readonly minDaysBefore: 7;
19085
+ readonly minDaysAfter: 3;
19086
+ readonly localDays: 7;
19087
+ readonly minLocalShiftInStdDevs: 2;
19088
+ readonly minZScore: 3;
19089
+ };
19090
+ type TrafficAnomalyDetection = typeof STEP_CHANGE_RULES & {
19091
+ recentDays: number;
19092
+ };
19093
+ /**
19094
+ * The dates to check against Google updates (before padding): the change
19095
+ * date of the first significant step change, else the comparison window.
19096
+ */
19097
+ declare function changeWindow(anomalies: TrafficAnomaly[]): {
19098
+ start: string;
19099
+ end: string;
19100
+ } | undefined;
19858
19101
  interface TrafficAnomalyCoverage {
19859
19102
  status: 'complete' | 'partial';
19860
19103
  requestedStart: string;
@@ -19865,6 +19108,10 @@ interface TrafficAnomalyCoverage {
19865
19108
  duplicateRows: number;
19866
19109
  expectedDays: number;
19867
19110
  missingDays: number;
19111
+ /**
19112
+ * The recent-window split (last recentDays against the days before). A
19113
+ * metric with a step change uses its own dates, shown on its anomaly row.
19114
+ */
19868
19115
  baseline: {
19869
19116
  start: string;
19870
19117
  end: string;
@@ -19904,6 +19151,8 @@ interface TrafficAnomalyReport {
19904
19151
  /** Row and day counts behind the anomaly test. Optional only for older fixtures. */
19905
19152
  selection?: TrafficAnomalySelection;
19906
19153
  coverage?: TrafficAnomalyCoverage;
19154
+ /** Detection method and thresholds. Optional only for older fixtures. */
19155
+ detection?: TrafficAnomalyDetection;
19907
19156
  }
19908
19157
  interface UpdateCorrelationReport {
19909
19158
  site: string;
@@ -19925,19 +19174,9 @@ interface UpdateCorrelationReport {
19925
19174
  };
19926
19175
  }
19927
19176
  type UpdateConfounder = {
19928
- source: 'change-log' | 'manual';
19929
- title: string;
19930
- date?: string;
19931
- scope?: ChangeScope;
19932
- target?: string;
19933
- description?: string;
19934
- };
19935
- declare function changesInWindow(input: {
19936
- changes: SeoChange[];
19937
- startDate?: string;
19938
- endDate?: string;
19939
- paddingDays: number;
19940
- }): SeoChange[];
19177
+ source: 'manual';
19178
+ title: string;
19179
+ };
19941
19180
  declare function interpretUpdateCorrelation(input: {
19942
19181
  site: string;
19943
19182
  anomalies: TrafficAnomaly[];
@@ -19957,6 +19196,7 @@ declare function analyzeTrafficAnomalyRows(input: {
19957
19196
  }): {
19958
19197
  anomalies: TrafficAnomaly[];
19959
19198
  coverage: TrafficAnomalyCoverage;
19199
+ detection: TrafficAnomalyDetection;
19960
19200
  };
19961
19201
  //#endregion
19962
19202
  //#region packages/core/src/analyze/traffic-anomaly-report.d.ts
@@ -19984,7 +19224,6 @@ declare function updateCorrelation(input: {
19984
19224
  endDate?: string;
19985
19225
  paddingDays?: number;
19986
19226
  knownConfounders?: string[];
19987
- includeChangeLog?: boolean;
19988
19227
  refresh?: boolean;
19989
19228
  trafficAnomalies?: TrafficAnomaly[];
19990
19229
  }): Promise<UpdateCorrelationReport>;
@@ -20065,57 +19304,6 @@ declare function diagnoseProperty(input: {
20065
19304
  progress?: ProgressReporter;
20066
19305
  }, dependencies?: Partial<DiagnosePropertyDependencies>): Promise<DiagnosePropertyReport>;
20067
19306
  //#endregion
20068
- //#region packages/core/src/analyze/experiments/change-log.d.ts
20069
- declare function recordChange(input: {
20070
- site: string;
20071
- scope: ChangeScope;
20072
- target: string;
20073
- title: string;
20074
- description?: string;
20075
- changedAt: string;
20076
- }): SeoChange;
20077
- declare function listChanges(input?: {
20078
- site?: string;
20079
- limit?: number;
20080
- }): SeoChange[];
20081
- declare function getChange(id: string): SeoChange | undefined;
20082
- declare function deleteChange(id: string): boolean;
20083
- //#endregion
20084
- //#region packages/core/src/analyze/experiments/content-groups.d.ts
20085
- declare function createContentGroup(input: {
20086
- site: string;
20087
- name: string;
20088
- dimension?: ContentGroupDimension;
20089
- matchType?: ContentGroupMatchType;
20090
- pattern: string;
20091
- }): ContentGroup;
20092
- declare function listContentGroups(site?: string): ContentGroup[];
20093
- declare function getContentGroup(id: string): ContentGroup | undefined;
20094
- declare function deleteContentGroup(id: string): boolean;
20095
- //#endregion
20096
- //#region packages/core/src/analyze/experiments/measure-change.d.ts
20097
- type MeasureChangeDependencies = {
20098
- searchAnalytics: typeof querySearchAnalytics;
20099
- googleAnalyticsReport: typeof runGa4Report;
20100
- contentGroup: typeof getContentGroup;
20101
- now: () => Date;
20102
- };
20103
- declare function measureChange(input: {
20104
- id?: string;
20105
- site?: string;
20106
- scope?: ChangeScope;
20107
- target?: string;
20108
- title?: string;
20109
- changedAt?: string;
20110
- googleAnalyticsPropertyId?: string;
20111
- controlScope?: ChangeScope;
20112
- controlTarget?: string;
20113
- controlTitle?: string;
20114
- beforeDays?: number;
20115
- afterDays?: number;
20116
- refresh?: boolean;
20117
- }, dependencies?: MeasureChangeDependencies): Promise<ChangeMeasurement>;
20118
- //#endregion
20119
19307
  //#region packages/core/src/analyze/internal-links-types.d.ts
20120
19308
  type InternalLinkMatchKind = 'exact-query' | 'lexical-review';
20121
19309
  interface InternalLinkQueryMatch {
@@ -20346,50 +19534,6 @@ interface InternalLinksDependencies {
20346
19534
  }
20347
19535
  declare function internalLinksReport(input: InternalLinksInput, dependencies?: InternalLinksDependencies): Promise<InternalLinksReport>;
20348
19536
  //#endregion
20349
- //#region packages/core/src/analyze/monitoring/crawl-diff.d.ts
20350
- declare function compareCrawlPages(input: {
20351
- current: CrawlPageSnapshot[];
20352
- previous: CrawlPageSnapshot[];
20353
- }): CrawlDiffItem[];
20354
- declare function crawlDiff(input: {
20355
- startUrl: string;
20356
- site?: string;
20357
- limit?: number;
20358
- refresh?: boolean;
20359
- js?: boolean | 'auto';
20360
- }): Promise<CrawlDiffReport>;
20361
- //#endregion
20362
- //#region packages/core/src/analyze/monitoring/crawl-recommendations.d.ts
20363
- declare function recommendCrawlDiffItem(item: CrawlDiffItem): CrawlDiffRecommendation | undefined;
20364
- declare function attachCrawlRecommendations(items: CrawlDiffItem[]): CrawlDiffItem[];
20365
- declare function topCrawlRecommendations(items: CrawlDiffItem[]): Array<CrawlDiffRecommendation & {
20366
- url: string;
20367
- }>;
20368
- //#endregion
20369
- //#region packages/core/src/analyze/monitoring/crawl-store.d.ts
20370
- declare const CRAWL_RUN_RETENTION = 20;
20371
- declare function getPreviousRun(input: {
20372
- site: string;
20373
- startUrl: string;
20374
- currentRunId: string;
20375
- }): CrawlRun | undefined;
20376
- declare function getRunPages(runId: string): Map<string, CrawlPageSnapshot>;
20377
- declare function insertCrawlRun(run: CrawlRun, pages: CrawlPageSnapshot[], recommendations?: Array<CrawlDiffRecommendation & {
20378
- url: string;
20379
- }>): void;
20380
- declare function latestCrawlSummaries(site: string, limit?: number): Array<CrawlRun & {
20381
- statusErrors: number;
20382
- nonIndexable: number;
20383
- recommendations: number;
20384
- highPriorityRecommendations: number;
20385
- topRecommendation?: {
20386
- url: string;
20387
- title: string;
20388
- action: string;
20389
- severity: string;
20390
- };
20391
- }>;
20392
- //#endregion
20393
19537
  //#region packages/core/src/analyze/url-templates.d.ts
20394
19538
  type PseoTemplateCluster = {
20395
19539
  id: string;
@@ -20563,7 +19707,8 @@ type SearchAnalytics = typeof querySearchAnalytics;
20563
19707
  type FetchSitemap = typeof fetchSitemapUrls;
20564
19708
  type IndexCoverageReportInput = {
20565
19709
  site: string;
20566
- crawlReportId?: string;
19710
+ /** Start URL for the crawl. Defaults to the property's home page. */
19711
+ url?: string;
20567
19712
  sitemaps?: string[];
20568
19713
  days?: number;
20569
19714
  rowLimit?: number;
@@ -20597,189 +19742,13 @@ type IndexCoverageReport = IndexCoverageSignalsReport & {
20597
19742
  };
20598
19743
  };
20599
19744
  type IndexCoverageReportDependencies = {
20600
- loadCrawl: (id: string) => CrawlReport | undefined;
20601
- latestCrawl: (site: string) => CrawlReport | undefined;
19745
+ crawl: (input: CrawlConfigInput) => Promise<CrawlReport>;
20602
19746
  searchAnalytics: SearchAnalytics;
20603
19747
  fetchSitemap: FetchSitemap;
20604
19748
  now: () => Date;
20605
19749
  };
20606
19750
  declare function indexCoverageSignals(input: IndexCoverageReportInput, dependencies?: IndexCoverageReportDependencies): Promise<IndexCoverageReport>;
20607
19751
  //#endregion
20608
- //#region packages/core/src/analyze/monitoring/index-monitor.d.ts
20609
- type DueUrl = {
20610
- url: string;
20611
- lastInspectedAt?: number;
20612
- dueReason: 'never-attempted' | 'never-succeeded' | 'stale';
20613
- };
20614
- type DueIndexUrl = DueUrl & {
20615
- property: string;
20616
- };
20617
- type DueIndexSelection = {
20618
- selected: DueIndexUrl[];
20619
- summary: {
20620
- neverAttempted: number;
20621
- neverSucceeded: number;
20622
- retryWaiting: number;
20623
- fresh: number;
20624
- stale: number;
20625
- due: number;
20626
- unselectedDue: number;
20627
- };
20628
- };
20629
- declare function planDueIndexUrls(input: {
20630
- site: string;
20631
- urls: string[];
20632
- accountProperties: string[];
20633
- dailyLimit: number;
20634
- inspectLimit: number;
20635
- staleAfterDays?: number;
20636
- failureRetryHours?: number;
20637
- now?: Date;
20638
- }): DueIndexSelection;
20639
- declare function selectDueIndexUrls(input: Parameters<typeof planDueIndexUrls>[0]): DueIndexUrl[];
20640
- declare function indexMonitor(input: {
20641
- site: string;
20642
- sitemaps: string[];
20643
- properties?: string[];
20644
- dailyLimit?: number;
20645
- inspectLimit?: number;
20646
- maxUrls?: number;
20647
- languageCode?: string;
20648
- refresh?: boolean;
20649
- }): Promise<IndexMonitorReport>;
20650
- //#endregion
20651
- //#region packages/core/src/analyze/monitoring/index-plan.d.ts
20652
- type IndexPlanProperty = {
20653
- property: string;
20654
- urlCount: number;
20655
- dailyLimit: number;
20656
- cycleDays: number;
20657
- sampleUrls: string[];
20658
- };
20659
- type IndexPlanSuggestion = {
20660
- property: string;
20661
- urlCount: number;
20662
- currentProperty: string;
20663
- estimatedCycleDays: number;
20664
- sampleUrls: string[];
20665
- reason: string;
20666
- };
20667
- type IndexCoveragePlan = {
20668
- site: string;
20669
- generatedAt: string;
20670
- summary: {
20671
- sitemapUrls: number;
20672
- urlCount: number;
20673
- properties: number;
20674
- dailyCapacity: number;
20675
- estimatedCycleDays: number;
20676
- targetCycleDays: number;
20677
- suggestedProperties: number;
20678
- };
20679
- properties: IndexPlanProperty[];
20680
- suggestions: IndexPlanSuggestion[];
20681
- warnings: string[];
20682
- };
20683
- type IndexPropertyUrlAllocation = {
20684
- property: string;
20685
- urls: string[];
20686
- };
20687
- type IndexCoveragePlanInput = {
20688
- site: string;
20689
- urls: string[];
20690
- sitemaps?: string[];
20691
- accountProperties: string[];
20692
- dailyLimit?: number;
20693
- targetCycleDays?: number;
20694
- suggestionLimit?: number;
20695
- warnings?: string[];
20696
- };
20697
- declare function propertyMatchesUrl(property: string, url: string): boolean;
20698
- declare function allocateIndexUrlsToProperties(input: {
20699
- site: string;
20700
- urls: string[];
20701
- accountProperties: string[];
20702
- }): IndexPropertyUrlAllocation[];
20703
- declare function indexCoveragePlan(input: {
20704
- site: string;
20705
- sitemaps: string[];
20706
- properties?: string[];
20707
- dailyLimit?: number;
20708
- targetCycleDays?: number;
20709
- maxUrls?: number;
20710
- suggestionLimit?: number;
20711
- refresh?: boolean;
20712
- }): Promise<IndexCoveragePlan>;
20713
- declare function planIndexCoverageFromUrls(input: IndexCoveragePlanInput): IndexCoveragePlan;
20714
- //#endregion
20715
- //#region packages/core/src/storage/sqlite.d.ts
20716
- type TransactionFunction = (...params: never[]) => unknown;
20717
- declare class Statement {
20718
- private readonly statement;
20719
- constructor(statement: Libsql.Statement);
20720
- run(...params: unknown[]): SqliteDatabase.RunResult;
20721
- get(...params: unknown[]): unknown;
20722
- all(...params: unknown[]): unknown[];
20723
- }
20724
- declare class SqliteDatabase {
20725
- private readonly database;
20726
- constructor(filename: string | Buffer);
20727
- prepare(source: string): Statement;
20728
- transaction<F extends TransactionFunction>(fn: F): Libsql.Transaction<F>;
20729
- exec(source: string): this;
20730
- pragma(source: string): unknown;
20731
- close(): this;
20732
- }
20733
- declare namespace SqliteDatabase {
20734
- type Database = SqliteDatabase;
20735
- type RunResult = {
20736
- changes: number;
20737
- lastInsertRowid: number | bigint;
20738
- };
20739
- }
20740
- //#endregion
20741
- //#region packages/core/src/storage/database.d.ts
20742
- declare function ensurePrivateDatabaseFiles(path: string): void;
20743
- declare function getDb(): SqliteDatabase.Database;
20744
- declare function noteCacheWrite(sizeBytes?: number, database?: SqliteDatabase.Database): void;
20745
- declare function checkDatabaseReadiness(): {
20746
- dbPath: string;
20747
- };
20748
- declare function hashKey(parts: unknown[]): string;
20749
- declare function getCacheStats(): CacheStats;
20750
- declare function clearCache(provider?: 'gsc' | 'google-analytics' | 'dataforseo' | 'ahrefs' | 'clicky' | 'http', olderThanMs?: number): number;
20751
- //#endregion
20752
- //#region packages/core/src/analyze/monitoring/index-watch.d.ts
20753
- declare const INDEX_WATCH_ATTEMPT_RETENTION = 20;
20754
- type InspectUrl = (input: UrlInspectionRequest) => Promise<UrlInspectionResult>;
20755
- type IndexWatchStore = {
20756
- latest(rootSite: string, url: string): IndexWatchPrevious | undefined;
20757
- insert(item: IndexWatchItem): void;
20758
- };
20759
- type IndexWatchDependencies = {
20760
- inspectUrl: InspectUrl;
20761
- now: () => Date;
20762
- store: IndexWatchStore;
20763
- };
20764
- declare function pruneIndexWatchSnapshots(rootSite: string, url: string, database?: ReturnType<typeof getDb>): number;
20765
- declare function indexWatch(input: {
20766
- site: string;
20767
- rootSite?: string;
20768
- urls: string[];
20769
- languageCode?: string;
20770
- dailyLimit?: number;
20771
- continueOnPropertyError?: boolean;
20772
- }, dependencies?: IndexWatchDependencies): Promise<IndexWatchReport>;
20773
- declare function latestIndexWatchSummary(site: string): {
20774
- inspectedUrls: number;
20775
- earliestInspectedAt?: string;
20776
- latestInspectedAt?: string;
20777
- currentIssues: number;
20778
- failed: number;
20779
- nonPass: number;
20780
- blocked: number;
20781
- };
20782
- //#endregion
20783
19752
  //#region packages/core/src/analyze/monitoring/redirect-trace.d.ts
20784
19753
  type RedirectTraceStep = {
20785
19754
  url: string;
@@ -20867,63 +19836,6 @@ declare function linkRecover(input: {
20867
19836
  js?: boolean | 'auto';
20868
19837
  }): Promise<LinkRecoverReport>;
20869
19838
  //#endregion
20870
- //#region packages/core/src/analyze/monitoring/link-recover-store.d.ts
20871
- declare const LINK_RECOVER_RUN_RETENTION = 20;
20872
- type LinkRecoverSummary = {
20873
- id: string;
20874
- site: string;
20875
- createdAt: string;
20876
- range: {
20877
- startDate: string;
20878
- endDate: string;
20879
- days: number;
20880
- };
20881
- checked: number;
20882
- recoverable: number;
20883
- high: number;
20884
- medium: number;
20885
- low: number;
20886
- clicksAtRisk: number;
20887
- impressionsAtRisk: number;
20888
- topIssue?: string;
20889
- topUrl?: string;
20890
- topAction?: string;
20891
- repeatedUrls: number;
20892
- repeatedTopUrl?: string;
20893
- };
20894
- declare function insertLinkRecoverRun(report: LinkRecoverReport): string;
20895
- declare function latestLinkRecoverSummary(site: string): LinkRecoverSummary | undefined;
20896
- declare function getRepeatedLinkRecoverUrls(site: string, runLimit?: number): Array<{
20897
- url: string;
20898
- seenCount: number;
20899
- }>;
20900
- //#endregion
20901
- //#region packages/core/src/analyze/monitoring/status.d.ts
20902
- type CheckStatus = 'clear' | 'attention' | 'stale' | 'not-run';
20903
- type MonitoringStatusCheck = {
20904
- name: 'crawl' | 'index' | 'link-recovery';
20905
- status: CheckStatus;
20906
- lastRunAt?: string;
20907
- summary: string;
20908
- action?: string;
20909
- };
20910
- type MonitoringStatusReport = {
20911
- site: string;
20912
- generatedAt: string;
20913
- health: CheckStatus;
20914
- summary: {
20915
- checks: number;
20916
- attention: number;
20917
- stale: number;
20918
- notRun: number;
20919
- };
20920
- checks: MonitoringStatusCheck[];
20921
- };
20922
- declare function monitoringStatus(input: {
20923
- site: string;
20924
- staleAfterDays?: number;
20925
- }): MonitoringStatusReport;
20926
- //#endregion
20927
19839
  //#region packages/core/src/analyze/performance-types.d.ts
20928
19840
  type PerformanceRating = 'good' | 'needs-work' | 'poor' | 'unknown';
20929
19841
  type PerformanceMetric = {
@@ -21152,45 +20064,11 @@ declare function buildQueryClusterReportFromRows(input: {
21152
20064
  limit?: number;
21153
20065
  }): QueryClusterReport;
21154
20066
  //#endregion
21155
- //#region packages/core/src/errors.d.ts
21156
- type SeoErrorCode = 'ACCESS_DENIED' | 'AUTH_CONFIG_REQUIRED' | 'AUTH_EXPIRED' | 'AUTH_REQUIRED' | 'INSUFFICIENT_DATA' | 'INTERNAL_ERROR' | 'INVALID_INPUT' | 'OPTIONAL_PROVIDER_UNAVAILABLE' | 'PROPERTY_NOT_FOUND' | 'PROVIDER_UNAVAILABLE' | 'RATE_LIMITED';
21157
- declare class SeoError extends Error {
21158
- readonly code: SeoErrorCode;
21159
- readonly exitCode: number;
21160
- readonly retryable: boolean;
21161
- constructor(code: SeoErrorCode, message: string);
21162
- }
21163
- declare function toSeoError(error: unknown): SeoError;
21164
- declare function isSkippableReportError(error: unknown): boolean;
21165
- declare function seoErrorEnvelope(error: unknown): {
21166
- ok: false;
21167
- error: {
21168
- code: SeoErrorCode;
21169
- message: string;
21170
- retryable: boolean;
21171
- };
21172
- };
21173
- //#endregion
21174
20067
  //#region packages/core/src/analyze/reports/types.d.ts
21175
20068
  type NarrativeSection = {
21176
20069
  title: string;
21177
20070
  bullets: string[];
21178
20071
  };
21179
- type ChangeMeasurementAttempt = {
21180
- status: 'measured';
21181
- dataStatus: ChangeMeasurement['dataStatus'];
21182
- change: SeoChange;
21183
- measurement: ChangeMeasurement;
21184
- } | {
21185
- status: 'failed';
21186
- dataStatus: 'unavailable';
21187
- change: SeoChange;
21188
- error: {
21189
- code: SeoErrorCode;
21190
- message: string;
21191
- retryable: boolean;
21192
- };
21193
- };
21194
20072
  type ReportNarrative = {
21195
20073
  site: string;
21196
20074
  generatedAt: string;
@@ -21209,13 +20087,6 @@ type ReportNarrative = {
21209
20087
  action: string;
21210
20088
  }>;
21211
20089
  diagnosis: DiagnosePropertyReport;
21212
- changeMeasurements: ChangeMeasurement[];
21213
- changeMeasurementAttempts: ChangeMeasurementAttempt[];
21214
- monitoring: {
21215
- crawlRuns: ReturnType<typeof latestCrawlSummaries>;
21216
- indexWatch: ReturnType<typeof latestIndexWatchSummary>;
21217
- linkRecover: ReturnType<typeof latestLinkRecoverSummary>;
21218
- };
21219
20090
  };
21220
20091
  //#endregion
21221
20092
  //#region packages/core/src/analyze/reports/narrative.d.ts
@@ -21226,7 +20097,6 @@ declare function reportNarrative(input: {
21226
20097
  startDate?: string;
21227
20098
  endDate?: string;
21228
20099
  limit?: number;
21229
- changeLimit?: number;
21230
20100
  brandTerms?: string[];
21231
20101
  includeBrand?: boolean;
21232
20102
  verifyContent?: boolean;
@@ -21480,32 +20350,6 @@ declare function refreshPrioritiesWorkflow(input: {
21480
20350
  diagnosis: Awaited<ReturnType<typeof diagnoseProperty>>;
21481
20351
  }>>;
21482
20352
  //#endregion
21483
- //#region packages/core/src/analyze/workflows/technical-watch.d.ts
21484
- type TechnicalWatchIndexOutput = Awaited<ReturnType<typeof indexWatch>> | Awaited<ReturnType<typeof indexMonitor>>;
21485
- declare function technicalWatchWorkflow(input: {
21486
- site: string;
21487
- startUrl?: string;
21488
- urls?: string[];
21489
- sitemaps?: string[];
21490
- properties?: string[];
21491
- limit?: number;
21492
- refresh?: boolean;
21493
- js?: boolean | 'auto';
21494
- languageCode?: string;
21495
- dailyLimit?: number;
21496
- inspectLimit?: number;
21497
- maxUrls?: number;
21498
- recoverLinks?: boolean;
21499
- recoverDays?: number;
21500
- recoverLimit?: number;
21501
- recoverMinClicks?: number;
21502
- recoverMinImpressions?: number;
21503
- }): Promise<WorkflowReport<{
21504
- crawl?: Awaited<ReturnType<typeof crawlDiff>>;
21505
- index?: TechnicalWatchIndexOutput;
21506
- recovery?: Awaited<ReturnType<typeof linkRecover>>;
21507
- }>>;
21508
- //#endregion
21509
20353
  //#region packages/core/src/analyze/workflows/segments.d.ts
21510
20354
  type WorkflowSegmentCoverage = {
21511
20355
  evidenceScope: 'matched-retained-segments';
@@ -21575,7 +20419,6 @@ declare function updatePostmortemWorkflow(input: {
21575
20419
  brandTerms?: string[];
21576
20420
  includeBrand?: boolean;
21577
20421
  knownConfounders?: string[];
21578
- includeChangeLog?: boolean;
21579
20422
  refresh?: boolean;
21580
20423
  }, dependencies?: {
21581
20424
  updateCorrelation?: typeof updateCorrelation;
@@ -21639,6 +20482,7 @@ declare function detectBrandTerms(input: {
21639
20482
  //#region packages/core/src/storage/provider-secrets.d.ts
21640
20483
  declare const PROVIDER_SECRET_NAMES: {
21641
20484
  readonly ahrefsApiKey: "ahrefs-api-key";
20485
+ readonly bingApiKey: "bing-api-key";
21642
20486
  readonly clickySiteKeys: "clicky-sitekeys";
21643
20487
  readonly dataForSeoCredentials: "dataforseo-credentials";
21644
20488
  readonly providerExtensionCredentials: "provider-extension-credentials";
@@ -21673,32 +20517,27 @@ declare function readClickySiteKey(siteIdValue: string, input?: {
21673
20517
  declare function writeClickySiteKey(siteIdValue: string, siteKeyValue: string): Promise<Exclude<ProviderSecretSource, 'environment'>>;
21674
20518
  declare function deleteClickySiteKey(siteIdValue: string): Promise<void>;
21675
20519
  //#endregion
21676
- //#region packages/core/src/clients.d.ts
21677
- type ClientProfileInput = {
21678
- id?: string;
21679
- name?: string;
21680
- siteUrl: string;
21681
- startUrl?: string;
21682
- watchUrls?: string[];
21683
- brandTerms?: string[];
21684
- analytics?: ClientProfile['analytics'];
21685
- googleAccounts?: ClientProfile['googleAccounts'];
21686
- technicalWeekday?: number;
21687
- isDefault?: boolean;
21688
- };
21689
- type ClientProfileUpdate = Omit<ClientProfileInput, 'id' | 'siteUrl'> & {
21690
- siteUrl?: string;
21691
- };
21692
- declare function googleAnalyticsPropertyId(client: Pick<ClientProfile, 'analytics'> | undefined): string | undefined;
21693
- declare function analyticsConnection(client: Pick<ClientProfile, 'analytics' | 'googleAccounts'> | undefined): AnalyticsConnection | undefined;
21694
- declare function listClients(): ClientProfile[];
21695
- declare function getClient(idOrName?: string): ClientProfile | undefined;
21696
- declare function saveClient(input: ClientProfileInput): ClientProfile;
21697
- declare function updateClient(idOrName: string, update: ClientProfileUpdate): ClientProfile;
21698
- declare function setClientAnalyticsConnection(idOrName: string, connection: AnalyticsConnection): ClientProfile;
21699
- declare function removeClientAnalyticsConnection(idOrName: string, provider: Exclude<AnalyticsConnection['provider'], 'extension'> | `extension:${string}`): ClientProfile;
21700
- declare function deleteClient(idOrName: string): boolean;
21701
- declare function setDefaultClient(idOrName: string): ClientProfile;
20520
+ //#region packages/core/src/bing/api.d.ts
20521
+ type BingCall = (method: string, params?: Record<string, string>) => Promise<unknown>;
20522
+ //#endregion
20523
+ //#region packages/core/src/errors.d.ts
20524
+ type SeoErrorCode = 'ACCESS_DENIED' | 'AUTH_CONFIG_REQUIRED' | 'AUTH_EXPIRED' | 'AUTH_REQUIRED' | 'INSUFFICIENT_DATA' | 'INTERNAL_ERROR' | 'INVALID_INPUT' | 'OPTIONAL_PROVIDER_UNAVAILABLE' | 'PROPERTY_NOT_FOUND' | 'PROVIDER_UNAVAILABLE' | 'RATE_LIMITED';
20525
+ declare class SeoError extends Error {
20526
+ readonly code: SeoErrorCode;
20527
+ readonly exitCode: number;
20528
+ readonly retryable: boolean;
20529
+ constructor(code: SeoErrorCode, message: string);
20530
+ }
20531
+ declare function toSeoError(error: unknown): SeoError;
20532
+ declare function isSkippableReportError(error: unknown): boolean;
20533
+ declare function seoErrorEnvelope(error: unknown): {
20534
+ ok: false;
20535
+ error: {
20536
+ code: SeoErrorCode;
20537
+ message: string;
20538
+ retryable: boolean;
20539
+ };
20540
+ };
21702
20541
  //#endregion
21703
20542
  //#region packages/core/src/google/api.d.ts
21704
20543
  type GoogleFetch = (url: string, init?: RequestInit) => Promise<Response>;
@@ -21790,17 +20629,11 @@ type CommandDeps = {
21790
20629
  checkPages: (urls: string[]) => Promise<PageFacts[]>;
21791
20630
  inspect: (site: string, url: string) => Promise<IndexStatus | null>;
21792
20631
  call: Caller;
20632
+ bing?: () => Promise<BingCall | null>;
20633
+ bingConnect?: string;
21793
20634
  now?: () => Date;
21794
20635
  };
21795
20636
  //#endregion
21796
- //#region packages/core/src/gsc/auth/account-context.d.ts
21797
- type GoogleAccountContext = {
21798
- searchConsole?: string;
21799
- googleAnalytics?: string;
21800
- };
21801
- declare function selectGoogleAccounts(accounts: GoogleAccountContext | undefined): void;
21802
- declare function selectedGoogleAccount(source: keyof GoogleAccountContext): string | undefined;
21803
- //#endregion
21804
20637
  //#region packages/core/src/storage/config.d.ts
21805
20638
  type TokenStorageMode = 'keychain' | 'file';
21806
20639
  type TokenStorageStatus = {
@@ -21926,6 +20759,8 @@ declare function nodeCommandDeps(options: {
21926
20759
  account?: string;
21927
20760
  refresh?: boolean;
21928
20761
  }): CommandDeps;
20762
+ declare const LOCAL_BING_CONNECT = "Run `seo providers bing connect` with an API key from Bing Webmaster Tools (Settings, API access).";
20763
+ declare function localBing(): Promise<BingCall | null>;
21929
20764
  declare function localResearchKeys(): Promise<Headers>;
21930
20765
  declare function resolveLocalSite(site: string, options?: {
21931
20766
  account?: string;
@@ -21934,6 +20769,43 @@ declare function resolveLocalSite(site: string, options?: {
21934
20769
  declare function localError(error: unknown): unknown;
21935
20770
  declare function localGoogleFetch(account?: string): Promise<GoogleFetch>;
21936
20771
  //#endregion
20772
+ //#region packages/core/src/storage/sqlite.d.ts
20773
+ type TransactionFunction = (...params: never[]) => unknown;
20774
+ declare class Statement {
20775
+ private readonly statement;
20776
+ constructor(statement: Libsql.Statement);
20777
+ run(...params: unknown[]): SqliteDatabase.RunResult;
20778
+ get(...params: unknown[]): unknown;
20779
+ all(...params: unknown[]): unknown[];
20780
+ }
20781
+ declare class SqliteDatabase {
20782
+ private readonly database;
20783
+ constructor(filename: string | Buffer);
20784
+ prepare(source: string): Statement;
20785
+ transaction<F extends TransactionFunction>(fn: F): Libsql.Transaction<F>;
20786
+ exec(source: string): this;
20787
+ pragma(source: string): unknown;
20788
+ close(): this;
20789
+ }
20790
+ declare namespace SqliteDatabase {
20791
+ type Database = SqliteDatabase;
20792
+ type RunResult = {
20793
+ changes: number;
20794
+ lastInsertRowid: number | bigint;
20795
+ };
20796
+ }
20797
+ //#endregion
20798
+ //#region packages/core/src/storage/database.d.ts
20799
+ declare function ensurePrivateDatabaseFiles(path: string): void;
20800
+ declare function getDb(): SqliteDatabase.Database;
20801
+ declare function noteCacheWrite(sizeBytes?: number, database?: SqliteDatabase.Database): void;
20802
+ declare function checkDatabaseReadiness(): {
20803
+ dbPath: string;
20804
+ };
20805
+ declare function hashKey(parts: unknown[]): string;
20806
+ declare function getCacheStats(): CacheStats;
20807
+ declare function clearCache(provider?: 'gsc' | 'google-analytics' | 'dataforseo' | 'ahrefs' | 'clicky' | 'http', olderThanMs?: number): number;
20808
+ //#endregion
21937
20809
  //#region packages/core/src/doctor.d.ts
21938
20810
  type DoctorCheck = {
21939
20811
  id: string;
@@ -21968,21 +20840,6 @@ declare function refreshPrioritiesCsvFiles(report: WorkflowReport<{
21968
20840
  diagnosis: DiagnosePropertyReport;
21969
20841
  }>): CsvFile[];
21970
20842
  //#endregion
21971
- //#region packages/core/src/export/report-html.d.ts
21972
- type ReportHtmlView = 'client' | 'analyst';
21973
- type ReportHtmlSection = {
21974
- title: string;
21975
- summary?: string;
21976
- items: string[];
21977
- };
21978
- type ReportHtmlInput = {
21979
- report: ReportNarrative;
21980
- title?: string;
21981
- view?: ReportHtmlView;
21982
- additionalSections?: ReportHtmlSection[];
21983
- };
21984
- declare function renderReportHtml(input: ReportHtmlInput): string;
21985
- //#endregion
21986
20843
  //#region packages/core/src/export/update-postmortem.d.ts
21987
20844
  type PostmortemCsvReport = WorkflowReport<{
21988
20845
  update: {
@@ -22392,6 +21249,18 @@ declare function readAhrefsApiKey(input?: {
22392
21249
  } | undefined>;
22393
21250
  declare function deleteAhrefsApiKey(): Promise<void>;
22394
21251
  //#endregion
21252
+ //#region packages/core/src/providers/bing/credentials.d.ts
21253
+ declare const BING_API_KEY_ENV = "SEO_BING_API_KEY";
21254
+ declare const BING_API_KEY_SECRET: "bing-api-key";
21255
+ declare function writeBingApiKey(value: string): Promise<"file" | "keychain">;
21256
+ declare function readBingApiKey(input?: {
21257
+ env?: NodeJS.ProcessEnv;
21258
+ }): Promise<{
21259
+ apiKey: string;
21260
+ source: ProviderSecretSource;
21261
+ } | undefined>;
21262
+ declare function deleteBingApiKey(): Promise<void>;
21263
+ //#endregion
22395
21264
  //#region packages/core/src/providers/dataforseo/credentials.d.ts
22396
21265
  declare const DATAFORSEO_LOGIN_ENV = "SEO_DATAFORSEO_LOGIN";
22397
21266
  declare const DATAFORSEO_PASSWORD_ENV = "SEO_DATAFORSEO_PASSWORD";
@@ -22667,5 +21536,5 @@ declare function isoDate(daysAgo?: number): string;
22667
21536
  //#region packages/core/src/version.d.ts
22668
21537
  declare const SEO_VERSION: string;
22669
21538
  //#endregion
22670
- export { AHREFS_API_KEY_ENV, AHREFS_API_KEY_SECRET, AI_REFERRAL_SOURCES, AI_REFERRAL_SOURCES_VERSION, ANALYTICS_PROVIDER_IDS, AUDIT_PAGE_RULE_IDS, AUTOMATIC_BASELINE_SITE_RETENTION, AUTOMATIC_BASELINE_TOTAL_RETENTION, AccessBlockEvidence, AffectedUrl, AffectedUrlFilters, AffectedUrlResult, AffectedUrlSelection, AgentFinding, AgentFindingStatus, AgentFindings, AgentFixFinding, AgentReportInventory, AgentReportOptions, AgentReviewFinding, AhrefsClient, AhrefsClientOptions, AhrefsLimitsAndUsage, type AiReferralDataSource, type AiReferralMetrics, type AiReferralQueryEvidence, type AiReferralReport, type AiReferralSourceDefinition, AnalyticsConnection, AnalyticsMetricDelta, AnalyticsProvider, AnalyticsProviderDetails, AnalyticsProviderRuntimeOptions, AnalyticsTestMetrics, type AnalyzeCannibalImportRowsInput, type AnalyzeCannibalRowsInput, type AnalyzeDecayInput, type AnalyzeQuickWinsInput, type AnalyzeSecondPageInput, type AnalyzeStrikingDistanceInput, AppConfig, AuditPageDependencies, AuditPageReport, AuthorizedGoogleClient, BROWSER_USER_AGENT, BoundedSitemapInventory, BrandTermCandidate, CANNIBAL_MAXIMUM_DOMINANT_SHARE, CANNIBAL_MINIMUM_PAGE_SHARE, CLICKY_SITEKEY_ENV, CLICKY_SITE_KEYS_SECRET, CRAWL_REPORT_STORAGE_VERSION, CRAWL_RUN_RETENTION, CRAWL_SKIP_REASONS, CTR_DEFAULT_LIMIT, CTR_MAX_LIMIT, CTR_MAX_MIN_IMPRESSIONS, CacheStats, type CannibalAnalysis, CannibalDependencies, type CannibalImportAnalysis, CannibalImportDependencies, type CannibalImportItem, type CannibalImportPage, type CannibalImportReport, CannibalImportReportInput, type CannibalImportSelection, type CannibalItem, type CannibalPage, type CannibalReport, CannibalReportInput, CannibalSearchConsoleInput, type CannibalSelection, type CannibalSuppression, type CannibalSuppressionReason, ChangeMeasurement, ChangeMeasurementAttempt, ChangeRow, ChangeScope, ClientProfile, ClientProfileInput, ClientProfileUpdate, ContentExtractionDiagnostics, ContentExtractor, ContentGroup, ContentGroupDimension, ContentGroupMatchType, ContentGroupRow, ContentOptimizationIntent, ContentOptimizationReport, CoverageField, CrawlAccessSummary, CrawlAiBotAccess, CrawlAiResourceSignal, CrawlAiSignals, CrawlAnalyticsDataSource, CrawlConfig, CrawlConfigInput, CrawlDataSourceStatus, CrawlDataSourceWindow, CrawlDiffItem, CrawlDiffRecommendation, CrawlDiffReport, CrawlExternalLinkVerification, CrawlFetchRateConfig, CrawlImplementationQueueInput, CrawlImplementationQueueItem, CrawlImplementationQueueOutput, CrawlIssue, CrawlIssueGroup, CrawlLinkGraph, CrawlMode, CrawlOneResult, CrawlOutputFormat, CrawlPageRow, CrawlPageSnapshot, CrawlReport, CrawlReportDataSources, CrawlReportMeta, CrawlReportSaveOptions, CrawlReportStorageEnvelope, CrawlReportStoreAdapter, CrawlReportSummary, CrawlRequestObservation, CrawlResponseObservation, CrawlRun, CrawlRunRow, CrawlRunStats, CrawlSearchDataSource, type CrawlSiteChecks, type CrawlSiteDependencies, CrawlSitemapDiscovery, CrawlSkipImpact, CrawlSkipReason, CrawlSkipReasonCount, CrawlSkippedUrlsByImpact, CrawlSnapshotDiffReport, CrawlSnapshotIssueChange, CrawlSnapshotPageChange, CrawlStatusEvent, CrawlStatusHandler, type CrawlStatusPhase, CrawlStrategy, CrawlerIdentity, CredentialsProvider, CreditUsage, CsvFile, CsvRow, CsvValue, type CtrUnderperformer, CtrUnderperformerDependencies, type CtrUnderperformerSelection, CtrUnderperformersInput, CtrUnderperformersReport, DATAFORSEO_CREDENTIAL_SECRET, DATAFORSEO_LOGIN_ENV, DATAFORSEO_PASSWORD_ENV, DEFAULT_SEARCH_CONSOLE_EXPORT_ROW_LIMIT, DEFAULT_UNREACHED_PAGE_LIMIT, type DataForSeoAccountSnapshot, DataForSeoClient, type DataForSeoClientOptions, DataForSeoCredentials, type DecayAnalysis, type DecayComparison, type DecayDiagnosis, type DecayGroup, type DecayItem, type DecayMetrics, type DecayReport, type DecaySelection, type DecaySignal, DecayingDependencies, DecayingReportInput, DiagnosePropertyDependencies, DiagnosePropertyReport, DiagnosisDataStatus, DiagnosisPriority, DoctorCheck, DueIndexSelection, DueIndexUrl, EffectiveSnippetControl, ExternalLinkCheck, ExternalLinkCheckAttempt, ExternalLinkCheckState, ExternalServiceId, ExtractedLinkLocation, ExtractedPage, FetchPageDependencies, type FetchPageOptions, type FetchRateControls, GSC_FINAL_DATA_LAG_DAYS, GSC_TIME_ZONE, type Ga4AccountSummary, Ga4DataStream, type Ga4PropertySummary, Ga4ReportRequest, Ga4RunReportResult, Ga4WebStreamCandidate, Ga4WebStreamMatch, type GoogleAccessTokenClient, GoogleAccountContext, GoogleApiError, GoogleCallOptions, GoogleFetch, GoogleRichResultAssessment, GoogleRichResultAssessmentSelection, GoogleRichResultAssessmentStatus, GscRow, HttpProfile, INCIDENTS_URL, INDEX_WATCH_ATTEMPT_RETENTION, INTERNAL_LINK_LEXICAL_TARGET_LIMIT, INTERNAL_LINK_MATCH_EVIDENCE_LIMIT, IndexCoverageBoundedSection, IndexCoverageCandidateItem, IndexCoverageControlReason, IndexCoverageControlledItem, IndexCoverageCrawlInput, IndexCoverageInput, IndexCoverageInventoryItem, IndexCoveragePlan, IndexCoveragePlanInput, IndexCoverageReport, IndexCoverageReportDependencies, IndexCoverageReportInput, IndexCoverageSearchConsoleInput, IndexCoverageSearchVisibilityItem, IndexCoverageSignalsReport, IndexCoverageSitemapInput, IndexCoverageSourceCompleteness, IndexCoverageSourceEvidence, IndexCoverageSourceMembership, IndexCoverageTemplateReview, IndexMonitorPropertyRun, IndexMonitorReport, IndexPlanProperty, IndexPlanSuggestion, IndexPropertyUrlAllocation, IndexWatchChange, IndexWatchChangeKind, IndexWatchDependencies, IndexWatchIssueCode, IndexWatchItem, IndexWatchPrevious, IndexWatchReport, IndexWatchRow, IndexWatchStore, InstalledProviderPackage, InstalledProviderPackages, type InternalLinkCandidate, type InternalLinkMatchKind, type InternalLinkOpportunity, type InternalLinkQueryMatch, InternalLinksAnalysis, InternalLinksAnalysisInput, InternalLinksDependencies, InternalLinksInput, type InternalLinksReport, type InternalLinksSelection, type InternalLinksWarning, type JavaScriptRenderingInput, type JavaScriptRenderingMode, JsonFileStorageAdapter, KeywordMetric, KeywordMonthlySearch, LINK_RECOVER_RUN_RETENTION, LOCAL_SIGN_IN, LOG_MAX_AGE_MS, LOG_MAX_FILE_BYTES, LOG_MAX_TOTAL_BYTES, LatestCrawlSummaryRow, LighthouseFailureCode, LinkRecoverItem, LinkRecoverReport, LinkRecoverSummary, LoadedProviderExtensions, LocalCredentialsProvider, LogPruneResult, MANAGED_PROVIDER_SECRET_NAMES, MAX_CRAWL_CONCURRENCY, MAX_CRAWL_DEPTH, MAX_CRAWL_PAGES, MAX_CRAWL_TIMEOUT_MS, MAX_SEARCH_CONSOLE_EXPORT_FILES, MAX_SEARCH_CONSOLE_EXPORT_ROW_LIMIT, MeasureChangeDependencies, MetricDelta, MonitoringStatusCheck, MonitoringStatusReport, NarrativeSection, type OAuthClientConfig, OpportunityBenchmarkRow, PROVIDER_SECRET_NAMES, PageExtractor, PageFetchDiagnostics, PageFetchResult, PageFetcher, type PageOpportunityAnalysis, type PageOpportunityAnalysisInput, type PageOpportunityBenchmark, PageOpportunityInput, type PageOpportunityItem, PageOpportunityReport, type PageOpportunitySelection, type PageOpportunityType, type PageOpportunityVerification, type PageRenderer, PageSearchMetrics, PageTopQuery, PartialDiagnosisReason, PerformanceAuditReport, PerformanceFieldData, PerformanceFieldMetric, PerformanceMetric, PerformanceRating, PositionBenchmark, Presentation, PresentationChart, PresentationScalar, PresentationTable, PresentationTableColumn, PriorityQueueItem, ProgressReporter, ProviderActionResult, ProviderCapability, ProviderError, ProviderErrorCode, ProviderExtensionLoadFailure, ProviderExtensionLoaderOptions, ProviderExtensionRegistry, ProviderFetch, ProviderId, ProviderImportEvidence, ProviderInstallerOptions, ProviderPackageCommand, ProviderPackageCommandResult, ProviderPackageManifest, ProviderPackageRelease, ProviderRequestInput, ProviderRuntimeOptions, ProviderSecret, ProviderSecretSource, ProviderValue, ProviderWarning, QueryCluster, type QueryClusterPage, QueryClusterReport, type QueryClusterRow, QueryClusterSourceRow, QueryContentClassification, QueryContentCoverage, QueryContentSignal, QueryContentVerifier, QueryFieldCoverage, type QuickWinAnalysis, type QuickWinGroup, type QuickWinItem, type QuickWinSelection, type QuickWinTemplateRecommendation, QuickWinsDependencies, QuickWinsInput, QuickWinsReport, REPORT_BASELINE_MAX_AGE_MS, REPORT_BASELINE_MAX_DEPTH, REPORT_BASELINE_MAX_PAGES, RESEARCH_IMPORT_COLUMN_KEYS, Recommendation, RedirectTraceIssue, RedirectTraceReport, RedirectTraceStep, RegisteredProviderExtension, RenderingDocumentDifference, RenderingDocumentField, RenderingDocumentSnapshot, ReportHtmlInput, ReportHtmlSection, ReportHtmlView, ReportNarrative, ResearchImportColumn, ResearchImportColumns, ResolveTechnicalBaselineInput, ResponseSizeLimitError, RobotsDirective, RuleCategory, RuleId, RuleInfo, RuleRecommendation, RuleSeverity, SEO_CRAWLER_IDENTITY, SEO_CRAWLER_TOKEN, SEO_CRAWLER_USER_AGENT, SEO_PROVIDER_API_VERSION, SEO_VERSION, SERP_TITLE_REFERENCE_WIDTH_PX, SERP_TITLE_WIDTH_PROFILE, SearchAnalyticsOptions, SearchAnalyticsQuery, SearchAnalyticsRequest, SearchAnalyticsResult, SearchConsoleExportEvidence, SearchConsoleExportFileImport, SearchConsoleExportPageRow, SearchConsoleExportQueryRow, SearchConsoleExportReconciliation, SearchConsoleSite, SearchDateWindow, SearchPageBatch, type SearchStatusIncident, type SearchUpdate, type SecondPageAnalysis, SecondPageDependencies, SecondPageInput, type SecondPageItem, type SecondPageQuery, type SecondPageRecommendation, type SecondPageReport, type SecondPageSelection, type SegmentDimension, SegmentImpactDependencies, SegmentImpactInput, type SegmentImpactItem, type SegmentImpactReport, type SegmentImpactSelection, type SegmentPeriodEvidence, type SegmentRange, SeoAnalyticsConnection, SeoAnalyticsLandingPageResult, SeoChange, SeoCliPathOptions, SeoCliPaths, SeoError, SeoErrorCode, SeoLandingPageVisitRow, SeoLandingPageVisitsCapability, SeoLandingPageVisitsResult, SeoProviderActionAdapter, SeoProviderActivate, SeoProviderApiVersion, SeoProviderCapabilityAdapter, SeoProviderCapabilityId, SeoProviderConnection, SeoProviderConnectionAdapter, SeoProviderConnectionField, SeoProviderHost, SeoProviderJson, SeoProviderJsonSchema, SeoProviderKind, SeoProviderRegistration, SeoProviderRequest, SeoProviderRuntime, SeoSearchMarket, SeoSerpLocalPackResult, SeoSerpOrganicResult, SeoSerpSnapshotCapability, SeoSerpSnapshotResult, ServiceAccountAccessTokenClient, ServiceAccountConfig, ServiceAccountStatus, SessionLedger, SitemapDocument, SitemapFetchResult, SitemapInvalidLoc, SitemapLastmodObservation, SkippedDiagnosisSection, SnippetControlEvidence, StorageAdapter, StoredAhrefsApiKey, StoredClickySiteKey, StoredDataForSeoCredentials, StoredTokenStore, StoredTokens, type StrikingDistanceAnalysis, type StrikingDistanceAnalysisGroup, type StrikingDistanceAnalysisItem, StrikingDistanceDependencies, StrikingDistanceInput, StrikingDistanceItem, StrikingDistanceReport, TELEMETRY_AGENTS, TELEMETRY_ENDPOINT, TELEMETRY_ERROR_CATEGORIES, TELEMETRY_EVENTS, TELEMETRY_FAILURE_CONTEXTS, TELEMETRY_FAILURE_REASONS, TELEMETRY_NOTICE, TELEMETRY_OPERATIONS, TELEMETRY_REPORTS, TELEMETRY_SCHEMA_VERSION, TELEMETRY_TIMEOUT_MS, TechnicalBaseline, TechnicalBaselineDependencies, TechnicalBaselineStatus, TelemetryAgent, TelemetryDisableReason, type TelemetryErrorCategory, TelemetryEvent, type TelemetryFailureClassification, type TelemetryFailureContext, type TelemetryFailureReason, type TelemetryOperation, TelemetryOptions, TelemetryPayload, TelemetryReport, TelemetryState, TelemetryStatus, TemplateAwareReport, TestMetrics, TitleWidthEstimate, TokenStorageMode, TokenStorageStatus, TopFix, TopFixFilters, TrafficAnomaly, TrafficAnomalyCoverage, TrafficAnomalyDependencies, TrafficAnomalyInput, TrafficAnomalyReport, TrafficAnomalySelection, type UnmatchedSegment, UpdateConfounder, UpdateCorrelationReport, UrlInspectionRequest, UrlInspectionResult, VerifyQueryContentInput, WorkflowAction, WorkflowReport, WorkflowStep, affectedUrls, agentActionsView, aiReferralSourceForValue, aiReferralsReport, allocateIndexUrlsToProperties, analyticsConnection, analyticsConnectionLabel, analyticsConnectionProviderId, analyticsConnectionSchema, analyticsConnectionsSchema, analyticsProviderDetails, analyticsProviderSchema, analyzeAiReferralRows, analyzeCannibalImportRows, analyzeCannibalRows, analyzeCtrUnderperformersFromRows, analyzeDecay, analyzeIndexCoverageSignals, analyzeInternalLinksFromRows, analyzePageOpportunitiesFromRows, analyzeQueryClustersFromRows, analyzeQuickWinsFromRows, analyzeSecondPageRows, analyzeSegmentRows, analyzeStrikingDistanceRows, analyzeTrafficAnomalyRows, assertCrawlConfigLimits, assertUrlMatchesGscProperty, attachCrawlRecommendations, auditCrawlPages, auditCrawlRequests, auditPage, authStatus, bearerFetch, boundedSitemapInventory, buildAgentFindings, buildQueryClusterReportFromRows, buildTelemetryPayload, cannibalImportReport, cannibalReport, cannibalReportWith, changesInWindow, checkDatabaseReadiness, classifyTelemetryFailure, clearCache, clientProfileSchema, clusterQueryRows, combineRobotsValues, compareCrawlPages, compareCrawlReports, compareSegmentRows, configSchema, contentCoverageRecommendation, contentCoverageType, contentOptimizationFromPageOpportunities, contentOptimizationReport, countLabel, crawlConfigHash, crawlConfigSchema, crawlDefinitionId, crawlDiff, crawlFixToQueueItem, crawlImplementationQueueWorkflow, crawlIssueGroupSchema, crawlIssueSchema, crawlOne, crawlPageSnapshotSchema, crawlReportSchema, crawlReportStore, crawlReportSummarySchema, crawlRequestObservationSchema, crawlRunId, crawlSite, crawlSkipImpact, crawlSkipReasonCountsFromRecord, crawlStatusOnly, crawlTopFixSchema, crawlerJsonSchemas, crawlerRuleCategorySchema, crawlerRuleIdSchema, crawlerRuleInfoSchema, crawlerRuleRecommendationSchema, crawlerRuleSeveritySchema, crawlerSchemas, createAuthorizedClient, createContentGroup, createCrawlReport, createCtrBenchmarkContext, createGoogleAccessTokenClient, createLogger, createPageRenderer, ctrUnderperformersReport, ctrUnderperformersReportWith, decayClusterDrafts, decayComparisonRange, decayingReport, decayingReportWith, deleteAhrefsApiKey, deleteChange, deleteClickySiteKey, deleteClient, deleteContentGroup, deleteCrawlReport, deleteDataForSeoCredentials, deleteManagedProviderSecrets, deleteProviderExtensionAccount, deleteProviderExtensionCredentials, deleteProviderSecret, deleteTokens, deriveBrandTerms, describeInstalledProviderExtension, detectBrandTerms, detectTelemetryAgent, diagnoseCsvFiles, diagnoseProperty, diagnosePropertyWorkflow, effectiveRobotsDirectives, effectiveSnippetControl, ensurePrivateDatabaseFiles, ensureSeoCliDirs, estimateSerpTitleWidth, expectedCtrForPosition, explainRule, fetchCruxFieldData, fetchPage, fetchPageStatus, fetchSearchStatusIncidents, fetchSitemapUrls, fileSize, finalGscDateRange, findOverlappingSearchUpdates, formatRelativeExpiry, ga4MatchReason, ga4PropertyIdFromName, ga4ReportQualityWarnings, ga4RequestCanUseCache, ga4RowsToObjects, getAuthModeStatus, getCacheStats, getChange, getClient, getClientConfig, getContentGroup, getDb, getPreviousRun, getPrivacySnapshot, getRepeatedLinkRecoverUrls, getRunPages, getSeoCliPaths, getServiceAccountConfig, getServiceAccountStatus, getTelemetryStatus, getTokenStorageStatus, googleAnalyticsPropertyId, googleJson, groupCrawlIssues, hasMetaRobotsDirective, hasRule, hasXRobotsDirective, hashKey, indexCoveragePlan, indexCoverageSignals, indexMonitor, indexWatch, inferTemplateMovement, initializeTelemetry, insertCrawlRun, insertLinkRecoverRun, inspectProviderPackage, inspectSearchConsoleUrl, inspectUrl, installProviderPackage, installedProviderPackageSchema, installedProviderPackagesSchema, internalLinksReport, interpretUpdateCorrelation, isBrandQuery, isCompatibleTechnicalBaseline, isCurrentTechnicalBaseline, isSkippableReportError, isTelemetryCi, isTelemetryOperation, isTelemetryReport, isoDate, isoWeek, latestCrawlReport, latestCrawlSummaries, latestFinalGscDate, latestIndexWatchSummary, latestLinkRecoverSummary, linkRecover, linkRecoverRecommendation, listAnalyticsAccounts, listChanges, listClients, listContentGroups, listCrawlReports, listGa4AccountSummaries, listGa4DataStreams, listGoogleAccounts, listInstalledProviderExtensions, listRules, listSearchConsoleSites, listSearchUpdates, listSites, loadCrawlReport, loadInstalledProviderExtensions, loadProviderExtensions, loadProviderPackage, loadSearchConsoleExport, localCredentialsProvider, localError, localGoogleFetch, localResearchKeys, loginWithLoopback, makeRunId, matchGa4WebStreams, measureChange, measureCoverage, metaRobotsDirectives, migrateLegacyMacConfig, missingOAuthClientMessage, missingSharedClientLoginMessage, monitoringStatus, nodeCommandDeps, normalizeBrandText, normalizeClickySiteId, normalizeClickySiteKey, normalizeCrawlConfig, normalizeCrawlSkipReasonCounts, normalizeForCoverage, normalizeHttpUrl, normalizeJavaScriptRenderingMode, normalizeLoadedCrawlReport, normalizeProviderExtensionAccount, normalizedResearchColumnName, noteCacheWrite, pageEvidenceRecommendation, pageOpportunitiesReport, parseOlderThan, performanceAudit, performanceReportIsCacheable, planDueIndexUrls, planIndexCoverageFromUrls, plural, propertyMatchesUrl, providerCapabilitySchema, providerConnectionFieldSchema, providerExactVersionSchema, providerExtensionIdSchema, providerIdSchema, providerIntegritySchema, providerKindSchema, providerPackageManifestSchema, providerPackageNameSchema, providerPreferenceSchema, providerRegistrationSchema, providerRequestJson, providerRequestText, pruneIndexWatchSnapshots, pruneLogs, publicHttpFetch, queryClusterReport, queryClusterTokens, queryContentCoverageFromPage, queryContentFieldsFromPage, queryFieldCoverage, queryOpportunityRecommendation, queryPageMetrics, queryPageTopQuery, queryPagesMetrics, queryPagesMetricsBatch, queryPagesTopQueries, queryPagesTopQueriesBatch, querySearchAnalytics, quickWinsCsvRows, quickWinsReport, quickWinsReportWith, readAhrefsApiKey, readAllTokens, readBoundedResponseText, readClickySiteKey, readConfig, readDataForSeoCredentials, readInstalledProviderPackages, readJson, readJsonOrUndefined, readOauthClient, readProviderExtensionAccount, readProviderExtensionCredentials, readProviderSecret, readTokens, recommendCrawlDiffItem, recommendationForRule, reconcileExportPagesWithCrawl, recordChange, redirectTrace, refreshAuthToken, refreshPrioritiesCsvFiles, refreshPrioritiesWorkflow, registrableDomain, removeClientAnalyticsConnection, removeInstalledProviderPackage, renderCrawlCsv, renderCrawlHtml, renderCrawlJunit, renderCrawlMarkdownTickets, renderCrawlPagesCsv, renderCrawlPretty, renderCsv, renderPresentationTablesMarkdown, renderReportHtml, renderWorkflowMarkdown, reportNarrative, requestHeaders, requirePageVerification, researchImportColumns, resetSeoData, resolveLocalSite, resolveSegmentRanges, resolveSeoCliPaths, resolveTechnicalBaseline, reviewObservations, roundedPosition, runAnalyticsProviderLandingPages, runAnalyticsReport, runDoctor, runGa4Report, runProviderExtensionAction, runtimeForProvider, safeProviderAdapterError, saveClient, saveCrawlReport, saveInstalledProviderPackage, searchAnalyticsRows, searchUpdatesFromIncidents, secondPage, secondPageWith, segmentComparisonRange, segmentImpact, segmentRangeDays, selectAffectedUrls, selectDueIndexUrls, selectGoogleAccounts, selectedGoogleAccount, seoErrorEnvelope, sessionSourceInListFilter, setActiveGoogleAccount, setClientAnalyticsConnection, setDefaultClient, setTelemetryEnabled, setTokenStorageMode, shiftIsoDate, shouldExcludeBrandQuery, siteSchema, sqliteCrawlReportStore, strikingDistance, strikingDistanceWith, summarizeCrawlReport, pageTechnicalSignals as technicalPageSignals, technicalWatchWorkflow, telemetryErrorCategory, toSeoError, tokenSchema, tokenStoreSchema, topCrawlRecommendations, topFixes, trackTelemetryCommandFailed, trackTelemetryReportComplete, trackTelemetryReportFailed, trackTelemetryReportStart, trackTelemetrySetupComplete, trafficAnomaly, trafficAnomalyWith, unavailableSegmentImpactReport, unicodeTokens, uninstallProviderExtension, updateClient, updateCorrelation, updatePostmortemCsvFiles, updatePostmortemWorkflow, validateResearchImportColumnSources, verifyAnalyticsProvider, verifyProviderExtension, verifyQueryContent, verifyQueryContentWith, withAgentReportContract, workflowPresentation, writeAhrefsApiKey, writeClickySiteKey, writeConfig, writeDataForSeoCredentials, writeInstalledProviderPackages, writeOauthClient, writeProviderExtensionAccount, writeProviderExtensionCredentials, writeProviderSecret, writeTokens, xRobotsDirectives };
21539
+ export { AHREFS_API_KEY_ENV, AHREFS_API_KEY_SECRET, AI_REFERRAL_SOURCES, AI_REFERRAL_SOURCES_VERSION, ANALYTICS_PROVIDER_IDS, AUDIT_PAGE_RULE_IDS, AccessBlockEvidence, AgentFinding, AgentFindingStatus, AgentFindings, AgentFixFinding, AgentReportInventory, AgentReportOptions, AgentReviewFinding, AhrefsClient, AhrefsClientOptions, AhrefsLimitsAndUsage, type AiReferralDataSource, type AiReferralMetrics, type AiReferralQueryEvidence, type AiReferralReport, type AiReferralSourceDefinition, AnalyticsConnection, AnalyticsProvider, AnalyticsProviderDetails, AnalyticsProviderRuntimeOptions, type AnalyzeCannibalImportRowsInput, type AnalyzeCannibalRowsInput, type AnalyzeDecayInput, type AnalyzeQuickWinsInput, type AnalyzeSecondPageInput, type AnalyzeStrikingDistanceInput, AppConfig, AuditPageDependencies, AuditPageReport, AuthorizedGoogleClient, BING_API_KEY_ENV, BING_API_KEY_SECRET, BROWSER_USER_AGENT, BoundedSitemapInventory, BrandTermCandidate, CANNIBAL_MAXIMUM_DOMINANT_SHARE, CANNIBAL_MINIMUM_PAGE_SHARE, CLICKY_SITEKEY_ENV, CLICKY_SITE_KEYS_SECRET, CRAWL_SKIP_REASONS, CTR_DEFAULT_LIMIT, CTR_MAX_LIMIT, CTR_MAX_MIN_IMPRESSIONS, CacheStats, type CannibalAnalysis, CannibalDependencies, type CannibalImportAnalysis, CannibalImportDependencies, type CannibalImportItem, type CannibalImportPage, type CannibalImportReport, CannibalImportReportInput, type CannibalImportSelection, type CannibalItem, type CannibalPage, type CannibalReport, CannibalReportInput, CannibalSearchConsoleInput, type CannibalSelection, type CannibalSuppression, type CannibalSuppressionReason, ContentExtractionDiagnostics, ContentExtractor, ContentOptimizationIntent, ContentOptimizationReport, CoverageField, CrawlAccessSummary, CrawlAiBotAccess, CrawlAiResourceSignal, CrawlAiSignals, CrawlAnalyticsDataSource, CrawlConfig, CrawlConfigInput, CrawlDataSourceStatus, CrawlDataSourceWindow, CrawlExternalLinkVerification, CrawlFetchRateConfig, CrawlImplementationQueueInput, CrawlImplementationQueueItem, CrawlImplementationQueueOutput, CrawlIssue, CrawlIssueGroup, CrawlLinkGraph, CrawlMode, CrawlOneResult, CrawlOutputFormat, CrawlPageSnapshot, CrawlReport, CrawlReportDataSources, CrawlReportSummary, CrawlRequestObservation, CrawlResponseObservation, CrawlRunStats, CrawlSearchDataSource, type CrawlSiteChecks, type CrawlSiteDependencies, CrawlSitemapDiscovery, CrawlSkipImpact, CrawlSkipReason, CrawlSkipReasonCount, CrawlSkippedUrlsByImpact, CrawlStatusEvent, CrawlStatusHandler, type CrawlStatusPhase, CrawlStrategy, CrawlerIdentity, CredentialsProvider, CreditUsage, CsvFile, CsvRow, CsvValue, type CtrUnderperformer, CtrUnderperformerDependencies, type CtrUnderperformerSelection, CtrUnderperformersInput, CtrUnderperformersReport, DATAFORSEO_CREDENTIAL_SECRET, DATAFORSEO_LOGIN_ENV, DATAFORSEO_PASSWORD_ENV, DEFAULT_SEARCH_CONSOLE_EXPORT_ROW_LIMIT, DEFAULT_UNREACHED_PAGE_LIMIT, type DataForSeoAccountSnapshot, DataForSeoClient, type DataForSeoClientOptions, DataForSeoCredentials, type DecayAnalysis, type DecayComparison, type DecayDiagnosis, type DecayGroup, type DecayItem, type DecayMetrics, type DecayReport, type DecaySelection, type DecaySignal, DecayingDependencies, DecayingReportInput, DiagnosePropertyDependencies, DiagnosePropertyReport, DiagnosisDataStatus, DiagnosisPriority, DoctorCheck, EffectiveSnippetControl, ExternalLinkCheck, ExternalLinkCheckAttempt, ExternalLinkCheckState, ExternalServiceId, ExtractedLinkLocation, ExtractedPage, FetchPageDependencies, type FetchPageOptions, type FetchRateControls, GSC_FINAL_DATA_LAG_DAYS, GSC_TIME_ZONE, type Ga4AccountSummary, Ga4DataStream, type Ga4PropertySummary, Ga4ReportRequest, Ga4RunReportResult, Ga4WebStreamCandidate, Ga4WebStreamMatch, type GoogleAccessTokenClient, GoogleApiError, GoogleCallOptions, GoogleFetch, GoogleRichResultAssessment, GoogleRichResultAssessmentSelection, GoogleRichResultAssessmentStatus, GscRow, HttpProfile, INCIDENTS_URL, INTERNAL_LINK_LEXICAL_TARGET_LIMIT, INTERNAL_LINK_MATCH_EVIDENCE_LIMIT, IndexCoverageBoundedSection, IndexCoverageCandidateItem, IndexCoverageControlReason, IndexCoverageControlledItem, IndexCoverageCrawlInput, IndexCoverageInput, IndexCoverageInventoryItem, IndexCoverageReport, IndexCoverageReportDependencies, IndexCoverageReportInput, IndexCoverageSearchConsoleInput, IndexCoverageSearchVisibilityItem, IndexCoverageSignalsReport, IndexCoverageSitemapInput, IndexCoverageSourceCompleteness, IndexCoverageSourceEvidence, IndexCoverageSourceMembership, IndexCoverageTemplateReview, InstalledProviderPackage, InstalledProviderPackages, type InternalLinkCandidate, type InternalLinkMatchKind, type InternalLinkOpportunity, type InternalLinkQueryMatch, InternalLinksAnalysis, InternalLinksAnalysisInput, InternalLinksDependencies, InternalLinksInput, type InternalLinksReport, type InternalLinksSelection, type InternalLinksWarning, type JavaScriptRenderingInput, type JavaScriptRenderingMode, JsonFileStorageAdapter, KeywordMetric, KeywordMonthlySearch, LOCAL_BING_CONNECT, LOCAL_SIGN_IN, LOG_MAX_AGE_MS, LOG_MAX_FILE_BYTES, LOG_MAX_TOTAL_BYTES, LighthouseFailureCode, LinkRecoverItem, LinkRecoverReport, LoadedProviderExtensions, LocalCredentialsProvider, LogPruneResult, MANAGED_PROVIDER_SECRET_NAMES, MAX_CRAWL_CONCURRENCY, MAX_CRAWL_DEPTH, MAX_CRAWL_PAGES, MAX_CRAWL_TIMEOUT_MS, MAX_SEARCH_CONSOLE_EXPORT_FILES, MAX_SEARCH_CONSOLE_EXPORT_ROW_LIMIT, NarrativeSection, type OAuthClientConfig, OpportunityBenchmarkRow, PROVIDER_SECRET_NAMES, PageExtractor, PageFetchDiagnostics, PageFetchResult, PageFetcher, type PageOpportunityAnalysis, type PageOpportunityAnalysisInput, type PageOpportunityBenchmark, PageOpportunityInput, type PageOpportunityItem, PageOpportunityReport, type PageOpportunitySelection, type PageOpportunityType, type PageOpportunityVerification, type PageRenderer, PageSearchMetrics, PageTopQuery, PartialDiagnosisReason, PerformanceAuditReport, PerformanceFieldData, PerformanceFieldMetric, PerformanceMetric, PerformanceRating, PositionBenchmark, Presentation, PresentationChart, PresentationScalar, PresentationTable, PresentationTableColumn, PriorityQueueItem, ProgressReporter, ProviderActionResult, ProviderCapability, ProviderError, ProviderErrorCode, ProviderExtensionLoadFailure, ProviderExtensionLoaderOptions, ProviderExtensionRegistry, ProviderFetch, ProviderId, ProviderImportEvidence, ProviderInstallerOptions, ProviderPackageCommand, ProviderPackageCommandResult, ProviderPackageManifest, ProviderPackageRelease, ProviderRequestInput, ProviderRuntimeOptions, ProviderSecret, ProviderSecretSource, ProviderValue, ProviderWarning, QueryCluster, type QueryClusterPage, QueryClusterReport, type QueryClusterRow, QueryClusterSourceRow, QueryContentClassification, QueryContentCoverage, QueryContentSignal, QueryContentVerifier, QueryFieldCoverage, type QuickWinAnalysis, type QuickWinGroup, type QuickWinItem, type QuickWinSelection, type QuickWinTemplateRecommendation, QuickWinsDependencies, QuickWinsInput, QuickWinsReport, RESEARCH_IMPORT_COLUMN_KEYS, Recommendation, RedirectTraceIssue, RedirectTraceReport, RedirectTraceStep, RegisteredProviderExtension, RenderingDocumentDifference, RenderingDocumentField, RenderingDocumentSnapshot, ReportNarrative, ResearchImportColumn, ResearchImportColumns, ResponseSizeLimitError, RobotsDirective, RuleCategory, RuleId, RuleInfo, RuleRecommendation, RuleSeverity, SEO_CRAWLER_IDENTITY, SEO_CRAWLER_TOKEN, SEO_CRAWLER_USER_AGENT, SEO_PROVIDER_API_VERSION, SEO_VERSION, SERP_TITLE_REFERENCE_WIDTH_PX, SERP_TITLE_WIDTH_PROFILE, STEP_CHANGE_RULES, SearchAnalyticsOptions, SearchAnalyticsQuery, SearchAnalyticsRequest, SearchAnalyticsResult, SearchConsoleExportEvidence, SearchConsoleExportFileImport, SearchConsoleExportPageRow, SearchConsoleExportQueryRow, SearchConsoleExportReconciliation, SearchConsoleSite, SearchDateWindow, SearchPageBatch, type SearchStatusIncident, type SearchUpdate, type SecondPageAnalysis, SecondPageDependencies, SecondPageInput, type SecondPageItem, type SecondPageQuery, type SecondPageRecommendation, type SecondPageReport, type SecondPageSelection, type SegmentDimension, SegmentImpactDependencies, SegmentImpactInput, type SegmentImpactItem, type SegmentImpactReport, type SegmentImpactSelection, type SegmentPeriodEvidence, type SegmentRange, SeoAnalyticsConnection, SeoAnalyticsLandingPageResult, SeoCliPathOptions, SeoCliPaths, SeoError, SeoErrorCode, SeoLandingPageVisitRow, SeoLandingPageVisitsCapability, SeoLandingPageVisitsResult, SeoProviderActionAdapter, SeoProviderActivate, SeoProviderApiVersion, SeoProviderCapabilityAdapter, SeoProviderCapabilityId, SeoProviderConnection, SeoProviderConnectionAdapter, SeoProviderConnectionField, SeoProviderHost, SeoProviderJson, SeoProviderJsonSchema, SeoProviderKind, SeoProviderRegistration, SeoProviderRequest, SeoProviderRuntime, SeoSearchMarket, SeoSerpLocalPackResult, SeoSerpOrganicResult, SeoSerpSnapshotCapability, SeoSerpSnapshotResult, ServiceAccountAccessTokenClient, ServiceAccountConfig, ServiceAccountStatus, SessionLedger, SitemapDocument, SitemapFetchResult, SitemapInvalidLoc, SitemapLastmodObservation, SkippedDiagnosisSection, SnippetControlEvidence, StorageAdapter, StoredAhrefsApiKey, StoredClickySiteKey, StoredDataForSeoCredentials, StoredTokenStore, StoredTokens, type StrikingDistanceAnalysis, type StrikingDistanceAnalysisGroup, type StrikingDistanceAnalysisItem, StrikingDistanceDependencies, StrikingDistanceInput, StrikingDistanceItem, StrikingDistanceReport, TELEMETRY_AGENTS, TELEMETRY_ENDPOINT, TELEMETRY_ERROR_CATEGORIES, TELEMETRY_EVENTS, TELEMETRY_FAILURE_CONTEXTS, TELEMETRY_FAILURE_REASONS, TELEMETRY_NOTICE, TELEMETRY_OPERATIONS, TELEMETRY_REPORTS, TELEMETRY_SCHEMA_VERSION, TELEMETRY_TIMEOUT_MS, TelemetryAgent, TelemetryDisableReason, type TelemetryErrorCategory, TelemetryEvent, type TelemetryFailureClassification, type TelemetryFailureContext, type TelemetryFailureReason, type TelemetryOperation, TelemetryOptions, TelemetryPayload, TelemetryReport, TelemetryState, TelemetryStatus, TemplateAwareReport, TitleWidthEstimate, TokenStorageMode, TokenStorageStatus, TopFix, TopFixFilters, TrafficAnomaly, TrafficAnomalyCoverage, TrafficAnomalyDependencies, TrafficAnomalyDetection, TrafficAnomalyInput, TrafficAnomalyReport, TrafficAnomalySelection, type UnmatchedSegment, UpdateConfounder, UpdateCorrelationReport, UrlInspectionRequest, UrlInspectionResult, VerifyQueryContentInput, WorkflowAction, WorkflowReport, WorkflowStep, agentActionsView, aiReferralSourceForValue, aiReferralsReport, analyticsConnectionLabel, analyticsConnectionProviderId, analyticsConnectionSchema, analyticsProviderDetails, analyticsProviderSchema, analyzeAiReferralRows, analyzeCannibalImportRows, analyzeCannibalRows, analyzeCtrUnderperformersFromRows, analyzeDecay, analyzeIndexCoverageSignals, analyzeInternalLinksFromRows, analyzePageOpportunitiesFromRows, analyzeQueryClustersFromRows, analyzeQuickWinsFromRows, analyzeSecondPageRows, analyzeSegmentRows, analyzeStrikingDistanceRows, analyzeTrafficAnomalyRows, assertCrawlConfigLimits, assertUrlMatchesGscProperty, auditCrawlPages, auditCrawlRequests, auditPage, authStatus, bearerFetch, boundedSitemapInventory, buildAgentFindings, buildQueryClusterReportFromRows, buildTelemetryPayload, cannibalImportReport, cannibalReport, cannibalReportWith, changeWindow, checkDatabaseReadiness, classifyTelemetryFailure, clearCache, clusterQueryRows, combineRobotsValues, compareSegmentRows, configSchema, contentCoverageRecommendation, contentCoverageType, contentOptimizationFromPageOpportunities, contentOptimizationReport, countLabel, crawlConfigHash, crawlConfigSchema, crawlDefinitionId, crawlFixToQueueItem, crawlImplementationQueueWorkflow, crawlIssueGroupSchema, crawlIssueSchema, crawlOne, crawlPageSnapshotSchema, crawlReportSchema, crawlReportSummarySchema, crawlRequestObservationSchema, crawlRunId, crawlSite, crawlSkipImpact, crawlSkipReasonCountsFromRecord, crawlStatusOnly, crawlTopFixSchema, crawlerJsonSchemas, crawlerRuleCategorySchema, crawlerRuleIdSchema, crawlerRuleInfoSchema, crawlerRuleRecommendationSchema, crawlerRuleSeveritySchema, crawlerSchemas, createAuthorizedClient, createCrawlReport, createCtrBenchmarkContext, createGoogleAccessTokenClient, createLogger, createPageRenderer, ctrUnderperformersReport, ctrUnderperformersReportWith, decayClusterDrafts, decayComparisonRange, decayingReport, decayingReportWith, deleteAhrefsApiKey, deleteBingApiKey, deleteClickySiteKey, deleteDataForSeoCredentials, deleteManagedProviderSecrets, deleteProviderExtensionAccount, deleteProviderExtensionCredentials, deleteProviderSecret, deleteTokens, deriveBrandTerms, describeInstalledProviderExtension, detectBrandTerms, detectTelemetryAgent, diagnoseCsvFiles, diagnoseProperty, diagnosePropertyWorkflow, effectiveRobotsDirectives, effectiveSnippetControl, ensurePrivateDatabaseFiles, ensureSeoCliDirs, estimateSerpTitleWidth, expectedCtrForPosition, explainRule, fetchCruxFieldData, fetchPage, fetchPageStatus, fetchSearchStatusIncidents, fetchSitemapUrls, fileSize, finalGscDateRange, findOverlappingSearchUpdates, formatRelativeExpiry, ga4MatchReason, ga4PropertyIdFromName, ga4ReportQualityWarnings, ga4RequestCanUseCache, ga4RowsToObjects, getAuthModeStatus, getCacheStats, getClientConfig, getDb, getPrivacySnapshot, getSeoCliPaths, getServiceAccountConfig, getServiceAccountStatus, getTelemetryStatus, getTokenStorageStatus, googleJson, groupCrawlIssues, hasMetaRobotsDirective, hasRule, hasXRobotsDirective, hashKey, indexCoverageSignals, inferTemplateMovement, initializeTelemetry, inspectProviderPackage, inspectSearchConsoleUrl, inspectUrl, installProviderPackage, installedProviderPackageSchema, installedProviderPackagesSchema, internalLinksReport, interpretUpdateCorrelation, isBrandQuery, isSkippableReportError, isTelemetryCi, isTelemetryOperation, isTelemetryReport, isoDate, isoWeek, latestFinalGscDate, linkRecover, linkRecoverRecommendation, listAnalyticsAccounts, listGa4AccountSummaries, listGa4DataStreams, listGoogleAccounts, listInstalledProviderExtensions, listRules, listSearchConsoleSites, listSearchUpdates, listSites, loadInstalledProviderExtensions, loadProviderExtensions, loadProviderPackage, loadSearchConsoleExport, localBing, localCredentialsProvider, localError, localGoogleFetch, localResearchKeys, loginWithLoopback, makeRunId, matchGa4WebStreams, measureCoverage, metaRobotsDirectives, migrateLegacyMacConfig, missingOAuthClientMessage, missingSharedClientLoginMessage, nodeCommandDeps, normalizeBrandText, normalizeClickySiteId, normalizeClickySiteKey, normalizeCrawlConfig, normalizeCrawlSkipReasonCounts, normalizeForCoverage, normalizeHttpUrl, normalizeJavaScriptRenderingMode, normalizeLoadedCrawlReport, normalizeProviderExtensionAccount, normalizedResearchColumnName, noteCacheWrite, pageEvidenceRecommendation, pageOpportunitiesReport, parseOlderThan, performanceAudit, performanceReportIsCacheable, plural, providerCapabilitySchema, providerConnectionFieldSchema, providerExactVersionSchema, providerExtensionIdSchema, providerIdSchema, providerIntegritySchema, providerKindSchema, providerPackageManifestSchema, providerPackageNameSchema, providerPreferenceSchema, providerRegistrationSchema, providerRequestJson, providerRequestText, pruneLogs, publicHttpFetch, queryClusterReport, queryClusterTokens, queryContentCoverageFromPage, queryContentFieldsFromPage, queryFieldCoverage, queryOpportunityRecommendation, queryPageMetrics, queryPageTopQuery, queryPagesMetrics, queryPagesMetricsBatch, queryPagesTopQueries, queryPagesTopQueriesBatch, querySearchAnalytics, quickWinsCsvRows, quickWinsReport, quickWinsReportWith, readAhrefsApiKey, readAllTokens, readBingApiKey, readBoundedResponseText, readClickySiteKey, readConfig, readDataForSeoCredentials, readInstalledProviderPackages, readJson, readJsonOrUndefined, readOauthClient, readProviderExtensionAccount, readProviderExtensionCredentials, readProviderSecret, readTokens, recommendationForRule, reconcileExportPagesWithCrawl, redirectTrace, refreshAuthToken, refreshPrioritiesCsvFiles, refreshPrioritiesWorkflow, registrableDomain, removeInstalledProviderPackage, renderCrawlCsv, renderCrawlHtml, renderCrawlJunit, renderCrawlMarkdownTickets, renderCrawlPagesCsv, renderCrawlPretty, renderCsv, renderPresentationTablesMarkdown, renderWorkflowMarkdown, reportNarrative, requestHeaders, requirePageVerification, researchImportColumns, resetSeoData, resolveLocalSite, resolveSegmentRanges, resolveSeoCliPaths, reviewObservations, roundedPosition, runAnalyticsProviderLandingPages, runAnalyticsReport, runDoctor, runGa4Report, runProviderExtensionAction, runtimeForProvider, safeProviderAdapterError, saveInstalledProviderPackage, searchAnalyticsRows, searchUpdatesFromIncidents, secondPage, secondPageWith, segmentComparisonRange, segmentImpact, segmentRangeDays, seoErrorEnvelope, sessionSourceInListFilter, setActiveGoogleAccount, setTelemetryEnabled, setTokenStorageMode, shiftIsoDate, shouldExcludeBrandQuery, strikingDistance, strikingDistanceWith, summarizeCrawlReport, pageTechnicalSignals as technicalPageSignals, telemetryErrorCategory, toSeoError, tokenSchema, tokenStoreSchema, topFixes, trackTelemetryCommandFailed, trackTelemetryReportComplete, trackTelemetryReportFailed, trackTelemetryReportStart, trackTelemetrySetupComplete, trafficAnomaly, trafficAnomalyWith, unavailableSegmentImpactReport, unicodeTokens, uninstallProviderExtension, updateCorrelation, updatePostmortemCsvFiles, updatePostmortemWorkflow, validateResearchImportColumnSources, verifyAnalyticsProvider, verifyProviderExtension, verifyQueryContent, verifyQueryContentWith, withAgentReportContract, workflowPresentation, writeAhrefsApiKey, writeBingApiKey, writeClickySiteKey, writeConfig, writeDataForSeoCredentials, writeInstalledProviderPackages, writeOauthClient, writeProviderExtensionAccount, writeProviderExtensionCredentials, writeProviderSecret, writeTokens, xRobotsDirectives };
22671
21540
  //# sourceMappingURL=index.d.ts.map