> ## Documentation Index
> Fetch the complete documentation index at: https://docs.datafog.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Node.js

> Node.js functions, TypeScript types, JavaScript ranges, and the asynchronous PrivacyManager.

```javascript theme={null}
import {
  DataFogError,
  PrivacyManager,
  scan,
  scanAndTransform,
  transform,
} from "@datafog/node";
```

## Synchronous functions

```typescript theme={null}
scan(text: string, config?: ScanConfig): Finding[]
transform(
  text: string,
  findings: FindingInput[],
  config: TransformationConfig,
): TransformResult
scanAndTransform(text: string, config: ScanAndTransformConfig): TransformResult
```

## Findings and ranges

Node.js uses camelCase fields. Findings include `byteRange`, `codepointRange`,
and `utf16Range`. Use the UTF-16 range with native JavaScript string slicing.

```javascript theme={null}
const finding = scan("👋 jane@example.com")[0];
console.assert(finding.utf16Range.start === 3);
```

Caller-supplied `FindingInput` objects do not require `utf16Range`.

## Asynchronous manager

Use `PrivacyManager` for provider-backed pseudonymization, tokenization, and
restoration:

```typescript theme={null}
new PrivacyManager(
  provider: KeyProvider | PrivacyManagerProviders,
  tokenProvider?: TokenProvider,
)
```

```typescript theme={null}
await manager.transform(text, findings, config, context?)
await manager.scanAndTransform(text, config, context?)
await manager.restore(text, context)
```

## Native distribution targets

The package build is configured for:

* macOS x64 and Apple Silicon;
* Linux x64 and ARM64;
* Windows x64.

## Errors

JavaScript operations throw `DataFogError` with stable `code`, optional
`reason`, optional RFC 6901 `path`, and optional `findingIndex` properties.

## Structured JSON and PERSON fields

Use `discoverFields(data, config?)`, `scanStructured(data, config?)`,
`transformStructured(data, findings, config)`, and
`scanAndTransformStructured(data, config)`. Scan returns `{ mappings, findings }`;
transformation returns `{ data, transformations }`. Located findings contain
`path` and `finding`; located records contain `path` and `transformation`.
`PrivacyManager` adds asynchronous structured transform, scan-and-transform,
and restore methods with the same provider and scope contracts as text calls.

Paths are JSON Pointers. All ranges, including JavaScript UTF-16 ranges,
address the decoded string at that path. See [person-field discovery](/guides/person-discovery)
for aliases, policy configuration, input limits, and examples.
