
Security News
Attackers Are Hunting High-Impact Node.js Maintainers in a Coordinated Social Engineering Campaign
Multiple high-impact npm maintainers confirm they have been targeted in the same social engineering campaign that compromised Axios.
@driftdev/sdk
Advanced tools
Programmatic API for documentation coverage analysis, drift detection, and spec generation.
bun add @driftdev/sdk
import { Drift, buildDriftSpec } from '@driftdev/sdk';
// Analyze a package
const drift = new Drift();
const result = await drift.analyzeFileWithDiagnostics('src/index.ts');
// Build coverage spec
const spec = buildDriftSpec({
openpkg: result.spec,
openpkgPath: 'src/index.ts',
packagePath: process.cwd(),
});
console.log(`Coverage: ${spec.summary.score}%`);
console.log(`Drift issues: ${spec.summary.drift.total}`);
15 drift types across 4 categories: structural, semantic, example, prose.
import { computeDrift, buildExportRegistry, detectProseDrift, discoverMarkdownFiles } from '@driftdev/sdk';
// JSDoc drift (param mismatches, type errors, broken links, etc.)
const drift = computeDrift(spec);
for (const [exportName, issues] of drift.exports) {
for (const issue of issues) {
console.log(`${exportName}: ${issue.issue}`);
console.log(` file: ${issue.filePath}:${issue.line}`);
}
}
// Prose drift (markdown docs referencing non-existent exports)
const registry = buildExportRegistry(spec);
const markdownFiles = discoverMarkdownFiles(process.cwd());
const proseIssues = detectProseDrift({ packageName: '@my/pkg', markdownFiles, registry });
Every SpecDocDrift includes filePath and line for agent-driven fixes.
import { buildDriftSpec, getExportDrift } from '@driftdev/sdk';
const driftSpec = buildDriftSpec({ openpkg, openpkgPath, packagePath });
// Get drift for specific export
const drifts = getExportDrift(someExport, driftSpec);
import { computeHealth, isExportDocumented } from '@driftdev/sdk';
const health = computeHealth({
coverageScore: 88,
documentedExports: 243,
totalExports: 275,
driftIssues: 36,
fixableDrift: 20,
driftByCategory: { structural: 20, semantic: 10, example: 5, prose: 1 },
});
import { discoverMarkdownFiles, parseMarkdownFiles, findExportReferences } from '@driftdev/sdk';
// Auto-discover markdown files (README.md, docs/**/*.md)
const files = discoverMarkdownFiles(process.cwd(), {
include: ['README.md', 'docs/**/*.md'],
exclude: ['node_modules/**'],
});
// Find export references in markdown
const refs = findExportReferences(files, ['createUser', 'updateUser']);
import { validateExamples, typecheckExamples } from '@driftdev/sdk';
// Full validation (presence + typecheck + run)
const validation = await validateExamples(spec, {
validations: ['presence', 'typecheck', 'run'],
targetDir: process.cwd(),
});
import { resolveTarget, NodeFileSystem } from '@driftdev/sdk';
const fs = new NodeFileSystem(process.cwd());
const { entryFile, targetDir, packageInfo } = await resolveTarget(fs, {
cwd: process.cwd(),
});
import { saveSnapshot, loadSnapshots, getTrend, computeSnapshot } from '@driftdev/sdk/history';
saveSnapshot(computeSnapshot(spec), process.cwd());
const snapshots = loadSnapshots(process.cwd());
const trend = getTrend(spec, process.cwd());
import { categorizeDrift, getDriftSummary, groupDriftsByCategory } from '@driftdev/sdk/analysis';
const summary = getDriftSummary(drifts);
// summary.total, summary.byCategory (structural/semantic/example/prose)
const grouped = groupDriftsByCategory(drifts);
// grouped.structural[], grouped.semantic[], grouped.example[], grouped.prose[]
Drift — Main analysis classbuildDriftSpec — Build coverage speccomputeDrift / computeExportDrift — Drift detectioncomputeHealth — Health score computationgenerateReport — Generate coverage reportsdetectProseDrift — Markdown prose drift detectionbuildExportRegistry — Build registry for cross-reference validationcategorizeDrift / getDriftSummary / groupDriftsByCategory — Categorization (via @driftdev/sdk/analysis)discoverMarkdownFiles — Auto-discover markdown files by glob patternsparseMarkdownFiles — Parse markdown for code blocksfindExportReferences — Find export references in markdowndiffSpecWithDocs — Diff specs with doc impact analysisvalidateExamples — Full example validationtypecheckExamples — Type-check examplesresolveTarget — Resolve entry pointsNodeFileSystem — File system adapterdetectPackageManager — Detect npm/yarn/pnpm/bun@driftdev/sdk/history)saveSnapshot / loadSnapshots — Manage coverage historygetTrend / getExtendedTrend — Trend analysispruneHistory — Clean old snapshotsnormalizeConfig — Config normalizationdriftConfigSchema — Zod schema for validationMIT
FAQs
Drift SDK - Documentation coverage and drift detection for TypeScript
We found that @driftdev/sdk demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
Multiple high-impact npm maintainers confirm they have been targeted in the same social engineering campaign that compromised Axios.

Security News
Axios compromise traced to social engineering, showing how attacks on maintainers can bypass controls and expose the broader software supply chain.

Security News
Node.js has paused its bug bounty program after funding ended, removing payouts for vulnerability reports but keeping its security process unchanged.