@adea-ai/plugins 3.0.4 → 3.0.5
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/dist/staged-file.d.ts +2 -0
- package/dist/staged-file.js +43 -0
- package/dist/staged-file.js.map +1 -0
- package/native/build-provenance.txt +6 -0
- package/native/staged-reader-win32-arm64.node +0 -0
- package/native/staged-reader-win32-x64.node +0 -0
- package/package.json +3 -1
- package/src/staged-file.ts +43 -0
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { constants } from 'node:fs';
|
|
2
|
+
import { open } from 'node:fs/promises';
|
|
3
|
+
import { join } from 'node:path';
|
|
4
|
+
import { createRequire } from 'node:module';
|
|
5
|
+
/** Read an already validated flat name without following a final-component symlink. */
|
|
6
|
+
export async function readStagedFile(directory, name) {
|
|
7
|
+
if (process.platform === 'win32') {
|
|
8
|
+
// The binary is built and qualified separately for each supported Windows architecture.
|
|
9
|
+
// Failure to load it is fatal: falling back to a path check would introduce a race.
|
|
10
|
+
let reader;
|
|
11
|
+
try {
|
|
12
|
+
if (process.arch !== 'x64' && process.arch !== 'arm64')
|
|
13
|
+
throw new Error('unsupported architecture');
|
|
14
|
+
reader = createRequire(import.meta.url)(`../native/staged-reader-win32-${process.arch}.node`);
|
|
15
|
+
if (typeof reader.read !== 'function')
|
|
16
|
+
throw new Error('invalid native reader');
|
|
17
|
+
}
|
|
18
|
+
catch (cause) {
|
|
19
|
+
throw new Error('STAGED_NOFOLLOW_UNSUPPORTED', { cause });
|
|
20
|
+
}
|
|
21
|
+
return reader.read(join(directory, name));
|
|
22
|
+
}
|
|
23
|
+
if (typeof constants.O_NOFOLLOW !== 'number' || constants.O_NOFOLLOW === 0)
|
|
24
|
+
throw new Error('STAGED_NOFOLLOW_UNSUPPORTED');
|
|
25
|
+
let file;
|
|
26
|
+
try {
|
|
27
|
+
file = await open(join(directory, name), constants.O_RDONLY | constants.O_NOFOLLOW | constants.O_NONBLOCK);
|
|
28
|
+
}
|
|
29
|
+
catch (error) {
|
|
30
|
+
if (error.code === 'ELOOP')
|
|
31
|
+
throw new Error(`STAGED_FILE_UNSAFE: ${name}`, { cause: error });
|
|
32
|
+
throw error;
|
|
33
|
+
}
|
|
34
|
+
try {
|
|
35
|
+
if (!(await file.stat()).isFile())
|
|
36
|
+
throw new Error(`STAGED_FILE_UNSAFE: ${name}`);
|
|
37
|
+
return await file.readFile();
|
|
38
|
+
}
|
|
39
|
+
finally {
|
|
40
|
+
await file.close();
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=staged-file.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"staged-file.js","sourceRoot":"","sources":["../src/staged-file.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AACnC,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAA;AACvC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAE3C,uFAAuF;AACvF,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,SAAiB,EAAE,IAAY;IAClE,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QACjC,wFAAwF;QACxF,oFAAoF;QACpF,IAAI,MAA+C,CAAA;QACnD,IAAI,CAAC;YACH,IAAI,OAAO,CAAC,IAAI,KAAK,KAAK,IAAI,OAAO,CAAC,IAAI,KAAK,OAAO;gBACpD,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAA;YAC7C,MAAM,GAAG,aAAa,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,CACrC,iCAAiC,OAAO,CAAC,IAAI,OAAO,CACpC,CAAA;YAClB,IAAI,OAAO,MAAM,CAAC,IAAI,KAAK,UAAU;gBAAE,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAA;QACjF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,6BAA6B,EAAE,EAAE,KAAK,EAAE,CAAC,CAAA;QAC3D,CAAC;QACD,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAA;IAC3C,CAAC;IACD,IAAI,OAAO,SAAS,CAAC,UAAU,KAAK,QAAQ,IAAI,SAAS,CAAC,UAAU,KAAK,CAAC;QACxE,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAA;IAChD,IAAI,IAAI,CAAA;IACR,IAAI,CAAC;QACH,IAAI,GAAG,MAAM,IAAI,CACf,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,EACrB,SAAS,CAAC,QAAQ,GAAG,SAAS,CAAC,UAAU,GAAG,SAAS,CAAC,UAAU,CACjE,CAAA;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAK,KAA+B,CAAC,IAAI,KAAK,OAAO;YACnD,MAAM,IAAI,KAAK,CAAC,uBAAuB,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAA;QAClE,MAAM,KAAK,CAAA;IACb,CAAC;IACD,IAAI,CAAC;QACH,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,uBAAuB,IAAI,EAAE,CAAC,CAAA;QACjF,OAAO,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAA;IAC9B,CAAC;YAAS,CAAC;QACT,MAAM,IAAI,CAAC,KAAK,EAAE,CAAA;IACpB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
source_commit a07c59531cff4fff1b33a24fbdadc04b518d07b1
|
|
2
|
+
12125c7ab1a1e2d7cbe538343e2a11ef4d7fb0fa0310c5251d8606bf20f26834 packages/plugins/native/staged-reader.c
|
|
3
|
+
b30da86114de32626299f459d5bbbcaee66c59e797ddc7f53ede7ddc4f780706 packages/plugins/native/staged-reader-test-win32-arm64.node
|
|
4
|
+
26cbe37e84fa1159f95dd72f2d9aae7b0fa71ad087bc31375fa3a47fe33d5d0f packages/plugins/native/staged-reader-test-win32-x64.node
|
|
5
|
+
1ffe35095afa9ca50501397eecfee1245c4c350cb59de233b8153285737445e7 packages/plugins/native/staged-reader-win32-arm64.node
|
|
6
|
+
6c2bf64413436ba11e5696d88bf4baf07d5233a58bd85206a57e9df9bd32db79 packages/plugins/native/staged-reader-win32-x64.node
|
|
Binary file
|
|
Binary file
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@adea-ai/plugins",
|
|
3
|
-
"version": "3.0.
|
|
3
|
+
"version": "3.0.5",
|
|
4
4
|
"description": "Deterministic compiler for AI agent plugin marketplaces: schemas, source parsing, provenance verification, per-harness materialization, and provenance-checked static artifacts.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"agents",
|
|
@@ -26,6 +26,8 @@
|
|
|
26
26
|
"files": [
|
|
27
27
|
"dist",
|
|
28
28
|
"src",
|
|
29
|
+
"native/staged-reader-win32-*.node",
|
|
30
|
+
"native/build-provenance.txt",
|
|
29
31
|
"schemas",
|
|
30
32
|
"README.md"
|
|
31
33
|
],
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { constants } from 'node:fs'
|
|
2
|
+
import { open } from 'node:fs/promises'
|
|
3
|
+
import { join } from 'node:path'
|
|
4
|
+
import { createRequire } from 'node:module'
|
|
5
|
+
|
|
6
|
+
/** Read an already validated flat name without following a final-component symlink. */
|
|
7
|
+
export async function readStagedFile(directory: string, name: string): Promise<Buffer> {
|
|
8
|
+
if (process.platform === 'win32') {
|
|
9
|
+
// The binary is built and qualified separately for each supported Windows architecture.
|
|
10
|
+
// Failure to load it is fatal: falling back to a path check would introduce a race.
|
|
11
|
+
let reader: { read(path: string): Promise<Buffer> }
|
|
12
|
+
try {
|
|
13
|
+
if (process.arch !== 'x64' && process.arch !== 'arm64')
|
|
14
|
+
throw new Error('unsupported architecture')
|
|
15
|
+
reader = createRequire(import.meta.url)(
|
|
16
|
+
`../native/staged-reader-win32-${process.arch}.node`
|
|
17
|
+
) as typeof reader
|
|
18
|
+
if (typeof reader.read !== 'function') throw new Error('invalid native reader')
|
|
19
|
+
} catch (cause) {
|
|
20
|
+
throw new Error('STAGED_NOFOLLOW_UNSUPPORTED', { cause })
|
|
21
|
+
}
|
|
22
|
+
return reader.read(join(directory, name))
|
|
23
|
+
}
|
|
24
|
+
if (typeof constants.O_NOFOLLOW !== 'number' || constants.O_NOFOLLOW === 0)
|
|
25
|
+
throw new Error('STAGED_NOFOLLOW_UNSUPPORTED')
|
|
26
|
+
let file
|
|
27
|
+
try {
|
|
28
|
+
file = await open(
|
|
29
|
+
join(directory, name),
|
|
30
|
+
constants.O_RDONLY | constants.O_NOFOLLOW | constants.O_NONBLOCK
|
|
31
|
+
)
|
|
32
|
+
} catch (error) {
|
|
33
|
+
if ((error as NodeJS.ErrnoException).code === 'ELOOP')
|
|
34
|
+
throw new Error(`STAGED_FILE_UNSAFE: ${name}`, { cause: error })
|
|
35
|
+
throw error
|
|
36
|
+
}
|
|
37
|
+
try {
|
|
38
|
+
if (!(await file.stat()).isFile()) throw new Error(`STAGED_FILE_UNSAFE: ${name}`)
|
|
39
|
+
return await file.readFile()
|
|
40
|
+
} finally {
|
|
41
|
+
await file.close()
|
|
42
|
+
}
|
|
43
|
+
}
|