s3db.js 18.0.11-next.1534f717 → 18.0.11-next.47047b5d

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (141) hide show
  1. package/dist/clients/recker-http-handler.js +56 -8
  2. package/dist/clients/recker-http-handler.js.map +1 -1
  3. package/dist/concerns/id/alphabets.js +150 -0
  4. package/dist/concerns/id/alphabets.js.map +1 -0
  5. package/dist/concerns/id/entropy.js +243 -0
  6. package/dist/concerns/id/entropy.js.map +1 -0
  7. package/dist/concerns/id/generators/nanoid.js +74 -0
  8. package/dist/concerns/id/generators/nanoid.js.map +1 -0
  9. package/dist/concerns/id/generators/sid.js +73 -0
  10. package/dist/concerns/id/generators/sid.js.map +1 -0
  11. package/dist/concerns/id/generators/ulid.js +208 -0
  12. package/dist/concerns/id/generators/ulid.js.map +1 -0
  13. package/dist/concerns/id/generators/uuid-v7.js +150 -0
  14. package/dist/concerns/id/generators/uuid-v7.js.map +1 -0
  15. package/dist/concerns/id/index.js +74 -0
  16. package/dist/concerns/id/index.js.map +1 -0
  17. package/dist/concerns/plugin-storage.js +114 -0
  18. package/dist/concerns/plugin-storage.js.map +1 -1
  19. package/dist/concerns/s3-errors.js +72 -0
  20. package/dist/concerns/s3-errors.js.map +1 -0
  21. package/dist/concerns/s3-key.js +54 -0
  22. package/dist/concerns/s3-key.js.map +1 -0
  23. package/dist/concerns/safe-merge.js +47 -0
  24. package/dist/concerns/safe-merge.js.map +1 -0
  25. package/dist/core/resource-config-validator.js +12 -2
  26. package/dist/core/resource-config-validator.js.map +1 -1
  27. package/dist/core/resource-partitions.class.js +12 -1
  28. package/dist/core/resource-partitions.class.js.map +1 -1
  29. package/dist/core/resource-persistence.class.js +41 -12
  30. package/dist/core/resource-persistence.class.js.map +1 -1
  31. package/dist/core/resource-query.class.js +21 -47
  32. package/dist/core/resource-query.class.js.map +1 -1
  33. package/dist/plugins/concerns/s3-mutex.class.js +155 -0
  34. package/dist/plugins/concerns/s3-mutex.class.js.map +1 -0
  35. package/dist/plugins/recon/stages/recker-asn-stage.js +279 -0
  36. package/dist/plugins/recon/stages/recker-asn-stage.js.map +1 -0
  37. package/dist/plugins/recon/stages/recker-dns-stage.js +227 -0
  38. package/dist/plugins/recon/stages/recker-dns-stage.js.map +1 -0
  39. package/dist/plugins/recon/stages/recker-scrape-stage.js +369 -0
  40. package/dist/plugins/recon/stages/recker-scrape-stage.js.map +1 -0
  41. package/dist/plugins/spider/recker-link-discoverer.js +544 -0
  42. package/dist/plugins/spider/recker-link-discoverer.js.map +1 -0
  43. package/dist/plugins/spider/recker-llms-validator.js +334 -0
  44. package/dist/plugins/spider/recker-llms-validator.js.map +1 -0
  45. package/dist/plugins/spider/recker-robots-validator.js +336 -0
  46. package/dist/plugins/spider/recker-robots-validator.js.map +1 -0
  47. package/dist/plugins/spider/recker-security-adapter.js +325 -0
  48. package/dist/plugins/spider/recker-security-adapter.js.map +1 -0
  49. package/dist/plugins/spider/recker-seo-adapter.js +399 -0
  50. package/dist/plugins/spider/recker-seo-adapter.js.map +1 -0
  51. package/dist/plugins/spider/recker-sitemap-validator.js +406 -0
  52. package/dist/plugins/spider/recker-sitemap-validator.js.map +1 -0
  53. package/dist/resource.class.js +2 -0
  54. package/dist/resource.class.js.map +1 -1
  55. package/dist/s3db.cjs +353 -71
  56. package/dist/s3db.cjs.map +1 -1
  57. package/dist/s3db.es.js +354 -72
  58. package/dist/s3db.es.js.map +1 -1
  59. package/dist/types/clients/recker-http-handler.d.ts +1 -0
  60. package/dist/types/clients/recker-http-handler.d.ts.map +1 -1
  61. package/dist/types/clients/types.d.ts +14 -0
  62. package/dist/types/clients/types.d.ts.map +1 -1
  63. package/dist/types/concerns/id/alphabets.d.ts +125 -0
  64. package/dist/types/concerns/id/alphabets.d.ts.map +1 -0
  65. package/dist/types/concerns/id/entropy.d.ts +84 -0
  66. package/dist/types/concerns/id/entropy.d.ts.map +1 -0
  67. package/dist/types/concerns/id/generators/nanoid.d.ts +46 -0
  68. package/dist/types/concerns/id/generators/nanoid.d.ts.map +1 -0
  69. package/dist/types/concerns/id/generators/sid.d.ts +45 -0
  70. package/dist/types/concerns/id/generators/sid.d.ts.map +1 -0
  71. package/dist/types/concerns/id/generators/ulid.d.ts +71 -0
  72. package/dist/types/concerns/id/generators/ulid.d.ts.map +1 -0
  73. package/dist/types/concerns/id/generators/uuid-v7.d.ts +60 -0
  74. package/dist/types/concerns/id/generators/uuid-v7.d.ts.map +1 -0
  75. package/dist/types/concerns/id/index.d.ts +51 -0
  76. package/dist/types/concerns/id/index.d.ts.map +1 -0
  77. package/dist/types/concerns/plugin-storage.d.ts +25 -0
  78. package/dist/types/concerns/plugin-storage.d.ts.map +1 -1
  79. package/dist/types/concerns/s3-errors.d.ts +20 -0
  80. package/dist/types/concerns/s3-errors.d.ts.map +1 -0
  81. package/dist/types/concerns/s3-key.d.ts +30 -0
  82. package/dist/types/concerns/s3-key.d.ts.map +1 -0
  83. package/dist/types/concerns/safe-merge.d.ts +22 -0
  84. package/dist/types/concerns/safe-merge.d.ts.map +1 -0
  85. package/dist/types/core/resource-config-validator.d.ts.map +1 -1
  86. package/dist/types/core/resource-partitions.class.d.ts.map +1 -1
  87. package/dist/types/core/resource-persistence.class.d.ts.map +1 -1
  88. package/dist/types/core/resource-query.class.d.ts.map +1 -1
  89. package/dist/types/plugins/concerns/s3-mutex.class.d.ts +30 -0
  90. package/dist/types/plugins/concerns/s3-mutex.class.d.ts.map +1 -0
  91. package/dist/types/plugins/recon/stages/recker-asn-stage.d.ts +90 -0
  92. package/dist/types/plugins/recon/stages/recker-asn-stage.d.ts.map +1 -0
  93. package/dist/types/plugins/recon/stages/recker-dns-stage.d.ts +125 -0
  94. package/dist/types/plugins/recon/stages/recker-dns-stage.d.ts.map +1 -0
  95. package/dist/types/plugins/recon/stages/recker-scrape-stage.d.ts +96 -0
  96. package/dist/types/plugins/recon/stages/recker-scrape-stage.d.ts.map +1 -0
  97. package/dist/types/plugins/spider/recker-link-discoverer.d.ts +54 -0
  98. package/dist/types/plugins/spider/recker-link-discoverer.d.ts.map +1 -0
  99. package/dist/types/plugins/spider/recker-llms-validator.d.ts +105 -0
  100. package/dist/types/plugins/spider/recker-llms-validator.d.ts.map +1 -0
  101. package/dist/types/plugins/spider/recker-robots-validator.d.ts +92 -0
  102. package/dist/types/plugins/spider/recker-robots-validator.d.ts.map +1 -0
  103. package/dist/types/plugins/spider/recker-security-adapter.d.ts +83 -0
  104. package/dist/types/plugins/spider/recker-security-adapter.d.ts.map +1 -0
  105. package/dist/types/plugins/spider/recker-seo-adapter.d.ts +187 -0
  106. package/dist/types/plugins/spider/recker-seo-adapter.d.ts.map +1 -0
  107. package/dist/types/plugins/spider/recker-sitemap-validator.d.ts +121 -0
  108. package/dist/types/plugins/spider/recker-sitemap-validator.d.ts.map +1 -0
  109. package/dist/types/resource.class.d.ts.map +1 -1
  110. package/mcp/prompts/index.ts +275 -0
  111. package/mcp/resources/index.ts +322 -0
  112. package/mcp/tools/plugins.ts +1137 -0
  113. package/mcp/tools/streams.ts +340 -0
  114. package/package.json +20 -21
  115. package/src/clients/recker-http-handler.ts +74 -8
  116. package/src/clients/types.ts +14 -0
  117. package/src/concerns/id/alphabets.ts +175 -0
  118. package/src/concerns/id/entropy.ts +286 -0
  119. package/src/concerns/id/generators/sid.ts +90 -0
  120. package/src/concerns/id/generators/ulid.ts +249 -0
  121. package/src/concerns/id/generators/uuid-v7.ts +179 -0
  122. package/src/concerns/id/index.ts +167 -0
  123. package/src/concerns/plugin-storage.ts +144 -0
  124. package/src/concerns/s3-errors.ts +97 -0
  125. package/src/concerns/s3-key.ts +62 -0
  126. package/src/concerns/safe-merge.ts +60 -0
  127. package/src/core/resource-config-validator.ts +9 -2
  128. package/src/core/resource-partitions.class.ts +14 -1
  129. package/src/core/resource-persistence.class.ts +47 -13
  130. package/src/core/resource-query.class.ts +21 -46
  131. package/src/plugins/concerns/s3-mutex.class.ts +228 -0
  132. package/src/plugins/recon/stages/recker-asn-stage.ts +385 -0
  133. package/src/plugins/recon/stages/recker-dns-stage.ts +360 -0
  134. package/src/plugins/recon/stages/recker-scrape-stage.ts +509 -0
  135. package/src/plugins/spider/recker-link-discoverer.ts +645 -0
  136. package/src/plugins/spider/recker-llms-validator.ts +500 -0
  137. package/src/plugins/spider/recker-robots-validator.ts +473 -0
  138. package/src/plugins/spider/recker-security-adapter.ts +489 -0
  139. package/src/plugins/spider/recker-seo-adapter.ts +605 -0
  140. package/src/plugins/spider/recker-sitemap-validator.ts +621 -0
  141. package/src/resource.class.ts +2 -0
@@ -0,0 +1,54 @@
1
+ import type { URLPatternMatcher } from './url-pattern-matcher.js';
2
+ import { ReckerRobotsValidator } from './recker-robots-validator.js';
3
+ import { ReckerSitemapValidator } from './recker-sitemap-validator.js';
4
+ import type { LinkDiscovererConfig, DiscoveredLink, RobotsCheckResult, DiscoveryStats, SitemapDiscoveryOptions, ResetOptions } from './link-discoverer.js';
5
+ export declare class ReckerLinkDiscoverer {
6
+ private config;
7
+ private patternMatcher;
8
+ private robotsValidator;
9
+ private sitemapValidator;
10
+ private discovered;
11
+ private queued;
12
+ private blockedByRobots;
13
+ private fromSitemap;
14
+ private reckerAvailable;
15
+ private parse;
16
+ private reckerExtractLinks;
17
+ private fallbackDiscoverer;
18
+ constructor(config?: LinkDiscovererConfig);
19
+ private _checkReckerAvailability;
20
+ private _getFallbackDiscoverer;
21
+ setPatternMatcher(matcher: URLPatternMatcher): void;
22
+ setRobotsFetcher(fetcher: (url: string) => Promise<string>): void;
23
+ extractLinksSync(html: string, baseUrl: string, currentDepth?: number): DiscoveredLink[];
24
+ private _extractLinksWithRecker;
25
+ private _extractLinksWithRegex;
26
+ extractLinksAsync(html: string, baseUrl: string, currentDepth?: number): Promise<DiscoveredLink[]>;
27
+ isAllowedByRobots(url: string): Promise<RobotsCheckResult>;
28
+ preloadRobots(url: string): Promise<void>;
29
+ getSitemaps(url: string): Promise<string[]>;
30
+ discoverFromSitemaps(url: string, options?: SitemapDiscoveryOptions): Promise<DiscoveredLink[]>;
31
+ parseSitemap(sitemapUrl: string, options?: Record<string, unknown>): Promise<Array<{
32
+ url?: string;
33
+ [key: string]: unknown;
34
+ }>>;
35
+ probeSitemapLocations(url: string): Promise<Array<{
36
+ url: string;
37
+ exists: boolean;
38
+ format?: string;
39
+ }>>;
40
+ private _normalizeUrl;
41
+ private _shouldFollow;
42
+ private _shouldFollowPattern;
43
+ private _getMainDomain;
44
+ markQueued(url: string): void;
45
+ isQueued(url: string): boolean;
46
+ getStats(): DiscoveryStats;
47
+ reset(options?: ResetOptions): void;
48
+ isLimitReached(): boolean;
49
+ getRobotsValidation(url: string): Promise<ReturnType<ReckerRobotsValidator['validate']> | null>;
50
+ getSitemapValidation(url: string): Promise<ReturnType<ReckerSitemapValidator['validate']> | null>;
51
+ isReckerEnabled(): boolean;
52
+ }
53
+ export default ReckerLinkDiscoverer;
54
+ //# sourceMappingURL=recker-link-discoverer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recker-link-discoverer.d.ts","sourceRoot":"","sources":["../../../../src/plugins/spider/recker-link-discoverer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,105 @@
1
+ import type { CrawlContext } from './crawl-context.js';
2
+ export interface LlmsTxtLink {
3
+ text: string;
4
+ url: string;
5
+ description?: string;
6
+ section?: string;
7
+ }
8
+ export interface LlmsTxtSection {
9
+ title: string;
10
+ content: string;
11
+ links: LlmsTxtLink[];
12
+ }
13
+ export interface LlmsTxtParseResult {
14
+ valid: boolean;
15
+ errors: string[];
16
+ warnings: string[];
17
+ siteName?: string;
18
+ siteDescription?: string;
19
+ sections: LlmsTxtSection[];
20
+ links: LlmsTxtLink[];
21
+ hasFullVersion: boolean;
22
+ rawContent: string;
23
+ size: number;
24
+ }
25
+ export interface LlmsTxtValidationIssue {
26
+ type: 'error' | 'warning' | 'info';
27
+ code: string;
28
+ message: string;
29
+ line?: number;
30
+ recommendation?: string;
31
+ }
32
+ export interface LlmsTxtValidationResult {
33
+ valid: boolean;
34
+ issues: LlmsTxtValidationIssue[];
35
+ parseResult: LlmsTxtParseResult;
36
+ }
37
+ export interface LlmsTxtCheckResult {
38
+ exists: boolean;
39
+ valid: boolean;
40
+ status?: number;
41
+ fullVersionExists?: boolean;
42
+ siteName?: string;
43
+ siteDescription?: string;
44
+ sections: LlmsTxtSection[];
45
+ links: LlmsTxtLink[];
46
+ issues: LlmsTxtValidationIssue[];
47
+ errors: string[];
48
+ warnings: string[];
49
+ size?: number;
50
+ }
51
+ export interface LlmsTxtTemplateOptions {
52
+ siteName: string;
53
+ siteDescription: string;
54
+ sections?: Array<{
55
+ title: string;
56
+ links: Array<{
57
+ text: string;
58
+ url: string;
59
+ description?: string;
60
+ }>;
61
+ }>;
62
+ }
63
+ export interface LlmsTxtValidatorConfig {
64
+ userAgent?: string;
65
+ fetchTimeout?: number;
66
+ cacheTimeout?: number;
67
+ context?: CrawlContext | null;
68
+ }
69
+ export declare class ReckerLlmsTxtValidator {
70
+ private config;
71
+ private _context;
72
+ private cache;
73
+ private _httpClient;
74
+ private reckerAvailable;
75
+ private parseLlmsTxt;
76
+ private validateLlmsTxt;
77
+ private fetchAndValidateLlmsTxt;
78
+ private generateLlmsTxtTemplate;
79
+ constructor(config?: LlmsTxtValidatorConfig);
80
+ private _checkReckerAvailability;
81
+ private _getHttpClient;
82
+ check(domain: string): Promise<LlmsTxtCheckResult>;
83
+ private _fallbackCheck;
84
+ private _simpleParse;
85
+ validate(domain: string): Promise<LlmsTxtValidationResult | null>;
86
+ validateContent(content: string, baseUrl?: string): LlmsTxtValidationResult | null;
87
+ parseContent(content: string): LlmsTxtParseResult | null;
88
+ generateTemplate(options: LlmsTxtTemplateOptions): string | null;
89
+ private _fallbackGenerateTemplate;
90
+ checkFullVersion(domain: string): Promise<{
91
+ exists: boolean;
92
+ status?: number;
93
+ size?: number;
94
+ }>;
95
+ getLinks(domain: string): Promise<LlmsTxtLink[]>;
96
+ getSections(domain: string): Promise<LlmsTxtSection[]>;
97
+ clearCache(domain?: string): void;
98
+ getCacheStats(): {
99
+ size: number;
100
+ domains: string[];
101
+ };
102
+ isReckerEnabled(): boolean;
103
+ }
104
+ export default ReckerLlmsTxtValidator;
105
+ //# sourceMappingURL=recker-llms-validator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recker-llms-validator.d.ts","sourceRoot":"","sources":["../../../../src/plugins/spider/recker-llms-validator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,92 @@
1
+ import type { RobotsCheckResult, RobotsParserConfig, CacheStats } from './robots-parser.js';
2
+ type ReckerRobotsParseResult = {
3
+ valid: boolean;
4
+ errors: Array<{
5
+ line: number;
6
+ message: string;
7
+ }>;
8
+ warnings: Array<{
9
+ line: number;
10
+ message: string;
11
+ }>;
12
+ directives: Array<{
13
+ type: 'user-agent' | 'allow' | 'disallow' | 'sitemap' | 'crawl-delay' | 'host' | 'clean-param';
14
+ value: string;
15
+ line: number;
16
+ }>;
17
+ userAgentBlocks: Array<{
18
+ userAgents: string[];
19
+ rules: Array<{
20
+ type: 'allow' | 'disallow';
21
+ path: string;
22
+ line: number;
23
+ }>;
24
+ crawlDelay?: number;
25
+ }>;
26
+ sitemaps: string[];
27
+ host?: string;
28
+ blocksAllRobots: boolean;
29
+ blocksImportantPaths: boolean;
30
+ size: number;
31
+ };
32
+ type ReckerRobotsValidationIssue = {
33
+ type: 'error' | 'warning' | 'info';
34
+ code: string;
35
+ message: string;
36
+ line?: number;
37
+ recommendation?: string;
38
+ };
39
+ type ReckerRobotsValidationResult = {
40
+ valid: boolean;
41
+ issues: ReckerRobotsValidationIssue[];
42
+ parseResult: ReckerRobotsParseResult;
43
+ };
44
+ export interface RobotsValidationDetails {
45
+ valid: boolean;
46
+ issues: ReckerRobotsValidationIssue[];
47
+ blocksAllRobots: boolean;
48
+ blocksImportantPaths: boolean;
49
+ host?: string;
50
+ size: number;
51
+ }
52
+ export declare class ReckerRobotsValidator {
53
+ private config;
54
+ private _context;
55
+ private cache;
56
+ private fetcher;
57
+ private _httpClient;
58
+ private reckerAvailable;
59
+ private parseRobotsTxt;
60
+ private validateRobotsTxt;
61
+ private isPathAllowed;
62
+ private fetchAndValidateRobotsTxt;
63
+ private fallbackParser;
64
+ constructor(config?: RobotsParserConfig);
65
+ private _checkReckerAvailability;
66
+ private _getFallbackParser;
67
+ setFetcher(fetcher: (url: string) => Promise<string>): void;
68
+ isAllowed(url: string): Promise<RobotsCheckResult>;
69
+ private _getCachedOrFetch;
70
+ private _getHttpClient;
71
+ private _fetchRobotsTxt;
72
+ private _getCrawlDelayFromParseResult;
73
+ private _findMatchedRule;
74
+ private _pathMatches;
75
+ getSitemaps(domain: string): Promise<string[]>;
76
+ getCrawlDelay(domain: string): Promise<number | null>;
77
+ preload(domain: string): Promise<void>;
78
+ clearCache(domain?: string): void;
79
+ getCacheStats(): CacheStats;
80
+ validate(url: string): Promise<RobotsValidationDetails | null>;
81
+ validateContent(content: string, baseUrl?: string): Promise<ReckerRobotsValidationResult | null>;
82
+ parseContent(content: string): ReckerRobotsParseResult | null;
83
+ getBlockingStatus(domain: string): {
84
+ blocksAllRobots: boolean;
85
+ blocksImportantPaths: boolean;
86
+ } | null;
87
+ getHost(domain: string): string | null;
88
+ getValidationIssues(domain: string): Promise<ReckerRobotsValidationIssue[]>;
89
+ isReckerEnabled(): boolean;
90
+ }
91
+ export default ReckerRobotsValidator;
92
+ //# sourceMappingURL=recker-robots-validator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recker-robots-validator.d.ts","sourceRoot":"","sources":["../../../../src/plugins/spider/recker-robots-validator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,83 @@
1
+ import type { SecurityAnalyzerConfig, SecurityAnalysisResult } from './security-analyzer.js';
2
+ type ReckerSecurityReport = {
3
+ grade: string;
4
+ score: number;
5
+ details: Array<{
6
+ header: string;
7
+ value?: string;
8
+ status: 'pass' | 'warn' | 'fail';
9
+ score: number;
10
+ message: string;
11
+ recommendation?: string;
12
+ }>;
13
+ csp?: {
14
+ raw: string;
15
+ directives: Array<{
16
+ name: string;
17
+ values: string[];
18
+ issues: string[];
19
+ severity: 'safe' | 'warn' | 'dangerous';
20
+ }>;
21
+ issues: string[];
22
+ score: number;
23
+ hasUnsafeInline: boolean;
24
+ hasUnsafeEval: boolean;
25
+ hasWildcard: boolean;
26
+ missingDirectives: string[];
27
+ };
28
+ summary: {
29
+ passed: number;
30
+ warnings: number;
31
+ failed: number;
32
+ };
33
+ };
34
+ interface Page {
35
+ on(event: 'response', handler: (response: PageResponse) => void): void;
36
+ on(event: 'console', handler: (msg: ConsoleMessage) => void): void;
37
+ removeListener(event: string, handler: (...args: unknown[]) => void): void;
38
+ content(): Promise<string>;
39
+ evaluateOnNewDocument(fn: string): Promise<void>;
40
+ waitForTimeout(ms: number): Promise<void>;
41
+ evaluate<T>(fn: () => T | Promise<T>): Promise<T>;
42
+ }
43
+ interface PageResponse {
44
+ url(): string;
45
+ headers(): Record<string, string>;
46
+ }
47
+ interface ConsoleMessage {
48
+ type(): string;
49
+ text(): string;
50
+ location(): unknown;
51
+ args(): unknown[];
52
+ }
53
+ export declare class ReckerSecurityAdapter {
54
+ private config;
55
+ private reckerAvailable;
56
+ private analyzeSecurityHeaders;
57
+ private fallbackAnalyzer;
58
+ private reckerGrade;
59
+ private reckerScore;
60
+ constructor(config?: SecurityAnalyzerConfig);
61
+ private _checkReckerAvailability;
62
+ private _getFallbackAnalyzer;
63
+ analyze(page: Page, baseUrl: string, html?: string, responseHeaders?: Record<string, string>): Promise<SecurityAnalysisResult>;
64
+ analyzeSelective(page: Page, baseUrl: string, html?: string, activities?: string[], responseHeaders?: Record<string, string>): Promise<SecurityAnalysisResult>;
65
+ private _analyzeWithReckerAndPuppeteer;
66
+ private _analyzeSelectiveWithRecker;
67
+ private _analyzeHeadersWithRecker;
68
+ private _mapReckerToSecurityResult;
69
+ private _mergeResults;
70
+ private _mapReckerHeaders;
71
+ private _mapReckerCSP;
72
+ private _mapCORS;
73
+ private _mapTLS;
74
+ getReckerGrade(): string | null;
75
+ getReckerScore(): number | null;
76
+ analyzeHeadersOnly(headers: Record<string, string>): Promise<{
77
+ grade: string;
78
+ score: number;
79
+ report: ReckerSecurityReport;
80
+ } | null>;
81
+ }
82
+ export default ReckerSecurityAdapter;
83
+ //# sourceMappingURL=recker-security-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recker-security-adapter.d.ts","sourceRoot":"","sources":["../../../../src/plugins/spider/recker-security-adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,187 @@
1
+ import type { AnalysisResult, SEOAnalyzerConfig } from './seo-analyzer.js';
2
+ type ReckerSeoReport = {
3
+ url: string;
4
+ timestamp: Date;
5
+ grade: string;
6
+ score: number;
7
+ summary: {
8
+ totalChecks: number;
9
+ passed: number;
10
+ warnings: number;
11
+ errors: number;
12
+ infos: number;
13
+ passRate: number;
14
+ issuesByCategory: Record<string, {
15
+ passed: number;
16
+ warnings: number;
17
+ errors: number;
18
+ }>;
19
+ topIssues: Array<{
20
+ name: string;
21
+ message: string;
22
+ category: string;
23
+ severity: 'error' | 'warning';
24
+ }>;
25
+ quickWins: string[];
26
+ vitals: {
27
+ htmlSize?: number;
28
+ domElements?: number;
29
+ ttfb?: number;
30
+ totalTime?: number;
31
+ wordCount: number;
32
+ totalWordCount?: number;
33
+ readingTime: number;
34
+ imageCount: number;
35
+ linkCount: number;
36
+ };
37
+ completeness: {
38
+ meta: number;
39
+ social: number;
40
+ technical: number;
41
+ content: number;
42
+ images: number;
43
+ links: number;
44
+ };
45
+ };
46
+ checks: Array<{
47
+ name: string;
48
+ category: string;
49
+ status: 'pass' | 'warn' | 'fail' | 'info';
50
+ message: string;
51
+ value?: string | number;
52
+ recommendation?: string;
53
+ }>;
54
+ title?: {
55
+ text: string;
56
+ length: number;
57
+ };
58
+ metaDescription?: {
59
+ text: string;
60
+ length: number;
61
+ };
62
+ openGraph?: {
63
+ title?: string;
64
+ description?: string;
65
+ image?: string;
66
+ url?: string;
67
+ type?: string;
68
+ siteName?: string;
69
+ };
70
+ twitterCard?: {
71
+ card?: string;
72
+ title?: string;
73
+ description?: string;
74
+ image?: string;
75
+ site?: string;
76
+ };
77
+ structuredData: {
78
+ count: number;
79
+ types: string[];
80
+ items: Record<string, unknown>[];
81
+ };
82
+ content: {
83
+ wordCount: number;
84
+ totalWordCount?: number;
85
+ characterCount: number;
86
+ sentenceCount: number;
87
+ paragraphCount: number;
88
+ readingTimeMinutes: number;
89
+ avgWordsPerSentence: number;
90
+ avgParagraphLength: number;
91
+ listCount: number;
92
+ strongTagCount: number;
93
+ emTagCount: number;
94
+ fleschReadingEase?: number;
95
+ hasQuestionHeadings?: boolean;
96
+ };
97
+ headings: {
98
+ structure: Array<{
99
+ level: number;
100
+ text: string;
101
+ count: number;
102
+ }>;
103
+ h1Count: number;
104
+ hasProperHierarchy: boolean;
105
+ issues: string[];
106
+ };
107
+ keywords: {
108
+ primary: string | null;
109
+ secondary: string[];
110
+ density: Record<string, number>;
111
+ };
112
+ links: {
113
+ total: number;
114
+ internal: number;
115
+ external: number;
116
+ nofollow: number;
117
+ broken: number;
118
+ withoutText: number;
119
+ sponsoredLinks: number;
120
+ ugcLinks: number;
121
+ internalHttpLinks?: number;
122
+ internalHttpLinkUrls?: string[];
123
+ };
124
+ images: {
125
+ total: number;
126
+ withAlt: number;
127
+ withoutAlt: number;
128
+ lazy: number;
129
+ missingDimensions: number;
130
+ modernFormats: number;
131
+ altTextLengths: number[];
132
+ imageAltTexts: string[];
133
+ imageFilenames: string[];
134
+ imagesWithAsyncDecoding: number;
135
+ };
136
+ social: {
137
+ openGraph: {
138
+ present: boolean;
139
+ hasTitle: boolean;
140
+ hasDescription: boolean;
141
+ hasImage: boolean;
142
+ hasUrl: boolean;
143
+ issues: string[];
144
+ };
145
+ twitterCard: {
146
+ present: boolean;
147
+ hasCard: boolean;
148
+ hasTitle: boolean;
149
+ hasDescription: boolean;
150
+ hasImage: boolean;
151
+ issues: string[];
152
+ };
153
+ };
154
+ technical: {
155
+ hasCanonical: boolean;
156
+ canonicalUrl?: string;
157
+ hasRobotsMeta: boolean;
158
+ robotsContent?: string[];
159
+ hasViewport: boolean;
160
+ hasCharset: boolean;
161
+ hasLang: boolean;
162
+ langValue?: string;
163
+ };
164
+ };
165
+ export declare class ReckerSEOAdapter {
166
+ private config;
167
+ private reckerAvailable;
168
+ private analyzeSeo;
169
+ private fallbackAnalyzer;
170
+ constructor(config?: SEOAnalyzerConfig);
171
+ private _checkReckerAvailability;
172
+ private _getFallbackAnalyzer;
173
+ analyze(html: string, baseUrl: string): Promise<AnalysisResult>;
174
+ analyzeSelective(html: string, baseUrl: string, activities?: string[]): Promise<AnalysisResult>;
175
+ private _analyzeWithRecker;
176
+ private _mapActivitiesToCategories;
177
+ private _mapReckerToAnalysisResult;
178
+ private _mapOnPageSEO;
179
+ private _mapAccessibility;
180
+ private _mapInternalLinks;
181
+ private _mapKeywordOptimization;
182
+ private _mapSEOScore;
183
+ getReckerGrade(): string | null;
184
+ getDetailedReport(html: string, baseUrl: string): Promise<ReckerSeoReport | null>;
185
+ }
186
+ export default ReckerSEOAdapter;
187
+ //# sourceMappingURL=recker-seo-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recker-seo-adapter.d.ts","sourceRoot":"","sources":["../../../../src/plugins/spider/recker-seo-adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,121 @@
1
+ import type { SitemapParserConfig, SitemapEntry, ParseOptions, SitemapStats, ProbeResult, FetcherResult } from './sitemap-parser.js';
2
+ type ReckerSitemapUrl = {
3
+ loc: string;
4
+ lastmod?: string;
5
+ changefreq?: 'always' | 'hourly' | 'daily' | 'weekly' | 'monthly' | 'yearly' | 'never';
6
+ priority?: number;
7
+ images?: Array<{
8
+ loc: string;
9
+ caption?: string;
10
+ title?: string;
11
+ }>;
12
+ videos?: Array<{
13
+ thumbnailLoc: string;
14
+ title: string;
15
+ description: string;
16
+ contentLoc?: string;
17
+ playerLoc?: string;
18
+ }>;
19
+ news?: {
20
+ publicationName: string;
21
+ publicationLanguage: string;
22
+ publicationDate: string;
23
+ title: string;
24
+ };
25
+ alternates?: Array<{
26
+ hreflang: string;
27
+ href: string;
28
+ }>;
29
+ };
30
+ type ReckerSitemapIndex = {
31
+ loc: string;
32
+ lastmod?: string;
33
+ };
34
+ type ReckerSitemapParseResult = {
35
+ type: 'urlset' | 'sitemapindex' | 'unknown';
36
+ valid: boolean;
37
+ errors: string[];
38
+ warnings: string[];
39
+ urls: ReckerSitemapUrl[];
40
+ sitemaps: ReckerSitemapIndex[];
41
+ urlCount: number;
42
+ size: number;
43
+ compressed: boolean;
44
+ };
45
+ type ReckerSitemapValidationIssue = {
46
+ type: 'error' | 'warning' | 'info';
47
+ code: string;
48
+ message: string;
49
+ url?: string;
50
+ recommendation?: string;
51
+ };
52
+ type ReckerSitemapValidationResult = {
53
+ valid: boolean;
54
+ issues: ReckerSitemapValidationIssue[];
55
+ parseResult: ReckerSitemapParseResult;
56
+ };
57
+ export interface SitemapValidationDetails {
58
+ valid: boolean;
59
+ issues: ReckerSitemapValidationIssue[];
60
+ type: 'urlset' | 'sitemapindex' | 'unknown';
61
+ urlCount: number;
62
+ size: number;
63
+ compressed: boolean;
64
+ errors: string[];
65
+ warnings: string[];
66
+ }
67
+ export interface SitemapEntryExtended extends SitemapEntry {
68
+ news?: {
69
+ publicationName: string;
70
+ publicationLanguage: string;
71
+ publicationDate: string;
72
+ title: string;
73
+ };
74
+ alternates?: Array<{
75
+ hreflang: string;
76
+ href: string;
77
+ }>;
78
+ }
79
+ export declare class ReckerSitemapValidator {
80
+ private config;
81
+ private _context;
82
+ private cache;
83
+ private fetcher;
84
+ private _httpClient;
85
+ private stats;
86
+ private reckerAvailable;
87
+ private parseSitemap;
88
+ private validateSitemap;
89
+ private discoverSitemaps;
90
+ private fetchAndValidateSitemap;
91
+ private fallbackParser;
92
+ constructor(config?: SitemapParserConfig);
93
+ private _checkReckerAvailability;
94
+ private _getFallbackParser;
95
+ setFetcher(fetcher: (url: string) => Promise<FetcherResult>): void;
96
+ parse(sitemapUrl: string, options?: ParseOptions): Promise<SitemapEntry[]>;
97
+ private _parseReckerIndex;
98
+ private _mapReckerUrlsToEntries;
99
+ private _getHttpClient;
100
+ private _fetch;
101
+ private _decompress;
102
+ getStats(): SitemapStats;
103
+ clearCache(url?: string): void;
104
+ resetStats(): void;
105
+ discoverFromRobotsTxt(robotsTxtUrl: string): Promise<string[]>;
106
+ probeCommonLocations(baseUrl: string): Promise<ProbeResult[]>;
107
+ validate(sitemapUrl: string): Promise<SitemapValidationDetails | null>;
108
+ validateContent(content: string, baseUrl?: string): Promise<ReckerSitemapValidationResult | null>;
109
+ parseContent(content: string, compressed?: boolean): ReckerSitemapParseResult | null;
110
+ getValidationIssues(sitemapUrl: string): Promise<ReckerSitemapValidationIssue[]>;
111
+ getNewsEntries(sitemapUrl: string): Promise<SitemapEntryExtended[]>;
112
+ getAlternateLanguages(sitemapUrl: string): Promise<Map<string, SitemapEntryExtended[]>>;
113
+ discoverAll(baseUrl: string): Promise<{
114
+ fromRobots: string[];
115
+ fromProbing: ProbeResult[];
116
+ all: string[];
117
+ }>;
118
+ isReckerEnabled(): boolean;
119
+ }
120
+ export default ReckerSitemapValidator;
121
+ //# sourceMappingURL=recker-sitemap-validator.d.ts.map