@once-agent/sdk 0.1.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/LICENSE +21 -0
- package/README.md +43 -0
- package/dist/apply.d.ts +9 -0
- package/dist/apply.d.ts.map +1 -0
- package/dist/apply.js +265 -0
- package/dist/apply.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +191 -0
- package/dist/cli.js.map +1 -0
- package/dist/index.d.ts +76 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +240 -0
- package/dist/index.js.map +1 -0
- package/dist/protect.d.ts +8 -0
- package/dist/protect.d.ts.map +1 -0
- package/dist/protect.js +563 -0
- package/dist/protect.js.map +1 -0
- package/dist/scan.d.ts +18 -0
- package/dist/scan.d.ts.map +1 -0
- package/dist/scan.js +632 -0
- package/dist/scan.js.map +1 -0
- package/dist/setup.d.ts +8 -0
- package/dist/setup.d.ts.map +1 -0
- package/dist/setup.js +558 -0
- package/dist/setup.js.map +1 -0
- package/dist/transformers/http-patch-plan-v1.d.ts +23 -0
- package/dist/transformers/http-patch-plan-v1.d.ts.map +1 -0
- package/dist/transformers/http-patch-plan-v1.js +149 -0
- package/dist/transformers/http-patch-plan-v1.js.map +1 -0
- package/dist/transformers/http-write-v1.d.ts +23 -0
- package/dist/transformers/http-write-v1.d.ts.map +1 -0
- package/dist/transformers/http-write-v1.js +134 -0
- package/dist/transformers/http-write-v1.js.map +1 -0
- package/dist/transformers/once-binding-v1.d.ts +17 -0
- package/dist/transformers/once-binding-v1.d.ts.map +1 -0
- package/dist/transformers/once-binding-v1.js +134 -0
- package/dist/transformers/once-binding-v1.js.map +1 -0
- package/package.json +56 -0
package/dist/scan.js
ADDED
|
@@ -0,0 +1,632 @@
|
|
|
1
|
+
import { promises as fs } from "node:fs";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import readline from "node:readline/promises";
|
|
4
|
+
import { stdin as input, stdout as output } from "node:process";
|
|
5
|
+
const ignoredDirectories = new Set([
|
|
6
|
+
".git",
|
|
7
|
+
".hg",
|
|
8
|
+
".svn",
|
|
9
|
+
"node_modules",
|
|
10
|
+
"dist",
|
|
11
|
+
"build",
|
|
12
|
+
"coverage",
|
|
13
|
+
".next",
|
|
14
|
+
".nuxt",
|
|
15
|
+
".venv",
|
|
16
|
+
"venv",
|
|
17
|
+
"__pycache__",
|
|
18
|
+
".pytest_cache",
|
|
19
|
+
".mypy_cache",
|
|
20
|
+
".idea",
|
|
21
|
+
".vscode"
|
|
22
|
+
]);
|
|
23
|
+
const sourceExtensions = new Set([
|
|
24
|
+
".ts",
|
|
25
|
+
".tsx",
|
|
26
|
+
".js",
|
|
27
|
+
".jsx",
|
|
28
|
+
".mjs",
|
|
29
|
+
".cjs",
|
|
30
|
+
".py"
|
|
31
|
+
]);
|
|
32
|
+
const sensitiveNames = new Set([
|
|
33
|
+
".env",
|
|
34
|
+
".env.local",
|
|
35
|
+
".env.production",
|
|
36
|
+
".env.development",
|
|
37
|
+
"id_rsa",
|
|
38
|
+
"id_ed25519"
|
|
39
|
+
]);
|
|
40
|
+
const sensitiveExtensions = new Set([
|
|
41
|
+
".pem",
|
|
42
|
+
".key",
|
|
43
|
+
".p12",
|
|
44
|
+
".pfx",
|
|
45
|
+
".crt",
|
|
46
|
+
".cer"
|
|
47
|
+
]);
|
|
48
|
+
const rules = [
|
|
49
|
+
{
|
|
50
|
+
confidence: "HIGH",
|
|
51
|
+
category: "PAYMENT",
|
|
52
|
+
reason: "Payment or money-movement operation detected.",
|
|
53
|
+
pattern: /\b(paymentIntents|charges|refunds|transfers|payouts)\.(create|update|cancel)\b|\b(charge|refund|capturePayment|createInvoice|sendPayment|createPayout)\w*\s*\(/i
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
confidence: "HIGH",
|
|
57
|
+
category: "MESSAGING",
|
|
58
|
+
reason: "External message/email/SMS send operation detected.",
|
|
59
|
+
pattern: /\b(sendEmail|sendMail|sendMessage|sendSms|sendSMS|postMessage)\w*\s*\(|chat\.postMessage/i
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
confidence: "HIGH",
|
|
63
|
+
category: "BOOKING",
|
|
64
|
+
reason: "Booking, reservation, appointment or order mutation detected.",
|
|
65
|
+
pattern: /\b(create|confirm|cancel|update)(Booking|Reservation|Appointment|Order)\w*\s*\(/i
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
confidence: "HIGH",
|
|
69
|
+
category: "HTTP_DELETE",
|
|
70
|
+
reason: "Outbound HTTP DELETE operation detected.",
|
|
71
|
+
pattern: /method\s*:\s*["']DELETE["']|(?:axios|requests)\.delete\s*\(/i
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
confidence: "MEDIUM",
|
|
75
|
+
category: "HTTP_WRITE",
|
|
76
|
+
reason: "Outbound HTTP POST/PUT/PATCH operation detected.",
|
|
77
|
+
pattern: /method\s*:\s*["'](?:POST|PUT|PATCH)["']|(?:axios|requests)\.(?:post|put|patch)\s*\(/i
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
confidence: "HIGH",
|
|
81
|
+
category: "DATABASE",
|
|
82
|
+
reason: "Database mutation operation detected.",
|
|
83
|
+
pattern: /\bprisma\.[A-Za-z0-9_]+\.(create|update|delete|upsert)\s*\(|\b(?:exec|query|execute)\s*\(\s*["'`][\s\S]{0,300}\b(?:INSERT\s+INTO|DELETE\s+FROM|UPDATE\s+[A-Za-z0-9_"`.]+\s+SET)\b/i
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
confidence: "MEDIUM",
|
|
87
|
+
category: "DATABASE",
|
|
88
|
+
reason: "Database insert/update/delete/upsert call detected.",
|
|
89
|
+
pattern: /\.(insert|upsert|update|delete)\s*\(/i
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
confidence: "MEDIUM",
|
|
93
|
+
category: "QUEUE",
|
|
94
|
+
reason: "Queue, topic or event publication operation detected.",
|
|
95
|
+
pattern: /\b(queue|topic|sqs|sns|pubsub|kafka|producer)[A-Za-z0-9_.$]*.*\.(send|publish|produce|enqueue)\s*\(/i
|
|
96
|
+
},
|
|
97
|
+
{
|
|
98
|
+
confidence: "MEDIUM",
|
|
99
|
+
category: "STORAGE",
|
|
100
|
+
reason: "External object-storage write/delete operation detected.",
|
|
101
|
+
pattern: /\b(putObject|deleteObject|uploadFile|uploadObject)\w*\s*\(/i
|
|
102
|
+
},
|
|
103
|
+
{
|
|
104
|
+
confidence: "LOW",
|
|
105
|
+
category: "FILE_WRITE",
|
|
106
|
+
reason: "Local filesystem mutation detected.",
|
|
107
|
+
pattern: /\b(writeFile|appendFile|unlink|rename|rm)\s*\(/i
|
|
108
|
+
},
|
|
109
|
+
{
|
|
110
|
+
confidence: "MEDIUM",
|
|
111
|
+
category: "ACCOUNT",
|
|
112
|
+
reason: "Account/user mutation operation detected.",
|
|
113
|
+
pattern: /\b(createUser|deleteUser|disableUser|enableUser|updateUser|inviteUser)\w*\s*\(/i
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
confidence: "MEDIUM",
|
|
117
|
+
category: "PUBLISH",
|
|
118
|
+
reason: "Publish/deploy/external creation operation detected.",
|
|
119
|
+
pattern: /\b(publishPost|publishArticle|createIssue|createTicket|deployService|createResource)\w*\s*\(|\boctokit\.issues\.create\s*\(/i
|
|
120
|
+
}
|
|
121
|
+
];
|
|
122
|
+
function shouldSkipFile(filePath) {
|
|
123
|
+
const base = path.basename(filePath).toLowerCase();
|
|
124
|
+
const ext = path.extname(filePath).toLowerCase();
|
|
125
|
+
return (sensitiveNames.has(base) ||
|
|
126
|
+
sensitiveExtensions.has(ext));
|
|
127
|
+
}
|
|
128
|
+
function detectFunctionName(lines, lineIndex) {
|
|
129
|
+
const start = Math.max(0, lineIndex - 14);
|
|
130
|
+
for (let i = lineIndex; i >= start; i--) {
|
|
131
|
+
const line = lines[i] ?? "";
|
|
132
|
+
const matches = [
|
|
133
|
+
line.match(/\bfunction\s+([A-Za-z_$][A-Za-z0-9_$]*)\s*\(/),
|
|
134
|
+
line.match(/\b(?:const|let|var)\s+([A-Za-z_$][A-Za-z0-9_$]*)\s*=\s*(?:async\s*)?\(/),
|
|
135
|
+
line.match(/\b(?:async\s+)?([A-Za-z_$][A-Za-z0-9_$]*)\s*\([^)]*\)\s*\{/),
|
|
136
|
+
line.match(/^\s*def\s+([A-Za-z_][A-Za-z0-9_]*)\s*\(/)
|
|
137
|
+
];
|
|
138
|
+
const reservedWords = new Set([
|
|
139
|
+
"if",
|
|
140
|
+
"for",
|
|
141
|
+
"while",
|
|
142
|
+
"switch",
|
|
143
|
+
"catch",
|
|
144
|
+
"with"
|
|
145
|
+
]);
|
|
146
|
+
for (const match of matches) {
|
|
147
|
+
if (match?.[1] &&
|
|
148
|
+
!reservedWords.has(match[1].toLowerCase())) {
|
|
149
|
+
return match[1];
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
return undefined;
|
|
154
|
+
}
|
|
155
|
+
export async function detectProjectMetadata(root) {
|
|
156
|
+
const languages = new Set();
|
|
157
|
+
const tooling = new Set();
|
|
158
|
+
try {
|
|
159
|
+
const packagePath = path.join(root, "package.json");
|
|
160
|
+
const raw = await fs.readFile(packagePath, "utf8");
|
|
161
|
+
const pkg = JSON.parse(raw.replace(/^\uFEFF/, ""));
|
|
162
|
+
languages.add("JavaScript / TypeScript");
|
|
163
|
+
const dependencies = {
|
|
164
|
+
...(pkg.dependencies ?? {}),
|
|
165
|
+
...(pkg.devDependencies ?? {})
|
|
166
|
+
};
|
|
167
|
+
const dependencyNames = Object.keys(dependencies);
|
|
168
|
+
const knownTooling = [
|
|
169
|
+
["openai", "OpenAI"],
|
|
170
|
+
[
|
|
171
|
+
"@anthropic-ai/sdk",
|
|
172
|
+
"Anthropic"
|
|
173
|
+
],
|
|
174
|
+
[
|
|
175
|
+
"@openai/agents",
|
|
176
|
+
"OpenAI Agents SDK"
|
|
177
|
+
],
|
|
178
|
+
[
|
|
179
|
+
"@modelcontextprotocol/sdk",
|
|
180
|
+
"MCP"
|
|
181
|
+
],
|
|
182
|
+
["langchain", "LangChain"],
|
|
183
|
+
["@langchain/core", "LangChain"],
|
|
184
|
+
["ai", "Vercel AI SDK"],
|
|
185
|
+
["express", "Express"],
|
|
186
|
+
["fastify", "Fastify"],
|
|
187
|
+
["next", "Next.js"]
|
|
188
|
+
];
|
|
189
|
+
for (const [dependency, label] of knownTooling) {
|
|
190
|
+
if (dependencyNames.includes(dependency)) {
|
|
191
|
+
tooling.add(label);
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
catch {
|
|
196
|
+
// package.json is optional
|
|
197
|
+
}
|
|
198
|
+
for (const metadataName of [
|
|
199
|
+
"requirements.txt",
|
|
200
|
+
"pyproject.toml"
|
|
201
|
+
]) {
|
|
202
|
+
try {
|
|
203
|
+
const raw = (await fs.readFile(path.join(root, metadataName), "utf8")).toLowerCase();
|
|
204
|
+
languages.add("Python");
|
|
205
|
+
const pythonTools = [
|
|
206
|
+
["openai", "OpenAI"],
|
|
207
|
+
["anthropic", "Anthropic"],
|
|
208
|
+
["langchain", "LangChain"],
|
|
209
|
+
["crewai", "CrewAI"],
|
|
210
|
+
["autogen", "AutoGen"],
|
|
211
|
+
["fastapi", "FastAPI"]
|
|
212
|
+
];
|
|
213
|
+
for (const [needle, label] of pythonTools) {
|
|
214
|
+
if (raw.includes(needle)) {
|
|
215
|
+
tooling.add(label);
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
catch {
|
|
220
|
+
// Python metadata is optional
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
return {
|
|
224
|
+
languages: [...languages],
|
|
225
|
+
tooling: [...tooling]
|
|
226
|
+
};
|
|
227
|
+
}
|
|
228
|
+
export async function collectSourceFiles(root) {
|
|
229
|
+
const files = [];
|
|
230
|
+
const maxFiles = 5000;
|
|
231
|
+
async function walk(current) {
|
|
232
|
+
if (files.length >= maxFiles) {
|
|
233
|
+
return;
|
|
234
|
+
}
|
|
235
|
+
let entries;
|
|
236
|
+
try {
|
|
237
|
+
entries =
|
|
238
|
+
await fs.readdir(current, {
|
|
239
|
+
withFileTypes: true
|
|
240
|
+
});
|
|
241
|
+
}
|
|
242
|
+
catch {
|
|
243
|
+
return;
|
|
244
|
+
}
|
|
245
|
+
for (const entry of entries) {
|
|
246
|
+
if (files.length >= maxFiles) {
|
|
247
|
+
break;
|
|
248
|
+
}
|
|
249
|
+
if (entry.isSymbolicLink()) {
|
|
250
|
+
continue;
|
|
251
|
+
}
|
|
252
|
+
const full = path.join(current, entry.name);
|
|
253
|
+
if (entry.isDirectory()) {
|
|
254
|
+
if (ignoredDirectories.has(entry.name)) {
|
|
255
|
+
continue;
|
|
256
|
+
}
|
|
257
|
+
await walk(full);
|
|
258
|
+
continue;
|
|
259
|
+
}
|
|
260
|
+
if (!entry.isFile()) {
|
|
261
|
+
continue;
|
|
262
|
+
}
|
|
263
|
+
if (shouldSkipFile(full)) {
|
|
264
|
+
continue;
|
|
265
|
+
}
|
|
266
|
+
const ext = path.extname(entry.name).toLowerCase();
|
|
267
|
+
if (!sourceExtensions.has(ext)) {
|
|
268
|
+
continue;
|
|
269
|
+
}
|
|
270
|
+
try {
|
|
271
|
+
const stat = await fs.stat(full);
|
|
272
|
+
if (stat.size >
|
|
273
|
+
1_500_000) {
|
|
274
|
+
continue;
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
catch {
|
|
278
|
+
continue;
|
|
279
|
+
}
|
|
280
|
+
files.push(full);
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
await walk(root);
|
|
284
|
+
return files;
|
|
285
|
+
}
|
|
286
|
+
function isCommentOnlyLine(line) {
|
|
287
|
+
const value = line.trim();
|
|
288
|
+
return (value.startsWith("//") ||
|
|
289
|
+
value.startsWith("#") ||
|
|
290
|
+
value.startsWith("/*") ||
|
|
291
|
+
value.startsWith("*"));
|
|
292
|
+
}
|
|
293
|
+
function isInsideQuotedString(line, index) {
|
|
294
|
+
let quote = null;
|
|
295
|
+
let escaped = false;
|
|
296
|
+
for (let i = 0; i < index; i++) {
|
|
297
|
+
const char = line[i];
|
|
298
|
+
if (escaped) {
|
|
299
|
+
escaped = false;
|
|
300
|
+
continue;
|
|
301
|
+
}
|
|
302
|
+
if (quote !== null &&
|
|
303
|
+
char === "\\") {
|
|
304
|
+
escaped = true;
|
|
305
|
+
continue;
|
|
306
|
+
}
|
|
307
|
+
if (quote !== null) {
|
|
308
|
+
if (char === quote) {
|
|
309
|
+
quote = null;
|
|
310
|
+
}
|
|
311
|
+
continue;
|
|
312
|
+
}
|
|
313
|
+
if (char === "'" ||
|
|
314
|
+
char === '"' ||
|
|
315
|
+
char === "`") {
|
|
316
|
+
quote = char;
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
return quote !== null;
|
|
320
|
+
}
|
|
321
|
+
function isInFunctionDeclaration(line, index) {
|
|
322
|
+
/*
|
|
323
|
+
* A multiline declaration such as:
|
|
324
|
+
*
|
|
325
|
+
* export async function createOrder(
|
|
326
|
+
* ...
|
|
327
|
+
* ) {
|
|
328
|
+
*
|
|
329
|
+
* has no opening brace on the line containing
|
|
330
|
+
* createOrder(. Detect the explicit `function`
|
|
331
|
+
* keyword before falling back to the existing
|
|
332
|
+
* same-line brace logic.
|
|
333
|
+
*/
|
|
334
|
+
const beforeMatch = line.slice(0, index);
|
|
335
|
+
if (/\bfunction\s*\*?\s*$/i.test(beforeMatch)) {
|
|
336
|
+
return true;
|
|
337
|
+
}
|
|
338
|
+
const brace = line.indexOf("{");
|
|
339
|
+
if (brace < 0 ||
|
|
340
|
+
index > brace) {
|
|
341
|
+
return false;
|
|
342
|
+
}
|
|
343
|
+
const beforeBrace = line.slice(0, brace + 1);
|
|
344
|
+
return (/\b(?:export\s+)?(?:async\s+)?function\s+[A-Za-z_$][A-Za-z0-9_$]*\s*\(/.test(beforeBrace));
|
|
345
|
+
}
|
|
346
|
+
function escapeRegex(value) {
|
|
347
|
+
return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
348
|
+
}
|
|
349
|
+
export async function scanFile(root, filePath) {
|
|
350
|
+
let text;
|
|
351
|
+
try {
|
|
352
|
+
text =
|
|
353
|
+
await fs.readFile(filePath, "utf8");
|
|
354
|
+
}
|
|
355
|
+
catch {
|
|
356
|
+
return [];
|
|
357
|
+
}
|
|
358
|
+
const lines = text.split(/\r?\n/);
|
|
359
|
+
const findings = [];
|
|
360
|
+
const seen = new Set();
|
|
361
|
+
const httpAliases = new Set();
|
|
362
|
+
for (const aliasMatch of text.matchAll(/\b(?:const|let|var)\s+([A-Za-z_$][A-Za-z0-9_$]*)\s*=\s*axios\b/g)) {
|
|
363
|
+
if (aliasMatch[1]) {
|
|
364
|
+
httpAliases.add(aliasMatch[1]);
|
|
365
|
+
}
|
|
366
|
+
}
|
|
367
|
+
for (const importMatch of text.matchAll(/\bimport\s+([A-Za-z_$][A-Za-z0-9_$]*)\s+from\s+["']axios["']/g)) {
|
|
368
|
+
const name = importMatch[1];
|
|
369
|
+
if (name &&
|
|
370
|
+
name !== "axios") {
|
|
371
|
+
httpAliases.add(name);
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
const activeRules = [
|
|
375
|
+
...rules
|
|
376
|
+
];
|
|
377
|
+
if (httpAliases.size > 0) {
|
|
378
|
+
const aliases = [...httpAliases]
|
|
379
|
+
.map(escapeRegex)
|
|
380
|
+
.join("|");
|
|
381
|
+
activeRules.push({
|
|
382
|
+
confidence: "HIGH",
|
|
383
|
+
category: "HTTP_DELETE",
|
|
384
|
+
reason: "Outbound HTTP DELETE operation detected through an HTTP client alias.",
|
|
385
|
+
pattern: new RegExp(`\\b(?:${aliases})\\.delete\\s*\\(`, "i")
|
|
386
|
+
});
|
|
387
|
+
activeRules.push({
|
|
388
|
+
confidence: "MEDIUM",
|
|
389
|
+
category: "HTTP_WRITE",
|
|
390
|
+
reason: "Outbound HTTP POST/PUT/PATCH operation detected through an HTTP client alias.",
|
|
391
|
+
pattern: new RegExp(`\\b(?:${aliases})\\.(?:post|put|patch)\\s*\\(`, "i")
|
|
392
|
+
});
|
|
393
|
+
}
|
|
394
|
+
for (let i = 0; i < lines.length; i++) {
|
|
395
|
+
const windowText = lines
|
|
396
|
+
.slice(i, Math.min(lines.length, i + 4))
|
|
397
|
+
.join("\n");
|
|
398
|
+
for (const rule of activeRules) {
|
|
399
|
+
const match = windowText.match(rule.pattern);
|
|
400
|
+
if (!match ||
|
|
401
|
+
match.index === undefined) {
|
|
402
|
+
continue;
|
|
403
|
+
}
|
|
404
|
+
const linesBeforeMatch = windowText
|
|
405
|
+
.slice(0, match.index)
|
|
406
|
+
.split("\n")
|
|
407
|
+
.length - 1;
|
|
408
|
+
const matchedLineIndex = i + linesBeforeMatch;
|
|
409
|
+
const matchedSourceLine = lines[matchedLineIndex] ?? "";
|
|
410
|
+
const beforeMatch = windowText.slice(0, match.index);
|
|
411
|
+
const lastLineBreak = beforeMatch.lastIndexOf("\n");
|
|
412
|
+
const matchedColumn = match.index -
|
|
413
|
+
(lastLineBreak + 1);
|
|
414
|
+
if (isCommentOnlyLine(matchedSourceLine) ||
|
|
415
|
+
isInsideQuotedString(matchedSourceLine, matchedColumn) ||
|
|
416
|
+
isInFunctionDeclaration(matchedSourceLine, matchedColumn)) {
|
|
417
|
+
continue;
|
|
418
|
+
}
|
|
419
|
+
const knownHttpMutation = /\b(?:axios|got|superagent)\.(?:post|put|patch|delete)\s*\(/i
|
|
420
|
+
.test(matchedSourceLine);
|
|
421
|
+
if (rule.category ===
|
|
422
|
+
"DATABASE" &&
|
|
423
|
+
rule.confidence ===
|
|
424
|
+
"MEDIUM" &&
|
|
425
|
+
knownHttpMutation) {
|
|
426
|
+
continue;
|
|
427
|
+
}
|
|
428
|
+
const key = `${matchedLineIndex}:${rule.category}`;
|
|
429
|
+
if (seen.has(key)) {
|
|
430
|
+
continue;
|
|
431
|
+
}
|
|
432
|
+
seen.add(key);
|
|
433
|
+
findings.push({
|
|
434
|
+
file: path.relative(root, filePath) ||
|
|
435
|
+
path.basename(filePath),
|
|
436
|
+
line: matchedLineIndex + 1,
|
|
437
|
+
functionName: detectFunctionName(lines, matchedLineIndex),
|
|
438
|
+
confidence: rule.confidence,
|
|
439
|
+
category: rule.category,
|
|
440
|
+
reason: rule.reason
|
|
441
|
+
});
|
|
442
|
+
}
|
|
443
|
+
}
|
|
444
|
+
return findings;
|
|
445
|
+
}
|
|
446
|
+
function confidenceRank(value) {
|
|
447
|
+
switch (value) {
|
|
448
|
+
case "HIGH":
|
|
449
|
+
return 0;
|
|
450
|
+
case "MEDIUM":
|
|
451
|
+
return 1;
|
|
452
|
+
default:
|
|
453
|
+
return 2;
|
|
454
|
+
}
|
|
455
|
+
}
|
|
456
|
+
function printFindings(findings) {
|
|
457
|
+
if (findings.length === 0) {
|
|
458
|
+
console.log("");
|
|
459
|
+
console.log("No obvious consequential operations were detected.");
|
|
460
|
+
console.log("");
|
|
461
|
+
console.log("This does not prove the project has no side effects.");
|
|
462
|
+
return;
|
|
463
|
+
}
|
|
464
|
+
const sorted = [...findings].sort((a, b) => confidenceRank(a.confidence) -
|
|
465
|
+
confidenceRank(b.confidence) ||
|
|
466
|
+
a.file.localeCompare(b.file) ||
|
|
467
|
+
a.line - b.line);
|
|
468
|
+
const visible = sorted.slice(0, 60);
|
|
469
|
+
let current;
|
|
470
|
+
for (const finding of visible) {
|
|
471
|
+
if (finding.confidence !==
|
|
472
|
+
current) {
|
|
473
|
+
current =
|
|
474
|
+
finding.confidence;
|
|
475
|
+
console.log("");
|
|
476
|
+
console.log(current);
|
|
477
|
+
console.log("-".repeat(current.length));
|
|
478
|
+
}
|
|
479
|
+
const location = `${finding.file}:${finding.line}`;
|
|
480
|
+
const fn = finding.functionName
|
|
481
|
+
? ` ${finding.functionName}()`
|
|
482
|
+
: "";
|
|
483
|
+
console.log(`${location}${fn}`);
|
|
484
|
+
console.log(` ${finding.category}: ${finding.reason}`);
|
|
485
|
+
}
|
|
486
|
+
if (sorted.length >
|
|
487
|
+
visible.length) {
|
|
488
|
+
console.log("");
|
|
489
|
+
console.log(`... ${sorted.length - visible.length} additional findings not shown.`);
|
|
490
|
+
}
|
|
491
|
+
}
|
|
492
|
+
function parsePositiveNumber(value) {
|
|
493
|
+
const normalized = value
|
|
494
|
+
.trim()
|
|
495
|
+
.replaceAll(",", "");
|
|
496
|
+
if (!normalized) {
|
|
497
|
+
return undefined;
|
|
498
|
+
}
|
|
499
|
+
const parsed = Number(normalized);
|
|
500
|
+
if (!Number.isFinite(parsed) ||
|
|
501
|
+
parsed < 0) {
|
|
502
|
+
return undefined;
|
|
503
|
+
}
|
|
504
|
+
return parsed;
|
|
505
|
+
}
|
|
506
|
+
function planForUsage(monthly) {
|
|
507
|
+
if (monthly <= 100_000) {
|
|
508
|
+
return "Pro capacity (100,000/month)";
|
|
509
|
+
}
|
|
510
|
+
if (monthly <= 500_000) {
|
|
511
|
+
return "Startup capacity (500,000/month)";
|
|
512
|
+
}
|
|
513
|
+
if (monthly <= 2_000_000) {
|
|
514
|
+
return "Scale capacity (2,000,000/month)";
|
|
515
|
+
}
|
|
516
|
+
return "Higher/custom capacity";
|
|
517
|
+
}
|
|
518
|
+
async function runEstimate() {
|
|
519
|
+
if (!process.stdin.isTTY ||
|
|
520
|
+
!process.stdout.isTTY) {
|
|
521
|
+
return;
|
|
522
|
+
}
|
|
523
|
+
const rl = readline.createInterface({
|
|
524
|
+
input,
|
|
525
|
+
output
|
|
526
|
+
});
|
|
527
|
+
try {
|
|
528
|
+
console.log("");
|
|
529
|
+
console.log("VALUE ESTIMATE");
|
|
530
|
+
console.log("--------------");
|
|
531
|
+
const answer = (await rl.question("Estimate expected Once usage/value? [Y/n] "))
|
|
532
|
+
.trim()
|
|
533
|
+
.toLowerCase();
|
|
534
|
+
if (answer === "n" ||
|
|
535
|
+
answer === "no") {
|
|
536
|
+
return;
|
|
537
|
+
}
|
|
538
|
+
const dailyInput = await rl.question("Expected UNIQUE protected operations per day: ");
|
|
539
|
+
const daily = parsePositiveNumber(dailyInput);
|
|
540
|
+
if (daily === undefined) {
|
|
541
|
+
console.log("");
|
|
542
|
+
console.log("Usage estimate skipped.");
|
|
543
|
+
return;
|
|
544
|
+
}
|
|
545
|
+
const monthly = Math.round(daily * 30);
|
|
546
|
+
console.log("");
|
|
547
|
+
console.log("ESTIMATED ONCE USAGE");
|
|
548
|
+
console.log("--------------------");
|
|
549
|
+
console.log(`[CUSTOMER INPUT] ${daily.toLocaleString()} protected operations/day`);
|
|
550
|
+
console.log(`[CALCULATED] ${monthly.toLocaleString()} protected operations/month`);
|
|
551
|
+
console.log(`[CALCULATED] Capacity fit: ${planForUsage(monthly)}`);
|
|
552
|
+
console.log("Retries of the same operation ID are not included as new unique operations.");
|
|
553
|
+
const incidentsInput = await rl.question("Estimated duplicate incidents/month today (Enter to skip): ");
|
|
554
|
+
const incidents = parsePositiveNumber(incidentsInput);
|
|
555
|
+
if (incidents === undefined) {
|
|
556
|
+
console.log("");
|
|
557
|
+
console.log("Financial estimate skipped.");
|
|
558
|
+
return;
|
|
559
|
+
}
|
|
560
|
+
const costInput = await rl.question("Average cost of one duplicate incident: ");
|
|
561
|
+
const cost = parsePositiveNumber(costInput);
|
|
562
|
+
if (cost === undefined) {
|
|
563
|
+
console.log("");
|
|
564
|
+
console.log("Financial estimate skipped.");
|
|
565
|
+
return;
|
|
566
|
+
}
|
|
567
|
+
const currencyInput = (await rl.question("Currency symbol/code [£]: ")).trim();
|
|
568
|
+
const currency = currencyInput || "£";
|
|
569
|
+
const monthlyExposure = incidents * cost;
|
|
570
|
+
const annualExposure = monthlyExposure * 12;
|
|
571
|
+
console.log("");
|
|
572
|
+
console.log("VALUE SCENARIO");
|
|
573
|
+
console.log("--------------");
|
|
574
|
+
console.log(`[CUSTOMER INPUT] ${incidents} duplicate incidents/month`);
|
|
575
|
+
console.log(`[CUSTOMER INPUT] ${currency}${cost.toLocaleString()} average cost/incident`);
|
|
576
|
+
console.log(`[CALCULATED] Potential duplicate-loss exposure: ${currency}${monthlyExposure.toLocaleString()}/month`);
|
|
577
|
+
console.log(`[CALCULATED] Potential duplicate-loss exposure: ${currency}${annualExposure.toLocaleString()}/year`);
|
|
578
|
+
console.log("");
|
|
579
|
+
console.log("These are scenario estimates, not measured savings.");
|
|
580
|
+
console.log("Once Observe can later replace assumptions with measured behaviour.");
|
|
581
|
+
}
|
|
582
|
+
finally {
|
|
583
|
+
rl.close();
|
|
584
|
+
}
|
|
585
|
+
}
|
|
586
|
+
export async function runScan(requestedPath, estimate = true) {
|
|
587
|
+
const root = path.resolve(requestedPath);
|
|
588
|
+
const stat = await fs.stat(root);
|
|
589
|
+
if (!stat.isDirectory()) {
|
|
590
|
+
throw new Error("Scan target must be a directory.");
|
|
591
|
+
}
|
|
592
|
+
console.log("");
|
|
593
|
+
console.log("Once Safety Scan");
|
|
594
|
+
console.log("----------------");
|
|
595
|
+
console.log(`Directory: ${root}`);
|
|
596
|
+
console.log("Mode: local + read-only");
|
|
597
|
+
console.log("Source uploaded: no");
|
|
598
|
+
console.log("Code changes: none");
|
|
599
|
+
const metadata = await detectProjectMetadata(root);
|
|
600
|
+
const files = await collectSourceFiles(root);
|
|
601
|
+
const findings = [];
|
|
602
|
+
for (const file of files) {
|
|
603
|
+
findings.push(...await scanFile(root, file));
|
|
604
|
+
}
|
|
605
|
+
console.log("");
|
|
606
|
+
console.log(`Files scanned: ${files.length}`);
|
|
607
|
+
if (metadata.languages.length) {
|
|
608
|
+
console.log(`Project: ${metadata.languages.join(", ")}`);
|
|
609
|
+
}
|
|
610
|
+
if (metadata.tooling.length) {
|
|
611
|
+
console.log(`Detected tooling: ${metadata.tooling.join(", ")}`);
|
|
612
|
+
}
|
|
613
|
+
const high = findings.filter(finding => finding.confidence ===
|
|
614
|
+
"HIGH").length;
|
|
615
|
+
const medium = findings.filter(finding => finding.confidence ===
|
|
616
|
+
"MEDIUM").length;
|
|
617
|
+
const low = findings.filter(finding => finding.confidence ===
|
|
618
|
+
"LOW").length;
|
|
619
|
+
console.log("");
|
|
620
|
+
console.log("DETECTED");
|
|
621
|
+
console.log("--------");
|
|
622
|
+
console.log(`Consequential-operation candidates: ${findings.length}`);
|
|
623
|
+
console.log(`HIGH ${high} MEDIUM ${medium} LOW ${low}`);
|
|
624
|
+
printFindings(findings);
|
|
625
|
+
console.log("");
|
|
626
|
+
console.log("Detection is heuristic. Review findings before protecting or changing code.");
|
|
627
|
+
if (estimate &&
|
|
628
|
+
findings.length > 0) {
|
|
629
|
+
await runEstimate();
|
|
630
|
+
}
|
|
631
|
+
}
|
|
632
|
+
//# sourceMappingURL=scan.js.map
|
package/dist/scan.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scan.js","sourceRoot":"","sources":["../src/scan.ts"],"names":[],"mappings":"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"}
|
package/dist/setup.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../src/setup.ts"],"names":[],"mappings":"AAkBA,KAAK,YAAY,GAAG;IAClB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB,CAAC;AAkuBF,wBAAsB,QAAQ,CAC5B,aAAa,EAAE,MAAM,EACrB,OAAO,GAAE,YAAiB,GACzB,OAAO,CAAC,IAAI,CAAC,CA0bf"}
|