@faable/auth-sdk 2.7.75 → 2.7.77

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.
@@ -1383,7 +1383,7 @@ export interface paths {
1383
1383
  put?: never;
1384
1384
  /**
1385
1385
  * Accept a team invite for a signed-in user
1386
- * @description Accepts the invite whose secret is `token` on behalf of `user_id`, an existing user of this tenant. The user's email must be verified and equal to the invited one (`invite_email_mismatch` otherwise, with the invited address masked in `details`). Never creates a user. Use it from the page you gave as the invite's `accept_url`.
1386
+ * @description Accepts the invite — by the `token` of its link, or by `invite_id` — on behalf of `user_id`, an existing user of this tenant. The user's email must be verified and equal to the invited one (`invite_email_mismatch` otherwise, with the invited address masked in `details`). Never creates a user. Use `token` from the page you gave as the invite's `accept_url`, and `invite_id` from a pending-invitation notice in your app.
1387
1387
  */
1388
1388
  post: operations["team/acceptInvite"];
1389
1389
  delete?: never;
@@ -1392,6 +1392,46 @@ export interface paths {
1392
1392
  patch?: never;
1393
1393
  trace?: never;
1394
1394
  };
1395
+ "/user/{user_id}/team-invites": {
1396
+ parameters: {
1397
+ query?: never;
1398
+ header?: never;
1399
+ path?: never;
1400
+ cookie?: never;
1401
+ };
1402
+ /**
1403
+ * List a user's pending team invites
1404
+ * @description Pending (not accepted, revoked, declined or expired) invites to any team of this tenant addressed to the user's email. Only when that email is verified; otherwise `email_verified: false` and an empty list.
1405
+ */
1406
+ get: operations["team/listInvitesForUser"];
1407
+ put?: never;
1408
+ post?: never;
1409
+ delete?: never;
1410
+ options?: never;
1411
+ head?: never;
1412
+ patch?: never;
1413
+ trace?: never;
1414
+ };
1415
+ "/team/invite/decline": {
1416
+ parameters: {
1417
+ query?: never;
1418
+ header?: never;
1419
+ path?: never;
1420
+ cookie?: never;
1421
+ };
1422
+ get?: never;
1423
+ put?: never;
1424
+ /**
1425
+ * Decline a team invite for a signed-in user
1426
+ * @description The invited user says no: the invite is spent (its link stops working) and `team.invite.revoked` is emitted with reason `declined`. Same checks as accepting.
1427
+ */
1428
+ post: operations["team/declineInvite"];
1429
+ delete?: never;
1430
+ options?: never;
1431
+ head?: never;
1432
+ patch?: never;
1433
+ trace?: never;
1434
+ };
1395
1435
  "/api": {
1396
1436
  parameters: {
1397
1437
  query?: never;
@@ -4557,7 +4597,7 @@ export interface paths {
4557
4597
  put?: never;
4558
4598
  /**
4559
4599
  * Self-service signup
4560
- * @description Creates a new user and database credential (email + password) in a single call against the tenant database connection. Public and account-scoped (no management token). Gated per-connection by `disable_signup`. The user is created with `email_verified: false`; the account notification settings (`verify_email_auto_send`, `welcome_email_enabled`) drive any follow-up emails. Does not establish a session — the client logs in afterwards.
4600
+ * @description Creates a new user and database credential in a single call against the tenant database connection. The identifier follows the connection `login_identifier` (email, username, or either); the password is optional, and a user created without one sets it through the password reset email. Public and account-scoped (no management token). Gated per-connection by `disable_signup`. The user is created with `email_verified: false`; the account notification settings (`verify_email_auto_send`, `welcome_email_enabled`) drive any follow-up emails. Does not establish a session — the client logs in afterwards.
4561
4601
  */
4562
4602
  post: operations["signup"];
4563
4603
  delete?: never;
@@ -6910,6 +6950,8 @@ export interface components {
6910
6950
  * - `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.
6911
6951
  * - `signup_disabled` (403): Self-service sign-up is disabled on this connection.
6912
6952
  * - `email_taken` (409): Another user in this account already uses that email.
6953
+ * - `username_taken` (409): Another user of this database connection already uses that username.
6954
+ * - `invalid_username` (400): The username is empty, or contains an `@` or whitespace. `message` says which.
6913
6955
  * - `invalid_email` (400): The email address is not valid.
6914
6956
  * - `invalid_name` (400): The name contains a link. `message` says which field.
6915
6957
  * - `same_email` (400): The new email is the same as the current one.
@@ -6998,7 +7040,7 @@ export interface components {
6998
7040
  * - `delivery_in_progress` (409): The delivery is being attempted right now; retry the redeliver in a minute.
6999
7041
  * @enum {string}
7000
7042
  */
7001
- 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" | "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" | "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";
7043
+ 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" | "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";
7002
7044
  /** @description Every error response has this shape. Branch on `error_code`, never on `message`: the message is written for a person and may change. */
7003
7045
  ErrorResponse: {
7004
7046
  /** @description The HTTP status, repeated. */
@@ -19178,6 +19220,8 @@ export interface operations {
19178
19220
  * ]
19179
19221
  */
19180
19222
  roles: string[];
19223
+ /** @description The person making the change, when your backend calls on their behalf with a machine token: it is who the tenant's log names. Must be a user of this tenant. */
19224
+ actor_user_id?: string;
19181
19225
  };
19182
19226
  };
19183
19227
  };
@@ -19305,7 +19349,10 @@ export interface operations {
19305
19349
  };
19306
19350
  "team/removeMember": {
19307
19351
  parameters: {
19308
- query?: never;
19352
+ query?: {
19353
+ /** @description The person removing (or leaving), when your backend calls on their behalf with a machine token: it is who the tenant's log names. Must be a user of this tenant. */
19354
+ actor_user_id?: string;
19355
+ };
19309
19356
  header?: never;
19310
19357
  path: {
19311
19358
  team_id: string;
@@ -19912,8 +19959,10 @@ export interface operations {
19912
19959
  requestBody: {
19913
19960
  content: {
19914
19961
  "application/json": {
19915
- /** @description The invite secret, as it arrived in the fragment of the `accept_url` link. */
19916
- token: string;
19962
+ /** @description The invite secret, as it arrived in the fragment of the `accept_url` link. Give this or `invite_id`. */
19963
+ token?: string;
19964
+ /** @description The invite id, for accepting from your app without the link (a "pending invitation" notice; see `GET /user/{user_id}/team-invites`). Give this or `token`. */
19965
+ invite_id?: string;
19917
19966
  /** @description The user accepting — the one signed in on your page. Must exist in this tenant and have the invited email, verified. */
19918
19967
  user_id: string;
19919
19968
  };
@@ -20031,6 +20080,267 @@ export interface operations {
20031
20080
  };
20032
20081
  };
20033
20082
  };
20083
+ "team/listInvitesForUser": {
20084
+ parameters: {
20085
+ query?: never;
20086
+ header?: never;
20087
+ path: {
20088
+ user_id: string;
20089
+ };
20090
+ cookie?: never;
20091
+ };
20092
+ requestBody?: never;
20093
+ responses: {
20094
+ /** @description Default Response */
20095
+ 200: {
20096
+ headers: {
20097
+ [name: string]: unknown;
20098
+ };
20099
+ content: {
20100
+ "application/json": {
20101
+ /** @description False when the user's email is not verified: nothing is listed then, since the address could be anybody's. */
20102
+ email_verified: boolean;
20103
+ data: {
20104
+ /** @description TeamInvite ID */
20105
+ id: string;
20106
+ /** @description Email address that was invited */
20107
+ email: string;
20108
+ /** @description Id of the team the invitee will be added to upon acceptance. */
20109
+ team: string;
20110
+ /** @description Id of the user that created the invitation, if known. */
20111
+ inviter?: string;
20112
+ /** @description Role ids that will be applied to the new TeamMember on acceptance. */
20113
+ roles: string[];
20114
+ /** @description `auto` adds the user directly if they already exist in the tenant and only falls back to a ticketed invite when the email is unknown. `invite` always issues a ticket + email regardless of whether the user exists. */
20115
+ mode: "auto" | "invite";
20116
+ /** @description URI to redirect the invitee to after a successful accept. */
20117
+ redirect_uri?: string;
20118
+ /** @description ISO 8601 timestamp at which the invite stops being valid. */
20119
+ expires_at: string;
20120
+ /** @description ISO 8601 timestamp at which the invite was accepted. Absent for pending invites. */
20121
+ consume_date?: string;
20122
+ /** @description Object is related with this account */
20123
+ account: string;
20124
+ /**
20125
+ * @description TeamInviteMetadata
20126
+ * @default {}
20127
+ */
20128
+ metadata: {
20129
+ [key: string]: unknown;
20130
+ };
20131
+ /** @description TeamInvite creation date */
20132
+ createdAt: string;
20133
+ /** @description TeamInvite updated date */
20134
+ updatedAt?: string;
20135
+ }[];
20136
+ };
20137
+ };
20138
+ };
20139
+ /** @description `validation_error` — The body, query or path failed schema validation. `details.issues` lists each failing field. */
20140
+ 400: {
20141
+ headers: {
20142
+ [name: string]: unknown;
20143
+ };
20144
+ content: {
20145
+ "application/json": components["schemas"]["ErrorResponse"] & {
20146
+ /** @enum {string} */
20147
+ error_code?: "validation_error";
20148
+ };
20149
+ };
20150
+ };
20151
+ /** @description `unauthorized` — The request carries no valid credentials. */
20152
+ 401: {
20153
+ headers: {
20154
+ [name: string]: unknown;
20155
+ };
20156
+ content: {
20157
+ "application/json": components["schemas"]["ErrorResponse"] & {
20158
+ /** @enum {string} */
20159
+ error_code?: "unauthorized";
20160
+ };
20161
+ };
20162
+ };
20163
+ /**
20164
+ * @description `forbidden` — The credentials are valid but do not allow this operation.
20165
+ *
20166
+ * `insufficient_scope` — The token lacks a scope this operation requires. `message` names it.
20167
+ *
20168
+ * `user_suspended` — The user is suspended and cannot sign in or be modified.
20169
+ */
20170
+ 403: {
20171
+ headers: {
20172
+ [name: string]: unknown;
20173
+ };
20174
+ content: {
20175
+ "application/json": components["schemas"]["ErrorResponse"] & {
20176
+ /** @enum {string} */
20177
+ error_code?: "forbidden" | "insufficient_scope" | "user_suspended";
20178
+ };
20179
+ };
20180
+ };
20181
+ /** @description `account_not_found` — No Auth Account matches the request (domain, header or token). */
20182
+ 404: {
20183
+ headers: {
20184
+ [name: string]: unknown;
20185
+ };
20186
+ content: {
20187
+ "application/json": components["schemas"]["ErrorResponse"] & {
20188
+ /** @enum {string} */
20189
+ error_code?: "account_not_found";
20190
+ };
20191
+ };
20192
+ };
20193
+ /** @description `too_many_requests` — Rate limit exceeded. Honour the `Retry-After` header. */
20194
+ 429: {
20195
+ headers: {
20196
+ [name: string]: unknown;
20197
+ };
20198
+ content: {
20199
+ "application/json": components["schemas"]["ErrorResponse"] & {
20200
+ /** @enum {string} */
20201
+ error_code?: "too_many_requests";
20202
+ };
20203
+ };
20204
+ };
20205
+ /** @description `internal_error` — Unexpected server error. Retry later; the request id is logged. */
20206
+ 500: {
20207
+ headers: {
20208
+ [name: string]: unknown;
20209
+ };
20210
+ content: {
20211
+ "application/json": components["schemas"]["ErrorResponse"] & {
20212
+ /** @enum {string} */
20213
+ error_code?: "internal_error";
20214
+ };
20215
+ };
20216
+ };
20217
+ };
20218
+ };
20219
+ "team/declineInvite": {
20220
+ parameters: {
20221
+ query?: never;
20222
+ header?: never;
20223
+ path?: never;
20224
+ cookie?: never;
20225
+ };
20226
+ requestBody: {
20227
+ content: {
20228
+ "application/json": {
20229
+ invite_id: string;
20230
+ /** @description The user declining — must have the invited email, verified. */
20231
+ user_id: string;
20232
+ };
20233
+ };
20234
+ };
20235
+ responses: {
20236
+ /** @description Default Response */
20237
+ 200: {
20238
+ headers: {
20239
+ [name: string]: unknown;
20240
+ };
20241
+ content: {
20242
+ "application/json": {
20243
+ /** @enum {string} */
20244
+ status: "declined";
20245
+ };
20246
+ };
20247
+ };
20248
+ /**
20249
+ * @description `invalid_ticket` — The ticket does not exist or is not the kind this endpoint accepts.
20250
+ *
20251
+ * `ticket_used` — The ticket was already consumed.
20252
+ *
20253
+ * `ticket_expired` — The ticket is past its expiry.
20254
+ *
20255
+ * `validation_error` — The body, query or path failed schema validation. `details.issues` lists each failing field.
20256
+ */
20257
+ 400: {
20258
+ headers: {
20259
+ [name: string]: unknown;
20260
+ };
20261
+ content: {
20262
+ "application/json": components["schemas"]["ErrorResponse"] & {
20263
+ /** @enum {string} */
20264
+ error_code?: "invalid_ticket" | "ticket_used" | "ticket_expired" | "validation_error";
20265
+ };
20266
+ };
20267
+ };
20268
+ /** @description `unauthorized` — The request carries no valid credentials. */
20269
+ 401: {
20270
+ headers: {
20271
+ [name: string]: unknown;
20272
+ };
20273
+ content: {
20274
+ "application/json": components["schemas"]["ErrorResponse"] & {
20275
+ /** @enum {string} */
20276
+ error_code?: "unauthorized";
20277
+ };
20278
+ };
20279
+ };
20280
+ /**
20281
+ * @description `invite_email_mismatch` — The invite is for another email address than the accepting user's. `details.invited_email` shows it masked.
20282
+ *
20283
+ * `invite_email_unverified` — The accepting user's email matches the invite but is not verified yet.
20284
+ *
20285
+ * `forbidden` — The credentials are valid but do not allow this operation.
20286
+ *
20287
+ * `insufficient_scope` — The token lacks a scope this operation requires. `message` names it.
20288
+ *
20289
+ * `user_suspended` — The user is suspended and cannot sign in or be modified.
20290
+ */
20291
+ 403: {
20292
+ headers: {
20293
+ [name: string]: unknown;
20294
+ };
20295
+ content: {
20296
+ "application/json": components["schemas"]["ErrorResponse"] & {
20297
+ /** @enum {string} */
20298
+ error_code?: "invite_email_mismatch" | "invite_email_unverified" | "forbidden" | "insufficient_scope" | "user_suspended";
20299
+ };
20300
+ };
20301
+ };
20302
+ /**
20303
+ * @description `not_found` — The resource does not exist in this account.
20304
+ *
20305
+ * `account_not_found` — No Auth Account matches the request (domain, header or token).
20306
+ */
20307
+ 404: {
20308
+ headers: {
20309
+ [name: string]: unknown;
20310
+ };
20311
+ content: {
20312
+ "application/json": components["schemas"]["ErrorResponse"] & {
20313
+ /** @enum {string} */
20314
+ error_code?: "not_found" | "account_not_found";
20315
+ };
20316
+ };
20317
+ };
20318
+ /** @description `too_many_requests` — Rate limit exceeded. Honour the `Retry-After` header. */
20319
+ 429: {
20320
+ headers: {
20321
+ [name: string]: unknown;
20322
+ };
20323
+ content: {
20324
+ "application/json": components["schemas"]["ErrorResponse"] & {
20325
+ /** @enum {string} */
20326
+ error_code?: "too_many_requests";
20327
+ };
20328
+ };
20329
+ };
20330
+ /** @description `internal_error` — Unexpected server error. Retry later; the request id is logged. */
20331
+ 500: {
20332
+ headers: {
20333
+ [name: string]: unknown;
20334
+ };
20335
+ content: {
20336
+ "application/json": components["schemas"]["ErrorResponse"] & {
20337
+ /** @enum {string} */
20338
+ error_code?: "internal_error";
20339
+ };
20340
+ };
20341
+ };
20342
+ };
20343
+ };
20034
20344
  "api/list": {
20035
20345
  parameters: {
20036
20346
  query?: {
@@ -30160,10 +30470,12 @@ export interface operations {
30160
30470
  requestBody: {
30161
30471
  content: {
30162
30472
  "application/json": {
30163
- /** @description Email login identifier. */
30164
- email: string;
30165
- /** @description Plaintext password (validated against the connection policy, hashed on write). */
30166
- password: string;
30473
+ /** @description Email login identifier. Required unless the connection signs in by username, and whenever `password` is omitted. */
30474
+ email?: string;
30475
+ /** @description Username login identifier, stored as typed (case-sensitive). Required on a connection whose `login_identifier` is `username`; rejected on an `email` one. No `@` or whitespace. */
30476
+ username?: string;
30477
+ /** @description Plaintext password (validated against the connection policy, hashed on write). Omit it to create the user without one: they set it through the password reset email. */
30478
+ password?: string;
30167
30479
  name?: string;
30168
30480
  given_name?: string;
30169
30481
  family_name?: string;
@@ -30184,7 +30496,11 @@ export interface operations {
30184
30496
  content?: never;
30185
30497
  };
30186
30498
  /**
30187
- * @description `invalid_connection` — The connection does not exist, is disabled, or is not of the type this flow needs.
30499
+ * @description `bad_request` — The request is malformed. `message` says what is wrong.
30500
+ *
30501
+ * `invalid_connection` — The connection does not exist, is disabled, or is not of the type this flow needs.
30502
+ *
30503
+ * `invalid_username` — The username is empty, or contains an `@` or whitespace. `message` says which.
30188
30504
  *
30189
30505
  * `password_too_weak` — The password does not meet the connection policy. `message` lists each unmet rule.
30190
30506
  *
@@ -30197,7 +30513,7 @@ export interface operations {
30197
30513
  content: {
30198
30514
  "application/json": components["schemas"]["ErrorResponse"] & {
30199
30515
  /** @enum {string} */
30200
- error_code?: "invalid_connection" | "password_too_weak" | "validation_error";
30516
+ error_code?: "bad_request" | "invalid_connection" | "invalid_username" | "password_too_weak" | "validation_error";
30201
30517
  };
30202
30518
  };
30203
30519
  };
@@ -30229,7 +30545,11 @@ export interface operations {
30229
30545
  };
30230
30546
  };
30231
30547
  };
30232
- /** @description `email_taken` — Another user in this account already uses that email. */
30548
+ /**
30549
+ * @description `email_taken` — Another user in this account already uses that email.
30550
+ *
30551
+ * `username_taken` — Another user of this database connection already uses that username.
30552
+ */
30233
30553
  409: {
30234
30554
  headers: {
30235
30555
  [name: string]: unknown;
@@ -30237,7 +30557,7 @@ export interface operations {
30237
30557
  content: {
30238
30558
  "application/json": components["schemas"]["ErrorResponse"] & {
30239
30559
  /** @enum {string} */
30240
- error_code?: "email_taken";
30560
+ error_code?: "email_taken" | "username_taken";
30241
30561
  };
30242
30562
  };
30243
30563
  };
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.75";
12
+ export const version = "2.7.77";
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 = "4ba33ed";
18
+ export const commit = "dacc281";
19
19
  // What this SDK writes in `x-faable-client`. Exported for a consumer that
20
20
  // builds a strategy on its own (outside `FaableAuthApi`) and still wants the
21
21
  // token request attributed — a bare `authClientCredentials` stamps only what
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@faable/auth-sdk",
3
- "version": "2.7.75",
3
+ "version": "2.7.77",
4
4
  "author": "Marc Pomar <marc@faable.com>",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",