@chainpatrol/cli 0.11.0 → 0.13.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/CHANGELOG.md +70 -0
- package/dist/{breakdown-MM5GSZKV.js → breakdown-B6QUGYI6.js} +21 -6
- package/dist/{check-GDKUHVQI.js → check-P5JJJNEX.js} +1 -1
- package/dist/{chunk-EPKNZRX6.js → chunk-BQDMAEQU.js} +51 -6
- package/dist/{chunk-37KYJWB3.js → chunk-DJVB73FL.js} +1 -1
- package/dist/{chunk-YXRFUYA6.js → chunk-NQT77IB7.js} +50 -8
- package/dist/{chunk-SX3L6NKR.js → chunk-OSRFCVBT.js} +129 -2
- package/dist/chunk-S37VFIZY.js +66 -0
- package/dist/cli.js +411 -86
- package/dist/{completions-62OW3B3Y.js → completions-6C6KG5DH.js} +1 -1
- package/dist/{configs-update-7X7657PB.js → configs-update-3ZVXGADV.js} +1 -1
- package/dist/{create-FL4QQTPN.js → create-DFH2G7RH.js} +1 -1
- package/dist/{drift-JKBHWWFU.js → drift-T74V2C3J.js} +1 -1
- package/dist/found-NXAWEIEK.js +59 -0
- package/dist/{healthcheck-EVQVPGWW.js → healthcheck-HZYEIIOR.js} +1 -1
- package/dist/{list-BLNIE4GL.js → list-23QQYAV5.js} +1 -1
- package/dist/list-EIVPGMWJ.js +82 -0
- package/dist/list-I7SBGA52.js +50 -0
- package/dist/{list-5DN6X3DP.js → list-IYJBKE2F.js} +1 -1
- package/dist/list-PBAXQSL5.js +85 -0
- package/dist/list-QUFY4IP7.js +146 -0
- package/dist/{list-JPG2ZSR4.js → list-WJQT2XLE.js} +7 -1
- package/dist/{list-ULHPOUJV.js → list-WX5G3IOF.js} +2 -2
- package/dist/list-YCT6DYDI.js +89 -0
- package/dist/{list-XDGU6SJQ.js → list-YRJPN4PI.js} +1 -1
- package/dist/{list-E5XNR2YG.js → list-ZFPML3ZR.js} +47 -3
- package/dist/{list-json-R2MIXADX.js → list-json-T2Z7NV7G.js} +1 -1
- package/dist/{organization-MJRKWC4Z.js → organization-GS5LFIWO.js} +19 -6
- package/dist/{run-EUVRC72M.js → run-BHEXWBAS.js} +2 -2
- package/dist/{run-2YZZGZYN.js → run-CJGN6TX4.js} +1 -1
- package/dist/{run-5E5EC3MP.js → run-MSO6IXEV.js} +1 -1
- package/dist/search-WPSKQGUS.js +71 -0
- package/dist/{setup-skill-HAENFIFQ.js → setup-skill-TPMTULHJ.js} +2 -2
- package/dist/{snapshot-3FUJICJJ.js → snapshot-ZWAHEG64.js} +1 -1
- package/dist/{summary-RVYQUKWV.js → summary-CV657J5V.js} +19 -6
- package/dist/{validate-UOVKEAJM.js → validate-SM5DD7I2.js} +1 -1
- package/dist/whoami-DH5HVLFN.js +69 -0
- package/package.json +1 -1
- package/dist/found-3WI4XQG4.js +0 -95
package/dist/cli.js
CHANGED
|
@@ -13,8 +13,8 @@ import {
|
|
|
13
13
|
getCliVersion,
|
|
14
14
|
isSkillInstalled,
|
|
15
15
|
readInstalledSkillVersion
|
|
16
|
-
} from "./chunk-
|
|
17
|
-
import "./chunk-
|
|
16
|
+
} from "./chunk-BQDMAEQU.js";
|
|
17
|
+
import "./chunk-NQT77IB7.js";
|
|
18
18
|
import {
|
|
19
19
|
DateTime
|
|
20
20
|
} from "./chunk-TFCNKBRC.js";
|
|
@@ -92,14 +92,31 @@ var HELP = {
|
|
|
92
92
|
usage: "chainpatrol logout"
|
|
93
93
|
},
|
|
94
94
|
asset: {
|
|
95
|
-
description: "Check
|
|
96
|
-
usage: "chainpatrol asset check
|
|
95
|
+
description: "Check asset status or list blocked/allowed assets across the global ChainPatrol blocklist.",
|
|
96
|
+
usage: "chainpatrol asset <check|list>",
|
|
97
97
|
examples: [
|
|
98
98
|
"chainpatrol asset check https://phish.example",
|
|
99
|
-
"chainpatrol asset
|
|
99
|
+
"chainpatrol asset list --asset-type URL --from 2026-05-01",
|
|
100
100
|
"chainpatrol --json asset check 0xabc123\u2026"
|
|
101
101
|
]
|
|
102
102
|
},
|
|
103
|
+
"asset list": {
|
|
104
|
+
description: "List assets in the global ChainPatrol blocklist for a given asset type. Defaults to BLOCKED assets updated in the last day. Use --from and --to to widen the window.",
|
|
105
|
+
usage: "chainpatrol asset list --asset-type <type> [--from ISO --to ISO] [filters]",
|
|
106
|
+
options: [
|
|
107
|
+
"--asset-type <type> Asset type: URL|ADDRESS|TWITTER|TELEGRAM|DISCORD|...",
|
|
108
|
+
"--type <type> Alias for --asset-type",
|
|
109
|
+
"--asset-status <s> Status filter: BLOCKED|ALLOWED|UNKNOWN (default BLOCKED)",
|
|
110
|
+
"--from <iso> Start date (YYYY-MM-DD)",
|
|
111
|
+
"--to <iso> End date (YYYY-MM-DD)",
|
|
112
|
+
"--per-page <n> Page size 1-10000 (default 100; --limit also accepted)",
|
|
113
|
+
"--next-page <cursor> Cursor returned from a previous response"
|
|
114
|
+
],
|
|
115
|
+
examples: [
|
|
116
|
+
"chainpatrol asset list --asset-type URL --from 2026-05-01 --to 2026-05-17",
|
|
117
|
+
"chainpatrol asset list --asset-type ADDRESS --per-page 500 --output csv"
|
|
118
|
+
]
|
|
119
|
+
},
|
|
103
120
|
"asset check": {
|
|
104
121
|
description: "Look up one or more assets (URL, domain, or crypto address) against the ChainPatrol blocklist and external feeds. Returns the aggregated status plus a per-source breakdown. Multiple assets can be passed as positional arguments or via repeated --asset; they are checked in parallel (concurrency 10).",
|
|
105
122
|
usage: "chainpatrol asset check <content> [<content> ...]",
|
|
@@ -127,17 +144,46 @@ var HELP = {
|
|
|
127
144
|
examples: ["chainpatrol configs list --org acme"]
|
|
128
145
|
},
|
|
129
146
|
detections: {
|
|
130
|
-
description: "Validate, run, and update detection configs.",
|
|
131
|
-
usage: "chainpatrol detections <healthcheck|validate|drift|run|configs>",
|
|
147
|
+
description: "Validate, run, list, and update detection configs and results.",
|
|
148
|
+
usage: "chainpatrol detections <healthcheck|validate|drift|run|list|configs>",
|
|
132
149
|
options: ["--org <slug> Organization slug"],
|
|
133
150
|
examples: [
|
|
134
151
|
"chainpatrol detections healthcheck --org acme --run",
|
|
135
152
|
"chainpatrol detections validate --org acme --min-results 5",
|
|
136
153
|
"chainpatrol detections drift --org acme --lookback-hours 168",
|
|
137
154
|
"chainpatrol detections run --org acme --source twitter",
|
|
155
|
+
"chainpatrol detections list --org acme --confidence medium,high",
|
|
138
156
|
"chainpatrol detections configs update --org acme --config-id 1 --enable"
|
|
139
157
|
]
|
|
140
158
|
},
|
|
159
|
+
"detections list": {
|
|
160
|
+
description: "List recent threat detection results for an organization. Returns human-readable confidence levels (none/low/medium/high) and report status. Filter parity with the app's detections view: source, confidence, asset status/type, brand, liveness, watchlist, reported, country, and deleted items.",
|
|
161
|
+
usage: "chainpatrol detections list --org <slug> [filters]",
|
|
162
|
+
options: [
|
|
163
|
+
"--org <slug> Organization slug",
|
|
164
|
+
"--limit <n> Page size 1-100 (default 50)",
|
|
165
|
+
"--cursor <n> Pagination cursor",
|
|
166
|
+
"--search <q> Search by threat content",
|
|
167
|
+
"--source <list> Comma list of detection source keys",
|
|
168
|
+
"--confidence <list> Comma list: none|low|medium|high",
|
|
169
|
+
"--asset-status <list> Comma list: BLOCKED|ALLOWED|UNKNOWN",
|
|
170
|
+
"--asset-type <list> Comma list of asset types",
|
|
171
|
+
"--brand <ids> Comma list of brand IDs",
|
|
172
|
+
"--liveness <list> Comma list: ALIVE|DEAD|UNKNOWN",
|
|
173
|
+
"--watchlist <list> Comma list: ENABLED|DISABLED",
|
|
174
|
+
"--reported <list> Comma list: reported|not_reported",
|
|
175
|
+
"--country-code <list> Comma list of 2-letter ISO country codes (e.g. US,GB)",
|
|
176
|
+
"--only-deleted Return only soft-deleted detections. Without this flag the endpoint returns both deleted and non-deleted (existing public-API behavior).",
|
|
177
|
+
"--from <iso> Start date (ISO 8601)",
|
|
178
|
+
"--to <iso> End date (ISO 8601)"
|
|
179
|
+
],
|
|
180
|
+
examples: [
|
|
181
|
+
"chainpatrol detections list --org acme --confidence medium,high",
|
|
182
|
+
"chainpatrol detections list --org acme --source twitter --liveness ALIVE",
|
|
183
|
+
"chainpatrol detections list --org acme --reported not_reported --watchlist ENABLED",
|
|
184
|
+
"chainpatrol detections list --org acme --brand 12,34 --country-code US,GB"
|
|
185
|
+
]
|
|
186
|
+
},
|
|
141
187
|
"detections healthcheck": {
|
|
142
188
|
description: "Run a health check across all detection configs for an org.",
|
|
143
189
|
usage: "chainpatrol detections healthcheck --org <slug> [options]",
|
|
@@ -217,58 +263,75 @@ var HELP = {
|
|
|
217
263
|
]
|
|
218
264
|
},
|
|
219
265
|
"metrics organization": {
|
|
220
|
-
description: "Get organization metrics via the documented GET /organization/metrics endpoint. Works with both API key auth (org derived from key) and session auth (pass --org).",
|
|
221
|
-
usage: "chainpatrol metrics organization [--org <slug>] [--from ISO --to ISO]",
|
|
266
|
+
description: "Get organization metrics via the documented GET /organization/metrics endpoint. Works with both API key auth (org derived from key) and session auth (pass --org). Defaults to the trailing 3 months if no date range is given.",
|
|
267
|
+
usage: "chainpatrol metrics organization [--org <slug>] [--from ISO --to ISO|--this-week]",
|
|
222
268
|
options: [
|
|
223
269
|
"--org <slug> Organization slug (omit when using an API key)",
|
|
224
270
|
"--brand-slug <slug> Filter by brand slug (requires brands-metrics flag)",
|
|
225
271
|
"--from <iso> Start date (ISO 8601, e.g. 2026-01-01)",
|
|
226
|
-
"--to <iso> End date (ISO 8601)"
|
|
272
|
+
"--to <iso> End date (ISO 8601)",
|
|
273
|
+
"--this-week Use the current ISO week (overrides default)"
|
|
227
274
|
],
|
|
228
275
|
examples: [
|
|
229
|
-
"chainpatrol metrics organization --org acme",
|
|
276
|
+
"chainpatrol metrics organization --org acme # defaults to last 3 months",
|
|
230
277
|
"chainpatrol metrics organization --org acme --from 2026-01-01 --to 2026-02-01",
|
|
231
278
|
"CHAINPATROL_API_KEY=... chainpatrol metrics organization --json"
|
|
232
279
|
]
|
|
233
280
|
},
|
|
234
281
|
"metrics summary": {
|
|
235
|
-
description: "Summary metrics for an org over a date range.",
|
|
236
|
-
usage: "chainpatrol metrics summary --org <slug> [--from ISO --to ISO]",
|
|
282
|
+
description: "Summary metrics for an org over a date range. Defaults to the trailing 3 months if no date range is given.",
|
|
283
|
+
usage: "chainpatrol metrics summary --org <slug> [--from ISO --to ISO|--this-week]",
|
|
237
284
|
options: [
|
|
238
285
|
"--org <slug> Organization slug",
|
|
239
286
|
"--from <iso> Start date (ISO 8601)",
|
|
240
287
|
"--to <iso> End date (ISO 8601)",
|
|
288
|
+
"--this-week Use the current ISO week (overrides default)",
|
|
241
289
|
"--brand <ids> Comma-separated brand IDs"
|
|
242
290
|
]
|
|
243
291
|
},
|
|
244
292
|
"metrics found": {
|
|
245
|
-
description: "Count of newly found threats over a date range.",
|
|
293
|
+
description: "Count of newly found threats over a date range. Defaults to the trailing 3 months if no date range is given.",
|
|
246
294
|
usage: "chainpatrol metrics found --org <slug> [--from ISO --to ISO|--this-week]",
|
|
247
295
|
options: [
|
|
248
296
|
"--org <slug> Organization slug",
|
|
249
297
|
"--from <iso> Start date (ISO 8601)",
|
|
250
298
|
"--to <iso> End date (ISO 8601)",
|
|
251
|
-
"--this-week Use the current week",
|
|
299
|
+
"--this-week Use the current ISO week (overrides default)",
|
|
252
300
|
"--brand <ids> Comma-separated brand IDs"
|
|
253
301
|
]
|
|
254
302
|
},
|
|
255
303
|
"metrics breakdown": {
|
|
256
|
-
description: "Threat counts grouped by axis (day, type, brand).",
|
|
257
|
-
usage: "chainpatrol metrics breakdown --org <slug> --by <day|type|brand>",
|
|
304
|
+
description: "Threat counts grouped by axis (day, type, brand). Defaults to the trailing 3 months if no date range is given.",
|
|
305
|
+
usage: "chainpatrol metrics breakdown --org <slug> --by <day|type|brand> [--from ISO --to ISO|--this-week]",
|
|
258
306
|
options: [
|
|
259
307
|
"--org <slug> Organization slug",
|
|
260
308
|
"--by <axis> day|type|brand (required)",
|
|
261
309
|
"--from <iso> Start date",
|
|
262
310
|
"--to <iso> End date",
|
|
311
|
+
"--this-week Use the current ISO week (overrides default)",
|
|
263
312
|
"--brand <ids> Comma-separated brand IDs"
|
|
264
313
|
]
|
|
265
314
|
},
|
|
266
315
|
reports: {
|
|
267
|
-
description: "Create and
|
|
268
|
-
usage: "chainpatrol reports <create|list>",
|
|
316
|
+
description: "Create, list, and search reports from the terminal.",
|
|
317
|
+
usage: "chainpatrol reports <create|list|search>",
|
|
269
318
|
examples: [
|
|
270
319
|
'chainpatrol reports create --org acme --title "Phish" --asset "https://bad.site:BLOCKED"',
|
|
271
|
-
"chainpatrol reports list --org acme --limit 5"
|
|
320
|
+
"chainpatrol reports list --org acme --limit 5",
|
|
321
|
+
"chainpatrol reports search https://bad.site"
|
|
322
|
+
]
|
|
323
|
+
},
|
|
324
|
+
"reports search": {
|
|
325
|
+
description: "Search existing reports in your organization by asset contents. Useful to check for an existing report before creating a duplicate.",
|
|
326
|
+
usage: "chainpatrol reports search <content> [<content> ...]",
|
|
327
|
+
options: [
|
|
328
|
+
"--asset <content> Asset content (repeatable; alternative to positional args)",
|
|
329
|
+
"--reported-by-customer Match only customer-submitted reports",
|
|
330
|
+
"--no-reported-by-customer Match only non-customer reports"
|
|
331
|
+
],
|
|
332
|
+
examples: [
|
|
333
|
+
"chainpatrol reports search https://bad.site",
|
|
334
|
+
"chainpatrol reports search https://a.site https://b.site --reported-by-customer"
|
|
272
335
|
]
|
|
273
336
|
},
|
|
274
337
|
"reports create": {
|
|
@@ -291,16 +354,34 @@ var HELP = {
|
|
|
291
354
|
]
|
|
292
355
|
},
|
|
293
356
|
"reports list": {
|
|
294
|
-
description: "List recent reports for an organization.",
|
|
295
|
-
usage: "chainpatrol reports list --org <slug> [
|
|
357
|
+
description: "List recent reports for an organization with the same level of filtering as the app's Reports view.",
|
|
358
|
+
usage: "chainpatrol reports list --org <slug> [filters]",
|
|
296
359
|
options: [
|
|
297
|
-
"--org <slug>
|
|
298
|
-
"--limit <n>
|
|
299
|
-
"--cursor <id>
|
|
300
|
-
"--status <s>
|
|
301
|
-
"--search <q>
|
|
302
|
-
"--
|
|
303
|
-
"--
|
|
360
|
+
"--org <slug> Organization slug",
|
|
361
|
+
"--limit <n> Page size (1-20)",
|
|
362
|
+
"--cursor <id> Pagination cursor",
|
|
363
|
+
"--status <s> Filter by report status: TODO|IN_PROGRESS|CLOSED",
|
|
364
|
+
"--search <q> Search reports by title/description",
|
|
365
|
+
"--reporter-query <q> Search reports by reporter name (legacy)",
|
|
366
|
+
"--reported-by-customer Show only customer-submitted reports",
|
|
367
|
+
"--no-reported-by-customer Show only non-customer reports",
|
|
368
|
+
"--exclude-automation Exclude reports submitted by automation",
|
|
369
|
+
"--only-rejected Only reports whose latest review decision was REJECT",
|
|
370
|
+
"--review-status <list> Comma list: APPROVE|REJECT|SKIP|ESCALATE",
|
|
371
|
+
"--asset-type <list> Comma list of asset types (URL,TWITTER,...)",
|
|
372
|
+
"--brand <ids> Comma list of brand IDs",
|
|
373
|
+
"--country-code <list> Comma list of 2-letter ISO country codes",
|
|
374
|
+
"--reviewed-by-user-id <n> Only reports reviewed by a specific user ID",
|
|
375
|
+
"--from <iso> Filter by Report.createdAt >= ISO date",
|
|
376
|
+
"--to <iso> Filter by Report.createdAt <= ISO date",
|
|
377
|
+
"--updated-from <iso> Filter by Report.updatedAt >= ISO date",
|
|
378
|
+
"--updated-to <iso> Filter by Report.updatedAt <= ISO date"
|
|
379
|
+
],
|
|
380
|
+
examples: [
|
|
381
|
+
"chainpatrol reports list --org acme --status TODO --review-status REJECT",
|
|
382
|
+
"chainpatrol reports list --org acme --exclude-automation --reported-by-customer",
|
|
383
|
+
"chainpatrol reports list --org acme --from 2026-05-01 --updated-from 2026-05-10",
|
|
384
|
+
"chainpatrol reports list --org acme --brand 12,34 --country-code US,GB"
|
|
304
385
|
]
|
|
305
386
|
},
|
|
306
387
|
queues: {
|
|
@@ -311,6 +392,32 @@ var HELP = {
|
|
|
311
392
|
"chainpatrol queues snapshot --all"
|
|
312
393
|
]
|
|
313
394
|
},
|
|
395
|
+
threats: {
|
|
396
|
+
description: "List confirmed threats blocked by ChainPatrol.",
|
|
397
|
+
usage: "chainpatrol threats list [filters]",
|
|
398
|
+
examples: [
|
|
399
|
+
"chainpatrol threats list",
|
|
400
|
+
"chainpatrol threats list --from 2026-05-01 --asset-type URL"
|
|
401
|
+
]
|
|
402
|
+
},
|
|
403
|
+
"threats list": {
|
|
404
|
+
description: "List threats blocked by ChainPatrol. Org is derived from your API key. Defaults to the last 1 day. Use --from and --to to widen the window.",
|
|
405
|
+
usage: "chainpatrol threats list [filters]",
|
|
406
|
+
options: [
|
|
407
|
+
"--query <text> Search threat content (substring)",
|
|
408
|
+
"--from <iso> Start date (YYYY-MM-DD)",
|
|
409
|
+
"--to <iso> End date (YYYY-MM-DD)",
|
|
410
|
+
"--asset-type <list> Comma list (URL,TWITTER,TELEGRAM,...)",
|
|
411
|
+
"--sort-by <key> Sort key (e.g. blockedAt)",
|
|
412
|
+
"--sort-direction <dir> asc|desc",
|
|
413
|
+
"--per-page <n> Page size 1-100 (default 10)",
|
|
414
|
+
"--next-page <cursor> Cursor returned from a previous response"
|
|
415
|
+
],
|
|
416
|
+
examples: [
|
|
417
|
+
"chainpatrol threats list --from 2026-05-01 --asset-type URL",
|
|
418
|
+
"CHAINPATROL_API_KEY=... chainpatrol threats list --json"
|
|
419
|
+
]
|
|
420
|
+
},
|
|
314
421
|
takedowns: {
|
|
315
422
|
description: "List individual takedown records for an organization.",
|
|
316
423
|
usage: "chainpatrol takedowns list [--org <slug>] [filters]",
|
|
@@ -321,25 +428,32 @@ var HELP = {
|
|
|
321
428
|
]
|
|
322
429
|
},
|
|
323
430
|
"takedowns list": {
|
|
324
|
-
description: "List takedowns for an organization. Defaults to takedowns updated in the last 30 days. Works with both API key auth (org derived from key) and session auth (pass --org).",
|
|
431
|
+
description: "List takedowns for an organization with the same level of filtering as the app's Takedowns view. Defaults to takedowns updated in the last 30 days. Works with both API key auth (org derived from key) and session auth (pass --org).",
|
|
325
432
|
usage: "chainpatrol takedowns list [--org <slug>] [filters]",
|
|
326
433
|
options: [
|
|
327
|
-
"--org <slug>
|
|
328
|
-
"--query <text>
|
|
329
|
-
"--from <iso>
|
|
330
|
-
"--to <iso>
|
|
331
|
-
"--
|
|
332
|
-
"--
|
|
333
|
-
"--
|
|
334
|
-
"--
|
|
335
|
-
"--
|
|
336
|
-
"--
|
|
337
|
-
"--
|
|
434
|
+
"--org <slug> Organization slug (omit when using an API key)",
|
|
435
|
+
"--query <text> Search asset content (substring match)",
|
|
436
|
+
"--from <iso> Filter by Takedown.updatedAt >= ISO date",
|
|
437
|
+
"--to <iso> Filter by Takedown.updatedAt <= ISO date",
|
|
438
|
+
"--started-from <iso> Filter by `started at` >= ISO date (earliest IN_PROGRESS event)",
|
|
439
|
+
"--started-to <iso> Filter by `started at` <= ISO date",
|
|
440
|
+
"--asset-type <list> Comma list (URL,TWITTER,TELEGRAM,...)",
|
|
441
|
+
"--takedown-status <list> Comma list (TODO,IN_PROGRESS,COMPLETED,CANCELLED,PENDING_INPUT,...)",
|
|
442
|
+
"--liveness-status <list> Comma list (ALIVE,DEAD,UNKNOWN)",
|
|
443
|
+
"--brand <ids> Comma list of brand IDs",
|
|
444
|
+
"--assignee <ids> Comma list of assignee user IDs",
|
|
445
|
+
"--hide-automated-takedowns Hide takedowns handled by the platform-takedown automation",
|
|
446
|
+
"--hide-automated-liveness-checks Hide takedowns whose asset is checked for liveness automatically",
|
|
447
|
+
"--sort-by <key> Sort key: updatedAt|createdAt|takedownStatus|takedownUpdatedAt|assigneeId|brandId",
|
|
448
|
+
"--sort-direction <dir> asc|desc (default desc)",
|
|
449
|
+
"--per-page <n> Page size 1-100 (default 10; --limit also accepted)",
|
|
450
|
+
"--next-page <cursor> Cursor returned from a previous response"
|
|
338
451
|
],
|
|
339
452
|
examples: [
|
|
340
453
|
"chainpatrol takedowns list --org acme --takedown-status TODO,IN_PROGRESS",
|
|
341
454
|
"chainpatrol takedowns list --org acme --asset-type URL --liveness-status ALIVE",
|
|
342
|
-
"chainpatrol takedowns list --org acme --
|
|
455
|
+
"chainpatrol takedowns list --org acme --brand 12,34 --assignee 7",
|
|
456
|
+
"chainpatrol takedowns list --org acme --started-from 2026-04-01 --hide-automated-takedowns",
|
|
343
457
|
"CHAINPATROL_API_KEY=... chainpatrol takedowns list --json"
|
|
344
458
|
]
|
|
345
459
|
},
|
|
@@ -353,13 +467,43 @@ var HELP = {
|
|
|
353
467
|
]
|
|
354
468
|
},
|
|
355
469
|
orgs: {
|
|
356
|
-
description: "List organizations accessible to you
|
|
357
|
-
usage: "chainpatrol orgs list
|
|
470
|
+
description: "List organizations, their assets, and asset groups. Top-level `orgs list` lists organizations accessible to you; the nested subcommands operate on the org tied to your API key.",
|
|
471
|
+
usage: "chainpatrol orgs <list|assets list|asset-groups list>",
|
|
358
472
|
examples: [
|
|
359
473
|
"chainpatrol orgs list",
|
|
360
|
-
"chainpatrol orgs list --
|
|
474
|
+
"chainpatrol orgs assets list --asset-type URL",
|
|
475
|
+
"chainpatrol orgs asset-groups list"
|
|
476
|
+
]
|
|
477
|
+
},
|
|
478
|
+
"orgs assets": {
|
|
479
|
+
description: "List assets in your organization's allowlist.",
|
|
480
|
+
usage: "chainpatrol orgs assets list [filters]"
|
|
481
|
+
},
|
|
482
|
+
"orgs assets list": {
|
|
483
|
+
description: "List assets belonging to your organization's allowlist. Org is derived from your API key. Supports filtering by type, group, and search query.",
|
|
484
|
+
usage: "chainpatrol orgs assets list [filters]",
|
|
485
|
+
options: [
|
|
486
|
+
"--asset-type <type> Filter by asset type (URL, ADDRESS, ...)",
|
|
487
|
+
"--type <type> Alias for --asset-type",
|
|
488
|
+
"--group-id <n> Filter by group ID. Use -1 for ungrouped assets only",
|
|
489
|
+
"--query <text> Search asset content (substring)",
|
|
490
|
+
"--per-page <n> Page size 1-1000 (default 100; --limit also accepted)",
|
|
491
|
+
"--next-page <cursor> Cursor returned from a previous response"
|
|
492
|
+
],
|
|
493
|
+
examples: [
|
|
494
|
+
"chainpatrol orgs assets list --asset-type URL",
|
|
495
|
+
"chainpatrol orgs assets list --group-id 12 --per-page 250 --output csv"
|
|
361
496
|
]
|
|
362
497
|
},
|
|
498
|
+
"orgs asset-groups": {
|
|
499
|
+
description: "List asset groups in your organization.",
|
|
500
|
+
usage: "chainpatrol orgs asset-groups list"
|
|
501
|
+
},
|
|
502
|
+
"orgs asset-groups list": {
|
|
503
|
+
description: "List asset groups belonging to your organization with per-group asset counts. Org is derived from your API key.",
|
|
504
|
+
usage: "chainpatrol orgs asset-groups list",
|
|
505
|
+
examples: ["chainpatrol orgs asset-groups list --output csv"]
|
|
506
|
+
},
|
|
363
507
|
"orgs list": {
|
|
364
508
|
description: "List organizations with their subscription status and per-service active/automated flags. All filters compose with AND.",
|
|
365
509
|
usage: "chainpatrol orgs list [filters]",
|
|
@@ -438,6 +582,15 @@ var HELP = {
|
|
|
438
582
|
description: "Output a shell completion script.",
|
|
439
583
|
usage: "chainpatrol completions <zsh|bash>",
|
|
440
584
|
examples: ["chainpatrol completions zsh > _chainpatrol"]
|
|
585
|
+
},
|
|
586
|
+
whoami: {
|
|
587
|
+
description: "Show the current authenticated identity. With an API key, validates the key and reports the bound organization. With a session token, returns the logged-in user.",
|
|
588
|
+
usage: "chainpatrol whoami",
|
|
589
|
+
examples: [
|
|
590
|
+
"chainpatrol whoami",
|
|
591
|
+
"chainpatrol whoami --json",
|
|
592
|
+
"CHAINPATROL_API_KEY=... chainpatrol whoami"
|
|
593
|
+
]
|
|
441
594
|
}
|
|
442
595
|
};
|
|
443
596
|
function getCommandHelp(command2, subcommand2) {
|
|
@@ -462,15 +615,17 @@ function getTopLevelHelp() {
|
|
|
462
615
|
" Commands",
|
|
463
616
|
" login Authenticate with ChainPatrol",
|
|
464
617
|
" logout Clear stored credentials",
|
|
465
|
-
"
|
|
618
|
+
" whoami Show the current authenticated identity",
|
|
619
|
+
" asset Check or list assets in the global ChainPatrol blocklist",
|
|
466
620
|
" configs Manage detection configs",
|
|
467
|
-
" detections Validate, run, update detection configs",
|
|
621
|
+
" detections Validate, run, list, update detection configs and results",
|
|
468
622
|
" healthchecks List and run organization healthchecks",
|
|
469
623
|
" metrics Query organization metrics and breakdowns",
|
|
470
|
-
" reports Create and
|
|
624
|
+
" reports Create, list, and search reports from terminal",
|
|
471
625
|
" queues Snapshot operations review/takedown queues",
|
|
472
626
|
" takedowns List individual takedown records",
|
|
473
|
-
"
|
|
627
|
+
" threats List confirmed threats blocked by ChainPatrol",
|
|
628
|
+
" orgs List organizations, org assets, and asset groups",
|
|
474
629
|
" presets Run saved workflows for common jobs",
|
|
475
630
|
" setup Install Claude Code skill and shell completions",
|
|
476
631
|
" uninstall Remove Claude Code skill and shell completions",
|
|
@@ -642,11 +797,13 @@ var COMMANDS = [
|
|
|
642
797
|
"reports",
|
|
643
798
|
"queues",
|
|
644
799
|
"takedowns",
|
|
800
|
+
"threats",
|
|
645
801
|
"orgs",
|
|
646
802
|
"presets",
|
|
647
803
|
"setup",
|
|
648
804
|
"uninstall",
|
|
649
805
|
"completions",
|
|
806
|
+
"whoami",
|
|
650
807
|
"help"
|
|
651
808
|
];
|
|
652
809
|
function levenshtein(a, b) {
|
|
@@ -733,6 +890,27 @@ ${getTopLevelHelp()}
|
|
|
733
890
|
sortDirection: { type: "string" },
|
|
734
891
|
perPage: { type: "number" },
|
|
735
892
|
brandSlug: { type: "string" },
|
|
893
|
+
type: { type: "string" },
|
|
894
|
+
groupId: { type: "number" },
|
|
895
|
+
confidence: { type: "string" },
|
|
896
|
+
assetStatus: { type: "string" },
|
|
897
|
+
liveness: { type: "string" },
|
|
898
|
+
watchlist: { type: "string" },
|
|
899
|
+
reported: { type: "string" },
|
|
900
|
+
countryCode: { type: "string" },
|
|
901
|
+
onlyDeleted: { type: "boolean", default: false },
|
|
902
|
+
assignee: { type: "string" },
|
|
903
|
+
startedFrom: { type: "string" },
|
|
904
|
+
startedTo: { type: "string" },
|
|
905
|
+
hideAutomatedTakedowns: { type: "boolean" },
|
|
906
|
+
hideAutomatedLivenessChecks: { type: "boolean" },
|
|
907
|
+
reporterQuery: { type: "string" },
|
|
908
|
+
excludeAutomation: { type: "boolean" },
|
|
909
|
+
onlyRejected: { type: "boolean" },
|
|
910
|
+
reviewStatus: { type: "string" },
|
|
911
|
+
reviewedByUserId: { type: "number" },
|
|
912
|
+
updatedFrom: { type: "string" },
|
|
913
|
+
updatedTo: { type: "string" },
|
|
736
914
|
help: { type: "boolean", shortFlag: "h" },
|
|
737
915
|
version: { type: "boolean", shortFlag: "V" },
|
|
738
916
|
quiet: { type: "boolean", default: false, shortFlag: "q" },
|
|
@@ -823,10 +1001,7 @@ function getConfigPatchFromSetFlags() {
|
|
|
823
1001
|
return patch;
|
|
824
1002
|
}
|
|
825
1003
|
function parseBrandIds() {
|
|
826
|
-
|
|
827
|
-
const values = cli.flags.brand.split(",").map((item) => item.trim()).filter(Boolean);
|
|
828
|
-
const ids = values.map((value) => Number(value)).filter((value) => !Number.isNaN(value));
|
|
829
|
-
return ids.length > 0 ? ids : void 0;
|
|
1004
|
+
return parseIntList(cli.flags.brand, "brand");
|
|
830
1005
|
}
|
|
831
1006
|
function parseAssetInputs() {
|
|
832
1007
|
return getRepeatedFlag("asset");
|
|
@@ -836,18 +1011,32 @@ function parseCsvList(value) {
|
|
|
836
1011
|
const items = value.split(",").map((item) => item.trim()).filter(Boolean);
|
|
837
1012
|
return items.length > 0 ? items : void 0;
|
|
838
1013
|
}
|
|
1014
|
+
function parseIntList(value, flagName) {
|
|
1015
|
+
const items = parseCsvList(value);
|
|
1016
|
+
if (!items) return void 0;
|
|
1017
|
+
const parsed = items.map((item) => {
|
|
1018
|
+
const n = Number(item);
|
|
1019
|
+
if (!Number.isInteger(n) || n <= 0) {
|
|
1020
|
+
throw new Error(
|
|
1021
|
+
`--${flagName} expects positive integers; got '${item}'. Use comma-separated IDs (e.g. --${flagName} 12,34).`
|
|
1022
|
+
);
|
|
1023
|
+
}
|
|
1024
|
+
return n;
|
|
1025
|
+
});
|
|
1026
|
+
return parsed;
|
|
1027
|
+
}
|
|
839
1028
|
function parseAttachmentUrls() {
|
|
840
1029
|
const values = getRepeatedFlag("attachment-url").filter(Boolean);
|
|
841
1030
|
return values.length > 0 ? values : void 0;
|
|
842
1031
|
}
|
|
843
1032
|
async function handleConfigsList(org) {
|
|
844
1033
|
if (jsonMode) {
|
|
845
|
-
const { listConfigsJson } = await import("./list-json-
|
|
1034
|
+
const { listConfigsJson } = await import("./list-json-T2Z7NV7G.js");
|
|
846
1035
|
await listConfigsJson({ org });
|
|
847
1036
|
return;
|
|
848
1037
|
}
|
|
849
1038
|
const { render } = await import("ink");
|
|
850
|
-
const { default: ConfigsList } = await import("./list-
|
|
1039
|
+
const { default: ConfigsList } = await import("./list-IYJBKE2F.js");
|
|
851
1040
|
const { default: React } = await import("react");
|
|
852
1041
|
render(React.createElement(ConfigsList, { org }));
|
|
853
1042
|
}
|
|
@@ -947,7 +1136,7 @@ async function main() {
|
|
|
947
1136
|
const positionals = cli.input.slice(2);
|
|
948
1137
|
const flagAssets = parseAssetInputs();
|
|
949
1138
|
const contents = [...positionals, ...flagAssets];
|
|
950
|
-
const { runAssetCheck } = await import("./check-
|
|
1139
|
+
const { runAssetCheck } = await import("./check-P5JJJNEX.js");
|
|
951
1140
|
await runAssetCheck({
|
|
952
1141
|
contents,
|
|
953
1142
|
json: jsonMode,
|
|
@@ -956,15 +1145,29 @@ async function main() {
|
|
|
956
1145
|
});
|
|
957
1146
|
break;
|
|
958
1147
|
}
|
|
959
|
-
|
|
1148
|
+
if (subcommand === "list") {
|
|
1149
|
+
const { runAssetList } = await import("./list-PBAXQSL5.js");
|
|
1150
|
+
await runAssetList({
|
|
1151
|
+
type: cli.flags.type ?? cli.flags.assetType,
|
|
1152
|
+
status: cli.flags.assetStatus ?? cli.flags.status,
|
|
1153
|
+
from: cli.flags.from,
|
|
1154
|
+
to: cli.flags.to,
|
|
1155
|
+
perPage: cli.flags.perPage ?? cli.flags.limit,
|
|
1156
|
+
nextPage: cli.flags.nextPage,
|
|
1157
|
+
json: jsonMode,
|
|
1158
|
+
outputFormat: cliContext.outputFormat
|
|
1159
|
+
});
|
|
1160
|
+
break;
|
|
1161
|
+
}
|
|
1162
|
+
const hint = subcommand ? suggest(subcommand, ["check", "list"]) : null;
|
|
960
1163
|
throw new Error(
|
|
961
|
-
subcommand ? `Unknown subcommand: asset ${subcommand}${hint ? `. Did you mean "asset ${hint}"?` : ""}` : "Usage: chainpatrol asset check
|
|
1164
|
+
subcommand ? `Unknown subcommand: asset ${subcommand}${hint ? `. Did you mean "asset ${hint}"?` : ""}` : "Usage: chainpatrol asset <check|list>"
|
|
962
1165
|
);
|
|
963
1166
|
}
|
|
964
1167
|
case "detections": {
|
|
965
1168
|
const org = await resolveOrg();
|
|
966
1169
|
if (subcommand === "healthcheck") {
|
|
967
|
-
const { runDetectionsHealthcheck } = await import("./healthcheck-
|
|
1170
|
+
const { runDetectionsHealthcheck } = await import("./healthcheck-HZYEIIOR.js");
|
|
968
1171
|
await runDetectionsHealthcheck({
|
|
969
1172
|
org,
|
|
970
1173
|
source: cli.flags.source,
|
|
@@ -979,7 +1182,7 @@ async function main() {
|
|
|
979
1182
|
break;
|
|
980
1183
|
}
|
|
981
1184
|
if (subcommand === "validate") {
|
|
982
|
-
const { runDetectionsValidate } = await import("./validate-
|
|
1185
|
+
const { runDetectionsValidate } = await import("./validate-SM5DD7I2.js");
|
|
983
1186
|
await runDetectionsValidate({
|
|
984
1187
|
org,
|
|
985
1188
|
source: cli.flags.source,
|
|
@@ -994,7 +1197,7 @@ async function main() {
|
|
|
994
1197
|
break;
|
|
995
1198
|
}
|
|
996
1199
|
if (subcommand === "drift") {
|
|
997
|
-
const { runDetectionsDrift } = await import("./drift-
|
|
1200
|
+
const { runDetectionsDrift } = await import("./drift-T74V2C3J.js");
|
|
998
1201
|
await runDetectionsDrift({
|
|
999
1202
|
org,
|
|
1000
1203
|
source: cli.flags.source,
|
|
@@ -1008,7 +1211,7 @@ async function main() {
|
|
|
1008
1211
|
break;
|
|
1009
1212
|
}
|
|
1010
1213
|
if (subcommand === "run") {
|
|
1011
|
-
const { runDetectionsRun } = await import("./run-
|
|
1214
|
+
const { runDetectionsRun } = await import("./run-MSO6IXEV.js");
|
|
1012
1215
|
await runDetectionsRun({
|
|
1013
1216
|
org,
|
|
1014
1217
|
configId: cli.flags.configId,
|
|
@@ -1021,13 +1224,37 @@ async function main() {
|
|
|
1021
1224
|
});
|
|
1022
1225
|
break;
|
|
1023
1226
|
}
|
|
1227
|
+
if (subcommand === "list") {
|
|
1228
|
+
const { runDetectionsList } = await import("./list-QUFY4IP7.js");
|
|
1229
|
+
await runDetectionsList({
|
|
1230
|
+
org,
|
|
1231
|
+
cursor: cli.flags.cursor,
|
|
1232
|
+
limit: cli.flags.limit,
|
|
1233
|
+
query: cli.flags.search ?? cli.flags.query,
|
|
1234
|
+
from: cli.flags.from,
|
|
1235
|
+
to: cli.flags.to,
|
|
1236
|
+
sources: parseCsvList(cli.flags.source),
|
|
1237
|
+
confidence: parseCsvList(cli.flags.confidence),
|
|
1238
|
+
assetStatus: parseCsvList(cli.flags.assetStatus),
|
|
1239
|
+
assetType: parseCsvList(cli.flags.assetType),
|
|
1240
|
+
brandIds: parseBrandIds(),
|
|
1241
|
+
liveness: parseCsvList(cli.flags.liveness),
|
|
1242
|
+
watchlist: parseCsvList(cli.flags.watchlist),
|
|
1243
|
+
reported: parseCsvList(cli.flags.reported),
|
|
1244
|
+
countryCodes: parseCsvList(cli.flags.countryCode),
|
|
1245
|
+
onlyDeleted: cli.flags.onlyDeleted,
|
|
1246
|
+
json: jsonMode,
|
|
1247
|
+
outputFormat: cliContext.outputFormat
|
|
1248
|
+
});
|
|
1249
|
+
break;
|
|
1250
|
+
}
|
|
1024
1251
|
if (subcommand === "configs") {
|
|
1025
1252
|
if (action === "list") {
|
|
1026
1253
|
await handleConfigsList(org);
|
|
1027
1254
|
break;
|
|
1028
1255
|
}
|
|
1029
1256
|
if (action === "run") {
|
|
1030
|
-
const { runDetectionsRun } = await import("./run-
|
|
1257
|
+
const { runDetectionsRun } = await import("./run-MSO6IXEV.js");
|
|
1031
1258
|
await runDetectionsRun({
|
|
1032
1259
|
org,
|
|
1033
1260
|
configId: cli.flags.configId,
|
|
@@ -1045,7 +1272,7 @@ async function main() {
|
|
|
1045
1272
|
throw new Error("detections configs update requires --config-id");
|
|
1046
1273
|
}
|
|
1047
1274
|
const configPatch = getConfigPatchFromSetFlags();
|
|
1048
|
-
const { runDetectionsConfigsUpdate } = await import("./configs-update-
|
|
1275
|
+
const { runDetectionsConfigsUpdate } = await import("./configs-update-3ZVXGADV.js");
|
|
1049
1276
|
await runDetectionsConfigsUpdate({
|
|
1050
1277
|
org,
|
|
1051
1278
|
configId: cli.flags.configId,
|
|
@@ -1064,20 +1291,28 @@ async function main() {
|
|
|
1064
1291
|
break;
|
|
1065
1292
|
}
|
|
1066
1293
|
}
|
|
1067
|
-
const hint = subcommand ? suggest(subcommand, [
|
|
1294
|
+
const hint = subcommand ? suggest(subcommand, [
|
|
1295
|
+
"healthcheck",
|
|
1296
|
+
"validate",
|
|
1297
|
+
"drift",
|
|
1298
|
+
"run",
|
|
1299
|
+
"list",
|
|
1300
|
+
"configs"
|
|
1301
|
+
]) : null;
|
|
1068
1302
|
throw new Error(
|
|
1069
|
-
subcommand ? `Unknown subcommand: detections ${subcommand}${hint ? `. Did you mean "detections ${hint}"?` : ""}` : "Usage: chainpatrol detections <healthcheck|validate|drift|run|configs>"
|
|
1303
|
+
subcommand ? `Unknown subcommand: detections ${subcommand}${hint ? `. Did you mean "detections ${hint}"?` : ""}` : "Usage: chainpatrol detections <healthcheck|validate|drift|run|list|configs>"
|
|
1070
1304
|
);
|
|
1071
1305
|
}
|
|
1072
1306
|
case "metrics": {
|
|
1073
1307
|
if (subcommand === "organization" || subcommand === "org") {
|
|
1074
1308
|
const org2 = await tryResolveOrg();
|
|
1075
|
-
const { runMetricsOrganization } = await import("./organization-
|
|
1309
|
+
const { runMetricsOrganization } = await import("./organization-GS5LFIWO.js");
|
|
1076
1310
|
await runMetricsOrganization({
|
|
1077
1311
|
org: org2,
|
|
1078
1312
|
brandSlug: cli.flags.brandSlug,
|
|
1079
1313
|
from: cli.flags.from,
|
|
1080
1314
|
to: cli.flags.to,
|
|
1315
|
+
thisWeek: cli.flags.thisWeek,
|
|
1081
1316
|
json: jsonMode,
|
|
1082
1317
|
outputFormat: cliContext.outputFormat
|
|
1083
1318
|
});
|
|
@@ -1085,11 +1320,12 @@ async function main() {
|
|
|
1085
1320
|
}
|
|
1086
1321
|
const org = await resolveOrg();
|
|
1087
1322
|
if (subcommand === "summary") {
|
|
1088
|
-
const { runMetricsSummary } = await import("./summary-
|
|
1323
|
+
const { runMetricsSummary } = await import("./summary-CV657J5V.js");
|
|
1089
1324
|
await runMetricsSummary({
|
|
1090
1325
|
org,
|
|
1091
1326
|
from: cli.flags.from,
|
|
1092
1327
|
to: cli.flags.to,
|
|
1328
|
+
thisWeek: cli.flags.thisWeek,
|
|
1093
1329
|
brandIds: parseBrandIds(),
|
|
1094
1330
|
json: jsonMode,
|
|
1095
1331
|
outputFormat: cliContext.outputFormat
|
|
@@ -1097,7 +1333,7 @@ async function main() {
|
|
|
1097
1333
|
break;
|
|
1098
1334
|
}
|
|
1099
1335
|
if (subcommand === "found") {
|
|
1100
|
-
const { runMetricsFound } = await import("./found-
|
|
1336
|
+
const { runMetricsFound } = await import("./found-NXAWEIEK.js");
|
|
1101
1337
|
await runMetricsFound({
|
|
1102
1338
|
org,
|
|
1103
1339
|
from: cli.flags.from,
|
|
@@ -1114,12 +1350,13 @@ async function main() {
|
|
|
1114
1350
|
if (!by || !["day", "type", "brand"].includes(by)) {
|
|
1115
1351
|
throw new Error("metrics breakdown requires --by <day|type|brand>");
|
|
1116
1352
|
}
|
|
1117
|
-
const { runMetricsBreakdown } = await import("./breakdown-
|
|
1353
|
+
const { runMetricsBreakdown } = await import("./breakdown-B6QUGYI6.js");
|
|
1118
1354
|
await runMetricsBreakdown({
|
|
1119
1355
|
org,
|
|
1120
1356
|
by,
|
|
1121
1357
|
from: cli.flags.from,
|
|
1122
1358
|
to: cli.flags.to,
|
|
1359
|
+
thisWeek: cli.flags.thisWeek,
|
|
1123
1360
|
brandIds: parseBrandIds(),
|
|
1124
1361
|
json: jsonMode,
|
|
1125
1362
|
outputFormat: cliContext.outputFormat
|
|
@@ -1134,14 +1371,26 @@ async function main() {
|
|
|
1134
1371
|
case "reports": {
|
|
1135
1372
|
if (subcommand === "list") {
|
|
1136
1373
|
const org = await resolveOrg();
|
|
1137
|
-
const { runReportsList } = await import("./list-
|
|
1374
|
+
const { runReportsList } = await import("./list-ZFPML3ZR.js");
|
|
1138
1375
|
await runReportsList({
|
|
1139
1376
|
org,
|
|
1140
1377
|
limit: cli.flags.limit,
|
|
1141
1378
|
cursor: cli.flags.cursor,
|
|
1142
1379
|
status: cli.flags.status,
|
|
1143
1380
|
searchQuery: cli.flags.search,
|
|
1381
|
+
reporterQuery: cli.flags.reporterQuery,
|
|
1144
1382
|
reportedByCustomer: cli.flags.reportedByCustomer,
|
|
1383
|
+
excludeAutomation: cli.flags.excludeAutomation,
|
|
1384
|
+
onlyRejected: cli.flags.onlyRejected,
|
|
1385
|
+
reviewStatuses: parseCsvList(cli.flags.reviewStatus),
|
|
1386
|
+
assetTypes: parseCsvList(cli.flags.assetType),
|
|
1387
|
+
brandIds: parseBrandIds(),
|
|
1388
|
+
countryCodes: parseCsvList(cli.flags.countryCode),
|
|
1389
|
+
reviewedByUserId: cli.flags.reviewedByUserId,
|
|
1390
|
+
from: cli.flags.from,
|
|
1391
|
+
to: cli.flags.to,
|
|
1392
|
+
updatedFrom: cli.flags.updatedFrom,
|
|
1393
|
+
updatedTo: cli.flags.updatedTo,
|
|
1145
1394
|
json: jsonMode,
|
|
1146
1395
|
outputFormat: cliContext.outputFormat,
|
|
1147
1396
|
explain: cliContext.explain
|
|
@@ -1150,7 +1399,7 @@ async function main() {
|
|
|
1150
1399
|
}
|
|
1151
1400
|
if (subcommand === "create") {
|
|
1152
1401
|
const org = await tryResolveOrg();
|
|
1153
|
-
const { runReportsCreate } = await import("./create-
|
|
1402
|
+
const { runReportsCreate } = await import("./create-DFH2G7RH.js");
|
|
1154
1403
|
await runReportsCreate({
|
|
1155
1404
|
org,
|
|
1156
1405
|
title: cli.flags.title,
|
|
@@ -1167,15 +1416,50 @@ async function main() {
|
|
|
1167
1416
|
});
|
|
1168
1417
|
break;
|
|
1169
1418
|
}
|
|
1170
|
-
|
|
1419
|
+
if (subcommand === "search") {
|
|
1420
|
+
const positionals = cli.input.slice(2);
|
|
1421
|
+
const flagAssets = parseAssetInputs();
|
|
1422
|
+
const assetContents = [...positionals, ...flagAssets];
|
|
1423
|
+
const { runReportsSearch } = await import("./search-WPSKQGUS.js");
|
|
1424
|
+
await runReportsSearch({
|
|
1425
|
+
assetContents,
|
|
1426
|
+
reportedByCustomer: cli.flags.reportedByCustomer,
|
|
1427
|
+
json: jsonMode,
|
|
1428
|
+
outputFormat: cliContext.outputFormat
|
|
1429
|
+
});
|
|
1430
|
+
break;
|
|
1431
|
+
}
|
|
1432
|
+
const hint = subcommand ? suggest(subcommand, ["create", "list", "search"]) : null;
|
|
1171
1433
|
throw new Error(
|
|
1172
|
-
subcommand ? `Unknown subcommand: reports ${subcommand}${hint ? `. Did you mean "reports ${hint}"?` : ""}` : "Usage: chainpatrol reports <create|list>"
|
|
1434
|
+
subcommand ? `Unknown subcommand: reports ${subcommand}${hint ? `. Did you mean "reports ${hint}"?` : ""}` : "Usage: chainpatrol reports <create|list|search>"
|
|
1435
|
+
);
|
|
1436
|
+
}
|
|
1437
|
+
case "threats": {
|
|
1438
|
+
if (subcommand === "list") {
|
|
1439
|
+
const { runThreatsList } = await import("./list-YCT6DYDI.js");
|
|
1440
|
+
await runThreatsList({
|
|
1441
|
+
query: cli.flags.query,
|
|
1442
|
+
from: cli.flags.from,
|
|
1443
|
+
to: cli.flags.to,
|
|
1444
|
+
assetType: parseCsvList(cli.flags.assetType),
|
|
1445
|
+
sortBy: cli.flags.sortBy,
|
|
1446
|
+
sortDirection: cli.flags.sortDirection,
|
|
1447
|
+
perPage: cli.flags.perPage ?? cli.flags.limit,
|
|
1448
|
+
nextPage: cli.flags.nextPage,
|
|
1449
|
+
json: jsonMode,
|
|
1450
|
+
outputFormat: cliContext.outputFormat
|
|
1451
|
+
});
|
|
1452
|
+
break;
|
|
1453
|
+
}
|
|
1454
|
+
const hint = subcommand ? suggest(subcommand, ["list"]) : null;
|
|
1455
|
+
throw new Error(
|
|
1456
|
+
subcommand ? `Unknown subcommand: threats ${subcommand}${hint ? `. Did you mean "threats ${hint}"?` : ""}` : "Usage: chainpatrol threats list [filters]"
|
|
1173
1457
|
);
|
|
1174
1458
|
}
|
|
1175
1459
|
case "takedowns": {
|
|
1176
1460
|
if (subcommand === "list") {
|
|
1177
1461
|
const org = await tryResolveOrg();
|
|
1178
|
-
const { runTakedownsList } = await import("./list-
|
|
1462
|
+
const { runTakedownsList } = await import("./list-WJQT2XLE.js");
|
|
1179
1463
|
await runTakedownsList({
|
|
1180
1464
|
org,
|
|
1181
1465
|
query: cli.flags.query,
|
|
@@ -1184,6 +1468,12 @@ async function main() {
|
|
|
1184
1468
|
assetType: parseCsvList(cli.flags.assetType),
|
|
1185
1469
|
takedownStatus: parseCsvList(cli.flags.takedownStatus),
|
|
1186
1470
|
livenessStatus: parseCsvList(cli.flags.livenessStatus),
|
|
1471
|
+
brandIds: parseBrandIds(),
|
|
1472
|
+
assigneeIds: parseIntList(cli.flags.assignee, "assignee"),
|
|
1473
|
+
startedFrom: cli.flags.startedFrom,
|
|
1474
|
+
startedTo: cli.flags.startedTo,
|
|
1475
|
+
hideAutomatedTakedowns: cli.flags.hideAutomatedTakedowns,
|
|
1476
|
+
hideAutomatedLivenessChecks: cli.flags.hideAutomatedLivenessChecks,
|
|
1187
1477
|
sortBy: cli.flags.sortBy,
|
|
1188
1478
|
sortDirection: cli.flags.sortDirection,
|
|
1189
1479
|
perPage: cli.flags.perPage ?? cli.flags.limit,
|
|
@@ -1200,7 +1490,7 @@ async function main() {
|
|
|
1200
1490
|
}
|
|
1201
1491
|
case "queues": {
|
|
1202
1492
|
if (subcommand === "snapshot") {
|
|
1203
|
-
const { runQueuesSnapshot } = await import("./snapshot-
|
|
1493
|
+
const { runQueuesSnapshot } = await import("./snapshot-ZWAHEG64.js");
|
|
1204
1494
|
await runQueuesSnapshot({
|
|
1205
1495
|
org: cli.flags.org,
|
|
1206
1496
|
all: cli.flags.all,
|
|
@@ -1218,7 +1508,7 @@ async function main() {
|
|
|
1218
1508
|
}
|
|
1219
1509
|
case "orgs": {
|
|
1220
1510
|
if (subcommand === "list") {
|
|
1221
|
-
const { runOrgsList } = await import("./list-
|
|
1511
|
+
const { runOrgsList } = await import("./list-YRJPN4PI.js");
|
|
1222
1512
|
await runOrgsList({
|
|
1223
1513
|
query: cli.flags.query,
|
|
1224
1514
|
subscriptionStatus: cli.flags.subscriptionStatus,
|
|
@@ -1231,14 +1521,49 @@ async function main() {
|
|
|
1231
1521
|
});
|
|
1232
1522
|
break;
|
|
1233
1523
|
}
|
|
1234
|
-
|
|
1524
|
+
if (subcommand === "assets") {
|
|
1525
|
+
if (action === "list") {
|
|
1526
|
+
const { runOrgsAssetsList } = await import("./list-EIVPGMWJ.js");
|
|
1527
|
+
await runOrgsAssetsList({
|
|
1528
|
+
type: cli.flags.type ?? cli.flags.assetType,
|
|
1529
|
+
groupId: cli.flags.groupId,
|
|
1530
|
+
query: cli.flags.query ?? cli.flags.search,
|
|
1531
|
+
perPage: cli.flags.perPage ?? cli.flags.limit,
|
|
1532
|
+
nextPage: cli.flags.nextPage,
|
|
1533
|
+
json: jsonMode,
|
|
1534
|
+
outputFormat: cliContext.outputFormat
|
|
1535
|
+
});
|
|
1536
|
+
break;
|
|
1537
|
+
}
|
|
1538
|
+
throw new Error("Usage: chainpatrol orgs assets list [filters]");
|
|
1539
|
+
}
|
|
1540
|
+
if (subcommand === "asset-groups") {
|
|
1541
|
+
if (action === "list") {
|
|
1542
|
+
const { runOrgsAssetGroupsList } = await import("./list-I7SBGA52.js");
|
|
1543
|
+
await runOrgsAssetGroupsList({
|
|
1544
|
+
json: jsonMode,
|
|
1545
|
+
outputFormat: cliContext.outputFormat
|
|
1546
|
+
});
|
|
1547
|
+
break;
|
|
1548
|
+
}
|
|
1549
|
+
throw new Error("Usage: chainpatrol orgs asset-groups list");
|
|
1550
|
+
}
|
|
1551
|
+
const hint = subcommand ? suggest(subcommand, ["list", "assets", "asset-groups"]) : null;
|
|
1235
1552
|
throw new Error(
|
|
1236
|
-
subcommand ? `Unknown subcommand: orgs ${subcommand}${hint ? `. Did you mean "orgs ${hint}"?` : ""}` : "Usage: chainpatrol orgs list
|
|
1553
|
+
subcommand ? `Unknown subcommand: orgs ${subcommand}${hint ? `. Did you mean "orgs ${hint}"?` : ""}` : "Usage: chainpatrol orgs <list|assets list|asset-groups list> [filters]"
|
|
1237
1554
|
);
|
|
1238
1555
|
}
|
|
1556
|
+
case "whoami": {
|
|
1557
|
+
const { runWhoami } = await import("./whoami-DH5HVLFN.js");
|
|
1558
|
+
await runWhoami({
|
|
1559
|
+
json: jsonMode,
|
|
1560
|
+
outputFormat: cliContext.outputFormat
|
|
1561
|
+
});
|
|
1562
|
+
break;
|
|
1563
|
+
}
|
|
1239
1564
|
case "healthchecks": {
|
|
1240
1565
|
if (subcommand === "list") {
|
|
1241
|
-
const { runHealthchecksList } = await import("./list-
|
|
1566
|
+
const { runHealthchecksList } = await import("./list-23QQYAV5.js");
|
|
1242
1567
|
await runHealthchecksList({
|
|
1243
1568
|
json: jsonMode,
|
|
1244
1569
|
outputFormat: cliContext.outputFormat
|
|
@@ -1252,7 +1577,7 @@ async function main() {
|
|
|
1252
1577
|
thresholds.minResults = cli.flags.minResults;
|
|
1253
1578
|
if (cli.flags.lookbackHours !== void 0)
|
|
1254
1579
|
thresholds.lookbackHours = cli.flags.lookbackHours;
|
|
1255
|
-
const { runHealthchecksRun } = await import("./run-
|
|
1580
|
+
const { runHealthchecksRun } = await import("./run-CJGN6TX4.js");
|
|
1256
1581
|
await runHealthchecksRun({
|
|
1257
1582
|
org,
|
|
1258
1583
|
id: action,
|
|
@@ -1270,7 +1595,7 @@ async function main() {
|
|
|
1270
1595
|
}
|
|
1271
1596
|
case "presets": {
|
|
1272
1597
|
if (subcommand === "list") {
|
|
1273
|
-
const { runPresetsList } = await import("./list-
|
|
1598
|
+
const { runPresetsList } = await import("./list-WX5G3IOF.js");
|
|
1274
1599
|
await runPresetsList({ outputFormat: cliContext.outputFormat });
|
|
1275
1600
|
break;
|
|
1276
1601
|
}
|
|
@@ -1281,7 +1606,7 @@ async function main() {
|
|
|
1281
1606
|
);
|
|
1282
1607
|
}
|
|
1283
1608
|
const org = await resolveOrg();
|
|
1284
|
-
const { runPresetsRun } = await import("./run-
|
|
1609
|
+
const { runPresetsRun } = await import("./run-BHEXWBAS.js");
|
|
1285
1610
|
await runPresetsRun({
|
|
1286
1611
|
presetId: action,
|
|
1287
1612
|
org,
|
|
@@ -1298,17 +1623,17 @@ async function main() {
|
|
|
1298
1623
|
case "setup":
|
|
1299
1624
|
case "install":
|
|
1300
1625
|
case "i": {
|
|
1301
|
-
const { setupSkill } = await import("./setup-skill-
|
|
1626
|
+
const { setupSkill } = await import("./setup-skill-TPMTULHJ.js");
|
|
1302
1627
|
setupSkill({ json: jsonMode, cloud: cli.flags.cloud });
|
|
1303
1628
|
break;
|
|
1304
1629
|
}
|
|
1305
1630
|
case "uninstall": {
|
|
1306
|
-
const { uninstallSkill } = await import("./setup-skill-
|
|
1631
|
+
const { uninstallSkill } = await import("./setup-skill-TPMTULHJ.js");
|
|
1307
1632
|
uninstallSkill({ json: jsonMode });
|
|
1308
1633
|
break;
|
|
1309
1634
|
}
|
|
1310
1635
|
case "completions": {
|
|
1311
|
-
const { printCompletions } = await import("./completions-
|
|
1636
|
+
const { printCompletions } = await import("./completions-6C6KG5DH.js");
|
|
1312
1637
|
printCompletions(subcommand);
|
|
1313
1638
|
break;
|
|
1314
1639
|
}
|