sapper-ai 0.8.1 → 0.9.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/dist/auth.d.ts +7 -0
- package/dist/auth.d.ts.map +1 -1
- package/dist/auth.js +26 -0
- package/dist/cli.js +2 -1
- package/dist/scan.d.ts.map +1 -1
- package/dist/scan.js +8 -1
- package/package.json +4 -4
package/dist/auth.d.ts
CHANGED
|
@@ -3,6 +3,13 @@ export declare function loadOpenAiApiKey(options?: {
|
|
|
3
3
|
env?: NodeJS.ProcessEnv;
|
|
4
4
|
authPath?: string;
|
|
5
5
|
}): Promise<string | null>;
|
|
6
|
+
export declare function loadOpenAiOrgConfig(options?: {
|
|
7
|
+
env?: NodeJS.ProcessEnv;
|
|
8
|
+
authPath?: string;
|
|
9
|
+
}): Promise<{
|
|
10
|
+
orgId: string | null;
|
|
11
|
+
projectId: string | null;
|
|
12
|
+
}>;
|
|
6
13
|
export declare function maskApiKey(apiKey: string): string;
|
|
7
14
|
export declare function promptAndSaveOpenAiApiKey(options?: {
|
|
8
15
|
authPath?: string;
|
package/dist/auth.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"AAoBA,wBAAgB,WAAW,IAAI,MAAM,CAEpC;AAED,wBAAsB,gBAAgB,CAAC,OAAO,GAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAkB3H;AAED,wBAAsB,mBAAmB,CACvC,OAAO,GAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAO,GAC3D,OAAO,CAAC;IAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC,CA0B7D;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAIjD;AAED,wBAAsB,yBAAyB,CAAC,OAAO,GAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CA2B1H"}
|
package/dist/auth.js
CHANGED
|
@@ -38,6 +38,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
38
38
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
39
|
exports.getAuthPath = getAuthPath;
|
|
40
40
|
exports.loadOpenAiApiKey = loadOpenAiApiKey;
|
|
41
|
+
exports.loadOpenAiOrgConfig = loadOpenAiOrgConfig;
|
|
41
42
|
exports.maskApiKey = maskApiKey;
|
|
42
43
|
exports.promptAndSaveOpenAiApiKey = promptAndSaveOpenAiApiKey;
|
|
43
44
|
const node_os_1 = require("node:os");
|
|
@@ -69,6 +70,31 @@ async function loadOpenAiApiKey(options = {}) {
|
|
|
69
70
|
return null;
|
|
70
71
|
}
|
|
71
72
|
}
|
|
73
|
+
async function loadOpenAiOrgConfig(options = {}) {
|
|
74
|
+
const env = options.env ?? process.env;
|
|
75
|
+
const orgIdFromEnv = env.OPENAI_ORG_ID;
|
|
76
|
+
const projectIdFromEnv = env.OPENAI_PROJECT_ID;
|
|
77
|
+
if (isNonEmptyString(orgIdFromEnv) || isNonEmptyString(projectIdFromEnv)) {
|
|
78
|
+
return {
|
|
79
|
+
orgId: isNonEmptyString(orgIdFromEnv) ? orgIdFromEnv.trim() : null,
|
|
80
|
+
projectId: isNonEmptyString(projectIdFromEnv) ? projectIdFromEnv.trim() : null,
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
const authPath = options.authPath ?? getAuthPath();
|
|
84
|
+
const raw = await (0, fs_1.readFileIfExists)(authPath);
|
|
85
|
+
if (raw === null)
|
|
86
|
+
return { orgId: null, projectId: null };
|
|
87
|
+
try {
|
|
88
|
+
const parsed = JSON.parse(raw);
|
|
89
|
+
return {
|
|
90
|
+
orgId: isNonEmptyString(parsed.openai?.orgId) ? parsed.openai.orgId.trim() : null,
|
|
91
|
+
projectId: isNonEmptyString(parsed.openai?.projectId) ? parsed.openai.projectId.trim() : null,
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
catch {
|
|
95
|
+
return { orgId: null, projectId: null };
|
|
96
|
+
}
|
|
97
|
+
}
|
|
72
98
|
function maskApiKey(apiKey) {
|
|
73
99
|
const trimmed = apiKey.trim();
|
|
74
100
|
if (trimmed.length <= 3)
|
package/dist/cli.js
CHANGED
|
@@ -989,7 +989,8 @@ function isDirectExecution(argv) {
|
|
|
989
989
|
if (!entry) {
|
|
990
990
|
return false;
|
|
991
991
|
}
|
|
992
|
-
|
|
992
|
+
const base = entry.replace(/\\/g, '/').split('/').pop() ?? '';
|
|
993
|
+
return base === 'cli.js' || base === 'cli.ts' || base === 'sapper-ai';
|
|
993
994
|
}
|
|
994
995
|
if (isDirectExecution(process.argv)) {
|
|
995
996
|
runCli().then((exitCode) => {
|
package/dist/scan.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scan.d.ts","sourceRoot":"","sources":["../src/scan.ts"],"names":[],"mappings":"AAyBA,MAAM,WAAW,WAAW;IAC1B,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;IAClB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,GAAG,CAAC,EAAE,OAAO,CAAA;IACb,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,EAAE,CAAC,EAAE,OAAO,CAAA;IACZ,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAiBD,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,KAAK,CAAA;IACd,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;IACd,EAAE,EAAE,OAAO,CAAA;IACX,OAAO,EAAE;QACP,cAAc,EAAE,OAAO,CAAA;KACxB,CAAA;IACD,OAAO,EAAE;QACP,UAAU,EAAE,MAAM,CAAA;QAClB,aAAa,EAAE,MAAM,CAAA;QACrB,YAAY,EAAE,MAAM,CAAA;QACpB,YAAY,EAAE,MAAM,CAAA;QACpB,kBAAkB,EAAE,MAAM,CAAA;QAC1B,wBAAwB,EAAE,MAAM,CAAA;QAChC,OAAO,EAAE,MAAM,CAAA;KAChB,CAAA;IACD,QAAQ,EAAE,KAAK,CAAC;QACd,QAAQ,EAAE,MAAM,CAAA;QAChB,IAAI,EAAE,MAAM,CAAA;QACZ,UAAU,EAAE,MAAM,CAAA;QAClB,MAAM,EAAE,MAAM,CAAA;QACd,QAAQ,EAAE,MAAM,EAAE,CAAA;QAClB,OAAO,EAAE,MAAM,EAAE,CAAA;QACjB,OAAO,EAAE,MAAM,CAAA;QACf,SAAS,EAAE,MAAM,EAAE,CAAA;QACnB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;QACzB,WAAW,EAAE,KAAK,CAAC;YACjB,KAAK,EAAE,MAAM,CAAA;YACb,QAAQ,EAAE,MAAM,GAAG,QAAQ,CAAA;YAC3B,SAAS,EAAE,MAAM,CAAA;YACjB,OAAO,EAAE,MAAM,CAAA;SAChB,CAAC,CAAA;KACH,CAAC,CAAA;CACH;AA8XD,wBAAsB,OAAO,CAAC,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"scan.d.ts","sourceRoot":"","sources":["../src/scan.ts"],"names":[],"mappings":"AAyBA,MAAM,WAAW,WAAW;IAC1B,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;IAClB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,GAAG,CAAC,EAAE,OAAO,CAAA;IACb,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,EAAE,CAAC,EAAE,OAAO,CAAA;IACZ,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAiBD,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,KAAK,CAAA;IACd,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;IACd,EAAE,EAAE,OAAO,CAAA;IACX,OAAO,EAAE;QACP,cAAc,EAAE,OAAO,CAAA;KACxB,CAAA;IACD,OAAO,EAAE;QACP,UAAU,EAAE,MAAM,CAAA;QAClB,aAAa,EAAE,MAAM,CAAA;QACrB,YAAY,EAAE,MAAM,CAAA;QACpB,YAAY,EAAE,MAAM,CAAA;QACpB,kBAAkB,EAAE,MAAM,CAAA;QAC1B,wBAAwB,EAAE,MAAM,CAAA;QAChC,OAAO,EAAE,MAAM,CAAA;KAChB,CAAA;IACD,QAAQ,EAAE,KAAK,CAAC;QACd,QAAQ,EAAE,MAAM,CAAA;QAChB,IAAI,EAAE,MAAM,CAAA;QACZ,UAAU,EAAE,MAAM,CAAA;QAClB,MAAM,EAAE,MAAM,CAAA;QACd,QAAQ,EAAE,MAAM,EAAE,CAAA;QAClB,OAAO,EAAE,MAAM,EAAE,CAAA;QACjB,OAAO,EAAE,MAAM,CAAA;QACf,SAAS,EAAE,MAAM,EAAE,CAAA;QACnB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;QACzB,WAAW,EAAE,KAAK,CAAC;YACjB,KAAK,EAAE,MAAM,CAAA;YACb,QAAQ,EAAE,MAAM,GAAG,QAAQ,CAAA;YAC3B,SAAS,EAAE,MAAM,CAAA;YACjB,OAAO,EAAE,MAAM,CAAA;SAChB,CAAC,CAAA;KACH,CAAC,CAAA;CACH;AA8XD,wBAAsB,OAAO,CAAC,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,MAAM,CAAC,CAuSxE"}
|
package/dist/scan.js
CHANGED
|
@@ -376,7 +376,14 @@ async function runScan(options = {}) {
|
|
|
376
376
|
console.log(`${colors.dim} Key saved to ${displayAuthPath}${colors.reset}`);
|
|
377
377
|
console.log();
|
|
378
378
|
}
|
|
379
|
-
|
|
379
|
+
const { orgId, projectId } = await (0, auth_1.loadOpenAiOrgConfig)();
|
|
380
|
+
llmConfig = {
|
|
381
|
+
provider: 'openai',
|
|
382
|
+
apiKey,
|
|
383
|
+
model: 'gpt-4.1-mini',
|
|
384
|
+
...(orgId ? { orgId } : {}),
|
|
385
|
+
...(projectId ? { projectId } : {}),
|
|
386
|
+
};
|
|
380
387
|
}
|
|
381
388
|
const deep = options.system ? true : options.deep !== false;
|
|
382
389
|
const targets = options.system === true
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "sapper-ai",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.9.0",
|
|
4
4
|
"description": "AI security guardrails - single install, sensible defaults",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"security",
|
|
@@ -45,9 +45,9 @@
|
|
|
45
45
|
"dependencies": {
|
|
46
46
|
"@inquirer/password": "^4.0.0",
|
|
47
47
|
"@inquirer/select": "^4.0.0",
|
|
48
|
-
"@sapper-ai/core": "0.
|
|
49
|
-
"@sapper-ai/
|
|
50
|
-
"@sapper-ai/
|
|
48
|
+
"@sapper-ai/core": "0.4.0",
|
|
49
|
+
"@sapper-ai/mcp": "0.3.3",
|
|
50
|
+
"@sapper-ai/types": "0.4.0"
|
|
51
51
|
},
|
|
52
52
|
"devDependencies": {
|
|
53
53
|
"@types/node": "^20.0.0",
|