auditreach-cli 0.1.1 → 0.1.3
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 +13 -6
- package/dist/cli.js +18 -3
- package/dist/cli.js.map +1 -1
- package/dist/clients/reddit-client.d.ts.map +1 -1
- package/dist/clients/reddit-client.js +11 -6
- package/dist/clients/reddit-client.js.map +1 -1
- package/dist/commands/auth.d.ts +1 -0
- package/dist/commands/auth.d.ts.map +1 -1
- package/dist/commands/auth.js +37 -28
- package/dist/commands/auth.js.map +1 -1
- package/dist/commands/search.d.ts +1 -0
- package/dist/commands/search.d.ts.map +1 -1
- package/dist/commands/search.js +27 -4
- package/dist/commands/search.js.map +1 -1
- package/dist/commands/verify-log.d.ts +1 -0
- package/dist/commands/verify-log.d.ts.map +1 -1
- package/dist/commands/verify-log.js +10 -2
- package/dist/commands/verify-log.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -163,8 +163,10 @@ Search a platform using its official API only.
|
|
|
163
163
|
| `--before <fullname>` | page results before this Reddit fullname cursor, e.g. `t3_abc123` (Reddit only) |
|
|
164
164
|
| `--after <fullname>` | page results after this Reddit fullname cursor, e.g. `t3_abc123` (Reddit only) |
|
|
165
165
|
| `--output <path>` | write full results JSON to this path |
|
|
166
|
+
| `--json` | print structured JSON to stdout instead of human-readable output, for scripts and agent callers |
|
|
166
167
|
|
|
167
168
|
node dist/cli.js search --platform reddit --query "agent memory poisoning" --subreddit MachineLearning --max-results 50
|
|
169
|
+
node dist/cli.js search --platform reddit --query "agent memory poisoning" --json | jq '.results | length'
|
|
168
170
|
|
|
169
171
|
### `auditreach auth`
|
|
170
172
|
|
|
@@ -175,6 +177,7 @@ Set up, verify, or clear BYOK credentials for a platform (stored in your OS keyc
|
|
|
175
177
|
| `--platform <platform>` | `reddit` \| `youtube` (required) |
|
|
176
178
|
| `--clear` | delete stored credentials for this platform |
|
|
177
179
|
| `--verify` | verify stored credentials are valid without running a search (no results file, no audit-log entry) |
|
|
180
|
+
| `--json` | print structured JSON to stdout instead of human-readable output |
|
|
178
181
|
|
|
179
182
|
node dist/cli.js auth --platform reddit --verify
|
|
180
183
|
|
|
@@ -272,7 +275,7 @@ No generated API docs site exists yet (no TypeDoc build wired into CI) -- the ex
|
|
|
272
275
|
| Reddit | 25 | 100 |
|
|
273
276
|
| YouTube | 25 | 50 |
|
|
274
277
|
|
|
275
|
-
Values above the cap are silently clamped to it. For Reddit, `--before`/`--after` let you page
|
|
278
|
+
Values above the cap are silently clamped to it. For Reddit, `--before`/`--after` let you page through a search's result set using the real cursor Reddit's own response returns, up to Reddit's own ~1,000-item search cap (see [Success stories](#success-stories) for why cursor pagination alone can't go further than that); YouTube has no equivalent yet. Whenever the number of items returned equals the limit that was actually applied, whether that is the silent default or an explicit `--max-results` value, auditreach prints a warning to stderr telling you more results may exist and how to raise `--max-results` (up to the platform cap).
|
|
276
279
|
|
|
277
280
|
## What is a "consent basis," honestly
|
|
278
281
|
|
|
@@ -287,7 +290,7 @@ No. Credentials go straight into your OS keychain through `@napi-rs/keyring` (`s
|
|
|
287
290
|
25, silently, unless you pass `--max-results` -- see [Result limits](#result-limits). The hard cap is 100 for Reddit and 50 for YouTube. A stderr warning fires whenever a search actually hits the applied limit, whether that's the silent default or an explicit value you passed.
|
|
288
291
|
|
|
289
292
|
**Can I page past Reddit's result cap?**
|
|
290
|
-
Yes, for Reddit: `search()` reads the real `after`/`before` cursor out of Reddit's own response and exposes `--before`/`--after` flags to page in either direction.
|
|
293
|
+
Yes, for Reddit, up to a point: `search()` reads the real `after`/`before` cursor out of Reddit's own response and exposes `--before`/`--after` flags to page in either direction through a search's result set. It does not get you past Reddit's own ~1,000-item search cap -- see the [praw#614 success story](#success-stories) for what that fix actually covers and doesn't.
|
|
291
294
|
|
|
292
295
|
**Does auditreach support X (Twitter)?**
|
|
293
296
|
Not yet. X API v2's pricing and post-volume caps have been prohibitive for small teams doing real research since the 2023 changes. See [Platform coverage](#platform-coverage) for the full reasoning.
|
|
@@ -330,10 +333,14 @@ auditreach's own source and used to close genuine gaps in this tool before it ha
|
|
|
330
333
|
single outside user. Each line below is tied to the actual report that prompted it.
|
|
331
334
|
|
|
332
335
|
- **[praw#614](https://github.com/praw-dev/praw/issues/614)** (@mananwason) -- asked how
|
|
333
|
-
to
|
|
334
|
-
|
|
335
|
-
cursor
|
|
336
|
-
|
|
336
|
+
to page past Reddit's ~1,000-result search cap. The real fix is narrower than that:
|
|
337
|
+
Reddit's own API returns no before/after cursor at all once you're past that cap,
|
|
338
|
+
cursor-based paging or not -- confirmed directly in the issue thread. What `search()`
|
|
339
|
+
actually does now is extract the real cursor from Reddit's response
|
|
340
|
+
(`SearchOutcome.nextCursor`) and expose `--before`/`--after` flags so you can page
|
|
341
|
+
through the results within a single search's capped result set, instead of only ever
|
|
342
|
+
seeing the first page. Going past the 1,000-item cap itself needs cloudsearch
|
|
343
|
+
timestamp-window re-querying, which isn't built yet.
|
|
337
344
|
- **[praw#1939](https://github.com/praw-dev/praw/issues/1939)** (@Auditormadness9) -- hit
|
|
338
345
|
an undiagnosed 400 error caused by a subreddit name that still carried a leading `r/`
|
|
339
346
|
prefix. Search errors now name that specific cause when it's the likely culprit:
|
package/dist/cli.js
CHANGED
|
@@ -1,11 +1,17 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
+
import { readFileSync } from "node:fs";
|
|
3
|
+
import { fileURLToPath } from "node:url";
|
|
4
|
+
import { dirname, join } from "node:path";
|
|
2
5
|
import { Command } from "commander";
|
|
3
6
|
import { runSearchCommand } from "./commands/search.js";
|
|
4
7
|
import { runAuthCommand } from "./commands/auth.js";
|
|
5
8
|
import { runVerifyLogCommand } from "./commands/verify-log.js";
|
|
6
9
|
import { DEFAULT_LIMIT as REDDIT_DEFAULT_LIMIT, MAX_LIMIT as REDDIT_MAX_LIMIT, } from "./clients/reddit-client.js";
|
|
7
10
|
import { MAX_MAX_RESULTS as YOUTUBE_MAX_MAX_RESULTS } from "./clients/youtube-client.js";
|
|
8
|
-
|
|
11
|
+
// Read the real published version from package.json instead of a hand-maintained
|
|
12
|
+
// literal, which previously drifted out of sync with every release after 0.1.0.
|
|
13
|
+
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
14
|
+
const { version: VERSION } = JSON.parse(readFileSync(join(__dirname, "..", "package.json"), "utf8"));
|
|
9
15
|
function assertPlatform(value) {
|
|
10
16
|
if (value !== "reddit" && value !== "youtube") {
|
|
11
17
|
console.error(`Unsupported platform "${value}". Supported in v0.1: reddit, youtube.`);
|
|
@@ -36,6 +42,7 @@ program
|
|
|
36
42
|
.option("--before <fullname>", "page results before this Reddit fullname cursor, e.g. t3_abc123 (reddit only)")
|
|
37
43
|
.option("--after <fullname>", "page results after this Reddit fullname cursor, e.g. t3_abc123 (reddit only)")
|
|
38
44
|
.option("--output <path>", "write full results JSON to this path")
|
|
45
|
+
.option("--json", "print a single structured JSON object to stdout instead of human-readable text (for scripts and agents)")
|
|
39
46
|
.action(async (opts) => {
|
|
40
47
|
assertPlatform(opts.platform);
|
|
41
48
|
await runSearchCommand({
|
|
@@ -48,6 +55,7 @@ program
|
|
|
48
55
|
before: opts.before,
|
|
49
56
|
after: opts.after,
|
|
50
57
|
output: opts.output,
|
|
58
|
+
json: opts.json,
|
|
51
59
|
});
|
|
52
60
|
});
|
|
53
61
|
program
|
|
@@ -56,16 +64,23 @@ program
|
|
|
56
64
|
.requiredOption("--platform <platform>", "reddit | youtube")
|
|
57
65
|
.option("--clear", "delete stored credentials for this platform")
|
|
58
66
|
.option("--verify", "verify stored credentials are valid without running a search (no results file, no audit-log entry)")
|
|
67
|
+
.option("--json", "with --verify, print a structured JSON result instead of human-readable text (for scripts and agents)")
|
|
59
68
|
.action(async (opts) => {
|
|
60
69
|
assertPlatform(opts.platform);
|
|
61
|
-
await runAuthCommand({
|
|
70
|
+
await runAuthCommand({
|
|
71
|
+
platform: opts.platform,
|
|
72
|
+
clear: opts.clear,
|
|
73
|
+
verify: opts.verify,
|
|
74
|
+
json: opts.json,
|
|
75
|
+
});
|
|
62
76
|
});
|
|
63
77
|
program
|
|
64
78
|
.command("verify-log")
|
|
65
79
|
.description("Verify the local hash-chained audit log has not been tampered with")
|
|
66
80
|
.option("--path <path>", "path to the audit log file")
|
|
81
|
+
.option("--json", "print a structured JSON result instead of human-readable text (for scripts and agents)")
|
|
67
82
|
.action(async (opts) => {
|
|
68
|
-
await runVerifyLogCommand({ path: opts.path });
|
|
83
|
+
await runVerifyLogCommand({ path: opts.path, json: opts.json });
|
|
69
84
|
});
|
|
70
85
|
program.parseAsync(process.argv).catch((error) => {
|
|
71
86
|
console.error(error instanceof Error ? error.message : String(error));
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAE/D,OAAO,EACL,aAAa,IAAI,oBAAoB,EACrC,SAAS,IAAI,gBAAgB,GAC9B,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,eAAe,IAAI,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AAEzF,MAAM,OAAO,GAAG,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reddit-client.d.ts","sourceRoot":"","sources":["../../src/clients/reddit-client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,KAAK,EAAE,mBAAmB,EAAE,aAAa,EAAoB,MAAM,aAAa,CAAC;AAQxF,eAAO,MAAM,aAAa,KAAK,CAAC;AAChC,eAAO,MAAM,SAAS,MAAM,CAAC;AA0C7B;;;;GAIG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAoB;IAChD,OAAO,CAAC,WAAW,CAAuB;IAC1C,OAAO,CAAC,cAAc,CAAK;gBAEf,WAAW,EAAE,iBAAiB;YAI5B,cAAc;IAoC5B;;;;;OAKG;IACH,OAAO,CAAC,qBAAqB;IAQ7B;;;;;;OAMG;IACG,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC;IAMlC,MAAM,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"reddit-client.d.ts","sourceRoot":"","sources":["../../src/clients/reddit-client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,KAAK,EAAE,mBAAmB,EAAE,aAAa,EAAoB,MAAM,aAAa,CAAC;AAQxF,eAAO,MAAM,aAAa,KAAK,CAAC;AAChC,eAAO,MAAM,SAAS,MAAM,CAAC;AA0C7B;;;;GAIG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAoB;IAChD,OAAO,CAAC,WAAW,CAAuB;IAC1C,OAAO,CAAC,cAAc,CAAK;gBAEf,WAAW,EAAE,iBAAiB;YAI5B,cAAc;IAoC5B;;;;;OAKG;IACH,OAAO,CAAC,qBAAqB;IAQ7B;;;;;;OAMG;IACG,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC;IAMlC,MAAM,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,aAAa,CAAC;CAsFnE"}
|
|
@@ -91,9 +91,13 @@ export class RedditClient {
|
|
|
91
91
|
}
|
|
92
92
|
// Reddit's search listing endpoint accepts standard Listing pagination
|
|
93
93
|
// cursors (before/after, Reddit "fullname" ids e.g. "t3_abc123"). These
|
|
94
|
-
//
|
|
95
|
-
//
|
|
96
|
-
//
|
|
94
|
+
// walk forward/backward through a search's result set instead of relying
|
|
95
|
+
// on offset-based paging, which Reddit's search API does not support.
|
|
96
|
+
// They do NOT let a caller retrieve results beyond Reddit's ~1,000-item
|
|
97
|
+
// search cap -- past that point Reddit's API returns no before/after
|
|
98
|
+
// cursor at all, cursor-based paging or not (confirmed directly in the
|
|
99
|
+
// praw#614 thread this fix is based on). Getting past the 1,000-item cap
|
|
100
|
+
// requires cloudsearch timestamp-window re-querying, not implemented yet.
|
|
97
101
|
if (options.before) {
|
|
98
102
|
params.set("before", options.before);
|
|
99
103
|
}
|
|
@@ -140,9 +144,10 @@ export class RedditClient {
|
|
|
140
144
|
items,
|
|
141
145
|
// Cursors read back from Reddit's own response (not an echo of the
|
|
142
146
|
// request params above) -- feed `nextCursor.after` into the next
|
|
143
|
-
// call's `--after`/`options.after` to walk forward through
|
|
144
|
-
//
|
|
145
|
-
// backward. This
|
|
147
|
+
// call's `--after`/`options.after` to walk forward through the
|
|
148
|
+
// current search's result set, and `nextCursor.before` to walk
|
|
149
|
+
// backward. This does not extend past Reddit's ~1,000-item search
|
|
150
|
+
// cap -- see the note above search() for why.
|
|
146
151
|
nextCursor: {
|
|
147
152
|
after: listing.data.after ?? null,
|
|
148
153
|
before: listing.data.before ?? null,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reddit-client.js","sourceRoot":"","sources":["../../src/clients/reddit-client.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"reddit-client.js","sourceRoot":"","sources":["../../src/clients/reddit-client.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/auth.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/commands/auth.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE5C,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,QAAQ,CAAC;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/commands/auth.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE5C,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,QAAQ,CAAC;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,wBAAsB,cAAc,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAqCzE"}
|
package/dist/commands/auth.js
CHANGED
|
@@ -8,7 +8,7 @@ export async function runAuthCommand(args) {
|
|
|
8
8
|
return;
|
|
9
9
|
}
|
|
10
10
|
if (args.verify) {
|
|
11
|
-
await verifyCredentials(args.platform);
|
|
11
|
+
await verifyCredentials(args.platform, Boolean(args.json));
|
|
12
12
|
return;
|
|
13
13
|
}
|
|
14
14
|
if (args.platform === "reddit") {
|
|
@@ -53,38 +53,47 @@ async function clearCredentials(platform) {
|
|
|
53
53
|
* requires --query, never writes a results file, and never appends an
|
|
54
54
|
* audit-log entry -- it only reports whether the stored credentials work.
|
|
55
55
|
*/
|
|
56
|
-
async function verifyCredentials(platform) {
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
56
|
+
async function verifyCredentials(platform, json) {
|
|
57
|
+
try {
|
|
58
|
+
if (platform === "reddit") {
|
|
59
|
+
const credentials = getRedditCredentials();
|
|
60
|
+
if (!credentials) {
|
|
61
|
+
report(json, platform, false, 'No Reddit credentials found. Run "auditreach auth --platform reddit" first.');
|
|
62
|
+
process.exitCode = 1;
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
65
|
await new RedditClient(credentials).verifyCredentials();
|
|
66
|
-
console.log("Reddit credentials are valid.");
|
|
67
66
|
}
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
67
|
+
else {
|
|
68
|
+
const credentials = getYoutubeCredentials();
|
|
69
|
+
if (!credentials) {
|
|
70
|
+
report(json, platform, false, 'No YouTube credentials found. Run "auditreach auth --platform youtube" first.');
|
|
71
|
+
process.exitCode = 1;
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
await new YoutubeClient(credentials).verifyCredentials();
|
|
71
75
|
}
|
|
76
|
+
report(json, platform, true);
|
|
77
|
+
}
|
|
78
|
+
catch (error) {
|
|
79
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
80
|
+
report(json, platform, false, `${capitalize(platform)} credential check failed: ${message}`);
|
|
81
|
+
process.exitCode = 1;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
function report(json, platform, valid, error) {
|
|
85
|
+
if (json) {
|
|
86
|
+
process.stdout.write(`${JSON.stringify({ platform, valid, error: error ?? null }, null, 2)}\n`);
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
if (valid) {
|
|
90
|
+
console.log(`${capitalize(platform)} credentials are valid.`);
|
|
72
91
|
}
|
|
73
92
|
else {
|
|
74
|
-
|
|
75
|
-
if (!credentials) {
|
|
76
|
-
console.error('No YouTube credentials found. Run "auditreach auth --platform youtube" first.');
|
|
77
|
-
process.exitCode = 1;
|
|
78
|
-
return;
|
|
79
|
-
}
|
|
80
|
-
try {
|
|
81
|
-
await new YoutubeClient(credentials).verifyCredentials();
|
|
82
|
-
console.log("YouTube credentials are valid.");
|
|
83
|
-
}
|
|
84
|
-
catch (error) {
|
|
85
|
-
console.error(`YouTube credential check failed: ${error instanceof Error ? error.message : String(error)}`);
|
|
86
|
-
process.exitCode = 1;
|
|
87
|
-
}
|
|
93
|
+
console.error(error);
|
|
88
94
|
}
|
|
89
95
|
}
|
|
96
|
+
function capitalize(value) {
|
|
97
|
+
return value.charAt(0).toUpperCase() + value.slice(1);
|
|
98
|
+
}
|
|
90
99
|
//# sourceMappingURL=auth.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/commands/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,gBAAgB,EAChB,oBAAoB,EACpB,qBAAqB,GACtB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/commands/auth.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../src/commands/search.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,QAAQ,EAAiB,MAAM,aAAa,CAAC;AAE3D,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,QAAQ,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../src/commands/search.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,QAAQ,EAAiB,MAAM,aAAa,CAAC;AAE3D,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,QAAQ,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CA4F7E"}
|
package/dist/commands/search.js
CHANGED
|
@@ -45,7 +45,9 @@ export async function runSearchCommand(args) {
|
|
|
45
45
|
});
|
|
46
46
|
fingerprintSource = credentials.apiKey;
|
|
47
47
|
}
|
|
48
|
-
|
|
48
|
+
if (!args.json) {
|
|
49
|
+
printResults(outcome);
|
|
50
|
+
}
|
|
49
51
|
const outputPath = args.output ?? defaultOutputPath();
|
|
50
52
|
await writeFile(outputPath, JSON.stringify(outcome.items, null, 2), "utf8");
|
|
51
53
|
const prevHash = await getLastEntryHash();
|
|
@@ -61,6 +63,22 @@ export async function runSearchCommand(args) {
|
|
|
61
63
|
results_returned: outcome.items.length,
|
|
62
64
|
prev_entry_hash: prevHash,
|
|
63
65
|
});
|
|
66
|
+
if (args.json) {
|
|
67
|
+
process.stdout.write(`${JSON.stringify({
|
|
68
|
+
platform: outcome.platform,
|
|
69
|
+
endpoint: outcome.endpoint,
|
|
70
|
+
queryParams: outcome.queryParams,
|
|
71
|
+
authScope: outcome.authScope,
|
|
72
|
+
consentBasis: outcome.consentBasis,
|
|
73
|
+
items: outcome.items,
|
|
74
|
+
nextCursor: outcome.nextCursor ?? null,
|
|
75
|
+
truncated: isTruncated(outcome),
|
|
76
|
+
auditLogEntryId: entry.entry_id,
|
|
77
|
+
resultsFile: outputPath,
|
|
78
|
+
auditLogFile: "./auditreach.log.jsonl",
|
|
79
|
+
}, null, 2)}\n`);
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
64
82
|
console.log(`\nAudit log entry written: ${entry.entry_id}`);
|
|
65
83
|
console.log(`Consent basis: ${entry.consent_basis}`);
|
|
66
84
|
console.log(`Full results: ${outputPath}`);
|
|
@@ -93,19 +111,24 @@ function printResults(outcome) {
|
|
|
93
111
|
warnIfTruncated(outcome);
|
|
94
112
|
}
|
|
95
113
|
function warnIfTruncated(outcome) {
|
|
96
|
-
|
|
97
|
-
if (typeof appliedLimit !== "number" || outcome.items.length < appliedLimit) {
|
|
114
|
+
if (!isTruncated(outcome)) {
|
|
98
115
|
return;
|
|
99
116
|
}
|
|
117
|
+
const appliedLimit = outcome.platform === "reddit" ? outcome.queryParams.limit : outcome.queryParams.maxResults;
|
|
100
118
|
const cap = outcome.platform === "reddit" ? REDDIT_MAX_LIMIT : YOUTUBE_MAX_MAX_RESULTS;
|
|
101
119
|
const platformName = capitalize(outcome.platform);
|
|
102
|
-
if (appliedLimit < cap) {
|
|
120
|
+
if (typeof appliedLimit === "number" && appliedLimit < cap) {
|
|
103
121
|
console.error(`\nWarning: returned exactly ${outcome.items.length} results, the limit applied for this search -- more results may exist. Pass --max-results <n> (up to ${cap} for ${platformName}) to request more.`);
|
|
104
122
|
}
|
|
105
123
|
else {
|
|
106
124
|
console.error(`\nWarning: returned exactly ${outcome.items.length} results, ${platformName}'s per-request maximum -- more results may exist beyond what a single search call can return.`);
|
|
107
125
|
}
|
|
108
126
|
}
|
|
127
|
+
/** True when the result count exactly hits the applied limit, meaning more results may exist beyond what this single call returned. Shared by the human-readable warning and the --json `truncated` field so both reflect the same signal. */
|
|
128
|
+
function isTruncated(outcome) {
|
|
129
|
+
const appliedLimit = outcome.platform === "reddit" ? outcome.queryParams.limit : outcome.queryParams.maxResults;
|
|
130
|
+
return typeof appliedLimit === "number" && outcome.items.length >= appliedLimit;
|
|
131
|
+
}
|
|
109
132
|
function capitalize(value) {
|
|
110
133
|
return value.charAt(0).toUpperCase() + value.slice(1);
|
|
111
134
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/commands/search.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,SAAS,IAAI,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC1F,OAAO,EACL,aAAa,EACb,eAAe,IAAI,uBAAuB,GAC3C,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AAC1F,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AAC1F,OAAO,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/commands/search.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verify-log.d.ts","sourceRoot":"","sources":["../../src/commands/verify-log.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,oBAAoB;IACnC,IAAI,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"verify-log.d.ts","sourceRoot":"","sources":["../../src/commands/verify-log.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,oBAAoB;IACnC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC,CA6BnF"}
|
|
@@ -2,8 +2,17 @@ import { verifyAuditLogChain } from "../audit-log/chain-verifier.js";
|
|
|
2
2
|
import { DEFAULT_AUDIT_LOG_PATH } from "../audit-log/hash-chain-writer.js";
|
|
3
3
|
export async function runVerifyLogCommand(args) {
|
|
4
4
|
const logPath = args.path ?? DEFAULT_AUDIT_LOG_PATH;
|
|
5
|
-
|
|
5
|
+
if (!args.json) {
|
|
6
|
+
console.log(`Verifying ${logPath}...`);
|
|
7
|
+
}
|
|
6
8
|
const result = await verifyAuditLogChain(logPath);
|
|
9
|
+
if (!result.valid) {
|
|
10
|
+
process.exitCode = 1;
|
|
11
|
+
}
|
|
12
|
+
if (args.json) {
|
|
13
|
+
process.stdout.write(`${JSON.stringify({ logPath, ...result }, null, 2)}\n`);
|
|
14
|
+
return;
|
|
15
|
+
}
|
|
7
16
|
if (result.totalEntries === 0) {
|
|
8
17
|
console.log("No entries yet -- nothing to verify.");
|
|
9
18
|
return;
|
|
@@ -13,7 +22,6 @@ export async function runVerifyLogCommand(args) {
|
|
|
13
22
|
}
|
|
14
23
|
else {
|
|
15
24
|
console.error(`✗ Chain broken at entry ${result.brokenAtIndex} (${result.brokenAtEntryId ?? "unknown"}): ${result.reason}`);
|
|
16
|
-
process.exitCode = 1;
|
|
17
25
|
}
|
|
18
26
|
}
|
|
19
27
|
//# sourceMappingURL=verify-log.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verify-log.js","sourceRoot":"","sources":["../../src/commands/verify-log.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;
|
|
1
|
+
{"version":3,"file":"verify-log.js","sourceRoot":"","sources":["../../src/commands/verify-log.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AAO3E,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,IAA0B;IAClE,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,IAAI,sBAAsB,CAAC;IACpD,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QACf,OAAO,CAAC,GAAG,CAAC,aAAa,OAAO,KAAK,CAAC,CAAC;IACzC,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAElD,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QAClB,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IACvB,CAAC;IAED,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QACd,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,GAAG,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;QAC7E,OAAO;IACT,CAAC;IAED,IAAI,MAAM,CAAC,YAAY,KAAK,CAAC,EAAE,CAAC;QAC9B,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC;QACpD,OAAO;IACT,CAAC;IAED,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QACjB,OAAO,CAAC,GAAG,CAAC,mBAAmB,MAAM,CAAC,YAAY,2CAA2C,CAAC,CAAC;IACjG,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,KAAK,CACX,2BAA2B,MAAM,CAAC,aAAa,KAAK,MAAM,CAAC,eAAe,IAAI,SAAS,MAAM,MAAM,CAAC,MAAM,EAAE,CAC7G,CAAC;IACJ,CAAC;AACH,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "auditreach-cli",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.3",
|
|
4
4
|
"description": "Official-API-only, BYOK CLI for researching Reddit and YouTube with your own API keys and a tamper-evident, hash-chained audit log -- built for AI agents and compliance teams that can't rely on cookie-based scraping or shared credential pools.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|