@empiricalrun/playwright-utils 0.61.1 → 0.61.2

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.
@@ -962,6 +962,26 @@ export interface paths {
962
962
  patch?: never;
963
963
  trace?: never;
964
964
  };
965
+ "/api/slack/admin/scope-refresh": {
966
+ parameters: {
967
+ query?: never;
968
+ header?: never;
969
+ path?: never;
970
+ cookie?: never;
971
+ };
972
+ get?: never;
973
+ put?: never;
974
+ /**
975
+ * 🛡️ Complete a Slack scope refresh
976
+ * @description Exchanges the OAuth code from re-authorizing the Slack app on Empirical's own workspace, which applies newly requested scopes. The token is not stored. Super-admin only.
977
+ */
978
+ post: operations["refreshSlackAppScopes"];
979
+ delete?: never;
980
+ options?: never;
981
+ head?: never;
982
+ patch?: never;
983
+ trace?: never;
984
+ };
965
985
  "/api/slack/auth-test": {
966
986
  parameters: {
967
987
  query?: never;
@@ -997,7 +1017,7 @@ export interface paths {
997
1017
  put?: never;
998
1018
  /**
999
1019
  * 🛡️ Create or update a Slack install
1000
- * @description Creates a Slack app install for the org and team, or updates the existing one.
1020
+ * @description Creates a Slack app install for the org and team, or updates the existing one. A signed-in user sends the OAuth code and api-worker exchanges it; installs into Empirical's own workspace are not stored.
1001
1021
  */
1002
1022
  post: operations["upsertSlackInstallation"];
1003
1023
  delete?: never;
@@ -1973,8 +1993,8 @@ export interface paths {
1973
1993
  cookie?: never;
1974
1994
  };
1975
1995
  /**
1976
- * 🛡️ Get the org's usage and cost for a month
1977
- * @description Org-wide usage across all of the scoped project's org projects, against the plan in effect: per-meter usage, overage so far, a month-end projection, and the usage limit.
1996
+ * 🛡️ Get the org's usage and cost for a usage period
1997
+ * @description Org-wide usage across all of the scoped project's org projects, against the plan in effect: per-meter usage, overage so far, a period-end projection, and the usage limit. The period is a UTC calendar month, or the billing cycle for an org on a live Dodo subscription.
1978
1998
  */
1979
1999
  get: operations["getBillingMonthSummary"];
1980
2000
  put?: never;
@@ -1985,6 +2005,46 @@ export interface paths {
1985
2005
  patch?: never;
1986
2006
  trace?: never;
1987
2007
  };
2008
+ "/api/billing/periods": {
2009
+ parameters: {
2010
+ query?: never;
2011
+ header?: never;
2012
+ path?: never;
2013
+ cookie?: never;
2014
+ };
2015
+ /**
2016
+ * 🛡️ List the org's usage periods
2017
+ * @description The org's usage periods up to the current one, latest first: billing cycles back to the subscription start for an org on a live Dodo subscription, calendar months otherwise and before that.
2018
+ */
2019
+ get: operations["listBillingPeriods"];
2020
+ put?: never;
2021
+ post?: never;
2022
+ delete?: never;
2023
+ options?: never;
2024
+ head?: never;
2025
+ patch?: never;
2026
+ trace?: never;
2027
+ };
2028
+ "/api/billing/subscription/{subscription_id}/reconcile": {
2029
+ parameters: {
2030
+ query?: never;
2031
+ header?: never;
2032
+ path?: never;
2033
+ cookie?: never;
2034
+ };
2035
+ /**
2036
+ * 🛡️ 🧪 Compare a subscription's usage with Dodo's events
2037
+ * @description Compares our usage rows with the usage events Dodo has for the subscription's customer in one billing cycle, matched by event id: per-meter totals, plus events missing from Dodo, Dodo events with no usage row, and events whose quantity changed. Read-only; sends nothing. Defaults to the current cycle; a past cycle is named by its end (its renewal date) and starts a month earlier unless cycle_start is given.
2038
+ */
2039
+ get: operations["reconcileSubscriptionUsage"];
2040
+ put?: never;
2041
+ post?: never;
2042
+ delete?: never;
2043
+ options?: never;
2044
+ head?: never;
2045
+ patch?: never;
2046
+ trace?: never;
2047
+ };
1988
2048
  "/api/billing/subscription/checkout": {
1989
2049
  parameters: {
1990
2050
  query?: never;
@@ -2005,6 +2065,66 @@ export interface paths {
2005
2065
  patch?: never;
2006
2066
  trace?: never;
2007
2067
  };
2068
+ "/api/billing/subscription/end": {
2069
+ parameters: {
2070
+ query?: never;
2071
+ header?: never;
2072
+ path?: never;
2073
+ cookie?: never;
2074
+ };
2075
+ get?: never;
2076
+ put?: never;
2077
+ /**
2078
+ * 🛡️ 🧪 End the org's plan now
2079
+ * @description Ends the scoped project's org's Dodo subscription now, with no undo: sends Dodo the usage it is missing, then cancels the subscription, or pauses it when the cycle has usage beyond the plan's allowance (Dodo charges it on pausing; a cron cancels the subscription once that charge succeeds). The plan ends at once, and the org can subscribe again. Emails the org's members and billing contacts. For an active or past-due subscription; an on-hold one must pay first.
2080
+ */
2081
+ post: operations["endSubscription"];
2082
+ delete?: never;
2083
+ options?: never;
2084
+ head?: never;
2085
+ patch?: never;
2086
+ trace?: never;
2087
+ };
2088
+ "/api/billing/subscription/offer": {
2089
+ parameters: {
2090
+ query?: never;
2091
+ header?: never;
2092
+ path?: never;
2093
+ cookie?: never;
2094
+ };
2095
+ /**
2096
+ * 🛡️ 🧪 Get the plan the org can subscribe to
2097
+ * @description Whether the scoped project's org can start a Dodo checkout now (same rules as the checkout endpoint), and the plan's terms if so. The billing page uses it to show its Continue to payment button.
2098
+ */
2099
+ get: operations["getSubscriptionOffer"];
2100
+ put?: never;
2101
+ post?: never;
2102
+ delete?: never;
2103
+ options?: never;
2104
+ head?: never;
2105
+ patch?: never;
2106
+ trace?: never;
2107
+ };
2108
+ "/api/billing/subscription/portal": {
2109
+ parameters: {
2110
+ query?: never;
2111
+ header?: never;
2112
+ path?: never;
2113
+ cookie?: never;
2114
+ };
2115
+ get?: never;
2116
+ put?: never;
2117
+ /**
2118
+ * 🛡️ 🧪 Open the org's Dodo billing portal
2119
+ * @description Creates a Dodo customer portal session for the scoped project's org, where the customer updates their card and downloads Dodo's invoices. A new session per call; nothing is stored. For orgs that have subscribed through Dodo.
2120
+ */
2121
+ post: operations["createSubscriptionPortalSession"];
2122
+ delete?: never;
2123
+ options?: never;
2124
+ head?: never;
2125
+ patch?: never;
2126
+ trace?: never;
2127
+ };
2008
2128
  "/api/billing/usage-limit": {
2009
2129
  parameters: {
2010
2130
  query?: never;
@@ -2862,7 +2982,7 @@ export interface paths {
2862
2982
  put?: never;
2863
2983
  /**
2864
2984
  * ⚙️ Upsert a main App installation
2865
- * @description Records or updates a main App installation for an org.
2985
+ * @description Records or updates a main App installation for an org the caller can access.
2866
2986
  */
2867
2987
  post: operations["upsertMainInstallation"];
2868
2988
  delete?: never;
@@ -3046,7 +3166,7 @@ export interface paths {
3046
3166
  put?: never;
3047
3167
  /**
3048
3168
  * ⚙️ Create a reporter installation
3049
- * @description Records a reporter App installation for an org.
3169
+ * @description Records a reporter App installation for an org the caller can access.
3050
3170
  */
3051
3171
  post: operations["createReporterInstallation"];
3052
3172
  delete?: never;
@@ -3671,6 +3791,26 @@ export interface paths {
3671
3791
  patch?: never;
3672
3792
  trace?: never;
3673
3793
  };
3794
+ "/api/jira/events": {
3795
+ parameters: {
3796
+ query?: never;
3797
+ header?: never;
3798
+ path?: never;
3799
+ cookie?: never;
3800
+ };
3801
+ get?: never;
3802
+ put?: never;
3803
+ /**
3804
+ * Receive a Jira webhook
3805
+ * @description Receives a Jira webhook delivery, resolves the install and project, and ingests issues carrying the `empirical` label as Empirical requests.
3806
+ */
3807
+ post: operations["receiveJiraWebhook"];
3808
+ delete?: never;
3809
+ options?: never;
3810
+ head?: never;
3811
+ patch?: never;
3812
+ trace?: never;
3813
+ };
3674
3814
  "/api/jira/installations": {
3675
3815
  parameters: {
3676
3816
  query?: never;
@@ -3686,7 +3826,7 @@ export interface paths {
3686
3826
  put?: never;
3687
3827
  /**
3688
3828
  * ⚙️ Create or reauthorize a Jira installation
3689
- * @description Stores a Jira app installation, or reauthorizes the existing site while preserving mappings, and optionally registers its webhook.
3829
+ * @description Stores a Jira app installation, or reauthorizes the existing site while preserving mappings, and optionally registers its webhook. A signed-in user sends the OAuth code and api-worker exchanges it.
3690
3830
  */
3691
3831
  post: operations["createJiraInstallation"];
3692
3832
  delete?: never;
@@ -3795,6 +3935,26 @@ export interface paths {
3795
3935
  patch: operations["updateJiraWebhookExpiresAt"];
3796
3936
  trace?: never;
3797
3937
  };
3938
+ "/api/linear/events": {
3939
+ parameters: {
3940
+ query?: never;
3941
+ header?: never;
3942
+ path?: never;
3943
+ cookie?: never;
3944
+ };
3945
+ get?: never;
3946
+ put?: never;
3947
+ /**
3948
+ * Receive a Linear webhook
3949
+ * @description Receives a Linear webhook delivery, verified by its `linear-signature` header, and ingests labelled issues into the resolved project as Empirical requests.
3950
+ */
3951
+ post: operations["receiveLinearWebhook"];
3952
+ delete?: never;
3953
+ options?: never;
3954
+ head?: never;
3955
+ patch?: never;
3956
+ trace?: never;
3957
+ };
3798
3958
  "/api/linear/installations": {
3799
3959
  parameters: {
3800
3960
  query?: never;
@@ -3810,7 +3970,7 @@ export interface paths {
3810
3970
  put?: never;
3811
3971
  /**
3812
3972
  * ⚙️ Create a Linear installation
3813
- * @description Creates or reauthorizes a Linear installation and stores its OAuth tokens.
3973
+ * @description Creates or reauthorizes a Linear installation and stores its OAuth tokens. A signed-in user sends the OAuth code and api-worker exchanges it.
3814
3974
  */
3815
3975
  post: operations["createLinearInstallation"];
3816
3976
  delete?: never;
@@ -4031,6 +4191,26 @@ export interface paths {
4031
4191
  patch?: never;
4032
4192
  trace?: never;
4033
4193
  };
4194
+ "/api/oauth/authorize-url": {
4195
+ parameters: {
4196
+ query?: never;
4197
+ header?: never;
4198
+ path?: never;
4199
+ cookie?: never;
4200
+ };
4201
+ /**
4202
+ * ⚙️ Get an OAuth authorize URL
4203
+ * @description Builds the provider authorize URL (client ID and scopes) for connecting Slack, Linear, Jira or the GitHub reporter app. The caller keeps the state and redirects to the URL.
4204
+ */
4205
+ get: operations["getOAuthAuthorizeUrl"];
4206
+ put?: never;
4207
+ post?: never;
4208
+ delete?: never;
4209
+ options?: never;
4210
+ head?: never;
4211
+ patch?: never;
4212
+ trace?: never;
4213
+ };
4034
4214
  "/api/onboarding/complete": {
4035
4215
  parameters: {
4036
4216
  query?: never;
@@ -4314,7 +4494,7 @@ export interface paths {
4314
4494
  put?: never;
4315
4495
  /**
4316
4496
  * ⚙️ Resolve org membership for a signed-in user
4317
- * @description Grants super-admin to staff emails; for users with no org yet, accepts pending invites for the email and matches org email domains. Returns the user's memberships and super-admin flag. System-to-system callers only.
4497
+ * @description Grants super-admin to staff emails; for users with no org yet, accepts pending invites for the email and matches org email domains. Returns the user's memberships and super-admin flag. A signed-in user resolves their own membership and needs a confirmed email; system callers name the user in the body.
4318
4498
  */
4319
4499
  post: operations["resolveMembership"];
4320
4500
  delete?: never;
@@ -4380,7 +4560,7 @@ export interface paths {
4380
4560
  };
4381
4561
  /**
4382
4562
  * 🛡️ Get the org's plan
4383
- * @description Returns whether the scoped project's org is on a plan (now, or during `month`), and the plan's terms when it is a shared plan.
4563
+ * @description Returns whether the scoped project's org is on a plan (now, or during `month` or `period`), and the plan's terms when it is a shared plan.
4384
4564
  */
4385
4565
  get: operations["getOrgPlan"];
4386
4566
  put?: never;
@@ -5636,7 +5816,7 @@ export interface paths {
5636
5816
  put?: never;
5637
5817
  /**
5638
5818
  * ⚙️ Upsert a GitHub link
5639
- * @description Creates or updates the GitHub account link for the given user. Super-admin only.
5819
+ * @description Creates or updates a GitHub account link. A signed-in user links their own account to the GitHub user who authorized `code`; system callers pass the user and profile directly.
5640
5820
  */
5641
5821
  post: operations["upsertGithubLink"];
5642
5822
  /**
@@ -6390,6 +6570,16 @@ export interface components {
6390
6570
  overage_price_cents: number | null;
6391
6571
  }[];
6392
6572
  } | null;
6573
+ /** @description The org's live Dodo subscription now, or null when it's billed by invoice or has none. */
6574
+ subscription: {
6575
+ /**
6576
+ * @description `past_due` / `on_hold`: the last renewal payment failed and is being retried. A paused subscription, or one whose plan was ended (End plan) whatever its Dodo status, holds no plan, so `subscription` is null.
6577
+ * @enum {string}
6578
+ */
6579
+ status: "active" | "past_due" | "on_hold";
6580
+ /** @description When the subscription next renews (ISO 8601). */
6581
+ next_billing_date: string;
6582
+ } | null;
6393
6583
  };
6394
6584
  };
6395
6585
  PlanAssignmentListResponse: {
@@ -6561,11 +6751,19 @@ export interface components {
6561
6751
  BillingMonthSummaryResponse: {
6562
6752
  /** @description Response payload. */
6563
6753
  data: {
6564
- /** @description Usage month, YYYY-MM (UTC). */
6754
+ /** @description Usage month, YYYY-MM (UTC). For a billing cycle, the month it starts in. */
6565
6755
  month: string;
6756
+ /** @description The period's key (YYYY-MM-DD), to pass as `period`: the 1st for a calendar month, the scheduled start date for a billing cycle. */
6757
+ period_key: string;
6758
+ /**
6759
+ * @description `month`: a UTC calendar month. `cycle`: a Dodo billing cycle [previous_billing_date, next_billing_date).
6760
+ * @enum {string}
6761
+ */
6762
+ period_kind: "month" | "cycle";
6566
6763
  period_start: string;
6567
6764
  /** @description Exclusive (ISO 8601). */
6568
6765
  period_end: string;
6766
+ /** @description Whether this is the current period (month or cycle). */
6569
6767
  is_current_month: boolean;
6570
6768
  /** @description The shared plan in effect; null for no plan or a custom contract. */
6571
6769
  plan: {
@@ -6583,7 +6781,7 @@ export interface components {
6583
6781
  }[];
6584
6782
  overage_cents: number;
6585
6783
  projected_overage_cents: number | null;
6586
- /** @description Overage of the previous usage month, as a guide when picking a limit. Current month only. */
6784
+ /** @description Overage of the previous usage period, as a guide when picking a limit. Current period only. */
6587
6785
  last_month_overage_cents: number | null;
6588
6786
  usage_limit: components["schemas"]["UsageLimit"];
6589
6787
  };
@@ -6593,7 +6791,7 @@ export interface components {
6593
6791
  meter: "ai_credits" | "test_minutes";
6594
6792
  included_qty: number | null;
6595
6793
  overage_price_cents: number | null;
6596
- /** @description Units used so far this month. */
6794
+ /** @description Units used so far this period. */
6597
6795
  used: number;
6598
6796
  /** @description Projected units at month end (trailing 7-day pace); null when too early to project. */
6599
6797
  projected: number | null;
@@ -6603,14 +6801,14 @@ export interface components {
6603
6801
  UsageLimit: {
6604
6802
  /** @description Whether the org's plan supports a usage limit (catalog plans with overage pricing). */
6605
6803
  available: boolean;
6606
- /** @description Most overage allowed per usage month, in cents of the plan currency. Null means no limit. */
6804
+ /** @description Most overage allowed per usage period (calendar month, or Dodo billing cycle), in cents of the plan currency. Null means no limit. */
6607
6805
  cap_cents: number | null;
6608
6806
  /**
6609
- * @description `warning` at 80% of the limit (or, for a $0 limit, 80% of any allowance); `reached` when new work is paused.
6807
+ * @description `warning` once the bill (plan + overage) reaches 80% of plan + cap, skipped when that is at or below the plan price (including a $0 limit); `reached` when new work is paused.
6610
6808
  * @enum {string}
6611
6809
  */
6612
6810
  status: "none" | "ok" | "warning" | "reached";
6613
- /** @description When the limit was reached this month (ISO 8601). */
6811
+ /** @description When the limit was reached this period (ISO 8601). */
6614
6812
  reached_at: string | null;
6615
6813
  updated_at: string | null;
6616
6814
  /** @description Who made a change. */
@@ -6622,19 +6820,37 @@ export interface components {
6622
6820
  name: string | null;
6623
6821
  } | null;
6624
6822
  };
6823
+ BillingPeriodsResponse: {
6824
+ /** @description Response payload. */
6825
+ data: components["schemas"]["BillingPeriod"][];
6826
+ };
6827
+ BillingPeriod: {
6828
+ /** @description Pass as `period` to the month summary (YYYY-MM-DD). */
6829
+ key: string;
6830
+ /**
6831
+ * @description `month`: a UTC calendar month. `cycle`: a Dodo billing cycle [previous_billing_date, next_billing_date).
6832
+ * @enum {string}
6833
+ */
6834
+ kind: "month" | "cycle";
6835
+ /** @description Inclusive (ISO 8601). */
6836
+ start: string;
6837
+ /** @description Exclusive (ISO 8601). */
6838
+ end: string;
6839
+ is_current: boolean;
6840
+ };
6625
6841
  UsageLimitResponse: {
6626
6842
  /** @description Response payload. */
6627
6843
  data: {
6628
6844
  /** @description Whether the org's plan supports a usage limit (catalog plans with overage pricing). */
6629
6845
  available: boolean;
6630
- /** @description Most overage allowed per usage month, in cents of the plan currency. Null means no limit. */
6846
+ /** @description Most overage allowed per usage period (calendar month, or Dodo billing cycle), in cents of the plan currency. Null means no limit. */
6631
6847
  cap_cents: number | null;
6632
6848
  /**
6633
- * @description `warning` at 80% of the limit (or, for a $0 limit, 80% of any allowance); `reached` when new work is paused.
6849
+ * @description `warning` once the bill (plan + overage) reaches 80% of plan + cap, skipped when that is at or below the plan price (including a $0 limit); `reached` when new work is paused.
6634
6850
  * @enum {string}
6635
6851
  */
6636
6852
  status: "none" | "ok" | "warning" | "reached";
6637
- /** @description When the limit was reached this month (ISO 8601). */
6853
+ /** @description When the limit was reached this period (ISO 8601). */
6638
6854
  reached_at: string | null;
6639
6855
  updated_at: string | null;
6640
6856
  /** @description Who made a change. */
@@ -6675,6 +6891,91 @@ export interface components {
6675
6891
  checkout_url: string;
6676
6892
  };
6677
6893
  };
6894
+ SubscriptionOfferResponse: {
6895
+ /** @description Response payload. */
6896
+ data: {
6897
+ /** @description Whether the org can subscribe through Dodo now. */
6898
+ available: boolean;
6899
+ /**
6900
+ * @description Why not, when `available` is false.
6901
+ * @enum {string|null}
6902
+ */
6903
+ reason: "not_configured" | "no_org" | "inr" | "has_plan" | "no_plan" | null;
6904
+ /** @description The plan checkout would subscribe to, when available. */
6905
+ plan: {
6906
+ /** @description Plan name, e.g. `Managed`. */
6907
+ name: string;
6908
+ /** @description Currency of the prices below, e.g. `usd`. */
6909
+ currency: string;
6910
+ /** @description Monthly base price in cents of `currency`. */
6911
+ base_price_cents: number;
6912
+ /** @description Metered allowances and overage rates. */
6913
+ meters: {
6914
+ /** @description Meter key, e.g. `ai_credits` or `test_minutes`. */
6915
+ meter: string;
6916
+ /** @description Units included each month. */
6917
+ included_qty: number | null;
6918
+ /** @description Price per unit above the allowance, in cents of `currency`; may be fractional. */
6919
+ overage_price_cents: number | null;
6920
+ }[];
6921
+ } | null;
6922
+ };
6923
+ };
6924
+ SubscriptionPortalResponse: {
6925
+ /** @description Response payload. */
6926
+ data: {
6927
+ /** @description Short-lived Dodo customer portal session: update the card, download invoices. */
6928
+ portal_url: string;
6929
+ };
6930
+ };
6931
+ SubscriptionEndResponse: {
6932
+ /** @description Response payload. */
6933
+ data: {
6934
+ /**
6935
+ * @description What the subscription became in Dodo: `cancelled` when there was no usage beyond the plan's allowance; `paused` when there was, which Dodo charges on pausing (the subscription is cancelled once that charge succeeds). Either way the plan has ended.
6936
+ * @enum {string}
6937
+ */
6938
+ status: "cancelled" | "paused";
6939
+ /** @description Whether Dodo charges a final payment for this cycle's usage beyond the allowance. */
6940
+ final_charge: boolean;
6941
+ };
6942
+ };
6943
+ SubscriptionUsageReconcileResponse: {
6944
+ /** @description Response payload. */
6945
+ data: {
6946
+ subscription_id: string;
6947
+ cycle_start: string;
6948
+ cycle_end: string;
6949
+ meters: {
6950
+ ai_credits: {
6951
+ /** @description Our usage in the cycle. */
6952
+ ours: number;
6953
+ /** @description What Dodo's events in the cycle add up to. */
6954
+ dodo: number;
6955
+ our_events: number;
6956
+ dodo_events: number;
6957
+ };
6958
+ test_minutes: {
6959
+ /** @description Our usage in the cycle. */
6960
+ ours: number;
6961
+ /** @description What Dodo's events in the cycle add up to. */
6962
+ dodo: number;
6963
+ our_events: number;
6964
+ dodo_events: number;
6965
+ };
6966
+ };
6967
+ /** @description Event ids of our usage rows that Dodo has no event for. */
6968
+ missing: string[];
6969
+ /** @description Dodo event ids in the cycle with no usage row of ours. */
6970
+ extra: string[];
6971
+ /** @description Events whose quantity differs from our usage row's (Dodo keeps the first quantity sent). */
6972
+ changed: {
6973
+ event_id: string;
6974
+ ours: number;
6975
+ dodo: number;
6976
+ }[];
6977
+ };
6978
+ };
6678
6979
  ClaimRunnerBackendResponse: {
6679
6980
  /** @description Response payload. */
6680
6981
  data: {
@@ -8118,11 +8419,11 @@ export interface components {
8118
8419
  ResolveMembershipRequest: {
8119
8420
  /**
8120
8421
  * Format: email
8121
- * @description Verified email of the user.
8422
+ * @description Verified email of the user. Required for system callers; ignored for a signed-in user, whose confirmed email is read server-side.
8122
8423
  */
8123
- email: string;
8124
- /** @description Supabase user id to grant membership to. */
8125
- user_id: string;
8424
+ email?: string;
8425
+ /** @description Supabase user id to grant membership to. Required for system callers; ignored for a signed-in user, who resolves their own. */
8426
+ user_id?: string;
8126
8427
  };
8127
8428
  OrgUpdateResponse: {
8128
8429
  /** @description Response payload. */
@@ -9396,10 +9697,10 @@ export interface components {
9396
9697
  /** @description ISO 8601 creation timestamp. */
9397
9698
  created_at: string | null;
9398
9699
  };
9399
- SlackAppInstallMutationResponse: {
9700
+ SlackAppInstallUpsertResponse: {
9400
9701
  /** @description Whether the write succeeded. */
9401
9702
  success: boolean;
9402
- /** @description The Slack app install. */
9703
+ /** @description The Slack app install; null when the install was into Empirical's own workspace, which is not stored per org. */
9403
9704
  data: {
9404
9705
  /** @description Slack app install ID. */
9405
9706
  id: number;
@@ -9426,7 +9727,15 @@ export interface components {
9426
9727
  team_url: string | null;
9427
9728
  /** @description ISO 8601 creation timestamp. */
9428
9729
  created_at: string | null;
9429
- };
9730
+ } | null;
9731
+ /** @description True when nothing was stored (Empirical's workspace). */
9732
+ skipped?: boolean;
9733
+ };
9734
+ SlackScopeRefreshResponse: {
9735
+ /** @description Whether the refresh succeeded. */
9736
+ success: boolean;
9737
+ /** @description Granted OAuth scopes (CSV). */
9738
+ scope: string;
9430
9739
  };
9431
9740
  SlackAppInstallResponse: {
9432
9741
  /** @description Response payload. */
@@ -9632,6 +9941,38 @@ export interface components {
9632
9941
  /** @description Pull request number in the authenticated project's repository. */
9633
9942
  pr_number: number;
9634
9943
  };
9944
+ SlackAppInstallMutationResponse: {
9945
+ /** @description Whether the write succeeded. */
9946
+ success: boolean;
9947
+ /** @description The Slack app install. */
9948
+ data: {
9949
+ /** @description Slack app install ID. */
9950
+ id: number;
9951
+ /** @description Organisation ID. */
9952
+ org_id: number;
9953
+ /** @description Slack app ID. */
9954
+ slack_app_id: string;
9955
+ /** @description Authorizing Slack user ID. */
9956
+ authed_user_id: string;
9957
+ /** @description OAuth scopes (CSV). */
9958
+ scope: string;
9959
+ /** @description OAuth token type. */
9960
+ token_type: string;
9961
+ /** @description Bot user ID. */
9962
+ bot_user_id: string;
9963
+ /** @description Slack workspace (team) ID. */
9964
+ team_id: string;
9965
+ /** @description Slack workspace name. */
9966
+ team_name: string;
9967
+ /**
9968
+ * Format: uri
9969
+ * @description Slack workspace URL learned from auth.test.
9970
+ */
9971
+ team_url: string | null;
9972
+ /** @description ISO 8601 creation timestamp. */
9973
+ created_at: string | null;
9974
+ };
9975
+ };
9635
9976
  ChatSessionUsersResponse: {
9636
9977
  /** @description Response payload. */
9637
9978
  data: components["schemas"]["ChatSessionUserDetail"][];
@@ -10508,22 +10849,29 @@ export interface components {
10508
10849
  CreateJiraInstallationRequest: {
10509
10850
  /** @description Organisation the installation belongs to. */
10510
10851
  org_id: number;
10511
- /** @description Atlassian cloud ID of the Jira site. */
10512
- jira_cloud_id: string;
10852
+ /** @description OAuth code from Atlassian's redirect. Required for a signed-in user. */
10853
+ code?: string;
10513
10854
  /**
10514
10855
  * Format: uri
10515
- * @description Base URL of the Jira site.
10856
+ * @description Redirect URI the authorize request used; Atlassian requires it to match. Required with `code`.
10516
10857
  */
10517
- jira_site_url: string;
10518
- /** @description OAuth access token. */
10519
- jira_access_token: string;
10520
- /** @description OAuth refresh token. */
10521
- jira_refresh_token: string;
10858
+ redirect_uri?: string;
10859
+ /** @description Atlassian cloud ID. System callers only. */
10860
+ jira_cloud_id?: string;
10861
+ /**
10862
+ * Format: uri
10863
+ * @description Base URL of the Jira site. System callers only.
10864
+ */
10865
+ jira_site_url?: string;
10866
+ /** @description OAuth access token. System callers only. */
10867
+ jira_access_token?: string;
10868
+ /** @description OAuth refresh token. System callers only. */
10869
+ jira_refresh_token?: string;
10522
10870
  /**
10523
10871
  * Format: date-time
10524
- * @description Expiry timestamp of the access token.
10872
+ * @description Expiry of the access token. System callers only.
10525
10873
  */
10526
- jira_access_token_expires_at: string | null;
10874
+ jira_access_token_expires_at?: string | null;
10527
10875
  /** @description When true, register the Jira webhook after install. */
10528
10876
  register_webhook?: boolean;
10529
10877
  };
@@ -10597,6 +10945,9 @@ export interface components {
10597
10945
  /** @description Webhook expiry (ISO 8601), or null. */
10598
10946
  webhookExpiresAt: string | null;
10599
10947
  };
10948
+ RequestIngestionProviderPayload: {
10949
+ [key: string]: unknown;
10950
+ };
10600
10951
  LinearInstallListResponse: {
10601
10952
  /** @description Installations for the organization. */
10602
10953
  data: components["schemas"]["LinearAppInstall"][];
@@ -13879,7 +14230,7 @@ export interface operations {
13879
14230
  "application/json": components["schemas"]["ErrorResponse"];
13880
14231
  };
13881
14232
  };
13882
- /** @description The organisation has an overdue invoice. */
14233
+ /** @description Billing blocked: an overdue invoice, a failed renewal, no active plan, or the spend limit reached. */
13883
14234
  402: {
13884
14235
  headers: {
13885
14236
  [name: string]: unknown;
@@ -14127,7 +14478,7 @@ export interface operations {
14127
14478
  "application/json": components["schemas"]["ErrorResponse"];
14128
14479
  };
14129
14480
  };
14130
- /** @description The organisation has an overdue invoice. */
14481
+ /** @description Billing blocked: an overdue invoice, a failed renewal, no active plan, or the spend limit reached. */
14131
14482
  402: {
14132
14483
  headers: {
14133
14484
  [name: string]: unknown;
@@ -16209,15 +16560,65 @@ export interface operations {
16209
16560
  };
16210
16561
  };
16211
16562
  };
16212
- slackAuthTest: {
16563
+ refreshSlackAppScopes: {
16213
16564
  parameters: {
16214
16565
  query?: never;
16215
16566
  header?: never;
16216
16567
  path?: never;
16217
16568
  cookie?: never;
16218
16569
  };
16219
- requestBody?: never;
16220
- responses: {
16570
+ requestBody?: {
16571
+ content: {
16572
+ "application/json": {
16573
+ /** @description OAuth code from Slack's redirect. */
16574
+ code: string;
16575
+ /**
16576
+ * Format: uri
16577
+ * @description Redirect URI the authorize request used.
16578
+ */
16579
+ redirect_uri: string;
16580
+ };
16581
+ };
16582
+ };
16583
+ responses: {
16584
+ /** @description The scopes were refreshed. */
16585
+ 200: {
16586
+ headers: {
16587
+ [name: string]: unknown;
16588
+ };
16589
+ content: {
16590
+ "application/json": components["schemas"]["SlackScopeRefreshResponse"];
16591
+ };
16592
+ };
16593
+ /** @description The code was for another workspace. */
16594
+ 400: {
16595
+ headers: {
16596
+ [name: string]: unknown;
16597
+ };
16598
+ content: {
16599
+ "application/json": components["schemas"]["ErrorResponse"];
16600
+ };
16601
+ };
16602
+ /** @description Slack rejected the OAuth code. */
16603
+ 401: {
16604
+ headers: {
16605
+ [name: string]: unknown;
16606
+ };
16607
+ content: {
16608
+ "application/json": components["schemas"]["ErrorResponse"];
16609
+ };
16610
+ };
16611
+ };
16612
+ };
16613
+ slackAuthTest: {
16614
+ parameters: {
16615
+ query?: never;
16616
+ header?: never;
16617
+ path?: never;
16618
+ cookie?: never;
16619
+ };
16620
+ requestBody?: never;
16621
+ responses: {
16221
16622
  /** @description The Slack auth.test result. */
16222
16623
  200: {
16223
16624
  headers: {
@@ -16306,22 +16707,29 @@ export interface operations {
16306
16707
  "application/json": {
16307
16708
  /** @description Organisation ID. */
16308
16709
  org_id: number;
16309
- /** @description Slack app ID. */
16310
- slack_app_id: string;
16311
- /** @description Authorizing Slack user ID. */
16312
- authed_user_id: string;
16313
- /** @description OAuth scopes (CSV). */
16314
- scope: string;
16315
- /** @description OAuth token type. */
16316
- token_type: string;
16317
- /** @description OAuth access token. */
16318
- access_token: string;
16319
- /** @description Bot user ID. */
16320
- bot_user_id: string;
16321
- /** @description Slack workspace (team) ID. */
16322
- team_id: string;
16323
- /** @description Slack workspace name. */
16324
- team_name: string;
16710
+ /** @description OAuth code from Slack's redirect. Required for a signed-in user. */
16711
+ code?: string;
16712
+ /**
16713
+ * Format: uri
16714
+ * @description Redirect URI the authorize request used; Slack requires it to match. Required with `code`.
16715
+ */
16716
+ redirect_uri?: string;
16717
+ /** @description Slack app ID. System callers only. */
16718
+ slack_app_id?: string;
16719
+ /** @description Authorizing Slack user ID. System callers only. */
16720
+ authed_user_id?: string;
16721
+ /** @description OAuth scopes (CSV). System callers only. */
16722
+ scope?: string;
16723
+ /** @description OAuth token type. System callers only. */
16724
+ token_type?: string;
16725
+ /** @description OAuth access token. System callers only. */
16726
+ access_token?: string;
16727
+ /** @description Bot user ID. System callers only. */
16728
+ bot_user_id?: string;
16729
+ /** @description Slack workspace (team) ID. System callers only. */
16730
+ team_id?: string;
16731
+ /** @description Slack workspace name. System callers only. */
16732
+ team_name?: string;
16325
16733
  };
16326
16734
  };
16327
16735
  };
@@ -16332,7 +16740,7 @@ export interface operations {
16332
16740
  [name: string]: unknown;
16333
16741
  };
16334
16742
  content: {
16335
- "application/json": components["schemas"]["SlackAppInstallMutationResponse"];
16743
+ "application/json": components["schemas"]["SlackAppInstallUpsertResponse"];
16336
16744
  };
16337
16745
  };
16338
16746
  /** @description Invalid request. */
@@ -16344,6 +16752,15 @@ export interface operations {
16344
16752
  "application/json": components["schemas"]["ErrorResponse"];
16345
16753
  };
16346
16754
  };
16755
+ /** @description Slack rejected the OAuth code. */
16756
+ 401: {
16757
+ headers: {
16758
+ [name: string]: unknown;
16759
+ };
16760
+ content: {
16761
+ "application/json": components["schemas"]["ErrorResponse"];
16762
+ };
16763
+ };
16347
16764
  /** @description Forbidden. */
16348
16765
  403: {
16349
16766
  headers: {
@@ -19520,8 +19937,10 @@ export interface operations {
19520
19937
  getBillingMonthSummary: {
19521
19938
  parameters: {
19522
19939
  query?: {
19523
- /** @description Usage month (YYYY-MM, UTC). Defaults to the current month. */
19940
+ /** @description A UTC calendar month (YYYY-MM), for any org. Defaults to the current period. */
19524
19941
  month?: string;
19942
+ /** @description A usage period by key (YYYY-MM-DD, from `/api/billing/periods`): a calendar month, or a billing cycle for an org on a live Dodo subscription. Defaults to the current period. */
19943
+ period?: string;
19525
19944
  };
19526
19945
  header?: never;
19527
19946
  path?: never;
@@ -19538,7 +19957,48 @@ export interface operations {
19538
19957
  "application/json": components["schemas"]["BillingMonthSummaryResponse"];
19539
19958
  };
19540
19959
  };
19541
- /** @description Invalid month, or missing project scope. */
19960
+ /** @description Invalid month or period, or missing project scope. */
19961
+ 400: {
19962
+ headers: {
19963
+ [name: string]: unknown;
19964
+ };
19965
+ content: {
19966
+ "application/json": components["schemas"]["ErrorResponse"];
19967
+ };
19968
+ };
19969
+ /** @description The project has no org. */
19970
+ 404: {
19971
+ headers: {
19972
+ [name: string]: unknown;
19973
+ };
19974
+ content: {
19975
+ "application/json": components["schemas"]["ErrorResponse"];
19976
+ };
19977
+ };
19978
+ };
19979
+ };
19980
+ listBillingPeriods: {
19981
+ parameters: {
19982
+ query?: {
19983
+ /** @description How many periods. Defaults to 2. */
19984
+ count?: number;
19985
+ };
19986
+ header?: never;
19987
+ path?: never;
19988
+ cookie?: never;
19989
+ };
19990
+ requestBody?: never;
19991
+ responses: {
19992
+ /** @description Usage periods, latest first. */
19993
+ 200: {
19994
+ headers: {
19995
+ [name: string]: unknown;
19996
+ };
19997
+ content: {
19998
+ "application/json": components["schemas"]["BillingPeriodsResponse"];
19999
+ };
20000
+ };
20001
+ /** @description Invalid query, or missing project scope. */
19542
20002
  400: {
19543
20003
  headers: {
19544
20004
  [name: string]: unknown;
@@ -19558,6 +20018,50 @@ export interface operations {
19558
20018
  };
19559
20019
  };
19560
20020
  };
20021
+ reconcileSubscriptionUsage: {
20022
+ parameters: {
20023
+ query?: {
20024
+ cycle_end?: string;
20025
+ cycle_start?: string;
20026
+ };
20027
+ header?: never;
20028
+ path: {
20029
+ /** @description Dodo subscription id. */
20030
+ subscription_id: string;
20031
+ };
20032
+ cookie?: never;
20033
+ };
20034
+ requestBody?: never;
20035
+ responses: {
20036
+ /** @description The reconciliation. */
20037
+ 200: {
20038
+ headers: {
20039
+ [name: string]: unknown;
20040
+ };
20041
+ content: {
20042
+ "application/json": components["schemas"]["SubscriptionUsageReconcileResponse"];
20043
+ };
20044
+ };
20045
+ /** @description Payments are not configured, or an empty cycle. */
20046
+ 400: {
20047
+ headers: {
20048
+ [name: string]: unknown;
20049
+ };
20050
+ content: {
20051
+ "application/json": components["schemas"]["ErrorResponse"];
20052
+ };
20053
+ };
20054
+ /** @description No such subscription. */
20055
+ 404: {
20056
+ headers: {
20057
+ [name: string]: unknown;
20058
+ };
20059
+ content: {
20060
+ "application/json": components["schemas"]["ErrorResponse"];
20061
+ };
20062
+ };
20063
+ };
20064
+ };
19561
20065
  createSubscriptionCheckout: {
19562
20066
  parameters: {
19563
20067
  query?: never;
@@ -19605,6 +20109,111 @@ export interface operations {
19605
20109
  };
19606
20110
  };
19607
20111
  };
20112
+ endSubscription: {
20113
+ parameters: {
20114
+ query?: never;
20115
+ header?: never;
20116
+ path?: never;
20117
+ cookie?: never;
20118
+ };
20119
+ requestBody?: never;
20120
+ responses: {
20121
+ /** @description The plan has ended. */
20122
+ 200: {
20123
+ headers: {
20124
+ [name: string]: unknown;
20125
+ };
20126
+ content: {
20127
+ "application/json": components["schemas"]["SubscriptionEndResponse"];
20128
+ };
20129
+ };
20130
+ /** @description Payments are not configured. */
20131
+ 400: {
20132
+ headers: {
20133
+ [name: string]: unknown;
20134
+ };
20135
+ content: {
20136
+ "application/json": components["schemas"]["ErrorResponse"];
20137
+ };
20138
+ };
20139
+ /** @description The org has no active subscription. */
20140
+ 404: {
20141
+ headers: {
20142
+ [name: string]: unknown;
20143
+ };
20144
+ content: {
20145
+ "application/json": components["schemas"]["ErrorResponse"];
20146
+ };
20147
+ };
20148
+ /** @description The subscription is on hold (pay first), is already being ended, or can't be ended in Dodo right now. */
20149
+ 409: {
20150
+ headers: {
20151
+ [name: string]: unknown;
20152
+ };
20153
+ content: {
20154
+ "application/json": components["schemas"]["ErrorResponse"];
20155
+ };
20156
+ };
20157
+ };
20158
+ };
20159
+ getSubscriptionOffer: {
20160
+ parameters: {
20161
+ query?: never;
20162
+ header?: never;
20163
+ path?: never;
20164
+ cookie?: never;
20165
+ };
20166
+ requestBody?: never;
20167
+ responses: {
20168
+ /** @description The offer. */
20169
+ 200: {
20170
+ headers: {
20171
+ [name: string]: unknown;
20172
+ };
20173
+ content: {
20174
+ "application/json": components["schemas"]["SubscriptionOfferResponse"];
20175
+ };
20176
+ };
20177
+ };
20178
+ };
20179
+ createSubscriptionPortalSession: {
20180
+ parameters: {
20181
+ query?: never;
20182
+ header?: never;
20183
+ path?: never;
20184
+ cookie?: never;
20185
+ };
20186
+ requestBody?: never;
20187
+ responses: {
20188
+ /** @description The portal session. */
20189
+ 200: {
20190
+ headers: {
20191
+ [name: string]: unknown;
20192
+ };
20193
+ content: {
20194
+ "application/json": components["schemas"]["SubscriptionPortalResponse"];
20195
+ };
20196
+ };
20197
+ /** @description Payments are not configured. */
20198
+ 400: {
20199
+ headers: {
20200
+ [name: string]: unknown;
20201
+ };
20202
+ content: {
20203
+ "application/json": components["schemas"]["ErrorResponse"];
20204
+ };
20205
+ };
20206
+ /** @description The org has no Dodo customer. */
20207
+ 404: {
20208
+ headers: {
20209
+ [name: string]: unknown;
20210
+ };
20211
+ content: {
20212
+ "application/json": components["schemas"]["ErrorResponse"];
20213
+ };
20214
+ };
20215
+ };
20216
+ };
19608
20217
  setUsageLimit: {
19609
20218
  parameters: {
19610
20219
  query?: never;
@@ -21902,6 +22511,15 @@ export interface operations {
21902
22511
  "application/json": components["schemas"]["ErrorResponse"];
21903
22512
  };
21904
22513
  };
22514
+ /** @description Caller cannot access the organisation. */
22515
+ 403: {
22516
+ headers: {
22517
+ [name: string]: unknown;
22518
+ };
22519
+ content: {
22520
+ "application/json": components["schemas"]["ErrorResponse"];
22521
+ };
22522
+ };
21905
22523
  };
21906
22524
  };
21907
22525
  getMainInstallationMetadata: {
@@ -22323,6 +22941,15 @@ export interface operations {
22323
22941
  "application/json": components["schemas"]["ErrorResponse"];
22324
22942
  };
22325
22943
  };
22944
+ /** @description Caller cannot access the organisation. */
22945
+ 403: {
22946
+ headers: {
22947
+ [name: string]: unknown;
22948
+ };
22949
+ content: {
22950
+ "application/json": components["schemas"]["ErrorResponse"];
22951
+ };
22952
+ };
22326
22953
  };
22327
22954
  };
22328
22955
  getReporterInstallationMetadata: {
@@ -23842,6 +24469,48 @@ export interface operations {
23842
24469
  };
23843
24470
  };
23844
24471
  };
24472
+ receiveJiraWebhook: {
24473
+ parameters: {
24474
+ query?: never;
24475
+ header?: never;
24476
+ path?: never;
24477
+ cookie?: never;
24478
+ };
24479
+ requestBody?: {
24480
+ content: {
24481
+ "application/json": components["schemas"]["RequestIngestionProviderPayload"];
24482
+ };
24483
+ };
24484
+ responses: {
24485
+ /** @description Webhook processed. */
24486
+ 200: {
24487
+ headers: {
24488
+ [name: string]: unknown;
24489
+ };
24490
+ content: {
24491
+ "application/json": components["schemas"]["JiraWebhookResponse"];
24492
+ };
24493
+ };
24494
+ /** @description Invalid webhook payload. */
24495
+ 400: {
24496
+ headers: {
24497
+ [name: string]: unknown;
24498
+ };
24499
+ content: {
24500
+ "application/json": components["schemas"]["ErrorResponse"];
24501
+ };
24502
+ };
24503
+ /** @description No matching install or project. */
24504
+ 404: {
24505
+ headers: {
24506
+ [name: string]: unknown;
24507
+ };
24508
+ content: {
24509
+ "application/json": components["schemas"]["ErrorResponse"];
24510
+ };
24511
+ };
24512
+ };
24513
+ };
23845
24514
  listJiraInstallations: {
23846
24515
  parameters: {
23847
24516
  query: {
@@ -23914,6 +24583,15 @@ export interface operations {
23914
24583
  "application/json": components["schemas"]["ErrorResponse"];
23915
24584
  };
23916
24585
  };
24586
+ /** @description Atlassian rejected the OAuth code. */
24587
+ 401: {
24588
+ headers: {
24589
+ [name: string]: unknown;
24590
+ };
24591
+ content: {
24592
+ "application/json": components["schemas"]["ErrorResponse"];
24593
+ };
24594
+ };
23917
24595
  /** @description Caller cannot access the organisation. */
23918
24596
  403: {
23919
24597
  headers: {
@@ -24147,6 +24825,57 @@ export interface operations {
24147
24825
  };
24148
24826
  };
24149
24827
  };
24828
+ receiveLinearWebhook: {
24829
+ parameters: {
24830
+ query?: never;
24831
+ header?: never;
24832
+ path?: never;
24833
+ cookie?: never;
24834
+ };
24835
+ requestBody?: {
24836
+ content: {
24837
+ "application/json": components["schemas"]["RequestIngestionProviderPayload"];
24838
+ };
24839
+ };
24840
+ responses: {
24841
+ /** @description Webhook accepted. */
24842
+ 200: {
24843
+ headers: {
24844
+ [name: string]: unknown;
24845
+ };
24846
+ content: {
24847
+ "application/json": components["schemas"]["LinearWebhookResponse"];
24848
+ };
24849
+ };
24850
+ /** @description Invalid webhook payload. */
24851
+ 400: {
24852
+ headers: {
24853
+ [name: string]: unknown;
24854
+ };
24855
+ content: {
24856
+ "application/json": components["schemas"]["ErrorResponse"];
24857
+ };
24858
+ };
24859
+ /** @description Invalid signature. */
24860
+ 401: {
24861
+ headers: {
24862
+ [name: string]: unknown;
24863
+ };
24864
+ content: {
24865
+ "application/json": components["schemas"]["ErrorResponse"];
24866
+ };
24867
+ };
24868
+ /** @description No matching install or project. */
24869
+ 404: {
24870
+ headers: {
24871
+ [name: string]: unknown;
24872
+ };
24873
+ content: {
24874
+ "application/json": components["schemas"]["ErrorResponse"];
24875
+ };
24876
+ };
24877
+ };
24878
+ };
24150
24879
  listLinearInstallations: {
24151
24880
  parameters: {
24152
24881
  query: {
@@ -24200,20 +24929,27 @@ export interface operations {
24200
24929
  "application/json": {
24201
24930
  /** @description Organization the installation belongs to. */
24202
24931
  org_id: number;
24203
- /** @description Linear app user (actor) id. */
24204
- linear_app_user_id: string;
24205
- /** @description Linear organization id. */
24206
- linear_organization_id: string;
24207
- /** @description OAuth access token for the Linear API. */
24208
- linear_access_token: string;
24209
- /** @description OAuth refresh token for the Linear API. */
24932
+ /** @description OAuth code from Linear's redirect. Required for a signed-in user. */
24933
+ code?: string;
24934
+ /**
24935
+ * Format: uri
24936
+ * @description Redirect URI the authorize request used; Linear requires it to match. Required with `code`.
24937
+ */
24938
+ redirect_uri?: string;
24939
+ /** @description Linear app user (actor) id. System callers only. */
24940
+ linear_app_user_id?: string;
24941
+ /** @description Linear organization id. System callers only. */
24942
+ linear_organization_id?: string;
24943
+ /** @description OAuth access token. System callers only. */
24944
+ linear_access_token?: string;
24945
+ /** @description OAuth refresh token. System callers only. */
24210
24946
  linear_refresh_token?: string;
24211
24947
  /**
24212
24948
  * Format: date-time
24213
- * @description Expiry of the access token.
24949
+ * @description Expiry of the access token. System callers only.
24214
24950
  */
24215
- linear_access_token_expires_at: string | null;
24216
- /** @description Cached Linear organization/team metadata. */
24951
+ linear_access_token_expires_at?: string | null;
24952
+ /** @description Cached Linear organization/team metadata. System callers only; built from Linear for users. */
24217
24953
  metadata?: {
24218
24954
  organization: {
24219
24955
  name: string;
@@ -24251,6 +24987,15 @@ export interface operations {
24251
24987
  "application/json": components["schemas"]["ErrorResponse"];
24252
24988
  };
24253
24989
  };
24990
+ /** @description Linear rejected the OAuth code. */
24991
+ 401: {
24992
+ headers: {
24993
+ [name: string]: unknown;
24994
+ };
24995
+ content: {
24996
+ "application/json": components["schemas"]["ErrorResponse"];
24997
+ };
24998
+ };
24254
24999
  /** @description Forbidden. */
24255
25000
  403: {
24256
25001
  headers: {
@@ -24822,6 +25567,58 @@ export interface operations {
24822
25567
  };
24823
25568
  };
24824
25569
  };
25570
+ getOAuthAuthorizeUrl: {
25571
+ parameters: {
25572
+ query: {
25573
+ /** @description OAuth provider. */
25574
+ provider: "slack" | "linear" | "jira" | "github";
25575
+ /** @description The dashboard callback the provider returns to. */
25576
+ redirect_uri: string;
25577
+ /** @description CSRF state, echoed back to the callback. */
25578
+ state: string;
25579
+ /** @description Slack only: pins the install to a workspace, so re-auth updates it instead of showing a picker. */
25580
+ team?: string;
25581
+ };
25582
+ header?: never;
25583
+ path?: never;
25584
+ cookie?: never;
25585
+ };
25586
+ requestBody?: never;
25587
+ responses: {
25588
+ /** @description The authorize URL. */
25589
+ 200: {
25590
+ headers: {
25591
+ [name: string]: unknown;
25592
+ };
25593
+ content: {
25594
+ "application/json": {
25595
+ data: {
25596
+ /** @description The provider's authorize URL. */
25597
+ url: string;
25598
+ };
25599
+ };
25600
+ };
25601
+ };
25602
+ /** @description Invalid request. */
25603
+ 400: {
25604
+ headers: {
25605
+ [name: string]: unknown;
25606
+ };
25607
+ content: {
25608
+ "application/json": components["schemas"]["ErrorResponse"];
25609
+ };
25610
+ };
25611
+ /** @description The provider's client ID is not configured. */
25612
+ 500: {
25613
+ headers: {
25614
+ [name: string]: unknown;
25615
+ };
25616
+ content: {
25617
+ "application/json": components["schemas"]["ErrorResponse"];
25618
+ };
25619
+ };
25620
+ };
25621
+ };
24825
25622
  completeOnboarding: {
24826
25623
  parameters: {
24827
25624
  query?: never;
@@ -25486,6 +26283,15 @@ export interface operations {
25486
26283
  "application/json": components["schemas"]["ErrorResponse"];
25487
26284
  };
25488
26285
  };
26286
+ /** @description The user's email is not confirmed. */
26287
+ 403: {
26288
+ headers: {
26289
+ [name: string]: unknown;
26290
+ };
26291
+ content: {
26292
+ "application/json": components["schemas"]["ErrorResponse"];
26293
+ };
26294
+ };
25489
26295
  };
25490
26296
  };
25491
26297
  listPlanAssignments: {
@@ -25650,6 +26456,8 @@ export interface operations {
25650
26456
  query?: {
25651
26457
  /** @description Usage month (YYYY-MM, UTC). Returns the plan in effect at the end of that month, or now for the current month. Defaults to now. */
25652
26458
  month?: string;
26459
+ /** @description Usage period key (YYYY-MM-DD, from `/api/billing/periods`). Returns the plan in effect at the end of that period, or now for the current period. */
26460
+ period?: string;
25653
26461
  };
25654
26462
  header?: never;
25655
26463
  path?: never;
@@ -25666,7 +26474,7 @@ export interface operations {
25666
26474
  "application/json": components["schemas"]["OrgPlanResponse"];
25667
26475
  };
25668
26476
  };
25669
- /** @description Invalid month, or missing project scope. */
26477
+ /** @description Invalid month or period, or missing project scope. */
25670
26478
  400: {
25671
26479
  headers: {
25672
26480
  [name: string]: unknown;
@@ -28954,12 +29762,14 @@ export interface operations {
28954
29762
  requestBody?: {
28955
29763
  content: {
28956
29764
  "application/json": {
28957
- /** @description User ID to link the GitHub account to. */
28958
- user_id: string;
28959
- /** @description GitHub numeric user ID. */
28960
- github_user_id: string;
28961
- /** @description GitHub login/username. */
28962
- github_username: string;
29765
+ /** @description OAuth code from GitHub's redirect to the reporter app callback. Required for a signed-in user, whose account is linked to the GitHub user who authorized it. */
29766
+ code?: string;
29767
+ /** @description User ID to link the GitHub account to. System callers only. */
29768
+ user_id?: string;
29769
+ /** @description GitHub numeric user ID. System callers only. */
29770
+ github_user_id?: string;
29771
+ /** @description GitHub login/username. System callers only. */
29772
+ github_username?: string;
28963
29773
  /** @description GitHub display name. */
28964
29774
  github_display_name?: string | null;
28965
29775
  /** @description GitHub avatar URL. */
@@ -28988,6 +29798,15 @@ export interface operations {
28988
29798
  "application/json": components["schemas"]["ErrorResponse"];
28989
29799
  };
28990
29800
  };
29801
+ /** @description GitHub rejected the OAuth code. */
29802
+ 401: {
29803
+ headers: {
29804
+ [name: string]: unknown;
29805
+ };
29806
+ content: {
29807
+ "application/json": components["schemas"]["ErrorResponse"];
29808
+ };
29809
+ };
28991
29810
  };
28992
29811
  };
28993
29812
  deleteMyGithubLink: {