@faable/auth-sdk 2.9.2 → 2.9.4
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.
- package/dist/FaableAuthApi.d.ts +4 -0
- package/dist/api/generated-client.d.ts +8 -0
- package/dist/api/types.d.ts +120 -2
- package/dist/version.js +2 -2
- package/package.json +1 -1
- package/spec/openapi.json +205 -3
package/dist/FaableAuthApi.d.ts
CHANGED
|
@@ -991,6 +991,7 @@ export declare class FaableAuthApi extends GeneratedFaableAuthApi {
|
|
|
991
991
|
logo_uri?: string | null | undefined;
|
|
992
992
|
tos_uri?: string | null | undefined;
|
|
993
993
|
policy_uri?: string | null | undefined;
|
|
994
|
+
initiate_login_uri?: string | null | undefined;
|
|
994
995
|
contacts?: string[] | undefined;
|
|
995
996
|
grant_types?: string[] | undefined;
|
|
996
997
|
response_types?: string[] | undefined;
|
|
@@ -1074,6 +1075,7 @@ export declare class FaableAuthApi extends GeneratedFaableAuthApi {
|
|
|
1074
1075
|
logo_uri?: string | null | undefined;
|
|
1075
1076
|
tos_uri?: string | null | undefined;
|
|
1076
1077
|
policy_uri?: string | null | undefined;
|
|
1078
|
+
initiate_login_uri?: string | null | undefined;
|
|
1077
1079
|
contacts?: string[] | undefined;
|
|
1078
1080
|
grant_types?: string[] | undefined;
|
|
1079
1081
|
response_types?: string[] | undefined;
|
|
@@ -1160,6 +1162,7 @@ export declare class FaableAuthApi extends GeneratedFaableAuthApi {
|
|
|
1160
1162
|
logo_uri?: string | null | undefined;
|
|
1161
1163
|
tos_uri?: string | null | undefined;
|
|
1162
1164
|
policy_uri?: string | null | undefined;
|
|
1165
|
+
initiate_login_uri?: string | null | undefined;
|
|
1163
1166
|
contacts?: string[] | undefined;
|
|
1164
1167
|
grant_types?: string[] | undefined;
|
|
1165
1168
|
response_types?: string[] | undefined;
|
|
@@ -1245,6 +1248,7 @@ export declare class FaableAuthApi extends GeneratedFaableAuthApi {
|
|
|
1245
1248
|
logo_uri?: string | null | undefined;
|
|
1246
1249
|
tos_uri?: string | null | undefined;
|
|
1247
1250
|
policy_uri?: string | null | undefined;
|
|
1251
|
+
initiate_login_uri?: string | null | undefined;
|
|
1248
1252
|
contacts?: string[] | undefined;
|
|
1249
1253
|
grant_types?: string[] | undefined;
|
|
1250
1254
|
response_types?: string[] | undefined;
|
|
@@ -1522,6 +1522,7 @@ export declare abstract class GeneratedFaableAuthApi extends FaableApi {
|
|
|
1522
1522
|
logo_uri?: string | null | undefined;
|
|
1523
1523
|
tos_uri?: string | null | undefined;
|
|
1524
1524
|
policy_uri?: string | null | undefined;
|
|
1525
|
+
initiate_login_uri?: string | null | undefined;
|
|
1525
1526
|
contacts?: string[] | undefined;
|
|
1526
1527
|
grant_types?: string[] | undefined;
|
|
1527
1528
|
response_types?: string[] | undefined;
|
|
@@ -1621,6 +1622,7 @@ export declare abstract class GeneratedFaableAuthApi extends FaableApi {
|
|
|
1621
1622
|
logo_uri?: string | null | undefined;
|
|
1622
1623
|
tos_uri?: string | null | undefined;
|
|
1623
1624
|
policy_uri?: string | null | undefined;
|
|
1625
|
+
initiate_login_uri?: string | null | undefined;
|
|
1624
1626
|
contacts?: string[] | undefined;
|
|
1625
1627
|
grant_types?: string[] | undefined;
|
|
1626
1628
|
response_types?: string[] | undefined;
|
|
@@ -1721,6 +1723,7 @@ export declare abstract class GeneratedFaableAuthApi extends FaableApi {
|
|
|
1721
1723
|
logo_uri?: string | null | undefined;
|
|
1722
1724
|
tos_uri?: string | null | undefined;
|
|
1723
1725
|
policy_uri?: string | null | undefined;
|
|
1726
|
+
initiate_login_uri?: string | null | undefined;
|
|
1724
1727
|
contacts?: string[] | undefined;
|
|
1725
1728
|
grant_types?: string[] | undefined;
|
|
1726
1729
|
response_types?: string[] | undefined;
|
|
@@ -1822,6 +1825,7 @@ export declare abstract class GeneratedFaableAuthApi extends FaableApi {
|
|
|
1822
1825
|
logo_uri?: string | null | undefined;
|
|
1823
1826
|
tos_uri?: string | null | undefined;
|
|
1824
1827
|
policy_uri?: string | null | undefined;
|
|
1828
|
+
initiate_login_uri?: string | null | undefined;
|
|
1825
1829
|
contacts?: string[] | undefined;
|
|
1826
1830
|
grant_types?: string[] | undefined;
|
|
1827
1831
|
response_types?: string[] | undefined;
|
|
@@ -1905,6 +1909,7 @@ export declare abstract class GeneratedFaableAuthApi extends FaableApi {
|
|
|
1905
1909
|
logo_uri?: string | null | undefined;
|
|
1906
1910
|
tos_uri?: string | null | undefined;
|
|
1907
1911
|
policy_uri?: string | null | undefined;
|
|
1912
|
+
initiate_login_uri?: string | null | undefined;
|
|
1908
1913
|
contacts?: string[] | undefined;
|
|
1909
1914
|
grant_types?: string[] | undefined;
|
|
1910
1915
|
response_types?: string[] | undefined;
|
|
@@ -1991,6 +1996,7 @@ export declare abstract class GeneratedFaableAuthApi extends FaableApi {
|
|
|
1991
1996
|
logo_uri?: string | null | undefined;
|
|
1992
1997
|
tos_uri?: string | null | undefined;
|
|
1993
1998
|
policy_uri?: string | null | undefined;
|
|
1999
|
+
initiate_login_uri?: string | null | undefined;
|
|
1994
2000
|
contacts?: string[] | undefined;
|
|
1995
2001
|
grant_types?: string[] | undefined;
|
|
1996
2002
|
response_types?: string[] | undefined;
|
|
@@ -2093,6 +2099,7 @@ export declare abstract class GeneratedFaableAuthApi extends FaableApi {
|
|
|
2093
2099
|
logo_uri?: string | null | undefined;
|
|
2094
2100
|
tos_uri?: string | null | undefined;
|
|
2095
2101
|
policy_uri?: string | null | undefined;
|
|
2102
|
+
initiate_login_uri?: string | null | undefined;
|
|
2096
2103
|
contacts?: string[] | undefined;
|
|
2097
2104
|
grant_types?: string[] | undefined;
|
|
2098
2105
|
response_types?: string[] | undefined;
|
|
@@ -2193,6 +2200,7 @@ export declare abstract class GeneratedFaableAuthApi extends FaableApi {
|
|
|
2193
2200
|
logo_uri?: string | null | undefined;
|
|
2194
2201
|
tos_uri?: string | null | undefined;
|
|
2195
2202
|
policy_uri?: string | null | undefined;
|
|
2203
|
+
initiate_login_uri?: string | null | undefined;
|
|
2196
2204
|
contacts?: string[] | undefined;
|
|
2197
2205
|
grant_types?: string[] | undefined;
|
|
2198
2206
|
response_types?: string[] | undefined;
|
package/dist/api/types.d.ts
CHANGED
|
@@ -436,6 +436,26 @@ export interface paths {
|
|
|
436
436
|
patch?: never;
|
|
437
437
|
trace?: never;
|
|
438
438
|
};
|
|
439
|
+
"/login-host": {
|
|
440
|
+
parameters: {
|
|
441
|
+
query?: never;
|
|
442
|
+
header?: never;
|
|
443
|
+
path?: never;
|
|
444
|
+
cookie?: never;
|
|
445
|
+
};
|
|
446
|
+
/**
|
|
447
|
+
* Find the login host of a client's tenant
|
|
448
|
+
* @description The host where the hosted login screens of the tenant that owns this `client_id` are served. Lets a login URL opened on the wrong host be sent to the right one. Not tenant-scoped: callable on any auth host.
|
|
449
|
+
*/
|
|
450
|
+
get: operations["client/loginHost"];
|
|
451
|
+
put?: never;
|
|
452
|
+
post?: never;
|
|
453
|
+
delete?: never;
|
|
454
|
+
options?: never;
|
|
455
|
+
head?: never;
|
|
456
|
+
patch?: never;
|
|
457
|
+
trace?: never;
|
|
458
|
+
};
|
|
439
459
|
"/login/home-realm": {
|
|
440
460
|
parameters: {
|
|
441
461
|
query?: never;
|
|
@@ -6099,6 +6119,8 @@ export interface components {
|
|
|
6099
6119
|
logo_uri?: string | null;
|
|
6100
6120
|
tos_uri?: string | null;
|
|
6101
6121
|
policy_uri?: string | null;
|
|
6122
|
+
/** @description The URL in the application that starts a login. Where the hosted login screen sends people who open an expired or shared login link. */
|
|
6123
|
+
initiate_login_uri?: string | null;
|
|
6102
6124
|
contacts?: string[];
|
|
6103
6125
|
grant_types?: string[];
|
|
6104
6126
|
response_types?: string[];
|
|
@@ -6220,6 +6242,7 @@ export interface components {
|
|
|
6220
6242
|
callbacks?: string[];
|
|
6221
6243
|
logout_urls?: string[];
|
|
6222
6244
|
web_origins?: string[];
|
|
6245
|
+
initiate_login_uri?: string;
|
|
6223
6246
|
grant_types?: ("authorization_code" | "client_credentials" | "refresh_token" | "password" | "http://auth0.com/oauth/grant-type/passwordless/otp" | "urn:ietf:params:oauth:grant-type:token-exchange" | "urn:ietf:params:oauth:grant-type:device_code" | "http://auth0.com/oauth/grant-type/mfa-otp" | "http://auth0.com/oauth/grant-type/mfa-recovery-code")[];
|
|
6224
6247
|
/** @description Add Metadata */
|
|
6225
6248
|
metadata?: {
|
|
@@ -6258,6 +6281,8 @@ export interface components {
|
|
|
6258
6281
|
logo_uri?: string | null;
|
|
6259
6282
|
tos_uri?: string | null;
|
|
6260
6283
|
policy_uri?: string | null;
|
|
6284
|
+
/** @description OIDC `initiate_login_uri`: the URL in your application that starts a login (it redirects to /authorize). When someone opens an expired or shared login link, the hosted login screen sends them here to start over. https only (http on localhost). `null` removes it. */
|
|
6285
|
+
initiate_login_uri?: string | null;
|
|
6261
6286
|
contacts?: string[];
|
|
6262
6287
|
/** @description Grants this client may use at the token endpoint. Empty allows every grant except `password`, which must be listed to be used. */
|
|
6263
6288
|
grant_types?: ("authorization_code" | "client_credentials" | "refresh_token" | "password" | "http://auth0.com/oauth/grant-type/passwordless/otp" | "urn:ietf:params:oauth:grant-type:token-exchange" | "urn:ietf:params:oauth:grant-type:device_code" | "http://auth0.com/oauth/grant-type/mfa-otp" | "http://auth0.com/oauth/grant-type/mfa-recovery-code")[];
|
|
@@ -8671,7 +8696,7 @@ export interface components {
|
|
|
8671
8696
|
* - `invalid_client` (400): The `client_id` in the request does not name a client of this account.
|
|
8672
8697
|
* - `client_not_found` (404): No client with that `client_id`.
|
|
8673
8698
|
* - `client_mismatch` (401): The client belongs to a different account.
|
|
8674
|
-
* - `invalid_client_metadata` (400):
|
|
8699
|
+
* - `invalid_client_metadata` (400): A client field was rejected: by dynamic client registration (RFC 7591), or on a client create/update (`initiate_login_uri`). `message` names it.
|
|
8675
8700
|
* - `invalid_connection` (400): The connection does not exist, is disabled, or is not of the type this flow needs.
|
|
8676
8701
|
* - `no_database_connection` (400): The tenant has no database connection, so there is nowhere to store a password. Create one and retry.
|
|
8677
8702
|
* - `connection_required` (400): No connection was given and the client has no `default_connection`.
|
|
@@ -12446,6 +12471,8 @@ export interface operations {
|
|
|
12446
12471
|
name: string;
|
|
12447
12472
|
/** @description The http(s) origins this client registered in its `callbacks`, de-duplicated. A hosted screen uses it as the allow-list for a cross-origin `return_to`: the account security page is opened from the tenant's own application and has to offer a way back to it, which `redirect_to` (same-origin paths only) cannot express. Nothing secret — a redirect URI already travels in the query of every `/authorize` call. */
|
|
12448
12473
|
origins: string[];
|
|
12474
|
+
/** @description The client's `initiate_login_uri`: the URL in the application that starts a fresh login. The hosted screen sends people there when the login link they opened is expired or was opened in another browser. Absent when the client does not set one. */
|
|
12475
|
+
initiate_login_uri?: string;
|
|
12449
12476
|
} | null;
|
|
12450
12477
|
identifier_first: boolean;
|
|
12451
12478
|
remember_last_method: boolean;
|
|
@@ -12460,6 +12487,11 @@ export interface operations {
|
|
|
12460
12487
|
* @enum {string}
|
|
12461
12488
|
*/
|
|
12462
12489
|
theme?: "light" | "dark";
|
|
12490
|
+
/**
|
|
12491
|
+
* @description What became of the login `state` the screen was opened with. `live`: the login can go on. `expired`: it no longer exists — a tab left open too long, or a login URL that was bookmarked or shared — and no credential posted against it will work, so start a new login from the application. `foreign`: it exists but was started in another browser, which is what a shared login URL looks like; the login would not reach the application that asked for it. Absent when no `state` was sent or it belongs to another client.
|
|
12492
|
+
* @enum {string}
|
|
12493
|
+
*/
|
|
12494
|
+
state_status?: "live" | "expired" | "foreign";
|
|
12463
12495
|
/** @description Already filtered and ordered. Render them in this order; do not re-sort or re-filter client-side. */
|
|
12464
12496
|
methods: components["schemas"]["LoginOptionMethod"][];
|
|
12465
12497
|
};
|
|
@@ -12515,6 +12547,79 @@ export interface operations {
|
|
|
12515
12547
|
};
|
|
12516
12548
|
};
|
|
12517
12549
|
};
|
|
12550
|
+
"client/loginHost": {
|
|
12551
|
+
parameters: {
|
|
12552
|
+
query: {
|
|
12553
|
+
client_id: string;
|
|
12554
|
+
};
|
|
12555
|
+
header?: never;
|
|
12556
|
+
path?: never;
|
|
12557
|
+
cookie?: never;
|
|
12558
|
+
};
|
|
12559
|
+
requestBody?: never;
|
|
12560
|
+
responses: {
|
|
12561
|
+
/** @description Default Response */
|
|
12562
|
+
200: {
|
|
12563
|
+
headers: {
|
|
12564
|
+
[name: string]: unknown;
|
|
12565
|
+
};
|
|
12566
|
+
content: {
|
|
12567
|
+
"application/json": {
|
|
12568
|
+
/** @description The tenant's login host: its `canonical_host` when set, else its platform host. */
|
|
12569
|
+
host: string;
|
|
12570
|
+
};
|
|
12571
|
+
};
|
|
12572
|
+
};
|
|
12573
|
+
/** @description `validation_error` — The body, query or path failed schema validation. `details.issues` lists each failing field. */
|
|
12574
|
+
400: {
|
|
12575
|
+
headers: {
|
|
12576
|
+
[name: string]: unknown;
|
|
12577
|
+
};
|
|
12578
|
+
content: {
|
|
12579
|
+
"application/json": components["schemas"]["ErrorResponse"] & {
|
|
12580
|
+
/** @enum {string} */
|
|
12581
|
+
error_code?: "validation_error";
|
|
12582
|
+
};
|
|
12583
|
+
};
|
|
12584
|
+
};
|
|
12585
|
+
/** @description `account_not_found` — No Auth Account matches the request (domain, header or token). */
|
|
12586
|
+
404: {
|
|
12587
|
+
headers: {
|
|
12588
|
+
[name: string]: unknown;
|
|
12589
|
+
};
|
|
12590
|
+
content: {
|
|
12591
|
+
"application/json": components["schemas"]["ErrorResponse"] & {
|
|
12592
|
+
/** @enum {string} */
|
|
12593
|
+
error_code?: "account_not_found";
|
|
12594
|
+
};
|
|
12595
|
+
};
|
|
12596
|
+
};
|
|
12597
|
+
/** @description `too_many_requests` — Rate limit exceeded. Honour the `Retry-After` header. */
|
|
12598
|
+
429: {
|
|
12599
|
+
headers: {
|
|
12600
|
+
[name: string]: unknown;
|
|
12601
|
+
};
|
|
12602
|
+
content: {
|
|
12603
|
+
"application/json": components["schemas"]["ErrorResponse"] & {
|
|
12604
|
+
/** @enum {string} */
|
|
12605
|
+
error_code?: "too_many_requests";
|
|
12606
|
+
};
|
|
12607
|
+
};
|
|
12608
|
+
};
|
|
12609
|
+
/** @description `internal_error` — Unexpected server error. Retry later; the request id is logged. */
|
|
12610
|
+
500: {
|
|
12611
|
+
headers: {
|
|
12612
|
+
[name: string]: unknown;
|
|
12613
|
+
};
|
|
12614
|
+
content: {
|
|
12615
|
+
"application/json": components["schemas"]["ErrorResponse"] & {
|
|
12616
|
+
/** @enum {string} */
|
|
12617
|
+
error_code?: "internal_error";
|
|
12618
|
+
};
|
|
12619
|
+
};
|
|
12620
|
+
};
|
|
12621
|
+
};
|
|
12622
|
+
};
|
|
12518
12623
|
"login/homeRealm": {
|
|
12519
12624
|
parameters: {
|
|
12520
12625
|
query: {
|
|
@@ -12839,6 +12944,7 @@ export interface operations {
|
|
|
12839
12944
|
callbacks?: string[];
|
|
12840
12945
|
logout_urls?: string[];
|
|
12841
12946
|
web_origins?: string[];
|
|
12947
|
+
initiate_login_uri?: string;
|
|
12842
12948
|
grant_types?: ("authorization_code" | "client_credentials" | "refresh_token" | "password" | "http://auth0.com/oauth/grant-type/passwordless/otp" | "urn:ietf:params:oauth:grant-type:token-exchange" | "urn:ietf:params:oauth:grant-type:device_code" | "http://auth0.com/oauth/grant-type/mfa-otp" | "http://auth0.com/oauth/grant-type/mfa-recovery-code")[];
|
|
12843
12949
|
/** @description Add Metadata */
|
|
12844
12950
|
metadata?: {
|
|
@@ -12879,6 +12985,8 @@ export interface operations {
|
|
|
12879
12985
|
logo_uri?: string | null;
|
|
12880
12986
|
tos_uri?: string | null;
|
|
12881
12987
|
policy_uri?: string | null;
|
|
12988
|
+
/** @description The URL in the application that starts a login. Where the hosted login screen sends people who open an expired or shared login link. */
|
|
12989
|
+
initiate_login_uri?: string | null;
|
|
12882
12990
|
contacts?: string[];
|
|
12883
12991
|
grant_types?: string[];
|
|
12884
12992
|
response_types?: string[];
|
|
@@ -13114,6 +13222,8 @@ export interface operations {
|
|
|
13114
13222
|
logo_uri?: string | null;
|
|
13115
13223
|
tos_uri?: string | null;
|
|
13116
13224
|
policy_uri?: string | null;
|
|
13225
|
+
/** @description The URL in the application that starts a login. Where the hosted login screen sends people who open an expired or shared login link. */
|
|
13226
|
+
initiate_login_uri?: string | null;
|
|
13117
13227
|
contacts?: string[];
|
|
13118
13228
|
grant_types?: string[];
|
|
13119
13229
|
response_types?: string[];
|
|
@@ -13350,6 +13460,8 @@ export interface operations {
|
|
|
13350
13460
|
logo_uri?: string | null;
|
|
13351
13461
|
tos_uri?: string | null;
|
|
13352
13462
|
policy_uri?: string | null;
|
|
13463
|
+
/** @description OIDC `initiate_login_uri`: the URL in your application that starts a login (it redirects to /authorize). When someone opens an expired or shared login link, the hosted login screen sends them here to start over. https only (http on localhost). `null` removes it. */
|
|
13464
|
+
initiate_login_uri?: string | null;
|
|
13353
13465
|
contacts?: string[];
|
|
13354
13466
|
/** @description Grants this client may use at the token endpoint. Empty allows every grant except `password`, which must be listed to be used. */
|
|
13355
13467
|
grant_types?: ("authorization_code" | "client_credentials" | "refresh_token" | "password" | "http://auth0.com/oauth/grant-type/passwordless/otp" | "urn:ietf:params:oauth:grant-type:token-exchange" | "urn:ietf:params:oauth:grant-type:device_code" | "http://auth0.com/oauth/grant-type/mfa-otp" | "http://auth0.com/oauth/grant-type/mfa-recovery-code")[];
|
|
@@ -13474,6 +13586,8 @@ export interface operations {
|
|
|
13474
13586
|
logo_uri?: string | null;
|
|
13475
13587
|
tos_uri?: string | null;
|
|
13476
13588
|
policy_uri?: string | null;
|
|
13589
|
+
/** @description The URL in the application that starts a login. Where the hosted login screen sends people who open an expired or shared login link. */
|
|
13590
|
+
initiate_login_uri?: string | null;
|
|
13477
13591
|
contacts?: string[];
|
|
13478
13592
|
grant_types?: string[];
|
|
13479
13593
|
response_types?: string[];
|
|
@@ -13715,6 +13829,8 @@ export interface operations {
|
|
|
13715
13829
|
logo_uri?: string | null;
|
|
13716
13830
|
tos_uri?: string | null;
|
|
13717
13831
|
policy_uri?: string | null;
|
|
13832
|
+
/** @description The URL in the application that starts a login. Where the hosted login screen sends people who open an expired or shared login link. */
|
|
13833
|
+
initiate_login_uri?: string | null;
|
|
13718
13834
|
contacts?: string[];
|
|
13719
13835
|
grant_types?: string[];
|
|
13720
13836
|
response_types?: string[];
|
|
@@ -13954,6 +14070,8 @@ export interface operations {
|
|
|
13954
14070
|
logo_uri?: string | null;
|
|
13955
14071
|
tos_uri?: string | null;
|
|
13956
14072
|
policy_uri?: string | null;
|
|
14073
|
+
/** @description The URL in the application that starts a login. Where the hosted login screen sends people who open an expired or shared login link. */
|
|
14074
|
+
initiate_login_uri?: string | null;
|
|
13957
14075
|
contacts?: string[];
|
|
13958
14076
|
grant_types?: string[];
|
|
13959
14077
|
response_types?: string[];
|
|
@@ -36710,7 +36828,7 @@ export interface operations {
|
|
|
36710
36828
|
};
|
|
36711
36829
|
};
|
|
36712
36830
|
/**
|
|
36713
|
-
* @description `invalid_client_metadata` —
|
|
36831
|
+
* @description `invalid_client_metadata` — A client field was rejected: by dynamic client registration (RFC 7591), or on a client create/update (`initiate_login_uri`). `message` names it.
|
|
36714
36832
|
*
|
|
36715
36833
|
* `validation_error` — The body, query or path failed schema validation. `details.issues` lists each failing field.
|
|
36716
36834
|
*/
|
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.9.
|
|
12
|
+
export const version = "2.9.4";
|
|
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 = "
|
|
18
|
+
export const commit = "eb2f9b1";
|
|
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
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.
|
|
6
|
+
"version": "2.95.0",
|
|
7
7
|
"license": {
|
|
8
8
|
"name": "private",
|
|
9
9
|
"url": "https://faable.com/docs/platform/privacy-policy"
|
|
@@ -1719,6 +1719,11 @@
|
|
|
1719
1719
|
"type": "string",
|
|
1720
1720
|
"nullable": true
|
|
1721
1721
|
},
|
|
1722
|
+
"initiate_login_uri": {
|
|
1723
|
+
"type": "string",
|
|
1724
|
+
"description": "The URL in the application that starts a login. Where the hosted login screen sends people who open an expired or shared login link.",
|
|
1725
|
+
"nullable": true
|
|
1726
|
+
},
|
|
1722
1727
|
"contacts": {
|
|
1723
1728
|
"type": "array",
|
|
1724
1729
|
"items": {
|
|
@@ -2280,6 +2285,9 @@
|
|
|
2280
2285
|
"type": "string"
|
|
2281
2286
|
}
|
|
2282
2287
|
},
|
|
2288
|
+
"initiate_login_uri": {
|
|
2289
|
+
"type": "string"
|
|
2290
|
+
},
|
|
2283
2291
|
"grant_types": {
|
|
2284
2292
|
"type": "array",
|
|
2285
2293
|
"items": {
|
|
@@ -2498,6 +2506,11 @@
|
|
|
2498
2506
|
"type": "string",
|
|
2499
2507
|
"nullable": true
|
|
2500
2508
|
},
|
|
2509
|
+
"initiate_login_uri": {
|
|
2510
|
+
"type": "string",
|
|
2511
|
+
"description": "OIDC `initiate_login_uri`: the URL in your application that starts a login (it redirects to /authorize). When someone opens an expired or shared login link, the hosted login screen sends them here to start over. https only (http on localhost). `null` removes it.",
|
|
2512
|
+
"nullable": true
|
|
2513
|
+
},
|
|
2501
2514
|
"contacts": {
|
|
2502
2515
|
"type": "array",
|
|
2503
2516
|
"items": {
|
|
@@ -9696,7 +9709,7 @@
|
|
|
9696
9709
|
},
|
|
9697
9710
|
"ErrorCode": {
|
|
9698
9711
|
"type": "string",
|
|
9699
|
-
"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- `last_sign_in_method` (409): Unlinking this account would leave the user with no way to sign in: set a password, verify the email or link another account first.\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` (403): 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- `email_sender_domain_not_allowed` (400): The sender address is not in a domain this platform signs email for (AUTH_EMAIL_SENDER_DOMAINS).\n- `plan_required` (402): The setting requires a higher plan. `message` says which.\n- `invalid_canonical_host` (400): `canonical_host` must be this account's own platform host or one of its verified custom domains.\n- `canonical_host_breaks_passkeys` (400): `canonical_host` is outside the account's current WebAuthn RP ID — every passkey already enrolled would stop working. Set `webauthn_rp_id` in the same request to a suffix that covers both.\n- `not_logged_in` (401): There is no signed-in session for this request.\n- `session_already_revoked` (409): The session was already revoked.\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- `m2m_quota_exceeded` (402): The project used the machine-to-machine tokens its plan includes this month. Free is capped; Hobby and Pro are billed per token instead.\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- `username_taken` (409): Another user of this database connection already uses that username.\n- `invalid_username` (400): The username is empty, or contains an `@` or whitespace. `message` says which.\n- `invalid_email` (400): The email address is not valid.\n- `invalid_name` (400): The name contains a link. `message` says which field.\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- `no_database_connection` (400): The tenant has no database connection, so there is nowhere to store a password. Create one and retry.\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- `invalid_saml_request` (400): The SAMLRequest is missing, too large, not well-formed or not a SAML 2.0 AuthnRequest.\n- `saml_sp_mismatch` (400): The AuthnRequest does not match the client's SAML configuration: its Issuer is not the configured entity_id, or it asks for another Assertion Consumer Service URL or binding.\n- `saml_not_enabled` (404): This client does not have SAML enabled.\n- `invalid_saml_sp` (400): The `saml_sp` configuration is invalid: `acs_url` must be an absolute https URL without a fragment.\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- `reauth_required` (403): The operation needs a recent sign-in (and the second factor, when the user has one). Sign in again with `max_age=0` and retry with the new token.\n- `invalid_current_password` (400): The current password is wrong.\n- `email_not_verified` (403): The user's email is not verified, and the operation needs it to be.\n- `invalid_profile_field` (400): A profile field is not declared for this application, or its value does not match the declaration. `message` names the key.\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- `invalid_invite_url` (400): An invite's `accept_url` or `redirect_uri` is not an http(s) URL at an origin of this tenant's client callbacks or `callback_hostnames`, or it carries a fragment.\n- `invite_email_mismatch` (403): The invite is for another email address than the accepting user's. `details.invited_email` shows it masked.\n- `invite_email_unverified` (403): The accepting user's email matches the invite but is not verified yet.\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- `consent_options_unavailable` (502): The consent screen could not load the choices from the API being authorized (its `consent_options.url`). Try again in a moment.\n- `consent_choice_invalid` (400): The choice sent with the consent decision is not one the API offered for this user.\n- `registration_disabled` (403): Dynamic client registration is turned off for this tenant. Create the client from the dashboard or the Management API, or turn on `dynamic_client_registration_enabled`.\n- `invalid_email_domain` (400): Not an email domain this organization can claim: it must be a plain domain name (`acme.com`), lowercase, without scheme, path or wildcard.\n- `public_email_domain` (400): A public email provider (gmail.com, outlook.com…) cannot belong to an organization: anyone can have an address there.\n- `organization_domain_not_found` (404): The organization has no such domain.\n- `organization_domain_taken` (409): Another organization of this tenant already verified this domain. A domain belongs to one organization.\n- `organization_domain_unverified` (400): The TXT record was not found or does not hold the expected value yet. `details.record` says what was expected and what resolves now; DNS can take a few minutes to propagate.\n- `plan_unavailable` (503): The plan could not be checked right now, and this setting is only for paid plans. Try again in a minute.\n- `organization_domain_mismatch` (403): This organization's identity provider can only sign in addresses of the organization's verified email domains.\n- `team_not_in_organization` (400): Auto-join can only put people in teams of the same organization. `details.teams` lists the others.\n- `organization_has_no_idp` (400): Requiring SSO needs an identity provider: bind an `oidc` connection to the organization first.\n- `organization_not_found` (404): No organization with that id in this account.\n- `invalid_user` (400): The user does not exist in this account.\n- `not_an_organization_admin` (404): The user is not an admin of the organization.\n- `last_organization_admin` (409): An organization keeps at least one admin. Add another admin before removing this one.\n- `team_id_unavailable` (409): The team id cannot be used in this tenant. Pick another id or let the API generate one.\n- `use_team_member_route` (400): This generic route cannot create memberships. Use `POST /team/{team_id}/member` for team members or `POST /role/{role_id}/users` for role grants.\n- `role_not_found` (404): No role with that id in this account.\n- `invalid_role` (400): The role belongs to another account.\n- `invalid_permission` (400): A permission is not in the catalog of its Api, or the Api is not in this account. `details.permissions` lists the ones refused.\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.\n- `invalid_webhook_event` (400): An event is not in the webhook event catalog. `message` and `details.valid_events` list the valid ones.\n- `invalid_webhook_url` (400): The webhook URL must be an absolute `https` URL.\n- `not_a_webhook` (400): The operation only applies to `webhook` subscriptions.\n- `delivery_not_found` (404): No webhook delivery with that id for this subscription.\n- `delivery_in_progress` (409): The delivery is being attempted right now; retry the redeliver in a minute.",
|
|
9712
|
+
"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- `last_sign_in_method` (409): Unlinking this account would leave the user with no way to sign in: set a password, verify the email or link another account first.\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` (403): 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- `email_sender_domain_not_allowed` (400): The sender address is not in a domain this platform signs email for (AUTH_EMAIL_SENDER_DOMAINS).\n- `plan_required` (402): The setting requires a higher plan. `message` says which.\n- `invalid_canonical_host` (400): `canonical_host` must be this account's own platform host or one of its verified custom domains.\n- `canonical_host_breaks_passkeys` (400): `canonical_host` is outside the account's current WebAuthn RP ID — every passkey already enrolled would stop working. Set `webauthn_rp_id` in the same request to a suffix that covers both.\n- `not_logged_in` (401): There is no signed-in session for this request.\n- `session_already_revoked` (409): The session was already revoked.\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- `m2m_quota_exceeded` (402): The project used the machine-to-machine tokens its plan includes this month. Free is capped; Hobby and Pro are billed per token instead.\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- `username_taken` (409): Another user of this database connection already uses that username.\n- `invalid_username` (400): The username is empty, or contains an `@` or whitespace. `message` says which.\n- `invalid_email` (400): The email address is not valid.\n- `invalid_name` (400): The name contains a link. `message` says which field.\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): A client field was rejected: by dynamic client registration (RFC 7591), or on a client create/update (`initiate_login_uri`). `message` names it.\n- `invalid_connection` (400): The connection does not exist, is disabled, or is not of the type this flow needs.\n- `no_database_connection` (400): The tenant has no database connection, so there is nowhere to store a password. Create one and retry.\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- `invalid_saml_request` (400): The SAMLRequest is missing, too large, not well-formed or not a SAML 2.0 AuthnRequest.\n- `saml_sp_mismatch` (400): The AuthnRequest does not match the client's SAML configuration: its Issuer is not the configured entity_id, or it asks for another Assertion Consumer Service URL or binding.\n- `saml_not_enabled` (404): This client does not have SAML enabled.\n- `invalid_saml_sp` (400): The `saml_sp` configuration is invalid: `acs_url` must be an absolute https URL without a fragment.\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- `reauth_required` (403): The operation needs a recent sign-in (and the second factor, when the user has one). Sign in again with `max_age=0` and retry with the new token.\n- `invalid_current_password` (400): The current password is wrong.\n- `email_not_verified` (403): The user's email is not verified, and the operation needs it to be.\n- `invalid_profile_field` (400): A profile field is not declared for this application, or its value does not match the declaration. `message` names the key.\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- `invalid_invite_url` (400): An invite's `accept_url` or `redirect_uri` is not an http(s) URL at an origin of this tenant's client callbacks or `callback_hostnames`, or it carries a fragment.\n- `invite_email_mismatch` (403): The invite is for another email address than the accepting user's. `details.invited_email` shows it masked.\n- `invite_email_unverified` (403): The accepting user's email matches the invite but is not verified yet.\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- `consent_options_unavailable` (502): The consent screen could not load the choices from the API being authorized (its `consent_options.url`). Try again in a moment.\n- `consent_choice_invalid` (400): The choice sent with the consent decision is not one the API offered for this user.\n- `registration_disabled` (403): Dynamic client registration is turned off for this tenant. Create the client from the dashboard or the Management API, or turn on `dynamic_client_registration_enabled`.\n- `invalid_email_domain` (400): Not an email domain this organization can claim: it must be a plain domain name (`acme.com`), lowercase, without scheme, path or wildcard.\n- `public_email_domain` (400): A public email provider (gmail.com, outlook.com…) cannot belong to an organization: anyone can have an address there.\n- `organization_domain_not_found` (404): The organization has no such domain.\n- `organization_domain_taken` (409): Another organization of this tenant already verified this domain. A domain belongs to one organization.\n- `organization_domain_unverified` (400): The TXT record was not found or does not hold the expected value yet. `details.record` says what was expected and what resolves now; DNS can take a few minutes to propagate.\n- `plan_unavailable` (503): The plan could not be checked right now, and this setting is only for paid plans. Try again in a minute.\n- `organization_domain_mismatch` (403): This organization's identity provider can only sign in addresses of the organization's verified email domains.\n- `team_not_in_organization` (400): Auto-join can only put people in teams of the same organization. `details.teams` lists the others.\n- `organization_has_no_idp` (400): Requiring SSO needs an identity provider: bind an `oidc` connection to the organization first.\n- `organization_not_found` (404): No organization with that id in this account.\n- `invalid_user` (400): The user does not exist in this account.\n- `not_an_organization_admin` (404): The user is not an admin of the organization.\n- `last_organization_admin` (409): An organization keeps at least one admin. Add another admin before removing this one.\n- `team_id_unavailable` (409): The team id cannot be used in this tenant. Pick another id or let the API generate one.\n- `use_team_member_route` (400): This generic route cannot create memberships. Use `POST /team/{team_id}/member` for team members or `POST /role/{role_id}/users` for role grants.\n- `role_not_found` (404): No role with that id in this account.\n- `invalid_role` (400): The role belongs to another account.\n- `invalid_permission` (400): A permission is not in the catalog of its Api, or the Api is not in this account. `details.permissions` lists the ones refused.\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.\n- `invalid_webhook_event` (400): An event is not in the webhook event catalog. `message` and `details.valid_events` list the valid ones.\n- `invalid_webhook_url` (400): The webhook URL must be an absolute `https` URL.\n- `not_a_webhook` (400): The operation only applies to `webhook` subscriptions.\n- `delivery_not_found` (404): No webhook delivery with that id for this subscription.\n- `delivery_in_progress` (409): The delivery is being attempted right now; retry the redeliver in a minute.",
|
|
9700
9713
|
"enum": [
|
|
9701
9714
|
"bad_request",
|
|
9702
9715
|
"validation_error",
|
|
@@ -19877,6 +19890,10 @@
|
|
|
19877
19890
|
"type": "string"
|
|
19878
19891
|
},
|
|
19879
19892
|
"description": "The http(s) origins this client registered in its `callbacks`, de-duplicated. A hosted screen uses it as the allow-list for a cross-origin `return_to`: the account security page is opened from the tenant's own application and has to offer a way back to it, which `redirect_to` (same-origin paths only) cannot express. Nothing secret — a redirect URI already travels in the query of every `/authorize` call."
|
|
19893
|
+
},
|
|
19894
|
+
"initiate_login_uri": {
|
|
19895
|
+
"type": "string",
|
|
19896
|
+
"description": "The client's `initiate_login_uri`: the URL in the application that starts a fresh login. The hosted screen sends people there when the login link they opened is expired or was opened in another browser. Absent when the client does not set one."
|
|
19880
19897
|
}
|
|
19881
19898
|
}
|
|
19882
19899
|
},
|
|
@@ -19912,6 +19929,15 @@
|
|
|
19912
19929
|
],
|
|
19913
19930
|
"description": "The colour theme the screens are forced to, and the visitor's switch hidden: `theme` on this login's /authorize, else the tenant/client `login_methods.theme`. Absent when nothing forces it — the visitor's own choice, or the OS, decides."
|
|
19914
19931
|
},
|
|
19932
|
+
"state_status": {
|
|
19933
|
+
"type": "string",
|
|
19934
|
+
"enum": [
|
|
19935
|
+
"live",
|
|
19936
|
+
"expired",
|
|
19937
|
+
"foreign"
|
|
19938
|
+
],
|
|
19939
|
+
"description": "What became of the login `state` the screen was opened with. `live`: the login can go on. `expired`: it no longer exists — a tab left open too long, or a login URL that was bookmarked or shared — and no credential posted against it will work, so start a new login from the application. `foreign`: it exists but was started in another browser, which is what a shared login URL looks like; the login would not reach the application that asked for it. Absent when no `state` was sent or it belongs to another client."
|
|
19940
|
+
},
|
|
19915
19941
|
"methods": {
|
|
19916
19942
|
"type": "array",
|
|
19917
19943
|
"items": {
|
|
@@ -20028,6 +20054,149 @@
|
|
|
20028
20054
|
}
|
|
20029
20055
|
}
|
|
20030
20056
|
},
|
|
20057
|
+
"/login-host": {
|
|
20058
|
+
"get": {
|
|
20059
|
+
"operationId": "client/loginHost",
|
|
20060
|
+
"summary": "Find the login host of a client's tenant",
|
|
20061
|
+
"tags": [
|
|
20062
|
+
"client"
|
|
20063
|
+
],
|
|
20064
|
+
"description": "The host where the hosted login screens of the tenant that owns this `client_id` are served. Lets a login URL opened on the wrong host be sent to the right one. Not tenant-scoped: callable on any auth host.",
|
|
20065
|
+
"parameters": [
|
|
20066
|
+
{
|
|
20067
|
+
"schema": {
|
|
20068
|
+
"type": "string",
|
|
20069
|
+
"minLength": 1,
|
|
20070
|
+
"maxLength": 200
|
|
20071
|
+
},
|
|
20072
|
+
"in": "query",
|
|
20073
|
+
"name": "client_id",
|
|
20074
|
+
"required": true
|
|
20075
|
+
}
|
|
20076
|
+
],
|
|
20077
|
+
"responses": {
|
|
20078
|
+
"200": {
|
|
20079
|
+
"description": "Default Response",
|
|
20080
|
+
"content": {
|
|
20081
|
+
"application/json": {
|
|
20082
|
+
"schema": {
|
|
20083
|
+
"type": "object",
|
|
20084
|
+
"required": [
|
|
20085
|
+
"host"
|
|
20086
|
+
],
|
|
20087
|
+
"properties": {
|
|
20088
|
+
"host": {
|
|
20089
|
+
"type": "string",
|
|
20090
|
+
"description": "The tenant's login host: its `canonical_host` when set, else its platform host."
|
|
20091
|
+
}
|
|
20092
|
+
}
|
|
20093
|
+
}
|
|
20094
|
+
}
|
|
20095
|
+
}
|
|
20096
|
+
},
|
|
20097
|
+
"400": {
|
|
20098
|
+
"description": "`validation_error` — The body, query or path failed schema validation. `details.issues` lists each failing field.",
|
|
20099
|
+
"content": {
|
|
20100
|
+
"application/json": {
|
|
20101
|
+
"schema": {
|
|
20102
|
+
"allOf": [
|
|
20103
|
+
{
|
|
20104
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
20105
|
+
},
|
|
20106
|
+
{
|
|
20107
|
+
"type": "object",
|
|
20108
|
+
"properties": {
|
|
20109
|
+
"error_code": {
|
|
20110
|
+
"type": "string",
|
|
20111
|
+
"enum": [
|
|
20112
|
+
"validation_error"
|
|
20113
|
+
]
|
|
20114
|
+
}
|
|
20115
|
+
}
|
|
20116
|
+
}
|
|
20117
|
+
]
|
|
20118
|
+
}
|
|
20119
|
+
}
|
|
20120
|
+
}
|
|
20121
|
+
},
|
|
20122
|
+
"404": {
|
|
20123
|
+
"description": "`account_not_found` — No Auth Account matches the request (domain, header or token).",
|
|
20124
|
+
"content": {
|
|
20125
|
+
"application/json": {
|
|
20126
|
+
"schema": {
|
|
20127
|
+
"allOf": [
|
|
20128
|
+
{
|
|
20129
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
20130
|
+
},
|
|
20131
|
+
{
|
|
20132
|
+
"type": "object",
|
|
20133
|
+
"properties": {
|
|
20134
|
+
"error_code": {
|
|
20135
|
+
"type": "string",
|
|
20136
|
+
"enum": [
|
|
20137
|
+
"account_not_found"
|
|
20138
|
+
]
|
|
20139
|
+
}
|
|
20140
|
+
}
|
|
20141
|
+
}
|
|
20142
|
+
]
|
|
20143
|
+
}
|
|
20144
|
+
}
|
|
20145
|
+
}
|
|
20146
|
+
},
|
|
20147
|
+
"429": {
|
|
20148
|
+
"description": "`too_many_requests` — Rate limit exceeded. Honour the `Retry-After` header.",
|
|
20149
|
+
"content": {
|
|
20150
|
+
"application/json": {
|
|
20151
|
+
"schema": {
|
|
20152
|
+
"allOf": [
|
|
20153
|
+
{
|
|
20154
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
20155
|
+
},
|
|
20156
|
+
{
|
|
20157
|
+
"type": "object",
|
|
20158
|
+
"properties": {
|
|
20159
|
+
"error_code": {
|
|
20160
|
+
"type": "string",
|
|
20161
|
+
"enum": [
|
|
20162
|
+
"too_many_requests"
|
|
20163
|
+
]
|
|
20164
|
+
}
|
|
20165
|
+
}
|
|
20166
|
+
}
|
|
20167
|
+
]
|
|
20168
|
+
}
|
|
20169
|
+
}
|
|
20170
|
+
}
|
|
20171
|
+
},
|
|
20172
|
+
"500": {
|
|
20173
|
+
"description": "`internal_error` — Unexpected server error. Retry later; the request id is logged.",
|
|
20174
|
+
"content": {
|
|
20175
|
+
"application/json": {
|
|
20176
|
+
"schema": {
|
|
20177
|
+
"allOf": [
|
|
20178
|
+
{
|
|
20179
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
20180
|
+
},
|
|
20181
|
+
{
|
|
20182
|
+
"type": "object",
|
|
20183
|
+
"properties": {
|
|
20184
|
+
"error_code": {
|
|
20185
|
+
"type": "string",
|
|
20186
|
+
"enum": [
|
|
20187
|
+
"internal_error"
|
|
20188
|
+
]
|
|
20189
|
+
}
|
|
20190
|
+
}
|
|
20191
|
+
}
|
|
20192
|
+
]
|
|
20193
|
+
}
|
|
20194
|
+
}
|
|
20195
|
+
}
|
|
20196
|
+
}
|
|
20197
|
+
}
|
|
20198
|
+
}
|
|
20199
|
+
},
|
|
20031
20200
|
"/login/home-realm": {
|
|
20032
20201
|
"get": {
|
|
20033
20202
|
"operationId": "login/homeRealm",
|
|
@@ -20750,6 +20919,9 @@
|
|
|
20750
20919
|
"type": "string"
|
|
20751
20920
|
}
|
|
20752
20921
|
},
|
|
20922
|
+
"initiate_login_uri": {
|
|
20923
|
+
"type": "string"
|
|
20924
|
+
},
|
|
20753
20925
|
"grant_types": {
|
|
20754
20926
|
"type": "array",
|
|
20755
20927
|
"items": {
|
|
@@ -20936,6 +21108,11 @@
|
|
|
20936
21108
|
"type": "string",
|
|
20937
21109
|
"nullable": true
|
|
20938
21110
|
},
|
|
21111
|
+
"initiate_login_uri": {
|
|
21112
|
+
"type": "string",
|
|
21113
|
+
"description": "The URL in the application that starts a login. Where the hosted login screen sends people who open an expired or shared login link.",
|
|
21114
|
+
"nullable": true
|
|
21115
|
+
},
|
|
20939
21116
|
"contacts": {
|
|
20940
21117
|
"type": "array",
|
|
20941
21118
|
"items": {
|
|
@@ -21746,6 +21923,11 @@
|
|
|
21746
21923
|
"type": "string",
|
|
21747
21924
|
"nullable": true
|
|
21748
21925
|
},
|
|
21926
|
+
"initiate_login_uri": {
|
|
21927
|
+
"type": "string",
|
|
21928
|
+
"description": "The URL in the application that starts a login. Where the hosted login screen sends people who open an expired or shared login link.",
|
|
21929
|
+
"nullable": true
|
|
21930
|
+
},
|
|
21749
21931
|
"contacts": {
|
|
21750
21932
|
"type": "array",
|
|
21751
21933
|
"items": {
|
|
@@ -22521,6 +22703,11 @@
|
|
|
22521
22703
|
"type": "string",
|
|
22522
22704
|
"nullable": true
|
|
22523
22705
|
},
|
|
22706
|
+
"initiate_login_uri": {
|
|
22707
|
+
"type": "string",
|
|
22708
|
+
"description": "OIDC `initiate_login_uri`: the URL in your application that starts a login (it redirects to /authorize). When someone opens an expired or shared login link, the hosted login screen sends them here to start over. https only (http on localhost). `null` removes it.",
|
|
22709
|
+
"nullable": true
|
|
22710
|
+
},
|
|
22524
22711
|
"contacts": {
|
|
22525
22712
|
"type": "array",
|
|
22526
22713
|
"items": {
|
|
@@ -23230,6 +23417,11 @@
|
|
|
23230
23417
|
"type": "string",
|
|
23231
23418
|
"nullable": true
|
|
23232
23419
|
},
|
|
23420
|
+
"initiate_login_uri": {
|
|
23421
|
+
"type": "string",
|
|
23422
|
+
"description": "The URL in the application that starts a login. Where the hosted login screen sends people who open an expired or shared login link.",
|
|
23423
|
+
"nullable": true
|
|
23424
|
+
},
|
|
23233
23425
|
"contacts": {
|
|
23234
23426
|
"type": "array",
|
|
23235
23427
|
"items": {
|
|
@@ -24040,6 +24232,11 @@
|
|
|
24040
24232
|
"type": "string",
|
|
24041
24233
|
"nullable": true
|
|
24042
24234
|
},
|
|
24235
|
+
"initiate_login_uri": {
|
|
24236
|
+
"type": "string",
|
|
24237
|
+
"description": "The URL in the application that starts a login. Where the hosted login screen sends people who open an expired or shared login link.",
|
|
24238
|
+
"nullable": true
|
|
24239
|
+
},
|
|
24043
24240
|
"contacts": {
|
|
24044
24241
|
"type": "array",
|
|
24045
24242
|
"items": {
|
|
@@ -24851,6 +25048,11 @@
|
|
|
24851
25048
|
"type": "string",
|
|
24852
25049
|
"nullable": true
|
|
24853
25050
|
},
|
|
25051
|
+
"initiate_login_uri": {
|
|
25052
|
+
"type": "string",
|
|
25053
|
+
"description": "The URL in the application that starts a login. Where the hosted login screen sends people who open an expired or shared login link.",
|
|
25054
|
+
"nullable": true
|
|
25055
|
+
},
|
|
24854
25056
|
"contacts": {
|
|
24855
25057
|
"type": "array",
|
|
24856
25058
|
"items": {
|
|
@@ -78772,7 +78974,7 @@
|
|
|
78772
78974
|
}
|
|
78773
78975
|
},
|
|
78774
78976
|
"400": {
|
|
78775
|
-
"description": "`invalid_client_metadata` —
|
|
78977
|
+
"description": "`invalid_client_metadata` — A client field was rejected: by dynamic client registration (RFC 7591), or on a client create/update (`initiate_login_uri`). `message` names it.\n\n`validation_error` — The body, query or path failed schema validation. `details.issues` lists each failing field.",
|
|
78776
78978
|
"content": {
|
|
78777
78979
|
"application/json": {
|
|
78778
78980
|
"schema": {
|