@osqd/bothandlerjs 0.3.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/CHANGELOG.md +516 -0
- package/LICENSE +102 -0
- package/README.md +308 -0
- package/bin/bothandlerjs.mjs +14 -0
- package/dist/actions/index.d.ts +22 -0
- package/dist/actions/types.d.ts +59 -0
- package/dist/adapters/fastify.d.ts +43 -0
- package/dist/adapters/fetch.d.ts +51 -0
- package/dist/adapters/index.cjs +723 -0
- package/dist/adapters/index.cjs.map +1 -0
- package/dist/adapters/index.d.ts +8 -0
- package/dist/adapters/index.js +692 -0
- package/dist/adapters/index.js.map +1 -0
- package/dist/adapters/koa.d.ts +27 -0
- package/dist/adapters/node.d.ts +29 -0
- package/dist/adapters/shared.d.ts +39 -0
- package/dist/audit.d.ts +172 -0
- package/dist/challenge/index.d.ts +176 -0
- package/dist/challenge/language.d.ts +57 -0
- package/dist/challenge/page.d.ts +42 -0
- package/dist/challenge/pow.d.ts +33 -0
- package/dist/challenge/token.d.ts +72 -0
- package/dist/cli.cjs +13388 -0
- package/dist/cli.cjs.map +1 -0
- package/dist/cli.d.ts +5 -0
- package/dist/cli.js +13358 -0
- package/dist/cli.js.map +1 -0
- package/dist/client/index.cjs +139 -0
- package/dist/client/index.cjs.map +1 -0
- package/dist/client/index.d.ts +63 -0
- package/dist/client/index.js +112 -0
- package/dist/client/index.js.map +1 -0
- package/dist/config.d.ts +316 -0
- package/dist/core.d.ts +443 -0
- package/dist/corpus/adversarial.d.ts +2 -0
- package/dist/corpus/advertising-email.d.ts +2 -0
- package/dist/corpus/ai-crawlers.d.ts +2 -0
- package/dist/corpus/benign-bots.d.ts +2 -0
- package/dist/corpus/cdn-gateways.d.ts +2 -0
- package/dist/corpus/cookies.d.ts +49 -0
- package/dist/corpus/crawlers-regional.d.ts +2 -0
- package/dist/corpus/crawlers-vertical.d.ts +2 -0
- package/dist/corpus/headers.d.ts +403 -0
- package/dist/corpus/humans-apps.d.ts +2 -0
- package/dist/corpus/humans-browsers.d.ts +2 -0
- package/dist/corpus/humans.d.ts +2 -0
- package/dist/corpus/index.cjs +4196 -0
- package/dist/corpus/index.cjs.map +1 -0
- package/dist/corpus/index.d.ts +37 -0
- package/dist/corpus/index.js +4132 -0
- package/dist/corpus/index.js.map +1 -0
- package/dist/corpus/infrastructure.d.ts +17 -0
- package/dist/corpus/libraries-extended.d.ts +2 -0
- package/dist/corpus/ranges.d.ts +31 -0
- package/dist/corpus/reputation.d.ts +21 -0
- package/dist/corpus/runner.d.ts +130 -0
- package/dist/corpus/schema.d.ts +185 -0
- package/dist/corpus/tooling.d.ts +2 -0
- package/dist/corpus/unwanted.d.ts +2 -0
- package/dist/crawler-ranges.d.ts +113 -0
- package/dist/dashboard/client.generated.d.ts +7 -0
- package/dist/dashboard/feed.d.ts +186 -0
- package/dist/dashboard/index.d.ts +5 -0
- package/dist/dashboard/page.d.ts +51 -0
- package/dist/dashboard/parse-request.d.ts +28 -0
- package/dist/dashboard/preview.d.ts +45 -0
- package/dist/dashboard/server.d.ts +70 -0
- package/dist/dashboard/types.d.ts +714 -0
- package/dist/detectors/accept-signature.d.ts +6 -0
- package/dist/detectors/browsing-coherence.d.ts +44 -0
- package/dist/detectors/cadence.d.ts +28 -0
- package/dist/detectors/clearance.d.ts +25 -0
- package/dist/detectors/client-hints.d.ts +19 -0
- package/dist/detectors/client-signals.d.ts +27 -0
- package/dist/detectors/crawl-breadth.d.ts +28 -0
- package/dist/detectors/crawler-verification.d.ts +39 -0
- package/dist/detectors/fetch-metadata.d.ts +20 -0
- package/dist/detectors/header-integrity.d.ts +26 -0
- package/dist/detectors/header-order.d.ts +27 -0
- package/dist/detectors/identity-rotation.d.ts +34 -0
- package/dist/detectors/index.d.ts +56 -0
- package/dist/detectors/ip-intelligence.d.ts +30 -0
- package/dist/detectors/known-bots.d.ts +94 -0
- package/dist/detectors/probe-signature.d.ts +50 -0
- package/dist/detectors/rate-anomaly.d.ts +36 -0
- package/dist/detectors/self-identified.d.ts +33 -0
- package/dist/detectors/session-integrity.d.ts +24 -0
- package/dist/detectors/tls-fingerprint.d.ts +34 -0
- package/dist/detectors/trap.d.ts +98 -0
- package/dist/detectors/types.d.ts +70 -0
- package/dist/detectors/ua-coherence.d.ts +32 -0
- package/dist/evidence.d.ts +45 -0
- package/dist/facts.d.ts +46 -0
- package/dist/index.cjs +9600 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.ts +63 -0
- package/dist/index.js +9444 -0
- package/dist/index.js.map +1 -0
- package/dist/internal/async.d.ts +16 -0
- package/dist/internal/clock.d.ts +17 -0
- package/dist/internal/crypto.d.ts +26 -0
- package/dist/internal/dns.d.ts +100 -0
- package/dist/internal/emitter.d.ts +18 -0
- package/dist/internal/http.d.ts +22 -0
- package/dist/internal/ip.d.ts +73 -0
- package/dist/internal/lru.d.ts +34 -0
- package/dist/internal/matcher.d.ts +41 -0
- package/dist/internal/pattern.d.ts +14 -0
- package/dist/internal/ua.d.ts +92 -0
- package/dist/metrics.d.ts +120 -0
- package/dist/notify/hub.d.ts +70 -0
- package/dist/notify/index.d.ts +7 -0
- package/dist/notify/redact.d.ts +48 -0
- package/dist/notify/sinks.d.ts +62 -0
- package/dist/notify/types.d.ts +56 -0
- package/dist/policy/index.d.ts +7 -0
- package/dist/policy/match.d.ts +20 -0
- package/dist/policy/policy.d.ts +123 -0
- package/dist/policy/presets.d.ts +161 -0
- package/dist/policy/types.d.ts +155 -0
- package/dist/robots.d.ts +83 -0
- package/dist/state.d.ts +161 -0
- package/dist/stores/index.d.ts +5 -0
- package/dist/stores/memory.d.ts +33 -0
- package/dist/stores/redis.d.ts +59 -0
- package/dist/stores/types.d.ts +37 -0
- package/dist/types.d.ts +250 -0
- package/docs/challenge/index.md +152 -0
- package/docs/challenge/localisation.md +105 -0
- package/docs/concepts/actors.md +113 -0
- package/docs/concepts/evidence.md +133 -0
- package/docs/concepts/the-guard.md +121 -0
- package/docs/concepts/threat-model.md +120 -0
- package/docs/concepts/verdicts.md +108 -0
- package/docs/course/01-first-assessment.md +178 -0
- package/docs/course/02-proof-and-suspicion.md +164 -0
- package/docs/course/03-verdicts-and-scores.md +160 -0
- package/docs/course/04-the-guard.md +200 -0
- package/docs/course/05-detectors.md +178 -0
- package/docs/course/06-identity.md +161 -0
- package/docs/course/07-actors.md +178 -0
- package/docs/course/08-traps.md +183 -0
- package/docs/course/09-rules.md +224 -0
- package/docs/course/10-actions-and-presets.md +216 -0
- package/docs/course/11-the-challenge.md +227 -0
- package/docs/course/12-going-live.md +211 -0
- package/docs/course/13-operating-it.md +238 -0
- package/docs/course/14-scaling.md +195 -0
- package/docs/course/15-extending.md +259 -0
- package/docs/course/16-proving-it.md +266 -0
- package/docs/course/index.md +112 -0
- package/docs/design/decisions.md +216 -0
- package/docs/detection/client-signals.md +96 -0
- package/docs/detection/detectors.md +376 -0
- package/docs/detection/index.md +134 -0
- package/docs/detection/signatures.md +111 -0
- package/docs/detection/verification.md +123 -0
- package/docs/detection/writing-a-detector.md +145 -0
- package/docs/index.md +100 -0
- package/docs/integration/adapters.md +138 -0
- package/docs/integration/client-ip.md +114 -0
- package/docs/integration/index.md +55 -0
- package/docs/integration/stores.md +76 -0
- package/docs/operations/audit.md +116 -0
- package/docs/operations/dashboard.md +725 -0
- package/docs/operations/index.md +101 -0
- package/docs/operations/metrics.md +74 -0
- package/docs/operations/notifications.md +72 -0
- package/docs/operations/runtime-changes.md +118 -0
- package/docs/policy/actions.md +196 -0
- package/docs/policy/index.md +84 -0
- package/docs/policy/presets.md +191 -0
- package/docs/policy/robots.md +128 -0
- package/docs/policy/rules.md +134 -0
- package/docs/reference/api.md +126 -0
- package/docs/reference/configuration.md +175 -0
- package/docs/start/choosing-a-policy.md +127 -0
- package/docs/start/first-integration.md +127 -0
- package/docs/start/installation.md +63 -0
- package/docs/start/upgrading.md +72 -0
- package/docs/testing/cli.md +119 -0
- package/docs/testing/corpus.md +129 -0
- package/docs/testing/index.md +61 -0
- package/docs/testing/replay.md +102 -0
- package/docs/testing/try-it.md +189 -0
- package/package.json +145 -0
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* bothandlerjs — bot traffic detection and handling for TypeScript.
|
|
3
|
+
*
|
|
4
|
+
* The whole library rests on one distinction: **proof versus suspicion**. Evidence is
|
|
5
|
+
* tiered ({@link Certainty}), the two tiers are combined by different rules
|
|
6
|
+
* ({@link combineEvidence}), and a safety guard in the policy layer stops a
|
|
7
|
+
* probabilistic verdict from ever reaching a terminal action ({@link Policy}). That is
|
|
8
|
+
* what "no false positives" means here, precisely: nothing is *denied* on a guess.
|
|
9
|
+
* Guesses still get to tag, delay, rate-limit, challenge and alert — they just cannot
|
|
10
|
+
* shut the door.
|
|
11
|
+
*
|
|
12
|
+
* ```ts
|
|
13
|
+
* import { BotHandler } from "@osqd/bothandlerjs";
|
|
14
|
+
* import { botHandler } from "@osqd/bothandlerjs/adapters";
|
|
15
|
+
*
|
|
16
|
+
* const detector = new BotHandler({ preset: "protect-content" });
|
|
17
|
+
* app.use(botHandler(detector));
|
|
18
|
+
* ```
|
|
19
|
+
*/
|
|
20
|
+
export { BotHandler } from "./core.js";
|
|
21
|
+
export type { AssessOptions, ChangeContext, HandleResult, BotHandlerEvents, DetectorDescription } from "./core.js";
|
|
22
|
+
export { createFacts } from "./facts.js";
|
|
23
|
+
export type { FactsInput } from "./facts.js";
|
|
24
|
+
export { resolveConfig, resolveClientIp, validateRules, ConfigError } from "./config.js";
|
|
25
|
+
export type { BotHandlerConfig, ResolvedConfig, ProxyConfig } from "./config.js";
|
|
26
|
+
export { combineEvidence, noisyOr, sortEvidence, weightOf } from "./evidence.js";
|
|
27
|
+
export type { CombineOptions, CombinedEvidence } from "./evidence.js";
|
|
28
|
+
export { generateRobotsTxt, robotsFromRules, agentFor } from "./robots.js";
|
|
29
|
+
export { fetchCrawlerRanges, refreshCrawlerRanges, startCrawlerRangeRefresh, PUBLISHED_CRAWLER_RANGES } from "./crawler-ranges.js";
|
|
30
|
+
export type { PublishedRangeSource, RefreshOptions, RefreshResult, ScheduleOptions } from "./crawler-ranges.js";
|
|
31
|
+
export type { RobotsOptions, RobotsFromRulesResult } from "./robots.js";
|
|
32
|
+
export { TrafficAudit, DEFAULT_CHECKS } from "./audit.js";
|
|
33
|
+
export type { AnomalySeverity, AuditCheck, AuditContext, AuditOptions, AuditWindow, TrafficAnomaly } from "./audit.js";
|
|
34
|
+
export { Metrics, toPrometheus, DURATION_BUCKETS_MS, SCORE_BUCKETS } from "./metrics.js";
|
|
35
|
+
export type { MetricsOptions, MetricsSnapshot, PrometheusOptions } from "./metrics.js";
|
|
36
|
+
export { startDashboard, createDashboardHandler, renderDashboardPage } from "./dashboard/index.js";
|
|
37
|
+
export type { DashboardAuth, DashboardControls, DashboardEntry, DashboardEvidence, DashboardOptions, DashboardHandlerOptions, DashboardRedaction, DashboardRefusal, DashboardRequestHandler, DashboardSections, DashboardServer, DashboardSnapshot } from "./dashboard/index.js";
|
|
38
|
+
export { ActorRegistry, ActorState } from "./state.js";
|
|
39
|
+
export type { ActorRegistryOptions, ActorSummary } from "./state.js";
|
|
40
|
+
export { CERTAINTY_WEIGHT, VERDICTS, BOT_CLASSES } from "./types.js";
|
|
41
|
+
export type { ActorSnapshot, Assessment, BotClass, BypassReason, Certainty, DetectorFailure, Evidence, EvidenceDirection, Json, RequestFacts, Verdict, } from "./types.js";
|
|
42
|
+
export * from "./detectors/index.js";
|
|
43
|
+
export * from "./policy/index.js";
|
|
44
|
+
export * from "./actions/index.js";
|
|
45
|
+
export * from "./stores/index.js";
|
|
46
|
+
export * from "./notify/index.js";
|
|
47
|
+
export * from "./challenge/index.js";
|
|
48
|
+
export { ChallengeService } from "./challenge/index.js";
|
|
49
|
+
export type { ChallengeCopy, ChallengeOptions, ChallengeResponse, SolutionOutcome } from "./challenge/index.js";
|
|
50
|
+
export { parseAcceptLanguage, pickTranslation } from "./challenge/index.js";
|
|
51
|
+
export { IpRangeSet, cidrContains, formatIp, isSpecialUse, networkKey, normalizeIp, parseCidr, parseIp, SPECIAL_USE_RANGES } from "./internal/ip.js";
|
|
52
|
+
export type { Cidr, IpBytes } from "./internal/ip.js";
|
|
53
|
+
export { MultiPatternMatcher } from "./internal/matcher.js";
|
|
54
|
+
export { parseUserAgent, claimsBrowser, sendsModernHeaders, MAX_USER_AGENT_LENGTH } from "./internal/ua.js";
|
|
55
|
+
export type { ParsedUserAgent, UaShape } from "./internal/ua.js";
|
|
56
|
+
export { parseCookies, serializeCookie } from "./internal/http.js";
|
|
57
|
+
export type { CookieOptions } from "./internal/http.js";
|
|
58
|
+
export { systemClock, ManualClock } from "./internal/clock.js";
|
|
59
|
+
export type { Clock } from "./internal/clock.js";
|
|
60
|
+
export { cachingResolver, forwardConfirmedReverseDns, nodeDnsResolver } from "./internal/dns.js";
|
|
61
|
+
export type { DnsResolver, VerificationOutcome, CachingResolverOptions } from "./internal/dns.js";
|
|
62
|
+
export { TtlLru } from "./internal/lru.js";
|
|
63
|
+
export { Emitter } from "./internal/emitter.js";
|