@knowttl/artium-axi 0.0.15 → 0.0.16

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 CHANGED
@@ -163,6 +163,8 @@ Artium's authenticated setup fetches managed skills; a standalone skill installe
163
163
  All tools start disabled; write access defaults to off.
164
164
  Administrator capability alone grants no tool access; upstream permissions remain an additional boundary.
165
165
 
166
+ Microsoft Graph supports the `entra` pack only; the bundled upstream `security hunting query` command for Defender XDR advanced hunting is unavailable through Artium.
167
+
166
168
  Falcon investigation reads include detection lineage, process details and trees, existing sandbox reports, FileVantage changes and device-control policy details.
167
169
 
168
170
  Vectra supports selected QUX/RUX writes for detection close/open and mark-fixed, host/account close, key assets, tags, notes (including bulk notes), assignments and outcomes, triage labels and rules, groups and membership, proxies, threat feeds, internal-network settings, syslog/Kafka, notification destinations and Match, subject to deployment support in the [reviewed inventory](tools/inventories/vectra-axi.json).
@@ -183,7 +185,8 @@ See [client input handling](docs/client-reference.md#command-surface-and-subcomm
183
185
  | Hybrid Analysis | Sandbox submissions, YARA create/update/delete, consuming hunting matches and the four reviewed archive downloads require administrator `writes.allowWrites: true`, independently selected operations, native preview, `--execute`, exact `--confirm` and durable journaling. Downloads are limited to `hash-download-bin`, `report-download-bin`, `report-download-dropped-files` and `report-download-memory`, through the [authenticated CLI verified-save path](docs/client-reference.md#hybrid-analysis-archive-saving) after the [operator prerequisites](docs/runbook.md#scope-and-prerequisites) pass. All operations default off; enabling other writes never enables downloads or grants upstream entitlement. The browser provides warnings, command guidance and metadata/save status only. Ordinary tool-run downloads, local configuration and credential/origin overrides are blocked. |
184
186
 
185
187
  Hybrid Analysis quick scans transmit the supplied sample or URL as read exceptions without a write gate; sandbox submission previews disclose that samples and reports can become visible to the community.
186
- Consuming hunting matches marks every returned match delivered; reconcile ambiguous outcomes using the audit ID, durable native journal and returned read-back guidance before retrying.
188
+ Consuming hunting matches is account-wide across all rules, with no rule selector, and irreversibly marks every returned match delivered; reconcile ambiguous outcomes using the audit ID, durable native journal and returned read-back guidance before retrying.
189
+ Updating a YARA rule with `reset_counter:true` resets its all-time match counter and changes its rule ID; use the returned ID for subsequent commands.
187
190
  Labs hunting and search contracts are experimental.
188
191
 
189
192
  There is no universal Artium confirmation flag.
@@ -20737,7 +20737,6 @@ var runResponseSchema = external_exports.union([runSuccessSchema, errorResponseS
20737
20737
 
20738
20738
  // src/cli/http.ts
20739
20739
  import { readFileSync as readFileSync2 } from "node:fs";
20740
- import { request as httpRequest } from "node:http";
20741
20740
  import { request as httpsRequest } from "node:https";
20742
20741
  import { rootCertificates } from "node:tls";
20743
20742
  import { resolve } from "node:path";
@@ -20745,7 +20744,7 @@ import { resolve } from "node:path";
20745
20744
  // package.json
20746
20745
  var package_default = {
20747
20746
  name: "artium-axi",
20748
- version: "0.0.15",
20747
+ version: "0.0.16",
20749
20748
  private: true,
20750
20749
  license: "MIT",
20751
20750
  type: "module",
@@ -20961,6 +20960,8 @@ var SessionStore = class {
20961
20960
  };
20962
20961
 
20963
20962
  // src/cli/http.ts
20963
+ var { request: httpRequest } = process.getBuiltinModule("node:http");
20964
+ var ACCESS_EXPIRY_SKEW_MS = 3e4;
20964
20965
  var DEFAULT_REQUEST_DEADLINE_MS = 9e4;
20965
20966
  var Client = class {
20966
20967
  constructor(environment = process.env, managed2, requestDeadlineMs = DEFAULT_REQUEST_DEADLINE_MS) {
@@ -21076,9 +21077,13 @@ var Client = class {
21076
21077
  (token) => this.request(path, method, input2, token),
21077
21078
  (refreshToken) => this.request("/v1/auth/refresh", "POST", { refreshToken })
21078
21079
  );
21079
- const session = previous ? this.reload(previous) : this.sessions.read();
21080
+ let session = previous ? this.reload(previous) : this.sessions.read();
21080
21081
  if (!session) throw new ArtiumError("TOKEN_INVALID", void 0, "Run artium-axi login --username <username> --password-stdin.");
21081
21082
  if (session.status === "password-change-required") throw new ArtiumError("PASSWORD_CHANGE_REQUIRED");
21083
+ if (session.accessExpiresAt <= Date.now() + ACCESS_EXPIRY_SKEW_MS) {
21084
+ const expiring = session;
21085
+ session = await this.sessions.locked(() => this.refresh(expiring));
21086
+ }
21082
21087
  let result;
21083
21088
  try {
21084
21089
  result = await this.request(path, method, input2, session.accessToken);
@@ -25016,10 +25021,10 @@ var vectra_axi_default = {
25016
25021
  var az_axi_default = {
25017
25022
  generatedBy: "scripts/upstream-inventory.mjs",
25018
25023
  tool: "az-axi",
25019
- version: "0.1.10",
25020
- integrity: "sha512-9RGnZrFOKpCIMC66nwxpWAzFLYrNlUJqaZWz8i/W1WexcP3sRj6BK4JWg0loc4zn+X7QKHRynKIx3pkdDOpTyw==",
25024
+ version: "0.1.11",
25025
+ integrity: "sha512-XiCwLaSh6A6xb9sk7RQ7T3FvkYpkWFIoGUCi7HxYlHF4kssVpF5gun4V7Taw9eKcm0HEWftnLci9l4EBSaFj0w==",
25021
25026
  parserEvidence: "Installed pinned catalogue exports, provisional until adapter acceptance",
25022
- packageManifestSha256: "7ec6a1ca9fd18e24bf0405bb49702d6846e40bcb089b270e8bdafedf345d9545",
25027
+ packageManifestSha256: "8bdf756d4f0b3d006543471320eb14d83f258122752bd1e07c76a2a74868691c",
25023
25028
  environment: [
25024
25029
  {
25025
25030
  name: "AZ_AXI_CONFIG",
@@ -25195,7 +25200,7 @@ var az_axi_default = {
25195
25200
  "sub",
25196
25201
  "list"
25197
25202
  ],
25198
- help: "Command: az-axi sub list\nNative operation: az-axi account list; existing scope, defaults and TOON output apply.\nFlags: --subscription, --management-group, --help, --full, --fields, --limit, --all, --max-rows\nShort flags where accepted: -h help, -s subscription, -g resource-group, -n name, -w workspace, -t timespan.\nLists accept comma-separated, space-separated and repeated values after the leaf path.\nBooleans accept bare flags or true/false. Conflicting scalar values are refused.\n\nLists live ARM subscriptions in selected scope (flags, environment, profile, else all accessible), resolving unambiguous names to IDs. This is not Azure CLI's cached account list. Legacy sub list still lists all visible subscriptions with inScope markers.\nDefault: name, id (subscription GUID), state, tenantId. --full adds ARM metadata and shows all fetched rows; --fields selects metadata. --limit defaults to 50. Paging stops at 100 pages with lower-bound counts. Management-group scope is unsupported.\nExamples: az-axi account list; az-axi account list -s <subscription> --full\nFetch budget per subscription: 1000 rows by default; --all raises it to 10000 (Key Vault: at most 2500 scanned at 25/page). --max-rows <1..100000> overrides either row budget. Every walk stops at 100 pages. Budgets count rows before local filters. --limit controls display only (default 50); --full shows every fetched row and expands display only, never bypassing fetch budgets. Incomplete totals are lower bounds; narrow the scope or raise --max-rows to search further."
25203
+ help: "Command: az-axi sub list\nNative operation: az-axi account list; existing scope, defaults and TOON output apply.\nFlags: --subscription, --management-group, --help, --full, --fields, --limit, --all, --max-rows\nShort flags where accepted: -h help, -s subscription, -g resource-group, -n name, -w workspace, -t timespan.\nLists accept comma-separated, space-separated and repeated values after the leaf path.\nBooleans accept bare flags or true/false. Conflicting scalar values are refused.\n\nLists live ARM subscriptions in selected scope (flags, environment, profile, else all accessible), resolving unambiguous names to IDs. This is not Azure CLI's cached account list. Legacy sub list still lists all visible subscriptions with inScope markers.\nDefault: name, id (subscription GUID), state, tenantId. --full adds ARM metadata and shows all fetched rows; --fields selects metadata. --limit defaults to 50. Lists follow the shared fetch budget (up to 100 pages and the row budget per subscription); incomplete counts are disclosed as lower bounds. Management-group scope is unsupported.\nExamples: az-axi account list; az-axi account list -s <subscription> --full\nFetch budget per subscription or collection (Resource Graph: across selected scope, per exposure check): 1000 rows by default; --all raises it to 10000 (Key Vault: at most 2500 scanned at 25/page). --max-rows <1..100000> overrides either row budget. Every walk stops at 100 pages. Budgets count rows before local filters. --limit controls display only (usually 50; Defender assessments 25, exposure overview 10 per check); --full shows every fetched row and expands display only, never bypassing fetch budgets. Incomplete totals are lower bounds; narrow the scope or raise --max-rows to search further."
25199
25204
  },
25200
25205
  adapterBoundary: {
25201
25206
  unsafeOverrides: [
@@ -25278,7 +25283,7 @@ var az_axi_default = {
25278
25283
  tokenResourceSources: [
25279
25284
  {
25280
25285
  path: "dist/lib/registry.js",
25281
- sha256: "e53b5e91dd69c4555960f7d69f0ea377090c8c80ecd38b200885ed31c69d3889"
25286
+ sha256: "1b0354317f721989465190b4a276fce811d559bcbbd9871129b02dd366a5beb5"
25282
25287
  },
25283
25288
  {
25284
25289
  path: "dist/lib/client.js",
@@ -25302,7 +25307,7 @@ var az_axi_default = {
25302
25307
  },
25303
25308
  {
25304
25309
  path: "dist/commands/rbac.js",
25305
- sha256: "140ee55e6e9c139de95c13198c9b24557dd7b3c510b33d2560e52acf55978eb0"
25310
+ sha256: "a0b5d0e92d47b78be10ef210b657399b3386ca67d0869d466913b31451dcdcaa"
25306
25311
  },
25307
25312
  {
25308
25313
  path: "dist/commands/logs.js",
@@ -26007,6 +26012,8 @@ var az_axi_default = {
26007
26012
  full: "boolean",
26008
26013
  fields: "list",
26009
26014
  limit: "value",
26015
+ all: "boolean",
26016
+ "max-rows": "value",
26010
26017
  "resource-group": "value",
26011
26018
  name: "value"
26012
26019
  },
@@ -26071,6 +26078,8 @@ var az_axi_default = {
26071
26078
  full: "boolean",
26072
26079
  fields: "list",
26073
26080
  limit: "value",
26081
+ all: "boolean",
26082
+ "max-rows": "value",
26074
26083
  "resource-group": "value",
26075
26084
  name: "value"
26076
26085
  },
@@ -26134,6 +26143,8 @@ var az_axi_default = {
26134
26143
  full: "boolean",
26135
26144
  fields: "list",
26136
26145
  limit: "value",
26146
+ all: "boolean",
26147
+ "max-rows": "value",
26137
26148
  "resource-group": "value",
26138
26149
  name: "value"
26139
26150
  },
@@ -26197,6 +26208,8 @@ var az_axi_default = {
26197
26208
  full: "boolean",
26198
26209
  fields: "list",
26199
26210
  limit: "value",
26211
+ all: "boolean",
26212
+ "max-rows": "value",
26200
26213
  resource: "value"
26201
26214
  },
26202
26215
  flagAliases: {},
@@ -26256,6 +26269,8 @@ var az_axi_default = {
26256
26269
  full: "boolean",
26257
26270
  fields: "list",
26258
26271
  limit: "value",
26272
+ all: "boolean",
26273
+ "max-rows": "value",
26259
26274
  resource: "value",
26260
26275
  metric: "list",
26261
26276
  "start-time": "value",
@@ -26515,6 +26530,8 @@ var az_axi_default = {
26515
26530
  full: "boolean",
26516
26531
  fields: "list",
26517
26532
  limit: "value",
26533
+ all: "boolean",
26534
+ "max-rows": "value",
26518
26535
  principal: "value",
26519
26536
  role: "value",
26520
26537
  scope: "value",
@@ -26548,6 +26565,8 @@ var az_axi_default = {
26548
26565
  full: "boolean",
26549
26566
  fields: "list",
26550
26567
  limit: "value",
26568
+ all: "boolean",
26569
+ "max-rows": "value",
26551
26570
  principal: "value",
26552
26571
  role: "value",
26553
26572
  scope: "value",
@@ -26582,6 +26601,8 @@ var az_axi_default = {
26582
26601
  full: "boolean",
26583
26602
  fields: "list",
26584
26603
  limit: "value",
26604
+ all: "boolean",
26605
+ "max-rows": "value",
26585
26606
  since: "value",
26586
26607
  caller: "value",
26587
26608
  "resource-group": "value",
@@ -26615,6 +26636,8 @@ var az_axi_default = {
26615
26636
  full: "boolean",
26616
26637
  fields: "list",
26617
26638
  limit: "value",
26639
+ all: "boolean",
26640
+ "max-rows": "value",
26618
26641
  since: "value",
26619
26642
  caller: "value",
26620
26643
  "resource-group": "value",
@@ -26650,6 +26673,8 @@ var az_axi_default = {
26650
26673
  full: "boolean",
26651
26674
  fields: "list",
26652
26675
  limit: "value",
26676
+ all: "boolean",
26677
+ "max-rows": "value",
26653
26678
  severity: "list",
26654
26679
  status: "value",
26655
26680
  since: "value"
@@ -26680,6 +26705,8 @@ var az_axi_default = {
26680
26705
  full: "boolean",
26681
26706
  fields: "list",
26682
26707
  limit: "value",
26708
+ all: "boolean",
26709
+ "max-rows": "value",
26683
26710
  severity: "list",
26684
26711
  status: "value",
26685
26712
  since: "value"
@@ -26737,6 +26764,8 @@ var az_axi_default = {
26737
26764
  full: "boolean",
26738
26765
  fields: "list",
26739
26766
  limit: "value",
26767
+ all: "boolean",
26768
+ "max-rows": "value",
26740
26769
  name: "value"
26741
26770
  },
26742
26771
  flagAliases: {},
@@ -26796,6 +26825,8 @@ var az_axi_default = {
26796
26825
  full: "boolean",
26797
26826
  fields: "list",
26798
26827
  limit: "value",
26828
+ all: "boolean",
26829
+ "max-rows": "value",
26799
26830
  name: "value",
26800
26831
  "assessment-name": "value",
26801
26832
  "assessed-resource-id": "value"
@@ -26935,6 +26966,8 @@ var az_axi_default = {
26935
26966
  full: "boolean",
26936
26967
  fields: "list",
26937
26968
  limit: "value",
26969
+ all: "boolean",
26970
+ "max-rows": "value",
26938
26971
  severity: "list",
26939
26972
  status: "value",
26940
26973
  resource: "value",
@@ -26965,7 +26998,9 @@ var az_axi_default = {
26965
26998
  help: "boolean",
26966
26999
  full: "boolean",
26967
27000
  fields: "list",
26968
- limit: "value"
27001
+ limit: "value",
27002
+ all: "boolean",
27003
+ "max-rows": "value"
26969
27004
  },
26970
27005
  flagAliases: {},
26971
27006
  shortFlags: {
@@ -26992,7 +27027,9 @@ var az_axi_default = {
26992
27027
  help: "boolean",
26993
27028
  full: "boolean",
26994
27029
  fields: "list",
26995
- limit: "value"
27030
+ limit: "value",
27031
+ all: "boolean",
27032
+ "max-rows": "value"
26996
27033
  },
26997
27034
  flagAliases: {},
26998
27035
  shortFlags: {
@@ -27094,6 +27131,8 @@ var az_axi_default = {
27094
27131
  full: "boolean",
27095
27132
  fields: "list",
27096
27133
  limit: "value",
27134
+ all: "boolean",
27135
+ "max-rows": "value",
27097
27136
  "workspace-name": "value",
27098
27137
  "resource-group": "value",
27099
27138
  workspace: "value",
@@ -27130,6 +27169,8 @@ var az_axi_default = {
27130
27169
  full: "boolean",
27131
27170
  fields: "list",
27132
27171
  limit: "value",
27172
+ all: "boolean",
27173
+ "max-rows": "value",
27133
27174
  "workspace-name": "value",
27134
27175
  "resource-group": "value",
27135
27176
  workspace: "value",
@@ -27388,6 +27429,8 @@ var az_axi_default = {
27388
27429
  full: "boolean",
27389
27430
  fields: "list",
27390
27431
  limit: "value",
27432
+ all: "boolean",
27433
+ "max-rows": "value",
27391
27434
  check: "value",
27392
27435
  "show-query": "boolean"
27393
27436
  },
@@ -28327,6 +28370,8 @@ var az_axi_default = {
28327
28370
  full: "boolean",
28328
28371
  fields: "list",
28329
28372
  limit: "value",
28373
+ all: "boolean",
28374
+ "max-rows": "value",
28330
28375
  "resource-group": "value",
28331
28376
  name: "value"
28332
28377
  },
@@ -28390,6 +28435,8 @@ var az_axi_default = {
28390
28435
  full: "boolean",
28391
28436
  fields: "list",
28392
28437
  limit: "value",
28438
+ all: "boolean",
28439
+ "max-rows": "value",
28393
28440
  name: "value"
28394
28441
  },
28395
28442
  flagAliases: {},
@@ -28449,6 +28496,8 @@ var az_axi_default = {
28449
28496
  full: "boolean",
28450
28497
  fields: "list",
28451
28498
  limit: "value",
28499
+ all: "boolean",
28500
+ "max-rows": "value",
28452
28501
  name: "value"
28453
28502
  },
28454
28503
  flagAliases: {},
@@ -28508,6 +28557,8 @@ var az_axi_default = {
28508
28557
  full: "boolean",
28509
28558
  fields: "list",
28510
28559
  limit: "value",
28560
+ all: "boolean",
28561
+ "max-rows": "value",
28511
28562
  "resource-group": "value",
28512
28563
  name: "value",
28513
28564
  assignment: "value",
@@ -28541,6 +28592,8 @@ var az_axi_default = {
28541
28592
  full: "boolean",
28542
28593
  fields: "list",
28543
28594
  limit: "value",
28595
+ all: "boolean",
28596
+ "max-rows": "value",
28544
28597
  "resource-group": "value",
28545
28598
  name: "value"
28546
28599
  },
@@ -28604,6 +28657,8 @@ var az_axi_default = {
28604
28657
  full: "boolean",
28605
28658
  fields: "list",
28606
28659
  limit: "value",
28660
+ all: "boolean",
28661
+ "max-rows": "value",
28607
28662
  "resource-group": "value",
28608
28663
  name: "value"
28609
28664
  },
@@ -28667,6 +28722,8 @@ var az_axi_default = {
28667
28722
  full: "boolean",
28668
28723
  fields: "list",
28669
28724
  limit: "value",
28725
+ all: "boolean",
28726
+ "max-rows": "value",
28670
28727
  "resource-group": "value",
28671
28728
  name: "value",
28672
28729
  "custom-role-only": "boolean"
@@ -29682,10 +29739,10 @@ var az_axi_default = {
29682
29739
  var mg_axi_default = {
29683
29740
  generatedBy: "scripts/upstream-inventory.mjs",
29684
29741
  tool: "mg-axi",
29685
- version: "0.1.10",
29686
- integrity: "sha512-rsd8KjyXxojDF3Gu6C95xsJokATeEmUaIRO7Zcaw9h/sF9WLXpW/gh6tKB1niU2QTGe2tsZjPsqXvzpyG34UUA==",
29742
+ version: "0.1.12",
29743
+ integrity: "sha512-TBt2y2rpfn8oi4YOq95uIo43RTsV/iOc0xFa3e3YCjhqd/ZL/y2is+7W0+B5/g1sdwb95yJbcU1eqeJEzmKJ5g==",
29687
29744
  parserEvidence: "Installed pinned catalogue exports",
29688
- packageManifestSha256: "9526463c1fff30f32a30a58dffbbb2e3d6eaf21a3e06edb904f223d7a535da4d",
29745
+ packageManifestSha256: "e686938dd356bffe87d9884d656a139b91e7eb6d62370f6aba3b5fd14283fb45",
29689
29746
  environment: [
29690
29747
  {
29691
29748
  name: "MG_AXI_CONFIG"
@@ -29723,7 +29780,7 @@ var mg_axi_default = {
29723
29780
  environmentSources: [
29724
29781
  {
29725
29782
  path: "dist/profiles.js",
29726
- sha256: "97c12ad60bc54bb4180c12eda9a324411070ad08a2cf4555db12eaade1ef3f30"
29783
+ sha256: "5a683251d3427b1642a3d60b5168ae56656506d12aae614ad4469dde6c6d624e"
29727
29784
  },
29728
29785
  {
29729
29786
  path: "dist/mutations.js",
@@ -29763,7 +29820,7 @@ var mg_axi_default = {
29763
29820
  sources: [
29764
29821
  {
29765
29822
  path: "dist/profiles.js",
29766
- sha256: "97c12ad60bc54bb4180c12eda9a324411070ad08a2cf4555db12eaade1ef3f30"
29823
+ sha256: "5a683251d3427b1642a3d60b5168ae56656506d12aae614ad4469dde6c6d624e"
29767
29824
  },
29768
29825
  {
29769
29826
  path: "dist/mutations.js",
@@ -29842,15 +29899,15 @@ var mg_axi_default = {
29842
29899
  sources: [
29843
29900
  {
29844
29901
  path: "dist/catalogue.js",
29845
- sha256: "4f7710d0feb1bdaeaae1ae68f4e9e41d67f77f20620b824d2f44a95f2c63ee31"
29902
+ sha256: "b6a764b7e50c3f4c84d40dcef1290a2e6a784fe73809977d6b04c06884b7a516"
29846
29903
  },
29847
29904
  {
29848
29905
  path: "dist/cli.js",
29849
- sha256: "19485f95fc3eeb5447fe05a55eec028dcf5d3c4e17a12f3bee1e0cffc239f00d"
29906
+ sha256: "613fc3ac4870e5538d2c53b0760244c7e3bb3837fa3d97c1b89b7916c557af44"
29850
29907
  },
29851
29908
  {
29852
29909
  path: "dist/profiles.js",
29853
- sha256: "97c12ad60bc54bb4180c12eda9a324411070ad08a2cf4555db12eaade1ef3f30"
29910
+ sha256: "5a683251d3427b1642a3d60b5168ae56656506d12aae614ad4469dde6c6d624e"
29854
29911
  },
29855
29912
  {
29856
29913
  path: "dist/msal-app-provider.js",
@@ -29918,11 +29975,11 @@ var mg_axi_default = {
29918
29975
  parserSources: [
29919
29976
  {
29920
29977
  path: "dist/catalogue.js",
29921
- sha256: "4f7710d0feb1bdaeaae1ae68f4e9e41d67f77f20620b824d2f44a95f2c63ee31"
29978
+ sha256: "b6a764b7e50c3f4c84d40dcef1290a2e6a784fe73809977d6b04c06884b7a516"
29922
29979
  },
29923
29980
  {
29924
29981
  path: "dist/cli.js",
29925
- sha256: "19485f95fc3eeb5447fe05a55eec028dcf5d3c4e17a12f3bee1e0cffc239f00d"
29982
+ sha256: "613fc3ac4870e5538d2c53b0760244c7e3bb3837fa3d97c1b89b7916c557af44"
29926
29983
  }
29927
29984
  ]
29928
29985
  },
@@ -30023,6 +30080,9 @@ var mg_axi_default = {
30023
30080
  {
30024
30081
  name: "fields"
30025
30082
  },
30083
+ {
30084
+ name: "file"
30085
+ },
30026
30086
  {
30027
30087
  name: "filter"
30028
30088
  },
@@ -30116,6 +30176,9 @@ var mg_axi_default = {
30116
30176
  {
30117
30177
  name: "tenant-id"
30118
30178
  },
30179
+ {
30180
+ name: "timespan"
30181
+ },
30119
30182
  {
30120
30183
  name: "transitive"
30121
30184
  },
@@ -34456,6 +34519,20 @@ var mg_axi_default = {
34456
34519
  required: true
34457
34520
  }
34458
34521
  },
34522
+ {
34523
+ command: "security hunting query",
34524
+ flags: {
34525
+ help: "boolean",
34526
+ profile: "value",
34527
+ "api-version": "value",
34528
+ file: "value",
34529
+ timespan: "value",
34530
+ limit: "value",
34531
+ full: "boolean",
34532
+ config: "value"
34533
+ },
34534
+ positionalInput: false
34535
+ },
34459
34536
  {
34460
34537
  command: "login",
34461
34538
  flags: {
@@ -35039,8 +35116,8 @@ var ldap_axi_default = {
35039
35116
  var ado_axi_default = {
35040
35117
  generatedBy: "scripts/ado-inventory.mjs",
35041
35118
  tool: "ado-axi",
35042
- version: "0.4.6",
35043
- integrity: "sha512-DThi4K9uO/jz93QQMBXtpnCXeHaYsOWSt6TFdYGhnqDN8aScow3bwbhVTIg4KEMVT0KHPYPdH00V9UOPX0c2fA==",
35119
+ version: "0.4.7",
35120
+ integrity: "sha512-qA7qpO0vjlib6r1hOOBfY0+cWn0mVCLBmkFUktJJANPelwbTiZuqgfwgk5D1lGG0q9rgCv+aPJrHOphmWJv0fw==",
35044
35121
  parserEvidence: "Reviewed published dispatch switches, aliases and command flag constants",
35045
35122
  sources: [
35046
35123
  {
@@ -35101,7 +35178,7 @@ var ado_axi_default = {
35101
35178
  },
35102
35179
  {
35103
35180
  path: "dist/commands/pr.js",
35104
- sha256: "7b4f81ce93f18c1079294e71237be8e85a4c71313ae0bceac50b0245324d8772"
35181
+ sha256: "b85a81782aa806201facd9fc414a62959bc96db9858fa4ba804015395d001c32"
35105
35182
  },
35106
35183
  {
35107
35184
  path: "dist/commands/ref.js",
@@ -39968,8 +40045,8 @@ var awx_axi_default = {
39968
40045
  var tenable_axi_default = {
39969
40046
  generatedBy: "scripts/tenable-inventory.mjs",
39970
40047
  tool: "tenable-axi",
39971
- version: "0.1.1",
39972
- integrity: "sha512-ukWwVny4DeEBLqqWJhaM0au4Z5dvQTsDKoE2NhROIE3p114WUz2tT5dOfWL8MaalVrmU/zSMhk+S29sUocR3xg==",
40048
+ version: "0.1.2",
40049
+ integrity: "sha512-csjV0urIUbZZlkA9VQpEGbsOWOnLgZTFMi0yRQD3uGlmlyPIxA6gKyvMzifSqcRvfyOaBEv7U5OjcWL1rs5NAw==",
39973
40050
  parserEvidence: "Published command catalogue, mutation registry and reviewed native parsers and transport gates",
39974
40051
  sources: [
39975
40052
  {
@@ -39990,7 +40067,7 @@ var tenable_axi_default = {
39990
40067
  },
39991
40068
  {
39992
40069
  path: "dist/src/catalogue.js",
39993
- sha256: "d05c8dfebce3219c2ee0a305888fa336e62db5fc3b3b4bc95a27c0588943587b"
40070
+ sha256: "d99e739f4a9d61cf13c91fd18e69a248f639c33d3e2e5b37efb320f0f50cef16"
39994
40071
  },
39995
40072
  {
39996
40073
  path: "dist/src/cli.js",
@@ -40006,7 +40083,7 @@ var tenable_axi_default = {
40006
40083
  },
40007
40084
  {
40008
40085
  path: "dist/src/exposure.js",
40009
- sha256: "5e93b01dc54368627f1f7c1ac4a96579af2f4beae7c2b10189ba190cf5cc9af6"
40086
+ sha256: "ef5fbe0d3525b741cc14a51b2ab9cc0cbd5289a1ec97fe01312b4d351beaf0b0"
40010
40087
  },
40011
40088
  {
40012
40089
  path: "dist/src/hook-install.js",
@@ -40014,7 +40091,7 @@ var tenable_axi_default = {
40014
40091
  },
40015
40092
  {
40016
40093
  path: "dist/src/inventory-catalogue.js",
40017
- sha256: "ccd42834a43aabffbd90e7326926660e9cff788997ab836cb2eb858fc36f1119"
40094
+ sha256: "a0cc6abc55f11815fbacf4e7f869ce0e70e06f678ebbb012afe7500a26fb4de8"
40018
40095
  },
40019
40096
  {
40020
40097
  path: "dist/src/inventory-export-catalogue.js",
@@ -40026,7 +40103,7 @@ var tenable_axi_default = {
40026
40103
  },
40027
40104
  {
40028
40105
  path: "dist/src/inventory.js",
40029
- sha256: "83bd3b19b1ad54785fdf107b57a66ffc882141706337bb886108b67f75565bb1"
40106
+ sha256: "bc712463ee14db76ff511c4b3ec8d6cadd43b3895e08f1baee785fe3a415916f"
40030
40107
  },
40031
40108
  {
40032
40109
  path: "dist/src/inventory/schema.js",
@@ -40034,7 +40111,7 @@ var tenable_axi_default = {
40034
40111
  },
40035
40112
  {
40036
40113
  path: "dist/src/local-commands.js",
40037
- sha256: "4bb2769049b72126c47857f850b3cd008a371f952c479e0b288d5279d7aaa77a"
40114
+ sha256: "4169d7a4bc6753d202d515b488ca8863b7368e31e8166f9e958c2fd1c6b05d22"
40038
40115
  },
40039
40116
  {
40040
40117
  path: "dist/src/platform-tag-catalogue.js",
@@ -40046,11 +40123,11 @@ var tenable_axi_default = {
40046
40123
  },
40047
40124
  {
40048
40125
  path: "dist/src/private-file.js",
40049
- sha256: "a5f01182fe09394ecf508deb46d54c9fb0b39c9fd205094d155ace212bbd1c8b"
40126
+ sha256: "436847d36438fa3d73edfbd45cb14faf9935308230fb8b24573926b7f07b6979"
40050
40127
  },
40051
40128
  {
40052
40129
  path: "dist/src/profiles.js",
40053
- sha256: "12defbf234e4da8584e1f6ba601eb3826733ff85c76445197b0162ac52299b4a"
40130
+ sha256: "b52aa17032f025a81682f0459dcdbed45cf0ed84e10e5aefe31677c31f26414a"
40054
40131
  },
40055
40132
  {
40056
40133
  path: "dist/src/redact.js",
@@ -40257,14 +40334,14 @@ var tenable_axi_default = {
40257
40334
  flags: {
40258
40335
  config: "Config path; default credential precedence",
40259
40336
  profile: "Profile name; default credential precedence",
40260
- fields: "Comma-separated display or wire properties; default compact view",
40337
+ fields: "Comma-separated display or wire properties; display names: id, name, class, exposureScore; default compact view",
40261
40338
  full: "Show full text; default false",
40262
40339
  help: "Show help",
40263
40340
  limit: "Maximum emitted rows, 1-10000; default 100",
40264
40341
  all: "Read up to 10000 rows within invocation budgets; excludes --limit",
40265
40342
  cursor: "Opaque resume cursor; retain the original selectors and filters",
40266
40343
  query: "Simple query text",
40267
- filter: "Repeatable: <property> <operator> <JSON string array>",
40344
+ filter: 'Repeatable: <property> <operator> <JSON string array>, e.g. asset_class = ["DEVICE"]',
40268
40345
  "filter-file": "JSON flat array of {property, operator, value: string[]}; '-' reads stdin; excludes --filter",
40269
40346
  sort: "Wire property:asc|desc",
40270
40347
  "extra-properties": "Comma-separated extra wire properties",
@@ -40278,7 +40355,7 @@ var tenable_axi_default = {
40278
40355
  flags: {
40279
40356
  config: "Config path; default credential precedence",
40280
40357
  profile: "Profile name; default credential precedence",
40281
- fields: "Comma-separated display or wire properties; default compact view",
40358
+ fields: "Comma-separated output fields; accepted: key, readable_name, operators, sortable, filterable, control, description; default compact view",
40282
40359
  full: "Show full text; default false",
40283
40360
  help: "Show help",
40284
40361
  limit: "Maximum emitted rows, 1-10000; default 100",
@@ -40293,7 +40370,7 @@ var tenable_axi_default = {
40293
40370
  flags: {
40294
40371
  config: "Config path; default credential precedence",
40295
40372
  profile: "Profile name; default credential precedence",
40296
- fields: "Comma-separated display or wire properties; default compact view",
40373
+ fields: "Comma-separated display or wire properties; display names: id, name, class, exposureScore; default compact view",
40297
40374
  full: "Show full text; default false",
40298
40375
  help: "Show help",
40299
40376
  id: "Required exact inventory ID",
@@ -40343,7 +40420,7 @@ var tenable_axi_default = {
40343
40420
  command: "auth status",
40344
40421
  effect: "read",
40345
40422
  flags: {
40346
- config: "Config path; default TENABLE_AXI_CONFIG or platform path",
40423
+ config: "Config path; default environment override or platform path",
40347
40424
  profile: "Profile name; default credential precedence",
40348
40425
  fields: "Comma-separated output fields; default all",
40349
40426
  full: "Show full text; default false",
@@ -40686,14 +40763,14 @@ var tenable_axi_default = {
40686
40763
  flags: {
40687
40764
  config: "Config path; default credential precedence",
40688
40765
  profile: "Profile name; default credential precedence",
40689
- fields: "Comma-separated display or wire properties; default compact view",
40766
+ fields: "Comma-separated display or wire properties; display names: id, name, severity, state; default compact view",
40690
40767
  full: "Show full text; default false",
40691
40768
  help: "Show help",
40692
40769
  limit: "Maximum emitted rows, 1-10000; default 100",
40693
40770
  all: "Read up to 10000 rows within invocation budgets; excludes --limit",
40694
40771
  cursor: "Opaque resume cursor; retain the original selectors and filters",
40695
40772
  query: "Simple query text",
40696
- filter: "Repeatable: <property> <operator> <JSON string array>",
40773
+ filter: 'Repeatable: <property> <operator> <JSON string array>, e.g. severity = ["HIGH"]',
40697
40774
  "filter-file": "JSON flat array of {property, operator, value: string[]}; '-' reads stdin; excludes --filter",
40698
40775
  sort: "Wire property:asc|desc",
40699
40776
  "extra-properties": "Comma-separated extra wire properties",
@@ -40706,7 +40783,7 @@ var tenable_axi_default = {
40706
40783
  flags: {
40707
40784
  config: "Config path; default credential precedence",
40708
40785
  profile: "Profile name; default credential precedence",
40709
- fields: "Comma-separated display or wire properties; default compact view",
40786
+ fields: "Comma-separated output fields; accepted: key, readable_name, operators, sortable, filterable, control, description; default compact view",
40710
40787
  full: "Show full text; default false",
40711
40788
  help: "Show help",
40712
40789
  limit: "Maximum emitted rows, 1-10000; default 100",
@@ -40720,7 +40797,7 @@ var tenable_axi_default = {
40720
40797
  flags: {
40721
40798
  config: "Config path; default credential precedence",
40722
40799
  profile: "Profile name; default credential precedence",
40723
- fields: "Comma-separated display or wire properties; default compact view",
40800
+ fields: "Comma-separated display or wire properties; display names: id, name, severity, state; default compact view",
40724
40801
  full: "Show full text; default false",
40725
40802
  help: "Show help",
40726
40803
  id: "Required exact inventory ID",
@@ -40846,14 +40923,14 @@ var tenable_axi_default = {
40846
40923
  flags: {
40847
40924
  config: "Config path; default credential precedence",
40848
40925
  profile: "Profile name; default credential precedence",
40849
- fields: "Comma-separated display or wire properties; default compact view",
40926
+ fields: "Comma-separated display or wire properties; display names: name, version, publisher; default compact view",
40850
40927
  full: "Show full text; default false",
40851
40928
  help: "Show help",
40852
40929
  limit: "Maximum emitted rows, 1-10000; default 100",
40853
40930
  all: "Read up to 10000 rows within invocation budgets; excludes --limit",
40854
40931
  cursor: "Opaque resume cursor; retain the original selectors and filters",
40855
40932
  query: "Simple query text",
40856
- filter: "Repeatable: <property> <operator> <JSON string array>",
40933
+ filter: 'Repeatable: <property> <operator> <JSON string array>, e.g. application = ["example-app"]',
40857
40934
  "filter-file": "JSON flat array of {property, operator, value: string[]}; '-' reads stdin; excludes --filter",
40858
40935
  sort: "Wire property:asc|desc",
40859
40936
  "extra-properties": "Comma-separated extra wire properties",
@@ -40866,7 +40943,7 @@ var tenable_axi_default = {
40866
40943
  flags: {
40867
40944
  config: "Config path; default credential precedence",
40868
40945
  profile: "Profile name; default credential precedence",
40869
- fields: "Comma-separated display or wire properties; default compact view",
40946
+ fields: "Comma-separated output fields; accepted: key, readable_name, operators, sortable, filterable, control, description; default compact view",
40870
40947
  full: "Show full text; default false",
40871
40948
  help: "Show help",
40872
40949
  limit: "Maximum emitted rows, 1-10000; default 100",
@@ -41170,8 +41247,8 @@ var tenable_axi_default = {
41170
41247
  var hybrid_axi_default = {
41171
41248
  generatedBy: "scripts/hybrid-inventory.mjs",
41172
41249
  tool: "hybrid-axi",
41173
- version: "0.1.0",
41174
- integrity: "sha512-eQdks/92bP8wCn7mpLGqkl5bAI/kYLgRzrRXumtuwpe4sQytNXuAiXY/lNyTYdPT6/WXEFGL9JoaTwWA37F01A==",
41250
+ version: "0.1.1",
41251
+ integrity: "sha512-8K39EZadEq302GcuCKrWmdKJ6NvtFegpGWiStTF8T8gn+lbzbYNiBnRMt5lI0o+hCm7glUdOFahZqw62ylpi7w==",
41175
41252
  parserEvidence: "Published command catalogue, mutation registry and reviewed native parsers and transport gates",
41176
41253
  sources: [
41177
41254
  {
@@ -41180,7 +41257,7 @@ var hybrid_axi_default = {
41180
41257
  },
41181
41258
  {
41182
41259
  path: "dist/src/cli.js",
41183
- sha256: "541b529cf64eeae007dac76898ffe288f03c8317f8e24b8c34ef13cb94c95665"
41260
+ sha256: "85424239ee66a94aeb77789392277c300d784c9e77297c72a2b40fa22349abc7"
41184
41261
  },
41185
41262
  {
41186
41263
  path: "dist/src/download-catalogue.js",
@@ -41188,11 +41265,11 @@ var hybrid_axi_default = {
41188
41265
  },
41189
41266
  {
41190
41267
  path: "dist/src/hunting-catalogue.js",
41191
- sha256: "899c3a2e5a199fc899364ba2c324d188b3b030a13cb73d7b32927abda0fa562e"
41268
+ sha256: "f013f3f508b15805cabe58c3c6e8f44088dee6448b08469b1dbe8d9d07fae6df"
41192
41269
  },
41193
41270
  {
41194
41271
  path: "dist/src/hunting.js",
41195
- sha256: "65de316b45aadbaf1d043c44899a3f95acb55f3c1626cef1951a69b80b036d6c"
41272
+ sha256: "323486f2003b1f97979400028b0350e978c84249700f05fed032eb9a1fe413f4"
41196
41273
  },
41197
41274
  {
41198
41275
  path: "dist/src/key-contracts.js",
@@ -41200,7 +41277,7 @@ var hybrid_axi_default = {
41200
41277
  },
41201
41278
  {
41202
41279
  path: "dist/src/local-commands.js",
41203
- sha256: "80555cd34f3cfb55e72afb76080138b343bbfef000e0ae16060247ef547de7e9"
41280
+ sha256: "c151a3662a623360ef3d4d40d7c268b8a090983ee7949131237a7704d02a63b8"
41204
41281
  },
41205
41282
  {
41206
41283
  path: "dist/src/private-file.js",
@@ -41208,7 +41285,7 @@ var hybrid_axi_default = {
41208
41285
  },
41209
41286
  {
41210
41287
  path: "dist/src/profiles.js",
41211
- sha256: "13efc4d1755319813ddd08ca3a23b89df34c6decfe568e90d71d6c217dfcf1b4"
41288
+ sha256: "a2b567d31d3d1f04bc86970fc8b736b3510c1d7b7848f685c347415387f85543"
41212
41289
  },
41213
41290
  {
41214
41291
  path: "dist/src/redact.js",
@@ -41224,11 +41301,11 @@ var hybrid_axi_default = {
41224
41301
  },
41225
41302
  {
41226
41303
  path: "dist/src/reports.js",
41227
- sha256: "404a6bd21adcf33d1808b0703175f952b66220f1ad0821489d42720e0cfbc0fa"
41304
+ sha256: "be256f71a04c2f19371b6eb862b88caff9f2e481b95551749bca172058d70396"
41228
41305
  },
41229
41306
  {
41230
41307
  path: "dist/src/search-catalogue.js",
41231
- sha256: "205bcc21e3d48f36b1b0d4501ab8a33b12f72d1998c74f7b40a9101328dfcbaa"
41308
+ sha256: "e5cba3e769308123a560f7e9bcbb0f0ab36e428ce3631a173298953f063b8f7e"
41232
41309
  },
41233
41310
  {
41234
41311
  path: "dist/src/search-contracts.js",
@@ -41236,7 +41313,7 @@ var hybrid_axi_default = {
41236
41313
  },
41237
41314
  {
41238
41315
  path: "dist/src/search.js",
41239
- sha256: "03c3a4169cb5b731b820ef52278baf7573f9eaaf75b7c0a5f205de2751424da5"
41316
+ sha256: "bd9362c96f6ff2a90c3297308cb7e1ef91469a4b233228abfa3d7a8849d28204"
41240
41317
  },
41241
41318
  {
41242
41319
  path: "dist/src/session.js",
@@ -41268,7 +41345,7 @@ var hybrid_axi_default = {
41268
41345
  },
41269
41346
  {
41270
41347
  path: "dist/src/writes-core.js",
41271
- sha256: "c231cae7b8ee78090c4eee94b0f0f1bd0ab3aa9433d0a02711bbd923183f7dc2"
41348
+ sha256: "c91ce1b7b8e2735d60565e0cc043bc3aa76d7d31e81fa6745c01fbb42035baa0"
41272
41349
  },
41273
41350
  {
41274
41351
  path: "dist/src/writes.js",
@@ -41351,7 +41428,7 @@ var hybrid_axi_default = {
41351
41428
  }
41352
41429
  }
41353
41430
  },
41354
- skillSha256: "3b75c852fcfd4a18589145e1f7ae0cabac7e1896bd427d8ed8a3a43da989e20f",
41431
+ skillSha256: "1d0266cf0237630d063531b567a6b960dca48a731e7917e72b50fb59f757d384",
41355
41432
  nativeWriteSettings: {
41356
41433
  supportedOperations: [
41357
41434
  "convertQuickScan",
@@ -41533,7 +41610,8 @@ var hybrid_axi_default = {
41533
41610
  fields: "Comma-separated response fields; default compact fields",
41534
41611
  full: "Include all response fields; default false",
41535
41612
  hash: "One MD5/SHA1/SHA256/SHA512; exactly one selector required",
41536
- "hashes-file": "Newline-separated MD5/SHA1/SHA256 file; deprecated bulk route"
41613
+ "hashes-file": "Newline-separated MD5/SHA1/SHA256 file; deprecated bulk route",
41614
+ limit: "Local row limit; default 100; --full does not change it"
41537
41615
  }
41538
41616
  },
41539
41617
  {
@@ -41545,7 +41623,8 @@ var hybrid_axi_default = {
41545
41623
  profile: "Profile name; default profile precedence",
41546
41624
  fields: "Comma-separated response fields; default compact fields",
41547
41625
  full: "Include all response fields; default false",
41548
- labs: "Experimental Labs overview; default false"
41626
+ labs: "Experimental Labs overview; default false",
41627
+ limit: "Local row limit; default 100; --full does not change it"
41549
41628
  }
41550
41629
  },
41551
41630
  {
@@ -44452,6 +44531,7 @@ var ManagedSession = class _ManagedSession {
44452
44531
  }
44453
44532
  channel;
44454
44533
  session;
44534
+ refreshing;
44455
44535
  secrets = [];
44456
44536
  output = { stdout: "", stderr: "" };
44457
44537
  static async read(signIn = false) {
@@ -44497,17 +44577,25 @@ var ManagedSession = class _ManagedSession {
44497
44577
  }
44498
44578
  async authenticated(request, refresh) {
44499
44579
  if (!this.session) throw new ArtiumError("TOKEN_INVALID");
44580
+ const session = this.session;
44500
44581
  try {
44501
- return await request(this.session.accessToken);
44582
+ return await request(session.accessToken);
44502
44583
  } catch (error62) {
44503
44584
  if (!(error62 instanceof ArtiumError) || error62.code !== "TOKEN_EXPIRED" || !this.session.refreshToken) throw error62;
44504
44585
  }
44505
- const parsed = loginResponseSchema.safeParse(await refresh(this.session.refreshToken));
44506
- if (!parsed.success || parsed.data.status !== "authenticated" || !parsed.data.accessToken || !parsed.data.refreshToken) {
44507
- throw new ArtiumError("INVALID_RESPONSE");
44586
+ if (!this.refreshing && this.session.accessToken === session.accessToken) {
44587
+ this.refreshing = (async () => {
44588
+ const parsed = loginResponseSchema.safeParse(await refresh(session.refreshToken));
44589
+ if (!parsed.success || parsed.data.status !== "authenticated" || !parsed.data.accessToken || !parsed.data.refreshToken) {
44590
+ throw new ArtiumError("INVALID_RESPONSE");
44591
+ }
44592
+ await this.emit(session.serverUrl, parsed.data);
44593
+ this.session = { serverUrl: session.serverUrl, ...parsed.data };
44594
+ })().finally(() => {
44595
+ this.refreshing = void 0;
44596
+ });
44508
44597
  }
44509
- await this.emit(this.session.serverUrl, parsed.data);
44510
- this.session = { serverUrl: this.session.serverUrl, ...parsed.data };
44598
+ await this.refreshing;
44511
44599
  return request(this.session.accessToken);
44512
44600
  }
44513
44601
  protect(...secrets) {
@@ -44992,13 +45080,19 @@ remoteRevocation: ${verified ? "verified" : "unverified"}
44992
45080
  const client = new Client(process.env, managed);
44993
45081
  const homeSession = home && !managed ? client.sessions.read() : void 0;
44994
45082
  if (home && !managed && !homeSession) throw new ArtiumError("TOKEN_INVALID", void 0, "Run artium-axi login --username <username> --password-stdin.");
44995
- const result = await client.authenticated(home || whoami ? "/v1/me" : `/v1/tools${listing ? "" : `/${command}/run`}`, home || listing || whoami ? "GET" : "POST", input2, homeSession);
45083
+ const [result, homeTools] = (await Promise.allSettled([
45084
+ client.authenticated(home || whoami ? "/v1/me" : `/v1/tools${listing ? "" : `/${command}/run`}`, home || listing || whoami ? "GET" : "POST", input2, homeSession),
45085
+ home ? client.authenticated("/v1/tools", "GET", void 0, homeSession) : void 0
45086
+ ])).map((response) => {
45087
+ if (response.status === "rejected") throw response.reason;
45088
+ return response.value;
45089
+ });
44996
45090
  if (home || whoami) {
44997
45091
  const parsed = meResponseSchema.safeParse(result);
44998
45092
  if (!parsed.success) throw new ArtiumError("INVALID_RESPONSE");
44999
45093
  let view = identityView(parsed.data, client.serverUrl);
45000
45094
  if (home) {
45001
- const tools = toolsResponseSchema.safeParse(await client.authenticated("/v1/tools", "GET", void 0, homeSession));
45095
+ const tools = toolsResponseSchema.safeParse(homeTools);
45002
45096
  if (!tools.success) throw new ArtiumError("INVALID_RESPONSE");
45003
45097
  const executable = resolve4(process.argv[1]);
45004
45098
  const local = relative(homedir3(), executable);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@knowttl/artium-axi",
3
- "version": "0.0.15",
3
+ "version": "0.0.16",
4
4
  "description": "Client CLI and embedded skill for the Artium managed tools server.",
5
5
  "license": "MIT",
6
6
  "type": "module",