@accesly/core 1.4.1 → 1.5.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.
@@ -297,6 +297,28 @@ var AccesslyEndpoints = class {
297
297
  submitTx(req) {
298
298
  return this.client.post("/tx/submit", req);
299
299
  }
300
+ /**
301
+ * Cognito-auth. Simula `smart_account.add_context_rule(...)` para activar un
302
+ * nuevo asset (e.g. USDC) en una wallet ya deployada. Caso típico: wallets
303
+ * pre-1.4 que vienen con rule 0 = XLM solo y necesitan agregar rule N+1
304
+ * para USDC sin re-deployar.
305
+ *
306
+ * Response shape idéntico a `simulateTx` — el SDK firma el `auth_digest` con
307
+ * el mismo passkey contra la regla admin-cfg.
308
+ */
309
+ activateAssetSimulate(req) {
310
+ return this.client.post(
311
+ "/tx/activate-asset/simulate",
312
+ req
313
+ );
314
+ }
315
+ /** Cognito-auth. Submit del add_context_rule firmado (mismo shape que submitTx). */
316
+ activateAssetSubmit(req) {
317
+ return this.client.post(
318
+ "/tx/activate-asset/submit",
319
+ req
320
+ );
321
+ }
300
322
  /** Cognito-auth. Starts a KYC verification with Etherfuse. */
301
323
  kycStart() {
302
324
  return this.client.post("/kyc");
@@ -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.cjs","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 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 /** 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.cjs","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"]}
@@ -209,6 +209,18 @@ interface GetFragment2Response {
209
209
  */
210
210
  /** Assets soportados por `tx.send` (1.4+). USDC requiere wallet con rule 1 activado. */
211
211
  type TransferAsset = 'XLM' | 'USDC';
212
+ /** Assets activables vía `wallet.activateAsset(...)` (Fase C). */
213
+ type ActivatableAsset = 'USDC';
214
+ /**
215
+ * `POST /tx/activate-asset/simulate` — primer paso del flow "Activar USDC".
216
+ *
217
+ * Devuelve un `SimulateTxResponse` con el envelope + payload a firmar. El SDK
218
+ * firma contra la regla `admin-cfg` del Smart Account con el mismo passkey
219
+ * que se usa para transfers (mismo signer ed25519 vive en ambas reglas).
220
+ */
221
+ interface ActivateAssetSimulateRequest {
222
+ readonly asset: ActivatableAsset;
223
+ }
212
224
  interface SimulateTxRequest {
213
225
  /**
214
226
  * Base-10 string del monto en unidades atómicas (1e-7 para ambos XLM y USDC).
@@ -512,6 +524,18 @@ declare class AccesslyEndpoints {
512
524
  * resultado / link a explorer.
513
525
  */
514
526
  submitTx(req: SubmitTxRequest): Promise<SubmitTxResponse>;
527
+ /**
528
+ * Cognito-auth. Simula `smart_account.add_context_rule(...)` para activar un
529
+ * nuevo asset (e.g. USDC) en una wallet ya deployada. Caso típico: wallets
530
+ * pre-1.4 que vienen con rule 0 = XLM solo y necesitan agregar rule N+1
531
+ * para USDC sin re-deployar.
532
+ *
533
+ * Response shape idéntico a `simulateTx` — el SDK firma el `auth_digest` con
534
+ * el mismo passkey contra la regla admin-cfg.
535
+ */
536
+ activateAssetSimulate(req: ActivateAssetSimulateRequest): Promise<SimulateTxResponse>;
537
+ /** Cognito-auth. Submit del add_context_rule firmado (mismo shape que submitTx). */
538
+ activateAssetSubmit(req: SubmitTxRequest): Promise<SubmitTxResponse>;
515
539
  /** Cognito-auth. Starts a KYC verification with Etherfuse. */
516
540
  kycStart(): Promise<KycStartResponse>;
517
541
  /** Cognito-auth. Reads the current user's KYC status. */
@@ -632,4 +656,4 @@ declare class NetworkError extends AccesslyApiError {
632
656
  */
633
657
  declare function errorForResponse(status: number, body: unknown, requestId: string | undefined): AccesslyApiError;
634
658
 
635
- export { AccesslyApiClient, type AccesslyApiClientOptions, AccesslyApiError, type AccesslyApiErrorOptions, AccesslyEndpoints, AuthError, type Base64String, type CreateWalletRequest, type CreateWalletResponse, type EncryptedFragmentWire, type FinalizeRecoveryRequest, type FinalizeRecoveryResponse, type GetFragment2Request, type GetFragment2Response, type GetFragment3Response, type GetWalletResponse, type HealthResponse, type HexString, type IdTokenProvider, type Json, type KycStartResponse, NetworkError, NotFoundError, type OrderAction, type OrderRequest, type OrderResponse, RateLimitError, type RecoveryOtpRequestInput, type RecoveryOtpRequestResponse, type RecoveryOtpVerifyInput, type RecoveryOtpVerifyResponse, type RequestOptions, ServerError, type SimulateRotateSignerRequest, type SimulateRotateSignerResponse, type SimulateTxRequest, type SimulateTxResponse, type SubmitTxRequest, type SubmitTxResponse, type TelemetryEvent, type TelemetrySink, type TransferAsset, ValidationError, type WalletActivityEvent, type WalletActivityResponse, type WalletBalanceResponse, type WalletHistoryItem, type WalletHistoryRequestOptions, type WalletHistoryResponse, errorForResponse };
659
+ export { AccesslyApiClient, type AccesslyApiClientOptions, AccesslyApiError, type AccesslyApiErrorOptions, AccesslyEndpoints, type ActivatableAsset, type ActivateAssetSimulateRequest, AuthError, type Base64String, type CreateWalletRequest, type CreateWalletResponse, type EncryptedFragmentWire, type FinalizeRecoveryRequest, type FinalizeRecoveryResponse, type GetFragment2Request, type GetFragment2Response, type GetFragment3Response, type GetWalletResponse, type HealthResponse, type HexString, type IdTokenProvider, type Json, type KycStartResponse, NetworkError, NotFoundError, type OrderAction, type OrderRequest, type OrderResponse, RateLimitError, type RecoveryOtpRequestInput, type RecoveryOtpRequestResponse, type RecoveryOtpVerifyInput, type RecoveryOtpVerifyResponse, type RequestOptions, ServerError, type SimulateRotateSignerRequest, type SimulateRotateSignerResponse, type SimulateTxRequest, type SimulateTxResponse, type SubmitTxRequest, type SubmitTxResponse, type TelemetryEvent, type TelemetrySink, type TransferAsset, ValidationError, type WalletActivityEvent, type WalletActivityResponse, type WalletBalanceResponse, type WalletHistoryItem, type WalletHistoryRequestOptions, type WalletHistoryResponse, errorForResponse };
@@ -209,6 +209,18 @@ interface GetFragment2Response {
209
209
  */
210
210
  /** Assets soportados por `tx.send` (1.4+). USDC requiere wallet con rule 1 activado. */
211
211
  type TransferAsset = 'XLM' | 'USDC';
212
+ /** Assets activables vía `wallet.activateAsset(...)` (Fase C). */
213
+ type ActivatableAsset = 'USDC';
214
+ /**
215
+ * `POST /tx/activate-asset/simulate` — primer paso del flow "Activar USDC".
216
+ *
217
+ * Devuelve un `SimulateTxResponse` con el envelope + payload a firmar. El SDK
218
+ * firma contra la regla `admin-cfg` del Smart Account con el mismo passkey
219
+ * que se usa para transfers (mismo signer ed25519 vive en ambas reglas).
220
+ */
221
+ interface ActivateAssetSimulateRequest {
222
+ readonly asset: ActivatableAsset;
223
+ }
212
224
  interface SimulateTxRequest {
213
225
  /**
214
226
  * Base-10 string del monto en unidades atómicas (1e-7 para ambos XLM y USDC).
@@ -512,6 +524,18 @@ declare class AccesslyEndpoints {
512
524
  * resultado / link a explorer.
513
525
  */
514
526
  submitTx(req: SubmitTxRequest): Promise<SubmitTxResponse>;
527
+ /**
528
+ * Cognito-auth. Simula `smart_account.add_context_rule(...)` para activar un
529
+ * nuevo asset (e.g. USDC) en una wallet ya deployada. Caso típico: wallets
530
+ * pre-1.4 que vienen con rule 0 = XLM solo y necesitan agregar rule N+1
531
+ * para USDC sin re-deployar.
532
+ *
533
+ * Response shape idéntico a `simulateTx` — el SDK firma el `auth_digest` con
534
+ * el mismo passkey contra la regla admin-cfg.
535
+ */
536
+ activateAssetSimulate(req: ActivateAssetSimulateRequest): Promise<SimulateTxResponse>;
537
+ /** Cognito-auth. Submit del add_context_rule firmado (mismo shape que submitTx). */
538
+ activateAssetSubmit(req: SubmitTxRequest): Promise<SubmitTxResponse>;
515
539
  /** Cognito-auth. Starts a KYC verification with Etherfuse. */
516
540
  kycStart(): Promise<KycStartResponse>;
517
541
  /** Cognito-auth. Reads the current user's KYC status. */
@@ -632,4 +656,4 @@ declare class NetworkError extends AccesslyApiError {
632
656
  */
633
657
  declare function errorForResponse(status: number, body: unknown, requestId: string | undefined): AccesslyApiError;
634
658
 
635
- export { AccesslyApiClient, type AccesslyApiClientOptions, AccesslyApiError, type AccesslyApiErrorOptions, AccesslyEndpoints, AuthError, type Base64String, type CreateWalletRequest, type CreateWalletResponse, type EncryptedFragmentWire, type FinalizeRecoveryRequest, type FinalizeRecoveryResponse, type GetFragment2Request, type GetFragment2Response, type GetFragment3Response, type GetWalletResponse, type HealthResponse, type HexString, type IdTokenProvider, type Json, type KycStartResponse, NetworkError, NotFoundError, type OrderAction, type OrderRequest, type OrderResponse, RateLimitError, type RecoveryOtpRequestInput, type RecoveryOtpRequestResponse, type RecoveryOtpVerifyInput, type RecoveryOtpVerifyResponse, type RequestOptions, ServerError, type SimulateRotateSignerRequest, type SimulateRotateSignerResponse, type SimulateTxRequest, type SimulateTxResponse, type SubmitTxRequest, type SubmitTxResponse, type TelemetryEvent, type TelemetrySink, type TransferAsset, ValidationError, type WalletActivityEvent, type WalletActivityResponse, type WalletBalanceResponse, type WalletHistoryItem, type WalletHistoryRequestOptions, type WalletHistoryResponse, errorForResponse };
659
+ export { AccesslyApiClient, type AccesslyApiClientOptions, AccesslyApiError, type AccesslyApiErrorOptions, AccesslyEndpoints, type ActivatableAsset, type ActivateAssetSimulateRequest, AuthError, type Base64String, type CreateWalletRequest, type CreateWalletResponse, type EncryptedFragmentWire, type FinalizeRecoveryRequest, type FinalizeRecoveryResponse, type GetFragment2Request, type GetFragment2Response, type GetFragment3Response, type GetWalletResponse, type HealthResponse, type HexString, type IdTokenProvider, type Json, type KycStartResponse, NetworkError, NotFoundError, type OrderAction, type OrderRequest, type OrderResponse, RateLimitError, type RecoveryOtpRequestInput, type RecoveryOtpRequestResponse, type RecoveryOtpVerifyInput, type RecoveryOtpVerifyResponse, type RequestOptions, ServerError, type SimulateRotateSignerRequest, type SimulateRotateSignerResponse, type SimulateTxRequest, type SimulateTxResponse, type SubmitTxRequest, type SubmitTxResponse, type TelemetryEvent, type TelemetrySink, type TransferAsset, ValidationError, type WalletActivityEvent, type WalletActivityResponse, type WalletBalanceResponse, type WalletHistoryItem, type WalletHistoryRequestOptions, type WalletHistoryResponse, errorForResponse };
package/dist/api/index.js CHANGED
@@ -295,6 +295,28 @@ var AccesslyEndpoints = class {
295
295
  submitTx(req) {
296
296
  return this.client.post("/tx/submit", req);
297
297
  }
298
+ /**
299
+ * Cognito-auth. Simula `smart_account.add_context_rule(...)` para activar un
300
+ * nuevo asset (e.g. USDC) en una wallet ya deployada. Caso típico: wallets
301
+ * pre-1.4 que vienen con rule 0 = XLM solo y necesitan agregar rule N+1
302
+ * para USDC sin re-deployar.
303
+ *
304
+ * Response shape idéntico a `simulateTx` — el SDK firma el `auth_digest` con
305
+ * el mismo passkey contra la regla admin-cfg.
306
+ */
307
+ activateAssetSimulate(req) {
308
+ return this.client.post(
309
+ "/tx/activate-asset/simulate",
310
+ req
311
+ );
312
+ }
313
+ /** Cognito-auth. Submit del add_context_rule firmado (mismo shape que submitTx). */
314
+ activateAssetSubmit(req) {
315
+ return this.client.post(
316
+ "/tx/activate-asset/submit",
317
+ req
318
+ );
319
+ }
298
320
  /** Cognito-auth. Starts a KYC verification with Etherfuse. */
299
321
  kycStart() {
300
322
  return this.client.post("/kyc");
@@ -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 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 /** 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 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"]}
package/dist/index.cjs CHANGED
@@ -1126,6 +1126,28 @@ var AccesslyEndpoints = class {
1126
1126
  submitTx(req) {
1127
1127
  return this.client.post("/tx/submit", req);
1128
1128
  }
1129
+ /**
1130
+ * Cognito-auth. Simula `smart_account.add_context_rule(...)` para activar un
1131
+ * nuevo asset (e.g. USDC) en una wallet ya deployada. Caso típico: wallets
1132
+ * pre-1.4 que vienen con rule 0 = XLM solo y necesitan agregar rule N+1
1133
+ * para USDC sin re-deployar.
1134
+ *
1135
+ * Response shape idéntico a `simulateTx` — el SDK firma el `auth_digest` con
1136
+ * el mismo passkey contra la regla admin-cfg.
1137
+ */
1138
+ activateAssetSimulate(req) {
1139
+ return this.client.post(
1140
+ "/tx/activate-asset/simulate",
1141
+ req
1142
+ );
1143
+ }
1144
+ /** Cognito-auth. Submit del add_context_rule firmado (mismo shape que submitTx). */
1145
+ activateAssetSubmit(req) {
1146
+ return this.client.post(
1147
+ "/tx/activate-asset/submit",
1148
+ req
1149
+ );
1150
+ }
1129
1151
  /** Cognito-auth. Starts a KYC verification with Etherfuse. */
1130
1152
  kycStart() {
1131
1153
  return this.client.post("/kyc");