@accesly/react 1.3.2 → 1.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.cts CHANGED
@@ -683,8 +683,8 @@ interface UseWalletStatusResult {
683
683
  declare function useWalletStatus(): UseWalletStatusResult;
684
684
 
685
685
  /**
686
- * `useBalance(walletAddress?)` — devuelve el balance XLM del Smart Account
687
- * con push real-time vía SSE.
686
+ * `useBalance(walletAddress?)` — devuelve los balances XLM y USDC del Smart
687
+ * Account con push real-time vía SSE.
688
688
  *
689
689
  * Si SSE está configurado (env tiene `walletStreamUrl` y `EventSource` existe),
690
690
  * el hook se suscribe al canal `balance` del `wallet-stream` Lambda y se
@@ -695,12 +695,20 @@ declare function useWalletStatus(): UseWalletStatusResult;
695
695
  *
696
696
  * El `walletAddress` se auto-resuelve desde el `DeviceStore` si no se pasa
697
697
  * (cubrir el caso "wallet del user actual sin tener que pasarla a mano").
698
+ *
699
+ * **Multi-asset (1.4.0+):** además de `stroops`/`xlm` (XLM) ahora devuelve
700
+ * `usdc` (formatted) y `usdcAtomic` (micro-USDC, 1e-7). Backwards compat:
701
+ * apps en 1.3 que solo leen `stroops`/`xlm` siguen funcionando sin cambios.
698
702
  */
699
703
  interface UseBalanceResult {
700
- /** Stroops como string base-10. `null` mientras se carga o no hay address. */
704
+ /** XLM en stroops (string base-10). `null` mientras se carga o no hay address. */
701
705
  readonly stroops: string | null;
702
- /** Mismo balance como string decimal en XLM. `null` mientras se carga. */
706
+ /** XLM formatted (sin trailing zeros). `null` mientras se carga. */
703
707
  readonly xlm: string | null;
708
+ /** USDC formatted (sin trailing zeros). `null` mientras se carga o si el SAC nunca registró la cuenta. */
709
+ readonly usdc: string | null;
710
+ /** USDC en unidades atómicas (1e-7 USDC). `null` mientras se carga. */
711
+ readonly usdcAtomic: string | null;
704
712
  readonly isLoading: boolean;
705
713
  readonly error: Error | null;
706
714
  /** Fuerza fetch HTTP inmediato (útil tras una operación del user). */
package/dist/index.d.ts CHANGED
@@ -683,8 +683,8 @@ interface UseWalletStatusResult {
683
683
  declare function useWalletStatus(): UseWalletStatusResult;
684
684
 
685
685
  /**
686
- * `useBalance(walletAddress?)` — devuelve el balance XLM del Smart Account
687
- * con push real-time vía SSE.
686
+ * `useBalance(walletAddress?)` — devuelve los balances XLM y USDC del Smart
687
+ * Account con push real-time vía SSE.
688
688
  *
689
689
  * Si SSE está configurado (env tiene `walletStreamUrl` y `EventSource` existe),
690
690
  * el hook se suscribe al canal `balance` del `wallet-stream` Lambda y se
@@ -695,12 +695,20 @@ declare function useWalletStatus(): UseWalletStatusResult;
695
695
  *
696
696
  * El `walletAddress` se auto-resuelve desde el `DeviceStore` si no se pasa
697
697
  * (cubrir el caso "wallet del user actual sin tener que pasarla a mano").
698
+ *
699
+ * **Multi-asset (1.4.0+):** además de `stroops`/`xlm` (XLM) ahora devuelve
700
+ * `usdc` (formatted) y `usdcAtomic` (micro-USDC, 1e-7). Backwards compat:
701
+ * apps en 1.3 que solo leen `stroops`/`xlm` siguen funcionando sin cambios.
698
702
  */
699
703
  interface UseBalanceResult {
700
- /** Stroops como string base-10. `null` mientras se carga o no hay address. */
704
+ /** XLM en stroops (string base-10). `null` mientras se carga o no hay address. */
701
705
  readonly stroops: string | null;
702
- /** Mismo balance como string decimal en XLM. `null` mientras se carga. */
706
+ /** XLM formatted (sin trailing zeros). `null` mientras se carga. */
703
707
  readonly xlm: string | null;
708
+ /** USDC formatted (sin trailing zeros). `null` mientras se carga o si el SAC nunca registró la cuenta. */
709
+ readonly usdc: string | null;
710
+ /** USDC en unidades atómicas (1e-7 USDC). `null` mientras se carga. */
711
+ readonly usdcAtomic: string | null;
704
712
  readonly isLoading: boolean;
705
713
  readonly error: Error | null;
706
714
  /** Fuerza fetch HTTP inmediato (útil tras una operación del user). */
package/dist/index.js CHANGED
@@ -665,6 +665,10 @@ function useAccesly() {
665
665
  * passkey + derivación HKDF + ensureWallet en una sola llamada.
666
666
  */
667
667
  async bootstrap(input) {
668
+ try {
669
+ await ctx.tokenManager.getValidIdToken();
670
+ } catch {
671
+ }
668
672
  const enc = new TextEncoder();
669
673
  const userIdHash = sha256(enc.encode(input.email));
670
674
  const prfSalt = getRandomBytes(32);
@@ -1491,6 +1495,8 @@ function useBalance(walletAddress) {
1491
1495
  );
1492
1496
  const [stroops, setStroops] = useState(null);
1493
1497
  const [xlm, setXlm] = useState(null);
1498
+ const [usdc, setUsdc] = useState(null);
1499
+ const [usdcAtomic, setUsdcAtomic] = useState(null);
1494
1500
  const [isLoading, setIsLoading] = useState(true);
1495
1501
  const [error, setError] = useState(null);
1496
1502
  const walletRef = useStableRef3(wallet);
@@ -1524,8 +1530,15 @@ function useBalance(walletAddress) {
1524
1530
  if (!resolvedAddress) return;
1525
1531
  try {
1526
1532
  const res = await endpointsRef.current.walletBalance(resolvedAddress);
1527
- setStroops(res.xlm.stroops);
1528
- setXlm(res.xlm.xlm);
1533
+ setStroops(res.xlm.atomic ?? res.xlm.stroops);
1534
+ setXlm(res.xlm.formatted ?? res.xlm.xlm);
1535
+ if (res.usdc) {
1536
+ setUsdc(res.usdc.formatted);
1537
+ setUsdcAtomic(res.usdc.atomic);
1538
+ } else {
1539
+ setUsdc(null);
1540
+ setUsdcAtomic(null);
1541
+ }
1529
1542
  setError(null);
1530
1543
  } catch (err) {
1531
1544
  setError(err);
@@ -1544,8 +1557,22 @@ function useBalance(walletAddress) {
1544
1557
  resolvedAddress,
1545
1558
  "balance",
1546
1559
  (data) => {
1547
- setStroops(data.stroops);
1548
- setXlm(data.xlm);
1560
+ const d = data;
1561
+ const xlmField = d["xlm"];
1562
+ if (xlmField && typeof xlmField === "object") {
1563
+ const x = xlmField;
1564
+ if (typeof x.atomic === "string") setStroops(x.atomic);
1565
+ if (typeof x.formatted === "string") setXlm(x.formatted);
1566
+ } else if (typeof xlmField === "string") {
1567
+ setXlm(xlmField);
1568
+ }
1569
+ if (typeof d["stroops"] === "string") setStroops(d["stroops"]);
1570
+ const usdcField = d["usdc"];
1571
+ if (usdcField && typeof usdcField === "object") {
1572
+ const u = usdcField;
1573
+ if (typeof u.formatted === "string") setUsdc(u.formatted);
1574
+ if (typeof u.atomic === "string") setUsdcAtomic(u.atomic);
1575
+ }
1549
1576
  setError(null);
1550
1577
  setIsLoading(false);
1551
1578
  }
@@ -1576,7 +1603,7 @@ function useBalance(walletAddress) {
1576
1603
  const refresh = useCallback(async () => {
1577
1604
  await doFetchRef.current();
1578
1605
  }, [doFetchRef]);
1579
- return { stroops, xlm, isLoading, error, refresh };
1606
+ return { stroops, xlm, usdc, usdcAtomic, isLoading, error, refresh };
1580
1607
  }
1581
1608
 
1582
1609
  // src/hooks/useWalletActivity.ts