@accesly/core 1.5.0 → 1.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -319,6 +319,24 @@ var AccesslyEndpoints = class {
319
319
  req
320
320
  );
321
321
  }
322
+ /**
323
+ * Cognito-auth. Cotiza un swap XLM↔USDC via Soroswap Aggregator y devuelve
324
+ * el material para que el SDK firme la auth entry contra la regla
325
+ * biometric-tx del asset de entrada.
326
+ */
327
+ swapSimulate(req) {
328
+ return this.client.post(
329
+ "/tx/swap/simulate",
330
+ req
331
+ );
332
+ }
333
+ /** Cognito-auth. Submit del swap firmado (mismo shape que submitTx). */
334
+ swapSubmit(req) {
335
+ return this.client.post(
336
+ "/tx/swap/submit",
337
+ req
338
+ );
339
+ }
322
340
  /** Cognito-auth. Starts a KYC verification with Etherfuse. */
323
341
  kycStart() {
324
342
  return this.client.post("/kyc");
@@ -335,6 +353,17 @@ var AccesslyEndpoints = class {
335
353
  offramp(req) {
336
354
  return this.client.post("/offramp", req);
337
355
  }
356
+ /**
357
+ * Cognito-auth. Registra una CLABE mexicana en el customer Etherfuse del
358
+ * usuario. Requiere KYC pre-existente. Devuelve un `bankAccountId` que se
359
+ * usa después en `offramp({ bankAccountId, ... })`.
360
+ */
361
+ registerBankAccount(req) {
362
+ return this.client.post(
363
+ "/kyc/bank-accounts",
364
+ req
365
+ );
366
+ }
338
367
  /* ── v1.1.0: read-only wallet data ─────────────────────────────────────── */
339
368
  /**
340
369
  * Anónimo. Balance XLM del Smart Account (vía Soroban RPC, cached ~5s).
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/api/errors.ts","../../src/api/client.ts","../../src/api/endpoints.ts"],"names":[],"mappings":";;;AAmBO,IAAM,gBAAA,GAAN,cAA+B,KAAA,CAAM;AAAA,EACjC,MAAA;AAAA,EACA,IAAA;AAAA,EACA,SAAA;AAAA,EACS,KAAA;AAAA,EAElB,WAAA,CAAY,SAAiB,IAAA,EAA+B;AAC1D,IAAA,KAAA,CAAM,OAAO,CAAA;AACb,IAAA,IAAA,CAAK,IAAA,GAAO,kBAAA;AACZ,IAAA,IAAA,CAAK,SAAS,IAAA,CAAK,MAAA;AACnB,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA,CAAK,IAAA,IAAQ,CAAA,KAAA,EAAQ,KAAK,MAAM,CAAA,CAAA;AAC5C,IAAA,IAAA,CAAK,YAAY,IAAA,CAAK,SAAA;AACtB,IAAA,IAAA,CAAK,QAAQ,IAAA,CAAK,KAAA;AAAA,EACpB;AACF;AAGO,IAAM,SAAA,GAAN,cAAwB,gBAAA,CAAiB;AAAA,EAC9C,WAAA,CAAY,SAAiB,IAAA,EAA+B;AAC1D,IAAA,KAAA,CAAM,SAAS,IAAI,CAAA;AACnB,IAAA,IAAA,CAAK,IAAA,GAAO,WAAA;AAAA,EACd;AACF;AAGO,IAAM,eAAA,GAAN,cAA8B,gBAAA,CAAiB;AAAA,EACpD,WAAA,CAAY,SAAiB,IAAA,EAA+B;AAC1D,IAAA,KAAA,CAAM,SAAS,IAAI,CAAA;AACnB,IAAA,IAAA,CAAK,IAAA,GAAO,iBAAA;AAAA,EACd;AACF;AAGO,IAAM,aAAA,GAAN,cAA4B,gBAAA,CAAiB;AAAA,EAClD,WAAA,CAAY,SAAiB,IAAA,EAA+B;AAC1D,IAAA,KAAA,CAAM,SAAS,IAAI,CAAA;AACnB,IAAA,IAAA,CAAK,IAAA,GAAO,eAAA;AAAA,EACd;AACF;AAGO,IAAM,cAAA,GAAN,cAA6B,gBAAA,CAAiB;AAAA,EAC1C,iBAAA;AAAA,EAET,WAAA,CACE,SACA,IAAA,EACA;AACA,IAAA,KAAA,CAAM,SAAS,IAAI,CAAA;AACnB,IAAA,IAAA,CAAK,IAAA,GAAO,gBAAA;AACZ,IAAA,IAAA,CAAK,oBAAoB,IAAA,CAAK,iBAAA;AAAA,EAChC;AACF;AAGO,IAAM,WAAA,GAAN,cAA0B,gBAAA,CAAiB;AAAA,EAChD,WAAA,CAAY,SAAiB,IAAA,EAA+B;AAC1D,IAAA,KAAA,CAAM,SAAS,IAAI,CAAA;AACnB,IAAA,IAAA,CAAK,IAAA,GAAO,aAAA;AAAA,EACd;AACF;AAGO,IAAM,YAAA,GAAN,cAA2B,gBAAA,CAAiB;AAAA,EACjD,WAAA,CAAY,SAAiB,IAAA,EAA+C;AAC1E,IAAA,KAAA,CAAM,SAAS,EAAE,GAAG,IAAA,EAAM,MAAA,EAAQ,GAAG,CAAA;AACrC,IAAA,IAAA,CAAK,IAAA,GAAO,cAAA;AAAA,EACd;AACF;AAKO,SAAS,gBAAA,CACd,MAAA,EACA,IAAA,EACA,SAAA,EACkB;AAClB,EAAA,MAAM,OAAA,GAAU,cAAA,CAAe,IAAI,CAAA,IAAK,QAAQ,MAAM,CAAA,CAAA;AACtD,EAAA,MAAM,OAAgC,EAAE,MAAA,EAAQ,MAAM,WAAA,CAAY,IAAI,GAAG,SAAA,EAAU;AACnF,EAAA,IAAI,MAAA,KAAW,OAAO,MAAA,KAAW,GAAA,SAAY,IAAI,SAAA,CAAU,SAAS,IAAI,CAAA;AACxE,EAAA,IAAI,WAAW,GAAA,EAAK,OAAO,IAAI,aAAA,CAAc,SAAS,IAAI,CAAA;AAC1D,EAAA,IAAI,WAAW,GAAA,EAAK;AAClB,IAAA,OAAO,IAAI,eAAe,OAAA,EAAS;AAAA,MACjC,GAAG,IAAA;AAAA,MACH,iBAAA,EAAmB,kBAAkB,IAAI;AAAA,KAC1C,CAAA;AAAA,EACH;AACA,EAAA,IAAI,MAAA,IAAU,OAAO,MAAA,GAAS,GAAA,SAAY,IAAI,eAAA,CAAgB,SAAS,IAAI,CAAA;AAC3E,EAAA,IAAI,UAAU,GAAA,EAAK,OAAO,IAAI,WAAA,CAAY,SAAS,IAAI,CAAA;AACvD,EAAA,OAAO,IAAI,gBAAA,CAAiB,OAAA,EAAS,IAAI,CAAA;AAC3C;AAEA,SAAS,eAAe,IAAA,EAAmC;AACzD,EAAA,IAAI,IAAA,IAAQ,OAAO,IAAA,KAAS,QAAA,EAAU;AACpC,IAAA,MAAM,CAAA,GAAI,IAAA;AACV,IAAA,IAAI,OAAO,CAAA,CAAE,OAAA,KAAY,QAAA,SAAiB,CAAA,CAAE,OAAA;AAC5C,IAAA,IAAI,OAAO,CAAA,CAAE,KAAA,KAAU,QAAA,SAAiB,CAAA,CAAE,KAAA;AAAA,EAC5C;AACA,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,YAAY,IAAA,EAAmC;AACtD,EAAA,IAAI,IAAA,IAAQ,OAAO,IAAA,KAAS,QAAA,EAAU;AACpC,IAAA,MAAM,CAAA,GAAI,IAAA;AACV,IAAA,IAAI,OAAO,CAAA,CAAE,IAAA,KAAS,QAAA,SAAiB,CAAA,CAAE,IAAA;AAAA,EAC3C;AACA,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,kBAAkB,IAAA,EAAmC;AAC5D,EAAA,IAAI,IAAA,IAAQ,OAAO,IAAA,KAAS,QAAA,EAAU;AACpC,IAAA,MAAM,CAAA,GAAI,IAAA;AACV,IAAA,IAAI,OAAO,EAAE,UAAA,KAAe,QAAA,IAAY,EAAE,UAAA,IAAc,CAAA,SAAU,CAAA,CAAE,UAAA;AAAA,EACtE;AACA,EAAA,OAAO,MAAA;AACT;;;AC7DA,IAAM,kBAAA,mBAA8C,IAAI,GAAA,CAAI,CAAC,KAAK,CAAC,CAAA;AAE5D,IAAM,oBAAN,MAAwB;AAAA,EACZ,OAAA;AAAA,EACA,UAAA;AAAA,EACA,SAAA;AAAA,EACA,UAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EAEjB,YAAY,IAAA,EAAgC;AAC1C,IAAA,IAAI,CAAC,IAAA,CAAK,OAAA,EAAS,MAAM,IAAI,UAAU,wCAAwC,CAAA;AAC/E,IAAA,IAAA,CAAK,OAAA,GAAU,IAAA,CAAK,OAAA,CAAQ,OAAA,CAAQ,QAAQ,EAAE,CAAA;AAC9C,IAAA,IAAA,CAAK,aAAa,IAAA,CAAK,UAAA;AAGvB,IAAA,IAAA,CAAK,YAAY,IAAA,CAAK,SAAA,IAAa,UAAA,CAAW,KAAA,CAAM,KAAK,UAAU,CAAA;AACnE,IAAA,IAAA,CAAK,UAAA,GAAa,KAAK,UAAA,IAAc,CAAA;AACrC,IAAA,IAAA,CAAK,SAAA,GAAY,KAAK,SAAA,IAAa,GAAA;AACnC,IAAA,IAAA,CAAK,SAAA,GAAY,IAAA,CAAK,SAAA,KAAc,MAAM,MAAA,CAAA;AAC1C,IAAA,IAAA,CAAK,SAAA,GAAY,KAAK,SAAA,IAAa,cAAA;AAAA,EACrC;AAAA,EAEA,GAAA,CAAO,MAAc,IAAA,EAAmC;AACtD,IAAA,OAAO,IAAA,CAAK,OAAA,CAAW,KAAA,EAAO,IAAA,EAAM,QAAW,IAAI,CAAA;AAAA,EACrD;AAAA,EAEA,IAAA,CAAQ,IAAA,EAAc,IAAA,EAAa,IAAA,EAAmC;AACpE,IAAA,OAAO,IAAA,CAAK,OAAA,CAAW,MAAA,EAAQ,IAAA,EAAM,MAAM,IAAI,CAAA;AAAA,EACjD;AAAA,EAEA,GAAA,CAAO,IAAA,EAAc,IAAA,EAAa,IAAA,EAAmC;AACnE,IAAA,OAAO,IAAA,CAAK,OAAA,CAAW,KAAA,EAAO,IAAA,EAAM,MAAM,IAAI,CAAA;AAAA,EAChD;AAAA,EAEA,MAAA,CAAU,MAAc,IAAA,EAAmC;AACzD,IAAA,OAAO,IAAA,CAAK,OAAA,CAAW,QAAA,EAAU,IAAA,EAAM,QAAW,IAAI,CAAA;AAAA,EACxD;AAAA,EAEA,KAAA,CAAS,IAAA,EAAc,IAAA,EAAa,IAAA,EAAmC;AACrE,IAAA,OAAO,IAAA,CAAK,OAAA,CAAW,OAAA,EAAS,IAAA,EAAM,MAAM,IAAI,CAAA;AAAA,EAClD;AAAA,EAEA,MAAc,OAAA,CACZ,MAAA,EACA,IAAA,EACA,MACA,IAAA,EACY;AACZ,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,QAAA,CAAS,IAAA,EAAM,MAAM,KAAK,CAAA;AAC3C,IAAA,MAAM,WAAA,GAAc,IAAA,EAAM,KAAA,IAAS,kBAAA,CAAmB,IAAI,MAAM,CAAA;AAChE,IAAA,MAAM,UAAU,IAAA,CAAK,UAAA,GAAa,MAAM,IAAA,CAAK,YAAW,GAAI,IAAA;AAE5D,IAAA,MAAM,OAAA,GAAkC;AAAA,MACtC,MAAA,EAAQ,kBAAA;AAAA,MACR,GAAG,IAAA,EAAM;AAAA,KACX;AACA,IAAA,IAAI,IAAA,KAAS,MAAA,EAAW,OAAA,CAAQ,cAAc,CAAA,GAAI,kBAAA;AAClD,IAAA,IAAI,OAAA,EAAS;AAGX,MAAA,OAAA,CAAQ,eAAe,CAAA,GAAI,OAAA;AAAA,IAC7B;AAEA,IAAA,MAAM,IAAA,GAAoB,EAAE,MAAA,EAAQ,OAAA,EAAQ;AAC5C,IAAA,IAAI,SAAS,MAAA,EAAW,IAAA,CAAK,IAAA,GAAO,IAAA,CAAK,UAAU,IAAI,CAAA;AAEvD,IAAA,IAAI,OAAA,GAAU,CAAA;AACd,IAAA,IAAI,SAAA;AACJ,IAAA,MAAM,WAAA,GAAc,WAAA,GAAc,IAAA,CAAK,UAAA,GAAa,CAAA,GAAI,CAAA;AAExD,IAAA,OAAO,UAAU,WAAA,EAAa;AAC5B,MAAA,OAAA,IAAW,CAAA;AACX,MAAA,IAAA,CAAK,UAAU,EAAE,IAAA,EAAM,WAAW,MAAA,EAAQ,GAAA,EAAK,SAAS,CAAA;AACxD,MAAA,MAAM,SAAA,GAAY,KAAK,GAAA,EAAI;AAC3B,MAAA,MAAM,EAAA,GAAK,IAAI,eAAA,EAAgB;AAC/B,MAAA,MAAM,YAAY,UAAA,CAAW,MAAM,GAAG,KAAA,EAAM,EAAG,KAAK,SAAS,CAAA;AAC7D,MAAA,MAAM,MAAA,GAAS,cAAA,CAAe,IAAA,EAAM,MAAA,EAAQ,GAAG,MAAM,CAAA;AACrD,MAAA,IAAI;AACF,QAAA,MAAM,GAAA,GAAM,MAAM,IAAA,CAAK,SAAA,CAAU,KAAK,EAAE,GAAG,IAAA,EAAM,MAAA,EAAQ,CAAA;AACzD,QAAA,MAAM,UAAA,GAAa,IAAA,CAAK,GAAA,EAAI,GAAI,SAAA;AAChC,QAAA,IAAA,CAAK,SAAA,CAAU;AAAA,UACb,IAAA,EAAM,UAAA;AAAA,UACN,MAAA;AAAA,UACA,GAAA;AAAA,UACA,QAAQ,GAAA,CAAI,MAAA;AAAA,UACZ,UAAA;AAAA,UACA;AAAA,SACD,CAAA;AACD,QAAA,YAAA,CAAa,SAAS,CAAA;AAEtB,QAAA,IAAI,GAAA,CAAI,MAAA,IAAU,GAAA,IAAO,WAAA,IAAe,UAAU,WAAA,EAAa;AAC7D,UAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,SAAA,CAAU,OAAO,CAAA;AACpC,UAAA,IAAA,CAAK,SAAA,CAAU,EAAE,IAAA,EAAM,OAAA,EAAS,QAAQ,GAAA,EAAK,OAAA,EAAS,OAAA,EAAS,KAAA,EAAO,CAAA;AACtE,UAAA,MAAM,MAAM,KAAK,CAAA;AACjB,UAAA;AAAA,QACF;AAEA,QAAA,OAAO,MAAM,IAAA,CAAK,cAAA,CAAkB,GAAG,CAAA;AAAA,MACzC,SAAS,GAAA,EAAK;AACZ,QAAA,YAAA,CAAa,SAAS,CAAA;AACtB,QAAA,IAAI,eAAe,gBAAA,EAAkB;AAEnC,UAAA,MAAM,GAAA;AAAA,QACR;AACA,QAAA,MAAM,WAAA,GAAc,cAAc,GAAG,CAAA;AACrC,QAAA,IAAA,CAAK,SAAA,CAAU,EAAE,IAAA,EAAM,OAAA,EAAS,QAAQ,GAAA,EAAK,KAAA,EAAO,WAAA,EAAa,OAAA,EAAS,CAAA;AAC1E,QAAA,SAAA,GAAY,GAAA;AACZ,QAAA,IAAI,WAAA,IAAe,UAAU,WAAA,EAAa;AACxC,UAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,SAAA,CAAU,OAAO,CAAA;AACpC,UAAA,IAAA,CAAK,SAAA,CAAU,EAAE,IAAA,EAAM,OAAA,EAAS,QAAQ,GAAA,EAAK,OAAA,EAAS,OAAA,EAAS,KAAA,EAAO,CAAA;AACtE,UAAA,MAAM,MAAM,KAAK,CAAA;AACjB,UAAA;AAAA,QACF;AACA,QAAA,MAAM,IAAI,aAAa,CAAA,cAAA,EAAiB,WAAW,IAAI,EAAE,KAAA,EAAO,KAAK,CAAA;AAAA,MACvE;AAAA,IACF;AAGA,IAAA,MAAM,IAAI,YAAA,CAAa,mBAAA,EAAqB,EAAE,KAAA,EAAO,WAAW,CAAA;AAAA,EAClE;AAAA,EAEA,MAAc,eAAkB,GAAA,EAA2B;AACzD,IAAA,MAAM,SAAA,GACJ,GAAA,CAAI,OAAA,CAAQ,GAAA,CAAI,kBAAkB,KAAK,GAAA,CAAI,OAAA,CAAQ,GAAA,CAAI,cAAc,CAAA,IAAK,MAAA;AAC5E,IAAA,IAAI,IAAI,EAAA,EAAI;AACV,MAAA,IAAI,GAAA,CAAI,MAAA,KAAW,GAAA,EAAK,OAAO,MAAA;AAC/B,MAAA,MAAM,IAAA,GAAO,MAAM,GAAA,CAAI,IAAA,EAAK;AAC5B,MAAA,IAAI,IAAA,CAAK,MAAA,KAAW,CAAA,EAAG,OAAO,MAAA;AAC9B,MAAA,IAAI;AACF,QAAA,OAAO,IAAA,CAAK,MAAM,IAAI,CAAA;AAAA,MACxB,SAAS,GAAA,EAAK;AACZ,QAAA,MAAM,IAAI,YAAA,CAAa,4BAAA,EAA8B,EAAE,KAAA,EAAO,GAAA,EAAK,WAAW,CAAA;AAAA,MAChF;AAAA,IACF;AAEA,IAAA,IAAI,MAAA;AACJ,IAAA,IAAI;AACF,MAAA,MAAM,IAAA,GAAO,MAAM,GAAA,CAAI,IAAA,EAAK;AAC5B,MAAA,MAAA,GAAS,KAAK,MAAA,GAAS,CAAA,GAAI,IAAA,CAAK,KAAA,CAAM,IAAI,CAAA,GAAI,KAAA,CAAA;AAAA,IAChD,CAAA,CAAA,MAAQ;AACN,MAAA,MAAA,GAAS,MAAA;AAAA,IACX;AACA,IAAA,MAAM,gBAAA,CAAiB,GAAA,CAAI,MAAA,EAAQ,MAAA,EAAQ,SAAS,CAAA;AAAA,EACtD;AAAA,EAEQ,QAAA,CAAS,MAAc,KAAA,EAAyC;AACtE,IAAA,MAAM,YAAY,IAAA,CAAK,UAAA,CAAW,GAAG,CAAA,GAAI,IAAA,GAAO,IAAI,IAAI,CAAA,CAAA;AACxD,IAAA,MAAM,GAAA,GAAM,IAAI,GAAA,CAAI,IAAA,CAAK,UAAU,SAAS,CAAA;AAC5C,IAAA,IAAI,KAAA,EAAO;AACT,MAAA,KAAA,MAAW,CAAC,CAAA,EAAG,CAAC,KAAK,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAA,EAAG;AAC1C,QAAA,IAAI,MAAM,MAAA,EAAW;AACrB,QAAA,GAAA,CAAI,YAAA,CAAa,GAAA,CAAI,CAAA,EAAG,MAAA,CAAO,CAAC,CAAC,CAAA;AAAA,MACnC;AAAA,IACF;AACA,IAAA,OAAO,IAAI,QAAA,EAAS;AAAA,EACtB;AACF;AAEA,SAAS,eAAe,OAAA,EAAyB;AAC/C,EAAA,MAAM,IAAA,GAAO,GAAA,GAAM,CAAA,KAAM,OAAA,GAAU,CAAA,CAAA;AACnC,EAAA,MAAM,SAAS,IAAA,GAAO,GAAA,IAAO,IAAA,CAAK,MAAA,KAAW,CAAA,GAAI,CAAA,CAAA;AACjD,EAAA,OAAO,KAAK,GAAA,CAAI,CAAA,EAAG,KAAK,KAAA,CAAM,IAAA,GAAO,MAAM,CAAC,CAAA;AAC9C;AAEA,SAAS,MAAM,EAAA,EAA2B;AACxC,EAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,KAAY;AAC9B,IAAA,UAAA,CAAW,SAAS,EAAE,CAAA;AAAA,EACxB,CAAC,CAAA;AACH;AAEA,SAAS,cAAc,GAAA,EAAsB;AAC3C,EAAA,IAAI,GAAA,YAAe,OAAO,OAAO,CAAA,EAAG,IAAI,IAAI,CAAA,EAAA,EAAK,IAAI,OAAO,CAAA,CAAA;AAC5D,EAAA,OAAO,OAAO,GAAG,CAAA;AACnB;AAEA,SAAS,cAAA,CAAe,GAA4B,CAAA,EAA6B;AAC/E,EAAA,IAAI,CAAC,GAAG,OAAO,CAAA;AACf,EAAA,IAAI,CAAA,CAAE,SAAS,OAAO,CAAA;AACtB,EAAA,IAAI,CAAA,CAAE,SAAS,OAAO,CAAA;AACtB,EAAA,MAAM,EAAA,GAAK,IAAI,eAAA,EAAgB;AAC/B,EAAA,MAAM,OAAA,GAAU,MAAY,EAAA,CAAG,KAAA,EAAM;AACrC,EAAA,CAAA,CAAE,iBAAiB,OAAA,EAAS,OAAA,EAAS,EAAE,IAAA,EAAM,MAAM,CAAA;AACnD,EAAA,CAAA,CAAE,iBAAiB,OAAA,EAAS,OAAA,EAAS,EAAE,IAAA,EAAM,MAAM,CAAA;AACnD,EAAA,OAAO,EAAA,CAAG,MAAA;AACZ;;;AC5NO,IAAM,oBAAN,MAAwB;AAAA,EAC7B,YAA6B,MAAA,EAA2B;AAA3B,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA;AAAA,EAA4B;AAAA,EAA5B,MAAA;AAAA;AAAA,EAG7B,MAAA,GAAkC;AAChC,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,GAAA,CAAoB,SAAS,CAAA;AAAA,EAClD;AAAA;AAAA,EAGA,aAAa,GAAA,EAAyD;AACpE,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,IAAA,CAA2B,UAAA,EAAY,GAAsB,CAAA;AAAA,EAClF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAM,SAAA,GAA+C;AACnD,IAAA,IAAI;AACF,MAAA,OAAO,MAAM,IAAA,CAAK,MAAA,CAAO,GAAA,CAAuB,UAAU,CAAA;AAAA,IAC5D,SAAS,GAAA,EAAK;AACZ,MAAA,IAAI,GAAA,YAAe,eAAe,OAAO,IAAA;AACzC,MAAA,MAAM,GAAA;AAAA,IACR;AAAA,EACF;AAAA;AAAA,EAGA,aAAa,GAAA,EAAyD;AACpE,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,IAAA,CAA2B,cAAA,EAAgB,GAAsB,CAAA;AAAA,EACtF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,WAAW,GAAA,EAAqD;AAC9D,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,IAAA,CAAyB,cAAA,EAAgB,GAAsB,CAAA;AAAA,EACpF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,SAAS,GAAA,EAAiD;AACxD,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,IAAA,CAAuB,YAAA,EAAc,GAAsB,CAAA;AAAA,EAChF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,sBACE,GAAA,EAC6B;AAC7B,IAAA,OAAO,KAAK,MAAA,CAAO,IAAA;AAAA,MACjB,6BAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AAAA;AAAA,EAGA,oBAAoB,GAAA,EAAiD;AACnE,IAAA,OAAO,KAAK,MAAA,CAAO,IAAA;AAAA,MACjB,2BAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AAAA;AAAA,EAGA,QAAA,GAAsC;AACpC,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,IAAA,CAAuB,MAAM,CAAA;AAAA,EAClD;AAAA;AAAA,EAGA,SAAA,GAAuC;AACrC,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,GAAA,CAAsB,MAAM,CAAA;AAAA,EACjD;AAAA;AAAA,EAGA,OAAO,GAAA,EAA2C;AAChD,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,IAAA,CAAoB,SAAA,EAAW,GAAsB,CAAA;AAAA,EAC1E;AAAA;AAAA,EAGA,QAAQ,GAAA,EAA2C;AACjD,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,IAAA,CAAoB,UAAA,EAAY,GAAsB,CAAA;AAAA,EAC3E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,cAAc,OAAA,EAAiD;AAC7D,IAAA,OAAO,KAAK,MAAA,CAAO,GAAA;AAAA,MACjB,CAAA,SAAA,EAAY,kBAAA,CAAmB,OAAO,CAAC,CAAA,QAAA;AAAA,KACzC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,cAAA,CAAe,SAAiB,KAAA,EAAiD;AAC/E,IAAA,MAAM,EAAA,GAAK,UAAU,MAAA,GAAY,CAAA,OAAA,EAAU,mBAAmB,MAAA,CAAO,KAAK,CAAC,CAAC,CAAA,CAAA,GAAK,EAAA;AACjF,IAAA,OAAO,KAAK,MAAA,CAAO,GAAA;AAAA,MACjB,CAAA,SAAA,EAAY,kBAAA,CAAmB,OAAO,CAAC,YAAY,EAAE,CAAA;AAAA,KACvD;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,aAAA,CACE,OAAA,EACA,IAAA,GAAoC,EAAC,EACL;AAChC,IAAA,MAAM,MAAA,GAAS,IAAI,eAAA,EAAgB;AACnC,IAAA,IAAI,KAAK,kBAAA,EAAoB,MAAA,CAAO,GAAA,CAAI,UAAA,EAAY,KAAK,kBAAkB,CAAA;AAC3E,IAAA,IAAI,KAAK,eAAA,EAAiB,MAAA,CAAO,GAAA,CAAI,UAAA,EAAY,KAAK,eAAe,CAAA;AACrE,IAAA,IAAI,IAAA,CAAK,sBAAsB,MAAA,EAAW;AACxC,MAAA,MAAA,CAAO,GAAA,CAAI,WAAA,EAAa,MAAA,CAAO,IAAA,CAAK,iBAAiB,CAAC,CAAA;AAAA,IACxD;AACA,IAAA,MAAM,EAAA,GAAK,OAAO,QAAA,EAAS;AAC3B,IAAA,OAAO,KAAK,MAAA,CAAO,GAAA;AAAA,MACjB,CAAA,SAAA,EAAY,mBAAmB,OAAO,CAAC,WAAW,EAAA,GAAK,GAAA,GAAM,KAAK,EAAE,CAAA;AAAA,KACtE;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,mBAAmB,KAAA,EAAqE;AACtF,IAAA,OAAO,KAAK,MAAA,CAAO,IAAA;AAAA,MACjB,uBAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,kBAAkB,KAAA,EAAmE;AACnF,IAAA,OAAO,KAAK,MAAA,CAAO,IAAA;AAAA,MACjB,sBAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,aAAa,WAAA,EAAoD;AAC/D,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,GAAA,CAA0B,cAAA,EAAgB;AAAA,MAC3D,OAAA,EAAS,EAAE,gBAAA,EAAkB,WAAA;AAAY,KAC1C,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,oBAAA,CACE,aACA,OAAA,EACuC;AACvC,IAAA,OAAO,KAAK,MAAA,CAAO,IAAA;AAAA,MACjB,kCAAA;AAAA,MACA,OAAA;AAAA,MACA;AAAA,QACE,OAAA,EAAS,EAAE,gBAAA,EAAkB,WAAA;AAAY;AAC3C,KACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,gBAAA,CACE,aACA,OAAA,EACmC;AACnC,IAAA,OAAO,KAAK,MAAA,CAAO,IAAA;AAAA,MACjB,oBAAA;AAAA,MACA,OAAA;AAAA,MACA;AAAA,QACE,OAAA,EAAS,EAAE,gBAAA,EAAkB,WAAA;AAAY;AAC3C,KACF;AAAA,EACF;AACF","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"]}
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 RegisterBankAccountRequest,\n RegisterBankAccountResponse,\n RecoveryOtpRequestInput,\n RecoveryOtpRequestResponse,\n RecoveryOtpVerifyInput,\n RecoveryOtpVerifyResponse,\n SimulateRotateSignerRequest,\n SimulateRotateSignerResponse,\n ActivateAssetSimulateRequest,\n SimulateSwapRequest,\n SimulateSwapResponse,\n SimulateTxRequest,\n SimulateTxResponse,\n SubmitTxRequest,\n SubmitTxResponse,\n WalletActivityResponse,\n WalletBalanceResponse,\n WalletHistoryRequestOptions,\n WalletHistoryResponse,\n} from '../types/api.js';\nimport { NotFoundError } from './errors.js';\nimport type { AccesslyApiClient, Json } from './client.js';\n\nexport class AccesslyEndpoints {\n constructor(private readonly client: AccesslyApiClient) {}\n\n /** Public liveness check. No auth header sent. */\n health(): Promise<HealthResponse> {\n return this.client.get<HealthResponse>('/health');\n }\n\n /** Cognito-auth. Deploys the user's Smart Account on Soroban. */\n createWallet(req: CreateWalletRequest): Promise<CreateWalletResponse> {\n return this.client.post<CreateWalletResponse>('/wallets', req as unknown as Json);\n }\n\n /**\n * Cognito-auth. Returns the user's already-deployed Smart Account metadata,\n * or `null` if the user has not yet completed `POST /wallets`.\n *\n * Idempotent — safe to call at the top of every authenticated session.\n * Cheap on the backend (metadata read, no KMS decrypt).\n */\n async getWallet(): Promise<GetWalletResponse | null> {\n try {\n return await this.client.get<GetWalletResponse>('/wallets');\n } catch (err) {\n if (err instanceof NotFoundError) return null;\n throw err;\n }\n }\n\n /** Cognito-auth. Returns F2 re-encrypted with a per-request session key. */\n getFragment2(req: GetFragment2Request): Promise<GetFragment2Response> {\n return this.client.post<GetFragment2Response>('/fragments/2', req as unknown as Json);\n }\n\n /**\n * Cognito-auth. Simula `XLM_SAC.transfer(from=smartAccount, to, amount)` y\n * devuelve los datos para que el SDK firme la auth entry client-side. NO\n * mueve fondos — solo prepara el material para `submitTx`.\n */\n simulateTx(req: SimulateTxRequest): Promise<SimulateTxResponse> {\n return this.client.post<SimulateTxResponse>('/tx/simulate', req as unknown as Json);\n }\n\n /**\n * Cognito-auth. Recibe la `SorobanAuthorizationEntry` firmada por el SDK +\n * el envelope que `simulateTx` devolvió. El backend re-simula con la firma\n * real, KMS-firma el envelope con `channels-fund` (developer-pays) y envía\n * a Soroban RPC. Devuelve el `txHash` para que la UI pueda mostrar el\n * resultado / link a explorer.\n */\n submitTx(req: SubmitTxRequest): Promise<SubmitTxResponse> {\n return this.client.post<SubmitTxResponse>('/tx/submit', req as unknown as Json);\n }\n\n /**\n * Cognito-auth. Simula `smart_account.add_context_rule(...)` para activar un\n * nuevo asset (e.g. USDC) en una wallet ya deployada. Caso típico: wallets\n * pre-1.4 que vienen con rule 0 = XLM solo y necesitan agregar rule N+1\n * para USDC sin re-deployar.\n *\n * Response shape idéntico a `simulateTx` — el SDK firma el `auth_digest` con\n * el mismo passkey contra la regla admin-cfg.\n */\n activateAssetSimulate(\n req: ActivateAssetSimulateRequest,\n ): Promise<SimulateTxResponse> {\n return this.client.post<SimulateTxResponse>(\n '/tx/activate-asset/simulate',\n req as unknown as Json,\n );\n }\n\n /** Cognito-auth. Submit del add_context_rule firmado (mismo shape que submitTx). */\n activateAssetSubmit(req: SubmitTxRequest): Promise<SubmitTxResponse> {\n return this.client.post<SubmitTxResponse>(\n '/tx/activate-asset/submit',\n req as unknown as Json,\n );\n }\n\n /**\n * Cognito-auth. Cotiza un swap XLM↔USDC via Soroswap Aggregator y devuelve\n * el material para que el SDK firme la auth entry contra la regla\n * biometric-tx del asset de entrada.\n */\n swapSimulate(req: SimulateSwapRequest): Promise<SimulateSwapResponse> {\n return this.client.post<SimulateSwapResponse>(\n '/tx/swap/simulate',\n req as unknown as Json,\n );\n }\n\n /** Cognito-auth. Submit del swap firmado (mismo shape que submitTx). */\n swapSubmit(req: SubmitTxRequest): Promise<SubmitTxResponse> {\n return this.client.post<SubmitTxResponse>(\n '/tx/swap/submit',\n req as unknown as Json,\n );\n }\n\n /** Cognito-auth. Starts a KYC verification with Etherfuse. */\n kycStart(): Promise<KycStartResponse> {\n return this.client.post<KycStartResponse>('/kyc');\n }\n\n /** Cognito-auth. Reads the current user's KYC status. */\n kycStatus(): Promise<KycStartResponse> {\n return this.client.get<KycStartResponse>('/kyc');\n }\n\n /** Cognito-auth. Quote or submit an MXN→USDC onramp order. */\n onramp(req: OrderRequest): Promise<OrderResponse> {\n return this.client.post<OrderResponse>('/onramp', req as unknown as Json);\n }\n\n /** Cognito-auth. Quote or submit a USDC→MXN offramp order. */\n offramp(req: OrderRequest): Promise<OrderResponse> {\n return this.client.post<OrderResponse>('/offramp', req as unknown as Json);\n }\n\n /**\n * Cognito-auth. Registra una CLABE mexicana en el customer Etherfuse del\n * usuario. Requiere KYC pre-existente. Devuelve un `bankAccountId` que se\n * usa después en `offramp({ bankAccountId, ... })`.\n */\n registerBankAccount(req: RegisterBankAccountRequest): Promise<RegisterBankAccountResponse> {\n return this.client.post<RegisterBankAccountResponse>(\n '/kyc/bank-accounts',\n req as unknown as Json,\n );\n }\n\n /* ── v1.1.0: read-only wallet data ─────────────────────────────────────── */\n\n /**\n * Anónimo. Balance XLM del Smart Account (vía Soroban RPC, cached ~5s).\n * No requiere JWT — la address en sí es pública on-chain.\n */\n walletBalance(address: string): Promise<WalletBalanceResponse> {\n return this.client.get<WalletBalanceResponse>(\n `/wallets/${encodeURIComponent(address)}/balance`,\n );\n }\n\n /**\n * Anónimo. Últimos eventos on-chain del Smart Account (rotate_signer,\n * transfers, etc.). Cacheado ~15s. `limit` default 20, max 50.\n */\n walletActivity(address: string, limit?: number): Promise<WalletActivityResponse> {\n const qs = limit !== undefined ? `?limit=${encodeURIComponent(String(limit))}` : '';\n return this.client.get<WalletActivityResponse>(\n `/wallets/${encodeURIComponent(address)}/activity${qs}`,\n );\n }\n\n /**\n * Anónimo. Historial completo del wallet — pre-decodificado server-side desde\n * Stellar Expert (que en browser está bloqueado por CORS). Devuelve items\n * tipados: `wallet-created`, `signer-rotated`, `transfer-in`, `transfer-out`.\n *\n * Cursor-based: pasa `saCursor` y/o `txCursor` para paginar atrás. El primer\n * fetch (sin cursors) incluye un evento sintético `wallet-created` desde la\n * metadata del contrato.\n */\n walletHistory(\n address: string,\n opts: WalletHistoryRequestOptions = {},\n ): Promise<WalletHistoryResponse> {\n const params = new URLSearchParams();\n if (opts.smartAccountCursor) params.set('saCursor', opts.smartAccountCursor);\n if (opts.transfersCursor) params.set('txCursor', opts.transfersCursor);\n if (opts.transferScanLimit !== undefined) {\n params.set('scanLimit', String(opts.transferScanLimit));\n }\n const qs = params.toString();\n return this.client.get<WalletHistoryResponse>(\n `/wallets/${encodeURIComponent(address)}/history${qs ? '?' + qs : ''}`,\n );\n }\n\n /* ── Recovery v2 (Fase 1, 2026-06-15) ──────────────────────────────────── */\n\n /**\n * Anónimo. Pide al backend que mande un OTP de 6 dígitos al email.\n *\n * Rate-limited: el backend rechaza con 429 si pediste otro hace menos de\n * 60s o más de 3 en la última hora. Anti-enumeración: la respuesta es 200\n * OK aunque el email no exista.\n */\n requestRecoveryOtp(input: RecoveryOtpRequestInput): Promise<RecoveryOtpRequestResponse> {\n return this.client.post<RecoveryOtpRequestResponse>(\n '/recovery/otp/request',\n input as unknown as Json,\n );\n }\n\n /**\n * Anónimo. Verifica el OTP. Si OK, devuelve un `recoveryJwt` que\n * autoriza los dos endpoints siguientes (`getFragment3`,\n * `finalizeRecovery`) durante 5 min.\n */\n verifyRecoveryOtp(input: RecoveryOtpVerifyInput): Promise<RecoveryOtpVerifyResponse> {\n return this.client.post<RecoveryOtpVerifyResponse>(\n '/recovery/otp/verify',\n input as unknown as Json,\n );\n }\n\n /**\n * Anónimo + header `X-Recovery-Jwt`. Devuelve `{fragmentF3Encrypted,\n * recoverySalt}`. El SDK descifra F3 con la `recoveryKey` derivada\n * client-side (PBKDF2(password, recoverySalt, 600k)).\n */\n getFragment3(recoveryJwt: string): Promise<GetFragment3Response> {\n return this.client.get<GetFragment3Response>('/fragments/3', {\n headers: { 'X-Recovery-Jwt': recoveryJwt },\n });\n }\n\n /**\n * Anónimo + header `X-Recovery-Jwt`. El backend arma + simula la tx\n * `rotate_signer(newOwner, newSecp256r1, newEmailCommit)` contra el Smart\n * Account del usuario y devuelve el material que el SDK necesita para\n * firmar la `SorobanAuthorizationEntry` con la seed VIEJA (reconstruida\n * por Shamir(F2_recovery, F3)) contra la regla `admin-cfg`.\n */\n simulateRotateSigner(\n recoveryJwt: string,\n payload: SimulateRotateSignerRequest,\n ): Promise<SimulateRotateSignerResponse> {\n return this.client.post<SimulateRotateSignerResponse>(\n '/recovery/simulate-rotate-signer',\n payload as unknown as Json,\n {\n headers: { 'X-Recovery-Jwt': recoveryJwt },\n },\n );\n }\n\n /**\n * Anónimo + header `X-Recovery-Jwt`. Submitea la tx `rotate_signer` firmada\n * por el SDK con la seed reconstruida (F2+F3) y persiste las nuevas\n * F1'/F2'/F3' en DDB. Idempotente del lado backend.\n */\n finalizeRecovery(\n recoveryJwt: string,\n payload: FinalizeRecoveryRequest,\n ): Promise<FinalizeRecoveryResponse> {\n return this.client.post<FinalizeRecoveryResponse>(\n '/recovery/finalize',\n payload as unknown as Json,\n {\n headers: { 'X-Recovery-Jwt': recoveryJwt },\n },\n );\n }\n}\n"]}
@@ -221,6 +221,39 @@ type ActivatableAsset = 'USDC';
221
221
  interface ActivateAssetSimulateRequest {
222
222
  readonly asset: ActivatableAsset;
223
223
  }
224
+ /**
225
+ * `POST /tx/swap/simulate` — cotiza un swap XLM↔USDC via Soroswap y devuelve
226
+ * el material que el SDK necesita para firmar la auth entry del Smart Account.
227
+ *
228
+ * El backend internamente:
229
+ * 1) Hits Soroswap `/quote` para descubrir path + amounts.
230
+ * 2) Hits Soroswap `/quote/build` para obtener el XDR del envelope.
231
+ * 3) Extrae la auth entry del SA + computa signature_payload_hash.
232
+ * 4) Devuelve `SimulateTxResponse` + el quote summary para mostrar en UI.
233
+ */
234
+ interface SimulateSwapRequest {
235
+ readonly fromAsset: TransferAsset;
236
+ readonly toAsset: TransferAsset;
237
+ /** Stroops del input (1e-7). */
238
+ readonly amountIn: string;
239
+ /** Tolerancia de slippage en basis points. Default 50 (0.5%). */
240
+ readonly slippageBps?: number;
241
+ }
242
+ interface SimulateSwapResponse extends SimulateTxResponse {
243
+ readonly quote: {
244
+ readonly fromAsset: TransferAsset;
245
+ readonly toAsset: TransferAsset;
246
+ readonly amountIn: string;
247
+ /** Stroops out proyectados (sin slippage aplicado). */
248
+ readonly amountOut: string;
249
+ /** Stroops min out aceptables (con slippage) — esto es lo que el router enforça. */
250
+ readonly minAmountOut: string;
251
+ /** "0.12" = 0.12% de price impact. */
252
+ readonly priceImpactPct: string;
253
+ /** `router` | `aggregator` | `sdex` — qué venue se usó. */
254
+ readonly platform: string;
255
+ };
256
+ }
224
257
  interface SimulateTxRequest {
225
258
  /**
226
259
  * Base-10 string del monto en unidades atómicas (1e-7 para ambos XLM y USDC).
@@ -287,7 +320,13 @@ interface OrderRequest {
287
320
  readonly amount: string;
288
321
  readonly walletAddress: string;
289
322
  readonly appId: string;
290
- /** Required for `offramp` `submit`: SPEI destination CLABE. */
323
+ /**
324
+ * Offramp v1.7+: `bankAccountId` ya registrada via POST /kyc/bank-accounts.
325
+ * Si la app legacy <1.7 manda `clabe` plana, el backend rechaza con 400
326
+ * (la real Etherfuse API no acepta CLABE pelada).
327
+ */
328
+ readonly bankAccountId?: string;
329
+ /** @deprecated v1.7+ — usar `bankAccountId`. */
291
330
  readonly clabe?: string;
292
331
  /** Required for `submit`: quote id returned by the previous `quote` call. */
293
332
  readonly quoteId?: string;
@@ -300,6 +339,27 @@ interface OrderResponse {
300
339
  readonly fxRate?: string;
301
340
  readonly expiresAt?: string;
302
341
  }
342
+ /** `POST /kyc/bank-accounts` body — registra CLABE mexicana para offramp. */
343
+ interface RegisterBankAccountRequest {
344
+ /** 18 dígitos. */
345
+ readonly clabe: string;
346
+ /** Nombre como aparece en el estado de cuenta. */
347
+ readonly holderName: string;
348
+ /** RFC con homoclave (13 personal, 12 moral). */
349
+ readonly holderRfc: string;
350
+ /** 18 chars (solo PERSONAL). */
351
+ readonly holderCurp?: string;
352
+ /** Default 'PERSONAL'. */
353
+ readonly accountType?: 'PERSONAL' | 'BUSINESS';
354
+ /** Label friendly para distinguir multiples cuentas. */
355
+ readonly label?: string;
356
+ }
357
+ interface RegisterBankAccountResponse {
358
+ readonly bankAccountId: string;
359
+ readonly status: 'pending' | 'approved' | 'rejected';
360
+ readonly label?: string;
361
+ readonly clabeLast4: string;
362
+ }
303
363
  /** `POST /recovery/otp/request` body. */
304
364
  interface RecoveryOtpRequestInput {
305
365
  /** Email del usuario en plano. El backend solo persiste `sha256(email)`. */
@@ -536,6 +596,14 @@ declare class AccesslyEndpoints {
536
596
  activateAssetSimulate(req: ActivateAssetSimulateRequest): Promise<SimulateTxResponse>;
537
597
  /** Cognito-auth. Submit del add_context_rule firmado (mismo shape que submitTx). */
538
598
  activateAssetSubmit(req: SubmitTxRequest): Promise<SubmitTxResponse>;
599
+ /**
600
+ * Cognito-auth. Cotiza un swap XLM↔USDC via Soroswap Aggregator y devuelve
601
+ * el material para que el SDK firme la auth entry contra la regla
602
+ * biometric-tx del asset de entrada.
603
+ */
604
+ swapSimulate(req: SimulateSwapRequest): Promise<SimulateSwapResponse>;
605
+ /** Cognito-auth. Submit del swap firmado (mismo shape que submitTx). */
606
+ swapSubmit(req: SubmitTxRequest): Promise<SubmitTxResponse>;
539
607
  /** Cognito-auth. Starts a KYC verification with Etherfuse. */
540
608
  kycStart(): Promise<KycStartResponse>;
541
609
  /** Cognito-auth. Reads the current user's KYC status. */
@@ -544,6 +612,12 @@ declare class AccesslyEndpoints {
544
612
  onramp(req: OrderRequest): Promise<OrderResponse>;
545
613
  /** Cognito-auth. Quote or submit a USDC→MXN offramp order. */
546
614
  offramp(req: OrderRequest): Promise<OrderResponse>;
615
+ /**
616
+ * Cognito-auth. Registra una CLABE mexicana en el customer Etherfuse del
617
+ * usuario. Requiere KYC pre-existente. Devuelve un `bankAccountId` que se
618
+ * usa después en `offramp({ bankAccountId, ... })`.
619
+ */
620
+ registerBankAccount(req: RegisterBankAccountRequest): Promise<RegisterBankAccountResponse>;
547
621
  /**
548
622
  * Anónimo. Balance XLM del Smart Account (vía Soroban RPC, cached ~5s).
549
623
  * No requiere JWT — la address en sí es pública on-chain.
@@ -656,4 +730,4 @@ declare class NetworkError extends AccesslyApiError {
656
730
  */
657
731
  declare function errorForResponse(status: number, body: unknown, requestId: string | undefined): AccesslyApiError;
658
732
 
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 };
733
+ 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 RegisterBankAccountRequest, type RegisterBankAccountResponse, type RequestOptions, ServerError, type SimulateRotateSignerRequest, type SimulateRotateSignerResponse, type SimulateSwapRequest, type SimulateSwapResponse, 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 };
@@ -221,6 +221,39 @@ type ActivatableAsset = 'USDC';
221
221
  interface ActivateAssetSimulateRequest {
222
222
  readonly asset: ActivatableAsset;
223
223
  }
224
+ /**
225
+ * `POST /tx/swap/simulate` — cotiza un swap XLM↔USDC via Soroswap y devuelve
226
+ * el material que el SDK necesita para firmar la auth entry del Smart Account.
227
+ *
228
+ * El backend internamente:
229
+ * 1) Hits Soroswap `/quote` para descubrir path + amounts.
230
+ * 2) Hits Soroswap `/quote/build` para obtener el XDR del envelope.
231
+ * 3) Extrae la auth entry del SA + computa signature_payload_hash.
232
+ * 4) Devuelve `SimulateTxResponse` + el quote summary para mostrar en UI.
233
+ */
234
+ interface SimulateSwapRequest {
235
+ readonly fromAsset: TransferAsset;
236
+ readonly toAsset: TransferAsset;
237
+ /** Stroops del input (1e-7). */
238
+ readonly amountIn: string;
239
+ /** Tolerancia de slippage en basis points. Default 50 (0.5%). */
240
+ readonly slippageBps?: number;
241
+ }
242
+ interface SimulateSwapResponse extends SimulateTxResponse {
243
+ readonly quote: {
244
+ readonly fromAsset: TransferAsset;
245
+ readonly toAsset: TransferAsset;
246
+ readonly amountIn: string;
247
+ /** Stroops out proyectados (sin slippage aplicado). */
248
+ readonly amountOut: string;
249
+ /** Stroops min out aceptables (con slippage) — esto es lo que el router enforça. */
250
+ readonly minAmountOut: string;
251
+ /** "0.12" = 0.12% de price impact. */
252
+ readonly priceImpactPct: string;
253
+ /** `router` | `aggregator` | `sdex` — qué venue se usó. */
254
+ readonly platform: string;
255
+ };
256
+ }
224
257
  interface SimulateTxRequest {
225
258
  /**
226
259
  * Base-10 string del monto en unidades atómicas (1e-7 para ambos XLM y USDC).
@@ -287,7 +320,13 @@ interface OrderRequest {
287
320
  readonly amount: string;
288
321
  readonly walletAddress: string;
289
322
  readonly appId: string;
290
- /** Required for `offramp` `submit`: SPEI destination CLABE. */
323
+ /**
324
+ * Offramp v1.7+: `bankAccountId` ya registrada via POST /kyc/bank-accounts.
325
+ * Si la app legacy <1.7 manda `clabe` plana, el backend rechaza con 400
326
+ * (la real Etherfuse API no acepta CLABE pelada).
327
+ */
328
+ readonly bankAccountId?: string;
329
+ /** @deprecated v1.7+ — usar `bankAccountId`. */
291
330
  readonly clabe?: string;
292
331
  /** Required for `submit`: quote id returned by the previous `quote` call. */
293
332
  readonly quoteId?: string;
@@ -300,6 +339,27 @@ interface OrderResponse {
300
339
  readonly fxRate?: string;
301
340
  readonly expiresAt?: string;
302
341
  }
342
+ /** `POST /kyc/bank-accounts` body — registra CLABE mexicana para offramp. */
343
+ interface RegisterBankAccountRequest {
344
+ /** 18 dígitos. */
345
+ readonly clabe: string;
346
+ /** Nombre como aparece en el estado de cuenta. */
347
+ readonly holderName: string;
348
+ /** RFC con homoclave (13 personal, 12 moral). */
349
+ readonly holderRfc: string;
350
+ /** 18 chars (solo PERSONAL). */
351
+ readonly holderCurp?: string;
352
+ /** Default 'PERSONAL'. */
353
+ readonly accountType?: 'PERSONAL' | 'BUSINESS';
354
+ /** Label friendly para distinguir multiples cuentas. */
355
+ readonly label?: string;
356
+ }
357
+ interface RegisterBankAccountResponse {
358
+ readonly bankAccountId: string;
359
+ readonly status: 'pending' | 'approved' | 'rejected';
360
+ readonly label?: string;
361
+ readonly clabeLast4: string;
362
+ }
303
363
  /** `POST /recovery/otp/request` body. */
304
364
  interface RecoveryOtpRequestInput {
305
365
  /** Email del usuario en plano. El backend solo persiste `sha256(email)`. */
@@ -536,6 +596,14 @@ declare class AccesslyEndpoints {
536
596
  activateAssetSimulate(req: ActivateAssetSimulateRequest): Promise<SimulateTxResponse>;
537
597
  /** Cognito-auth. Submit del add_context_rule firmado (mismo shape que submitTx). */
538
598
  activateAssetSubmit(req: SubmitTxRequest): Promise<SubmitTxResponse>;
599
+ /**
600
+ * Cognito-auth. Cotiza un swap XLM↔USDC via Soroswap Aggregator y devuelve
601
+ * el material para que el SDK firme la auth entry contra la regla
602
+ * biometric-tx del asset de entrada.
603
+ */
604
+ swapSimulate(req: SimulateSwapRequest): Promise<SimulateSwapResponse>;
605
+ /** Cognito-auth. Submit del swap firmado (mismo shape que submitTx). */
606
+ swapSubmit(req: SubmitTxRequest): Promise<SubmitTxResponse>;
539
607
  /** Cognito-auth. Starts a KYC verification with Etherfuse. */
540
608
  kycStart(): Promise<KycStartResponse>;
541
609
  /** Cognito-auth. Reads the current user's KYC status. */
@@ -544,6 +612,12 @@ declare class AccesslyEndpoints {
544
612
  onramp(req: OrderRequest): Promise<OrderResponse>;
545
613
  /** Cognito-auth. Quote or submit a USDC→MXN offramp order. */
546
614
  offramp(req: OrderRequest): Promise<OrderResponse>;
615
+ /**
616
+ * Cognito-auth. Registra una CLABE mexicana en el customer Etherfuse del
617
+ * usuario. Requiere KYC pre-existente. Devuelve un `bankAccountId` que se
618
+ * usa después en `offramp({ bankAccountId, ... })`.
619
+ */
620
+ registerBankAccount(req: RegisterBankAccountRequest): Promise<RegisterBankAccountResponse>;
547
621
  /**
548
622
  * Anónimo. Balance XLM del Smart Account (vía Soroban RPC, cached ~5s).
549
623
  * No requiere JWT — la address en sí es pública on-chain.
@@ -656,4 +730,4 @@ declare class NetworkError extends AccesslyApiError {
656
730
  */
657
731
  declare function errorForResponse(status: number, body: unknown, requestId: string | undefined): AccesslyApiError;
658
732
 
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 };
733
+ 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 RegisterBankAccountRequest, type RegisterBankAccountResponse, type RequestOptions, ServerError, type SimulateRotateSignerRequest, type SimulateRotateSignerResponse, type SimulateSwapRequest, type SimulateSwapResponse, 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
@@ -317,6 +317,24 @@ var AccesslyEndpoints = class {
317
317
  req
318
318
  );
319
319
  }
320
+ /**
321
+ * Cognito-auth. Cotiza un swap XLM↔USDC via Soroswap Aggregator y devuelve
322
+ * el material para que el SDK firme la auth entry contra la regla
323
+ * biometric-tx del asset de entrada.
324
+ */
325
+ swapSimulate(req) {
326
+ return this.client.post(
327
+ "/tx/swap/simulate",
328
+ req
329
+ );
330
+ }
331
+ /** Cognito-auth. Submit del swap firmado (mismo shape que submitTx). */
332
+ swapSubmit(req) {
333
+ return this.client.post(
334
+ "/tx/swap/submit",
335
+ req
336
+ );
337
+ }
320
338
  /** Cognito-auth. Starts a KYC verification with Etherfuse. */
321
339
  kycStart() {
322
340
  return this.client.post("/kyc");
@@ -333,6 +351,17 @@ var AccesslyEndpoints = class {
333
351
  offramp(req) {
334
352
  return this.client.post("/offramp", req);
335
353
  }
354
+ /**
355
+ * Cognito-auth. Registra una CLABE mexicana en el customer Etherfuse del
356
+ * usuario. Requiere KYC pre-existente. Devuelve un `bankAccountId` que se
357
+ * usa después en `offramp({ bankAccountId, ... })`.
358
+ */
359
+ registerBankAccount(req) {
360
+ return this.client.post(
361
+ "/kyc/bank-accounts",
362
+ req
363
+ );
364
+ }
336
365
  /* ── v1.1.0: read-only wallet data ─────────────────────────────────────── */
337
366
  /**
338
367
  * Anónimo. Balance XLM del Smart Account (vía Soroban RPC, cached ~5s).