@torrow/sdk-auth 0.7.0 → 0.9.0

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/README.md CHANGED
@@ -28,6 +28,22 @@ flowchart TD
28
28
 
29
29
  ## Целевой клиентский код
30
30
 
31
+ ### Приоритет способов подтверждения для телефона
32
+
33
+ Порядок `supportedMethods` имеет значение: передавайте поддерживаемые клиентом способы в порядке приоритета. Для телефона рекомендуется следующий порядок (для `loginWithOtp`, `createOtpFlow().start` и low-level `sendCode`):
34
+
35
+ ```ts
36
+ import { VerificationMethodValues } from "@torrow/sdk-client";
37
+
38
+ supportedMethods: [
39
+ VerificationMethodValues.TelegramGateway,
40
+ VerificationMethodValues.MtsMobileId,
41
+ VerificationMethodValues.Sms,
42
+ ],
43
+ ```
44
+
45
+ `preferredMethod` задаёт отдельное пожелание, а фактический способ сервер возвращает в `usedMethod`. Указывайте только способы, которые приложение умеет обрабатывать. Примеры, специально посвящённые Mobile ID, задают свой список; пример classic OTP без polling исключает `MtsMobileId` и сохраняет порядок `TelegramGateway`, `Sms`.
46
+
31
47
  ### Пошаговый OTP без пользовательской сессии
32
48
 
33
49
  `TorrowAuth.createOtpFlow` выполняет один `sendCode` на start и один `requestToken` на complete. Он не хранит challenge или токены, не требует TokenStorage/callbacks, не делает polling, refresh, retry или revoke. Для полного входа с callbacks и сохранением используйте `loginWithOtp`.
@@ -76,8 +92,8 @@ sequenceDiagram
76
92
  ```
77
93
 
78
94
  ```ts
79
- import { TorrowAuth, OtpFlowError, type OtpChallenge } from "@torrow/sdk-auth";
80
- import { TokenStatusValues } from "@torrow/sdk-client";
95
+ import { TorrowAuth, type OtpChallenge } from "@torrow/sdk-auth";
96
+ import { TokenStatusValues, TorrowSdkError } from "@torrow/sdk-client";
81
97
 
82
98
  const options = {
83
99
  deviceInfo: { deviceId: "my-app-device", deviceType: "Desktop" as const },
@@ -104,8 +120,9 @@ try {
104
120
  }
105
121
  }
106
122
  } catch (error) {
107
- if (error instanceof OtpFlowError) {
108
- // error.code — безопасная причина; error.cleanup?.refreshToken — секрет для cleanup.
123
+ if (error instanceof TorrowSdkError) {
124
+ // error.detail — безопасная предметная причина;
125
+ // error.getSensitiveDetails().cleanup?.refreshToken — секрет для cleanup.
109
126
  // Cleanup выполняет приложение с независимым AbortSignal.
110
127
  }
111
128
  throw error;
@@ -141,7 +158,7 @@ Challenge: `sessionId`, `accountType`, `usedMethod`, `phase`, `expiresAtMs` и
141
158
 
142
159
  Перед проверкой token-ответа нормализуются существующие aliases: AccessToken/access_token, RefreshToken/refresh_token, Expiration/expires_in, Status. Приоритет: имя OpenAPI → PascalCase → snake_case по первому значению, отличному от null/undefined. Flow требует явный известный status и непустой access token при TokenReady. Старые методы сохраняют ответы без status, только с refresh token и прежние callback-поля через внутреннюю legacy-адаптацию общей реализации.
143
160
 
144
- `OtpFlowError.code`: InvalidArguments, InvalidChallenge, InvalidResponse, UnsupportedMethod. Getter `error.cleanup` передаёт обнаруженный refresh даже при повреждённом ответе; он не включён в обычную сериализацию/диагностику ошибки. Валидные незавершённые/Failed ответы передают refresh через result.cleanup. HTTP-ошибки остаются TorrowHttpError, сеть и отмена пробрасываются. Потеря ответа не разрешает слепой повтор. Signal передаётся до fetch на обоих шагах; некорректный/просроченный challenge отклоняется до upstream.
161
+ `TorrowSdkError.category` достаточна для общей обработки. `detail` сохраняет домен `TorrowSdkErrorDomain.Otp` и необязательную дополнительную причину `OtpErrorReason.InvalidChallenge`, `UnsupportedMethod`, `AuthHeaderMissing` или `CodeRequestLimitExceeded`; generic InvalidInput/InvalidResponse не дублируются причинами. Метод `error.getSensitiveDetails().cleanup` передаёт обнаруженный refresh даже при повреждённом ответе; он не включён в обычную сериализацию/диагностику ошибки. Валидные незавершённые/Failed ответы передают refresh через result.cleanup. HTTP, сеть, отмена и предметные отказы используют общий TorrowSdkError. OTP start/complete не создают effects; status=Failed остаётся результатом. Потеря ответа не разрешает слепой повтор. Signal передаётся до fetch на обоих шагах; некорректный/просроченный challenge отклоняется до upstream.
145
162
 
146
163
  Примеры: auth-otp-flow.ts (JSON и новый flow), auth-otp-flow-mobile-id.ts (polling приложения и SMS fallback). Выпуск интеграционного ключа, подтверждение identity и cleanup выполняются приложением.
147
164
 
@@ -153,7 +170,7 @@ Challenge: `sessionId`, `accountType`, `usedMethod`, `phase`, `expiresAtMs` и
153
170
  ```ts
154
171
  import { TorrowAuth } from "@torrow/sdk-auth";
155
172
  import { FileTokenStorage } from "@torrow/sdk-auth/node";
156
- import { DeviceTypeValues } from "@torrow/sdk-client";
173
+ import { DeviceTypeValues, VerificationMethodValues } from "@torrow/sdk-client";
157
174
 
158
175
  const base = {
159
176
  // appCredentials опционален — иначе DEFAULT_APP_CREDENTIALS
@@ -168,6 +185,11 @@ if (session.status !== "authenticated") {
168
185
  ({ client, session } = await TorrowAuth.loginWithOtp({
169
186
  ...base,
170
187
  account: { accountType: "Phone", accountName: "+79001234567" },
188
+ supportedMethods: [
189
+ VerificationMethodValues.TelegramGateway,
190
+ VerificationMethodValues.MtsMobileId,
191
+ VerificationMethodValues.Sms,
192
+ ],
171
193
  onSendCode: (d) => showHint(d.usedMethod, d.codeLength),
172
194
  getCode: (ctx) => promptUser(ctx.codeLength),
173
195
  }));
@@ -185,13 +207,18 @@ appCredentials: { clientId: CLIENT_ID, clientSecret: CLIENT_SECRET },
185
207
  ### 2. Mobile ID / смена канала / rate-limit
186
208
 
187
209
  ```ts
188
- import { OtpCodeRequestLimitExceededError } from "@torrow/sdk-auth";
210
+ import { TorrowAuth } from "@torrow/sdk-auth";
211
+ import { TorrowSdkError, TorrowSdkErrorDomain, OtpErrorReason, VerificationMethodValues } from "@torrow/sdk-client";
189
212
 
190
213
  try {
191
214
  await TorrowAuth.loginWithOtp({
192
215
  ...base,
193
216
  account: { accountType: "Phone", accountName: phone },
194
- supportedMethods: ["MtsMobileId", "Sms"],
217
+ supportedMethods: [
218
+ VerificationMethodValues.TelegramGateway,
219
+ VerificationMethodValues.MtsMobileId,
220
+ VerificationMethodValues.Sms,
221
+ ],
195
222
  preferredMethod: userPickedMethod,
196
223
  onSendCode: (d) => {
197
224
  // MtsMobileId → UI «подтвердите push»; getCode не вызовется на happy-path
@@ -200,8 +227,8 @@ try {
200
227
  getCode: (ctx) => waitCodeInput(ctx),
201
228
  });
202
229
  } catch (e) {
203
- if (e instanceof OtpCodeRequestLimitExceededError) {
204
- showRetryTimer(e.minutes, e.seconds);
230
+ if (e instanceof TorrowSdkError && e.detail?.domain === TorrowSdkErrorDomain.Otp && e.detail.reason === OtpErrorReason.CodeRequestLimitExceeded) {
231
+ showRetryTimer(e.detail.retryAfterSeconds);
205
232
  } else {
206
233
  throw e;
207
234
  }
@@ -436,3 +463,20 @@ Host: non-JWT-shaped opaque **или** валидный JWT с `exp`.
436
463
  (см. **`examples/node/auth/auth-send-code.ts`**).
437
464
 
438
465
  **401-retry** вызывает только **refresh**, не OTP.
466
+
467
+
468
+ ## Ошибки пользовательской сессии
469
+
470
+ `TokenSession.open/getAccessToken/ensureFresh/requestTokenWithCode/refresh/applyTokenResp/clearTokens/logout` и `TorrowAuth.connect/fromTokens` сообщают отказ через `TorrowSdkError` из `@torrow/sdk-client`. `category` описывает причину, `detail` содержит домен `AuthSession` и optional reason только для `SessionNotReady` / `CallbackFailed`; generic и storage-причины удалены, этапы storage различает `failureAt`, `operation` и `failureAt` называют метод и локальную стадию без аргументов. `AuthSessionNotReadyError` удалён: ожидающую подтверждения сессию распознавайте через `detail.domain === TorrowSdkErrorDomain.AuthSession` и `detail.reason === AuthSessionErrorReason.SessionNotReady`. Штатный polling deep-link сохранён.
471
+
472
+ `effects` описывает только предметные изменения текущего вызова: Remote (`IssueTokens`, `RefreshTokens`, `RevokeTokens`), SessionMemory (`SetTokens`, `ClearTokens`, `CloseSession`), Storage (`SaveTokens`, `ClearStorage`). `Applied` подтверждает шаг, `Unknown` не разрешает слепой повтор. После успешного refresh и ошибки `storage.save` серверный refresh и новая память имеют `Applied`, сохранение — `Unknown`, причина — `StorageFailure`. Память не откатывается. У `fromTokens` подтверждение сохранённого seed сохраняется при ошибке последующего connect. При logout ошибка revoke подавляется; если позже падает storage, неизвестный результат revoke остаётся в effects, сессия остаётся закрытой и память очищенной.
473
+
474
+ `onRefreshFailure` получает `TorrowSdkError`. По умолчанию HTTP 429/502/503/504 и все не-HTTP причины (включая storage) выбирают `keep`; остальные HTTP отказы — `clear`. `keep` не выполняет дополнительную очистку, но не отменяет уже изменённую память. `ensureFresh/getAccessToken/connect` с политикой keep/clear сохраняют прежнее завершение без throw; явный refresh сообщает отказ. Callback `throw` делает ошибку наблюдаемой и при проактивном refresh. Storage-сбой при очистке сообщает собственную причину с выполненными шагами, а не ошибку сервера.
475
+
476
+ Обычный запрос клиента с 401-refresh не обещает полный аудит авторизации. Отсутствие effects означает отсутствие сведений, а не отсутствие изменений. Последняя сохранённая refresh-причина и параллельные вызовы не переносят историю независимых операций. Прямые `TokenStorage.load/save` сохраняют собственные исключения; штатные fallback хранилищ не меняются. Исходная причина/ответ доступны через `getSensitiveDetails()` и могут содержать секреты; обычные message/JSON/console безопасны.
477
+
478
+ ### Диагностика составного логина
479
+
480
+ `loginWithOtp` и `loginWithLink` сообщают `operation`, локальную `failureAt` и неизменяемые `effects` выбранных шагов текущего вызова: инициализация сессии, отправка кода (`SendCode`) либо создание продолжения ссылки (`CreateAuthSession`), выдача токенов, память и сохранение. Подтверждённый шаг сохраняет `Applied`, даже если следующий callback или storage завершается ошибкой. Возможные внутренние действия callback не перечисляются.
481
+
482
+ При ошибке сохранения после token-ответа серверная выдача и память могут быть `Applied`, а storage — `Unknown`. Отсутствие effects у обычной сетевой ошибки или пошагового flow не доказывает отсутствие изменений. Диагностика не разрешает слепой повтор; приложение принимает решение о восстановлении. Исходные body/URL/cause и cleanup доступны явно через `getSensitiveDetails()` и не предназначены для обычного логирования.
package/dist/index.d.ts CHANGED
@@ -1,6 +1,6 @@
1
- import { A as AppCredentials, T as TokenSessionOptions, a as TokenStorage, b as TokenSessionStatus, c as TokenSessionStatusListener, d as AuthTokenSnapshot } from './types-C4e90uOw.js';
2
- export { R as RefreshFailureAction } from './types-C4e90uOw.js';
3
- import { SendCodeAccountType, VerificationMethod, TorrowClient, DeviceInfo, TokenResp, AuthScope, AuthCaptchaType, AccountType, TokenStatusValues } from '@torrow/sdk-client';
1
+ import { A as AppCredentials, T as TokenSessionOptions, a as TokenStorage, b as TokenSessionStatus, c as TokenSessionStatusListener, d as AuthTokenSnapshot } from './types-M7DBG6bO.js';
2
+ export { R as RefreshFailureAction } from './types-M7DBG6bO.js';
3
+ import { SendCodeAccountType, VerificationMethod, TorrowSdkEffect, TorrowClient, DeviceInfo, TokenResp, AuthScope, AuthCaptchaType, AccountType, TokenStatusValues } from '@torrow/sdk-client';
4
4
 
5
5
  /** Defaults и преобразование credentials приложения в HTTP Basic. */
6
6
 
@@ -72,23 +72,6 @@ type OtpGetCodeContext = {
72
72
  /** Канал из `sendCode` (опциональная подсказка; экран уже из `onSendCode`). */
73
73
  usedMethod?: VerificationMethod;
74
74
  };
75
- /** Превышен лимит `sendCode` (`CODE_REQUEST_LIMIT_EXCEEDED`). */
76
- declare class OtpCodeRequestLimitExceededError extends Error {
77
- readonly name = "OtpCodeRequestLimitExceededError";
78
- readonly minutes?: string;
79
- readonly seconds?: string;
80
- readonly traceUrl?: string;
81
- readonly apiMessage?: string;
82
- readonly body: unknown;
83
- constructor(body: unknown);
84
- }
85
- /** Нет Basic на `/auth/token` (`AUTH_HEADER_MISSING`). */
86
- declare class OtpAuthHeaderMissingError extends Error {
87
- readonly name = "OtpAuthHeaderMissingError";
88
- readonly body: unknown;
89
- readonly systemMessage?: string;
90
- constructor(body: unknown);
91
- }
92
75
 
93
76
  /**
94
77
  * Ядро пользовательской сессии: persist + проактивный refresh + single-flight + 401-retry.
@@ -114,7 +97,18 @@ declare class TokenSession {
114
97
  /** Set in refreshWithFailurePolicy catch; not cleared on success (see public refresh). */
115
98
  private lastRefreshError;
116
99
  private constructor();
100
+ /** Открыть сессию; storage/refresh ошибки описывают только выполненную инициализацию. */
117
101
  static open(opts: TokenSessionOptions): Promise<TokenSession>;
102
+ /**
103
+ * @internal Инициализация с явными сведениями только текущего вызова для составного login.
104
+ * Не наблюдает fetch/storage и не хранит историю независимых операций.
105
+ */
106
+ static openWithEffects(opts: TokenSessionOptions): Promise<{
107
+ /** Открытая сессия с прежней семантикой open. */
108
+ session: TokenSession;
109
+ /** Неизменяемый снимок реально выполненных шагов инициализации. */
110
+ effects: readonly TorrowSdkEffect[];
111
+ }>;
118
112
  /** Persist, переданный в `TokenSession.open` / `TorrowAuth.*`. */
119
113
  get tokenStorage(): TokenStorage;
120
114
  get client(): TorrowClient;
@@ -126,6 +120,7 @@ declare class TokenSession {
126
120
  getTokenSnapshot(): AuthTokenSnapshot;
127
121
  /** `deviceInfo` из options open или fallback Desktop + deviceId из tokenSnapshot. */
128
122
  getDeviceInfo(): DeviceInfo;
123
+ /** Получить access после проактивного refresh; closed возвращает undefined без записи. */
129
124
  getAccessToken(): Promise<string | undefined>;
130
125
  /**
131
126
  * Сохранить ответ `requestToken` / `refresh` (только TokenReady).
@@ -135,6 +130,7 @@ declare class TokenSession {
135
130
  applyTokenResp(tokens: TokenResp, opts?: {
136
131
  replace?: boolean;
137
132
  }): Promise<void>;
133
+ /** Очистить память и сохранить snapshot; storage-сбой не отменяет очистку памяти. */
138
134
  clearTokens(): Promise<void>;
139
135
  /**
140
136
  * Revoke refresh (если есть) + очистка storage.
@@ -147,15 +143,19 @@ declare class TokenSession {
147
143
  *
148
144
  * Один вызов `POST /api/v1/auth/token` (`requestToken`) с `{ sessionId, code }`.
149
145
  * При успехе (`TokenReady`) — persist; если сессия ещё не готова —
150
- * {@link AuthSessionNotReadyError} (поллинг для deep-link — внутри `TorrowAuth.loginWithLink`).
146
+ * `TorrowSdkError` с причиной `SessionNotReady` (поллинг для deep-link — внутри `TorrowAuth.loginWithLink`).
151
147
  *
152
148
  * HTTP вне mutex; persist сериализован через {@link applyTokenResp} (не оборачивать
153
149
  * весь метод в `runExclusive` — вложенный mutex с публичным `applyTokenResp`).
154
150
  */
155
151
  requestTokenWithCode(args: {
152
+ /** Идентификатор ранее созданной серверной auth-сессии. */
156
153
  sessionId: string;
154
+ /** Одноразовый код доступа для выдачи токенов. */
157
155
  code: string;
156
+ /** Права токенов; при отсутствии используются DefaultAuthScopes. */
158
157
  scopes?: AuthScope[];
158
+ /** Отмена единственного серверного запроса выдачи. */
159
159
  signal?: AbortSignal;
160
160
  }): Promise<TokenResp>;
161
161
  /**
@@ -165,6 +165,7 @@ declare class TokenSession {
165
165
  * не используй return value; смотри `session.status` / `getTokenSnapshot()`.
166
166
  */
167
167
  refresh(): Promise<TokenResp>;
168
+ /** Обновить просроченный access; политика keep/clear сохраняет прежнее resolve-поведение. */
168
169
  ensureFresh(): Promise<void>;
169
170
  private assertNotClosedForWrite;
170
171
  /** Caller must hold `runExclusive`. Do not call public `applyTokenResp` from here. */
@@ -172,7 +173,7 @@ declare class TokenSession {
172
173
  private clearTokensUnlocked;
173
174
  /** Caller must hold `runExclusive`. `refreshWithFailurePolicy` skips when no refreshToken; guard here is intentional defense-in-depth. */
174
175
  private refreshUnlocked;
175
- /** Caller must hold `runExclusive`. */
176
+ /** Caller must hold `runExclusive`; сведения принадлежат только текущей операции. */
176
177
  private refreshWithFailurePolicy;
177
178
  private runExclusive;
178
179
  private ensureFreshImpl;
@@ -258,6 +259,7 @@ type TorrowAuthLoginWithOtpOptions = TorrowAuthSessionBase & {
258
259
  preferredMethod?: VerificationMethod;
259
260
  /**
260
261
  * Capability клиента → `SendCodeReq.supportedMethods`.
262
+ * Порядок задаёт приоритет: для телефона рекомендуется `TelegramGateway`, `MtsMobileId`, `Sms`.
261
263
  * Без `MtsMobileId` сервер обычно не выберет Mobile ID.
262
264
  */
263
265
  supportedMethods?: VerificationMethod[];
@@ -307,9 +309,11 @@ type TorrowAuthFromTokensOptions = TorrowAuthSessionBase & {
307
309
  declare const TorrowAuth: {
308
310
  /** Пошаговый OTP без storage, polling и refresh. */
309
311
  readonly createOtpFlow: typeof createOtpFlow;
312
+ /** Загрузить сессию; общий отказ сохраняет текущую диагностику open/refresh. */
310
313
  readonly connect: (options: TorrowAuthConnectOptions) => Promise<TorrowAuthResult>;
311
314
  readonly loginWithOtp: (options: TorrowAuthLoginWithOtpOptions) => Promise<TorrowAuthResult>;
312
315
  readonly loginWithLink: (options: TorrowAuthLoginWithLinkOptions) => Promise<TorrowAuthResult>;
316
+ /** Сохранить host tokens, затем connect; последующий отказ не отменяет Applied сохранение. */
313
317
  readonly fromTokens: (options: TorrowAuthFromTokensOptions) => Promise<TorrowAuthResult>;
314
318
  readonly anonymous: (config?: Pick<TokenSessionOptions, "baseUrl" | "fetch" | "defaultHeaders" | "userAgent">) => TorrowClient;
315
319
  };
@@ -358,7 +362,8 @@ type TorrowAuthOtpFlowOptions = Pick<TokenSessionOptions, "baseUrl" | "fetch" |
358
362
  * account задаёт Phone/Email и получателя; language — язык (default ru),
359
363
  * regionStorageId — регион (default 70), captcha/captchaType — ответ и провайдер captcha,
360
364
  * inviteSessionId — приглашение. preferredMethod — пожелание серверу,
361
- * supportedMethods — способы, которые приложение умеет обработать.
365
+ * supportedMethods — способы, которые приложение умеет обработать, в порядке приоритета.
366
+ * Для телефона рекомендуется TelegramGateway → MtsMobileId → Sms.
362
367
  * UI и получение captcha остаются в приложении.
363
368
  */
364
369
  type OtpStartInput = Pick<TorrowAuthLoginWithOtpOptions, "account" | "language" | "regionStorageId" | "captcha" | "captchaType" | "inviteSessionId" | "preferredMethod" | "supportedMethods">;
@@ -416,31 +421,6 @@ type OtpCleanupData = {
416
421
  /** Refresh-секрет для явного отзыва приложением; не предназначен для диагностики. */
417
422
  refreshToken: string;
418
423
  };
419
- /** Причины локального отказа; HTTP и отмена пробрасываются без преобразования. */
420
- declare enum OtpFlowErrorCodeValues {
421
- /** Некорректные опции, вход start или код для текущей фазы. */
422
- InvalidArguments = "InvalidArguments",
423
- /** Повреждённое, противоречивое или просроченное продолжение. */
424
- InvalidChallenge = "InvalidChallenge",
425
- /** Ответ не соответствует строгому контракту шага. */
426
- InvalidResponse = "InvalidResponse",
427
- /** Фактический способ подтверждения отсутствует или не поддерживается для аккаунта. */
428
- UnsupportedMethod = "UnsupportedMethod"
429
- }
430
- /** Строковое представление безопасной причины отказа. */
431
- type OtpFlowErrorCode = `${OtpFlowErrorCodeValues}`;
432
- /** Отказ с безопасной диагностикой и отдельно доступным секретом для cleanup. */
433
- declare class OtpFlowError extends Error {
434
- #private;
435
- /** Безопасная причина локального отказа, без исходного ответа и секретов. */
436
- readonly code: OtpFlowErrorCode;
437
- readonly name = "OtpFlowError";
438
- constructor(
439
- /** Безопасная причина локального отказа, без исходного ответа и секретов. */
440
- code: OtpFlowErrorCode, cleanup?: OtpCleanupData);
441
- /** Секрет доступен явно; не является перечисляемым полем исключения. */
442
- get cleanup(): OtpCleanupData | undefined;
443
- }
444
424
  /**
445
425
  * Результат одного шага: серверный статус отдельно от фазы challenge.
446
426
  * Pending — сервер ещё не завершил аутентификацию, следующий запрос без кода.
@@ -490,7 +470,7 @@ interface OtpFlow {
490
470
  * Challenge и токены остаются у приложения, без storage, polling и refresh внутри flow.
491
471
  * @param options Настройки HTTP, credentials приложения, устройства и выдачи токенов.
492
472
  * @returns Независимые шаги отправки кода и завершения/ожидания аутентификации.
493
- * @throws OtpFlowError При некорректных опциях устройства, scopes или splitTokens.
473
+ * @throws TorrowSdkError При некорректных опциях устройства, scopes или splitTokens.
494
474
  */
495
475
  declare function createOtpFlow(options: TorrowAuthOtpFlowOptions): OtpFlow;
496
476
 
@@ -533,11 +513,4 @@ declare class LocalStorageTokenStorage implements TokenStorage {
533
513
  save(snapshot: AuthTokenSnapshot): Promise<void>;
534
514
  }
535
515
 
536
- /** Сессия auth ещё не подтверждена (например Telegram до Start у бота). */
537
- declare class AuthSessionNotReadyError extends Error {
538
- readonly name = "AuthSessionNotReadyError";
539
- readonly cause?: unknown;
540
- constructor(message?: string, cause?: unknown);
541
- }
542
-
543
- export { AppCredentials, AuthSessionNotReadyError, AuthTokenSnapshot, DEFAULT_APP_CREDENTIALS, LocalStorageTokenStorage, MemoryTokenStorage, OtpAuthHeaderMissingError, type OtpChallenge, type OtpCleanupData, OtpCodeRequestLimitExceededError, type OtpCompleteInput, type OtpCompleteResult, type OtpFlow, OtpFlowError, type OtpFlowErrorCode, OtpFlowErrorCodeValues, type OtpGetCodeContext, type OtpPhase, OtpPhaseValues, type OtpRequestOptions, type OtpSendCodeResult, type OtpStartInput, TokenSession, TokenSessionOptions, TokenSessionStatus, TokenSessionStatusListener, TokenStorage, TorrowAuth, type TorrowAuthAccount, type TorrowAuthConnectOptions, type TorrowAuthFromTokensOptions, type TorrowAuthLoginWithLinkOptions, type TorrowAuthLoginWithOtpOptions, type TorrowAuthOtpFlowOptions, type TorrowAuthResult, type TorrowAuthSessionBase };
516
+ export { AppCredentials, AuthTokenSnapshot, DEFAULT_APP_CREDENTIALS, LocalStorageTokenStorage, MemoryTokenStorage, type OtpChallenge, type OtpCleanupData, type OtpCompleteInput, type OtpCompleteResult, type OtpFlow, type OtpGetCodeContext, type OtpPhase, OtpPhaseValues, type OtpRequestOptions, type OtpSendCodeResult, type OtpStartInput, TokenSession, TokenSessionOptions, TokenSessionStatus, TokenSessionStatusListener, TokenStorage, TorrowAuth, type TorrowAuthAccount, type TorrowAuthConnectOptions, type TorrowAuthFromTokensOptions, type TorrowAuthLoginWithLinkOptions, type TorrowAuthLoginWithOtpOptions, type TorrowAuthOtpFlowOptions, type TorrowAuthResult, type TorrowAuthSessionBase };