@faable/auth-sdk 2.7.89 → 2.7.91

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.
@@ -4242,6 +4242,213 @@ export interface paths {
4242
4242
  patch?: never;
4243
4243
  trace?: never;
4244
4244
  };
4245
+ "/me/grants": {
4246
+ parameters: {
4247
+ query?: never;
4248
+ header?: never;
4249
+ path?: never;
4250
+ cookie?: never;
4251
+ };
4252
+ /**
4253
+ * Apps the signed-in user has connected
4254
+ * @description The live grants of the session user: each app they allowed on the consent screen, what it can do and what they picked (e.g. the project).
4255
+ */
4256
+ get: {
4257
+ parameters: {
4258
+ query?: never;
4259
+ header?: never;
4260
+ path?: never;
4261
+ cookie?: never;
4262
+ };
4263
+ requestBody?: never;
4264
+ responses: {
4265
+ /** @description Default Response */
4266
+ 200: {
4267
+ headers: {
4268
+ [name: string]: unknown;
4269
+ };
4270
+ content: {
4271
+ "application/json": {
4272
+ data: {
4273
+ id: string;
4274
+ client: {
4275
+ name: string;
4276
+ logo_uri?: string;
4277
+ client_uri?: string;
4278
+ metadata_document_url?: string;
4279
+ };
4280
+ resource: string;
4281
+ scopes: string[];
4282
+ options?: {
4283
+ [key: string]: string;
4284
+ };
4285
+ created_at: string;
4286
+ last_used_at?: string;
4287
+ }[];
4288
+ };
4289
+ };
4290
+ };
4291
+ /** @description `not_logged_in` — There is no signed-in session for this request. */
4292
+ 401: {
4293
+ headers: {
4294
+ [name: string]: unknown;
4295
+ };
4296
+ content: {
4297
+ "application/json": components["schemas"]["ErrorResponse"] & {
4298
+ /** @enum {string} */
4299
+ error_code?: "not_logged_in";
4300
+ };
4301
+ };
4302
+ };
4303
+ /** @description `account_not_found` — No Auth Account matches the request (domain, header or token). */
4304
+ 404: {
4305
+ headers: {
4306
+ [name: string]: unknown;
4307
+ };
4308
+ content: {
4309
+ "application/json": components["schemas"]["ErrorResponse"] & {
4310
+ /** @enum {string} */
4311
+ error_code?: "account_not_found";
4312
+ };
4313
+ };
4314
+ };
4315
+ /** @description `too_many_requests` — Rate limit exceeded. Honour the `Retry-After` header. */
4316
+ 429: {
4317
+ headers: {
4318
+ [name: string]: unknown;
4319
+ };
4320
+ content: {
4321
+ "application/json": components["schemas"]["ErrorResponse"] & {
4322
+ /** @enum {string} */
4323
+ error_code?: "too_many_requests";
4324
+ };
4325
+ };
4326
+ };
4327
+ /** @description `internal_error` — Unexpected server error. Retry later; the request id is logged. */
4328
+ 500: {
4329
+ headers: {
4330
+ [name: string]: unknown;
4331
+ };
4332
+ content: {
4333
+ "application/json": components["schemas"]["ErrorResponse"] & {
4334
+ /** @enum {string} */
4335
+ error_code?: "internal_error";
4336
+ };
4337
+ };
4338
+ };
4339
+ };
4340
+ };
4341
+ put?: never;
4342
+ post?: never;
4343
+ delete?: never;
4344
+ options?: never;
4345
+ head?: never;
4346
+ patch?: never;
4347
+ trace?: never;
4348
+ };
4349
+ "/me/grants/{grant_id}": {
4350
+ parameters: {
4351
+ query?: never;
4352
+ header?: never;
4353
+ path?: never;
4354
+ cookie?: never;
4355
+ };
4356
+ get?: never;
4357
+ put?: never;
4358
+ post?: never;
4359
+ /**
4360
+ * Disconnect an app
4361
+ * @description Revokes one of the session user’s grants. The app loses access at its next token refresh (within an hour), and has to ask again to reconnect.
4362
+ */
4363
+ delete: {
4364
+ parameters: {
4365
+ query?: never;
4366
+ header?: never;
4367
+ path: {
4368
+ grant_id: string;
4369
+ };
4370
+ cookie?: never;
4371
+ };
4372
+ requestBody?: never;
4373
+ responses: {
4374
+ /** @description Default Response */
4375
+ 200: {
4376
+ headers: {
4377
+ [name: string]: unknown;
4378
+ };
4379
+ content?: never;
4380
+ };
4381
+ /** @description `validation_error` — The body, query or path failed schema validation. `details.issues` lists each failing field. */
4382
+ 400: {
4383
+ headers: {
4384
+ [name: string]: unknown;
4385
+ };
4386
+ content: {
4387
+ "application/json": components["schemas"]["ErrorResponse"] & {
4388
+ /** @enum {string} */
4389
+ error_code?: "validation_error";
4390
+ };
4391
+ };
4392
+ };
4393
+ /** @description `not_logged_in` — There is no signed-in session for this request. */
4394
+ 401: {
4395
+ headers: {
4396
+ [name: string]: unknown;
4397
+ };
4398
+ content: {
4399
+ "application/json": components["schemas"]["ErrorResponse"] & {
4400
+ /** @enum {string} */
4401
+ error_code?: "not_logged_in";
4402
+ };
4403
+ };
4404
+ };
4405
+ /**
4406
+ * @description `not_found` — The resource does not exist in this account.
4407
+ *
4408
+ * `account_not_found` — No Auth Account matches the request (domain, header or token).
4409
+ */
4410
+ 404: {
4411
+ headers: {
4412
+ [name: string]: unknown;
4413
+ };
4414
+ content: {
4415
+ "application/json": components["schemas"]["ErrorResponse"] & {
4416
+ /** @enum {string} */
4417
+ error_code?: "not_found" | "account_not_found";
4418
+ };
4419
+ };
4420
+ };
4421
+ /** @description `too_many_requests` — Rate limit exceeded. Honour the `Retry-After` header. */
4422
+ 429: {
4423
+ headers: {
4424
+ [name: string]: unknown;
4425
+ };
4426
+ content: {
4427
+ "application/json": components["schemas"]["ErrorResponse"] & {
4428
+ /** @enum {string} */
4429
+ error_code?: "too_many_requests";
4430
+ };
4431
+ };
4432
+ };
4433
+ /** @description `internal_error` — Unexpected server error. Retry later; the request id is logged. */
4434
+ 500: {
4435
+ headers: {
4436
+ [name: string]: unknown;
4437
+ };
4438
+ content: {
4439
+ "application/json": components["schemas"]["ErrorResponse"] & {
4440
+ /** @enum {string} */
4441
+ error_code?: "internal_error";
4442
+ };
4443
+ };
4444
+ };
4445
+ };
4446
+ };
4447
+ options?: never;
4448
+ head?: never;
4449
+ patch?: never;
4450
+ trace?: never;
4451
+ };
4245
4452
  "/me": {
4246
4453
  parameters: {
4247
4454
  query?: never;
@@ -4614,6 +4821,26 @@ export interface paths {
4614
4821
  patch?: never;
4615
4822
  trace?: never;
4616
4823
  };
4824
+ "/.well-known/oauth-authorization-server": {
4825
+ parameters: {
4826
+ query?: never;
4827
+ header?: never;
4828
+ path?: never;
4829
+ cookie?: never;
4830
+ };
4831
+ /**
4832
+ * OAuth 2.0 Authorization Server Metadata (RFC 8414)
4833
+ * @description The same provider metadata as the OpenID Connect Discovery document, at the RFC 8414 location that OAuth 2.0 and MCP clients query.
4834
+ */
4835
+ get: operations["oauth/authorizationServerMetadata"];
4836
+ put?: never;
4837
+ post?: never;
4838
+ delete?: never;
4839
+ options?: never;
4840
+ head?: never;
4841
+ patch?: never;
4842
+ trace?: never;
4843
+ };
4617
4844
  "/.well-known/jwks.json": {
4618
4845
  parameters: {
4619
4846
  query?: never;
@@ -4641,24 +4868,327 @@ export interface paths {
4641
4868
  path?: never;
4642
4869
  cookie?: never;
4643
4870
  };
4644
- /**
4645
- * OpenID Connect UserInfo endpoint
4646
- * @description Returns claims about the authenticated User. Authentication is via a Bearer access token (RFC 6750). Returned claims are filtered by the `scope` claim of the access token (OIDC §5.3.2). The response always contains `sub`. See https://openid.net/specs/openid-connect-core-1_0.html#UserInfo.
4647
- */
4648
- get: operations["oauth/userinfo"];
4649
- put?: never;
4650
- /**
4651
- * OpenID Connect UserInfo endpoint (POST)
4652
- * @description Same as `GET /userinfo`. Provided for clients that prefer to send the Bearer token in a POST body or are required to by spec compliance audits.
4653
- */
4654
- post: operations["oauth/userinfoPost"];
4871
+ /**
4872
+ * OpenID Connect UserInfo endpoint
4873
+ * @description Returns claims about the authenticated User. Authentication is via a Bearer access token (RFC 6750). Returned claims are filtered by the `scope` claim of the access token (OIDC §5.3.2). The response always contains `sub`. See https://openid.net/specs/openid-connect-core-1_0.html#UserInfo.
4874
+ */
4875
+ get: operations["oauth/userinfo"];
4876
+ put?: never;
4877
+ /**
4878
+ * OpenID Connect UserInfo endpoint (POST)
4879
+ * @description Same as `GET /userinfo`. Provided for clients that prefer to send the Bearer token in a POST body or are required to by spec compliance audits.
4880
+ */
4881
+ post: operations["oauth/userinfoPost"];
4882
+ delete?: never;
4883
+ options?: never;
4884
+ head?: never;
4885
+ patch?: never;
4886
+ trace?: never;
4887
+ };
4888
+ "/oidc/register": {
4889
+ parameters: {
4890
+ query?: never;
4891
+ header?: never;
4892
+ path?: never;
4893
+ cookie?: never;
4894
+ };
4895
+ get?: never;
4896
+ put?: never;
4897
+ /**
4898
+ * OpenID Connect Dynamic Client Registration
4899
+ * @description Register a new OAuth/OIDC client dynamically (OIDC Dynamic Client Registration 1.0 / RFC 7591). The new client is bound to the Account resolved from the request context. Only when the tenant has `dynamic_client_registration_enabled`; otherwise `registration_disabled` (403).
4900
+ */
4901
+ post: operations["oauth/register"];
4902
+ delete?: never;
4903
+ options?: never;
4904
+ head?: never;
4905
+ patch?: never;
4906
+ trace?: never;
4907
+ };
4908
+ "/consent/context": {
4909
+ parameters: {
4910
+ query?: never;
4911
+ header?: never;
4912
+ path?: never;
4913
+ cookie?: never;
4914
+ };
4915
+ /**
4916
+ * What the consent screen shows
4917
+ * @description For a login parked on the consent screen: the client asking (name, logo, where it redirects), the user, the API and permissions requested, and — when the API offers one — the choice the user has to make (e.g. which project).
4918
+ */
4919
+ get: {
4920
+ parameters: {
4921
+ query: {
4922
+ state: string;
4923
+ };
4924
+ header?: never;
4925
+ path?: never;
4926
+ cookie?: never;
4927
+ };
4928
+ requestBody?: never;
4929
+ responses: {
4930
+ /** @description Default Response */
4931
+ 200: {
4932
+ headers: {
4933
+ [name: string]: unknown;
4934
+ };
4935
+ content: {
4936
+ "application/json": {
4937
+ account: {
4938
+ name?: string;
4939
+ };
4940
+ client: {
4941
+ name: string;
4942
+ logo_uri?: string;
4943
+ client_uri?: string;
4944
+ redirect_host?: string;
4945
+ localhost_only: boolean;
4946
+ metadata_document_url?: string;
4947
+ };
4948
+ user: {
4949
+ email?: string;
4950
+ name?: string;
4951
+ };
4952
+ resource?: {
4953
+ identifier: string;
4954
+ name: string;
4955
+ };
4956
+ scopes: {
4957
+ value: string;
4958
+ description: string;
4959
+ }[];
4960
+ choice?: {
4961
+ label: string;
4962
+ options: {
4963
+ id: string;
4964
+ name: string;
4965
+ }[];
4966
+ };
4967
+ };
4968
+ };
4969
+ };
4970
+ /**
4971
+ * @description `invalid_state` — The `state` is missing, expired, or does not describe a resumable step.
4972
+ *
4973
+ * `validation_error` — The body, query or path failed schema validation. `details.issues` lists each failing field.
4974
+ */
4975
+ 400: {
4976
+ headers: {
4977
+ [name: string]: unknown;
4978
+ };
4979
+ content: {
4980
+ "application/json": components["schemas"]["ErrorResponse"] & {
4981
+ /** @enum {string} */
4982
+ error_code?: "invalid_state" | "validation_error";
4983
+ };
4984
+ };
4985
+ };
4986
+ /**
4987
+ * @description `state_mismatch` — The `state` belongs to another account, session, client or ceremony.
4988
+ *
4989
+ * `session_missing` — The session that started this login no longer exists.
4990
+ */
4991
+ 401: {
4992
+ headers: {
4993
+ [name: string]: unknown;
4994
+ };
4995
+ content: {
4996
+ "application/json": components["schemas"]["ErrorResponse"] & {
4997
+ /** @enum {string} */
4998
+ error_code?: "state_mismatch" | "session_missing";
4999
+ };
5000
+ };
5001
+ };
5002
+ /** @description `account_not_found` — No Auth Account matches the request (domain, header or token). */
5003
+ 404: {
5004
+ headers: {
5005
+ [name: string]: unknown;
5006
+ };
5007
+ content: {
5008
+ "application/json": components["schemas"]["ErrorResponse"] & {
5009
+ /** @enum {string} */
5010
+ error_code?: "account_not_found";
5011
+ };
5012
+ };
5013
+ };
5014
+ /** @description `too_many_requests` — Rate limit exceeded. Honour the `Retry-After` header. */
5015
+ 429: {
5016
+ headers: {
5017
+ [name: string]: unknown;
5018
+ };
5019
+ content: {
5020
+ "application/json": components["schemas"]["ErrorResponse"] & {
5021
+ /** @enum {string} */
5022
+ error_code?: "too_many_requests";
5023
+ };
5024
+ };
5025
+ };
5026
+ /** @description `internal_error` — Unexpected server error. Retry later; the request id is logged. */
5027
+ 500: {
5028
+ headers: {
5029
+ [name: string]: unknown;
5030
+ };
5031
+ content: {
5032
+ "application/json": components["schemas"]["ErrorResponse"] & {
5033
+ /** @enum {string} */
5034
+ error_code?: "internal_error";
5035
+ };
5036
+ };
5037
+ };
5038
+ /** @description `consent_options_unavailable` — The consent screen could not load the choices from the API being authorized (its `consent_options.url`). Try again in a moment. */
5039
+ 502: {
5040
+ headers: {
5041
+ [name: string]: unknown;
5042
+ };
5043
+ content: {
5044
+ "application/json": components["schemas"]["ErrorResponse"] & {
5045
+ /** @enum {string} */
5046
+ error_code?: "consent_options_unavailable";
5047
+ };
5048
+ };
5049
+ };
5050
+ };
5051
+ };
5052
+ put?: never;
5053
+ post?: never;
5054
+ delete?: never;
5055
+ options?: never;
5056
+ head?: never;
5057
+ patch?: never;
5058
+ trace?: never;
5059
+ };
5060
+ "/consent": {
5061
+ parameters: {
5062
+ query?: never;
5063
+ header?: never;
5064
+ path?: never;
5065
+ cookie?: never;
5066
+ };
5067
+ get?: never;
5068
+ put?: never;
5069
+ /**
5070
+ * Allow or deny a client on the consent screen
5071
+ * @description Records the decision and returns where the browser goes next: on `allow`, on to the client with its code (the grant is remembered, so the screen is not shown again for the same permissions); on `deny`, back to the client with `error=access_denied`. `choice` is required when the consent context offered one, and must be one of its options.
5072
+ */
5073
+ post: {
5074
+ parameters: {
5075
+ query?: never;
5076
+ header?: never;
5077
+ path?: never;
5078
+ cookie?: never;
5079
+ };
5080
+ requestBody: {
5081
+ content: {
5082
+ "application/json": {
5083
+ state: string;
5084
+ decision: "allow" | "deny";
5085
+ choice?: string;
5086
+ };
5087
+ };
5088
+ };
5089
+ responses: {
5090
+ /** @description Default Response */
5091
+ 200: {
5092
+ headers: {
5093
+ [name: string]: unknown;
5094
+ };
5095
+ content: {
5096
+ "application/json": {
5097
+ redirect_url: string;
5098
+ };
5099
+ };
5100
+ };
5101
+ /**
5102
+ * @description `invalid_state` — The `state` is missing, expired, or does not describe a resumable step.
5103
+ *
5104
+ * `consent_choice_invalid` — The choice sent with the consent decision is not one the API offered for this user.
5105
+ *
5106
+ * `validation_error` — The body, query or path failed schema validation. `details.issues` lists each failing field.
5107
+ */
5108
+ 400: {
5109
+ headers: {
5110
+ [name: string]: unknown;
5111
+ };
5112
+ content: {
5113
+ "application/json": components["schemas"]["ErrorResponse"] & {
5114
+ /** @enum {string} */
5115
+ error_code?: "invalid_state" | "consent_choice_invalid" | "validation_error";
5116
+ };
5117
+ };
5118
+ };
5119
+ /**
5120
+ * @description `state_mismatch` — The `state` belongs to another account, session, client or ceremony.
5121
+ *
5122
+ * `session_missing` — The session that started this login no longer exists.
5123
+ */
5124
+ 401: {
5125
+ headers: {
5126
+ [name: string]: unknown;
5127
+ };
5128
+ content: {
5129
+ "application/json": components["schemas"]["ErrorResponse"] & {
5130
+ /** @enum {string} */
5131
+ error_code?: "state_mismatch" | "session_missing";
5132
+ };
5133
+ };
5134
+ };
5135
+ /** @description `account_not_found` — No Auth Account matches the request (domain, header or token). */
5136
+ 404: {
5137
+ headers: {
5138
+ [name: string]: unknown;
5139
+ };
5140
+ content: {
5141
+ "application/json": components["schemas"]["ErrorResponse"] & {
5142
+ /** @enum {string} */
5143
+ error_code?: "account_not_found";
5144
+ };
5145
+ };
5146
+ };
5147
+ /** @description `too_many_requests` — Rate limit exceeded. Honour the `Retry-After` header. */
5148
+ 429: {
5149
+ headers: {
5150
+ [name: string]: unknown;
5151
+ };
5152
+ content: {
5153
+ "application/json": components["schemas"]["ErrorResponse"] & {
5154
+ /** @enum {string} */
5155
+ error_code?: "too_many_requests";
5156
+ };
5157
+ };
5158
+ };
5159
+ /** @description `internal_error` — Unexpected server error. Retry later; the request id is logged. */
5160
+ 500: {
5161
+ headers: {
5162
+ [name: string]: unknown;
5163
+ };
5164
+ content: {
5165
+ "application/json": components["schemas"]["ErrorResponse"] & {
5166
+ /** @enum {string} */
5167
+ error_code?: "internal_error";
5168
+ };
5169
+ };
5170
+ };
5171
+ /** @description `consent_options_unavailable` — The consent screen could not load the choices from the API being authorized (its `consent_options.url`). Try again in a moment. */
5172
+ 502: {
5173
+ headers: {
5174
+ [name: string]: unknown;
5175
+ };
5176
+ content: {
5177
+ "application/json": components["schemas"]["ErrorResponse"] & {
5178
+ /** @enum {string} */
5179
+ error_code?: "consent_options_unavailable";
5180
+ };
5181
+ };
5182
+ };
5183
+ };
5184
+ };
4655
5185
  delete?: never;
4656
5186
  options?: never;
4657
5187
  head?: never;
4658
5188
  patch?: never;
4659
5189
  trace?: never;
4660
5190
  };
4661
- "/oidc/register": {
5191
+ "/oauth/revoke": {
4662
5192
  parameters: {
4663
5193
  query?: never;
4664
5194
  header?: never;
@@ -4668,10 +5198,10 @@ export interface paths {
4668
5198
  get?: never;
4669
5199
  put?: never;
4670
5200
  /**
4671
- * OpenID Connect Dynamic Client Registration
4672
- * @description Register a new OAuth/OIDC client dynamically (OIDC Dynamic Client Registration 1.0 / RFC 7591). The new client is bound to the Account resolved from the request context. Only when the tenant has `dynamic_client_registration_enabled`; otherwise `registration_disabled` (403).
5201
+ * Revoke a token (RFC 7009)
5202
+ * @description Revokes a refresh token (and, for a client the End-User had to allow, the grant behind it). Access tokens are short-lived and not revocable; the response is 200 either way, also for an unknown token. The client authenticates as at the token endpoint: `client_secret_basic`, `client_secret_post`, or just `client_id` for a public client.
4673
5203
  */
4674
- post: operations["oauth/register"];
5204
+ post: operations["oauth/revoke"];
4675
5205
  delete?: never;
4676
5206
  options?: never;
4677
5207
  head?: never;
@@ -4959,6 +5489,8 @@ export interface components {
4959
5489
  logout_confirm_required?: boolean;
4960
5490
  /** @description When true, anyone can register a client with `POST /oidc/register` (OIDC Dynamic Client Registration / RFC 7591) and the discovery document advertises `registration_endpoint`. Off by default: an open registration lets anyone create a client with their own `redirect_uri`. */
4961
5491
  dynamic_client_registration_enabled?: boolean;
5492
+ /** @description When true, /authorize accepts a `client_id` that is an https URL serving a Client ID Metadata Document (the MCP authorization way to identify a client without registering it). Such clients always see the consent screen. Off by default. */
5493
+ client_id_metadata_documents_enabled?: boolean;
4962
5494
  /** @description The one host this tenant's OIDC issuer and discovery document are always minted with, regardless of which host actually served the request — must be the account's own platform host or one of its verified custom domains. `/authorize` and `/logout` 302 here from any other host of the tenant. Unset (the default): every URL uses whatever host served the request, as before this field existed. Changing it can invalidate every WebAuthn passkey already enrolled unless `webauthn_rp_id` already covers the new host. */
4963
5495
  canonical_host?: string | null;
4964
5496
  /** @description AuthAccount creation date */
@@ -5227,6 +5759,11 @@ export interface components {
5227
5759
  grant_types?: string[];
5228
5760
  response_types?: string[];
5229
5761
  token_endpoint_auth_method?: string;
5762
+ /** @description When true, /authorize never issues a code in silence for this client: the End-User approves it on the consent screen first. Set on clients the tenant did not create (Client ID Metadata Documents, dynamic registration). */
5763
+ consent_required?: boolean;
5764
+ /** @description For a client identified by a Client ID Metadata Document: the URL (also its client_id) its metadata was fetched from. */
5765
+ metadata_document_url?: string;
5766
+ registered_dynamically?: boolean;
5230
5767
  application_type?: string;
5231
5768
  software_id?: string | null;
5232
5769
  software_version?: string | null;
@@ -6092,6 +6629,22 @@ export interface components {
6092
6629
  enforce_policies: boolean;
6093
6630
  /** @description When true, the API is eligible to be the target of a `refresh_token` (i.e. clients can request `offline_access` against it). */
6094
6631
  allow_offline_access: boolean;
6632
+ consent_options?: {
6633
+ /** @description Access token claim that carries the chosen id. */
6634
+ claim: string;
6635
+ /** @description What the screen asks for, e.g. "Project". */
6636
+ label: string;
6637
+ /** @description GET endpoint of the resource server that lists the choices. */
6638
+ url: string;
6639
+ /** @description Identifier of a registered API the listing token is issued for (usually the resource server behind `url`). */
6640
+ audience: string;
6641
+ } | null;
6642
+ delegation?: {
6643
+ /** @description The confidential client of the resource server allowed to exchange. */
6644
+ client_id: string;
6645
+ /** @description Identifier of the registered API the new token is for. */
6646
+ audience: string;
6647
+ } | null;
6095
6648
  /** @description When true, the consent prompt is skipped for first-party clients (clients owned by the same tenant as the API). */
6096
6649
  skip_consent: boolean;
6097
6650
  /** @description When true, access_tokens issued for this API carry a `teams` claim listing the slugs of the teams the subject is a member of within the tenant. */
@@ -6152,6 +6705,22 @@ export interface components {
6152
6705
  enforce_policies?: boolean;
6153
6706
  /** @description When true, clients can request `offline_access` and receive a refresh_token for this API. */
6154
6707
  allow_offline_access?: boolean;
6708
+ consent_options?: {
6709
+ /** @description Access token claim that carries the chosen id. */
6710
+ claim: string;
6711
+ /** @description What the screen asks for, e.g. "Project". */
6712
+ label: string;
6713
+ /** @description GET endpoint of the resource server that lists the choices. */
6714
+ url: string;
6715
+ /** @description Identifier of a registered API the listing token is issued for (usually the resource server behind `url`). */
6716
+ audience: string;
6717
+ };
6718
+ delegation?: {
6719
+ /** @description The confidential client of the resource server allowed to exchange. */
6720
+ client_id: string;
6721
+ /** @description Identifier of the registered API the new token is for. */
6722
+ audience: string;
6723
+ };
6155
6724
  /** @description When true, skip the consent prompt for first-party clients. */
6156
6725
  skip_consent?: boolean;
6157
6726
  /** @description When true, access_tokens issued for this API carry a `teams` claim with the subject team slugs. */
@@ -6181,6 +6750,22 @@ export interface components {
6181
6750
  enforce_policies?: boolean;
6182
6751
  /** @description When true, clients can request `offline_access` and receive a refresh_token for this API. */
6183
6752
  allow_offline_access?: boolean;
6753
+ consent_options?: {
6754
+ /** @description Access token claim that carries the chosen id. */
6755
+ claim: string;
6756
+ /** @description What the screen asks for, e.g. "Project". */
6757
+ label: string;
6758
+ /** @description GET endpoint of the resource server that lists the choices. */
6759
+ url: string;
6760
+ /** @description Identifier of a registered API the listing token is issued for (usually the resource server behind `url`). */
6761
+ audience: string;
6762
+ } | null;
6763
+ delegation?: {
6764
+ /** @description The confidential client of the resource server allowed to exchange. */
6765
+ client_id: string;
6766
+ /** @description Identifier of the registered API the new token is for. */
6767
+ audience: string;
6768
+ } | null;
6184
6769
  /** @description When true, skip the consent prompt for first-party clients. */
6185
6770
  skip_consent?: boolean;
6186
6771
  /** @description When true, access_tokens issued for this API carry a `teams` claim with the subject team slugs. */
@@ -7019,7 +7604,7 @@ export interface components {
7019
7604
  };
7020
7605
  ClientRegistrationResponse: {
7021
7606
  client_id: string;
7022
- client_secret: string;
7607
+ client_secret?: string;
7023
7608
  /** @description Unix timestamp (seconds) at which the client_id was issued */
7024
7609
  client_id_issued_at: number;
7025
7610
  /** @description 0 if the client_secret does not expire */
@@ -7193,6 +7778,7 @@ export interface components {
7193
7778
  webauthn_rp_id?: string | null;
7194
7779
  logout_confirm_required?: boolean | null;
7195
7780
  dynamic_client_registration_enabled?: boolean | null;
7781
+ client_id_metadata_documents_enabled?: boolean | null;
7196
7782
  canonical_host?: string | null;
7197
7783
  login_flow?: string | null;
7198
7784
  };
@@ -7403,6 +7989,8 @@ export interface components {
7403
7989
  * - `invite_used` (400): The invite was already accepted.
7404
7990
  * - `already_member` (400): The user is already a member of the team.
7405
7991
  * - `not_a_member` (404): The user is not a member of the team.
7992
+ * - `consent_options_unavailable` (502): The consent screen could not load the choices from the API being authorized (its `consent_options.url`). Try again in a moment.
7993
+ * - `consent_choice_invalid` (400): The choice sent with the consent decision is not one the API offered for this user.
7406
7994
  * - `registration_disabled` (403): Dynamic client registration is turned off for this tenant. Create the client from the dashboard or the Management API, or turn on `dynamic_client_registration_enabled`.
7407
7995
  * - `invalid_email_domain` (400): Not an email domain this organization can claim: it must be a plain domain name (`acme.com`), lowercase, without scheme, path or wildcard.
7408
7996
  * - `public_email_domain` (400): A public email provider (gmail.com, outlook.com…) cannot belong to an organization: anyone can have an address there.
@@ -7430,7 +8018,7 @@ export interface components {
7430
8018
  * - `delivery_in_progress` (409): The delivery is being attempted right now; retry the redeliver in a minute.
7431
8019
  * @enum {string}
7432
8020
  */
7433
- ErrorCode: "bad_request" | "validation_error" | "unauthorized" | "payment_required" | "forbidden" | "not_found" | "method_not_allowed" | "conflict" | "payload_too_large" | "unsupported_media_type" | "unprocessable_entity" | "too_many_requests" | "internal_error" | "already_exists" | "invalid_id" | "account_not_found" | "invalid_query" | "search_not_supported" | "invalid_expand" | "access_denied" | "insufficient_scope" | "team_required" | "account_limit_reached" | "invalid_project_id" | "account_transfer_refused" | "email_sender_domain_not_allowed" | "plan_required" | "invalid_canonical_host" | "canonical_host_breaks_passkeys" | "not_logged_in" | "session_already_revoked" | "invalid_token" | "not_owner" | "user_suspended" | "invalid_credentials" | "login_denied" | "signup_denied" | "client_credentials_denied" | "m2m_quota_exceeded" | "signup_disabled" | "email_taken" | "username_taken" | "invalid_username" | "invalid_email" | "invalid_name" | "same_email" | "user_has_no_email" | "password_too_weak" | "invalid_password_hash" | "weak_password_hash" | "invalid_code" | "invalid_phone" | "phone_changed" | "phone_already_verified" | "sms_unavailable" | "sms_failed" | "invalid_state" | "state_mismatch" | "invalid_ticket" | "ticket_used" | "ticket_expired" | "ticket_not_found" | "credential_not_found" | "invalid_link" | "expired_link" | "invalid_otp" | "invalid_client" | "client_not_found" | "client_mismatch" | "invalid_client_metadata" | "invalid_connection" | "no_database_connection" | "connection_required" | "connection_misconfigured" | "passwordless_unavailable" | "ambiguous_connection" | "invalid_redirect_uri" | "origin_not_allowed" | "audience_not_found" | "system_resource" | "invalid_request" | "invalid_device_code" | "provider_error" | "identity_already_linked" | "identity_link_denied" | "identity_conflict" | "identity_orphaned" | "no_provider_token" | "no_refresh_token" | "action_unavailable" | "login_flow_misconfigured" | "mfa_required" | "step_up_required" | "interaction_required" | "passkey_login_disabled" | "mfa_pending" | "mfa_invalid_code" | "mfa_invalid_recovery_code" | "too_many_attempts" | "too_many_login_attempts" | "totp_not_allowed" | "no_usable_factor" | "factor_not_found" | "factor_already_confirmed" | "invalid_factor" | "session_missing" | "passkey_verification_failed" | "no_passkey_enrolled" | "malformed_credential" | "unknown_passkey" | "invalid_passkey" | "invalid_invite_url" | "invite_email_mismatch" | "invite_email_unverified" | "invite_not_found" | "invite_used" | "already_member" | "not_a_member" | "registration_disabled" | "invalid_email_domain" | "public_email_domain" | "organization_domain_not_found" | "organization_domain_taken" | "organization_domain_unverified" | "plan_unavailable" | "organization_domain_mismatch" | "team_not_in_organization" | "organization_has_no_idp" | "organization_not_found" | "invalid_user" | "not_an_organization_admin" | "last_organization_admin" | "team_id_unavailable" | "use_team_member_route" | "role_not_found" | "invalid_role" | "flow_not_found" | "revision_not_found" | "invalid_webhook_event" | "invalid_webhook_url" | "not_a_webhook" | "delivery_not_found" | "delivery_in_progress";
8021
+ ErrorCode: "bad_request" | "validation_error" | "unauthorized" | "payment_required" | "forbidden" | "not_found" | "method_not_allowed" | "conflict" | "payload_too_large" | "unsupported_media_type" | "unprocessable_entity" | "too_many_requests" | "internal_error" | "already_exists" | "invalid_id" | "account_not_found" | "invalid_query" | "search_not_supported" | "invalid_expand" | "access_denied" | "insufficient_scope" | "team_required" | "account_limit_reached" | "invalid_project_id" | "account_transfer_refused" | "email_sender_domain_not_allowed" | "plan_required" | "invalid_canonical_host" | "canonical_host_breaks_passkeys" | "not_logged_in" | "session_already_revoked" | "invalid_token" | "not_owner" | "user_suspended" | "invalid_credentials" | "login_denied" | "signup_denied" | "client_credentials_denied" | "m2m_quota_exceeded" | "signup_disabled" | "email_taken" | "username_taken" | "invalid_username" | "invalid_email" | "invalid_name" | "same_email" | "user_has_no_email" | "password_too_weak" | "invalid_password_hash" | "weak_password_hash" | "invalid_code" | "invalid_phone" | "phone_changed" | "phone_already_verified" | "sms_unavailable" | "sms_failed" | "invalid_state" | "state_mismatch" | "invalid_ticket" | "ticket_used" | "ticket_expired" | "ticket_not_found" | "credential_not_found" | "invalid_link" | "expired_link" | "invalid_otp" | "invalid_client" | "client_not_found" | "client_mismatch" | "invalid_client_metadata" | "invalid_connection" | "no_database_connection" | "connection_required" | "connection_misconfigured" | "passwordless_unavailable" | "ambiguous_connection" | "invalid_redirect_uri" | "origin_not_allowed" | "audience_not_found" | "system_resource" | "invalid_request" | "invalid_device_code" | "provider_error" | "identity_already_linked" | "identity_link_denied" | "identity_conflict" | "identity_orphaned" | "no_provider_token" | "no_refresh_token" | "action_unavailable" | "login_flow_misconfigured" | "mfa_required" | "step_up_required" | "interaction_required" | "passkey_login_disabled" | "mfa_pending" | "mfa_invalid_code" | "mfa_invalid_recovery_code" | "too_many_attempts" | "too_many_login_attempts" | "totp_not_allowed" | "no_usable_factor" | "factor_not_found" | "factor_already_confirmed" | "invalid_factor" | "session_missing" | "passkey_verification_failed" | "no_passkey_enrolled" | "malformed_credential" | "unknown_passkey" | "invalid_passkey" | "invalid_invite_url" | "invite_email_mismatch" | "invite_email_unverified" | "invite_not_found" | "invite_used" | "already_member" | "not_a_member" | "consent_options_unavailable" | "consent_choice_invalid" | "registration_disabled" | "invalid_email_domain" | "public_email_domain" | "organization_domain_not_found" | "organization_domain_taken" | "organization_domain_unverified" | "plan_unavailable" | "organization_domain_mismatch" | "team_not_in_organization" | "organization_has_no_idp" | "organization_not_found" | "invalid_user" | "not_an_organization_admin" | "last_organization_admin" | "team_id_unavailable" | "use_team_member_route" | "role_not_found" | "invalid_role" | "flow_not_found" | "revision_not_found" | "invalid_webhook_event" | "invalid_webhook_url" | "not_a_webhook" | "delivery_not_found" | "delivery_in_progress";
7434
8022
  /** @description Every error response has this shape. Branch on `error_code`, never on `message`: the message is written for a person and may change. */
7435
8023
  ErrorResponse: {
7436
8024
  /** @description The HTTP status, repeated. */
@@ -7592,6 +8180,8 @@ export interface operations {
7592
8180
  logout_confirm_required?: boolean;
7593
8181
  /** @description When true, anyone can register a client with `POST /oidc/register` (OIDC Dynamic Client Registration / RFC 7591) and the discovery document advertises `registration_endpoint`. Off by default: an open registration lets anyone create a client with their own `redirect_uri`. */
7594
8182
  dynamic_client_registration_enabled?: boolean;
8183
+ /** @description When true, /authorize accepts a `client_id` that is an https URL serving a Client ID Metadata Document (the MCP authorization way to identify a client without registering it). Such clients always see the consent screen. Off by default. */
8184
+ client_id_metadata_documents_enabled?: boolean;
7595
8185
  /** @description The one host this tenant's OIDC issuer and discovery document are always minted with, regardless of which host actually served the request — must be the account's own platform host or one of its verified custom domains. `/authorize` and `/logout` 302 here from any other host of the tenant. Unset (the default): every URL uses whatever host served the request, as before this field existed. Changing it can invalidate every WebAuthn passkey already enrolled unless `webauthn_rp_id` already covers the new host. */
7596
8186
  canonical_host?: string | null;
7597
8187
  /** @description AuthAccount creation date */
@@ -7949,6 +8539,8 @@ export interface operations {
7949
8539
  logout_confirm_required?: boolean;
7950
8540
  /** @description When true, anyone can register a client with `POST /oidc/register` (OIDC Dynamic Client Registration / RFC 7591) and the discovery document advertises `registration_endpoint`. Off by default: an open registration lets anyone create a client with their own `redirect_uri`. */
7951
8541
  dynamic_client_registration_enabled?: boolean;
8542
+ /** @description When true, /authorize accepts a `client_id` that is an https URL serving a Client ID Metadata Document (the MCP authorization way to identify a client without registering it). Such clients always see the consent screen. Off by default. */
8543
+ client_id_metadata_documents_enabled?: boolean;
7952
8544
  /** @description The one host this tenant's OIDC issuer and discovery document are always minted with, regardless of which host actually served the request — must be the account's own platform host or one of its verified custom domains. `/authorize` and `/logout` 302 here from any other host of the tenant. Unset (the default): every URL uses whatever host served the request, as before this field existed. Changing it can invalidate every WebAuthn passkey already enrolled unless `webauthn_rp_id` already covers the new host. */
7953
8545
  canonical_host?: string | null;
7954
8546
  /** @description AuthAccount creation date */
@@ -8194,6 +8786,8 @@ export interface operations {
8194
8786
  logout_confirm_required?: boolean;
8195
8787
  /** @description When true, anyone can register a client with `POST /oidc/register` (OIDC Dynamic Client Registration / RFC 7591) and the discovery document advertises `registration_endpoint`. Off by default: an open registration lets anyone create a client with their own `redirect_uri`. */
8196
8788
  dynamic_client_registration_enabled?: boolean;
8789
+ /** @description When true, /authorize accepts a `client_id` that is an https URL serving a Client ID Metadata Document (the MCP authorization way to identify a client without registering it). Such clients always see the consent screen. Off by default. */
8790
+ client_id_metadata_documents_enabled?: boolean;
8197
8791
  /** @description The one host this tenant's OIDC issuer and discovery document are always minted with, regardless of which host actually served the request — must be the account's own platform host or one of its verified custom domains. `/authorize` and `/logout` 302 here from any other host of the tenant. Unset (the default): every URL uses whatever host served the request, as before this field existed. Changing it can invalidate every WebAuthn passkey already enrolled unless `webauthn_rp_id` already covers the new host. */
8198
8792
  canonical_host?: string | null;
8199
8793
  /** @description AuthAccount creation date */
@@ -8387,6 +8981,7 @@ export interface operations {
8387
8981
  webauthn_rp_id?: string | null;
8388
8982
  logout_confirm_required?: boolean | null;
8389
8983
  dynamic_client_registration_enabled?: boolean | null;
8984
+ client_id_metadata_documents_enabled?: boolean | null;
8390
8985
  canonical_host?: string | null;
8391
8986
  login_flow?: string | null;
8392
8987
  };
@@ -8515,6 +9110,8 @@ export interface operations {
8515
9110
  logout_confirm_required?: boolean;
8516
9111
  /** @description When true, anyone can register a client with `POST /oidc/register` (OIDC Dynamic Client Registration / RFC 7591) and the discovery document advertises `registration_endpoint`. Off by default: an open registration lets anyone create a client with their own `redirect_uri`. */
8517
9112
  dynamic_client_registration_enabled?: boolean;
9113
+ /** @description When true, /authorize accepts a `client_id` that is an https URL serving a Client ID Metadata Document (the MCP authorization way to identify a client without registering it). Such clients always see the consent screen. Off by default. */
9114
+ client_id_metadata_documents_enabled?: boolean;
8518
9115
  /** @description The one host this tenant's OIDC issuer and discovery document are always minted with, regardless of which host actually served the request — must be the account's own platform host or one of its verified custom domains. `/authorize` and `/logout` 302 here from any other host of the tenant. Unset (the default): every URL uses whatever host served the request, as before this field existed. Changing it can invalidate every WebAuthn passkey already enrolled unless `webauthn_rp_id` already covers the new host. */
8519
9116
  canonical_host?: string | null;
8520
9117
  /** @description AuthAccount creation date */
@@ -8828,6 +9425,10 @@ export interface operations {
8828
9425
  * @default 900
8829
9426
  */
8830
9427
  ttl?: number;
9428
+ /** @description Narrow the token to these management scopes (each must be in the catalog). Omitted: the whole catalog. */
9429
+ scopes?: string[];
9430
+ /** @description Set when the user acts through one of their deploy API keys (the hosted MCP). Recorded in the audit log and as `via_apikey` in the token. */
9431
+ apikey_id?: string;
8831
9432
  };
8832
9433
  };
8833
9434
  };
@@ -9779,6 +10380,8 @@ export interface operations {
9779
10380
  logout_confirm_required?: boolean;
9780
10381
  /** @description When true, anyone can register a client with `POST /oidc/register` (OIDC Dynamic Client Registration / RFC 7591) and the discovery document advertises `registration_endpoint`. Off by default: an open registration lets anyone create a client with their own `redirect_uri`. */
9781
10382
  dynamic_client_registration_enabled?: boolean;
10383
+ /** @description When true, /authorize accepts a `client_id` that is an https URL serving a Client ID Metadata Document (the MCP authorization way to identify a client without registering it). Such clients always see the consent screen. Off by default. */
10384
+ client_id_metadata_documents_enabled?: boolean;
9782
10385
  /** @description The one host this tenant's OIDC issuer and discovery document are always minted with, regardless of which host actually served the request — must be the account's own platform host or one of its verified custom domains. `/authorize` and `/logout` 302 here from any other host of the tenant. Unset (the default): every URL uses whatever host served the request, as before this field existed. Changing it can invalidate every WebAuthn passkey already enrolled unless `webauthn_rp_id` already covers the new host. */
9783
10386
  canonical_host?: string | null;
9784
10387
  /** @description AuthAccount creation date */
@@ -9887,6 +10490,8 @@ export interface operations {
9887
10490
  enabled?: string;
9888
10491
  /** @description Exact match on `category`. Equivalent to `?query=category:<value>`. */
9889
10492
  category?: string;
10493
+ /** @description Also return `total`: the rows matching the whole filter, across every page. */
10494
+ count?: boolean;
9890
10495
  /** @description Filter using a FaableQL query */
9891
10496
  query?: string;
9892
10497
  /** @description Full-text search across: `connection_name`, `connection_type`. */
@@ -9907,6 +10512,8 @@ export interface operations {
9907
10512
  "application/json": {
9908
10513
  next: string | null;
9909
10514
  results: components["schemas"]["Connection"][];
10515
+ /** @description Rows matching the whole filter, across every page. Only with `?count=true`. */
10516
+ total?: number;
9910
10517
  };
9911
10518
  };
9912
10519
  };
@@ -11153,6 +11760,8 @@ export interface operations {
11153
11760
  cursor?: string;
11154
11761
  /** @description Cursor returned by the previous page */
11155
11762
  next?: string;
11763
+ /** @description Also return `total`: the rows matching the whole filter, across every page. */
11764
+ count?: boolean;
11156
11765
  /** @description Filter using a FaableQL query */
11157
11766
  query?: string;
11158
11767
  /** @description Full-text search across: `name`, `description`, `client_id`. */
@@ -11173,6 +11782,8 @@ export interface operations {
11173
11782
  "application/json": {
11174
11783
  next: string | null;
11175
11784
  results: components["schemas"]["Client"][];
11785
+ /** @description Rows matching the whole filter, across every page. Only with `?count=true`. */
11786
+ total?: number;
11176
11787
  };
11177
11788
  };
11178
11789
  };
@@ -11324,6 +11935,11 @@ export interface operations {
11324
11935
  grant_types?: string[];
11325
11936
  response_types?: string[];
11326
11937
  token_endpoint_auth_method?: string;
11938
+ /** @description When true, /authorize never issues a code in silence for this client: the End-User approves it on the consent screen first. Set on clients the tenant did not create (Client ID Metadata Documents, dynamic registration). */
11939
+ consent_required?: boolean;
11940
+ /** @description For a client identified by a Client ID Metadata Document: the URL (also its client_id) its metadata was fetched from. */
11941
+ metadata_document_url?: string;
11942
+ registered_dynamically?: boolean;
11327
11943
  application_type?: string;
11328
11944
  software_id?: string | null;
11329
11945
  software_version?: string | null;
@@ -11524,6 +12140,11 @@ export interface operations {
11524
12140
  grant_types?: string[];
11525
12141
  response_types?: string[];
11526
12142
  token_endpoint_auth_method?: string;
12143
+ /** @description When true, /authorize never issues a code in silence for this client: the End-User approves it on the consent screen first. Set on clients the tenant did not create (Client ID Metadata Documents, dynamic registration). */
12144
+ consent_required?: boolean;
12145
+ /** @description For a client identified by a Client ID Metadata Document: the URL (also its client_id) its metadata was fetched from. */
12146
+ metadata_document_url?: string;
12147
+ registered_dynamically?: boolean;
11527
12148
  application_type?: string;
11528
12149
  software_id?: string | null;
11529
12150
  software_version?: string | null;
@@ -11819,6 +12440,11 @@ export interface operations {
11819
12440
  grant_types?: string[];
11820
12441
  response_types?: string[];
11821
12442
  token_endpoint_auth_method?: string;
12443
+ /** @description When true, /authorize never issues a code in silence for this client: the End-User approves it on the consent screen first. Set on clients the tenant did not create (Client ID Metadata Documents, dynamic registration). */
12444
+ consent_required?: boolean;
12445
+ /** @description For a client identified by a Client ID Metadata Document: the URL (also its client_id) its metadata was fetched from. */
12446
+ metadata_document_url?: string;
12447
+ registered_dynamically?: boolean;
11822
12448
  application_type?: string;
11823
12449
  software_id?: string | null;
11824
12450
  software_version?: string | null;
@@ -12025,6 +12651,11 @@ export interface operations {
12025
12651
  grant_types?: string[];
12026
12652
  response_types?: string[];
12027
12653
  token_endpoint_auth_method?: string;
12654
+ /** @description When true, /authorize never issues a code in silence for this client: the End-User approves it on the consent screen first. Set on clients the tenant did not create (Client ID Metadata Documents, dynamic registration). */
12655
+ consent_required?: boolean;
12656
+ /** @description For a client identified by a Client ID Metadata Document: the URL (also its client_id) its metadata was fetched from. */
12657
+ metadata_document_url?: string;
12658
+ registered_dynamically?: boolean;
12028
12659
  application_type?: string;
12029
12660
  software_id?: string | null;
12030
12661
  software_version?: string | null;
@@ -12229,6 +12860,11 @@ export interface operations {
12229
12860
  grant_types?: string[];
12230
12861
  response_types?: string[];
12231
12862
  token_endpoint_auth_method?: string;
12863
+ /** @description When true, /authorize never issues a code in silence for this client: the End-User approves it on the consent screen first. Set on clients the tenant did not create (Client ID Metadata Documents, dynamic registration). */
12864
+ consent_required?: boolean;
12865
+ /** @description For a client identified by a Client ID Metadata Document: the URL (also its client_id) its metadata was fetched from. */
12866
+ metadata_document_url?: string;
12867
+ registered_dynamically?: boolean;
12232
12868
  application_type?: string;
12233
12869
  software_id?: string | null;
12234
12870
  software_version?: string | null;
@@ -12412,6 +13048,18 @@ export interface operations {
12412
13048
  email_verified?: string;
12413
13049
  /** @description Exact match on `suspended`. Equivalent to `?query=suspended:<value>`. */
12414
13050
  suspended?: string;
13051
+ /** @description Exact match on `last_login_since`. Equivalent to `?query=last_login_since:<value>`. */
13052
+ last_login_since?: string;
13053
+ /** @description Exact match on `last_login_until`. Equivalent to `?query=last_login_until:<value>`. */
13054
+ last_login_until?: string;
13055
+ /** @description Exact match on `created_since`. Equivalent to `?query=created_since:<value>`. */
13056
+ created_since?: string;
13057
+ /** @description Exact match on `created_until`. Equivalent to `?query=created_until:<value>`. */
13058
+ created_until?: string;
13059
+ /** @description Sort by one field: `<field>` ascending, `-<field>` descending. One of: createdAt, last_login, logins_count. Rows with no value in that field are left out. Default: `-createdAt`. */
13060
+ sort?: string;
13061
+ /** @description Also return `total`: the rows matching the whole filter, across every page. */
13062
+ count?: boolean;
12415
13063
  /** @description Filter using a FaableQL query */
12416
13064
  query?: string;
12417
13065
  /** @description Full-text search across: `name`, `email`, `phone`. */
@@ -12432,6 +13080,8 @@ export interface operations {
12432
13080
  "application/json": {
12433
13081
  next: string | null;
12434
13082
  results: components["schemas"]["User"][];
13083
+ /** @description Rows matching the whole filter, across every page. Only with `?count=true`. */
13084
+ total?: number;
12435
13085
  };
12436
13086
  };
12437
13087
  };
@@ -15290,6 +15940,8 @@ export interface operations {
15290
15940
  provider?: string;
15291
15941
  /** @description Exact match on `created_at`. Equivalent to `?query=created_at:<value>`. */
15292
15942
  created_at?: string;
15943
+ /** @description Also return `total`: the rows matching the whole filter, across every page. */
15944
+ count?: boolean;
15293
15945
  /** @description Filter using a FaableQL query */
15294
15946
  query?: string;
15295
15947
  /** @description Expand id-only fields in the response. Pass one path per entry (e.g. `?expand=user`). */
@@ -15310,6 +15962,8 @@ export interface operations {
15310
15962
  "application/json": {
15311
15963
  next: string | null;
15312
15964
  results: components["schemas"]["Identity"][];
15965
+ /** @description Rows matching the whole filter, across every page. Only with `?count=true`. */
15966
+ total?: number;
15313
15967
  };
15314
15968
  };
15315
15969
  };
@@ -15947,6 +16601,8 @@ export interface operations {
15947
16601
  username?: string;
15948
16602
  /** @description Exact match on `created_at`. Equivalent to `?query=created_at:<value>`. */
15949
16603
  created_at?: string;
16604
+ /** @description Also return `total`: the rows matching the whole filter, across every page. */
16605
+ count?: boolean;
15950
16606
  /** @description Filter using a FaableQL query */
15951
16607
  query?: string;
15952
16608
  /** @description Expand id-only fields in the response. Pass one path per entry (e.g. `?expand=user`). */
@@ -15969,6 +16625,8 @@ export interface operations {
15969
16625
  "application/json": {
15970
16626
  next: string | null;
15971
16627
  results: components["schemas"]["Credential"][];
16628
+ /** @description Rows matching the whole filter, across every page. Only with `?count=true`. */
16629
+ total?: number;
15972
16630
  };
15973
16631
  };
15974
16632
  };
@@ -16756,6 +17414,8 @@ export interface operations {
16756
17414
  cursor?: string;
16757
17415
  /** @description Cursor returned by the previous page */
16758
17416
  next?: string;
17417
+ /** @description Also return `total`: the rows matching the whole filter, across every page. */
17418
+ count?: boolean;
16759
17419
  /** @description Filter using a FaableQL query */
16760
17420
  query?: string;
16761
17421
  /** @description Full-text search across: `name`, `description`. */
@@ -16776,6 +17436,8 @@ export interface operations {
16776
17436
  "application/json": {
16777
17437
  next: string | null;
16778
17438
  results: components["schemas"]["Role"][];
17439
+ /** @description Rows matching the whole filter, across every page. Only with `?count=true`. */
17440
+ total?: number;
16779
17441
  };
16780
17442
  };
16781
17443
  };
@@ -17660,6 +18322,8 @@ export interface operations {
17660
18322
  cursor?: string;
17661
18323
  /** @description Cursor returned by the previous page */
17662
18324
  next?: string;
18325
+ /** @description Also return `total`: the rows matching the whole filter, across every page. */
18326
+ count?: boolean;
17663
18327
  /** @description Filter using a FaableQL query */
17664
18328
  query?: string;
17665
18329
  /** @description Expand id-only fields in the response. Pass one path per entry (e.g. `?expand=user`). */
@@ -17680,6 +18344,8 @@ export interface operations {
17680
18344
  "application/json": {
17681
18345
  next: string | null;
17682
18346
  results: components["schemas"]["RoleMember"][];
18347
+ /** @description Rows matching the whole filter, across every page. Only with `?count=true`. */
18348
+ total?: number;
17683
18349
  };
17684
18350
  };
17685
18351
  };
@@ -18041,6 +18707,8 @@ export interface operations {
18041
18707
  cursor?: string;
18042
18708
  /** @description Cursor returned by the previous page */
18043
18709
  next?: string;
18710
+ /** @description Also return `total`: the rows matching the whole filter, across every page. */
18711
+ count?: boolean;
18044
18712
  /** @description Filter using a FaableQL query */
18045
18713
  query?: string;
18046
18714
  /** @description Full-text search across: `name`, `slug`. */
@@ -18061,6 +18729,8 @@ export interface operations {
18061
18729
  "application/json": {
18062
18730
  next: string | null;
18063
18731
  results: components["schemas"]["Team"][];
18732
+ /** @description Rows matching the whole filter, across every page. Only with `?count=true`. */
18733
+ total?: number;
18064
18734
  };
18065
18735
  };
18066
18736
  };
@@ -19107,6 +19777,8 @@ export interface operations {
19107
19777
  cursor?: string;
19108
19778
  /** @description Cursor returned by the previous page */
19109
19779
  next?: string;
19780
+ /** @description Also return `total`: the rows matching the whole filter, across every page. */
19781
+ count?: boolean;
19110
19782
  /** @description Filter using a FaableQL query */
19111
19783
  query?: string;
19112
19784
  /** @description Full-text search across: `name`, `slug`. */
@@ -19127,6 +19799,8 @@ export interface operations {
19127
19799
  "application/json": {
19128
19800
  next: string | null;
19129
19801
  results: components["schemas"]["Organization"][];
19802
+ /** @description Rows matching the whole filter, across every page. Only with `?count=true`. */
19803
+ total?: number;
19130
19804
  };
19131
19805
  };
19132
19806
  };
@@ -21199,6 +21873,8 @@ export interface operations {
21199
21873
  user?: string;
21200
21874
  /** @description Exact match on `team`. Equivalent to `?query=team:<value>`. */
21201
21875
  team?: string;
21876
+ /** @description Also return `total`: the rows matching the whole filter, across every page. */
21877
+ count?: boolean;
21202
21878
  /** @description Filter using a FaableQL query */
21203
21879
  query?: string;
21204
21880
  /** @description Expand id-only fields in the response. Pass one path per entry (e.g. `?expand=user`). */
@@ -21219,6 +21895,8 @@ export interface operations {
21219
21895
  "application/json": {
21220
21896
  next: string | null;
21221
21897
  results: components["schemas"]["TeamMember"][];
21898
+ /** @description Rows matching the whole filter, across every page. Only with `?count=true`. */
21899
+ total?: number;
21222
21900
  };
21223
21901
  };
21224
21902
  };
@@ -23139,6 +23817,8 @@ export interface operations {
23139
23817
  enforce_policies?: string;
23140
23818
  /** @description Exact match on `allow_offline_access`. Equivalent to `?query=allow_offline_access:<value>`. */
23141
23819
  allow_offline_access?: string;
23820
+ /** @description Also return `total`: the rows matching the whole filter, across every page. */
23821
+ count?: boolean;
23142
23822
  /** @description Filter using a FaableQL query */
23143
23823
  query?: string;
23144
23824
  /** @description Full-text search across: `name`, `description`, `identifier`, `slug`. */
@@ -23159,6 +23839,8 @@ export interface operations {
23159
23839
  "application/json": {
23160
23840
  next: string | null;
23161
23841
  results: components["schemas"]["Api"][];
23842
+ /** @description Rows matching the whole filter, across every page. Only with `?count=true`. */
23843
+ total?: number;
23162
23844
  };
23163
23845
  };
23164
23846
  };
@@ -23288,6 +23970,22 @@ export interface operations {
23288
23970
  enforce_policies?: boolean;
23289
23971
  /** @description When true, clients can request `offline_access` and receive a refresh_token for this API. */
23290
23972
  allow_offline_access?: boolean;
23973
+ consent_options?: {
23974
+ /** @description Access token claim that carries the chosen id. */
23975
+ claim: string;
23976
+ /** @description What the screen asks for, e.g. "Project". */
23977
+ label: string;
23978
+ /** @description GET endpoint of the resource server that lists the choices. */
23979
+ url: string;
23980
+ /** @description Identifier of a registered API the listing token is issued for (usually the resource server behind `url`). */
23981
+ audience: string;
23982
+ };
23983
+ delegation?: {
23984
+ /** @description The confidential client of the resource server allowed to exchange. */
23985
+ client_id: string;
23986
+ /** @description Identifier of the registered API the new token is for. */
23987
+ audience: string;
23988
+ };
23291
23989
  /** @description When true, skip the consent prompt for first-party clients. */
23292
23990
  skip_consent?: boolean;
23293
23991
  /** @description When true, access_tokens issued for this API carry a `teams` claim with the subject team slugs. */
@@ -23337,6 +24035,22 @@ export interface operations {
23337
24035
  enforce_policies: boolean;
23338
24036
  /** @description When true, the API is eligible to be the target of a `refresh_token` (i.e. clients can request `offline_access` against it). */
23339
24037
  allow_offline_access: boolean;
24038
+ consent_options?: {
24039
+ /** @description Access token claim that carries the chosen id. */
24040
+ claim: string;
24041
+ /** @description What the screen asks for, e.g. "Project". */
24042
+ label: string;
24043
+ /** @description GET endpoint of the resource server that lists the choices. */
24044
+ url: string;
24045
+ /** @description Identifier of a registered API the listing token is issued for (usually the resource server behind `url`). */
24046
+ audience: string;
24047
+ } | null;
24048
+ delegation?: {
24049
+ /** @description The confidential client of the resource server allowed to exchange. */
24050
+ client_id: string;
24051
+ /** @description Identifier of the registered API the new token is for. */
24052
+ audience: string;
24053
+ } | null;
23340
24054
  /** @description When true, the consent prompt is skipped for first-party clients (clients owned by the same tenant as the API). */
23341
24055
  skip_consent: boolean;
23342
24056
  /** @description When true, access_tokens issued for this API carry a `teams` claim listing the slugs of the teams the subject is a member of within the tenant. */
@@ -23493,6 +24207,22 @@ export interface operations {
23493
24207
  enforce_policies: boolean;
23494
24208
  /** @description When true, the API is eligible to be the target of a `refresh_token` (i.e. clients can request `offline_access` against it). */
23495
24209
  allow_offline_access: boolean;
24210
+ consent_options?: {
24211
+ /** @description Access token claim that carries the chosen id. */
24212
+ claim: string;
24213
+ /** @description What the screen asks for, e.g. "Project". */
24214
+ label: string;
24215
+ /** @description GET endpoint of the resource server that lists the choices. */
24216
+ url: string;
24217
+ /** @description Identifier of a registered API the listing token is issued for (usually the resource server behind `url`). */
24218
+ audience: string;
24219
+ } | null;
24220
+ delegation?: {
24221
+ /** @description The confidential client of the resource server allowed to exchange. */
24222
+ client_id: string;
24223
+ /** @description Identifier of the registered API the new token is for. */
24224
+ audience: string;
24225
+ } | null;
23496
24226
  /** @description When true, the consent prompt is skipped for first-party clients (clients owned by the same tenant as the API). */
23497
24227
  skip_consent: boolean;
23498
24228
  /** @description When true, access_tokens issued for this API carry a `teams` claim listing the slugs of the teams the subject is a member of within the tenant. */
@@ -23638,6 +24368,22 @@ export interface operations {
23638
24368
  enforce_policies?: boolean;
23639
24369
  /** @description When true, clients can request `offline_access` and receive a refresh_token for this API. */
23640
24370
  allow_offline_access?: boolean;
24371
+ consent_options?: {
24372
+ /** @description Access token claim that carries the chosen id. */
24373
+ claim: string;
24374
+ /** @description What the screen asks for, e.g. "Project". */
24375
+ label: string;
24376
+ /** @description GET endpoint of the resource server that lists the choices. */
24377
+ url: string;
24378
+ /** @description Identifier of a registered API the listing token is issued for (usually the resource server behind `url`). */
24379
+ audience: string;
24380
+ } | null;
24381
+ delegation?: {
24382
+ /** @description The confidential client of the resource server allowed to exchange. */
24383
+ client_id: string;
24384
+ /** @description Identifier of the registered API the new token is for. */
24385
+ audience: string;
24386
+ } | null;
23641
24387
  /** @description When true, skip the consent prompt for first-party clients. */
23642
24388
  skip_consent?: boolean;
23643
24389
  /** @description When true, access_tokens issued for this API carry a `teams` claim with the subject team slugs. */
@@ -23687,6 +24433,22 @@ export interface operations {
23687
24433
  enforce_policies: boolean;
23688
24434
  /** @description When true, the API is eligible to be the target of a `refresh_token` (i.e. clients can request `offline_access` against it). */
23689
24435
  allow_offline_access: boolean;
24436
+ consent_options?: {
24437
+ /** @description Access token claim that carries the chosen id. */
24438
+ claim: string;
24439
+ /** @description What the screen asks for, e.g. "Project". */
24440
+ label: string;
24441
+ /** @description GET endpoint of the resource server that lists the choices. */
24442
+ url: string;
24443
+ /** @description Identifier of a registered API the listing token is issued for (usually the resource server behind `url`). */
24444
+ audience: string;
24445
+ } | null;
24446
+ delegation?: {
24447
+ /** @description The confidential client of the resource server allowed to exchange. */
24448
+ client_id: string;
24449
+ /** @description Identifier of the registered API the new token is for. */
24450
+ audience: string;
24451
+ } | null;
23690
24452
  /** @description When true, the consent prompt is skipped for first-party clients (clients owned by the same tenant as the API). */
23691
24453
  skip_consent: boolean;
23692
24454
  /** @description When true, access_tokens issued for this API carry a `teams` claim listing the slugs of the teams the subject is a member of within the tenant. */
@@ -23849,6 +24611,22 @@ export interface operations {
23849
24611
  enforce_policies: boolean;
23850
24612
  /** @description When true, the API is eligible to be the target of a `refresh_token` (i.e. clients can request `offline_access` against it). */
23851
24613
  allow_offline_access: boolean;
24614
+ consent_options?: {
24615
+ /** @description Access token claim that carries the chosen id. */
24616
+ claim: string;
24617
+ /** @description What the screen asks for, e.g. "Project". */
24618
+ label: string;
24619
+ /** @description GET endpoint of the resource server that lists the choices. */
24620
+ url: string;
24621
+ /** @description Identifier of a registered API the listing token is issued for (usually the resource server behind `url`). */
24622
+ audience: string;
24623
+ } | null;
24624
+ delegation?: {
24625
+ /** @description The confidential client of the resource server allowed to exchange. */
24626
+ client_id: string;
24627
+ /** @description Identifier of the registered API the new token is for. */
24628
+ audience: string;
24629
+ } | null;
23852
24630
  /** @description When true, the consent prompt is skipped for first-party clients (clients owned by the same tenant as the API). */
23853
24631
  skip_consent: boolean;
23854
24632
  /** @description When true, access_tokens issued for this API carry a `teams` claim listing the slugs of the teams the subject is a member of within the tenant. */
@@ -24178,6 +24956,8 @@ export interface operations {
24178
24956
  cursor?: string;
24179
24957
  /** @description Cursor returned by the previous page */
24180
24958
  next?: string;
24959
+ /** @description Also return `total`: the rows matching the whole filter, across every page. */
24960
+ count?: boolean;
24181
24961
  /** @description Filter using a FaableQL query */
24182
24962
  query?: string;
24183
24963
  };
@@ -24196,6 +24976,8 @@ export interface operations {
24196
24976
  "application/json": {
24197
24977
  next: string | null;
24198
24978
  results: components["schemas"]["Action"][];
24979
+ /** @description Rows matching the whole filter, across every page. Only with `?count=true`. */
24980
+ total?: number;
24199
24981
  };
24200
24982
  };
24201
24983
  };
@@ -25861,6 +26643,8 @@ export interface operations {
25861
26643
  cursor?: string;
25862
26644
  /** @description Cursor returned by the previous page */
25863
26645
  next?: string;
26646
+ /** @description Also return `total`: the rows matching the whole filter, across every page. */
26647
+ count?: boolean;
25864
26648
  /** @description Filter using a FaableQL query */
25865
26649
  query?: string;
25866
26650
  };
@@ -25879,6 +26663,8 @@ export interface operations {
25879
26663
  "application/json": {
25880
26664
  next: string | null;
25881
26665
  results: components["schemas"]["LoginFlow"][];
26666
+ /** @description Rows matching the whole filter, across every page. Only with `?count=true`. */
26667
+ total?: number;
25882
26668
  };
25883
26669
  };
25884
26670
  };
@@ -26799,6 +27585,8 @@ export interface operations {
26799
27585
  channel?: string;
26800
27586
  /** @description Exact match on `events`. Equivalent to `?query=events:<value>`. */
26801
27587
  events?: string;
27588
+ /** @description Also return `total`: the rows matching the whole filter, across every page. */
27589
+ count?: boolean;
26802
27590
  /** @description Filter using a FaableQL query */
26803
27591
  query?: string;
26804
27592
  };
@@ -26817,6 +27605,8 @@ export interface operations {
26817
27605
  "application/json": {
26818
27606
  next: string | null;
26819
27607
  results: components["schemas"]["NotificationSubscription"][];
27608
+ /** @description Rows matching the whole filter, across every page. Only with `?count=true`. */
27609
+ total?: number;
26820
27610
  };
26821
27611
  };
26822
27612
  };
@@ -28227,6 +29017,8 @@ export interface operations {
28227
29017
  expires_before?: string;
28228
29018
  /** @description Exact match on `expires_after`. Equivalent to `?query=expires_after:<value>`. */
28229
29019
  expires_after?: string;
29020
+ /** @description Also return `total`: the rows matching the whole filter, across every page. */
29021
+ count?: boolean;
28230
29022
  /** @description Filter using a FaableQL query */
28231
29023
  query?: string;
28232
29024
  /** @description Expand id-only fields in the response. Pass one path per entry (e.g. `?expand=user`). */
@@ -28249,6 +29041,8 @@ export interface operations {
28249
29041
  "application/json": {
28250
29042
  next: string | null;
28251
29043
  results: components["schemas"]["Log"][];
29044
+ /** @description Rows matching the whole filter, across every page. Only with `?count=true`. */
29045
+ total?: number;
28252
29046
  };
28253
29047
  };
28254
29048
  };
@@ -28511,6 +29305,8 @@ export interface operations {
28511
29305
  since?: string;
28512
29306
  /** @description Exact match on `until`. Equivalent to `?query=until:<value>`. */
28513
29307
  until?: string;
29308
+ /** @description Also return `total`: the rows matching the whole filter, across every page. */
29309
+ count?: boolean;
28514
29310
  /** @description Filter using a FaableQL query */
28515
29311
  query?: string;
28516
29312
  /** @description Expand id-only fields in the response. Pass one path per entry (e.g. `?expand=user`). */
@@ -28531,6 +29327,8 @@ export interface operations {
28531
29327
  "application/json": {
28532
29328
  next: string | null;
28533
29329
  results: components["schemas"]["Session"][];
29330
+ /** @description Rows matching the whole filter, across every page. Only with `?count=true`. */
29331
+ total?: number;
28534
29332
  };
28535
29333
  };
28536
29334
  };
@@ -29048,6 +29846,8 @@ export interface operations {
29048
29846
  cursor?: string;
29049
29847
  /** @description Cursor returned by the previous page */
29050
29848
  next?: string;
29849
+ /** @description Also return `total`: the rows matching the whole filter, across every page. */
29850
+ count?: boolean;
29051
29851
  /** @description Filter using a FaableQL query */
29052
29852
  query?: string;
29053
29853
  /** @description Full-text search across: `domain`. */
@@ -29068,6 +29868,8 @@ export interface operations {
29068
29868
  "application/json": {
29069
29869
  next: string | null;
29070
29870
  results: components["schemas"]["Customdomain"][];
29871
+ /** @description Rows matching the whole filter, across every page. Only with `?count=true`. */
29872
+ total?: number;
29071
29873
  };
29072
29874
  };
29073
29875
  };
@@ -31436,6 +32238,7 @@ export interface operations {
31436
32238
  refresh_token?: string;
31437
32239
  id_token?: string;
31438
32240
  scope?: string;
32241
+ issued_token_type?: string;
31439
32242
  };
31440
32243
  };
31441
32244
  };
@@ -31573,6 +32376,7 @@ export interface operations {
31573
32376
  refresh_token?: string;
31574
32377
  id_token?: string;
31575
32378
  scope?: string;
32379
+ issued_token_type?: string;
31576
32380
  };
31577
32381
  };
31578
32382
  };
@@ -32309,6 +33113,48 @@ export interface operations {
32309
33113
  };
32310
33114
  };
32311
33115
  };
33116
+ "oauth/authorizationServerMetadata": {
33117
+ parameters: {
33118
+ query?: never;
33119
+ header?: never;
33120
+ path?: never;
33121
+ cookie?: never;
33122
+ };
33123
+ requestBody?: never;
33124
+ responses: {
33125
+ /** @description Default Response */
33126
+ 200: {
33127
+ headers: {
33128
+ [name: string]: unknown;
33129
+ };
33130
+ content?: never;
33131
+ };
33132
+ /** @description `too_many_requests` — Rate limit exceeded. Honour the `Retry-After` header. */
33133
+ 429: {
33134
+ headers: {
33135
+ [name: string]: unknown;
33136
+ };
33137
+ content: {
33138
+ "application/json": components["schemas"]["ErrorResponse"] & {
33139
+ /** @enum {string} */
33140
+ error_code?: "too_many_requests";
33141
+ };
33142
+ };
33143
+ };
33144
+ /** @description `internal_error` — Unexpected server error. Retry later; the request id is logged. */
33145
+ 500: {
33146
+ headers: {
33147
+ [name: string]: unknown;
33148
+ };
33149
+ content: {
33150
+ "application/json": components["schemas"]["ErrorResponse"] & {
33151
+ /** @enum {string} */
33152
+ error_code?: "internal_error";
33153
+ };
33154
+ };
33155
+ };
33156
+ };
33157
+ };
32312
33158
  "oauth/jwks": {
32313
33159
  parameters: {
32314
33160
  query?: never;
@@ -32558,7 +33404,7 @@ export interface operations {
32558
33404
  content: {
32559
33405
  "application/json": {
32560
33406
  client_id: string;
32561
- client_secret: string;
33407
+ client_secret?: string;
32562
33408
  /** @description Unix timestamp (seconds) at which the client_id was issued */
32563
33409
  client_id_issued_at: number;
32564
33410
  /** @description 0 if the client_secret does not expire */
@@ -32654,6 +33500,85 @@ export interface operations {
32654
33500
  };
32655
33501
  };
32656
33502
  };
33503
+ "oauth/revoke": {
33504
+ parameters: {
33505
+ query?: never;
33506
+ header?: never;
33507
+ path?: never;
33508
+ cookie?: never;
33509
+ };
33510
+ requestBody: {
33511
+ content: {
33512
+ "application/json": {
33513
+ token: string;
33514
+ token_type_hint?: string;
33515
+ client_id?: string;
33516
+ client_secret?: string;
33517
+ };
33518
+ };
33519
+ };
33520
+ responses: {
33521
+ /** @description Default Response */
33522
+ 200: {
33523
+ headers: {
33524
+ [name: string]: unknown;
33525
+ };
33526
+ content?: never;
33527
+ };
33528
+ /**
33529
+ * @description `invalid_client` — The `client_id` in the request does not name a client of this account.
33530
+ *
33531
+ * `validation_error` — The body, query or path failed schema validation. `details.issues` lists each failing field.
33532
+ */
33533
+ 400: {
33534
+ headers: {
33535
+ [name: string]: unknown;
33536
+ };
33537
+ content: {
33538
+ "application/json": components["schemas"]["ErrorResponse"] & {
33539
+ /** @enum {string} */
33540
+ error_code?: "invalid_client" | "validation_error";
33541
+ };
33542
+ };
33543
+ };
33544
+ /** @description `account_not_found` — No Auth Account matches the request (domain, header or token). */
33545
+ 404: {
33546
+ headers: {
33547
+ [name: string]: unknown;
33548
+ };
33549
+ content: {
33550
+ "application/json": components["schemas"]["ErrorResponse"] & {
33551
+ /** @enum {string} */
33552
+ error_code?: "account_not_found";
33553
+ };
33554
+ };
33555
+ };
33556
+ /** @description `too_many_requests` — Rate limit exceeded. Honour the `Retry-After` header. */
33557
+ 429: {
33558
+ headers: {
33559
+ [name: string]: unknown;
33560
+ };
33561
+ content: {
33562
+ "application/json": components["schemas"]["ErrorResponse"] & {
33563
+ /** @enum {string} */
33564
+ error_code?: "too_many_requests";
33565
+ };
33566
+ };
33567
+ };
33568
+ /** @description `internal_error` — Unexpected server error. Retry later; the request id is logged. */
33569
+ 500: {
33570
+ headers: {
33571
+ [name: string]: unknown;
33572
+ };
33573
+ content: {
33574
+ "application/json": components["schemas"]["ErrorResponse"] & {
33575
+ /** @enum {string} */
33576
+ error_code?: "internal_error";
33577
+ };
33578
+ };
33579
+ };
33580
+ };
33581
+ };
32657
33582
  "usernamepassword/login": {
32658
33583
  parameters: {
32659
33584
  query?: never;