@zensre/lenny-napi 0.0.0 → 0.0.1
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/README.md +90 -0
- package/index.d.ts +77 -0
- package/index.js +65 -0
- package/native.js +580 -0
- package/package.json +38 -1
package/README.md
ADDED
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
# @zensre/lenny-napi
|
|
2
|
+
|
|
3
|
+
Native Node.js bindings for the [Lenny](https://github.com/ZenSRE/lenny) secret redaction engine.
|
|
4
|
+
|
|
5
|
+
Scans and redacts known secrets using BLAKE3 + rolling hash (no secret values stored in memory at runtime). Includes 216 built-in pattern rules for detecting unknown secrets (API keys, tokens, connection strings).
|
|
6
|
+
|
|
7
|
+
## Installation
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
npm install @zensre/lenny-napi
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
Requires Node.js 18+. Prebuilt binaries for Linux (x86_64, aarch64) and macOS (x86_64, aarch64).
|
|
14
|
+
|
|
15
|
+
## Usage
|
|
16
|
+
|
|
17
|
+
### Exact-match redaction
|
|
18
|
+
|
|
19
|
+
```js
|
|
20
|
+
const { Engine, PatternScanner } = require('@zensre/lenny-napi');
|
|
21
|
+
|
|
22
|
+
const engine = new Engine();
|
|
23
|
+
engine.loadSecrets([{ name: 'db_pass', value: 'hunter2' }]);
|
|
24
|
+
|
|
25
|
+
const result = engine.scan('password is hunter2');
|
|
26
|
+
console.log(result.output.toString()); // "password is [REDACTED:db_pass]"
|
|
27
|
+
console.log(result.hasRedactions); // true
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
### Pattern scanning
|
|
31
|
+
|
|
32
|
+
```js
|
|
33
|
+
const scanner = new PatternScanner();
|
|
34
|
+
const matches = scanner.scan('GITHUB_TOKEN=ghp_abc123def456ghi789jkl012mno345pqr678');
|
|
35
|
+
console.log(matches[0].ruleId); // "github-pat"
|
|
36
|
+
console.log(matches[0].description); // "GitHub Personal Access Token"
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
### Streaming with Transform
|
|
40
|
+
|
|
41
|
+
```js
|
|
42
|
+
const { ScanTransform } = require('@zensre/lenny-napi');
|
|
43
|
+
|
|
44
|
+
const transform = new ScanTransform();
|
|
45
|
+
transform.engine.loadSecrets([{ name: 'key', value: 'secret123' }]);
|
|
46
|
+
|
|
47
|
+
process.stdin.pipe(transform).pipe(process.stdout);
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
## API
|
|
51
|
+
|
|
52
|
+
### `new Engine(opts?)`
|
|
53
|
+
|
|
54
|
+
Creates a scanning engine. Options: `{ patterns: boolean }` (default: true).
|
|
55
|
+
|
|
56
|
+
### `engine.loadSecrets(secrets)`
|
|
57
|
+
|
|
58
|
+
Load secrets from an array of objects. Required: `name` (string), `value` (string).
|
|
59
|
+
|
|
60
|
+
Optional fields:
|
|
61
|
+
- `tier`: `"log"` (default), `"alert"`, or `"page"`
|
|
62
|
+
- `redaction`: `"tagged"` (default), `"full"`, or `"partial"`
|
|
63
|
+
- `redactionPrefix` / `redactionSuffix`: bytes to show for partial (default: 4)
|
|
64
|
+
- `canary`: boolean (default: false)
|
|
65
|
+
- `transformations`: array of `"base64"` and/or `"url"`
|
|
66
|
+
|
|
67
|
+
### `engine.scan(input) -> ScanResult`
|
|
68
|
+
|
|
69
|
+
Scan input (string or Buffer). Returns:
|
|
70
|
+
- `output` (Buffer) -- redacted output
|
|
71
|
+
- `hasRedactions`, `hasCanaryHit`, `hasExactMatchRedactions` (boolean)
|
|
72
|
+
- `eventCount` (number)
|
|
73
|
+
- `events` (RedactionEvent[]) -- `secretName`, `tier`, `isCanary`, `byteOffset`, `matchedLen`, `contextSnippet`, `source`
|
|
74
|
+
|
|
75
|
+
### `new PatternScanner()`
|
|
76
|
+
|
|
77
|
+
- `scan(input)` -- returns PatternMatchResult[] with `ruleId`, `description`, `tier`, `start`, `end`
|
|
78
|
+
- `ruleCount()` -- returns number of loaded rules
|
|
79
|
+
|
|
80
|
+
## WASM Alternative
|
|
81
|
+
|
|
82
|
+
For universal compatibility (browsers, serverless, any OS), see [`lenny-wasm`](https://www.npmjs.com/package/lenny-wasm).
|
|
83
|
+
|
|
84
|
+
## Full Documentation
|
|
85
|
+
|
|
86
|
+
See the [Lenny project](https://github.com/ZenSRE/lenny) for configuration, deployment, threat model, and the complete list of pattern rules.
|
|
87
|
+
|
|
88
|
+
## License
|
|
89
|
+
|
|
90
|
+
MIT
|
package/index.d.ts
ADDED
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/* auto-generated by NAPI-RS */
|
|
2
|
+
/* eslint-disable */
|
|
3
|
+
export declare class Engine {
|
|
4
|
+
/**
|
|
5
|
+
* Create a new scanning engine.
|
|
6
|
+
*
|
|
7
|
+
* By default, built-in pattern scanning (gitleaks-compatible rules) is
|
|
8
|
+
* enabled so unknown secrets such as AWS keys and GitHub tokens are also
|
|
9
|
+
* detected. Pass `{ patterns: false }` to disable pattern scanning and
|
|
10
|
+
* perform exact-match only.
|
|
11
|
+
*/
|
|
12
|
+
constructor(opts?: EngineOptions | undefined | null)
|
|
13
|
+
/**
|
|
14
|
+
* Load secrets from an array of objects.
|
|
15
|
+
*
|
|
16
|
+
* Each object must have at minimum `name` (string) and `value` (string).
|
|
17
|
+
* Optional fields:
|
|
18
|
+
* - `tier`: `"log"` (default) | `"alert"` | `"page"`
|
|
19
|
+
* - `redaction`: `"full"` | `"tagged"` (default)
|
|
20
|
+
* - `canary`: boolean (default false)
|
|
21
|
+
* - `transformations`: array of `"base64"` | `"url"`
|
|
22
|
+
*/
|
|
23
|
+
loadSecrets(secrets: Array<SecretInput>): void
|
|
24
|
+
maxSecretLength(): number
|
|
25
|
+
/** Scan a buffer or string for secrets. Returns a `ScanResult`. */
|
|
26
|
+
scan(input: string | Buffer): ScanResult
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export declare class PatternScanner {
|
|
30
|
+
constructor()
|
|
31
|
+
scan(input: string | Buffer): Array<PatternMatchResult>
|
|
32
|
+
/** Returns the number of loaded pattern rules. */
|
|
33
|
+
ruleCount(): number
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export interface EngineOptions {
|
|
37
|
+
/** Enable built-in pattern scanning (default: true). */
|
|
38
|
+
patterns?: boolean
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export interface PatternMatchResult {
|
|
42
|
+
ruleId: string
|
|
43
|
+
description: string
|
|
44
|
+
tier: string
|
|
45
|
+
start: number
|
|
46
|
+
end: number
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
export interface RedactionEvent {
|
|
50
|
+
secretName: string
|
|
51
|
+
tier: string
|
|
52
|
+
isCanary: boolean
|
|
53
|
+
byteOffset: number
|
|
54
|
+
matchedLen: number
|
|
55
|
+
contextSnippet: string
|
|
56
|
+
source?: string
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
export interface ScanResult {
|
|
60
|
+
output: Buffer
|
|
61
|
+
hasRedactions: boolean
|
|
62
|
+
hasCanaryHit: boolean
|
|
63
|
+
hasExactMatchRedactions: boolean
|
|
64
|
+
eventCount: number
|
|
65
|
+
events: Array<RedactionEvent>
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
export interface SecretInput {
|
|
69
|
+
name: string
|
|
70
|
+
value: string
|
|
71
|
+
tier?: string
|
|
72
|
+
redaction?: string
|
|
73
|
+
redactionPrefix?: number
|
|
74
|
+
redactionSuffix?: number
|
|
75
|
+
canary?: boolean
|
|
76
|
+
transformations?: Array<string>
|
|
77
|
+
}
|
package/index.js
ADDED
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
// Load the native symbols via the napi-rs generated loader (native.js),
|
|
4
|
+
// which handles platform-specific .node filename resolution.
|
|
5
|
+
// Falls back to loading lenny.node directly for local development.
|
|
6
|
+
let native;
|
|
7
|
+
try {
|
|
8
|
+
native = require('./native.js');
|
|
9
|
+
} catch (_) {
|
|
10
|
+
native = require('./lenny.node');
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
// Re-export all native symbols.
|
|
14
|
+
const { Engine, PatternScanner } = native;
|
|
15
|
+
exports.Engine = Engine;
|
|
16
|
+
exports.PatternScanner = PatternScanner;
|
|
17
|
+
|
|
18
|
+
// ---------------------------------------------------------------------------
|
|
19
|
+
// ScanTransform — Node.js Transform stream wrapper around Engine.scan()
|
|
20
|
+
//
|
|
21
|
+
// Usage:
|
|
22
|
+
// const { Engine, ScanTransform } = require('@zensre/lenny-napi');
|
|
23
|
+
// const engine = new Engine();
|
|
24
|
+
// engine.loadSecrets([{ name: 'db_pass', value: 'hunter2' }]);
|
|
25
|
+
// const transform = new ScanTransform(engine);
|
|
26
|
+
// req.pipe(transform).pipe(res);
|
|
27
|
+
//
|
|
28
|
+
// Note: secrets that span chunk boundaries will not be detected.
|
|
29
|
+
// For complete coverage, buffer the entire input before scanning, or
|
|
30
|
+
// use engine.scan() directly on complete messages.
|
|
31
|
+
// ---------------------------------------------------------------------------
|
|
32
|
+
|
|
33
|
+
const { Transform } = require('stream');
|
|
34
|
+
|
|
35
|
+
class ScanTransform extends Transform {
|
|
36
|
+
constructor(engine, opts) {
|
|
37
|
+
super(opts);
|
|
38
|
+
if (!(engine instanceof Engine)) {
|
|
39
|
+
throw new TypeError('ScanTransform requires an Engine instance');
|
|
40
|
+
}
|
|
41
|
+
this._engine = engine;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
_transform(chunk, encoding, callback) {
|
|
45
|
+
try {
|
|
46
|
+
const result = this._engine.scan(chunk);
|
|
47
|
+
this.push(result.output);
|
|
48
|
+
|
|
49
|
+
if (result.events) {
|
|
50
|
+
for (const event of result.events) {
|
|
51
|
+
this.emit('redaction', event);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
if (result.hasCanaryHit) {
|
|
55
|
+
this.emit('canary', result);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
callback();
|
|
59
|
+
} catch (e) {
|
|
60
|
+
callback(e);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
exports.ScanTransform = ScanTransform;
|
package/native.js
ADDED
|
@@ -0,0 +1,580 @@
|
|
|
1
|
+
// prettier-ignore
|
|
2
|
+
/* eslint-disable */
|
|
3
|
+
// @ts-nocheck
|
|
4
|
+
/* auto-generated by NAPI-RS */
|
|
5
|
+
|
|
6
|
+
const { readFileSync } = require('node:fs')
|
|
7
|
+
let nativeBinding = null
|
|
8
|
+
const loadErrors = []
|
|
9
|
+
|
|
10
|
+
const isMusl = () => {
|
|
11
|
+
let musl = false
|
|
12
|
+
if (process.platform === 'linux') {
|
|
13
|
+
musl = isMuslFromFilesystem()
|
|
14
|
+
if (musl === null) {
|
|
15
|
+
musl = isMuslFromReport()
|
|
16
|
+
}
|
|
17
|
+
if (musl === null) {
|
|
18
|
+
musl = isMuslFromChildProcess()
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
return musl
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
const isFileMusl = (f) => f.includes('libc.musl-') || f.includes('ld-musl-')
|
|
25
|
+
|
|
26
|
+
const isMuslFromFilesystem = () => {
|
|
27
|
+
try {
|
|
28
|
+
return readFileSync('/usr/bin/ldd', 'utf-8').includes('musl')
|
|
29
|
+
} catch {
|
|
30
|
+
return null
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
const isMuslFromReport = () => {
|
|
35
|
+
let report = null
|
|
36
|
+
if (typeof process.report?.getReport === 'function') {
|
|
37
|
+
process.report.excludeNetwork = true
|
|
38
|
+
report = process.report.getReport()
|
|
39
|
+
}
|
|
40
|
+
if (!report) {
|
|
41
|
+
return null
|
|
42
|
+
}
|
|
43
|
+
if (report.header && report.header.glibcVersionRuntime) {
|
|
44
|
+
return false
|
|
45
|
+
}
|
|
46
|
+
if (Array.isArray(report.sharedObjects)) {
|
|
47
|
+
if (report.sharedObjects.some(isFileMusl)) {
|
|
48
|
+
return true
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
return false
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
const isMuslFromChildProcess = () => {
|
|
55
|
+
try {
|
|
56
|
+
return require('child_process').execSync('ldd --version', { encoding: 'utf8' }).includes('musl')
|
|
57
|
+
} catch (e) {
|
|
58
|
+
// If we reach this case, we don't know if the system is musl or not, so is better to just fallback to false
|
|
59
|
+
return false
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
function requireNative() {
|
|
64
|
+
if (process.env.NAPI_RS_NATIVE_LIBRARY_PATH) {
|
|
65
|
+
try {
|
|
66
|
+
return require(process.env.NAPI_RS_NATIVE_LIBRARY_PATH);
|
|
67
|
+
} catch (err) {
|
|
68
|
+
loadErrors.push(err)
|
|
69
|
+
}
|
|
70
|
+
} else if (process.platform === 'android') {
|
|
71
|
+
if (process.arch === 'arm64') {
|
|
72
|
+
try {
|
|
73
|
+
return require('./lenny.android-arm64.node')
|
|
74
|
+
} catch (e) {
|
|
75
|
+
loadErrors.push(e)
|
|
76
|
+
}
|
|
77
|
+
try {
|
|
78
|
+
const binding = require('@zensre/lenny-napi-android-arm64')
|
|
79
|
+
const bindingPackageVersion = require('@zensre/lenny-napi-android-arm64/package.json').version
|
|
80
|
+
if (bindingPackageVersion !== '0.0.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
|
|
81
|
+
throw new Error(`Native binding package version mismatch, expected 0.0.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
|
|
82
|
+
}
|
|
83
|
+
return binding
|
|
84
|
+
} catch (e) {
|
|
85
|
+
loadErrors.push(e)
|
|
86
|
+
}
|
|
87
|
+
} else if (process.arch === 'arm') {
|
|
88
|
+
try {
|
|
89
|
+
return require('./lenny.android-arm-eabi.node')
|
|
90
|
+
} catch (e) {
|
|
91
|
+
loadErrors.push(e)
|
|
92
|
+
}
|
|
93
|
+
try {
|
|
94
|
+
const binding = require('@zensre/lenny-napi-android-arm-eabi')
|
|
95
|
+
const bindingPackageVersion = require('@zensre/lenny-napi-android-arm-eabi/package.json').version
|
|
96
|
+
if (bindingPackageVersion !== '0.0.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
|
|
97
|
+
throw new Error(`Native binding package version mismatch, expected 0.0.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
|
|
98
|
+
}
|
|
99
|
+
return binding
|
|
100
|
+
} catch (e) {
|
|
101
|
+
loadErrors.push(e)
|
|
102
|
+
}
|
|
103
|
+
} else {
|
|
104
|
+
loadErrors.push(new Error(`Unsupported architecture on Android ${process.arch}`))
|
|
105
|
+
}
|
|
106
|
+
} else if (process.platform === 'win32') {
|
|
107
|
+
if (process.arch === 'x64') {
|
|
108
|
+
if (process.config?.variables?.shlib_suffix === 'dll.a' || process.config?.variables?.node_target_type === 'shared_library') {
|
|
109
|
+
try {
|
|
110
|
+
return require('./lenny.win32-x64-gnu.node')
|
|
111
|
+
} catch (e) {
|
|
112
|
+
loadErrors.push(e)
|
|
113
|
+
}
|
|
114
|
+
try {
|
|
115
|
+
const binding = require('@zensre/lenny-napi-win32-x64-gnu')
|
|
116
|
+
const bindingPackageVersion = require('@zensre/lenny-napi-win32-x64-gnu/package.json').version
|
|
117
|
+
if (bindingPackageVersion !== '0.0.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
|
|
118
|
+
throw new Error(`Native binding package version mismatch, expected 0.0.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
|
|
119
|
+
}
|
|
120
|
+
return binding
|
|
121
|
+
} catch (e) {
|
|
122
|
+
loadErrors.push(e)
|
|
123
|
+
}
|
|
124
|
+
} else {
|
|
125
|
+
try {
|
|
126
|
+
return require('./lenny.win32-x64-msvc.node')
|
|
127
|
+
} catch (e) {
|
|
128
|
+
loadErrors.push(e)
|
|
129
|
+
}
|
|
130
|
+
try {
|
|
131
|
+
const binding = require('@zensre/lenny-napi-win32-x64-msvc')
|
|
132
|
+
const bindingPackageVersion = require('@zensre/lenny-napi-win32-x64-msvc/package.json').version
|
|
133
|
+
if (bindingPackageVersion !== '0.0.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
|
|
134
|
+
throw new Error(`Native binding package version mismatch, expected 0.0.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
|
|
135
|
+
}
|
|
136
|
+
return binding
|
|
137
|
+
} catch (e) {
|
|
138
|
+
loadErrors.push(e)
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
} else if (process.arch === 'ia32') {
|
|
142
|
+
try {
|
|
143
|
+
return require('./lenny.win32-ia32-msvc.node')
|
|
144
|
+
} catch (e) {
|
|
145
|
+
loadErrors.push(e)
|
|
146
|
+
}
|
|
147
|
+
try {
|
|
148
|
+
const binding = require('@zensre/lenny-napi-win32-ia32-msvc')
|
|
149
|
+
const bindingPackageVersion = require('@zensre/lenny-napi-win32-ia32-msvc/package.json').version
|
|
150
|
+
if (bindingPackageVersion !== '0.0.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
|
|
151
|
+
throw new Error(`Native binding package version mismatch, expected 0.0.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
|
|
152
|
+
}
|
|
153
|
+
return binding
|
|
154
|
+
} catch (e) {
|
|
155
|
+
loadErrors.push(e)
|
|
156
|
+
}
|
|
157
|
+
} else if (process.arch === 'arm64') {
|
|
158
|
+
try {
|
|
159
|
+
return require('./lenny.win32-arm64-msvc.node')
|
|
160
|
+
} catch (e) {
|
|
161
|
+
loadErrors.push(e)
|
|
162
|
+
}
|
|
163
|
+
try {
|
|
164
|
+
const binding = require('@zensre/lenny-napi-win32-arm64-msvc')
|
|
165
|
+
const bindingPackageVersion = require('@zensre/lenny-napi-win32-arm64-msvc/package.json').version
|
|
166
|
+
if (bindingPackageVersion !== '0.0.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
|
|
167
|
+
throw new Error(`Native binding package version mismatch, expected 0.0.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
|
|
168
|
+
}
|
|
169
|
+
return binding
|
|
170
|
+
} catch (e) {
|
|
171
|
+
loadErrors.push(e)
|
|
172
|
+
}
|
|
173
|
+
} else {
|
|
174
|
+
loadErrors.push(new Error(`Unsupported architecture on Windows: ${process.arch}`))
|
|
175
|
+
}
|
|
176
|
+
} else if (process.platform === 'darwin') {
|
|
177
|
+
try {
|
|
178
|
+
return require('./lenny.darwin-universal.node')
|
|
179
|
+
} catch (e) {
|
|
180
|
+
loadErrors.push(e)
|
|
181
|
+
}
|
|
182
|
+
try {
|
|
183
|
+
const binding = require('@zensre/lenny-napi-darwin-universal')
|
|
184
|
+
const bindingPackageVersion = require('@zensre/lenny-napi-darwin-universal/package.json').version
|
|
185
|
+
if (bindingPackageVersion !== '0.0.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
|
|
186
|
+
throw new Error(`Native binding package version mismatch, expected 0.0.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
|
|
187
|
+
}
|
|
188
|
+
return binding
|
|
189
|
+
} catch (e) {
|
|
190
|
+
loadErrors.push(e)
|
|
191
|
+
}
|
|
192
|
+
if (process.arch === 'x64') {
|
|
193
|
+
try {
|
|
194
|
+
return require('./lenny.darwin-x64.node')
|
|
195
|
+
} catch (e) {
|
|
196
|
+
loadErrors.push(e)
|
|
197
|
+
}
|
|
198
|
+
try {
|
|
199
|
+
const binding = require('@zensre/lenny-napi-darwin-x64')
|
|
200
|
+
const bindingPackageVersion = require('@zensre/lenny-napi-darwin-x64/package.json').version
|
|
201
|
+
if (bindingPackageVersion !== '0.0.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
|
|
202
|
+
throw new Error(`Native binding package version mismatch, expected 0.0.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
|
|
203
|
+
}
|
|
204
|
+
return binding
|
|
205
|
+
} catch (e) {
|
|
206
|
+
loadErrors.push(e)
|
|
207
|
+
}
|
|
208
|
+
} else if (process.arch === 'arm64') {
|
|
209
|
+
try {
|
|
210
|
+
return require('./lenny.darwin-arm64.node')
|
|
211
|
+
} catch (e) {
|
|
212
|
+
loadErrors.push(e)
|
|
213
|
+
}
|
|
214
|
+
try {
|
|
215
|
+
const binding = require('@zensre/lenny-napi-darwin-arm64')
|
|
216
|
+
const bindingPackageVersion = require('@zensre/lenny-napi-darwin-arm64/package.json').version
|
|
217
|
+
if (bindingPackageVersion !== '0.0.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
|
|
218
|
+
throw new Error(`Native binding package version mismatch, expected 0.0.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
|
|
219
|
+
}
|
|
220
|
+
return binding
|
|
221
|
+
} catch (e) {
|
|
222
|
+
loadErrors.push(e)
|
|
223
|
+
}
|
|
224
|
+
} else {
|
|
225
|
+
loadErrors.push(new Error(`Unsupported architecture on macOS: ${process.arch}`))
|
|
226
|
+
}
|
|
227
|
+
} else if (process.platform === 'freebsd') {
|
|
228
|
+
if (process.arch === 'x64') {
|
|
229
|
+
try {
|
|
230
|
+
return require('./lenny.freebsd-x64.node')
|
|
231
|
+
} catch (e) {
|
|
232
|
+
loadErrors.push(e)
|
|
233
|
+
}
|
|
234
|
+
try {
|
|
235
|
+
const binding = require('@zensre/lenny-napi-freebsd-x64')
|
|
236
|
+
const bindingPackageVersion = require('@zensre/lenny-napi-freebsd-x64/package.json').version
|
|
237
|
+
if (bindingPackageVersion !== '0.0.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
|
|
238
|
+
throw new Error(`Native binding package version mismatch, expected 0.0.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
|
|
239
|
+
}
|
|
240
|
+
return binding
|
|
241
|
+
} catch (e) {
|
|
242
|
+
loadErrors.push(e)
|
|
243
|
+
}
|
|
244
|
+
} else if (process.arch === 'arm64') {
|
|
245
|
+
try {
|
|
246
|
+
return require('./lenny.freebsd-arm64.node')
|
|
247
|
+
} catch (e) {
|
|
248
|
+
loadErrors.push(e)
|
|
249
|
+
}
|
|
250
|
+
try {
|
|
251
|
+
const binding = require('@zensre/lenny-napi-freebsd-arm64')
|
|
252
|
+
const bindingPackageVersion = require('@zensre/lenny-napi-freebsd-arm64/package.json').version
|
|
253
|
+
if (bindingPackageVersion !== '0.0.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
|
|
254
|
+
throw new Error(`Native binding package version mismatch, expected 0.0.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
|
|
255
|
+
}
|
|
256
|
+
return binding
|
|
257
|
+
} catch (e) {
|
|
258
|
+
loadErrors.push(e)
|
|
259
|
+
}
|
|
260
|
+
} else {
|
|
261
|
+
loadErrors.push(new Error(`Unsupported architecture on FreeBSD: ${process.arch}`))
|
|
262
|
+
}
|
|
263
|
+
} else if (process.platform === 'linux') {
|
|
264
|
+
if (process.arch === 'x64') {
|
|
265
|
+
if (isMusl()) {
|
|
266
|
+
try {
|
|
267
|
+
return require('./lenny.linux-x64-musl.node')
|
|
268
|
+
} catch (e) {
|
|
269
|
+
loadErrors.push(e)
|
|
270
|
+
}
|
|
271
|
+
try {
|
|
272
|
+
const binding = require('@zensre/lenny-napi-linux-x64-musl')
|
|
273
|
+
const bindingPackageVersion = require('@zensre/lenny-napi-linux-x64-musl/package.json').version
|
|
274
|
+
if (bindingPackageVersion !== '0.0.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
|
|
275
|
+
throw new Error(`Native binding package version mismatch, expected 0.0.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
|
|
276
|
+
}
|
|
277
|
+
return binding
|
|
278
|
+
} catch (e) {
|
|
279
|
+
loadErrors.push(e)
|
|
280
|
+
}
|
|
281
|
+
} else {
|
|
282
|
+
try {
|
|
283
|
+
return require('./lenny.linux-x64-gnu.node')
|
|
284
|
+
} catch (e) {
|
|
285
|
+
loadErrors.push(e)
|
|
286
|
+
}
|
|
287
|
+
try {
|
|
288
|
+
const binding = require('@zensre/lenny-napi-linux-x64-gnu')
|
|
289
|
+
const bindingPackageVersion = require('@zensre/lenny-napi-linux-x64-gnu/package.json').version
|
|
290
|
+
if (bindingPackageVersion !== '0.0.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
|
|
291
|
+
throw new Error(`Native binding package version mismatch, expected 0.0.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
|
|
292
|
+
}
|
|
293
|
+
return binding
|
|
294
|
+
} catch (e) {
|
|
295
|
+
loadErrors.push(e)
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
} else if (process.arch === 'arm64') {
|
|
299
|
+
if (isMusl()) {
|
|
300
|
+
try {
|
|
301
|
+
return require('./lenny.linux-arm64-musl.node')
|
|
302
|
+
} catch (e) {
|
|
303
|
+
loadErrors.push(e)
|
|
304
|
+
}
|
|
305
|
+
try {
|
|
306
|
+
const binding = require('@zensre/lenny-napi-linux-arm64-musl')
|
|
307
|
+
const bindingPackageVersion = require('@zensre/lenny-napi-linux-arm64-musl/package.json').version
|
|
308
|
+
if (bindingPackageVersion !== '0.0.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
|
|
309
|
+
throw new Error(`Native binding package version mismatch, expected 0.0.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
|
|
310
|
+
}
|
|
311
|
+
return binding
|
|
312
|
+
} catch (e) {
|
|
313
|
+
loadErrors.push(e)
|
|
314
|
+
}
|
|
315
|
+
} else {
|
|
316
|
+
try {
|
|
317
|
+
return require('./lenny.linux-arm64-gnu.node')
|
|
318
|
+
} catch (e) {
|
|
319
|
+
loadErrors.push(e)
|
|
320
|
+
}
|
|
321
|
+
try {
|
|
322
|
+
const binding = require('@zensre/lenny-napi-linux-arm64-gnu')
|
|
323
|
+
const bindingPackageVersion = require('@zensre/lenny-napi-linux-arm64-gnu/package.json').version
|
|
324
|
+
if (bindingPackageVersion !== '0.0.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
|
|
325
|
+
throw new Error(`Native binding package version mismatch, expected 0.0.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
|
|
326
|
+
}
|
|
327
|
+
return binding
|
|
328
|
+
} catch (e) {
|
|
329
|
+
loadErrors.push(e)
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
} else if (process.arch === 'arm') {
|
|
333
|
+
if (isMusl()) {
|
|
334
|
+
try {
|
|
335
|
+
return require('./lenny.linux-arm-musleabihf.node')
|
|
336
|
+
} catch (e) {
|
|
337
|
+
loadErrors.push(e)
|
|
338
|
+
}
|
|
339
|
+
try {
|
|
340
|
+
const binding = require('@zensre/lenny-napi-linux-arm-musleabihf')
|
|
341
|
+
const bindingPackageVersion = require('@zensre/lenny-napi-linux-arm-musleabihf/package.json').version
|
|
342
|
+
if (bindingPackageVersion !== '0.0.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
|
|
343
|
+
throw new Error(`Native binding package version mismatch, expected 0.0.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
|
|
344
|
+
}
|
|
345
|
+
return binding
|
|
346
|
+
} catch (e) {
|
|
347
|
+
loadErrors.push(e)
|
|
348
|
+
}
|
|
349
|
+
} else {
|
|
350
|
+
try {
|
|
351
|
+
return require('./lenny.linux-arm-gnueabihf.node')
|
|
352
|
+
} catch (e) {
|
|
353
|
+
loadErrors.push(e)
|
|
354
|
+
}
|
|
355
|
+
try {
|
|
356
|
+
const binding = require('@zensre/lenny-napi-linux-arm-gnueabihf')
|
|
357
|
+
const bindingPackageVersion = require('@zensre/lenny-napi-linux-arm-gnueabihf/package.json').version
|
|
358
|
+
if (bindingPackageVersion !== '0.0.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
|
|
359
|
+
throw new Error(`Native binding package version mismatch, expected 0.0.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
|
|
360
|
+
}
|
|
361
|
+
return binding
|
|
362
|
+
} catch (e) {
|
|
363
|
+
loadErrors.push(e)
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
} else if (process.arch === 'loong64') {
|
|
367
|
+
if (isMusl()) {
|
|
368
|
+
try {
|
|
369
|
+
return require('./lenny.linux-loong64-musl.node')
|
|
370
|
+
} catch (e) {
|
|
371
|
+
loadErrors.push(e)
|
|
372
|
+
}
|
|
373
|
+
try {
|
|
374
|
+
const binding = require('@zensre/lenny-napi-linux-loong64-musl')
|
|
375
|
+
const bindingPackageVersion = require('@zensre/lenny-napi-linux-loong64-musl/package.json').version
|
|
376
|
+
if (bindingPackageVersion !== '0.0.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
|
|
377
|
+
throw new Error(`Native binding package version mismatch, expected 0.0.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
|
|
378
|
+
}
|
|
379
|
+
return binding
|
|
380
|
+
} catch (e) {
|
|
381
|
+
loadErrors.push(e)
|
|
382
|
+
}
|
|
383
|
+
} else {
|
|
384
|
+
try {
|
|
385
|
+
return require('./lenny.linux-loong64-gnu.node')
|
|
386
|
+
} catch (e) {
|
|
387
|
+
loadErrors.push(e)
|
|
388
|
+
}
|
|
389
|
+
try {
|
|
390
|
+
const binding = require('@zensre/lenny-napi-linux-loong64-gnu')
|
|
391
|
+
const bindingPackageVersion = require('@zensre/lenny-napi-linux-loong64-gnu/package.json').version
|
|
392
|
+
if (bindingPackageVersion !== '0.0.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
|
|
393
|
+
throw new Error(`Native binding package version mismatch, expected 0.0.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
|
|
394
|
+
}
|
|
395
|
+
return binding
|
|
396
|
+
} catch (e) {
|
|
397
|
+
loadErrors.push(e)
|
|
398
|
+
}
|
|
399
|
+
}
|
|
400
|
+
} else if (process.arch === 'riscv64') {
|
|
401
|
+
if (isMusl()) {
|
|
402
|
+
try {
|
|
403
|
+
return require('./lenny.linux-riscv64-musl.node')
|
|
404
|
+
} catch (e) {
|
|
405
|
+
loadErrors.push(e)
|
|
406
|
+
}
|
|
407
|
+
try {
|
|
408
|
+
const binding = require('@zensre/lenny-napi-linux-riscv64-musl')
|
|
409
|
+
const bindingPackageVersion = require('@zensre/lenny-napi-linux-riscv64-musl/package.json').version
|
|
410
|
+
if (bindingPackageVersion !== '0.0.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
|
|
411
|
+
throw new Error(`Native binding package version mismatch, expected 0.0.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
|
|
412
|
+
}
|
|
413
|
+
return binding
|
|
414
|
+
} catch (e) {
|
|
415
|
+
loadErrors.push(e)
|
|
416
|
+
}
|
|
417
|
+
} else {
|
|
418
|
+
try {
|
|
419
|
+
return require('./lenny.linux-riscv64-gnu.node')
|
|
420
|
+
} catch (e) {
|
|
421
|
+
loadErrors.push(e)
|
|
422
|
+
}
|
|
423
|
+
try {
|
|
424
|
+
const binding = require('@zensre/lenny-napi-linux-riscv64-gnu')
|
|
425
|
+
const bindingPackageVersion = require('@zensre/lenny-napi-linux-riscv64-gnu/package.json').version
|
|
426
|
+
if (bindingPackageVersion !== '0.0.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
|
|
427
|
+
throw new Error(`Native binding package version mismatch, expected 0.0.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
|
|
428
|
+
}
|
|
429
|
+
return binding
|
|
430
|
+
} catch (e) {
|
|
431
|
+
loadErrors.push(e)
|
|
432
|
+
}
|
|
433
|
+
}
|
|
434
|
+
} else if (process.arch === 'ppc64') {
|
|
435
|
+
try {
|
|
436
|
+
return require('./lenny.linux-ppc64-gnu.node')
|
|
437
|
+
} catch (e) {
|
|
438
|
+
loadErrors.push(e)
|
|
439
|
+
}
|
|
440
|
+
try {
|
|
441
|
+
const binding = require('@zensre/lenny-napi-linux-ppc64-gnu')
|
|
442
|
+
const bindingPackageVersion = require('@zensre/lenny-napi-linux-ppc64-gnu/package.json').version
|
|
443
|
+
if (bindingPackageVersion !== '0.0.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
|
|
444
|
+
throw new Error(`Native binding package version mismatch, expected 0.0.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
|
|
445
|
+
}
|
|
446
|
+
return binding
|
|
447
|
+
} catch (e) {
|
|
448
|
+
loadErrors.push(e)
|
|
449
|
+
}
|
|
450
|
+
} else if (process.arch === 's390x') {
|
|
451
|
+
try {
|
|
452
|
+
return require('./lenny.linux-s390x-gnu.node')
|
|
453
|
+
} catch (e) {
|
|
454
|
+
loadErrors.push(e)
|
|
455
|
+
}
|
|
456
|
+
try {
|
|
457
|
+
const binding = require('@zensre/lenny-napi-linux-s390x-gnu')
|
|
458
|
+
const bindingPackageVersion = require('@zensre/lenny-napi-linux-s390x-gnu/package.json').version
|
|
459
|
+
if (bindingPackageVersion !== '0.0.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
|
|
460
|
+
throw new Error(`Native binding package version mismatch, expected 0.0.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
|
|
461
|
+
}
|
|
462
|
+
return binding
|
|
463
|
+
} catch (e) {
|
|
464
|
+
loadErrors.push(e)
|
|
465
|
+
}
|
|
466
|
+
} else {
|
|
467
|
+
loadErrors.push(new Error(`Unsupported architecture on Linux: ${process.arch}`))
|
|
468
|
+
}
|
|
469
|
+
} else if (process.platform === 'openharmony') {
|
|
470
|
+
if (process.arch === 'arm64') {
|
|
471
|
+
try {
|
|
472
|
+
return require('./lenny.openharmony-arm64.node')
|
|
473
|
+
} catch (e) {
|
|
474
|
+
loadErrors.push(e)
|
|
475
|
+
}
|
|
476
|
+
try {
|
|
477
|
+
const binding = require('@zensre/lenny-napi-openharmony-arm64')
|
|
478
|
+
const bindingPackageVersion = require('@zensre/lenny-napi-openharmony-arm64/package.json').version
|
|
479
|
+
if (bindingPackageVersion !== '0.0.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
|
|
480
|
+
throw new Error(`Native binding package version mismatch, expected 0.0.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
|
|
481
|
+
}
|
|
482
|
+
return binding
|
|
483
|
+
} catch (e) {
|
|
484
|
+
loadErrors.push(e)
|
|
485
|
+
}
|
|
486
|
+
} else if (process.arch === 'x64') {
|
|
487
|
+
try {
|
|
488
|
+
return require('./lenny.openharmony-x64.node')
|
|
489
|
+
} catch (e) {
|
|
490
|
+
loadErrors.push(e)
|
|
491
|
+
}
|
|
492
|
+
try {
|
|
493
|
+
const binding = require('@zensre/lenny-napi-openharmony-x64')
|
|
494
|
+
const bindingPackageVersion = require('@zensre/lenny-napi-openharmony-x64/package.json').version
|
|
495
|
+
if (bindingPackageVersion !== '0.0.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
|
|
496
|
+
throw new Error(`Native binding package version mismatch, expected 0.0.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
|
|
497
|
+
}
|
|
498
|
+
return binding
|
|
499
|
+
} catch (e) {
|
|
500
|
+
loadErrors.push(e)
|
|
501
|
+
}
|
|
502
|
+
} else if (process.arch === 'arm') {
|
|
503
|
+
try {
|
|
504
|
+
return require('./lenny.openharmony-arm.node')
|
|
505
|
+
} catch (e) {
|
|
506
|
+
loadErrors.push(e)
|
|
507
|
+
}
|
|
508
|
+
try {
|
|
509
|
+
const binding = require('@zensre/lenny-napi-openharmony-arm')
|
|
510
|
+
const bindingPackageVersion = require('@zensre/lenny-napi-openharmony-arm/package.json').version
|
|
511
|
+
if (bindingPackageVersion !== '0.0.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
|
|
512
|
+
throw new Error(`Native binding package version mismatch, expected 0.0.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
|
|
513
|
+
}
|
|
514
|
+
return binding
|
|
515
|
+
} catch (e) {
|
|
516
|
+
loadErrors.push(e)
|
|
517
|
+
}
|
|
518
|
+
} else {
|
|
519
|
+
loadErrors.push(new Error(`Unsupported architecture on OpenHarmony: ${process.arch}`))
|
|
520
|
+
}
|
|
521
|
+
} else {
|
|
522
|
+
loadErrors.push(new Error(`Unsupported OS: ${process.platform}, architecture: ${process.arch}`))
|
|
523
|
+
}
|
|
524
|
+
}
|
|
525
|
+
|
|
526
|
+
nativeBinding = requireNative()
|
|
527
|
+
|
|
528
|
+
if (!nativeBinding || process.env.NAPI_RS_FORCE_WASI) {
|
|
529
|
+
let wasiBinding = null
|
|
530
|
+
let wasiBindingError = null
|
|
531
|
+
try {
|
|
532
|
+
wasiBinding = require('./lenny.wasi.cjs')
|
|
533
|
+
nativeBinding = wasiBinding
|
|
534
|
+
} catch (err) {
|
|
535
|
+
if (process.env.NAPI_RS_FORCE_WASI) {
|
|
536
|
+
wasiBindingError = err
|
|
537
|
+
}
|
|
538
|
+
}
|
|
539
|
+
if (!nativeBinding || process.env.NAPI_RS_FORCE_WASI) {
|
|
540
|
+
try {
|
|
541
|
+
wasiBinding = require('@zensre/lenny-napi-wasm32-wasi')
|
|
542
|
+
nativeBinding = wasiBinding
|
|
543
|
+
} catch (err) {
|
|
544
|
+
if (process.env.NAPI_RS_FORCE_WASI) {
|
|
545
|
+
if (!wasiBindingError) {
|
|
546
|
+
wasiBindingError = err
|
|
547
|
+
} else {
|
|
548
|
+
wasiBindingError.cause = err
|
|
549
|
+
}
|
|
550
|
+
loadErrors.push(err)
|
|
551
|
+
}
|
|
552
|
+
}
|
|
553
|
+
}
|
|
554
|
+
if (process.env.NAPI_RS_FORCE_WASI === 'error' && !wasiBinding) {
|
|
555
|
+
const error = new Error('WASI binding not found and NAPI_RS_FORCE_WASI is set to error')
|
|
556
|
+
error.cause = wasiBindingError
|
|
557
|
+
throw error
|
|
558
|
+
}
|
|
559
|
+
}
|
|
560
|
+
|
|
561
|
+
if (!nativeBinding) {
|
|
562
|
+
if (loadErrors.length > 0) {
|
|
563
|
+
throw new Error(
|
|
564
|
+
`Cannot find native binding. ` +
|
|
565
|
+
`npm has a bug related to optional dependencies (https://github.com/npm/cli/issues/4828). ` +
|
|
566
|
+
'Please try `npm i` again after removing both package-lock.json and node_modules directory.',
|
|
567
|
+
{
|
|
568
|
+
cause: loadErrors.reduce((err, cur) => {
|
|
569
|
+
cur.cause = err
|
|
570
|
+
return cur
|
|
571
|
+
}),
|
|
572
|
+
},
|
|
573
|
+
)
|
|
574
|
+
}
|
|
575
|
+
throw new Error(`Failed to load native binding`)
|
|
576
|
+
}
|
|
577
|
+
|
|
578
|
+
module.exports = nativeBinding
|
|
579
|
+
module.exports.Engine = nativeBinding.Engine
|
|
580
|
+
module.exports.PatternScanner = nativeBinding.PatternScanner
|
package/package.json
CHANGED
|
@@ -1 +1,38 @@
|
|
|
1
|
-
{
|
|
1
|
+
{
|
|
2
|
+
"name": "@zensre/lenny-napi",
|
|
3
|
+
"version": "0.0.1",
|
|
4
|
+
"description": "Native Node.js bindings for Lenny secret redaction engine",
|
|
5
|
+
"main": "index.js",
|
|
6
|
+
"types": "index.d.ts",
|
|
7
|
+
"napi": {
|
|
8
|
+
"name": "lenny",
|
|
9
|
+
"triples": {
|
|
10
|
+
"defaults": false,
|
|
11
|
+
"additional": [
|
|
12
|
+
"x86_64-unknown-linux-gnu",
|
|
13
|
+
"x86_64-unknown-linux-musl",
|
|
14
|
+
"aarch64-unknown-linux-gnu",
|
|
15
|
+
"aarch64-unknown-linux-musl",
|
|
16
|
+
"x86_64-apple-darwin",
|
|
17
|
+
"aarch64-apple-darwin"
|
|
18
|
+
]
|
|
19
|
+
}
|
|
20
|
+
},
|
|
21
|
+
"license": "(MIT OR Apache-2.0)",
|
|
22
|
+
"repository": {
|
|
23
|
+
"type": "git",
|
|
24
|
+
"url": "https://github.com/ZenSRE/lenny"
|
|
25
|
+
},
|
|
26
|
+
"files": [
|
|
27
|
+
"index.js",
|
|
28
|
+
"index.d.ts",
|
|
29
|
+
"native.js"
|
|
30
|
+
],
|
|
31
|
+
"scripts": {
|
|
32
|
+
"build": "napi build --platform --release",
|
|
33
|
+
"prepublishOnly": "napi prepublish -t npm"
|
|
34
|
+
},
|
|
35
|
+
"devDependencies": {
|
|
36
|
+
"@napi-rs/cli": "^3.0.0"
|
|
37
|
+
}
|
|
38
|
+
}
|