@knowttl/artium-axi 0.0.19 → 0.0.21

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
@@ -46,6 +46,7 @@ Agents keep a command-line interface with TOON discovery rather than implementin
46
46
  | AWX | Pasted token or one-time password sign-in; optional operational writes |
47
47
  | Tenable One | Access and secret API keys; optional allow-listed business writes and export jobs |
48
48
  | Hybrid Analysis | Managed API key; investigation reads and optional allow-listed submissions, YARA mutations and consuming matches |
49
+ | Check Point Email Security | Regional client credentials; email, event, task and exception reads, guarded writes and authenticated email/attachment saving |
49
50
 
50
51
  [Package pins](tools/package.json) and the [Falcon source pin](tools/falcon-source.json) own bundled versions; [reviewed inventories](tools/inventories) define the supported command boundary.
51
52
 
@@ -169,10 +170,20 @@ Administrators can opt in to the single read-only `security hunting query` comma
169
170
  Hunting accepts exactly one UTF-8 plain-text upload named `query.kql`, at most 64 KiB, through `artium-axi mg-axi security hunting query --file query.kql`.
170
171
  See [client input handling](docs/client-reference.md#command-surface-and-subcommands) for local file paths and upload restrictions.
171
172
  Queries must use the upstream restricted read-only KQL subset.
173
+ Hunting parses KQL before the read-only allowlist and upstream authentication; syntax errors return positioned diagnostics without query excerpts or quoted literals.
174
+ Parsing does not check tables, columns, types or permissions; recognized Graph 400 errors expose only the error class and line/column, while unknown error shapes remain opaque.
172
175
  The existing mg-axi role grant is required; other security commands remain unavailable.
173
176
  See [Graph credential setup](docs/tool-credentials.md#microsoft-graph) for hunting permissions and consent; tenant acceptance remains unverified.
174
177
 
178
+ Azure Resource Graph and Log Analytics queries parse KQL before upstream authentication or requests, returning positioned syntax diagnostics and query excerpts on failure.
179
+ Successful parsing does not validate tables, columns, functions, permissions or service-specific restrictions.
180
+
175
181
  Falcon investigation reads include detection lineage, process details and trees, existing sandbox reports, FileVantage changes and device-control policy details.
182
+ NG-SIEM `search start` checks CQL structure before upstream authentication, reporting code, line, column and token class without echoing query text; function names, fields and semantics remain unchecked, and ambiguous syntax passes.
183
+ Rejected searches preserve redacted server diagnostics, completed searches include server warnings when present, and `search start --wait` advises when the normalized filter differs.
184
+
185
+ Vectra `host show` and `entity show --type host`, plus the matching raw host reads, retain every returned API field under `host`, separate from CLI metadata.
186
+ Use `--full` on host/entity detail commands for complete returned text; secret redaction still applies, and upstream omissions cannot be restored.
176
187
 
177
188
  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).
178
189
  User, role, API-client and credential administration remains blocked.
@@ -189,6 +200,7 @@ See [client input handling](docs/client-reference.md#command-surface-and-subcomm
189
200
  | Azure DevOps | Reviewed mutations with administrator `allowWrites: true`; raw `api` remains GET-only. |
190
201
  | AWX | Launch/cancel/relaunch, workflow approval/denial, project/inventory-source sync and notification tests with `allowWrites: true` and upstream `--confirm`; configuration, deletion and security writes stay blocked. |
191
202
  | Tenable One | Business writes and export-job creation with administrator `writes.allowWrites: true`, an explicit operations allow-list, native preview, `--execute`, exact `--confirm` and durable journaling; downloads and local configuration stay blocked. |
203
+ | Check Point Email Security | Email and exception writes require administrator `writes.allowWrites: true`, exact selected operations and native preview, execute, confirmation and journal gates. Name-only event actions require their exact `event.action.<name>` scope. The six malware/URL/DLP remove/clear operations and click-time clear remain refused. Three separately selected downloads use [authenticated CLI saving](docs/client-reference.md#check-point-email-and-attachment-saving) with host-owned confirmation and independent SHA-256 verification; native download journal fields remain empty. Ordinary tool-run downloads and credential/origin overrides stay blocked. Live API contracts remain uncommissioned. |
192
204
  | 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. |
193
205
 
194
206
  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.
@@ -211,6 +223,7 @@ After an unknown write outcome, inspect state using returned guidance before ret
211
223
  | AWX job list | Token identity with job read access |
212
224
  | Tenable One card list | See [Tenable One credential permissions](docs/tool-credentials.md#tenable-one). |
213
225
  | Hybrid Analysis quota | A valid API key; resource permissions vary by key level. See [Hybrid Analysis setup](docs/tool-credentials.md#hybrid-analysis). |
226
+ | Check Point doctor | Regional authentication and one bounded email search. See [Check Point setup and commissioning](docs/tool-credentials.md#check-point-email-security). |
214
227
 
215
228
  See [tool credentials](docs/tool-credentials.md) for dedicated identities, permissions and safe credential entry.
216
229
  Artium stores shared service credentials encrypted with AES-256-GCM and never returns saved secrets to clients.
@@ -251,9 +264,9 @@ This summary follows the [CLI help registry](src/cli/help.ts); `artium-axi --hel
251
264
  | `tools` / `tools show <tool>` | Granted enabled tools / pinned help and first call |
252
265
  | `doctor` | Server, TLS, token, version and cached health; five-second request deadlines |
253
266
  | `update` | Update the [server-downloaded client](#verified-client) |
254
- | `download` | Preview and explicitly verify/save administrator-selected Hybrid Analysis archives through the local CLI. Run `artium-axi download --help` for guards and warnings. |
267
+ | `download` | Preview and explicitly verify/save administrator-selected Hybrid Analysis archives and Check Point emails/attachments through the local CLI. Run `artium-axi download --help` for guards and warnings. |
255
268
  | `setup --host <host>` | Install managed skills and optional Claude hook |
256
- | `<tool> <args>` | Run any of the nine managed tools above |
269
+ | `<tool> <args>` | Run any of the ten managed tools above |
257
270
  | `--managed-session --help` | Private-pipe session protocol |
258
271
 
259
272
  `artium-axi --help falcon-axi` is local help; `artium-axi falcon-axi --help` authenticates and calls upstream.
@@ -19801,8 +19801,14 @@ var transferSelectionSchema = external_exports.discriminatedUnion("operation", [
19801
19801
  external_exports.strictObject({ operation: external_exports.literal("hash-download-bin"), selector: sampleSha256Schema, type: external_exports.literal("bin") }),
19802
19802
  external_exports.strictObject({ operation: external_exports.literal("report-download-bin"), selector: reportIdSchema, type: external_exports.literal("bin") }),
19803
19803
  external_exports.strictObject({ operation: external_exports.literal("report-download-dropped-files"), selector: reportIdSchema, type: external_exports.literal("dropped-files") }),
19804
- external_exports.strictObject({ operation: external_exports.literal("report-download-memory"), selector: reportIdSchema, type: external_exports.literal("memory") })
19804
+ external_exports.strictObject({ operation: external_exports.literal("report-download-memory"), selector: reportIdSchema, type: external_exports.literal("memory") }),
19805
+ external_exports.strictObject({ operation: external_exports.literal("email.download"), selector: transferOwnerIdSchema, type: external_exports.enum(["email", "original"]) }),
19806
+ external_exports.strictObject({ operation: external_exports.literal("attachment.download"), selector: external_exports.string().regex(/^[A-Za-z0-9_-]{1,256}\/[A-Za-z0-9_-]{1,256}$/), type: external_exports.literal("attachment") }),
19807
+ external_exports.strictObject({ operation: external_exports.literal("attachment.download-all"), selector: transferOwnerIdSchema, type: external_exports.literal("zip") })
19805
19808
  ]);
19809
+ function transferTool(operation) {
19810
+ return ["email.download", "attachment.download", "attachment.download-all"].includes(operation) ? "checkpoint-axi" : "hybrid-axi";
19811
+ }
19806
19812
  var transferPrepareSchema = external_exports.strictObject({ selection: transferSelectionSchema, targetDigest: sha256Schema });
19807
19813
  var transferIdSchema = external_exports.uuid();
19808
19814
  var transferScopeSchema = external_exports.strictObject({
@@ -19865,12 +19871,18 @@ var transferRoutes = {
19865
19871
  cancel: { method: "POST", path: "/v1/transfers/hybrid/cancel", input: transferRetrieveSchema },
19866
19872
  status: { method: "POST", path: "/v1/transfers/hybrid/status", input: transferRetrieveSchema, response: transferStatusSchema }
19867
19873
  };
19874
+ function transferRoutesFor(tool) {
19875
+ return Object.fromEntries(Object.entries(transferRoutes).map(([name, route]) => [
19876
+ name,
19877
+ { ...route, path: route.path.replace("/hybrid/", tool === "checkpoint-axi" ? "/checkpoint/" : "/hybrid/") }
19878
+ ]));
19879
+ }
19868
19880
  var transferAuditSchema = external_exports.strictObject({
19869
19881
  transfer_id: transferIdSchema,
19870
19882
  session_family_id: transferOwnerIdSchema,
19871
- transfer_operation: transferSelectionSchema.options[0].shape.operation.or(transferSelectionSchema.options[1].shape.operation).or(transferSelectionSchema.options[2].shape.operation).or(transferSelectionSchema.options[3].shape.operation),
19872
- artifact_type: external_exports.enum(["bin", "dropped-files", "memory"]),
19873
- artifact_selector: sha256Schema.or(reportIdSchema),
19883
+ transfer_operation: external_exports.enum(transferSelectionSchema.options.map((option) => option.shape.operation.value)),
19884
+ artifact_type: external_exports.enum(["bin", "dropped-files", "memory", "email", "original", "attachment", "zip"]),
19885
+ artifact_selector: external_exports.string().min(1).max(513),
19874
19886
  requested_target_digest: sha256Schema,
19875
19887
  archive_bytes: external_exports.number().int().nonnegative().max(transferLimits.artifactBytes).nullable(),
19876
19888
  archive_sha256: sha256Schema.nullable(),
@@ -19928,7 +19940,7 @@ var meResponseSchema = external_exports.strictObject({
19928
19940
  sessionExpiresAt: external_exports.number().int()
19929
19941
  });
19930
19942
  var accountId = external_exports.string().min(1);
19931
- var toolSchema = external_exports.enum(["falcon-axi", "vectra-axi", "az-axi", "mg-axi", "ldap-axi", "ado-axi", "awx-axi", "tenable-axi", "hybrid-axi"]);
19943
+ var toolSchema = external_exports.enum(["falcon-axi", "vectra-axi", "az-axi", "mg-axi", "ldap-axi", "ado-axi", "awx-axi", "tenable-axi", "hybrid-axi", "checkpoint-axi"]);
19932
19944
  var skillsResponseSchema = external_exports.strictObject({ skills: external_exports.array(external_exports.strictObject({
19933
19945
  name: toolSchema,
19934
19946
  content: external_exports.string().min(1)
@@ -20180,6 +20192,10 @@ var falconRtrSettingsSchema = external_exports.strictObject({
20180
20192
  ])).optional()
20181
20193
  });
20182
20194
  var nativeSettingsSchemas = {
20195
+ "checkpoint-axi": external_exports.strictObject({ writes: external_exports.strictObject({
20196
+ allowWrites: external_exports.boolean(),
20197
+ operations: external_exports.array(external_exports.string().regex(/^[a-z][A-Za-z0-9_.-]{0,255}$/)).min(1).max(126)
20198
+ }).optional() }),
20183
20199
  "hybrid-axi": external_exports.strictObject({ writes: external_exports.strictObject({
20184
20200
  allowWrites: external_exports.boolean(),
20185
20201
  operations: external_exports.array(external_exports.string())
@@ -20748,7 +20764,7 @@ import { resolve } from "node:path";
20748
20764
  // package.json
20749
20765
  var package_default = {
20750
20766
  name: "artium-axi",
20751
- version: "0.0.19",
20767
+ version: "0.0.21",
20752
20768
  private: true,
20753
20769
  license: "MIT",
20754
20770
  type: "module",
@@ -21236,17 +21252,18 @@ var falcon_axi_default = {
21236
21252
  generatedBy: "scripts/falcon-inventory.mjs",
21237
21253
  tool: "falcon-axi",
21238
21254
  repository: "https://github.com/knowttl/falcon-axi.git",
21239
- tag: "v0.7.4",
21240
- commit: "bca4a08c71beb415e3fabb37443aea8ad61bc08c",
21241
- version: "0.7.4",
21255
+ tag: "v0.8.0",
21256
+ commit: "4ba25f373a5c4df46506bdd0d306fa3ef205d965",
21257
+ version: "0.8.0",
21242
21258
  distribution: {
21243
- filename: "falcon_axi-0.7.4-py3-none-any.whl",
21244
- sha256: "bce4cfb033fd6537eb8a518fe3286799884f6b7a5ef95faffc347ac6c336d28e",
21245
- provenance: "https://pypi.org/integrity/falcon-axi/0.7.4/falcon_axi-0.7.4-py3-none-any.whl/provenance"
21259
+ filename: "falcon_axi-0.8.0-py3-none-any.whl",
21260
+ sha256: "8aad289fd58847cb6555f46b8e930c5904d6afda34a7b2e6965cdd60c8df06a4",
21261
+ provenance: "https://pypi.org/integrity/falcon-axi/0.8.0/falcon_axi-0.8.0-py3-none-any.whl/provenance"
21246
21262
  },
21263
+ skillSha256: "5d5fd1cd57ff1da68e37448c93fce57236f76448ec9a10984c01ea7300c6a8e0",
21247
21264
  parser: {
21248
21265
  path: "falcon_axi/cli.py",
21249
- sha256: "ef29404b26da085b96ace7ba1f708e928eb40c7aa99e071807d5003a3421b0cd",
21266
+ sha256: "9b3d42e3c00b3d302948e8937c6295bbdde9cb80384ebef253f9b8a077454909",
21250
21267
  aliases: {},
21251
21268
  shortFlags: {},
21252
21269
  repeats: "last value wins",
@@ -22972,10 +22989,11 @@ var falcon_axi_default = {
22972
22989
  var vectra_axi_default = {
22973
22990
  generatedBy: "scripts/upstream-inventory.mjs",
22974
22991
  tool: "vectra-axi",
22975
- version: "0.1.9",
22976
- integrity: "sha512-GUl24JV8lErGjZliTHcb6BcjjdpJhrzbbB8cBekKE6dM3b5ph9i9EteJHFRWUuGpnEPlVEPeu7X3l33V9DGKwQ==",
22992
+ version: "0.1.10",
22993
+ integrity: "sha512-X7yttDlwpQJW/j0eNox5vLf7nWlFejXjtaq90N7ezJ+ACNqEFspODrwQ/mYqbXFnqjpIugQnhSGcnaI8YNMeLw==",
22977
22994
  parserEvidence: "Installed pinned catalogue exports, provisional until adapter acceptance",
22978
- packageManifestSha256: "e7fe728c58d41a9ddd554b15c29de281dd06c2d7e6a6b044e43d75fb001aa53d",
22995
+ packageManifestSha256: "3f4d4e3ec1b37690087e3c8850ffd5390574e6686cafbd723fb01f83b775ea97",
22996
+ skillSha256: "58978bfd2468e9fac8d17644df1de46768572b1cd9a719a9eec64cdcb547ff9c",
22979
22997
  environment: [
22980
22998
  {
22981
22999
  name: "VECTRA_AXI_CONFIG",
@@ -23275,7 +23293,7 @@ var vectra_axi_default = {
23275
23293
  },
23276
23294
  source: {
23277
23295
  path: "dist/src/catalogue.js",
23278
- sha256: "e49354f34c86cd986d9cc166fc33f3c0423ab8eaa8044621131351c8f297e834"
23296
+ sha256: "02e2443a4b6d6aef9faae51e0c4418c0c565ac5b0f73969a34a4c33a110bfabf"
23279
23297
  }
23280
23298
  },
23281
23299
  flags: [
@@ -23755,7 +23773,8 @@ var vectra_axi_default = {
23755
23773
  help: "boolean",
23756
23774
  profile: "value",
23757
23775
  config: "value",
23758
- id: "value"
23776
+ id: "value",
23777
+ full: "boolean"
23759
23778
  }
23760
23779
  },
23761
23780
  {
@@ -23807,7 +23826,8 @@ var vectra_axi_default = {
23807
23826
  profile: "value",
23808
23827
  config: "value",
23809
23828
  type: "value",
23810
- id: "value"
23829
+ id: "value",
23830
+ full: "boolean"
23811
23831
  }
23812
23832
  },
23813
23833
  {
@@ -25027,10 +25047,11 @@ var vectra_axi_default = {
25027
25047
  var az_axi_default = {
25028
25048
  generatedBy: "scripts/upstream-inventory.mjs",
25029
25049
  tool: "az-axi",
25030
- version: "0.1.12",
25031
- integrity: "sha512-xPhoFLQ8XWjWqLR2e80apWA1pkCqQcFZ5r5V7XW+uj0zXKaO9RHfjG7gsxkrMa44jWqWLiU8ssZxWZPl6uj8KQ==",
25050
+ version: "0.1.13",
25051
+ integrity: "sha512-qltNokGPKFvUxFxNVf25gV2jtgw9MpxT5k6Zlbhz0b/Y5pvbc04SpORpUurDZNXE7runLZZhoBmm38qXcA3M7Q==",
25032
25052
  parserEvidence: "Installed pinned catalogue exports, provisional until adapter acceptance",
25033
- packageManifestSha256: "2d829dc31fd552a154b439ad40c39ff8fd53b35527d8134a0dd18f4ffab09334",
25053
+ packageManifestSha256: "dc09976ff76cdda672ba89f0a7689c39873a86a19213d46687c2a9af861d3ed2",
25054
+ skillSha256: "8a5bc0e8866ca55add8399376784a19e81671e6d036d10815e55b3c473540080",
25034
25055
  environment: [
25035
25056
  {
25036
25057
  name: "AZ_AXI_CONFIG",
@@ -25289,11 +25310,11 @@ var az_axi_default = {
25289
25310
  tokenResourceSources: [
25290
25311
  {
25291
25312
  path: "dist/lib/registry.js",
25292
- sha256: "67a29a57b906ee0a17dc0bf917123308ee2d160ef43106f5d15bf73f8cb874d3"
25313
+ sha256: "dc1eb46c43aa5232b58acfb1d174fe2728491a3a6da28fa3cca27fed79494efd"
25293
25314
  },
25294
25315
  {
25295
25316
  path: "dist/lib/client.js",
25296
- sha256: "322f09655f302f8f4292cbb6317ad192854ed412376ce9041126b25e24ed27ed"
25317
+ sha256: "156af240155e71c051a6a2f0c4235d51acaf3633d7a249736ff3b24ed541d2b6"
25297
25318
  },
25298
25319
  {
25299
25320
  path: "dist/lib/principals.js",
@@ -25317,7 +25338,7 @@ var az_axi_default = {
25317
25338
  },
25318
25339
  {
25319
25340
  path: "dist/commands/logs.js",
25320
- sha256: "f3c0112c4be7a8996163d323bd9945950ab1a212eae2cc42af044388adc77199"
25341
+ sha256: "1cfd781bd88e13ba1c70537263220c6bdd6932586e53edd6fc22fc75202bd938"
25321
25342
  },
25322
25343
  {
25323
25344
  path: "dist/commands/doctor.js",
@@ -29745,10 +29766,11 @@ var az_axi_default = {
29745
29766
  var mg_axi_default = {
29746
29767
  generatedBy: "scripts/upstream-inventory.mjs",
29747
29768
  tool: "mg-axi",
29748
- version: "0.1.12",
29749
- integrity: "sha512-TBt2y2rpfn8oi4YOq95uIo43RTsV/iOc0xFa3e3YCjhqd/ZL/y2is+7W0+B5/g1sdwb95yJbcU1eqeJEzmKJ5g==",
29769
+ version: "0.1.13",
29770
+ integrity: "sha512-V9f/H1xISbn1ar3ARVnYvtT4NDUDRgvhCkrnQd6lqNdj1MeQjF4JESS6PA6hY3epXKrqE+g/2nCfgJV1JDmDTQ==",
29750
29771
  parserEvidence: "Installed pinned catalogue exports",
29751
- packageManifestSha256: "e686938dd356bffe87d9884d656a139b91e7eb6d62370f6aba3b5fd14283fb45",
29772
+ packageManifestSha256: "2357d6568740146d05a0ad67fb8e0be3c871261726d3cf110fed83e216001dc9",
29773
+ skillSha256: "98ff12e741b04592afae76853a00f572940dee6edf0e868d2ccba04a742b24ad",
29752
29774
  environment: [
29753
29775
  {
29754
29776
  name: "MG_AXI_CONFIG"
@@ -29910,7 +29932,7 @@ var mg_axi_default = {
29910
29932
  },
29911
29933
  {
29912
29934
  path: "dist/cli.js",
29913
- sha256: "613fc3ac4870e5538d2c53b0760244c7e3bb3837fa3d97c1b89b7916c557af44"
29935
+ sha256: "723f00e5031068211b541ee43447fb559833bea924c91131e0d074349d5b9a4e"
29914
29936
  },
29915
29937
  {
29916
29938
  path: "dist/profiles.js",
@@ -29988,7 +30010,7 @@ var mg_axi_default = {
29988
30010
  },
29989
30011
  {
29990
30012
  path: "dist/cli.js",
29991
- sha256: "613fc3ac4870e5538d2c53b0760244c7e3bb3837fa3d97c1b89b7916c557af44"
30013
+ sha256: "723f00e5031068211b541ee43447fb559833bea924c91131e0d074349d5b9a4e"
29992
30014
  }
29993
30015
  ]
29994
30016
  },
@@ -42171,8 +42193,605 @@ var hybrid_axi_default = {
42171
42193
  ]
42172
42194
  };
42173
42195
 
42196
+ // tools/inventories/checkpoint-axi.json
42197
+ var checkpoint_axi_default = {
42198
+ generatedBy: "scripts/checkpoint-inventory.mjs",
42199
+ tool: "checkpoint-axi",
42200
+ version: "0.1.0",
42201
+ integrity: "sha512-fbwTL0lbbJwCDjR8bt431kWHSCEuBmAEzk/QNJzsVcAbve2x8Ehtz/mr/aPzJ6I/WMRQiRPFpCE2zsW/2CRHlQ==",
42202
+ parserEvidence: "Published catalogue, fixed regional map and reviewed native parsers, write coordinator and download contracts",
42203
+ sources: [
42204
+ {
42205
+ path: "dist/src/catalogue.js",
42206
+ sha256: "59b9568b614a101e2746a8275768c238ba8eb7166185119875a40f7eac191f7a"
42207
+ },
42208
+ {
42209
+ path: "dist/src/cli.js",
42210
+ sha256: "11a2e7f6c8ba3fc5507aa8ca33d480337a5a64bf79c241f4ed478f512ac8fa92"
42211
+ },
42212
+ {
42213
+ path: "dist/src/doctor.js",
42214
+ sha256: "7f25c415bc59b12e6d0a6155d701c3646bd3370e0b2024a29efdbaf5e4c0ffed"
42215
+ },
42216
+ {
42217
+ path: "dist/src/downloads.js",
42218
+ sha256: "206f08ec7d978e41fe1c9c4ba744f1cf4c3f47ee909a1f761645a802371c8d6e"
42219
+ },
42220
+ {
42221
+ path: "dist/src/exceptions.js",
42222
+ sha256: "8264427dd5871a447e3e8759341251779454490a387cdca801a0e68b81265327"
42223
+ },
42224
+ {
42225
+ path: "dist/src/local-commands.js",
42226
+ sha256: "ed9c39e204d42f45ae3c5b8008bf1c719d88f8e7214168f68de4d15921e35299"
42227
+ },
42228
+ {
42229
+ path: "dist/src/private-file.js",
42230
+ sha256: "574a40223d0bba130f903eb89e2cfd2d96bf01a4df237738af993272ebee0332"
42231
+ },
42232
+ {
42233
+ path: "dist/src/profiles.js",
42234
+ sha256: "db013b041bb6302993d7045fe3bd411bbd1a3593b5b2a84a3d8411645f55d3e6"
42235
+ },
42236
+ {
42237
+ path: "dist/src/reads.js",
42238
+ sha256: "02a5478edb3d44ab51ea300095794abc69d9e4a353060af4faed0d6e4ce592a7"
42239
+ },
42240
+ {
42241
+ path: "dist/src/redact.js",
42242
+ sha256: "9793e98af5c93c09e89748e26675b2d48663904a27e3aa42655954f93025c35a"
42243
+ },
42244
+ {
42245
+ path: "dist/src/regions.js",
42246
+ sha256: "44288abe19a68fa672bc04ad167141717aed5c3a333b2420b14ee68e13abee78"
42247
+ },
42248
+ {
42249
+ path: "dist/src/transport.js",
42250
+ sha256: "7beb28cc283e876db4f6aeaf5c308280e1fce482c20c19dd9924e29985e54e56"
42251
+ },
42252
+ {
42253
+ path: "dist/src/write-exceptions.js",
42254
+ sha256: "34114e0b2a3e04462914118ba6108f6d7eb7bf38a417f1f80ec4126deff786a8"
42255
+ },
42256
+ {
42257
+ path: "dist/src/write-sectools.js",
42258
+ sha256: "c962f2180d34625c9a0be1ad468e17b3e25d93390b0efae3dec02e9ab8f1dd9e"
42259
+ },
42260
+ {
42261
+ path: "dist/src/writes.js",
42262
+ sha256: "4f683a01ab151b4b1e61588b6c3fe86f3d8a34ebdbdb1a257dc42cae21e6f5ed"
42263
+ }
42264
+ ],
42265
+ credentialSchema: {
42266
+ $schema: "https://json-schema.org/draft/2020-12/schema",
42267
+ $id: "https://github.com/knowttl/checkpoint-axi/axi-credential.schema.json",
42268
+ title: "Check Point AXI credential profile",
42269
+ type: "object",
42270
+ additionalProperties: false,
42271
+ required: [
42272
+ "region",
42273
+ "clientId"
42274
+ ],
42275
+ properties: {
42276
+ region: {
42277
+ type: "string",
42278
+ enum: [
42279
+ "us",
42280
+ "eu",
42281
+ "ca",
42282
+ "au",
42283
+ "uk",
42284
+ "uae",
42285
+ "in"
42286
+ ]
42287
+ },
42288
+ clientId: {
42289
+ type: "string",
42290
+ minLength: 1,
42291
+ pattern: "\\S"
42292
+ },
42293
+ clientSecret: {
42294
+ $ref: "#/$defs/secretRef",
42295
+ "x-secret": true,
42296
+ default: {
42297
+ env: "CHECKPOINT_AXI_CLIENT_SECRET"
42298
+ }
42299
+ },
42300
+ saas: {
42301
+ type: "string",
42302
+ minLength: 1,
42303
+ pattern: "\\S",
42304
+ default: "office365_emails"
42305
+ },
42306
+ scope: {
42307
+ type: "string",
42308
+ minLength: 1,
42309
+ pattern: "\\S"
42310
+ },
42311
+ downloads: {
42312
+ type: "object",
42313
+ additionalProperties: false,
42314
+ required: [
42315
+ "allow"
42316
+ ],
42317
+ default: {
42318
+ allow: false
42319
+ },
42320
+ properties: {
42321
+ allow: {
42322
+ type: "boolean"
42323
+ }
42324
+ }
42325
+ },
42326
+ writes: {
42327
+ type: "object",
42328
+ additionalProperties: false,
42329
+ required: [
42330
+ "allowWrites",
42331
+ "operations"
42332
+ ],
42333
+ default: {
42334
+ allowWrites: false,
42335
+ operations: []
42336
+ },
42337
+ properties: {
42338
+ allowWrites: {
42339
+ type: "boolean"
42340
+ },
42341
+ operations: {
42342
+ type: "array",
42343
+ items: {
42344
+ type: "string",
42345
+ pattern: "^[a-z][A-Za-z0-9_.-]*$"
42346
+ }
42347
+ }
42348
+ }
42349
+ }
42350
+ },
42351
+ $defs: {
42352
+ secretRef: {
42353
+ oneOf: [
42354
+ {
42355
+ type: "object",
42356
+ additionalProperties: false,
42357
+ required: [
42358
+ "env"
42359
+ ],
42360
+ properties: {
42361
+ env: {
42362
+ type: "string",
42363
+ pattern: "^[A-Za-z_][A-Za-z0-9_]*$"
42364
+ }
42365
+ }
42366
+ },
42367
+ {
42368
+ type: "object",
42369
+ additionalProperties: false,
42370
+ required: [
42371
+ "file"
42372
+ ],
42373
+ properties: {
42374
+ file: {
42375
+ type: "string",
42376
+ pattern: "^(?:/|[A-Za-z]:[\\\\/])"
42377
+ }
42378
+ }
42379
+ }
42380
+ ]
42381
+ }
42382
+ }
42383
+ },
42384
+ regions: {
42385
+ us: "https://cloudinfra-gw-us.portal.checkpoint.com",
42386
+ eu: "https://cloudinfra-gw.portal.checkpoint.com",
42387
+ ca: "https://cloudinfra-gw.ca.portal.checkpoint.com",
42388
+ au: "https://cloudinfra-gw.ap.portal.checkpoint.com",
42389
+ uk: "https://cloudinfra-gw.uk.portal.checkpoint.com",
42390
+ uae: "https://cloudinfra-gw.me.portal.checkpoint.com",
42391
+ in: "https://cloudinfra-gw.in.portal.checkpoint.com"
42392
+ },
42393
+ skillSha256: "69f0754d565fc1e65163435ef698ea6dca6009470f158171cb3b4258d27c647b",
42394
+ nativeWriteSettings: {
42395
+ supportedOperations: [
42396
+ "attachment.download",
42397
+ "attachment.download-all",
42398
+ "email.download",
42399
+ "email.quarantine",
42400
+ "email.restore",
42401
+ "exception.anomaly.create",
42402
+ "exception.anomaly.remove",
42403
+ "exception.click-time.create",
42404
+ "exception.click-time.remove",
42405
+ "exception.click-time.remove-items",
42406
+ "exception.click-time.update",
42407
+ "exception.dlp.create",
42408
+ "exception.dlp.update",
42409
+ "exception.malware.create",
42410
+ "exception.malware.update",
42411
+ "exception.phishing-allow.create",
42412
+ "exception.phishing-allow.remove",
42413
+ "exception.phishing-allow.update",
42414
+ "exception.phishing-block.create",
42415
+ "exception.phishing-block.remove",
42416
+ "exception.phishing-block.update",
42417
+ "exception.spam-allow.create",
42418
+ "exception.spam-allow.remove",
42419
+ "exception.spam-allow.update",
42420
+ "exception.url.create",
42421
+ "exception.url.update"
42422
+ ],
42423
+ dynamicOperation: "event.action.<exact available action name>"
42424
+ },
42425
+ adapterBoundary: {
42426
+ unsafeOverrides: [
42427
+ "config",
42428
+ "profile",
42429
+ "origin",
42430
+ "out"
42431
+ ],
42432
+ inputFileFlags: [
42433
+ "input"
42434
+ ],
42435
+ blockedCommands: [
42436
+ "profile list",
42437
+ "config path",
42438
+ "exception clear",
42439
+ "email download",
42440
+ "attachment download",
42441
+ "attachment download-all"
42442
+ ],
42443
+ downloadCommands: [
42444
+ "email download",
42445
+ "attachment download",
42446
+ "attachment download-all"
42447
+ ],
42448
+ inputs: {
42449
+ stdin: "unsupported",
42450
+ files: "uploaded private JSON leaves only",
42451
+ downloads: "authenticated hosted transfers only"
42452
+ },
42453
+ nativeWrites: "native preview, exact operation allow-list, execute, exact confirm and durable journal; ambiguous deletes refused"
42454
+ },
42455
+ discovery: {
42456
+ commands: [
42457
+ "auth",
42458
+ "doctor",
42459
+ "email",
42460
+ "event",
42461
+ "exception",
42462
+ "home",
42463
+ "task"
42464
+ ],
42465
+ example: [
42466
+ "email",
42467
+ "search",
42468
+ "--limit",
42469
+ "1"
42470
+ ],
42471
+ help: "checkpoint-axi email search [--limit <n>]\nArtium manages region, client ID and secret. Writes require administrator-enabled exact operations and native preview, --execute and exact --confirm. Upload private JSON with --input. Use artium-axi download for authenticated email and attachment saving with host-owned confirmation; ordinary downloads and local configuration are blocked.\n"
42472
+ },
42473
+ suggestionFields: [
42474
+ "help"
42475
+ ],
42476
+ format: "TOON",
42477
+ commands: [
42478
+ {
42479
+ command: "attachment download",
42480
+ effect: "blocked",
42481
+ flags: {
42482
+ config: "Config path; default CHECKPOINT_AXI_CONFIG or platform path",
42483
+ profile: "Profile name; default CHECKPOINT_AXI_PROFILE, env profile, config default, or sole profile",
42484
+ help: "Show concise command help; default false",
42485
+ out: "Required absolute new output file; mode 0600, never stdout or overwrite",
42486
+ scope: "Optional authorized scope query; default profile scope when configured; live behavior unverified"
42487
+ }
42488
+ },
42489
+ {
42490
+ command: "attachment download-all",
42491
+ effect: "blocked",
42492
+ flags: {
42493
+ config: "Config path; default CHECKPOINT_AXI_CONFIG or platform path",
42494
+ profile: "Profile name; default CHECKPOINT_AXI_PROFILE, env profile, config default, or sole profile",
42495
+ help: "Show concise command help; default false",
42496
+ out: "Required absolute new output file; mode 0600, never stdout or overwrite",
42497
+ scope: "Optional authorized scope query; default profile scope when configured; live behavior unverified"
42498
+ }
42499
+ },
42500
+ {
42501
+ command: "auth status",
42502
+ effect: "read",
42503
+ flags: {
42504
+ config: "Config path; default CHECKPOINT_AXI_CONFIG or platform path",
42505
+ profile: "Profile name; default CHECKPOINT_AXI_PROFILE, env profile, config default, or sole profile",
42506
+ fields: "Comma-separated output fields; default all",
42507
+ full: "Show full strings instead of 500-character previews; default false",
42508
+ help: "Show concise command help; default false"
42509
+ }
42510
+ },
42511
+ {
42512
+ command: "config path",
42513
+ effect: "blocked",
42514
+ flags: {
42515
+ config: "Config path; default CHECKPOINT_AXI_CONFIG or platform path",
42516
+ profile: "Profile name; default CHECKPOINT_AXI_PROFILE, env profile, config default, or sole profile",
42517
+ fields: "Comma-separated output fields; default all",
42518
+ full: "Show full strings instead of 500-character previews; default false",
42519
+ help: "Show concise command help; default false"
42520
+ }
42521
+ },
42522
+ {
42523
+ command: "doctor",
42524
+ effect: "read",
42525
+ flags: {
42526
+ config: "Config path; default CHECKPOINT_AXI_CONFIG or platform path",
42527
+ profile: "Profile name; default CHECKPOINT_AXI_PROFILE, env profile, config default, or sole profile",
42528
+ fields: "Comma-separated output fields; default all",
42529
+ full: "Show full strings instead of 500-character previews; default false",
42530
+ help: "Show concise command help; default false",
42531
+ saas: "SaaS override; default selected profile saas or office365_emails"
42532
+ }
42533
+ },
42534
+ {
42535
+ command: "email download",
42536
+ effect: "blocked",
42537
+ flags: {
42538
+ config: "Config path; default CHECKPOINT_AXI_CONFIG or platform path",
42539
+ profile: "Profile name; default CHECKPOINT_AXI_PROFILE, env profile, config default, or sole profile",
42540
+ help: "Show concise command help; default false",
42541
+ out: "Required absolute new output file; mode 0600, never stdout or overwrite",
42542
+ original: "Download original email without processing modifications; default false"
42543
+ }
42544
+ },
42545
+ {
42546
+ command: "email quarantine",
42547
+ effect: "write",
42548
+ flags: {
42549
+ config: "Config path; default CHECKPOINT_AXI_CONFIG or platform path",
42550
+ profile: "Profile name; default CHECKPOINT_AXI_PROFILE, env profile, config default, or sole profile",
42551
+ fields: "Comma-separated output fields; default all",
42552
+ full: "Show full strings instead of 500-character previews; default false",
42553
+ help: "Show concise command help; default false",
42554
+ ids: "Required comma-separated unique entity IDs; maximum 20",
42555
+ execute: "Send once after all write gates; default false (preview)",
42556
+ "dry-run": "Explicit preview; cannot combine with --execute",
42557
+ confirm: "Exact operation followed by a space and the comma-separated IDs in supplied order"
42558
+ }
42559
+ },
42560
+ {
42561
+ command: "email restore",
42562
+ effect: "write",
42563
+ flags: {
42564
+ config: "Config path; default CHECKPOINT_AXI_CONFIG or platform path",
42565
+ profile: "Profile name; default CHECKPOINT_AXI_PROFILE, env profile, config default, or sole profile",
42566
+ fields: "Comma-separated output fields; default all",
42567
+ full: "Show full strings instead of 500-character previews; default false",
42568
+ help: "Show concise command help; default false",
42569
+ ids: "Required comma-separated unique entity IDs; maximum 20",
42570
+ execute: "Send once after all write gates; default false (preview)",
42571
+ "dry-run": "Explicit preview; cannot combine with --execute",
42572
+ confirm: "Exact operation followed by a space and the comma-separated IDs in supplied order"
42573
+ }
42574
+ },
42575
+ {
42576
+ command: "email search",
42577
+ effect: "read",
42578
+ flags: {
42579
+ config: "Config path; default CHECKPOINT_AXI_CONFIG or platform path",
42580
+ profile: "Profile name; default CHECKPOINT_AXI_PROFILE, env profile, config default, or sole profile",
42581
+ fields: "Comma-separated output fields; default all",
42582
+ full: "Show full strings instead of 500-character previews; default false",
42583
+ help: "Show concise command help; default false",
42584
+ saas: "SaaS override; default selected profile saas or office365_emails",
42585
+ "saas-entity": "Optional SaaS entity type selector",
42586
+ "start-date": "ISO timestamp with timezone; default 24 hours before end-date; maximum window 31 days",
42587
+ "end-date": "ISO timestamp with timezone; default now",
42588
+ limit: "Maximum rows; default 50, range 1-1000; cannot combine with --all",
42589
+ all: "Read up to 1000 rows / 10 HTTP requests / 60 seconds / 8 MiB; default false",
42590
+ cursor: "Opaque continuation bound to profile, region, operation and selectors; repeat original selectors",
42591
+ filter: "JSON array of {saasAttrName, saasAttrOp, saasAttrValue} filters (guide pages 19-20)"
42592
+ }
42593
+ },
42594
+ {
42595
+ command: "email show",
42596
+ effect: "read",
42597
+ flags: {
42598
+ config: "Config path; default CHECKPOINT_AXI_CONFIG or platform path",
42599
+ profile: "Profile name; default CHECKPOINT_AXI_PROFILE, env profile, config default, or sole profile",
42600
+ fields: "Comma-separated output fields; default all",
42601
+ full: "Show full strings instead of 500-character previews; default false",
42602
+ help: "Show concise command help; default false"
42603
+ }
42604
+ },
42605
+ {
42606
+ command: "event action",
42607
+ effect: "write",
42608
+ flags: {
42609
+ config: "Config path; default CHECKPOINT_AXI_CONFIG or platform path",
42610
+ profile: "Profile name; default CHECKPOINT_AXI_PROFILE, env profile, config default, or sole profile",
42611
+ fields: "Comma-separated output fields; default all",
42612
+ full: "Show full strings instead of 500-character previews; default false",
42613
+ help: "Show concise command help; default false",
42614
+ ids: "Required comma-separated unique event IDs; maximum 20",
42615
+ execute: "Send once after all write gates; default false (preview)",
42616
+ "dry-run": "Explicit preview; cannot combine with --execute",
42617
+ confirm: "Exact operation followed by a space and the comma-separated IDs in supplied order",
42618
+ name: "Required available action name; nonempty action parameters are unverified"
42619
+ }
42620
+ },
42621
+ {
42622
+ command: "event list",
42623
+ effect: "read",
42624
+ flags: {
42625
+ config: "Config path; default CHECKPOINT_AXI_CONFIG or platform path",
42626
+ profile: "Profile name; default CHECKPOINT_AXI_PROFILE, env profile, config default, or sole profile",
42627
+ fields: "Comma-separated output fields; default all",
42628
+ full: "Show full strings instead of 500-character previews; default false",
42629
+ help: "Show concise command help; default false",
42630
+ "start-date": "ISO timestamp with timezone; default 24 hours before end-date; maximum window 31 days",
42631
+ "end-date": "ISO timestamp with timezone; default now",
42632
+ limit: "Maximum rows; default 50, range 1-1000; cannot combine with --all",
42633
+ all: "Read up to 1000 rows / 10 HTTP requests / 60 seconds / 8 MiB; default false",
42634
+ cursor: "Opaque continuation bound to profile, region, operation and selectors; repeat original selectors",
42635
+ saas: "Comma-separated SaaS overrides; default selected profile saas or office365_emails",
42636
+ "event-types": "Comma-separated event types; default unfiltered",
42637
+ "event-states": "Comma-separated event states; default unfiltered",
42638
+ severities: "Comma-separated severities; default unfiltered",
42639
+ "event-ids": "Comma-separated event IDs; default unfiltered",
42640
+ "confidence-indicator": "Confidence indicator selector; default unfiltered",
42641
+ description: "Description selector; default unfiltered"
42642
+ }
42643
+ },
42644
+ {
42645
+ command: "event show",
42646
+ effect: "read",
42647
+ flags: {
42648
+ config: "Config path; default CHECKPOINT_AXI_CONFIG or platform path",
42649
+ profile: "Profile name; default CHECKPOINT_AXI_PROFILE, env profile, config default, or sole profile",
42650
+ fields: "Comma-separated output fields; default all",
42651
+ full: "Show full strings instead of 500-character previews; default false",
42652
+ help: "Show concise command help; default false"
42653
+ }
42654
+ },
42655
+ {
42656
+ command: "exception clear",
42657
+ effect: "blocked",
42658
+ flags: {
42659
+ config: "Config path; default CHECKPOINT_AXI_CONFIG or platform path",
42660
+ profile: "Profile name; default CHECKPOINT_AXI_PROFILE, env profile, config default, or sole profile",
42661
+ fields: "Comma-separated output fields; default all",
42662
+ full: "Show full strings instead of 500-character previews; default false",
42663
+ help: "Show concise command help; default false",
42664
+ execute: "Send once after all write gates; default false (preview)",
42665
+ "dry-run": "Explicit preview; cannot combine with --execute",
42666
+ confirm: "Exact operation followed by a space and every target from preview (payload sha256 for create and malware/url/dlp update, exception ID or comma-separated item IDs otherwise)"
42667
+ }
42668
+ },
42669
+ {
42670
+ command: "exception create",
42671
+ effect: "write",
42672
+ flags: {
42673
+ config: "Config path; default CHECKPOINT_AXI_CONFIG or platform path",
42674
+ profile: "Profile name; default CHECKPOINT_AXI_PROFILE, env profile, config default, or sole profile",
42675
+ fields: "Comma-separated output fields; default all",
42676
+ full: "Show full strings instead of 500-character previews; default false",
42677
+ help: "Show concise command help; default false",
42678
+ execute: "Send once after all write gates; default false (preview)",
42679
+ "dry-run": "Explicit preview; cannot combine with --execute",
42680
+ confirm: "Exact operation followed by a space and every target from preview (payload sha256 for create and malware/url/dlp update, exception ID or comma-separated item IDs otherwise)",
42681
+ input: "Required absolute private JSON file containing documented requestData fields directly; fields depend on kind; update sends a replacement PUT",
42682
+ specific: "Malware/url/dlp only: use the documented create-specific /exceptions route; default false; included in confirmation digest"
42683
+ }
42684
+ },
42685
+ {
42686
+ command: "exception list",
42687
+ effect: "read",
42688
+ flags: {
42689
+ config: "Config path; default CHECKPOINT_AXI_CONFIG or platform path",
42690
+ profile: "Profile name; default CHECKPOINT_AXI_PROFILE, env profile, config default, or sole profile",
42691
+ fields: "Comma-separated output fields; default all",
42692
+ full: "Show full strings instead of 500-character previews; default false",
42693
+ help: "Show concise command help; default false",
42694
+ type: "Required for malware: hash,micro_hash,file_type,ppat_sender_name,allow_file_type,sender_email; url: allow-url,allow-domain,block-url,block-domain; dlp: hash,text_content,sender_email,recipient_email",
42695
+ items: "Click-time item routes instead of list routes; default false",
42696
+ limit: "Maximum rows; default 50, range 1-1000; cannot combine with --all",
42697
+ all: "Return up to 1000 rows within transport budgets; no server continuation parameter is documented"
42698
+ }
42699
+ },
42700
+ {
42701
+ command: "exception remove",
42702
+ effect: "write",
42703
+ flags: {
42704
+ config: "Config path; default CHECKPOINT_AXI_CONFIG or platform path",
42705
+ profile: "Profile name; default CHECKPOINT_AXI_PROFILE, env profile, config default, or sole profile",
42706
+ fields: "Comma-separated output fields; default all",
42707
+ full: "Show full strings instead of 500-character previews; default false",
42708
+ help: "Show concise command help; default false",
42709
+ execute: "Send once after all write gates; default false (preview)",
42710
+ "dry-run": "Explicit preview; cannot combine with --execute",
42711
+ confirm: "Exact operation followed by a space and every target from preview (payload sha256 for create and malware/url/dlp update, exception ID or comma-separated item IDs otherwise)"
42712
+ }
42713
+ },
42714
+ {
42715
+ command: "exception remove-items",
42716
+ effect: "write",
42717
+ flags: {
42718
+ config: "Config path; default CHECKPOINT_AXI_CONFIG or platform path",
42719
+ profile: "Profile name; default CHECKPOINT_AXI_PROFILE, env profile, config default, or sole profile",
42720
+ fields: "Comma-separated output fields; default all",
42721
+ full: "Show full strings instead of 500-character previews; default false",
42722
+ help: "Show concise command help; default false",
42723
+ execute: "Send once after all write gates; default false (preview)",
42724
+ "dry-run": "Explicit preview; cannot combine with --execute",
42725
+ confirm: "Exact operation followed by a space and every target from preview (payload sha256 for create and malware/url/dlp update, exception ID or comma-separated item IDs otherwise)",
42726
+ ids: "Required 1-20 unique comma-separated click-time item IDs"
42727
+ }
42728
+ },
42729
+ {
42730
+ command: "exception show",
42731
+ effect: "read",
42732
+ flags: {
42733
+ config: "Config path; default CHECKPOINT_AXI_CONFIG or platform path",
42734
+ profile: "Profile name; default CHECKPOINT_AXI_PROFILE, env profile, config default, or sole profile",
42735
+ fields: "Comma-separated output fields; default all",
42736
+ full: "Show full strings instead of 500-character previews; default false",
42737
+ help: "Show concise command help; default false",
42738
+ type: "Required for malware: hash,micro_hash,file_type,ppat_sender_name,allow_file_type,sender_email; url: allow-url,allow-domain,block-url,block-domain; dlp: hash,text_content,sender_email,recipient_email",
42739
+ items: "Click-time item route instead of list route; default false"
42740
+ }
42741
+ },
42742
+ {
42743
+ command: "exception update",
42744
+ effect: "write",
42745
+ flags: {
42746
+ config: "Config path; default CHECKPOINT_AXI_CONFIG or platform path",
42747
+ profile: "Profile name; default CHECKPOINT_AXI_PROFILE, env profile, config default, or sole profile",
42748
+ fields: "Comma-separated output fields; default all",
42749
+ full: "Show full strings instead of 500-character previews; default false",
42750
+ help: "Show concise command help; default false",
42751
+ execute: "Send once after all write gates; default false (preview)",
42752
+ "dry-run": "Explicit preview; cannot combine with --execute",
42753
+ confirm: "Exact operation followed by a space and every target from preview (payload sha256 for create and malware/url/dlp update, exception ID or comma-separated item IDs otherwise)",
42754
+ input: "Required absolute private JSON file containing documented requestData fields directly; fields depend on kind; update sends a replacement PUT"
42755
+ }
42756
+ },
42757
+ {
42758
+ command: "home",
42759
+ effect: "read",
42760
+ flags: {
42761
+ config: "Config path; default CHECKPOINT_AXI_CONFIG or platform path",
42762
+ profile: "Profile name; default CHECKPOINT_AXI_PROFILE, env profile, config default, or sole profile",
42763
+ fields: "Comma-separated output fields; default all",
42764
+ full: "Show full strings instead of 500-character previews; default false",
42765
+ help: "Show concise command help; default false"
42766
+ }
42767
+ },
42768
+ {
42769
+ command: "profile list",
42770
+ effect: "blocked",
42771
+ flags: {
42772
+ config: "Config path; default CHECKPOINT_AXI_CONFIG or platform path",
42773
+ profile: "Profile name; default CHECKPOINT_AXI_PROFILE, env profile, config default, or sole profile",
42774
+ fields: "Comma-separated output fields; default all",
42775
+ full: "Show full strings instead of 500-character previews; default false",
42776
+ help: "Show concise command help; default false"
42777
+ }
42778
+ },
42779
+ {
42780
+ command: "task show",
42781
+ effect: "read",
42782
+ flags: {
42783
+ config: "Config path; default CHECKPOINT_AXI_CONFIG or platform path",
42784
+ profile: "Profile name; default CHECKPOINT_AXI_PROFILE, env profile, config default, or sole profile",
42785
+ fields: "Comma-separated output fields; default all",
42786
+ full: "Show full strings instead of 500-character previews; default false",
42787
+ help: "Show concise command help; default false"
42788
+ }
42789
+ }
42790
+ ]
42791
+ };
42792
+
42174
42793
  // src/shared/tool-manifests.ts
42175
- var toolManifests = { "falcon-axi": falcon_axi_default, "vectra-axi": vectra_axi_default, "az-axi": az_axi_default, "mg-axi": mg_axi_default, "ldap-axi": ldap_axi_default, "ado-axi": ado_axi_default, "awx-axi": awx_axi_default, "tenable-axi": tenable_axi_default, "hybrid-axi": hybrid_axi_default };
42794
+ var toolManifests = { "falcon-axi": falcon_axi_default, "vectra-axi": vectra_axi_default, "az-axi": az_axi_default, "mg-axi": mg_axi_default, "ldap-axi": ldap_axi_default, "ado-axi": ado_axi_default, "awx-axi": awx_axi_default, "tenable-axi": tenable_axi_default, "hybrid-axi": hybrid_axi_default, "checkpoint-axi": checkpoint_axi_default };
42176
42795
 
42177
42796
  // node_modules/.pnpm/@toon-format+toon@2.3.1/node_modules/@toon-format/toon/dist/index.mjs
42178
42797
  var NULL_LITERAL = "null";
@@ -43540,6 +44159,7 @@ function resolveDecodeOptions(options) {
43540
44159
 
43541
44160
  // src/cli/rewrite.ts
43542
44161
  var managedFlags = {
44162
+ "checkpoint-axi": checkpoint_axi_default.adapterBoundary.unsafeOverrides,
43543
44163
  "hybrid-axi": hybrid_axi_default.adapterBoundary.unsafeOverrides,
43544
44164
  "tenable-axi": tenable_axi_default.adapterBoundary.unsafeOverrides,
43545
44165
  "awx-axi": awx_axi_default.adapterBoundary.unsafeOverrides,
@@ -43565,6 +44185,25 @@ function rewriteDiscoveryHelp(help, tool) {
43565
44185
  }
43566
44186
  function rewriteSuggestions(output3, tool, truncated = false) {
43567
44187
  if (truncated) return output3;
44188
+ if (tool === "checkpoint-axi") {
44189
+ try {
44190
+ const document = decode3(output3);
44191
+ if (document.command && document.flags) return encode3({
44192
+ ...document,
44193
+ command: document.command.startsWith("artium-axi ") ? document.command : `artium-axi checkpoint-axi ${document.command}`,
44194
+ flags: Object.fromEntries(Object.entries(document.flags).filter(([name]) => !checkpoint_axi_default.adapterBoundary.unsafeOverrides.includes(name.replace(/^--/, "")))),
44195
+ examples: (document.examples ?? []).filter((example) => !/--(?:config|profile|out)\b/.test(example)).map((example) => example.replace(/^checkpoint-axi\b/, "artium-axi checkpoint-axi")),
44196
+ help: [checkpoint_axi_default.discovery.help.replaceAll("checkpoint-axi ", "artium-axi checkpoint-axi ")]
44197
+ }) + "\n";
44198
+ if (document.bin || document.commands) return encode3({
44199
+ bin: "artium-axi checkpoint-axi",
44200
+ description: "Investigate Check Point Email Security with managed credentials.",
44201
+ commands: checkpoint_axi_default.commands.filter((route) => route.effect !== "blocked").map((route) => route.command),
44202
+ help: [checkpoint_axi_default.discovery.help.replaceAll("checkpoint-axi ", "artium-axi checkpoint-axi ")]
44203
+ }) + "\n";
44204
+ } catch {
44205
+ }
44206
+ }
43568
44207
  if (tool === "hybrid-axi") {
43569
44208
  try {
43570
44209
  const document = decode3(output3);
@@ -43728,6 +44367,10 @@ function managedFlagRanges(command, tool) {
43728
44367
  return ranges;
43729
44368
  }
43730
44369
  function hostedHelp(help, tool, flags, commands2) {
44370
+ if (tool === "checkpoint-axi") {
44371
+ help = help.split("\n").filter((line) => !/CHECKPOINT_AXI_|SecretRef|checkpoint-axi (?:config|profile)|Valid commands:/.test(line)).join("\n");
44372
+ if (!help.trim()) help = checkpoint_axi_default.discovery.help;
44373
+ }
43731
44374
  if (tool === "hybrid-axi") {
43732
44375
  help = help.split("\n").filter((line) => !/HYBRID_AXI_|SecretRefs|hybrid-axi (?:setup|config|profile)|--(?:config|profile|origin|output)\b/.test(line)).join("\n");
43733
44376
  const guidance = "Artium manages the API key and fixed origin. Submissions, YARA mutations, consuming matches and four reviewed archive downloads require independently selected administrator-enabled operations, native preview, execute, exact confirmation and journal. Quick scans transmit the supplied sample or URL. Use artium-axi download --help for authenticated one-shot CLI verified saving and live-malware warnings.";
@@ -44031,20 +44674,20 @@ var commands = {
44031
44674
  doctor: { usage: "artium-axi doctor", purpose: "Check the server, certificate, token, CLI version and cached tool health.", flags: [], example: "artium-axi doctor" },
44032
44675
  update: { usage: "artium-axi update", purpose: "Download and verify the server\u2019s client, replace this file and keep a .bak backup. npm installations must use npm install -g @knowttl/artium-axi.", flags: [], example: "artium-axi update" },
44033
44676
  download: {
44034
- usage: "artium-axi download --operation <operation> --selector <hash|report-id> --type <bin|dropped-files|memory> --destination <absolute-new-path> [--transfer <id> --execute --confirm <exact-confirm>] [--password-stdin|--sso]",
44035
- purpose: "Preview or explicitly save a hosted Hybrid Analysis archive. Operations remain unavailable until adapter enablement.",
44677
+ usage: "artium-axi download --operation <operation> --selector <selector> --type <type> --destination <absolute-new-path> [--transfer <id> --execute --confirm <exact-confirm>] [--password-stdin|--sso]",
44678
+ purpose: "Preview or explicitly save a hosted Hybrid Analysis archive or Check Point email/attachment. Each operation requires administrator enablement.",
44036
44679
  flags: [
44037
- "--operation <hash-download-bin|report-download-bin|report-download-dropped-files|report-download-memory> (required)",
44038
- "--selector <hash|report-id> (required)",
44039
- "--type <bin|dropped-files|memory> (required)",
44680
+ "--operation <hash-download-bin|report-download-bin|report-download-dropped-files|report-download-memory|email.download|attachment.download|attachment.download-all> (required)",
44681
+ "--selector <hash|report-id|entity-id|entity-id/attachment-id> (required; attachment.download uses entity-id/attachment-id)",
44682
+ "--type <bin|dropped-files|memory|email|original|attachment|zip> (required; email.download uses email or original, attachment.download uses attachment, attachment.download-all uses zip)",
44040
44683
  "--destination <absolute-new-path> (required; Linux private 0700 directory, no symlink components or overwrite)",
44041
44684
  "--transfer <id> (required for execution; preview transfer ID)",
44042
44685
  "--execute (default false)",
44043
- "--confirm <exact-confirm> (required for execution; unchanged native preview string)",
44686
+ "--confirm <exact-confirm> (required for execution; unchanged preview string; Check Point confirmation is host-owned)",
44044
44687
  "--password-stdin (default false; otherwise terminal password)",
44045
44688
  "--sso (default false; browser identity confirmation)",
44046
44689
  transferWarning,
44047
- `Limit ${transferLimits.artifactBytes / 1024 ** 2} MiB; ${transferLimits.reservationsPerUser} reservation per user, ${transferLimits.reservations} globally, ${transferLimits.reservedBytes / 1024 ** 3} GiB total artifact capacity; absolute expiry ${transferLimits.lifetimeMs / 6e4} minutes after preview preparation, including generation and retrieval. No resume or automatic retry. Missing receipt is unconfirmed.`
44690
+ `Limit ${transferLimits.artifactBytes / 1024 ** 2} MiB (Check Point: 50 MiB with mandatory upstream hash); ${transferLimits.reservationsPerUser} reservation per user, ${transferLimits.reservations} globally, ${transferLimits.reservedBytes / 1024 ** 3} GiB total artifact capacity; absolute expiry ${transferLimits.lifetimeMs / 6e4} minutes after preview preparation, including generation and retrieval. No resume or automatic retry. Missing receipt is unconfirmed.`
44048
44691
  ],
44049
44692
  example: "artium-axi download --operation report-download-bin --selector synthetic-report --type bin --destination /controlled/artifacts/new-archive.bin --sso"
44050
44693
  },
@@ -44081,19 +44724,25 @@ var commands = {
44081
44724
  "tenable-axi": {
44082
44725
  usage: "artium-axi tenable-axi [<args>]",
44083
44726
  purpose: "Investigate Tenable One with managed API keys.",
44084
- flags: ["Writes and export jobs are off by default and require administrator-enabled operations, preview, --execute and exact --confirm. Downloads are blocked."],
44727
+ flags: ["Writes and export jobs are off by default and require administrator-enabled operations, preview, --execute and exact --confirm. Downloads are blocked.", "Declared file flags accept - to read stdin to EOF within 5 s; otherwise INVALID_INPUT. Close stdin or pass a local file path."],
44085
44728
  example: "artium-axi tenable-axi card list --limit 1"
44086
44729
  },
44087
44730
  "hybrid-axi": {
44088
44731
  usage: "artium-axi hybrid-axi [<args>]",
44089
44732
  purpose: "Investigate Hybrid Analysis with a managed API key.",
44090
- flags: ["Submissions, YARA mutations, consuming matches and four reviewed archive downloads are off by default and selected independently by an administrator. Native preview, --execute and exact --confirm remain required. Use artium-axi download --help for authenticated CLI verified saving.", transferWarning],
44733
+ flags: ["Submissions, YARA mutations, consuming matches and four reviewed archive downloads are off by default and selected independently by an administrator. Native preview, --execute and exact --confirm remain required. Use artium-axi download --help for authenticated CLI verified saving.", "--body-file - reads stdin to EOF within 5 s; otherwise INVALID_INPUT. Close stdin or pass a local file path.", transferWarning],
44091
44734
  example: "artium-axi hybrid-axi quota"
44092
44735
  },
44736
+ "checkpoint-axi": {
44737
+ usage: "artium-axi checkpoint-axi [<args>]",
44738
+ purpose: "Investigate Check Point Email Security with managed regional credentials.",
44739
+ flags: ["Writes require administrator-selected exact operations, native preview, --execute and exact --confirm. Private JSON inputs are uploaded with --input; stdin is unavailable. Downloads use artium-axi download with host-owned confirmation. Ambiguous deletes remain blocked."],
44740
+ example: "artium-axi checkpoint-axi email search --limit 1"
44741
+ },
44093
44742
  "az-axi": {
44094
44743
  usage: "artium-axi az-axi [<args>]",
44095
44744
  purpose: "Run Azure commands with your managed identity.",
44096
- flags: ["Arguments after az-axi are forwarded upstream, including --help."],
44745
+ flags: ["Arguments after az-axi are forwarded upstream, including --help.", "Query commands read non-terminal stdin to EOF only without a file, positional query or query flag. api reads stdin only without --body, --body-file or --data; method/path are not body sources. The pinned upstream accepts --body, not --data.", "Tool stdin must reach EOF within 5 s; otherwise INVALID_INPUT. Close stdin or pass --file for queries, --body or --body-file for api."],
44097
44746
  example: "artium-axi az-axi sub list"
44098
44747
  },
44099
44748
  "mg-axi": {
@@ -44380,9 +45029,12 @@ ${executableBlock}
44380
45029
  // src/cli/input.ts
44381
45030
  import { createReadStream } from "node:fs";
44382
45031
  import { basename } from "node:path";
44383
- async function readBounded(stream, limit) {
45032
+ async function readBounded(stream, limit, stdinAlternative) {
44384
45033
  const chunks = [];
44385
45034
  let bytes = 0;
45035
+ const deadline = stdinAlternative === void 0 ? void 0 : setTimeout(() => {
45036
+ stream.destroy(new ArtiumError("INVALID_INPUT", `no stdin EOF after 5 s; close stdin or pass ${stdinAlternative}`));
45037
+ }, 5e3);
44386
45038
  try {
44387
45039
  for await (const chunk of stream) {
44388
45040
  const buffer = Buffer.from(chunk);
@@ -44393,6 +45045,8 @@ async function readBounded(stream, limit) {
44393
45045
  } catch (error62) {
44394
45046
  if (error62 instanceof ArtiumError) throw error62;
44395
45047
  throw new ArtiumError("INVALID_INPUT", "Tool input could not be read.", "Check the local input file or stdin.");
45048
+ } finally {
45049
+ clearTimeout(deadline);
44396
45050
  }
44397
45051
  return Buffer.concat(chunks);
44398
45052
  }
@@ -44402,8 +45056,8 @@ async function toolInput(tool, original) {
44402
45056
  const input2 = {};
44403
45057
  let totalFileBytes = 0;
44404
45058
  const hunting = tool === "mg-axi" && args.slice(0, 3).join(" ") === "security hunting query";
44405
- if ((tool === "az-axi" || tool === "hybrid-axi" || tool === "tenable-axi" || hunting) && !args.some((arg) => ["--help", "-h", "--version", "-v", "-V"].includes(arg))) {
44406
- const fileFlags = hunting ? ["file"] : tool === "tenable-axi" ? tenable_axi_default.adapterBoundary.inputFileFlags : tool === "hybrid-axi" ? hybrid_axi_default.adapterBoundary.inputFileFlags : az_axi_default.adapterBoundary.inputFileFlags;
45059
+ if ((tool === "checkpoint-axi" || tool === "az-axi" || tool === "hybrid-axi" || tool === "tenable-axi" || hunting) && !args.some((arg) => ["--help", "-h", "--version", "-v", "-V"].includes(arg))) {
45060
+ const fileFlags = hunting ? ["file"] : tool === "checkpoint-axi" ? checkpoint_axi_default.adapterBoundary.inputFileFlags : tool === "tenable-axi" ? tenable_axi_default.adapterBoundary.inputFileFlags : tool === "hybrid-axi" ? hybrid_axi_default.adapterBoundary.inputFileFlags : az_axi_default.adapterBoundary.inputFileFlags;
44407
45061
  for (let index = 0; index < args.length; index++) {
44408
45062
  if (args[index] === "--") break;
44409
45063
  const [flag] = args[index].split("=");
@@ -44411,7 +45065,7 @@ async function toolInput(tool, original) {
44411
45065
  const equals = args[index].indexOf("=");
44412
45066
  const path = equals < 0 ? args[++index] : args[index].slice(equals + 1);
44413
45067
  if (path === "-" && (tool === "tenable-axi" || tool === "hybrid-axi" && flag === "--body-file")) {
44414
- input2.stdin = (await readBounded(process.stdin, inputLimits.stdinBytes)).toString("utf8");
45068
+ input2.stdin = (await readBounded(process.stdin, inputLimits.stdinBytes, flag)).toString("utf8");
44415
45069
  continue;
44416
45070
  }
44417
45071
  if (!path || path === "-") throw new ArtiumError("UNSUPPORTED_INPUT", "A file flag requires a local file path.");
@@ -44436,20 +45090,22 @@ async function toolInput(tool, original) {
44436
45090
  }
44437
45091
  const route = az_axi_default.commands.find((route2) => ["rg query", "logs query", "api"].includes(route2.handlerCommand) && route2.command.split(" ").every((word, index) => args[leading + index] === word));
44438
45092
  let positional = false;
45093
+ let explicitInput = false;
44439
45094
  if (route) {
44440
45095
  for (let index = leading + route.command.split(" ").length; index < args.length; index++) {
44441
45096
  const token = args[index];
44442
45097
  if (token === "--") {
44443
- positional = index + 1 < args.length;
45098
+ positional ||= index + 1 < args.length;
44444
45099
  break;
44445
45100
  }
44446
45101
  if (!token.startsWith("-") || token === "-") {
44447
45102
  positional = true;
44448
- break;
45103
+ continue;
44449
45104
  }
44450
45105
  const raw = token.slice(token.startsWith("--") ? 2 : 1).split("=")[0];
44451
45106
  const expanded = token.startsWith("--") ? raw : route.shortFlags[raw] ?? raw;
44452
45107
  const name = route.flagAliases[expanded] ?? expanded;
45108
+ if ((route.handlerCommand === "api" ? ["body", "body-file", "data"] : ["graph-query", "analytics-query"]).includes(name)) explicitInput = true;
44453
45109
  const kind = route.flags[name];
44454
45110
  if (token.includes("=") || !kind) continue;
44455
45111
  if (kind === "boolean") {
@@ -44462,8 +45118,8 @@ async function toolInput(tool, original) {
44462
45118
  }
44463
45119
  }
44464
45120
  }
44465
- if (tool === "az-axi" && route && !input2.files?.length && !positional && !process.stdin.isTTY) {
44466
- const stdin = await readBounded(process.stdin, inputLimits.stdinBytes);
45121
+ if (tool === "az-axi" && route && !input2.files?.length && !explicitInput && (route.handlerCommand === "api" || !positional) && !process.stdin.isTTY) {
45122
+ const stdin = await readBounded(process.stdin, inputLimits.stdinBytes, route.handlerCommand === "api" ? "--data (supported body flag: --body)" : "--file");
44467
45123
  if (stdin.length) input2.stdin = stdin.toString("utf8");
44468
45124
  }
44469
45125
  }
@@ -44846,6 +45502,7 @@ async function download(args, output3, managed2) {
44846
45502
  targetDigest: createHash4("sha256").update(destination).digest("hex")
44847
45503
  });
44848
45504
  if (!input2.success || !destination || flags.has("--sso") && flags.has("--password-stdin")) throw new ArtiumError("INVALID_INPUT");
45505
+ const transferRoutes2 = transferRoutesFor(transferTool(input2.data.selection.operation));
44849
45506
  const execute = flags.has("--execute");
44850
45507
  if (execute !== flags.has("--transfer") || execute !== flags.has("--confirm")) throw new ArtiumError("INVALID_INPUT");
44851
45508
  let execution;
@@ -44897,7 +45554,7 @@ async function download(args, output3, managed2) {
44897
45554
  { "x-artium-reauth-ticket": ticket }
44898
45555
  );
44899
45556
  if (!execution) {
44900
- const preview = transferPreviewSchema.parse(await request(transferRoutes.prepare.path, input2.data));
45557
+ const preview = transferPreviewSchema.parse(await request(transferRoutes2.prepare.path, input2.data));
44901
45558
  if (preview.targetDigest !== input2.data.targetDigest) throw new ArtiumError("INVALID_RESPONSE");
44902
45559
  announce({
44903
45560
  ...input2.data.selection,
@@ -44914,7 +45571,7 @@ async function download(args, output3, managed2) {
44914
45571
  let saved = false;
44915
45572
  let receipt = "unconfirmed";
44916
45573
  try {
44917
- const pending = transferStatusSchema.parse(await request(transferRoutes.status.path, retrieval));
45574
+ const pending = transferStatusSchema.parse(await request(transferRoutes2.status.path, retrieval));
44918
45575
  if (pending.transferId !== execution.transferId || pending.outcome !== "preview" || pending.archive !== null) throw new ArtiumError("INVALID_RESPONSE");
44919
45576
  announce({
44920
45577
  ...input2.data.selection,
@@ -44923,11 +45580,11 @@ async function download(args, output3, managed2) {
44923
45580
  expiresAt: pending.expiresAt,
44924
45581
  saveOutcome: "unconfirmed"
44925
45582
  });
44926
- const status = transferStatusSchema.parse(await request(transferRoutes.execute.path, execution));
45583
+ const status = transferStatusSchema.parse(await request(transferRoutes2.execute.path, execution));
44927
45584
  if (status.transferId !== execution.transferId || status.expiresAt !== pending.expiresAt || status.outcome !== "ready" || !status.archive) throw new ArtiumError("INVALID_RESPONSE");
44928
45585
  archive = status.archive;
44929
45586
  await client.artifact(
44930
- transferRoutes.retrieve.path,
45587
+ transferRoutes2.retrieve.path,
44931
45588
  retrieval,
44932
45589
  token,
44933
45590
  ticket,
@@ -44937,19 +45594,19 @@ async function download(args, output3, managed2) {
44937
45594
  saved = true;
44938
45595
  await local.close();
44939
45596
  try {
44940
- await request(transferRoutes.receipt.path, { ...retrieval, archive, saveOutcome: "verified-save" });
45597
+ await request(transferRoutes2.receipt.path, { ...retrieval, archive, saveOutcome: "verified-save" });
44941
45598
  receipt = "confirmed";
44942
45599
  } catch {
44943
45600
  }
44944
45601
  } catch (error62) {
44945
45602
  if (archive && !saved) {
44946
45603
  try {
44947
- await request(transferRoutes.receipt.path, { ...retrieval, archive, saveOutcome: "save-failed" });
45604
+ await request(transferRoutes2.receipt.path, { ...retrieval, archive, saveOutcome: "save-failed" });
44948
45605
  } catch {
44949
45606
  }
44950
45607
  }
44951
45608
  try {
44952
- await request(transferRoutes.cancel.path, retrieval);
45609
+ await request(transferRoutes2.cancel.path, retrieval);
44953
45610
  } catch {
44954
45611
  }
44955
45612
  throw error62;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@knowttl/artium-axi",
3
- "version": "0.0.19",
3
+ "version": "0.0.21",
4
4
  "description": "Client CLI and embedded skill for the Artium managed tools server.",
5
5
  "license": "MIT",
6
6
  "type": "module",