@hunt-labs/bytekit-sdk 0.11.14 → 0.11.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -10,6 +10,20 @@ today, see [README.md](./README.md), which remains the authoritative usage guide
10
10
 
11
11
  ## [Unreleased]
12
12
 
13
+ ## [0.11.15] - 2026-11-04
14
+
15
+ ### Changed
16
+
17
+ - **New internal `GET /v1/bulk/concurrency` operation (#3718).** The generated `getBulkConcurrency`
18
+ types record a read-only operation that returns `{ active, limit }`: the account's in-use bulk
19
+ concurrency slots (`null` when the slot count cannot be read) and the plan cap, for the dashboard's
20
+ bulk playground. It is `x-sdk-scope: internal` and adds no SDK method, so no published method
21
+ signature moves; `GET /v1/bulk` is unchanged.
22
+ - **`device_scale_factor` accepts only `1` (#5630).** The generated `ScreenshotRequest` and the bulk
23
+ `defaults` types narrow `device_scale_factor` from `1 | 2 | null` to `1 | null`. The API now answers
24
+ `2` (or any other value) with a 422 `validation_error`; omitting the field still means `null`.
25
+ Regenerated `src/generated/api.d.ts`.
26
+
13
27
  ## [0.11.14] - 2026-10-27
14
28
 
15
29
  ### Added
@@ -465,6 +465,33 @@ export interface paths {
465
465
  patch?: never;
466
466
  trace?: never;
467
467
  };
468
+ "/v1/bulk/concurrency": {
469
+ parameters: {
470
+ query?: never;
471
+ header?: never;
472
+ path?: never;
473
+ cookie?: never;
474
+ };
475
+ /**
476
+ * Get bulk concurrency usage
477
+ * @description Returns how many of the account's bulk concurrency slots are in use and
478
+ * the plan cap they count against, so a dashboard can tell a bulk job that
479
+ * is waiting on the cap from one that is stalled. `active` is a live
480
+ * approximation of dispatched bulk children: a slot whose release never
481
+ * arrived drops out of the count after 5 minutes. It is for display only
482
+ * and never decides a job's state or progress, which come from the job's
483
+ * own counters, nor enforcement or billing. Authenticates with an API key
484
+ * or a dashboard session, like the other `/v1/bulk` operations.
485
+ */
486
+ get: operations["getBulkConcurrency"];
487
+ put?: never;
488
+ post?: never;
489
+ delete?: never;
490
+ options?: never;
491
+ head?: never;
492
+ patch?: never;
493
+ trace?: never;
494
+ };
468
495
  "/v1/bulk/{id}": {
469
496
  parameters: {
470
497
  query?: never;
@@ -2318,10 +2345,11 @@ export interface components {
2318
2345
  /** @default false */
2319
2346
  dark_mode: boolean;
2320
2347
  /**
2348
+ * @description Pixel density. Only `1` is supported; any other value is a 422 `validation_error`.
2321
2349
  * @default null
2322
2350
  * @enum {integer|null}
2323
2351
  */
2324
- device_scale_factor: 1 | 2 | null;
2352
+ device_scale_factor: 1 | null;
2325
2353
  /** @default false */
2326
2354
  include_html: boolean;
2327
2355
  /** @default US */
@@ -3713,7 +3741,7 @@ export interface operations {
3713
3741
  "X-Screenshot-Status"?: string;
3714
3742
  /** @description The originally requested URL. */
3715
3743
  "X-Screenshot-URL"?: string;
3716
- /** @description Legacy credit weight for this capture (1, 2 or 4, doubling for `full_page` and again for retina/mobile). It is recorded for reporting only — screenshots are billed on bandwidth, not credits: the charge is the Phase 1 wire bytes x 1.5, and zero when Phase 1 is skipped or fails. */
3744
+ /** @description Legacy credit weight for this capture (1, 2 or 4, doubling for `full_page` and again for mobile). It is recorded for reporting only — screenshots are billed on bandwidth, not credits: the charge is the Phase 1 wire bytes x 1.5, and zero when Phase 1 is skipped or fails. */
3717
3745
  "X-Screenshot-Credits-Charged"?: number;
3718
3746
  /** @description Handler elapsed time in milliseconds. */
3719
3747
  "X-Screenshot-Duration-Ms"?: number;
@@ -3754,7 +3782,7 @@ export interface operations {
3754
3782
  "X-Screenshot-Status"?: string;
3755
3783
  /** @description The originally requested URL. */
3756
3784
  "X-Screenshot-URL"?: string;
3757
- /** @description Legacy credit weight for this capture (1, 2 or 4, doubling for `full_page` and again for retina/mobile). It is recorded for reporting only — screenshots are billed on bandwidth, not credits: the charge is the Phase 1 wire bytes x 1.5, and zero when Phase 1 is skipped or fails. */
3785
+ /** @description Legacy credit weight for this capture (1, 2 or 4, doubling for `full_page` and again for mobile). It is recorded for reporting only — screenshots are billed on bandwidth, not credits: the charge is the Phase 1 wire bytes x 1.5, and zero when Phase 1 is skipped or fails. */
3758
3786
  "X-Screenshot-Credits-Charged"?: number;
3759
3787
  /** @description Handler elapsed time in milliseconds. */
3760
3788
  "X-Screenshot-Duration-Ms"?: number;
@@ -4057,6 +4085,22 @@ export interface operations {
4057
4085
  };
4058
4086
  401: components["responses"]["Unauthorized"];
4059
4087
  402: components["responses"]["PaymentRequired"];
4088
+ /**
4089
+ * @description `unsupported_content_type`, in two cases:
4090
+ * - The `url` path ends in `.pdf`: the path, lowercased, ends in `.pdf`; the query string and
4091
+ * fragment are not looked at. It is refused before anything is drawn. A PDF served from
4092
+ * another path, or reached through a redirect, is not caught by this check.
4093
+ * - The page was fetched (or served from cache) and its content type cannot produce the
4094
+ * requested formats. The charge is refunded.
4095
+ */
4096
+ 415: {
4097
+ headers: {
4098
+ [name: string]: unknown;
4099
+ };
4100
+ content: {
4101
+ "application/json": components["schemas"]["Error"];
4102
+ };
4103
+ };
4060
4104
  /**
4061
4105
  * @description Validation error. A `json` format entry whose `schema` the extractor cannot take is
4062
4106
  * refused with `schema_incompatible`, before anything is drawn.
@@ -4325,6 +4369,20 @@ export interface operations {
4325
4369
  estimated_credits: number | null;
4326
4370
  /** @description Webhook endpoint URL (HTTPS only; http:// rejected with 400 invalid_url, reason scheme_unsupported) */
4327
4371
  webhook_url: string;
4372
+ /**
4373
+ * @description Items refused at intake and not queued, by their index in `items` or `urls`.
4374
+ * An item is refused with `unsupported_content_type` when its URL path, lowercased,
4375
+ * ends in `.pdf` (the query string and fragment are not looked at). Refused items
4376
+ * are not counted in `total` and nothing is reserved for them. Empty when every
4377
+ * item was accepted.
4378
+ */
4379
+ rejected: {
4380
+ index: number;
4381
+ url: string;
4382
+ /** @enum {string} */
4383
+ code: "unsupported_content_type";
4384
+ message: string;
4385
+ }[];
4328
4386
  };
4329
4387
  };
4330
4388
  };
@@ -4380,9 +4438,25 @@ export interface operations {
4380
4438
  };
4381
4439
  };
4382
4440
  /**
4383
- * @description Validation error. `bulk_too_large` is returned when the item count
4384
- * exceeds the account plan's `max_bulk_size` cap (also surfaced as
4385
- * `max_bulk_size` on `GET /v1/account`).
4441
+ * @description `unsupported_content_type`: every item in the batch was refused because its URL path ends in
4442
+ * `.pdf` (the path, lowercased; the query string and fragment are not looked at). Nothing is
4443
+ * queued or billed. `details.rejected` lists each item as `{ index, url, code, message }`.
4444
+ * When only some items are refused the batch is accepted with `202` and those items are
4445
+ * listed in `rejected` instead.
4446
+ */
4447
+ 415: {
4448
+ headers: {
4449
+ [name: string]: unknown;
4450
+ };
4451
+ content: {
4452
+ "application/json": components["schemas"]["Error"];
4453
+ };
4454
+ };
4455
+ /**
4456
+ * @description Validation error. `bulk_too_large` is returned when the count of
4457
+ * accepted items exceeds the account plan's `max_bulk_size` cap (also
4458
+ * surfaced as `max_bulk_size` on `GET /v1/account`). Items refused
4459
+ * for a `.pdf` path are listed in `rejected` and do not count.
4386
4460
  */
4387
4461
  422: {
4388
4462
  headers: {
@@ -5261,8 +5335,7 @@ export interface operations {
5261
5335
  * "country": "US",
5262
5336
  * "formats": [
5263
5337
  * "raw"
5264
- * ],
5265
- * "device_scale_factor": 2
5338
+ * ]
5266
5339
  * },
5267
5340
  * "metadata": {
5268
5341
  * "campaign": "q3"
@@ -5366,10 +5439,11 @@ export interface operations {
5366
5439
  height: number;
5367
5440
  } | null;
5368
5441
  /**
5442
+ * @description Pixel density. Only `1` is supported; any other value is a 422 `validation_error`.
5369
5443
  * @default null
5370
5444
  * @enum {integer|null}
5371
5445
  */
5372
- device_scale_factor?: 1 | 2 | null;
5446
+ device_scale_factor?: 1 | null;
5373
5447
  };
5374
5448
  /**
5375
5449
  * Format: uri
@@ -5495,6 +5569,32 @@ export interface operations {
5495
5569
  };
5496
5570
  };
5497
5571
  };
5572
+ getBulkConcurrency: {
5573
+ parameters: {
5574
+ query?: never;
5575
+ header?: never;
5576
+ path?: never;
5577
+ cookie?: never;
5578
+ };
5579
+ requestBody?: never;
5580
+ responses: {
5581
+ /** @description Successful response. */
5582
+ 200: {
5583
+ headers: {
5584
+ [name: string]: unknown;
5585
+ };
5586
+ content: {
5587
+ "application/json": {
5588
+ /** @description Bulk slots in use right now. `0` is a real zero (nothing running). `null` means the slot count could not be read right now; it is not zero. */
5589
+ active: number | null;
5590
+ /** @description The plan's maximum concurrency, the cap `active` counts against. */
5591
+ limit: number;
5592
+ };
5593
+ };
5594
+ };
5595
+ 401: components["responses"]["Unauthorized"];
5596
+ };
5597
+ };
5498
5598
  getBulk: {
5499
5599
  parameters: {
5500
5600
  query?: never;
@@ -5841,6 +5941,21 @@ export interface operations {
5841
5941
  "application/json": components["schemas"]["Error"];
5842
5942
  };
5843
5943
  };
5944
+ /**
5945
+ * @description `unsupported_content_type`: a `scrape` monitor whose `url` path ends in `.pdf` is refused
5946
+ * before it is stored. The check is on the URL only: the path, lowercased, ends in `.pdf`;
5947
+ * the query string and fragment are not looked at. A PDF served from another path, or reached
5948
+ * through a redirect, is not caught here — its polls fail as `unsupported_content_type` and
5949
+ * count toward auto-suspension. A `screenshot` monitor is not affected.
5950
+ */
5951
+ 415: {
5952
+ headers: {
5953
+ [name: string]: unknown;
5954
+ };
5955
+ content: {
5956
+ "application/json": components["schemas"]["Error"];
5957
+ };
5958
+ };
5844
5959
  /** @description Validation error. */
5845
5960
  422: {
5846
5961
  headers: {
@@ -5977,6 +6092,21 @@ export interface operations {
5977
6092
  "application/json": components["schemas"]["Error"];
5978
6093
  };
5979
6094
  };
6095
+ /**
6096
+ * @description `unsupported_content_type`: a `scrape` monitor whose `url` path ends in `.pdf` is refused
6097
+ * before it is stored. The check is on the URL only: the path, lowercased, ends in `.pdf`;
6098
+ * the query string and fragment are not looked at. A PDF served from another path, or reached
6099
+ * through a redirect, is not caught here — its polls fail as `unsupported_content_type` and
6100
+ * count toward auto-suspension. A `screenshot` monitor is not affected.
6101
+ */
6102
+ 415: {
6103
+ headers: {
6104
+ [name: string]: unknown;
6105
+ };
6106
+ content: {
6107
+ "application/json": components["schemas"]["Error"];
6108
+ };
6109
+ };
5980
6110
  /** @description Validation error. */
5981
6111
  422: {
5982
6112
  headers: {
package/dist/version.d.ts CHANGED
@@ -5,4 +5,4 @@
5
5
  * outbound request carries — see the emit site in `client.ts`. The header name is spelled
6
6
  * only there, so issue #2905's pre-merge gate 1 counts exactly one occurrence in `src/`.
7
7
  */
8
- export declare const SDK_VERSION = "0.11.14";
8
+ export declare const SDK_VERSION = "0.11.15";
package/dist/version.js CHANGED
@@ -9,4 +9,4 @@
9
9
  * outbound request carries — see the emit site in `client.ts`. The header name is spelled
10
10
  * only there, so issue #2905's pre-merge gate 1 counts exactly one occurrence in `src/`.
11
11
  */
12
- export const SDK_VERSION = '0.11.14';
12
+ export const SDK_VERSION = '0.11.15';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hunt-labs/bytekit-sdk",
3
- "version": "0.11.14",
3
+ "version": "0.11.15",
4
4
  "description": "Official TypeScript SDK for the ByteKit API",
5
5
  "license": "MIT",
6
6
  "type": "module",