@transcodely/sdk 0.3.6 → 0.3.8

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/dist/index.d.ts CHANGED
@@ -381,6 +381,135 @@ declare enum BillingStanding {
381
381
  */
382
382
  DELINQUENT = 4
383
383
  }
384
+ /**
385
+ * How AUTOMATION is allowed to treat an organization.
386
+ *
387
+ * Orthogonal to BillingStanding, and the distinction is the whole point.
388
+ * Standing is a derived FACT about payment health. Treatment is a commercial
389
+ * DECISION about whether a cron may act on that fact — email the customer,
390
+ * block their creates, suspend them. An account can be in dunning and
391
+ * untouchable at the same time.
392
+ *
393
+ * ASSIGNED, never derived: an operator says what a relationship is, through the
394
+ * audited admin RPC. Admin surfaces only; a customer does not learn from an API
395
+ * field how patiently we treat them.
396
+ *
397
+ * @generated from enum transcodely.v1.BillingTreatment
398
+ */
399
+ declare enum BillingTreatment {
400
+ /**
401
+ * @generated from enum value: BILLING_TREATMENT_UNSPECIFIED = 0;
402
+ */
403
+ UNSPECIFIED = 0,
404
+ /**
405
+ * The default and the full lifecycle: the dunning ladder, the soft limit,
406
+ * suspension, every customer email, and the dispute posture.
407
+ *
408
+ * @generated from enum value: BILLING_TREATMENT_NORMAL = 1;
409
+ */
410
+ NORMAL = 1,
411
+ /**
412
+ * Billed COMPLETELY NORMALLY — payment method on file, monthly statements,
413
+ * real charges — and exempt from every automated interruption. A failed
414
+ * payment or a dispute on one of these routes to the founder instead of to
415
+ * the customer, so it becomes a conversation rather than a cutoff.
416
+ *
417
+ * Requires a payment method on file: this is a promise not to interrupt
418
+ * someone who pays, not a way to run an account with no card.
419
+ *
420
+ * @generated from enum value: BILLING_TREATMENT_TRUSTED = 2;
421
+ */
422
+ TRUSTED = 2,
423
+ /**
424
+ * Grandfather / comp semantics: not billed, not enforced. Internal, dogfood
425
+ * and legacy accounts. Selecting it also maintains payment_method_required
426
+ * and billing_exempt, in the same transaction, so the standing derivation and
427
+ * this value can never describe different postures.
428
+ *
429
+ * @generated from enum value: BILLING_TREATMENT_EXEMPT = 3;
430
+ */
431
+ EXEMPT = 3
432
+ }
433
+ /**
434
+ * How far the CONSEQUENCES of an unpaid statement have progressed.
435
+ *
436
+ * Deliberately NOT a fifth BillingStanding. Standing is payment HEALTH, derived
437
+ * from facts. This is what we have DONE about it, and it needs states standing
438
+ * cannot express: "new jobs refused but playback still serving" and "suspended"
439
+ * are consequences, not healths, and an account can be delinquent for weeks at
440
+ * any of them.
441
+ *
442
+ * Every rung's timing derives from the episode's own start, and the schedule is
443
+ * a set of Go constants (domain.DunningStage) rather than configuration — the
444
+ * day counts below are documentation of that policy, not a second copy of it.
445
+ *
446
+ * ADMIN SURFACES ONLY in this release. A customer is told what is happening to
447
+ * their account in the email that accompanies each rung; they do not read the
448
+ * ladder's internal vocabulary out of an API.
449
+ *
450
+ * @generated from enum transcodely.v1.DunningStage
451
+ */
452
+ declare enum DunningStage {
453
+ /**
454
+ * @generated from enum value: DUNNING_STAGE_UNSPECIFIED = 0;
455
+ */
456
+ UNSPECIFIED = 0,
457
+ /**
458
+ * The resting state: no episode, or one that a payment closed.
459
+ *
460
+ * @generated from enum value: DUNNING_STAGE_NONE = 1;
461
+ */
462
+ NONE = 1,
463
+ /**
464
+ * Day 0 — the provider's charge failed and it is retrying on its own
465
+ * schedule. Full service continues; the customer is told, and nothing else
466
+ * happens.
467
+ *
468
+ * @generated from enum value: DUNNING_STAGE_PAST_DUE = 2;
469
+ */
470
+ PAST_DUE = 2,
471
+ /**
472
+ * Day 3 — still unpaid, and the mail now names the date service will be
473
+ * limited. Full service continues.
474
+ *
475
+ * @generated from enum value: DUNNING_STAGE_WARNED = 3;
476
+ */
477
+ WARNED = 3,
478
+ /**
479
+ * Day 7 — NEW jobs are refused. Everything already queued or running
480
+ * finishes, playback keeps serving, and the dashboard stays fully readable.
481
+ *
482
+ * @generated from enum value: DUNNING_STAGE_SOFT_LIMITED = 4;
483
+ */
484
+ SOFT_LIMITED = 4,
485
+ /**
486
+ * Day 14 — the organization is suspended: API keys refused, public playback
487
+ * stopped. Dashboard reads stay open and Cancel stays allowed, so a suspended
488
+ * customer can still see what they owe, pay it, and stop their own meter.
489
+ *
490
+ * @generated from enum value: DUNNING_STAGE_SUSPENDED = 5;
491
+ */
492
+ SUSPENDED = 5,
493
+ /**
494
+ * Day 45 — the T-14 notice naming the exact date stored media goes. Nothing
495
+ * new is enforced here; the mail IS the event.
496
+ *
497
+ * @generated from enum value: DUNNING_STAGE_DELETION_WARNED = 6;
498
+ */
499
+ DELETION_WARNED = 6,
500
+ /**
501
+ * Day 60 — statements marked uncollectible, ledger entries flagged, stored
502
+ * media eligible for deletion. The organization stays suspended. Terminal for
503
+ * this episode.
504
+ *
505
+ * Also the state an operator's manual write-off produces: the same end state,
506
+ * reached earlier and by a human. Which of the two happened is answered by
507
+ * the audit log, not by this field.
508
+ *
509
+ * @generated from enum value: DUNNING_STAGE_WRITTEN_OFF = 7;
510
+ */
511
+ WRITTEN_OFF = 7
512
+ }
384
513
  /**
385
514
  * Pagination request parameters.
386
515
  *
@@ -618,8 +747,12 @@ declare class CreateAPIKeyRequest extends Message<CreateAPIKeyRequest> {
618
747
  */
619
748
  expiresAt?: Timestamp;
620
749
  /**
621
- * App ID to create the key for.
622
- * Required when unauthenticated. Ignored when authenticated (uses the authenticated app).
750
+ * App ID to create the key for. API-key callers may omit it (their key's app
751
+ * is used) or pass their own app; a different app is rejected with
752
+ * PermissionDenied. Portal/JWT callers pass it to create in a specific app in
753
+ * their org; omitted selects the org's first active app. Still REQUIRED on
754
+ * the unauthenticated onboarding bootstrap path, where nothing else can name
755
+ * an app: omitting it there is invalid_argument (`app_id_required`).
623
756
  *
624
757
  * @generated from field: string app_id = 5;
625
758
  */
@@ -915,6 +1048,18 @@ declare class InvalidRequestError extends TranscodelyError {
915
1048
  /** 412 — preconditions not met (e.g. job not cancelable in current state). */
916
1049
  declare class PreconditionError extends TranscodelyError {
917
1050
  }
1051
+ /**
1052
+ * Raised by `client.uploads.putFile` when the byte transfer itself fails —
1053
+ * a presigned PUT rejected after retries, a store that returned no ETag, or a
1054
+ * source the SDK refuses to send (empty, over the 5 GB ceiling, a stream with
1055
+ * no declared size). Errors from the upload RPCs themselves stay in their own
1056
+ * classes; this one covers the part of the upload the API never sees.
1057
+ */
1058
+ declare class UploadError extends TranscodelyError {
1059
+ }
1060
+ /** The upload's `signal` fired. The multipart upload is aborted server-side. */
1061
+ declare class UploadAbortedError extends UploadError {
1062
+ }
918
1063
  /**
919
1064
  * Base class for errors thrown by {@link Webhooks.constructEvent}. Unlike the
920
1065
  * other SDK errors, these originate locally — the SDK never made a network
@@ -1182,6 +1327,14 @@ declare class App extends Message<App> {
1182
1327
  * @generated from field: optional double monthly_spend_limit_eur = 15;
1183
1328
  */
1184
1329
  monthlySpendLimitEur?: number;
1330
+ /**
1331
+ * Player configuration for the app's hosted player and embeds. Unset when
1332
+ * never configured (the player uses its built-in defaults). Update via
1333
+ * AppService.UpdatePlayerConfig.
1334
+ *
1335
+ * @generated from field: optional transcodely.v1.PlayerConfig player_config = 16;
1336
+ */
1337
+ playerConfig?: PlayerConfig;
1185
1338
  constructor(data?: PartialMessage<App>);
1186
1339
  static readonly runtime: typeof proto3;
1187
1340
  static readonly typeName = "transcodely.v1.App";
@@ -1191,6 +1344,122 @@ declare class App extends Message<App> {
1191
1344
  static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): App;
1192
1345
  static equals(a: App | PlainMessage<App> | undefined, b: App | PlainMessage<App> | undefined): boolean;
1193
1346
  }
1347
+ /**
1348
+ * Player configuration: how the hosted player and embeds present every video
1349
+ * in the app. All fields are optional; an unset field keeps the player's
1350
+ * built-in default.
1351
+ *
1352
+ * @generated from message transcodely.v1.PlayerConfig
1353
+ */
1354
+ declare class PlayerConfig extends Message<PlayerConfig> {
1355
+ /**
1356
+ * Caption (subtitle) rendering style.
1357
+ *
1358
+ * @generated from field: optional transcodely.v1.CaptionStyle captions = 1;
1359
+ */
1360
+ captions?: CaptionStyle;
1361
+ constructor(data?: PartialMessage<PlayerConfig>);
1362
+ static readonly runtime: typeof proto3;
1363
+ static readonly typeName = "transcodely.v1.PlayerConfig";
1364
+ static readonly fields: FieldList;
1365
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): PlayerConfig;
1366
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): PlayerConfig;
1367
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): PlayerConfig;
1368
+ static equals(a: PlayerConfig | PlainMessage<PlayerConfig> | undefined, b: PlayerConfig | PlainMessage<PlayerConfig> | undefined): boolean;
1369
+ }
1370
+ /**
1371
+ * Caption rendering style for the hosted player. Colors are 6-digit hex with
1372
+ * a leading '#' (e.g. "#0a0a0a"). On update: an unset field keeps its stored
1373
+ * value, an empty string clears a color back to the player default, and a
1374
+ * numeric field returns to default when set to the documented default value.
1375
+ *
1376
+ * @generated from message transcodely.v1.CaptionStyle
1377
+ */
1378
+ declare class CaptionStyle extends Message<CaptionStyle> {
1379
+ /**
1380
+ * Cue box background color. Player default: "#0a0a0a". Empty string clears.
1381
+ *
1382
+ * @generated from field: optional string background_color = 1;
1383
+ */
1384
+ backgroundColor?: string;
1385
+ /**
1386
+ * Cue box background opacity, 0 (fully transparent) to 1 (solid).
1387
+ * Player default: 0.7.
1388
+ *
1389
+ * @generated from field: optional double background_opacity = 2;
1390
+ */
1391
+ backgroundOpacity?: number;
1392
+ /**
1393
+ * Caption text color. Player default: "#ffffff". Empty string clears.
1394
+ *
1395
+ * @generated from field: optional string text_color = 3;
1396
+ */
1397
+ textColor?: string;
1398
+ /**
1399
+ * Caption text size multiplier applied to the player's responsive base
1400
+ * size: 0.5 (half) to 2 (double). Player default: 1.
1401
+ *
1402
+ * @generated from field: optional double font_scale = 4;
1403
+ */
1404
+ fontScale?: number;
1405
+ constructor(data?: PartialMessage<CaptionStyle>);
1406
+ static readonly runtime: typeof proto3;
1407
+ static readonly typeName = "transcodely.v1.CaptionStyle";
1408
+ static readonly fields: FieldList;
1409
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): CaptionStyle;
1410
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): CaptionStyle;
1411
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): CaptionStyle;
1412
+ static equals(a: CaptionStyle | PlainMessage<CaptionStyle> | undefined, b: CaptionStyle | PlainMessage<CaptionStyle> | undefined): boolean;
1413
+ }
1414
+ /**
1415
+ * Request to update player configuration for an app.
1416
+ *
1417
+ * @generated from message transcodely.v1.UpdatePlayerConfigRequest
1418
+ */
1419
+ declare class UpdatePlayerConfigRequest extends Message<UpdatePlayerConfigRequest> {
1420
+ /**
1421
+ * App ID.
1422
+ *
1423
+ * @generated from field: string id = 1;
1424
+ */
1425
+ id: string;
1426
+ /**
1427
+ * Player configuration to merge. Fields present here overwrite the stored
1428
+ * value; absent fields are left unchanged.
1429
+ *
1430
+ * @generated from field: transcodely.v1.PlayerConfig player_config = 2;
1431
+ */
1432
+ playerConfig?: PlayerConfig;
1433
+ constructor(data?: PartialMessage<UpdatePlayerConfigRequest>);
1434
+ static readonly runtime: typeof proto3;
1435
+ static readonly typeName = "transcodely.v1.UpdatePlayerConfigRequest";
1436
+ static readonly fields: FieldList;
1437
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): UpdatePlayerConfigRequest;
1438
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): UpdatePlayerConfigRequest;
1439
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): UpdatePlayerConfigRequest;
1440
+ static equals(a: UpdatePlayerConfigRequest | PlainMessage<UpdatePlayerConfigRequest> | undefined, b: UpdatePlayerConfigRequest | PlainMessage<UpdatePlayerConfigRequest> | undefined): boolean;
1441
+ }
1442
+ /**
1443
+ * Response from updating player configuration.
1444
+ *
1445
+ * @generated from message transcodely.v1.UpdatePlayerConfigResponse
1446
+ */
1447
+ declare class UpdatePlayerConfigResponse extends Message<UpdatePlayerConfigResponse> {
1448
+ /**
1449
+ * The updated app with merged player config.
1450
+ *
1451
+ * @generated from field: transcodely.v1.App app = 1;
1452
+ */
1453
+ app?: App;
1454
+ constructor(data?: PartialMessage<UpdatePlayerConfigResponse>);
1455
+ static readonly runtime: typeof proto3;
1456
+ static readonly typeName = "transcodely.v1.UpdatePlayerConfigResponse";
1457
+ static readonly fields: FieldList;
1458
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): UpdatePlayerConfigResponse;
1459
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): UpdatePlayerConfigResponse;
1460
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): UpdatePlayerConfigResponse;
1461
+ static equals(a: UpdatePlayerConfigResponse | PlainMessage<UpdatePlayerConfigResponse> | undefined, b: UpdatePlayerConfigResponse | PlainMessage<UpdatePlayerConfigResponse> | undefined): boolean;
1462
+ }
1194
1463
  /**
1195
1464
  * Request to create a new app.
1196
1465
  *
@@ -1479,13 +1748,22 @@ declare class EnableHostingResponse extends Message<EnableHostingResponse> {
1479
1748
  */
1480
1749
  declare class HostingConfig extends Message<HostingConfig> {
1481
1750
  /**
1482
- * Default visibility for new uploads: "public", "unlisted", or "private".
1751
+ * Default visibility for videos this app creates: "public", "unlisted", or
1752
+ * "private". Applies to every creation path — CreateUpload,
1753
+ * CreateMultipartUpload, CreateFromUrl and the video a managed CreateJob
1754
+ * produces — whenever the request itself does not name a visibility. Unset
1755
+ * means "unlisted".
1483
1756
  *
1484
1757
  * @generated from field: optional string default_visibility = 1;
1485
1758
  */
1486
1759
  defaultVisibility?: string;
1487
1760
  /**
1488
- * Max upload file size in bytes (0 = no limit).
1761
+ * Max upload file size in bytes (0 = no limit). Enforced at CreateUpload and
1762
+ * CreateMultipartUpload against the request's declared size_bytes, on top of
1763
+ * the fixed 5 GB per-request ceiling; over-limit requests are rejected with
1764
+ * error code "max_upload_size_exceeded" before anything is created. Not
1765
+ * enforced by CreateFromUrl, whose source size is unknown until the worker
1766
+ * fetches the URL.
1489
1767
  *
1490
1768
  * @generated from field: optional int64 max_upload_size_bytes = 2;
1491
1769
  */
@@ -1875,7 +2153,105 @@ declare enum InvoiceLineType {
1875
2153
  *
1876
2154
  * @generated from enum value: INVOICE_LINE_TYPE_ADJUSTMENT = 4;
1877
2155
  */
1878
- ADJUSTMENT = 4
2156
+ ADJUSTMENT = 4,
2157
+ /**
2158
+ * Metered hosting: managed storage (GB, averaged over the covered days) and
2159
+ * CDN delivery (GB egressed), one line per app and service. dimensions
2160
+ * carries {"app_id", "service": "storage"|"egress", "covered_from",
2161
+ * "covered_through"} — the coverage window rolls with the meter, so the last
2162
+ * day or so of a period appears on the next statement rather than this one.
2163
+ *
2164
+ * @generated from enum value: INVOICE_LINE_TYPE_HOSTING = 5;
2165
+ */
2166
+ HOSTING = 5
2167
+ }
2168
+ /**
2169
+ * How much unbilled usage an organization's payment history earns it.
2170
+ *
2171
+ * Derived from the number of statements it has paid, never stored, and it only
2172
+ * ever moves upward as payments land. It is not a customer segment, a plan, or
2173
+ * anything anyone is told about beyond the billing page: its single job is to
2174
+ * answer "how much work should we run for this account before asking to be
2175
+ * paid".
2176
+ *
2177
+ * @generated from enum transcodely.v1.TrustTier
2178
+ */
2179
+ declare enum TrustTier {
2180
+ /**
2181
+ * @generated from enum value: TRUST_TIER_UNSPECIFIED = 0;
2182
+ */
2183
+ UNSPECIFIED = 0,
2184
+ /**
2185
+ * No settled payments yet. Every account starts here, including the ones that
2186
+ * go on to spend thousands.
2187
+ *
2188
+ * @generated from enum value: TRUST_TIER_NEW = 1;
2189
+ */
2190
+ NEW = 1,
2191
+ /**
2192
+ * One or two settled payments.
2193
+ *
2194
+ * @generated from enum value: TRUST_TIER_ESTABLISHED = 2;
2195
+ */
2196
+ ESTABLISHED = 2,
2197
+ /**
2198
+ * Three or more settled payments. The tier imposes NO threshold of its own —
2199
+ * the account falls through to whatever ceiling its plan sets, which for most
2200
+ * accounts is none. This is where the ladder is meant to end up.
2201
+ *
2202
+ * @generated from enum value: TRUST_TIER_PROVEN = 3;
2203
+ */
2204
+ PROVEN = 3
2205
+ }
2206
+ /**
2207
+ * Which rung supplied an organization's outstanding-balance threshold.
2208
+ *
2209
+ * Same purpose as LimitSource on the usage ladder: "€50" reads very differently
2210
+ * depending on whether changing it means an operator editing this organization,
2211
+ * editing its plan, or the account simply paying an invoice.
2212
+ *
2213
+ * @generated from enum transcodely.v1.ExposureThresholdSource
2214
+ */
2215
+ declare enum ExposureThresholdSource {
2216
+ /**
2217
+ * @generated from enum value: EXPOSURE_THRESHOLD_SOURCE_UNSPECIFIED = 0;
2218
+ */
2219
+ UNSPECIFIED = 0,
2220
+ /**
2221
+ * An operator set this organization's threshold by hand. Audited, and the
2222
+ * only rung that can RAISE a threshold above what the tier would give.
2223
+ *
2224
+ * @generated from enum value: EXPOSURE_THRESHOLD_SOURCE_OVERRIDE = 1;
2225
+ */
2226
+ OVERRIDE = 1,
2227
+ /**
2228
+ * The trust tier's own number — the everyday answer.
2229
+ *
2230
+ * @generated from enum value: EXPOSURE_THRESHOLD_SOURCE_TRUST_TIER = 2;
2231
+ */
2232
+ TRUST_TIER = 2,
2233
+ /**
2234
+ * The monthly spend ceiling on the organization's plan. It joins by MINIMUM,
2235
+ * so a plan can only ever tighten what the tier or an operator allowed:
2236
+ * carrying more unbilled usage than an account is permitted to spend in a
2237
+ * month would be extending credit past the amount it may run up at all.
2238
+ *
2239
+ * @generated from enum value: EXPOSURE_THRESHOLD_SOURCE_ORG_PLAN = 3;
2240
+ */
2241
+ ORG_PLAN = 3,
2242
+ /**
2243
+ * The platform-wide default ceiling.
2244
+ *
2245
+ * @generated from enum value: EXPOSURE_THRESHOLD_SOURCE_PLATFORM_DEFAULT = 4;
2246
+ */
2247
+ PLATFORM_DEFAULT = 4,
2248
+ /**
2249
+ * Every rung declined: no threshold applies, no reminders are sent and
2250
+ * admission is never refused for this reason.
2251
+ *
2252
+ * @generated from enum value: EXPOSURE_THRESHOLD_SOURCE_UNBOUNDED = 5;
2253
+ */
2254
+ UNBOUNDED = 5
1879
2255
  }
1880
2256
  /**
1881
2257
  * Whether an organization has a payment method the provider can charge.
@@ -2276,15 +2652,35 @@ declare class BillingPortalSession extends Message<BillingPortalSession> {
2276
2652
  * Where to send the browser. Single-use and short-lived; request a new
2277
2653
  * session rather than storing this.
2278
2654
  *
2655
+ * Points at the portal's settings section, where payment methods are managed,
2656
+ * rather than at its landing page.
2657
+ *
2279
2658
  * @generated from field: string url = 2;
2280
2659
  */
2281
2660
  url: string;
2282
2661
  /**
2283
- * When the session stops working.
2662
+ * When the session stops working. Applies to url and session_token alike —
2663
+ * they are two ways into the same session.
2284
2664
  *
2285
2665
  * @generated from field: google.protobuf.Timestamp expires_at = 3;
2286
2666
  */
2287
2667
  expiresAt?: Timestamp;
2668
+ /**
2669
+ * Short-lived (~1h), single-customer-scoped token for the provider's embedded
2670
+ * payment-method form, so a card can be added in place instead of by
2671
+ * redirecting to the hosted portal.
2672
+ *
2673
+ * Same trust level as `url`, which reaches the same portal as the same
2674
+ * customer with no further authentication. It is still a bare credential:
2675
+ * hand it to the embed, never log or store it, and request a new session
2676
+ * instead of reusing one.
2677
+ *
2678
+ * Empty when the configured provider exposes no such token; fall back to
2679
+ * opening `url`.
2680
+ *
2681
+ * @generated from field: string session_token = 4;
2682
+ */
2683
+ sessionToken: string;
2288
2684
  constructor(data?: PartialMessage<BillingPortalSession>);
2289
2685
  static readonly runtime: typeof proto3;
2290
2686
  static readonly typeName = "transcodely.v1.BillingPortalSession";
@@ -2295,85 +2691,378 @@ declare class BillingPortalSession extends Message<BillingPortalSession> {
2295
2691
  static equals(a: BillingPortalSession | PlainMessage<BillingPortalSession> | undefined, b: BillingPortalSession | PlainMessage<BillingPortalSession> | undefined): boolean;
2296
2692
  }
2297
2693
  /**
2298
- * Request to list the organization's invoices.
2694
+ * An organization's monthly budget and the spend it is measured against.
2299
2695
  *
2300
- * @generated from message transcodely.v1.ListInvoicesRequest
2696
+ * A budget is the customer's OWN telemetry: it exists so an account can be told
2697
+ * it is spending more than it meant to. It NEVER enforces anything. Crossing
2698
+ * 100% of a budget sends an email and changes nothing else — no job is
2699
+ * rejected, no video stops playing, no limit is applied.
2700
+ *
2701
+ * It is not the per-app spend LIMIT (App.monthly_spend_limit_eur, set via
2702
+ * AppService.UpdateSpendLimit), which IS a hard cap: at 100% of a spend limit,
2703
+ * new jobs are refused. Limits block; budgets notify. An organization can use
2704
+ * either, both, or neither.
2705
+ *
2706
+ * @generated from message transcodely.v1.Budget
2301
2707
  */
2302
- declare class ListInvoicesRequest extends Message<ListInvoicesRequest> {
2708
+ declare class Budget extends Message<Budget> {
2303
2709
  /**
2304
- * Pagination parameters.
2710
+ * Object type, always "budget".
2305
2711
  *
2306
- * @generated from field: transcodely.v1.PaginationRequest pagination = 1;
2712
+ * @generated from field: string object = 1;
2307
2713
  */
2308
- pagination?: PaginationRequest;
2309
- constructor(data?: PartialMessage<ListInvoicesRequest>);
2310
- static readonly runtime: typeof proto3;
2311
- static readonly typeName = "transcodely.v1.ListInvoicesRequest";
2312
- static readonly fields: FieldList;
2313
- static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): ListInvoicesRequest;
2314
- static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): ListInvoicesRequest;
2315
- static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): ListInvoicesRequest;
2316
- static equals(a: ListInvoicesRequest | PlainMessage<ListInvoicesRequest> | undefined, b: ListInvoicesRequest | PlainMessage<ListInvoicesRequest> | undefined): boolean;
2317
- }
2318
- /**
2319
- * Response from listing invoices.
2320
- *
2321
- * @generated from message transcodely.v1.ListInvoicesResponse
2322
- */
2323
- declare class ListInvoicesResponse extends Message<ListInvoicesResponse> {
2714
+ object: string;
2324
2715
  /**
2325
- * Invoices, newest period first. Line items are omitted here; fetch a single
2326
- * invoice to get them.
2716
+ * Organization this budget belongs to.
2327
2717
  *
2328
- * @generated from field: repeated transcodely.v1.Invoice invoices = 1;
2718
+ * @generated from field: string org_id = 2;
2329
2719
  */
2330
- invoices: Invoice[];
2720
+ orgId: string;
2331
2721
  /**
2332
- * Pagination metadata.
2722
+ * The monthly budget in EUR. Absent when no budget is set, which is the
2723
+ * default and means no alerts are sent.
2333
2724
  *
2334
- * @generated from field: transcodely.v1.PaginationResponse pagination = 2;
2725
+ * @generated from field: optional double amount_eur = 3;
2335
2726
  */
2336
- pagination?: PaginationResponse;
2337
- constructor(data?: PartialMessage<ListInvoicesResponse>);
2338
- static readonly runtime: typeof proto3;
2339
- static readonly typeName = "transcodely.v1.ListInvoicesResponse";
2340
- static readonly fields: FieldList;
2341
- static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): ListInvoicesResponse;
2342
- static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): ListInvoicesResponse;
2343
- static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): ListInvoicesResponse;
2344
- static equals(a: ListInvoicesResponse | PlainMessage<ListInvoicesResponse> | undefined, b: ListInvoicesResponse | PlainMessage<ListInvoicesResponse> | undefined): boolean;
2345
- }
2346
- /**
2347
- * Request to retrieve one invoice.
2348
- *
2349
- * @generated from message transcodely.v1.GetInvoiceRequest
2350
- */
2351
- declare class GetInvoiceRequest extends Message<GetInvoiceRequest> {
2727
+ amountEur?: number;
2352
2728
  /**
2353
- * Invoice ID (e.g., "inv_a1b2c3d4e5f6").
2729
+ * Spend so far in the current billing period, in EUR.
2354
2730
  *
2355
- * @generated from field: string id = 1;
2731
+ * This is the same ledger, over the same window, that GetUpcomingInvoice
2732
+ * reports — it covers transcoding AND hosting for every app in the
2733
+ * organization, and it excludes usage that will never be billed. It is
2734
+ * therefore NOT the same number as AppService.GetSpend, which is scoped to
2735
+ * one app, counts estimates for jobs still running, and knows nothing about
2736
+ * hosting.
2737
+ *
2738
+ * @generated from field: double spent_eur = 4;
2356
2739
  */
2357
- id: string;
2358
- constructor(data?: PartialMessage<GetInvoiceRequest>);
2740
+ spentEur: number;
2741
+ /**
2742
+ * spent_eur as a percentage of amount_eur. Absent when no budget is set.
2743
+ * Not capped at 100: an organization at 240% of its budget is shown 240.
2744
+ *
2745
+ * @generated from field: optional double used_percent = 5;
2746
+ */
2747
+ usedPercent?: number;
2748
+ /**
2749
+ * Start of the current billing period (inclusive), UTC.
2750
+ *
2751
+ * @generated from field: google.protobuf.Timestamp period_start = 6;
2752
+ */
2753
+ periodStart?: Timestamp;
2754
+ /**
2755
+ * End of the current billing period (exclusive), UTC. Spend resets here.
2756
+ *
2757
+ * @generated from field: google.protobuf.Timestamp period_end = 7;
2758
+ */
2759
+ periodEnd?: Timestamp;
2760
+ /**
2761
+ * The percentage steps that send an alert email, ascending. Fixed at
2762
+ * 50, 80 and 100 today; new steps may be added.
2763
+ *
2764
+ * @generated from field: repeated int32 alert_steps = 8;
2765
+ */
2766
+ alertSteps: number[];
2767
+ /**
2768
+ * The steps already emailed this billing period, ascending. Fire-once per
2769
+ * period: a step listed here does not send again, and changing the budget
2770
+ * mid-period does not re-arm it. Empty at the start of every period.
2771
+ *
2772
+ * @generated from field: repeated int32 notified_steps = 9;
2773
+ */
2774
+ notifiedSteps: number[];
2775
+ /**
2776
+ * ISO 4217 currency code for every amount here. Always "EUR" today.
2777
+ *
2778
+ * @generated from field: string currency = 10;
2779
+ */
2780
+ currency: string;
2781
+ constructor(data?: PartialMessage<Budget>);
2359
2782
  static readonly runtime: typeof proto3;
2360
- static readonly typeName = "transcodely.v1.GetInvoiceRequest";
2783
+ static readonly typeName = "transcodely.v1.Budget";
2361
2784
  static readonly fields: FieldList;
2362
- static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): GetInvoiceRequest;
2363
- static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): GetInvoiceRequest;
2364
- static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): GetInvoiceRequest;
2365
- static equals(a: GetInvoiceRequest | PlainMessage<GetInvoiceRequest> | undefined, b: GetInvoiceRequest | PlainMessage<GetInvoiceRequest> | undefined): boolean;
2785
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): Budget;
2786
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): Budget;
2787
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): Budget;
2788
+ static equals(a: Budget | PlainMessage<Budget> | undefined, b: Budget | PlainMessage<Budget> | undefined): boolean;
2366
2789
  }
2367
2790
  /**
2368
- * Response from retrieving an invoice.
2791
+ * An organization's unsettled balance and the threshold it is measured against.
2369
2792
  *
2370
- * @generated from message transcodely.v1.GetInvoiceResponse
2793
+ * # What the number is
2794
+ *
2795
+ * Usage that has been accrued and NOT yet captured onto a statement —
2796
+ * transcoding and hosting, across every app in the organization. Paying a
2797
+ * statement, or settling mid-cycle, resets it to zero.
2798
+ *
2799
+ * It is a different number from all three of its neighbours, and the
2800
+ * differences matter:
2801
+ *
2802
+ * - GetUpcomingInvoice shows what THIS PERIOD has accrued. This shows what is
2803
+ * UNSETTLED, which also carries anything an earlier period left uncaptured.
2804
+ * - Budget.spent_eur keeps counting after an invoice is issued, because spend
2805
+ * does not un-happen when it is billed. This drops to zero when it is.
2806
+ * - App.monthly_spend_limit_eur is a cap the customer sets on one app for
2807
+ * themselves. This is the platform's own exposure control over the whole
2808
+ * organization, and no calendar clears it — only payment does.
2809
+ *
2810
+ * # What happens as it climbs
2811
+ *
2812
+ * Nothing, for a long time. Reminder emails go out at 80%, 100%, 125%, 150% and
2813
+ * 175% of the threshold and NOTHING is restricted at any of them: service
2814
+ * continues past the threshold on purpose, so that a busy month never stops a
2815
+ * pipeline without warning. Only at `hard_stop_cents` — twice the threshold —
2816
+ * are new jobs refused, with error code "outstanding_balance_exceeded".
2817
+ *
2818
+ * Even then, work already queued or running finishes, outputs are delivered,
2819
+ * videos keep playing, uploads keep working and jobs can still be canceled.
2820
+ * Paying lifts the block on the very next request.
2821
+ *
2822
+ * @generated from message transcodely.v1.OutstandingBalance
2371
2823
  */
2372
- declare class GetInvoiceResponse extends Message<GetInvoiceResponse> {
2824
+ declare class OutstandingBalance extends Message<OutstandingBalance> {
2373
2825
  /**
2374
- * The requested invoice, with its line items.
2826
+ * Object type, always "outstanding_balance".
2375
2827
  *
2376
- * @generated from field: transcodely.v1.Invoice invoice = 1;
2828
+ * @generated from field: string object = 1;
2829
+ */
2830
+ object: string;
2831
+ /**
2832
+ * Organization this balance belongs to.
2833
+ *
2834
+ * @generated from field: string org_id = 2;
2835
+ */
2836
+ orgId: string;
2837
+ /**
2838
+ * The unsettled amount, in integer minor units (cents) of `currency`.
2839
+ * Rendered as a JSON string per the protobuf 64-bit integer mapping.
2840
+ *
2841
+ * @generated from field: int64 outstanding_cents = 3;
2842
+ */
2843
+ outstandingCents: bigint;
2844
+ /**
2845
+ * The trust tier the organization's payment history puts it on, which is what
2846
+ * sets the threshold unless an operator or a plan overrides it.
2847
+ *
2848
+ * @generated from field: transcodely.v1.TrustTier tier = 4;
2849
+ */
2850
+ tier: TrustTier;
2851
+ /**
2852
+ * How many statements this organization has PAID. The input behind `tier`,
2853
+ * surfaced so the path to a higher threshold is visible rather than implied.
2854
+ * A mid-cycle settlement counts once it is paid, like any other statement.
2855
+ *
2856
+ * @generated from field: int64 settled_payments = 5;
2857
+ */
2858
+ settledPayments: bigint;
2859
+ /**
2860
+ * The threshold, in cents. Absent when no threshold applies at all — a
2861
+ * long-standing account with no plan ceiling has none, which is the intended
2862
+ * destination of the whole ladder.
2863
+ *
2864
+ * @generated from field: optional int64 threshold_cents = 6;
2865
+ */
2866
+ thresholdCents?: bigint;
2867
+ /**
2868
+ * Which rung supplied `threshold_cents`.
2869
+ *
2870
+ * @generated from field: transcodely.v1.ExposureThresholdSource threshold_source = 7;
2871
+ */
2872
+ thresholdSource: ExposureThresholdSource;
2873
+ /**
2874
+ * The amount at which new-job admission stops: twice `threshold_cents`.
2875
+ * Absent exactly when `threshold_cents` is.
2876
+ *
2877
+ * @generated from field: optional int64 hard_stop_cents = 8;
2878
+ */
2879
+ hardStopCents?: bigint;
2880
+ /**
2881
+ * Whether new jobs are being refused right now. Reads the same numbers the
2882
+ * admission gate reads, so a card showing false cannot coexist with a create
2883
+ * being rejected for this reason.
2884
+ *
2885
+ * @generated from field: bool blocked = 9;
2886
+ */
2887
+ blocked: boolean;
2888
+ /**
2889
+ * `outstanding_cents` as a percentage of `threshold_cents`. Absent when no
2890
+ * threshold applies. Not capped at 100: an organization at 180% is shown 180.
2891
+ *
2892
+ * @generated from field: optional double used_percent = 10;
2893
+ */
2894
+ usedPercent?: number;
2895
+ /**
2896
+ * The percentage steps that send a reminder email, ascending. 80, 100, 125,
2897
+ * 150, 175 and 200 today; the last one is where admission stops.
2898
+ *
2899
+ * @generated from field: repeated int32 alert_steps = 11;
2900
+ */
2901
+ alertSteps: number[];
2902
+ /**
2903
+ * The steps already emailed for the current accrual window, ascending.
2904
+ * Fire-once: a step listed here does not send again until the balance is
2905
+ * settled or the billing period rolls.
2906
+ *
2907
+ * @generated from field: repeated int32 notified_steps = 12;
2908
+ */
2909
+ notifiedSteps: number[];
2910
+ /**
2911
+ * ISO 4217 currency code for every amount here. Always "EUR" today.
2912
+ *
2913
+ * @generated from field: string currency = 13;
2914
+ */
2915
+ currency: string;
2916
+ /**
2917
+ * Whether SettleOutstandingBalance is available on this deployment. False
2918
+ * while the settlement rail is disabled — a billing page should not render a
2919
+ * "pay now" action that can only fail.
2920
+ *
2921
+ * @generated from field: bool settlement_available = 14;
2922
+ */
2923
+ settlementAvailable: boolean;
2924
+ constructor(data?: PartialMessage<OutstandingBalance>);
2925
+ static readonly runtime: typeof proto3;
2926
+ static readonly typeName = "transcodely.v1.OutstandingBalance";
2927
+ static readonly fields: FieldList;
2928
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): OutstandingBalance;
2929
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): OutstandingBalance;
2930
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): OutstandingBalance;
2931
+ static equals(a: OutstandingBalance | PlainMessage<OutstandingBalance> | undefined, b: OutstandingBalance | PlainMessage<OutstandingBalance> | undefined): boolean;
2932
+ }
2933
+ /**
2934
+ * A statement produced by paying an outstanding balance mid-cycle.
2935
+ *
2936
+ * @generated from message transcodely.v1.Settlement
2937
+ */
2938
+ declare class Settlement extends Message<Settlement> {
2939
+ /**
2940
+ * Object type, always "settlement".
2941
+ *
2942
+ * @generated from field: string object = 1;
2943
+ */
2944
+ object: string;
2945
+ /**
2946
+ * The statement the balance was captured onto. It is an ordinary invoice —
2947
+ * readable through GetInvoice, listed by ListInvoices, and paid through the
2948
+ * same provider flow as any other.
2949
+ *
2950
+ * @generated from field: string invoice_id = 2;
2951
+ */
2952
+ invoiceId: string;
2953
+ /**
2954
+ * What it came to, in integer minor units (cents).
2955
+ *
2956
+ * @generated from field: int64 amount_cents = 3;
2957
+ */
2958
+ amountCents: bigint;
2959
+ /**
2960
+ * The window the statement covers, UTC. It starts where the previous
2961
+ * statement ended (or at the period start) and ends at the settlement
2962
+ * instant.
2963
+ *
2964
+ * @generated from field: google.protobuf.Timestamp period_start = 4;
2965
+ */
2966
+ periodStart?: Timestamp;
2967
+ /**
2968
+ * @generated from field: google.protobuf.Timestamp period_end = 5;
2969
+ */
2970
+ periodEnd?: Timestamp;
2971
+ /**
2972
+ * ISO 4217 currency code. Always "EUR" today.
2973
+ *
2974
+ * @generated from field: string currency = 6;
2975
+ */
2976
+ currency: string;
2977
+ constructor(data?: PartialMessage<Settlement>);
2978
+ static readonly runtime: typeof proto3;
2979
+ static readonly typeName = "transcodely.v1.Settlement";
2980
+ static readonly fields: FieldList;
2981
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): Settlement;
2982
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): Settlement;
2983
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): Settlement;
2984
+ static equals(a: Settlement | PlainMessage<Settlement> | undefined, b: Settlement | PlainMessage<Settlement> | undefined): boolean;
2985
+ }
2986
+ /**
2987
+ * Request to list the organization's invoices.
2988
+ *
2989
+ * @generated from message transcodely.v1.ListInvoicesRequest
2990
+ */
2991
+ declare class ListInvoicesRequest extends Message<ListInvoicesRequest> {
2992
+ /**
2993
+ * Pagination parameters.
2994
+ *
2995
+ * @generated from field: transcodely.v1.PaginationRequest pagination = 1;
2996
+ */
2997
+ pagination?: PaginationRequest;
2998
+ constructor(data?: PartialMessage<ListInvoicesRequest>);
2999
+ static readonly runtime: typeof proto3;
3000
+ static readonly typeName = "transcodely.v1.ListInvoicesRequest";
3001
+ static readonly fields: FieldList;
3002
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): ListInvoicesRequest;
3003
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): ListInvoicesRequest;
3004
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): ListInvoicesRequest;
3005
+ static equals(a: ListInvoicesRequest | PlainMessage<ListInvoicesRequest> | undefined, b: ListInvoicesRequest | PlainMessage<ListInvoicesRequest> | undefined): boolean;
3006
+ }
3007
+ /**
3008
+ * Response from listing invoices.
3009
+ *
3010
+ * @generated from message transcodely.v1.ListInvoicesResponse
3011
+ */
3012
+ declare class ListInvoicesResponse extends Message<ListInvoicesResponse> {
3013
+ /**
3014
+ * Invoices, newest period first. Line items are omitted here; fetch a single
3015
+ * invoice to get them.
3016
+ *
3017
+ * @generated from field: repeated transcodely.v1.Invoice invoices = 1;
3018
+ */
3019
+ invoices: Invoice[];
3020
+ /**
3021
+ * Pagination metadata.
3022
+ *
3023
+ * @generated from field: transcodely.v1.PaginationResponse pagination = 2;
3024
+ */
3025
+ pagination?: PaginationResponse;
3026
+ constructor(data?: PartialMessage<ListInvoicesResponse>);
3027
+ static readonly runtime: typeof proto3;
3028
+ static readonly typeName = "transcodely.v1.ListInvoicesResponse";
3029
+ static readonly fields: FieldList;
3030
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): ListInvoicesResponse;
3031
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): ListInvoicesResponse;
3032
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): ListInvoicesResponse;
3033
+ static equals(a: ListInvoicesResponse | PlainMessage<ListInvoicesResponse> | undefined, b: ListInvoicesResponse | PlainMessage<ListInvoicesResponse> | undefined): boolean;
3034
+ }
3035
+ /**
3036
+ * Request to retrieve one invoice.
3037
+ *
3038
+ * @generated from message transcodely.v1.GetInvoiceRequest
3039
+ */
3040
+ declare class GetInvoiceRequest extends Message<GetInvoiceRequest> {
3041
+ /**
3042
+ * Invoice ID (e.g., "inv_a1b2c3d4e5f6").
3043
+ *
3044
+ * @generated from field: string id = 1;
3045
+ */
3046
+ id: string;
3047
+ constructor(data?: PartialMessage<GetInvoiceRequest>);
3048
+ static readonly runtime: typeof proto3;
3049
+ static readonly typeName = "transcodely.v1.GetInvoiceRequest";
3050
+ static readonly fields: FieldList;
3051
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): GetInvoiceRequest;
3052
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): GetInvoiceRequest;
3053
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): GetInvoiceRequest;
3054
+ static equals(a: GetInvoiceRequest | PlainMessage<GetInvoiceRequest> | undefined, b: GetInvoiceRequest | PlainMessage<GetInvoiceRequest> | undefined): boolean;
3055
+ }
3056
+ /**
3057
+ * Response from retrieving an invoice.
3058
+ *
3059
+ * @generated from message transcodely.v1.GetInvoiceResponse
3060
+ */
3061
+ declare class GetInvoiceResponse extends Message<GetInvoiceResponse> {
3062
+ /**
3063
+ * The requested invoice, with its line items.
3064
+ *
3065
+ * @generated from field: transcodely.v1.Invoice invoice = 1;
2377
3066
  */
2378
3067
  invoice?: Invoice;
2379
3068
  constructor(data?: PartialMessage<GetInvoiceResponse>);
@@ -2497,9 +3186,185 @@ declare class CreateBillingPortalSessionResponse extends Message<CreateBillingPo
2497
3186
  static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): CreateBillingPortalSessionResponse;
2498
3187
  static equals(a: CreateBillingPortalSessionResponse | PlainMessage<CreateBillingPortalSessionResponse> | undefined, b: CreateBillingPortalSessionResponse | PlainMessage<CreateBillingPortalSessionResponse> | undefined): boolean;
2499
3188
  }
3189
+ /**
3190
+ * Request to read the organization's monthly budget. The organization is taken
3191
+ * from the X-Organization-ID header.
3192
+ *
3193
+ * @generated from message transcodely.v1.GetBudgetRequest
3194
+ */
3195
+ declare class GetBudgetRequest extends Message<GetBudgetRequest> {
3196
+ constructor(data?: PartialMessage<GetBudgetRequest>);
3197
+ static readonly runtime: typeof proto3;
3198
+ static readonly typeName = "transcodely.v1.GetBudgetRequest";
3199
+ static readonly fields: FieldList;
3200
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): GetBudgetRequest;
3201
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): GetBudgetRequest;
3202
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): GetBudgetRequest;
3203
+ static equals(a: GetBudgetRequest | PlainMessage<GetBudgetRequest> | undefined, b: GetBudgetRequest | PlainMessage<GetBudgetRequest> | undefined): boolean;
3204
+ }
3205
+ /**
3206
+ * Response carrying the budget and the spend it is measured against.
3207
+ *
3208
+ * @generated from message transcodely.v1.GetBudgetResponse
3209
+ */
3210
+ declare class GetBudgetResponse extends Message<GetBudgetResponse> {
3211
+ /**
3212
+ * The budget. Always present: an organization with no budget set gets one
3213
+ * with amount_eur absent and spent_eur still populated, so the current
3214
+ * period's spend can be shown before a budget exists.
3215
+ *
3216
+ * @generated from field: transcodely.v1.Budget budget = 1;
3217
+ */
3218
+ budget?: Budget;
3219
+ constructor(data?: PartialMessage<GetBudgetResponse>);
3220
+ static readonly runtime: typeof proto3;
3221
+ static readonly typeName = "transcodely.v1.GetBudgetResponse";
3222
+ static readonly fields: FieldList;
3223
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): GetBudgetResponse;
3224
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): GetBudgetResponse;
3225
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): GetBudgetResponse;
3226
+ static equals(a: GetBudgetResponse | PlainMessage<GetBudgetResponse> | undefined, b: GetBudgetResponse | PlainMessage<GetBudgetResponse> | undefined): boolean;
3227
+ }
3228
+ /**
3229
+ * Request to set or clear the organization's monthly budget. The organization
3230
+ * is taken from the X-Organization-ID header.
3231
+ *
3232
+ * @generated from message transcodely.v1.UpdateBudgetRequest
3233
+ */
3234
+ declare class UpdateBudgetRequest extends Message<UpdateBudgetRequest> {
3235
+ /**
3236
+ * Monthly budget in EUR. When present, sets the budget (must be > 0). When
3237
+ * ABSENT, the budget is cleared and no further alerts are sent — that is the
3238
+ * only way to turn them off. The upper bound matches the NUMERIC(12,2)
3239
+ * storage column.
3240
+ *
3241
+ * @generated from field: optional double amount_eur = 1;
3242
+ */
3243
+ amountEur?: number;
3244
+ constructor(data?: PartialMessage<UpdateBudgetRequest>);
3245
+ static readonly runtime: typeof proto3;
3246
+ static readonly typeName = "transcodely.v1.UpdateBudgetRequest";
3247
+ static readonly fields: FieldList;
3248
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): UpdateBudgetRequest;
3249
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): UpdateBudgetRequest;
3250
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): UpdateBudgetRequest;
3251
+ static equals(a: UpdateBudgetRequest | PlainMessage<UpdateBudgetRequest> | undefined, b: UpdateBudgetRequest | PlainMessage<UpdateBudgetRequest> | undefined): boolean;
3252
+ }
3253
+ /**
3254
+ * Response from setting or clearing a budget.
3255
+ *
3256
+ * @generated from message transcodely.v1.UpdateBudgetResponse
3257
+ */
3258
+ declare class UpdateBudgetResponse extends Message<UpdateBudgetResponse> {
3259
+ /**
3260
+ * The budget as it now stands, with current-period spend recomputed, so a
3261
+ * caller that just moved the number can render the new bar without a second
3262
+ * request. amount_eur is absent when the budget was cleared.
3263
+ *
3264
+ * @generated from field: transcodely.v1.Budget budget = 1;
3265
+ */
3266
+ budget?: Budget;
3267
+ constructor(data?: PartialMessage<UpdateBudgetResponse>);
3268
+ static readonly runtime: typeof proto3;
3269
+ static readonly typeName = "transcodely.v1.UpdateBudgetResponse";
3270
+ static readonly fields: FieldList;
3271
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): UpdateBudgetResponse;
3272
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): UpdateBudgetResponse;
3273
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): UpdateBudgetResponse;
3274
+ static equals(a: UpdateBudgetResponse | PlainMessage<UpdateBudgetResponse> | undefined, b: UpdateBudgetResponse | PlainMessage<UpdateBudgetResponse> | undefined): boolean;
3275
+ }
3276
+ /**
3277
+ * Request to read the organization's outstanding balance. The organization is
3278
+ * taken from the X-Organization-ID header.
3279
+ *
3280
+ * @generated from message transcodely.v1.GetOutstandingBalanceRequest
3281
+ */
3282
+ declare class GetOutstandingBalanceRequest extends Message<GetOutstandingBalanceRequest> {
3283
+ constructor(data?: PartialMessage<GetOutstandingBalanceRequest>);
3284
+ static readonly runtime: typeof proto3;
3285
+ static readonly typeName = "transcodely.v1.GetOutstandingBalanceRequest";
3286
+ static readonly fields: FieldList;
3287
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): GetOutstandingBalanceRequest;
3288
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): GetOutstandingBalanceRequest;
3289
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): GetOutstandingBalanceRequest;
3290
+ static equals(a: GetOutstandingBalanceRequest | PlainMessage<GetOutstandingBalanceRequest> | undefined, b: GetOutstandingBalanceRequest | PlainMessage<GetOutstandingBalanceRequest> | undefined): boolean;
3291
+ }
3292
+ /**
3293
+ * Response carrying the outstanding balance and its threshold.
3294
+ *
3295
+ * @generated from message transcodely.v1.GetOutstandingBalanceResponse
3296
+ */
3297
+ declare class GetOutstandingBalanceResponse extends Message<GetOutstandingBalanceResponse> {
3298
+ /**
3299
+ * Always present. An organization that owes nothing gets one with
3300
+ * outstanding_cents 0 and its threshold still populated, so a card can show
3301
+ * the headroom before anything has been spent.
3302
+ *
3303
+ * @generated from field: transcodely.v1.OutstandingBalance balance = 1;
3304
+ */
3305
+ balance?: OutstandingBalance;
3306
+ constructor(data?: PartialMessage<GetOutstandingBalanceResponse>);
3307
+ static readonly runtime: typeof proto3;
3308
+ static readonly typeName = "transcodely.v1.GetOutstandingBalanceResponse";
3309
+ static readonly fields: FieldList;
3310
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): GetOutstandingBalanceResponse;
3311
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): GetOutstandingBalanceResponse;
3312
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): GetOutstandingBalanceResponse;
3313
+ static equals(a: GetOutstandingBalanceResponse | PlainMessage<GetOutstandingBalanceResponse> | undefined, b: GetOutstandingBalanceResponse | PlainMessage<GetOutstandingBalanceResponse> | undefined): boolean;
3314
+ }
3315
+ /**
3316
+ * Request to settle the outstanding balance now. The organization is taken from
3317
+ * the X-Organization-ID header.
3318
+ *
3319
+ * It carries no amount ON PURPOSE. The figure is whatever the ledger says at the
3320
+ * instant the settlement runs, and letting a caller name its own number would
3321
+ * let a stale page pay less than is owed and leave the difference looking
3322
+ * settled.
3323
+ *
3324
+ * @generated from message transcodely.v1.SettleOutstandingBalanceRequest
3325
+ */
3326
+ declare class SettleOutstandingBalanceRequest extends Message<SettleOutstandingBalanceRequest> {
3327
+ constructor(data?: PartialMessage<SettleOutstandingBalanceRequest>);
3328
+ static readonly runtime: typeof proto3;
3329
+ static readonly typeName = "transcodely.v1.SettleOutstandingBalanceRequest";
3330
+ static readonly fields: FieldList;
3331
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): SettleOutstandingBalanceRequest;
3332
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): SettleOutstandingBalanceRequest;
3333
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): SettleOutstandingBalanceRequest;
3334
+ static equals(a: SettleOutstandingBalanceRequest | PlainMessage<SettleOutstandingBalanceRequest> | undefined, b: SettleOutstandingBalanceRequest | PlainMessage<SettleOutstandingBalanceRequest> | undefined): boolean;
3335
+ }
3336
+ /**
3337
+ * Response from settling an outstanding balance.
3338
+ *
3339
+ * @generated from message transcodely.v1.SettleOutstandingBalanceResponse
3340
+ */
3341
+ declare class SettleOutstandingBalanceResponse extends Message<SettleOutstandingBalanceResponse> {
3342
+ /**
3343
+ * The statement that was produced.
3344
+ *
3345
+ * @generated from field: transcodely.v1.Settlement settlement = 1;
3346
+ */
3347
+ settlement?: Settlement;
3348
+ /**
3349
+ * The balance as it now stands — zero, with the block lifted and the steps
3350
+ * re-armed — so a caller that just paid can render the new state without a
3351
+ * second request.
3352
+ *
3353
+ * @generated from field: transcodely.v1.OutstandingBalance balance = 2;
3354
+ */
3355
+ balance?: OutstandingBalance;
3356
+ constructor(data?: PartialMessage<SettleOutstandingBalanceResponse>);
3357
+ static readonly runtime: typeof proto3;
3358
+ static readonly typeName = "transcodely.v1.SettleOutstandingBalanceResponse";
3359
+ static readonly fields: FieldList;
3360
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): SettleOutstandingBalanceResponse;
3361
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): SettleOutstandingBalanceResponse;
3362
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): SettleOutstandingBalanceResponse;
3363
+ static equals(a: SettleOutstandingBalanceResponse | PlainMessage<SettleOutstandingBalanceResponse> | undefined, b: SettleOutstandingBalanceResponse | PlainMessage<SettleOutstandingBalanceResponse> | undefined): boolean;
3364
+ }
2500
3365
 
2501
3366
  /**
2502
- * An organization's billing statements — read-only.
3367
+ * An organization's money: statements, budget, and outstanding balance.
2503
3368
  *
2504
3369
  * Unlike every other namespace, billing settles a whole organization rather
2505
3370
  * than a single app, so it is **not** available to API-key callers: a key is
@@ -2518,7 +3383,10 @@ declare class CreateBillingPortalSessionResponse extends Message<CreateBillingPo
2518
3383
  * ```
2519
3384
  *
2520
3385
  * Invoices are generated automatically when a period closes. There is no API to
2521
- * create, edit, or delete one — a statement records what happened.
3386
+ * create, edit, or delete one — a statement records what happened. The two
3387
+ * writes here do not contradict that: {@link updateBudget} moves the customer's
3388
+ * own alert threshold, and {@link settleOutstandingBalance} closes the period
3389
+ * early rather than editing anything already recorded.
2522
3390
  */
2523
3391
  declare class Billing {
2524
3392
  private readonly transport;
@@ -2570,6 +3438,78 @@ declare class Billing {
2570
3438
  * than storing the URL.
2571
3439
  */
2572
3440
  createPortalSession(opts?: CallOptions): Promise<BillingPortalSession>;
3441
+ /**
3442
+ * Retrieve the organization's monthly budget together with the spend it is
3443
+ * measured against — everything a budget card needs, in one call.
3444
+ *
3445
+ * A budget only ever **notifies**: crossing 100% sends an email and changes
3446
+ * nothing else. The hard cap is the per-app spend limit
3447
+ * (`client.apps.setSpendLimit`), which rejects new jobs at 100%.
3448
+ *
3449
+ * Always returns a budget. An organization with none set gets one with
3450
+ * `amountEur` and `usedPercent` absent and `spentEur` still populated, so the
3451
+ * current period's spend renders before a budget exists.
3452
+ */
3453
+ retrieveBudget(opts?: CallOptions): Promise<Budget>;
3454
+ /**
3455
+ * Set or clear the organization's monthly budget. Provide `amountEur` (must
3456
+ * be > 0) to set it; omit it to clear the budget and stop the alert emails.
3457
+ * {@link setBudget} and {@link clearBudget} are the ergonomic shorthands.
3458
+ *
3459
+ * The returned budget has current-period spend recomputed, so a caller that
3460
+ * just moved the number can re-render without a second request.
3461
+ */
3462
+ updateBudget(req?: PartialMessage<UpdateBudgetRequest>, opts?: CallOptions): Promise<Budget>;
3463
+ /**
3464
+ * Set the organization's monthly budget in EUR (must be > 0).
3465
+ *
3466
+ * Alert emails fire once per billing period at each of `budget.alertSteps`
3467
+ * (50%, 80%, 100% today). Raising or lowering the amount mid-period never
3468
+ * re-arms a step already listed in `budget.notifiedSteps`.
3469
+ */
3470
+ setBudget(amountEur: number, opts?: CallOptions): Promise<Budget>;
3471
+ /**
3472
+ * Clear the organization's monthly budget, turning the alert emails off —
3473
+ * omitting the optional amount is the only way to switch them off.
3474
+ */
3475
+ clearBudget(opts?: CallOptions): Promise<Budget>;
3476
+ /**
3477
+ * Retrieve the organization's outstanding balance — usage accrued but not yet
3478
+ * captured onto a statement — together with the threshold it is measured
3479
+ * against.
3480
+ *
3481
+ * Distinct from {@link retrieveUpcoming}, which reports what the **current
3482
+ * period** has accrued: this is what is **unsettled**, so it also carries
3483
+ * anything an earlier period left uncaptured, and it is the number that
3484
+ * decides whether new jobs are admitted.
3485
+ *
3486
+ * Nothing is restricted as it climbs — reminder emails go out at 80%, 100%,
3487
+ * 125%, 150% and 175% and service continues past the threshold on purpose.
3488
+ * Only at `hardStopCents` (twice the threshold) are new jobs refused, with
3489
+ * error code `outstanding_balance_exceeded`; queued and running work still
3490
+ * finishes and playback keeps serving. Branch on `blocked`, which reads the
3491
+ * same numbers the admission gate reads.
3492
+ */
3493
+ retrieveOutstandingBalance(opts?: CallOptions): Promise<OutstandingBalance>;
3494
+ /**
3495
+ * Pay the outstanding balance now, without waiting for the period to end.
3496
+ *
3497
+ * Closes the current period at this instant and produces a real statement —
3498
+ * an ordinary invoice, readable through {@link retrieve} — which the payment
3499
+ * provider then charges. On success the balance is zero and any admission
3500
+ * block is lifted immediately; the response carries the refreshed balance too,
3501
+ * so no follow-up read is needed.
3502
+ *
3503
+ * Takes no amount on purpose: the figure is whatever the ledger says at the
3504
+ * instant it runs, so a stale page cannot underpay and leave the difference
3505
+ * looking settled.
3506
+ *
3507
+ * Throws {@link PreconditionError} with code `settlement_unavailable` when the
3508
+ * deployment has mid-cycle settlement switched off — check
3509
+ * `balance.settlementAvailable` before offering a "pay now" action — and with
3510
+ * `nothing_outstanding` when there is nothing to pay.
3511
+ */
3512
+ settleOutstandingBalance(opts?: CallOptions): Promise<SettleOutstandingBalanceResponse>;
2573
3513
  }
2574
3514
 
2575
3515
  /**
@@ -2944,7 +3884,10 @@ declare class WebhookDelivery extends Message<WebhookDelivery> {
2944
3884
  */
2945
3885
  declare class CreateWebhookEndpointRequest extends Message<CreateWebhookEndpointRequest> {
2946
3886
  /**
2947
- * App to create the endpoint for.
3887
+ * App to create the endpoint for. API-key callers may omit it (their key's
3888
+ * app is used) or pass their own app; a different app is rejected with
3889
+ * PermissionDenied. Portal/JWT callers pass it to create in a specific app in
3890
+ * their org; omitted selects the org's first active app.
2948
3891
  *
2949
3892
  * @generated from field: string app_id = 1;
2950
3893
  */
@@ -3173,7 +4116,10 @@ declare class DeleteWebhookEndpointResponse extends Message<DeleteWebhookEndpoin
3173
4116
  */
3174
4117
  declare class ListWebhookEndpointsRequest extends Message<ListWebhookEndpointsRequest> {
3175
4118
  /**
3176
- * App to list endpoints for.
4119
+ * Optional app filter. API-key callers may omit it (their key's app is used)
4120
+ * or pass their own app; a different app is rejected with PermissionDenied.
4121
+ * Portal/JWT callers pass it to list a specific app in their org; omitted
4122
+ * returns endpoints across all apps in the org.
3177
4123
  *
3178
4124
  * @generated from field: string app_id = 1;
3179
4125
  */
@@ -3283,7 +4229,10 @@ declare class RotateWebhookSecretResponse extends Message<RotateWebhookSecretRes
3283
4229
  */
3284
4230
  declare class ListEventsRequest extends Message<ListEventsRequest> {
3285
4231
  /**
3286
- * App to list events for.
4232
+ * Optional app filter. API-key callers may omit it (their key's app is used)
4233
+ * or pass their own app; a different app is rejected with PermissionDenied.
4234
+ * Portal/JWT callers pass it to list a specific app in their org; omitted
4235
+ * returns events across all apps in the org.
3287
4236
  *
3288
4237
  * @generated from field: string app_id = 1;
3289
4238
  */
@@ -4688,6 +5637,11 @@ declare class StreamingConfig extends Message<StreamingConfig> {
4688
5637
  * Example: "video_{resolution}" produces "video_1080p.m3u8"
4689
5638
  * Default: "{codec}_{resolution}" produces "h264_1080p.m3u8"
4690
5639
  *
5640
+ * The rendered value becomes a filename and is also carried through the
5641
+ * packager's stream descriptors, so the accepted charset is deliberately
5642
+ * narrow: letters, digits, `_`, `-`, `.` and the `{}` that delimit template
5643
+ * variables. No path separators, no `..`, and none of `, : ; ' " \`.
5644
+ *
4691
5645
  * @generated from field: optional string hls_variant_pattern = 12;
4692
5646
  */
4693
5647
  hlsVariantPattern?: string;
@@ -4779,6 +5733,12 @@ declare class BurnInStyle extends Message<BurnInStyle> {
4779
5733
  /**
4780
5734
  * Font family name. Default: "Arial".
4781
5735
  *
5736
+ * Letters, digits, spaces, `_` and `-` only. The value is embedded in the
5737
+ * renderer's style string, where a quote, comma or semicolon would terminate
5738
+ * it and let whatever follows parse as further styling arguments.
5739
+ *
5740
+ * Example: "DejaVu Sans"
5741
+ *
4782
5742
  * @generated from field: optional string font_family = 1;
4783
5743
  */
4784
5744
  fontFamily?: string;
@@ -5330,10 +6290,11 @@ declare class DRMConfig extends Message<DRMConfig> {
5330
6290
  /**
5331
6291
  * Content-aware encoding mode.
5332
6292
  *
5333
- * NOT YET SUPPORTED. The worker pipeline does not yet act on content-aware
5334
- * encoding, so any output carrying a ContentAwareConfig is rejected at CreateJob
5335
- * with error code `parameter_unsupported` (see issue #167). The enum values are
5336
- * retained for wire compatibility and will become active when the feature ships.
6293
+ * One of the two modes ships: `per_title` is accepted and acted on. `auto_abr`
6294
+ * is still rejected at CreateJob with error code `parameter_unsupported` and
6295
+ * the message "auto_abr is not available yet; per_title is" (issue #167),
6296
+ * because it would change the NUMBER of renditions after the job was already
6297
+ * quoted per rendition at create time.
5337
6298
  *
5338
6299
  * @generated from enum transcodely.v1.ContentAwareMode
5339
6300
  */
@@ -5343,15 +6304,18 @@ declare enum ContentAwareMode {
5343
6304
  */
5344
6305
  UNSPECIFIED = 0,
5345
6306
  /**
5346
- * Optimize CRF for target VMAF on specific content. NOT YET SUPPORTED —
5347
- * rejected at create.
6307
+ * Find the CRF this source needs to reach the VMAF target, and encode the
6308
+ * declared ladder at it. The search runs once per output, on the ladder's
6309
+ * highest-resolution quality-driven rendition; the lower rungs move by the
6310
+ * CRF offsets the ladder already declares. Priced at 1.5x. What the search
6311
+ * decided comes back on OutputReport.content_aware.
5348
6312
  *
5349
6313
  * @generated from enum value: CONTENT_AWARE_MODE_PER_TITLE = 1;
5350
6314
  */
5351
6315
  PER_TITLE = 1,
5352
6316
  /**
5353
- * Generate optimal bitrate ladder automatically. NOT YET SUPPORTED —
5354
- * rejected at create.
6317
+ * Generate the bitrate ladder automatically. NOT YET ACCEPTED — rejected at
6318
+ * create.
5355
6319
  *
5356
6320
  * @generated from enum value: CONTENT_AWARE_MODE_AUTO_ABR = 2;
5357
6321
  */
@@ -5360,9 +6324,9 @@ declare enum ContentAwareMode {
5360
6324
  /**
5361
6325
  * Auto ABR ladder generation constraints.
5362
6326
  *
5363
- * NOT YET SUPPORTED — see ContentAwareConfig. These constraints are validated
5364
- * for shape but never applied, because a request carrying content_aware is
5365
- * rejected at create.
6327
+ * NOT YET ACCEPTED — see ContentAwareConfig. These constraints are validated
6328
+ * for shape but never applied, because a request in auto_abr mode is rejected
6329
+ * at create.
5366
6330
  *
5367
6331
  * @generated from message transcodely.v1.AutoABRConfig
5368
6332
  */
@@ -5405,35 +6369,51 @@ declare class AutoABRConfig extends Message<AutoABRConfig> {
5405
6369
  /**
5406
6370
  * Content-aware encoding configuration for an output.
5407
6371
  *
5408
- * NOT YET SUPPORTED. Setting content_aware on any output causes CreateJob to
5409
- * fail with error code `parameter_unsupported` and the message "content-aware
5410
- * encoding (per_title/auto_abr) is not yet supported". The worker does not yet
5411
- * implement per-title CRF optimization or auto-ABR ladder generation — both
5412
- * modes would run the identical plain-encode path — so the API rejects the
5413
- * request rather than silently no-op it while charging the content-aware
5414
- * multiplier (issue #167 / transcodely/worker#90). The message and fields are
5415
- * retained for wire compatibility and forward-planning.
6372
+ * In `per_title` mode the encode is tuned to this particular source: the worker
6373
+ * measures short samples of it at several CRFs and encodes the declared ladder
6374
+ * at the cheapest one that reaches the VMAF target. The ladder itself is
6375
+ * unchanged — same renditions, same resolutions — so the price quoted at create
6376
+ * still holds, with the 1.5x per-title multiplier applied.
6377
+ *
6378
+ * Three requests are refused at create:
6379
+ * - `auto_abr` mode (`parameter_unsupported`) — not available yet;
6380
+ * - an output with no video renditions, or one whose every video rendition is
6381
+ * pinned to an explicit bitrate (`parameter_incompatible`) — a pinned
6382
+ * rendition ignores CRF, so the search would change nothing while still
6383
+ * being billed;
6384
+ * - a source shorter than 120 seconds, refused at probe with
6385
+ * `per_title_source_too_short` once the input has been measured.
6386
+ *
6387
+ * What the search decided is reported back on OutputReport.content_aware.
5416
6388
  *
5417
6389
  * @generated from message transcodely.v1.ContentAwareConfig
5418
6390
  */
5419
6391
  declare class ContentAwareConfig extends Message<ContentAwareConfig> {
5420
6392
  /**
5421
- * Encoding mode (required). NOT YET SUPPORTED — any value here causes the
5422
- * request to be rejected at create.
6393
+ * Encoding mode (required). `per_title` is accepted; `auto_abr` is rejected
6394
+ * at create.
5423
6395
  *
5424
6396
  * @generated from field: transcodely.v1.ContentAwareMode mode = 1;
5425
6397
  */
5426
6398
  mode: ContentAwareMode;
5427
6399
  /**
5428
- * Override VMAF target (70-99). NOT YET SUPPORTED — content-aware encoding is
5429
- * rejected at create, so this value is never applied.
6400
+ * Override VMAF target (80-97). Default: 93, regardless of quality tier.
6401
+ *
6402
+ * The range is the one the per-title search can actually work in, narrowed
6403
+ * from 70-99 before the feature was ever accepted: below 80 the result is not
6404
+ * a quality target anyone would ask for, and above 97 the search cannot
6405
+ * distinguish the last point from the one below it. Asking for a number we
6406
+ * would silently move is worse than refusing it.
6407
+ *
6408
+ * The value the analysis actually searched against is reported back on
6409
+ * OutputReport.content_aware.vmaf_target, which is the one to read.
5430
6410
  *
5431
6411
  * @generated from field: optional double vmaf_target = 2;
5432
6412
  */
5433
6413
  vmafTarget?: number;
5434
6414
  /**
5435
- * Auto ABR constraints (only for auto_abr mode). NOT YET SUPPORTED — rejected
5436
- * at create.
6415
+ * Auto ABR constraints (only for auto_abr mode). NOT YET ACCEPTED — an
6416
+ * auto_abr request is rejected at create whatever these say.
5437
6417
  *
5438
6418
  * @generated from field: optional transcodely.v1.AutoABRConfig auto_abr = 3;
5439
6419
  */
@@ -5450,9 +6430,10 @@ declare class ContentAwareConfig extends Message<ContentAwareConfig> {
5450
6430
  /**
5451
6431
  * Content analysis results from extended probe.
5452
6432
  *
5453
- * NOT YET POPULATED. Produced only when content-aware analysis is wired in the
5454
- * worker; today no job carries it, because content_aware requests are rejected
5455
- * at create (see ContentAwareConfig).
6433
+ * NOT YET POPULATED, and not carried by any RPC. The worker measures these
6434
+ * complexity scores but has nowhere to send them: the API stores the per-title
6435
+ * SEARCH RESULT (see OutputReportContentAware) and not the source scores behind
6436
+ * it. Retained for wire compatibility.
5456
6437
  *
5457
6438
  * @generated from message transcodely.v1.ContentAnalysis
5458
6439
  */
@@ -7651,6 +8632,11 @@ declare class HLSConfig extends Message<HLSConfig> {
7651
8632
  * Variables: {codec}, {resolution}, {bitrate}, {index}
7652
8633
  * Default: "{codec}_{resolution}"
7653
8634
  *
8635
+ * The rendered value becomes a filename and is also carried through the
8636
+ * packager's stream descriptors, so the accepted charset is deliberately
8637
+ * narrow: letters, digits, `_`, `-`, `.` and the `{}` that delimit template
8638
+ * variables. No path separators, no `..`, and none of `, : ; ' " \`.
8639
+ *
7654
8640
  * @generated from field: optional string variant_pattern = 4;
7655
8641
  */
7656
8642
  variantPattern?: string;
@@ -7820,7 +8806,10 @@ declare class OutputSpec extends Message<OutputSpec> {
7820
8806
  drm?: DRMConfig;
7821
8807
  /**
7822
8808
  * Content-aware encoding configuration.
7823
- * Enables per-title encoding or automatic ABR ladder generation.
8809
+ * Enables per-title encoding, which tunes this output's CRF to the source
8810
+ * rather than to its quality tier. Requires at least one video rendition that
8811
+ * is not pinned to an explicit bitrate, and a source of at least 120 seconds.
8812
+ * `auto_abr` mode is not accepted yet.
7824
8813
  *
7825
8814
  * @generated from field: optional transcodely.v1.ContentAwareConfig content_aware = 13;
7826
8815
  */
@@ -8275,6 +9264,18 @@ declare class JobOutput extends Message<JobOutput> {
8275
9264
  * @generated from field: optional string signed_url = 26;
8276
9265
  */
8277
9266
  signedUrl?: string;
9267
+ /**
9268
+ * What the produced file actually is, measured from the file itself, plus
9269
+ * the verdict of comparing those measurements against what this output
9270
+ * asked for. See OutputReport.
9271
+ *
9272
+ * Absent until the output has been measured: outputs that never produced a
9273
+ * file, and outputs produced before this field existed, carry no report.
9274
+ * Absence means "not measured" — never "nothing wrong".
9275
+ *
9276
+ * @generated from field: optional transcodely.v1.OutputReport report = 27;
9277
+ */
9278
+ report?: OutputReport;
8278
9279
  constructor(data?: PartialMessage<JobOutput>);
8279
9280
  static readonly runtime: typeof proto3;
8280
9281
  static readonly typeName = "transcodely.v1.JobOutput";
@@ -8284,6 +9285,440 @@ declare class JobOutput extends Message<JobOutput> {
8284
9285
  static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): JobOutput;
8285
9286
  static equals(a: JobOutput | PlainMessage<JobOutput> | undefined, b: JobOutput | PlainMessage<JobOutput> | undefined): boolean;
8286
9287
  }
9288
+ /**
9289
+ * OutputReport is what the produced file turned out to be: codec, profile,
9290
+ * pixel format, color signaling, dimensions, frame rate, audio and duration,
9291
+ * all read back from the encoded file after it was written — not copied from
9292
+ * the request and not inherited from the input. The one field that is not a
9293
+ * measurement is container, which states the delivery format (see below).
9294
+ *
9295
+ * Alongside the facts sits a verdict: whether the file matches what the job
9296
+ * asked for, and the exact field-by-field differences where it does not. The
9297
+ * facts are measured by the encoder host; the verdict is computed by the API,
9298
+ * so the same request always produces the same verdict.
9299
+ *
9300
+ * For a single-file output the facts describe that file. For a multi-rendition
9301
+ * output (an ABR ladder, HLS, DASH, adaptive) they describe the
9302
+ * HIGHEST-RESOLUTION rendition — the same one width, height and
9303
+ * average_bitrate_kbps already report, and the one the verdict is judged
9304
+ * against. Per-rendition detail stays in variant_results.
9305
+ *
9306
+ * Every value here is a parsed, named fact. The report never carries encoder
9307
+ * command lines, tool output, stack traces, log lines or storage paths, and
9308
+ * values that do not look like the short identifiers media tools emit are
9309
+ * dropped rather than passed through.
9310
+ *
9311
+ * The string-typed fields (container, codec, profile, level, pix_fmt, the
9312
+ * color fields, hdr_format) are deliberately strings and not enums: their
9313
+ * vocabularies belong to the media formats themselves, and a value we have not
9314
+ * catalogued yet must be reportable the day it appears rather than wait for a
9315
+ * new enum value to travel through every SDK. They are always lowercase, and
9316
+ * the documented spellings below are the ones you will see in practice.
9317
+ *
9318
+ * @generated from message transcodely.v1.OutputReport
9319
+ */
9320
+ declare class OutputReport extends Message<OutputReport> {
9321
+ /**
9322
+ * Delivery format of this output, lowercase: "mp4", "mov", "webm", "mkv",
9323
+ * "hls", "dash" or "adaptive" — the same vocabulary as the request's
9324
+ * OutputSpec.type, and what a container mismatch is stated in.
9325
+ *
9326
+ * It names what was DELIVERED, not what a demuxer called an intermediate
9327
+ * file: for a streaming output the delivered thing is the manifest and its
9328
+ * segments, while the measurements in the fields below were taken on the
9329
+ * encoded rendition before it was packaged.
9330
+ *
9331
+ * That makes this the one field the verdict cannot really police — a report
9332
+ * echoing the requested type always matches. The check that a file is in the
9333
+ * container it was promised runs on the encoder host, before delivery, and
9334
+ * fails the output outright rather than describing it. This field is here so
9335
+ * the report is self-describing, not as that check's second opinion.
9336
+ *
9337
+ * @generated from field: string container = 1;
9338
+ */
9339
+ container: string;
9340
+ /**
9341
+ * The produced video stream. Absent when the file carries no video stream.
9342
+ *
9343
+ * @generated from field: optional transcodely.v1.OutputReportVideo video = 2;
9344
+ */
9345
+ video?: OutputReportVideo;
9346
+ /**
9347
+ * The produced audio streams, in the order the container carries them.
9348
+ * Empty for an output encoded without audio.
9349
+ *
9350
+ * @generated from field: repeated transcodely.v1.OutputReportAudio audio = 3;
9351
+ */
9352
+ audio: OutputReportAudio[];
9353
+ /**
9354
+ * Measured playback duration of the produced file in seconds.
9355
+ *
9356
+ * This is read from the produced file. It is not the input's duration and
9357
+ * not the requested length, which is exactly what makes it able to catch an
9358
+ * encode that stopped early.
9359
+ *
9360
+ * @generated from field: optional double duration_seconds = 4;
9361
+ */
9362
+ durationSeconds?: number;
9363
+ /**
9364
+ * Whether the produced file matches what this output asked for, and where it
9365
+ * does not. Always present on a report.
9366
+ *
9367
+ * @generated from field: transcodely.v1.OutputReportVerdict verdict = 5;
9368
+ */
9369
+ verdict?: OutputReportVerdict;
9370
+ /**
9371
+ * When the produced file was measured.
9372
+ *
9373
+ * @generated from field: google.protobuf.Timestamp checked_at = 6;
9374
+ */
9375
+ checkedAt?: Timestamp;
9376
+ /**
9377
+ * What the content-aware analysis decided for this output, when the output
9378
+ * was encoded with per-title analysis.
9379
+ *
9380
+ * Present ONLY for an output whose encode ran that analysis. Absent on every
9381
+ * ordinary output, which is the overwhelming majority of them, and absent on
9382
+ * an output that requested content-aware encoding but whose analysis pass
9383
+ * never reported (it fell back to the quality tier's own CRF).
9384
+ *
9385
+ * @generated from field: optional transcodely.v1.OutputReportContentAware content_aware = 7;
9386
+ */
9387
+ contentAware?: OutputReportContentAware;
9388
+ constructor(data?: PartialMessage<OutputReport>);
9389
+ static readonly runtime: typeof proto3;
9390
+ static readonly typeName = "transcodely.v1.OutputReport";
9391
+ static readonly fields: FieldList;
9392
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): OutputReport;
9393
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): OutputReport;
9394
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): OutputReport;
9395
+ static equals(a: OutputReport | PlainMessage<OutputReport> | undefined, b: OutputReport | PlainMessage<OutputReport> | undefined): boolean;
9396
+ }
9397
+ /**
9398
+ * What the content-aware analysis decided for one output: the quality it aimed
9399
+ * at, the quality it reached on its samples, and the encoder setting it chose.
9400
+ *
9401
+ * These describe the SEARCH, not the finished file. The search runs on short
9402
+ * samples taken from the source before the real encode starts, so
9403
+ * vmaf_achieved is the score those samples got at the chosen setting — not a
9404
+ * measurement of the delivered output, which is never scored. The facts about
9405
+ * the delivered file are the other fields of OutputReport.
9406
+ *
9407
+ * The fields are strings and numbers for the same reason the rest of the report
9408
+ * is: this records what an encoder did, and a value we have not catalogued must
9409
+ * be reportable the day it appears.
9410
+ *
9411
+ * @generated from message transcodely.v1.OutputReportContentAware
9412
+ */
9413
+ declare class OutputReportContentAware extends Message<OutputReportContentAware> {
9414
+ /**
9415
+ * Analysis mode that ran, lowercase: "per_title". Same vocabulary as the
9416
+ * request's ContentAwareMode.
9417
+ *
9418
+ * @generated from field: string mode = 1;
9419
+ */
9420
+ mode: string;
9421
+ /**
9422
+ * VMAF score the search aimed at, 0-100.
9423
+ *
9424
+ * This is the target actually used, which is not always the one requested:
9425
+ * a value outside the range the analysis can search is clamped into it, and
9426
+ * what you read here is the clamped one.
9427
+ *
9428
+ * @generated from field: optional double vmaf_target = 2;
9429
+ */
9430
+ vmafTarget?: number;
9431
+ /**
9432
+ * VMAF score the chosen setting reached on the analysis samples, 0-100.
9433
+ * Absent when the search ended without a scored result.
9434
+ *
9435
+ * @generated from field: optional double vmaf_achieved = 3;
9436
+ */
9437
+ vmafAchieved?: number;
9438
+ /**
9439
+ * Constant-rate-factor the search settled on, in the encoder's own scale
9440
+ * (lower is higher quality). Absent when the search produced none and the
9441
+ * encode fell back to the quality tier's default.
9442
+ *
9443
+ * For a multi-rendition output this is the highest-resolution rendition's
9444
+ * value; the lower rungs derive from it by the ladder's fixed offsets.
9445
+ *
9446
+ * @generated from field: optional int32 crf_chosen = 4;
9447
+ */
9448
+ crfChosen?: number;
9449
+ constructor(data?: PartialMessage<OutputReportContentAware>);
9450
+ static readonly runtime: typeof proto3;
9451
+ static readonly typeName = "transcodely.v1.OutputReportContentAware";
9452
+ static readonly fields: FieldList;
9453
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): OutputReportContentAware;
9454
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): OutputReportContentAware;
9455
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): OutputReportContentAware;
9456
+ static equals(a: OutputReportContentAware | PlainMessage<OutputReportContentAware> | undefined, b: OutputReportContentAware | PlainMessage<OutputReportContentAware> | undefined): boolean;
9457
+ }
9458
+ /**
9459
+ * Measured properties of a produced video stream.
9460
+ *
9461
+ * @generated from message transcodely.v1.OutputReportVideo
9462
+ */
9463
+ declare class OutputReportVideo extends Message<OutputReportVideo> {
9464
+ /**
9465
+ * Codec the stream is encoded with, lowercase, e.g. "h264", "hevc", "vp9",
9466
+ * "av1". Note "hevc" — that is the decoder name for the codec this API calls
9467
+ * "h265" on a request.
9468
+ *
9469
+ * @generated from field: string codec = 1;
9470
+ */
9471
+ codec: string;
9472
+ /**
9473
+ * Encoded profile, lowercase and without spaces, e.g. "high", "main",
9474
+ * "main10", "baseline", "profile0". Absent when the codec has no profile
9475
+ * concept or the encoder reported none.
9476
+ *
9477
+ * @generated from field: optional string profile = 2;
9478
+ */
9479
+ profile?: string;
9480
+ /**
9481
+ * Encoded level as the codec expresses it, e.g. "4.0", "5.1". Absent when
9482
+ * not reported.
9483
+ *
9484
+ * @generated from field: optional string level = 3;
9485
+ */
9486
+ level?: string;
9487
+ /**
9488
+ * Pixel format, lowercase, e.g. "yuv420p" (8-bit) or "yuv420p10le"
9489
+ * (10-bit). This is how bit depth is read back: a 10-bit output that came
9490
+ * out 8-bit says so here.
9491
+ *
9492
+ * @generated from field: optional string pix_fmt = 4;
9493
+ */
9494
+ pixFmt?: string;
9495
+ /**
9496
+ * Encoded frame dimensions in pixels, as stored.
9497
+ *
9498
+ * @generated from field: int32 width = 5;
9499
+ */
9500
+ width: number;
9501
+ /**
9502
+ * @generated from field: int32 height = 6;
9503
+ */
9504
+ height: number;
9505
+ /**
9506
+ * Measured average frame rate in frames per second, e.g. 29.97, 30, 59.94.
9507
+ *
9508
+ * @generated from field: optional double frame_rate = 7;
9509
+ */
9510
+ frameRate?: number;
9511
+ /**
9512
+ * Measured video bitrate in kbps. Absent when the container does not carry a
9513
+ * per-stream bitrate.
9514
+ *
9515
+ * @generated from field: optional int32 bitrate_kbps = 8;
9516
+ */
9517
+ bitrateKbps?: number;
9518
+ /**
9519
+ * Color signaling carried by the stream.
9520
+ *
9521
+ * @generated from field: optional transcodely.v1.OutputReportColor color = 9;
9522
+ */
9523
+ color?: OutputReportColor;
9524
+ /**
9525
+ * HDR format the stream signals. Today this resolves to exactly one of
9526
+ * "none", "hdr10" or "hlg" — nothing else is ever emitted.
9527
+ *
9528
+ * It is derived from the color signaling above, so it is a reading of the
9529
+ * file and not an echo of the request: an SDR source that arrived wearing HDR
9530
+ * tags, and whose tags we rewrote, reports "none". Wide-gamut primaries with
9531
+ * a PQ transfer read as "hdr10"; with an HLG transfer, as "hlg".
9532
+ *
9533
+ * "hdr10_plus" and "dolby_vision" are RESERVED spellings — documented so
9534
+ * consumers can switch on them ahead of time, and NOT EMITTED. Telling HDR10+
9535
+ * from static HDR10, or finding a Dolby Vision RPU, needs the per-frame side
9536
+ * data this report does not carry. Until that lands, an HDR10+ or Dolby
9537
+ * Vision output reads as "hdr10" here, which is the static layer it also
9538
+ * genuinely signals. Do not read "hdr10" as proof the dynamic layer is
9539
+ * absent.
9540
+ *
9541
+ * @generated from field: string hdr_format = 10;
9542
+ */
9543
+ hdrFormat: string;
9544
+ constructor(data?: PartialMessage<OutputReportVideo>);
9545
+ static readonly runtime: typeof proto3;
9546
+ static readonly typeName = "transcodely.v1.OutputReportVideo";
9547
+ static readonly fields: FieldList;
9548
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): OutputReportVideo;
9549
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): OutputReportVideo;
9550
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): OutputReportVideo;
9551
+ static equals(a: OutputReportVideo | PlainMessage<OutputReportVideo> | undefined, b: OutputReportVideo | PlainMessage<OutputReportVideo> | undefined): boolean;
9552
+ }
9553
+ /**
9554
+ * Color signaling read from a produced video stream. Each value is the
9555
+ * lowercase name the format assigns it; absent means the stream carries no
9556
+ * value for it.
9557
+ *
9558
+ * @generated from message transcodely.v1.OutputReportColor
9559
+ */
9560
+ declare class OutputReportColor extends Message<OutputReportColor> {
9561
+ /**
9562
+ * Color primaries, e.g. "bt709" (SDR), "bt2020" (wide gamut).
9563
+ *
9564
+ * @generated from field: optional string primaries = 1;
9565
+ */
9566
+ primaries?: string;
9567
+ /**
9568
+ * Transfer characteristics, e.g. "bt709" (SDR), "smpte2084" (PQ / HDR10),
9569
+ * "arib-std-b67" (HLG).
9570
+ *
9571
+ * @generated from field: optional string transfer = 2;
9572
+ */
9573
+ transfer?: string;
9574
+ /**
9575
+ * Matrix coefficients, e.g. "bt709", "bt2020nc".
9576
+ *
9577
+ * @generated from field: optional string matrix = 3;
9578
+ */
9579
+ matrix?: string;
9580
+ /**
9581
+ * Signal range: "tv" (limited) or "pc" (full).
9582
+ *
9583
+ * @generated from field: optional string range = 4;
9584
+ */
9585
+ range?: string;
9586
+ constructor(data?: PartialMessage<OutputReportColor>);
9587
+ static readonly runtime: typeof proto3;
9588
+ static readonly typeName = "transcodely.v1.OutputReportColor";
9589
+ static readonly fields: FieldList;
9590
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): OutputReportColor;
9591
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): OutputReportColor;
9592
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): OutputReportColor;
9593
+ static equals(a: OutputReportColor | PlainMessage<OutputReportColor> | undefined, b: OutputReportColor | PlainMessage<OutputReportColor> | undefined): boolean;
9594
+ }
9595
+ /**
9596
+ * Measured properties of a produced audio stream.
9597
+ *
9598
+ * @generated from message transcodely.v1.OutputReportAudio
9599
+ */
9600
+ declare class OutputReportAudio extends Message<OutputReportAudio> {
9601
+ /**
9602
+ * Codec the stream is encoded with, lowercase, e.g. "aac", "opus", "mp3",
9603
+ * "flac".
9604
+ *
9605
+ * @generated from field: string codec = 1;
9606
+ */
9607
+ codec: string;
9608
+ /**
9609
+ * Channel count: 1 for mono, 2 for stereo, 6 for 5.1.
9610
+ *
9611
+ * @generated from field: optional int32 channels = 2;
9612
+ */
9613
+ channels?: number;
9614
+ /**
9615
+ * Sampling rate in hertz, e.g. 48000.
9616
+ *
9617
+ * @generated from field: optional int32 sample_rate_hz = 3;
9618
+ */
9619
+ sampleRateHz?: number;
9620
+ /**
9621
+ * Measured audio bitrate in kbps. Absent when the container does not carry
9622
+ * a per-stream bitrate.
9623
+ *
9624
+ * @generated from field: optional int32 bitrate_kbps = 4;
9625
+ */
9626
+ bitrateKbps?: number;
9627
+ /**
9628
+ * Language tag carried by the stream, e.g. "eng", "spa". Absent when the
9629
+ * stream is untagged.
9630
+ *
9631
+ * @generated from field: optional string language = 5;
9632
+ */
9633
+ language?: string;
9634
+ constructor(data?: PartialMessage<OutputReportAudio>);
9635
+ static readonly runtime: typeof proto3;
9636
+ static readonly typeName = "transcodely.v1.OutputReportAudio";
9637
+ static readonly fields: FieldList;
9638
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): OutputReportAudio;
9639
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): OutputReportAudio;
9640
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): OutputReportAudio;
9641
+ static equals(a: OutputReportAudio | PlainMessage<OutputReportAudio> | undefined, b: OutputReportAudio | PlainMessage<OutputReportAudio> | undefined): boolean;
9642
+ }
9643
+ /**
9644
+ * The result of comparing a produced file against what the job asked for.
9645
+ *
9646
+ * @generated from message transcodely.v1.OutputReportVerdict
9647
+ */
9648
+ declare class OutputReportVerdict extends Message<OutputReportVerdict> {
9649
+ /**
9650
+ * True when every property we can check matched the request.
9651
+ *
9652
+ * Properties the request left open — "keep the original frame rate", a
9653
+ * container that does not pin its audio codec — are not checked and cannot
9654
+ * make this false.
9655
+ *
9656
+ * @generated from field: bool matches_request = 1;
9657
+ */
9658
+ matchesRequest: boolean;
9659
+ /**
9660
+ * Every property that did not match, one entry each. Empty when
9661
+ * matches_request is true; a mismatch list is never empty when it is false.
9662
+ *
9663
+ * @generated from field: repeated transcodely.v1.OutputReportMismatch mismatches = 2;
9664
+ */
9665
+ mismatches: OutputReportMismatch[];
9666
+ constructor(data?: PartialMessage<OutputReportVerdict>);
9667
+ static readonly runtime: typeof proto3;
9668
+ static readonly typeName = "transcodely.v1.OutputReportVerdict";
9669
+ static readonly fields: FieldList;
9670
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): OutputReportVerdict;
9671
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): OutputReportVerdict;
9672
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): OutputReportVerdict;
9673
+ static equals(a: OutputReportVerdict | PlainMessage<OutputReportVerdict> | undefined, b: OutputReportVerdict | PlainMessage<OutputReportVerdict> | undefined): boolean;
9674
+ }
9675
+ /**
9676
+ * One property of the produced file that does not match what was requested.
9677
+ *
9678
+ * @generated from message transcodely.v1.OutputReportMismatch
9679
+ */
9680
+ declare class OutputReportMismatch extends Message<OutputReportMismatch> {
9681
+ /**
9682
+ * Which property differs, from a fixed vocabulary: "container",
9683
+ * "video.present", "video.codec", "video.profile", "video.pix_fmt",
9684
+ * "video.resolution", "video.width", "video.height", "video.frame_rate",
9685
+ * "video.color.transfer", "video.color.primaries", "audio.present",
9686
+ * "duration_seconds".
9687
+ *
9688
+ * "video.resolution" carries resolution tier names ("1080p") and appears
9689
+ * when the request named a tier; "video.width" / "video.height" carry pixel
9690
+ * counts and appear when the request named exact dimensions.
9691
+ *
9692
+ * Branch on this, not on the values beside it.
9693
+ *
9694
+ * @generated from field: string field = 1;
9695
+ */
9696
+ field: string;
9697
+ /**
9698
+ * What the request asked for, as a short value, e.g. "h264", "1920",
9699
+ * "high", "present". Where the request allows several answers — a
9700
+ * multi-codec ABR ladder, for instance — this is the alternatives joined
9701
+ * with "|", e.g. "h264|hevc".
9702
+ *
9703
+ * @generated from field: string expected = 2;
9704
+ */
9705
+ expected: string;
9706
+ /**
9707
+ * What the produced file carries instead, in the same vocabulary as
9708
+ * expected, e.g. "hevc", "1280", "main", "absent".
9709
+ *
9710
+ * @generated from field: string actual = 3;
9711
+ */
9712
+ actual: string;
9713
+ constructor(data?: PartialMessage<OutputReportMismatch>);
9714
+ static readonly runtime: typeof proto3;
9715
+ static readonly typeName = "transcodely.v1.OutputReportMismatch";
9716
+ static readonly fields: FieldList;
9717
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): OutputReportMismatch;
9718
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): OutputReportMismatch;
9719
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): OutputReportMismatch;
9720
+ static equals(a: OutputReportMismatch | PlainMessage<OutputReportMismatch> | undefined, b: OutputReportMismatch | PlainMessage<OutputReportMismatch> | undefined): boolean;
9721
+ }
8287
9722
  /**
8288
9723
  * Measured encode results for one variant of a multi-variant output.
8289
9724
  * Reported by the worker after encoding; index matches the variant's
@@ -9265,8 +10700,16 @@ declare class CreateJobRequest extends Message<CreateJobRequest> {
9265
10700
  */
9266
10701
  outputPathTemplate?: string;
9267
10702
  /**
9268
- * Write outputs to managed hosting storage and create a video record.
9269
- * When true, output_origin_id is not required.
10703
+ * Write outputs to Transcodely-managed storage and create a hosted video
10704
+ * record, playable over our CDN. When true, output_origin_id is not required.
10705
+ *
10706
+ * Managed hosting is enabled for the app the first time a job asks for it —
10707
+ * there is no dashboard step and no AppService.EnableHosting call to make
10708
+ * first. That first request provisions the app's storage bucket, its managed
10709
+ * origin and its CDN pull zone, so it can take a few seconds longer than the
10710
+ * ones after it. If provisioning fails the request is rejected with error
10711
+ * code `hosting_provisioning_failed` (gRPC `unavailable`) and no job is
10712
+ * created; the request is safe to retry unchanged.
9270
10713
  *
9271
10714
  * @generated from field: optional bool managed = 20;
9272
10715
  */
@@ -9846,6 +11289,18 @@ declare class Video extends Message<Video> {
9846
11289
  */
9847
11290
  outputSizeBytes: bigint;
9848
11291
  /**
11292
+ * Total billed by the transcode job that produced this video, in EUR.
11293
+ *
11294
+ * Despite the name this is the job's WHOLE total, not encoding alone: a
11295
+ * job's total already includes every fee billed on it, so for a video
11296
+ * captioned inline (the auto_captions upload flag) the captions fee is part
11297
+ * of this number, as is the flat per-job processing fee. Absent until the
11298
+ * job settles.
11299
+ *
11300
+ * Prefer total_cost. This field covers one job, so it misses the cost of
11301
+ * later jobs run against the video, and adding captions_cost to it
11302
+ * double-counts inline captions.
11303
+ *
9849
11304
  * @generated from field: optional double encoding_cost = 31;
9850
11305
  */
9851
11306
  encodingCost?: number;
@@ -9857,11 +11312,35 @@ declare class Video extends Message<Video> {
9857
11312
  * confirmed only when a caption artifact is actually delivered, so voided
9858
11313
  * and still-estimated fees are never counted. This is a per-feature
9859
11314
  * breakdown of already-billed job totals, not an extra charge on top of
9860
- * them.
11315
+ * them: it is contained in total_cost, never added to it.
9861
11316
  *
9862
11317
  * @generated from field: optional double captions_cost = 50;
9863
11318
  */
9864
11319
  captionsCost?: number;
11320
+ /**
11321
+ * Everything this video has cost, in EUR: the sum of the settled totals of
11322
+ * every job billed for it — the transcode that produced it plus any later
11323
+ * job that took it as input (retro captions, for example).
11324
+ *
11325
+ * This is the authoritative per-video figure and the one to display. It is
11326
+ * built from the same job totals the billing ledger is written from, so it
11327
+ * reconciles with the invoice; captions_cost is a breakdown inside it.
11328
+ * Absent while no linked job has settled yet.
11329
+ *
11330
+ * @generated from field: optional double total_cost = 52;
11331
+ */
11332
+ totalCost?: number;
11333
+ /**
11334
+ * Why this video failed, in one sentence a customer can act on. Present only
11335
+ * when status is "error"; absent for every other status.
11336
+ *
11337
+ * This is curated copy, never raw failure text — it will not contain
11338
+ * encoder output, storage-provider responses, or internal identifiers. When
11339
+ * the video has a linked job, that job's error_message says the same thing.
11340
+ *
11341
+ * @generated from field: optional string error_message = 51;
11342
+ */
11343
+ errorMessage?: string;
9865
11344
  /**
9866
11345
  * Timestamps.
9867
11346
  *
@@ -10062,12 +11541,25 @@ declare class VideoTextTrack extends Message<VideoTextTrack> {
10062
11541
  /**
10063
11542
  * Request to create a presigned upload URL for direct client upload.
10064
11543
  *
11544
+ * Managed hosting is enabled for the app the first time a video is created —
11545
+ * there is no dashboard step and no AppService.EnableHosting call to make
11546
+ * first. That first request provisions the app's storage bucket, its managed
11547
+ * origin and its CDN pull zone, so it can take a few seconds longer than the
11548
+ * ones after it. If provisioning fails the request is rejected with error code
11549
+ * `hosting_provisioning_failed` (gRPC `unavailable`) and no video is created;
11550
+ * the request is safe to retry unchanged.
11551
+ *
10065
11552
  * @generated from message transcodely.v1.CreateUploadRequest
10066
11553
  */
10067
11554
  declare class CreateUploadRequest extends Message<CreateUploadRequest> {
10068
11555
  /**
10069
- * App to create the video under. Required. The app must have managed hosting
10070
- * enabled (AppService.EnableHosting) or the call fails with FailedPrecondition.
11556
+ * App to create the video under. API-key callers may omit it (their key's app
11557
+ * is used) or pass their own app; a different app is rejected with
11558
+ * PermissionDenied. Portal/JWT callers pass it to create in a specific app in
11559
+ * their org; omitted selects the org's first active app.
11560
+ *
11561
+ * Managed hosting does not have to be enabled on it first — see the note on
11562
+ * this message; the call enables it.
10071
11563
  *
10072
11564
  * @generated from field: string app_id = 8;
10073
11565
  */
@@ -10109,7 +11601,11 @@ declare class CreateUploadRequest extends Message<CreateUploadRequest> {
10109
11601
  */
10110
11602
  tags: string[];
10111
11603
  /**
10112
- * Visibility setting. Defaults to "unlisted" if not specified.
11604
+ * Visibility setting: "public", "unlisted" or "private".
11605
+ *
11606
+ * When omitted (or sent as an empty string), the app's hosting
11607
+ * default_visibility applies; if the app has no default_visibility set
11608
+ * either, the video is created "unlisted".
10113
11609
  *
10114
11610
  * @generated from field: optional string visibility = 7;
10115
11611
  */
@@ -10233,12 +11729,25 @@ declare class CompleteUploadResponse extends Message<CompleteUploadResponse> {
10233
11729
  /**
10234
11730
  * Request to create a hosted video from a remote URL (one-call ingest).
10235
11731
  *
11732
+ * Managed hosting is enabled for the app the first time a video is created —
11733
+ * there is no dashboard step and no AppService.EnableHosting call to make
11734
+ * first. That first request provisions the app's storage bucket, its managed
11735
+ * origin and its CDN pull zone, so it can take a few seconds longer than the
11736
+ * ones after it. If provisioning fails the request is rejected with error code
11737
+ * `hosting_provisioning_failed` (gRPC `unavailable`) and no video is created;
11738
+ * the request is safe to retry unchanged.
11739
+ *
10236
11740
  * @generated from message transcodely.v1.CreateFromUrlRequest
10237
11741
  */
10238
11742
  declare class CreateFromUrlRequest extends Message<CreateFromUrlRequest> {
10239
11743
  /**
10240
- * App to create the video under. Required. The app must have managed hosting
10241
- * enabled (AppService.EnableHosting) or the call fails with FailedPrecondition.
11744
+ * App to create the video under. API-key callers may omit it (their key's app
11745
+ * is used) or pass their own app; a different app is rejected with
11746
+ * PermissionDenied. Portal/JWT callers pass it to create in a specific app in
11747
+ * their org; omitted selects the org's first active app.
11748
+ *
11749
+ * Managed hosting does not have to be enabled on it first — see the note on
11750
+ * this message; the call enables it.
10242
11751
  *
10243
11752
  * @generated from field: string app_id = 1;
10244
11753
  */
@@ -10272,7 +11781,11 @@ declare class CreateFromUrlRequest extends Message<CreateFromUrlRequest> {
10272
11781
  */
10273
11782
  tags: string[];
10274
11783
  /**
10275
- * Visibility setting. Defaults to "unlisted" if not specified.
11784
+ * Visibility setting: "public", "unlisted" or "private".
11785
+ *
11786
+ * When omitted (or sent as an empty string), the app's hosting
11787
+ * default_visibility applies; if the app has no default_visibility set
11788
+ * either, the video is created "unlisted".
10276
11789
  *
10277
11790
  * @generated from field: optional string visibility = 6;
10278
11791
  */
@@ -10396,12 +11909,25 @@ declare class CompletedPart extends Message<CompletedPart> {
10396
11909
  /**
10397
11910
  * Request to create a multipart upload for large files.
10398
11911
  *
11912
+ * Managed hosting is enabled for the app the first time a video is created —
11913
+ * there is no dashboard step and no AppService.EnableHosting call to make
11914
+ * first. That first request provisions the app's storage bucket, its managed
11915
+ * origin and its CDN pull zone, so it can take a few seconds longer than the
11916
+ * ones after it. If provisioning fails the request is rejected with error code
11917
+ * `hosting_provisioning_failed` (gRPC `unavailable`) and no video is created;
11918
+ * the request is safe to retry unchanged.
11919
+ *
10399
11920
  * @generated from message transcodely.v1.CreateMultipartUploadRequest
10400
11921
  */
10401
11922
  declare class CreateMultipartUploadRequest extends Message<CreateMultipartUploadRequest> {
10402
11923
  /**
10403
- * App to create the video under. Required. The app must have managed hosting
10404
- * enabled (AppService.EnableHosting) or the call fails with FailedPrecondition.
11924
+ * App to create the video under. API-key callers may omit it (their key's app
11925
+ * is used) or pass their own app; a different app is rejected with
11926
+ * PermissionDenied. Portal/JWT callers pass it to create in a specific app in
11927
+ * their org; omitted selects the org's first active app.
11928
+ *
11929
+ * Managed hosting does not have to be enabled on it first — see the note on
11930
+ * this message; the call enables it.
10405
11931
  *
10406
11932
  * @generated from field: string app_id = 1;
10407
11933
  */
@@ -10457,7 +11983,11 @@ declare class CreateMultipartUploadRequest extends Message<CreateMultipartUpload
10457
11983
  */
10458
11984
  tags: string[];
10459
11985
  /**
10460
- * Visibility setting. Defaults to "unlisted" if not specified.
11986
+ * Visibility setting: "public", "unlisted" or "private".
11987
+ *
11988
+ * When omitted (or sent as an empty string), the app's hosting
11989
+ * default_visibility applies; if the app has no default_visibility set
11990
+ * either, the video is created "unlisted".
10461
11991
  *
10462
11992
  * @generated from field: optional string visibility = 13;
10463
11993
  */
@@ -11618,106 +13148,1120 @@ declare class Events {
11618
13148
  } & CallOptions): Promise<WebhookDelivery[]>;
11619
13149
  }
11620
13150
 
13151
+ declare class Health {
13152
+ private readonly transport;
13153
+ constructor(transport: Transport);
13154
+ check(opts?: CallOptions): Promise<HealthCheckResponse>;
13155
+ }
13156
+
11621
13157
  /**
11622
- * Health status.
13158
+ * Which provider shape an inbound event arrived in. Detected from the payload;
13159
+ * you never declare it.
11623
13160
  *
11624
- * @generated from enum transcodely.v1.HealthStatus
13161
+ * @generated from enum transcodely.v1.StorageEventSource
11625
13162
  */
11626
- declare enum HealthStatus {
13163
+ declare enum StorageEventSource {
11627
13164
  /**
11628
- * @generated from enum value: HEALTH_STATUS_UNSPECIFIED = 0;
13165
+ * @generated from enum value: STORAGE_EVENT_SOURCE_UNSPECIFIED = 0;
13166
+ */
13167
+ UNSPECIFIED = 0,
13168
+ /**
13169
+ * Amazon S3 event notification delivered through an SNS HTTPS subscription.
13170
+ *
13171
+ * @generated from enum value: STORAGE_EVENT_SOURCE_S3_SNS = 1;
13172
+ */
13173
+ S3_SNS = 1,
13174
+ /**
13175
+ * Google Cloud Storage notification delivered by a Pub/Sub push
13176
+ * subscription.
13177
+ *
13178
+ * @generated from enum value: STORAGE_EVENT_SOURCE_GCS_PUBSUB = 2;
13179
+ */
13180
+ GCS_PUBSUB = 2,
13181
+ /**
13182
+ * Supabase Storage, delivered by a database webhook on storage.objects.
13183
+ *
13184
+ * @generated from enum value: STORAGE_EVENT_SOURCE_SUPABASE = 3;
13185
+ */
13186
+ SUPABASE = 3,
13187
+ /**
13188
+ * The generic shape: {"bucket", "key", "etag", "size", "content_type"}.
13189
+ * Used by the Cloudflare R2 queue-consumer template and anything you write
13190
+ * yourself.
13191
+ *
13192
+ * @generated from enum value: STORAGE_EVENT_SOURCE_GENERIC = 4;
13193
+ */
13194
+ GENERIC = 4
13195
+ }
13196
+ /**
13197
+ * What happened to a storage event.
13198
+ *
13199
+ * @generated from enum transcodely.v1.StorageEventStatus
13200
+ */
13201
+ declare enum StorageEventStatus {
13202
+ /**
13203
+ * @generated from enum value: STORAGE_EVENT_STATUS_UNSPECIFIED = 0;
13204
+ */
13205
+ UNSPECIFIED = 0,
13206
+ /**
13207
+ * Accepted and stored; not processed yet.
13208
+ *
13209
+ * @generated from enum value: STORAGE_EVENT_STATUS_RECEIVED = 1;
13210
+ */
13211
+ RECEIVED = 1,
13212
+ /**
13213
+ * Matched the rule's filters; the job is being created.
13214
+ *
13215
+ * @generated from enum value: STORAGE_EVENT_STATUS_MATCHED = 2;
13216
+ */
13217
+ MATCHED = 2,
13218
+ /**
13219
+ * Deliberately not turned into a job. `reason` says why — the filters did
13220
+ * not match, the object is in a different bucket than the rule's origin, the
13221
+ * rule is disabled, or the same object was already ingested.
13222
+ *
13223
+ * @generated from enum value: STORAGE_EVENT_STATUS_SKIPPED = 3;
13224
+ */
13225
+ SKIPPED = 3,
13226
+ /**
13227
+ * A job was created. `job_id` names it.
13228
+ *
13229
+ * @generated from enum value: STORAGE_EVENT_STATUS_CREATED = 4;
13230
+ */
13231
+ CREATED = 4,
13232
+ /**
13233
+ * Job creation was refused and will not be retried. `reason` carries the API
13234
+ * error code that refused it, e.g. `limit_exceeded` or `billing_past_due`.
13235
+ *
13236
+ * @generated from enum value: STORAGE_EVENT_STATUS_FAILED = 5;
13237
+ */
13238
+ FAILED = 5
13239
+ }
13240
+ /**
13241
+ * IngestRule is one standing instruction on one origin.
13242
+ *
13243
+ * @generated from message transcodely.v1.IngestRule
13244
+ */
13245
+ declare class IngestRule extends Message<IngestRule> {
13246
+ /**
13247
+ * Rule ID, e.g. "ing_a1b2c3d4e5f6".
13248
+ *
13249
+ * @generated from field: string id = 1;
13250
+ */
13251
+ id: string;
13252
+ /**
13253
+ * App that owns the rule.
13254
+ *
13255
+ * @generated from field: string app_id = 2;
13256
+ */
13257
+ appId: string;
13258
+ /**
13259
+ * Origin the objects live in. Must have read permission.
13260
+ *
13261
+ * @generated from field: string origin_id = 3;
13262
+ */
13263
+ originId: string;
13264
+ /**
13265
+ * Human-readable name.
13266
+ *
13267
+ * @generated from field: string name = 4;
13268
+ */
13269
+ name: string;
13270
+ /**
13271
+ * Whether the endpoint accepts events. A disabled rule answers 202 and
13272
+ * records the event as skipped, so a provider subscription does not start
13273
+ * failing while the rule is paused.
13274
+ *
13275
+ * @generated from field: bool enabled = 5;
13276
+ */
13277
+ enabled: boolean;
13278
+ /**
13279
+ * Which objects this rule acts on. An empty filter set matches everything in
13280
+ * the origin's bucket.
13281
+ *
13282
+ * @generated from field: transcodely.v1.IngestRuleFilters filters = 6;
13283
+ */
13284
+ filters?: IngestRuleFilters;
13285
+ /**
13286
+ * The job to create for a matching object.
13287
+ *
13288
+ * @generated from field: transcodely.v1.IngestRuleAction action = 7;
13289
+ */
13290
+ action?: IngestRuleAction;
13291
+ /**
13292
+ * Where the event sender posts. Computed; read-only.
13293
+ *
13294
+ * @generated from field: string endpoint_url = 8;
13295
+ */
13296
+ endpointUrl: string;
13297
+ /**
13298
+ * First 8 characters of the inbound secret, e.g. "ings_a1b". Enough to tell
13299
+ * two secrets apart in a log; never enough to use one.
13300
+ *
13301
+ * @generated from field: string secret_prefix = 9;
13302
+ */
13303
+ secretPrefix: string;
13304
+ /**
13305
+ * Last 4 characters of the inbound secret.
13306
+ *
13307
+ * @generated from field: string secret_hint = 10;
13308
+ */
13309
+ secretHint: string;
13310
+ /**
13311
+ * When the secret was last rotated. Absent if it has never been rotated.
13312
+ *
13313
+ * @generated from field: optional google.protobuf.Timestamp secret_rotated_at = 11;
13314
+ */
13315
+ secretRotatedAt?: Timestamp;
13316
+ /**
13317
+ * Until when the PREVIOUS secret is still accepted after a rotation, so the
13318
+ * sender can be updated without dropping an event. Absent when no rotation is
13319
+ * in flight.
13320
+ *
13321
+ * @generated from field: optional google.protobuf.Timestamp previous_secret_expires_at = 12;
13322
+ */
13323
+ previousSecretExpiresAt?: Timestamp;
13324
+ /**
13325
+ * How many events this rule has accepted, all time.
13326
+ *
13327
+ * @generated from field: int64 events_received = 13;
13328
+ */
13329
+ eventsReceived: bigint;
13330
+ /**
13331
+ * How many jobs this rule has created, all time.
13332
+ *
13333
+ * @generated from field: int64 jobs_created = 14;
13334
+ */
13335
+ jobsCreated: bigint;
13336
+ /**
13337
+ * When the last event arrived.
13338
+ *
13339
+ * @generated from field: optional google.protobuf.Timestamp last_event_at = 15;
13340
+ */
13341
+ lastEventAt?: Timestamp;
13342
+ /**
13343
+ * When the rule was created.
13344
+ *
13345
+ * @generated from field: google.protobuf.Timestamp created_at = 16;
13346
+ */
13347
+ createdAt?: Timestamp;
13348
+ /**
13349
+ * When the rule was last updated.
13350
+ *
13351
+ * @generated from field: google.protobuf.Timestamp updated_at = 17;
13352
+ */
13353
+ updatedAt?: Timestamp;
13354
+ constructor(data?: PartialMessage<IngestRule>);
13355
+ static readonly runtime: typeof proto3;
13356
+ static readonly typeName = "transcodely.v1.IngestRule";
13357
+ static readonly fields: FieldList;
13358
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): IngestRule;
13359
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): IngestRule;
13360
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): IngestRule;
13361
+ static equals(a: IngestRule | PlainMessage<IngestRule> | undefined, b: IngestRule | PlainMessage<IngestRule> | undefined): boolean;
13362
+ }
13363
+ /**
13364
+ * IngestRuleFilters narrows which objects a rule acts on. All set filters must
13365
+ * pass. An object that fails any of them is recorded as skipped, never as an
13366
+ * error.
13367
+ *
13368
+ * @generated from message transcodely.v1.IngestRuleFilters
13369
+ */
13370
+ declare class IngestRuleFilters extends Message<IngestRuleFilters> {
13371
+ /**
13372
+ * Object key prefix, e.g. "uploads/". Matched against the key as the
13373
+ * provider reports it, after URL-decoding.
13374
+ *
13375
+ * @generated from field: string prefix = 1;
13376
+ */
13377
+ prefix: string;
13378
+ /**
13379
+ * Case-insensitive key suffixes, e.g. [".mp4", ".mov"]. The object matches
13380
+ * if it ends with any one of them. Empty accepts every extension.
13381
+ *
13382
+ * @generated from field: repeated string suffixes = 2;
13383
+ */
13384
+ suffixes: string[];
13385
+ /**
13386
+ * Exact content types, e.g. ["video/mp4"]. The object matches if the event
13387
+ * reports any one of them. Empty accepts every content type — including an
13388
+ * event that reports none, which several providers do.
13389
+ *
13390
+ * @generated from field: repeated string content_types = 3;
13391
+ */
13392
+ contentTypes: string[];
13393
+ /**
13394
+ * Smallest object size to act on, in bytes. 0 means no lower bound. Useful
13395
+ * for ignoring the zero-byte placeholder some clients write first.
13396
+ *
13397
+ * @generated from field: int64 min_bytes = 4;
13398
+ */
13399
+ minBytes: bigint;
13400
+ /**
13401
+ * Largest object size to act on, in bytes. 0 means no upper bound.
13402
+ *
13403
+ * @generated from field: int64 max_bytes = 5;
13404
+ */
13405
+ maxBytes: bigint;
13406
+ constructor(data?: PartialMessage<IngestRuleFilters>);
13407
+ static readonly runtime: typeof proto3;
13408
+ static readonly typeName = "transcodely.v1.IngestRuleFilters";
13409
+ static readonly fields: FieldList;
13410
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): IngestRuleFilters;
13411
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): IngestRuleFilters;
13412
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): IngestRuleFilters;
13413
+ static equals(a: IngestRuleFilters | PlainMessage<IngestRuleFilters> | undefined, b: IngestRuleFilters | PlainMessage<IngestRuleFilters> | undefined): boolean;
13414
+ }
13415
+ /**
13416
+ * IngestRuleAction is the job a rule creates. It is the subset of
13417
+ * CreateJobRequest that can be decided ahead of time; the input is supplied by
13418
+ * the event (the rule's origin, and the key the event names).
13419
+ *
13420
+ * @generated from message transcodely.v1.IngestRuleAction
13421
+ */
13422
+ declare class IngestRuleAction extends Message<IngestRuleAction> {
13423
+ /**
13424
+ * Output specifications, exactly as CreateJobRequest.outputs. Presets may be
13425
+ * referenced by ID or slug.
13426
+ *
13427
+ * A rule always has at least one, enforced on the requests that can leave it
13428
+ * without one (`create_ingest_rule.outputs_required` and
13429
+ * `update_ingest_rule.clear_action_is_complete`) rather than on this field —
13430
+ * an Update that changes only the priority sends no outputs at all, and a
13431
+ * min_items here would refuse it.
13432
+ *
13433
+ * @generated from field: repeated transcodely.v1.OutputSpec outputs = 1;
13434
+ */
13435
+ outputs: OutputSpec[];
13436
+ /**
13437
+ * Write outputs to Transcodely-managed storage and create a hosted video,
13438
+ * playable over our CDN. Set this or output_origin_id, not both.
13439
+ *
13440
+ * @generated from field: bool managed = 2;
13441
+ */
13442
+ managed: boolean;
13443
+ /**
13444
+ * Origin to write outputs to. Must have write permission. Set this or
13445
+ * managed, not both.
13446
+ *
13447
+ * @generated from field: optional string output_origin_id = 3;
13448
+ */
13449
+ outputOriginId?: string;
13450
+ /**
13451
+ * Job-level output path template, as CreateJobRequest.output_path_template.
13452
+ * In addition to the job variables it accepts {input_key}, {input_name} (the
13453
+ * key's last segment without its extension) and {input_dir} (everything
13454
+ * before the last segment), so outputs can mirror the source layout.
13455
+ *
13456
+ * @generated from field: optional string output_path_template = 4;
13457
+ */
13458
+ outputPathTemplate?: string;
13459
+ /**
13460
+ * Thumbnail specifications, as CreateJobRequest.thumbnails.
13461
+ *
13462
+ * @generated from field: repeated transcodely.v1.ThumbnailSpec thumbnails = 5;
13463
+ */
13464
+ thumbnails: ThumbnailSpec[];
13465
+ /**
13466
+ * Job priority.
13467
+ *
13468
+ * @generated from field: transcodely.v1.JobPriority priority = 6;
13469
+ */
13470
+ priority: JobPriority;
13471
+ /**
13472
+ * Metadata copied onto every job the rule creates. The rule also adds
13473
+ * `ingest_rule_id` and `ingest_object_key` of its own, which you can read
13474
+ * back on the job and in webhook payloads.
13475
+ *
13476
+ * @generated from field: map<string, string> metadata = 7;
13477
+ */
13478
+ metadata: {
13479
+ [key: string]: string;
13480
+ };
13481
+ constructor(data?: PartialMessage<IngestRuleAction>);
13482
+ static readonly runtime: typeof proto3;
13483
+ static readonly typeName = "transcodely.v1.IngestRuleAction";
13484
+ static readonly fields: FieldList;
13485
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): IngestRuleAction;
13486
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): IngestRuleAction;
13487
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): IngestRuleAction;
13488
+ static equals(a: IngestRuleAction | PlainMessage<IngestRuleAction> | undefined, b: IngestRuleAction | PlainMessage<IngestRuleAction> | undefined): boolean;
13489
+ }
13490
+ /**
13491
+ * StorageEvent is one delivery from a storage provider, and what came of it.
13492
+ *
13493
+ * @generated from message transcodely.v1.StorageEvent
13494
+ */
13495
+ declare class StorageEvent extends Message<StorageEvent> {
13496
+ /**
13497
+ * Event ID, e.g. "sev_a1b2c3d4e5f6g7".
13498
+ *
13499
+ * @generated from field: string id = 1;
13500
+ */
13501
+ id: string;
13502
+ /**
13503
+ * Rule that received it.
13504
+ *
13505
+ * @generated from field: string rule_id = 2;
13506
+ */
13507
+ ruleId: string;
13508
+ /**
13509
+ * App that owns the rule.
13510
+ *
13511
+ * @generated from field: string app_id = 3;
13512
+ */
13513
+ appId: string;
13514
+ /**
13515
+ * Bucket the object is in, as the provider reported it.
13516
+ *
13517
+ * @generated from field: string bucket = 4;
13518
+ */
13519
+ bucket: string;
13520
+ /**
13521
+ * Object key, URL-decoded. S3 percent-encodes keys and writes a space as
13522
+ * "+"; what is stored here is the real key.
13523
+ *
13524
+ * @generated from field: string object_key = 5;
13525
+ */
13526
+ objectKey: string;
13527
+ /**
13528
+ * Object version identity, used for deduplication: an S3/R2 eTag, a GCS
13529
+ * generation, or a Supabase metadata eTag. Empty when the provider sent
13530
+ * none — the key alone then identifies the object.
13531
+ *
13532
+ * @generated from field: string etag = 6;
13533
+ */
13534
+ etag: string;
13535
+ /**
13536
+ * Object size in bytes, when the event reported one.
13537
+ *
13538
+ * @generated from field: int64 size_bytes = 7;
13539
+ */
13540
+ sizeBytes: bigint;
13541
+ /**
13542
+ * Content type, when the event reported one.
13543
+ *
13544
+ * @generated from field: string content_type = 8;
13545
+ */
13546
+ contentType: string;
13547
+ /**
13548
+ * Which provider shape the event arrived in.
13549
+ *
13550
+ * @generated from field: transcodely.v1.StorageEventSource source = 9;
13551
+ */
13552
+ source: StorageEventSource;
13553
+ /**
13554
+ * What happened to it.
13555
+ *
13556
+ * @generated from field: transcodely.v1.StorageEventStatus status = 10;
13557
+ */
13558
+ status: StorageEventStatus;
13559
+ /**
13560
+ * Why, for `skipped` and `failed`. A short machine-readable slug:
13561
+ * "filter_prefix", "filter_suffix", "filter_content_type", "filter_size",
13562
+ * "bucket_mismatch", "rule_disabled", "duplicate", or the API error code
13563
+ * that refused the job.
13564
+ *
13565
+ * @generated from field: string reason = 11;
13566
+ */
13567
+ reason: string;
13568
+ /**
13569
+ * The job created from this event, if one was.
13570
+ *
13571
+ * @generated from field: string job_id = 12;
13572
+ */
13573
+ jobId: string;
13574
+ /**
13575
+ * When the event was accepted.
13576
+ *
13577
+ * @generated from field: google.protobuf.Timestamp received_at = 13;
13578
+ */
13579
+ receivedAt?: Timestamp;
13580
+ /**
13581
+ * When the event reached a terminal status.
13582
+ *
13583
+ * @generated from field: optional google.protobuf.Timestamp processed_at = 14;
13584
+ */
13585
+ processedAt?: Timestamp;
13586
+ constructor(data?: PartialMessage<StorageEvent>);
13587
+ static readonly runtime: typeof proto3;
13588
+ static readonly typeName = "transcodely.v1.StorageEvent";
13589
+ static readonly fields: FieldList;
13590
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): StorageEvent;
13591
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): StorageEvent;
13592
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): StorageEvent;
13593
+ static equals(a: StorageEvent | PlainMessage<StorageEvent> | undefined, b: StorageEvent | PlainMessage<StorageEvent> | undefined): boolean;
13594
+ }
13595
+ /**
13596
+ * Request to create an ingest rule.
13597
+ *
13598
+ * @generated from message transcodely.v1.CreateIngestRuleRequest
13599
+ */
13600
+ declare class CreateIngestRuleRequest extends Message<CreateIngestRuleRequest> {
13601
+ /**
13602
+ * Origin the objects land in. Must be active and have read permission.
13603
+ *
13604
+ * @generated from field: string origin_id = 1;
13605
+ */
13606
+ originId: string;
13607
+ /**
13608
+ * Human-readable name.
13609
+ *
13610
+ * @generated from field: string name = 2;
13611
+ */
13612
+ name: string;
13613
+ /**
13614
+ * Which objects to act on. Omit to act on everything in the bucket.
13615
+ *
13616
+ * @generated from field: transcodely.v1.IngestRuleFilters filters = 3;
13617
+ */
13618
+ filters?: IngestRuleFilters;
13619
+ /**
13620
+ * The job to create for a matching object.
13621
+ *
13622
+ * @generated from field: transcodely.v1.IngestRuleAction action = 4;
13623
+ */
13624
+ action?: IngestRuleAction;
13625
+ /**
13626
+ * Whether the rule starts enabled. Defaults to true; send false to create it
13627
+ * paused and turn it on once the sender is configured.
13628
+ *
13629
+ * @generated from field: optional bool enabled = 5;
13630
+ */
13631
+ enabled?: boolean;
13632
+ /**
13633
+ * Optional target app. API-key callers may omit it (their key's app is used)
13634
+ * or pass their own app; a different app is rejected with PermissionDenied.
13635
+ * Portal/JWT callers pass it to create in a specific app in their org;
13636
+ * omitted selects the org's first active app.
13637
+ *
13638
+ * @generated from field: optional string app_id = 6;
13639
+ */
13640
+ appId?: string;
13641
+ constructor(data?: PartialMessage<CreateIngestRuleRequest>);
13642
+ static readonly runtime: typeof proto3;
13643
+ static readonly typeName = "transcodely.v1.CreateIngestRuleRequest";
13644
+ static readonly fields: FieldList;
13645
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): CreateIngestRuleRequest;
13646
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): CreateIngestRuleRequest;
13647
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): CreateIngestRuleRequest;
13648
+ static equals(a: CreateIngestRuleRequest | PlainMessage<CreateIngestRuleRequest> | undefined, b: CreateIngestRuleRequest | PlainMessage<CreateIngestRuleRequest> | undefined): boolean;
13649
+ }
13650
+ /**
13651
+ * Response from creating an ingest rule.
13652
+ *
13653
+ * @generated from message transcodely.v1.CreateIngestRuleResponse
13654
+ */
13655
+ declare class CreateIngestRuleResponse extends Message<CreateIngestRuleResponse> {
13656
+ /**
13657
+ * The created rule.
13658
+ *
13659
+ * @generated from field: transcodely.v1.IngestRule rule = 1;
13660
+ */
13661
+ rule?: IngestRule;
13662
+ /**
13663
+ * The inbound secret, in full. Returned ONCE, here. We keep only enough of
13664
+ * it to verify a delivery and to show you its first and last characters, so
13665
+ * this value cannot be recovered later — rotate the rule to get a new one.
13666
+ *
13667
+ * @generated from field: string secret = 2;
13668
+ */
13669
+ secret: string;
13670
+ constructor(data?: PartialMessage<CreateIngestRuleResponse>);
13671
+ static readonly runtime: typeof proto3;
13672
+ static readonly typeName = "transcodely.v1.CreateIngestRuleResponse";
13673
+ static readonly fields: FieldList;
13674
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): CreateIngestRuleResponse;
13675
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): CreateIngestRuleResponse;
13676
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): CreateIngestRuleResponse;
13677
+ static equals(a: CreateIngestRuleResponse | PlainMessage<CreateIngestRuleResponse> | undefined, b: CreateIngestRuleResponse | PlainMessage<CreateIngestRuleResponse> | undefined): boolean;
13678
+ }
13679
+ /**
13680
+ * Request to get an ingest rule.
13681
+ *
13682
+ * @generated from message transcodely.v1.GetIngestRuleRequest
13683
+ */
13684
+ declare class GetIngestRuleRequest extends Message<GetIngestRuleRequest> {
13685
+ /**
13686
+ * ID of the rule.
13687
+ *
13688
+ * @generated from field: string id = 1;
13689
+ */
13690
+ id: string;
13691
+ constructor(data?: PartialMessage<GetIngestRuleRequest>);
13692
+ static readonly runtime: typeof proto3;
13693
+ static readonly typeName = "transcodely.v1.GetIngestRuleRequest";
13694
+ static readonly fields: FieldList;
13695
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): GetIngestRuleRequest;
13696
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): GetIngestRuleRequest;
13697
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): GetIngestRuleRequest;
13698
+ static equals(a: GetIngestRuleRequest | PlainMessage<GetIngestRuleRequest> | undefined, b: GetIngestRuleRequest | PlainMessage<GetIngestRuleRequest> | undefined): boolean;
13699
+ }
13700
+ /**
13701
+ * Response from getting an ingest rule.
13702
+ *
13703
+ * @generated from message transcodely.v1.GetIngestRuleResponse
13704
+ */
13705
+ declare class GetIngestRuleResponse extends Message<GetIngestRuleResponse> {
13706
+ /**
13707
+ * The requested rule.
13708
+ *
13709
+ * @generated from field: transcodely.v1.IngestRule rule = 1;
13710
+ */
13711
+ rule?: IngestRule;
13712
+ constructor(data?: PartialMessage<GetIngestRuleResponse>);
13713
+ static readonly runtime: typeof proto3;
13714
+ static readonly typeName = "transcodely.v1.GetIngestRuleResponse";
13715
+ static readonly fields: FieldList;
13716
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): GetIngestRuleResponse;
13717
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): GetIngestRuleResponse;
13718
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): GetIngestRuleResponse;
13719
+ static equals(a: GetIngestRuleResponse | PlainMessage<GetIngestRuleResponse> | undefined, b: GetIngestRuleResponse | PlainMessage<GetIngestRuleResponse> | undefined): boolean;
13720
+ }
13721
+ /**
13722
+ * Request to list ingest rules.
13723
+ *
13724
+ * @generated from message transcodely.v1.ListIngestRulesRequest
13725
+ */
13726
+ declare class ListIngestRulesRequest extends Message<ListIngestRulesRequest> {
13727
+ /**
13728
+ * Only rules on this origin.
13729
+ *
13730
+ * @generated from field: optional string origin_id = 1;
13731
+ */
13732
+ originId?: string;
13733
+ /**
13734
+ * Only enabled, or only disabled, rules.
13735
+ *
13736
+ * @generated from field: optional bool enabled = 2;
13737
+ */
13738
+ enabled?: boolean;
13739
+ /**
13740
+ * Pagination parameters.
13741
+ *
13742
+ * @generated from field: transcodely.v1.PaginationRequest pagination = 3;
13743
+ */
13744
+ pagination?: PaginationRequest;
13745
+ /**
13746
+ * Optional app filter. API-key callers may omit it (their key's app is used)
13747
+ * or pass their own app; a different app is rejected with PermissionDenied.
13748
+ * Portal/JWT callers pass it to list a specific app in their org; omitted
13749
+ * returns rules across all apps in the org.
13750
+ *
13751
+ * @generated from field: optional string app_id = 4;
13752
+ */
13753
+ appId?: string;
13754
+ constructor(data?: PartialMessage<ListIngestRulesRequest>);
13755
+ static readonly runtime: typeof proto3;
13756
+ static readonly typeName = "transcodely.v1.ListIngestRulesRequest";
13757
+ static readonly fields: FieldList;
13758
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): ListIngestRulesRequest;
13759
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): ListIngestRulesRequest;
13760
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): ListIngestRulesRequest;
13761
+ static equals(a: ListIngestRulesRequest | PlainMessage<ListIngestRulesRequest> | undefined, b: ListIngestRulesRequest | PlainMessage<ListIngestRulesRequest> | undefined): boolean;
13762
+ }
13763
+ /**
13764
+ * Response from listing ingest rules.
13765
+ *
13766
+ * @generated from message transcodely.v1.ListIngestRulesResponse
13767
+ */
13768
+ declare class ListIngestRulesResponse extends Message<ListIngestRulesResponse> {
13769
+ /**
13770
+ * The rules, newest first.
13771
+ *
13772
+ * @generated from field: repeated transcodely.v1.IngestRule rules = 1;
13773
+ */
13774
+ rules: IngestRule[];
13775
+ /**
13776
+ * Pagination metadata.
13777
+ *
13778
+ * @generated from field: transcodely.v1.PaginationResponse pagination = 2;
13779
+ */
13780
+ pagination?: PaginationResponse;
13781
+ constructor(data?: PartialMessage<ListIngestRulesResponse>);
13782
+ static readonly runtime: typeof proto3;
13783
+ static readonly typeName = "transcodely.v1.ListIngestRulesResponse";
13784
+ static readonly fields: FieldList;
13785
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): ListIngestRulesResponse;
13786
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): ListIngestRulesResponse;
13787
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): ListIngestRulesResponse;
13788
+ static equals(a: ListIngestRulesResponse | PlainMessage<ListIngestRulesResponse> | undefined, b: ListIngestRulesResponse | PlainMessage<ListIngestRulesResponse> | undefined): boolean;
13789
+ }
13790
+ /**
13791
+ * Request to update an ingest rule.
13792
+ *
13793
+ * Every field is optional and an update applies only what it carries: a field
13794
+ * you do not send keeps the value it has, down to the individual filters and
13795
+ * the individual parts of the action. This matters more here than on most
13796
+ * objects, because a rule is a standing instruction to spend money — its
13797
+ * filters are the only thing between "the objects I meant" and "everything that
13798
+ * lands in the bucket", and a request that silently cleared them would be paid
13799
+ * for one transcode at a time.
13800
+ *
13801
+ * Because the fields inside `filters` and `action` carry no presence of their
13802
+ * own, "not sent" means "left at its default" — the same rule
13803
+ * UpdateVideoRequest.tags states. Set `clear_filters` or `clear_action` when
13804
+ * you mean to remove something rather than change it.
13805
+ *
13806
+ * @generated from message transcodely.v1.UpdateIngestRuleRequest
13807
+ */
13808
+ declare class UpdateIngestRuleRequest extends Message<UpdateIngestRuleRequest> {
13809
+ /**
13810
+ * ID of the rule to update.
13811
+ *
13812
+ * @generated from field: string id = 1;
13813
+ */
13814
+ id: string;
13815
+ /**
13816
+ * New name. Omit to leave unchanged.
13817
+ *
13818
+ * @generated from field: optional string name = 2;
13819
+ */
13820
+ name?: string;
13821
+ /**
13822
+ * Enable or disable the rule. Omit to leave unchanged. Turning a rule back on
13823
+ * reports how many events it declined while it was off, in
13824
+ * `events_skipped_while_disabled`.
13825
+ *
13826
+ * @generated from field: optional bool enabled = 3;
13827
+ */
13828
+ enabled?: boolean;
13829
+ /**
13830
+ * Filters to change. Each one you send replaces that filter; each one you
13831
+ * leave out keeps the value it has. Narrowing a rule to a new prefix is
13832
+ * therefore `{"filters": {"prefix": "raw/"}}` and nothing else — the suffix,
13833
+ * content-type and size filters are untouched.
13834
+ *
13835
+ * A filter is removed rather than changed with `clear_filters`, which empties
13836
+ * the set before this one is applied. So `clear_filters` alone widens the rule
13837
+ * to everything in the bucket, and `clear_filters` together with a filter set
13838
+ * replaces the set outright.
13839
+ *
13840
+ * @generated from field: transcodely.v1.IngestRuleFilters filters = 4;
13841
+ */
13842
+ filters?: IngestRuleFilters;
13843
+ /**
13844
+ * Parts of the action to change. Each field you send replaces that part of
13845
+ * the action; each field you leave out keeps what it had. Repeated and map
13846
+ * fields replace whole — sending one output replaces the output list, and
13847
+ * sending one metadata pair replaces the metadata map — because neither
13848
+ * carries the presence needed to merge a single entry.
13849
+ *
13850
+ * The destination is a pair, so it changes as a pair: send `managed` or
13851
+ * `output_origin_id` to move the outputs, or neither to leave them where they
13852
+ * are. Sending both is refused.
13853
+ *
13854
+ * `managed: false` is not a way to turn managed storage off — a false boolean
13855
+ * is indistinguishable from an absent one, so it reads as "leave the
13856
+ * destination alone" and changes nothing. Send `output_origin_id` instead.
13857
+ *
13858
+ * Emptying a repeated or map field is not expressible by sending it empty, so
13859
+ * dropping the thumbnails or the metadata means `clear_action` with the action
13860
+ * you want kept.
13861
+ *
13862
+ * @generated from field: transcodely.v1.IngestRuleAction action = 5;
13863
+ */
13864
+ action?: IngestRuleAction;
13865
+ /**
13866
+ * Issue a new secret. The previous one keeps working for 24 hours so the
13867
+ * sender can be updated without dropping an event; the new secret is
13868
+ * returned once, on this response.
13869
+ *
13870
+ * @generated from field: bool rotate_secret = 6;
13871
+ */
13872
+ rotateSecret: boolean;
13873
+ /**
13874
+ * Empty the filter set before applying `filters`. On its own it widens the
13875
+ * rule to every object in the bucket; with `filters` it replaces the set
13876
+ * outright instead of merging into it.
13877
+ *
13878
+ * @generated from field: bool clear_filters = 7;
13879
+ */
13880
+ clearFilters: boolean;
13881
+ /**
13882
+ * Replace the action outright instead of merging into it. `action` must then
13883
+ * be complete — at least one output and exactly one destination — because
13884
+ * nothing is carried over. This is how thumbnails or metadata are removed.
13885
+ *
13886
+ * @generated from field: bool clear_action = 8;
13887
+ */
13888
+ clearAction: boolean;
13889
+ constructor(data?: PartialMessage<UpdateIngestRuleRequest>);
13890
+ static readonly runtime: typeof proto3;
13891
+ static readonly typeName = "transcodely.v1.UpdateIngestRuleRequest";
13892
+ static readonly fields: FieldList;
13893
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): UpdateIngestRuleRequest;
13894
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): UpdateIngestRuleRequest;
13895
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): UpdateIngestRuleRequest;
13896
+ static equals(a: UpdateIngestRuleRequest | PlainMessage<UpdateIngestRuleRequest> | undefined, b: UpdateIngestRuleRequest | PlainMessage<UpdateIngestRuleRequest> | undefined): boolean;
13897
+ }
13898
+ /**
13899
+ * Response from updating an ingest rule.
13900
+ *
13901
+ * @generated from message transcodely.v1.UpdateIngestRuleResponse
13902
+ */
13903
+ declare class UpdateIngestRuleResponse extends Message<UpdateIngestRuleResponse> {
13904
+ /**
13905
+ * The updated rule.
13906
+ *
13907
+ * @generated from field: transcodely.v1.IngestRule rule = 1;
13908
+ */
13909
+ rule?: IngestRule;
13910
+ /**
13911
+ * The new inbound secret, in full. Present only when rotate_secret was set,
13912
+ * and returned only here.
13913
+ *
13914
+ * @generated from field: string secret = 2;
13915
+ */
13916
+ secret: string;
13917
+ /**
13918
+ * How many objects this rule declined while it was switched off, and can now
13919
+ * be replayed with ReplayEvent.
13920
+ *
13921
+ * Returned when an update turns a paused rule back on, because pausing is
13922
+ * advertised as safe and that is only half true: the deliveries were accepted
13923
+ * and recorded, but nothing will retry them on its own. This is the number
13924
+ * you would otherwise have to go and discover.
13925
+ *
13926
+ * @generated from field: int64 events_skipped_while_disabled = 3;
13927
+ */
13928
+ eventsSkippedWhileDisabled: bigint;
13929
+ constructor(data?: PartialMessage<UpdateIngestRuleResponse>);
13930
+ static readonly runtime: typeof proto3;
13931
+ static readonly typeName = "transcodely.v1.UpdateIngestRuleResponse";
13932
+ static readonly fields: FieldList;
13933
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): UpdateIngestRuleResponse;
13934
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): UpdateIngestRuleResponse;
13935
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): UpdateIngestRuleResponse;
13936
+ static equals(a: UpdateIngestRuleResponse | PlainMessage<UpdateIngestRuleResponse> | undefined, b: UpdateIngestRuleResponse | PlainMessage<UpdateIngestRuleResponse> | undefined): boolean;
13937
+ }
13938
+ /**
13939
+ * Request to delete an ingest rule.
13940
+ *
13941
+ * @generated from message transcodely.v1.DeleteIngestRuleRequest
13942
+ */
13943
+ declare class DeleteIngestRuleRequest extends Message<DeleteIngestRuleRequest> {
13944
+ /**
13945
+ * ID of the rule to delete.
13946
+ *
13947
+ * @generated from field: string id = 1;
13948
+ */
13949
+ id: string;
13950
+ constructor(data?: PartialMessage<DeleteIngestRuleRequest>);
13951
+ static readonly runtime: typeof proto3;
13952
+ static readonly typeName = "transcodely.v1.DeleteIngestRuleRequest";
13953
+ static readonly fields: FieldList;
13954
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): DeleteIngestRuleRequest;
13955
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): DeleteIngestRuleRequest;
13956
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): DeleteIngestRuleRequest;
13957
+ static equals(a: DeleteIngestRuleRequest | PlainMessage<DeleteIngestRuleRequest> | undefined, b: DeleteIngestRuleRequest | PlainMessage<DeleteIngestRuleRequest> | undefined): boolean;
13958
+ }
13959
+ /**
13960
+ * Response from deleting an ingest rule.
13961
+ *
13962
+ * @generated from message transcodely.v1.DeleteIngestRuleResponse
13963
+ */
13964
+ declare class DeleteIngestRuleResponse extends Message<DeleteIngestRuleResponse> {
13965
+ /**
13966
+ * The rule as it was at deletion.
13967
+ *
13968
+ * @generated from field: transcodely.v1.IngestRule rule = 1;
13969
+ */
13970
+ rule?: IngestRule;
13971
+ constructor(data?: PartialMessage<DeleteIngestRuleResponse>);
13972
+ static readonly runtime: typeof proto3;
13973
+ static readonly typeName = "transcodely.v1.DeleteIngestRuleResponse";
13974
+ static readonly fields: FieldList;
13975
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): DeleteIngestRuleResponse;
13976
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): DeleteIngestRuleResponse;
13977
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): DeleteIngestRuleResponse;
13978
+ static equals(a: DeleteIngestRuleResponse | PlainMessage<DeleteIngestRuleResponse> | undefined, b: DeleteIngestRuleResponse | PlainMessage<DeleteIngestRuleResponse> | undefined): boolean;
13979
+ }
13980
+ /**
13981
+ * Request to list storage events.
13982
+ *
13983
+ * @generated from message transcodely.v1.ListIngestEventsRequest
13984
+ */
13985
+ declare class ListIngestEventsRequest extends Message<ListIngestEventsRequest> {
13986
+ /**
13987
+ * Only events for this rule. Omit for every rule in scope.
13988
+ *
13989
+ * @generated from field: optional string rule_id = 1;
13990
+ */
13991
+ ruleId?: string;
13992
+ /**
13993
+ * Only events with this status.
13994
+ *
13995
+ * @generated from field: optional transcodely.v1.StorageEventStatus status = 2;
13996
+ */
13997
+ status?: StorageEventStatus;
13998
+ /**
13999
+ * Pagination parameters.
14000
+ *
14001
+ * @generated from field: transcodely.v1.PaginationRequest pagination = 3;
14002
+ */
14003
+ pagination?: PaginationRequest;
14004
+ /**
14005
+ * Optional app filter. API-key callers may omit it (their key's app is used)
14006
+ * or pass their own app; a different app is rejected with PermissionDenied.
14007
+ * Portal/JWT callers pass it to read a specific app in their org; omitted
14008
+ * returns events across all apps in the org.
14009
+ *
14010
+ * @generated from field: optional string app_id = 4;
14011
+ */
14012
+ appId?: string;
14013
+ constructor(data?: PartialMessage<ListIngestEventsRequest>);
14014
+ static readonly runtime: typeof proto3;
14015
+ static readonly typeName = "transcodely.v1.ListIngestEventsRequest";
14016
+ static readonly fields: FieldList;
14017
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): ListIngestEventsRequest;
14018
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): ListIngestEventsRequest;
14019
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): ListIngestEventsRequest;
14020
+ static equals(a: ListIngestEventsRequest | PlainMessage<ListIngestEventsRequest> | undefined, b: ListIngestEventsRequest | PlainMessage<ListIngestEventsRequest> | undefined): boolean;
14021
+ }
14022
+ /**
14023
+ * Response from listing storage events.
14024
+ *
14025
+ * @generated from message transcodely.v1.ListIngestEventsResponse
14026
+ */
14027
+ declare class ListIngestEventsResponse extends Message<ListIngestEventsResponse> {
14028
+ /**
14029
+ * The events, newest first.
14030
+ *
14031
+ * @generated from field: repeated transcodely.v1.StorageEvent events = 1;
14032
+ */
14033
+ events: StorageEvent[];
14034
+ /**
14035
+ * Pagination metadata.
14036
+ *
14037
+ * @generated from field: transcodely.v1.PaginationResponse pagination = 2;
14038
+ */
14039
+ pagination?: PaginationResponse;
14040
+ constructor(data?: PartialMessage<ListIngestEventsResponse>);
14041
+ static readonly runtime: typeof proto3;
14042
+ static readonly typeName = "transcodely.v1.ListIngestEventsResponse";
14043
+ static readonly fields: FieldList;
14044
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): ListIngestEventsResponse;
14045
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): ListIngestEventsResponse;
14046
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): ListIngestEventsResponse;
14047
+ static equals(a: ListIngestEventsResponse | PlainMessage<ListIngestEventsResponse> | undefined, b: ListIngestEventsResponse | PlainMessage<ListIngestEventsResponse> | undefined): boolean;
14048
+ }
14049
+ /**
14050
+ * Request to dry-run an object against a rule.
14051
+ *
14052
+ * @generated from message transcodely.v1.TestIngestRuleRequest
14053
+ */
14054
+ declare class TestIngestRuleRequest extends Message<TestIngestRuleRequest> {
14055
+ /**
14056
+ * ID of the rule to test.
14057
+ *
14058
+ * @generated from field: string id = 1;
14059
+ */
14060
+ id: string;
14061
+ /**
14062
+ * Object key to test, e.g. "uploads/clip.mp4".
14063
+ *
14064
+ * @generated from field: string object_key = 2;
14065
+ */
14066
+ objectKey: string;
14067
+ /**
14068
+ * Bucket the object would be in. Omit to use the rule's origin bucket, which
14069
+ * is what a real event will almost always carry.
14070
+ *
14071
+ * @generated from field: string bucket = 3;
11629
14072
  */
11630
- UNSPECIFIED = 0,
14073
+ bucket: string;
11631
14074
  /**
11632
- * Service is healthy and operational.
14075
+ * Object size in bytes, for testing the size filters.
11633
14076
  *
11634
- * @generated from enum value: HEALTH_STATUS_HEALTHY = 1;
14077
+ * @generated from field: int64 size_bytes = 4;
11635
14078
  */
11636
- HEALTHY = 1,
14079
+ sizeBytes: bigint;
11637
14080
  /**
11638
- * Service is degraded but operational.
14081
+ * Content type, for testing the content-type filter.
11639
14082
  *
11640
- * @generated from enum value: HEALTH_STATUS_DEGRADED = 2;
14083
+ * @generated from field: string content_type = 5;
11641
14084
  */
11642
- DEGRADED = 2,
14085
+ contentType: string;
11643
14086
  /**
11644
- * Service is unhealthy and not operational.
14087
+ * Version identity the real event would carry — an S3/R2 eTag, a GCS
14088
+ * generation, a Supabase metadata eTag.
11645
14089
  *
11646
- * @generated from enum value: HEALTH_STATUS_UNHEALTHY = 3;
14090
+ * It changes no filter decision, and it is here for one reason: the
14091
+ * idempotency key on the returned job request is derived from it, so a dry
14092
+ * run that omits it predicts a key no real delivery will ever use. Supply it
14093
+ * when you want the preview to name the key the job will actually carry.
14094
+ *
14095
+ * @generated from field: string etag = 6;
11647
14096
  */
11648
- UNHEALTHY = 3
14097
+ etag: string;
14098
+ constructor(data?: PartialMessage<TestIngestRuleRequest>);
14099
+ static readonly runtime: typeof proto3;
14100
+ static readonly typeName = "transcodely.v1.TestIngestRuleRequest";
14101
+ static readonly fields: FieldList;
14102
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): TestIngestRuleRequest;
14103
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): TestIngestRuleRequest;
14104
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): TestIngestRuleRequest;
14105
+ static equals(a: TestIngestRuleRequest | PlainMessage<TestIngestRuleRequest> | undefined, b: TestIngestRuleRequest | PlainMessage<TestIngestRuleRequest> | undefined): boolean;
11649
14106
  }
11650
14107
  /**
11651
- * Response from health check.
14108
+ * Request to replay a storage event.
11652
14109
  *
11653
- * @generated from message transcodely.v1.HealthCheckResponse
14110
+ * @generated from message transcodely.v1.ReplayIngestEventRequest
11654
14111
  */
11655
- declare class HealthCheckResponse extends Message<HealthCheckResponse> {
11656
- /**
11657
- * Overall service status.
11658
- *
11659
- * @generated from field: transcodely.v1.HealthStatus status = 1;
11660
- */
11661
- status: HealthStatus;
14112
+ declare class ReplayIngestEventRequest extends Message<ReplayIngestEventRequest> {
11662
14113
  /**
11663
- * Service version.
14114
+ * ID of the event to re-queue.
11664
14115
  *
11665
- * @generated from field: string version = 2;
14116
+ * @generated from field: string event_id = 1;
11666
14117
  */
11667
- version: string;
14118
+ eventId: string;
14119
+ constructor(data?: PartialMessage<ReplayIngestEventRequest>);
14120
+ static readonly runtime: typeof proto3;
14121
+ static readonly typeName = "transcodely.v1.ReplayIngestEventRequest";
14122
+ static readonly fields: FieldList;
14123
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): ReplayIngestEventRequest;
14124
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): ReplayIngestEventRequest;
14125
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): ReplayIngestEventRequest;
14126
+ static equals(a: ReplayIngestEventRequest | PlainMessage<ReplayIngestEventRequest> | undefined, b: ReplayIngestEventRequest | PlainMessage<ReplayIngestEventRequest> | undefined): boolean;
14127
+ }
14128
+ /**
14129
+ * Response from a replay.
14130
+ *
14131
+ * @generated from message transcodely.v1.ReplayIngestEventResponse
14132
+ */
14133
+ declare class ReplayIngestEventResponse extends Message<ReplayIngestEventResponse> {
11668
14134
  /**
11669
- * Individual component statuses.
14135
+ * The event, back in `received` and waiting to be processed.
11670
14136
  *
11671
- * @generated from field: repeated transcodely.v1.ComponentHealth components = 3;
14137
+ * @generated from field: transcodely.v1.StorageEvent event = 1;
11672
14138
  */
11673
- components: ComponentHealth[];
11674
- constructor(data?: PartialMessage<HealthCheckResponse>);
14139
+ event?: StorageEvent;
14140
+ constructor(data?: PartialMessage<ReplayIngestEventResponse>);
11675
14141
  static readonly runtime: typeof proto3;
11676
- static readonly typeName = "transcodely.v1.HealthCheckResponse";
14142
+ static readonly typeName = "transcodely.v1.ReplayIngestEventResponse";
11677
14143
  static readonly fields: FieldList;
11678
- static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): HealthCheckResponse;
11679
- static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): HealthCheckResponse;
11680
- static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): HealthCheckResponse;
11681
- static equals(a: HealthCheckResponse | PlainMessage<HealthCheckResponse> | undefined, b: HealthCheckResponse | PlainMessage<HealthCheckResponse> | undefined): boolean;
14144
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): ReplayIngestEventResponse;
14145
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): ReplayIngestEventResponse;
14146
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): ReplayIngestEventResponse;
14147
+ static equals(a: ReplayIngestEventResponse | PlainMessage<ReplayIngestEventResponse> | undefined, b: ReplayIngestEventResponse | PlainMessage<ReplayIngestEventResponse> | undefined): boolean;
11682
14148
  }
11683
14149
  /**
11684
- * Health status of an individual component.
14150
+ * Response from a dry run.
11685
14151
  *
11686
- * @generated from message transcodely.v1.ComponentHealth
14152
+ * @generated from message transcodely.v1.TestIngestRuleResponse
11687
14153
  */
11688
- declare class ComponentHealth extends Message<ComponentHealth> {
14154
+ declare class TestIngestRuleResponse extends Message<TestIngestRuleResponse> {
11689
14155
  /**
11690
- * Component name (e.g., "database", "storage", "queue").
14156
+ * Whether the object would produce a job.
11691
14157
  *
11692
- * @generated from field: string name = 1;
14158
+ * @generated from field: bool matched = 1;
11693
14159
  */
11694
- name: string;
14160
+ matched: boolean;
11695
14161
  /**
11696
- * Component status.
14162
+ * Why not, when it would not. Same slugs as StorageEvent.reason.
11697
14163
  *
11698
- * @generated from field: transcodely.v1.HealthStatus status = 2;
14164
+ * @generated from field: string reason = 2;
11699
14165
  */
11700
- status: HealthStatus;
14166
+ reason: string;
11701
14167
  /**
11702
- * Optional message with additional details.
14168
+ * The job request this rule would submit for the object. Present only when
14169
+ * matched. Nothing was created — this is what WOULD be sent.
11703
14170
  *
11704
- * @generated from field: optional string message = 3;
14171
+ * @generated from field: transcodely.v1.CreateJobRequest job_request = 3;
11705
14172
  */
11706
- message?: string;
11707
- constructor(data?: PartialMessage<ComponentHealth>);
14173
+ jobRequest?: CreateJobRequest;
14174
+ constructor(data?: PartialMessage<TestIngestRuleResponse>);
11708
14175
  static readonly runtime: typeof proto3;
11709
- static readonly typeName = "transcodely.v1.ComponentHealth";
14176
+ static readonly typeName = "transcodely.v1.TestIngestRuleResponse";
11710
14177
  static readonly fields: FieldList;
11711
- static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): ComponentHealth;
11712
- static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): ComponentHealth;
11713
- static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): ComponentHealth;
11714
- static equals(a: ComponentHealth | PlainMessage<ComponentHealth> | undefined, b: ComponentHealth | PlainMessage<ComponentHealth> | undefined): boolean;
14178
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): TestIngestRuleResponse;
14179
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): TestIngestRuleResponse;
14180
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): TestIngestRuleResponse;
14181
+ static equals(a: TestIngestRuleResponse | PlainMessage<TestIngestRuleResponse> | undefined, b: TestIngestRuleResponse | PlainMessage<TestIngestRuleResponse> | undefined): boolean;
11715
14182
  }
11716
14183
 
11717
- declare class Health {
14184
+ /**
14185
+ * Ingest rules — standing instructions that turn an object landing in a watched
14186
+ * bucket into a job, with no server of yours in the path.
14187
+ *
14188
+ * A rule hangs off one readable storage origin. Your provider posts its
14189
+ * object-created events to the rule's `endpointUrl`, authenticated with the
14190
+ * rule's secret; a delivery that passes the filters becomes a job. Duplicate
14191
+ * deliveries are absorbed — an object is identified by (rule, bucket, key,
14192
+ * etag) and produces exactly one job.
14193
+ *
14194
+ * The inbound endpoint itself is not part of this SDK: your storage provider
14195
+ * calls it, not you.
14196
+ */
14197
+ declare class IngestRules {
11718
14198
  private readonly transport;
11719
14199
  constructor(transport: Transport);
11720
- check(opts?: CallOptions): Promise<HealthCheckResponse>;
14200
+ /**
14201
+ * Creates a rule on a readable origin. The full response is returned because
14202
+ * `secret` rides on it — the inbound secret is shown once, here, and cannot
14203
+ * be read back. Store it wherever the event sender will read it from.
14204
+ */
14205
+ create(req: PartialMessage<CreateIngestRuleRequest>, opts?: CallOptions): Promise<CreateIngestRuleResponse>;
14206
+ /**
14207
+ * Fetches a rule by ID (`ing_*`). The secret is never returned again — the
14208
+ * rule carries only `secretPrefix` and `secretHint`.
14209
+ */
14210
+ get(id: string, opts?: CallOptions): Promise<IngestRule>;
14211
+ /** Rules in scope, newest first. Narrow with `originId` or `enabled`. */
14212
+ list(req?: PartialMessage<ListIngestRulesRequest>, opts?: CallOptions): Page<IngestRule>;
14213
+ /**
14214
+ * Updates name, enabled state, filters or action, and optionally rotates the
14215
+ * secret. It MERGES: an update applies only what it carries, down to the
14216
+ * individual filters and the individual parts of the action. Narrowing a
14217
+ * rule to a new prefix is `{ filters: { prefix: "raw/" } }` and nothing
14218
+ * else — the suffix, content-type and size filters are untouched.
14219
+ *
14220
+ * Removing something rather than changing it takes the two clear flags.
14221
+ * `clearFilters` empties the filter set before `filters` is applied, so on
14222
+ * its own it widens the rule to everything in the bucket. `clearAction`
14223
+ * replaces the action outright, and `action` must then be complete — at
14224
+ * least one output and exactly one destination. That is the only way to drop
14225
+ * an action's thumbnails or metadata, since a repeated or map field sent
14226
+ * empty reads as "not sent".
14227
+ *
14228
+ * For the same reason `managed: false` does not turn managed storage off; it
14229
+ * leaves the destination alone. Send `outputOriginId` instead.
14230
+ *
14231
+ * The full response is returned: a rotation puts the new secret on it (once),
14232
+ * and switching a paused rule back on reports how many deliveries it declined
14233
+ * while off in `eventsSkippedWhileDisabled`. After a rotation the previous
14234
+ * secret keeps working for 24 hours.
14235
+ */
14236
+ update(req: PartialMessage<UpdateIngestRuleRequest>, opts?: CallOptions): Promise<UpdateIngestRuleResponse>;
14237
+ /**
14238
+ * Deletes a rule; its endpoint stops accepting events immediately. The events
14239
+ * it already received are kept, and the rule as it stood is returned.
14240
+ */
14241
+ delete(id: string, opts?: CallOptions): Promise<IngestRule>;
14242
+ /**
14243
+ * Every delivery received and what came of it, newest first. Omit `ruleId`
14244
+ * for all rules in scope; set `status` to read only the skipped or failed.
14245
+ */
14246
+ listEvents(req?: PartialMessage<ListIngestEventsRequest>, opts?: CallOptions): Page<StorageEvent>;
14247
+ /**
14248
+ * Dry-runs an object key against a rule: whether the filters match and, when
14249
+ * they do, the exact job request the rule would submit. Nothing is stored and
14250
+ * no job is created.
14251
+ *
14252
+ * Supply `etag` when you want the preview to name the idempotency key a real
14253
+ * delivery would carry — the key is derived from it.
14254
+ */
14255
+ test(req: PartialMessage<TestIngestRuleRequest>, opts?: CallOptions): Promise<TestIngestRuleResponse>;
14256
+ /**
14257
+ * Re-queues a skipped or refused event (`sev_*`), giving the object one more
14258
+ * pass through the rule.
14259
+ *
14260
+ * It exists because deduplication is permanent: re-sending the event, or
14261
+ * re-uploading the same bytes, is absorbed and produces nothing. The event is
14262
+ * reset rather than duplicated, so it keeps its id and its history.
14263
+ */
14264
+ replayEvent(eventId: string, opts?: CallOptions): Promise<StorageEvent>;
11721
14265
  }
11722
14266
 
11723
14267
  declare class Jobs {
@@ -12204,10 +14748,14 @@ declare class Organization extends Message<Organization> {
12204
14748
  */
12205
14749
  planName?: string;
12206
14750
  /**
12207
- * Whether this org must have a payment method on file. NOT ENFORCED: no
12208
- * create, dispatch or delivery path reads this today. It records intent
12209
- * ahead of the release that starts requiring one, at which point orgs
12210
- * already carrying false are the grandfathered population.
14751
+ * Whether this org must have a payment method on file. ENFORCED: with no
14752
+ * usable payment method a required org derives a restricting
14753
+ * billing_standing, and its jobs resolve to the free tier's limits rather
14754
+ * than to its plan.
14755
+ *
14756
+ * Organizations created before the enforcement release carry false and are
14757
+ * the grandfathered population — unaffected until an operator turns it on.
14758
+ * A comped org (billing_exempt) is off the hook whatever this says.
12211
14759
  *
12212
14760
  * @generated from field: bool payment_method_required = 11;
12213
14761
  */
@@ -12226,19 +14774,24 @@ declare class Organization extends Message<Organization> {
12226
14774
  * Derived payment health. Always BILLING_STANDING_ACTIVE when
12227
14775
  * payment_method_required is false, whatever the facts below say.
12228
14776
  *
14777
+ * Filled on admin reads, and on OrganizationService.Get for a member of the
14778
+ * org (JWT/portal actors). Absent on the API-key read path, which gets a
14779
+ * refusal code on the create instead, and on List.
14780
+ *
12229
14781
  * @generated from field: transcodely.v1.BillingStanding billing_standing = 13;
12230
14782
  */
12231
14783
  billingStanding: BillingStanding;
12232
14784
  /**
12233
14785
  * When the current grace window closes, present only while billing_standing
12234
- * is BILLING_STANDING_GRACE.
14786
+ * is BILLING_STANDING_GRACE. Filled wherever billing_standing is.
12235
14787
  *
12236
14788
  * @generated from field: optional google.protobuf.Timestamp grace_until = 14;
12237
14789
  */
12238
14790
  graceUntil?: Timestamp;
12239
14791
  /**
12240
14792
  * Stable token explaining billing_standing; same vocabulary as
12241
- * BillingProfile.standing_reason.
14793
+ * BillingProfile.standing_reason. ADMIN reads only — tokens like
14794
+ * card_expired are payment-method detail, which a plain member never sees.
12242
14795
  *
12243
14796
  * @generated from field: string standing_reason = 15;
12244
14797
  */
@@ -12262,6 +14815,20 @@ declare class Organization extends Message<Organization> {
12262
14815
  * @generated from field: int32 consecutive_dunned_cycles = 17;
12263
14816
  */
12264
14817
  consecutiveDunnedCycles: number;
14818
+ /**
14819
+ * How automation may treat this organization — see BillingTreatment.
14820
+ *
14821
+ * ADMIN reads only, like standing_reason above: it is a statement about a
14822
+ * commercial relationship, and a customer does not learn from an API field
14823
+ * that we have decided never to interrupt them.
14824
+ *
14825
+ * Orthogonal to billing_standing. A trusted org can report
14826
+ * BILLING_STANDING_DELINQUENT and still be untouched by every automated
14827
+ * path — the founder gets an email instead.
14828
+ *
14829
+ * @generated from field: transcodely.v1.BillingTreatment billing_treatment = 18;
14830
+ */
14831
+ billingTreatment: BillingTreatment;
12265
14832
  constructor(data?: PartialMessage<Organization>);
12266
14833
  static readonly runtime: typeof proto3;
12267
14834
  static readonly typeName = "transcodely.v1.Organization";
@@ -13515,6 +16082,225 @@ declare class Presets {
13515
16082
  archive(id: string, opts?: CallOptions): Promise<Preset>;
13516
16083
  }
13517
16084
 
16085
+ /**
16086
+ * Byte uploader for hosted videos.
16087
+ *
16088
+ * The API hands out presigned S3 URLs but never touches the bytes itself, so
16089
+ * pushing a file at it is three steps: open an upload, PUT the bytes, tell the
16090
+ * API the bytes landed. This module does all three, picking a single PUT for a
16091
+ * file that fits in one part and an S3 multipart upload for anything larger.
16092
+ *
16093
+ * Everything here is plain `fetch` + Web Streams. `node:fs` is imported
16094
+ * dynamically and only when the caller passes a filesystem path, so a bundler
16095
+ * targeting the browser never pulls it in.
16096
+ */
16097
+
16098
+ /** Smallest part S3 accepts, except for the final part (5 MiB). */
16099
+ declare const MIN_PART_SIZE: number;
16100
+ /** Part size used when the caller doesn't pick one (25 MiB — the API default). */
16101
+ declare const DEFAULT_PART_SIZE: number;
16102
+ /** S3's hard ceiling on parts per multipart upload. */
16103
+ declare const MAX_PARTS = 10000;
16104
+ /** Platform upload ceiling enforced by the API (5 GB). */
16105
+ declare const MAX_UPLOAD_SIZE_BYTES = 5368709120;
16106
+ /** Parts uploaded at once when the caller doesn't pick a number. */
16107
+ declare const DEFAULT_CONCURRENCY = 4;
16108
+ /** Retries per part after the first attempt. */
16109
+ declare const DEFAULT_MAX_RETRIES = 4;
16110
+ /** First backoff step; doubles per retry, jittered, capped at 10 s. */
16111
+ declare const DEFAULT_RETRY_BASE_DELAY_MS = 500;
16112
+ /**
16113
+ * Anything {@link Uploads.putFile} can read bytes from.
16114
+ *
16115
+ * - `string` — a filesystem path. Size and filename come from the path itself.
16116
+ * - `Blob` / `File` — size comes from the blob; a `File` also supplies the name.
16117
+ * - `ReadableStream<Uint8Array>` — you must pass `sizeBytes` and `filename`,
16118
+ * because the API needs both before the first byte moves.
16119
+ */
16120
+ type UploadSource = string | Blob | ReadableStream<Uint8Array>;
16121
+ /** Progress snapshot, reported once per completed part. */
16122
+ interface UploadProgress {
16123
+ uploadedBytes: number;
16124
+ totalBytes: number;
16125
+ partsCompleted: number;
16126
+ totalParts: number;
16127
+ /** 0–100, rounded. */
16128
+ percent: number;
16129
+ }
16130
+ interface PutFileOptions {
16131
+ /**
16132
+ * App the video is created under. Optional for an API-key client: omit it
16133
+ * and the key's own app is used. Pass it to be explicit, or when the client
16134
+ * authenticates as a portal user, where omitting it selects the
16135
+ * organization's first active app. An API key given a different app's ID is
16136
+ * refused with `permission_denied`.
16137
+ *
16138
+ * The app does not have to have managed hosting turned on first: the create
16139
+ * call provisions the bucket, the managed origin and the CDN pull zone on an
16140
+ * app that has never hosted anything, which is why a first upload can take a
16141
+ * few seconds longer than the ones after it. If that provisioning fails the
16142
+ * request is refused with `hosting_provisioning_failed` and nothing is
16143
+ * created, so the same call is safe to retry. A refusal on billing or
16144
+ * admission grounds carries its own code instead (`billing_past_due`,
16145
+ * `outstanding_balance_exceeded`, `limit_exceeded`, `intake_paused`, …).
16146
+ */
16147
+ appId?: string;
16148
+ /** Required for a `Blob` or stream; inferred from the path or `File.name` otherwise. */
16149
+ filename?: string;
16150
+ /** Inferred from the extension (or `Blob.type`) when omitted. */
16151
+ contentType?: string;
16152
+ /** Required for a `ReadableStream`; ignored for a path or blob. */
16153
+ sizeBytes?: number;
16154
+ title?: string;
16155
+ description?: string;
16156
+ tags?: string[];
16157
+ /** "public", "unlisted" or "private". Omit to take the app's default. */
16158
+ visibility?: string;
16159
+ /** Preset ID or slug driving the auto-transcode. */
16160
+ preset?: string;
16161
+ hoverPreviews?: boolean;
16162
+ autoCaptions?: boolean;
16163
+ /** Bytes per part. Clamped up to 5 MiB, and raised further if 10,000 parts would not cover the file. */
16164
+ partSize?: number;
16165
+ /** Parts in flight at once. Default 4. */
16166
+ concurrency?: number;
16167
+ /** Retries per part after the first attempt. Default 4. */
16168
+ maxRetries?: number;
16169
+ /** First backoff step in ms. Default 500. */
16170
+ retryBaseDelayMs?: number;
16171
+ /** Called after each part lands. Progress is per part, not per byte. */
16172
+ onProgress?: (progress: UploadProgress) => void;
16173
+ /** Abort the upload. In-flight parts are canceled and the multipart upload is aborted server-side. */
16174
+ signal?: AbortSignal;
16175
+ }
16176
+ /**
16177
+ * Part size for a file: the requested size (or the default), never below the
16178
+ * 5 MiB S3 minimum, and raised as far as it takes to keep the part count
16179
+ * inside S3's 10,000-part ceiling.
16180
+ */
16181
+ declare function calculatePartSize(fileSize: number, requestedPartSize?: number): number;
16182
+ /** Number of parts a file of `fileSize` splits into at `partSize`. */
16183
+ declare function calculateTotalParts(fileSize: number, partSize: number): number;
16184
+ /** Best-effort MIME type from a filename extension. */
16185
+ declare function contentTypeForFilename(filename: string): string;
16186
+ /** The subset of VideoService the uploader drives. Lets tests stand in a double. */
16187
+ interface UploadRpcClient {
16188
+ createUpload(req: {
16189
+ appId?: string;
16190
+ filename: string;
16191
+ contentType: string;
16192
+ sizeBytes: bigint;
16193
+ title?: string;
16194
+ description?: string;
16195
+ tags?: string[];
16196
+ visibility?: string;
16197
+ preset?: string;
16198
+ hoverPreviews?: boolean;
16199
+ autoCaptions?: boolean;
16200
+ }): Promise<{
16201
+ video?: Video;
16202
+ uploadUrl: string;
16203
+ }>;
16204
+ completeUpload(req: {
16205
+ id: string;
16206
+ }): Promise<{
16207
+ video?: Video;
16208
+ }>;
16209
+ createMultipartUpload(req: {
16210
+ appId?: string;
16211
+ filename: string;
16212
+ contentType: string;
16213
+ sizeBytes: bigint;
16214
+ totalParts: number;
16215
+ partSizeBytes: bigint;
16216
+ title?: string;
16217
+ description?: string;
16218
+ tags?: string[];
16219
+ visibility?: string;
16220
+ preset?: string;
16221
+ hoverPreviews?: boolean;
16222
+ autoCaptions?: boolean;
16223
+ }): Promise<{
16224
+ video?: Video;
16225
+ uploadId: string;
16226
+ parts: UploadPart[];
16227
+ }>;
16228
+ getUploadPartUrls(req: {
16229
+ id: string;
16230
+ uploadId: string;
16231
+ partNumbers: number[];
16232
+ }): Promise<{
16233
+ parts: UploadPart[];
16234
+ }>;
16235
+ completeMultipartUpload(req: {
16236
+ id: string;
16237
+ uploadId: string;
16238
+ parts: {
16239
+ partNumber: number;
16240
+ etag: string;
16241
+ }[];
16242
+ }): Promise<{
16243
+ video?: Video;
16244
+ }>;
16245
+ abortMultipartUpload(req: {
16246
+ id: string;
16247
+ uploadId: string;
16248
+ }): Promise<unknown>;
16249
+ }
16250
+ /**
16251
+ * The upload state machine, decoupled from the transport so it can be driven
16252
+ * by a double in tests. `client.uploads` is the wired-up subclass in
16253
+ * `resources/uploads.ts`.
16254
+ *
16255
+ * The API's own transcode fires as soon as the upload is marked complete, so
16256
+ * the returned `Video` is already in `processing` — watch it with
16257
+ * `client.videos.watch(video.id)`.
16258
+ */
16259
+ declare class UploadEngine {
16260
+ private readonly rpc;
16261
+ private readonly fetchImpl;
16262
+ constructor(rpc: UploadRpcClient, fetchImpl: typeof fetch);
16263
+ /**
16264
+ * Upload a file and return the hosted video it created.
16265
+ *
16266
+ * A file that fits in one part goes up as a single PUT; anything larger uses
16267
+ * an S3 multipart upload with `concurrency` parts in flight, per-part retry
16268
+ * with jittered backoff, automatic re-signing when a presigned URL expires,
16269
+ * and a server-side abort if the upload can't finish.
16270
+ *
16271
+ * @example
16272
+ * ```ts
16273
+ * const video = await client.uploads.putFile("./talk.mp4", {
16274
+ * appId: "app_k1l2m3n4o5",
16275
+ * title: "Conference talk",
16276
+ * onProgress: (p) => process.stdout.write(`\r${String(p.percent)}%`),
16277
+ * });
16278
+ * ```
16279
+ */
16280
+ putFile(source: UploadSource, opts: PutFileOptions): Promise<Video>;
16281
+ private run;
16282
+ private single;
16283
+ private multipart;
16284
+ /**
16285
+ * One part, with retry/backoff. `invalidate` is what makes a 403 retryable:
16286
+ * pass it on the multipart path, where the URL can be re-signed, and omit it
16287
+ * for the single PUT, where there is nothing new to try.
16288
+ */
16289
+ private attempt;
16290
+ }
16291
+
16292
+ /**
16293
+ * `client.uploads` — the byte-pushing half of hosted video creation.
16294
+ *
16295
+ * The API only ever hands out presigned URLs; the bytes travel straight from
16296
+ * the caller to object storage. This namespace wires {@link UploadEngine} to
16297
+ * the SDK transport so `putFile` is one call.
16298
+ */
16299
+
16300
+ declare class Uploads extends UploadEngine {
16301
+ constructor(transport: Transport);
16302
+ }
16303
+
13518
16304
  /**
13519
16305
  * User account status.
13520
16306
  *
@@ -13549,9 +16335,10 @@ declare enum UserStatus {
13549
16335
  DELETED = 3
13550
16336
  }
13551
16337
  /**
13552
- * User approval status. Until we have a payment gate, every new sign-up is
13553
- * held in PENDING and must be approved by a staff member before they can use
13554
- * the platform.
16338
+ * Dashboard access review status. New sign-ups are approved automatically
16339
+ * unless the platform is operating in manual-review mode, in which case they
16340
+ * stay PENDING until a staff member approves them. Staff can reject a user at
16341
+ * any time to revoke dashboard access.
13555
16342
  *
13556
16343
  * @generated from enum transcodely.v1.UserApprovalStatus
13557
16344
  */
@@ -13641,8 +16428,7 @@ declare class User extends Message<User> {
13641
16428
  */
13642
16429
  updatedAt?: Timestamp;
13643
16430
  /**
13644
- * Whether this user has been approved by a staff member.
13645
- * New sign-ups default to PENDING.
16431
+ * Whether this user may use the dashboard.
13646
16432
  *
13647
16433
  * @generated from field: transcodely.v1.UserApprovalStatus approval_status = 11;
13648
16434
  */
@@ -13654,7 +16440,8 @@ declare class User extends Message<User> {
13654
16440
  */
13655
16441
  approvalDecidedAt?: Timestamp;
13656
16442
  /**
13657
- * The staff member's user_id who decided approval.
16443
+ * The staff member's user_id who decided approval. Absent when the user was
16444
+ * approved automatically rather than by a person.
13658
16445
  *
13659
16446
  * @generated from field: optional string approval_decided_by_user_id = 13;
13660
16447
  */
@@ -14075,8 +16862,10 @@ declare class Transcodely {
14075
16862
  private readonly transport;
14076
16863
  private _jobs;
14077
16864
  private _videos;
16865
+ private _uploads;
14078
16866
  private _presets;
14079
16867
  private _origins;
16868
+ private _ingestRules;
14080
16869
  private _apps;
14081
16870
  private _apiKeys;
14082
16871
  private _organizations;
@@ -14091,8 +16880,19 @@ declare class Transcodely {
14091
16880
  get lastRequestId(): string | undefined;
14092
16881
  get jobs(): Jobs;
14093
16882
  get videos(): Videos;
16883
+ /**
16884
+ * Byte uploads for hosted videos. `client.uploads.putFile(path, { appId })`
16885
+ * runs the whole create → PUT → complete dance, picking a single PUT or an
16886
+ * S3 multipart upload by file size.
16887
+ */
16888
+ get uploads(): Uploads;
14094
16889
  get presets(): Presets;
14095
16890
  get origins(): Origins;
16891
+ /**
16892
+ * Ingest rules: watch a bucket, transcode what lands in it. See
16893
+ * {@link IngestRules}.
16894
+ */
16895
+ get ingestRules(): IngestRules;
14096
16896
  get apps(): Apps;
14097
16897
  get apiKeys(): ApiKeys;
14098
16898
  get organizations(): Organizations;
@@ -14115,8 +16915,29 @@ declare class Transcodely {
14115
16915
  get webhooks(): typeof Webhooks;
14116
16916
  }
14117
16917
 
16918
+ /**
16919
+ * JSON serialization for the Transcodely wire format. Wraps protojson
16920
+ * (`MessageType.toJson` / `fromJson`) with snake_case field names + lowercase
16921
+ * simplified enum values, mirroring `internal/connect/codec.go` on the server.
16922
+ */
16923
+
16924
+ interface SerializeOptions {
16925
+ /** Always emit unpopulated fields (matches server's EmitUnpopulated). */
16926
+ emitDefaultValues?: boolean;
16927
+ }
16928
+ /**
16929
+ * Render a generated message as a plain JSON value in the Transcodely wire
16930
+ * format — snake_case field names, simplified lowercase enums, exactly what
16931
+ * the REST/Connect API returns. Useful for logging and for tools that print
16932
+ * API entities (the `transcodely` CLI's `--json` mode uses it).
16933
+ *
16934
+ * Unlike {@link serialize} it takes no MessageType: the message carries its
16935
+ * own descriptor.
16936
+ */
16937
+ declare function toWireJson<T extends Message<T>>(msg: T, opts?: SerializeOptions): JsonValue;
16938
+
14118
16939
  /** SDK version. Bumped by release-please from package.json on each tag. */
14119
- declare const SDK_VERSION = "0.3.6";
16940
+ declare const SDK_VERSION = "0.3.8";
14120
16941
  /**
14121
16942
  * API version this SDK release is pinned to. Sent on every request as
14122
16943
  * `Transcodely-Version`. Customers can override per-client via the
@@ -14126,4 +16947,121 @@ declare const API_VERSION = "2026-05-03";
14126
16947
  /** Default base URL for the production Transcodely API. */
14127
16948
  declare const DEFAULT_BASE_URL = "https://api.transcodely.com";
14128
16949
 
14129
- export { APIConnectionError, APIError, Event as APIEvent, APIKey, API_VERSION, AV1Options, AbortMultipartUploadRequest, App, AppStatus, ArchiveAppRequest, ArchiveOriginRequest, ArchivePresetRequest, AudioCodec, AudioSettings, AudioStreamInfo, AudioTrackConfig, AuthenticationError, AutoABRConfig, AutoProfileDefaults, BYOKConfig, BillingPaymentMethod, BillingPortalSession, BillingProfile, BillingStanding, BitrateMode, BurnInStyle, type CallOptions, CancelJobRequest, CancelJobResponse, ChapterPoint, ChapterResult, CheckSlugRequest, CheckSlugResponse, ClipConfig, CompleteMultipartUploadRequest, CompleteMultipartUploadResponse, CompleteUploadRequest, CompleteUploadResponse, CompletedPart, ConfirmJobRequest, ConfirmJobResponse, ConflictError, Container, ContentAnalysis, ContentAwareConfig, ContentAwareMode, ContentType, CreateAPIKeyRequest, CreateAPIKeyResponse, CreateAppRequest, CreateAppResponse, CreateBillingPortalSessionRequest, CreateBillingPortalSessionResponse, CreateFromUrlRequest, CreateFromUrlResponse, CreateJobRequest, CreateJobResponse, CreateMultipartUploadRequest, CreateMultipartUploadResponse, CreateOrganizationRequest, CreateOrganizationResponse, CreateOriginRequest, CreateOriginResponse, CreatePresetRequest, CreatePresetResponse, CreateUploadRequest, CreateUploadResponse, CreateWebhookEndpointRequest, CreateWebhookEndpointResponse, DASHConfig, DEFAULT_BASE_URL, DEFAULT_TOLERANCE_SECONDS, DRMConfig, DRMSystem, DailyUsage, DeleteVideoRequest, DeleteWebhookEndpointRequest, DeleteWebhookEndpointResponse, DeliveryFormat, DuplicatePresetRequest, DuplicatePresetResponse, EVENT_ID_HEADER, EnableHostingRequest, EnableHostingResponse, EncryptionScheme, EndpointHealthSummary, ErrorDetails, type EventBase, ExecutionTiming, type FieldViolation, GOPAlignmentMode, GcsCredentials, GcsOriginConfig, GetAPIKeyRequest, GetAPIKeyResponse, GetAppRequest, GetAppResponse, GetBillingProfileRequest, GetBillingProfileResponse, GetEndpointHealthRequest, GetEndpointHealthResponse, GetInvoiceRequest, GetInvoiceResponse, GetJobRequest, GetJobResponse, GetMeRequest, GetMeResponse, GetMembershipRequest, GetMembershipResponse, GetOrganizationRequest, GetOrganizationResponse, GetOriginRequest, GetOriginResponse, GetPresetBySlugRequest, GetPresetBySlugResponse, GetPresetRequest, GetPresetResponse, GetSpendRequest, GetSpendResponse, GetStatsRequest, GetStatsResponse, GetUpcomingInvoiceRequest, GetUpcomingInvoiceResponse, GetUploadPartUrlsRequest, GetUploadPartUrlsResponse, GetUsageRequest, GetUsageResponse, GetUserRequest, GetUserResponse, GetVideoRequest, GetVideoResponse, H264Options, H265Options, HDRConfig, HDRFormat, HDRMode, HLSConfig, HLSPlaylistType, HLSSegmentFormat, HealthBucket, HostingConfig, HttpCredentials, HttpOriginConfig, InputMetadata, InvalidRequestError, Invoice, InvoiceLineItem, InvoiceLineType, InvoiceStatus, Job, JobCostBreakdown, JobCostLine, JobCostLineType, JobFee, JobOutput, JobPriority, JobStatus, KeyServerConfig, type KnownWebhookEvent, ListAPIKeysRequest, ListAPIKeysResponse, ListAppsRequest, ListAppsResponse, ListEventsRequest, ListEventsResponse, ListInvoicesRequest, ListInvoicesResponse, ListJobsRequest, ListJobsResponse, ListMembershipsRequest, ListMembershipsResponse, ListOrganizationsRequest, ListOrganizationsResponse, ListOriginsRequest, ListOriginsResponse, ListPresetsRequest, ListPresetsResponse, ListTopVideosRequest, ListTopVideosResponse, ListUsersRequest, ListUsersResponse, ListVideosRequest, ListVideosResponse, ListWebhookDeliveriesRequest, ListWebhookDeliveriesResponse, ListWebhookEndpointsRequest, ListWebhookEndpointsResponse, type LogEvent, Membership, MembershipRole, MembershipStatus, MembershipWithUser, NotFoundError, Organization, OrganizationStatus, Origin, OriginPermission, OriginProvider, OriginRef, OriginStatus, OutputFormat, OutputSpec, OutputStatus, OutputVariantResult, Page, PaginationRequest, PaginationResponse, PaymentMethodState, PermissionError, PreconditionError, Preset, PresetVariant, PricingSnapshot, QualityTier, R2Jurisdiction, R2OriginConfig, RateLimitError, RemoveMembershipRequest, ResendEventRequest, ResendEventResponse, Resolution, RetrieveEventRequest, RetrieveEventResponse, RetrieveWebhookEndpointRequest, RetrieveWebhookEndpointResponse, RevokeAPIKeyRequest, RotateWebhookSecretRequest, RotateWebhookSecretResponse, S3Credentials, S3OriginConfig, SDK_VERSION, SIGNATURE_HEADER, SegmentConfig, SendTestWebhookRequest, SendTestWebhookResponse, type SpendLimitNotification, StreamingConfig, SubtitleFormat, SubtitleOperation, SubtitleResult, SubtitleStreamInfo, SubtitleTrack, ThumbnailFormat, ThumbnailMode, ThumbnailResult, ThumbnailSpec, ToneMapping, TopVideo, Transcodely, type TranscodelyConfig, TranscodelyError, type UnknownWebhookEvent, UpdateAppRequest, UpdateAppResponse, UpdateHostingConfigRequest, UpdateHostingConfigResponse, UpdateMeRequest, UpdateMeResponse, UpdateMembershipRoleRequest, UpdateMembershipRoleResponse, UpdateOrganizationRequest, UpdateOrganizationResponse, UpdateOriginRequest, UpdateOriginResponse, UpdatePresetRequest, UpdatePresetResponse, UpdateSpendLimitRequest, UpdateSpendLimitResponse, UpdateVideoRequest, UpdateVideoResponse, UpdateWebhookEndpointRequest, UpdateWebhookEndpointResponse, UploadPart, UsageSummary, User, UserApprovalStatus, UserOrganization, UserStatus, UserWithOrganizations, VP9Options, ValidateOriginRequest, ValidateOriginResponse, ValidationResult, VariantPricingSnapshot, type VerifyOptions, Video, VideoCodec, VideoRendition, VideoSettings, VideoStatsDay, VideoStatsTotals, VideoStatus, VideoStreamInfo, VideoTextTrack, VideoVariant, VideoVisibility, WEBHOOK_EVENT_TYPES, WatchEventType, WatchJobRequest, WatchJobResponse, WatchVideoRequest, WatchVideoResponse, WatermarkAnchor, WatermarkConfig, WatermarkPixelPlacement, WebhookDelivery, WebhookEndpoint, WebhookError, type WebhookEvent, type WebhookEventType, WebhookPayloadError, WebhookSignatureError, WebhookTimestampError, Webhooks, constructEvent, isEventType, isKnownEvent, verifySignature };
16950
+ /**
16951
+ * Health status.
16952
+ *
16953
+ * @generated from enum transcodely.v1.HealthStatus
16954
+ */
16955
+ declare enum HealthStatus {
16956
+ /**
16957
+ * @generated from enum value: HEALTH_STATUS_UNSPECIFIED = 0;
16958
+ */
16959
+ UNSPECIFIED = 0,
16960
+ /**
16961
+ * Service is healthy and operational.
16962
+ *
16963
+ * @generated from enum value: HEALTH_STATUS_HEALTHY = 1;
16964
+ */
16965
+ HEALTHY = 1,
16966
+ /**
16967
+ * Service is degraded but operational.
16968
+ *
16969
+ * @generated from enum value: HEALTH_STATUS_DEGRADED = 2;
16970
+ */
16971
+ DEGRADED = 2,
16972
+ /**
16973
+ * Service is unhealthy and not operational.
16974
+ *
16975
+ * @generated from enum value: HEALTH_STATUS_UNHEALTHY = 3;
16976
+ */
16977
+ UNHEALTHY = 3
16978
+ }
16979
+ /**
16980
+ * Request for health check.
16981
+ *
16982
+ * @generated from message transcodely.v1.HealthCheckRequest
16983
+ */
16984
+ declare class HealthCheckRequest extends Message<HealthCheckRequest> {
16985
+ /**
16986
+ * Optional: specific service to check (empty = all).
16987
+ *
16988
+ * @generated from field: optional string service = 1;
16989
+ */
16990
+ service?: string;
16991
+ constructor(data?: PartialMessage<HealthCheckRequest>);
16992
+ static readonly runtime: typeof proto3;
16993
+ static readonly typeName = "transcodely.v1.HealthCheckRequest";
16994
+ static readonly fields: FieldList;
16995
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): HealthCheckRequest;
16996
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): HealthCheckRequest;
16997
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): HealthCheckRequest;
16998
+ static equals(a: HealthCheckRequest | PlainMessage<HealthCheckRequest> | undefined, b: HealthCheckRequest | PlainMessage<HealthCheckRequest> | undefined): boolean;
16999
+ }
17000
+ /**
17001
+ * Response from health check.
17002
+ *
17003
+ * @generated from message transcodely.v1.HealthCheckResponse
17004
+ */
17005
+ declare class HealthCheckResponse extends Message<HealthCheckResponse> {
17006
+ /**
17007
+ * Overall service status.
17008
+ *
17009
+ * @generated from field: transcodely.v1.HealthStatus status = 1;
17010
+ */
17011
+ status: HealthStatus;
17012
+ /**
17013
+ * Service version.
17014
+ *
17015
+ * @generated from field: string version = 2;
17016
+ */
17017
+ version: string;
17018
+ /**
17019
+ * Individual component statuses.
17020
+ *
17021
+ * @generated from field: repeated transcodely.v1.ComponentHealth components = 3;
17022
+ */
17023
+ components: ComponentHealth[];
17024
+ constructor(data?: PartialMessage<HealthCheckResponse>);
17025
+ static readonly runtime: typeof proto3;
17026
+ static readonly typeName = "transcodely.v1.HealthCheckResponse";
17027
+ static readonly fields: FieldList;
17028
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): HealthCheckResponse;
17029
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): HealthCheckResponse;
17030
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): HealthCheckResponse;
17031
+ static equals(a: HealthCheckResponse | PlainMessage<HealthCheckResponse> | undefined, b: HealthCheckResponse | PlainMessage<HealthCheckResponse> | undefined): boolean;
17032
+ }
17033
+ /**
17034
+ * Health status of an individual component.
17035
+ *
17036
+ * @generated from message transcodely.v1.ComponentHealth
17037
+ */
17038
+ declare class ComponentHealth extends Message<ComponentHealth> {
17039
+ /**
17040
+ * Component name (e.g., "database", "storage", "queue").
17041
+ *
17042
+ * @generated from field: string name = 1;
17043
+ */
17044
+ name: string;
17045
+ /**
17046
+ * Component status.
17047
+ *
17048
+ * @generated from field: transcodely.v1.HealthStatus status = 2;
17049
+ */
17050
+ status: HealthStatus;
17051
+ /**
17052
+ * Optional message with additional details.
17053
+ *
17054
+ * @generated from field: optional string message = 3;
17055
+ */
17056
+ message?: string;
17057
+ constructor(data?: PartialMessage<ComponentHealth>);
17058
+ static readonly runtime: typeof proto3;
17059
+ static readonly typeName = "transcodely.v1.ComponentHealth";
17060
+ static readonly fields: FieldList;
17061
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): ComponentHealth;
17062
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): ComponentHealth;
17063
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): ComponentHealth;
17064
+ static equals(a: ComponentHealth | PlainMessage<ComponentHealth> | undefined, b: ComponentHealth | PlainMessage<ComponentHealth> | undefined): boolean;
17065
+ }
17066
+
17067
+ export { APIConnectionError, APIError, Event as APIEvent, APIKey, API_VERSION, AV1Options, AbortMultipartUploadRequest, App, AppStatus, ArchiveAppRequest, ArchiveOriginRequest, ArchivePresetRequest, AudioCodec, AudioSettings, AudioStreamInfo, AudioTrackConfig, AuthenticationError, AutoABRConfig, AutoProfileDefaults, BYOKConfig, BillingPaymentMethod, BillingPortalSession, BillingProfile, BillingStanding, BillingTreatment, BitrateMode, Budget, BurnInStyle, type CallOptions, CancelJobRequest, CancelJobResponse, CaptionStyle, ChapterPoint, ChapterResult, CheckSlugRequest, CheckSlugResponse, ClipConfig, CompleteMultipartUploadRequest, CompleteMultipartUploadResponse, CompleteUploadRequest, CompleteUploadResponse, CompletedPart, ComponentHealth, ConfirmJobRequest, ConfirmJobResponse, ConflictError, Container, ContentAnalysis, ContentAwareConfig, ContentAwareMode, ContentType, CreateAPIKeyRequest, CreateAPIKeyResponse, CreateAppRequest, CreateAppResponse, CreateBillingPortalSessionRequest, CreateBillingPortalSessionResponse, CreateFromUrlRequest, CreateFromUrlResponse, CreateIngestRuleRequest, CreateIngestRuleResponse, CreateJobRequest, CreateJobResponse, CreateMultipartUploadRequest, CreateMultipartUploadResponse, CreateOrganizationRequest, CreateOrganizationResponse, CreateOriginRequest, CreateOriginResponse, CreatePresetRequest, CreatePresetResponse, CreateUploadRequest, CreateUploadResponse, CreateWebhookEndpointRequest, CreateWebhookEndpointResponse, DASHConfig, DEFAULT_BASE_URL, DEFAULT_CONCURRENCY, DEFAULT_MAX_RETRIES, DEFAULT_PART_SIZE, DEFAULT_RETRY_BASE_DELAY_MS, DEFAULT_TOLERANCE_SECONDS, DRMConfig, DRMSystem, DailyUsage, DeleteIngestRuleRequest, DeleteIngestRuleResponse, DeleteVideoRequest, DeleteWebhookEndpointRequest, DeleteWebhookEndpointResponse, DeliveryFormat, DunningStage, DuplicatePresetRequest, DuplicatePresetResponse, EVENT_ID_HEADER, EnableHostingRequest, EnableHostingResponse, EncryptionScheme, EndpointHealthSummary, ErrorDetails, type EventBase, ExecutionTiming, ExposureThresholdSource, type FieldViolation, GOPAlignmentMode, GcsCredentials, GcsOriginConfig, GetAPIKeyRequest, GetAPIKeyResponse, GetAppRequest, GetAppResponse, GetBillingProfileRequest, GetBillingProfileResponse, GetBudgetRequest, GetBudgetResponse, GetEndpointHealthRequest, GetEndpointHealthResponse, GetIngestRuleRequest, GetIngestRuleResponse, GetInvoiceRequest, GetInvoiceResponse, GetJobRequest, GetJobResponse, GetMeRequest, GetMeResponse, GetMembershipRequest, GetMembershipResponse, GetOrganizationRequest, GetOrganizationResponse, GetOriginRequest, GetOriginResponse, GetOutstandingBalanceRequest, GetOutstandingBalanceResponse, GetPresetBySlugRequest, GetPresetBySlugResponse, GetPresetRequest, GetPresetResponse, GetSpendRequest, GetSpendResponse, GetStatsRequest, GetStatsResponse, GetUpcomingInvoiceRequest, GetUpcomingInvoiceResponse, GetUploadPartUrlsRequest, GetUploadPartUrlsResponse, GetUsageRequest, GetUsageResponse, GetUserRequest, GetUserResponse, GetVideoRequest, GetVideoResponse, H264Options, H265Options, HDRConfig, HDRFormat, HDRMode, HLSConfig, HLSPlaylistType, HLSSegmentFormat, HealthBucket, HealthCheckRequest, HealthCheckResponse, HealthStatus, HostingConfig, HttpCredentials, HttpOriginConfig, IngestRule, IngestRuleAction, IngestRuleFilters, InputMetadata, InvalidRequestError, Invoice, InvoiceLineItem, InvoiceLineType, InvoiceStatus, Job, JobCostBreakdown, JobCostLine, JobCostLineType, JobFee, JobOutput, JobPriority, JobStatus, KeyServerConfig, type KnownWebhookEvent, ListAPIKeysRequest, ListAPIKeysResponse, ListAppsRequest, ListAppsResponse, ListEventsRequest, ListEventsResponse, ListIngestEventsRequest, ListIngestEventsResponse, ListIngestRulesRequest, ListIngestRulesResponse, ListInvoicesRequest, ListInvoicesResponse, ListJobsRequest, ListJobsResponse, ListMembershipsRequest, ListMembershipsResponse, ListOrganizationsRequest, ListOrganizationsResponse, ListOriginsRequest, ListOriginsResponse, ListPresetsRequest, ListPresetsResponse, ListTopVideosRequest, ListTopVideosResponse, ListUsersRequest, ListUsersResponse, ListVideosRequest, ListVideosResponse, ListWebhookDeliveriesRequest, ListWebhookDeliveriesResponse, ListWebhookEndpointsRequest, ListWebhookEndpointsResponse, type LogEvent, MAX_PARTS, MAX_UPLOAD_SIZE_BYTES, MIN_PART_SIZE, Membership, MembershipRole, MembershipStatus, MembershipWithUser, NotFoundError, Organization, OrganizationStatus, Origin, OriginPermission, OriginProvider, OriginRef, OriginStatus, OutputFormat, OutputReport, OutputReportAudio, OutputReportColor, OutputReportContentAware, OutputReportMismatch, OutputReportVerdict, OutputReportVideo, OutputSpec, OutputStatus, OutputVariantResult, OutstandingBalance, Page, PaginationRequest, PaginationResponse, PaymentMethodState, PermissionError, PlayerConfig, PreconditionError, Preset, PresetVariant, PricingSnapshot, type PutFileOptions, QualityTier, R2Jurisdiction, R2OriginConfig, RateLimitError, RemoveMembershipRequest, ReplayIngestEventRequest, ReplayIngestEventResponse, ResendEventRequest, ResendEventResponse, Resolution, RetrieveEventRequest, RetrieveEventResponse, RetrieveWebhookEndpointRequest, RetrieveWebhookEndpointResponse, RevokeAPIKeyRequest, RotateWebhookSecretRequest, RotateWebhookSecretResponse, S3Credentials, S3OriginConfig, SDK_VERSION, SIGNATURE_HEADER, SegmentConfig, SendTestWebhookRequest, SendTestWebhookResponse, SettleOutstandingBalanceRequest, SettleOutstandingBalanceResponse, Settlement, type SpendLimitNotification, StorageEvent, StorageEventSource, StorageEventStatus, StreamingConfig, SubtitleFormat, SubtitleOperation, SubtitleResult, SubtitleStreamInfo, SubtitleTrack, TestIngestRuleRequest, TestIngestRuleResponse, ThumbnailFormat, ThumbnailMode, ThumbnailResult, ThumbnailSpec, ToneMapping, TopVideo, Transcodely, type TranscodelyConfig, TranscodelyError, TrustTier, type UnknownWebhookEvent, UpdateAppRequest, UpdateAppResponse, UpdateBudgetRequest, UpdateBudgetResponse, UpdateHostingConfigRequest, UpdateHostingConfigResponse, UpdateIngestRuleRequest, UpdateIngestRuleResponse, UpdateMeRequest, UpdateMeResponse, UpdateMembershipRoleRequest, UpdateMembershipRoleResponse, UpdateOrganizationRequest, UpdateOrganizationResponse, UpdateOriginRequest, UpdateOriginResponse, UpdatePlayerConfigRequest, UpdatePlayerConfigResponse, UpdatePresetRequest, UpdatePresetResponse, UpdateSpendLimitRequest, UpdateSpendLimitResponse, UpdateVideoRequest, UpdateVideoResponse, UpdateWebhookEndpointRequest, UpdateWebhookEndpointResponse, UploadAbortedError, UploadError, UploadPart, type UploadProgress, type UploadSource, Uploads, UsageSummary, User, UserApprovalStatus, UserOrganization, UserStatus, UserWithOrganizations, VP9Options, ValidateOriginRequest, ValidateOriginResponse, ValidationResult, VariantPricingSnapshot, type VerifyOptions, Video, VideoCodec, VideoRendition, VideoSettings, VideoStatsDay, VideoStatsTotals, VideoStatus, VideoStreamInfo, VideoTextTrack, VideoVariant, VideoVisibility, WEBHOOK_EVENT_TYPES, WatchEventType, WatchJobRequest, WatchJobResponse, WatchVideoRequest, WatchVideoResponse, WatermarkAnchor, WatermarkConfig, WatermarkPixelPlacement, WebhookDelivery, WebhookEndpoint, WebhookError, type WebhookEvent, type WebhookEventType, WebhookPayloadError, WebhookSignatureError, WebhookTimestampError, Webhooks, calculatePartSize, calculateTotalParts, constructEvent, contentTypeForFilename, isEventType, isKnownEvent, toWireJson, verifySignature };