@faable/auth-sdk 2.7.84 → 2.7.85
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/api/generated-client.d.ts +63 -0
- package/dist/api/types.d.ts +235 -1
- package/dist/version.js +2 -2
- package/package.json +1 -1
- package/spec/openapi.json +440 -2
|
@@ -2117,6 +2117,23 @@ export declare abstract class GeneratedFaableAuthApi extends FaableApi {
|
|
|
2117
2117
|
issuer: string;
|
|
2118
2118
|
jwks_url: string;
|
|
2119
2119
|
response_type: string;
|
|
2120
|
+
/**
|
|
2121
|
+
* `GET /teammember` — operationId: `teammember/list`
|
|
2122
|
+
*
|
|
2123
|
+
* List Teammembers
|
|
2124
|
+
*
|
|
2125
|
+
* @throws {FaableApiError} `invalid_query` (400) — The `?query=` FaableQL expression could not be parsed.
|
|
2126
|
+
* @throws {FaableApiError} `invalid_expand` (400) — An `?expand=` path is not allowed on this resource.
|
|
2127
|
+
* @throws {FaableApiError} `search_not_supported` (400) — This resource does not support `?search=`.
|
|
2128
|
+
* @throws {FaableApiError} `validation_error` (400) — The body, query or path failed schema validation. `details.issues` lists each failing field.
|
|
2129
|
+
* @throws {FaableApiError} `unauthorized` (401) — The request carries no valid credentials.
|
|
2130
|
+
* @throws {FaableApiError} `forbidden` (403) — The credentials are valid but do not allow this operation.
|
|
2131
|
+
* @throws {FaableApiError} `insufficient_scope` (403) — The token lacks a scope this operation requires. `message` names it.
|
|
2132
|
+
* @throws {FaableApiError} `user_suspended` (403) — The user is suspended and cannot sign in or be modified.
|
|
2133
|
+
* @throws {FaableApiError} `account_not_found` (404) — No Auth Account matches the request (domain, header or token).
|
|
2134
|
+
* @throws {FaableApiError} `too_many_requests` (429) — Rate limit exceeded. Honour the `Retry-After` header.
|
|
2135
|
+
* @throws {FaableApiError} `internal_error` (500) — Unexpected server error. Retry later; the request id is logged.
|
|
2136
|
+
*/
|
|
2120
2137
|
enabled: boolean;
|
|
2121
2138
|
organization?: string | null | undefined;
|
|
2122
2139
|
enabled_clients: string[] | null;
|
|
@@ -2158,6 +2175,23 @@ export declare abstract class GeneratedFaableAuthApi extends FaableApi {
|
|
|
2158
2175
|
issuer: string;
|
|
2159
2176
|
jwks_url: string;
|
|
2160
2177
|
response_type: string;
|
|
2178
|
+
/**
|
|
2179
|
+
* `GET /teammember` — operationId: `teammember/list`
|
|
2180
|
+
*
|
|
2181
|
+
* List Teammembers
|
|
2182
|
+
*
|
|
2183
|
+
* @throws {FaableApiError} `invalid_query` (400) — The `?query=` FaableQL expression could not be parsed.
|
|
2184
|
+
* @throws {FaableApiError} `invalid_expand` (400) — An `?expand=` path is not allowed on this resource.
|
|
2185
|
+
* @throws {FaableApiError} `search_not_supported` (400) — This resource does not support `?search=`.
|
|
2186
|
+
* @throws {FaableApiError} `validation_error` (400) — The body, query or path failed schema validation. `details.issues` lists each failing field.
|
|
2187
|
+
* @throws {FaableApiError} `unauthorized` (401) — The request carries no valid credentials.
|
|
2188
|
+
* @throws {FaableApiError} `forbidden` (403) — The credentials are valid but do not allow this operation.
|
|
2189
|
+
* @throws {FaableApiError} `insufficient_scope` (403) — The token lacks a scope this operation requires. `message` names it.
|
|
2190
|
+
* @throws {FaableApiError} `user_suspended` (403) — The user is suspended and cannot sign in or be modified.
|
|
2191
|
+
* @throws {FaableApiError} `account_not_found` (404) — No Auth Account matches the request (domain, header or token).
|
|
2192
|
+
* @throws {FaableApiError} `too_many_requests` (429) — Rate limit exceeded. Honour the `Retry-After` header.
|
|
2193
|
+
* @throws {FaableApiError} `internal_error` (500) — Unexpected server error. Retry later; the request id is logged.
|
|
2194
|
+
*/
|
|
2161
2195
|
enabled: boolean;
|
|
2162
2196
|
organization?: string | null | undefined;
|
|
2163
2197
|
enabled_clients: string[] | null;
|
|
@@ -2202,6 +2236,23 @@ export declare abstract class GeneratedFaableAuthApi extends FaableApi {
|
|
|
2202
2236
|
issuer: string;
|
|
2203
2237
|
jwks_url: string;
|
|
2204
2238
|
response_type: string;
|
|
2239
|
+
/**
|
|
2240
|
+
* `GET /teammember` — operationId: `teammember/list`
|
|
2241
|
+
*
|
|
2242
|
+
* List Teammembers
|
|
2243
|
+
*
|
|
2244
|
+
* @throws {FaableApiError} `invalid_query` (400) — The `?query=` FaableQL expression could not be parsed.
|
|
2245
|
+
* @throws {FaableApiError} `invalid_expand` (400) — An `?expand=` path is not allowed on this resource.
|
|
2246
|
+
* @throws {FaableApiError} `search_not_supported` (400) — This resource does not support `?search=`.
|
|
2247
|
+
* @throws {FaableApiError} `validation_error` (400) — The body, query or path failed schema validation. `details.issues` lists each failing field.
|
|
2248
|
+
* @throws {FaableApiError} `unauthorized` (401) — The request carries no valid credentials.
|
|
2249
|
+
* @throws {FaableApiError} `forbidden` (403) — The credentials are valid but do not allow this operation.
|
|
2250
|
+
* @throws {FaableApiError} `insufficient_scope` (403) — The token lacks a scope this operation requires. `message` names it.
|
|
2251
|
+
* @throws {FaableApiError} `user_suspended` (403) — The user is suspended and cannot sign in or be modified.
|
|
2252
|
+
* @throws {FaableApiError} `account_not_found` (404) — No Auth Account matches the request (domain, header or token).
|
|
2253
|
+
* @throws {FaableApiError} `too_many_requests` (429) — Rate limit exceeded. Honour the `Retry-After` header.
|
|
2254
|
+
* @throws {FaableApiError} `internal_error` (500) — Unexpected server error. Retry later; the request id is logged.
|
|
2255
|
+
*/
|
|
2205
2256
|
enabled: boolean;
|
|
2206
2257
|
organization?: string | null | undefined;
|
|
2207
2258
|
enabled_clients: string[] | null;
|
|
@@ -4513,6 +4564,7 @@ export declare abstract class GeneratedFaableAuthApi extends FaableApi {
|
|
|
4513
4564
|
verification_token: string;
|
|
4514
4565
|
verified_at: string | null;
|
|
4515
4566
|
}[];
|
|
4567
|
+
require_sso: boolean;
|
|
4516
4568
|
auto_join: {
|
|
4517
4569
|
team: string;
|
|
4518
4570
|
roles: string[];
|
|
@@ -4555,6 +4607,7 @@ export declare abstract class GeneratedFaableAuthApi extends FaableApi {
|
|
|
4555
4607
|
verification_token: string;
|
|
4556
4608
|
verified_at: string | null;
|
|
4557
4609
|
}[];
|
|
4610
|
+
require_sso: boolean;
|
|
4558
4611
|
auto_join: {
|
|
4559
4612
|
team: string;
|
|
4560
4613
|
roles: string[];
|
|
@@ -4593,6 +4646,7 @@ export declare abstract class GeneratedFaableAuthApi extends FaableApi {
|
|
|
4593
4646
|
verification_token: string;
|
|
4594
4647
|
verified_at: string | null;
|
|
4595
4648
|
}[];
|
|
4649
|
+
require_sso: boolean;
|
|
4596
4650
|
auto_join: {
|
|
4597
4651
|
team: string;
|
|
4598
4652
|
roles: string[];
|
|
@@ -4632,6 +4686,7 @@ export declare abstract class GeneratedFaableAuthApi extends FaableApi {
|
|
|
4632
4686
|
verification_token: string;
|
|
4633
4687
|
verified_at: string | null;
|
|
4634
4688
|
}[];
|
|
4689
|
+
require_sso: boolean;
|
|
4635
4690
|
auto_join: {
|
|
4636
4691
|
team: string;
|
|
4637
4692
|
roles: string[];
|
|
@@ -4672,6 +4727,7 @@ export declare abstract class GeneratedFaableAuthApi extends FaableApi {
|
|
|
4672
4727
|
verification_token: string;
|
|
4673
4728
|
verified_at: string | null;
|
|
4674
4729
|
}[];
|
|
4730
|
+
require_sso: boolean;
|
|
4675
4731
|
auto_join: {
|
|
4676
4732
|
team: string;
|
|
4677
4733
|
roles: string[];
|
|
@@ -4713,6 +4769,7 @@ export declare abstract class GeneratedFaableAuthApi extends FaableApi {
|
|
|
4713
4769
|
verification_token: string;
|
|
4714
4770
|
verified_at: string | null;
|
|
4715
4771
|
}[];
|
|
4772
|
+
require_sso: boolean;
|
|
4716
4773
|
auto_join: {
|
|
4717
4774
|
team: string;
|
|
4718
4775
|
roles: string[];
|
|
@@ -4736,6 +4793,7 @@ export declare abstract class GeneratedFaableAuthApi extends FaableApi {
|
|
|
4736
4793
|
verification_token: string;
|
|
4737
4794
|
verified_at: string | null;
|
|
4738
4795
|
}[];
|
|
4796
|
+
require_sso: boolean;
|
|
4739
4797
|
auto_join: {
|
|
4740
4798
|
team: string;
|
|
4741
4799
|
roles: string[];
|
|
@@ -4762,6 +4820,7 @@ export declare abstract class GeneratedFaableAuthApi extends FaableApi {
|
|
|
4762
4820
|
verification_token: string;
|
|
4763
4821
|
verified_at: string | null;
|
|
4764
4822
|
}[];
|
|
4823
|
+
require_sso: boolean;
|
|
4765
4824
|
auto_join: {
|
|
4766
4825
|
team: string;
|
|
4767
4826
|
roles: string[];
|
|
@@ -4805,6 +4864,7 @@ export declare abstract class GeneratedFaableAuthApi extends FaableApi {
|
|
|
4805
4864
|
verification_token: string;
|
|
4806
4865
|
verified_at: string | null;
|
|
4807
4866
|
}[];
|
|
4867
|
+
require_sso: boolean;
|
|
4808
4868
|
auto_join: {
|
|
4809
4869
|
team: string;
|
|
4810
4870
|
roles: string[];
|
|
@@ -4846,6 +4906,7 @@ export declare abstract class GeneratedFaableAuthApi extends FaableApi {
|
|
|
4846
4906
|
verification_token: string;
|
|
4847
4907
|
verified_at: string | null;
|
|
4848
4908
|
}[];
|
|
4909
|
+
require_sso: boolean;
|
|
4849
4910
|
auto_join: {
|
|
4850
4911
|
team: string;
|
|
4851
4912
|
roles: string[];
|
|
@@ -4886,6 +4947,7 @@ export declare abstract class GeneratedFaableAuthApi extends FaableApi {
|
|
|
4886
4947
|
verification_token: string;
|
|
4887
4948
|
verified_at: string | null;
|
|
4888
4949
|
}[];
|
|
4950
|
+
require_sso: boolean;
|
|
4889
4951
|
auto_join: {
|
|
4890
4952
|
team: string;
|
|
4891
4953
|
roles: string[];
|
|
@@ -4934,6 +4996,7 @@ export declare abstract class GeneratedFaableAuthApi extends FaableApi {
|
|
|
4934
4996
|
verification_token: string;
|
|
4935
4997
|
verified_at: string | null;
|
|
4936
4998
|
}[];
|
|
4999
|
+
require_sso: boolean;
|
|
4937
5000
|
auto_join: {
|
|
4938
5001
|
team: string;
|
|
4939
5002
|
roles: string[];
|
package/dist/api/types.d.ts
CHANGED
|
@@ -1388,6 +1388,26 @@ export interface paths {
|
|
|
1388
1388
|
patch?: never;
|
|
1389
1389
|
trace?: never;
|
|
1390
1390
|
};
|
|
1391
|
+
"/organization/{organization_id}/require-sso": {
|
|
1392
|
+
parameters: {
|
|
1393
|
+
query?: never;
|
|
1394
|
+
header?: never;
|
|
1395
|
+
path?: never;
|
|
1396
|
+
cookie?: never;
|
|
1397
|
+
};
|
|
1398
|
+
get?: never;
|
|
1399
|
+
/**
|
|
1400
|
+
* Require SSO for an Organization
|
|
1401
|
+
* @description On: people of the verified domains reach the organization's teams only through its identity provider. Access tokens carry `https://faable.com/org` (the organization of the user's verified email domain) and `https://faable.com/org_sso` (whether this session came through its identity provider); the resource server applies it. Needs a bound `oidc` connection and the Pro plan; turning it off is always allowed.
|
|
1402
|
+
*/
|
|
1403
|
+
put: operations["organization/setRequireSso"];
|
|
1404
|
+
post?: never;
|
|
1405
|
+
delete?: never;
|
|
1406
|
+
options?: never;
|
|
1407
|
+
head?: never;
|
|
1408
|
+
patch?: never;
|
|
1409
|
+
trace?: never;
|
|
1410
|
+
};
|
|
1391
1411
|
"/teammember": {
|
|
1392
1412
|
parameters: {
|
|
1393
1413
|
query?: never;
|
|
@@ -5890,6 +5910,8 @@ export interface components {
|
|
|
5890
5910
|
*/
|
|
5891
5911
|
verified_at: string | null;
|
|
5892
5912
|
}[];
|
|
5913
|
+
/** @description People of the verified domains reach the organization's teams only through its identity provider. Applied by the resource server with the `https://faable.com/org` and `https://faable.com/org_sso` access-token claims. */
|
|
5914
|
+
require_sso: boolean;
|
|
5893
5915
|
/** @description Whoever signs in with a verified email of one of the verified domains joins these teams. Empty = nobody joins by domain. */
|
|
5894
5916
|
auto_join: {
|
|
5895
5917
|
/** @description A team of this organization. */
|
|
@@ -7370,6 +7392,7 @@ export interface components {
|
|
|
7370
7392
|
* - `plan_unavailable` (503): The plan could not be checked right now, and this setting is only for paid plans. Try again in a minute.
|
|
7371
7393
|
* - `organization_domain_mismatch` (403): This organization's identity provider can only sign in addresses of the organization's verified email domains.
|
|
7372
7394
|
* - `team_not_in_organization` (400): Auto-join can only put people in teams of the same organization. `details.teams` lists the others.
|
|
7395
|
+
* - `organization_has_no_idp` (400): Requiring SSO needs an identity provider: bind an `oidc` connection to the organization first.
|
|
7373
7396
|
* - `organization_not_found` (404): No organization with that id in this account.
|
|
7374
7397
|
* - `invalid_user` (400): The user does not exist in this account.
|
|
7375
7398
|
* - `not_an_organization_admin` (404): The user is not an admin of the organization.
|
|
@@ -7387,7 +7410,7 @@ export interface components {
|
|
|
7387
7410
|
* - `delivery_in_progress` (409): The delivery is being attempted right now; retry the redeliver in a minute.
|
|
7388
7411
|
* @enum {string}
|
|
7389
7412
|
*/
|
|
7390
|
-
ErrorCode: "bad_request" | "validation_error" | "unauthorized" | "payment_required" | "forbidden" | "not_found" | "method_not_allowed" | "conflict" | "payload_too_large" | "unsupported_media_type" | "unprocessable_entity" | "too_many_requests" | "internal_error" | "already_exists" | "invalid_id" | "account_not_found" | "invalid_query" | "search_not_supported" | "invalid_expand" | "access_denied" | "insufficient_scope" | "team_required" | "account_limit_reached" | "invalid_project_id" | "account_transfer_refused" | "email_sender_domain_not_allowed" | "plan_required" | "invalid_canonical_host" | "canonical_host_breaks_passkeys" | "not_logged_in" | "session_already_revoked" | "invalid_token" | "not_owner" | "user_suspended" | "invalid_credentials" | "login_denied" | "signup_denied" | "client_credentials_denied" | "m2m_quota_exceeded" | "signup_disabled" | "email_taken" | "username_taken" | "invalid_username" | "invalid_email" | "invalid_name" | "same_email" | "user_has_no_email" | "password_too_weak" | "invalid_password_hash" | "weak_password_hash" | "invalid_code" | "invalid_phone" | "phone_changed" | "phone_already_verified" | "sms_unavailable" | "sms_failed" | "invalid_state" | "state_mismatch" | "invalid_ticket" | "ticket_used" | "ticket_expired" | "ticket_not_found" | "credential_not_found" | "invalid_link" | "expired_link" | "invalid_otp" | "invalid_client" | "client_not_found" | "client_mismatch" | "invalid_client_metadata" | "invalid_connection" | "no_database_connection" | "connection_required" | "connection_misconfigured" | "passwordless_unavailable" | "ambiguous_connection" | "invalid_redirect_uri" | "origin_not_allowed" | "audience_not_found" | "system_resource" | "invalid_request" | "invalid_device_code" | "provider_error" | "identity_already_linked" | "identity_link_denied" | "identity_conflict" | "identity_orphaned" | "no_provider_token" | "no_refresh_token" | "action_unavailable" | "login_flow_misconfigured" | "mfa_required" | "step_up_required" | "interaction_required" | "passkey_login_disabled" | "mfa_pending" | "mfa_invalid_code" | "mfa_invalid_recovery_code" | "too_many_attempts" | "too_many_login_attempts" | "totp_not_allowed" | "no_usable_factor" | "factor_not_found" | "factor_already_confirmed" | "invalid_factor" | "session_missing" | "passkey_verification_failed" | "no_passkey_enrolled" | "malformed_credential" | "unknown_passkey" | "invalid_passkey" | "invalid_invite_url" | "invite_email_mismatch" | "invite_email_unverified" | "invite_not_found" | "invite_used" | "already_member" | "not_a_member" | "registration_disabled" | "invalid_email_domain" | "public_email_domain" | "organization_domain_not_found" | "organization_domain_taken" | "organization_domain_unverified" | "plan_unavailable" | "organization_domain_mismatch" | "team_not_in_organization" | "organization_not_found" | "invalid_user" | "not_an_organization_admin" | "last_organization_admin" | "team_id_unavailable" | "use_team_member_route" | "role_not_found" | "invalid_role" | "flow_not_found" | "revision_not_found" | "invalid_webhook_event" | "invalid_webhook_url" | "not_a_webhook" | "delivery_not_found" | "delivery_in_progress";
|
|
7413
|
+
ErrorCode: "bad_request" | "validation_error" | "unauthorized" | "payment_required" | "forbidden" | "not_found" | "method_not_allowed" | "conflict" | "payload_too_large" | "unsupported_media_type" | "unprocessable_entity" | "too_many_requests" | "internal_error" | "already_exists" | "invalid_id" | "account_not_found" | "invalid_query" | "search_not_supported" | "invalid_expand" | "access_denied" | "insufficient_scope" | "team_required" | "account_limit_reached" | "invalid_project_id" | "account_transfer_refused" | "email_sender_domain_not_allowed" | "plan_required" | "invalid_canonical_host" | "canonical_host_breaks_passkeys" | "not_logged_in" | "session_already_revoked" | "invalid_token" | "not_owner" | "user_suspended" | "invalid_credentials" | "login_denied" | "signup_denied" | "client_credentials_denied" | "m2m_quota_exceeded" | "signup_disabled" | "email_taken" | "username_taken" | "invalid_username" | "invalid_email" | "invalid_name" | "same_email" | "user_has_no_email" | "password_too_weak" | "invalid_password_hash" | "weak_password_hash" | "invalid_code" | "invalid_phone" | "phone_changed" | "phone_already_verified" | "sms_unavailable" | "sms_failed" | "invalid_state" | "state_mismatch" | "invalid_ticket" | "ticket_used" | "ticket_expired" | "ticket_not_found" | "credential_not_found" | "invalid_link" | "expired_link" | "invalid_otp" | "invalid_client" | "client_not_found" | "client_mismatch" | "invalid_client_metadata" | "invalid_connection" | "no_database_connection" | "connection_required" | "connection_misconfigured" | "passwordless_unavailable" | "ambiguous_connection" | "invalid_redirect_uri" | "origin_not_allowed" | "audience_not_found" | "system_resource" | "invalid_request" | "invalid_device_code" | "provider_error" | "identity_already_linked" | "identity_link_denied" | "identity_conflict" | "identity_orphaned" | "no_provider_token" | "no_refresh_token" | "action_unavailable" | "login_flow_misconfigured" | "mfa_required" | "step_up_required" | "interaction_required" | "passkey_login_disabled" | "mfa_pending" | "mfa_invalid_code" | "mfa_invalid_recovery_code" | "too_many_attempts" | "too_many_login_attempts" | "totp_not_allowed" | "no_usable_factor" | "factor_not_found" | "factor_already_confirmed" | "invalid_factor" | "session_missing" | "passkey_verification_failed" | "no_passkey_enrolled" | "malformed_credential" | "unknown_passkey" | "invalid_passkey" | "invalid_invite_url" | "invite_email_mismatch" | "invite_email_unverified" | "invite_not_found" | "invite_used" | "already_member" | "not_a_member" | "registration_disabled" | "invalid_email_domain" | "public_email_domain" | "organization_domain_not_found" | "organization_domain_taken" | "organization_domain_unverified" | "plan_unavailable" | "organization_domain_mismatch" | "team_not_in_organization" | "organization_has_no_idp" | "organization_not_found" | "invalid_user" | "not_an_organization_admin" | "last_organization_admin" | "team_id_unavailable" | "use_team_member_route" | "role_not_found" | "invalid_role" | "flow_not_found" | "revision_not_found" | "invalid_webhook_event" | "invalid_webhook_url" | "not_a_webhook" | "delivery_not_found" | "delivery_in_progress";
|
|
7391
7414
|
/** @description Every error response has this shape. Branch on `error_code`, never on `message`: the message is written for a person and may change. */
|
|
7392
7415
|
ErrorResponse: {
|
|
7393
7416
|
/** @description The HTTP status, repeated. */
|
|
@@ -19163,6 +19186,8 @@ export interface operations {
|
|
|
19163
19186
|
*/
|
|
19164
19187
|
verified_at: string | null;
|
|
19165
19188
|
}[];
|
|
19189
|
+
/** @description People of the verified domains reach the organization's teams only through its identity provider. Applied by the resource server with the `https://faable.com/org` and `https://faable.com/org_sso` access-token claims. */
|
|
19190
|
+
require_sso: boolean;
|
|
19166
19191
|
/** @description Whoever signs in with a verified email of one of the verified domains joins these teams. Empty = nobody joins by domain. */
|
|
19167
19192
|
auto_join: {
|
|
19168
19193
|
/** @description A team of this organization. */
|
|
@@ -19318,6 +19343,8 @@ export interface operations {
|
|
|
19318
19343
|
*/
|
|
19319
19344
|
verified_at: string | null;
|
|
19320
19345
|
}[];
|
|
19346
|
+
/** @description People of the verified domains reach the organization's teams only through its identity provider. Applied by the resource server with the `https://faable.com/org` and `https://faable.com/org_sso` access-token claims. */
|
|
19347
|
+
require_sso: boolean;
|
|
19321
19348
|
/** @description Whoever signs in with a verified email of one of the verified domains joins these teams. Empty = nobody joins by domain. */
|
|
19322
19349
|
auto_join: {
|
|
19323
19350
|
/** @description A team of this organization. */
|
|
@@ -19498,6 +19525,8 @@ export interface operations {
|
|
|
19498
19525
|
*/
|
|
19499
19526
|
verified_at: string | null;
|
|
19500
19527
|
}[];
|
|
19528
|
+
/** @description People of the verified domains reach the organization's teams only through its identity provider. Applied by the resource server with the `https://faable.com/org` and `https://faable.com/org_sso` access-token claims. */
|
|
19529
|
+
require_sso: boolean;
|
|
19501
19530
|
/** @description Whoever signs in with a verified email of one of the verified domains joins these teams. Empty = nobody joins by domain. */
|
|
19502
19531
|
auto_join: {
|
|
19503
19532
|
/** @description A team of this organization. */
|
|
@@ -19659,6 +19688,8 @@ export interface operations {
|
|
|
19659
19688
|
*/
|
|
19660
19689
|
verified_at: string | null;
|
|
19661
19690
|
}[];
|
|
19691
|
+
/** @description People of the verified domains reach the organization's teams only through its identity provider. Applied by the resource server with the `https://faable.com/org` and `https://faable.com/org_sso` access-token claims. */
|
|
19692
|
+
require_sso: boolean;
|
|
19662
19693
|
/** @description Whoever signs in with a verified email of one of the verified domains joins these teams. Empty = nobody joins by domain. */
|
|
19663
19694
|
auto_join: {
|
|
19664
19695
|
/** @description A team of this organization. */
|
|
@@ -19828,6 +19859,8 @@ export interface operations {
|
|
|
19828
19859
|
*/
|
|
19829
19860
|
verified_at: string | null;
|
|
19830
19861
|
}[];
|
|
19862
|
+
/** @description People of the verified domains reach the organization's teams only through its identity provider. Applied by the resource server with the `https://faable.com/org` and `https://faable.com/org_sso` access-token claims. */
|
|
19863
|
+
require_sso: boolean;
|
|
19831
19864
|
/** @description Whoever signs in with a verified email of one of the verified domains joins these teams. Empty = nobody joins by domain. */
|
|
19832
19865
|
auto_join: {
|
|
19833
19866
|
/** @description A team of this organization. */
|
|
@@ -19988,6 +20021,8 @@ export interface operations {
|
|
|
19988
20021
|
*/
|
|
19989
20022
|
verified_at: string | null;
|
|
19990
20023
|
}[];
|
|
20024
|
+
/** @description People of the verified domains reach the organization's teams only through its identity provider. Applied by the resource server with the `https://faable.com/org` and `https://faable.com/org_sso` access-token claims. */
|
|
20025
|
+
require_sso: boolean;
|
|
19991
20026
|
/** @description Whoever signs in with a verified email of one of the verified domains joins these teams. Empty = nobody joins by domain. */
|
|
19992
20027
|
auto_join: {
|
|
19993
20028
|
/** @description A team of this organization. */
|
|
@@ -20167,6 +20202,8 @@ export interface operations {
|
|
|
20167
20202
|
*/
|
|
20168
20203
|
verified_at: string | null;
|
|
20169
20204
|
}[];
|
|
20205
|
+
/** @description People of the verified domains reach the organization's teams only through its identity provider. Applied by the resource server with the `https://faable.com/org` and `https://faable.com/org_sso` access-token claims. */
|
|
20206
|
+
require_sso: boolean;
|
|
20170
20207
|
/** @description Whoever signs in with a verified email of one of the verified domains joins these teams. Empty = nobody joins by domain. */
|
|
20171
20208
|
auto_join: {
|
|
20172
20209
|
/** @description A team of this organization. */
|
|
@@ -20331,6 +20368,8 @@ export interface operations {
|
|
|
20331
20368
|
*/
|
|
20332
20369
|
verified_at: string | null;
|
|
20333
20370
|
}[];
|
|
20371
|
+
/** @description People of the verified domains reach the organization's teams only through its identity provider. Applied by the resource server with the `https://faable.com/org` and `https://faable.com/org_sso` access-token claims. */
|
|
20372
|
+
require_sso: boolean;
|
|
20334
20373
|
/** @description Whoever signs in with a verified email of one of the verified domains joins these teams. Empty = nobody joins by domain. */
|
|
20335
20374
|
auto_join: {
|
|
20336
20375
|
/** @description A team of this organization. */
|
|
@@ -20543,6 +20582,8 @@ export interface operations {
|
|
|
20543
20582
|
*/
|
|
20544
20583
|
verified_at: string | null;
|
|
20545
20584
|
}[];
|
|
20585
|
+
/** @description People of the verified domains reach the organization's teams only through its identity provider. Applied by the resource server with the `https://faable.com/org` and `https://faable.com/org_sso` access-token claims. */
|
|
20586
|
+
require_sso: boolean;
|
|
20546
20587
|
/** @description Whoever signs in with a verified email of one of the verified domains joins these teams. Empty = nobody joins by domain. */
|
|
20547
20588
|
auto_join: {
|
|
20548
20589
|
/** @description A team of this organization. */
|
|
@@ -20711,6 +20752,8 @@ export interface operations {
|
|
|
20711
20752
|
*/
|
|
20712
20753
|
verified_at: string | null;
|
|
20713
20754
|
}[];
|
|
20755
|
+
/** @description People of the verified domains reach the organization's teams only through its identity provider. Applied by the resource server with the `https://faable.com/org` and `https://faable.com/org_sso` access-token claims. */
|
|
20756
|
+
require_sso: boolean;
|
|
20714
20757
|
/** @description Whoever signs in with a verified email of one of the verified domains joins these teams. Empty = nobody joins by domain. */
|
|
20715
20758
|
auto_join: {
|
|
20716
20759
|
/** @description A team of this organization. */
|
|
@@ -20852,6 +20895,197 @@ export interface operations {
|
|
|
20852
20895
|
};
|
|
20853
20896
|
};
|
|
20854
20897
|
};
|
|
20898
|
+
"organization/setRequireSso": {
|
|
20899
|
+
parameters: {
|
|
20900
|
+
query?: never;
|
|
20901
|
+
header?: never;
|
|
20902
|
+
path: {
|
|
20903
|
+
organization_id: string;
|
|
20904
|
+
};
|
|
20905
|
+
cookie?: never;
|
|
20906
|
+
};
|
|
20907
|
+
requestBody: {
|
|
20908
|
+
content: {
|
|
20909
|
+
"application/json": {
|
|
20910
|
+
require_sso: boolean;
|
|
20911
|
+
};
|
|
20912
|
+
};
|
|
20913
|
+
};
|
|
20914
|
+
responses: {
|
|
20915
|
+
/** @description Organization */
|
|
20916
|
+
200: {
|
|
20917
|
+
headers: {
|
|
20918
|
+
[name: string]: unknown;
|
|
20919
|
+
};
|
|
20920
|
+
content: {
|
|
20921
|
+
"application/json": {
|
|
20922
|
+
/** @description Organization ID */
|
|
20923
|
+
id: string;
|
|
20924
|
+
/**
|
|
20925
|
+
* @description Human-readable name of the organization.
|
|
20926
|
+
* @example Acme Inc.
|
|
20927
|
+
*/
|
|
20928
|
+
name: string;
|
|
20929
|
+
/**
|
|
20930
|
+
* @description URL-safe identifier derived from `name`. Unique within the tenant.
|
|
20931
|
+
* @example acme-inc
|
|
20932
|
+
*/
|
|
20933
|
+
slug: string;
|
|
20934
|
+
/** @description Optional free-form description. */
|
|
20935
|
+
description: string | null;
|
|
20936
|
+
/** @description Optional URL of the organization logo. */
|
|
20937
|
+
logo_url: string | null;
|
|
20938
|
+
/** @description Email domains the organization claims. Only a verified one counts: it is how the organization's people are recognized. */
|
|
20939
|
+
domains: {
|
|
20940
|
+
/** @example acme.com */
|
|
20941
|
+
domain: string;
|
|
20942
|
+
/** @description Put `faable-verification=<verification_token>` in a TXT record at `_faable-challenge.<domain>`, then call `POST /organization/{organization_id}/domain/{domain}/verify`. */
|
|
20943
|
+
verification_token: string;
|
|
20944
|
+
/**
|
|
20945
|
+
* Format: date-time
|
|
20946
|
+
* @description When the TXT record was found. `null` = not verified.
|
|
20947
|
+
*/
|
|
20948
|
+
verified_at: string | null;
|
|
20949
|
+
}[];
|
|
20950
|
+
/** @description People of the verified domains reach the organization's teams only through its identity provider. Applied by the resource server with the `https://faable.com/org` and `https://faable.com/org_sso` access-token claims. */
|
|
20951
|
+
require_sso: boolean;
|
|
20952
|
+
/** @description Whoever signs in with a verified email of one of the verified domains joins these teams. Empty = nobody joins by domain. */
|
|
20953
|
+
auto_join: {
|
|
20954
|
+
/** @description A team of this organization. */
|
|
20955
|
+
team: string;
|
|
20956
|
+
/** @description Role ids the member gets in that team. */
|
|
20957
|
+
roles: string[];
|
|
20958
|
+
}[];
|
|
20959
|
+
/** @description Ids of the users who manage the organization: its teams and its identity settings. Being an admin does not grant access to any team; team access is team membership. */
|
|
20960
|
+
admins: string[];
|
|
20961
|
+
/** @description Object is related with this account */
|
|
20962
|
+
account: string;
|
|
20963
|
+
/**
|
|
20964
|
+
* @description OrganizationMetadata
|
|
20965
|
+
* @default {}
|
|
20966
|
+
*/
|
|
20967
|
+
metadata: {
|
|
20968
|
+
[key: string]: unknown;
|
|
20969
|
+
};
|
|
20970
|
+
/** @description Organization creation date */
|
|
20971
|
+
createdAt: string;
|
|
20972
|
+
/** @description Organization updated date */
|
|
20973
|
+
updatedAt?: string;
|
|
20974
|
+
};
|
|
20975
|
+
};
|
|
20976
|
+
};
|
|
20977
|
+
/**
|
|
20978
|
+
* @description `organization_has_no_idp` — Requiring SSO needs an identity provider: bind an `oidc` connection to the organization first.
|
|
20979
|
+
*
|
|
20980
|
+
* `validation_error` — The body, query or path failed schema validation. `details.issues` lists each failing field.
|
|
20981
|
+
*/
|
|
20982
|
+
400: {
|
|
20983
|
+
headers: {
|
|
20984
|
+
[name: string]: unknown;
|
|
20985
|
+
};
|
|
20986
|
+
content: {
|
|
20987
|
+
"application/json": components["schemas"]["ErrorResponse"] & {
|
|
20988
|
+
/** @enum {string} */
|
|
20989
|
+
error_code?: "organization_has_no_idp" | "validation_error";
|
|
20990
|
+
};
|
|
20991
|
+
};
|
|
20992
|
+
};
|
|
20993
|
+
/** @description `unauthorized` — The request carries no valid credentials. */
|
|
20994
|
+
401: {
|
|
20995
|
+
headers: {
|
|
20996
|
+
[name: string]: unknown;
|
|
20997
|
+
};
|
|
20998
|
+
content: {
|
|
20999
|
+
"application/json": components["schemas"]["ErrorResponse"] & {
|
|
21000
|
+
/** @enum {string} */
|
|
21001
|
+
error_code?: "unauthorized";
|
|
21002
|
+
};
|
|
21003
|
+
};
|
|
21004
|
+
};
|
|
21005
|
+
/** @description `plan_required` — The setting requires a higher plan. `message` says which. */
|
|
21006
|
+
402: {
|
|
21007
|
+
headers: {
|
|
21008
|
+
[name: string]: unknown;
|
|
21009
|
+
};
|
|
21010
|
+
content: {
|
|
21011
|
+
"application/json": components["schemas"]["ErrorResponse"] & {
|
|
21012
|
+
/** @enum {string} */
|
|
21013
|
+
error_code?: "plan_required";
|
|
21014
|
+
};
|
|
21015
|
+
};
|
|
21016
|
+
};
|
|
21017
|
+
/**
|
|
21018
|
+
* @description `forbidden` — The credentials are valid but do not allow this operation.
|
|
21019
|
+
*
|
|
21020
|
+
* `insufficient_scope` — The token lacks a scope this operation requires. `message` names it.
|
|
21021
|
+
*
|
|
21022
|
+
* `user_suspended` — The user is suspended and cannot sign in or be modified.
|
|
21023
|
+
*/
|
|
21024
|
+
403: {
|
|
21025
|
+
headers: {
|
|
21026
|
+
[name: string]: unknown;
|
|
21027
|
+
};
|
|
21028
|
+
content: {
|
|
21029
|
+
"application/json": components["schemas"]["ErrorResponse"] & {
|
|
21030
|
+
/** @enum {string} */
|
|
21031
|
+
error_code?: "forbidden" | "insufficient_scope" | "user_suspended";
|
|
21032
|
+
};
|
|
21033
|
+
};
|
|
21034
|
+
};
|
|
21035
|
+
/**
|
|
21036
|
+
* @description `organization_not_found` — No organization with that id in this account.
|
|
21037
|
+
*
|
|
21038
|
+
* `account_not_found` — No Auth Account matches the request (domain, header or token).
|
|
21039
|
+
*/
|
|
21040
|
+
404: {
|
|
21041
|
+
headers: {
|
|
21042
|
+
[name: string]: unknown;
|
|
21043
|
+
};
|
|
21044
|
+
content: {
|
|
21045
|
+
"application/json": components["schemas"]["ErrorResponse"] & {
|
|
21046
|
+
/** @enum {string} */
|
|
21047
|
+
error_code?: "organization_not_found" | "account_not_found";
|
|
21048
|
+
};
|
|
21049
|
+
};
|
|
21050
|
+
};
|
|
21051
|
+
/** @description `too_many_requests` — Rate limit exceeded. Honour the `Retry-After` header. */
|
|
21052
|
+
429: {
|
|
21053
|
+
headers: {
|
|
21054
|
+
[name: string]: unknown;
|
|
21055
|
+
};
|
|
21056
|
+
content: {
|
|
21057
|
+
"application/json": components["schemas"]["ErrorResponse"] & {
|
|
21058
|
+
/** @enum {string} */
|
|
21059
|
+
error_code?: "too_many_requests";
|
|
21060
|
+
};
|
|
21061
|
+
};
|
|
21062
|
+
};
|
|
21063
|
+
/** @description `internal_error` — Unexpected server error. Retry later; the request id is logged. */
|
|
21064
|
+
500: {
|
|
21065
|
+
headers: {
|
|
21066
|
+
[name: string]: unknown;
|
|
21067
|
+
};
|
|
21068
|
+
content: {
|
|
21069
|
+
"application/json": components["schemas"]["ErrorResponse"] & {
|
|
21070
|
+
/** @enum {string} */
|
|
21071
|
+
error_code?: "internal_error";
|
|
21072
|
+
};
|
|
21073
|
+
};
|
|
21074
|
+
};
|
|
21075
|
+
/** @description `plan_unavailable` — The plan could not be checked right now, and this setting is only for paid plans. Try again in a minute. */
|
|
21076
|
+
503: {
|
|
21077
|
+
headers: {
|
|
21078
|
+
[name: string]: unknown;
|
|
21079
|
+
};
|
|
21080
|
+
content: {
|
|
21081
|
+
"application/json": components["schemas"]["ErrorResponse"] & {
|
|
21082
|
+
/** @enum {string} */
|
|
21083
|
+
error_code?: "plan_unavailable";
|
|
21084
|
+
};
|
|
21085
|
+
};
|
|
21086
|
+
};
|
|
21087
|
+
};
|
|
21088
|
+
};
|
|
20855
21089
|
"teammember/list": {
|
|
20856
21090
|
parameters: {
|
|
20857
21091
|
query?: {
|
package/dist/version.js
CHANGED
|
@@ -9,13 +9,13 @@
|
|
|
9
9
|
// login pages could not import the SDK at all. Same pattern as auth-js.
|
|
10
10
|
//
|
|
11
11
|
// The sentinels MUST stay byte-identical to the `from` values in `.releaserc`.
|
|
12
|
-
export const version = "2.7.
|
|
12
|
+
export const version = "2.7.85";
|
|
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 = "d0a239c";
|
|
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.68.0",
|
|
7
7
|
"license": {
|
|
8
8
|
"name": "private",
|
|
9
9
|
"url": "https://faable.com/docs/platform/privacy-policy"
|
|
@@ -3693,6 +3693,7 @@
|
|
|
3693
3693
|
"description",
|
|
3694
3694
|
"logo_url",
|
|
3695
3695
|
"domains",
|
|
3696
|
+
"require_sso",
|
|
3696
3697
|
"auto_join",
|
|
3697
3698
|
"admins",
|
|
3698
3699
|
"account",
|
|
@@ -3751,6 +3752,10 @@
|
|
|
3751
3752
|
},
|
|
3752
3753
|
"description": "Email domains the organization claims. Only a verified one counts: it is how the organization's people are recognized."
|
|
3753
3754
|
},
|
|
3755
|
+
"require_sso": {
|
|
3756
|
+
"type": "boolean",
|
|
3757
|
+
"description": "People of the verified domains reach the organization's teams only through its identity provider. Applied by the resource server with the `https://faable.com/org` and `https://faable.com/org_sso` access-token claims."
|
|
3758
|
+
},
|
|
3754
3759
|
"auto_join": {
|
|
3755
3760
|
"type": "array",
|
|
3756
3761
|
"items": {
|
|
@@ -7853,7 +7858,7 @@
|
|
|
7853
7858
|
},
|
|
7854
7859
|
"ErrorCode": {
|
|
7855
7860
|
"type": "string",
|
|
7856
|
-
"description": "Machine-readable error code. One HTTP status per code.\n\n- `bad_request` (400): The request is malformed. `message` says what is wrong.\n- `validation_error` (400): The body, query or path failed schema validation. `details.issues` lists each failing field.\n- `unauthorized` (401): The request carries no valid credentials.\n- `payment_required` (402): The feature is not included in the current plan.\n- `forbidden` (403): The credentials are valid but do not allow this operation.\n- `not_found` (404): The resource does not exist in this account.\n- `method_not_allowed` (405): The HTTP method is not supported on this path.\n- `conflict` (409): The request conflicts with the current state of the resource.\n- `payload_too_large` (413): The request body exceeds the size limit.\n- `unsupported_media_type` (415): The `Content-Type` is not accepted by this endpoint.\n- `unprocessable_entity` (422): The request is well-formed but cannot be processed.\n- `too_many_requests` (429): Rate limit exceeded. Honour the `Retry-After` header.\n- `internal_error` (500): Unexpected server error. Retry later; the request id is logged.\n- `already_exists` (400): A resource with the same unique field already exists (for a user, usually `email`). `details.fields` names the field.\n- `invalid_id` (400): The id in the path is not a valid id for this resource.\n- `account_not_found` (404): No Auth Account matches the request (domain, header or token).\n- `invalid_query` (400): The `?query=` FaableQL expression could not be parsed.\n- `search_not_supported` (400): This resource does not support `?search=`.\n- `invalid_expand` (400): An `?expand=` path is not allowed on this resource.\n- `access_denied` (401): The caller may not access this row (ownership or machine-to-machine restriction).\n- `insufficient_scope` (403): The token lacks a scope this operation requires. `message` names it.\n- `team_required` (400): An Auth Account must belong to a project (team).\n- `account_limit_reached` (409): The project already has the maximum number of Auth Accounts.\n- `invalid_project_id` (400): The project id is not of the form `project_<hex>` or `team_<hex>`.\n- `account_transfer_refused` (409): The Auth Account cannot be moved to that project. `details.blockers` lists why.\n- `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- `origin_not_allowed` (403): The request `Origin` is not in the client's Allowed Web Origins.\n- `audience_not_found` (403): The `audience` does not name an API registered in this account.\n- `system_resource` (403): The resource is managed by Faable and cannot be modified or deleted.\n- `invalid_request` (400): A required OAuth parameter is missing or two of them are incompatible. `message` says which.\n- `invalid_device_code` (400): The device or user code is invalid or expired.\n- `provider_error` (400): The upstream identity provider returned an error. The suffix is the provider’s own code, when it sent one: `provider_error:bad_refresh_token` (the user must re-authorize), `provider_error:incorrect_client_credentials` (our configuration, the user can do nothing). `details.provider_error_description` carries the provider’s sentence.\n- `identity_already_linked` (409): That external identity is already linked to another user.\n- `identity_link_denied` (409): That external identity cannot be linked to this user.\n- `identity_conflict` (409): The user already has a linked identity for this connection.\n- `identity_orphaned` (400): The identity pointed at a user that no longer exists; it was removed. Sign in again.\n- `no_provider_token` (400): The identity holds no provider access token.\n- `no_refresh_token` (400): The identity holds no provider refresh token, so it cannot be refreshed.\n- `action_unavailable` (401): The Action that paused this login is disabled or belongs elsewhere.\n- `login_flow_misconfigured` (500): The login flow of this account cannot run. `message` carries the node error.\n- `mfa_required` (403): The login needs a second factor that this flow cannot collect, or one is still pending on the session.\n- `step_up_required` (403): Confirm an existing factor before changing your factors.\n- `interaction_required` (403): An Action asked for a redirect on a non-interactive flow.\n- `passkey_login_disabled` (400): Sign in with a passkey is not enabled for this client.\n- `mfa_pending` (401): A second-factor challenge is pending; answer it before continuing.\n- `mfa_invalid_code` (401): The authenticator code did not verify.\n- `mfa_invalid_recovery_code` (401): The recovery code did not verify.\n- `too_many_attempts` (429): Too many wrong codes. Wait a few minutes and try again.\n- `too_many_login_attempts` (429): Too many failed sign-in attempts for this email or username from this network. Wait a few minutes and try again.\n- `totp_not_allowed` (401): This account does not accept authenticator apps.\n- `no_usable_factor` (400): The user has no confirmed second factor to challenge.\n- `factor_not_found` (400): No factor with that id belongs to this user.\n- `factor_already_confirmed` (400): The factor was already confirmed.\n- `invalid_factor` (400): The factor cannot be verified (no secret material).\n- `session_missing` (401): The session that started this login no longer exists.\n- `passkey_verification_failed` (400): The WebAuthn response could not be verified.\n- `no_passkey_enrolled` (400): The user has no passkey to sign in with.\n- `malformed_credential` (400): The WebAuthn credential is malformed.\n- `unknown_passkey` (401): The passkey is not enrolled for this user.\n- `invalid_passkey` (401): The passkey assertion did not verify.\n- `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- `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_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- `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.",
|
|
7861
|
+
"description": "Machine-readable error code. One HTTP status per code.\n\n- `bad_request` (400): The request is malformed. `message` says what is wrong.\n- `validation_error` (400): The body, query or path failed schema validation. `details.issues` lists each failing field.\n- `unauthorized` (401): The request carries no valid credentials.\n- `payment_required` (402): The feature is not included in the current plan.\n- `forbidden` (403): The credentials are valid but do not allow this operation.\n- `not_found` (404): The resource does not exist in this account.\n- `method_not_allowed` (405): The HTTP method is not supported on this path.\n- `conflict` (409): The request conflicts with the current state of the resource.\n- `payload_too_large` (413): The request body exceeds the size limit.\n- `unsupported_media_type` (415): The `Content-Type` is not accepted by this endpoint.\n- `unprocessable_entity` (422): The request is well-formed but cannot be processed.\n- `too_many_requests` (429): Rate limit exceeded. Honour the `Retry-After` header.\n- `internal_error` (500): Unexpected server error. Retry later; the request id is logged.\n- `already_exists` (400): A resource with the same unique field already exists (for a user, usually `email`). `details.fields` names the field.\n- `invalid_id` (400): The id in the path is not a valid id for this resource.\n- `account_not_found` (404): No Auth Account matches the request (domain, header or token).\n- `invalid_query` (400): The `?query=` FaableQL expression could not be parsed.\n- `search_not_supported` (400): This resource does not support `?search=`.\n- `invalid_expand` (400): An `?expand=` path is not allowed on this resource.\n- `access_denied` (401): The caller may not access this row (ownership or machine-to-machine restriction).\n- `insufficient_scope` (403): The token lacks a scope this operation requires. `message` names it.\n- `team_required` (400): An Auth Account must belong to a project (team).\n- `account_limit_reached` (409): The project already has the maximum number of Auth Accounts.\n- `invalid_project_id` (400): The project id is not of the form `project_<hex>` or `team_<hex>`.\n- `account_transfer_refused` (409): The Auth Account cannot be moved to that project. `details.blockers` lists why.\n- `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- `origin_not_allowed` (403): The request `Origin` is not in the client's Allowed Web Origins.\n- `audience_not_found` (403): The `audience` does not name an API registered in this account.\n- `system_resource` (403): The resource is managed by Faable and cannot be modified or deleted.\n- `invalid_request` (400): A required OAuth parameter is missing or two of them are incompatible. `message` says which.\n- `invalid_device_code` (400): The device or user code is invalid or expired.\n- `provider_error` (400): The upstream identity provider returned an error. The suffix is the provider’s own code, when it sent one: `provider_error:bad_refresh_token` (the user must re-authorize), `provider_error:incorrect_client_credentials` (our configuration, the user can do nothing). `details.provider_error_description` carries the provider’s sentence.\n- `identity_already_linked` (409): That external identity is already linked to another user.\n- `identity_link_denied` (409): That external identity cannot be linked to this user.\n- `identity_conflict` (409): The user already has a linked identity for this connection.\n- `identity_orphaned` (400): The identity pointed at a user that no longer exists; it was removed. Sign in again.\n- `no_provider_token` (400): The identity holds no provider access token.\n- `no_refresh_token` (400): The identity holds no provider refresh token, so it cannot be refreshed.\n- `action_unavailable` (401): The Action that paused this login is disabled or belongs elsewhere.\n- `login_flow_misconfigured` (500): The login flow of this account cannot run. `message` carries the node error.\n- `mfa_required` (403): The login needs a second factor that this flow cannot collect, or one is still pending on the session.\n- `step_up_required` (403): Confirm an existing factor before changing your factors.\n- `interaction_required` (403): An Action asked for a redirect on a non-interactive flow.\n- `passkey_login_disabled` (400): Sign in with a passkey is not enabled for this client.\n- `mfa_pending` (401): A second-factor challenge is pending; answer it before continuing.\n- `mfa_invalid_code` (401): The authenticator code did not verify.\n- `mfa_invalid_recovery_code` (401): The recovery code did not verify.\n- `too_many_attempts` (429): Too many wrong codes. Wait a few minutes and try again.\n- `too_many_login_attempts` (429): Too many failed sign-in attempts for this email or username from this network. Wait a few minutes and try again.\n- `totp_not_allowed` (401): This account does not accept authenticator apps.\n- `no_usable_factor` (400): The user has no confirmed second factor to challenge.\n- `factor_not_found` (400): No factor with that id belongs to this user.\n- `factor_already_confirmed` (400): The factor was already confirmed.\n- `invalid_factor` (400): The factor cannot be verified (no secret material).\n- `session_missing` (401): The session that started this login no longer exists.\n- `passkey_verification_failed` (400): The WebAuthn response could not be verified.\n- `no_passkey_enrolled` (400): The user has no passkey to sign in with.\n- `malformed_credential` (400): The WebAuthn credential is malformed.\n- `unknown_passkey` (401): The passkey is not enrolled for this user.\n- `invalid_passkey` (401): The passkey assertion did not verify.\n- `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- `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- `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.",
|
|
7857
7862
|
"enum": [
|
|
7858
7863
|
"bad_request",
|
|
7859
7864
|
"validation_error",
|
|
@@ -7982,6 +7987,7 @@
|
|
|
7982
7987
|
"plan_unavailable",
|
|
7983
7988
|
"organization_domain_mismatch",
|
|
7984
7989
|
"team_not_in_organization",
|
|
7990
|
+
"organization_has_no_idp",
|
|
7985
7991
|
"organization_not_found",
|
|
7986
7992
|
"invalid_user",
|
|
7987
7993
|
"not_an_organization_admin",
|
|
@@ -35930,6 +35936,7 @@
|
|
|
35930
35936
|
"description",
|
|
35931
35937
|
"logo_url",
|
|
35932
35938
|
"domains",
|
|
35939
|
+
"require_sso",
|
|
35933
35940
|
"auto_join",
|
|
35934
35941
|
"admins",
|
|
35935
35942
|
"account",
|
|
@@ -35988,6 +35995,10 @@
|
|
|
35988
35995
|
},
|
|
35989
35996
|
"description": "Email domains the organization claims. Only a verified one counts: it is how the organization's people are recognized."
|
|
35990
35997
|
},
|
|
35998
|
+
"require_sso": {
|
|
35999
|
+
"type": "boolean",
|
|
36000
|
+
"description": "People of the verified domains reach the organization's teams only through its identity provider. Applied by the resource server with the `https://faable.com/org` and `https://faable.com/org_sso` access-token claims."
|
|
36001
|
+
},
|
|
35991
36002
|
"auto_join": {
|
|
35992
36003
|
"type": "array",
|
|
35993
36004
|
"items": {
|
|
@@ -36237,6 +36248,7 @@
|
|
|
36237
36248
|
"description",
|
|
36238
36249
|
"logo_url",
|
|
36239
36250
|
"domains",
|
|
36251
|
+
"require_sso",
|
|
36240
36252
|
"auto_join",
|
|
36241
36253
|
"admins",
|
|
36242
36254
|
"account",
|
|
@@ -36295,6 +36307,10 @@
|
|
|
36295
36307
|
},
|
|
36296
36308
|
"description": "Email domains the organization claims. Only a verified one counts: it is how the organization's people are recognized."
|
|
36297
36309
|
},
|
|
36310
|
+
"require_sso": {
|
|
36311
|
+
"type": "boolean",
|
|
36312
|
+
"description": "People of the verified domains reach the organization's teams only through its identity provider. Applied by the resource server with the `https://faable.com/org` and `https://faable.com/org_sso` access-token claims."
|
|
36313
|
+
},
|
|
36298
36314
|
"auto_join": {
|
|
36299
36315
|
"type": "array",
|
|
36300
36316
|
"items": {
|
|
@@ -36579,6 +36595,7 @@
|
|
|
36579
36595
|
"description",
|
|
36580
36596
|
"logo_url",
|
|
36581
36597
|
"domains",
|
|
36598
|
+
"require_sso",
|
|
36582
36599
|
"auto_join",
|
|
36583
36600
|
"admins",
|
|
36584
36601
|
"account",
|
|
@@ -36637,6 +36654,10 @@
|
|
|
36637
36654
|
},
|
|
36638
36655
|
"description": "Email domains the organization claims. Only a verified one counts: it is how the organization's people are recognized."
|
|
36639
36656
|
},
|
|
36657
|
+
"require_sso": {
|
|
36658
|
+
"type": "boolean",
|
|
36659
|
+
"description": "People of the verified domains reach the organization's teams only through its identity provider. Applied by the resource server with the `https://faable.com/org` and `https://faable.com/org_sso` access-token claims."
|
|
36660
|
+
},
|
|
36640
36661
|
"auto_join": {
|
|
36641
36662
|
"type": "array",
|
|
36642
36663
|
"items": {
|
|
@@ -36886,6 +36907,7 @@
|
|
|
36886
36907
|
"description",
|
|
36887
36908
|
"logo_url",
|
|
36888
36909
|
"domains",
|
|
36910
|
+
"require_sso",
|
|
36889
36911
|
"auto_join",
|
|
36890
36912
|
"admins",
|
|
36891
36913
|
"account",
|
|
@@ -36944,6 +36966,10 @@
|
|
|
36944
36966
|
},
|
|
36945
36967
|
"description": "Email domains the organization claims. Only a verified one counts: it is how the organization's people are recognized."
|
|
36946
36968
|
},
|
|
36969
|
+
"require_sso": {
|
|
36970
|
+
"type": "boolean",
|
|
36971
|
+
"description": "People of the verified domains reach the organization's teams only through its identity provider. Applied by the resource server with the `https://faable.com/org` and `https://faable.com/org_sso` access-token claims."
|
|
36972
|
+
},
|
|
36947
36973
|
"auto_join": {
|
|
36948
36974
|
"type": "array",
|
|
36949
36975
|
"items": {
|
|
@@ -37215,6 +37241,7 @@
|
|
|
37215
37241
|
"description",
|
|
37216
37242
|
"logo_url",
|
|
37217
37243
|
"domains",
|
|
37244
|
+
"require_sso",
|
|
37218
37245
|
"auto_join",
|
|
37219
37246
|
"admins",
|
|
37220
37247
|
"account",
|
|
@@ -37273,6 +37300,10 @@
|
|
|
37273
37300
|
},
|
|
37274
37301
|
"description": "Email domains the organization claims. Only a verified one counts: it is how the organization's people are recognized."
|
|
37275
37302
|
},
|
|
37303
|
+
"require_sso": {
|
|
37304
|
+
"type": "boolean",
|
|
37305
|
+
"description": "People of the verified domains reach the organization's teams only through its identity provider. Applied by the resource server with the `https://faable.com/org` and `https://faable.com/org_sso` access-token claims."
|
|
37306
|
+
},
|
|
37276
37307
|
"auto_join": {
|
|
37277
37308
|
"type": "array",
|
|
37278
37309
|
"items": {
|
|
@@ -37531,6 +37562,7 @@
|
|
|
37531
37562
|
"description",
|
|
37532
37563
|
"logo_url",
|
|
37533
37564
|
"domains",
|
|
37565
|
+
"require_sso",
|
|
37534
37566
|
"auto_join",
|
|
37535
37567
|
"admins",
|
|
37536
37568
|
"account",
|
|
@@ -37589,6 +37621,10 @@
|
|
|
37589
37621
|
},
|
|
37590
37622
|
"description": "Email domains the organization claims. Only a verified one counts: it is how the organization's people are recognized."
|
|
37591
37623
|
},
|
|
37624
|
+
"require_sso": {
|
|
37625
|
+
"type": "boolean",
|
|
37626
|
+
"description": "People of the verified domains reach the organization's teams only through its identity provider. Applied by the resource server with the `https://faable.com/org` and `https://faable.com/org_sso` access-token claims."
|
|
37627
|
+
},
|
|
37592
37628
|
"auto_join": {
|
|
37593
37629
|
"type": "array",
|
|
37594
37630
|
"items": {
|
|
@@ -37885,6 +37921,7 @@
|
|
|
37885
37921
|
"description",
|
|
37886
37922
|
"logo_url",
|
|
37887
37923
|
"domains",
|
|
37924
|
+
"require_sso",
|
|
37888
37925
|
"auto_join",
|
|
37889
37926
|
"admins",
|
|
37890
37927
|
"account",
|
|
@@ -37943,6 +37980,10 @@
|
|
|
37943
37980
|
},
|
|
37944
37981
|
"description": "Email domains the organization claims. Only a verified one counts: it is how the organization's people are recognized."
|
|
37945
37982
|
},
|
|
37983
|
+
"require_sso": {
|
|
37984
|
+
"type": "boolean",
|
|
37985
|
+
"description": "People of the verified domains reach the organization's teams only through its identity provider. Applied by the resource server with the `https://faable.com/org` and `https://faable.com/org_sso` access-token claims."
|
|
37986
|
+
},
|
|
37946
37987
|
"auto_join": {
|
|
37947
37988
|
"type": "array",
|
|
37948
37989
|
"items": {
|
|
@@ -38209,6 +38250,7 @@
|
|
|
38209
38250
|
"description",
|
|
38210
38251
|
"logo_url",
|
|
38211
38252
|
"domains",
|
|
38253
|
+
"require_sso",
|
|
38212
38254
|
"auto_join",
|
|
38213
38255
|
"admins",
|
|
38214
38256
|
"account",
|
|
@@ -38267,6 +38309,10 @@
|
|
|
38267
38309
|
},
|
|
38268
38310
|
"description": "Email domains the organization claims. Only a verified one counts: it is how the organization's people are recognized."
|
|
38269
38311
|
},
|
|
38312
|
+
"require_sso": {
|
|
38313
|
+
"type": "boolean",
|
|
38314
|
+
"description": "People of the verified domains reach the organization's teams only through its identity provider. Applied by the resource server with the `https://faable.com/org` and `https://faable.com/org_sso` access-token claims."
|
|
38315
|
+
},
|
|
38270
38316
|
"auto_join": {
|
|
38271
38317
|
"type": "array",
|
|
38272
38318
|
"items": {
|
|
@@ -38646,6 +38692,7 @@
|
|
|
38646
38692
|
"description",
|
|
38647
38693
|
"logo_url",
|
|
38648
38694
|
"domains",
|
|
38695
|
+
"require_sso",
|
|
38649
38696
|
"auto_join",
|
|
38650
38697
|
"admins",
|
|
38651
38698
|
"account",
|
|
@@ -38704,6 +38751,10 @@
|
|
|
38704
38751
|
},
|
|
38705
38752
|
"description": "Email domains the organization claims. Only a verified one counts: it is how the organization's people are recognized."
|
|
38706
38753
|
},
|
|
38754
|
+
"require_sso": {
|
|
38755
|
+
"type": "boolean",
|
|
38756
|
+
"description": "People of the verified domains reach the organization's teams only through its identity provider. Applied by the resource server with the `https://faable.com/org` and `https://faable.com/org_sso` access-token claims."
|
|
38757
|
+
},
|
|
38707
38758
|
"auto_join": {
|
|
38708
38759
|
"type": "array",
|
|
38709
38760
|
"items": {
|
|
@@ -38995,6 +39046,7 @@
|
|
|
38995
39046
|
"description",
|
|
38996
39047
|
"logo_url",
|
|
38997
39048
|
"domains",
|
|
39049
|
+
"require_sso",
|
|
38998
39050
|
"auto_join",
|
|
38999
39051
|
"admins",
|
|
39000
39052
|
"account",
|
|
@@ -39053,6 +39105,10 @@
|
|
|
39053
39105
|
},
|
|
39054
39106
|
"description": "Email domains the organization claims. Only a verified one counts: it is how the organization's people are recognized."
|
|
39055
39107
|
},
|
|
39108
|
+
"require_sso": {
|
|
39109
|
+
"type": "boolean",
|
|
39110
|
+
"description": "People of the verified domains reach the organization's teams only through its identity provider. Applied by the resource server with the `https://faable.com/org` and `https://faable.com/org_sso` access-token claims."
|
|
39111
|
+
},
|
|
39056
39112
|
"auto_join": {
|
|
39057
39113
|
"type": "array",
|
|
39058
39114
|
"items": {
|
|
@@ -39318,6 +39374,388 @@
|
|
|
39318
39374
|
}
|
|
39319
39375
|
}
|
|
39320
39376
|
},
|
|
39377
|
+
"/organization/{organization_id}/require-sso": {
|
|
39378
|
+
"put": {
|
|
39379
|
+
"operationId": "organization/setRequireSso",
|
|
39380
|
+
"summary": "Require SSO for an Organization",
|
|
39381
|
+
"tags": [
|
|
39382
|
+
"organization"
|
|
39383
|
+
],
|
|
39384
|
+
"description": "On: people of the verified domains reach the organization's teams only through its identity provider. Access tokens carry `https://faable.com/org` (the organization of the user's verified email domain) and `https://faable.com/org_sso` (whether this session came through its identity provider); the resource server applies it. Needs a bound `oidc` connection and the Pro plan; turning it off is always allowed.",
|
|
39385
|
+
"requestBody": {
|
|
39386
|
+
"required": true,
|
|
39387
|
+
"content": {
|
|
39388
|
+
"application/json": {
|
|
39389
|
+
"schema": {
|
|
39390
|
+
"type": "object",
|
|
39391
|
+
"required": [
|
|
39392
|
+
"require_sso"
|
|
39393
|
+
],
|
|
39394
|
+
"properties": {
|
|
39395
|
+
"require_sso": {
|
|
39396
|
+
"type": "boolean"
|
|
39397
|
+
}
|
|
39398
|
+
},
|
|
39399
|
+
"additionalProperties": false
|
|
39400
|
+
}
|
|
39401
|
+
}
|
|
39402
|
+
}
|
|
39403
|
+
},
|
|
39404
|
+
"parameters": [
|
|
39405
|
+
{
|
|
39406
|
+
"schema": {
|
|
39407
|
+
"type": "string"
|
|
39408
|
+
},
|
|
39409
|
+
"in": "path",
|
|
39410
|
+
"name": "organization_id",
|
|
39411
|
+
"required": true
|
|
39412
|
+
}
|
|
39413
|
+
],
|
|
39414
|
+
"security": [
|
|
39415
|
+
{
|
|
39416
|
+
"bearerAuth": []
|
|
39417
|
+
}
|
|
39418
|
+
],
|
|
39419
|
+
"responses": {
|
|
39420
|
+
"200": {
|
|
39421
|
+
"description": "Organization",
|
|
39422
|
+
"content": {
|
|
39423
|
+
"application/json": {
|
|
39424
|
+
"schema": {
|
|
39425
|
+
"type": "object",
|
|
39426
|
+
"required": [
|
|
39427
|
+
"id",
|
|
39428
|
+
"name",
|
|
39429
|
+
"slug",
|
|
39430
|
+
"description",
|
|
39431
|
+
"logo_url",
|
|
39432
|
+
"domains",
|
|
39433
|
+
"require_sso",
|
|
39434
|
+
"auto_join",
|
|
39435
|
+
"admins",
|
|
39436
|
+
"account",
|
|
39437
|
+
"createdAt"
|
|
39438
|
+
],
|
|
39439
|
+
"properties": {
|
|
39440
|
+
"id": {
|
|
39441
|
+
"type": "string",
|
|
39442
|
+
"description": "Organization ID"
|
|
39443
|
+
},
|
|
39444
|
+
"name": {
|
|
39445
|
+
"type": "string",
|
|
39446
|
+
"description": "Human-readable name of the organization.",
|
|
39447
|
+
"example": "Acme Inc."
|
|
39448
|
+
},
|
|
39449
|
+
"slug": {
|
|
39450
|
+
"type": "string",
|
|
39451
|
+
"description": "URL-safe identifier derived from `name`. Unique within the tenant.",
|
|
39452
|
+
"example": "acme-inc"
|
|
39453
|
+
},
|
|
39454
|
+
"description": {
|
|
39455
|
+
"type": "string",
|
|
39456
|
+
"description": "Optional free-form description.",
|
|
39457
|
+
"nullable": true
|
|
39458
|
+
},
|
|
39459
|
+
"logo_url": {
|
|
39460
|
+
"type": "string",
|
|
39461
|
+
"description": "Optional URL of the organization logo.",
|
|
39462
|
+
"nullable": true
|
|
39463
|
+
},
|
|
39464
|
+
"domains": {
|
|
39465
|
+
"type": "array",
|
|
39466
|
+
"items": {
|
|
39467
|
+
"type": "object",
|
|
39468
|
+
"required": [
|
|
39469
|
+
"domain",
|
|
39470
|
+
"verification_token",
|
|
39471
|
+
"verified_at"
|
|
39472
|
+
],
|
|
39473
|
+
"properties": {
|
|
39474
|
+
"domain": {
|
|
39475
|
+
"type": "string",
|
|
39476
|
+
"example": "acme.com"
|
|
39477
|
+
},
|
|
39478
|
+
"verification_token": {
|
|
39479
|
+
"type": "string",
|
|
39480
|
+
"description": "Put `faable-verification=<verification_token>` in a TXT record at `_faable-challenge.<domain>`, then call `POST /organization/{organization_id}/domain/{domain}/verify`."
|
|
39481
|
+
},
|
|
39482
|
+
"verified_at": {
|
|
39483
|
+
"type": "string",
|
|
39484
|
+
"format": "date-time",
|
|
39485
|
+
"description": "When the TXT record was found. `null` = not verified.",
|
|
39486
|
+
"nullable": true
|
|
39487
|
+
}
|
|
39488
|
+
}
|
|
39489
|
+
},
|
|
39490
|
+
"description": "Email domains the organization claims. Only a verified one counts: it is how the organization's people are recognized."
|
|
39491
|
+
},
|
|
39492
|
+
"require_sso": {
|
|
39493
|
+
"type": "boolean",
|
|
39494
|
+
"description": "People of the verified domains reach the organization's teams only through its identity provider. Applied by the resource server with the `https://faable.com/org` and `https://faable.com/org_sso` access-token claims."
|
|
39495
|
+
},
|
|
39496
|
+
"auto_join": {
|
|
39497
|
+
"type": "array",
|
|
39498
|
+
"items": {
|
|
39499
|
+
"type": "object",
|
|
39500
|
+
"required": [
|
|
39501
|
+
"team",
|
|
39502
|
+
"roles"
|
|
39503
|
+
],
|
|
39504
|
+
"properties": {
|
|
39505
|
+
"team": {
|
|
39506
|
+
"type": "string",
|
|
39507
|
+
"description": "A team of this organization."
|
|
39508
|
+
},
|
|
39509
|
+
"roles": {
|
|
39510
|
+
"type": "array",
|
|
39511
|
+
"items": {
|
|
39512
|
+
"type": "string"
|
|
39513
|
+
},
|
|
39514
|
+
"description": "Role ids the member gets in that team."
|
|
39515
|
+
}
|
|
39516
|
+
}
|
|
39517
|
+
},
|
|
39518
|
+
"description": "Whoever signs in with a verified email of one of the verified domains joins these teams. Empty = nobody joins by domain."
|
|
39519
|
+
},
|
|
39520
|
+
"admins": {
|
|
39521
|
+
"type": "array",
|
|
39522
|
+
"items": {
|
|
39523
|
+
"type": "string"
|
|
39524
|
+
},
|
|
39525
|
+
"description": "Ids of the users who manage the organization: its teams and its identity settings. Being an admin does not grant access to any team; team access is team membership."
|
|
39526
|
+
},
|
|
39527
|
+
"account": {
|
|
39528
|
+
"type": "string",
|
|
39529
|
+
"description": "Object is related with this account"
|
|
39530
|
+
},
|
|
39531
|
+
"metadata": {
|
|
39532
|
+
"type": "object",
|
|
39533
|
+
"properties": {},
|
|
39534
|
+
"additionalProperties": true,
|
|
39535
|
+
"description": "OrganizationMetadata",
|
|
39536
|
+
"default": {}
|
|
39537
|
+
},
|
|
39538
|
+
"createdAt": {
|
|
39539
|
+
"type": "string",
|
|
39540
|
+
"description": "Organization creation date"
|
|
39541
|
+
},
|
|
39542
|
+
"updatedAt": {
|
|
39543
|
+
"type": "string",
|
|
39544
|
+
"description": "Organization updated date"
|
|
39545
|
+
}
|
|
39546
|
+
},
|
|
39547
|
+
"description": "Organization"
|
|
39548
|
+
}
|
|
39549
|
+
}
|
|
39550
|
+
}
|
|
39551
|
+
},
|
|
39552
|
+
"400": {
|
|
39553
|
+
"description": "`organization_has_no_idp` — Requiring SSO needs an identity provider: bind an `oidc` connection to the organization first.\n\n`validation_error` — The body, query or path failed schema validation. `details.issues` lists each failing field.",
|
|
39554
|
+
"content": {
|
|
39555
|
+
"application/json": {
|
|
39556
|
+
"schema": {
|
|
39557
|
+
"allOf": [
|
|
39558
|
+
{
|
|
39559
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
39560
|
+
},
|
|
39561
|
+
{
|
|
39562
|
+
"type": "object",
|
|
39563
|
+
"properties": {
|
|
39564
|
+
"error_code": {
|
|
39565
|
+
"type": "string",
|
|
39566
|
+
"enum": [
|
|
39567
|
+
"organization_has_no_idp",
|
|
39568
|
+
"validation_error"
|
|
39569
|
+
]
|
|
39570
|
+
}
|
|
39571
|
+
}
|
|
39572
|
+
}
|
|
39573
|
+
]
|
|
39574
|
+
}
|
|
39575
|
+
}
|
|
39576
|
+
}
|
|
39577
|
+
},
|
|
39578
|
+
"401": {
|
|
39579
|
+
"description": "`unauthorized` — The request carries no valid credentials.",
|
|
39580
|
+
"content": {
|
|
39581
|
+
"application/json": {
|
|
39582
|
+
"schema": {
|
|
39583
|
+
"allOf": [
|
|
39584
|
+
{
|
|
39585
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
39586
|
+
},
|
|
39587
|
+
{
|
|
39588
|
+
"type": "object",
|
|
39589
|
+
"properties": {
|
|
39590
|
+
"error_code": {
|
|
39591
|
+
"type": "string",
|
|
39592
|
+
"enum": [
|
|
39593
|
+
"unauthorized"
|
|
39594
|
+
]
|
|
39595
|
+
}
|
|
39596
|
+
}
|
|
39597
|
+
}
|
|
39598
|
+
]
|
|
39599
|
+
}
|
|
39600
|
+
}
|
|
39601
|
+
}
|
|
39602
|
+
},
|
|
39603
|
+
"402": {
|
|
39604
|
+
"description": "`plan_required` — The setting requires a higher plan. `message` says which.",
|
|
39605
|
+
"content": {
|
|
39606
|
+
"application/json": {
|
|
39607
|
+
"schema": {
|
|
39608
|
+
"allOf": [
|
|
39609
|
+
{
|
|
39610
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
39611
|
+
},
|
|
39612
|
+
{
|
|
39613
|
+
"type": "object",
|
|
39614
|
+
"properties": {
|
|
39615
|
+
"error_code": {
|
|
39616
|
+
"type": "string",
|
|
39617
|
+
"enum": [
|
|
39618
|
+
"plan_required"
|
|
39619
|
+
]
|
|
39620
|
+
}
|
|
39621
|
+
}
|
|
39622
|
+
}
|
|
39623
|
+
]
|
|
39624
|
+
}
|
|
39625
|
+
}
|
|
39626
|
+
}
|
|
39627
|
+
},
|
|
39628
|
+
"403": {
|
|
39629
|
+
"description": "`forbidden` — The credentials are valid but do not allow this operation.\n\n`insufficient_scope` — The token lacks a scope this operation requires. `message` names it.\n\n`user_suspended` — The user is suspended and cannot sign in or be modified.",
|
|
39630
|
+
"content": {
|
|
39631
|
+
"application/json": {
|
|
39632
|
+
"schema": {
|
|
39633
|
+
"allOf": [
|
|
39634
|
+
{
|
|
39635
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
39636
|
+
},
|
|
39637
|
+
{
|
|
39638
|
+
"type": "object",
|
|
39639
|
+
"properties": {
|
|
39640
|
+
"error_code": {
|
|
39641
|
+
"type": "string",
|
|
39642
|
+
"enum": [
|
|
39643
|
+
"forbidden",
|
|
39644
|
+
"insufficient_scope",
|
|
39645
|
+
"user_suspended"
|
|
39646
|
+
]
|
|
39647
|
+
}
|
|
39648
|
+
}
|
|
39649
|
+
}
|
|
39650
|
+
]
|
|
39651
|
+
}
|
|
39652
|
+
}
|
|
39653
|
+
}
|
|
39654
|
+
},
|
|
39655
|
+
"404": {
|
|
39656
|
+
"description": "`organization_not_found` — No organization with that id in this account.\n\n`account_not_found` — No Auth Account matches the request (domain, header or token).",
|
|
39657
|
+
"content": {
|
|
39658
|
+
"application/json": {
|
|
39659
|
+
"schema": {
|
|
39660
|
+
"allOf": [
|
|
39661
|
+
{
|
|
39662
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
39663
|
+
},
|
|
39664
|
+
{
|
|
39665
|
+
"type": "object",
|
|
39666
|
+
"properties": {
|
|
39667
|
+
"error_code": {
|
|
39668
|
+
"type": "string",
|
|
39669
|
+
"enum": [
|
|
39670
|
+
"organization_not_found",
|
|
39671
|
+
"account_not_found"
|
|
39672
|
+
]
|
|
39673
|
+
}
|
|
39674
|
+
}
|
|
39675
|
+
}
|
|
39676
|
+
]
|
|
39677
|
+
}
|
|
39678
|
+
}
|
|
39679
|
+
}
|
|
39680
|
+
},
|
|
39681
|
+
"429": {
|
|
39682
|
+
"description": "`too_many_requests` — Rate limit exceeded. Honour the `Retry-After` header.",
|
|
39683
|
+
"content": {
|
|
39684
|
+
"application/json": {
|
|
39685
|
+
"schema": {
|
|
39686
|
+
"allOf": [
|
|
39687
|
+
{
|
|
39688
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
39689
|
+
},
|
|
39690
|
+
{
|
|
39691
|
+
"type": "object",
|
|
39692
|
+
"properties": {
|
|
39693
|
+
"error_code": {
|
|
39694
|
+
"type": "string",
|
|
39695
|
+
"enum": [
|
|
39696
|
+
"too_many_requests"
|
|
39697
|
+
]
|
|
39698
|
+
}
|
|
39699
|
+
}
|
|
39700
|
+
}
|
|
39701
|
+
]
|
|
39702
|
+
}
|
|
39703
|
+
}
|
|
39704
|
+
}
|
|
39705
|
+
},
|
|
39706
|
+
"500": {
|
|
39707
|
+
"description": "`internal_error` — Unexpected server error. Retry later; the request id is logged.",
|
|
39708
|
+
"content": {
|
|
39709
|
+
"application/json": {
|
|
39710
|
+
"schema": {
|
|
39711
|
+
"allOf": [
|
|
39712
|
+
{
|
|
39713
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
39714
|
+
},
|
|
39715
|
+
{
|
|
39716
|
+
"type": "object",
|
|
39717
|
+
"properties": {
|
|
39718
|
+
"error_code": {
|
|
39719
|
+
"type": "string",
|
|
39720
|
+
"enum": [
|
|
39721
|
+
"internal_error"
|
|
39722
|
+
]
|
|
39723
|
+
}
|
|
39724
|
+
}
|
|
39725
|
+
}
|
|
39726
|
+
]
|
|
39727
|
+
}
|
|
39728
|
+
}
|
|
39729
|
+
}
|
|
39730
|
+
},
|
|
39731
|
+
"503": {
|
|
39732
|
+
"description": "`plan_unavailable` — The plan could not be checked right now, and this setting is only for paid plans. Try again in a minute.",
|
|
39733
|
+
"content": {
|
|
39734
|
+
"application/json": {
|
|
39735
|
+
"schema": {
|
|
39736
|
+
"allOf": [
|
|
39737
|
+
{
|
|
39738
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
39739
|
+
},
|
|
39740
|
+
{
|
|
39741
|
+
"type": "object",
|
|
39742
|
+
"properties": {
|
|
39743
|
+
"error_code": {
|
|
39744
|
+
"type": "string",
|
|
39745
|
+
"enum": [
|
|
39746
|
+
"plan_unavailable"
|
|
39747
|
+
]
|
|
39748
|
+
}
|
|
39749
|
+
}
|
|
39750
|
+
}
|
|
39751
|
+
]
|
|
39752
|
+
}
|
|
39753
|
+
}
|
|
39754
|
+
}
|
|
39755
|
+
}
|
|
39756
|
+
}
|
|
39757
|
+
}
|
|
39758
|
+
},
|
|
39321
39759
|
"/teammember": {
|
|
39322
39760
|
"get": {
|
|
39323
39761
|
"operationId": "teammember/list",
|