@faable/auth-sdk 2.7.34 → 2.7.36

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.
@@ -627,6 +627,7 @@ export declare class FaableAuthApi extends GeneratedFaableAuthApi {
627
627
  require_number?: boolean | undefined;
628
628
  require_special?: boolean | undefined;
629
629
  } | undefined;
630
+ login_identifier?: "username" | "email" | "email_or_username" | undefined;
630
631
  disable_signup?: boolean | undefined;
631
632
  account: string;
632
633
  metadata: {
@@ -666,6 +667,7 @@ export declare class FaableAuthApi extends GeneratedFaableAuthApi {
666
667
  require_number?: boolean | undefined;
667
668
  require_special?: boolean | undefined;
668
669
  } | undefined;
670
+ login_identifier?: "username" | "email" | "email_or_username" | undefined;
669
671
  disable_signup?: boolean | undefined;
670
672
  account: string;
671
673
  metadata: {
@@ -708,6 +710,7 @@ export declare class FaableAuthApi extends GeneratedFaableAuthApi {
708
710
  require_number?: boolean | undefined;
709
711
  require_special?: boolean | undefined;
710
712
  } | undefined;
713
+ login_identifier?: "username" | "email" | "email_or_username" | undefined;
711
714
  disable_signup?: boolean | undefined;
712
715
  account: string;
713
716
  metadata: {
@@ -749,6 +752,7 @@ export declare class FaableAuthApi extends GeneratedFaableAuthApi {
749
752
  require_number?: boolean | undefined;
750
753
  require_special?: boolean | undefined;
751
754
  } | undefined;
755
+ login_identifier?: "username" | "email" | "email_or_username" | undefined;
752
756
  disable_signup?: boolean | undefined;
753
757
  account: string;
754
758
  metadata: {
@@ -1812,6 +1812,7 @@ export declare abstract class GeneratedFaableAuthApi extends FaableApi {
1812
1812
  require_number?: boolean | undefined;
1813
1813
  require_special?: boolean | undefined;
1814
1814
  } | undefined;
1815
+ login_identifier?: "username" | "email" | "email_or_username" | undefined;
1815
1816
  disable_signup?: boolean | undefined;
1816
1817
  account: string;
1817
1818
  metadata: {
@@ -1867,6 +1868,7 @@ export declare abstract class GeneratedFaableAuthApi extends FaableApi {
1867
1868
  require_number?: boolean | undefined;
1868
1869
  require_special?: boolean | undefined;
1869
1870
  } | undefined;
1871
+ login_identifier?: "username" | "email" | "email_or_username" | undefined;
1870
1872
  disable_signup?: boolean | undefined;
1871
1873
  account: string;
1872
1874
  metadata: {
@@ -1923,6 +1925,7 @@ export declare abstract class GeneratedFaableAuthApi extends FaableApi {
1923
1925
  require_number?: boolean | undefined;
1924
1926
  require_special?: boolean | undefined;
1925
1927
  } | undefined;
1928
+ login_identifier?: "username" | "email" | "email_or_username" | undefined;
1926
1929
  disable_signup?: boolean | undefined;
1927
1930
  account: string;
1928
1931
  metadata: {
@@ -1980,6 +1983,7 @@ export declare abstract class GeneratedFaableAuthApi extends FaableApi {
1980
1983
  require_number?: boolean | undefined;
1981
1984
  require_special?: boolean | undefined;
1982
1985
  } | undefined;
1986
+ login_identifier?: "username" | "email" | "email_or_username" | undefined;
1983
1987
  disable_signup?: boolean | undefined;
1984
1988
  account: string;
1985
1989
  metadata: {
@@ -2019,6 +2023,7 @@ export declare abstract class GeneratedFaableAuthApi extends FaableApi {
2019
2023
  require_number?: boolean | undefined;
2020
2024
  require_special?: boolean | undefined;
2021
2025
  } | undefined;
2026
+ login_identifier?: "username" | "email" | "email_or_username" | undefined;
2022
2027
  disable_signup?: boolean | undefined;
2023
2028
  account: string;
2024
2029
  metadata: {
@@ -2061,6 +2066,7 @@ export declare abstract class GeneratedFaableAuthApi extends FaableApi {
2061
2066
  require_number?: boolean | undefined;
2062
2067
  require_special?: boolean | undefined;
2063
2068
  } | undefined;
2069
+ login_identifier?: "username" | "email" | "email_or_username" | undefined;
2064
2070
  disable_signup?: boolean | undefined;
2065
2071
  account: string;
2066
2072
  metadata: {
@@ -2118,6 +2124,7 @@ export declare abstract class GeneratedFaableAuthApi extends FaableApi {
2118
2124
  require_number?: boolean | undefined;
2119
2125
  require_special?: boolean | undefined;
2120
2126
  } | undefined;
2127
+ login_identifier?: "username" | "email" | "email_or_username" | undefined;
2121
2128
  disable_signup?: boolean | undefined;
2122
2129
  account: string;
2123
2130
  metadata: {
@@ -4387,6 +4387,8 @@ export interface components {
4387
4387
  require_number?: boolean;
4388
4388
  require_special?: boolean;
4389
4389
  };
4390
+ /** @description What users of this database connection sign in with: `email`, `username`, or `email_or_username` (email first, then username). The login looks up only the matching field, and the hosted login screen asks for it — validating the address format under `email`. New database connections default to `email`; a connection created before this setting existed behaves as `email_or_username`. Only meaningful on `database` connections. */
4391
+ login_identifier?: "email" | "username" | "email_or_username";
4390
4392
  /** @description When true, the public self-service signup endpoint (`POST /dbconnections/signup`) rejects new registrations against this database connection with `403 signup_disabled`. Defaults to false (signup allowed). Only meaningful on `database` connections; mirrors Auth0 `disable_signup`. */
4391
4393
  disable_signup?: boolean;
4392
4394
  /** @description Object is related with this account */
@@ -4449,6 +4451,8 @@ export interface components {
4449
4451
  require_special?: boolean;
4450
4452
  };
4451
4453
  disable_signup?: boolean;
4454
+ /** @description What users of this database connection sign in with: `email`, `username`, or `email_or_username` (email first, then username). The login looks up only the matching field, and the hosted login screen asks for it — validating the address format under `email`. New database connections default to `email`; a connection created before this setting existed behaves as `email_or_username`. Only meaningful on `database` connections. */
4455
+ login_identifier?: "email" | "username" | "email_or_username";
4452
4456
  /** @description Add Metadata */
4453
4457
  metadata?: {
4454
4458
  [key: string]: unknown;
@@ -4492,6 +4496,8 @@ export interface components {
4492
4496
  require_special?: boolean;
4493
4497
  } | null;
4494
4498
  disable_signup?: boolean;
4499
+ /** @description What users of this database connection sign in with: `email`, `username`, or `email_or_username` (email first, then username). The login looks up only the matching field, and the hosted login screen asks for it — validating the address format under `email`. New database connections default to `email`; a connection created before this setting existed behaves as `email_or_username`. Only meaningful on `database` connections. */
4500
+ login_identifier?: "email" | "username" | "email_or_username";
4495
4501
  };
4496
4502
  /** @description Presentation metadata for one connection type. Contains no endpoint URLs and no credentials. */
4497
4503
  ConnectionTypeInfo: {
@@ -4535,6 +4541,8 @@ export interface components {
4535
4541
  require_number?: boolean;
4536
4542
  require_special?: boolean;
4537
4543
  };
4544
+ /** @description What users of this database connection sign in with: `email`, `username`, or `email_or_username` (email first, then username). The login looks up only the matching field, and the hosted login screen asks for it — validating the address format under `email`. New database connections default to `email`; a connection created before this setting existed behaves as `email_or_username`. Only meaningful on `database` connections. */
4545
+ login_identifier?: "email" | "username" | "email_or_username";
4538
4546
  };
4539
4547
  /** @description Client */
4540
4548
  Client: {
@@ -6248,6 +6256,9 @@ export interface components {
6248
6256
  code?: string;
6249
6257
  code_verifier?: string;
6250
6258
  username?: string;
6259
+ password?: string;
6260
+ /** @description For `grant_type=password`: the name of the database connection to sign in against. Defaults to the first database connection offered to the client. */
6261
+ realm?: string;
6251
6262
  otp?: string;
6252
6263
  refresh_token?: string;
6253
6264
  /** @description Opaque token returned with a `403 mfa_required` response. Present it here with `grant_type=http://auth0.com/oauth/grant-type/mfa-otp` (or `…/mfa-recovery-code`) and the code, to finish a grant a second-factor policy interrupted. */
@@ -6397,6 +6408,7 @@ export interface components {
6397
6408
  * - `mfa_invalid_code` (401): The authenticator code did not verify.
6398
6409
  * - `mfa_invalid_recovery_code` (401): The recovery code did not verify.
6399
6410
  * - `too_many_attempts` (429): Too many wrong codes. Wait a few minutes and try again.
6411
+ * - `too_many_login_attempts` (429): Too many failed sign-in attempts for this email or username from this network. Wait a few minutes and try again.
6400
6412
  * - `totp_not_allowed` (401): This account does not accept authenticator apps.
6401
6413
  * - `no_usable_factor` (400): The user has no confirmed second factor to challenge.
6402
6414
  * - `factor_not_found` (400): No factor with that id belongs to this user.
@@ -6418,7 +6430,7 @@ export interface components {
6418
6430
  * - `revision_not_found` (404): The revision is not in the flow history.
6419
6431
  * @enum {string}
6420
6432
  */
6421
- 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" | "plan_required" | "not_logged_in" | "invalid_token" | "not_owner" | "user_suspended" | "invalid_credentials" | "login_denied" | "signup_denied" | "client_credentials_denied" | "signup_disabled" | "email_taken" | "invalid_email" | "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" | "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" | "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" | "invite_not_found" | "invite_used" | "already_member" | "not_a_member" | "role_not_found" | "invalid_role" | "flow_not_found" | "revision_not_found";
6433
+ 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" | "plan_required" | "not_logged_in" | "invalid_token" | "not_owner" | "user_suspended" | "invalid_credentials" | "login_denied" | "signup_denied" | "client_credentials_denied" | "signup_disabled" | "email_taken" | "invalid_email" | "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" | "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" | "invite_not_found" | "invite_used" | "already_member" | "not_a_member" | "role_not_found" | "invalid_role" | "flow_not_found" | "revision_not_found";
6422
6434
  /** @description Every error response has this shape. Branch on `error_code`, never on `message`: the message is written for a person and may change. */
6423
6435
  ErrorResponse: {
6424
6436
  /** @description The HTTP status, repeated. */
@@ -8411,6 +8423,8 @@ export interface operations {
8411
8423
  require_special?: boolean;
8412
8424
  };
8413
8425
  disable_signup?: boolean;
8426
+ /** @description What users of this database connection sign in with: `email`, `username`, or `email_or_username` (email first, then username). The login looks up only the matching field, and the hosted login screen asks for it — validating the address format under `email`. New database connections default to `email`; a connection created before this setting existed behaves as `email_or_username`. Only meaningful on `database` connections. */
8427
+ login_identifier?: "email" | "username" | "email_or_username";
8414
8428
  /** @description Add Metadata */
8415
8429
  metadata?: {
8416
8430
  [key: string]: unknown;
@@ -8475,6 +8489,8 @@ export interface operations {
8475
8489
  require_number?: boolean;
8476
8490
  require_special?: boolean;
8477
8491
  };
8492
+ /** @description What users of this database connection sign in with: `email`, `username`, or `email_or_username` (email first, then username). The login looks up only the matching field, and the hosted login screen asks for it — validating the address format under `email`. New database connections default to `email`; a connection created before this setting existed behaves as `email_or_username`. Only meaningful on `database` connections. */
8493
+ login_identifier?: "email" | "username" | "email_or_username";
8478
8494
  /** @description When true, the public self-service signup endpoint (`POST /dbconnections/signup`) rejects new registrations against this database connection with `403 signup_disabled`. Defaults to false (signup allowed). Only meaningful on `database` connections; mirrors Auth0 `disable_signup`. */
8479
8495
  disable_signup?: boolean;
8480
8496
  /** @description Object is related with this account */
@@ -8644,6 +8660,8 @@ export interface operations {
8644
8660
  require_number?: boolean;
8645
8661
  require_special?: boolean;
8646
8662
  };
8663
+ /** @description What users of this database connection sign in with: `email`, `username`, or `email_or_username` (email first, then username). The login looks up only the matching field, and the hosted login screen asks for it — validating the address format under `email`. New database connections default to `email`; a connection created before this setting existed behaves as `email_or_username`. Only meaningful on `database` connections. */
8664
+ login_identifier?: "email" | "username" | "email_or_username";
8647
8665
  /** @description When true, the public self-service signup endpoint (`POST /dbconnections/signup`) rejects new registrations against this database connection with `403 signup_disabled`. Defaults to false (signup allowed). Only meaningful on `database` connections; mirrors Auth0 `disable_signup`. */
8648
8666
  disable_signup?: boolean;
8649
8667
  /** @description Object is related with this account */
@@ -8797,6 +8815,8 @@ export interface operations {
8797
8815
  require_special?: boolean;
8798
8816
  } | null;
8799
8817
  disable_signup?: boolean;
8818
+ /** @description What users of this database connection sign in with: `email`, `username`, or `email_or_username` (email first, then username). The login looks up only the matching field, and the hosted login screen asks for it — validating the address format under `email`. New database connections default to `email`; a connection created before this setting existed behaves as `email_or_username`. Only meaningful on `database` connections. */
8819
+ login_identifier?: "email" | "username" | "email_or_username";
8800
8820
  };
8801
8821
  };
8802
8822
  };
@@ -8857,6 +8877,8 @@ export interface operations {
8857
8877
  require_number?: boolean;
8858
8878
  require_special?: boolean;
8859
8879
  };
8880
+ /** @description What users of this database connection sign in with: `email`, `username`, or `email_or_username` (email first, then username). The login looks up only the matching field, and the hosted login screen asks for it — validating the address format under `email`. New database connections default to `email`; a connection created before this setting existed behaves as `email_or_username`. Only meaningful on `database` connections. */
8881
+ login_identifier?: "email" | "username" | "email_or_username";
8860
8882
  /** @description When true, the public self-service signup endpoint (`POST /dbconnections/signup`) rejects new registrations against this database connection with `403 signup_disabled`. Defaults to false (signup allowed). Only meaningful on `database` connections; mirrors Auth0 `disable_signup`. */
8861
8883
  disable_signup?: boolean;
8862
8884
  /** @description Object is related with this account */
@@ -9032,6 +9054,8 @@ export interface operations {
9032
9054
  require_number?: boolean;
9033
9055
  require_special?: boolean;
9034
9056
  };
9057
+ /** @description What users of this database connection sign in with: `email`, `username`, or `email_or_username` (email first, then username). The login looks up only the matching field, and the hosted login screen asks for it — validating the address format under `email`. New database connections default to `email`; a connection created before this setting existed behaves as `email_or_username`. Only meaningful on `database` connections. */
9058
+ login_identifier?: "email" | "username" | "email_or_username";
9035
9059
  /** @description When true, the public self-service signup endpoint (`POST /dbconnections/signup`) rejects new registrations against this database connection with `403 signup_disabled`. Defaults to false (signup allowed). Only meaningful on `database` connections; mirrors Auth0 `disable_signup`. */
9036
9060
  disable_signup?: boolean;
9037
9061
  /** @description Object is related with this account */
@@ -25228,6 +25252,9 @@ export interface operations {
25228
25252
  code?: string;
25229
25253
  code_verifier?: string;
25230
25254
  username?: string;
25255
+ password?: string;
25256
+ /** @description For `grant_type=password`: the name of the database connection to sign in against. Defaults to the first database connection offered to the client. */
25257
+ realm?: string;
25231
25258
  otp?: string;
25232
25259
  refresh_token?: string;
25233
25260
  /** @description Opaque token returned with a `403 mfa_required` response. Present it here with `grant_type=http://auth0.com/oauth/grant-type/mfa-otp` (or `…/mfa-recovery-code`) and the code, to finish a grant a second-factor policy interrupted. */
@@ -25326,6 +25353,9 @@ export interface operations {
25326
25353
  code?: string;
25327
25354
  code_verifier?: string;
25328
25355
  username?: string;
25356
+ password?: string;
25357
+ /** @description For `grant_type=password`: the name of the database connection to sign in against. Defaults to the first database connection offered to the client. */
25358
+ realm?: string;
25329
25359
  otp?: string;
25330
25360
  refresh_token?: string;
25331
25361
  /** @description Opaque token returned with a `403 mfa_required` response. Present it here with `grant_type=http://auth0.com/oauth/grant-type/mfa-otp` (or `…/mfa-recovery-code`) and the code, to finish a grant a second-factor policy interrupted. */
@@ -25356,6 +25386,9 @@ export interface operations {
25356
25386
  code?: string;
25357
25387
  code_verifier?: string;
25358
25388
  username?: string;
25389
+ password?: string;
25390
+ /** @description For `grant_type=password`: the name of the database connection to sign in against. Defaults to the first database connection offered to the client. */
25391
+ realm?: string;
25359
25392
  otp?: string;
25360
25393
  refresh_token?: string;
25361
25394
  /** @description Opaque token returned with a `403 mfa_required` response. Present it here with `grant_type=http://auth0.com/oauth/grant-type/mfa-otp` (or `…/mfa-recovery-code`) and the code, to finish a grant a second-factor policy interrupted. */
package/dist/version.js CHANGED
@@ -9,13 +9,13 @@
9
9
  // login pages could not import the SDK at all. Same pattern as auth-js.
10
10
  //
11
11
  // The sentinels MUST stay byte-identical to the `from` values in `.releaserc`.
12
- export const version = "2.7.34";
12
+ export const version = "2.7.36";
13
13
  // Short git SHA of the released commit. The version dates a build; this names
14
14
  // the exact tree, so a canonical log line or an audit entry leads straight to
15
15
  // `git show <sha>`. Deliberately NOT hex: an unreleased build (dev, a local
16
16
  // link) cannot be mistaken for a real commit — auth only records values that
17
17
  // look like a SHA, and this one never will.
18
- export const commit = "d8f42bf";
18
+ export const commit = "3f9e3b8";
19
19
  // What this SDK writes in `x-faable-client`. Exported for a consumer that
20
20
  // builds a strategy on its own (outside `FaableAuthApi`) and still wants the
21
21
  // token request attributed — a bare `authClientCredentials` stamps only what
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@faable/auth-sdk",
3
- "version": "2.7.34",
3
+ "version": "2.7.36",
4
4
  "author": "Marc Pomar <marc@faable.com>",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
package/spec/openapi.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "info": {
4
4
  "title": "@faablecloud/auth",
5
5
  "description": "Auth Platform made by Faable. Manage Users and Roles",
6
- "version": "2.37.2",
6
+ "version": "2.39.0",
7
7
  "license": {
8
8
  "name": "private",
9
9
  "url": "https://faable.com/docs/platform/privacy-policy"
@@ -741,6 +741,29 @@
741
741
  },
742
742
  "description": "Password policy enforced when writing a password through this database connection (password reset and admin set-password). `level` is an Auth0-style preset (none/low/fair/good/excellent); the dashboard expands it into the explicit rule fields when saving. The rule fields override the preset baseline. When unset on the connection, the server applies the `good` default. Does not affect login."
743
743
  },
744
+ "login_identifier": {
745
+ "anyOf": [
746
+ {
747
+ "type": "string",
748
+ "enum": [
749
+ "email"
750
+ ]
751
+ },
752
+ {
753
+ "type": "string",
754
+ "enum": [
755
+ "username"
756
+ ]
757
+ },
758
+ {
759
+ "type": "string",
760
+ "enum": [
761
+ "email_or_username"
762
+ ]
763
+ }
764
+ ],
765
+ "description": "What users of this database connection sign in with: `email`, `username`, or `email_or_username` (email first, then username). The login looks up only the matching field, and the hosted login screen asks for it — validating the address format under `email`. New database connections default to `email`; a connection created before this setting existed behaves as `email_or_username`. Only meaningful on `database` connections."
766
+ },
744
767
  "disable_signup": {
745
768
  "type": "boolean",
746
769
  "description": "When true, the public self-service signup endpoint (`POST /dbconnections/signup`) rejects new registrations against this database connection with `403 signup_disabled`. Defaults to false (signup allowed). Only meaningful on `database` connections; mirrors Auth0 `disable_signup`."
@@ -914,6 +937,29 @@
914
937
  "disable_signup": {
915
938
  "type": "boolean"
916
939
  },
940
+ "login_identifier": {
941
+ "anyOf": [
942
+ {
943
+ "type": "string",
944
+ "enum": [
945
+ "email"
946
+ ]
947
+ },
948
+ {
949
+ "type": "string",
950
+ "enum": [
951
+ "username"
952
+ ]
953
+ },
954
+ {
955
+ "type": "string",
956
+ "enum": [
957
+ "email_or_username"
958
+ ]
959
+ }
960
+ ],
961
+ "description": "What users of this database connection sign in with: `email`, `username`, or `email_or_username` (email first, then username). The login looks up only the matching field, and the hosted login screen asks for it — validating the address format under `email`. New database connections default to `email`; a connection created before this setting existed behaves as `email_or_username`. Only meaningful on `database` connections."
962
+ },
917
963
  "metadata": {
918
964
  "type": "object",
919
965
  "properties": {},
@@ -1077,6 +1123,29 @@
1077
1123
  },
1078
1124
  "disable_signup": {
1079
1125
  "type": "boolean"
1126
+ },
1127
+ "login_identifier": {
1128
+ "anyOf": [
1129
+ {
1130
+ "type": "string",
1131
+ "enum": [
1132
+ "email"
1133
+ ]
1134
+ },
1135
+ {
1136
+ "type": "string",
1137
+ "enum": [
1138
+ "username"
1139
+ ]
1140
+ },
1141
+ {
1142
+ "type": "string",
1143
+ "enum": [
1144
+ "email_or_username"
1145
+ ]
1146
+ }
1147
+ ],
1148
+ "description": "What users of this database connection sign in with: `email`, `username`, or `email_or_username` (email first, then username). The login looks up only the matching field, and the hosted login screen asks for it — validating the address format under `email`. New database connections default to `email`; a connection created before this setting existed behaves as `email_or_username`. Only meaningful on `database` connections."
1080
1149
  }
1081
1150
  },
1082
1151
  "description": "Partial update for a Connection. Only the supplied fields are modified. `connection_type` is intentionally excluded — changing it would orphan every identity already linked to this connection.",
@@ -1252,6 +1321,29 @@
1252
1321
  }
1253
1322
  },
1254
1323
  "description": "Password policy enforced when writing a password through this database connection (password reset and admin set-password). `level` is an Auth0-style preset (none/low/fair/good/excellent); the dashboard expands it into the explicit rule fields when saving. The rule fields override the preset baseline. When unset on the connection, the server applies the `good` default. Does not affect login."
1324
+ },
1325
+ "login_identifier": {
1326
+ "anyOf": [
1327
+ {
1328
+ "type": "string",
1329
+ "enum": [
1330
+ "email"
1331
+ ]
1332
+ },
1333
+ {
1334
+ "type": "string",
1335
+ "enum": [
1336
+ "username"
1337
+ ]
1338
+ },
1339
+ {
1340
+ "type": "string",
1341
+ "enum": [
1342
+ "email_or_username"
1343
+ ]
1344
+ }
1345
+ ],
1346
+ "description": "What users of this database connection sign in with: `email`, `username`, or `email_or_username` (email first, then username). The login looks up only the matching field, and the hosted login screen asks for it — validating the address format under `email`. New database connections default to `email`; a connection created before this setting existed behaves as `email_or_username`. Only meaningful on `database` connections."
1255
1347
  }
1256
1348
  },
1257
1349
  "additionalProperties": false
@@ -6776,6 +6868,13 @@
6776
6868
  "username": {
6777
6869
  "type": "string"
6778
6870
  },
6871
+ "password": {
6872
+ "type": "string"
6873
+ },
6874
+ "realm": {
6875
+ "type": "string",
6876
+ "description": "For `grant_type=password`: the name of the database connection to sign in against. Defaults to the first database connection offered to the client."
6877
+ },
6779
6878
  "otp": {
6780
6879
  "type": "string"
6781
6880
  },
@@ -6965,7 +7064,7 @@
6965
7064
  },
6966
7065
  "ErrorCode": {
6967
7066
  "type": "string",
6968
- "description": "Machine-readable error code. One HTTP status per code.\n\n- `bad_request` (400): The request is malformed. `message` says what is wrong.\n- `validation_error` (400): The body, query or path failed schema validation. `details.issues` lists each failing field.\n- `unauthorized` (401): The request carries no valid credentials.\n- `payment_required` (402): The feature is not included in the current plan.\n- `forbidden` (403): The credentials are valid but do not allow this operation.\n- `not_found` (404): The resource does not exist in this account.\n- `method_not_allowed` (405): The HTTP method is not supported on this path.\n- `conflict` (409): The request conflicts with the current state of the resource.\n- `payload_too_large` (413): The request body exceeds the size limit.\n- `unsupported_media_type` (415): The `Content-Type` is not accepted by this endpoint.\n- `unprocessable_entity` (422): The request is well-formed but cannot be processed.\n- `too_many_requests` (429): Rate limit exceeded. Honour the `Retry-After` header.\n- `internal_error` (500): Unexpected server error. Retry later; the request id is logged.\n- `already_exists` (400): A resource with the same unique field already exists (for a user, usually `email`). `details.fields` names the field.\n- `invalid_id` (400): The id in the path is not a valid id for this resource.\n- `account_not_found` (404): No Auth Account matches the request (domain, header or token).\n- `invalid_query` (400): The `?query=` FaableQL expression could not be parsed.\n- `search_not_supported` (400): This resource does not support `?search=`.\n- `invalid_expand` (400): An `?expand=` path is not allowed on this resource.\n- `access_denied` (401): The caller may not access this row (ownership or machine-to-machine restriction).\n- `insufficient_scope` (403): The token lacks a scope this operation requires. `message` names it.\n- `team_required` (400): An Auth Account must belong to a project (team).\n- `account_limit_reached` (409): The project already has the maximum number of Auth Accounts.\n- `invalid_project_id` (400): The project id is not of the form `project_<hex>` or `team_<hex>`.\n- `account_transfer_refused` (409): The Auth Account cannot be moved to that project. `details.blockers` lists why.\n- `plan_required` (402): The setting requires a higher plan. `message` says which.\n- `not_logged_in` (401): There is no signed-in session for this request.\n- `invalid_token` (401): The bearer token is missing, malformed, expired or has no subject.\n- `not_owner` (403): The caller may only perform this operation on their own user.\n- `user_suspended` (403): The user is suspended and cannot sign in or be modified.\n- `invalid_credentials` (400): The email/username or password is incorrect.\n- `login_denied` (401): A post-login Action denied the sign-in. `message` carries the reason it gave. On token grants it is a 403 with `error: invalid_grant`.\n- `signup_denied` (403): A pre-signup Action or an active block denied the sign-up. `message` carries the reason.\n- `client_credentials_denied` (401): An Action denied the client_credentials grant. `message` carries the reason.\n- `signup_disabled` (403): Self-service sign-up is disabled on this connection.\n- `email_taken` (409): Another user in this account already uses that email.\n- `invalid_email` (400): The email address is not valid.\n- `same_email` (400): The new email is the same as the current one.\n- `user_has_no_email` (400): The operation needs an email but the user has none.\n- `password_too_weak` (400): The password does not meet the connection policy. `message` lists each unmet rule.\n- `invalid_password_hash` (400): The imported password hash cannot be read, or its cost is above what a login can afford. `message` names the field.\n- `weak_password_hash` (400): The imported password hash uses a fast digest (MD5, SHA-1, SHA-2) or a cost below the minimum. `message` says which.\n- `invalid_code` (400): The verification code is wrong, expired or already used.\n- `invalid_phone` (400): The phone number is not E.164 and could not be resolved with the account default country. Include the country code.\n- `phone_changed` (400): The phone on the user changed after the code was sent. Start again.\n- `phone_already_verified` (409): The user already has a verified phone; the number cannot be swapped from the screen.\n- `sms_unavailable` (409): This account cannot send SMS right now. The suffix says why: `sms_unavailable:plan`, `:quota`, `:provider`.\n- `sms_failed` (409): The SMS provider rejected the message.\n- `invalid_state` (400): The `state` is missing, expired, or does not describe a resumable step.\n- `state_mismatch` (401): The `state` belongs to another account, session, client or ceremony.\n- `invalid_ticket` (400): The ticket does not exist or is not the kind this endpoint accepts.\n- `ticket_used` (400): The ticket was already consumed.\n- `ticket_expired` (400): The ticket is past its expiry.\n- `ticket_not_found` (404): No ticket with that id belongs to this user.\n- `credential_not_found` (404): The user has no password credential on this connection.\n- `invalid_link` (400): The magic link is malformed.\n- `expired_link` (400): The magic link token was not found or has expired.\n- `invalid_otp` (401): The one-time password is wrong or expired.\n- `invalid_client` (400): The `client_id` in the request does not name a client of this account.\n- `client_not_found` (404): No client with that `client_id`.\n- `client_mismatch` (401): The client belongs to a different account.\n- `invalid_client_metadata` (400): Dynamic client registration rejected a field (RFC 7591). `message` names it.\n- `invalid_connection` (400): The connection does not exist, is disabled, or is not of the type this flow needs.\n- `connection_required` (400): No connection was given and the client has no `default_connection`.\n- `connection_misconfigured` (400): The connection is missing settings needed to talk to its provider.\n- `passwordless_unavailable` (400): No passwordless connection is configured or enabled for this client.\n- `ambiguous_connection` (400): Several connections match; pass `connection_id`.\n- `invalid_redirect_uri` (400): The redirect URI is not registered for the client.\n- `origin_not_allowed` (403): The request `Origin` is not in the client's Allowed Web Origins.\n- `audience_not_found` (403): The `audience` does not name an API registered in this account.\n- `system_resource` (403): The resource is managed by Faable and cannot be modified or deleted.\n- `invalid_request` (400): A required OAuth parameter is missing or two of them are incompatible. `message` says which.\n- `invalid_device_code` (400): The device or user code is invalid or expired.\n- `provider_error` (400): The upstream identity provider returned an error. The suffix is the provider’s own code, when it sent one: `provider_error:bad_refresh_token` (the user must re-authorize), `provider_error:incorrect_client_credentials` (our configuration, the user can do nothing). `details.provider_error_description` carries the provider’s sentence.\n- `identity_already_linked` (409): That external identity is already linked to another user.\n- `identity_link_denied` (409): That external identity cannot be linked to this user.\n- `identity_conflict` (409): The user already has a linked identity for this connection.\n- `identity_orphaned` (400): The identity pointed at a user that no longer exists; it was removed. Sign in again.\n- `no_provider_token` (400): The identity holds no provider access token.\n- `no_refresh_token` (400): The identity holds no provider refresh token, so it cannot be refreshed.\n- `action_unavailable` (401): The Action that paused this login is disabled or belongs elsewhere.\n- `login_flow_misconfigured` (500): The login flow of this account cannot run. `message` carries the node error.\n- `mfa_required` (403): The login needs a second factor that this flow cannot collect, or one is still pending on the session.\n- `step_up_required` (403): Confirm an existing factor before changing your factors.\n- `interaction_required` (403): An Action asked for a redirect on a non-interactive flow.\n- `passkey_login_disabled` (400): Sign in with a passkey is not enabled for this client.\n- `mfa_pending` (401): A second-factor challenge is pending; answer it before continuing.\n- `mfa_invalid_code` (401): The authenticator code did not verify.\n- `mfa_invalid_recovery_code` (401): The recovery code did not verify.\n- `too_many_attempts` (429): Too many wrong codes. Wait a few minutes and try again.\n- `totp_not_allowed` (401): This account does not accept authenticator apps.\n- `no_usable_factor` (400): The user has no confirmed second factor to challenge.\n- `factor_not_found` (400): No factor with that id belongs to this user.\n- `factor_already_confirmed` (400): The factor was already confirmed.\n- `invalid_factor` (400): The factor cannot be verified (no secret material).\n- `session_missing` (401): The session that started this login no longer exists.\n- `passkey_verification_failed` (400): The WebAuthn response could not be verified.\n- `no_passkey_enrolled` (400): The user has no passkey to sign in with.\n- `malformed_credential` (400): The WebAuthn credential is malformed.\n- `unknown_passkey` (401): The passkey is not enrolled for this user.\n- `invalid_passkey` (401): The passkey assertion did not verify.\n- `invite_not_found` (404): No invite with that id in this account.\n- `invite_used` (400): The invite was already accepted.\n- `already_member` (400): The user is already a member of the team.\n- `not_a_member` (404): The user is not a member of the team.\n- `role_not_found` (404): No role with that id in this account.\n- `invalid_role` (400): The role belongs to another account.\n- `flow_not_found` (400): The login flow does not exist in this account.\n- `revision_not_found` (404): The revision is not in the flow history.",
7067
+ "description": "Machine-readable error code. One HTTP status per code.\n\n- `bad_request` (400): The request is malformed. `message` says what is wrong.\n- `validation_error` (400): The body, query or path failed schema validation. `details.issues` lists each failing field.\n- `unauthorized` (401): The request carries no valid credentials.\n- `payment_required` (402): The feature is not included in the current plan.\n- `forbidden` (403): The credentials are valid but do not allow this operation.\n- `not_found` (404): The resource does not exist in this account.\n- `method_not_allowed` (405): The HTTP method is not supported on this path.\n- `conflict` (409): The request conflicts with the current state of the resource.\n- `payload_too_large` (413): The request body exceeds the size limit.\n- `unsupported_media_type` (415): The `Content-Type` is not accepted by this endpoint.\n- `unprocessable_entity` (422): The request is well-formed but cannot be processed.\n- `too_many_requests` (429): Rate limit exceeded. Honour the `Retry-After` header.\n- `internal_error` (500): Unexpected server error. Retry later; the request id is logged.\n- `already_exists` (400): A resource with the same unique field already exists (for a user, usually `email`). `details.fields` names the field.\n- `invalid_id` (400): The id in the path is not a valid id for this resource.\n- `account_not_found` (404): No Auth Account matches the request (domain, header or token).\n- `invalid_query` (400): The `?query=` FaableQL expression could not be parsed.\n- `search_not_supported` (400): This resource does not support `?search=`.\n- `invalid_expand` (400): An `?expand=` path is not allowed on this resource.\n- `access_denied` (401): The caller may not access this row (ownership or machine-to-machine restriction).\n- `insufficient_scope` (403): The token lacks a scope this operation requires. `message` names it.\n- `team_required` (400): An Auth Account must belong to a project (team).\n- `account_limit_reached` (409): The project already has the maximum number of Auth Accounts.\n- `invalid_project_id` (400): The project id is not of the form `project_<hex>` or `team_<hex>`.\n- `account_transfer_refused` (409): The Auth Account cannot be moved to that project. `details.blockers` lists why.\n- `plan_required` (402): The setting requires a higher plan. `message` says which.\n- `not_logged_in` (401): There is no signed-in session for this request.\n- `invalid_token` (401): The bearer token is missing, malformed, expired or has no subject.\n- `not_owner` (403): The caller may only perform this operation on their own user.\n- `user_suspended` (403): The user is suspended and cannot sign in or be modified.\n- `invalid_credentials` (400): The email/username or password is incorrect.\n- `login_denied` (401): A post-login Action denied the sign-in. `message` carries the reason it gave. On token grants it is a 403 with `error: invalid_grant`.\n- `signup_denied` (403): A pre-signup Action or an active block denied the sign-up. `message` carries the reason.\n- `client_credentials_denied` (401): An Action denied the client_credentials grant. `message` carries the reason.\n- `signup_disabled` (403): Self-service sign-up is disabled on this connection.\n- `email_taken` (409): Another user in this account already uses that email.\n- `invalid_email` (400): The email address is not valid.\n- `same_email` (400): The new email is the same as the current one.\n- `user_has_no_email` (400): The operation needs an email but the user has none.\n- `password_too_weak` (400): The password does not meet the connection policy. `message` lists each unmet rule.\n- `invalid_password_hash` (400): The imported password hash cannot be read, or its cost is above what a login can afford. `message` names the field.\n- `weak_password_hash` (400): The imported password hash uses a fast digest (MD5, SHA-1, SHA-2) or a cost below the minimum. `message` says which.\n- `invalid_code` (400): The verification code is wrong, expired or already used.\n- `invalid_phone` (400): The phone number is not E.164 and could not be resolved with the account default country. Include the country code.\n- `phone_changed` (400): The phone on the user changed after the code was sent. Start again.\n- `phone_already_verified` (409): The user already has a verified phone; the number cannot be swapped from the screen.\n- `sms_unavailable` (409): This account cannot send SMS right now. The suffix says why: `sms_unavailable:plan`, `:quota`, `:provider`.\n- `sms_failed` (409): The SMS provider rejected the message.\n- `invalid_state` (400): The `state` is missing, expired, or does not describe a resumable step.\n- `state_mismatch` (401): The `state` belongs to another account, session, client or ceremony.\n- `invalid_ticket` (400): The ticket does not exist or is not the kind this endpoint accepts.\n- `ticket_used` (400): The ticket was already consumed.\n- `ticket_expired` (400): The ticket is past its expiry.\n- `ticket_not_found` (404): No ticket with that id belongs to this user.\n- `credential_not_found` (404): The user has no password credential on this connection.\n- `invalid_link` (400): The magic link is malformed.\n- `expired_link` (400): The magic link token was not found or has expired.\n- `invalid_otp` (401): The one-time password is wrong or expired.\n- `invalid_client` (400): The `client_id` in the request does not name a client of this account.\n- `client_not_found` (404): No client with that `client_id`.\n- `client_mismatch` (401): The client belongs to a different account.\n- `invalid_client_metadata` (400): Dynamic client registration rejected a field (RFC 7591). `message` names it.\n- `invalid_connection` (400): The connection does not exist, is disabled, or is not of the type this flow needs.\n- `connection_required` (400): No connection was given and the client has no `default_connection`.\n- `connection_misconfigured` (400): The connection is missing settings needed to talk to its provider.\n- `passwordless_unavailable` (400): No passwordless connection is configured or enabled for this client.\n- `ambiguous_connection` (400): Several connections match; pass `connection_id`.\n- `invalid_redirect_uri` (400): The redirect URI is not registered for the client.\n- `origin_not_allowed` (403): The request `Origin` is not in the client's Allowed Web Origins.\n- `audience_not_found` (403): The `audience` does not name an API registered in this account.\n- `system_resource` (403): The resource is managed by Faable and cannot be modified or deleted.\n- `invalid_request` (400): A required OAuth parameter is missing or two of them are incompatible. `message` says which.\n- `invalid_device_code` (400): The device or user code is invalid or expired.\n- `provider_error` (400): The upstream identity provider returned an error. The suffix is the provider’s own code, when it sent one: `provider_error:bad_refresh_token` (the user must re-authorize), `provider_error:incorrect_client_credentials` (our configuration, the user can do nothing). `details.provider_error_description` carries the provider’s sentence.\n- `identity_already_linked` (409): That external identity is already linked to another user.\n- `identity_link_denied` (409): That external identity cannot be linked to this user.\n- `identity_conflict` (409): The user already has a linked identity for this connection.\n- `identity_orphaned` (400): The identity pointed at a user that no longer exists; it was removed. Sign in again.\n- `no_provider_token` (400): The identity holds no provider access token.\n- `no_refresh_token` (400): The identity holds no provider refresh token, so it cannot be refreshed.\n- `action_unavailable` (401): The Action that paused this login is disabled or belongs elsewhere.\n- `login_flow_misconfigured` (500): The login flow of this account cannot run. `message` carries the node error.\n- `mfa_required` (403): The login needs a second factor that this flow cannot collect, or one is still pending on the session.\n- `step_up_required` (403): Confirm an existing factor before changing your factors.\n- `interaction_required` (403): An Action asked for a redirect on a non-interactive flow.\n- `passkey_login_disabled` (400): Sign in with a passkey is not enabled for this client.\n- `mfa_pending` (401): A second-factor challenge is pending; answer it before continuing.\n- `mfa_invalid_code` (401): The authenticator code did not verify.\n- `mfa_invalid_recovery_code` (401): The recovery code did not verify.\n- `too_many_attempts` (429): Too many wrong codes. Wait a few minutes and try again.\n- `too_many_login_attempts` (429): Too many failed sign-in attempts for this email or username from this network. Wait a few minutes and try again.\n- `totp_not_allowed` (401): This account does not accept authenticator apps.\n- `no_usable_factor` (400): The user has no confirmed second factor to challenge.\n- `factor_not_found` (400): No factor with that id belongs to this user.\n- `factor_already_confirmed` (400): The factor was already confirmed.\n- `invalid_factor` (400): The factor cannot be verified (no secret material).\n- `session_missing` (401): The session that started this login no longer exists.\n- `passkey_verification_failed` (400): The WebAuthn response could not be verified.\n- `no_passkey_enrolled` (400): The user has no passkey to sign in with.\n- `malformed_credential` (400): The WebAuthn credential is malformed.\n- `unknown_passkey` (401): The passkey is not enrolled for this user.\n- `invalid_passkey` (401): The passkey assertion did not verify.\n- `invite_not_found` (404): No invite with that id in this account.\n- `invite_used` (400): The invite was already accepted.\n- `already_member` (400): The user is already a member of the team.\n- `not_a_member` (404): The user is not a member of the team.\n- `role_not_found` (404): No role with that id in this account.\n- `invalid_role` (400): The role belongs to another account.\n- `flow_not_found` (400): The login flow does not exist in this account.\n- `revision_not_found` (404): The revision is not in the flow history.",
6969
7068
  "enum": [
6970
7069
  "bad_request",
6971
7070
  "validation_error",
@@ -7057,6 +7156,7 @@
7057
7156
  "mfa_invalid_code",
7058
7157
  "mfa_invalid_recovery_code",
7059
7158
  "too_many_attempts",
7159
+ "too_many_login_attempts",
7060
7160
  "totp_not_allowed",
7061
7161
  "no_usable_factor",
7062
7162
  "factor_not_found",
@@ -12541,6 +12641,29 @@
12541
12641
  "disable_signup": {
12542
12642
  "type": "boolean"
12543
12643
  },
12644
+ "login_identifier": {
12645
+ "anyOf": [
12646
+ {
12647
+ "type": "string",
12648
+ "enum": [
12649
+ "email"
12650
+ ]
12651
+ },
12652
+ {
12653
+ "type": "string",
12654
+ "enum": [
12655
+ "username"
12656
+ ]
12657
+ },
12658
+ {
12659
+ "type": "string",
12660
+ "enum": [
12661
+ "email_or_username"
12662
+ ]
12663
+ }
12664
+ ],
12665
+ "description": "What users of this database connection sign in with: `email`, `username`, or `email_or_username` (email first, then username). The login looks up only the matching field, and the hosted login screen asks for it — validating the address format under `email`. New database connections default to `email`; a connection created before this setting existed behaves as `email_or_username`. Only meaningful on `database` connections."
12666
+ },
12544
12667
  "metadata": {
12545
12668
  "type": "object",
12546
12669
  "properties": {},
@@ -12753,6 +12876,29 @@
12753
12876
  },
12754
12877
  "description": "Password policy enforced when writing a password through this database connection (password reset and admin set-password). `level` is an Auth0-style preset (none/low/fair/good/excellent); the dashboard expands it into the explicit rule fields when saving. The rule fields override the preset baseline. When unset on the connection, the server applies the `good` default. Does not affect login."
12755
12878
  },
12879
+ "login_identifier": {
12880
+ "anyOf": [
12881
+ {
12882
+ "type": "string",
12883
+ "enum": [
12884
+ "email"
12885
+ ]
12886
+ },
12887
+ {
12888
+ "type": "string",
12889
+ "enum": [
12890
+ "username"
12891
+ ]
12892
+ },
12893
+ {
12894
+ "type": "string",
12895
+ "enum": [
12896
+ "email_or_username"
12897
+ ]
12898
+ }
12899
+ ],
12900
+ "description": "What users of this database connection sign in with: `email`, `username`, or `email_or_username` (email first, then username). The login looks up only the matching field, and the hosted login screen asks for it — validating the address format under `email`. New database connections default to `email`; a connection created before this setting existed behaves as `email_or_username`. Only meaningful on `database` connections."
12901
+ },
12756
12902
  "disable_signup": {
12757
12903
  "type": "boolean",
12758
12904
  "description": "When true, the public self-service signup endpoint (`POST /dbconnections/signup`) rejects new registrations against this database connection with `403 signup_disabled`. Defaults to false (signup allowed). Only meaningful on `database` connections; mirrors Auth0 `disable_signup`."
@@ -13154,6 +13300,29 @@
13154
13300
  },
13155
13301
  "description": "Password policy enforced when writing a password through this database connection (password reset and admin set-password). `level` is an Auth0-style preset (none/low/fair/good/excellent); the dashboard expands it into the explicit rule fields when saving. The rule fields override the preset baseline. When unset on the connection, the server applies the `good` default. Does not affect login."
13156
13302
  },
13303
+ "login_identifier": {
13304
+ "anyOf": [
13305
+ {
13306
+ "type": "string",
13307
+ "enum": [
13308
+ "email"
13309
+ ]
13310
+ },
13311
+ {
13312
+ "type": "string",
13313
+ "enum": [
13314
+ "username"
13315
+ ]
13316
+ },
13317
+ {
13318
+ "type": "string",
13319
+ "enum": [
13320
+ "email_or_username"
13321
+ ]
13322
+ }
13323
+ ],
13324
+ "description": "What users of this database connection sign in with: `email`, `username`, or `email_or_username` (email first, then username). The login looks up only the matching field, and the hosted login screen asks for it — validating the address format under `email`. New database connections default to `email`; a connection created before this setting existed behaves as `email_or_username`. Only meaningful on `database` connections."
13325
+ },
13157
13326
  "disable_signup": {
13158
13327
  "type": "boolean",
13159
13328
  "description": "When true, the public self-service signup endpoint (`POST /dbconnections/signup`) rejects new registrations against this database connection with `403 signup_disabled`. Defaults to false (signup allowed). Only meaningful on `database` connections; mirrors Auth0 `disable_signup`."
@@ -13498,6 +13667,29 @@
13498
13667
  },
13499
13668
  "disable_signup": {
13500
13669
  "type": "boolean"
13670
+ },
13671
+ "login_identifier": {
13672
+ "anyOf": [
13673
+ {
13674
+ "type": "string",
13675
+ "enum": [
13676
+ "email"
13677
+ ]
13678
+ },
13679
+ {
13680
+ "type": "string",
13681
+ "enum": [
13682
+ "username"
13683
+ ]
13684
+ },
13685
+ {
13686
+ "type": "string",
13687
+ "enum": [
13688
+ "email_or_username"
13689
+ ]
13690
+ }
13691
+ ],
13692
+ "description": "What users of this database connection sign in with: `email`, `username`, or `email_or_username` (email first, then username). The login looks up only the matching field, and the hosted login screen asks for it — validating the address format under `email`. New database connections default to `email`; a connection created before this setting existed behaves as `email_or_username`. Only meaningful on `database` connections."
13501
13693
  }
13502
13694
  },
13503
13695
  "description": "Partial update for a Connection. Only the supplied fields are modified. `connection_type` is intentionally excluded — changing it would orphan every identity already linked to this connection.",
@@ -13715,6 +13907,29 @@
13715
13907
  },
13716
13908
  "description": "Password policy enforced when writing a password through this database connection (password reset and admin set-password). `level` is an Auth0-style preset (none/low/fair/good/excellent); the dashboard expands it into the explicit rule fields when saving. The rule fields override the preset baseline. When unset on the connection, the server applies the `good` default. Does not affect login."
13717
13909
  },
13910
+ "login_identifier": {
13911
+ "anyOf": [
13912
+ {
13913
+ "type": "string",
13914
+ "enum": [
13915
+ "email"
13916
+ ]
13917
+ },
13918
+ {
13919
+ "type": "string",
13920
+ "enum": [
13921
+ "username"
13922
+ ]
13923
+ },
13924
+ {
13925
+ "type": "string",
13926
+ "enum": [
13927
+ "email_or_username"
13928
+ ]
13929
+ }
13930
+ ],
13931
+ "description": "What users of this database connection sign in with: `email`, `username`, or `email_or_username` (email first, then username). The login looks up only the matching field, and the hosted login screen asks for it — validating the address format under `email`. New database connections default to `email`; a connection created before this setting existed behaves as `email_or_username`. Only meaningful on `database` connections."
13932
+ },
13718
13933
  "disable_signup": {
13719
13934
  "type": "boolean",
13720
13935
  "description": "When true, the public self-service signup endpoint (`POST /dbconnections/signup`) rejects new registrations against this database connection with `403 signup_disabled`. Defaults to false (signup allowed). Only meaningful on `database` connections; mirrors Auth0 `disable_signup`."
@@ -14116,6 +14331,29 @@
14116
14331
  },
14117
14332
  "description": "Password policy enforced when writing a password through this database connection (password reset and admin set-password). `level` is an Auth0-style preset (none/low/fair/good/excellent); the dashboard expands it into the explicit rule fields when saving. The rule fields override the preset baseline. When unset on the connection, the server applies the `good` default. Does not affect login."
14118
14333
  },
14334
+ "login_identifier": {
14335
+ "anyOf": [
14336
+ {
14337
+ "type": "string",
14338
+ "enum": [
14339
+ "email"
14340
+ ]
14341
+ },
14342
+ {
14343
+ "type": "string",
14344
+ "enum": [
14345
+ "username"
14346
+ ]
14347
+ },
14348
+ {
14349
+ "type": "string",
14350
+ "enum": [
14351
+ "email_or_username"
14352
+ ]
14353
+ }
14354
+ ],
14355
+ "description": "What users of this database connection sign in with: `email`, `username`, or `email_or_username` (email first, then username). The login looks up only the matching field, and the hosted login screen asks for it — validating the address format under `email`. New database connections default to `email`; a connection created before this setting existed behaves as `email_or_username`. Only meaningful on `database` connections."
14356
+ },
14119
14357
  "disable_signup": {
14120
14358
  "type": "boolean",
14121
14359
  "description": "When true, the public self-service signup endpoint (`POST /dbconnections/signup`) rejects new registrations against this database connection with `403 signup_disabled`. Defaults to false (signup allowed). Only meaningful on `database` connections; mirrors Auth0 `disable_signup`."
@@ -55529,6 +55767,23 @@
55529
55767
  "name": "username",
55530
55768
  "required": false
55531
55769
  },
55770
+ {
55771
+ "schema": {
55772
+ "type": "string"
55773
+ },
55774
+ "in": "query",
55775
+ "name": "password",
55776
+ "required": false
55777
+ },
55778
+ {
55779
+ "schema": {
55780
+ "type": "string"
55781
+ },
55782
+ "in": "query",
55783
+ "name": "realm",
55784
+ "required": false,
55785
+ "description": "For `grant_type=password`: the name of the database connection to sign in against. Defaults to the first database connection offered to the client."
55786
+ },
55532
55787
  {
55533
55788
  "schema": {
55534
55789
  "type": "string"
@@ -55836,6 +56091,13 @@
55836
56091
  "username": {
55837
56092
  "type": "string"
55838
56093
  },
56094
+ "password": {
56095
+ "type": "string"
56096
+ },
56097
+ "realm": {
56098
+ "type": "string",
56099
+ "description": "For `grant_type=password`: the name of the database connection to sign in against. Defaults to the first database connection offered to the client."
56100
+ },
55839
56101
  "otp": {
55840
56102
  "type": "string"
55841
56103
  },
@@ -55987,6 +56249,23 @@
55987
56249
  "name": "username",
55988
56250
  "required": false
55989
56251
  },
56252
+ {
56253
+ "schema": {
56254
+ "type": "string"
56255
+ },
56256
+ "in": "query",
56257
+ "name": "password",
56258
+ "required": false
56259
+ },
56260
+ {
56261
+ "schema": {
56262
+ "type": "string"
56263
+ },
56264
+ "in": "query",
56265
+ "name": "realm",
56266
+ "required": false,
56267
+ "description": "For `grant_type=password`: the name of the database connection to sign in against. Defaults to the first database connection offered to the client."
56268
+ },
55990
56269
  {
55991
56270
  "schema": {
55992
56271
  "type": "string"