@chainpatrol/cli 0.21.0 → 0.23.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 +13 -0
- package/dist/{breakdown-3LJBT3JQ.js → breakdown-XA6UUD3T.js} +1 -1
- package/dist/{check-G64UQCEL.js → check-NQZPNAUF.js} +1 -1
- package/dist/{chunk-2JZAPTY6.js → chunk-DVNTYW7L.js} +1 -1
- package/dist/{chunk-O7TMOF4W.js → chunk-GOQL7UCG.js} +3 -0
- package/dist/{chunk-4N2YKTJ5.js → chunk-LKITFBIG.js} +81 -6
- package/dist/cli.js +91 -43
- package/dist/{configs-update-MVX7Q5NW.js → configs-update-VDZVBTIF.js} +1 -1
- package/dist/{create-ANCO4FXB.js → create-DGCWT2YJ.js} +1 -1
- package/dist/{drift-SHPMEJDU.js → drift-YZHCIQ5O.js} +1 -1
- package/dist/{found-OPL4HWOW.js → found-6JAOLM6M.js} +1 -1
- package/dist/{get-XN752KSL.js → get-RC75EJFC.js} +25 -3
- package/dist/{healthcheck-QNLFKAXM.js → healthcheck-7YWSOY6Y.js} +1 -1
- package/dist/{list-X4Z3CPO7.js → list-4HX2R7HU.js} +1 -1
- package/dist/{list-XSIXAHOG.js → list-4KIZLIVN.js} +1 -1
- package/dist/{list-AQ7E23T3.js → list-EJDWUF6W.js} +1 -1
- package/dist/{list-WPPNX7G3.js → list-H7NVUX42.js} +1 -1
- package/dist/{list-FJBWSGTD.js → list-IDR7WH5J.js} +2 -2
- package/dist/{list-SWHKM5R6.js → list-Q3MMBL4Y.js} +1 -1
- package/dist/{list-MHICJ2TK.js → list-SRVNEUHC.js} +57 -5
- package/dist/{list-FVFF4VW3.js → list-UDT5MDQZ.js} +1 -1
- package/dist/{list-QHEFB4KE.js → list-WQFDRXHD.js} +1 -1
- package/dist/{list-Q5PRMAN5.js → list-YNQ6VSYV.js} +1 -1
- package/dist/{list-4VKMEKZS.js → list-ZARZ72DG.js} +1 -1
- package/dist/{list-FWXQUOCP.js → list-ZBC53OYA.js} +1 -1
- package/dist/{list-json-B5L5PXKH.js → list-json-7FDHNRYP.js} +1 -1
- package/dist/{organization-SOMHMGTM.js → organization-NEZA6JX2.js} +1 -1
- package/dist/{run-J5TQ2YC2.js → run-5QV3YD7V.js} +1 -1
- package/dist/{run-RV6P2OCD.js → run-CCVJIK7L.js} +1 -1
- package/dist/{run-YAAMSWKK.js → run-JLTNFOJK.js} +2 -2
- package/dist/{search-FQUR75WR.js → search-JXJLBV43.js} +1 -1
- package/dist/search-ZXTJPVM6.js +221 -0
- package/dist/{setup-skill-UEOROLCF.js → setup-skill-V3HDWN7T.js} +1 -1
- package/dist/{snapshot-2GDJMN3L.js → snapshot-NYOLPGRW.js} +1 -1
- package/dist/{summary-LF53KXRR.js → summary-FE6ROSOO.js} +1 -1
- package/dist/{types-PTMFLYUV.js → types-M6QMFNUS.js} +2 -1
- package/dist/{validate-UYKOMUEI.js → validate-RPQEEQ36.js} +1 -1
- package/dist/{whoami-OYOG63BX.js → whoami-ZIWZCBGI.js} +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,18 @@
|
|
|
1
1
|
# @chainpatrol/cli
|
|
2
2
|
|
|
3
|
+
## 0.23.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- 689e094: Adds `chainpatrol asset search` command for looking up assets by content or by numeric ID. Supports bulk ID lookup via repeated `--id` flags in a single API call. Server-side work in @chainpatrol/external-trpc adds `assetIds` array support to the `/asset/search` endpoint.
|
|
8
|
+
|
|
9
|
+
## 0.22.0
|
|
10
|
+
|
|
11
|
+
### Minor Changes
|
|
12
|
+
|
|
13
|
+
- e2b28a5: Expose `contactUrl` (main communication channel) on `orgs list` and `orgs get` output. Add `organization.missing-contact-url` healthcheck. Server-side work in @chainpatrol/external-trpc and @chainpatrol/validation supports the new field and healthcheck; both are private packages and don't need version bumps.
|
|
14
|
+
- b1e35f0: Surface pending Wallet Blocking / Takedown approvals on `orgs list` and `orgs get`. Each org now reports `pendingServiceApprovals` — open requests by lower-level members to enable an approval-gated service (Wallet Blocking / Takedowns) that a higher-up at the org has not yet approved. Adds `--pending-approval-active`, `--pending-approval-inactive`, and `--pending-approval-service <protection|takedowns>` filters to `orgs list` so you can track which organizations are awaiting sign-off, distinct from which have the service turned off. Server-side work in @chainpatrol/external-trpc and @chainpatrol/validation backs the new field and filters; both are private packages and don't need version bumps.
|
|
15
|
+
|
|
3
16
|
## 0.21.0
|
|
4
17
|
|
|
5
18
|
### Minor Changes
|
|
@@ -184,6 +184,9 @@ function createApiClient(options) {
|
|
|
184
184
|
assetCheck(input) {
|
|
185
185
|
return request("/asset/check", input);
|
|
186
186
|
},
|
|
187
|
+
assetSearch(input) {
|
|
188
|
+
return request("/asset/search", input);
|
|
189
|
+
},
|
|
187
190
|
listDetectionConfigs(slug) {
|
|
188
191
|
return request("/detection/configs/list", { slug });
|
|
189
192
|
},
|
|
@@ -205,6 +205,12 @@ description: |
|
|
|
205
205
|
"orgs that require admin approval", "orgs requiring approval",
|
|
206
206
|
"which orgs require approval for twitter", "approval scope",
|
|
207
207
|
"admin approval asset types", "approval per asset type",
|
|
208
|
+
"pending approval", "pending approvals", "pending service approval",
|
|
209
|
+
"orgs with pending approval", "pending wallet blocking approval",
|
|
210
|
+
"pending takedown approval", "awaiting approval", "waiting for approval",
|
|
211
|
+
"is protection active approval", "wallet blocking approval",
|
|
212
|
+
"who needs to approve wallet blocking", "service change request",
|
|
213
|
+
"track orgs with pending approval", "orgs awaiting sign-off",
|
|
208
214
|
"is this URL blocked", "is this domain blocked", "is this address blocked",
|
|
209
215
|
"check this asset", "asset check", "lookup asset status",
|
|
210
216
|
"what is ARCHIVE_ORG", "what does PAGE mean", "list asset types",
|
|
@@ -735,10 +741,48 @@ So per-org JSON looks like:
|
|
|
735
741
|
"detection": { "active": true },
|
|
736
742
|
"darkWebMonitoring": { "active": false }
|
|
737
743
|
},
|
|
738
|
-
"obligatoryAdminApproval": { "active": true, "assetTypes": ["TWITTER"] }
|
|
744
|
+
"obligatoryAdminApproval": { "active": true, "assetTypes": ["TWITTER"] },
|
|
745
|
+
"pendingServiceApprovals": [
|
|
746
|
+
{
|
|
747
|
+
"service": "protection",
|
|
748
|
+
"automated": false,
|
|
749
|
+
"serviceType": "isProtectionActive",
|
|
750
|
+
"serviceName": "Wallet Blocking",
|
|
751
|
+
"requestedAt": "2026-05-30T18:04:11.000Z"
|
|
752
|
+
}
|
|
753
|
+
]
|
|
739
754
|
}
|
|
740
755
|
\`\`\`
|
|
741
756
|
|
|
757
|
+
#### Pending service approvals (Wallet Blocking / Takedowns)
|
|
758
|
+
|
|
759
|
+
Turning on **Wallet Blocking** (\`protection\`, the "is protection active"
|
|
760
|
+
toggle) or **Takedowns** is approval-gated: when a lower-level org member
|
|
761
|
+
tries to enable one, ChainPatrol records a pending request that a higher-up
|
|
762
|
+
at the org \u2014 an org OWNER, or ChainPatrol staff acting as owner \u2014 must
|
|
763
|
+
approve before the service actually turns on. \`pendingServiceApprovals\`
|
|
764
|
+
lists those open, awaiting-sign-off requests per org.
|
|
765
|
+
|
|
766
|
+
This is the answer to "which organizations have a pending approval for
|
|
767
|
+
Wallet blocking or Takedown services?" \u2014 it is NOT the same as "which orgs
|
|
768
|
+
have Wallet Blocking turned off". An org can have \`protection.active=false\`
|
|
769
|
+
with **no** pending approval (nobody has asked) OR **with** a pending
|
|
770
|
+
approval (someone asked and it's waiting on an owner). Only
|
|
771
|
+
\`pendingServiceApprovals\` distinguishes the two.
|
|
772
|
+
|
|
773
|
+
Each entry:
|
|
774
|
+
|
|
775
|
+
- \`service\` \u2014 \`protection\` (Wallet Blocking) or \`takedowns\`, matching the
|
|
776
|
+
\`services\` keys.
|
|
777
|
+
- \`automated\` \u2014 \`true\` when the request is for the automated variant
|
|
778
|
+
(e.g. "Automated Wallet Blocking").
|
|
779
|
+
- \`serviceType\` \u2014 raw enum, e.g. \`isProtectionActive\`.
|
|
780
|
+
- \`serviceName\` \u2014 human label, e.g. \`Wallet Blocking\`.
|
|
781
|
+
- \`requestedAt\` \u2014 when the enable request was submitted (ISO 8601, UTC).
|
|
782
|
+
|
|
783
|
+
An **empty array means nothing is awaiting approval** \u2014 read \`services\` for
|
|
784
|
+
the current on/off state, never infer it from this field.
|
|
785
|
+
|
|
742
786
|
When a user asks about "automated reporting / reviewing / protection",
|
|
743
787
|
explain that the flag exists in the DB but has no operational effect and
|
|
744
788
|
isn't exposed by the public API \u2014 only \`takedowns.automated\` carries a
|
|
@@ -767,6 +811,15 @@ Filter flags (all optional, all comma-separated lists where noted):
|
|
|
767
811
|
\`--obligatory-approval-inactive\`. Use the canonical asset-type enum
|
|
768
812
|
names (\`TWITTER\`, \`URL\`, \`PAGE\`, \u2026); run \`chainpatrol asset types\`
|
|
769
813
|
to see them all.
|
|
814
|
+
- \`--pending-approval-active\` \u2014 only orgs with at least one open
|
|
815
|
+
service-enable approval awaiting a higher-up's sign-off.
|
|
816
|
+
- \`--pending-approval-inactive\` \u2014 only orgs with no pending approvals.
|
|
817
|
+
- \`--pending-approval-service <list>\` \u2014 only orgs with a pending approval
|
|
818
|
+
for one of the listed services. Accepts \`protection\` (Wallet Blocking)
|
|
819
|
+
and/or \`takedowns\` \u2014 those are the only approval-gated services.
|
|
820
|
+
Matches both the manual and automated variant. Passing this flag implies
|
|
821
|
+
a pending approval exists, so it can't be combined with
|
|
822
|
+
\`--pending-approval-inactive\`.
|
|
770
823
|
|
|
771
824
|
Service names: \`reporting\`, \`reviewing\`, \`protection\`, \`takedowns\`,
|
|
772
825
|
\`detection\`, \`darkWebMonitoring\`.
|
|
@@ -794,17 +847,39 @@ chainpatrol --json orgs list --obligatory-approval-active \\
|
|
|
794
847
|
| jq '.organizations[] | select(.obligatoryAdminApproval.assetTypes | length == 0) | .slug'
|
|
795
848
|
\`\`\`
|
|
796
849
|
|
|
850
|
+
#### Use case: tracking orgs with a pending Wallet Blocking / Takedown approval
|
|
851
|
+
|
|
852
|
+
When a user asks "which organizations have a pending approval for Wallet
|
|
853
|
+
blocking or Takedown services?", do NOT reach for \`--service-inactive
|
|
854
|
+
protection\` \u2014 that lists orgs with the service turned OFF, which is a
|
|
855
|
+
different question. Use the pending-approval filter, which surfaces
|
|
856
|
+
staff-initiated enable requests still waiting on a higher-up:
|
|
857
|
+
|
|
858
|
+
\`\`\`bash
|
|
859
|
+
# Every org with a pending Wallet Blocking OR Takedown approval:
|
|
860
|
+
chainpatrol --json orgs list --pending-approval-service protection,takedowns
|
|
861
|
+
|
|
862
|
+
# Just Wallet Blocking:
|
|
863
|
+
chainpatrol --json orgs list --pending-approval-service protection
|
|
864
|
+
|
|
865
|
+
# Any pending approval at all, then read each org's pendingServiceApprovals:
|
|
866
|
+
chainpatrol --json orgs list --pending-approval-active \\
|
|
867
|
+
| jq '.organizations[] | {slug, pending: [.pendingServiceApprovals[].serviceName]}'
|
|
868
|
+
\`\`\`
|
|
869
|
+
|
|
797
870
|
### \`orgs get\` \u2014 Get a single organization by slug
|
|
798
871
|
|
|
799
872
|
Look up one organization the caller has access to. Returns the same per-org
|
|
800
873
|
shape as a single row from \`orgs list\` \u2014 \`active\` for every service,
|
|
801
874
|
plus \`automated\` on \`takedowns\` only (see the note above on why other
|
|
802
875
|
services don't expose an automation flag), plus \`obligatoryAdminApproval\`
|
|
803
|
-
(\`active\` + \`assetTypes\`)
|
|
804
|
-
|
|
805
|
-
|
|
806
|
-
|
|
807
|
-
|
|
876
|
+
(\`active\` + \`assetTypes\`) and \`pendingServiceApprovals\` (open Wallet
|
|
877
|
+
Blocking / Takedown enable requests awaiting a higher-up's sign-off).
|
|
878
|
+
Anything you could read from \`orgs list\` you can also read here without
|
|
879
|
+
paging or filtering. Use it when the user names a specific customer ("show
|
|
880
|
+
me acme's setup", "is takedowns automation on for morpho?", "does this org
|
|
881
|
+
require admin approval for Twitter?", "is morpho waiting on a Wallet
|
|
882
|
+
Blocking approval?") and you don't need the rest of the catalogue.
|
|
808
883
|
|
|
809
884
|
\`\`\`bash
|
|
810
885
|
chainpatrol orgs get <slug>
|
package/dist/cli.js
CHANGED
|
@@ -13,7 +13,7 @@ import {
|
|
|
13
13
|
getCliVersion,
|
|
14
14
|
isSkillInstalled,
|
|
15
15
|
readInstalledSkillVersion
|
|
16
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-LKITFBIG.js";
|
|
17
17
|
import "./chunk-6VTWWGNV.js";
|
|
18
18
|
import {
|
|
19
19
|
DateTime
|
|
@@ -92,10 +92,11 @@ var HELP = {
|
|
|
92
92
|
usage: "chainpatrol logout"
|
|
93
93
|
},
|
|
94
94
|
asset: {
|
|
95
|
-
description: "Check asset status, list blocked/allowed assets across the global ChainPatrol blocklist, or list every supported asset type.",
|
|
96
|
-
usage: "chainpatrol asset <check|list|types>",
|
|
95
|
+
description: "Check asset status, search assets by content or ID, list blocked/allowed assets across the global ChainPatrol blocklist, or list every supported asset type.",
|
|
96
|
+
usage: "chainpatrol asset <check|list|search|types>",
|
|
97
97
|
examples: [
|
|
98
98
|
"chainpatrol asset check https://phish.example",
|
|
99
|
+
"chainpatrol asset search --id 12345",
|
|
99
100
|
"chainpatrol asset list --asset-type URL --from 2026-05-01",
|
|
100
101
|
"chainpatrol asset types",
|
|
101
102
|
"chainpatrol --json asset check 0xabc123\u2026"
|
|
@@ -142,6 +143,21 @@ var HELP = {
|
|
|
142
143
|
"chainpatrol --json asset check 0xabc123\u2026"
|
|
143
144
|
]
|
|
144
145
|
},
|
|
146
|
+
"asset search": {
|
|
147
|
+
description: "Search for assets by content or by numeric ID. Returns detailed asset information including status, associated reports, takedown details, and which platforms have consumed (blocked) the asset. Supports bulk lookup by passing multiple --id flags. Unlike `asset check` (which queries the public blocklist aggregation), `asset search` queries the internal asset database directly and returns richer context.",
|
|
148
|
+
usage: "chainpatrol asset search [<content> ...] [--id <id> ...]",
|
|
149
|
+
options: [
|
|
150
|
+
"--id <number> Asset ID (repeatable for bulk lookup)",
|
|
151
|
+
"--asset <content> Asset content (repeatable; alternative to positional args)"
|
|
152
|
+
],
|
|
153
|
+
examples: [
|
|
154
|
+
"chainpatrol asset search https://phish.example",
|
|
155
|
+
"chainpatrol asset search --id 4175269",
|
|
156
|
+
"chainpatrol asset search --id 4175269 --id 4144496 --id 4642520",
|
|
157
|
+
"chainpatrol --json asset search --id 4175269 --id 4144496 --id 4642520",
|
|
158
|
+
"chainpatrol asset search --id 12345 --output markdown"
|
|
159
|
+
]
|
|
160
|
+
},
|
|
145
161
|
configs: {
|
|
146
162
|
description: "Manage detection configs for an organization.",
|
|
147
163
|
usage: "chainpatrol configs <list>",
|
|
@@ -532,12 +548,16 @@ var HELP = {
|
|
|
532
548
|
"--service-active <l> Comma-separated services that must be active",
|
|
533
549
|
"--service-inactive <l> Comma-separated services that must be inactive",
|
|
534
550
|
"--service-automated <l> Services whose automation must be ON (only `takedowns` is accepted \u2014 the other services have no meaningful automation toggle)",
|
|
535
|
-
"--service-manual <l> Services whose automation must be OFF (only `takedowns` is accepted)"
|
|
551
|
+
"--service-manual <l> Services whose automation must be OFF (only `takedowns` is accepted)",
|
|
552
|
+
"--pending-approval-active Only orgs with an open service-enable approval awaiting a higher-up's sign-off",
|
|
553
|
+
"--pending-approval-inactive Only orgs with no pending service-enable approvals",
|
|
554
|
+
"--pending-approval-service <l> Only orgs with a pending approval for the listed service(s) \u2014 `protection` (Wallet Blocking) and/or `takedowns`"
|
|
536
555
|
],
|
|
537
556
|
examples: [
|
|
538
557
|
"chainpatrol orgs list --subscription-status ACTIVE",
|
|
539
558
|
"chainpatrol orgs list --service-active takedowns --service-manual takedowns",
|
|
540
|
-
"chainpatrol --json orgs list --subscription-status ACTIVE,TRIAL --service-active detection"
|
|
559
|
+
"chainpatrol --json orgs list --subscription-status ACTIVE,TRIAL --service-active detection",
|
|
560
|
+
"chainpatrol --json orgs list --pending-approval-service protection,takedowns"
|
|
541
561
|
]
|
|
542
562
|
},
|
|
543
563
|
"orgs get": {
|
|
@@ -647,7 +667,7 @@ function getTopLevelHelp() {
|
|
|
647
667
|
" login Authenticate with ChainPatrol",
|
|
648
668
|
" logout Clear stored credentials",
|
|
649
669
|
" whoami Show the current authenticated identity",
|
|
650
|
-
" asset Check or list assets, or list supported asset types",
|
|
670
|
+
" asset Check, search, or list assets, or list supported asset types",
|
|
651
671
|
" configs Manage detection configs",
|
|
652
672
|
" detections Validate, run, list, update detection configs and results",
|
|
653
673
|
" healthchecks List and run organization healthchecks",
|
|
@@ -919,6 +939,9 @@ ${getTopLevelHelp()}
|
|
|
919
939
|
obligatoryApprovalActive: { type: "boolean" },
|
|
920
940
|
obligatoryApprovalInactive: { type: "boolean" },
|
|
921
941
|
obligatoryApprovalAssetType: { type: "string" },
|
|
942
|
+
pendingApprovalActive: { type: "boolean" },
|
|
943
|
+
pendingApprovalInactive: { type: "boolean" },
|
|
944
|
+
pendingApprovalService: { type: "string" },
|
|
922
945
|
query: { type: "string" },
|
|
923
946
|
assetType: { type: "string" },
|
|
924
947
|
takedownStatus: { type: "string" },
|
|
@@ -954,7 +977,8 @@ ${getTopLevelHelp()}
|
|
|
954
977
|
quiet: { type: "boolean", default: false, shortFlag: "q" },
|
|
955
978
|
noInput: { type: "boolean", default: false },
|
|
956
979
|
noColor: { type: "boolean", default: false },
|
|
957
|
-
cloud: { type: "boolean", default: false }
|
|
980
|
+
cloud: { type: "boolean", default: false },
|
|
981
|
+
id: { type: "string" }
|
|
958
982
|
}
|
|
959
983
|
});
|
|
960
984
|
var [command, subcommand, action] = cli.input;
|
|
@@ -1069,12 +1093,12 @@ function parseAttachmentUrls() {
|
|
|
1069
1093
|
}
|
|
1070
1094
|
async function handleConfigsList(org) {
|
|
1071
1095
|
if (jsonMode) {
|
|
1072
|
-
const { listConfigsJson } = await import("./list-json-
|
|
1096
|
+
const { listConfigsJson } = await import("./list-json-7FDHNRYP.js");
|
|
1073
1097
|
await listConfigsJson({ org });
|
|
1074
1098
|
return;
|
|
1075
1099
|
}
|
|
1076
1100
|
const { render } = await import("ink");
|
|
1077
|
-
const { default: ConfigsList } = await import("./list-
|
|
1101
|
+
const { default: ConfigsList } = await import("./list-4HX2R7HU.js");
|
|
1078
1102
|
const { default: React } = await import("react");
|
|
1079
1103
|
render(React.createElement(ConfigsList, { org }));
|
|
1080
1104
|
}
|
|
@@ -1174,7 +1198,7 @@ async function main() {
|
|
|
1174
1198
|
const positionals = cli.input.slice(2);
|
|
1175
1199
|
const flagAssets = parseAssetInputs();
|
|
1176
1200
|
const contents = [...positionals, ...flagAssets];
|
|
1177
|
-
const { runAssetCheck } = await import("./check-
|
|
1201
|
+
const { runAssetCheck } = await import("./check-NQZPNAUF.js");
|
|
1178
1202
|
await runAssetCheck({
|
|
1179
1203
|
contents,
|
|
1180
1204
|
json: jsonMode,
|
|
@@ -1184,7 +1208,7 @@ async function main() {
|
|
|
1184
1208
|
break;
|
|
1185
1209
|
}
|
|
1186
1210
|
if (subcommand === "list") {
|
|
1187
|
-
const { runAssetList } = await import("./list-
|
|
1211
|
+
const { runAssetList } = await import("./list-4KIZLIVN.js");
|
|
1188
1212
|
await runAssetList({
|
|
1189
1213
|
type: cli.flags.type ?? cli.flags.assetType,
|
|
1190
1214
|
status: cli.flags.assetStatus ?? cli.flags.status,
|
|
@@ -1197,23 +1221,44 @@ async function main() {
|
|
|
1197
1221
|
});
|
|
1198
1222
|
break;
|
|
1199
1223
|
}
|
|
1224
|
+
if (subcommand === "search") {
|
|
1225
|
+
const positionals = cli.input.slice(2);
|
|
1226
|
+
const flagAssets = parseAssetInputs();
|
|
1227
|
+
const contents = [...positionals, ...flagAssets];
|
|
1228
|
+
const rawIds = getRepeatedFlag("id");
|
|
1229
|
+
const ids = rawIds.map((v) => {
|
|
1230
|
+
const n = Number(v);
|
|
1231
|
+
if (!Number.isInteger(n) || n <= 0) {
|
|
1232
|
+
throw new Error(`Invalid asset ID: ${v}. IDs must be positive integers.`);
|
|
1233
|
+
}
|
|
1234
|
+
return n;
|
|
1235
|
+
});
|
|
1236
|
+
const { runAssetSearch } = await import("./search-ZXTJPVM6.js");
|
|
1237
|
+
await runAssetSearch({
|
|
1238
|
+
contents: contents.length > 0 ? contents : void 0,
|
|
1239
|
+
ids: ids.length > 0 ? ids : void 0,
|
|
1240
|
+
json: jsonMode,
|
|
1241
|
+
outputFormat: cliContext.outputFormat
|
|
1242
|
+
});
|
|
1243
|
+
break;
|
|
1244
|
+
}
|
|
1200
1245
|
if (subcommand === "types") {
|
|
1201
|
-
const { runAssetTypes } = await import("./types-
|
|
1246
|
+
const { runAssetTypes } = await import("./types-M6QMFNUS.js");
|
|
1202
1247
|
runAssetTypes({
|
|
1203
1248
|
json: jsonMode,
|
|
1204
1249
|
outputFormat: cliContext.outputFormat
|
|
1205
1250
|
});
|
|
1206
1251
|
break;
|
|
1207
1252
|
}
|
|
1208
|
-
const hint = subcommand ? suggest(subcommand, ["check", "list", "types"]) : null;
|
|
1253
|
+
const hint = subcommand ? suggest(subcommand, ["check", "list", "search", "types"]) : null;
|
|
1209
1254
|
throw new Error(
|
|
1210
|
-
subcommand ? `Unknown subcommand: asset ${subcommand}${hint ? `. Did you mean "asset ${hint}"?` : ""}` : "Usage: chainpatrol asset <check|list|types>"
|
|
1255
|
+
subcommand ? `Unknown subcommand: asset ${subcommand}${hint ? `. Did you mean "asset ${hint}"?` : ""}` : "Usage: chainpatrol asset <check|list|search|types>"
|
|
1211
1256
|
);
|
|
1212
1257
|
}
|
|
1213
1258
|
case "detections": {
|
|
1214
1259
|
const org = await resolveOrg();
|
|
1215
1260
|
if (subcommand === "healthcheck") {
|
|
1216
|
-
const { runDetectionsHealthcheck } = await import("./healthcheck-
|
|
1261
|
+
const { runDetectionsHealthcheck } = await import("./healthcheck-7YWSOY6Y.js");
|
|
1217
1262
|
await runDetectionsHealthcheck({
|
|
1218
1263
|
org,
|
|
1219
1264
|
source: cli.flags.source,
|
|
@@ -1228,7 +1273,7 @@ async function main() {
|
|
|
1228
1273
|
break;
|
|
1229
1274
|
}
|
|
1230
1275
|
if (subcommand === "validate") {
|
|
1231
|
-
const { runDetectionsValidate } = await import("./validate-
|
|
1276
|
+
const { runDetectionsValidate } = await import("./validate-RPQEEQ36.js");
|
|
1232
1277
|
await runDetectionsValidate({
|
|
1233
1278
|
org,
|
|
1234
1279
|
source: cli.flags.source,
|
|
@@ -1243,7 +1288,7 @@ async function main() {
|
|
|
1243
1288
|
break;
|
|
1244
1289
|
}
|
|
1245
1290
|
if (subcommand === "drift") {
|
|
1246
|
-
const { runDetectionsDrift } = await import("./drift-
|
|
1291
|
+
const { runDetectionsDrift } = await import("./drift-YZHCIQ5O.js");
|
|
1247
1292
|
await runDetectionsDrift({
|
|
1248
1293
|
org,
|
|
1249
1294
|
source: cli.flags.source,
|
|
@@ -1257,7 +1302,7 @@ async function main() {
|
|
|
1257
1302
|
break;
|
|
1258
1303
|
}
|
|
1259
1304
|
if (subcommand === "run") {
|
|
1260
|
-
const { runDetectionsRun } = await import("./run-
|
|
1305
|
+
const { runDetectionsRun } = await import("./run-CCVJIK7L.js");
|
|
1261
1306
|
await runDetectionsRun({
|
|
1262
1307
|
org,
|
|
1263
1308
|
configId: cli.flags.configId,
|
|
@@ -1271,7 +1316,7 @@ async function main() {
|
|
|
1271
1316
|
break;
|
|
1272
1317
|
}
|
|
1273
1318
|
if (subcommand === "list") {
|
|
1274
|
-
const { runDetectionsList } = await import("./list-
|
|
1319
|
+
const { runDetectionsList } = await import("./list-Q3MMBL4Y.js");
|
|
1275
1320
|
await runDetectionsList({
|
|
1276
1321
|
org,
|
|
1277
1322
|
cursor: cli.flags.cursor,
|
|
@@ -1300,7 +1345,7 @@ async function main() {
|
|
|
1300
1345
|
break;
|
|
1301
1346
|
}
|
|
1302
1347
|
if (action === "run") {
|
|
1303
|
-
const { runDetectionsRun } = await import("./run-
|
|
1348
|
+
const { runDetectionsRun } = await import("./run-CCVJIK7L.js");
|
|
1304
1349
|
await runDetectionsRun({
|
|
1305
1350
|
org,
|
|
1306
1351
|
configId: cli.flags.configId,
|
|
@@ -1318,7 +1363,7 @@ async function main() {
|
|
|
1318
1363
|
throw new Error("detections configs update requires --config-id");
|
|
1319
1364
|
}
|
|
1320
1365
|
const configPatch = getConfigPatchFromSetFlags();
|
|
1321
|
-
const { runDetectionsConfigsUpdate } = await import("./configs-update-
|
|
1366
|
+
const { runDetectionsConfigsUpdate } = await import("./configs-update-VDZVBTIF.js");
|
|
1322
1367
|
await runDetectionsConfigsUpdate({
|
|
1323
1368
|
org,
|
|
1324
1369
|
configId: cli.flags.configId,
|
|
@@ -1354,7 +1399,7 @@ async function main() {
|
|
|
1354
1399
|
const slugs = parseCsvList(cli.flags.slugs);
|
|
1355
1400
|
const allMyOrgs = cli.flags.allMyOrgs;
|
|
1356
1401
|
const org2 = slugs && slugs.length > 0 || allMyOrgs ? void 0 : await tryResolveOrg();
|
|
1357
|
-
const { runMetricsOrganization } = await import("./organization-
|
|
1402
|
+
const { runMetricsOrganization } = await import("./organization-NEZA6JX2.js");
|
|
1358
1403
|
await runMetricsOrganization({
|
|
1359
1404
|
org: org2,
|
|
1360
1405
|
slugs,
|
|
@@ -1373,7 +1418,7 @@ async function main() {
|
|
|
1373
1418
|
}
|
|
1374
1419
|
const org = await resolveOrg();
|
|
1375
1420
|
if (subcommand === "summary") {
|
|
1376
|
-
const { runMetricsSummary } = await import("./summary-
|
|
1421
|
+
const { runMetricsSummary } = await import("./summary-FE6ROSOO.js");
|
|
1377
1422
|
await runMetricsSummary({
|
|
1378
1423
|
org,
|
|
1379
1424
|
from: cli.flags.from,
|
|
@@ -1386,7 +1431,7 @@ async function main() {
|
|
|
1386
1431
|
break;
|
|
1387
1432
|
}
|
|
1388
1433
|
if (subcommand === "found") {
|
|
1389
|
-
const { runMetricsFound } = await import("./found-
|
|
1434
|
+
const { runMetricsFound } = await import("./found-6JAOLM6M.js");
|
|
1390
1435
|
await runMetricsFound({
|
|
1391
1436
|
org,
|
|
1392
1437
|
from: cli.flags.from,
|
|
@@ -1403,7 +1448,7 @@ async function main() {
|
|
|
1403
1448
|
if (!by || !["day", "type", "brand"].includes(by)) {
|
|
1404
1449
|
throw new Error("metrics breakdown requires --by <day|type|brand>");
|
|
1405
1450
|
}
|
|
1406
|
-
const { runMetricsBreakdown } = await import("./breakdown-
|
|
1451
|
+
const { runMetricsBreakdown } = await import("./breakdown-XA6UUD3T.js");
|
|
1407
1452
|
await runMetricsBreakdown({
|
|
1408
1453
|
org,
|
|
1409
1454
|
by,
|
|
@@ -1424,7 +1469,7 @@ async function main() {
|
|
|
1424
1469
|
case "reports": {
|
|
1425
1470
|
if (subcommand === "list") {
|
|
1426
1471
|
const org = await resolveOrg();
|
|
1427
|
-
const { runReportsList } = await import("./list-
|
|
1472
|
+
const { runReportsList } = await import("./list-H7NVUX42.js");
|
|
1428
1473
|
await runReportsList({
|
|
1429
1474
|
org,
|
|
1430
1475
|
limit: cli.flags.limit,
|
|
@@ -1452,7 +1497,7 @@ async function main() {
|
|
|
1452
1497
|
}
|
|
1453
1498
|
if (subcommand === "create") {
|
|
1454
1499
|
const org = await tryResolveOrg();
|
|
1455
|
-
const { runReportsCreate } = await import("./create-
|
|
1500
|
+
const { runReportsCreate } = await import("./create-DGCWT2YJ.js");
|
|
1456
1501
|
await runReportsCreate({
|
|
1457
1502
|
org,
|
|
1458
1503
|
title: cli.flags.title,
|
|
@@ -1473,7 +1518,7 @@ async function main() {
|
|
|
1473
1518
|
const positionals = cli.input.slice(2);
|
|
1474
1519
|
const flagAssets = parseAssetInputs();
|
|
1475
1520
|
const assetContents = [...positionals, ...flagAssets];
|
|
1476
|
-
const { runReportsSearch } = await import("./search-
|
|
1521
|
+
const { runReportsSearch } = await import("./search-JXJLBV43.js");
|
|
1477
1522
|
await runReportsSearch({
|
|
1478
1523
|
assetContents,
|
|
1479
1524
|
reportedByCustomer: cli.flags.reportedByCustomer,
|
|
@@ -1489,7 +1534,7 @@ async function main() {
|
|
|
1489
1534
|
}
|
|
1490
1535
|
case "threats": {
|
|
1491
1536
|
if (subcommand === "list") {
|
|
1492
|
-
const { runThreatsList } = await import("./list-
|
|
1537
|
+
const { runThreatsList } = await import("./list-YNQ6VSYV.js");
|
|
1493
1538
|
await runThreatsList({
|
|
1494
1539
|
query: cli.flags.query,
|
|
1495
1540
|
from: cli.flags.from,
|
|
@@ -1512,7 +1557,7 @@ async function main() {
|
|
|
1512
1557
|
case "takedowns": {
|
|
1513
1558
|
if (subcommand === "list") {
|
|
1514
1559
|
const org = await tryResolveOrg();
|
|
1515
|
-
const { runTakedownsList } = await import("./list-
|
|
1560
|
+
const { runTakedownsList } = await import("./list-ZBC53OYA.js");
|
|
1516
1561
|
await runTakedownsList({
|
|
1517
1562
|
org,
|
|
1518
1563
|
query: cli.flags.query,
|
|
@@ -1543,7 +1588,7 @@ async function main() {
|
|
|
1543
1588
|
}
|
|
1544
1589
|
case "queues": {
|
|
1545
1590
|
if (subcommand === "snapshot") {
|
|
1546
|
-
const { runQueuesSnapshot } = await import("./snapshot-
|
|
1591
|
+
const { runQueuesSnapshot } = await import("./snapshot-NYOLPGRW.js");
|
|
1547
1592
|
await runQueuesSnapshot({
|
|
1548
1593
|
org: cli.flags.org,
|
|
1549
1594
|
all: cli.flags.all,
|
|
@@ -1561,7 +1606,7 @@ async function main() {
|
|
|
1561
1606
|
}
|
|
1562
1607
|
case "orgs": {
|
|
1563
1608
|
if (subcommand === "list") {
|
|
1564
|
-
const { runOrgsList } = await import("./list-
|
|
1609
|
+
const { runOrgsList } = await import("./list-SRVNEUHC.js");
|
|
1565
1610
|
await runOrgsList({
|
|
1566
1611
|
query: cli.flags.query,
|
|
1567
1612
|
subscriptionStatus: cli.flags.subscriptionStatus,
|
|
@@ -1572,6 +1617,9 @@ async function main() {
|
|
|
1572
1617
|
obligatoryApprovalActive: cli.flags.obligatoryApprovalActive,
|
|
1573
1618
|
obligatoryApprovalInactive: cli.flags.obligatoryApprovalInactive,
|
|
1574
1619
|
obligatoryApprovalAssetType: cli.flags.obligatoryApprovalAssetType,
|
|
1620
|
+
pendingApprovalActive: cli.flags.pendingApprovalActive,
|
|
1621
|
+
pendingApprovalInactive: cli.flags.pendingApprovalInactive,
|
|
1622
|
+
pendingApprovalService: cli.flags.pendingApprovalService,
|
|
1575
1623
|
json: jsonMode,
|
|
1576
1624
|
outputFormat: cliContext.outputFormat
|
|
1577
1625
|
});
|
|
@@ -1580,7 +1628,7 @@ async function main() {
|
|
|
1580
1628
|
if (subcommand === "get") {
|
|
1581
1629
|
const positionalSlug = action;
|
|
1582
1630
|
const slug = positionalSlug ?? await tryResolveOrg();
|
|
1583
|
-
const { runOrgsGet } = await import("./get-
|
|
1631
|
+
const { runOrgsGet } = await import("./get-RC75EJFC.js");
|
|
1584
1632
|
await runOrgsGet({
|
|
1585
1633
|
slug,
|
|
1586
1634
|
json: jsonMode,
|
|
@@ -1590,7 +1638,7 @@ async function main() {
|
|
|
1590
1638
|
}
|
|
1591
1639
|
if (subcommand === "assets") {
|
|
1592
1640
|
if (action === "list") {
|
|
1593
|
-
const { runOrgsAssetsList } = await import("./list-
|
|
1641
|
+
const { runOrgsAssetsList } = await import("./list-WQFDRXHD.js");
|
|
1594
1642
|
await runOrgsAssetsList({
|
|
1595
1643
|
type: cli.flags.type ?? cli.flags.assetType,
|
|
1596
1644
|
groupId: cli.flags.groupId,
|
|
@@ -1606,7 +1654,7 @@ async function main() {
|
|
|
1606
1654
|
}
|
|
1607
1655
|
if (subcommand === "asset-groups") {
|
|
1608
1656
|
if (action === "list") {
|
|
1609
|
-
const { runOrgsAssetGroupsList } = await import("./list-
|
|
1657
|
+
const { runOrgsAssetGroupsList } = await import("./list-UDT5MDQZ.js");
|
|
1610
1658
|
await runOrgsAssetGroupsList({
|
|
1611
1659
|
json: jsonMode,
|
|
1612
1660
|
outputFormat: cliContext.outputFormat
|
|
@@ -1628,7 +1676,7 @@ async function main() {
|
|
|
1628
1676
|
"brands list --type must be ORGANIZATION or INDIVIDUAL (case-insensitive)."
|
|
1629
1677
|
);
|
|
1630
1678
|
}
|
|
1631
|
-
const { runBrandsList } = await import("./list-
|
|
1679
|
+
const { runBrandsList } = await import("./list-ZARZ72DG.js");
|
|
1632
1680
|
await runBrandsList({
|
|
1633
1681
|
type: rawType,
|
|
1634
1682
|
json: jsonMode,
|
|
@@ -1642,7 +1690,7 @@ async function main() {
|
|
|
1642
1690
|
);
|
|
1643
1691
|
}
|
|
1644
1692
|
case "whoami": {
|
|
1645
|
-
const { runWhoami } = await import("./whoami-
|
|
1693
|
+
const { runWhoami } = await import("./whoami-ZIWZCBGI.js");
|
|
1646
1694
|
await runWhoami({
|
|
1647
1695
|
json: jsonMode,
|
|
1648
1696
|
outputFormat: cliContext.outputFormat
|
|
@@ -1651,7 +1699,7 @@ async function main() {
|
|
|
1651
1699
|
}
|
|
1652
1700
|
case "healthchecks": {
|
|
1653
1701
|
if (subcommand === "list") {
|
|
1654
|
-
const { runHealthchecksList } = await import("./list-
|
|
1702
|
+
const { runHealthchecksList } = await import("./list-EJDWUF6W.js");
|
|
1655
1703
|
await runHealthchecksList({
|
|
1656
1704
|
json: jsonMode,
|
|
1657
1705
|
outputFormat: cliContext.outputFormat
|
|
@@ -1665,7 +1713,7 @@ async function main() {
|
|
|
1665
1713
|
thresholds.minResults = cli.flags.minResults;
|
|
1666
1714
|
if (cli.flags.lookbackHours !== void 0)
|
|
1667
1715
|
thresholds.lookbackHours = cli.flags.lookbackHours;
|
|
1668
|
-
const { runHealthchecksRun } = await import("./run-
|
|
1716
|
+
const { runHealthchecksRun } = await import("./run-5QV3YD7V.js");
|
|
1669
1717
|
await runHealthchecksRun({
|
|
1670
1718
|
org,
|
|
1671
1719
|
id: action,
|
|
@@ -1683,7 +1731,7 @@ async function main() {
|
|
|
1683
1731
|
}
|
|
1684
1732
|
case "presets": {
|
|
1685
1733
|
if (subcommand === "list") {
|
|
1686
|
-
const { runPresetsList } = await import("./list-
|
|
1734
|
+
const { runPresetsList } = await import("./list-IDR7WH5J.js");
|
|
1687
1735
|
await runPresetsList({ outputFormat: cliContext.outputFormat });
|
|
1688
1736
|
break;
|
|
1689
1737
|
}
|
|
@@ -1694,7 +1742,7 @@ async function main() {
|
|
|
1694
1742
|
);
|
|
1695
1743
|
}
|
|
1696
1744
|
const org = await resolveOrg();
|
|
1697
|
-
const { runPresetsRun } = await import("./run-
|
|
1745
|
+
const { runPresetsRun } = await import("./run-JLTNFOJK.js");
|
|
1698
1746
|
await runPresetsRun({
|
|
1699
1747
|
presetId: action,
|
|
1700
1748
|
org,
|
|
@@ -1711,12 +1759,12 @@ async function main() {
|
|
|
1711
1759
|
case "setup":
|
|
1712
1760
|
case "install":
|
|
1713
1761
|
case "i": {
|
|
1714
|
-
const { setupSkill } = await import("./setup-skill-
|
|
1762
|
+
const { setupSkill } = await import("./setup-skill-V3HDWN7T.js");
|
|
1715
1763
|
setupSkill({ json: jsonMode, cloud: cli.flags.cloud });
|
|
1716
1764
|
break;
|
|
1717
1765
|
}
|
|
1718
1766
|
case "uninstall": {
|
|
1719
|
-
const { uninstallSkill } = await import("./setup-skill-
|
|
1767
|
+
const { uninstallSkill } = await import("./setup-skill-V3HDWN7T.js");
|
|
1720
1768
|
uninstallSkill({ json: jsonMode });
|
|
1721
1769
|
break;
|
|
1722
1770
|
}
|