@empiricalrun/playwright-utils 0.61.0 → 0.61.1

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.
@@ -1985,6 +1985,26 @@ export interface paths {
1985
1985
  patch?: never;
1986
1986
  trace?: never;
1987
1987
  };
1988
+ "/api/billing/subscription/checkout": {
1989
+ parameters: {
1990
+ query?: never;
1991
+ header?: never;
1992
+ path?: never;
1993
+ cookie?: never;
1994
+ };
1995
+ get?: never;
1996
+ put?: never;
1997
+ /**
1998
+ * 🛡️ 🧪 Start a Dodo checkout for the org's plan
1999
+ * @description Creates a Dodo hosted checkout that subscribes the scoped project's org to the current Dodo plan (the newest active shared plan with a Dodo product). For orgs without a plan that are not billed in INR. The plan takes effect when Dodo confirms the subscription by webhook.
2000
+ */
2001
+ post: operations["createSubscriptionCheckout"];
2002
+ delete?: never;
2003
+ options?: never;
2004
+ head?: never;
2005
+ patch?: never;
2006
+ trace?: never;
2007
+ };
1988
2008
  "/api/billing/usage-limit": {
1989
2009
  parameters: {
1990
2010
  query?: never;
@@ -2538,7 +2558,7 @@ export interface paths {
2538
2558
  put?: never;
2539
2559
  /**
2540
2560
  * Dodo Payments webhook
2541
- * @description Receives Dodo Payments events directly from Dodo (verified by the Standard Webhooks signature). payment.succeeded events carrying an invoice_id in metadata mirror the payment onto the invoice; everything else is acked and ignored.
2561
+ * @description Receives signature-verified Dodo events. subscription.* events re-fetch the subscription from Dodo and mirror it, with the org's plan assignment. Other events are acknowledged and ignored.
2542
2562
  */
2543
2563
  post: operations["dodoPaymentsWebhook"];
2544
2564
  delete?: never;
@@ -3374,7 +3394,7 @@ export interface paths {
3374
3394
  put?: never;
3375
3395
  /**
3376
3396
  * 🛡️ Create an invoice
3377
- * @description Creates a new invoice for an existing organisation.
3397
+ * @description Creates a new invoice for an existing organisation. Refused for an org with a live Dodo subscription, which Dodo bills instead.
3378
3398
  */
3379
3399
  post: operations["createInvoice"];
3380
3400
  delete?: never;
@@ -3402,7 +3422,7 @@ export interface paths {
3402
3422
  head?: never;
3403
3423
  /**
3404
3424
  * 🛡️ Update an invoice
3405
- * @description Updates fields on an existing invoice.
3425
+ * @description Updates fields on an existing invoice. Moving it to an org with a live Dodo subscription is refused.
3406
3426
  */
3407
3427
  patch: operations["updateInvoice"];
3408
3428
  trace?: never;
@@ -3542,7 +3562,7 @@ export interface paths {
3542
3562
  put?: never;
3543
3563
  /**
3544
3564
  * 🛡️ Send an invoice
3545
- * @description Emails the invoice PDF to the organisation's billing contacts and marks it as sent (unless `is_test_email` is set). On a real send, an unpaid INR invoice without a payment link gets a Razorpay-hosted payment link, stored on the invoice and included in the email.
3565
+ * @description Emails the invoice PDF to the organisation's billing contacts and marks it as sent (unless `is_test_email` is set). On a real send, an unpaid INR invoice without a payment link gets a Razorpay-hosted payment link, stored on the invoice and included in the email. Refused for an org with a live Dodo subscription, which Dodo bills instead.
3546
3566
  */
3547
3567
  post: operations["sendInvoice"];
3548
3568
  delete?: never;
@@ -3571,26 +3591,6 @@ export interface paths {
3571
3591
  patch?: never;
3572
3592
  trace?: never;
3573
3593
  };
3574
- "/api/invoices/org/{id}/checkout-session": {
3575
- parameters: {
3576
- query?: never;
3577
- header?: never;
3578
- path?: never;
3579
- cookie?: never;
3580
- };
3581
- get?: never;
3582
- put?: never;
3583
- /**
3584
- * 🛡️ Create a checkout session to pay an invoice
3585
- * @description Creates a single-use Dodo Payments checkout session for the outstanding amount of one of the scoped project's org's sent invoices. Sessions are not stored; a new one is created per attempt. Payment confirmation arrives via the Dodo webhook, not this endpoint.
3586
- */
3587
- post: operations["createInvoiceCheckoutSession"];
3588
- delete?: never;
3589
- options?: never;
3590
- head?: never;
3591
- patch?: never;
3592
- trace?: never;
3593
- };
3594
3594
  "/api/invoices/org/{id}/pdf/download": {
3595
3595
  parameters: {
3596
3596
  query?: never;
@@ -3651,26 +3651,6 @@ export interface paths {
3651
3651
  patch?: never;
3652
3652
  trace?: never;
3653
3653
  };
3654
- "/api/invoices/org/{id}/tax-invoice/download": {
3655
- parameters: {
3656
- query?: never;
3657
- header?: never;
3658
- path?: never;
3659
- cookie?: never;
3660
- };
3661
- /**
3662
- * 🛡️ Download the tax invoice for a paid invoice
3663
- * @description Streams the payment processor's (Dodo, the merchant of record) tax invoice PDF for the invoice's most recent settling payment.
3664
- */
3665
- get: operations["downloadOrgInvoiceTaxInvoice"];
3666
- put?: never;
3667
- post?: never;
3668
- delete?: never;
3669
- options?: never;
3670
- head?: never;
3671
- patch?: never;
3672
- trace?: never;
3673
- };
3674
3654
  "/api/invoices/reminders/upcoming": {
3675
3655
  parameters: {
3676
3656
  query?: never;
@@ -5155,31 +5135,27 @@ export interface paths {
5155
5135
  patch?: never;
5156
5136
  trace?: never;
5157
5137
  };
5158
- "/api/runner-backends": {
5138
+ "/api/runner-backends/claim": {
5159
5139
  parameters: {
5160
5140
  query?: never;
5161
5141
  header?: never;
5162
5142
  path?: never;
5163
5143
  cookie?: never;
5164
5144
  };
5165
- /**
5166
- * 🛡️ 🧪 List runner backends
5167
- * @description Lists customer-hosted runner backends, optionally for one org.
5168
- */
5169
- get: operations["listRunnerBackends"];
5145
+ get?: never;
5170
5146
  put?: never;
5171
5147
  /**
5172
- * 🛡️ 🧪 Register a runner backend
5173
- * @description Registers an installation as `pending` and returns the external ID its role must require. Run `verify` before linking projects.
5148
+ * 🧪 Call home from an installation's stack
5149
+ * @description Called by the registration Lambda in a Private Runner stack. On Create and Update it records the stack's resources and versions and verifies them; a pending backend that passes becomes active. Delete always succeeds: it releases an unverified claim so the link can be reused, or disables an active backend and moves its projects back to Empirical-hosted runs.
5174
5150
  */
5175
- post: operations["createRunnerBackend"];
5151
+ post: operations["claimRunnerBackend"];
5176
5152
  delete?: never;
5177
5153
  options?: never;
5178
5154
  head?: never;
5179
5155
  patch?: never;
5180
5156
  trace?: never;
5181
5157
  };
5182
- "/api/runner-backends/{id}": {
5158
+ "/api/runner-backends/project": {
5183
5159
  parameters: {
5184
5160
  query?: never;
5185
5161
  header?: never;
@@ -5187,19 +5163,63 @@ export interface paths {
5187
5163
  cookie?: never;
5188
5164
  };
5189
5165
  /**
5190
- * 🛡️ 🧪 Get a runner backend
5191
- * @description Returns one runner backend.
5166
+ * 🧪 Get the scoped project's runner backend
5167
+ * @description Returns the runner backend the scoped project is linked to, including its verification status, or null when the project runs on Empirical-hosted infrastructure.
5192
5168
  */
5193
- get: operations["getRunnerBackend"];
5169
+ get: operations["getProjectRunnerBackend"];
5170
+ put?: never;
5171
+ post?: never;
5172
+ delete?: never;
5173
+ options?: never;
5174
+ head?: never;
5175
+ patch?: never;
5176
+ trace?: never;
5177
+ };
5178
+ "/api/runner-backends/project/{id}": {
5179
+ parameters: {
5180
+ query?: never;
5181
+ header?: never;
5182
+ path?: never;
5183
+ cookie?: never;
5184
+ };
5185
+ get?: never;
5194
5186
  put?: never;
5195
5187
  post?: never;
5188
+ /**
5189
+ * 🧪 Remove a private runner
5190
+ * @description Deletes an unfinished setup or a disconnected runner of the scoped project's organisation that no project uses. Its CloudFormation stack, if one exists, stays in the AWS account until deleted there.
5191
+ */
5192
+ delete: operations["removeProjectRunnerBackend"];
5193
+ options?: never;
5194
+ head?: never;
5195
+ /**
5196
+ * 🧪 Rename a private runner
5197
+ * @description Renames a runner backend of the scoped project's organisation.
5198
+ */
5199
+ patch: operations["renameProjectRunnerBackend"];
5200
+ trace?: never;
5201
+ };
5202
+ "/api/runner-backends/project/{id}/disconnect": {
5203
+ parameters: {
5204
+ query?: never;
5205
+ header?: never;
5206
+ path?: never;
5207
+ cookie?: never;
5208
+ };
5209
+ get?: never;
5210
+ put?: never;
5211
+ /**
5212
+ * 🧪 Disconnect a private runner
5213
+ * @description Stops sending runs to a runner backend of the scoped project's organisation and moves every project on it back to Empirical-hosted runs. The stack stays in the AWS account; delete it there to remove it. Re-enable restores the runner, but not the projects' links.
5214
+ */
5215
+ post: operations["disconnectProjectRunnerBackend"];
5196
5216
  delete?: never;
5197
5217
  options?: never;
5198
5218
  head?: never;
5199
5219
  patch?: never;
5200
5220
  trace?: never;
5201
5221
  };
5202
- "/api/runner-backends/{id}/disable": {
5222
+ "/api/runner-backends/project/{id}/enable": {
5203
5223
  parameters: {
5204
5224
  query?: never;
5205
5225
  header?: never;
@@ -5209,17 +5229,17 @@ export interface paths {
5209
5229
  get?: never;
5210
5230
  put?: never;
5211
5231
  /**
5212
- * 🛡️ 🧪 Disable a runner backend
5213
- * @description Stops new dispatches to the backend immediately: runs of linked projects fail with `dispatch_failed` until it is verified again or the projects are unlinked.
5232
+ * 🧪 Re-enable a disconnected private runner
5233
+ * @description Verifies a disabled runner backend of the scoped project's organisation and makes it active again if every check passes. Projects are not re-linked.
5214
5234
  */
5215
- post: operations["disableRunnerBackend"];
5235
+ post: operations["enableProjectRunnerBackend"];
5216
5236
  delete?: never;
5217
5237
  options?: never;
5218
5238
  head?: never;
5219
5239
  patch?: never;
5220
5240
  trace?: never;
5221
5241
  };
5222
- "/api/runner-backends/{id}/verify": {
5242
+ "/api/runner-backends/project/{id}/registration": {
5223
5243
  parameters: {
5224
5244
  query?: never;
5225
5245
  header?: never;
@@ -5229,17 +5249,17 @@ export interface paths {
5229
5249
  get?: never;
5230
5250
  put?: never;
5231
5251
  /**
5232
- * 🛡️ 🧪 Verify a runner backend
5233
- * @description Assumes the backend's role and makes one read-only call to each queue, the cluster and the log group. On success the backend becomes `active`; on failure its status is unchanged. A disabled backend is re-enabled only by a passing verify.
5252
+ * 🧪 Create a new setup link
5253
+ * @description Mints a new quick-create link for a pending runner backend of the scoped project's organisation, replacing any earlier unused link.
5234
5254
  */
5235
- post: operations["verifyRunnerBackend"];
5255
+ post: operations["createProjectRunnerBackendRegistration"];
5236
5256
  delete?: never;
5237
5257
  options?: never;
5238
5258
  head?: never;
5239
5259
  patch?: never;
5240
5260
  trace?: never;
5241
5261
  };
5242
- "/api/runner-backends/project": {
5262
+ "/api/runner-backends/project/available": {
5243
5263
  parameters: {
5244
5264
  query?: never;
5245
5265
  header?: never;
@@ -5247,10 +5267,10 @@ export interface paths {
5247
5267
  cookie?: never;
5248
5268
  };
5249
5269
  /**
5250
- * ⚙️ 🧪 Get the scoped project's runner backend
5251
- * @description Returns the runner backend the scoped project is linked to, including its verification status, or null when the project runs on Empirical-hosted infrastructure.
5270
+ * 🧪 List the organisation's runner backends
5271
+ * @description Every runner backend of the scoped project's organisation, in any status, so a project can use one another project set up or resume a setup in progress.
5252
5272
  */
5253
- get: operations["getProjectRunnerBackend"];
5273
+ get: operations["listProjectOrgRunnerBackends"];
5254
5274
  put?: never;
5255
5275
  post?: never;
5256
5276
  delete?: never;
@@ -5259,7 +5279,27 @@ export interface paths {
5259
5279
  patch?: never;
5260
5280
  trace?: never;
5261
5281
  };
5262
- "/api/runner-backends/project/verify": {
5282
+ "/api/runner-backends/project/runner-backend": {
5283
+ parameters: {
5284
+ query?: never;
5285
+ header?: never;
5286
+ path?: never;
5287
+ cookie?: never;
5288
+ };
5289
+ get?: never;
5290
+ /**
5291
+ * 🧪 Choose where the project's runs execute
5292
+ * @description Sends the scoped project's new runs to an active runner backend of its organisation, or back to Empirical-hosted infrastructure with null. Runs already created keep their placement.
5293
+ */
5294
+ put: operations["setScopedProjectRunnerBackend"];
5295
+ post?: never;
5296
+ delete?: never;
5297
+ options?: never;
5298
+ head?: never;
5299
+ patch?: never;
5300
+ trace?: never;
5301
+ };
5302
+ "/api/runner-backends/project/setup": {
5263
5303
  parameters: {
5264
5304
  query?: never;
5265
5305
  header?: never;
@@ -5269,17 +5309,17 @@ export interface paths {
5269
5309
  get?: never;
5270
5310
  put?: never;
5271
5311
  /**
5272
- * ⚙️ 🧪 Re-check the scoped project's runner backend
5273
- * @description Runs the same read-only checks as `verify` against the backend the scoped project is linked to and records the result, so a customer can confirm a fix to their role or stack. It never changes the backend's status: a disabled backend is re-enabled only by Empirical.
5312
+ * 🧪 Start setting up a private runner
5313
+ * @description Registers a pending runner backend for the scoped project's organisation in the given AWS account and region, or reuses one whose stack hasn't called home yet or was deleted, and returns a quick-create link for it. The stack activates the backend when it is created.
5274
5314
  */
5275
- post: operations["verifyProjectRunnerBackend"];
5315
+ post: operations["setupProjectRunnerBackend"];
5276
5316
  delete?: never;
5277
5317
  options?: never;
5278
5318
  head?: never;
5279
5319
  patch?: never;
5280
5320
  trace?: never;
5281
5321
  };
5282
- "/api/runner-backends/projects/{project_id}": {
5322
+ "/api/runner-backends/project/verify": {
5283
5323
  parameters: {
5284
5324
  query?: never;
5285
5325
  header?: never;
@@ -5287,12 +5327,12 @@ export interface paths {
5287
5327
  cookie?: never;
5288
5328
  };
5289
5329
  get?: never;
5330
+ put?: never;
5290
5331
  /**
5291
- * 🛡️ 🧪 Set a project's runner backend
5292
- * @description Links a project to an active backend of its organisation, or back to Empirical-hosted with null. Applies to runs created afterwards; runs already created keep their backend.
5332
+ * 🧪 Re-check the scoped project's runner backend
5333
+ * @description Assumes the role of the backend the scoped project is linked to, makes one read-only call to each queue, the cluster and the log group, and records the result, so a customer can confirm a fix to their role or stack. It never changes the backend's status; use `enable` for a disabled one.
5293
5334
  */
5294
- put: operations["setProjectRunnerBackend"];
5295
- post?: never;
5335
+ post: operations["verifyProjectRunnerBackend"];
5296
5336
  delete?: never;
5297
5337
  options?: never;
5298
5338
  head?: never;
@@ -5879,15 +5919,13 @@ export interface components {
5879
5919
  paid_at: string | null;
5880
5920
  /** @description Whether the invoice PDF is available. */
5881
5921
  has_pdf: boolean;
5882
- /** @description Whether a payment-processor tax invoice is available for download. */
5883
- has_tax_invoice: boolean;
5884
5922
  /** @description Whether this invoice can be paid online (unpaid and in a supported currency). */
5885
5923
  payable: boolean;
5886
5924
  /**
5887
- * @description Which provider pays this invoice's currency (USD via Dodo checkout sessions, INR via Razorpay Standard Checkout), or null if none does. Drives the Pay button's checkout flow.
5925
+ * @description Which provider pays this invoice's currency (INR via Razorpay Standard Checkout), or null if none does. Drives the Pay button's checkout flow.
5888
5926
  * @enum {string|null}
5889
5927
  */
5890
- payment_provider: "dodo" | "razorpay" | null;
5928
+ payment_provider: "razorpay" | null;
5891
5929
  /** @description Whether an unpaid invoice is past its due date plus the reminder grace period. Always false for paid invoices. */
5892
5930
  past_reminder_date: boolean;
5893
5931
  };
@@ -5900,22 +5938,6 @@ export interface components {
5900
5938
  message: string;
5901
5939
  };
5902
5940
  };
5903
- InvoiceCheckoutSessionResponse: {
5904
- /** @description Response payload. */
5905
- data: {
5906
- /** @description Single-use hosted checkout URL (expires in 24h). */
5907
- checkout_url: string;
5908
- /** @description Dodo checkout session ID. */
5909
- session_id: string;
5910
- };
5911
- };
5912
- CreateInvoiceCheckoutSessionRequest: {
5913
- /**
5914
- * Format: uri
5915
- * @description Dashboard URL Dodo redirects to after payment (gets payment_id and status query params appended).
5916
- */
5917
- return_url: string;
5918
- };
5919
5941
  InvoiceRazorpayOrderResponse: {
5920
5942
  /** @description Response payload. */
5921
5943
  data: {
@@ -6472,6 +6494,8 @@ export interface components {
6472
6494
  base_price_cents: number;
6473
6495
  /** @description `active` or `retired`. Retired plans keep existing assignments. */
6474
6496
  status: string;
6497
+ /** @description Dodo product that bills this plan by subscription; null when it isn't sold through Dodo. */
6498
+ dodo_product_id: string | null;
6475
6499
  /** @description ISO-8601 creation timestamp. */
6476
6500
  created_at: string;
6477
6501
  /** @description Metered allowances and overage rates. */
@@ -6509,6 +6533,8 @@ export interface components {
6509
6533
  currency?: "usd" | "inr" | "aed";
6510
6534
  /** @description Monthly base price in cents of `currency`. */
6511
6535
  base_price_cents: number;
6536
+ /** @description Dodo product that bills this plan by subscription, in this environment's Dodo mode. New Dodo checkouts use the newest active plan that has one. */
6537
+ dodo_product_id?: string;
6512
6538
  /**
6513
6539
  * @description Metered allowances, in display order.
6514
6540
  * @default []
@@ -6642,10 +6668,134 @@ export interface components {
6642
6668
  metadata?: unknown;
6643
6669
  created_at: string;
6644
6670
  };
6645
- RunnerBackendListResponse: {
6671
+ SubscriptionCheckoutResponse: {
6672
+ /** @description Response payload. */
6673
+ data: {
6674
+ /** @description Dodo hosted checkout to open. It returns to the billing page. */
6675
+ checkout_url: string;
6676
+ };
6677
+ };
6678
+ ClaimRunnerBackendResponse: {
6679
+ /** @description Response payload. */
6680
+ data: {
6681
+ /** @description The registered backend, or null when nothing matched. */
6682
+ runner_backend_id: number | null;
6683
+ /** @enum {string|null} */
6684
+ status: "pending" | "active" | "disabled" | null;
6685
+ /** @description What the call did. */
6686
+ message: string;
6687
+ };
6688
+ };
6689
+ ClaimRunnerBackendBody: {
6690
+ /** @description The token from the installation's registration link. */
6691
+ registration_token: string;
6692
+ /**
6693
+ * @description The CloudFormation event the stack is handling.
6694
+ * @enum {string}
6695
+ */
6696
+ request_type: "Create" | "Update" | "Delete";
6697
+ /** @description ARN of the calling stack. */
6698
+ stack_id: string;
6699
+ /** @description The stack's control-plane role. */
6700
+ role_arn: string;
6701
+ /** @description The stack's ECS cluster. */
6702
+ cluster_name: string;
6703
+ /** @description The stack's worker log group. */
6704
+ log_group_name: string;
6705
+ /** @description The stack's job queue prefix. */
6706
+ queue_prefix: string;
6707
+ /** @description Template release. */
6708
+ stack_version: string;
6709
+ /**
6710
+ * Format: date-time
6711
+ * @description When the template release was published.
6712
+ */
6713
+ stack_released_at?: string;
6714
+ /** @description Worker image. */
6715
+ worker_version: string;
6716
+ /** @description Job protocol version. */
6717
+ protocol_version: string;
6718
+ /** @description Optional features the template supports. */
6719
+ capabilities: string[];
6720
+ };
6721
+ ProjectRunnerBackendDetailResponse: {
6722
+ /** @description Response payload. */
6723
+ data: {
6724
+ /** @description The backend the project's new runs are placed on, or null for Empirical-hosted. */
6725
+ runner_backend: {
6726
+ /** @description Runner backend ID. */
6727
+ id: number;
6728
+ /** @description Organisation that owns the installation. */
6729
+ org_id: number;
6730
+ /** @description Human-readable name. */
6731
+ name: string;
6732
+ /** @description AWS account the installation runs in. */
6733
+ aws_account_id: string;
6734
+ /** @description AWS region of the installation. */
6735
+ region: string;
6736
+ /** @description Role api-worker assumes to drive the plane. */
6737
+ role_arn: string;
6738
+ /** @description ECS cluster name. */
6739
+ cluster_name: string;
6740
+ /** @description CloudWatch log group of the worker. */
6741
+ log_group_name: string;
6742
+ /** @description Worker container name. */
6743
+ container_name: string;
6744
+ /** @description Job queue URLs are `${queue_prefix}-${machineSize}`. */
6745
+ queue_prefix: string;
6746
+ /**
6747
+ * @description `pending` until verified; only `active` backends receive runs.
6748
+ * @enum {string}
6749
+ */
6750
+ status: "pending" | "active" | "disabled";
6751
+ /** @description ISO-8601 time of the last successful verify. */
6752
+ last_verified_at: string | null;
6753
+ /** @description ISO-8601 time of the last verify, manual or scheduled, whatever its outcome. */
6754
+ last_checked_at: string | null;
6755
+ /** @description Outcome of the last verify; null if never run. */
6756
+ last_check_ok: boolean | null;
6757
+ /** @description Every check from the last verify. */
6758
+ last_check_results: components["schemas"]["RunnerBackendCheck"][] | null;
6759
+ /** @description ISO-8601 start of the current run of failed checks; null while passing. A failing check does not change `status`. */
6760
+ check_failing_since: string | null;
6761
+ /** @description Release of the CloudFormation template the installation runs, as its stack last reported. */
6762
+ stack_version: string | null;
6763
+ /** @description ISO-8601 time that release was published, if known. */
6764
+ stack_released_at: string | null;
6765
+ /** @description Worker image the installation runs. */
6766
+ worker_version: string | null;
6767
+ /** @description Job protocol version the installation speaks. */
6768
+ protocol_version: string | null;
6769
+ /** @description Optional features the installation supports. */
6770
+ capabilities: string[];
6771
+ /** @description ARN of the CloudFormation stack that registered the installation. */
6772
+ stack_id: string | null;
6773
+ /** @description ISO-8601 time the installation's stack first called home; null until then. */
6774
+ registration_claimed_at: string | null;
6775
+ /** @description ISO-8601 expiry of the current registration link, if one was minted. Ignored once claimed. */
6776
+ registration_token_expires_at: string | null;
6777
+ /** @description ISO-8601 creation time. */
6778
+ created_at: string;
6779
+ /** @description ISO-8601 last-update time. */
6780
+ updated_at: string;
6781
+ } | null;
6782
+ };
6783
+ };
6784
+ RunnerBackendCheck: {
6785
+ /** @description `assume_role`, `job_queue`, `scaler_trigger_queue`, `ecs_cluster`, `ecs_tasks` or `worker_logs`. */
6786
+ name: string;
6787
+ /** @description Whether the check passed. */
6788
+ ok: boolean;
6789
+ /** @description The resource checked, or the AWS error. */
6790
+ detail: string;
6791
+ };
6792
+ RunnerBackendVerifyResponse: {
6646
6793
  /** @description Response payload. */
6647
6794
  data: {
6648
- runner_backends: components["schemas"]["RunnerBackend"][];
6795
+ /** @description True when every check passed. */
6796
+ verified: boolean;
6797
+ checks: components["schemas"]["RunnerBackendCheck"][];
6798
+ runner_backend: components["schemas"]["RunnerBackend"];
6649
6799
  };
6650
6800
  };
6651
6801
  RunnerBackend: {
@@ -6661,8 +6811,6 @@ export interface components {
6661
6811
  region: string;
6662
6812
  /** @description Role api-worker assumes to drive the plane. */
6663
6813
  role_arn: string;
6664
- /** @description External ID the role's trust policy must require. Give it only to this installation's owner. */
6665
- external_id: string;
6666
6814
  /** @description ECS cluster name. */
6667
6815
  cluster_name: string;
6668
6816
  /** @description CloudWatch log group of the worker. */
@@ -6686,63 +6834,31 @@ export interface components {
6686
6834
  last_check_results: components["schemas"]["RunnerBackendCheck"][] | null;
6687
6835
  /** @description ISO-8601 start of the current run of failed checks; null while passing. A failing check does not change `status`. */
6688
6836
  check_failing_since: string | null;
6837
+ /** @description Release of the CloudFormation template the installation runs, as its stack last reported. */
6838
+ stack_version: string | null;
6839
+ /** @description ISO-8601 time that release was published, if known. */
6840
+ stack_released_at: string | null;
6841
+ /** @description Worker image the installation runs. */
6842
+ worker_version: string | null;
6843
+ /** @description Job protocol version the installation speaks. */
6844
+ protocol_version: string | null;
6845
+ /** @description Optional features the installation supports. */
6846
+ capabilities: string[];
6847
+ /** @description ARN of the CloudFormation stack that registered the installation. */
6848
+ stack_id: string | null;
6849
+ /** @description ISO-8601 time the installation's stack first called home; null until then. */
6850
+ registration_claimed_at: string | null;
6851
+ /** @description ISO-8601 expiry of the current registration link, if one was minted. Ignored once claimed. */
6852
+ registration_token_expires_at: string | null;
6689
6853
  /** @description ISO-8601 creation time. */
6690
6854
  created_at: string;
6691
6855
  /** @description ISO-8601 last-update time. */
6692
6856
  updated_at: string;
6693
6857
  };
6694
- RunnerBackendCheck: {
6695
- /** @description `assume_role`, `job_queue`, `scaler_trigger_queue`, `ecs_cluster`, `ecs_tasks` or `worker_logs`. */
6696
- name: string;
6697
- /** @description Whether the check passed. */
6698
- ok: boolean;
6699
- /** @description The resource checked, or the AWS error. */
6700
- detail: string;
6701
- };
6702
- RunnerBackendResponse: {
6703
- /** @description Response payload. */
6704
- data: {
6705
- runner_backend: components["schemas"]["RunnerBackend"];
6706
- };
6707
- };
6708
- CreateRunnerBackendBody: {
6709
- /** @description Owning organisation. */
6710
- org_id: number;
6711
- /** @description Human-readable name. */
6712
- name: string;
6713
- /** @description 12-digit AWS account ID. */
6714
- aws_account_id: string;
6715
- /** @description AWS region, e.g. `us-east-1`. */
6716
- region: string;
6717
- /** @description ARN of a role named `empirical-private-runner-*` in `aws_account_id`. */
6718
- role_arn: string;
6719
- /** @description ECS cluster name. */
6720
- cluster_name: string;
6721
- /** @description CloudWatch log group of the worker. */
6722
- log_group_name: string;
6723
- /** @description `https://sqs.<region>.amazonaws.com/<account>/<name>`; queues are `${queue_prefix}-${machineSize}`. */
6724
- queue_prefix: string;
6725
- /** @description Worker container name. Defaults to `test-run-worker`. */
6726
- container_name?: string;
6727
- /** @description Only for installations whose role already requires a fixed ID (Empirical's own dogfood). Generated otherwise. */
6728
- external_id?: string;
6729
- };
6730
- ProjectRunnerBackendResponse: {
6731
- /** @description Response payload. */
6732
- data: {
6733
- project_id: number;
6734
- runner_backend_id: number | null;
6735
- };
6736
- };
6737
- SetProjectRunnerBackendBody: {
6738
- /** @description An active backend of the project's organisation, or null for Empirical-hosted. */
6739
- runner_backend_id: number | null;
6740
- };
6741
- ProjectRunnerBackendDetailResponse: {
6858
+ OrgRunnerBackendListResponse: {
6742
6859
  /** @description Response payload. */
6743
6860
  data: {
6744
- /** @description The backend the project's new runs are placed on, or null for Empirical-hosted. */
6745
- runner_backend: {
6861
+ runner_backends: {
6746
6862
  /** @description Runner backend ID. */
6747
6863
  id: number;
6748
6864
  /** @description Organisation that owns the installation. */
@@ -6755,8 +6871,6 @@ export interface components {
6755
6871
  region: string;
6756
6872
  /** @description Role api-worker assumes to drive the plane. */
6757
6873
  role_arn: string;
6758
- /** @description External ID the role's trust policy must require. Give it only to this installation's owner. */
6759
- external_id: string;
6760
6874
  /** @description ECS cluster name. */
6761
6875
  cluster_name: string;
6762
6876
  /** @description CloudWatch log group of the worker. */
@@ -6780,23 +6894,112 @@ export interface components {
6780
6894
  last_check_results: components["schemas"]["RunnerBackendCheck"][] | null;
6781
6895
  /** @description ISO-8601 start of the current run of failed checks; null while passing. A failing check does not change `status`. */
6782
6896
  check_failing_since: string | null;
6897
+ /** @description Release of the CloudFormation template the installation runs, as its stack last reported. */
6898
+ stack_version: string | null;
6899
+ /** @description ISO-8601 time that release was published, if known. */
6900
+ stack_released_at: string | null;
6901
+ /** @description Worker image the installation runs. */
6902
+ worker_version: string | null;
6903
+ /** @description Job protocol version the installation speaks. */
6904
+ protocol_version: string | null;
6905
+ /** @description Optional features the installation supports. */
6906
+ capabilities: string[];
6907
+ /** @description ARN of the CloudFormation stack that registered the installation. */
6908
+ stack_id: string | null;
6909
+ /** @description ISO-8601 time the installation's stack first called home; null until then. */
6910
+ registration_claimed_at: string | null;
6911
+ /** @description ISO-8601 expiry of the current registration link, if one was minted. Ignored once claimed. */
6912
+ registration_token_expires_at: string | null;
6783
6913
  /** @description ISO-8601 creation time. */
6784
6914
  created_at: string;
6785
6915
  /** @description ISO-8601 last-update time. */
6786
6916
  updated_at: string;
6787
- } | null;
6917
+ /** @description Projects whose new runs use this runner. */
6918
+ projects: {
6919
+ id: number;
6920
+ name: string;
6921
+ slug: string;
6922
+ }[];
6923
+ }[];
6788
6924
  };
6789
6925
  };
6790
- RunnerBackendVerifyResponse: {
6926
+ SetupRunnerBackendResponse: {
6791
6927
  /** @description Response payload. */
6792
6928
  data: {
6793
- /** @description True when every check passed. */
6794
- verified: boolean;
6795
- checks: components["schemas"]["RunnerBackendCheck"][];
6796
6929
  runner_backend: components["schemas"]["RunnerBackend"];
6797
- };
6930
+ /** @description Response payload. */
6931
+ registration: {
6932
+ /** @description Credential the installation's stack calls home with. Shown once; Empirical keeps only its hash. */
6933
+ registration_token: string;
6934
+ /** @description ISO-8601 time the link stops working if unused. */
6935
+ expires_at: string;
6936
+ /** @description Release of the template the link installs. */
6937
+ stack_version: string;
6938
+ /** @description The template the link installs. */
6939
+ template_url: string;
6940
+ /** @description AWS console link that opens CloudFormation with the template and Empirical's parameters filled in. */
6941
+ quick_create_url: string;
6942
+ };
6943
+ };
6944
+ };
6945
+ SetupRunnerBackendBody: {
6946
+ /** @description 12-digit AWS account to install the runner in. */
6947
+ aws_account_id: string;
6948
+ /** @description AWS region with a published template, e.g. `us-east-1`. */
6949
+ region: string;
6798
6950
  };
6799
- CreateSystemMessageResponse: {
6951
+ ProjectRunnerBackendResponse: {
6952
+ /** @description Response payload. */
6953
+ data: {
6954
+ project_id: number;
6955
+ runner_backend_id: number | null;
6956
+ };
6957
+ };
6958
+ SetProjectRunnerBackendBody: {
6959
+ /** @description An active backend of the project's organisation, or null for Empirical-hosted. */
6960
+ runner_backend_id: number | null;
6961
+ };
6962
+ RunnerBackendRegistrationResponse: {
6963
+ /** @description Response payload. */
6964
+ data: {
6965
+ /** @description Credential the installation's stack calls home with. Shown once; Empirical keeps only its hash. */
6966
+ registration_token: string;
6967
+ /** @description ISO-8601 time the link stops working if unused. */
6968
+ expires_at: string;
6969
+ /** @description Release of the template the link installs. */
6970
+ stack_version: string;
6971
+ /** @description The template the link installs. */
6972
+ template_url: string;
6973
+ /** @description AWS console link that opens CloudFormation with the template and Empirical's parameters filled in. */
6974
+ quick_create_url: string;
6975
+ };
6976
+ };
6977
+ DisconnectRunnerBackendResponse: {
6978
+ /** @description Response payload. */
6979
+ data: {
6980
+ runner_backend: components["schemas"]["RunnerBackend"];
6981
+ /** @description Projects moved back to Empirical-hosted runs. */
6982
+ unlinked_project_ids: number[];
6983
+ };
6984
+ };
6985
+ RemoveRunnerBackendResponse: {
6986
+ /** @description Response payload. */
6987
+ data: {
6988
+ /** @enum {boolean} */
6989
+ removed: true;
6990
+ };
6991
+ };
6992
+ RunnerBackendResponse: {
6993
+ /** @description Response payload. */
6994
+ data: {
6995
+ runner_backend: components["schemas"]["RunnerBackend"];
6996
+ };
6997
+ };
6998
+ RenameRunnerBackendBody: {
6999
+ /** @description Name shown for the runner in Empirical. */
7000
+ name: string;
7001
+ };
7002
+ CreateSystemMessageResponse: {
6800
7003
  data: {
6801
7004
  system_message: components["schemas"]["SystemMessage"];
6802
7005
  recipients: components["schemas"]["SystemMessageRecipient"][];
@@ -7504,7 +7707,25 @@ export interface components {
7504
7707
  /** @description Opaque agent chat state. */
7505
7708
  chat_state?: unknown;
7506
7709
  /** @description Tests impacted by this session. */
7507
- impacted_tests?: unknown;
7710
+ impacted_tests: {
7711
+ test_case: {
7712
+ name: string;
7713
+ suites: string[];
7714
+ file_path: string;
7715
+ start_line: number;
7716
+ end_line: number;
7717
+ };
7718
+ /** @enum {string} */
7719
+ type: "added" | "removed" | "modified";
7720
+ modified_by: {
7721
+ file_path: string;
7722
+ line: {
7723
+ number: number;
7724
+ /** @enum {string} */
7725
+ type: "added" | "removed" | "modified";
7726
+ };
7727
+ }[] | null;
7728
+ }[];
7508
7729
  /** @description Whether the agent is awaiting user input. */
7509
7730
  ask_user_for_input: boolean | null;
7510
7731
  /** @description Langfuse trace ID. */
@@ -9523,8 +9744,11 @@ export interface components {
9523
9744
  } | null;
9524
9745
  /** @description Number of the session's most recently updated PR, if any. */
9525
9746
  pr_number: number | null;
9526
- /** @description Status of the session's most recently updated PR ('unopened' when it has none). */
9527
- pr_status: string;
9747
+ /**
9748
+ * @description Status of the session's most recently updated PR ('unopened' when it has none).
9749
+ * @enum {string}
9750
+ */
9751
+ pr_status: "unopened" | "open" | "opened" | "closed" | "merged";
9528
9752
  /** @description Name of the owning project. */
9529
9753
  project_name: string | null;
9530
9754
  /** @description Repository name of the owning project. */
@@ -9579,7 +9803,25 @@ export interface components {
9579
9803
  /** @description Opaque agent chat state. */
9580
9804
  chat_state?: unknown;
9581
9805
  /** @description Tests impacted by this session. */
9582
- impacted_tests?: unknown;
9806
+ impacted_tests: {
9807
+ test_case: {
9808
+ name: string;
9809
+ suites: string[];
9810
+ file_path: string;
9811
+ start_line: number;
9812
+ end_line: number;
9813
+ };
9814
+ /** @enum {string} */
9815
+ type: "added" | "removed" | "modified";
9816
+ modified_by: {
9817
+ file_path: string;
9818
+ line: {
9819
+ number: number;
9820
+ /** @enum {string} */
9821
+ type: "added" | "removed" | "modified";
9822
+ };
9823
+ }[] | null;
9824
+ }[];
9583
9825
  /** @description Whether the agent is awaiting user input. */
9584
9826
  ask_user_for_input: boolean | null;
9585
9827
  /** @description Langfuse trace ID. */
@@ -9973,14 +10215,83 @@ export interface components {
9973
10215
  /** @description Response payload. */
9974
10216
  data: {
9975
10217
  /** @description Reporter App installation rows. */
9976
- gh_app_installs: unknown[];
10218
+ gh_app_installs: components["schemas"]["GhReporterAppInstall"][];
10219
+ };
10220
+ };
10221
+ GhReporterAppInstall: {
10222
+ id: number;
10223
+ org_id: number | null;
10224
+ app_installation_id: string | null;
10225
+ gh_organization: string | null;
10226
+ gh_repos: {
10227
+ id: number;
10228
+ node_id: string;
10229
+ name: string;
10230
+ full_name: string;
10231
+ private: boolean;
10232
+ }[] | null;
10233
+ /** @enum {string|null} */
10234
+ installation_status: "requested" | "installed" | null;
10235
+ permissions: {
10236
+ /** @enum {string} */
10237
+ metadata: "read";
10238
+ /** @enum {string} */
10239
+ checks?: "write" | "read";
10240
+ /** @enum {string} */
10241
+ pull_requests?: "write" | "read";
10242
+ /** @enum {string} */
10243
+ contents?: "write" | "read";
10244
+ /** @enum {string} */
10245
+ issues?: "write" | "read";
10246
+ /** @enum {string} */
10247
+ merge_queues?: "write" | "read";
10248
+ /** @enum {string} */
10249
+ repository_custom_properties?: "write" | "read";
10250
+ } & {
10251
+ [key: string]: unknown;
9977
10252
  };
10253
+ created_at: string | null;
10254
+ updated_at: string | null;
9978
10255
  };
9979
10256
  GhReporterInstallResponse: {
9980
10257
  /** @description Response payload. */
9981
10258
  data: {
9982
- /** @description The reporter App installation row. */
9983
- installation?: unknown;
10259
+ /** @description The reporter App installation row, or null if the write matched nothing. */
10260
+ installation: {
10261
+ id: number;
10262
+ org_id: number | null;
10263
+ app_installation_id: string | null;
10264
+ gh_organization: string | null;
10265
+ gh_repos: {
10266
+ id: number;
10267
+ node_id: string;
10268
+ name: string;
10269
+ full_name: string;
10270
+ private: boolean;
10271
+ }[] | null;
10272
+ /** @enum {string|null} */
10273
+ installation_status: "requested" | "installed" | null;
10274
+ permissions: {
10275
+ /** @enum {string} */
10276
+ metadata: "read";
10277
+ /** @enum {string} */
10278
+ checks?: "write" | "read";
10279
+ /** @enum {string} */
10280
+ pull_requests?: "write" | "read";
10281
+ /** @enum {string} */
10282
+ contents?: "write" | "read";
10283
+ /** @enum {string} */
10284
+ issues?: "write" | "read";
10285
+ /** @enum {string} */
10286
+ merge_queues?: "write" | "read";
10287
+ /** @enum {string} */
10288
+ repository_custom_properties?: "write" | "read";
10289
+ } & {
10290
+ [key: string]: unknown;
10291
+ };
10292
+ created_at: string | null;
10293
+ updated_at: string | null;
10294
+ } | null;
9984
10295
  };
9985
10296
  };
9986
10297
  GhReporterDeliveriesResponse: {
@@ -10085,9 +10396,24 @@ export interface components {
10085
10396
  /** @description Response payload. */
10086
10397
  data: {
10087
10398
  /** @description Main App installation rows. */
10088
- gh_app_installs: unknown[];
10399
+ gh_app_installs: components["schemas"]["GhMainAppInstall"][];
10089
10400
  };
10090
10401
  };
10402
+ GhMainAppInstall: {
10403
+ id: number;
10404
+ org_id: number;
10405
+ app_installation_id: string;
10406
+ gh_organization: string | null;
10407
+ gh_repos: {
10408
+ id: number;
10409
+ node_id: string;
10410
+ name: string;
10411
+ full_name: string;
10412
+ private: boolean;
10413
+ }[] | null;
10414
+ created_at: string | null;
10415
+ updated_at: string | null;
10416
+ };
10091
10417
  GhMainMetadataResponse: {
10092
10418
  /** @description Response payload. */
10093
10419
  data: {
@@ -10108,8 +10434,22 @@ export interface components {
10108
10434
  GhMainInstallResponse: {
10109
10435
  /** @description Response payload. */
10110
10436
  data: {
10111
- /** @description The main App installation row. */
10112
- installation?: unknown;
10437
+ /** @description The main App installation row, or null if the write matched nothing. */
10438
+ installation: {
10439
+ id: number;
10440
+ org_id: number;
10441
+ app_installation_id: string;
10442
+ gh_organization: string | null;
10443
+ gh_repos: {
10444
+ id: number;
10445
+ node_id: string;
10446
+ name: string;
10447
+ full_name: string;
10448
+ private: boolean;
10449
+ }[] | null;
10450
+ created_at: string | null;
10451
+ updated_at: string | null;
10452
+ } | null;
10113
10453
  };
10114
10454
  };
10115
10455
  GithubProxyError: {
@@ -12464,6 +12804,13 @@ export interface components {
12464
12804
  id: number;
12465
12805
  title: string | null;
12466
12806
  } | null;
12807
+ /** @description The customer-hosted runner (Private Runner) the run was dispatched to. Null for runs on Empirical's hosted runners. */
12808
+ runner_backend: {
12809
+ id: number;
12810
+ name: string;
12811
+ aws_account_id: string;
12812
+ region: string;
12813
+ } | null;
12467
12814
  /** @description For a pending run held back by its concurrency group (on_conflict=wait), the in-progress run it is waiting on. Null when the run is not pending or nothing blocks it. */
12468
12815
  waiting_on_test_run_id: number | null;
12469
12816
  /** @description First page of ledger-sourced cases, ordered failed → flaky → others so the default 'failed' filter and the failure-first list render correctly on first paint. Shipped inline so the list renders without waiting on a fetch. The client refetches the full set. */
@@ -13104,7 +13451,7 @@ export interface components {
13104
13451
  };
13105
13452
  };
13106
13453
  DodoWebhookAckResponse: {
13107
- /** @description Ack. */
13454
+ /** @description Acknowledgement. */
13108
13455
  message: string;
13109
13456
  };
13110
13457
  RazorpayWebhookAckResponse: {
@@ -19211,6 +19558,53 @@ export interface operations {
19211
19558
  };
19212
19559
  };
19213
19560
  };
19561
+ createSubscriptionCheckout: {
19562
+ parameters: {
19563
+ query?: never;
19564
+ header?: never;
19565
+ path?: never;
19566
+ cookie?: never;
19567
+ };
19568
+ requestBody?: never;
19569
+ responses: {
19570
+ /** @description The checkout. */
19571
+ 200: {
19572
+ headers: {
19573
+ [name: string]: unknown;
19574
+ };
19575
+ content: {
19576
+ "application/json": components["schemas"]["SubscriptionCheckoutResponse"];
19577
+ };
19578
+ };
19579
+ /** @description Payments not configured, INR org, no plan for sale, or no email for the Dodo customer. */
19580
+ 400: {
19581
+ headers: {
19582
+ [name: string]: unknown;
19583
+ };
19584
+ content: {
19585
+ "application/json": components["schemas"]["ErrorResponse"];
19586
+ };
19587
+ };
19588
+ /** @description The project has no org. */
19589
+ 404: {
19590
+ headers: {
19591
+ [name: string]: unknown;
19592
+ };
19593
+ content: {
19594
+ "application/json": components["schemas"]["ErrorResponse"];
19595
+ };
19596
+ };
19597
+ /** @description The org already has a plan or a live subscription. */
19598
+ 409: {
19599
+ headers: {
19600
+ [name: string]: unknown;
19601
+ };
19602
+ content: {
19603
+ "application/json": components["schemas"]["ErrorResponse"];
19604
+ };
19605
+ };
19606
+ };
19607
+ };
19214
19608
  setUsageLimit: {
19215
19609
  parameters: {
19216
19610
  query?: never;
@@ -20599,20 +20993,12 @@ export interface operations {
20599
20993
  requestBody?: {
20600
20994
  content: {
20601
20995
  "application/json": {
20602
- /** @description Event type, e.g. "payment.succeeded". */
20996
+ /** @description Event type, e.g. "subscription.active". */
20603
20997
  type: string;
20604
20998
  /** @description Event payload. */
20605
20999
  data: {
20606
- /** @description Dodo payment ID. */
20607
- payment_id?: string;
20608
- /** @description Charged amount in minor units, tax included. */
20609
- total_amount?: number;
20610
- /** @description Tax portion of total_amount in minor units. */
20611
- tax?: number;
20612
- /** @description Metadata set at checkout session creation. */
20613
- metadata?: {
20614
- [key: string]: string;
20615
- };
21000
+ /** @description Dodo subscription ID. */
21001
+ subscription_id?: string;
20616
21002
  };
20617
21003
  };
20618
21004
  };
@@ -20636,6 +21022,15 @@ export interface operations {
20636
21022
  "application/json": components["schemas"]["ErrorResponse"];
20637
21023
  };
20638
21024
  };
21025
+ /** @description Dodo API credentials are not configured. */
21026
+ 500: {
21027
+ headers: {
21028
+ [name: string]: unknown;
21029
+ };
21030
+ content: {
21031
+ "application/json": components["schemas"]["ErrorResponse"];
21032
+ };
21033
+ };
20639
21034
  };
20640
21035
  };
20641
21036
  listEnvironmentVariables: {
@@ -22706,6 +23101,15 @@ export interface operations {
22706
23101
  "application/json": components["schemas"]["ErrorResponse"] | components["schemas"]["InvoiceSimpleError"];
22707
23102
  };
22708
23103
  };
23104
+ /** @description The organisation is billed by Dodo. */
23105
+ 409: {
23106
+ headers: {
23107
+ [name: string]: unknown;
23108
+ };
23109
+ content: {
23110
+ "application/json": components["schemas"]["ErrorResponse"];
23111
+ };
23112
+ };
22709
23113
  };
22710
23114
  };
22711
23115
  getInvoice: {
@@ -22824,6 +23228,15 @@ export interface operations {
22824
23228
  "application/json": components["schemas"]["ErrorResponse"];
22825
23229
  };
22826
23230
  };
23231
+ /** @description The target organisation is billed by Dodo. */
23232
+ 409: {
23233
+ headers: {
23234
+ [name: string]: unknown;
23235
+ };
23236
+ content: {
23237
+ "application/json": components["schemas"]["ErrorResponse"];
23238
+ };
23239
+ };
22827
23240
  };
22828
23241
  };
22829
23242
  listInvoiceBillingLines: {
@@ -23217,28 +23630,8 @@ export interface operations {
23217
23630
  "application/json": components["schemas"]["ErrorResponse"];
23218
23631
  };
23219
23632
  };
23220
- };
23221
- };
23222
- listOrgInvoices: {
23223
- parameters: {
23224
- query?: never;
23225
- header?: never;
23226
- path?: never;
23227
- cookie?: never;
23228
- };
23229
- requestBody?: never;
23230
- responses: {
23231
- /** @description The org's invoices. */
23232
- 200: {
23233
- headers: {
23234
- [name: string]: unknown;
23235
- };
23236
- content: {
23237
- "application/json": components["schemas"]["OrgInvoiceListResponse"];
23238
- };
23239
- };
23240
- /** @description Invalid request or missing project scope. */
23241
- 400: {
23633
+ /** @description The organisation is billed by Dodo. */
23634
+ 409: {
23242
23635
  headers: {
23243
23636
  [name: string]: unknown;
23244
23637
  };
@@ -23248,32 +23641,25 @@ export interface operations {
23248
23641
  };
23249
23642
  };
23250
23643
  };
23251
- createInvoiceCheckoutSession: {
23644
+ listOrgInvoices: {
23252
23645
  parameters: {
23253
23646
  query?: never;
23254
23647
  header?: never;
23255
- path: {
23256
- /** @description Invoice ID. */
23257
- id: string;
23258
- };
23648
+ path?: never;
23259
23649
  cookie?: never;
23260
23650
  };
23261
- requestBody?: {
23262
- content: {
23263
- "application/json": components["schemas"]["CreateInvoiceCheckoutSessionRequest"];
23264
- };
23265
- };
23651
+ requestBody?: never;
23266
23652
  responses: {
23267
- /** @description The checkout session. */
23653
+ /** @description The org's invoices. */
23268
23654
  200: {
23269
23655
  headers: {
23270
23656
  [name: string]: unknown;
23271
23657
  };
23272
23658
  content: {
23273
- "application/json": components["schemas"]["InvoiceCheckoutSessionResponse"];
23659
+ "application/json": components["schemas"]["OrgInvoiceListResponse"];
23274
23660
  };
23275
23661
  };
23276
- /** @description Invalid request, unsupported currency, or Dodo not configured. */
23662
+ /** @description Invalid request or missing project scope. */
23277
23663
  400: {
23278
23664
  headers: {
23279
23665
  [name: string]: unknown;
@@ -23282,24 +23668,6 @@ export interface operations {
23282
23668
  "application/json": components["schemas"]["ErrorResponse"];
23283
23669
  };
23284
23670
  };
23285
- /** @description Invoice not found. */
23286
- 404: {
23287
- headers: {
23288
- [name: string]: unknown;
23289
- };
23290
- content: {
23291
- "application/json": components["schemas"]["ErrorResponse"];
23292
- };
23293
- };
23294
- /** @description Invoice has no outstanding amount. */
23295
- 409: {
23296
- headers: {
23297
- [name: string]: unknown;
23298
- };
23299
- content: {
23300
- "application/json": components["schemas"]["ErrorResponse"];
23301
- };
23302
- };
23303
23671
  };
23304
23672
  };
23305
23673
  downloadOrgInvoicePdf: {
@@ -23447,59 +23815,18 @@ export interface operations {
23447
23815
  };
23448
23816
  };
23449
23817
  };
23450
- downloadOrgInvoiceTaxInvoice: {
23818
+ listUpcomingInvoiceReminders: {
23451
23819
  parameters: {
23452
- query?: never;
23453
- header?: never;
23454
- path: {
23455
- /** @description Invoice ID. */
23456
- id: string;
23820
+ query?: {
23821
+ /** @description Number of upcoming days to preview. Default 7. */
23822
+ window_days?: string;
23823
+ /** @description Page number (1-indexed). Default 1. */
23824
+ page?: string;
23825
+ /** @description Items per page. Default 50. */
23826
+ per_page?: string;
23457
23827
  };
23458
- cookie?: never;
23459
- };
23460
- requestBody?: never;
23461
- responses: {
23462
- /** @description The tax invoice PDF. */
23463
- 200: {
23464
- headers: {
23465
- [name: string]: unknown;
23466
- };
23467
- content: {
23468
- "application/pdf": string;
23469
- };
23470
- };
23471
- /** @description Invalid invoice id or payments not configured. */
23472
- 400: {
23473
- headers: {
23474
- [name: string]: unknown;
23475
- };
23476
- content: {
23477
- "application/json": components["schemas"]["ErrorResponse"];
23478
- };
23479
- };
23480
- /** @description Invoice or its tax invoice not found. */
23481
- 404: {
23482
- headers: {
23483
- [name: string]: unknown;
23484
- };
23485
- content: {
23486
- "application/json": components["schemas"]["ErrorResponse"];
23487
- };
23488
- };
23489
- };
23490
- };
23491
- listUpcomingInvoiceReminders: {
23492
- parameters: {
23493
- query?: {
23494
- /** @description Number of upcoming days to preview. Default 7. */
23495
- window_days?: string;
23496
- /** @description Page number (1-indexed). Default 1. */
23497
- page?: string;
23498
- /** @description Items per page. Default 50. */
23499
- per_page?: string;
23500
- };
23501
- header?: never;
23502
- path?: never;
23828
+ header?: never;
23829
+ path?: never;
23503
23830
  cookie?: never;
23504
23831
  };
23505
23832
  requestBody?: never;
@@ -25404,7 +25731,7 @@ export interface operations {
25404
25731
  "application/json": components["schemas"]["ErrorResponse"];
25405
25732
  };
25406
25733
  };
25407
- /** @description A plan with this key already exists. */
25734
+ /** @description A plan with this key or Dodo product already exists. */
25408
25735
  409: {
25409
25736
  headers: {
25410
25737
  [name: string]: unknown;
@@ -27401,52 +27728,112 @@ export interface operations {
27401
27728
  };
27402
27729
  };
27403
27730
  };
27404
- listRunnerBackends: {
27731
+ claimRunnerBackend: {
27405
27732
  parameters: {
27406
- query?: {
27407
- /** @description Only this organisation's backends. */
27408
- org_id?: number | null;
27409
- };
27733
+ query?: never;
27410
27734
  header?: never;
27411
27735
  path?: never;
27412
27736
  cookie?: never;
27413
27737
  };
27414
- requestBody?: never;
27738
+ requestBody?: {
27739
+ content: {
27740
+ "application/json": components["schemas"]["ClaimRunnerBackendBody"];
27741
+ };
27742
+ };
27415
27743
  responses: {
27416
- /** @description The runner backends. */
27744
+ /** @description The backend after the call. */
27417
27745
  200: {
27418
27746
  headers: {
27419
27747
  [name: string]: unknown;
27420
27748
  };
27421
27749
  content: {
27422
- "application/json": components["schemas"]["RunnerBackendListResponse"];
27750
+ "application/json": components["schemas"]["ClaimRunnerBackendResponse"];
27751
+ };
27752
+ };
27753
+ /** @description The stack's resources are not where Empirical expects. */
27754
+ 400: {
27755
+ headers: {
27756
+ [name: string]: unknown;
27757
+ };
27758
+ content: {
27759
+ "application/json": components["schemas"]["ErrorResponse"];
27760
+ };
27761
+ };
27762
+ /** @description The stack is in a different account or region than the registration. */
27763
+ 403: {
27764
+ headers: {
27765
+ [name: string]: unknown;
27766
+ };
27767
+ content: {
27768
+ "application/json": components["schemas"]["ErrorResponse"];
27769
+ };
27770
+ };
27771
+ /** @description Unknown registration token. */
27772
+ 404: {
27773
+ headers: {
27774
+ [name: string]: unknown;
27775
+ };
27776
+ content: {
27777
+ "application/json": components["schemas"]["ErrorResponse"];
27778
+ };
27779
+ };
27780
+ /** @description The registration was claimed by another stack. */
27781
+ 409: {
27782
+ headers: {
27783
+ [name: string]: unknown;
27784
+ };
27785
+ content: {
27786
+ "application/json": components["schemas"]["ErrorResponse"];
27787
+ };
27788
+ };
27789
+ /** @description The registration link expired. */
27790
+ 410: {
27791
+ headers: {
27792
+ [name: string]: unknown;
27793
+ };
27794
+ content: {
27795
+ "application/json": components["schemas"]["ErrorResponse"];
27796
+ };
27797
+ };
27798
+ /** @description Empirical assumed the role but a check failed. */
27799
+ 422: {
27800
+ headers: {
27801
+ [name: string]: unknown;
27802
+ };
27803
+ content: {
27804
+ "application/json": components["schemas"]["ErrorResponse"];
27805
+ };
27806
+ };
27807
+ /** @description Empirical cannot assume the role yet; retry. */
27808
+ 503: {
27809
+ headers: {
27810
+ [name: string]: unknown;
27811
+ };
27812
+ content: {
27813
+ "application/json": components["schemas"]["ErrorResponse"];
27423
27814
  };
27424
27815
  };
27425
27816
  };
27426
27817
  };
27427
- createRunnerBackend: {
27818
+ getProjectRunnerBackend: {
27428
27819
  parameters: {
27429
27820
  query?: never;
27430
27821
  header?: never;
27431
27822
  path?: never;
27432
27823
  cookie?: never;
27433
27824
  };
27434
- requestBody?: {
27435
- content: {
27436
- "application/json": components["schemas"]["CreateRunnerBackendBody"];
27437
- };
27438
- };
27825
+ requestBody?: never;
27439
27826
  responses: {
27440
- /** @description The registered backend. */
27827
+ /** @description The project's runner backend, or null. */
27441
27828
  200: {
27442
27829
  headers: {
27443
27830
  [name: string]: unknown;
27444
27831
  };
27445
27832
  content: {
27446
- "application/json": components["schemas"]["RunnerBackendResponse"];
27833
+ "application/json": components["schemas"]["ProjectRunnerBackendDetailResponse"];
27447
27834
  };
27448
27835
  };
27449
- /** @description Invalid registration. */
27836
+ /** @description Missing or invalid project scope. */
27450
27837
  400: {
27451
27838
  headers: {
27452
27839
  [name: string]: unknown;
@@ -27455,21 +27842,75 @@ export interface operations {
27455
27842
  "application/json": components["schemas"]["ErrorResponse"];
27456
27843
  };
27457
27844
  };
27845
+ /** @description Project not found or not accessible. */
27846
+ 404: {
27847
+ headers: {
27848
+ [name: string]: unknown;
27849
+ };
27850
+ content: {
27851
+ "application/json": components["schemas"]["ErrorResponse"];
27852
+ };
27853
+ };
27458
27854
  };
27459
27855
  };
27460
- getRunnerBackend: {
27856
+ removeProjectRunnerBackend: {
27461
27857
  parameters: {
27462
27858
  query?: never;
27463
27859
  header?: never;
27464
27860
  path: {
27465
- /** @description Runner backend ID. */
27861
+ /** @description A runner backend of the project's organisation. */
27466
27862
  id: number | null;
27467
27863
  };
27468
27864
  cookie?: never;
27469
27865
  };
27470
27866
  requestBody?: never;
27471
27867
  responses: {
27472
- /** @description The runner backend. */
27868
+ /** @description The runner was removed. */
27869
+ 200: {
27870
+ headers: {
27871
+ [name: string]: unknown;
27872
+ };
27873
+ content: {
27874
+ "application/json": components["schemas"]["RemoveRunnerBackendResponse"];
27875
+ };
27876
+ };
27877
+ /** @description Runner backend not found in this organisation. */
27878
+ 404: {
27879
+ headers: {
27880
+ [name: string]: unknown;
27881
+ };
27882
+ content: {
27883
+ "application/json": components["schemas"]["ErrorResponse"];
27884
+ };
27885
+ };
27886
+ /** @description The runner is active or still used by a project. */
27887
+ 409: {
27888
+ headers: {
27889
+ [name: string]: unknown;
27890
+ };
27891
+ content: {
27892
+ "application/json": components["schemas"]["ErrorResponse"];
27893
+ };
27894
+ };
27895
+ };
27896
+ };
27897
+ renameProjectRunnerBackend: {
27898
+ parameters: {
27899
+ query?: never;
27900
+ header?: never;
27901
+ path: {
27902
+ /** @description A runner backend of the project's organisation. */
27903
+ id: number | null;
27904
+ };
27905
+ cookie?: never;
27906
+ };
27907
+ requestBody?: {
27908
+ content: {
27909
+ "application/json": components["schemas"]["RenameRunnerBackendBody"];
27910
+ };
27911
+ };
27912
+ responses: {
27913
+ /** @description The renamed runner. */
27473
27914
  200: {
27474
27915
  headers: {
27475
27916
  [name: string]: unknown;
@@ -27478,7 +27919,7 @@ export interface operations {
27478
27919
  "application/json": components["schemas"]["RunnerBackendResponse"];
27479
27920
  };
27480
27921
  };
27481
- /** @description Runner backend not found. */
27922
+ /** @description Runner backend not found in this organisation. */
27482
27923
  404: {
27483
27924
  headers: {
27484
27925
  [name: string]: unknown;
@@ -27489,12 +27930,12 @@ export interface operations {
27489
27930
  };
27490
27931
  };
27491
27932
  };
27492
- disableRunnerBackend: {
27933
+ disconnectProjectRunnerBackend: {
27493
27934
  parameters: {
27494
27935
  query?: never;
27495
27936
  header?: never;
27496
27937
  path: {
27497
- /** @description Runner backend ID. */
27938
+ /** @description A runner backend of the project's organisation. */
27498
27939
  id: number | null;
27499
27940
  };
27500
27941
  cookie?: never;
@@ -27507,10 +27948,10 @@ export interface operations {
27507
27948
  [name: string]: unknown;
27508
27949
  };
27509
27950
  content: {
27510
- "application/json": components["schemas"]["RunnerBackendResponse"];
27951
+ "application/json": components["schemas"]["DisconnectRunnerBackendResponse"];
27511
27952
  };
27512
27953
  };
27513
- /** @description Runner backend not found. */
27954
+ /** @description Runner backend not found in this organisation. */
27514
27955
  404: {
27515
27956
  headers: {
27516
27957
  [name: string]: unknown;
@@ -27521,12 +27962,12 @@ export interface operations {
27521
27962
  };
27522
27963
  };
27523
27964
  };
27524
- verifyRunnerBackend: {
27965
+ enableProjectRunnerBackend: {
27525
27966
  parameters: {
27526
27967
  query?: never;
27527
27968
  header?: never;
27528
27969
  path: {
27529
- /** @description Runner backend ID. */
27970
+ /** @description A runner backend of the project's organisation. */
27530
27971
  id: number | null;
27531
27972
  };
27532
27973
  cookie?: never;
@@ -27542,7 +27983,7 @@ export interface operations {
27542
27983
  "application/json": components["schemas"]["RunnerBackendVerifyResponse"];
27543
27984
  };
27544
27985
  };
27545
- /** @description Runner backend not found. */
27986
+ /** @description Runner backend not found in this organisation. */
27546
27987
  404: {
27547
27988
  headers: {
27548
27989
  [name: string]: unknown;
@@ -27551,27 +27992,39 @@ export interface operations {
27551
27992
  "application/json": components["schemas"]["ErrorResponse"];
27552
27993
  };
27553
27994
  };
27995
+ /** @description The backend is not disabled, or its stack was deleted. */
27996
+ 409: {
27997
+ headers: {
27998
+ [name: string]: unknown;
27999
+ };
28000
+ content: {
28001
+ "application/json": components["schemas"]["ErrorResponse"];
28002
+ };
28003
+ };
27554
28004
  };
27555
28005
  };
27556
- getProjectRunnerBackend: {
28006
+ createProjectRunnerBackendRegistration: {
27557
28007
  parameters: {
27558
28008
  query?: never;
27559
28009
  header?: never;
27560
- path?: never;
28010
+ path: {
28011
+ /** @description A runner backend of the project's organisation. */
28012
+ id: number | null;
28013
+ };
27561
28014
  cookie?: never;
27562
28015
  };
27563
28016
  requestBody?: never;
27564
28017
  responses: {
27565
- /** @description The project's runner backend, or null. */
28018
+ /** @description The registration link. */
27566
28019
  200: {
27567
28020
  headers: {
27568
28021
  [name: string]: unknown;
27569
28022
  };
27570
28023
  content: {
27571
- "application/json": components["schemas"]["ProjectRunnerBackendDetailResponse"];
28024
+ "application/json": components["schemas"]["RunnerBackendRegistrationResponse"];
27572
28025
  };
27573
28026
  };
27574
- /** @description Missing or invalid project scope. */
28027
+ /** @description The backend's region has no published template. */
27575
28028
  400: {
27576
28029
  headers: {
27577
28030
  [name: string]: unknown;
@@ -27580,7 +28033,7 @@ export interface operations {
27580
28033
  "application/json": components["schemas"]["ErrorResponse"];
27581
28034
  };
27582
28035
  };
27583
- /** @description Project not found or not accessible. */
28036
+ /** @description Runner backend not found in this organisation. */
27584
28037
  404: {
27585
28038
  headers: {
27586
28039
  [name: string]: unknown;
@@ -27589,9 +28042,27 @@ export interface operations {
27589
28042
  "application/json": components["schemas"]["ErrorResponse"];
27590
28043
  };
27591
28044
  };
28045
+ /** @description The backend is no longer pending. */
28046
+ 409: {
28047
+ headers: {
28048
+ [name: string]: unknown;
28049
+ };
28050
+ content: {
28051
+ "application/json": components["schemas"]["ErrorResponse"];
28052
+ };
28053
+ };
28054
+ /** @description The published template could not be read. */
28055
+ 502: {
28056
+ headers: {
28057
+ [name: string]: unknown;
28058
+ };
28059
+ content: {
28060
+ "application/json": components["schemas"]["ErrorResponse"];
28061
+ };
28062
+ };
27592
28063
  };
27593
28064
  };
27594
- verifyProjectRunnerBackend: {
28065
+ listProjectOrgRunnerBackends: {
27595
28066
  parameters: {
27596
28067
  query?: never;
27597
28068
  header?: never;
@@ -27600,13 +28071,13 @@ export interface operations {
27600
28071
  };
27601
28072
  requestBody?: never;
27602
28073
  responses: {
27603
- /** @description Every check, and the backend after them. */
28074
+ /** @description The runner backends. */
27604
28075
  200: {
27605
28076
  headers: {
27606
28077
  [name: string]: unknown;
27607
28078
  };
27608
28079
  content: {
27609
- "application/json": components["schemas"]["RunnerBackendVerifyResponse"];
28080
+ "application/json": components["schemas"]["OrgRunnerBackendListResponse"];
27610
28081
  };
27611
28082
  };
27612
28083
  /** @description Missing or invalid project scope. */
@@ -27618,8 +28089,32 @@ export interface operations {
27618
28089
  "application/json": components["schemas"]["ErrorResponse"];
27619
28090
  };
27620
28091
  };
27621
- /** @description Project not found, or it runs on Empirical-hosted. */
27622
- 404: {
28092
+ };
28093
+ };
28094
+ setScopedProjectRunnerBackend: {
28095
+ parameters: {
28096
+ query?: never;
28097
+ header?: never;
28098
+ path?: never;
28099
+ cookie?: never;
28100
+ };
28101
+ requestBody?: {
28102
+ content: {
28103
+ "application/json": components["schemas"]["SetProjectRunnerBackendBody"];
28104
+ };
28105
+ };
28106
+ responses: {
28107
+ /** @description The project's backend. */
28108
+ 200: {
28109
+ headers: {
28110
+ [name: string]: unknown;
28111
+ };
28112
+ content: {
28113
+ "application/json": components["schemas"]["ProjectRunnerBackendResponse"];
28114
+ };
28115
+ };
28116
+ /** @description The backend is not active. */
28117
+ 400: {
27623
28118
  headers: {
27624
28119
  [name: string]: unknown;
27625
28120
  };
@@ -27627,8 +28122,8 @@ export interface operations {
27627
28122
  "application/json": components["schemas"]["ErrorResponse"];
27628
28123
  };
27629
28124
  };
27630
- /** @description The runner backend is disabled. */
27631
- 409: {
28125
+ /** @description Runner backend not found in this organisation. */
28126
+ 404: {
27632
28127
  headers: {
27633
28128
  [name: string]: unknown;
27634
28129
  };
@@ -27638,32 +28133,29 @@ export interface operations {
27638
28133
  };
27639
28134
  };
27640
28135
  };
27641
- setProjectRunnerBackend: {
28136
+ setupProjectRunnerBackend: {
27642
28137
  parameters: {
27643
28138
  query?: never;
27644
28139
  header?: never;
27645
- path: {
27646
- /** @description Project ID. */
27647
- project_id: number | null;
27648
- };
28140
+ path?: never;
27649
28141
  cookie?: never;
27650
28142
  };
27651
28143
  requestBody?: {
27652
28144
  content: {
27653
- "application/json": components["schemas"]["SetProjectRunnerBackendBody"];
28145
+ "application/json": components["schemas"]["SetupRunnerBackendBody"];
27654
28146
  };
27655
28147
  };
27656
28148
  responses: {
27657
- /** @description The project's backend. */
28149
+ /** @description The backend and its link. */
27658
28150
  200: {
27659
28151
  headers: {
27660
28152
  [name: string]: unknown;
27661
28153
  };
27662
28154
  content: {
27663
- "application/json": components["schemas"]["ProjectRunnerBackendResponse"];
28155
+ "application/json": components["schemas"]["SetupRunnerBackendResponse"];
27664
28156
  };
27665
28157
  };
27666
- /** @description The backend belongs to another org or is not active. */
28158
+ /** @description The region has no published template. */
27667
28159
  400: {
27668
28160
  headers: {
27669
28161
  [name: string]: unknown;
@@ -27672,7 +28164,54 @@ export interface operations {
27672
28164
  "application/json": components["schemas"]["ErrorResponse"];
27673
28165
  };
27674
28166
  };
27675
- /** @description Project or runner backend not found. */
28167
+ /** @description A runner is already connected in that account and region, or a disconnected one's stack still exists. */
28168
+ 409: {
28169
+ headers: {
28170
+ [name: string]: unknown;
28171
+ };
28172
+ content: {
28173
+ "application/json": components["schemas"]["ErrorResponse"];
28174
+ };
28175
+ };
28176
+ /** @description The published template could not be read. */
28177
+ 502: {
28178
+ headers: {
28179
+ [name: string]: unknown;
28180
+ };
28181
+ content: {
28182
+ "application/json": components["schemas"]["ErrorResponse"];
28183
+ };
28184
+ };
28185
+ };
28186
+ };
28187
+ verifyProjectRunnerBackend: {
28188
+ parameters: {
28189
+ query?: never;
28190
+ header?: never;
28191
+ path?: never;
28192
+ cookie?: never;
28193
+ };
28194
+ requestBody?: never;
28195
+ responses: {
28196
+ /** @description Every check, and the backend after them. */
28197
+ 200: {
28198
+ headers: {
28199
+ [name: string]: unknown;
28200
+ };
28201
+ content: {
28202
+ "application/json": components["schemas"]["RunnerBackendVerifyResponse"];
28203
+ };
28204
+ };
28205
+ /** @description Missing or invalid project scope. */
28206
+ 400: {
28207
+ headers: {
28208
+ [name: string]: unknown;
28209
+ };
28210
+ content: {
28211
+ "application/json": components["schemas"]["ErrorResponse"];
28212
+ };
28213
+ };
28214
+ /** @description Project not found, or it runs on Empirical-hosted. */
27676
28215
  404: {
27677
28216
  headers: {
27678
28217
  [name: string]: unknown;
@@ -27681,6 +28220,15 @@ export interface operations {
27681
28220
  "application/json": components["schemas"]["ErrorResponse"];
27682
28221
  };
27683
28222
  };
28223
+ /** @description The runner backend is disabled. */
28224
+ 409: {
28225
+ headers: {
28226
+ [name: string]: unknown;
28227
+ };
28228
+ content: {
28229
+ "application/json": components["schemas"]["ErrorResponse"];
28230
+ };
28231
+ };
27684
28232
  };
27685
28233
  };
27686
28234
  listSandboxSnapshots: {