@basis-theory-labs/cli 4.3.0 → 4.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -19,7 +19,7 @@ $ npm install -g @basis-theory-labs/cli
19
19
  $ bt COMMAND
20
20
  running command...
21
21
  $ bt (--version)
22
- @basis-theory-labs/cli/4.3.0 linux-x64 node-v22.23.3
22
+ @basis-theory-labs/cli/4.4.0 linux-x64 node-v22.23.3
23
23
  $ bt --help [COMMAND]
24
24
  USAGE
25
25
  $ bt COMMAND
@@ -66,7 +66,7 @@ EXAMPLES
66
66
  $ bt applications
67
67
  ```
68
68
 
69
- _See code: [dist/commands/applications/index.ts](https://github.com/Basis-Theory-Labs/basistheory-cli/blob/v4.3.0/dist/commands/applications/index.ts)_
69
+ _See code: [dist/commands/applications/index.ts](https://github.com/Basis-Theory-Labs/basistheory-cli/blob/v4.4.0/dist/commands/applications/index.ts)_
70
70
 
71
71
  ## `bt applications create`
72
72
 
@@ -155,7 +155,7 @@ EXAMPLES
155
155
  $ bt proxies
156
156
  ```
157
157
 
158
- _See code: [dist/commands/proxies/index.ts](https://github.com/Basis-Theory-Labs/basistheory-cli/blob/v4.3.0/dist/commands/proxies/index.ts)_
158
+ _See code: [dist/commands/proxies/index.ts](https://github.com/Basis-Theory-Labs/basistheory-cli/blob/v4.4.0/dist/commands/proxies/index.ts)_
159
159
 
160
160
  ## `bt proxies create`
161
161
 
@@ -292,7 +292,8 @@ Read a fixed window of Proxy runtime logs through Events and exit. Requires `eve
292
292
 
293
293
  ```
294
294
  USAGE
295
- $ bt proxies logs read ID -x <value> [--since <value>] [--until <value>] [--format pretty|json|json-pretty]
295
+ $ bt proxies logs read ID -x <value> [--trace-id <value>] [--transform-type request_transform|response_transform]
296
+ [--since <value>] [--until <value>] [--format pretty|json|json-pretty]
296
297
 
297
298
  ARGUMENTS
298
299
  ID Proxy id
@@ -304,6 +305,9 @@ FLAGS
304
305
  <options: pretty|json|json-pretty>
305
306
  --since=<value> window start: positive duration (30s, 5m, 2h, 1d, 1w) or ISO timestamp with timezone;
306
307
  defaults to five minutes before the end
308
+ --trace-id=<value> exact, case-sensitive stored BT trace ID; combines with transform direction using AND
309
+ --transform-type=<option> exact transform direction; includes both directions when omitted
310
+ <options: request_transform|response_transform>
307
311
  --until=<value> window end (exclusive): positive duration or ISO timestamp with timezone; defaults to
308
312
  command start
309
313
 
@@ -311,17 +315,28 @@ DESCRIPTION
311
315
  Read a fixed window of Proxy runtime logs through Events and exit. Requires `event:read` and runtime logging already
312
316
  enabled.
313
317
 
314
- Defaults to the five minutes preceding --until, or command start when --until is omitted. Explicit relative values use
315
- command-start time. Both request and response transforms are included and distinguished. Windows include their start
316
- and exclude their end, filtering event batch timestamps rather than individual record occurrence times. Each matching
317
- batch is expanded in record sequence; flattened output has no global chronological ordering. History is tenant-limited
318
- (24 hours by default, at most 30 days); the API clamps unavailable history. Indexing is asynchronous and pagination is
319
- not a snapshot, so empty or exhausted results do not prove complete coverage. Large windows may hit bounded work
320
- limits and fail with partial output. Application logs come from the injected `logger`, not arbitrary stdout or
321
- `console.log`; collection requires resource opt-in and the platform runtime-log gate. Does not enable logging or open
322
- a tunnel.
318
+ Optional --trace-id matches the effective stored BT trace ID exactly and case-sensitively. A submitted header may be
319
+ sanitized by Vault; the CLI does not normalize or trim it. A reused trace ID can match multiple invocations.
320
+ --transform-type filters request or response transforms, alone or combined with trace ID using AND; omitting it
321
+ includes both directions.
322
+
323
+ Defaults to the five minutes preceding --until, or command start when --until is omitted, regardless of filters.
324
+ Supply --since, for example --since 30d, to request a larger window. Explicit relative values use command-start time.
325
+ Windows include their start and exclude their end, filtering event batch timestamps rather than individual record
326
+ occurrence times. Each matching batch is expanded in record sequence; flattened output has no global chronological
327
+ ordering. History is limited by server retention and tenant entitlements; the API clamps unavailable history. Indexing
328
+ is asynchronous and pagination is not a snapshot, so empty or exhausted results do not prove complete coverage. Large
329
+ windows may hit bounded work limits and fail with partial output. Application logs come from the injected `logger`,
330
+ not arbitrary stdout or `console.log`; collection requires resource opt-in and the platform runtime-log gate. Does not
331
+ enable logging or open a tunnel.
323
332
 
324
333
  EXAMPLES
334
+ $ bt proxies logs read 03858bf5-32d3-4a2e-b74b-daeea0883bca --trace-id customer_Order-42 --since 30d
335
+
336
+ $ bt proxies logs read 03858bf5-32d3-4a2e-b74b-daeea0883bca --transform-type request_transform
337
+
338
+ $ bt proxies logs read 03858bf5-32d3-4a2e-b74b-daeea0883bca --trace-id customer_Order-42 --transform-type response_transform --since 30m
339
+
325
340
  $ bt proxies logs read 03858bf5-32d3-4a2e-b74b-daeea0883bca --since 1h --until 30m
326
341
 
327
342
  $ bt proxies logs read 03858bf5-32d3-4a2e-b74b-daeea0883bca --since 2026-10-01T10:00:00Z --until 2026-10-01T10:15:00Z --format json
@@ -333,7 +348,8 @@ Tail Proxy runtime logs through Events. Requires `event:read` and runtime loggin
333
348
 
334
349
  ```
335
350
  USAGE
336
- $ bt proxies logs tail ID -x <value> [--since <value>] [--format pretty|json|json-pretty]
351
+ $ bt proxies logs tail ID -x <value> [--trace-id <value>] [--transform-type request_transform|response_transform]
352
+ [--since <value>] [--format pretty|json|json-pretty]
337
353
 
338
354
  ARGUMENTS
339
355
  ID Proxy id
@@ -345,24 +361,37 @@ FLAGS
345
361
  <options: pretty|json|json-pretty>
346
362
  --since=<value> include initial history from a positive duration (30s, 5m, 2h, 1d, 1w) or ISO timestamp
347
363
  with timezone; omitted means watch from command start
364
+ --trace-id=<value> exact, case-sensitive stored BT trace ID; combines with transform direction using AND
365
+ --transform-type=<option> exact transform direction; includes both directions when omitted
366
+ <options: request_transform|response_transform>
348
367
 
349
368
  DESCRIPTION
350
369
  Tail Proxy runtime logs through Events. Requires `event:read` and runtime logging already enabled.
351
370
 
352
- Starts watching from command time. Supply --since to retrieve initial history before following new logs. Polls every
353
- five seconds with a rolling five-minute overlap that never reaches before the requested start. Both request and
354
- response transforms are included and distinguished. Time windows filter event batches, not individual record
355
- occurrence times; a newly arriving batch can contain records that occurred before command start. History is
356
- tenant-limited (24 hours by default, at most 30 days); the API clamps unavailable history. Large initial windows may
357
- hit bounded work limits and fail with partial output. Visibility is delayed and best-effort; output has no durable
358
- resume or global chronological ordering. Application logs come from the injected `logger`, not arbitrary stdout or
359
- `console.log`; collection requires resource opt-in and the platform runtime-log gate. Silence does not distinguish an
360
- idle resource, a wrong ID, disabled collection, or delayed indexing. Runs until interrupted, output closes, or an
361
- error occurs.
371
+ Optional --trace-id matches the effective stored BT trace ID exactly and case-sensitively. A submitted header may be
372
+ sanitized by Vault; the CLI does not normalize or trim it. A reused trace ID can match multiple invocations.
373
+ --transform-type filters request or response transforms, alone or combined with trace ID using AND; omitting it
374
+ includes both directions. Filters apply to initial history and every live poll.
375
+
376
+ Starts watching from command time, regardless of filters. Supply --since to retrieve initial history before following
377
+ new logs. Polls every five seconds with a rolling five-minute overlap that never reaches before the requested start.
378
+ Time windows filter event batches, not individual record occurrence times; a newly arriving batch can contain records
379
+ that occurred before command start. History is limited by server retention and tenant entitlements; the API clamps
380
+ unavailable history. Large initial windows may hit bounded work limits and fail with partial output. Visibility is
381
+ delayed and best-effort; output has no durable resume or global chronological ordering. Application logs come from the
382
+ injected `logger`, not arbitrary stdout or `console.log`; collection requires resource opt-in and the platform
383
+ runtime-log gate. Silence does not distinguish an idle resource, a wrong ID or filter, disabled collection, or delayed
384
+ indexing. Runs until interrupted, output closes, or an error occurs.
362
385
 
363
386
  EXAMPLES
364
387
  $ bt proxies logs tail 03858bf5-32d3-4a2e-b74b-daeea0883bca
365
388
 
389
+ $ bt proxies logs tail 03858bf5-32d3-4a2e-b74b-daeea0883bca --trace-id customer_Order-42
390
+
391
+ $ bt proxies logs tail 03858bf5-32d3-4a2e-b74b-daeea0883bca --transform-type request_transform
392
+
393
+ $ bt proxies logs tail 03858bf5-32d3-4a2e-b74b-daeea0883bca --trace-id customer_Order-42 --transform-type response_transform --since 30m --format json
394
+
366
395
  $ bt proxies logs tail 03858bf5-32d3-4a2e-b74b-daeea0883bca --since 30m --format json
367
396
  ```
368
397
 
@@ -468,7 +497,7 @@ EXAMPLES
468
497
  $ bt reactors
469
498
  ```
470
499
 
471
- _See code: [dist/commands/reactors/index.ts](https://github.com/Basis-Theory-Labs/basistheory-cli/blob/v4.3.0/dist/commands/reactors/index.ts)_
500
+ _See code: [dist/commands/reactors/index.ts](https://github.com/Basis-Theory-Labs/basistheory-cli/blob/v4.4.0/dist/commands/reactors/index.ts)_
472
501
 
473
502
  ## `bt reactors create`
474
503
 
@@ -574,7 +603,8 @@ Read a fixed window of Reactor runtime logs through Events and exit. Requires `e
574
603
 
575
604
  ```
576
605
  USAGE
577
- $ bt reactors logs read ID -x <value> [--since <value>] [--until <value>] [--format pretty|json|json-pretty]
606
+ $ bt reactors logs read ID -x <value> [--trace-id <value>] [--since <value>] [--until <value>] [--format
607
+ pretty|json|json-pretty]
578
608
 
579
609
  ARGUMENTS
580
610
  ID Reactor id
@@ -586,6 +616,7 @@ FLAGS
586
616
  <options: pretty|json|json-pretty>
587
617
  --since=<value> window start: positive duration (30s, 5m, 2h, 1d, 1w) or ISO timestamp with timezone;
588
618
  defaults to five minutes before the end
619
+ --trace-id=<value> exact, case-sensitive stored BT trace ID
589
620
  --until=<value> window end (exclusive): positive duration or ISO timestamp with timezone; defaults to
590
621
  command start
591
622
 
@@ -593,16 +624,22 @@ DESCRIPTION
593
624
  Read a fixed window of Reactor runtime logs through Events and exit. Requires `event:read` and runtime logging already
594
625
  enabled.
595
626
 
596
- Defaults to the five minutes preceding --until, or command start when --until is omitted. Explicit relative values use
597
- command-start time. Windows include their start and exclude their end, filtering event batch timestamps rather than
598
- individual record occurrence times. Each matching batch is expanded in record sequence; flattened output has no global
599
- chronological ordering. History is tenant-limited (24 hours by default, at most 30 days); the API clamps unavailable
600
- history. Indexing is asynchronous and pagination is not a snapshot, so empty or exhausted results do not prove
601
- complete coverage. Large windows may hit bounded work limits and fail with partial output. Application logs come from
602
- the injected `logger`, not arbitrary stdout or `console.log`; collection requires resource opt-in and the platform
603
- runtime-log gate. Does not enable logging or open a tunnel.
627
+ Optional --trace-id matches the effective stored BT trace ID exactly and case-sensitively. A submitted header may be
628
+ sanitized by Vault; the CLI does not normalize or trim it. A reused trace ID can match multiple invocations.
629
+
630
+ Defaults to the five minutes preceding --until, or command start when --until is omitted, regardless of filters.
631
+ Supply --since, for example --since 30d, to request a larger window. Explicit relative values use command-start time.
632
+ Windows include their start and exclude their end, filtering event batch timestamps rather than individual record
633
+ occurrence times. Each matching batch is expanded in record sequence; flattened output has no global chronological
634
+ ordering. History is limited by server retention and tenant entitlements; the API clamps unavailable history. Indexing
635
+ is asynchronous and pagination is not a snapshot, so empty or exhausted results do not prove complete coverage. Large
636
+ windows may hit bounded work limits and fail with partial output. Application logs come from the injected `logger`,
637
+ not arbitrary stdout or `console.log`; collection requires resource opt-in and the platform runtime-log gate. Does not
638
+ enable logging or open a tunnel.
604
639
 
605
640
  EXAMPLES
641
+ $ bt reactors logs read 03858bf5-32d3-4a2e-b74b-daeea0883bca --trace-id customer_Order-42 --since 30d
642
+
606
643
  $ bt reactors logs read 03858bf5-32d3-4a2e-b74b-daeea0883bca --since 1h --until 30m
607
644
 
608
645
  $ bt reactors logs read 03858bf5-32d3-4a2e-b74b-daeea0883bca --since 2026-10-01T10:00:00Z --until 2026-10-01T10:15:00Z --format json
@@ -614,7 +651,7 @@ Tail Reactor runtime logs through Events. Requires `event:read` and runtime logg
614
651
 
615
652
  ```
616
653
  USAGE
617
- $ bt reactors logs tail ID -x <value> [--since <value>] [--format pretty|json|json-pretty]
654
+ $ bt reactors logs tail ID -x <value> [--trace-id <value>] [--since <value>] [--format pretty|json|json-pretty]
618
655
 
619
656
  ARGUMENTS
620
657
  ID Reactor id
@@ -626,23 +663,31 @@ FLAGS
626
663
  <options: pretty|json|json-pretty>
627
664
  --since=<value> include initial history from a positive duration (30s, 5m, 2h, 1d, 1w) or ISO timestamp
628
665
  with timezone; omitted means watch from command start
666
+ --trace-id=<value> exact, case-sensitive stored BT trace ID
629
667
 
630
668
  DESCRIPTION
631
669
  Tail Reactor runtime logs through Events. Requires `event:read` and runtime logging already enabled.
632
670
 
633
- Starts watching from command time. Supply --since to retrieve initial history before following new logs. Polls every
634
- five seconds with a rolling five-minute overlap that never reaches before the requested start. Time windows filter
635
- event batches, not individual record occurrence times; a newly arriving batch can contain records that occurred before
636
- command start. History is tenant-limited (24 hours by default, at most 30 days); the API clamps unavailable history.
637
- Large initial windows may hit bounded work limits and fail with partial output. Visibility is delayed and best-effort;
638
- output has no durable resume or global chronological ordering. Application logs come from the injected `logger`, not
639
- arbitrary stdout or `console.log`; collection requires resource opt-in and the platform runtime-log gate. Silence does
640
- not distinguish an idle resource, a wrong ID, disabled collection, or delayed indexing. Runs until interrupted, output
641
- closes, or an error occurs.
671
+ Optional --trace-id matches the effective stored BT trace ID exactly and case-sensitively. A submitted header may be
672
+ sanitized by Vault; the CLI does not normalize or trim it. A reused trace ID can match multiple invocations.
673
+
674
+ Starts watching from command time, regardless of filters. Supply --since to retrieve initial history before following
675
+ new logs. Polls every five seconds with a rolling five-minute overlap that never reaches before the requested start.
676
+ Time windows filter event batches, not individual record occurrence times; a newly arriving batch can contain records
677
+ that occurred before command start. History is limited by server retention and tenant entitlements; the API clamps
678
+ unavailable history. Large initial windows may hit bounded work limits and fail with partial output. Visibility is
679
+ delayed and best-effort; output has no durable resume or global chronological ordering. Application logs come from the
680
+ injected `logger`, not arbitrary stdout or `console.log`; collection requires resource opt-in and the platform
681
+ runtime-log gate. Silence does not distinguish an idle resource, a wrong ID or filter, disabled collection, or delayed
682
+ indexing. Runs until interrupted, output closes, or an error occurs.
642
683
 
643
684
  EXAMPLES
644
685
  $ bt reactors logs tail 03858bf5-32d3-4a2e-b74b-daeea0883bca
645
686
 
687
+ $ bt reactors logs tail 03858bf5-32d3-4a2e-b74b-daeea0883bca --trace-id customer_Order-42
688
+
689
+ $ bt reactors logs tail 03858bf5-32d3-4a2e-b74b-daeea0883bca --trace-id customer_Order-42 --since 30m --format json
690
+
646
691
  $ bt reactors logs tail 03858bf5-32d3-4a2e-b74b-daeea0883bca --since 30m --format json
647
692
  ```
648
693
 
@@ -6,6 +6,8 @@ export default class Read extends BaseCommand {
6
6
  id: import("@oclif/core/lib/interfaces/parser").Arg<string, Record<string, unknown>>;
7
7
  };
8
8
  static flags: {
9
+ 'trace-id': import("@oclif/core/lib/interfaces/parser").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
10
+ 'transform-type': import("@oclif/core/lib/interfaces/parser").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
9
11
  since: import("@oclif/core/lib/interfaces/parser").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
10
12
  until: import("@oclif/core/lib/interfaces/parser").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
11
13
  format: import("@oclif/core/lib/interfaces/parser").OptionFlag<string, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
@@ -7,15 +7,20 @@ const time_1 = require("../../../logs/time");
7
7
  class Read extends base_1.BaseCommand {
8
8
  async run() {
9
9
  const now = Date.now();
10
- const { flags: { 'management-key': apiKey, 'api-base-url': apiBaseUrl, format, since, until, }, args: { id }, } = await this.parse(Read);
10
+ const { flags: { 'management-key': apiKey, 'api-base-url': apiBaseUrl, 'trace-id': traceId, 'transform-type': transformType, format, since, until, }, args: { id }, } = await this.parse(Read);
11
11
  if (!id.trim()) {
12
12
  this.error('Proxy id must not be blank');
13
13
  }
14
+ if (traceId !== undefined && !traceId.trim()) {
15
+ this.error('--trace-id must not be blank');
16
+ }
14
17
  await (0, runtime_1.readEventLogs)({
15
18
  apiKey,
16
19
  apiBaseUrl,
17
20
  resourceType: 'proxy',
18
21
  resourceId: id,
22
+ traceId,
23
+ transformType: transformType,
19
24
  format: format,
20
25
  window: (0, time_1.resolveLogWindow)({
21
26
  since,
@@ -30,8 +35,12 @@ class Read extends base_1.BaseCommand {
30
35
  }
31
36
  exports.default = Read;
32
37
  Read.description = 'Read a fixed window of Proxy runtime logs through Events and exit. Requires `event:read` and runtime logging already enabled.\n\n' +
33
- 'Defaults to the five minutes preceding --until, or command start when --until is omitted. Explicit relative values use command-start time. Both request and response transforms are included and distinguished. Windows include their start and exclude their end, filtering event batch timestamps rather than individual record occurrence times. Each matching batch is expanded in record sequence; flattened output has no global chronological ordering. History is tenant-limited (24 hours by default, at most 30 days); the API clamps unavailable history. Indexing is asynchronous and pagination is not a snapshot, so empty or exhausted results do not prove complete coverage. Large windows may hit bounded work limits and fail with partial output. Application logs come from the injected `logger`, not arbitrary stdout or `console.log`; collection requires resource opt-in and the platform runtime-log gate. Does not enable logging or open a tunnel.';
38
+ 'Optional --trace-id matches the effective stored BT trace ID exactly and case-sensitively. A submitted header may be sanitized by Vault; the CLI does not normalize or trim it. A reused trace ID can match multiple invocations. --transform-type filters request or response transforms, alone or combined with trace ID using AND; omitting it includes both directions.\n\n' +
39
+ 'Defaults to the five minutes preceding --until, or command start when --until is omitted, regardless of filters. Supply --since, for example --since 30d, to request a larger window. Explicit relative values use command-start time. Windows include their start and exclude their end, filtering event batch timestamps rather than individual record occurrence times. Each matching batch is expanded in record sequence; flattened output has no global chronological ordering. History is limited by server retention and tenant entitlements; the API clamps unavailable history. Indexing is asynchronous and pagination is not a snapshot, so empty or exhausted results do not prove complete coverage. Large windows may hit bounded work limits and fail with partial output. Application logs come from the injected `logger`, not arbitrary stdout or `console.log`; collection requires resource opt-in and the platform runtime-log gate. Does not enable logging or open a tunnel.';
34
40
  Read.examples = [
41
+ '<%= config.bin %> proxies logs read 03858bf5-32d3-4a2e-b74b-daeea0883bca --trace-id customer_Order-42 --since 30d',
42
+ '<%= config.bin %> proxies logs read 03858bf5-32d3-4a2e-b74b-daeea0883bca --transform-type request_transform',
43
+ '<%= config.bin %> proxies logs read 03858bf5-32d3-4a2e-b74b-daeea0883bca --trace-id customer_Order-42 --transform-type response_transform --since 30m',
35
44
  '<%= config.bin %> proxies logs read 03858bf5-32d3-4a2e-b74b-daeea0883bca --since 1h --until 30m',
36
45
  '<%= config.bin %> proxies logs read 03858bf5-32d3-4a2e-b74b-daeea0883bca --since 2026-10-01T10:00:00Z --until 2026-10-01T10:15:00Z --format json',
37
46
  ];
@@ -42,6 +51,13 @@ Read.args = {
42
51
  }),
43
52
  };
44
53
  Read.flags = {
54
+ 'trace-id': core_1.Flags.string({
55
+ description: 'exact, case-sensitive stored BT trace ID; combines with transform direction using AND',
56
+ }),
57
+ 'transform-type': core_1.Flags.string({
58
+ description: 'exact transform direction; includes both directions when omitted',
59
+ options: ['request_transform', 'response_transform'],
60
+ }),
45
61
  since: core_1.Flags.string({
46
62
  description: 'window start: positive duration (30s, 5m, 2h, 1d, 1w) or ISO timestamp with timezone; defaults to five minutes before the end',
47
63
  }),
@@ -6,6 +6,8 @@ export default class Tail extends BaseCommand {
6
6
  id: import("@oclif/core/lib/interfaces/parser").Arg<string, Record<string, unknown>>;
7
7
  };
8
8
  static flags: {
9
+ 'trace-id': import("@oclif/core/lib/interfaces/parser").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
10
+ 'transform-type': import("@oclif/core/lib/interfaces/parser").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
9
11
  since: import("@oclif/core/lib/interfaces/parser").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
10
12
  format: import("@oclif/core/lib/interfaces/parser").OptionFlag<string, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
11
13
  };
@@ -7,15 +7,20 @@ const time_1 = require("../../../logs/time");
7
7
  class Tail extends base_1.BaseCommand {
8
8
  async run() {
9
9
  const now = Date.now();
10
- const { flags: { 'management-key': apiKey, 'api-base-url': apiBaseUrl, format, since, }, args: { id }, } = await this.parse(Tail);
10
+ const { flags: { 'management-key': apiKey, 'api-base-url': apiBaseUrl, 'trace-id': traceId, 'transform-type': transformType, format, since, }, args: { id }, } = await this.parse(Tail);
11
11
  if (!id.trim()) {
12
12
  this.error('Proxy id must not be blank');
13
13
  }
14
+ if (traceId !== undefined && !traceId.trim()) {
15
+ this.error('--trace-id must not be blank');
16
+ }
14
17
  await (0, runtime_1.followEventLogs)({
15
18
  apiKey,
16
19
  apiBaseUrl,
17
20
  resourceType: 'proxy',
18
21
  resourceId: id,
22
+ traceId,
23
+ transformType: transformType,
19
24
  format: format,
20
25
  window: (0, time_1.resolveTailWindow)({ since }, now),
21
26
  });
@@ -27,9 +32,13 @@ class Tail extends base_1.BaseCommand {
27
32
  }
28
33
  exports.default = Tail;
29
34
  Tail.description = 'Tail Proxy runtime logs through Events. Requires `event:read` and runtime logging already enabled.\n\n' +
30
- 'Starts watching from command time. Supply --since to retrieve initial history before following new logs. Polls every five seconds with a rolling five-minute overlap that never reaches before the requested start. Both request and response transforms are included and distinguished. Time windows filter event batches, not individual record occurrence times; a newly arriving batch can contain records that occurred before command start. History is tenant-limited (24 hours by default, at most 30 days); the API clamps unavailable history. Large initial windows may hit bounded work limits and fail with partial output. Visibility is delayed and best-effort; output has no durable resume or global chronological ordering. Application logs come from the injected `logger`, not arbitrary stdout or `console.log`; collection requires resource opt-in and the platform runtime-log gate. Silence does not distinguish an idle resource, a wrong ID, disabled collection, or delayed indexing. Runs until interrupted, output closes, or an error occurs.';
35
+ 'Optional --trace-id matches the effective stored BT trace ID exactly and case-sensitively. A submitted header may be sanitized by Vault; the CLI does not normalize or trim it. A reused trace ID can match multiple invocations. --transform-type filters request or response transforms, alone or combined with trace ID using AND; omitting it includes both directions. Filters apply to initial history and every live poll.\n\n' +
36
+ 'Starts watching from command time, regardless of filters. Supply --since to retrieve initial history before following new logs. Polls every five seconds with a rolling five-minute overlap that never reaches before the requested start. Time windows filter event batches, not individual record occurrence times; a newly arriving batch can contain records that occurred before command start. History is limited by server retention and tenant entitlements; the API clamps unavailable history. Large initial windows may hit bounded work limits and fail with partial output. Visibility is delayed and best-effort; output has no durable resume or global chronological ordering. Application logs come from the injected `logger`, not arbitrary stdout or `console.log`; collection requires resource opt-in and the platform runtime-log gate. Silence does not distinguish an idle resource, a wrong ID or filter, disabled collection, or delayed indexing. Runs until interrupted, output closes, or an error occurs.';
31
37
  Tail.examples = [
32
38
  '<%= config.bin %> proxies logs tail 03858bf5-32d3-4a2e-b74b-daeea0883bca',
39
+ '<%= config.bin %> proxies logs tail 03858bf5-32d3-4a2e-b74b-daeea0883bca --trace-id customer_Order-42',
40
+ '<%= config.bin %> proxies logs tail 03858bf5-32d3-4a2e-b74b-daeea0883bca --transform-type request_transform',
41
+ '<%= config.bin %> proxies logs tail 03858bf5-32d3-4a2e-b74b-daeea0883bca --trace-id customer_Order-42 --transform-type response_transform --since 30m --format json',
33
42
  '<%= config.bin %> proxies logs tail 03858bf5-32d3-4a2e-b74b-daeea0883bca --since 30m --format json',
34
43
  ];
35
44
  Tail.args = {
@@ -39,6 +48,13 @@ Tail.args = {
39
48
  }),
40
49
  };
41
50
  Tail.flags = {
51
+ 'trace-id': core_1.Flags.string({
52
+ description: 'exact, case-sensitive stored BT trace ID; combines with transform direction using AND',
53
+ }),
54
+ 'transform-type': core_1.Flags.string({
55
+ description: 'exact transform direction; includes both directions when omitted',
56
+ options: ['request_transform', 'response_transform'],
57
+ }),
42
58
  since: core_1.Flags.string({
43
59
  description: 'include initial history from a positive duration (30s, 5m, 2h, 1d, 1w) or ISO timestamp with timezone; omitted means watch from command start',
44
60
  }),
@@ -6,6 +6,7 @@ export default class Read extends BaseCommand {
6
6
  id: import("@oclif/core/lib/interfaces/parser").Arg<string, Record<string, unknown>>;
7
7
  };
8
8
  static flags: {
9
+ 'trace-id': import("@oclif/core/lib/interfaces/parser").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
9
10
  since: import("@oclif/core/lib/interfaces/parser").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
10
11
  until: import("@oclif/core/lib/interfaces/parser").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
11
12
  format: import("@oclif/core/lib/interfaces/parser").OptionFlag<string, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
@@ -7,15 +7,19 @@ const time_1 = require("../../../logs/time");
7
7
  class Read extends base_1.BaseCommand {
8
8
  async run() {
9
9
  const now = Date.now();
10
- const { flags: { 'management-key': apiKey, 'api-base-url': apiBaseUrl, format, since, until, }, args: { id }, } = await this.parse(Read);
10
+ const { flags: { 'management-key': apiKey, 'api-base-url': apiBaseUrl, 'trace-id': traceId, format, since, until, }, args: { id }, } = await this.parse(Read);
11
11
  if (!id.trim()) {
12
12
  this.error('Reactor id must not be blank');
13
13
  }
14
+ if (traceId !== undefined && !traceId.trim()) {
15
+ this.error('--trace-id must not be blank');
16
+ }
14
17
  await (0, runtime_1.readEventLogs)({
15
18
  apiKey,
16
19
  apiBaseUrl,
17
20
  resourceType: 'reactor',
18
21
  resourceId: id,
22
+ traceId,
19
23
  format: format,
20
24
  window: (0, time_1.resolveLogWindow)({
21
25
  since,
@@ -30,8 +34,10 @@ class Read extends base_1.BaseCommand {
30
34
  }
31
35
  exports.default = Read;
32
36
  Read.description = 'Read a fixed window of Reactor runtime logs through Events and exit. Requires `event:read` and runtime logging already enabled.\n\n' +
33
- 'Defaults to the five minutes preceding --until, or command start when --until is omitted. Explicit relative values use command-start time. Windows include their start and exclude their end, filtering event batch timestamps rather than individual record occurrence times. Each matching batch is expanded in record sequence; flattened output has no global chronological ordering. History is tenant-limited (24 hours by default, at most 30 days); the API clamps unavailable history. Indexing is asynchronous and pagination is not a snapshot, so empty or exhausted results do not prove complete coverage. Large windows may hit bounded work limits and fail with partial output. Application logs come from the injected `logger`, not arbitrary stdout or `console.log`; collection requires resource opt-in and the platform runtime-log gate. Does not enable logging or open a tunnel.';
37
+ 'Optional --trace-id matches the effective stored BT trace ID exactly and case-sensitively. A submitted header may be sanitized by Vault; the CLI does not normalize or trim it. A reused trace ID can match multiple invocations.\n\n' +
38
+ 'Defaults to the five minutes preceding --until, or command start when --until is omitted, regardless of filters. Supply --since, for example --since 30d, to request a larger window. Explicit relative values use command-start time. Windows include their start and exclude their end, filtering event batch timestamps rather than individual record occurrence times. Each matching batch is expanded in record sequence; flattened output has no global chronological ordering. History is limited by server retention and tenant entitlements; the API clamps unavailable history. Indexing is asynchronous and pagination is not a snapshot, so empty or exhausted results do not prove complete coverage. Large windows may hit bounded work limits and fail with partial output. Application logs come from the injected `logger`, not arbitrary stdout or `console.log`; collection requires resource opt-in and the platform runtime-log gate. Does not enable logging or open a tunnel.';
34
39
  Read.examples = [
40
+ '<%= config.bin %> reactors logs read 03858bf5-32d3-4a2e-b74b-daeea0883bca --trace-id customer_Order-42 --since 30d',
35
41
  '<%= config.bin %> reactors logs read 03858bf5-32d3-4a2e-b74b-daeea0883bca --since 1h --until 30m',
36
42
  '<%= config.bin %> reactors logs read 03858bf5-32d3-4a2e-b74b-daeea0883bca --since 2026-10-01T10:00:00Z --until 2026-10-01T10:15:00Z --format json',
37
43
  ];
@@ -42,6 +48,9 @@ Read.args = {
42
48
  }),
43
49
  };
44
50
  Read.flags = {
51
+ 'trace-id': core_1.Flags.string({
52
+ description: 'exact, case-sensitive stored BT trace ID',
53
+ }),
45
54
  since: core_1.Flags.string({
46
55
  description: 'window start: positive duration (30s, 5m, 2h, 1d, 1w) or ISO timestamp with timezone; defaults to five minutes before the end',
47
56
  }),
@@ -6,6 +6,7 @@ export default class Tail extends BaseCommand {
6
6
  id: import("@oclif/core/lib/interfaces/parser").Arg<string, Record<string, unknown>>;
7
7
  };
8
8
  static flags: {
9
+ 'trace-id': import("@oclif/core/lib/interfaces/parser").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
9
10
  since: import("@oclif/core/lib/interfaces/parser").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
10
11
  format: import("@oclif/core/lib/interfaces/parser").OptionFlag<string, import("@oclif/core/lib/interfaces/parser").CustomOptions>;
11
12
  };
@@ -7,15 +7,19 @@ const time_1 = require("../../../logs/time");
7
7
  class Tail extends base_1.BaseCommand {
8
8
  async run() {
9
9
  const now = Date.now();
10
- const { flags: { 'management-key': apiKey, 'api-base-url': apiBaseUrl, format, since, }, args: { id }, } = await this.parse(Tail);
10
+ const { flags: { 'management-key': apiKey, 'api-base-url': apiBaseUrl, 'trace-id': traceId, format, since, }, args: { id }, } = await this.parse(Tail);
11
11
  if (!id.trim()) {
12
12
  this.error('Reactor id must not be blank');
13
13
  }
14
+ if (traceId !== undefined && !traceId.trim()) {
15
+ this.error('--trace-id must not be blank');
16
+ }
14
17
  await (0, runtime_1.followEventLogs)({
15
18
  apiKey,
16
19
  apiBaseUrl,
17
20
  resourceType: 'reactor',
18
21
  resourceId: id,
22
+ traceId,
19
23
  format: format,
20
24
  window: (0, time_1.resolveTailWindow)({ since }, now),
21
25
  });
@@ -27,9 +31,12 @@ class Tail extends base_1.BaseCommand {
27
31
  }
28
32
  exports.default = Tail;
29
33
  Tail.description = 'Tail Reactor runtime logs through Events. Requires `event:read` and runtime logging already enabled.\n\n' +
30
- 'Starts watching from command time. Supply --since to retrieve initial history before following new logs. Polls every five seconds with a rolling five-minute overlap that never reaches before the requested start. Time windows filter event batches, not individual record occurrence times; a newly arriving batch can contain records that occurred before command start. History is tenant-limited (24 hours by default, at most 30 days); the API clamps unavailable history. Large initial windows may hit bounded work limits and fail with partial output. Visibility is delayed and best-effort; output has no durable resume or global chronological ordering. Application logs come from the injected `logger`, not arbitrary stdout or `console.log`; collection requires resource opt-in and the platform runtime-log gate. Silence does not distinguish an idle resource, a wrong ID, disabled collection, or delayed indexing. Runs until interrupted, output closes, or an error occurs.';
34
+ 'Optional --trace-id matches the effective stored BT trace ID exactly and case-sensitively. A submitted header may be sanitized by Vault; the CLI does not normalize or trim it. A reused trace ID can match multiple invocations.\n\n' +
35
+ 'Starts watching from command time, regardless of filters. Supply --since to retrieve initial history before following new logs. Polls every five seconds with a rolling five-minute overlap that never reaches before the requested start. Time windows filter event batches, not individual record occurrence times; a newly arriving batch can contain records that occurred before command start. History is limited by server retention and tenant entitlements; the API clamps unavailable history. Large initial windows may hit bounded work limits and fail with partial output. Visibility is delayed and best-effort; output has no durable resume or global chronological ordering. Application logs come from the injected `logger`, not arbitrary stdout or `console.log`; collection requires resource opt-in and the platform runtime-log gate. Silence does not distinguish an idle resource, a wrong ID or filter, disabled collection, or delayed indexing. Runs until interrupted, output closes, or an error occurs.';
31
36
  Tail.examples = [
32
37
  '<%= config.bin %> reactors logs tail 03858bf5-32d3-4a2e-b74b-daeea0883bca',
38
+ '<%= config.bin %> reactors logs tail 03858bf5-32d3-4a2e-b74b-daeea0883bca --trace-id customer_Order-42',
39
+ '<%= config.bin %> reactors logs tail 03858bf5-32d3-4a2e-b74b-daeea0883bca --trace-id customer_Order-42 --since 30m --format json',
33
40
  '<%= config.bin %> reactors logs tail 03858bf5-32d3-4a2e-b74b-daeea0883bca --since 30m --format json',
34
41
  ];
35
42
  Tail.args = {
@@ -39,6 +46,9 @@ Tail.args = {
39
46
  }),
40
47
  };
41
48
  Tail.flags = {
49
+ 'trace-id': core_1.Flags.string({
50
+ description: 'exact, case-sensitive stored BT trace ID',
51
+ }),
42
52
  since: core_1.Flags.string({
43
53
  description: 'include initial history from a positive duration (30s, 5m, 2h, 1d, 1w) or ISO timestamp with timezone; omitted means watch from command start',
44
54
  }),
@@ -25,6 +25,10 @@ interface EventLogRecord {
25
25
  outcome?: string;
26
26
  duration_ms?: number;
27
27
  }
28
+ interface EventLogFilters {
29
+ traceId?: string;
30
+ transformType?: EventLogRecord['transform_type'];
31
+ }
28
32
  interface EventLogPage {
29
33
  batches: EventLogRecord[][];
30
34
  next: string | null;
@@ -39,7 +43,7 @@ declare class EventsReadError extends Error {
39
43
  }
40
44
  /** Resolve and validate the API origin before any credential is sent. */
41
45
  declare const resolveEventsOrigin: (apiBaseUrl?: string) => string;
42
- interface ReadEventPageOptions {
46
+ interface ReadEventPageOptions extends EventLogFilters {
43
47
  origin: string;
44
48
  apiKey: string;
45
49
  resourceType: ResourceType;
@@ -52,5 +56,5 @@ interface ReadEventPageOptions {
52
56
  }
53
57
  /** Read and validate one Events page. Continuations contain only the opaque cursor. */
54
58
  declare const readEventPage: (options: ReadEventPageOptions) => Promise<EventLogPage>;
55
- export type { EventLogPage, EventLogRecord, ReadEventPageOptions, ResourceType, };
59
+ export type { EventLogFilters, EventLogPage, EventLogRecord, ReadEventPageOptions, ResourceType, };
56
60
  export { EventsReadError, readEventPage, resolveEventsOrigin };
@@ -243,6 +243,11 @@ const projectBatch = (input, options) => {
243
243
  else if (options.resourceType === 'proxy') {
244
244
  return invalidPage();
245
245
  }
246
+ if ((options.traceId !== undefined && input.traceId !== options.traceId) ||
247
+ (options.transformType !== undefined &&
248
+ transformType !== options.transformType)) {
249
+ return invalidPage();
250
+ }
246
251
  if (!nonnegativeSafeInteger(data.sequence_start) ||
247
252
  !nonnegativeSafeInteger(data.sequence_end) ||
248
253
  data.sequence_start > data.sequence_end ||
@@ -424,10 +429,15 @@ const readEventPage = async (options) => {
424
429
  /[\u0000-\u001F\u007F]/u.test(options.apiKey) ||
425
430
  !isNonEmptyString(options.resourceId) ||
426
431
  (options.resourceType !== 'reactor' && options.resourceType !== 'proxy') ||
432
+ (options.traceId !== undefined && !isNonEmptyString(options.traceId)) ||
433
+ (options.transformType !== undefined &&
434
+ (options.resourceType !== 'proxy' ||
435
+ (options.transformType !== 'request_transform' &&
436
+ options.transformType !== 'response_transform'))) ||
427
437
  !Number.isSafeInteger(options.start) ||
428
- !Number.isSafeInteger(options.end) ||
429
438
  options.start > options.end ||
430
439
  !Number.isFinite(new Date(options.start).getTime()) ||
440
+ !Number.isSafeInteger(options.end) ||
431
441
  !Number.isFinite(new Date(options.end).getTime()) ||
432
442
  (options.cursor !== undefined &&
433
443
  (typeof options.cursor !== 'string' ||
@@ -513,6 +523,7 @@ const readEventPage = async (options) => {
513
523
  const page = await bt.events.list(options.cursor === undefined
514
524
  ? {
515
525
  type: options.resourceType === 'reactor' ? 'reactor.log' : 'proxy.log',
526
+ traceId: options.traceId,
516
527
  startDate: new Date(options.start),
517
528
  endDate: new Date(options.end),
518
529
  size: PAGE_SIZE,
@@ -521,7 +532,12 @@ const readEventPage = async (options) => {
521
532
  abortSignal: options.signal,
522
533
  maxRetries: 0,
523
534
  queryParams: options.cursor === undefined
524
- ? { [`data.${options.resourceType}.id`]: options.resourceId }
535
+ ? {
536
+ [`data.${options.resourceType}.id`]: options.resourceId,
537
+ ...(options.transformType !== undefined
538
+ ? { 'data.transform_type': options.transformType }
539
+ : {}),
540
+ }
525
541
  : undefined,
526
542
  });
527
543
  payload = page.response;
@@ -556,6 +572,8 @@ const readEventPage = async (options) => {
556
572
  resourceId: options.resourceId,
557
573
  start: options.start,
558
574
  end: options.end,
575
+ traceId: options.traceId,
576
+ transformType: options.transformType,
559
577
  }));
560
578
  if (options.signal.aborted) {
561
579
  throw new EventsReadError('Events request was interrupted.', {
@@ -1,7 +1,7 @@
1
- import type { ResourceType } from './events';
1
+ import type { EventLogFilters, ResourceType } from './events';
2
2
  import type { RuntimeLogFormat } from './format';
3
3
  import type { LogWindow } from './time';
4
- interface RuntimeLogOptions {
4
+ interface RuntimeLogOptions extends EventLogFilters {
5
5
  apiKey: string;
6
6
  apiBaseUrl?: string;
7
7
  resourceType: ResourceType;
@@ -9,7 +9,7 @@ interface RuntimeLogOptions {
9
9
  format: RuntimeLogFormat;
10
10
  window?: LogWindow;
11
11
  }
12
- /** Retrieve one fixed window, including every continuation, then finish. */
12
+ /** Retrieve one finite query window, including every continuation, then finish. */
13
13
  declare const readEventLogs: (options: RuntimeLogOptions & {
14
14
  window: LogWindow;
15
15
  }) => Promise<void>;
@@ -216,6 +216,8 @@ const streamEventLogs = async (options, mode) => {
216
216
  apiKey: options.apiKey,
217
217
  resourceType: options.resourceType,
218
218
  resourceId: options.resourceId,
219
+ traceId: options.traceId,
220
+ transformType: options.transformType,
219
221
  start,
220
222
  end,
221
223
  cursor,
@@ -352,7 +354,7 @@ const streamEventLogs = async (options, mode) => {
352
354
  }
353
355
  }
354
356
  };
355
- /** Retrieve one fixed window, including every continuation, then finish. */
357
+ /** Retrieve one finite query window, including every continuation, then finish. */
356
358
  const readEventLogs = (options) => streamEventLogs(options, 'read');
357
359
  exports.readEventLogs = readEventLogs;
358
360
  /** Retrieve initial context, then keep reading overlapping live windows. */
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "4.3.0",
2
+ "version": "4.4.0",
3
3
  "commands": {
4
4
  "applications:create": {
5
5
  "id": "applications:create",
@@ -1135,13 +1135,16 @@
1135
1135
  },
1136
1136
  "proxies:logs:read": {
1137
1137
  "id": "proxies:logs:read",
1138
- "description": "Read a fixed window of Proxy runtime logs through Events and exit. Requires `event:read` and runtime logging already enabled.\n\nDefaults to the five minutes preceding --until, or command start when --until is omitted. Explicit relative values use command-start time. Both request and response transforms are included and distinguished. Windows include their start and exclude their end, filtering event batch timestamps rather than individual record occurrence times. Each matching batch is expanded in record sequence; flattened output has no global chronological ordering. History is tenant-limited (24 hours by default, at most 30 days); the API clamps unavailable history. Indexing is asynchronous and pagination is not a snapshot, so empty or exhausted results do not prove complete coverage. Large windows may hit bounded work limits and fail with partial output. Application logs come from the injected `logger`, not arbitrary stdout or `console.log`; collection requires resource opt-in and the platform runtime-log gate. Does not enable logging or open a tunnel.",
1138
+ "description": "Read a fixed window of Proxy runtime logs through Events and exit. Requires `event:read` and runtime logging already enabled.\n\nOptional --trace-id matches the effective stored BT trace ID exactly and case-sensitively. A submitted header may be sanitized by Vault; the CLI does not normalize or trim it. A reused trace ID can match multiple invocations. --transform-type filters request or response transforms, alone or combined with trace ID using AND; omitting it includes both directions.\n\nDefaults to the five minutes preceding --until, or command start when --until is omitted, regardless of filters. Supply --since, for example --since 30d, to request a larger window. Explicit relative values use command-start time. Windows include their start and exclude their end, filtering event batch timestamps rather than individual record occurrence times. Each matching batch is expanded in record sequence; flattened output has no global chronological ordering. History is limited by server retention and tenant entitlements; the API clamps unavailable history. Indexing is asynchronous and pagination is not a snapshot, so empty or exhausted results do not prove complete coverage. Large windows may hit bounded work limits and fail with partial output. Application logs come from the injected `logger`, not arbitrary stdout or `console.log`; collection requires resource opt-in and the platform runtime-log gate. Does not enable logging or open a tunnel.",
1139
1139
  "strict": true,
1140
1140
  "pluginName": "@basis-theory-labs/cli",
1141
1141
  "pluginAlias": "@basis-theory-labs/cli",
1142
1142
  "pluginType": "core",
1143
1143
  "aliases": [],
1144
1144
  "examples": [
1145
+ "<%= config.bin %> proxies logs read 03858bf5-32d3-4a2e-b74b-daeea0883bca --trace-id customer_Order-42 --since 30d",
1146
+ "<%= config.bin %> proxies logs read 03858bf5-32d3-4a2e-b74b-daeea0883bca --transform-type request_transform",
1147
+ "<%= config.bin %> proxies logs read 03858bf5-32d3-4a2e-b74b-daeea0883bca --trace-id customer_Order-42 --transform-type response_transform --since 30m",
1145
1148
  "<%= config.bin %> proxies logs read 03858bf5-32d3-4a2e-b74b-daeea0883bca --since 1h --until 30m",
1146
1149
  "<%= config.bin %> proxies logs read 03858bf5-32d3-4a2e-b74b-daeea0883bca --since 2026-10-01T10:00:00Z --until 2026-10-01T10:15:00Z --format json"
1147
1150
  ],
@@ -1161,6 +1164,22 @@
1161
1164
  "hidden": true,
1162
1165
  "multiple": false
1163
1166
  },
1167
+ "trace-id": {
1168
+ "name": "trace-id",
1169
+ "type": "option",
1170
+ "description": "exact, case-sensitive stored BT trace ID; combines with transform direction using AND",
1171
+ "multiple": false
1172
+ },
1173
+ "transform-type": {
1174
+ "name": "transform-type",
1175
+ "type": "option",
1176
+ "description": "exact transform direction; includes both directions when omitted",
1177
+ "multiple": false,
1178
+ "options": [
1179
+ "request_transform",
1180
+ "response_transform"
1181
+ ]
1182
+ },
1164
1183
  "since": {
1165
1184
  "name": "since",
1166
1185
  "type": "option",
@@ -1196,7 +1215,7 @@
1196
1215
  },
1197
1216
  "proxies:logs:tail": {
1198
1217
  "id": "proxies:logs:tail",
1199
- "description": "Tail Proxy runtime logs through Events. Requires `event:read` and runtime logging already enabled.\n\nStarts watching from command time. Supply --since to retrieve initial history before following new logs. Polls every five seconds with a rolling five-minute overlap that never reaches before the requested start. Both request and response transforms are included and distinguished. Time windows filter event batches, not individual record occurrence times; a newly arriving batch can contain records that occurred before command start. History is tenant-limited (24 hours by default, at most 30 days); the API clamps unavailable history. Large initial windows may hit bounded work limits and fail with partial output. Visibility is delayed and best-effort; output has no durable resume or global chronological ordering. Application logs come from the injected `logger`, not arbitrary stdout or `console.log`; collection requires resource opt-in and the platform runtime-log gate. Silence does not distinguish an idle resource, a wrong ID, disabled collection, or delayed indexing. Runs until interrupted, output closes, or an error occurs.",
1218
+ "description": "Tail Proxy runtime logs through Events. Requires `event:read` and runtime logging already enabled.\n\nOptional --trace-id matches the effective stored BT trace ID exactly and case-sensitively. A submitted header may be sanitized by Vault; the CLI does not normalize or trim it. A reused trace ID can match multiple invocations. --transform-type filters request or response transforms, alone or combined with trace ID using AND; omitting it includes both directions. Filters apply to initial history and every live poll.\n\nStarts watching from command time, regardless of filters. Supply --since to retrieve initial history before following new logs. Polls every five seconds with a rolling five-minute overlap that never reaches before the requested start. Time windows filter event batches, not individual record occurrence times; a newly arriving batch can contain records that occurred before command start. History is limited by server retention and tenant entitlements; the API clamps unavailable history. Large initial windows may hit bounded work limits and fail with partial output. Visibility is delayed and best-effort; output has no durable resume or global chronological ordering. Application logs come from the injected `logger`, not arbitrary stdout or `console.log`; collection requires resource opt-in and the platform runtime-log gate. Silence does not distinguish an idle resource, a wrong ID or filter, disabled collection, or delayed indexing. Runs until interrupted, output closes, or an error occurs.",
1200
1219
  "strict": true,
1201
1220
  "pluginName": "@basis-theory-labs/cli",
1202
1221
  "pluginAlias": "@basis-theory-labs/cli",
@@ -1204,6 +1223,9 @@
1204
1223
  "aliases": [],
1205
1224
  "examples": [
1206
1225
  "<%= config.bin %> proxies logs tail 03858bf5-32d3-4a2e-b74b-daeea0883bca",
1226
+ "<%= config.bin %> proxies logs tail 03858bf5-32d3-4a2e-b74b-daeea0883bca --trace-id customer_Order-42",
1227
+ "<%= config.bin %> proxies logs tail 03858bf5-32d3-4a2e-b74b-daeea0883bca --transform-type request_transform",
1228
+ "<%= config.bin %> proxies logs tail 03858bf5-32d3-4a2e-b74b-daeea0883bca --trace-id customer_Order-42 --transform-type response_transform --since 30m --format json",
1207
1229
  "<%= config.bin %> proxies logs tail 03858bf5-32d3-4a2e-b74b-daeea0883bca --since 30m --format json"
1208
1230
  ],
1209
1231
  "flags": {
@@ -1222,6 +1244,22 @@
1222
1244
  "hidden": true,
1223
1245
  "multiple": false
1224
1246
  },
1247
+ "trace-id": {
1248
+ "name": "trace-id",
1249
+ "type": "option",
1250
+ "description": "exact, case-sensitive stored BT trace ID; combines with transform direction using AND",
1251
+ "multiple": false
1252
+ },
1253
+ "transform-type": {
1254
+ "name": "transform-type",
1255
+ "type": "option",
1256
+ "description": "exact transform direction; includes both directions when omitted",
1257
+ "multiple": false,
1258
+ "options": [
1259
+ "request_transform",
1260
+ "response_transform"
1261
+ ]
1262
+ },
1225
1263
  "since": {
1226
1264
  "name": "since",
1227
1265
  "type": "option",
@@ -1251,13 +1289,14 @@
1251
1289
  },
1252
1290
  "reactors:logs:read": {
1253
1291
  "id": "reactors:logs:read",
1254
- "description": "Read a fixed window of Reactor runtime logs through Events and exit. Requires `event:read` and runtime logging already enabled.\n\nDefaults to the five minutes preceding --until, or command start when --until is omitted. Explicit relative values use command-start time. Windows include their start and exclude their end, filtering event batch timestamps rather than individual record occurrence times. Each matching batch is expanded in record sequence; flattened output has no global chronological ordering. History is tenant-limited (24 hours by default, at most 30 days); the API clamps unavailable history. Indexing is asynchronous and pagination is not a snapshot, so empty or exhausted results do not prove complete coverage. Large windows may hit bounded work limits and fail with partial output. Application logs come from the injected `logger`, not arbitrary stdout or `console.log`; collection requires resource opt-in and the platform runtime-log gate. Does not enable logging or open a tunnel.",
1292
+ "description": "Read a fixed window of Reactor runtime logs through Events and exit. Requires `event:read` and runtime logging already enabled.\n\nOptional --trace-id matches the effective stored BT trace ID exactly and case-sensitively. A submitted header may be sanitized by Vault; the CLI does not normalize or trim it. A reused trace ID can match multiple invocations.\n\nDefaults to the five minutes preceding --until, or command start when --until is omitted, regardless of filters. Supply --since, for example --since 30d, to request a larger window. Explicit relative values use command-start time. Windows include their start and exclude their end, filtering event batch timestamps rather than individual record occurrence times. Each matching batch is expanded in record sequence; flattened output has no global chronological ordering. History is limited by server retention and tenant entitlements; the API clamps unavailable history. Indexing is asynchronous and pagination is not a snapshot, so empty or exhausted results do not prove complete coverage. Large windows may hit bounded work limits and fail with partial output. Application logs come from the injected `logger`, not arbitrary stdout or `console.log`; collection requires resource opt-in and the platform runtime-log gate. Does not enable logging or open a tunnel.",
1255
1293
  "strict": true,
1256
1294
  "pluginName": "@basis-theory-labs/cli",
1257
1295
  "pluginAlias": "@basis-theory-labs/cli",
1258
1296
  "pluginType": "core",
1259
1297
  "aliases": [],
1260
1298
  "examples": [
1299
+ "<%= config.bin %> reactors logs read 03858bf5-32d3-4a2e-b74b-daeea0883bca --trace-id customer_Order-42 --since 30d",
1261
1300
  "<%= config.bin %> reactors logs read 03858bf5-32d3-4a2e-b74b-daeea0883bca --since 1h --until 30m",
1262
1301
  "<%= config.bin %> reactors logs read 03858bf5-32d3-4a2e-b74b-daeea0883bca --since 2026-10-01T10:00:00Z --until 2026-10-01T10:15:00Z --format json"
1263
1302
  ],
@@ -1277,6 +1316,12 @@
1277
1316
  "hidden": true,
1278
1317
  "multiple": false
1279
1318
  },
1319
+ "trace-id": {
1320
+ "name": "trace-id",
1321
+ "type": "option",
1322
+ "description": "exact, case-sensitive stored BT trace ID",
1323
+ "multiple": false
1324
+ },
1280
1325
  "since": {
1281
1326
  "name": "since",
1282
1327
  "type": "option",
@@ -1312,7 +1357,7 @@
1312
1357
  },
1313
1358
  "reactors:logs:tail": {
1314
1359
  "id": "reactors:logs:tail",
1315
- "description": "Tail Reactor runtime logs through Events. Requires `event:read` and runtime logging already enabled.\n\nStarts watching from command time. Supply --since to retrieve initial history before following new logs. Polls every five seconds with a rolling five-minute overlap that never reaches before the requested start. Time windows filter event batches, not individual record occurrence times; a newly arriving batch can contain records that occurred before command start. History is tenant-limited (24 hours by default, at most 30 days); the API clamps unavailable history. Large initial windows may hit bounded work limits and fail with partial output. Visibility is delayed and best-effort; output has no durable resume or global chronological ordering. Application logs come from the injected `logger`, not arbitrary stdout or `console.log`; collection requires resource opt-in and the platform runtime-log gate. Silence does not distinguish an idle resource, a wrong ID, disabled collection, or delayed indexing. Runs until interrupted, output closes, or an error occurs.",
1360
+ "description": "Tail Reactor runtime logs through Events. Requires `event:read` and runtime logging already enabled.\n\nOptional --trace-id matches the effective stored BT trace ID exactly and case-sensitively. A submitted header may be sanitized by Vault; the CLI does not normalize or trim it. A reused trace ID can match multiple invocations.\n\nStarts watching from command time, regardless of filters. Supply --since to retrieve initial history before following new logs. Polls every five seconds with a rolling five-minute overlap that never reaches before the requested start. Time windows filter event batches, not individual record occurrence times; a newly arriving batch can contain records that occurred before command start. History is limited by server retention and tenant entitlements; the API clamps unavailable history. Large initial windows may hit bounded work limits and fail with partial output. Visibility is delayed and best-effort; output has no durable resume or global chronological ordering. Application logs come from the injected `logger`, not arbitrary stdout or `console.log`; collection requires resource opt-in and the platform runtime-log gate. Silence does not distinguish an idle resource, a wrong ID or filter, disabled collection, or delayed indexing. Runs until interrupted, output closes, or an error occurs.",
1316
1361
  "strict": true,
1317
1362
  "pluginName": "@basis-theory-labs/cli",
1318
1363
  "pluginAlias": "@basis-theory-labs/cli",
@@ -1320,6 +1365,8 @@
1320
1365
  "aliases": [],
1321
1366
  "examples": [
1322
1367
  "<%= config.bin %> reactors logs tail 03858bf5-32d3-4a2e-b74b-daeea0883bca",
1368
+ "<%= config.bin %> reactors logs tail 03858bf5-32d3-4a2e-b74b-daeea0883bca --trace-id customer_Order-42",
1369
+ "<%= config.bin %> reactors logs tail 03858bf5-32d3-4a2e-b74b-daeea0883bca --trace-id customer_Order-42 --since 30m --format json",
1323
1370
  "<%= config.bin %> reactors logs tail 03858bf5-32d3-4a2e-b74b-daeea0883bca --since 30m --format json"
1324
1371
  ],
1325
1372
  "flags": {
@@ -1338,6 +1385,12 @@
1338
1385
  "hidden": true,
1339
1386
  "multiple": false
1340
1387
  },
1388
+ "trace-id": {
1389
+ "name": "trace-id",
1390
+ "type": "option",
1391
+ "description": "exact, case-sensitive stored BT trace ID",
1392
+ "multiple": false
1393
+ },
1341
1394
  "since": {
1342
1395
  "name": "since",
1343
1396
  "type": "option",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@basis-theory-labs/cli",
3
- "version": "4.3.0",
3
+ "version": "4.4.0",
4
4
  "description": "Basis Theory CLI tool",
5
5
  "author": "Davi Aquino @djejaquino",
6
6
  "bin": {