@faable/auth-sdk 2.5.76 → 2.5.78

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.
@@ -220,6 +220,26 @@ export interface paths {
220
220
  patch?: never;
221
221
  trace?: never;
222
222
  };
223
+ "/flow/identify": {
224
+ parameters: {
225
+ query?: never;
226
+ header?: never;
227
+ path?: never;
228
+ cookie?: never;
229
+ };
230
+ get?: never;
231
+ put?: never;
232
+ /**
233
+ * Leave the identifier-first screen
234
+ * @description Records the identifier the user typed on the hosted `/flow/identify` screen and advances the login to the method chooser. `state` is the id the screen was opened with; it stays valid, so the chooser is reached with the same `?state=`.
235
+ */
236
+ post: operations["flow/identify"];
237
+ delete?: never;
238
+ options?: never;
239
+ head?: never;
240
+ patch?: never;
241
+ trace?: never;
242
+ };
223
243
  "/client": {
224
244
  parameters: {
225
245
  query?: never;
@@ -484,6 +504,26 @@ export interface paths {
484
504
  patch?: never;
485
505
  trace?: never;
486
506
  };
507
+ "/user/{user_id}/passkey-prompt/reset": {
508
+ parameters: {
509
+ query?: never;
510
+ header?: never;
511
+ path?: never;
512
+ cookie?: never;
513
+ };
514
+ get?: never;
515
+ put?: never;
516
+ /**
517
+ * Reset a user's passkey offer counter
518
+ * @description The post-login "create a passkey" offer stops after `login_methods.passkey_promotion_max_prompts` times and snoozes between them. This clears both, so the user is offered a passkey again on their next login — for "why does it keep asking" and "please ask me again" alike.
519
+ */
520
+ post: operations["user/resetPasskeyPrompt"];
521
+ delete?: never;
522
+ options?: never;
523
+ head?: never;
524
+ patch?: never;
525
+ trace?: never;
526
+ };
487
527
  "/identity": {
488
528
  parameters: {
489
529
  query?: never;
@@ -1100,6 +1140,175 @@ export interface paths {
1100
1140
  patch?: never;
1101
1141
  trace?: never;
1102
1142
  };
1143
+ "/loginflow/resolved": {
1144
+ parameters: {
1145
+ query?: never;
1146
+ header?: never;
1147
+ path?: never;
1148
+ cookie?: never;
1149
+ };
1150
+ /**
1151
+ * The graph this account (or client) runs right now
1152
+ * @description What a login actually walks: the published graph of the bound flow, or the graph compiled from the settings when nothing is bound or published. With `client_id`, resolved for that client (its own flow, else the account's, else compiled from its overrides). The bound flow, if any, comes along with its draft so an editor can show both.
1153
+ */
1154
+ get: operations["loginflow/resolved"];
1155
+ put?: never;
1156
+ post?: never;
1157
+ delete?: never;
1158
+ options?: never;
1159
+ head?: never;
1160
+ patch?: never;
1161
+ trace?: never;
1162
+ };
1163
+ "/loginflow/materialize": {
1164
+ parameters: {
1165
+ query?: never;
1166
+ header?: never;
1167
+ path?: never;
1168
+ cookie?: never;
1169
+ };
1170
+ get?: never;
1171
+ put?: never;
1172
+ /**
1173
+ * Start a custom flow from what runs today
1174
+ * @description Creates a login flow whose draft is the graph the account (or, with `client_id`, that client) currently runs — compiled from its settings — and binds it. Nothing changes for logins until the flow is published: a bound flow with no published graph keeps running the compiled one. Never a blank canvas: customising always starts from the tenant's own behaviour.
1175
+ */
1176
+ post: operations["loginflow/materialize"];
1177
+ delete?: never;
1178
+ options?: never;
1179
+ head?: never;
1180
+ patch?: never;
1181
+ trace?: never;
1182
+ };
1183
+ "/loginflow/{loginflow_id}/validate": {
1184
+ parameters: {
1185
+ query?: never;
1186
+ header?: never;
1187
+ path?: never;
1188
+ cookie?: never;
1189
+ };
1190
+ get?: never;
1191
+ put?: never;
1192
+ /** Check a draft against the rules a publish enforces */
1193
+ post: operations["loginflow/validate"];
1194
+ delete?: never;
1195
+ options?: never;
1196
+ head?: never;
1197
+ patch?: never;
1198
+ trace?: never;
1199
+ };
1200
+ "/loginflow/{loginflow_id}/publish": {
1201
+ parameters: {
1202
+ query?: never;
1203
+ header?: never;
1204
+ path?: never;
1205
+ cookie?: never;
1206
+ };
1207
+ get?: never;
1208
+ put?: never;
1209
+ /**
1210
+ * Make the draft the graph logins run
1211
+ * @description Validates the draft and freezes it as `published` under its current revision; the previous published graph moves to `history`. Logins already in flight keep the revision they started on. Refused with the list of issues when the draft does not validate.
1212
+ */
1213
+ post: operations["loginflow/publish"];
1214
+ delete?: never;
1215
+ options?: never;
1216
+ head?: never;
1217
+ patch?: never;
1218
+ trace?: never;
1219
+ };
1220
+ "/loginflow/{loginflow_id}/rollback": {
1221
+ parameters: {
1222
+ query?: never;
1223
+ header?: never;
1224
+ path?: never;
1225
+ cookie?: never;
1226
+ };
1227
+ get?: never;
1228
+ put?: never;
1229
+ /**
1230
+ * Run a previously published revision again
1231
+ * @description Makes the named revision from `history` the published graph; the one being replaced moves to `history`. The draft is not touched.
1232
+ */
1233
+ post: operations["loginflow/rollback"];
1234
+ delete?: never;
1235
+ options?: never;
1236
+ head?: never;
1237
+ patch?: never;
1238
+ trace?: never;
1239
+ };
1240
+ "/loginflow/{loginflow_id}/preview-token": {
1241
+ parameters: {
1242
+ query?: never;
1243
+ header?: never;
1244
+ path?: never;
1245
+ cookie?: never;
1246
+ };
1247
+ get?: never;
1248
+ put?: never;
1249
+ /**
1250
+ * Try the draft on a real login, in your browser only
1251
+ * @description Returns a short-lived token. Open `/authorize?…&flow_preview=<token>` (or the hosted login with the same parameter) and that login runs the DRAFT of this flow instead of what is published, for that browser only. Nothing is published.
1252
+ */
1253
+ post: operations["loginflow/previewToken"];
1254
+ delete?: never;
1255
+ options?: never;
1256
+ head?: never;
1257
+ patch?: never;
1258
+ trace?: never;
1259
+ };
1260
+ "/loginflow": {
1261
+ parameters: {
1262
+ query?: never;
1263
+ header?: never;
1264
+ path?: never;
1265
+ cookie?: never;
1266
+ };
1267
+ /**
1268
+ * List Loginflows
1269
+ * @description List Loginflows
1270
+ */
1271
+ get: operations["loginflow/list"];
1272
+ put?: never;
1273
+ /**
1274
+ * Create Loginflow
1275
+ * @description Create Loginflow
1276
+ */
1277
+ post: operations["loginflow/create"];
1278
+ delete?: never;
1279
+ options?: never;
1280
+ head?: never;
1281
+ patch?: never;
1282
+ trace?: never;
1283
+ };
1284
+ "/loginflow/{loginflow_id}": {
1285
+ parameters: {
1286
+ query?: never;
1287
+ header?: never;
1288
+ path?: never;
1289
+ cookie?: never;
1290
+ };
1291
+ /**
1292
+ * Get Loginflow
1293
+ * @description Get Loginflow
1294
+ */
1295
+ get: operations["loginflow/get"];
1296
+ put?: never;
1297
+ /**
1298
+ * Update Loginflow
1299
+ * @description Update Loginflow
1300
+ */
1301
+ post: operations["loginflow/update"];
1302
+ /**
1303
+ * Delete Loginflow
1304
+ * @description Delete Loginflow
1305
+ */
1306
+ delete: operations["loginflow/delete"];
1307
+ options?: never;
1308
+ head?: never;
1309
+ patch?: never;
1310
+ trace?: never;
1311
+ };
1103
1312
  "/notificationsubscription": {
1104
1313
  parameters: {
1105
1314
  query?: never;
@@ -1789,6 +1998,54 @@ export interface paths {
1789
1998
  patch?: never;
1790
1999
  trace?: never;
1791
2000
  };
2001
+ "/passkey/offer/skip": {
2002
+ parameters: {
2003
+ query?: never;
2004
+ header?: never;
2005
+ path?: never;
2006
+ cookie?: never;
2007
+ };
2008
+ get?: never;
2009
+ put?: never;
2010
+ /**
2011
+ * Decline the post-login passkey offer
2012
+ * @description Finishes a login the passkey offer parked without registering anything. `dismissed` is the user saying "not now" (starts the snooze); `unsupported` is the screen finding the browser cannot do WebAuthn (the prompt is given back); `failed` is a registration that errored. Returns where the login was going.
2013
+ */
2014
+ post: {
2015
+ parameters: {
2016
+ query?: never;
2017
+ header?: never;
2018
+ path?: never;
2019
+ cookie?: never;
2020
+ };
2021
+ requestBody: {
2022
+ content: {
2023
+ "application/json": {
2024
+ state: string;
2025
+ reason: "dismissed" | "unsupported" | "failed";
2026
+ };
2027
+ };
2028
+ };
2029
+ responses: {
2030
+ /** @description Default Response */
2031
+ 200: {
2032
+ headers: {
2033
+ [name: string]: unknown;
2034
+ };
2035
+ content: {
2036
+ "application/json": {
2037
+ redirect_url: string;
2038
+ };
2039
+ };
2040
+ };
2041
+ };
2042
+ };
2043
+ delete?: never;
2044
+ options?: never;
2045
+ head?: never;
2046
+ patch?: never;
2047
+ trace?: never;
2048
+ };
1792
2049
  "/passkey/login/options": {
1793
2050
  parameters: {
1794
2051
  query?: never;
@@ -2442,7 +2699,15 @@ export interface components {
2442
2699
  identifier_first?: boolean;
2443
2700
  /** @description Surface the method the returning user chose last time. Defaults to false. */
2444
2701
  remember_last_method?: boolean;
2445
- };
2702
+ /** @description Invite users to create a passkey right after a successful login with another method. `offer` shows a hosted screen once per `passkey_promotion_snooze_days`, at most `passkey_promotion_max_prompts` times, to users who have no second factor yet; it never blocks the login. Requires `passkey_login_enabled`. Defaults to `off`. */
2703
+ passkey_promotion?: "off" | "offer";
2704
+ /** @description Days to wait before offering a passkey again to a user who dismissed it. Defaults to 30. */
2705
+ passkey_promotion_snooze_days?: number;
2706
+ /** @description How many times a user is offered a passkey over their lifetime. `0` switches the offer off for this tenant without changing `passkey_promotion`. Defaults to 3. */
2707
+ passkey_promotion_max_prompts?: number;
2708
+ };
2709
+ /** @description The login flow bound to this account (`loginflow_xxx`). Absent = the flow compiled from the settings. A Client may bind its own. */
2710
+ login_flow?: string | null;
2446
2711
  /** @description Second-factor policy. Set on the Account as the tenant default; the same object on a Client overrides it **field by field**, so one app can require MFA without changing the rest. */
2447
2712
  mfa_policy?: {
2448
2713
  /** @description `off` (default) never challenges. `optional` challenges a user who has enrolled a factor, and lets everyone else in. `required` challenges everyone and sends users with no factor through enrolment during login — it never locks anyone out in place. */
@@ -2722,6 +2987,12 @@ export interface components {
2722
2987
  identifier_first?: boolean;
2723
2988
  /** @description Surface the method the returning user chose last time. Defaults to false. */
2724
2989
  remember_last_method?: boolean;
2990
+ /** @description Invite users to create a passkey right after a successful login with another method. `offer` shows a hosted screen once per `passkey_promotion_snooze_days`, at most `passkey_promotion_max_prompts` times, to users who have no second factor yet; it never blocks the login. Requires `passkey_login_enabled`. Defaults to `off`. */
2991
+ passkey_promotion?: "off" | "offer";
2992
+ /** @description Days to wait before offering a passkey again to a user who dismissed it. Defaults to 30. */
2993
+ passkey_promotion_snooze_days?: number;
2994
+ /** @description How many times a user is offered a passkey over their lifetime. `0` switches the offer off for this tenant without changing `passkey_promotion`. Defaults to 3. */
2995
+ passkey_promotion_max_prompts?: number;
2725
2996
  };
2726
2997
  /** @description Second-factor policy. Set on the Account as the tenant default; the same object on a Client overrides it **field by field**, so one app can require MFA without changing the rest. */
2727
2998
  mfa_policy?: {
@@ -2732,6 +3003,8 @@ export interface components {
2732
3003
  /** @description How long a browser that already passed a challenge may skip the next one. 0 (default) challenges every time. */
2733
3004
  remember_device_days?: number;
2734
3005
  };
3006
+ /** @description A login flow bound to this client (`loginflow_xxx`), overriding the account's. Absent = inherit. */
3007
+ login_flow?: string | null;
2735
3008
  /** @description Object is related with this account */
2736
3009
  account: string;
2737
3010
  /**
@@ -2815,6 +3088,12 @@ export interface components {
2815
3088
  identifier_first?: boolean;
2816
3089
  /** @description Surface the method the returning user chose last time. Defaults to false. */
2817
3090
  remember_last_method?: boolean;
3091
+ /** @description Invite users to create a passkey right after a successful login with another method. `offer` shows a hosted screen once per `passkey_promotion_snooze_days`, at most `passkey_promotion_max_prompts` times, to users who have no second factor yet; it never blocks the login. Requires `passkey_login_enabled`. Defaults to `off`. */
3092
+ passkey_promotion?: "off" | "offer";
3093
+ /** @description Days to wait before offering a passkey again to a user who dismissed it. Defaults to 30. */
3094
+ passkey_promotion_snooze_days?: number;
3095
+ /** @description How many times a user is offered a passkey over their lifetime. `0` switches the offer off for this tenant without changing `passkey_promotion`. Defaults to 3. */
3096
+ passkey_promotion_max_prompts?: number;
2818
3097
  } | null;
2819
3098
  mfa_policy?: {
2820
3099
  /** @description `off` (default) never challenges. `optional` challenges a user who has enrolled a factor, and lets everyone else in. `required` challenges everyone and sends users with no factor through enrolment during login — it never locks anyone out in place. */
@@ -2824,6 +3103,7 @@ export interface components {
2824
3103
  /** @description How long a browser that already passed a challenge may skip the next one. 0 (default) challenges every time. */
2825
3104
  remember_device_days?: number;
2826
3105
  } | null;
3106
+ login_flow?: string | null;
2827
3107
  /**
2828
3108
  * @description Free-form client metadata. Replaces the whole object — send the full merged value, not a partial delta.
2829
3109
  * @default {}
@@ -2872,6 +3152,12 @@ export interface components {
2872
3152
  email_bounced_at?: string | null;
2873
3153
  /** @description ISO 8601 timestamp of the built-in welcome email send. Set once by the platform; guarantees at most one welcome per user. */
2874
3154
  welcome_sent_at?: string | null;
3155
+ /** @description ISO 8601 timestamp of the last time the hosted "create a passkey" offer was shown to this user after a login. Drives the snooze in `login_methods.passkey_promotion_snooze_days`. */
3156
+ passkey_prompted_at?: string | null;
3157
+ /** @description How many times the passkey offer has been shown to this user. Capped by `login_methods.passkey_promotion_max_prompts`; reset by an administrator through `POST /user/:id/passkey-prompt/reset`. */
3158
+ passkey_prompt_count?: number;
3159
+ /** @description ISO 8601 timestamp of the last time the user chose "Not now" on the passkey offer, as opposed to closing the tab. */
3160
+ passkey_prompt_dismissed_at?: string | null;
2875
3161
  /** @description contact phone number */
2876
3162
  phone?: string | null;
2877
3163
  /** @description phone is verified */
@@ -3602,6 +3888,147 @@ export interface components {
3602
3888
  /** @description Execution order */
3603
3889
  order?: number;
3604
3890
  };
3891
+ /** @description LoginFlow */
3892
+ LoginFlow: {
3893
+ /** @description LoginFlow ID */
3894
+ id: string;
3895
+ name: string;
3896
+ /** @enum {string} */
3897
+ trigger: "login";
3898
+ /** @description A login flow graph: typed nodes joined by named handles. See the validation rules on publish. */
3899
+ graph: {
3900
+ nodes: {
3901
+ id: string;
3902
+ type: "start" | "identify" | "methods" | "credential" | "action" | "mfa_gate" | "mfa_challenge" | "mfa_enroll" | "passkey_offer" | "condition" | "deny" | "end" | "consent" | "set_data";
3903
+ config?: {
3904
+ [key: string]: unknown;
3905
+ };
3906
+ }[];
3907
+ edges: {
3908
+ from: string;
3909
+ handle: string;
3910
+ to: string;
3911
+ }[];
3912
+ };
3913
+ /** @description Monotonic edit counter, bumped on every update. A publish freezes the graph under the revision it had; a login in flight pins the revision it started on. */
3914
+ revision: number;
3915
+ published?: {
3916
+ /** @description A login flow graph: typed nodes joined by named handles. See the validation rules on publish. */
3917
+ graph: {
3918
+ nodes: {
3919
+ id: string;
3920
+ type: "start" | "identify" | "methods" | "credential" | "action" | "mfa_gate" | "mfa_challenge" | "mfa_enroll" | "passkey_offer" | "condition" | "deny" | "end" | "consent" | "set_data";
3921
+ config?: {
3922
+ [key: string]: unknown;
3923
+ };
3924
+ }[];
3925
+ edges: {
3926
+ from: string;
3927
+ handle: string;
3928
+ to: string;
3929
+ }[];
3930
+ };
3931
+ revision: number;
3932
+ published_at: string;
3933
+ };
3934
+ /** @description Previously published graphs, newest first, for rollback. */
3935
+ history: {
3936
+ /** @description A login flow graph: typed nodes joined by named handles. See the validation rules on publish. */
3937
+ graph: {
3938
+ nodes: {
3939
+ id: string;
3940
+ type: "start" | "identify" | "methods" | "credential" | "action" | "mfa_gate" | "mfa_challenge" | "mfa_enroll" | "passkey_offer" | "condition" | "deny" | "end" | "consent" | "set_data";
3941
+ config?: {
3942
+ [key: string]: unknown;
3943
+ };
3944
+ }[];
3945
+ edges: {
3946
+ from: string;
3947
+ handle: string;
3948
+ to: string;
3949
+ }[];
3950
+ };
3951
+ revision: number;
3952
+ published_at: string;
3953
+ }[];
3954
+ /** @description Node positions in the editor. Presentation only. */
3955
+ layout?: {
3956
+ [key: string]: {
3957
+ x: number;
3958
+ y: number;
3959
+ };
3960
+ };
3961
+ /** @description Object is related with this account */
3962
+ account: string;
3963
+ /**
3964
+ * @description LoginFlowMetadata
3965
+ * @default {}
3966
+ */
3967
+ metadata: {
3968
+ [key: string]: unknown;
3969
+ };
3970
+ /** @description LoginFlow creation date */
3971
+ createdAt: string;
3972
+ /** @description LoginFlow updated date */
3973
+ updatedAt?: string;
3974
+ };
3975
+ /**
3976
+ * @description LoginFlowMetadata
3977
+ * @default {}
3978
+ */
3979
+ LoginFlowMetadata: {
3980
+ [key: string]: unknown;
3981
+ };
3982
+ LoginFlowCreate: {
3983
+ name: string;
3984
+ /** @description A login flow graph: typed nodes joined by named handles. See the validation rules on publish. */
3985
+ graph: {
3986
+ nodes: {
3987
+ id: string;
3988
+ type: "start" | "identify" | "methods" | "credential" | "action" | "mfa_gate" | "mfa_challenge" | "mfa_enroll" | "passkey_offer" | "condition" | "deny" | "end" | "consent" | "set_data";
3989
+ config?: {
3990
+ [key: string]: unknown;
3991
+ };
3992
+ }[];
3993
+ edges: {
3994
+ from: string;
3995
+ handle: string;
3996
+ to: string;
3997
+ }[];
3998
+ };
3999
+ /** @description Node positions in the editor. Presentation only. */
4000
+ layout?: {
4001
+ [key: string]: {
4002
+ x: number;
4003
+ y: number;
4004
+ };
4005
+ };
4006
+ };
4007
+ LoginFlowUpdate: {
4008
+ name?: string;
4009
+ /** @description A login flow graph: typed nodes joined by named handles. See the validation rules on publish. */
4010
+ graph?: {
4011
+ nodes: {
4012
+ id: string;
4013
+ type: "start" | "identify" | "methods" | "credential" | "action" | "mfa_gate" | "mfa_challenge" | "mfa_enroll" | "passkey_offer" | "condition" | "deny" | "end" | "consent" | "set_data";
4014
+ config?: {
4015
+ [key: string]: unknown;
4016
+ };
4017
+ }[];
4018
+ edges: {
4019
+ from: string;
4020
+ handle: string;
4021
+ to: string;
4022
+ }[];
4023
+ };
4024
+ /** @description Node positions in the editor. Presentation only. */
4025
+ layout?: {
4026
+ [key: string]: {
4027
+ x: number;
4028
+ y: number;
4029
+ };
4030
+ };
4031
+ };
3605
4032
  /** @description NotificationSubscription */
3606
4033
  NotificationSubscription: {
3607
4034
  /** @description NotificationSubscriptionEmail ID */
@@ -4089,6 +4516,12 @@ export interface components {
4089
4516
  identifier_first?: boolean;
4090
4517
  /** @description Surface the method the returning user chose last time. Defaults to false. */
4091
4518
  remember_last_method?: boolean;
4519
+ /** @description Invite users to create a passkey right after a successful login with another method. `offer` shows a hosted screen once per `passkey_promotion_snooze_days`, at most `passkey_promotion_max_prompts` times, to users who have no second factor yet; it never blocks the login. Requires `passkey_login_enabled`. Defaults to `off`. */
4520
+ passkey_promotion?: "off" | "offer";
4521
+ /** @description Days to wait before offering a passkey again to a user who dismissed it. Defaults to 30. */
4522
+ passkey_promotion_snooze_days?: number;
4523
+ /** @description How many times a user is offered a passkey over their lifetime. `0` switches the offer off for this tenant without changing `passkey_promotion`. Defaults to 3. */
4524
+ passkey_promotion_max_prompts?: number;
4092
4525
  } | null;
4093
4526
  mfa_policy?: {
4094
4527
  /** @description `off` (default) never challenges. `optional` challenges a user who has enrolled a factor, and lets everyone else in. `required` challenges everyone and sends users with no factor through enrolment during login — it never locks anyone out in place. */
@@ -4099,6 +4532,7 @@ export interface components {
4099
4532
  remember_device_days?: number;
4100
4533
  } | null;
4101
4534
  webauthn_rp_id?: string | null;
4535
+ login_flow?: string | null;
4102
4536
  };
4103
4537
  FactorSummary: {
4104
4538
  id: string;
@@ -4249,7 +4683,15 @@ export interface operations {
4249
4683
  identifier_first?: boolean;
4250
4684
  /** @description Surface the method the returning user chose last time. Defaults to false. */
4251
4685
  remember_last_method?: boolean;
4252
- };
4686
+ /** @description Invite users to create a passkey right after a successful login with another method. `offer` shows a hosted screen once per `passkey_promotion_snooze_days`, at most `passkey_promotion_max_prompts` times, to users who have no second factor yet; it never blocks the login. Requires `passkey_login_enabled`. Defaults to `off`. */
4687
+ passkey_promotion?: "off" | "offer";
4688
+ /** @description Days to wait before offering a passkey again to a user who dismissed it. Defaults to 30. */
4689
+ passkey_promotion_snooze_days?: number;
4690
+ /** @description How many times a user is offered a passkey over their lifetime. `0` switches the offer off for this tenant without changing `passkey_promotion`. Defaults to 3. */
4691
+ passkey_promotion_max_prompts?: number;
4692
+ };
4693
+ /** @description The login flow bound to this account (`loginflow_xxx`). Absent = the flow compiled from the settings. A Client may bind its own. */
4694
+ login_flow?: string | null;
4253
4695
  /** @description Second-factor policy. Set on the Account as the tenant default; the same object on a Client overrides it **field by field**, so one app can require MFA without changing the rest. */
4254
4696
  mfa_policy?: {
4255
4697
  /** @description `off` (default) never challenges. `optional` challenges a user who has enrolled a factor, and lets everyone else in. `required` challenges everyone and sends users with no factor through enrolment during login — it never locks anyone out in place. */
@@ -4387,7 +4829,15 @@ export interface operations {
4387
4829
  identifier_first?: boolean;
4388
4830
  /** @description Surface the method the returning user chose last time. Defaults to false. */
4389
4831
  remember_last_method?: boolean;
4390
- };
4832
+ /** @description Invite users to create a passkey right after a successful login with another method. `offer` shows a hosted screen once per `passkey_promotion_snooze_days`, at most `passkey_promotion_max_prompts` times, to users who have no second factor yet; it never blocks the login. Requires `passkey_login_enabled`. Defaults to `off`. */
4833
+ passkey_promotion?: "off" | "offer";
4834
+ /** @description Days to wait before offering a passkey again to a user who dismissed it. Defaults to 30. */
4835
+ passkey_promotion_snooze_days?: number;
4836
+ /** @description How many times a user is offered a passkey over their lifetime. `0` switches the offer off for this tenant without changing `passkey_promotion`. Defaults to 3. */
4837
+ passkey_promotion_max_prompts?: number;
4838
+ };
4839
+ /** @description The login flow bound to this account (`loginflow_xxx`). Absent = the flow compiled from the settings. A Client may bind its own. */
4840
+ login_flow?: string | null;
4391
4841
  /** @description Second-factor policy. Set on the Account as the tenant default; the same object on a Client overrides it **field by field**, so one app can require MFA without changing the rest. */
4392
4842
  mfa_policy?: {
4393
4843
  /** @description `off` (default) never challenges. `optional` challenges a user who has enrolled a factor, and lets everyone else in. `required` challenges everyone and sends users with no factor through enrolment during login — it never locks anyone out in place. */
@@ -4479,7 +4929,15 @@ export interface operations {
4479
4929
  identifier_first?: boolean;
4480
4930
  /** @description Surface the method the returning user chose last time. Defaults to false. */
4481
4931
  remember_last_method?: boolean;
4482
- };
4932
+ /** @description Invite users to create a passkey right after a successful login with another method. `offer` shows a hosted screen once per `passkey_promotion_snooze_days`, at most `passkey_promotion_max_prompts` times, to users who have no second factor yet; it never blocks the login. Requires `passkey_login_enabled`. Defaults to `off`. */
4933
+ passkey_promotion?: "off" | "offer";
4934
+ /** @description Days to wait before offering a passkey again to a user who dismissed it. Defaults to 30. */
4935
+ passkey_promotion_snooze_days?: number;
4936
+ /** @description How many times a user is offered a passkey over their lifetime. `0` switches the offer off for this tenant without changing `passkey_promotion`. Defaults to 3. */
4937
+ passkey_promotion_max_prompts?: number;
4938
+ };
4939
+ /** @description The login flow bound to this account (`loginflow_xxx`). Absent = the flow compiled from the settings. A Client may bind its own. */
4940
+ login_flow?: string | null;
4483
4941
  /** @description Second-factor policy. Set on the Account as the tenant default; the same object on a Client overrides it **field by field**, so one app can require MFA without changing the rest. */
4484
4942
  mfa_policy?: {
4485
4943
  /** @description `off` (default) never challenges. `optional` challenges a user who has enrolled a factor, and lets everyone else in. `required` challenges everyone and sends users with no factor through enrolment during login — it never locks anyone out in place. */
@@ -4543,6 +5001,12 @@ export interface operations {
4543
5001
  identifier_first?: boolean;
4544
5002
  /** @description Surface the method the returning user chose last time. Defaults to false. */
4545
5003
  remember_last_method?: boolean;
5004
+ /** @description Invite users to create a passkey right after a successful login with another method. `offer` shows a hosted screen once per `passkey_promotion_snooze_days`, at most `passkey_promotion_max_prompts` times, to users who have no second factor yet; it never blocks the login. Requires `passkey_login_enabled`. Defaults to `off`. */
5005
+ passkey_promotion?: "off" | "offer";
5006
+ /** @description Days to wait before offering a passkey again to a user who dismissed it. Defaults to 30. */
5007
+ passkey_promotion_snooze_days?: number;
5008
+ /** @description How many times a user is offered a passkey over their lifetime. `0` switches the offer off for this tenant without changing `passkey_promotion`. Defaults to 3. */
5009
+ passkey_promotion_max_prompts?: number;
4546
5010
  } | null;
4547
5011
  mfa_policy?: {
4548
5012
  /** @description `off` (default) never challenges. `optional` challenges a user who has enrolled a factor, and lets everyone else in. `required` challenges everyone and sends users with no factor through enrolment during login — it never locks anyone out in place. */
@@ -4553,6 +5017,7 @@ export interface operations {
4553
5017
  remember_device_days?: number;
4554
5018
  } | null;
4555
5019
  webauthn_rp_id?: string | null;
5020
+ login_flow?: string | null;
4556
5021
  };
4557
5022
  };
4558
5023
  };
@@ -4614,7 +5079,15 @@ export interface operations {
4614
5079
  identifier_first?: boolean;
4615
5080
  /** @description Surface the method the returning user chose last time. Defaults to false. */
4616
5081
  remember_last_method?: boolean;
4617
- };
5082
+ /** @description Invite users to create a passkey right after a successful login with another method. `offer` shows a hosted screen once per `passkey_promotion_snooze_days`, at most `passkey_promotion_max_prompts` times, to users who have no second factor yet; it never blocks the login. Requires `passkey_login_enabled`. Defaults to `off`. */
5083
+ passkey_promotion?: "off" | "offer";
5084
+ /** @description Days to wait before offering a passkey again to a user who dismissed it. Defaults to 30. */
5085
+ passkey_promotion_snooze_days?: number;
5086
+ /** @description How many times a user is offered a passkey over their lifetime. `0` switches the offer off for this tenant without changing `passkey_promotion`. Defaults to 3. */
5087
+ passkey_promotion_max_prompts?: number;
5088
+ };
5089
+ /** @description The login flow bound to this account (`loginflow_xxx`). Absent = the flow compiled from the settings. A Client may bind its own. */
5090
+ login_flow?: string | null;
4618
5091
  /** @description Second-factor policy. Set on the Account as the tenant default; the same object on a Client overrides it **field by field**, so one app can require MFA without changing the rest. */
4619
5092
  mfa_policy?: {
4620
5093
  /** @description `off` (default) never challenges. `optional` challenges a user who has enrolled a factor, and lets everyone else in. `required` challenges everyone and sends users with no factor through enrolment during login — it never locks anyone out in place. */
@@ -4715,7 +5188,15 @@ export interface operations {
4715
5188
  identifier_first?: boolean;
4716
5189
  /** @description Surface the method the returning user chose last time. Defaults to false. */
4717
5190
  remember_last_method?: boolean;
4718
- };
5191
+ /** @description Invite users to create a passkey right after a successful login with another method. `offer` shows a hosted screen once per `passkey_promotion_snooze_days`, at most `passkey_promotion_max_prompts` times, to users who have no second factor yet; it never blocks the login. Requires `passkey_login_enabled`. Defaults to `off`. */
5192
+ passkey_promotion?: "off" | "offer";
5193
+ /** @description Days to wait before offering a passkey again to a user who dismissed it. Defaults to 30. */
5194
+ passkey_promotion_snooze_days?: number;
5195
+ /** @description How many times a user is offered a passkey over their lifetime. `0` switches the offer off for this tenant without changing `passkey_promotion`. Defaults to 3. */
5196
+ passkey_promotion_max_prompts?: number;
5197
+ };
5198
+ /** @description The login flow bound to this account (`loginflow_xxx`). Absent = the flow compiled from the settings. A Client may bind its own. */
5199
+ login_flow?: string | null;
4719
5200
  /** @description Second-factor policy. Set on the Account as the tenant default; the same object on a Client overrides it **field by field**, so one app can require MFA without changing the rest. */
4720
5201
  mfa_policy?: {
4721
5202
  /** @description `off` (default) never challenges. `optional` challenges a user who has enrolled a factor, and lets everyone else in. `required` challenges everyone and sends users with no factor through enrolment during login — it never locks anyone out in place. */
@@ -5231,6 +5712,10 @@ export interface operations {
5231
5712
  parameters: {
5232
5713
  query?: {
5233
5714
  client_id?: string;
5715
+ /** @description The login state the screen was opened with. When the flow put an identifier-first screen before this one, the identifier the user typed comes back as `identifier`. */
5716
+ state?: string;
5717
+ /** @description The method key (`passkey` or a connection id) this browser used last time, as remembered by the hosted UI. Honoured only when the tenant enabled `remember_last_method`: that method is moved first and echoed as `last_used`. */
5718
+ last_used?: string;
5234
5719
  };
5235
5720
  header?: never;
5236
5721
  path?: never;
@@ -5259,6 +5744,10 @@ export interface operations {
5259
5744
  } | null;
5260
5745
  identifier_first: boolean;
5261
5746
  remember_last_method: boolean;
5747
+ /** @description What the user typed on the identifier-first screen, when the flow has one. Prefill the email field with it. */
5748
+ identifier?: string;
5749
+ /** @description The method key that was moved first because this browser used it last time (`remember_last_method`). Absent otherwise. */
5750
+ last_used?: string;
5262
5751
  /** @description Already filtered and ordered. Render them in this order; do not re-sort or re-filter client-side. */
5263
5752
  methods: components["schemas"]["LoginOptionMethod"][];
5264
5753
  };
@@ -5266,6 +5755,35 @@ export interface operations {
5266
5755
  };
5267
5756
  };
5268
5757
  };
5758
+ "flow/identify": {
5759
+ parameters: {
5760
+ query?: never;
5761
+ header?: never;
5762
+ path?: never;
5763
+ cookie?: never;
5764
+ };
5765
+ requestBody: {
5766
+ content: {
5767
+ "application/json": {
5768
+ state: string;
5769
+ identifier: string;
5770
+ };
5771
+ };
5772
+ };
5773
+ responses: {
5774
+ /** @description Default Response */
5775
+ 200: {
5776
+ headers: {
5777
+ [name: string]: unknown;
5778
+ };
5779
+ content: {
5780
+ "application/json": {
5781
+ ok: boolean;
5782
+ };
5783
+ };
5784
+ };
5785
+ };
5786
+ };
5269
5787
  "client/list": {
5270
5788
  parameters: {
5271
5789
  query?: {
@@ -5376,6 +5894,12 @@ export interface operations {
5376
5894
  identifier_first?: boolean;
5377
5895
  /** @description Surface the method the returning user chose last time. Defaults to false. */
5378
5896
  remember_last_method?: boolean;
5897
+ /** @description Invite users to create a passkey right after a successful login with another method. `offer` shows a hosted screen once per `passkey_promotion_snooze_days`, at most `passkey_promotion_max_prompts` times, to users who have no second factor yet; it never blocks the login. Requires `passkey_login_enabled`. Defaults to `off`. */
5898
+ passkey_promotion?: "off" | "offer";
5899
+ /** @description Days to wait before offering a passkey again to a user who dismissed it. Defaults to 30. */
5900
+ passkey_promotion_snooze_days?: number;
5901
+ /** @description How many times a user is offered a passkey over their lifetime. `0` switches the offer off for this tenant without changing `passkey_promotion`. Defaults to 3. */
5902
+ passkey_promotion_max_prompts?: number;
5379
5903
  };
5380
5904
  /** @description Second-factor policy. Set on the Account as the tenant default; the same object on a Client overrides it **field by field**, so one app can require MFA without changing the rest. */
5381
5905
  mfa_policy?: {
@@ -5386,6 +5910,8 @@ export interface operations {
5386
5910
  /** @description How long a browser that already passed a challenge may skip the next one. 0 (default) challenges every time. */
5387
5911
  remember_device_days?: number;
5388
5912
  };
5913
+ /** @description A login flow bound to this client (`loginflow_xxx`), overriding the account's. Absent = inherit. */
5914
+ login_flow?: string | null;
5389
5915
  /** @description Object is related with this account */
5390
5916
  account: string;
5391
5917
  /**
@@ -5467,6 +5993,12 @@ export interface operations {
5467
5993
  identifier_first?: boolean;
5468
5994
  /** @description Surface the method the returning user chose last time. Defaults to false. */
5469
5995
  remember_last_method?: boolean;
5996
+ /** @description Invite users to create a passkey right after a successful login with another method. `offer` shows a hosted screen once per `passkey_promotion_snooze_days`, at most `passkey_promotion_max_prompts` times, to users who have no second factor yet; it never blocks the login. Requires `passkey_login_enabled`. Defaults to `off`. */
5997
+ passkey_promotion?: "off" | "offer";
5998
+ /** @description Days to wait before offering a passkey again to a user who dismissed it. Defaults to 30. */
5999
+ passkey_promotion_snooze_days?: number;
6000
+ /** @description How many times a user is offered a passkey over their lifetime. `0` switches the offer off for this tenant without changing `passkey_promotion`. Defaults to 3. */
6001
+ passkey_promotion_max_prompts?: number;
5470
6002
  };
5471
6003
  /** @description Second-factor policy. Set on the Account as the tenant default; the same object on a Client overrides it **field by field**, so one app can require MFA without changing the rest. */
5472
6004
  mfa_policy?: {
@@ -5477,6 +6009,8 @@ export interface operations {
5477
6009
  /** @description How long a browser that already passed a challenge may skip the next one. 0 (default) challenges every time. */
5478
6010
  remember_device_days?: number;
5479
6011
  };
6012
+ /** @description A login flow bound to this client (`loginflow_xxx`), overriding the account's. Absent = inherit. */
6013
+ login_flow?: string | null;
5480
6014
  /** @description Object is related with this account */
5481
6015
  account: string;
5482
6016
  /**
@@ -5552,6 +6086,12 @@ export interface operations {
5552
6086
  identifier_first?: boolean;
5553
6087
  /** @description Surface the method the returning user chose last time. Defaults to false. */
5554
6088
  remember_last_method?: boolean;
6089
+ /** @description Invite users to create a passkey right after a successful login with another method. `offer` shows a hosted screen once per `passkey_promotion_snooze_days`, at most `passkey_promotion_max_prompts` times, to users who have no second factor yet; it never blocks the login. Requires `passkey_login_enabled`. Defaults to `off`. */
6090
+ passkey_promotion?: "off" | "offer";
6091
+ /** @description Days to wait before offering a passkey again to a user who dismissed it. Defaults to 30. */
6092
+ passkey_promotion_snooze_days?: number;
6093
+ /** @description How many times a user is offered a passkey over their lifetime. `0` switches the offer off for this tenant without changing `passkey_promotion`. Defaults to 3. */
6094
+ passkey_promotion_max_prompts?: number;
5555
6095
  } | null;
5556
6096
  mfa_policy?: {
5557
6097
  /** @description `off` (default) never challenges. `optional` challenges a user who has enrolled a factor, and lets everyone else in. `required` challenges everyone and sends users with no factor through enrolment during login — it never locks anyone out in place. */
@@ -5561,6 +6101,7 @@ export interface operations {
5561
6101
  /** @description How long a browser that already passed a challenge may skip the next one. 0 (default) challenges every time. */
5562
6102
  remember_device_days?: number;
5563
6103
  } | null;
6104
+ login_flow?: string | null;
5564
6105
  /**
5565
6106
  * @description Free-form client metadata. Replaces the whole object — send the full merged value, not a partial delta.
5566
6107
  * @default {}
@@ -5624,6 +6165,12 @@ export interface operations {
5624
6165
  identifier_first?: boolean;
5625
6166
  /** @description Surface the method the returning user chose last time. Defaults to false. */
5626
6167
  remember_last_method?: boolean;
6168
+ /** @description Invite users to create a passkey right after a successful login with another method. `offer` shows a hosted screen once per `passkey_promotion_snooze_days`, at most `passkey_promotion_max_prompts` times, to users who have no second factor yet; it never blocks the login. Requires `passkey_login_enabled`. Defaults to `off`. */
6169
+ passkey_promotion?: "off" | "offer";
6170
+ /** @description Days to wait before offering a passkey again to a user who dismissed it. Defaults to 30. */
6171
+ passkey_promotion_snooze_days?: number;
6172
+ /** @description How many times a user is offered a passkey over their lifetime. `0` switches the offer off for this tenant without changing `passkey_promotion`. Defaults to 3. */
6173
+ passkey_promotion_max_prompts?: number;
5627
6174
  };
5628
6175
  /** @description Second-factor policy. Set on the Account as the tenant default; the same object on a Client overrides it **field by field**, so one app can require MFA without changing the rest. */
5629
6176
  mfa_policy?: {
@@ -5634,6 +6181,8 @@ export interface operations {
5634
6181
  /** @description How long a browser that already passed a challenge may skip the next one. 0 (default) challenges every time. */
5635
6182
  remember_device_days?: number;
5636
6183
  };
6184
+ /** @description A login flow bound to this client (`loginflow_xxx`), overriding the account's. Absent = inherit. */
6185
+ login_flow?: string | null;
5637
6186
  /** @description Object is related with this account */
5638
6187
  account: string;
5639
6188
  /**
@@ -5715,6 +6264,12 @@ export interface operations {
5715
6264
  identifier_first?: boolean;
5716
6265
  /** @description Surface the method the returning user chose last time. Defaults to false. */
5717
6266
  remember_last_method?: boolean;
6267
+ /** @description Invite users to create a passkey right after a successful login with another method. `offer` shows a hosted screen once per `passkey_promotion_snooze_days`, at most `passkey_promotion_max_prompts` times, to users who have no second factor yet; it never blocks the login. Requires `passkey_login_enabled`. Defaults to `off`. */
6268
+ passkey_promotion?: "off" | "offer";
6269
+ /** @description Days to wait before offering a passkey again to a user who dismissed it. Defaults to 30. */
6270
+ passkey_promotion_snooze_days?: number;
6271
+ /** @description How many times a user is offered a passkey over their lifetime. `0` switches the offer off for this tenant without changing `passkey_promotion`. Defaults to 3. */
6272
+ passkey_promotion_max_prompts?: number;
5718
6273
  };
5719
6274
  /** @description Second-factor policy. Set on the Account as the tenant default; the same object on a Client overrides it **field by field**, so one app can require MFA without changing the rest. */
5720
6275
  mfa_policy?: {
@@ -5725,6 +6280,8 @@ export interface operations {
5725
6280
  /** @description How long a browser that already passed a challenge may skip the next one. 0 (default) challenges every time. */
5726
6281
  remember_device_days?: number;
5727
6282
  };
6283
+ /** @description A login flow bound to this client (`loginflow_xxx`), overriding the account's. Absent = inherit. */
6284
+ login_flow?: string | null;
5728
6285
  /** @description Object is related with this account */
5729
6286
  account: string;
5730
6287
  /**
@@ -5806,6 +6363,12 @@ export interface operations {
5806
6363
  identifier_first?: boolean;
5807
6364
  /** @description Surface the method the returning user chose last time. Defaults to false. */
5808
6365
  remember_last_method?: boolean;
6366
+ /** @description Invite users to create a passkey right after a successful login with another method. `offer` shows a hosted screen once per `passkey_promotion_snooze_days`, at most `passkey_promotion_max_prompts` times, to users who have no second factor yet; it never blocks the login. Requires `passkey_login_enabled`. Defaults to `off`. */
6367
+ passkey_promotion?: "off" | "offer";
6368
+ /** @description Days to wait before offering a passkey again to a user who dismissed it. Defaults to 30. */
6369
+ passkey_promotion_snooze_days?: number;
6370
+ /** @description How many times a user is offered a passkey over their lifetime. `0` switches the offer off for this tenant without changing `passkey_promotion`. Defaults to 3. */
6371
+ passkey_promotion_max_prompts?: number;
5809
6372
  };
5810
6373
  /** @description Second-factor policy. Set on the Account as the tenant default; the same object on a Client overrides it **field by field**, so one app can require MFA without changing the rest. */
5811
6374
  mfa_policy?: {
@@ -5816,6 +6379,8 @@ export interface operations {
5816
6379
  /** @description How long a browser that already passed a challenge may skip the next one. 0 (default) challenges every time. */
5817
6380
  remember_device_days?: number;
5818
6381
  };
6382
+ /** @description A login flow bound to this client (`loginflow_xxx`), overriding the account's. Absent = inherit. */
6383
+ login_flow?: string | null;
5819
6384
  /** @description Object is related with this account */
5820
6385
  account: string;
5821
6386
  /**
@@ -5961,6 +6526,12 @@ export interface operations {
5961
6526
  email_bounced_at?: string | null;
5962
6527
  /** @description ISO 8601 timestamp of the built-in welcome email send. Set once by the platform; guarantees at most one welcome per user. */
5963
6528
  welcome_sent_at?: string | null;
6529
+ /** @description ISO 8601 timestamp of the last time the hosted "create a passkey" offer was shown to this user after a login. Drives the snooze in `login_methods.passkey_promotion_snooze_days`. */
6530
+ passkey_prompted_at?: string | null;
6531
+ /** @description How many times the passkey offer has been shown to this user. Capped by `login_methods.passkey_promotion_max_prompts`; reset by an administrator through `POST /user/:id/passkey-prompt/reset`. */
6532
+ passkey_prompt_count?: number;
6533
+ /** @description ISO 8601 timestamp of the last time the user chose "Not now" on the passkey offer, as opposed to closing the tab. */
6534
+ passkey_prompt_dismissed_at?: string | null;
5964
6535
  /** @description contact phone number */
5965
6536
  phone?: string | null;
5966
6537
  /** @description phone is verified */
@@ -6095,6 +6666,12 @@ export interface operations {
6095
6666
  email_bounced_at?: string | null;
6096
6667
  /** @description ISO 8601 timestamp of the built-in welcome email send. Set once by the platform; guarantees at most one welcome per user. */
6097
6668
  welcome_sent_at?: string | null;
6669
+ /** @description ISO 8601 timestamp of the last time the hosted "create a passkey" offer was shown to this user after a login. Drives the snooze in `login_methods.passkey_promotion_snooze_days`. */
6670
+ passkey_prompted_at?: string | null;
6671
+ /** @description How many times the passkey offer has been shown to this user. Capped by `login_methods.passkey_promotion_max_prompts`; reset by an administrator through `POST /user/:id/passkey-prompt/reset`. */
6672
+ passkey_prompt_count?: number;
6673
+ /** @description ISO 8601 timestamp of the last time the user chose "Not now" on the passkey offer, as opposed to closing the tab. */
6674
+ passkey_prompt_dismissed_at?: string | null;
6098
6675
  /** @description contact phone number */
6099
6676
  phone?: string | null;
6100
6677
  /** @description phone is verified */
@@ -6269,6 +6846,12 @@ export interface operations {
6269
6846
  email_bounced_at?: string | null;
6270
6847
  /** @description ISO 8601 timestamp of the built-in welcome email send. Set once by the platform; guarantees at most one welcome per user. */
6271
6848
  welcome_sent_at?: string | null;
6849
+ /** @description ISO 8601 timestamp of the last time the hosted "create a passkey" offer was shown to this user after a login. Drives the snooze in `login_methods.passkey_promotion_snooze_days`. */
6850
+ passkey_prompted_at?: string | null;
6851
+ /** @description How many times the passkey offer has been shown to this user. Capped by `login_methods.passkey_promotion_max_prompts`; reset by an administrator through `POST /user/:id/passkey-prompt/reset`. */
6852
+ passkey_prompt_count?: number;
6853
+ /** @description ISO 8601 timestamp of the last time the user chose "Not now" on the passkey offer, as opposed to closing the tab. */
6854
+ passkey_prompt_dismissed_at?: string | null;
6272
6855
  /** @description contact phone number */
6273
6856
  phone?: string | null;
6274
6857
  /** @description phone is verified */
@@ -6403,6 +6986,12 @@ export interface operations {
6403
6986
  email_bounced_at?: string | null;
6404
6987
  /** @description ISO 8601 timestamp of the built-in welcome email send. Set once by the platform; guarantees at most one welcome per user. */
6405
6988
  welcome_sent_at?: string | null;
6989
+ /** @description ISO 8601 timestamp of the last time the hosted "create a passkey" offer was shown to this user after a login. Drives the snooze in `login_methods.passkey_promotion_snooze_days`. */
6990
+ passkey_prompted_at?: string | null;
6991
+ /** @description How many times the passkey offer has been shown to this user. Capped by `login_methods.passkey_promotion_max_prompts`; reset by an administrator through `POST /user/:id/passkey-prompt/reset`. */
6992
+ passkey_prompt_count?: number;
6993
+ /** @description ISO 8601 timestamp of the last time the user chose "Not now" on the passkey offer, as opposed to closing the tab. */
6994
+ passkey_prompt_dismissed_at?: string | null;
6406
6995
  /** @description contact phone number */
6407
6996
  phone?: string | null;
6408
6997
  /** @description phone is verified */
@@ -6681,6 +7270,30 @@ export interface operations {
6681
7270
  };
6682
7271
  };
6683
7272
  };
7273
+ "user/resetPasskeyPrompt": {
7274
+ parameters: {
7275
+ query?: never;
7276
+ header?: never;
7277
+ path: {
7278
+ user_id: string;
7279
+ };
7280
+ cookie?: never;
7281
+ };
7282
+ requestBody?: never;
7283
+ responses: {
7284
+ /** @description Default Response */
7285
+ 200: {
7286
+ headers: {
7287
+ [name: string]: unknown;
7288
+ };
7289
+ content: {
7290
+ "application/json": {
7291
+ reset: boolean;
7292
+ };
7293
+ };
7294
+ };
7295
+ };
7296
+ };
6684
7297
  "identity/list": {
6685
7298
  parameters: {
6686
7299
  query?: {
@@ -9246,6 +9859,986 @@ export interface operations {
9246
9859
  };
9247
9860
  };
9248
9861
  };
9862
+ "loginflow/resolved": {
9863
+ parameters: {
9864
+ query?: {
9865
+ client_id?: string;
9866
+ };
9867
+ header?: never;
9868
+ path?: never;
9869
+ cookie?: never;
9870
+ };
9871
+ requestBody?: never;
9872
+ responses: {
9873
+ /** @description Default Response */
9874
+ 200: {
9875
+ headers: {
9876
+ [name: string]: unknown;
9877
+ };
9878
+ content: {
9879
+ "application/json": {
9880
+ source: "compiled" | "published";
9881
+ flow_id: string | null;
9882
+ revision: number;
9883
+ /** @description A login flow graph: typed nodes joined by named handles. See the validation rules on publish. */
9884
+ graph: {
9885
+ nodes: {
9886
+ id: string;
9887
+ type: "start" | "identify" | "methods" | "credential" | "action" | "mfa_gate" | "mfa_challenge" | "mfa_enroll" | "passkey_offer" | "condition" | "deny" | "end" | "consent" | "set_data";
9888
+ config?: {
9889
+ [key: string]: unknown;
9890
+ };
9891
+ }[];
9892
+ edges: {
9893
+ from: string;
9894
+ handle: string;
9895
+ to: string;
9896
+ }[];
9897
+ };
9898
+ bound: {
9899
+ flow_id: string;
9900
+ bound_to: "account" | "client";
9901
+ name: string;
9902
+ revision: number;
9903
+ published_revision: number | null;
9904
+ /** @description A login flow graph: typed nodes joined by named handles. See the validation rules on publish. */
9905
+ draft: {
9906
+ nodes: {
9907
+ id: string;
9908
+ type: "start" | "identify" | "methods" | "credential" | "action" | "mfa_gate" | "mfa_challenge" | "mfa_enroll" | "passkey_offer" | "condition" | "deny" | "end" | "consent" | "set_data";
9909
+ config?: {
9910
+ [key: string]: unknown;
9911
+ };
9912
+ }[];
9913
+ edges: {
9914
+ from: string;
9915
+ handle: string;
9916
+ to: string;
9917
+ }[];
9918
+ };
9919
+ /** @description Node positions in the editor. Presentation only. */
9920
+ layout?: {
9921
+ [key: string]: {
9922
+ x: number;
9923
+ y: number;
9924
+ };
9925
+ };
9926
+ history: number[];
9927
+ } | null;
9928
+ };
9929
+ };
9930
+ };
9931
+ };
9932
+ };
9933
+ "loginflow/materialize": {
9934
+ parameters: {
9935
+ query?: never;
9936
+ header?: never;
9937
+ path?: never;
9938
+ cookie?: never;
9939
+ };
9940
+ requestBody: {
9941
+ content: {
9942
+ "application/json": {
9943
+ client_id?: string;
9944
+ name?: string;
9945
+ };
9946
+ };
9947
+ };
9948
+ responses: {
9949
+ /** @description LoginFlow */
9950
+ 200: {
9951
+ headers: {
9952
+ [name: string]: unknown;
9953
+ };
9954
+ content: {
9955
+ "application/json": {
9956
+ /** @description LoginFlow ID */
9957
+ id: string;
9958
+ name: string;
9959
+ /** @enum {string} */
9960
+ trigger: "login";
9961
+ /** @description A login flow graph: typed nodes joined by named handles. See the validation rules on publish. */
9962
+ graph: {
9963
+ nodes: {
9964
+ id: string;
9965
+ type: "start" | "identify" | "methods" | "credential" | "action" | "mfa_gate" | "mfa_challenge" | "mfa_enroll" | "passkey_offer" | "condition" | "deny" | "end" | "consent" | "set_data";
9966
+ config?: {
9967
+ [key: string]: unknown;
9968
+ };
9969
+ }[];
9970
+ edges: {
9971
+ from: string;
9972
+ handle: string;
9973
+ to: string;
9974
+ }[];
9975
+ };
9976
+ /** @description Monotonic edit counter, bumped on every update. A publish freezes the graph under the revision it had; a login in flight pins the revision it started on. */
9977
+ revision: number;
9978
+ published?: {
9979
+ /** @description A login flow graph: typed nodes joined by named handles. See the validation rules on publish. */
9980
+ graph: {
9981
+ nodes: {
9982
+ id: string;
9983
+ type: "start" | "identify" | "methods" | "credential" | "action" | "mfa_gate" | "mfa_challenge" | "mfa_enroll" | "passkey_offer" | "condition" | "deny" | "end" | "consent" | "set_data";
9984
+ config?: {
9985
+ [key: string]: unknown;
9986
+ };
9987
+ }[];
9988
+ edges: {
9989
+ from: string;
9990
+ handle: string;
9991
+ to: string;
9992
+ }[];
9993
+ };
9994
+ revision: number;
9995
+ published_at: string;
9996
+ };
9997
+ /** @description Previously published graphs, newest first, for rollback. */
9998
+ history: {
9999
+ /** @description A login flow graph: typed nodes joined by named handles. See the validation rules on publish. */
10000
+ graph: {
10001
+ nodes: {
10002
+ id: string;
10003
+ type: "start" | "identify" | "methods" | "credential" | "action" | "mfa_gate" | "mfa_challenge" | "mfa_enroll" | "passkey_offer" | "condition" | "deny" | "end" | "consent" | "set_data";
10004
+ config?: {
10005
+ [key: string]: unknown;
10006
+ };
10007
+ }[];
10008
+ edges: {
10009
+ from: string;
10010
+ handle: string;
10011
+ to: string;
10012
+ }[];
10013
+ };
10014
+ revision: number;
10015
+ published_at: string;
10016
+ }[];
10017
+ /** @description Node positions in the editor. Presentation only. */
10018
+ layout?: {
10019
+ [key: string]: {
10020
+ x: number;
10021
+ y: number;
10022
+ };
10023
+ };
10024
+ /** @description Object is related with this account */
10025
+ account: string;
10026
+ /**
10027
+ * @description LoginFlowMetadata
10028
+ * @default {}
10029
+ */
10030
+ metadata: {
10031
+ [key: string]: unknown;
10032
+ };
10033
+ /** @description LoginFlow creation date */
10034
+ createdAt: string;
10035
+ /** @description LoginFlow updated date */
10036
+ updatedAt?: string;
10037
+ };
10038
+ };
10039
+ };
10040
+ };
10041
+ };
10042
+ "loginflow/validate": {
10043
+ parameters: {
10044
+ query?: never;
10045
+ header?: never;
10046
+ path: {
10047
+ loginflow_id: string;
10048
+ };
10049
+ cookie?: never;
10050
+ };
10051
+ requestBody: {
10052
+ content: {
10053
+ "application/json": {
10054
+ client_id?: string;
10055
+ };
10056
+ };
10057
+ };
10058
+ responses: {
10059
+ /** @description Default Response */
10060
+ 200: {
10061
+ headers: {
10062
+ [name: string]: unknown;
10063
+ };
10064
+ content: {
10065
+ "application/json": {
10066
+ ok: boolean;
10067
+ issues: {
10068
+ code: string;
10069
+ node?: string;
10070
+ handle?: string;
10071
+ message: string;
10072
+ }[];
10073
+ };
10074
+ };
10075
+ };
10076
+ };
10077
+ };
10078
+ "loginflow/publish": {
10079
+ parameters: {
10080
+ query?: never;
10081
+ header?: never;
10082
+ path: {
10083
+ loginflow_id: string;
10084
+ };
10085
+ cookie?: never;
10086
+ };
10087
+ requestBody: {
10088
+ content: {
10089
+ "application/json": {
10090
+ client_id?: string;
10091
+ };
10092
+ };
10093
+ };
10094
+ responses: {
10095
+ /** @description LoginFlow */
10096
+ 200: {
10097
+ headers: {
10098
+ [name: string]: unknown;
10099
+ };
10100
+ content: {
10101
+ "application/json": {
10102
+ /** @description LoginFlow ID */
10103
+ id: string;
10104
+ name: string;
10105
+ /** @enum {string} */
10106
+ trigger: "login";
10107
+ /** @description A login flow graph: typed nodes joined by named handles. See the validation rules on publish. */
10108
+ graph: {
10109
+ nodes: {
10110
+ id: string;
10111
+ type: "start" | "identify" | "methods" | "credential" | "action" | "mfa_gate" | "mfa_challenge" | "mfa_enroll" | "passkey_offer" | "condition" | "deny" | "end" | "consent" | "set_data";
10112
+ config?: {
10113
+ [key: string]: unknown;
10114
+ };
10115
+ }[];
10116
+ edges: {
10117
+ from: string;
10118
+ handle: string;
10119
+ to: string;
10120
+ }[];
10121
+ };
10122
+ /** @description Monotonic edit counter, bumped on every update. A publish freezes the graph under the revision it had; a login in flight pins the revision it started on. */
10123
+ revision: number;
10124
+ published?: {
10125
+ /** @description A login flow graph: typed nodes joined by named handles. See the validation rules on publish. */
10126
+ graph: {
10127
+ nodes: {
10128
+ id: string;
10129
+ type: "start" | "identify" | "methods" | "credential" | "action" | "mfa_gate" | "mfa_challenge" | "mfa_enroll" | "passkey_offer" | "condition" | "deny" | "end" | "consent" | "set_data";
10130
+ config?: {
10131
+ [key: string]: unknown;
10132
+ };
10133
+ }[];
10134
+ edges: {
10135
+ from: string;
10136
+ handle: string;
10137
+ to: string;
10138
+ }[];
10139
+ };
10140
+ revision: number;
10141
+ published_at: string;
10142
+ };
10143
+ /** @description Previously published graphs, newest first, for rollback. */
10144
+ history: {
10145
+ /** @description A login flow graph: typed nodes joined by named handles. See the validation rules on publish. */
10146
+ graph: {
10147
+ nodes: {
10148
+ id: string;
10149
+ type: "start" | "identify" | "methods" | "credential" | "action" | "mfa_gate" | "mfa_challenge" | "mfa_enroll" | "passkey_offer" | "condition" | "deny" | "end" | "consent" | "set_data";
10150
+ config?: {
10151
+ [key: string]: unknown;
10152
+ };
10153
+ }[];
10154
+ edges: {
10155
+ from: string;
10156
+ handle: string;
10157
+ to: string;
10158
+ }[];
10159
+ };
10160
+ revision: number;
10161
+ published_at: string;
10162
+ }[];
10163
+ /** @description Node positions in the editor. Presentation only. */
10164
+ layout?: {
10165
+ [key: string]: {
10166
+ x: number;
10167
+ y: number;
10168
+ };
10169
+ };
10170
+ /** @description Object is related with this account */
10171
+ account: string;
10172
+ /**
10173
+ * @description LoginFlowMetadata
10174
+ * @default {}
10175
+ */
10176
+ metadata: {
10177
+ [key: string]: unknown;
10178
+ };
10179
+ /** @description LoginFlow creation date */
10180
+ createdAt: string;
10181
+ /** @description LoginFlow updated date */
10182
+ updatedAt?: string;
10183
+ };
10184
+ };
10185
+ };
10186
+ /** @description Default Response */
10187
+ 422: {
10188
+ headers: {
10189
+ [name: string]: unknown;
10190
+ };
10191
+ content: {
10192
+ "application/json": {
10193
+ error: string;
10194
+ issues: {
10195
+ code: string;
10196
+ node?: string;
10197
+ handle?: string;
10198
+ message: string;
10199
+ }[];
10200
+ };
10201
+ };
10202
+ };
10203
+ };
10204
+ };
10205
+ "loginflow/rollback": {
10206
+ parameters: {
10207
+ query?: never;
10208
+ header?: never;
10209
+ path: {
10210
+ loginflow_id: string;
10211
+ };
10212
+ cookie?: never;
10213
+ };
10214
+ requestBody: {
10215
+ content: {
10216
+ "application/json": {
10217
+ revision: number;
10218
+ };
10219
+ };
10220
+ };
10221
+ responses: {
10222
+ /** @description LoginFlow */
10223
+ 200: {
10224
+ headers: {
10225
+ [name: string]: unknown;
10226
+ };
10227
+ content: {
10228
+ "application/json": {
10229
+ /** @description LoginFlow ID */
10230
+ id: string;
10231
+ name: string;
10232
+ /** @enum {string} */
10233
+ trigger: "login";
10234
+ /** @description A login flow graph: typed nodes joined by named handles. See the validation rules on publish. */
10235
+ graph: {
10236
+ nodes: {
10237
+ id: string;
10238
+ type: "start" | "identify" | "methods" | "credential" | "action" | "mfa_gate" | "mfa_challenge" | "mfa_enroll" | "passkey_offer" | "condition" | "deny" | "end" | "consent" | "set_data";
10239
+ config?: {
10240
+ [key: string]: unknown;
10241
+ };
10242
+ }[];
10243
+ edges: {
10244
+ from: string;
10245
+ handle: string;
10246
+ to: string;
10247
+ }[];
10248
+ };
10249
+ /** @description Monotonic edit counter, bumped on every update. A publish freezes the graph under the revision it had; a login in flight pins the revision it started on. */
10250
+ revision: number;
10251
+ published?: {
10252
+ /** @description A login flow graph: typed nodes joined by named handles. See the validation rules on publish. */
10253
+ graph: {
10254
+ nodes: {
10255
+ id: string;
10256
+ type: "start" | "identify" | "methods" | "credential" | "action" | "mfa_gate" | "mfa_challenge" | "mfa_enroll" | "passkey_offer" | "condition" | "deny" | "end" | "consent" | "set_data";
10257
+ config?: {
10258
+ [key: string]: unknown;
10259
+ };
10260
+ }[];
10261
+ edges: {
10262
+ from: string;
10263
+ handle: string;
10264
+ to: string;
10265
+ }[];
10266
+ };
10267
+ revision: number;
10268
+ published_at: string;
10269
+ };
10270
+ /** @description Previously published graphs, newest first, for rollback. */
10271
+ history: {
10272
+ /** @description A login flow graph: typed nodes joined by named handles. See the validation rules on publish. */
10273
+ graph: {
10274
+ nodes: {
10275
+ id: string;
10276
+ type: "start" | "identify" | "methods" | "credential" | "action" | "mfa_gate" | "mfa_challenge" | "mfa_enroll" | "passkey_offer" | "condition" | "deny" | "end" | "consent" | "set_data";
10277
+ config?: {
10278
+ [key: string]: unknown;
10279
+ };
10280
+ }[];
10281
+ edges: {
10282
+ from: string;
10283
+ handle: string;
10284
+ to: string;
10285
+ }[];
10286
+ };
10287
+ revision: number;
10288
+ published_at: string;
10289
+ }[];
10290
+ /** @description Node positions in the editor. Presentation only. */
10291
+ layout?: {
10292
+ [key: string]: {
10293
+ x: number;
10294
+ y: number;
10295
+ };
10296
+ };
10297
+ /** @description Object is related with this account */
10298
+ account: string;
10299
+ /**
10300
+ * @description LoginFlowMetadata
10301
+ * @default {}
10302
+ */
10303
+ metadata: {
10304
+ [key: string]: unknown;
10305
+ };
10306
+ /** @description LoginFlow creation date */
10307
+ createdAt: string;
10308
+ /** @description LoginFlow updated date */
10309
+ updatedAt?: string;
10310
+ };
10311
+ };
10312
+ };
10313
+ };
10314
+ };
10315
+ "loginflow/previewToken": {
10316
+ parameters: {
10317
+ query?: never;
10318
+ header?: never;
10319
+ path: {
10320
+ loginflow_id: string;
10321
+ };
10322
+ cookie?: never;
10323
+ };
10324
+ requestBody?: never;
10325
+ responses: {
10326
+ /** @description Default Response */
10327
+ 200: {
10328
+ headers: {
10329
+ [name: string]: unknown;
10330
+ };
10331
+ content: {
10332
+ "application/json": {
10333
+ token: string;
10334
+ expires_in: number;
10335
+ };
10336
+ };
10337
+ };
10338
+ };
10339
+ };
10340
+ "loginflow/list": {
10341
+ parameters: {
10342
+ query?: {
10343
+ /** @description Number of items per page (max 200) */
10344
+ pageSize?: number;
10345
+ /** @description Cursor for next page */
10346
+ cursor?: string;
10347
+ /** @description Cursor returned by the previous page */
10348
+ next?: string;
10349
+ /** @description Filter using a FaableQL query */
10350
+ query?: string;
10351
+ };
10352
+ header?: never;
10353
+ path?: never;
10354
+ cookie?: never;
10355
+ };
10356
+ requestBody?: never;
10357
+ responses: {
10358
+ /** @description Default Response */
10359
+ 200: {
10360
+ headers: {
10361
+ [name: string]: unknown;
10362
+ };
10363
+ content: {
10364
+ "application/json": {
10365
+ next: string | null;
10366
+ results: components["schemas"]["LoginFlow"][];
10367
+ };
10368
+ };
10369
+ };
10370
+ };
10371
+ };
10372
+ "loginflow/create": {
10373
+ parameters: {
10374
+ query?: never;
10375
+ header?: never;
10376
+ path?: never;
10377
+ cookie?: never;
10378
+ };
10379
+ requestBody: {
10380
+ content: {
10381
+ "application/json": {
10382
+ name: string;
10383
+ /** @description A login flow graph: typed nodes joined by named handles. See the validation rules on publish. */
10384
+ graph: {
10385
+ nodes: {
10386
+ id: string;
10387
+ type: "start" | "identify" | "methods" | "credential" | "action" | "mfa_gate" | "mfa_challenge" | "mfa_enroll" | "passkey_offer" | "condition" | "deny" | "end" | "consent" | "set_data";
10388
+ config?: {
10389
+ [key: string]: unknown;
10390
+ };
10391
+ }[];
10392
+ edges: {
10393
+ from: string;
10394
+ handle: string;
10395
+ to: string;
10396
+ }[];
10397
+ };
10398
+ /** @description Node positions in the editor. Presentation only. */
10399
+ layout?: {
10400
+ [key: string]: {
10401
+ x: number;
10402
+ y: number;
10403
+ };
10404
+ };
10405
+ };
10406
+ };
10407
+ };
10408
+ responses: {
10409
+ /** @description LoginFlow */
10410
+ 200: {
10411
+ headers: {
10412
+ [name: string]: unknown;
10413
+ };
10414
+ content: {
10415
+ "application/json": {
10416
+ /** @description LoginFlow ID */
10417
+ id: string;
10418
+ name: string;
10419
+ /** @enum {string} */
10420
+ trigger: "login";
10421
+ /** @description A login flow graph: typed nodes joined by named handles. See the validation rules on publish. */
10422
+ graph: {
10423
+ nodes: {
10424
+ id: string;
10425
+ type: "start" | "identify" | "methods" | "credential" | "action" | "mfa_gate" | "mfa_challenge" | "mfa_enroll" | "passkey_offer" | "condition" | "deny" | "end" | "consent" | "set_data";
10426
+ config?: {
10427
+ [key: string]: unknown;
10428
+ };
10429
+ }[];
10430
+ edges: {
10431
+ from: string;
10432
+ handle: string;
10433
+ to: string;
10434
+ }[];
10435
+ };
10436
+ /** @description Monotonic edit counter, bumped on every update. A publish freezes the graph under the revision it had; a login in flight pins the revision it started on. */
10437
+ revision: number;
10438
+ published?: {
10439
+ /** @description A login flow graph: typed nodes joined by named handles. See the validation rules on publish. */
10440
+ graph: {
10441
+ nodes: {
10442
+ id: string;
10443
+ type: "start" | "identify" | "methods" | "credential" | "action" | "mfa_gate" | "mfa_challenge" | "mfa_enroll" | "passkey_offer" | "condition" | "deny" | "end" | "consent" | "set_data";
10444
+ config?: {
10445
+ [key: string]: unknown;
10446
+ };
10447
+ }[];
10448
+ edges: {
10449
+ from: string;
10450
+ handle: string;
10451
+ to: string;
10452
+ }[];
10453
+ };
10454
+ revision: number;
10455
+ published_at: string;
10456
+ };
10457
+ /** @description Previously published graphs, newest first, for rollback. */
10458
+ history: {
10459
+ /** @description A login flow graph: typed nodes joined by named handles. See the validation rules on publish. */
10460
+ graph: {
10461
+ nodes: {
10462
+ id: string;
10463
+ type: "start" | "identify" | "methods" | "credential" | "action" | "mfa_gate" | "mfa_challenge" | "mfa_enroll" | "passkey_offer" | "condition" | "deny" | "end" | "consent" | "set_data";
10464
+ config?: {
10465
+ [key: string]: unknown;
10466
+ };
10467
+ }[];
10468
+ edges: {
10469
+ from: string;
10470
+ handle: string;
10471
+ to: string;
10472
+ }[];
10473
+ };
10474
+ revision: number;
10475
+ published_at: string;
10476
+ }[];
10477
+ /** @description Node positions in the editor. Presentation only. */
10478
+ layout?: {
10479
+ [key: string]: {
10480
+ x: number;
10481
+ y: number;
10482
+ };
10483
+ };
10484
+ /** @description Object is related with this account */
10485
+ account: string;
10486
+ /**
10487
+ * @description LoginFlowMetadata
10488
+ * @default {}
10489
+ */
10490
+ metadata: {
10491
+ [key: string]: unknown;
10492
+ };
10493
+ /** @description LoginFlow creation date */
10494
+ createdAt: string;
10495
+ /** @description LoginFlow updated date */
10496
+ updatedAt?: string;
10497
+ };
10498
+ };
10499
+ };
10500
+ };
10501
+ };
10502
+ "loginflow/get": {
10503
+ parameters: {
10504
+ query?: never;
10505
+ header?: never;
10506
+ path: {
10507
+ loginflow_id: string;
10508
+ };
10509
+ cookie?: never;
10510
+ };
10511
+ requestBody?: never;
10512
+ responses: {
10513
+ /** @description LoginFlow */
10514
+ 200: {
10515
+ headers: {
10516
+ [name: string]: unknown;
10517
+ };
10518
+ content: {
10519
+ "application/json": {
10520
+ /** @description LoginFlow ID */
10521
+ id: string;
10522
+ name: string;
10523
+ /** @enum {string} */
10524
+ trigger: "login";
10525
+ /** @description A login flow graph: typed nodes joined by named handles. See the validation rules on publish. */
10526
+ graph: {
10527
+ nodes: {
10528
+ id: string;
10529
+ type: "start" | "identify" | "methods" | "credential" | "action" | "mfa_gate" | "mfa_challenge" | "mfa_enroll" | "passkey_offer" | "condition" | "deny" | "end" | "consent" | "set_data";
10530
+ config?: {
10531
+ [key: string]: unknown;
10532
+ };
10533
+ }[];
10534
+ edges: {
10535
+ from: string;
10536
+ handle: string;
10537
+ to: string;
10538
+ }[];
10539
+ };
10540
+ /** @description Monotonic edit counter, bumped on every update. A publish freezes the graph under the revision it had; a login in flight pins the revision it started on. */
10541
+ revision: number;
10542
+ published?: {
10543
+ /** @description A login flow graph: typed nodes joined by named handles. See the validation rules on publish. */
10544
+ graph: {
10545
+ nodes: {
10546
+ id: string;
10547
+ type: "start" | "identify" | "methods" | "credential" | "action" | "mfa_gate" | "mfa_challenge" | "mfa_enroll" | "passkey_offer" | "condition" | "deny" | "end" | "consent" | "set_data";
10548
+ config?: {
10549
+ [key: string]: unknown;
10550
+ };
10551
+ }[];
10552
+ edges: {
10553
+ from: string;
10554
+ handle: string;
10555
+ to: string;
10556
+ }[];
10557
+ };
10558
+ revision: number;
10559
+ published_at: string;
10560
+ };
10561
+ /** @description Previously published graphs, newest first, for rollback. */
10562
+ history: {
10563
+ /** @description A login flow graph: typed nodes joined by named handles. See the validation rules on publish. */
10564
+ graph: {
10565
+ nodes: {
10566
+ id: string;
10567
+ type: "start" | "identify" | "methods" | "credential" | "action" | "mfa_gate" | "mfa_challenge" | "mfa_enroll" | "passkey_offer" | "condition" | "deny" | "end" | "consent" | "set_data";
10568
+ config?: {
10569
+ [key: string]: unknown;
10570
+ };
10571
+ }[];
10572
+ edges: {
10573
+ from: string;
10574
+ handle: string;
10575
+ to: string;
10576
+ }[];
10577
+ };
10578
+ revision: number;
10579
+ published_at: string;
10580
+ }[];
10581
+ /** @description Node positions in the editor. Presentation only. */
10582
+ layout?: {
10583
+ [key: string]: {
10584
+ x: number;
10585
+ y: number;
10586
+ };
10587
+ };
10588
+ /** @description Object is related with this account */
10589
+ account: string;
10590
+ /**
10591
+ * @description LoginFlowMetadata
10592
+ * @default {}
10593
+ */
10594
+ metadata: {
10595
+ [key: string]: unknown;
10596
+ };
10597
+ /** @description LoginFlow creation date */
10598
+ createdAt: string;
10599
+ /** @description LoginFlow updated date */
10600
+ updatedAt?: string;
10601
+ };
10602
+ };
10603
+ };
10604
+ };
10605
+ };
10606
+ "loginflow/update": {
10607
+ parameters: {
10608
+ query?: never;
10609
+ header?: never;
10610
+ path: {
10611
+ loginflow_id: string;
10612
+ };
10613
+ cookie?: never;
10614
+ };
10615
+ requestBody: {
10616
+ content: {
10617
+ "application/json": {
10618
+ name?: string;
10619
+ /** @description A login flow graph: typed nodes joined by named handles. See the validation rules on publish. */
10620
+ graph?: {
10621
+ nodes: {
10622
+ id: string;
10623
+ type: "start" | "identify" | "methods" | "credential" | "action" | "mfa_gate" | "mfa_challenge" | "mfa_enroll" | "passkey_offer" | "condition" | "deny" | "end" | "consent" | "set_data";
10624
+ config?: {
10625
+ [key: string]: unknown;
10626
+ };
10627
+ }[];
10628
+ edges: {
10629
+ from: string;
10630
+ handle: string;
10631
+ to: string;
10632
+ }[];
10633
+ };
10634
+ /** @description Node positions in the editor. Presentation only. */
10635
+ layout?: {
10636
+ [key: string]: {
10637
+ x: number;
10638
+ y: number;
10639
+ };
10640
+ };
10641
+ };
10642
+ };
10643
+ };
10644
+ responses: {
10645
+ /** @description LoginFlow */
10646
+ 200: {
10647
+ headers: {
10648
+ [name: string]: unknown;
10649
+ };
10650
+ content: {
10651
+ "application/json": {
10652
+ /** @description LoginFlow ID */
10653
+ id: string;
10654
+ name: string;
10655
+ /** @enum {string} */
10656
+ trigger: "login";
10657
+ /** @description A login flow graph: typed nodes joined by named handles. See the validation rules on publish. */
10658
+ graph: {
10659
+ nodes: {
10660
+ id: string;
10661
+ type: "start" | "identify" | "methods" | "credential" | "action" | "mfa_gate" | "mfa_challenge" | "mfa_enroll" | "passkey_offer" | "condition" | "deny" | "end" | "consent" | "set_data";
10662
+ config?: {
10663
+ [key: string]: unknown;
10664
+ };
10665
+ }[];
10666
+ edges: {
10667
+ from: string;
10668
+ handle: string;
10669
+ to: string;
10670
+ }[];
10671
+ };
10672
+ /** @description Monotonic edit counter, bumped on every update. A publish freezes the graph under the revision it had; a login in flight pins the revision it started on. */
10673
+ revision: number;
10674
+ published?: {
10675
+ /** @description A login flow graph: typed nodes joined by named handles. See the validation rules on publish. */
10676
+ graph: {
10677
+ nodes: {
10678
+ id: string;
10679
+ type: "start" | "identify" | "methods" | "credential" | "action" | "mfa_gate" | "mfa_challenge" | "mfa_enroll" | "passkey_offer" | "condition" | "deny" | "end" | "consent" | "set_data";
10680
+ config?: {
10681
+ [key: string]: unknown;
10682
+ };
10683
+ }[];
10684
+ edges: {
10685
+ from: string;
10686
+ handle: string;
10687
+ to: string;
10688
+ }[];
10689
+ };
10690
+ revision: number;
10691
+ published_at: string;
10692
+ };
10693
+ /** @description Previously published graphs, newest first, for rollback. */
10694
+ history: {
10695
+ /** @description A login flow graph: typed nodes joined by named handles. See the validation rules on publish. */
10696
+ graph: {
10697
+ nodes: {
10698
+ id: string;
10699
+ type: "start" | "identify" | "methods" | "credential" | "action" | "mfa_gate" | "mfa_challenge" | "mfa_enroll" | "passkey_offer" | "condition" | "deny" | "end" | "consent" | "set_data";
10700
+ config?: {
10701
+ [key: string]: unknown;
10702
+ };
10703
+ }[];
10704
+ edges: {
10705
+ from: string;
10706
+ handle: string;
10707
+ to: string;
10708
+ }[];
10709
+ };
10710
+ revision: number;
10711
+ published_at: string;
10712
+ }[];
10713
+ /** @description Node positions in the editor. Presentation only. */
10714
+ layout?: {
10715
+ [key: string]: {
10716
+ x: number;
10717
+ y: number;
10718
+ };
10719
+ };
10720
+ /** @description Object is related with this account */
10721
+ account: string;
10722
+ /**
10723
+ * @description LoginFlowMetadata
10724
+ * @default {}
10725
+ */
10726
+ metadata: {
10727
+ [key: string]: unknown;
10728
+ };
10729
+ /** @description LoginFlow creation date */
10730
+ createdAt: string;
10731
+ /** @description LoginFlow updated date */
10732
+ updatedAt?: string;
10733
+ };
10734
+ };
10735
+ };
10736
+ };
10737
+ };
10738
+ "loginflow/delete": {
10739
+ parameters: {
10740
+ query?: never;
10741
+ header?: never;
10742
+ path: {
10743
+ loginflow_id: string;
10744
+ };
10745
+ cookie?: never;
10746
+ };
10747
+ requestBody?: never;
10748
+ responses: {
10749
+ /** @description LoginFlow */
10750
+ 200: {
10751
+ headers: {
10752
+ [name: string]: unknown;
10753
+ };
10754
+ content: {
10755
+ "application/json": {
10756
+ /** @description LoginFlow ID */
10757
+ id: string;
10758
+ name: string;
10759
+ /** @enum {string} */
10760
+ trigger: "login";
10761
+ /** @description A login flow graph: typed nodes joined by named handles. See the validation rules on publish. */
10762
+ graph: {
10763
+ nodes: {
10764
+ id: string;
10765
+ type: "start" | "identify" | "methods" | "credential" | "action" | "mfa_gate" | "mfa_challenge" | "mfa_enroll" | "passkey_offer" | "condition" | "deny" | "end" | "consent" | "set_data";
10766
+ config?: {
10767
+ [key: string]: unknown;
10768
+ };
10769
+ }[];
10770
+ edges: {
10771
+ from: string;
10772
+ handle: string;
10773
+ to: string;
10774
+ }[];
10775
+ };
10776
+ /** @description Monotonic edit counter, bumped on every update. A publish freezes the graph under the revision it had; a login in flight pins the revision it started on. */
10777
+ revision: number;
10778
+ published?: {
10779
+ /** @description A login flow graph: typed nodes joined by named handles. See the validation rules on publish. */
10780
+ graph: {
10781
+ nodes: {
10782
+ id: string;
10783
+ type: "start" | "identify" | "methods" | "credential" | "action" | "mfa_gate" | "mfa_challenge" | "mfa_enroll" | "passkey_offer" | "condition" | "deny" | "end" | "consent" | "set_data";
10784
+ config?: {
10785
+ [key: string]: unknown;
10786
+ };
10787
+ }[];
10788
+ edges: {
10789
+ from: string;
10790
+ handle: string;
10791
+ to: string;
10792
+ }[];
10793
+ };
10794
+ revision: number;
10795
+ published_at: string;
10796
+ };
10797
+ /** @description Previously published graphs, newest first, for rollback. */
10798
+ history: {
10799
+ /** @description A login flow graph: typed nodes joined by named handles. See the validation rules on publish. */
10800
+ graph: {
10801
+ nodes: {
10802
+ id: string;
10803
+ type: "start" | "identify" | "methods" | "credential" | "action" | "mfa_gate" | "mfa_challenge" | "mfa_enroll" | "passkey_offer" | "condition" | "deny" | "end" | "consent" | "set_data";
10804
+ config?: {
10805
+ [key: string]: unknown;
10806
+ };
10807
+ }[];
10808
+ edges: {
10809
+ from: string;
10810
+ handle: string;
10811
+ to: string;
10812
+ }[];
10813
+ };
10814
+ revision: number;
10815
+ published_at: string;
10816
+ }[];
10817
+ /** @description Node positions in the editor. Presentation only. */
10818
+ layout?: {
10819
+ [key: string]: {
10820
+ x: number;
10821
+ y: number;
10822
+ };
10823
+ };
10824
+ /** @description Object is related with this account */
10825
+ account: string;
10826
+ /**
10827
+ * @description LoginFlowMetadata
10828
+ * @default {}
10829
+ */
10830
+ metadata: {
10831
+ [key: string]: unknown;
10832
+ };
10833
+ /** @description LoginFlow creation date */
10834
+ createdAt: string;
10835
+ /** @description LoginFlow updated date */
10836
+ updatedAt?: string;
10837
+ };
10838
+ };
10839
+ };
10840
+ };
10841
+ };
9249
10842
  "notificationsubscription/list": {
9250
10843
  parameters: {
9251
10844
  query?: {
@@ -10154,6 +11747,12 @@ export interface operations {
10154
11747
  email_bounced_at?: string | null;
10155
11748
  /** @description ISO 8601 timestamp of the built-in welcome email send. Set once by the platform; guarantees at most one welcome per user. */
10156
11749
  welcome_sent_at?: string | null;
11750
+ /** @description ISO 8601 timestamp of the last time the hosted "create a passkey" offer was shown to this user after a login. Drives the snooze in `login_methods.passkey_promotion_snooze_days`. */
11751
+ passkey_prompted_at?: string | null;
11752
+ /** @description How many times the passkey offer has been shown to this user. Capped by `login_methods.passkey_promotion_max_prompts`; reset by an administrator through `POST /user/:id/passkey-prompt/reset`. */
11753
+ passkey_prompt_count?: number;
11754
+ /** @description ISO 8601 timestamp of the last time the user chose "Not now" on the passkey offer, as opposed to closing the tab. */
11755
+ passkey_prompt_dismissed_at?: string | null;
10157
11756
  /** @description contact phone number */
10158
11757
  phone?: string | null;
10159
11758
  /** @description phone is verified */
@@ -10288,6 +11887,8 @@ export interface operations {
10288
11887
  connection_scope?: string;
10289
11888
  /** @description Link mode: attach the resulting provider identity to the ACTIVE session user instead of signing in or up. Requires a session; incompatible with prompt=login/consent. */
10290
11889
  link?: boolean;
11890
+ /** @description Preview token from `POST /loginflow/:id/preview-token`. This login runs the DRAFT of that flow, for this browser only; nothing is published. Invalid or expired tokens are ignored. */
11891
+ flow_preview?: string;
10291
11892
  /** @description Single-use ticket from `POST /oauth/link_ticket`. With `link=true`, establishes the cookie session for the ticket’s user before linking — for Relying Parties that hold tokens but no cookie session (direct grants such as passwordless OTP). Invalid or expired tickets are ignored. */
10292
11893
  link_ticket?: string;
10293
11894
  client_id: string;