@accesly/core 1.5.0 → 1.7.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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/api/errors.ts","../../src/api/client.ts","../../src/api/endpoints.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Typed error hierarchy for the Accesly API client.\n *\n * Every error thrown by the API client is a subclass of `AccesslyApiError`,\n * so consumers can do:\n * try { ... } catch (e) {\n * if (e instanceof AuthError) return relogin();\n * if (e instanceof NetworkError) return retryLater();\n * throw e;\n * }\n */\n\nexport interface AccesslyApiErrorOptions {\n readonly status: number;\n readonly code?: string | undefined;\n readonly requestId?: string | undefined;\n readonly cause?: unknown;\n}\n\nexport class AccesslyApiError extends Error {\n readonly status: number;\n readonly code: string;\n readonly requestId: string | undefined;\n override readonly cause: unknown;\n\n constructor(message: string, opts: AccesslyApiErrorOptions) {\n super(message);\n this.name = 'AccesslyApiError';\n this.status = opts.status;\n this.code = opts.code ?? `HTTP_${opts.status}`;\n this.requestId = opts.requestId;\n this.cause = opts.cause;\n }\n}\n\n/** 401 / 403 — caller should re-authenticate (or check appId/permissions). */\nexport class AuthError extends AccesslyApiError {\n constructor(message: string, opts: AccesslyApiErrorOptions) {\n super(message, opts);\n this.name = 'AuthError';\n }\n}\n\n/** 400 / 422 — request body or query was malformed. */\nexport class ValidationError extends AccesslyApiError {\n constructor(message: string, opts: AccesslyApiErrorOptions) {\n super(message, opts);\n this.name = 'ValidationError';\n }\n}\n\n/** 404 — resource does not exist. */\nexport class NotFoundError extends AccesslyApiError {\n constructor(message: string, opts: AccesslyApiErrorOptions) {\n super(message, opts);\n this.name = 'NotFoundError';\n }\n}\n\n/** 429 — caller should back off. */\nexport class RateLimitError extends AccesslyApiError {\n readonly retryAfterSeconds: number | undefined;\n\n constructor(\n message: string,\n opts: AccesslyApiErrorOptions & { retryAfterSeconds?: number | undefined },\n ) {\n super(message, opts);\n this.name = 'RateLimitError';\n this.retryAfterSeconds = opts.retryAfterSeconds;\n }\n}\n\n/** 5xx — server-side problem, the client already exhausted its retries. */\nexport class ServerError extends AccesslyApiError {\n constructor(message: string, opts: AccesslyApiErrorOptions) {\n super(message, opts);\n this.name = 'ServerError';\n }\n}\n\n/** Fetch threw (DNS fail, TLS error, abort, etc.) or response was not parseable. */\nexport class NetworkError extends AccesslyApiError {\n constructor(message: string, opts: Omit<AccesslyApiErrorOptions, 'status'>) {\n super(message, { ...opts, status: 0 });\n this.name = 'NetworkError';\n }\n}\n\n/**\n * Maps an HTTP status code + body to the right error subclass.\n */\nexport function errorForResponse(\n status: number,\n body: unknown,\n requestId: string | undefined,\n): AccesslyApiError {\n const message = extractMessage(body) ?? `HTTP ${status}`;\n const opts: AccesslyApiErrorOptions = { status, code: extractCode(body), requestId };\n if (status === 401 || status === 403) return new AuthError(message, opts);\n if (status === 404) return new NotFoundError(message, opts);\n if (status === 429) {\n return new RateLimitError(message, {\n ...opts,\n retryAfterSeconds: extractRetryAfter(body),\n });\n }\n if (status >= 400 && status < 500) return new ValidationError(message, opts);\n if (status >= 500) return new ServerError(message, opts);\n return new AccesslyApiError(message, opts);\n}\n\nfunction extractMessage(body: unknown): string | undefined {\n if (body && typeof body === 'object') {\n const b = body as { message?: unknown; error?: unknown };\n if (typeof b.message === 'string') return b.message;\n if (typeof b.error === 'string') return b.error;\n }\n return undefined;\n}\n\nfunction extractCode(body: unknown): string | undefined {\n if (body && typeof body === 'object') {\n const b = body as { code?: unknown };\n if (typeof b.code === 'string') return b.code;\n }\n return undefined;\n}\n\nfunction extractRetryAfter(body: unknown): number | undefined {\n if (body && typeof body === 'object') {\n const b = body as { retryAfter?: unknown };\n if (typeof b.retryAfter === 'number' && b.retryAfter >= 0) return b.retryAfter;\n }\n return undefined;\n}\n","/**\n * Typed HTTP client for the Accesly backend.\n *\n * - Auto-injects `Authorization: <idToken>` (no `Bearer ` prefix — the backend\n * API Gateway REST v1 + Cognito Authorizer expects the raw JWT, see the\n * handoff doc gotcha).\n * - Retries idempotent requests on 5xx / network errors with exponential\n * backoff + jitter.\n * - Emits structured telemetry events the consumer can hook into.\n */\n\nimport { AccesslyApiError, NetworkError, errorForResponse } from './errors.js';\n\nexport type IdTokenProvider = () => string | null | Promise<string | null>;\n\nexport type TelemetryEvent =\n | { kind: 'request'; method: string; url: string; attempt: number }\n | {\n kind: 'response';\n method: string;\n url: string;\n status: number;\n durationMs: number;\n attempt: number;\n }\n | {\n kind: 'error';\n method: string;\n url: string;\n error: string;\n attempt: number;\n }\n | { kind: 'retry'; method: string; url: string; attempt: number; delayMs: number };\n\nexport type TelemetrySink = (event: TelemetryEvent) => void;\n\nexport interface AccesslyApiClientOptions {\n readonly baseUrl: string;\n /** Returns the current idToken, or null if the caller is anonymous. */\n readonly getIdToken?: IdTokenProvider;\n /** Override the global `fetch`. Tests only. */\n readonly fetchImpl?: typeof fetch;\n /** Max retries for idempotent requests on 5xx / network errors. Default 3. */\n readonly maxRetries?: number;\n /** Request timeout in ms. Default 30_000. */\n readonly timeoutMs?: number;\n /** Telemetry sink. Default no-op. */\n readonly telemetry?: TelemetrySink;\n /**\n * Override the backoff delay calculator (ms by attempt index, 1-based).\n * Tests only. Default: 500 * 2^(attempt-1) ± 20% jitter.\n */\n readonly backoffMs?: (attempt: number) => number;\n}\n\nexport type Json =\n | null\n | boolean\n | number\n | string\n | readonly Json[]\n | { readonly [k: string]: Json };\n\nexport interface RequestOptions {\n readonly headers?: Record<string, string>;\n readonly signal?: AbortSignal;\n readonly query?: Record<string, string | number | boolean | undefined>;\n /** If `false`, the request will NOT be retried. Default `true` for GET. */\n readonly retry?: boolean;\n}\n\n/** HTTP methods the client supports. */\ntype HttpMethod = 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH';\n\nconst IDEMPOTENT_METHODS: ReadonlySet<HttpMethod> = new Set(['GET']);\n\nexport class AccesslyApiClient {\n private readonly baseUrl: string;\n private readonly getIdToken: IdTokenProvider | undefined;\n private readonly fetchImpl: typeof fetch;\n private readonly maxRetries: number;\n private readonly timeoutMs: number;\n private readonly telemetry: TelemetrySink;\n private readonly backoffMs: (attempt: number) => number;\n\n constructor(opts: AccesslyApiClientOptions) {\n if (!opts.baseUrl) throw new TypeError('AccesslyApiClient: baseUrl is required');\n this.baseUrl = opts.baseUrl.replace(/\\/+$/, '');\n this.getIdToken = opts.getIdToken;\n // `?? fetch` keeps a reference even after globalThis.fetch is reassigned\n // in tests, so users get the fetch they had when constructing the client.\n this.fetchImpl = opts.fetchImpl ?? globalThis.fetch.bind(globalThis);\n this.maxRetries = opts.maxRetries ?? 3;\n this.timeoutMs = opts.timeoutMs ?? 30_000;\n this.telemetry = opts.telemetry ?? (() => undefined);\n this.backoffMs = opts.backoffMs ?? defaultBackoff;\n }\n\n get<T>(path: string, opts?: RequestOptions): Promise<T> {\n return this.request<T>('GET', path, undefined, opts);\n }\n\n post<T>(path: string, body?: Json, opts?: RequestOptions): Promise<T> {\n return this.request<T>('POST', path, body, opts);\n }\n\n put<T>(path: string, body?: Json, opts?: RequestOptions): Promise<T> {\n return this.request<T>('PUT', path, body, opts);\n }\n\n delete<T>(path: string, opts?: RequestOptions): Promise<T> {\n return this.request<T>('DELETE', path, undefined, opts);\n }\n\n patch<T>(path: string, body?: Json, opts?: RequestOptions): Promise<T> {\n return this.request<T>('PATCH', path, body, opts);\n }\n\n private async request<T>(\n method: HttpMethod,\n path: string,\n body: Json | undefined,\n opts: RequestOptions | undefined,\n ): Promise<T> {\n const url = this.buildUrl(path, opts?.query);\n const shouldRetry = opts?.retry ?? IDEMPOTENT_METHODS.has(method);\n const idToken = this.getIdToken ? await this.getIdToken() : null;\n\n const headers: Record<string, string> = {\n Accept: 'application/json',\n ...opts?.headers,\n };\n if (body !== undefined) headers['Content-Type'] = 'application/json';\n if (idToken) {\n // NOTE: API Gateway REST v1 + Cognito Authorizer expects the bare JWT,\n // NOT `Bearer <jwt>`. See CloudServices-accesly/docs/Handoff_Fase3.md.\n headers['Authorization'] = idToken;\n }\n\n const init: RequestInit = { method, headers };\n if (body !== undefined) init.body = JSON.stringify(body);\n\n let attempt = 0;\n let lastError: unknown;\n const maxAttempts = shouldRetry ? this.maxRetries + 1 : 1;\n\n while (attempt < maxAttempts) {\n attempt += 1;\n this.telemetry({ kind: 'request', method, url, attempt });\n const startedAt = Date.now();\n const ac = new AbortController();\n const timeoutId = setTimeout(() => ac.abort(), this.timeoutMs);\n const signal = combineSignals(opts?.signal, ac.signal);\n try {\n const res = await this.fetchImpl(url, { ...init, signal });\n const durationMs = Date.now() - startedAt;\n this.telemetry({\n kind: 'response',\n method,\n url,\n status: res.status,\n durationMs,\n attempt,\n });\n clearTimeout(timeoutId);\n\n if (res.status >= 500 && shouldRetry && attempt < maxAttempts) {\n const delay = this.backoffMs(attempt);\n this.telemetry({ kind: 'retry', method, url, attempt, delayMs: delay });\n await sleep(delay);\n continue;\n }\n\n return await this.handleResponse<T>(res);\n } catch (err) {\n clearTimeout(timeoutId);\n if (err instanceof AccesslyApiError) {\n // Already shaped — bubble up without retrying.\n throw err;\n }\n const description = describeError(err);\n this.telemetry({ kind: 'error', method, url, error: description, attempt });\n lastError = err;\n if (shouldRetry && attempt < maxAttempts) {\n const delay = this.backoffMs(attempt);\n this.telemetry({ kind: 'retry', method, url, attempt, delayMs: delay });\n await sleep(delay);\n continue;\n }\n throw new NetworkError(`fetch failed: ${description}`, { cause: err });\n }\n }\n\n // Unreachable, but TS needs an explicit throw.\n throw new NetworkError('retries exhausted', { cause: lastError });\n }\n\n private async handleResponse<T>(res: Response): Promise<T> {\n const requestId =\n res.headers.get('x-amzn-RequestId') ?? res.headers.get('x-request-id') ?? undefined;\n if (res.ok) {\n if (res.status === 204) return undefined as unknown as T;\n const text = await res.text();\n if (text.length === 0) return undefined as unknown as T;\n try {\n return JSON.parse(text) as T;\n } catch (err) {\n throw new NetworkError('response is not valid JSON', { cause: err, requestId });\n }\n }\n // Non-2xx: try to parse a JSON body for the error shape.\n let parsed: unknown;\n try {\n const text = await res.text();\n parsed = text.length > 0 ? JSON.parse(text) : undefined;\n } catch {\n parsed = undefined;\n }\n throw errorForResponse(res.status, parsed, requestId);\n }\n\n private buildUrl(path: string, query?: RequestOptions['query']): string {\n const cleanPath = path.startsWith('/') ? path : `/${path}`;\n const url = new URL(this.baseUrl + cleanPath);\n if (query) {\n for (const [k, v] of Object.entries(query)) {\n if (v === undefined) continue;\n url.searchParams.set(k, String(v));\n }\n }\n return url.toString();\n }\n}\n\nfunction defaultBackoff(attempt: number): number {\n const base = 500 * 2 ** (attempt - 1);\n const jitter = base * 0.2 * (Math.random() * 2 - 1); // ±20%\n return Math.max(0, Math.floor(base + jitter));\n}\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => {\n setTimeout(resolve, ms);\n });\n}\n\nfunction describeError(err: unknown): string {\n if (err instanceof Error) return `${err.name}: ${err.message}`;\n return String(err);\n}\n\nfunction combineSignals(a: AbortSignal | undefined, b: AbortSignal): AbortSignal {\n if (!a) return b;\n if (a.aborted) return a;\n if (b.aborted) return b;\n const ac = new AbortController();\n const onAbort = (): void => ac.abort();\n a.addEventListener('abort', onAbort, { once: true });\n b.addEventListener('abort', onAbort, { once: true });\n return ac.signal;\n}\n","/**\n * Typed wrappers for the Accesly backend REST endpoints. One method per\n * route in `CloudServices-accesly/docs/openapi.yaml`.\n *\n * Each wrapper is a one-liner over `AccesslyApiClient` — the value is the\n * typed signature, which makes auto-complete + refactors safe.\n */\n\nimport type {\n CreateWalletRequest,\n CreateWalletResponse,\n FinalizeRecoveryRequest,\n FinalizeRecoveryResponse,\n GetFragment2Request,\n GetFragment2Response,\n GetFragment3Response,\n GetWalletResponse,\n HealthResponse,\n KycStartResponse,\n OrderRequest,\n OrderResponse,\n RecoveryOtpRequestInput,\n RecoveryOtpRequestResponse,\n RecoveryOtpVerifyInput,\n RecoveryOtpVerifyResponse,\n SimulateRotateSignerRequest,\n SimulateRotateSignerResponse,\n ActivateAssetSimulateRequest,\n SimulateTxRequest,\n SimulateTxResponse,\n SubmitTxRequest,\n SubmitTxResponse,\n WalletActivityResponse,\n WalletBalanceResponse,\n WalletHistoryRequestOptions,\n WalletHistoryResponse,\n} from '../types/api.js';\nimport { NotFoundError } from './errors.js';\nimport type { AccesslyApiClient, Json } from './client.js';\n\nexport class AccesslyEndpoints {\n constructor(private readonly client: AccesslyApiClient) {}\n\n /** Public liveness check. No auth header sent. */\n health(): Promise<HealthResponse> {\n return this.client.get<HealthResponse>('/health');\n }\n\n /** Cognito-auth. Deploys the user's Smart Account on Soroban. */\n createWallet(req: CreateWalletRequest): Promise<CreateWalletResponse> {\n return this.client.post<CreateWalletResponse>('/wallets', req as unknown as Json);\n }\n\n /**\n * Cognito-auth. Returns the user's already-deployed Smart Account metadata,\n * or `null` if the user has not yet completed `POST /wallets`.\n *\n * Idempotent — safe to call at the top of every authenticated session.\n * Cheap on the backend (metadata read, no KMS decrypt).\n */\n async getWallet(): Promise<GetWalletResponse | null> {\n try {\n return await this.client.get<GetWalletResponse>('/wallets');\n } catch (err) {\n if (err instanceof NotFoundError) return null;\n throw err;\n }\n }\n\n /** Cognito-auth. Returns F2 re-encrypted with a per-request session key. */\n getFragment2(req: GetFragment2Request): Promise<GetFragment2Response> {\n return this.client.post<GetFragment2Response>('/fragments/2', req as unknown as Json);\n }\n\n /**\n * Cognito-auth. Simula `XLM_SAC.transfer(from=smartAccount, to, amount)` y\n * devuelve los datos para que el SDK firme la auth entry client-side. NO\n * mueve fondos — solo prepara el material para `submitTx`.\n */\n simulateTx(req: SimulateTxRequest): Promise<SimulateTxResponse> {\n return this.client.post<SimulateTxResponse>('/tx/simulate', req as unknown as Json);\n }\n\n /**\n * Cognito-auth. Recibe la `SorobanAuthorizationEntry` firmada por el SDK +\n * el envelope que `simulateTx` devolvió. El backend re-simula con la firma\n * real, KMS-firma el envelope con `channels-fund` (developer-pays) y envía\n * a Soroban RPC. Devuelve el `txHash` para que la UI pueda mostrar el\n * resultado / link a explorer.\n */\n submitTx(req: SubmitTxRequest): Promise<SubmitTxResponse> {\n return this.client.post<SubmitTxResponse>('/tx/submit', req as unknown as Json);\n }\n\n /**\n * Cognito-auth. Simula `smart_account.add_context_rule(...)` para activar un\n * nuevo asset (e.g. USDC) en una wallet ya deployada. Caso típico: wallets\n * pre-1.4 que vienen con rule 0 = XLM solo y necesitan agregar rule N+1\n * para USDC sin re-deployar.\n *\n * Response shape idéntico a `simulateTx` — el SDK firma el `auth_digest` con\n * el mismo passkey contra la regla admin-cfg.\n */\n activateAssetSimulate(\n req: ActivateAssetSimulateRequest,\n ): Promise<SimulateTxResponse> {\n return this.client.post<SimulateTxResponse>(\n '/tx/activate-asset/simulate',\n req as unknown as Json,\n );\n }\n\n /** Cognito-auth. Submit del add_context_rule firmado (mismo shape que submitTx). */\n activateAssetSubmit(req: SubmitTxRequest): Promise<SubmitTxResponse> {\n return this.client.post<SubmitTxResponse>(\n '/tx/activate-asset/submit',\n req as unknown as Json,\n );\n }\n\n /** Cognito-auth. Starts a KYC verification with Etherfuse. */\n kycStart(): Promise<KycStartResponse> {\n return this.client.post<KycStartResponse>('/kyc');\n }\n\n /** Cognito-auth. Reads the current user's KYC status. */\n kycStatus(): Promise<KycStartResponse> {\n return this.client.get<KycStartResponse>('/kyc');\n }\n\n /** Cognito-auth. Quote or submit an MXN→USDC onramp order. */\n onramp(req: OrderRequest): Promise<OrderResponse> {\n return this.client.post<OrderResponse>('/onramp', req as unknown as Json);\n }\n\n /** Cognito-auth. Quote or submit a USDC→MXN offramp order. */\n offramp(req: OrderRequest): Promise<OrderResponse> {\n return this.client.post<OrderResponse>('/offramp', req as unknown as Json);\n }\n\n /* ── v1.1.0: read-only wallet data ─────────────────────────────────────── */\n\n /**\n * Anónimo. Balance XLM del Smart Account (vía Soroban RPC, cached ~5s).\n * No requiere JWT — la address en sí es pública on-chain.\n */\n walletBalance(address: string): Promise<WalletBalanceResponse> {\n return this.client.get<WalletBalanceResponse>(\n `/wallets/${encodeURIComponent(address)}/balance`,\n );\n }\n\n /**\n * Anónimo. Últimos eventos on-chain del Smart Account (rotate_signer,\n * transfers, etc.). Cacheado ~15s. `limit` default 20, max 50.\n */\n walletActivity(address: string, limit?: number): Promise<WalletActivityResponse> {\n const qs = limit !== undefined ? `?limit=${encodeURIComponent(String(limit))}` : '';\n return this.client.get<WalletActivityResponse>(\n `/wallets/${encodeURIComponent(address)}/activity${qs}`,\n );\n }\n\n /**\n * Anónimo. Historial completo del wallet — pre-decodificado server-side desde\n * Stellar Expert (que en browser está bloqueado por CORS). Devuelve items\n * tipados: `wallet-created`, `signer-rotated`, `transfer-in`, `transfer-out`.\n *\n * Cursor-based: pasa `saCursor` y/o `txCursor` para paginar atrás. El primer\n * fetch (sin cursors) incluye un evento sintético `wallet-created` desde la\n * metadata del contrato.\n */\n walletHistory(\n address: string,\n opts: WalletHistoryRequestOptions = {},\n ): Promise<WalletHistoryResponse> {\n const params = new URLSearchParams();\n if (opts.smartAccountCursor) params.set('saCursor', opts.smartAccountCursor);\n if (opts.transfersCursor) params.set('txCursor', opts.transfersCursor);\n if (opts.transferScanLimit !== undefined) {\n params.set('scanLimit', String(opts.transferScanLimit));\n }\n const qs = params.toString();\n return this.client.get<WalletHistoryResponse>(\n `/wallets/${encodeURIComponent(address)}/history${qs ? '?' + qs : ''}`,\n );\n }\n\n /* ── Recovery v2 (Fase 1, 2026-06-15) ──────────────────────────────────── */\n\n /**\n * Anónimo. Pide al backend que mande un OTP de 6 dígitos al email.\n *\n * Rate-limited: el backend rechaza con 429 si pediste otro hace menos de\n * 60s o más de 3 en la última hora. Anti-enumeración: la respuesta es 200\n * OK aunque el email no exista.\n */\n requestRecoveryOtp(input: RecoveryOtpRequestInput): Promise<RecoveryOtpRequestResponse> {\n return this.client.post<RecoveryOtpRequestResponse>(\n '/recovery/otp/request',\n input as unknown as Json,\n );\n }\n\n /**\n * Anónimo. Verifica el OTP. Si OK, devuelve un `recoveryJwt` que\n * autoriza los dos endpoints siguientes (`getFragment3`,\n * `finalizeRecovery`) durante 5 min.\n */\n verifyRecoveryOtp(input: RecoveryOtpVerifyInput): Promise<RecoveryOtpVerifyResponse> {\n return this.client.post<RecoveryOtpVerifyResponse>(\n '/recovery/otp/verify',\n input as unknown as Json,\n );\n }\n\n /**\n * Anónimo + header `X-Recovery-Jwt`. Devuelve `{fragmentF3Encrypted,\n * recoverySalt}`. El SDK descifra F3 con la `recoveryKey` derivada\n * client-side (PBKDF2(password, recoverySalt, 600k)).\n */\n getFragment3(recoveryJwt: string): Promise<GetFragment3Response> {\n return this.client.get<GetFragment3Response>('/fragments/3', {\n headers: { 'X-Recovery-Jwt': recoveryJwt },\n });\n }\n\n /**\n * Anónimo + header `X-Recovery-Jwt`. El backend arma + simula la tx\n * `rotate_signer(newOwner, newSecp256r1, newEmailCommit)` contra el Smart\n * Account del usuario y devuelve el material que el SDK necesita para\n * firmar la `SorobanAuthorizationEntry` con la seed VIEJA (reconstruida\n * por Shamir(F2_recovery, F3)) contra la regla `admin-cfg`.\n */\n simulateRotateSigner(\n recoveryJwt: string,\n payload: SimulateRotateSignerRequest,\n ): Promise<SimulateRotateSignerResponse> {\n return this.client.post<SimulateRotateSignerResponse>(\n '/recovery/simulate-rotate-signer',\n payload as unknown as Json,\n {\n headers: { 'X-Recovery-Jwt': recoveryJwt },\n },\n );\n }\n\n /**\n * Anónimo + header `X-Recovery-Jwt`. Submitea la tx `rotate_signer` firmada\n * por el SDK con la seed reconstruida (F2+F3) y persiste las nuevas\n * F1'/F2'/F3' en DDB. Idempotente del lado backend.\n */\n finalizeRecovery(\n recoveryJwt: string,\n payload: FinalizeRecoveryRequest,\n ): Promise<FinalizeRecoveryResponse> {\n return this.client.post<FinalizeRecoveryResponse>(\n '/recovery/finalize',\n payload as unknown as Json,\n {\n headers: { 'X-Recovery-Jwt': recoveryJwt },\n },\n );\n }\n}\n"]}
1
+ {"version":3,"sources":["../../src/api/errors.ts","../../src/api/client.ts","../../src/api/endpoints.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Typed error hierarchy for the Accesly API client.\n *\n * Every error thrown by the API client is a subclass of `AccesslyApiError`,\n * so consumers can do:\n * try { ... } catch (e) {\n * if (e instanceof AuthError) return relogin();\n * if (e instanceof NetworkError) return retryLater();\n * throw e;\n * }\n */\n\nexport interface AccesslyApiErrorOptions {\n readonly status: number;\n readonly code?: string | undefined;\n readonly requestId?: string | undefined;\n readonly cause?: unknown;\n}\n\nexport class AccesslyApiError extends Error {\n readonly status: number;\n readonly code: string;\n readonly requestId: string | undefined;\n override readonly cause: unknown;\n\n constructor(message: string, opts: AccesslyApiErrorOptions) {\n super(message);\n this.name = 'AccesslyApiError';\n this.status = opts.status;\n this.code = opts.code ?? `HTTP_${opts.status}`;\n this.requestId = opts.requestId;\n this.cause = opts.cause;\n }\n}\n\n/** 401 / 403 — caller should re-authenticate (or check appId/permissions). */\nexport class AuthError extends AccesslyApiError {\n constructor(message: string, opts: AccesslyApiErrorOptions) {\n super(message, opts);\n this.name = 'AuthError';\n }\n}\n\n/** 400 / 422 — request body or query was malformed. */\nexport class ValidationError extends AccesslyApiError {\n constructor(message: string, opts: AccesslyApiErrorOptions) {\n super(message, opts);\n this.name = 'ValidationError';\n }\n}\n\n/** 404 — resource does not exist. */\nexport class NotFoundError extends AccesslyApiError {\n constructor(message: string, opts: AccesslyApiErrorOptions) {\n super(message, opts);\n this.name = 'NotFoundError';\n }\n}\n\n/** 429 — caller should back off. */\nexport class RateLimitError extends AccesslyApiError {\n readonly retryAfterSeconds: number | undefined;\n\n constructor(\n message: string,\n opts: AccesslyApiErrorOptions & { retryAfterSeconds?: number | undefined },\n ) {\n super(message, opts);\n this.name = 'RateLimitError';\n this.retryAfterSeconds = opts.retryAfterSeconds;\n }\n}\n\n/** 5xx — server-side problem, the client already exhausted its retries. */\nexport class ServerError extends AccesslyApiError {\n constructor(message: string, opts: AccesslyApiErrorOptions) {\n super(message, opts);\n this.name = 'ServerError';\n }\n}\n\n/** Fetch threw (DNS fail, TLS error, abort, etc.) or response was not parseable. */\nexport class NetworkError extends AccesslyApiError {\n constructor(message: string, opts: Omit<AccesslyApiErrorOptions, 'status'>) {\n super(message, { ...opts, status: 0 });\n this.name = 'NetworkError';\n }\n}\n\n/**\n * Maps an HTTP status code + body to the right error subclass.\n */\nexport function errorForResponse(\n status: number,\n body: unknown,\n requestId: string | undefined,\n): AccesslyApiError {\n const message = extractMessage(body) ?? `HTTP ${status}`;\n const opts: AccesslyApiErrorOptions = { status, code: extractCode(body), requestId };\n if (status === 401 || status === 403) return new AuthError(message, opts);\n if (status === 404) return new NotFoundError(message, opts);\n if (status === 429) {\n return new RateLimitError(message, {\n ...opts,\n retryAfterSeconds: extractRetryAfter(body),\n });\n }\n if (status >= 400 && status < 500) return new ValidationError(message, opts);\n if (status >= 500) return new ServerError(message, opts);\n return new AccesslyApiError(message, opts);\n}\n\nfunction extractMessage(body: unknown): string | undefined {\n if (body && typeof body === 'object') {\n const b = body as { message?: unknown; error?: unknown };\n if (typeof b.message === 'string') return b.message;\n if (typeof b.error === 'string') return b.error;\n }\n return undefined;\n}\n\nfunction extractCode(body: unknown): string | undefined {\n if (body && typeof body === 'object') {\n const b = body as { code?: unknown };\n if (typeof b.code === 'string') return b.code;\n }\n return undefined;\n}\n\nfunction extractRetryAfter(body: unknown): number | undefined {\n if (body && typeof body === 'object') {\n const b = body as { retryAfter?: unknown };\n if (typeof b.retryAfter === 'number' && b.retryAfter >= 0) return b.retryAfter;\n }\n return undefined;\n}\n","/**\n * Typed HTTP client for the Accesly backend.\n *\n * - Auto-injects `Authorization: <idToken>` (no `Bearer ` prefix — the backend\n * API Gateway REST v1 + Cognito Authorizer expects the raw JWT, see the\n * handoff doc gotcha).\n * - Retries idempotent requests on 5xx / network errors with exponential\n * backoff + jitter.\n * - Emits structured telemetry events the consumer can hook into.\n */\n\nimport { AccesslyApiError, NetworkError, errorForResponse } from './errors.js';\n\nexport type IdTokenProvider = () => string | null | Promise<string | null>;\n\nexport type TelemetryEvent =\n | { kind: 'request'; method: string; url: string; attempt: number }\n | {\n kind: 'response';\n method: string;\n url: string;\n status: number;\n durationMs: number;\n attempt: number;\n }\n | {\n kind: 'error';\n method: string;\n url: string;\n error: string;\n attempt: number;\n }\n | { kind: 'retry'; method: string; url: string; attempt: number; delayMs: number };\n\nexport type TelemetrySink = (event: TelemetryEvent) => void;\n\nexport interface AccesslyApiClientOptions {\n readonly baseUrl: string;\n /** Returns the current idToken, or null if the caller is anonymous. */\n readonly getIdToken?: IdTokenProvider;\n /** Override the global `fetch`. Tests only. */\n readonly fetchImpl?: typeof fetch;\n /** Max retries for idempotent requests on 5xx / network errors. Default 3. */\n readonly maxRetries?: number;\n /** Request timeout in ms. Default 30_000. */\n readonly timeoutMs?: number;\n /** Telemetry sink. Default no-op. */\n readonly telemetry?: TelemetrySink;\n /**\n * Override the backoff delay calculator (ms by attempt index, 1-based).\n * Tests only. Default: 500 * 2^(attempt-1) ± 20% jitter.\n */\n readonly backoffMs?: (attempt: number) => number;\n}\n\nexport type Json =\n | null\n | boolean\n | number\n | string\n | readonly Json[]\n | { readonly [k: string]: Json };\n\nexport interface RequestOptions {\n readonly headers?: Record<string, string>;\n readonly signal?: AbortSignal;\n readonly query?: Record<string, string | number | boolean | undefined>;\n /** If `false`, the request will NOT be retried. Default `true` for GET. */\n readonly retry?: boolean;\n}\n\n/** HTTP methods the client supports. */\ntype HttpMethod = 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH';\n\nconst IDEMPOTENT_METHODS: ReadonlySet<HttpMethod> = new Set(['GET']);\n\nexport class AccesslyApiClient {\n private readonly baseUrl: string;\n private readonly getIdToken: IdTokenProvider | undefined;\n private readonly fetchImpl: typeof fetch;\n private readonly maxRetries: number;\n private readonly timeoutMs: number;\n private readonly telemetry: TelemetrySink;\n private readonly backoffMs: (attempt: number) => number;\n\n constructor(opts: AccesslyApiClientOptions) {\n if (!opts.baseUrl) throw new TypeError('AccesslyApiClient: baseUrl is required');\n this.baseUrl = opts.baseUrl.replace(/\\/+$/, '');\n this.getIdToken = opts.getIdToken;\n // `?? fetch` keeps a reference even after globalThis.fetch is reassigned\n // in tests, so users get the fetch they had when constructing the client.\n this.fetchImpl = opts.fetchImpl ?? globalThis.fetch.bind(globalThis);\n this.maxRetries = opts.maxRetries ?? 3;\n this.timeoutMs = opts.timeoutMs ?? 30_000;\n this.telemetry = opts.telemetry ?? (() => undefined);\n this.backoffMs = opts.backoffMs ?? defaultBackoff;\n }\n\n get<T>(path: string, opts?: RequestOptions): Promise<T> {\n return this.request<T>('GET', path, undefined, opts);\n }\n\n post<T>(path: string, body?: Json, opts?: RequestOptions): Promise<T> {\n return this.request<T>('POST', path, body, opts);\n }\n\n put<T>(path: string, body?: Json, opts?: RequestOptions): Promise<T> {\n return this.request<T>('PUT', path, body, opts);\n }\n\n delete<T>(path: string, opts?: RequestOptions): Promise<T> {\n return this.request<T>('DELETE', path, undefined, opts);\n }\n\n patch<T>(path: string, body?: Json, opts?: RequestOptions): Promise<T> {\n return this.request<T>('PATCH', path, body, opts);\n }\n\n private async request<T>(\n method: HttpMethod,\n path: string,\n body: Json | undefined,\n opts: RequestOptions | undefined,\n ): Promise<T> {\n const url = this.buildUrl(path, opts?.query);\n const shouldRetry = opts?.retry ?? IDEMPOTENT_METHODS.has(method);\n const idToken = this.getIdToken ? await this.getIdToken() : null;\n\n const headers: Record<string, string> = {\n Accept: 'application/json',\n ...opts?.headers,\n };\n if (body !== undefined) headers['Content-Type'] = 'application/json';\n if (idToken) {\n // NOTE: API Gateway REST v1 + Cognito Authorizer expects the bare JWT,\n // NOT `Bearer <jwt>`. See CloudServices-accesly/docs/Handoff_Fase3.md.\n headers['Authorization'] = idToken;\n }\n\n const init: RequestInit = { method, headers };\n if (body !== undefined) init.body = JSON.stringify(body);\n\n let attempt = 0;\n let lastError: unknown;\n const maxAttempts = shouldRetry ? this.maxRetries + 1 : 1;\n\n while (attempt < maxAttempts) {\n attempt += 1;\n this.telemetry({ kind: 'request', method, url, attempt });\n const startedAt = Date.now();\n const ac = new AbortController();\n const timeoutId = setTimeout(() => ac.abort(), this.timeoutMs);\n const signal = combineSignals(opts?.signal, ac.signal);\n try {\n const res = await this.fetchImpl(url, { ...init, signal });\n const durationMs = Date.now() - startedAt;\n this.telemetry({\n kind: 'response',\n method,\n url,\n status: res.status,\n durationMs,\n attempt,\n });\n clearTimeout(timeoutId);\n\n if (res.status >= 500 && shouldRetry && attempt < maxAttempts) {\n const delay = this.backoffMs(attempt);\n this.telemetry({ kind: 'retry', method, url, attempt, delayMs: delay });\n await sleep(delay);\n continue;\n }\n\n return await this.handleResponse<T>(res);\n } catch (err) {\n clearTimeout(timeoutId);\n if (err instanceof AccesslyApiError) {\n // Already shaped — bubble up without retrying.\n throw err;\n }\n const description = describeError(err);\n this.telemetry({ kind: 'error', method, url, error: description, attempt });\n lastError = err;\n if (shouldRetry && attempt < maxAttempts) {\n const delay = this.backoffMs(attempt);\n this.telemetry({ kind: 'retry', method, url, attempt, delayMs: delay });\n await sleep(delay);\n continue;\n }\n throw new NetworkError(`fetch failed: ${description}`, { cause: err });\n }\n }\n\n // Unreachable, but TS needs an explicit throw.\n throw new NetworkError('retries exhausted', { cause: lastError });\n }\n\n private async handleResponse<T>(res: Response): Promise<T> {\n const requestId =\n res.headers.get('x-amzn-RequestId') ?? res.headers.get('x-request-id') ?? undefined;\n if (res.ok) {\n if (res.status === 204) return undefined as unknown as T;\n const text = await res.text();\n if (text.length === 0) return undefined as unknown as T;\n try {\n return JSON.parse(text) as T;\n } catch (err) {\n throw new NetworkError('response is not valid JSON', { cause: err, requestId });\n }\n }\n // Non-2xx: try to parse a JSON body for the error shape.\n let parsed: unknown;\n try {\n const text = await res.text();\n parsed = text.length > 0 ? JSON.parse(text) : undefined;\n } catch {\n parsed = undefined;\n }\n throw errorForResponse(res.status, parsed, requestId);\n }\n\n private buildUrl(path: string, query?: RequestOptions['query']): string {\n const cleanPath = path.startsWith('/') ? path : `/${path}`;\n const url = new URL(this.baseUrl + cleanPath);\n if (query) {\n for (const [k, v] of Object.entries(query)) {\n if (v === undefined) continue;\n url.searchParams.set(k, String(v));\n }\n }\n return url.toString();\n }\n}\n\nfunction defaultBackoff(attempt: number): number {\n const base = 500 * 2 ** (attempt - 1);\n const jitter = base * 0.2 * (Math.random() * 2 - 1); // ±20%\n return Math.max(0, Math.floor(base + jitter));\n}\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => {\n setTimeout(resolve, ms);\n });\n}\n\nfunction describeError(err: unknown): string {\n if (err instanceof Error) return `${err.name}: ${err.message}`;\n return String(err);\n}\n\nfunction combineSignals(a: AbortSignal | undefined, b: AbortSignal): AbortSignal {\n if (!a) return b;\n if (a.aborted) return a;\n if (b.aborted) return b;\n const ac = new AbortController();\n const onAbort = (): void => ac.abort();\n a.addEventListener('abort', onAbort, { once: true });\n b.addEventListener('abort', onAbort, { once: true });\n return ac.signal;\n}\n","/**\n * Typed wrappers for the Accesly backend REST endpoints. One method per\n * route in `CloudServices-accesly/docs/openapi.yaml`.\n *\n * Each wrapper is a one-liner over `AccesslyApiClient` — the value is the\n * typed signature, which makes auto-complete + refactors safe.\n */\n\nimport type {\n CreateWalletRequest,\n CreateWalletResponse,\n FinalizeRecoveryRequest,\n FinalizeRecoveryResponse,\n GetFragment2Request,\n GetFragment2Response,\n GetFragment3Response,\n GetWalletResponse,\n HealthResponse,\n KycStartResponse,\n OrderRequest,\n OrderResponse,\n RegisterBankAccountRequest,\n RegisterBankAccountResponse,\n RecoveryOtpRequestInput,\n RecoveryOtpRequestResponse,\n RecoveryOtpVerifyInput,\n RecoveryOtpVerifyResponse,\n SimulateRotateSignerRequest,\n SimulateRotateSignerResponse,\n ActivateAssetSimulateRequest,\n SimulateSwapRequest,\n SimulateSwapResponse,\n SimulateTxRequest,\n SimulateTxResponse,\n SubmitTxRequest,\n SubmitTxResponse,\n WalletActivityResponse,\n WalletBalanceResponse,\n WalletHistoryRequestOptions,\n WalletHistoryResponse,\n} from '../types/api.js';\nimport { NotFoundError } from './errors.js';\nimport type { AccesslyApiClient, Json } from './client.js';\n\nexport class AccesslyEndpoints {\n constructor(private readonly client: AccesslyApiClient) {}\n\n /** Public liveness check. No auth header sent. */\n health(): Promise<HealthResponse> {\n return this.client.get<HealthResponse>('/health');\n }\n\n /** Cognito-auth. Deploys the user's Smart Account on Soroban. */\n createWallet(req: CreateWalletRequest): Promise<CreateWalletResponse> {\n return this.client.post<CreateWalletResponse>('/wallets', req as unknown as Json);\n }\n\n /**\n * Cognito-auth. Returns the user's already-deployed Smart Account metadata,\n * or `null` if the user has not yet completed `POST /wallets`.\n *\n * Idempotent — safe to call at the top of every authenticated session.\n * Cheap on the backend (metadata read, no KMS decrypt).\n */\n async getWallet(): Promise<GetWalletResponse | null> {\n try {\n return await this.client.get<GetWalletResponse>('/wallets');\n } catch (err) {\n if (err instanceof NotFoundError) return null;\n throw err;\n }\n }\n\n /** Cognito-auth. Returns F2 re-encrypted with a per-request session key. */\n getFragment2(req: GetFragment2Request): Promise<GetFragment2Response> {\n return this.client.post<GetFragment2Response>('/fragments/2', req as unknown as Json);\n }\n\n /**\n * Cognito-auth. Simula `XLM_SAC.transfer(from=smartAccount, to, amount)` y\n * devuelve los datos para que el SDK firme la auth entry client-side. NO\n * mueve fondos — solo prepara el material para `submitTx`.\n */\n simulateTx(req: SimulateTxRequest): Promise<SimulateTxResponse> {\n return this.client.post<SimulateTxResponse>('/tx/simulate', req as unknown as Json);\n }\n\n /**\n * Cognito-auth. Recibe la `SorobanAuthorizationEntry` firmada por el SDK +\n * el envelope que `simulateTx` devolvió. El backend re-simula con la firma\n * real, KMS-firma el envelope con `channels-fund` (developer-pays) y envía\n * a Soroban RPC. Devuelve el `txHash` para que la UI pueda mostrar el\n * resultado / link a explorer.\n */\n submitTx(req: SubmitTxRequest): Promise<SubmitTxResponse> {\n return this.client.post<SubmitTxResponse>('/tx/submit', req as unknown as Json);\n }\n\n /**\n * Cognito-auth. Simula `smart_account.add_context_rule(...)` para activar un\n * nuevo asset (e.g. USDC) en una wallet ya deployada. Caso típico: wallets\n * pre-1.4 que vienen con rule 0 = XLM solo y necesitan agregar rule N+1\n * para USDC sin re-deployar.\n *\n * Response shape idéntico a `simulateTx` — el SDK firma el `auth_digest` con\n * el mismo passkey contra la regla admin-cfg.\n */\n activateAssetSimulate(\n req: ActivateAssetSimulateRequest,\n ): Promise<SimulateTxResponse> {\n return this.client.post<SimulateTxResponse>(\n '/tx/activate-asset/simulate',\n req as unknown as Json,\n );\n }\n\n /** Cognito-auth. Submit del add_context_rule firmado (mismo shape que submitTx). */\n activateAssetSubmit(req: SubmitTxRequest): Promise<SubmitTxResponse> {\n return this.client.post<SubmitTxResponse>(\n '/tx/activate-asset/submit',\n req as unknown as Json,\n );\n }\n\n /**\n * Cognito-auth. Cotiza un swap XLM↔USDC via Soroswap Aggregator y devuelve\n * el material para que el SDK firme la auth entry contra la regla\n * biometric-tx del asset de entrada.\n */\n swapSimulate(req: SimulateSwapRequest): Promise<SimulateSwapResponse> {\n return this.client.post<SimulateSwapResponse>(\n '/tx/swap/simulate',\n req as unknown as Json,\n );\n }\n\n /** Cognito-auth. Submit del swap firmado (mismo shape que submitTx). */\n swapSubmit(req: SubmitTxRequest): Promise<SubmitTxResponse> {\n return this.client.post<SubmitTxResponse>(\n '/tx/swap/submit',\n req as unknown as Json,\n );\n }\n\n /** Cognito-auth. Starts a KYC verification with Etherfuse. */\n kycStart(): Promise<KycStartResponse> {\n return this.client.post<KycStartResponse>('/kyc');\n }\n\n /** Cognito-auth. Reads the current user's KYC status. */\n kycStatus(): Promise<KycStartResponse> {\n return this.client.get<KycStartResponse>('/kyc');\n }\n\n /** Cognito-auth. Quote or submit an MXN→USDC onramp order. */\n onramp(req: OrderRequest): Promise<OrderResponse> {\n return this.client.post<OrderResponse>('/onramp', req as unknown as Json);\n }\n\n /** Cognito-auth. Quote or submit a USDC→MXN offramp order. */\n offramp(req: OrderRequest): Promise<OrderResponse> {\n return this.client.post<OrderResponse>('/offramp', req as unknown as Json);\n }\n\n /**\n * Cognito-auth. Registra una CLABE mexicana en el customer Etherfuse del\n * usuario. Requiere KYC pre-existente. Devuelve un `bankAccountId` que se\n * usa después en `offramp({ bankAccountId, ... })`.\n */\n registerBankAccount(req: RegisterBankAccountRequest): Promise<RegisterBankAccountResponse> {\n return this.client.post<RegisterBankAccountResponse>(\n '/kyc/bank-accounts',\n req as unknown as Json,\n );\n }\n\n /* ── v1.1.0: read-only wallet data ─────────────────────────────────────── */\n\n /**\n * Anónimo. Balance XLM del Smart Account (vía Soroban RPC, cached ~5s).\n * No requiere JWT — la address en sí es pública on-chain.\n */\n walletBalance(address: string): Promise<WalletBalanceResponse> {\n return this.client.get<WalletBalanceResponse>(\n `/wallets/${encodeURIComponent(address)}/balance`,\n );\n }\n\n /**\n * Anónimo. Últimos eventos on-chain del Smart Account (rotate_signer,\n * transfers, etc.). Cacheado ~15s. `limit` default 20, max 50.\n */\n walletActivity(address: string, limit?: number): Promise<WalletActivityResponse> {\n const qs = limit !== undefined ? `?limit=${encodeURIComponent(String(limit))}` : '';\n return this.client.get<WalletActivityResponse>(\n `/wallets/${encodeURIComponent(address)}/activity${qs}`,\n );\n }\n\n /**\n * Anónimo. Historial completo del wallet — pre-decodificado server-side desde\n * Stellar Expert (que en browser está bloqueado por CORS). Devuelve items\n * tipados: `wallet-created`, `signer-rotated`, `transfer-in`, `transfer-out`.\n *\n * Cursor-based: pasa `saCursor` y/o `txCursor` para paginar atrás. El primer\n * fetch (sin cursors) incluye un evento sintético `wallet-created` desde la\n * metadata del contrato.\n */\n walletHistory(\n address: string,\n opts: WalletHistoryRequestOptions = {},\n ): Promise<WalletHistoryResponse> {\n const params = new URLSearchParams();\n if (opts.smartAccountCursor) params.set('saCursor', opts.smartAccountCursor);\n if (opts.transfersCursor) params.set('txCursor', opts.transfersCursor);\n if (opts.transferScanLimit !== undefined) {\n params.set('scanLimit', String(opts.transferScanLimit));\n }\n const qs = params.toString();\n return this.client.get<WalletHistoryResponse>(\n `/wallets/${encodeURIComponent(address)}/history${qs ? '?' + qs : ''}`,\n );\n }\n\n /* ── Recovery v2 (Fase 1, 2026-06-15) ──────────────────────────────────── */\n\n /**\n * Anónimo. Pide al backend que mande un OTP de 6 dígitos al email.\n *\n * Rate-limited: el backend rechaza con 429 si pediste otro hace menos de\n * 60s o más de 3 en la última hora. Anti-enumeración: la respuesta es 200\n * OK aunque el email no exista.\n */\n requestRecoveryOtp(input: RecoveryOtpRequestInput): Promise<RecoveryOtpRequestResponse> {\n return this.client.post<RecoveryOtpRequestResponse>(\n '/recovery/otp/request',\n input as unknown as Json,\n );\n }\n\n /**\n * Anónimo. Verifica el OTP. Si OK, devuelve un `recoveryJwt` que\n * autoriza los dos endpoints siguientes (`getFragment3`,\n * `finalizeRecovery`) durante 5 min.\n */\n verifyRecoveryOtp(input: RecoveryOtpVerifyInput): Promise<RecoveryOtpVerifyResponse> {\n return this.client.post<RecoveryOtpVerifyResponse>(\n '/recovery/otp/verify',\n input as unknown as Json,\n );\n }\n\n /**\n * Anónimo + header `X-Recovery-Jwt`. Devuelve `{fragmentF3Encrypted,\n * recoverySalt}`. El SDK descifra F3 con la `recoveryKey` derivada\n * client-side (PBKDF2(password, recoverySalt, 600k)).\n */\n getFragment3(recoveryJwt: string): Promise<GetFragment3Response> {\n return this.client.get<GetFragment3Response>('/fragments/3', {\n headers: { 'X-Recovery-Jwt': recoveryJwt },\n });\n }\n\n /**\n * Anónimo + header `X-Recovery-Jwt`. El backend arma + simula la tx\n * `rotate_signer(newOwner, newSecp256r1, newEmailCommit)` contra el Smart\n * Account del usuario y devuelve el material que el SDK necesita para\n * firmar la `SorobanAuthorizationEntry` con la seed VIEJA (reconstruida\n * por Shamir(F2_recovery, F3)) contra la regla `admin-cfg`.\n */\n simulateRotateSigner(\n recoveryJwt: string,\n payload: SimulateRotateSignerRequest,\n ): Promise<SimulateRotateSignerResponse> {\n return this.client.post<SimulateRotateSignerResponse>(\n '/recovery/simulate-rotate-signer',\n payload as unknown as Json,\n {\n headers: { 'X-Recovery-Jwt': recoveryJwt },\n },\n );\n }\n\n /**\n * Anónimo + header `X-Recovery-Jwt`. Submitea la tx `rotate_signer` firmada\n * por el SDK con la seed reconstruida (F2+F3) y persiste las nuevas\n * F1'/F2'/F3' en DDB. Idempotente del lado backend.\n */\n finalizeRecovery(\n recoveryJwt: string,\n payload: FinalizeRecoveryRequest,\n ): Promise<FinalizeRecoveryResponse> {\n return this.client.post<FinalizeRecoveryResponse>(\n '/recovery/finalize',\n payload as unknown as Json,\n {\n headers: { 'X-Recovery-Jwt': recoveryJwt },\n },\n );\n }\n}\n"]}
package/dist/index.cjs CHANGED
@@ -1148,6 +1148,24 @@ var AccesslyEndpoints = class {
1148
1148
  req
1149
1149
  );
1150
1150
  }
1151
+ /**
1152
+ * Cognito-auth. Cotiza un swap XLM↔USDC via Soroswap Aggregator y devuelve
1153
+ * el material para que el SDK firme la auth entry contra la regla
1154
+ * biometric-tx del asset de entrada.
1155
+ */
1156
+ swapSimulate(req) {
1157
+ return this.client.post(
1158
+ "/tx/swap/simulate",
1159
+ req
1160
+ );
1161
+ }
1162
+ /** Cognito-auth. Submit del swap firmado (mismo shape que submitTx). */
1163
+ swapSubmit(req) {
1164
+ return this.client.post(
1165
+ "/tx/swap/submit",
1166
+ req
1167
+ );
1168
+ }
1151
1169
  /** Cognito-auth. Starts a KYC verification with Etherfuse. */
1152
1170
  kycStart() {
1153
1171
  return this.client.post("/kyc");
@@ -1164,6 +1182,17 @@ var AccesslyEndpoints = class {
1164
1182
  offramp(req) {
1165
1183
  return this.client.post("/offramp", req);
1166
1184
  }
1185
+ /**
1186
+ * Cognito-auth. Registra una CLABE mexicana en el customer Etherfuse del
1187
+ * usuario. Requiere KYC pre-existente. Devuelve un `bankAccountId` que se
1188
+ * usa después en `offramp({ bankAccountId, ... })`.
1189
+ */
1190
+ registerBankAccount(req) {
1191
+ return this.client.post(
1192
+ "/kyc/bank-accounts",
1193
+ req
1194
+ );
1195
+ }
1167
1196
  /* ── v1.1.0: read-only wallet data ─────────────────────────────────────── */
1168
1197
  /**
1169
1198
  * Anónimo. Balance XLM del Smart Account (vía Soroban RPC, cached ~5s).