@kryptos_connect/mobile-sdk 1.0.2 → 1.0.4

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.
Files changed (3) hide show
  1. package/dist/index.js +657 -448
  2. package/dist/index.mjs +575 -365
  3. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -38,8 +38,8 @@ __export(index_exports, {
38
38
  module.exports = __toCommonJS(index_exports);
39
39
 
40
40
  // src/KryptosConnectButton.tsx
41
- var import_react36 = __toESM(require("react"));
42
- var import_react_native21 = require("react-native");
41
+ var import_react37 = __toESM(require("react"));
42
+ var import_react_native22 = require("react-native");
43
43
 
44
44
  // src/assets/LogoIcon.tsx
45
45
  var import_react = __toESM(require("react"));
@@ -88,6 +88,11 @@ var import_axios = __toESM(require("axios"));
88
88
  var getBaseUrl = () => {
89
89
  return getGlobalBaseUrl() || "https://connect-api.kryptos.io/";
90
90
  };
91
+ var isSvgUrl = (url) => {
92
+ if (!url) return false;
93
+ const urlWithoutParams = url.split("?")[0].split("#")[0];
94
+ return /\.svg$/i.test(urlWithoutParams);
95
+ };
91
96
 
92
97
  // src/services/api.ts
93
98
  var api = import_axios.default.create({
@@ -1283,26 +1288,32 @@ var styles8 = import_react_native8.StyleSheet.create({
1283
1288
 
1284
1289
  // src/components/Footer.tsx
1285
1290
  var Footer = () => {
1286
- return /* @__PURE__ */ import_react13.default.createElement(import_react_native9.View, { style: styles9.container }, /* @__PURE__ */ import_react13.default.createElement(PoweredByKryptos, null), /* @__PURE__ */ import_react13.default.createElement(import_react_native9.View, { style: styles9.modeWrapper }, /* @__PURE__ */ import_react13.default.createElement(Mode, null)));
1291
+ const { clientInfo } = useKryptosConnect();
1292
+ const isSandbox = clientInfo?.project_stage === "sandbox";
1293
+ return /* @__PURE__ */ import_react13.default.createElement(
1294
+ import_react_native9.View,
1295
+ {
1296
+ style: [
1297
+ styles9.container,
1298
+ { justifyContent: isSandbox ? "space-between" : "center" }
1299
+ ]
1300
+ },
1301
+ /* @__PURE__ */ import_react13.default.createElement(PoweredByKryptos, null),
1302
+ /* @__PURE__ */ import_react13.default.createElement(Mode, null)
1303
+ );
1287
1304
  };
1288
1305
  var styles9 = import_react_native9.StyleSheet.create({
1289
1306
  container: {
1290
1307
  width: "100%",
1291
1308
  paddingVertical: 8,
1292
1309
  alignItems: "center",
1293
- justifyContent: "center"
1294
- },
1295
- // Anchor Mode to the right side
1296
- modeWrapper: {
1297
- position: "absolute",
1298
- right: 8,
1299
- top: 4
1310
+ flexDirection: "row"
1300
1311
  }
1301
1312
  });
1302
1313
 
1303
1314
  // src/molecules/Auth.tsx
1304
- var import_react19 = __toESM(require("react"));
1305
- var import_react_native11 = require("react-native");
1315
+ var import_react20 = __toESM(require("react"));
1316
+ var import_react_native12 = require("react-native");
1306
1317
 
1307
1318
  // src/assets/LinkIcon.tsx
1308
1319
  var import_react14 = __toESM(require("react"));
@@ -1371,8 +1382,8 @@ var EyeIcon = ({
1371
1382
  };
1372
1383
 
1373
1384
  // src/molecules/ConnectLogo.tsx
1374
- var import_react18 = __toESM(require("react"));
1375
- var import_react_native10 = require("react-native");
1385
+ var import_react19 = __toESM(require("react"));
1386
+ var import_react_native11 = require("react-native");
1376
1387
 
1377
1388
  // src/assets/UnplugIcon.tsx
1378
1389
  var import_react17 = __toESM(require("react"));
@@ -1431,15 +1442,40 @@ var UnplugIcon = ({
1431
1442
  ));
1432
1443
  };
1433
1444
 
1445
+ // src/components/remote-svg.tsx
1446
+ var import_react18 = __toESM(require("react"));
1447
+ var import_react_native10 = require("react-native");
1448
+ var import_react_native_svg7 = require("react-native-svg");
1449
+ function RemoteSvg({
1450
+ uri,
1451
+ width = 32,
1452
+ height = 32
1453
+ }) {
1454
+ const [svgXml, setSvgXml] = (0, import_react18.useState)(null);
1455
+ (0, import_react18.useEffect)(() => {
1456
+ fetch(uri).then((res) => res.text()).then((text) => setSvgXml(text)).catch((err) => console.error("SVG load error:", err));
1457
+ }, [uri]);
1458
+ if (!svgXml) return /* @__PURE__ */ import_react18.default.createElement(import_react_native10.ActivityIndicator, null);
1459
+ return /* @__PURE__ */ import_react18.default.createElement(
1460
+ import_react_native_svg7.SvgXml,
1461
+ {
1462
+ xml: svgXml,
1463
+ width,
1464
+ height,
1465
+ style: { borderRadius: 8 }
1466
+ }
1467
+ );
1468
+ }
1469
+
1434
1470
  // src/molecules/ConnectLogo.tsx
1435
1471
  var KryptosLogo = () => {
1436
1472
  const theme = useTheme();
1437
- return /* @__PURE__ */ import_react18.default.createElement(
1438
- import_react_native10.View,
1473
+ return /* @__PURE__ */ import_react19.default.createElement(
1474
+ import_react_native11.View,
1439
1475
  {
1440
1476
  style: [styles10.logoContainer, { backgroundColor: theme.colors.surface }]
1441
1477
  },
1442
- /* @__PURE__ */ import_react18.default.createElement(LogoIcon, { size: 36 })
1478
+ /* @__PURE__ */ import_react19.default.createElement(LogoIcon, { size: 36 })
1443
1479
  );
1444
1480
  };
1445
1481
  var ConnectLogo = () => {
@@ -1454,11 +1490,11 @@ var ConnectLogo = () => {
1454
1490
  }
1455
1491
  };
1456
1492
  const renderLogo = () => {
1457
- if ((0, import_react18.isValidElement)(appLogo)) {
1493
+ if ((0, import_react19.isValidElement)(appLogo)) {
1458
1494
  return appLogo;
1459
1495
  } else if (typeof appLogo === "string" && isValidUrl(appLogo)) {
1460
- return /* @__PURE__ */ import_react18.default.createElement(
1461
- import_react_native10.Image,
1496
+ return isSvgUrl(appLogo) ? /* @__PURE__ */ import_react19.default.createElement(RemoteSvg, { uri: appLogo }) : /* @__PURE__ */ import_react19.default.createElement(
1497
+ import_react_native11.Image,
1462
1498
  {
1463
1499
  source: { uri: appLogo },
1464
1500
  style: styles10.appLogoImage,
@@ -1466,8 +1502,8 @@ var ConnectLogo = () => {
1466
1502
  }
1467
1503
  );
1468
1504
  } else if (typeof appLogo === "number" || typeof appLogo === "object" && appLogo !== null) {
1469
- return /* @__PURE__ */ import_react18.default.createElement(
1470
- import_react_native10.Image,
1505
+ return /* @__PURE__ */ import_react19.default.createElement(
1506
+ import_react_native11.Image,
1471
1507
  {
1472
1508
  source: appLogo,
1473
1509
  style: styles10.appLogoImage,
@@ -1475,12 +1511,12 @@ var ConnectLogo = () => {
1475
1511
  }
1476
1512
  );
1477
1513
  } else if (appName) {
1478
- return /* @__PURE__ */ import_react18.default.createElement(import_react_native10.Text, { style: [styles10.appLogoText, { color: theme.colors.text }] }, appName.charAt(0).toUpperCase());
1514
+ return /* @__PURE__ */ import_react19.default.createElement(import_react_native11.Text, { style: [styles10.appLogoText, { color: theme.colors.text }] }, appName.charAt(0).toUpperCase());
1479
1515
  }
1480
- return /* @__PURE__ */ import_react18.default.createElement(import_react_native10.Text, { style: [styles10.appLogoText, { color: theme.colors.text }] }, "?");
1516
+ return /* @__PURE__ */ import_react19.default.createElement(import_react_native11.Text, { style: [styles10.appLogoText, { color: theme.colors.text }] }, "?");
1481
1517
  };
1482
- return /* @__PURE__ */ import_react18.default.createElement(import_react_native10.View, { style: styles10.container }, /* @__PURE__ */ import_react18.default.createElement(KryptosLogo, null), /* @__PURE__ */ import_react18.default.createElement(import_react_native10.View, { style: styles10.iconContainer }, /* @__PURE__ */ import_react18.default.createElement(UnplugIcon, { size: 24, color: theme.colors.textSecondary })), /* @__PURE__ */ import_react18.default.createElement(
1483
- import_react_native10.View,
1518
+ return /* @__PURE__ */ import_react19.default.createElement(import_react_native11.View, { style: styles10.container }, /* @__PURE__ */ import_react19.default.createElement(KryptosLogo, null), /* @__PURE__ */ import_react19.default.createElement(import_react_native11.View, { style: styles10.iconContainer }, /* @__PURE__ */ import_react19.default.createElement(UnplugIcon, { size: 24, color: theme.colors.textSecondary })), /* @__PURE__ */ import_react19.default.createElement(
1519
+ import_react_native11.View,
1484
1520
  {
1485
1521
  style: [
1486
1522
  styles10.logoContainer,
@@ -1490,7 +1526,7 @@ var ConnectLogo = () => {
1490
1526
  renderLogo()
1491
1527
  ));
1492
1528
  };
1493
- var styles10 = import_react_native10.StyleSheet.create({
1529
+ var styles10 = import_react_native11.StyleSheet.create({
1494
1530
  container: {
1495
1531
  flexDirection: "row",
1496
1532
  alignItems: "center",
@@ -1531,11 +1567,11 @@ var Auth = ({
1531
1567
  }) => {
1532
1568
  const { appName, linkToken, clientId, setUser, setEmail } = useKryptosConnect();
1533
1569
  const theme = useTheme();
1534
- const [isLoading, setIsLoading] = import_react19.default.useState(false);
1535
- const [errorMessage, setErrorMessage] = import_react19.default.useState("");
1536
- const [emailValue, setEmailValue] = import_react19.default.useState("");
1537
- const [emailError, setEmailError] = import_react19.default.useState("");
1538
- const [loadingType, setLoadingType] = import_react19.default.useState(null);
1570
+ const [isLoading, setIsLoading] = import_react20.default.useState(false);
1571
+ const [errorMessage, setErrorMessage] = import_react20.default.useState("");
1572
+ const [emailValue, setEmailValue] = import_react20.default.useState("");
1573
+ const [emailError, setEmailError] = import_react20.default.useState("");
1574
+ const [loadingType, setLoadingType] = import_react20.default.useState(null);
1539
1575
  const validateEmail = (email) => {
1540
1576
  const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
1541
1577
  if (!email) {
@@ -1597,29 +1633,29 @@ var Auth = ({
1597
1633
  };
1598
1634
  const infoSections = [
1599
1635
  {
1600
- icon: /* @__PURE__ */ import_react19.default.createElement(LinkIcon, { size: 20, color: theme.colors.primary }),
1636
+ icon: /* @__PURE__ */ import_react20.default.createElement(LinkIcon, { size: 20, color: theme.colors.primary }),
1601
1637
  title: "Simple and secure",
1602
1638
  text: "Link your accounts in just a few clicks"
1603
1639
  },
1604
1640
  {
1605
- icon: /* @__PURE__ */ import_react19.default.createElement(ShieldIcon, { size: 20, color: theme.colors.primary }),
1641
+ icon: /* @__PURE__ */ import_react20.default.createElement(ShieldIcon, { size: 20, color: theme.colors.primary }),
1606
1642
  title: "Control what you share",
1607
1643
  text: "We never share your data without your permission"
1608
1644
  },
1609
1645
  {
1610
- icon: /* @__PURE__ */ import_react19.default.createElement(EyeIcon, { size: 20, color: theme.colors.primary }),
1646
+ icon: /* @__PURE__ */ import_react20.default.createElement(EyeIcon, { size: 20, color: theme.colors.primary }),
1611
1647
  title: "View Only Access",
1612
1648
  text: "Kryptos retrieves view-only data and cannot perform any transactions on your behalf."
1613
1649
  }
1614
1650
  ];
1615
- return /* @__PURE__ */ import_react19.default.createElement(Modal, { isOpen: open, onClose: handleClose, size: "full" }, /* @__PURE__ */ import_react19.default.createElement(ModalHeader, { onClose: handleClose }, ""), /* @__PURE__ */ import_react19.default.createElement(ModalBody, null, /* @__PURE__ */ import_react19.default.createElement(import_react_native11.View, { style: styles11.container }, /* @__PURE__ */ import_react19.default.createElement(import_react_native11.View, { style: styles11.header }, /* @__PURE__ */ import_react19.default.createElement(import_react_native11.Text, { style: [styles11.title, { color: theme.colors.text }] }, "Link your accounts to", " ", /* @__PURE__ */ import_react19.default.createElement(import_react_native11.Text, { style: { fontWeight: "700" } }, appName), " using Kryptos"), /* @__PURE__ */ import_react19.default.createElement(ConnectLogo, null), infoSections.map((section, index) => /* @__PURE__ */ import_react19.default.createElement(import_react_native11.View, { key: `info-${index}`, style: styles11.infoSection }, /* @__PURE__ */ import_react19.default.createElement(import_react_native11.View, { style: styles11.infoIcon }, section.icon), /* @__PURE__ */ import_react19.default.createElement(import_react_native11.View, { style: styles11.infoContent }, /* @__PURE__ */ import_react19.default.createElement(
1616
- import_react_native11.Text,
1651
+ return /* @__PURE__ */ import_react20.default.createElement(Modal, { isOpen: open, onClose: handleClose, size: "full" }, /* @__PURE__ */ import_react20.default.createElement(ModalHeader, { onClose: handleClose }, ""), /* @__PURE__ */ import_react20.default.createElement(ModalBody, null, /* @__PURE__ */ import_react20.default.createElement(import_react_native12.View, { style: styles11.container }, /* @__PURE__ */ import_react20.default.createElement(import_react_native12.View, { style: styles11.header }, /* @__PURE__ */ import_react20.default.createElement(import_react_native12.Text, { style: [styles11.title, { color: theme.colors.text }] }, "Link your accounts to", " ", /* @__PURE__ */ import_react20.default.createElement(import_react_native12.Text, { style: { fontWeight: "700" } }, appName), " using Kryptos"), /* @__PURE__ */ import_react20.default.createElement(ConnectLogo, null), infoSections.map((section, index) => /* @__PURE__ */ import_react20.default.createElement(import_react_native12.View, { key: `info-${index}`, style: styles11.infoSection }, /* @__PURE__ */ import_react20.default.createElement(import_react_native12.View, { style: styles11.infoIcon }, section.icon), /* @__PURE__ */ import_react20.default.createElement(import_react_native12.View, { style: styles11.infoContent }, /* @__PURE__ */ import_react20.default.createElement(
1652
+ import_react_native12.Text,
1617
1653
  {
1618
1654
  style: [styles11.infoTitle, { color: theme.colors.text }]
1619
1655
  },
1620
1656
  section.title
1621
- ), /* @__PURE__ */ import_react19.default.createElement(
1622
- import_react_native11.Text,
1657
+ ), /* @__PURE__ */ import_react20.default.createElement(
1658
+ import_react_native12.Text,
1623
1659
  {
1624
1660
  style: [
1625
1661
  styles11.infoDescription,
@@ -1627,7 +1663,7 @@ var Auth = ({
1627
1663
  ]
1628
1664
  },
1629
1665
  section.text
1630
- )))), errorMessage ? /* @__PURE__ */ import_react19.default.createElement(Alert, { variant: "destructive" }, /* @__PURE__ */ import_react19.default.createElement(AlertDescription, null, errorMessage)) : null), /* @__PURE__ */ import_react19.default.createElement(import_react_native11.View, { style: styles11.footer }, /* @__PURE__ */ import_react19.default.createElement(
1666
+ )))), errorMessage ? /* @__PURE__ */ import_react20.default.createElement(Alert, { variant: "destructive" }, /* @__PURE__ */ import_react20.default.createElement(AlertDescription, null, errorMessage)) : null), /* @__PURE__ */ import_react20.default.createElement(import_react_native12.View, { style: styles11.footer }, /* @__PURE__ */ import_react20.default.createElement(
1631
1667
  Button,
1632
1668
  {
1633
1669
  variant: "outline",
@@ -1638,41 +1674,41 @@ var Auth = ({
1638
1674
  style: styles11.button
1639
1675
  },
1640
1676
  "Continue"
1641
- ), /* @__PURE__ */ import_react19.default.createElement(
1642
- import_react_native11.Text,
1677
+ ), /* @__PURE__ */ import_react20.default.createElement(
1678
+ import_react_native12.Text,
1643
1679
  {
1644
1680
  style: [styles11.footerText, { color: theme.colors.textSecondary }]
1645
1681
  },
1646
1682
  "By continuing, you agree to Kryptos",
1647
1683
  " ",
1648
- /* @__PURE__ */ import_react19.default.createElement(
1649
- import_react_native11.Text,
1684
+ /* @__PURE__ */ import_react20.default.createElement(
1685
+ import_react_native12.Text,
1650
1686
  {
1651
1687
  style: {
1652
1688
  color: theme.colors.primary,
1653
1689
  textDecorationLine: "underline"
1654
1690
  },
1655
- onPress: () => import_react_native11.Linking.openURL("https://kryptos.io/privacy-policy")
1691
+ onPress: () => import_react_native12.Linking.openURL("https://kryptos.io/privacy-policy")
1656
1692
  },
1657
1693
  "Privacy Policy"
1658
1694
  ),
1659
1695
  " ",
1660
1696
  "and",
1661
1697
  " ",
1662
- /* @__PURE__ */ import_react19.default.createElement(
1663
- import_react_native11.Text,
1698
+ /* @__PURE__ */ import_react20.default.createElement(
1699
+ import_react_native12.Text,
1664
1700
  {
1665
1701
  style: {
1666
1702
  color: theme.colors.primary,
1667
1703
  textDecorationLine: "underline"
1668
1704
  },
1669
- onPress: () => import_react_native11.Linking.openURL("https://kryptos.io/terms-of-services")
1705
+ onPress: () => import_react_native12.Linking.openURL("https://kryptos.io/terms-of-services")
1670
1706
  },
1671
1707
  "Terms of Service"
1672
1708
  )
1673
- )))), /* @__PURE__ */ import_react19.default.createElement(ModalFooter, { style: { paddingVertical: 0 } }, /* @__PURE__ */ import_react19.default.createElement(Footer, null)));
1709
+ )))), /* @__PURE__ */ import_react20.default.createElement(ModalFooter, { style: { paddingVertical: 0 } }, /* @__PURE__ */ import_react20.default.createElement(Footer, null)));
1674
1710
  };
1675
- var styles11 = import_react_native11.StyleSheet.create({
1711
+ var styles11 = import_react_native12.StyleSheet.create({
1676
1712
  container: {
1677
1713
  flex: 1,
1678
1714
  flexDirection: "column",
@@ -1737,8 +1773,8 @@ var styles11 = import_react_native11.StyleSheet.create({
1737
1773
  });
1738
1774
 
1739
1775
  // src/molecules/Init.tsx
1740
- var import_react20 = __toESM(require("react"));
1741
- var import_react_native12 = require("react-native");
1776
+ var import_react21 = __toESM(require("react"));
1777
+ var import_react_native13 = require("react-native");
1742
1778
  var Init = ({
1743
1779
  open,
1744
1780
  onSuccess,
@@ -1753,9 +1789,9 @@ var Init = ({
1753
1789
  setUser
1754
1790
  } = useKryptosConnect();
1755
1791
  const theme = useTheme();
1756
- const [isFetching, setIsFetching] = import_react20.default.useState(false);
1757
- const [error, setError] = import_react20.default.useState(null);
1758
- const fetchLinkToken = import_react20.default.useCallback(async () => {
1792
+ const [isFetching, setIsFetching] = import_react21.default.useState(false);
1793
+ const [error, setError] = import_react21.default.useState(null);
1794
+ const fetchLinkToken = import_react21.default.useCallback(async () => {
1759
1795
  if (!open) return;
1760
1796
  setIsFetching(true);
1761
1797
  setError(null);
@@ -1782,17 +1818,17 @@ var Init = ({
1782
1818
  setIsFetching(false);
1783
1819
  }
1784
1820
  }, []);
1785
- import_react20.default.useEffect(() => {
1821
+ import_react21.default.useEffect(() => {
1786
1822
  fetchLinkToken();
1787
1823
  }, [fetchLinkToken]);
1788
- return /* @__PURE__ */ import_react20.default.createElement(Modal, { isOpen: open, onClose, size: "xs" }, /* @__PURE__ */ import_react20.default.createElement(ModalHeader, { onClose }, "Kryptos Connect"), /* @__PURE__ */ import_react20.default.createElement(ModalBody, null, /* @__PURE__ */ import_react20.default.createElement(import_react_native12.View, { style: styles12.container }, isFetching && /* @__PURE__ */ import_react20.default.createElement(import_react20.default.Fragment, null, /* @__PURE__ */ import_react20.default.createElement(
1789
- import_react_native12.ActivityIndicator,
1824
+ return /* @__PURE__ */ import_react21.default.createElement(Modal, { isOpen: open, onClose, size: "xs" }, /* @__PURE__ */ import_react21.default.createElement(ModalHeader, { onClose }, "Kryptos Connect"), /* @__PURE__ */ import_react21.default.createElement(ModalBody, null, /* @__PURE__ */ import_react21.default.createElement(import_react_native13.View, { style: styles12.container }, isFetching && /* @__PURE__ */ import_react21.default.createElement(import_react21.default.Fragment, null, /* @__PURE__ */ import_react21.default.createElement(
1825
+ import_react_native13.ActivityIndicator,
1790
1826
  {
1791
1827
  size: "large",
1792
1828
  color: theme.colors.primary,
1793
1829
  style: styles12.spinner
1794
1830
  }
1795
- ), /* @__PURE__ */ import_react20.default.createElement(import_react_native12.Text, { style: [styles12.message, { color: theme.colors.text }] }, isInitialized ? "Fetching link token..." : "Initializing...")), !isFetching && error && /* @__PURE__ */ import_react20.default.createElement(import_react20.default.Fragment, null, /* @__PURE__ */ import_react20.default.createElement(Alert, { variant: "destructive" }, /* @__PURE__ */ import_react20.default.createElement(AlertDescription, null, error)), /* @__PURE__ */ import_react20.default.createElement(
1831
+ ), /* @__PURE__ */ import_react21.default.createElement(import_react_native13.Text, { style: [styles12.message, { color: theme.colors.text }] }, isInitialized ? "Fetching link token..." : "Initializing...")), !isFetching && error && /* @__PURE__ */ import_react21.default.createElement(import_react21.default.Fragment, null, /* @__PURE__ */ import_react21.default.createElement(Alert, { variant: "destructive" }, /* @__PURE__ */ import_react21.default.createElement(AlertDescription, null, error)), /* @__PURE__ */ import_react21.default.createElement(
1796
1832
  Button,
1797
1833
  {
1798
1834
  variant: "primary",
@@ -1801,9 +1837,9 @@ var Init = ({
1801
1837
  style: styles12.retryButton
1802
1838
  },
1803
1839
  "Retry"
1804
- )))), /* @__PURE__ */ import_react20.default.createElement(ModalFooter, { style: { paddingVertical: 0 } }, /* @__PURE__ */ import_react20.default.createElement(Footer, null)));
1840
+ )))), /* @__PURE__ */ import_react21.default.createElement(ModalFooter, { style: { paddingVertical: 0 } }, /* @__PURE__ */ import_react21.default.createElement(Footer, null)));
1805
1841
  };
1806
- var styles12 = import_react_native12.StyleSheet.create({
1842
+ var styles12 = import_react_native13.StyleSheet.create({
1807
1843
  container: {
1808
1844
  flex: 1,
1809
1845
  alignItems: "center",
@@ -1830,18 +1866,18 @@ var styles12 = import_react_native12.StyleSheet.create({
1830
1866
  });
1831
1867
 
1832
1868
  // src/molecules/Integration.tsx
1833
- var import_react31 = __toESM(require("react"));
1834
- var import_react_native16 = require("react-native");
1869
+ var import_react32 = __toESM(require("react"));
1870
+ var import_react_native17 = require("react-native");
1835
1871
 
1836
1872
  // src/assets/ArrowLeftIcon.tsx
1837
- var import_react21 = __toESM(require("react"));
1838
- var import_react_native_svg7 = __toESM(require("react-native-svg"));
1873
+ var import_react22 = __toESM(require("react"));
1874
+ var import_react_native_svg8 = __toESM(require("react-native-svg"));
1839
1875
  var ArrowLeftIcon = ({
1840
1876
  size = 20,
1841
1877
  color = "#000"
1842
1878
  }) => {
1843
- return /* @__PURE__ */ import_react21.default.createElement(import_react_native_svg7.default, { width: size, height: size, viewBox: "0 0 24 24", fill: "none" }, /* @__PURE__ */ import_react21.default.createElement(
1844
- import_react_native_svg7.Path,
1879
+ return /* @__PURE__ */ import_react22.default.createElement(import_react_native_svg8.default, { width: size, height: size, viewBox: "0 0 24 24", fill: "none" }, /* @__PURE__ */ import_react22.default.createElement(
1880
+ import_react_native_svg8.Path,
1845
1881
  {
1846
1882
  d: "M19 12H5M12 19l-7-7 7-7",
1847
1883
  stroke: color,
@@ -1853,14 +1889,14 @@ var ArrowLeftIcon = ({
1853
1889
  };
1854
1890
 
1855
1891
  // src/assets/CheckCircleIcon.tsx
1856
- var import_react22 = __toESM(require("react"));
1857
- var import_react_native_svg8 = __toESM(require("react-native-svg"));
1892
+ var import_react23 = __toESM(require("react"));
1893
+ var import_react_native_svg9 = __toESM(require("react-native-svg"));
1858
1894
  var CheckCircleIcon = ({
1859
1895
  size = 20,
1860
1896
  color = "#10B981"
1861
1897
  }) => {
1862
- return /* @__PURE__ */ import_react22.default.createElement(import_react_native_svg8.default, { width: size, height: size, viewBox: "0 0 24 24", fill: "none" }, /* @__PURE__ */ import_react22.default.createElement(
1863
- import_react_native_svg8.Circle,
1898
+ return /* @__PURE__ */ import_react23.default.createElement(import_react_native_svg9.default, { width: size, height: size, viewBox: "0 0 24 24", fill: "none" }, /* @__PURE__ */ import_react23.default.createElement(
1899
+ import_react_native_svg9.Circle,
1864
1900
  {
1865
1901
  cx: 12,
1866
1902
  cy: 12,
@@ -1868,8 +1904,8 @@ var CheckCircleIcon = ({
1868
1904
  stroke: color,
1869
1905
  strokeWidth: 2
1870
1906
  }
1871
- ), /* @__PURE__ */ import_react22.default.createElement(
1872
- import_react_native_svg8.Path,
1907
+ ), /* @__PURE__ */ import_react23.default.createElement(
1908
+ import_react_native_svg9.Path,
1873
1909
  {
1874
1910
  d: "m9 12 2 2 4-4",
1875
1911
  stroke: color,
@@ -1881,21 +1917,21 @@ var CheckCircleIcon = ({
1881
1917
  };
1882
1918
 
1883
1919
  // src/assets/LoaderIcon.tsx
1884
- var import_react23 = __toESM(require("react"));
1885
- var import_react_native13 = require("react-native");
1886
- var import_react_native_svg9 = __toESM(require("react-native-svg"));
1887
- var AnimatedSvg = import_react_native13.Animated.createAnimatedComponent(import_react_native_svg9.default);
1920
+ var import_react24 = __toESM(require("react"));
1921
+ var import_react_native14 = require("react-native");
1922
+ var import_react_native_svg10 = __toESM(require("react-native-svg"));
1923
+ var AnimatedSvg = import_react_native14.Animated.createAnimatedComponent(import_react_native_svg10.default);
1888
1924
  var LoaderIcon = ({
1889
1925
  size = 20,
1890
1926
  color = "#00C693"
1891
1927
  }) => {
1892
- const rotateAnim = import_react23.default.useRef(new import_react_native13.Animated.Value(0)).current;
1893
- import_react23.default.useEffect(() => {
1894
- import_react_native13.Animated.loop(
1895
- import_react_native13.Animated.timing(rotateAnim, {
1928
+ const rotateAnim = import_react24.default.useRef(new import_react_native14.Animated.Value(0)).current;
1929
+ import_react24.default.useEffect(() => {
1930
+ import_react_native14.Animated.loop(
1931
+ import_react_native14.Animated.timing(rotateAnim, {
1896
1932
  toValue: 1,
1897
1933
  duration: 1e3,
1898
- easing: import_react_native13.Easing.linear,
1934
+ easing: import_react_native14.Easing.linear,
1899
1935
  useNativeDriver: true
1900
1936
  })
1901
1937
  ).start();
@@ -1904,7 +1940,7 @@ var LoaderIcon = ({
1904
1940
  inputRange: [0, 1],
1905
1941
  outputRange: ["0deg", "360deg"]
1906
1942
  });
1907
- return /* @__PURE__ */ import_react23.default.createElement(
1943
+ return /* @__PURE__ */ import_react24.default.createElement(
1908
1944
  AnimatedSvg,
1909
1945
  {
1910
1946
  width: size,
@@ -1913,8 +1949,8 @@ var LoaderIcon = ({
1913
1949
  fill: "none",
1914
1950
  style: { transform: [{ rotate: spin }] }
1915
1951
  },
1916
- /* @__PURE__ */ import_react23.default.createElement(
1917
- import_react_native_svg9.Path,
1952
+ /* @__PURE__ */ import_react24.default.createElement(
1953
+ import_react_native_svg10.Path,
1918
1954
  {
1919
1955
  d: "M21 12a9 9 0 1 1-6.219-8.56",
1920
1956
  stroke: color,
@@ -1927,11 +1963,11 @@ var LoaderIcon = ({
1927
1963
  };
1928
1964
 
1929
1965
  // src/assets/SuccessIcon.tsx
1930
- var import_react24 = __toESM(require("react"));
1931
- var import_react_native_svg10 = __toESM(require("react-native-svg"));
1966
+ var import_react25 = __toESM(require("react"));
1967
+ var import_react_native_svg11 = __toESM(require("react-native-svg"));
1932
1968
  var SuccessIcon = ({ size = 64 }) => {
1933
- return /* @__PURE__ */ import_react24.default.createElement(import_react_native_svg10.default, { width: size, height: size, viewBox: "0 0 64 64", fill: "none" }, /* @__PURE__ */ import_react24.default.createElement(
1934
- import_react_native_svg10.Circle,
1969
+ return /* @__PURE__ */ import_react25.default.createElement(import_react_native_svg11.default, { width: size, height: size, viewBox: "0 0 64 64", fill: "none" }, /* @__PURE__ */ import_react25.default.createElement(
1970
+ import_react_native_svg11.Circle,
1935
1971
  {
1936
1972
  cx: 32,
1937
1973
  cy: 32,
@@ -1939,16 +1975,16 @@ var SuccessIcon = ({ size = 64 }) => {
1939
1975
  fill: "#00C693",
1940
1976
  opacity: 0.1
1941
1977
  }
1942
- ), /* @__PURE__ */ import_react24.default.createElement(
1943
- import_react_native_svg10.Circle,
1978
+ ), /* @__PURE__ */ import_react25.default.createElement(
1979
+ import_react_native_svg11.Circle,
1944
1980
  {
1945
1981
  cx: 32,
1946
1982
  cy: 32,
1947
1983
  r: 24,
1948
1984
  fill: "#00C693"
1949
1985
  }
1950
- ), /* @__PURE__ */ import_react24.default.createElement(
1951
- import_react_native_svg10.Path,
1986
+ ), /* @__PURE__ */ import_react25.default.createElement(
1987
+ import_react_native_svg11.Path,
1952
1988
  {
1953
1989
  d: "M24 32l6 6 12-12",
1954
1990
  stroke: "white",
@@ -1960,11 +1996,11 @@ var SuccessIcon = ({ size = 64 }) => {
1960
1996
  };
1961
1997
 
1962
1998
  // src/assets/ErrorIcon.tsx
1963
- var import_react25 = __toESM(require("react"));
1964
- var import_react_native_svg11 = __toESM(require("react-native-svg"));
1999
+ var import_react26 = __toESM(require("react"));
2000
+ var import_react_native_svg12 = __toESM(require("react-native-svg"));
1965
2001
  var ErrorIcon = ({ size = 64 }) => {
1966
- return /* @__PURE__ */ import_react25.default.createElement(import_react_native_svg11.default, { width: size, height: size, viewBox: "0 0 64 64", fill: "none" }, /* @__PURE__ */ import_react25.default.createElement(
1967
- import_react_native_svg11.Circle,
2002
+ return /* @__PURE__ */ import_react26.default.createElement(import_react_native_svg12.default, { width: size, height: size, viewBox: "0 0 64 64", fill: "none" }, /* @__PURE__ */ import_react26.default.createElement(
2003
+ import_react_native_svg12.Circle,
1968
2004
  {
1969
2005
  cx: 32,
1970
2006
  cy: 32,
@@ -1972,16 +2008,16 @@ var ErrorIcon = ({ size = 64 }) => {
1972
2008
  fill: "#EF4444",
1973
2009
  opacity: 0.1
1974
2010
  }
1975
- ), /* @__PURE__ */ import_react25.default.createElement(
1976
- import_react_native_svg11.Circle,
2011
+ ), /* @__PURE__ */ import_react26.default.createElement(
2012
+ import_react_native_svg12.Circle,
1977
2013
  {
1978
2014
  cx: 32,
1979
2015
  cy: 32,
1980
2016
  r: 24,
1981
2017
  fill: "#EF4444"
1982
2018
  }
1983
- ), /* @__PURE__ */ import_react25.default.createElement(
1984
- import_react_native_svg11.Path,
2019
+ ), /* @__PURE__ */ import_react26.default.createElement(
2020
+ import_react_native_svg12.Path,
1985
2021
  {
1986
2022
  d: "M24 24l16 16M40 24l-16 16",
1987
2023
  stroke: "white",
@@ -1993,18 +2029,18 @@ var ErrorIcon = ({ size = 64 }) => {
1993
2029
  };
1994
2030
 
1995
2031
  // src/assets/SearchIcon.tsx
1996
- var import_react26 = __toESM(require("react"));
1997
- var import_react_native_svg12 = __toESM(require("react-native-svg"));
1998
-
1999
- // src/assets/PlusIcon.tsx
2000
2032
  var import_react27 = __toESM(require("react"));
2001
2033
  var import_react_native_svg13 = __toESM(require("react-native-svg"));
2034
+
2035
+ // src/assets/PlusIcon.tsx
2036
+ var import_react28 = __toESM(require("react"));
2037
+ var import_react_native_svg14 = __toESM(require("react-native-svg"));
2002
2038
  var PlusIcon = ({
2003
2039
  size = 14,
2004
2040
  color = "#6B7280"
2005
2041
  }) => {
2006
- return /* @__PURE__ */ import_react27.default.createElement(import_react_native_svg13.default, { width: size, height: size, viewBox: "0 0 14 14", fill: "none" }, /* @__PURE__ */ import_react27.default.createElement(
2007
- import_react_native_svg13.Path,
2042
+ return /* @__PURE__ */ import_react28.default.createElement(import_react_native_svg14.default, { width: size, height: size, viewBox: "0 0 14 14", fill: "none" }, /* @__PURE__ */ import_react28.default.createElement(
2043
+ import_react_native_svg14.Path,
2008
2044
  {
2009
2045
  d: "M7 3.5v7M3.5 7h7",
2010
2046
  stroke: color,
@@ -2016,8 +2052,8 @@ var PlusIcon = ({
2016
2052
 
2017
2053
  // src/wallet-connect/index.tsx
2018
2054
  var import_appkit_react_native3 = require("@reown/appkit-react-native");
2019
- var import_react29 = __toESM(require("react"));
2020
- var import_react_native14 = require("react-native");
2055
+ var import_react30 = __toESM(require("react"));
2056
+ var import_react_native15 = require("react-native");
2021
2057
 
2022
2058
  // src/utils/uuid.ts
2023
2059
  function generateUUID() {
@@ -2029,7 +2065,7 @@ function generateUUID() {
2029
2065
  }
2030
2066
 
2031
2067
  // src/wallet-connect/wallet-connect.tsx
2032
- var import_react28 = __toESM(require("react"));
2068
+ var import_react29 = __toESM(require("react"));
2033
2069
  var import_appkit_react_native2 = require("@reown/appkit-react-native");
2034
2070
 
2035
2071
  // src/wallet-connect/AppKitConfig.ts
@@ -2128,7 +2164,7 @@ var createAppKitInstance = (projectId) => {
2128
2164
  // src/wallet-connect/wallet-connect.tsx
2129
2165
  var WalletConnectWrapper = ({ children }) => {
2130
2166
  const { walletConnectProjectId } = useKryptosConnect();
2131
- const appKit = import_react28.default.useMemo(() => {
2167
+ const appKit = import_react29.default.useMemo(() => {
2132
2168
  if (!walletConnectProjectId) {
2133
2169
  console.warn(
2134
2170
  "walletConnectProjectId is missing in KryptosConnectProvider config"
@@ -2138,9 +2174,9 @@ var WalletConnectWrapper = ({ children }) => {
2138
2174
  return createAppKitInstance(walletConnectProjectId);
2139
2175
  }, [walletConnectProjectId]);
2140
2176
  if (!appKit) {
2141
- return /* @__PURE__ */ import_react28.default.createElement(import_react28.default.Fragment, null, children);
2177
+ return /* @__PURE__ */ import_react29.default.createElement(import_react29.default.Fragment, null, children);
2142
2178
  }
2143
- return /* @__PURE__ */ import_react28.default.createElement(import_appkit_react_native2.AppKitProvider, { instance: appKit }, /* @__PURE__ */ import_react28.default.createElement(import_appkit_react_native2.AppKit, null), children);
2179
+ return /* @__PURE__ */ import_react29.default.createElement(import_appkit_react_native2.AppKitProvider, { instance: appKit }, /* @__PURE__ */ import_react29.default.createElement(import_appkit_react_native2.AppKit, null), children);
2144
2180
  };
2145
2181
  var wallet_connect_default = WalletConnectWrapper;
2146
2182
 
@@ -2151,28 +2187,29 @@ var WalletConnectComponent = ({
2151
2187
  onAddHandle,
2152
2188
  handleClose,
2153
2189
  modalOpen,
2154
- setAddIntegrationMode
2190
+ setAddIntegrationMode,
2191
+ providersList
2155
2192
  }) => {
2156
2193
  const { walletConnectProjectId } = useKryptosConnect();
2157
2194
  const theme = useTheme();
2158
2195
  if (!walletConnectProjectId) {
2159
- return /* @__PURE__ */ import_react29.default.createElement(Modal, { isOpen: modalOpen, onClose: handleClose, size: "full" }, /* @__PURE__ */ import_react29.default.createElement(ModalHeader, { onClose: handleClose }, /* @__PURE__ */ import_react29.default.createElement(import_react_native14.View, { style: styles13.headerContent }, /* @__PURE__ */ import_react29.default.createElement(
2160
- import_react_native14.TouchableOpacity,
2196
+ return /* @__PURE__ */ import_react30.default.createElement(Modal, { isOpen: modalOpen, onClose: handleClose, size: "full" }, /* @__PURE__ */ import_react30.default.createElement(ModalHeader, { onClose: handleClose }, /* @__PURE__ */ import_react30.default.createElement(import_react_native15.View, { style: styles13.headerContent }, /* @__PURE__ */ import_react30.default.createElement(
2197
+ import_react_native15.TouchableOpacity,
2161
2198
  {
2162
2199
  onPress: () => {
2163
2200
  setAddIntegrationMode(null);
2164
2201
  },
2165
2202
  style: styles13.backButton
2166
2203
  },
2167
- /* @__PURE__ */ import_react29.default.createElement(ArrowLeftIcon, { size: 20, color: theme.colors.text })
2168
- ), /* @__PURE__ */ import_react29.default.createElement(import_react_native14.Text, { style: [styles13.headerTitle, { color: theme.colors.text }] }, "Integration"))), /* @__PURE__ */ import_react29.default.createElement(ModalBody, { scrollable: false, style: styles13.contentContainer }, /* @__PURE__ */ import_react29.default.createElement(import_react_native14.View, { style: styles13.emptyState }, /* @__PURE__ */ import_react29.default.createElement(
2169
- import_react_native14.Text,
2204
+ /* @__PURE__ */ import_react30.default.createElement(ArrowLeftIcon, { size: 20, color: theme.colors.text })
2205
+ ), /* @__PURE__ */ import_react30.default.createElement(import_react_native15.Text, { style: [styles13.headerTitle, { color: theme.colors.text }] }, "Integration"))), /* @__PURE__ */ import_react30.default.createElement(ModalBody, { scrollable: false, style: styles13.contentContainer }, /* @__PURE__ */ import_react30.default.createElement(import_react_native15.View, { style: styles13.emptyState }, /* @__PURE__ */ import_react30.default.createElement(
2206
+ import_react_native15.Text,
2170
2207
  {
2171
2208
  style: [styles13.emptyStateTitle, { color: theme.colors.text }]
2172
2209
  },
2173
2210
  "WalletConnect is not configured"
2174
- ), /* @__PURE__ */ import_react29.default.createElement(
2175
- import_react_native14.Text,
2211
+ ), /* @__PURE__ */ import_react30.default.createElement(
2212
+ import_react_native15.Text,
2176
2213
  {
2177
2214
  style: [
2178
2215
  styles13.infoText,
@@ -2180,7 +2217,7 @@ var WalletConnectComponent = ({
2180
2217
  ]
2181
2218
  },
2182
2219
  "Please add a walletConnectProjectId to KryptosConnectProvider to enable wallet connections."
2183
- ), /* @__PURE__ */ import_react29.default.createElement(
2220
+ ), /* @__PURE__ */ import_react30.default.createElement(
2184
2221
  Button,
2185
2222
  {
2186
2223
  variant: "outline",
@@ -2191,7 +2228,7 @@ var WalletConnectComponent = ({
2191
2228
  "Go back"
2192
2229
  ))));
2193
2230
  }
2194
- return /* @__PURE__ */ import_react29.default.createElement(wallet_connect_default, null, /* @__PURE__ */ import_react29.default.createElement(
2231
+ return /* @__PURE__ */ import_react30.default.createElement(wallet_connect_default, null, /* @__PURE__ */ import_react30.default.createElement(
2195
2232
  ConnectButton,
2196
2233
  {
2197
2234
  integration,
@@ -2199,7 +2236,8 @@ var WalletConnectComponent = ({
2199
2236
  onClose,
2200
2237
  handleClose,
2201
2238
  modalOpen,
2202
- setAddIntegrationMode
2239
+ setAddIntegrationMode,
2240
+ providersList
2203
2241
  }
2204
2242
  ));
2205
2243
  };
@@ -2208,17 +2246,85 @@ function ConnectButton({
2208
2246
  onAddHandle,
2209
2247
  handleClose,
2210
2248
  modalOpen,
2211
- setAddIntegrationMode
2249
+ setAddIntegrationMode,
2250
+ providersList
2212
2251
  }) {
2213
2252
  const theme = useTheme();
2214
2253
  const { open, disconnect } = (0, import_appkit_react_native3.useAppKit)();
2215
- const { address, isConnected, chainId } = (0, import_appkit_react_native3.useAccount)();
2254
+ const { address, isConnected } = (0, import_appkit_react_native3.useAccount)();
2216
2255
  const { linkToken, user, clientId } = useKryptosConnect();
2217
- const [selectedChains, setSelectedChains] = (0, import_react29.useState)(/* @__PURE__ */ new Set());
2218
- const [errorMessage, setErrorMessage] = (0, import_react29.useState)("");
2219
- const [chainErrors, setChainErrors] = (0, import_react29.useState)({});
2220
- const [isLoading, setIsLoading] = (0, import_react29.useState)(false);
2221
- const userUsedChains = integration?.walletSupportedChains || [];
2256
+ const [selectedChains, setSelectedChains] = (0, import_react30.useState)(/* @__PURE__ */ new Set());
2257
+ const [errorMessage, setErrorMessage] = (0, import_react30.useState)("");
2258
+ const [chainErrors, setChainErrors] = (0, import_react30.useState)({});
2259
+ const [isLoading, setIsLoading] = (0, import_react30.useState)(false);
2260
+ const [userUsedChains, setUserUsedChains] = (0, import_react30.useState)([]);
2261
+ const [isFetchingChains, setIsFetchingChains] = (0, import_react30.useState)(false);
2262
+ const availableChains = (0, import_react30.useMemo)(() => {
2263
+ if (userUsedChains.length > 0) {
2264
+ return userUsedChains;
2265
+ }
2266
+ if (integration.walletSupportedChains && integration.walletSupportedChains.length > 0) {
2267
+ return integration.walletSupportedChains;
2268
+ }
2269
+ return [];
2270
+ }, [userUsedChains, integration.walletSupportedChains]);
2271
+ (0, import_react30.useEffect)(() => {
2272
+ if (!isConnected || !address || !address.trim()) {
2273
+ setUserUsedChains([]);
2274
+ setSelectedChains(/* @__PURE__ */ new Set());
2275
+ setIsFetchingChains(false);
2276
+ return;
2277
+ }
2278
+ const debounceTimer = setTimeout(async () => {
2279
+ if (linkToken && address && address.trim() && isConnected) {
2280
+ try {
2281
+ setIsFetchingChains(true);
2282
+ let chains = [];
2283
+ if (integration.isEvmWallet) {
2284
+ const res = await getUserUsedChains(linkToken, address.trim());
2285
+ if (res && Array.isArray(res) && res.length > 0) {
2286
+ chains = res;
2287
+ }
2288
+ }
2289
+ if (chains.length === 0 && integration.walletSupportedChains && integration.walletSupportedChains.length > 0) {
2290
+ chains = integration.walletSupportedChains;
2291
+ }
2292
+ if (chains.length > 0) {
2293
+ setUserUsedChains(chains);
2294
+ setSelectedChains(new Set(chains.map((chain) => chain.id)));
2295
+ } else {
2296
+ setUserUsedChains([]);
2297
+ setSelectedChains(/* @__PURE__ */ new Set());
2298
+ }
2299
+ } catch (error) {
2300
+ console.error("Failed to fetch user chains:", error);
2301
+ if (integration.walletSupportedChains && integration.walletSupportedChains.length > 0) {
2302
+ setUserUsedChains(integration.walletSupportedChains);
2303
+ setSelectedChains(
2304
+ new Set(
2305
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
2306
+ integration.walletSupportedChains.map((chain) => chain.id)
2307
+ )
2308
+ );
2309
+ } else {
2310
+ setUserUsedChains([]);
2311
+ setSelectedChains(/* @__PURE__ */ new Set());
2312
+ }
2313
+ } finally {
2314
+ setIsFetchingChains(false);
2315
+ }
2316
+ }
2317
+ }, 500);
2318
+ return () => {
2319
+ clearTimeout(debounceTimer);
2320
+ };
2321
+ }, [
2322
+ linkToken,
2323
+ address,
2324
+ isConnected,
2325
+ integration.isEvmWallet,
2326
+ integration.walletSupportedChains
2327
+ ]);
2222
2328
  const validateForm = () => {
2223
2329
  if (!address) {
2224
2330
  setErrorMessage("Please connect a wallet");
@@ -2236,7 +2342,7 @@ function ConnectButton({
2236
2342
  setIsLoading(true);
2237
2343
  setErrorMessage("");
2238
2344
  setChainErrors({});
2239
- const chainsToProcess = userUsedChains.filter(
2345
+ const chainsToProcess = availableChains.filter(
2240
2346
  (c) => selectedChains.has(c.id)
2241
2347
  );
2242
2348
  const integrationsToAdd = [];
@@ -2244,43 +2350,46 @@ function ConnectButton({
2244
2350
  const walletTestsPayload = chainsToProcess.map((chain) => {
2245
2351
  const walletId = generateUUID();
2246
2352
  const displaySuffix = address ? address?.length > 8 ? `${address.slice(0, 4)}...${address.slice(-4)}` : address : "";
2247
- const alias = `${integration.id} - ${chain.id} (${displaySuffix})`;
2353
+ const alias = `${integration.public_name} (${displaySuffix})`;
2354
+ const provider = providersList.find((p) => p.id === chain.id);
2248
2355
  return {
2249
2356
  chain,
2250
2357
  walletId,
2251
2358
  alias,
2252
2359
  credential: {
2253
- source: integration.id,
2360
+ source: provider?.id,
2254
2361
  credential: {
2255
2362
  address,
2256
2363
  userId: user?.user_id || "0",
2257
- projectId: integration.projectId,
2364
+ projectId: provider?.projectId,
2258
2365
  apiKey: "0",
2259
2366
  secret: "0",
2260
2367
  privateKey: "0",
2261
2368
  alias,
2262
2369
  walletId,
2263
- exchange: integration.id
2370
+ exchange: provider?.id
2264
2371
  }
2265
2372
  }
2266
2373
  };
2267
2374
  });
2268
2375
  const results = await Promise.allSettled(
2376
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
2269
2377
  walletTestsPayload.map(
2270
- (data) => testCredentials(linkToken, data.credential)
2378
+ (testData) => testCredentials(linkToken, { ...testData.credential })
2271
2379
  )
2272
2380
  );
2273
2381
  results.forEach((result, index) => {
2274
2382
  const { chain, walletId, alias } = walletTestsPayload[index];
2275
- if (result.status === "fulfilled" && result.value?.valid) {
2383
+ const provider = providersList.find((p) => p.id === chain.id);
2384
+ if (result.status === "fulfilled" && result.value?.valid && provider) {
2276
2385
  const data = {
2277
2386
  alias,
2278
- exchange: integration.id.toLowerCase(),
2279
- id: integration.id,
2280
- public_name: integration.public_name,
2387
+ exchange: provider.id.toLowerCase(),
2388
+ id: provider.id,
2389
+ public_name: provider.public_name,
2281
2390
  sync_time: (/* @__PURE__ */ new Date()).getTime(),
2282
2391
  fetchAll: true,
2283
- logo: integration.logo || null,
2392
+ logo: provider.logo || null,
2284
2393
  startTime: null,
2285
2394
  endTime: null,
2286
2395
  uid: user?.user_id || "",
@@ -2289,24 +2398,37 @@ function ConnectButton({
2289
2398
  clientId,
2290
2399
  createdAt: (/* @__PURE__ */ new Date()).toISOString()
2291
2400
  },
2292
- metadata: {
2293
- environment: "sandbox"
2294
- },
2295
2401
  addedOn: (/* @__PURE__ */ new Date()).getTime(),
2296
- default_chain: chain.name,
2297
- default_chain_logo: chain.logo || null,
2298
- type: integration.type,
2299
- isNftSupported: integration.isEvmWallet || integration.nftSupport || false,
2300
- chainId: chain?.community_id || chain.chainId || chain.id,
2301
- address
2402
+ default_chain: integration?.id || "",
2403
+ default_chain_logo: integration?.logo || "",
2404
+ type: provider.type || "",
2405
+ isNftSupported: provider?.isEvmWallet || provider?.nftSupport || false,
2406
+ chainId: provider?.community_id,
2407
+ credsData: {
2408
+ address
2409
+ }
2302
2410
  };
2303
2411
  integrationsToAdd.push(data);
2304
2412
  } else {
2305
- errors[chain.id] = "Wallet verification failed";
2413
+ if (result.status === "rejected") {
2414
+ errors[chain.id] = result.reason?.response?.data?.message || "Failed to process chain";
2415
+ } else if (result.status === "fulfilled") {
2416
+ errors[chain.id] = result.value?.message || "Failed to verify chain";
2417
+ }
2306
2418
  }
2307
2419
  });
2420
+ setChainErrors(errors);
2421
+ if (Object.keys(errors).length > 0) {
2422
+ setErrorMessage(
2423
+ `Cannot add integrations. ${Object.keys(errors).length} chain${Object.keys(errors).length > 1 ? "s" : ""} failed verification. Please fix the errors and try again.`
2424
+ );
2425
+ return;
2426
+ }
2308
2427
  if (integrationsToAdd.length > 0) {
2309
2428
  onAddHandle(integrationsToAdd);
2429
+ if (isConnected) {
2430
+ disconnect();
2431
+ }
2310
2432
  setChainErrors({});
2311
2433
  setErrorMessage("");
2312
2434
  } else {
@@ -2322,30 +2444,49 @@ function ConnectButton({
2322
2444
  setIsLoading(false);
2323
2445
  }
2324
2446
  };
2325
- const toggleChainSelection = (chainId2) => {
2447
+ const toggleChainSelection = (chainId) => {
2326
2448
  const newSelected = new Set(selectedChains);
2327
- if (newSelected.has(chainId2)) {
2328
- newSelected.delete(chainId2);
2449
+ if (newSelected.has(chainId)) {
2450
+ newSelected.delete(chainId);
2329
2451
  } else {
2330
- newSelected.add(chainId2);
2452
+ newSelected.add(chainId);
2331
2453
  }
2332
2454
  setSelectedChains(newSelected);
2333
- if (chainErrors[chainId2]) {
2455
+ if (chainErrors[chainId]) {
2334
2456
  const newErrors = { ...chainErrors };
2335
- delete newErrors[chainId2];
2457
+ delete newErrors[chainId];
2336
2458
  setChainErrors(newErrors);
2337
2459
  }
2338
2460
  };
2339
- return /* @__PURE__ */ import_react29.default.createElement(Modal, { isOpen: modalOpen, onClose: handleClose, size: "full" }, /* @__PURE__ */ import_react29.default.createElement(ModalHeader, { onClose: handleClose }, /* @__PURE__ */ import_react29.default.createElement(import_react_native14.View, { style: styles13.headerContent }, /* @__PURE__ */ import_react29.default.createElement(
2340
- import_react_native14.TouchableOpacity,
2461
+ return /* @__PURE__ */ import_react30.default.createElement(Modal, { isOpen: modalOpen, onClose: handleClose, size: "full" }, /* @__PURE__ */ import_react30.default.createElement(ModalHeader, { onClose: handleClose }, /* @__PURE__ */ import_react30.default.createElement(import_react_native15.View, { style: styles13.headerContent }, /* @__PURE__ */ import_react30.default.createElement(
2462
+ import_react_native15.TouchableOpacity,
2341
2463
  {
2342
2464
  onPress: () => {
2343
2465
  setAddIntegrationMode(null);
2466
+ if (isConnected) {
2467
+ disconnect();
2468
+ }
2344
2469
  },
2345
2470
  style: styles13.backButton
2346
2471
  },
2347
- /* @__PURE__ */ import_react29.default.createElement(ArrowLeftIcon, { size: 20, color: theme.colors.text })
2348
- ), /* @__PURE__ */ import_react29.default.createElement(import_react_native14.Text, { style: [styles13.headerTitle, { color: theme.colors.text }] }, "Integration"))), /* @__PURE__ */ import_react29.default.createElement(ModalBody, { scrollable: false, style: styles13.contentContainer }, !isConnected ? /* @__PURE__ */ import_react29.default.createElement(import_react_native14.View, null, /* @__PURE__ */ import_react29.default.createElement(import_react_native14.Text, { style: [styles13.infoText, { color: theme.colors.text }] }, "Connect your wallet to continue"), /* @__PURE__ */ import_react29.default.createElement(
2472
+ /* @__PURE__ */ import_react30.default.createElement(ArrowLeftIcon, { size: 20, color: theme.colors.text })
2473
+ ), /* @__PURE__ */ import_react30.default.createElement(import_react_native15.Text, { style: [styles13.headerTitle, { color: theme.colors.text }] }, "Integration"))), /* @__PURE__ */ import_react30.default.createElement(ModalBody, { scrollable: false, style: styles13.contentContainer }, /* @__PURE__ */ import_react30.default.createElement(import_react_native15.View, { style: styles13.header }, integration.logo ? isSvgUrl(integration.logo) ? /* @__PURE__ */ import_react30.default.createElement(RemoteSvg, { uri: integration.logo }) : /* @__PURE__ */ import_react30.default.createElement(
2474
+ import_react_native15.Image,
2475
+ {
2476
+ source: { uri: integration.logo },
2477
+ style: styles13.logo,
2478
+ resizeMode: "contain"
2479
+ }
2480
+ ) : /* @__PURE__ */ import_react30.default.createElement(
2481
+ import_react_native15.View,
2482
+ {
2483
+ style: [
2484
+ styles13.logoPlaceholder,
2485
+ { backgroundColor: theme.colors.surface }
2486
+ ]
2487
+ },
2488
+ /* @__PURE__ */ import_react30.default.createElement(import_react_native15.Text, { style: { color: theme.colors.text } }, integration.name?.charAt(0) || "?")
2489
+ ), /* @__PURE__ */ import_react30.default.createElement(import_react_native15.Text, { style: [styles13.name, { color: theme.colors.text }] }, integration.name)), !isConnected ? /* @__PURE__ */ import_react30.default.createElement(import_react_native15.View, null, /* @__PURE__ */ import_react30.default.createElement(import_react_native15.Text, { style: [styles13.infoText, { color: theme.colors.text }] }, "Connect your wallet to continue"), /* @__PURE__ */ import_react30.default.createElement(
2349
2490
  Button,
2350
2491
  {
2351
2492
  variant: "primary",
@@ -2353,107 +2494,149 @@ function ConnectButton({
2353
2494
  onPress: () => open({ view: "Connect" })
2354
2495
  },
2355
2496
  "Connect Wallet"
2356
- )) : /* @__PURE__ */ import_react29.default.createElement(import_react_native14.View, null, /* @__PURE__ */ import_react29.default.createElement(import_react_native14.Text, { style: [styles13.connectedTitle, { color: theme.colors.text }] }, "Wallet Connected"), /* @__PURE__ */ import_react29.default.createElement(import_react_native14.Text, { style: [styles13.connectedText, { color: theme.colors.text }] }, "Address: ", address), /* @__PURE__ */ import_react29.default.createElement(import_react_native14.Text, { style: [styles13.connectedText, { color: theme.colors.text }] }, "Chain: ", chainId), /* @__PURE__ */ import_react29.default.createElement(Button, { variant: "ghost", size: "sm", onPress: () => disconnect() }, "Disconnect Wallet"), userUsedChains.length > 0 && address && /* @__PURE__ */ import_react29.default.createElement(import_react_native14.View, { style: styles13.chainSelection }, /* @__PURE__ */ import_react29.default.createElement(import_react_native14.Text, { style: [styles13.chainTitle, { color: theme.colors.text }] }, "Select Chains to Add:"), /* @__PURE__ */ import_react29.default.createElement(import_react_native14.ScrollView, { contentContainerStyle: styles13.scrollViewContent }, /* @__PURE__ */ import_react29.default.createElement(import_react_native14.View, { style: styles13.chainChips }, userUsedChains.map((chain) => {
2357
- const isSelected = selectedChains.has(chain.id);
2358
- const hasError = chainErrors[chain.id];
2359
- return /* @__PURE__ */ import_react29.default.createElement(
2360
- import_react_native14.TouchableOpacity,
2361
- {
2362
- onPress: () => toggleChainSelection(chain.id),
2363
- style: styles13.chainButton,
2364
- key: chain.id
2365
- },
2366
- /* @__PURE__ */ import_react29.default.createElement(
2367
- import_react_native14.View,
2497
+ )) : /* @__PURE__ */ import_react30.default.createElement(import_react_native15.View, { style: styles13.connectedContainer }, /* @__PURE__ */ import_react30.default.createElement(import_react_native15.View, { style: styles13.connectedHeader }, /* @__PURE__ */ import_react30.default.createElement(
2498
+ import_react_native15.Text,
2499
+ {
2500
+ style: [styles13.connectedTitle, { color: theme.colors.text }]
2501
+ },
2502
+ "Wallet Connected"
2503
+ ), /* @__PURE__ */ import_react30.default.createElement(
2504
+ import_react_native15.Text,
2505
+ {
2506
+ style: [styles13.connectedText, { color: theme.colors.text }]
2507
+ },
2508
+ "Address: ",
2509
+ address
2510
+ ), /* @__PURE__ */ import_react30.default.createElement(Button, { variant: "ghost", size: "sm", onPress: () => disconnect() }, "Disconnect Wallet"), isFetchingChains ? /* @__PURE__ */ import_react30.default.createElement(
2511
+ import_react_native15.Text,
2512
+ {
2513
+ style: [styles13.fetchingText, { color: theme.colors.text }]
2514
+ },
2515
+ "Fetching chains..."
2516
+ ) : null), availableChains.length > 0 && address && /* @__PURE__ */ import_react30.default.createElement(
2517
+ import_react_native15.ScrollView,
2518
+ {
2519
+ style: styles13.scrollView,
2520
+ contentContainerStyle: styles13.scrollViewContent,
2521
+ showsVerticalScrollIndicator: true,
2522
+ nestedScrollEnabled: true
2523
+ },
2524
+ /* @__PURE__ */ import_react30.default.createElement(import_react_native15.Text, { style: [styles13.chainTitle, { color: theme.colors.text }] }, "Select Chains to Add:"),
2525
+ /* @__PURE__ */ import_react30.default.createElement(import_react_native15.View, null, /* @__PURE__ */ import_react30.default.createElement(import_react_native15.View, { style: styles13.chainChips }, availableChains.map((chain) => {
2526
+ const isSelected = selectedChains.has(chain.id);
2527
+ const hasError = chainErrors[chain.id];
2528
+ return /* @__PURE__ */ import_react30.default.createElement(
2529
+ import_react_native15.TouchableOpacity,
2368
2530
  {
2369
- style: [
2370
- styles13.chainChip,
2371
- {
2372
- backgroundColor: hasError ? theme.colors.errorLight : isSelected ? theme.colors.primary + "20" : theme.colors.surface,
2373
- borderColor: hasError ? theme.colors.error : isSelected ? theme.colors.primary : theme.colors.border
2374
- }
2375
- ]
2531
+ onPress: () => toggleChainSelection(chain.id),
2532
+ style: styles13.chainButton,
2533
+ key: chain.id
2376
2534
  },
2377
- /* @__PURE__ */ import_react29.default.createElement(
2378
- import_react_native14.Text,
2535
+ /* @__PURE__ */ import_react30.default.createElement(
2536
+ import_react_native15.View,
2379
2537
  {
2380
2538
  style: [
2381
- styles13.chainName,
2539
+ styles13.chainChip,
2382
2540
  {
2383
- color: hasError ? theme.colors.error : isSelected ? theme.colors.primary : theme.colors.text
2541
+ backgroundColor: hasError ? theme.colors.errorLight : isSelected ? theme.colors.primary + "20" : theme.colors.surface,
2542
+ borderColor: hasError ? theme.colors.error : isSelected ? theme.colors.primary : theme.colors.border
2384
2543
  }
2385
2544
  ]
2386
2545
  },
2387
- chain.id
2388
- ),
2389
- isSelected ? /* @__PURE__ */ import_react29.default.createElement(
2390
- CloseIcon,
2391
- {
2392
- size: 12,
2393
- color: hasError ? theme.colors.error : theme.colors.primary
2394
- }
2395
- ) : /* @__PURE__ */ import_react29.default.createElement(
2396
- PlusIcon,
2397
- {
2398
- size: 12,
2399
- color: theme.colors.textSecondary
2400
- }
2546
+ /* @__PURE__ */ import_react30.default.createElement(
2547
+ import_react_native15.Text,
2548
+ {
2549
+ style: [
2550
+ styles13.chainName,
2551
+ {
2552
+ color: hasError ? theme.colors.error : isSelected ? theme.colors.primary : theme.colors.text
2553
+ }
2554
+ ]
2555
+ },
2556
+ chain.id
2557
+ ),
2558
+ isSelected ? /* @__PURE__ */ import_react30.default.createElement(
2559
+ CloseIcon,
2560
+ {
2561
+ size: 12,
2562
+ color: hasError ? theme.colors.error : theme.colors.primary
2563
+ }
2564
+ ) : /* @__PURE__ */ import_react30.default.createElement(
2565
+ PlusIcon,
2566
+ {
2567
+ size: 12,
2568
+ color: theme.colors.textSecondary
2569
+ }
2570
+ )
2401
2571
  )
2402
- )
2403
- );
2404
- }))), Object.keys(chainErrors).length > 0 && /* @__PURE__ */ import_react29.default.createElement(import_react_native14.View, { style: styles13.chainErrorsContainer }, /* @__PURE__ */ import_react29.default.createElement(
2405
- import_react_native14.Text,
2406
- {
2407
- style: [
2408
- styles13.chainErrorsTitle,
2409
- { color: theme.colors.error }
2410
- ]
2411
- },
2412
- "Errors:"
2413
- ), Object.entries(chainErrors).map(([chainId2, error]) => {
2414
- const chain = userUsedChains.find(
2415
- (c) => c.id === chainId2
2416
- );
2417
- return /* @__PURE__ */ import_react29.default.createElement(
2418
- import_react_native14.Text,
2572
+ );
2573
+ })), errorMessage ? /* @__PURE__ */ import_react30.default.createElement(import_react_native15.View, { style: styles13.errorMessageContainer }, /* @__PURE__ */ import_react30.default.createElement(Alert, { variant: "destructive" }, /* @__PURE__ */ import_react30.default.createElement(AlertDescription, null, errorMessage))) : null, Object.keys(chainErrors || {}).length > 0 && /* @__PURE__ */ import_react30.default.createElement(import_react_native15.View, { style: styles13.chainErrorsContainer }, /* @__PURE__ */ import_react30.default.createElement(
2574
+ import_react_native15.Text,
2419
2575
  {
2420
- key: chainId2,
2421
2576
  style: [
2422
- styles13.chainErrorItem,
2577
+ styles13.chainErrorsTitle,
2423
2578
  { color: theme.colors.error }
2424
2579
  ]
2425
2580
  },
2426
- "\u2022 ",
2427
- chain?.name,
2428
- ": ",
2429
- error
2430
- );
2431
- }))), errorMessage ? /* @__PURE__ */ import_react29.default.createElement(Alert, { variant: "destructive" }, /* @__PURE__ */ import_react29.default.createElement(AlertDescription, null, errorMessage)) : null)), userUsedChains.length > 0 && address && /* @__PURE__ */ import_react29.default.createElement(ModalFooter, { style: { paddingVertical: 8 } }, /* @__PURE__ */ import_react29.default.createElement(
2581
+ "Errors:"
2582
+ ), Object.entries(chainErrors).map(([chainId, error]) => {
2583
+ const chain = availableChains.find(
2584
+ (c) => c.id === chainId
2585
+ );
2586
+ return /* @__PURE__ */ import_react30.default.createElement(
2587
+ import_react_native15.Text,
2588
+ {
2589
+ key: chainId,
2590
+ style: [
2591
+ styles13.chainErrorItem,
2592
+ { color: theme.colors.error }
2593
+ ]
2594
+ },
2595
+ "\u2022 ",
2596
+ chain?.name ?? chainId,
2597
+ ": ",
2598
+ String(error)
2599
+ );
2600
+ })))
2601
+ ))), availableChains.length > 0 && address && /* @__PURE__ */ import_react30.default.createElement(ModalFooter, { style: { paddingVertical: 8 } }, /* @__PURE__ */ import_react30.default.createElement(
2432
2602
  Button,
2433
2603
  {
2434
2604
  variant: "outline",
2435
2605
  size: "lg",
2436
2606
  onPress: onSubmitWalletConnect,
2437
2607
  loading: isLoading,
2438
- disabled: isLoading || !!address && userUsedChains.length > 0 && selectedChains.size === 0,
2608
+ disabled: isLoading || !!address && availableChains.length > 0 && selectedChains.size === 0,
2439
2609
  style: styles13.button
2440
2610
  },
2441
2611
  selectedChains.size > 0 ? `Add ${selectedChains.size} Chain${selectedChains.size > 1 ? "s" : ""}` : "Add Integration"
2442
- ), /* @__PURE__ */ import_react29.default.createElement(Footer, null)));
2612
+ ), /* @__PURE__ */ import_react30.default.createElement(Footer, null)));
2443
2613
  }
2444
- var styles13 = import_react_native14.StyleSheet.create({
2445
- connectedTitle: { fontSize: 18, fontWeight: "600", marginBottom: 4 },
2614
+ var styles13 = import_react_native15.StyleSheet.create({
2615
+ connectedContainer: {
2616
+ flex: 1
2617
+ },
2618
+ connectedHeader: {
2619
+ marginBottom: 8
2620
+ },
2621
+ connectedTitle: { fontSize: 12, fontWeight: "600", marginBottom: 4 },
2446
2622
  connectedText: { fontSize: 14, marginBottom: 4 },
2623
+ fetchingText: { fontSize: 12, marginBottom: 4, textAlign: "center" },
2447
2624
  infoText: {
2448
2625
  fontSize: 16,
2449
2626
  fontWeight: "600",
2450
2627
  marginBottom: 8,
2451
2628
  textAlign: "center"
2452
2629
  },
2630
+ scrollView: {
2631
+ flex: 1
2632
+ },
2453
2633
  scrollViewContent: {
2454
- paddingBottom: 100,
2634
+ paddingBottom: 40,
2455
2635
  flexGrow: 1
2456
2636
  },
2637
+ errorMessageContainer: {
2638
+ marginTop: 16
2639
+ },
2457
2640
  headerContent: {
2458
2641
  flexDirection: "row",
2459
2642
  alignItems: "center"
@@ -2472,17 +2655,13 @@ var styles13 = import_react_native14.StyleSheet.create({
2472
2655
  contentContainer: {
2473
2656
  padding: 20,
2474
2657
  // theme.spacing.xl
2475
- paddingBottom: 40,
2658
+ paddingBottom: 20,
2476
2659
  width: "100%",
2477
2660
  overflow: "hidden",
2478
2661
  alignSelf: "center",
2479
2662
  flexDirection: "column",
2480
2663
  flex: 1
2481
2664
  },
2482
- chainSelection: {
2483
- marginBottom: 16
2484
- // theme.spacing.lg
2485
- },
2486
2665
  chainTitle: {
2487
2666
  fontSize: 14,
2488
2667
  // theme.fontSize.md
@@ -2534,9 +2713,7 @@ var styles13 = import_react_native14.StyleSheet.create({
2534
2713
  // theme.spacing.xs
2535
2714
  },
2536
2715
  button: {
2537
- width: "100%",
2538
- marginTop: 16
2539
- // theme.spacing.lg - consistent button spacing
2716
+ width: "100%"
2540
2717
  },
2541
2718
  emptyState: {
2542
2719
  flex: 1,
@@ -2550,40 +2727,70 @@ var styles13 = import_react_native14.StyleSheet.create({
2550
2727
  },
2551
2728
  emptyStateButton: {
2552
2729
  marginTop: 8
2730
+ },
2731
+ header: {
2732
+ flexDirection: "row",
2733
+ justifyContent: "center",
2734
+ alignItems: "center",
2735
+ marginBottom: 16
2736
+ // theme.spacing.lg
2737
+ },
2738
+ logo: {
2739
+ width: 32,
2740
+ height: 32,
2741
+ borderRadius: 8
2742
+ // theme.borderRadius.sm
2743
+ },
2744
+ logoPlaceholder: {
2745
+ width: 32,
2746
+ height: 32,
2747
+ borderRadius: 8,
2748
+ // theme.borderRadius.sm
2749
+ alignItems: "center",
2750
+ justifyContent: "center"
2751
+ },
2752
+ name: {
2753
+ fontSize: 16,
2754
+ // theme.fontSize.lg
2755
+ fontWeight: "600",
2756
+ marginLeft: 12,
2757
+ // theme.spacing.md
2758
+ textTransform: "capitalize"
2553
2759
  }
2554
2760
  });
2555
2761
 
2556
2762
  // src/molecules/IntegrationForm.tsx
2557
- var import_react30 = __toESM(require("react"));
2558
- var import_react_native15 = require("react-native");
2763
+ var import_react31 = __toESM(require("react"));
2764
+ var import_react_native16 = require("react-native");
2559
2765
  var IntegrationForm = ({
2560
2766
  metadata,
2561
2767
  onAddHandle,
2562
2768
  open,
2563
2769
  setAddIntegrationMode,
2564
- handleClose
2770
+ handleClose,
2771
+ providersList
2565
2772
  }) => {
2566
2773
  const { clientId, linkToken, user } = useKryptosConnect();
2567
2774
  const theme = useTheme();
2568
- const [isLoading, setIsLoading] = import_react30.default.useState(false);
2569
- const [isFetchingChains, setIsFetchingChains] = import_react30.default.useState(false);
2570
- const [userUsedChains, setUserUsedChains] = import_react30.default.useState([]);
2571
- const [selectedChains, setSelectedChains] = import_react30.default.useState(
2775
+ const [isLoading, setIsLoading] = import_react31.default.useState(false);
2776
+ const [isFetchingChains, setIsFetchingChains] = import_react31.default.useState(false);
2777
+ const [userUsedChains, setUserUsedChains] = import_react31.default.useState([]);
2778
+ const [selectedChains, setSelectedChains] = import_react31.default.useState(
2572
2779
  /* @__PURE__ */ new Set()
2573
2780
  );
2574
- const [chainErrors, setChainErrors] = import_react30.default.useState(
2781
+ const [chainErrors, setChainErrors] = import_react31.default.useState(
2575
2782
  {}
2576
2783
  );
2577
- const [errorMessage, setErrorMessage] = import_react30.default.useState("");
2578
- const [formValues, setFormValues] = import_react30.default.useState({
2784
+ const [errorMessage, setErrorMessage] = import_react31.default.useState("");
2785
+ const [formValues, setFormValues] = import_react31.default.useState({
2579
2786
  address: "",
2580
2787
  account_name: "",
2581
2788
  api_key: "",
2582
2789
  secret_key: "",
2583
2790
  password: ""
2584
2791
  });
2585
- const [formErrors, setFormErrors] = import_react30.default.useState({});
2586
- import_react30.default.useEffect(() => {
2792
+ const [formErrors, setFormErrors] = import_react31.default.useState({});
2793
+ import_react31.default.useEffect(() => {
2587
2794
  if (!formValues.address || !formValues.address.trim()) {
2588
2795
  setUserUsedChains([]);
2589
2796
  setSelectedChains(/* @__PURE__ */ new Set());
@@ -2709,9 +2916,6 @@ var IntegrationForm = ({
2709
2916
  clientId,
2710
2917
  createdAt: (/* @__PURE__ */ new Date()).toISOString()
2711
2918
  },
2712
- metadata: {
2713
- environment: "sandbox"
2714
- },
2715
2919
  addedOn: (/* @__PURE__ */ new Date()).getTime(),
2716
2920
  default_chain: chain.name,
2717
2921
  default_chain_logo: chain.logo || null,
@@ -2795,7 +2999,7 @@ var IntegrationForm = ({
2795
2999
  isNftSupported: metadata.isEvmWallet || metadata.nftSupport || false
2796
3000
  };
2797
3001
  if (metadata.community_id) {
2798
- data.chainId = Number(metadata.community_id);
3002
+ data.chainId = metadata.community_id;
2799
3003
  }
2800
3004
  if (formValues.address) data.address = formValues.address;
2801
3005
  if (formValues.account_name) data.accountName = formValues.account_name;
@@ -2830,24 +3034,24 @@ var IntegrationForm = ({
2830
3034
  };
2831
3035
  const hasNoFields = !metadata.password && !metadata.secret_key && !metadata.api_key && !metadata.address && !metadata.account_name;
2832
3036
  const shouldShowFormFields = metadata.password || metadata.secret_key || metadata.api_key || metadata.address || metadata.account_name;
2833
- const renderLogo = () => metadata.logo ? /* @__PURE__ */ import_react30.default.createElement(
2834
- import_react_native15.Image,
3037
+ const renderLogo = () => metadata.logo ? isSvgUrl(metadata.logo) ? /* @__PURE__ */ import_react31.default.createElement(RemoteSvg, { uri: metadata.logo }) : /* @__PURE__ */ import_react31.default.createElement(
3038
+ import_react_native16.Image,
2835
3039
  {
2836
3040
  source: { uri: metadata.logo },
2837
3041
  style: styles14.logo,
2838
3042
  resizeMode: "contain"
2839
3043
  }
2840
- ) : /* @__PURE__ */ import_react30.default.createElement(
2841
- import_react_native15.View,
3044
+ ) : /* @__PURE__ */ import_react31.default.createElement(
3045
+ import_react_native16.View,
2842
3046
  {
2843
3047
  style: [
2844
3048
  styles14.logoPlaceholder,
2845
3049
  { backgroundColor: theme.colors.surface }
2846
3050
  ]
2847
3051
  },
2848
- /* @__PURE__ */ import_react30.default.createElement(import_react_native15.Text, { style: { color: theme.colors.text } }, metadata.name?.charAt(0) || "?")
3052
+ /* @__PURE__ */ import_react31.default.createElement(import_react_native16.Text, { style: { color: theme.colors.text } }, metadata.name?.charAt(0) || "?")
2849
3053
  );
2850
- const renderInput = (key, props) => /* @__PURE__ */ import_react30.default.createElement(
3054
+ const renderInput = (key, props) => /* @__PURE__ */ import_react31.default.createElement(
2851
3055
  Input,
2852
3056
  {
2853
3057
  placeholder: props.placeholder,
@@ -2859,19 +3063,19 @@ var IntegrationForm = ({
2859
3063
  secureTextEntry: props.secureTextEntry
2860
3064
  }
2861
3065
  );
2862
- const renderErrorAlert = () => errorMessage ? /* @__PURE__ */ import_react30.default.createElement(Alert, { variant: "destructive" }, /* @__PURE__ */ import_react30.default.createElement(AlertDescription, null, errorMessage)) : null;
2863
- const renderChainSelection = () => userUsedChains.length > 0 && formValues.address && /* @__PURE__ */ import_react30.default.createElement(import_react_native15.View, { style: styles14.chainSelection }, /* @__PURE__ */ import_react30.default.createElement(import_react_native15.Text, { style: [styles14.chainTitle, { color: theme.colors.text }] }, "Select Chains to Add:"), /* @__PURE__ */ import_react30.default.createElement(import_react_native15.ScrollView, { contentContainerStyle: styles14.scrollViewContent }, /* @__PURE__ */ import_react30.default.createElement(import_react_native15.View, { style: styles14.chainChips }, userUsedChains.map((chain) => {
3066
+ const renderErrorAlert = () => errorMessage ? /* @__PURE__ */ import_react31.default.createElement(Alert, { variant: "destructive" }, /* @__PURE__ */ import_react31.default.createElement(AlertDescription, null, errorMessage)) : null;
3067
+ const renderChainSelection = () => userUsedChains.length > 0 && formValues.address && /* @__PURE__ */ import_react31.default.createElement(import_react_native16.View, { style: styles14.chainSelection }, /* @__PURE__ */ import_react31.default.createElement(import_react_native16.Text, { style: [styles14.chainTitle, { color: theme.colors.text }] }, "Select Chains to Add:"), /* @__PURE__ */ import_react31.default.createElement(import_react_native16.ScrollView, { contentContainerStyle: styles14.scrollViewContent }, /* @__PURE__ */ import_react31.default.createElement(import_react_native16.View, { style: styles14.chainChips }, userUsedChains.map((chain) => {
2864
3068
  const isSelected = selectedChains.has(chain.id);
2865
3069
  const hasError = chainErrors[chain.id];
2866
- return /* @__PURE__ */ import_react30.default.createElement(
2867
- import_react_native15.TouchableOpacity,
3070
+ return /* @__PURE__ */ import_react31.default.createElement(
3071
+ import_react_native16.TouchableOpacity,
2868
3072
  {
2869
3073
  onPress: () => toggleChainSelection(chain.id),
2870
3074
  style: styles14.chainButton,
2871
3075
  key: chain.id
2872
3076
  },
2873
- /* @__PURE__ */ import_react30.default.createElement(
2874
- import_react_native15.View,
3077
+ /* @__PURE__ */ import_react31.default.createElement(
3078
+ import_react_native16.View,
2875
3079
  {
2876
3080
  style: [
2877
3081
  styles14.chainChip,
@@ -2881,8 +3085,8 @@ var IntegrationForm = ({
2881
3085
  }
2882
3086
  ]
2883
3087
  },
2884
- /* @__PURE__ */ import_react30.default.createElement(
2885
- import_react_native15.Text,
3088
+ /* @__PURE__ */ import_react31.default.createElement(
3089
+ import_react_native16.Text,
2886
3090
  {
2887
3091
  style: [
2888
3092
  styles14.chainName,
@@ -2893,25 +3097,25 @@ var IntegrationForm = ({
2893
3097
  },
2894
3098
  chain.name
2895
3099
  ),
2896
- isSelected ? /* @__PURE__ */ import_react30.default.createElement(
3100
+ isSelected ? /* @__PURE__ */ import_react31.default.createElement(
2897
3101
  CloseIcon,
2898
3102
  {
2899
3103
  size: 12,
2900
3104
  color: hasError ? theme.colors.error : theme.colors.primary
2901
3105
  }
2902
- ) : /* @__PURE__ */ import_react30.default.createElement(PlusIcon, { size: 12, color: theme.colors.textSecondary })
3106
+ ) : /* @__PURE__ */ import_react31.default.createElement(PlusIcon, { size: 12, color: theme.colors.textSecondary })
2903
3107
  )
2904
3108
  );
2905
- }))), Object.keys(chainErrors).length > 0 && /* @__PURE__ */ import_react30.default.createElement(import_react_native15.View, { style: styles14.chainErrorsContainer }, /* @__PURE__ */ import_react30.default.createElement(
2906
- import_react_native15.Text,
3109
+ }))), Object.keys(chainErrors).length > 0 && /* @__PURE__ */ import_react31.default.createElement(import_react_native16.View, { style: styles14.chainErrorsContainer }, /* @__PURE__ */ import_react31.default.createElement(
3110
+ import_react_native16.Text,
2907
3111
  {
2908
3112
  style: [styles14.chainErrorsTitle, { color: theme.colors.error }]
2909
3113
  },
2910
3114
  "Errors:"
2911
3115
  ), Object.entries(chainErrors).map(([chainId, error]) => {
2912
3116
  const chain = userUsedChains.find((c) => c.id === chainId);
2913
- return /* @__PURE__ */ import_react30.default.createElement(
2914
- import_react_native15.Text,
3117
+ return /* @__PURE__ */ import_react31.default.createElement(
3118
+ import_react_native16.Text,
2915
3119
  {
2916
3120
  key: chainId,
2917
3121
  style: [styles14.chainErrorItem, { color: theme.colors.error }]
@@ -2922,7 +3126,7 @@ var IntegrationForm = ({
2922
3126
  error
2923
3127
  );
2924
3128
  })));
2925
- const renderFormBlock = () => /* @__PURE__ */ import_react30.default.createElement(import_react30.default.Fragment, null, /* @__PURE__ */ import_react30.default.createElement(import_react_native15.View, { style: styles14.header }, renderLogo(), /* @__PURE__ */ import_react30.default.createElement(import_react_native15.Text, { style: [styles14.name, { color: theme.colors.text }] }, metadata.name)), renderErrorAlert(), shouldShowFormFields && /* @__PURE__ */ import_react30.default.createElement(import_react30.default.Fragment, null, metadata.address && /* @__PURE__ */ import_react30.default.createElement(import_react30.default.Fragment, null, renderInput("address", {
3129
+ const renderFormBlock = () => /* @__PURE__ */ import_react31.default.createElement(import_react31.default.Fragment, null, /* @__PURE__ */ import_react31.default.createElement(import_react_native16.View, { style: styles14.header }, renderLogo(), /* @__PURE__ */ import_react31.default.createElement(import_react_native16.Text, { style: [styles14.name, { color: theme.colors.text }] }, metadata.name)), renderErrorAlert(), shouldShowFormFields && /* @__PURE__ */ import_react31.default.createElement(import_react31.default.Fragment, null, metadata.address && /* @__PURE__ */ import_react31.default.createElement(import_react31.default.Fragment, null, renderInput("address", {
2926
3130
  placeholder: "Enter address",
2927
3131
  autoCapitalize: "none",
2928
3132
  autoCorrect: false
@@ -2938,16 +3142,16 @@ var IntegrationForm = ({
2938
3142
  }), metadata.password && renderInput("password", {
2939
3143
  placeholder: "Enter Password",
2940
3144
  secureTextEntry: true
2941
- })), hasNoFields && !metadata?.isWalletConnectSupported && /* @__PURE__ */ import_react30.default.createElement(Alert, { variant: "default", style: { marginTop: 12 } }, /* @__PURE__ */ import_react30.default.createElement(AlertDescription, null, "This integration is not supported here yet \u2014 try using it through our Kryptos Platform.")));
3145
+ })), hasNoFields && !metadata?.isWalletConnectSupported && /* @__PURE__ */ import_react31.default.createElement(Alert, { variant: "default", style: { marginTop: 12 } }, /* @__PURE__ */ import_react31.default.createElement(AlertDescription, null, "This integration is not supported here yet \u2014 try using it through our Kryptos Platform.")));
2942
3146
  const addIntegrationLabel = formValues.address && userUsedChains.length > 0 && selectedChains.size > 0 ? `Add ${selectedChains.size} Chain${selectedChains.size !== 1 ? "s" : ""}` : "Add Integration";
2943
- return /* @__PURE__ */ import_react30.default.createElement(import_react30.default.Fragment, null, !metadata?.isWalletConnectSupported ? /* @__PURE__ */ import_react30.default.createElement(Modal, { isOpen: open, onClose: handleClose, size: "full" }, /* @__PURE__ */ import_react30.default.createElement(ModalHeader, { onClose: handleClose }, /* @__PURE__ */ import_react30.default.createElement(import_react_native15.View, { style: styles14.headerContent }, /* @__PURE__ */ import_react30.default.createElement(
2944
- import_react_native15.TouchableOpacity,
3147
+ return /* @__PURE__ */ import_react31.default.createElement(import_react31.default.Fragment, null, !metadata?.isWalletConnectSupported ? /* @__PURE__ */ import_react31.default.createElement(Modal, { isOpen: open, onClose: handleClose, size: "full" }, /* @__PURE__ */ import_react31.default.createElement(ModalHeader, { onClose: handleClose }, /* @__PURE__ */ import_react31.default.createElement(import_react_native16.View, { style: styles14.headerContent }, /* @__PURE__ */ import_react31.default.createElement(
3148
+ import_react_native16.TouchableOpacity,
2945
3149
  {
2946
3150
  onPress: () => setAddIntegrationMode(null),
2947
3151
  style: styles14.backButton
2948
3152
  },
2949
- /* @__PURE__ */ import_react30.default.createElement(ArrowLeftIcon, { size: 20, color: theme.colors.text })
2950
- ), /* @__PURE__ */ import_react30.default.createElement(import_react_native15.Text, { style: [styles14.headerTitle, { color: theme.colors.text }] }, "Integration"))), /* @__PURE__ */ import_react30.default.createElement(ModalBody, { scrollable: false, style: styles14.contentContainer }, renderFormBlock()), !hasNoFields && /* @__PURE__ */ import_react30.default.createElement(ModalFooter, { style: { paddingVertical: 8 } }, /* @__PURE__ */ import_react30.default.createElement(
3153
+ /* @__PURE__ */ import_react31.default.createElement(ArrowLeftIcon, { size: 20, color: theme.colors.text })
3154
+ ), /* @__PURE__ */ import_react31.default.createElement(import_react_native16.Text, { style: [styles14.headerTitle, { color: theme.colors.text }] }, "Integration"))), /* @__PURE__ */ import_react31.default.createElement(ModalBody, { scrollable: false, style: styles14.contentContainer }, renderFormBlock()), !hasNoFields && /* @__PURE__ */ import_react31.default.createElement(ModalFooter, { style: { paddingVertical: 8 } }, /* @__PURE__ */ import_react31.default.createElement(
2951
3155
  Button,
2952
3156
  {
2953
3157
  variant: "outline",
@@ -2958,7 +3162,7 @@ var IntegrationForm = ({
2958
3162
  style: styles14.button
2959
3163
  },
2960
3164
  addIntegrationLabel
2961
- ), /* @__PURE__ */ import_react30.default.createElement(Footer, null))) : /* @__PURE__ */ import_react30.default.createElement(
3165
+ ), /* @__PURE__ */ import_react31.default.createElement(Footer, null))) : /* @__PURE__ */ import_react31.default.createElement(
2962
3166
  WalletConnectComponent,
2963
3167
  {
2964
3168
  integration: metadata,
@@ -2966,11 +3170,12 @@ var IntegrationForm = ({
2966
3170
  onAddHandle,
2967
3171
  modalOpen: open,
2968
3172
  setAddIntegrationMode,
2969
- handleClose
3173
+ handleClose,
3174
+ providersList
2970
3175
  }
2971
3176
  ));
2972
3177
  };
2973
- var styles14 = import_react_native15.StyleSheet.create({
3178
+ var styles14 = import_react_native16.StyleSheet.create({
2974
3179
  scrollViewContent: {
2975
3180
  flexGrow: 1,
2976
3181
  paddingBottom: 100
@@ -3099,14 +3304,14 @@ var Integration = ({
3099
3304
  }) => {
3100
3305
  const { appName, linkToken } = useKryptosConnect();
3101
3306
  const theme = useTheme();
3102
- const [addIntegrationMode, setAddIntegrationMode] = import_react31.default.useState(null);
3103
- const [query, setQuery] = import_react31.default.useState("");
3104
- const [activeTab, setActiveTab] = import_react31.default.useState("all");
3105
- const [supportedProviders, setSupportedProviders] = import_react31.default.useState([]);
3106
- const [addedIntegrations, setAddedIntegrations] = import_react31.default.useState([]);
3107
- const [existingIntegrations, setExistingIntegrations] = import_react31.default.useState([]);
3108
- const [isLoading, setIsLoading] = import_react31.default.useState(false);
3109
- const [errorMessage, setErrorMessage] = import_react31.default.useState("");
3307
+ const [addIntegrationMode, setAddIntegrationMode] = import_react32.default.useState(null);
3308
+ const [query, setQuery] = import_react32.default.useState("");
3309
+ const [activeTab, setActiveTab] = import_react32.default.useState("all");
3310
+ const [supportedProviders, setSupportedProviders] = import_react32.default.useState([]);
3311
+ const [addedIntegrations, setAddedIntegrations] = import_react32.default.useState([]);
3312
+ const [existingIntegrations, setExistingIntegrations] = import_react32.default.useState([]);
3313
+ const [isLoading, setIsLoading] = import_react32.default.useState(false);
3314
+ const [errorMessage, setErrorMessage] = import_react32.default.useState("");
3110
3315
  const handleClose = () => {
3111
3316
  onClose();
3112
3317
  };
@@ -3137,13 +3342,13 @@ var Integration = ({
3137
3342
  setIsLoading(false);
3138
3343
  }
3139
3344
  };
3140
- import_react31.default.useEffect(() => {
3345
+ import_react32.default.useEffect(() => {
3141
3346
  if (linkToken) {
3142
3347
  fetchSupportedProviders();
3143
3348
  fetchExistingIntegrations();
3144
3349
  }
3145
3350
  }, [linkToken]);
3146
- const isIntegrationAdded = import_react31.default.useCallback(
3351
+ const isIntegrationAdded = import_react32.default.useCallback(
3147
3352
  (publicName) => {
3148
3353
  const integrations = [...addedIntegrations, ...existingIntegrations];
3149
3354
  return integrations.some(
@@ -3152,7 +3357,7 @@ var Integration = ({
3152
3357
  },
3153
3358
  [addedIntegrations, existingIntegrations]
3154
3359
  );
3155
- const getIntegrationCount = import_react31.default.useCallback(
3360
+ const getIntegrationCount = import_react32.default.useCallback(
3156
3361
  (publicName) => {
3157
3362
  const integrations = [...addedIntegrations, ...existingIntegrations];
3158
3363
  return integrations.filter(
@@ -3161,7 +3366,7 @@ var Integration = ({
3161
3366
  },
3162
3367
  [addedIntegrations, existingIntegrations]
3163
3368
  );
3164
- const filteredResults = import_react31.default.useMemo(() => {
3369
+ const filteredResults = import_react32.default.useMemo(() => {
3165
3370
  let filtered = supportedProviders;
3166
3371
  if (activeTab !== "all") {
3167
3372
  filtered = filtered.filter((provider) => provider.type === activeTab);
@@ -3201,8 +3406,8 @@ var Integration = ({
3201
3406
  setIsLoading(false);
3202
3407
  }
3203
3408
  };
3204
- const renderProviderItem = ({ item }) => /* @__PURE__ */ import_react31.default.createElement(
3205
- import_react_native16.TouchableOpacity,
3409
+ const renderProviderItem = ({ item }) => /* @__PURE__ */ import_react32.default.createElement(
3410
+ import_react_native17.TouchableOpacity,
3206
3411
  {
3207
3412
  style: [
3208
3413
  styles15.providerItem,
@@ -3214,25 +3419,25 @@ var Integration = ({
3214
3419
  onPress: () => setAddIntegrationMode(item),
3215
3420
  activeOpacity: 0.7
3216
3421
  },
3217
- /* @__PURE__ */ import_react31.default.createElement(import_react_native16.View, { style: styles15.providerInfo }, item?.logo ? /* @__PURE__ */ import_react31.default.createElement(
3218
- import_react_native16.Image,
3422
+ /* @__PURE__ */ import_react32.default.createElement(import_react_native17.View, { style: styles15.providerInfo }, item?.logo ? isSvgUrl(item?.logo) ? /* @__PURE__ */ import_react32.default.createElement(RemoteSvg, { uri: item?.logo }) : /* @__PURE__ */ import_react32.default.createElement(
3423
+ import_react_native17.Image,
3219
3424
  {
3220
3425
  source: { uri: item?.logo },
3221
3426
  style: styles15.providerLogo,
3222
3427
  resizeMode: "contain"
3223
3428
  }
3224
- ) : /* @__PURE__ */ import_react31.default.createElement(
3225
- import_react_native16.View,
3429
+ ) : /* @__PURE__ */ import_react32.default.createElement(
3430
+ import_react_native17.View,
3226
3431
  {
3227
3432
  style: [
3228
3433
  styles15.providerLogoPlaceholder,
3229
3434
  { backgroundColor: theme.colors.surfaceSecondary }
3230
3435
  ]
3231
3436
  },
3232
- /* @__PURE__ */ import_react31.default.createElement(import_react_native16.Text, { style: { color: theme.colors.text } }, item?.name?.charAt(0) || "?")
3233
- ), /* @__PURE__ */ import_react31.default.createElement(import_react_native16.Text, { style: [styles15.providerName, { color: theme.colors.text }] }, item?.name + "\u200B")),
3234
- isIntegrationAdded(item?.public_name) && /* @__PURE__ */ import_react31.default.createElement(import_react_native16.View, { style: styles15.providerStatus }, /* @__PURE__ */ import_react31.default.createElement(CheckCircleIcon, { size: 18, color: theme.colors.success }), /* @__PURE__ */ import_react31.default.createElement(
3235
- import_react_native16.Text,
3437
+ /* @__PURE__ */ import_react32.default.createElement(import_react_native17.Text, { style: { color: theme.colors.text } }, item?.name?.charAt(0) || "?")
3438
+ ), /* @__PURE__ */ import_react32.default.createElement(import_react_native17.Text, { style: [styles15.providerName, { color: theme.colors.text }] }, item?.name + "\u200B")),
3439
+ isIntegrationAdded(item?.public_name) && /* @__PURE__ */ import_react32.default.createElement(import_react_native17.View, { style: styles15.providerStatus }, /* @__PURE__ */ import_react32.default.createElement(CheckCircleIcon, { size: 18, color: theme.colors.success }), /* @__PURE__ */ import_react32.default.createElement(
3440
+ import_react_native17.Text,
3236
3441
  {
3237
3442
  style: [
3238
3443
  styles15.providerCount,
@@ -3242,16 +3447,70 @@ var Integration = ({
3242
3447
  getIntegrationCount(item?.public_name)
3243
3448
  ))
3244
3449
  );
3245
- const renderSkeletonItem = () => /* @__PURE__ */ import_react31.default.createElement(SkeletonItem_default, null);
3246
- return /* @__PURE__ */ import_react31.default.createElement(import_react31.default.Fragment, null, !addIntegrationMode ? /* @__PURE__ */ import_react31.default.createElement(Modal, { isOpen: open, onClose: handleClose, size: "full" }, /* @__PURE__ */ import_react31.default.createElement(ModalHeader, { onClose: handleClose }, /* @__PURE__ */ import_react31.default.createElement(import_react_native16.View, { style: styles15.headerContent }, addIntegrationMode && /* @__PURE__ */ import_react31.default.createElement(
3247
- import_react_native16.TouchableOpacity,
3450
+ const renderSkeletonItem = () => /* @__PURE__ */ import_react32.default.createElement(SkeletonItem_default, null);
3451
+ return /* @__PURE__ */ import_react32.default.createElement(import_react32.default.Fragment, null, !addIntegrationMode ? /* @__PURE__ */ import_react32.default.createElement(Modal, { isOpen: open, onClose: handleClose, size: "full" }, /* @__PURE__ */ import_react32.default.createElement(ModalHeader, { onClose: handleClose }, /* @__PURE__ */ import_react32.default.createElement(import_react_native17.View, { style: styles15.headerContent }, addIntegrationMode && /* @__PURE__ */ import_react32.default.createElement(
3452
+ import_react_native17.TouchableOpacity,
3248
3453
  {
3249
3454
  onPress: () => setAddIntegrationMode(null),
3250
3455
  style: styles15.backButton
3251
3456
  },
3252
- /* @__PURE__ */ import_react31.default.createElement(ArrowLeftIcon, { size: 20, color: theme.colors.text })
3253
- ), /* @__PURE__ */ import_react31.default.createElement(import_react_native16.Text, { style: [styles15.headerTitle, { color: theme.colors.text }] }, "Integration"))), /* @__PURE__ */ import_react31.default.createElement(ModalBody, { scrollable: false, style: styles15.noPadding }, /* @__PURE__ */ import_react31.default.createElement(import_react_native16.View, { style: styles15.container }, /* @__PURE__ */ import_react31.default.createElement(import_react_native16.View, { style: styles15.headerSection }, /* @__PURE__ */ import_react31.default.createElement(ConnectLogo, null), /* @__PURE__ */ import_react31.default.createElement(import_react_native16.Text, { style: [styles15.title, { color: theme.colors.text }] }, "Select an account to link to ", appName)), /* @__PURE__ */ import_react31.default.createElement(
3254
- import_react_native16.FlatList,
3457
+ /* @__PURE__ */ import_react32.default.createElement(ArrowLeftIcon, { size: 20, color: theme.colors.text })
3458
+ ), /* @__PURE__ */ import_react32.default.createElement(import_react_native17.Text, { style: [styles15.headerTitle, { color: theme.colors.text }] }, "Integration"))), /* @__PURE__ */ import_react32.default.createElement(ModalBody, { scrollable: false, style: styles15.noPadding }, /* @__PURE__ */ import_react32.default.createElement(import_react_native17.View, { style: styles15.container }, /* @__PURE__ */ import_react32.default.createElement(import_react_native17.View, { style: styles15.headerSection }, /* @__PURE__ */ import_react32.default.createElement(ConnectLogo, null), /* @__PURE__ */ import_react32.default.createElement(import_react_native17.Text, { style: [styles15.title, { color: theme.colors.text }] }, "Select an account to link to ", appName)), /* @__PURE__ */ import_react32.default.createElement(
3459
+ import_react_native17.View,
3460
+ {
3461
+ style: {
3462
+ paddingHorizontal: theme.spacing.xl,
3463
+ paddingVertical: theme.spacing.sm + 2,
3464
+ backgroundColor: theme.colors.background,
3465
+ zIndex: 10
3466
+ }
3467
+ },
3468
+ /* @__PURE__ */ import_react32.default.createElement(
3469
+ Input,
3470
+ {
3471
+ value: query,
3472
+ onChangeText: setQuery,
3473
+ placeholder: "Search Integrations...",
3474
+ containerStyle: styles15.searchInput
3475
+ }
3476
+ ),
3477
+ /* @__PURE__ */ import_react32.default.createElement(import_react_native17.View, { style: styles15.tabsContainer }, [
3478
+ { label: "All", value: "all" },
3479
+ { label: "Exchanges", value: "exchange" },
3480
+ { label: "Blockchains", value: "blockchain" },
3481
+ { label: "Wallets", value: "wallet" }
3482
+ ].map((tab) => /* @__PURE__ */ import_react32.default.createElement(
3483
+ import_react_native17.TouchableOpacity,
3484
+ {
3485
+ key: tab.value,
3486
+ style: [
3487
+ styles15.tab,
3488
+ {
3489
+ backgroundColor: activeTab === tab.value ? theme.colors.primary : theme.colors.surface,
3490
+ borderColor: theme.colors.border
3491
+ }
3492
+ ],
3493
+ onPress: () => {
3494
+ setActiveTab(
3495
+ tab.value
3496
+ );
3497
+ }
3498
+ },
3499
+ /* @__PURE__ */ import_react32.default.createElement(
3500
+ import_react_native17.Text,
3501
+ {
3502
+ style: [
3503
+ styles15.tabText,
3504
+ {
3505
+ color: activeTab === tab.value ? theme.colors.white : theme.colors.text
3506
+ }
3507
+ ]
3508
+ },
3509
+ tab.label
3510
+ )
3511
+ )))
3512
+ ), /* @__PURE__ */ import_react32.default.createElement(
3513
+ import_react_native17.FlatList,
3255
3514
  {
3256
3515
  data: isLoading ? Array.from({ length: 8 }, (_, i) => ({
3257
3516
  id: `skeleton-${i}`,
@@ -3267,62 +3526,8 @@ var Integration = ({
3267
3526
  { paddingHorizontal: theme.spacing.xl }
3268
3527
  ],
3269
3528
  showsVerticalScrollIndicator: false,
3270
- ListHeaderComponent: /* @__PURE__ */ import_react31.default.createElement(
3271
- import_react_native16.View,
3272
- {
3273
- style: {
3274
- paddingVertical: theme.spacing.sm + 2,
3275
- backgroundColor: theme.colors.background,
3276
- zIndex: 10
3277
- }
3278
- },
3279
- /* @__PURE__ */ import_react31.default.createElement(
3280
- Input,
3281
- {
3282
- value: query,
3283
- onChangeText: setQuery,
3284
- placeholder: "Search Integrations...",
3285
- containerStyle: styles15.searchInput
3286
- }
3287
- ),
3288
- /* @__PURE__ */ import_react31.default.createElement(import_react_native16.View, { style: styles15.tabsContainer }, [
3289
- { label: "All", value: "all" },
3290
- { label: "Exchanges", value: "exchange" },
3291
- { label: "Blockchains", value: "blockchain" },
3292
- { label: "Wallets", value: "wallet" }
3293
- ].map((tab) => /* @__PURE__ */ import_react31.default.createElement(
3294
- import_react_native16.TouchableOpacity,
3295
- {
3296
- key: tab.value,
3297
- style: [
3298
- styles15.tab,
3299
- {
3300
- backgroundColor: activeTab === tab.value ? theme.colors.primary : theme.colors.surface,
3301
- borderColor: theme.colors.border
3302
- }
3303
- ],
3304
- onPress: () => setActiveTab(
3305
- tab.value
3306
- ),
3307
- activeOpacity: 0.7
3308
- },
3309
- /* @__PURE__ */ import_react31.default.createElement(
3310
- import_react_native16.Text,
3311
- {
3312
- style: [
3313
- styles15.tabText,
3314
- {
3315
- color: activeTab === tab.value ? theme.colors.white : theme.colors.text
3316
- }
3317
- ]
3318
- },
3319
- tab.label
3320
- )
3321
- )))
3322
- ),
3323
- stickyHeaderIndices: [0],
3324
- ListEmptyComponent: /* @__PURE__ */ import_react31.default.createElement(import_react_native16.View, { style: styles15.emptyContainer }, !isLoading && /* @__PURE__ */ import_react31.default.createElement(
3325
- import_react_native16.Text,
3529
+ ListEmptyComponent: /* @__PURE__ */ import_react32.default.createElement(import_react_native17.View, { style: styles15.emptyContainer }, !isLoading && /* @__PURE__ */ import_react32.default.createElement(
3530
+ import_react_native17.Text,
3326
3531
  {
3327
3532
  style: [
3328
3533
  styles15.emptyText,
@@ -3332,7 +3537,7 @@ var Integration = ({
3332
3537
  query ? "No search results found" : "No supported integrations found"
3333
3538
  ))
3334
3539
  }
3335
- ), errorMessage && /* @__PURE__ */ import_react31.default.createElement(import_react_native16.View, { style: styles15.errorContainer }, /* @__PURE__ */ import_react31.default.createElement(Alert, { variant: "destructive", style: styles15.errorAlert }, /* @__PURE__ */ import_react31.default.createElement(AlertDescription, null, errorMessage))))), /* @__PURE__ */ import_react31.default.createElement(ModalFooter, { style: { paddingVertical: 8 } }, /* @__PURE__ */ import_react31.default.createElement(
3540
+ ), errorMessage && /* @__PURE__ */ import_react32.default.createElement(import_react_native17.View, { style: styles15.errorContainer }, /* @__PURE__ */ import_react32.default.createElement(Alert, { variant: "destructive", style: styles15.errorAlert }, /* @__PURE__ */ import_react32.default.createElement(AlertDescription, null, errorMessage))))), /* @__PURE__ */ import_react32.default.createElement(ModalFooter, { style: { paddingVertical: 8 } }, /* @__PURE__ */ import_react32.default.createElement(
3336
3541
  Button,
3337
3542
  {
3338
3543
  variant: "outline",
@@ -3343,7 +3548,7 @@ var Integration = ({
3343
3548
  style: styles15.continueButton
3344
3549
  },
3345
3550
  "Continue"
3346
- ), /* @__PURE__ */ import_react31.default.createElement(Footer, null))) : /* @__PURE__ */ import_react31.default.createElement(
3551
+ ), /* @__PURE__ */ import_react32.default.createElement(Footer, null))) : /* @__PURE__ */ import_react32.default.createElement(
3347
3552
  IntegrationForm,
3348
3553
  {
3349
3554
  metadata: addIntegrationMode,
@@ -3353,11 +3558,12 @@ var Integration = ({
3353
3558
  },
3354
3559
  open: !!addIntegrationMode,
3355
3560
  setAddIntegrationMode,
3356
- handleClose
3561
+ handleClose,
3562
+ providersList: supportedProviders
3357
3563
  }
3358
3564
  ));
3359
3565
  };
3360
- var styles15 = import_react_native16.StyleSheet.create({
3566
+ var styles15 = import_react_native17.StyleSheet.create({
3361
3567
  headerContent: {
3362
3568
  flexDirection: "row",
3363
3569
  alignItems: "center"
@@ -3380,9 +3586,10 @@ var styles15 = import_react_native16.StyleSheet.create({
3380
3586
  flex: 1
3381
3587
  },
3382
3588
  headerSection: {
3383
- paddingHorizontal: 20
3589
+ paddingHorizontal: 20,
3590
+ // theme.spacing.xl
3591
+ paddingTop: 10
3384
3592
  // theme.spacing.xl
3385
- // paddingTop: 10, // theme.spacing.xl
3386
3593
  },
3387
3594
  title: {
3388
3595
  fontSize: 16,
@@ -3405,7 +3612,9 @@ var styles15 = import_react_native16.StyleSheet.create({
3405
3612
  flexDirection: "row",
3406
3613
  alignItems: "center",
3407
3614
  justifyContent: "space-between",
3408
- padding: 12,
3615
+ paddingVertical: 8,
3616
+ // theme.spacing.md
3617
+ paddingHorizontal: 12,
3409
3618
  // theme.spacing.md
3410
3619
  borderRadius: 12,
3411
3620
  // theme.borderRadius.md
@@ -3474,44 +3683,44 @@ var styles15 = import_react_native16.StyleSheet.create({
3474
3683
  },
3475
3684
  tabsContainer: {
3476
3685
  flexDirection: "row",
3477
- gap: 4,
3686
+ gap: 6,
3478
3687
  // theme.spacing.sm
3479
3688
  flexWrap: "wrap"
3480
3689
  },
3481
3690
  tab: {
3482
- paddingVertical: 8,
3691
+ paddingVertical: 4,
3483
3692
  // theme.spacing.sm
3484
- paddingHorizontal: 16,
3693
+ paddingHorizontal: 10,
3485
3694
  // theme.spacing.lg
3486
- borderRadius: 20,
3695
+ borderRadius: 8,
3487
3696
  // theme.borderRadius.full / 2
3488
3697
  borderWidth: 1,
3489
3698
  alignItems: "center",
3490
3699
  justifyContent: "center"
3491
3700
  },
3492
3701
  tabText: {
3493
- fontSize: 13,
3702
+ fontSize: 12,
3494
3703
  // theme.fontSize.sm
3495
3704
  fontWeight: "600"
3496
3705
  }
3497
3706
  });
3498
3707
 
3499
3708
  // src/molecules/OTPVerify.tsx
3500
- var import_react32 = __toESM(require("react"));
3501
- var import_react_native17 = require("react-native");
3709
+ var import_react33 = __toESM(require("react"));
3710
+ var import_react_native18 = require("react-native");
3502
3711
  var OTPVerify = ({
3503
3712
  open,
3504
3713
  onSuccess,
3505
3714
  onClose
3506
3715
  }) => {
3507
3716
  const theme = useTheme();
3508
- const [otp, setOtp] = import_react32.default.useState("");
3717
+ const [otp, setOtp] = import_react33.default.useState("");
3509
3718
  const { linkToken, clientId, email, setUser } = useKryptosConnect();
3510
- const [isLoading, setIsLoading] = import_react32.default.useState(false);
3511
- const [isResending, setIsResending] = import_react32.default.useState(false);
3512
- const [resendCooldown, setResendCooldown] = import_react32.default.useState(0);
3513
- const [errorMessage, setErrorMessage] = import_react32.default.useState("");
3514
- const [successMessage, setSuccessMessage] = import_react32.default.useState("");
3719
+ const [isLoading, setIsLoading] = import_react33.default.useState(false);
3720
+ const [isResending, setIsResending] = import_react33.default.useState(false);
3721
+ const [resendCooldown, setResendCooldown] = import_react33.default.useState(0);
3722
+ const [errorMessage, setErrorMessage] = import_react33.default.useState("");
3723
+ const [successMessage, setSuccessMessage] = import_react33.default.useState("");
3515
3724
  const handleSubmit = async () => {
3516
3725
  if (otp.length !== 6) return;
3517
3726
  setIsLoading(true);
@@ -3562,7 +3771,7 @@ var OTPVerify = ({
3562
3771
  setSuccessMessage("");
3563
3772
  setOtp("");
3564
3773
  };
3565
- import_react32.default.useEffect(() => {
3774
+ import_react33.default.useEffect(() => {
3566
3775
  if (resendCooldown > 0) {
3567
3776
  const timer = setTimeout(() => {
3568
3777
  setResendCooldown(resendCooldown - 1);
@@ -3571,20 +3780,20 @@ var OTPVerify = ({
3571
3780
  }
3572
3781
  return void 0;
3573
3782
  }, [resendCooldown]);
3574
- return /* @__PURE__ */ import_react32.default.createElement(Modal, { isOpen: open, onClose: handleClose, size: "lg" }, /* @__PURE__ */ import_react32.default.createElement(ModalHeader, { onClose: handleClose }, /* @__PURE__ */ import_react32.default.createElement(import_react_native17.View, { style: styles16.headerContent }, /* @__PURE__ */ import_react32.default.createElement(import_react_native17.Text, { style: [styles16.headerTitle, { color: theme.colors.text }] }, "OTP Verification"))), /* @__PURE__ */ import_react32.default.createElement(ModalBody, null, /* @__PURE__ */ import_react32.default.createElement(import_react_native17.View, { style: styles16.container }, /* @__PURE__ */ import_react32.default.createElement(ConnectLogo, null), /* @__PURE__ */ import_react32.default.createElement(import_react_native17.View, { style: styles16.emailInfo }, /* @__PURE__ */ import_react32.default.createElement(
3575
- import_react_native17.Text,
3783
+ return /* @__PURE__ */ import_react33.default.createElement(Modal, { isOpen: open, onClose: handleClose, size: "lg" }, /* @__PURE__ */ import_react33.default.createElement(ModalHeader, { onClose: handleClose }, /* @__PURE__ */ import_react33.default.createElement(import_react_native18.View, { style: styles16.headerContent }, /* @__PURE__ */ import_react33.default.createElement(import_react_native18.Text, { style: [styles16.headerTitle, { color: theme.colors.text }] }, "OTP Verification"))), /* @__PURE__ */ import_react33.default.createElement(ModalBody, null, /* @__PURE__ */ import_react33.default.createElement(import_react_native18.View, { style: styles16.container }, /* @__PURE__ */ import_react33.default.createElement(ConnectLogo, null), /* @__PURE__ */ import_react33.default.createElement(import_react_native18.View, { style: styles16.emailInfo }, /* @__PURE__ */ import_react33.default.createElement(
3784
+ import_react_native18.Text,
3576
3785
  {
3577
3786
  style: [styles16.infoText, { color: theme.colors.textSecondary }]
3578
3787
  },
3579
3788
  "We have sent a verification code to"
3580
- ), /* @__PURE__ */ import_react32.default.createElement(import_react_native17.Text, { style: [styles16.emailText, { color: theme.colors.text }] }, email)), /* @__PURE__ */ import_react32.default.createElement(
3789
+ ), /* @__PURE__ */ import_react33.default.createElement(import_react_native18.Text, { style: [styles16.emailText, { color: theme.colors.text }] }, email)), /* @__PURE__ */ import_react33.default.createElement(
3581
3790
  OTP,
3582
3791
  {
3583
3792
  onComplete: handleOtpComplete,
3584
3793
  length: 6,
3585
3794
  setErrorMessage
3586
3795
  }
3587
- ), errorMessage ? /* @__PURE__ */ import_react32.default.createElement(Alert, { variant: "destructive" }, /* @__PURE__ */ import_react32.default.createElement(AlertDescription, null, errorMessage)) : null, successMessage ? /* @__PURE__ */ import_react32.default.createElement(Alert, { variant: "default" }, /* @__PURE__ */ import_react32.default.createElement(AlertDescription, null, successMessage)) : null, /* @__PURE__ */ import_react32.default.createElement(
3796
+ ), errorMessage ? /* @__PURE__ */ import_react33.default.createElement(Alert, { variant: "destructive" }, /* @__PURE__ */ import_react33.default.createElement(AlertDescription, null, errorMessage)) : null, successMessage ? /* @__PURE__ */ import_react33.default.createElement(Alert, { variant: "default" }, /* @__PURE__ */ import_react33.default.createElement(AlertDescription, null, successMessage)) : null, /* @__PURE__ */ import_react33.default.createElement(
3588
3797
  Button,
3589
3798
  {
3590
3799
  variant: "outline",
@@ -3595,22 +3804,22 @@ var OTPVerify = ({
3595
3804
  style: styles16.button
3596
3805
  },
3597
3806
  "Continue"
3598
- ), /* @__PURE__ */ import_react32.default.createElement(
3599
- import_react_native17.TouchableOpacity,
3807
+ ), /* @__PURE__ */ import_react33.default.createElement(
3808
+ import_react_native18.TouchableOpacity,
3600
3809
  {
3601
3810
  onPress: handleResendOtp,
3602
3811
  disabled: resendCooldown > 0 || isResending,
3603
3812
  style: styles16.resendContainer
3604
3813
  },
3605
- isResending ? /* @__PURE__ */ import_react32.default.createElement(import_react_native17.View, { style: styles16.resendLoading }, /* @__PURE__ */ import_react32.default.createElement(LoaderIcon, { size: 16, color: theme.colors.primary }), /* @__PURE__ */ import_react32.default.createElement(
3606
- import_react_native17.Text,
3814
+ isResending ? /* @__PURE__ */ import_react33.default.createElement(import_react_native18.View, { style: styles16.resendLoading }, /* @__PURE__ */ import_react33.default.createElement(LoaderIcon, { size: 16, color: theme.colors.primary }), /* @__PURE__ */ import_react33.default.createElement(
3815
+ import_react_native18.Text,
3607
3816
  {
3608
3817
  style: [styles16.resendText, { color: theme.colors.primary }]
3609
3818
  },
3610
3819
  " ",
3611
3820
  "Sending..."
3612
- )) : resendCooldown > 0 ? /* @__PURE__ */ import_react32.default.createElement(
3613
- import_react_native17.Text,
3821
+ )) : resendCooldown > 0 ? /* @__PURE__ */ import_react33.default.createElement(
3822
+ import_react_native18.Text,
3614
3823
  {
3615
3824
  style: [
3616
3825
  styles16.resendText,
@@ -3620,16 +3829,16 @@ var OTPVerify = ({
3620
3829
  "Resend OTP in ",
3621
3830
  resendCooldown,
3622
3831
  "s"
3623
- ) : /* @__PURE__ */ import_react32.default.createElement(
3624
- import_react_native17.Text,
3832
+ ) : /* @__PURE__ */ import_react33.default.createElement(
3833
+ import_react_native18.Text,
3625
3834
  {
3626
3835
  style: [styles16.resendText, { color: theme.colors.primary }]
3627
3836
  },
3628
3837
  "Resend OTP"
3629
3838
  )
3630
- ))), /* @__PURE__ */ import_react32.default.createElement(ModalFooter, { style: { paddingVertical: 0 } }, /* @__PURE__ */ import_react32.default.createElement(Footer, null)));
3839
+ ))), /* @__PURE__ */ import_react33.default.createElement(ModalFooter, { style: { paddingVertical: 0 } }, /* @__PURE__ */ import_react33.default.createElement(Footer, null)));
3631
3840
  };
3632
- var styles16 = import_react_native17.StyleSheet.create({
3841
+ var styles16 = import_react_native18.StyleSheet.create({
3633
3842
  headerContent: {
3634
3843
  flexDirection: "row",
3635
3844
  alignItems: "center"
@@ -3688,8 +3897,8 @@ var styles16 = import_react_native17.StyleSheet.create({
3688
3897
  });
3689
3898
 
3690
3899
  // src/molecules/Permissions.tsx
3691
- var import_react33 = __toESM(require("react"));
3692
- var import_react_native18 = require("react-native");
3900
+ var import_react34 = __toESM(require("react"));
3901
+ var import_react_native19 = require("react-native");
3693
3902
  var Permissions = ({
3694
3903
  open,
3695
3904
  onClose,
@@ -3697,8 +3906,8 @@ var Permissions = ({
3697
3906
  }) => {
3698
3907
  const { appName, linkToken, setUserConsent } = useKryptosConnect();
3699
3908
  const theme = useTheme();
3700
- const [isLoading, setIsLoading] = import_react33.default.useState(false);
3701
- const [errorMessage, setErrorMessage] = import_react33.default.useState("");
3909
+ const [isLoading, setIsLoading] = import_react34.default.useState(false);
3910
+ const [errorMessage, setErrorMessage] = import_react34.default.useState("");
3702
3911
  const handleConsentClick = async () => {
3703
3912
  try {
3704
3913
  setIsLoading(true);
@@ -3721,22 +3930,22 @@ var Permissions = ({
3721
3930
  "Access your transaction history and trading activity",
3722
3931
  "Keep this data updated and accessible when you're offline"
3723
3932
  ];
3724
- return /* @__PURE__ */ import_react33.default.createElement(Modal, { isOpen: open, onClose, size: "xl" }, /* @__PURE__ */ import_react33.default.createElement(ModalHeader, { onClose }, "Permissions"), /* @__PURE__ */ import_react33.default.createElement(ModalBody, null, /* @__PURE__ */ import_react33.default.createElement(import_react_native18.View, { style: styles17.container }, /* @__PURE__ */ import_react33.default.createElement(ConnectLogo, null), errorMessage ? /* @__PURE__ */ import_react33.default.createElement(Alert, { variant: "destructive" }, /* @__PURE__ */ import_react33.default.createElement(AlertDescription, null, errorMessage)) : null, /* @__PURE__ */ import_react33.default.createElement(import_react_native18.View, { style: styles17.permissionsList }, /* @__PURE__ */ import_react33.default.createElement(
3725
- import_react_native18.Text,
3933
+ return /* @__PURE__ */ import_react34.default.createElement(Modal, { isOpen: open, onClose, size: "xl" }, /* @__PURE__ */ import_react34.default.createElement(ModalHeader, { onClose }, "Permissions"), /* @__PURE__ */ import_react34.default.createElement(ModalBody, null, /* @__PURE__ */ import_react34.default.createElement(import_react_native19.View, { style: styles17.container }, /* @__PURE__ */ import_react34.default.createElement(ConnectLogo, null), errorMessage ? /* @__PURE__ */ import_react34.default.createElement(Alert, { variant: "destructive" }, /* @__PURE__ */ import_react34.default.createElement(AlertDescription, null, errorMessage)) : null, /* @__PURE__ */ import_react34.default.createElement(import_react_native19.View, { style: styles17.permissionsList }, /* @__PURE__ */ import_react34.default.createElement(
3934
+ import_react_native19.Text,
3726
3935
  {
3727
3936
  style: [styles17.subtitle, { color: theme.colors.textSecondary }]
3728
3937
  },
3729
3938
  "Allow ",
3730
3939
  appName,
3731
3940
  " to:"
3732
- ), permissionItems.map((item, index) => /* @__PURE__ */ import_react33.default.createElement(import_react_native18.View, { key: `permission-${index}`, style: styles17.permissionItem }, /* @__PURE__ */ import_react33.default.createElement(import_react_native18.Text, { style: [styles17.bullet, { color: theme.colors.primary }] }, index + 1, "."), /* @__PURE__ */ import_react33.default.createElement(
3733
- import_react_native18.Text,
3941
+ ), permissionItems.map((item, index) => /* @__PURE__ */ import_react34.default.createElement(import_react_native19.View, { key: `permission-${index}`, style: styles17.permissionItem }, /* @__PURE__ */ import_react34.default.createElement(import_react_native19.Text, { style: [styles17.bullet, { color: theme.colors.primary }] }, index + 1, "."), /* @__PURE__ */ import_react34.default.createElement(
3942
+ import_react_native19.Text,
3734
3943
  {
3735
3944
  style: [styles17.permissionText, { color: theme.colors.text }]
3736
3945
  },
3737
3946
  item
3738
- )))), /* @__PURE__ */ import_react33.default.createElement(
3739
- import_react_native18.View,
3947
+ )))), /* @__PURE__ */ import_react34.default.createElement(
3948
+ import_react_native19.View,
3740
3949
  {
3741
3950
  style: [
3742
3951
  styles17.infoBox,
@@ -3746,17 +3955,17 @@ var Permissions = ({
3746
3955
  }
3747
3956
  ]
3748
3957
  },
3749
- /* @__PURE__ */ import_react33.default.createElement(
3750
- import_react_native18.Text,
3958
+ /* @__PURE__ */ import_react34.default.createElement(
3959
+ import_react_native19.Text,
3751
3960
  {
3752
3961
  style: [styles17.infoText, { color: theme.colors.textSecondary }]
3753
3962
  },
3754
3963
  "By selecting",
3755
3964
  " ",
3756
- /* @__PURE__ */ import_react33.default.createElement(import_react_native18.Text, { style: { fontWeight: "600", color: theme.colors.text } }, "'Allow'"),
3965
+ /* @__PURE__ */ import_react34.default.createElement(import_react_native19.Text, { style: { fontWeight: "600", color: theme.colors.text } }, "'Allow'"),
3757
3966
  ", you agree to share this information and keep it updated."
3758
3967
  )
3759
- ))), /* @__PURE__ */ import_react33.default.createElement(ModalFooter, { style: { paddingVertical: 8 } }, /* @__PURE__ */ import_react33.default.createElement(
3968
+ ))), /* @__PURE__ */ import_react34.default.createElement(ModalFooter, { style: { paddingVertical: 8 } }, /* @__PURE__ */ import_react34.default.createElement(
3760
3969
  Button,
3761
3970
  {
3762
3971
  variant: "outline",
@@ -3767,9 +3976,9 @@ var Permissions = ({
3767
3976
  style: styles17.button
3768
3977
  },
3769
3978
  "Allow"
3770
- ), /* @__PURE__ */ import_react33.default.createElement(Footer, null)));
3979
+ ), /* @__PURE__ */ import_react34.default.createElement(Footer, null)));
3771
3980
  };
3772
- var styles17 = import_react_native18.StyleSheet.create({
3981
+ var styles17 = import_react_native19.StyleSheet.create({
3773
3982
  container: {
3774
3983
  flex: 1
3775
3984
  },
@@ -3827,8 +4036,8 @@ var styles17 = import_react_native18.StyleSheet.create({
3827
4036
  });
3828
4037
 
3829
4038
  // src/molecules/StatusModal.tsx
3830
- var import_react34 = __toESM(require("react"));
3831
- var import_react_native19 = require("react-native");
4039
+ var import_react35 = __toESM(require("react"));
4040
+ var import_react_native20 = require("react-native");
3832
4041
  var StatusModal = ({
3833
4042
  open,
3834
4043
  onClose,
@@ -3845,7 +4054,7 @@ var StatusModal = ({
3845
4054
  }
3846
4055
  onClose();
3847
4056
  };
3848
- return /* @__PURE__ */ import_react34.default.createElement(Modal, { isOpen: open, onClose: handleClose, size: "sm" }, /* @__PURE__ */ import_react34.default.createElement(ModalHeader, { showCloseButton: false, onClose: handleClose }, ""), /* @__PURE__ */ import_react34.default.createElement(ModalBody, null, /* @__PURE__ */ import_react34.default.createElement(import_react_native19.View, { style: styles18.container }, /* @__PURE__ */ import_react34.default.createElement(import_react_native19.View, { style: styles18.iconContainer }, status === "success" ? /* @__PURE__ */ import_react34.default.createElement(SuccessIcon, { size: 80 }) : /* @__PURE__ */ import_react34.default.createElement(ErrorIcon, { size: 80 })), /* @__PURE__ */ import_react34.default.createElement(import_react_native19.Text, { style: [styles18.message, { color: theme.colors.text }] }, status === "success" ? "Connection successful" : "Connection failed"))), /* @__PURE__ */ import_react34.default.createElement(ModalFooter, { style: { paddingVertical: 8 } }, /* @__PURE__ */ import_react34.default.createElement(
4057
+ return /* @__PURE__ */ import_react35.default.createElement(Modal, { isOpen: open, onClose: handleClose, size: "sm" }, /* @__PURE__ */ import_react35.default.createElement(ModalHeader, { showCloseButton: false, onClose: handleClose }, ""), /* @__PURE__ */ import_react35.default.createElement(ModalBody, null, /* @__PURE__ */ import_react35.default.createElement(import_react_native20.View, { style: styles18.container }, /* @__PURE__ */ import_react35.default.createElement(import_react_native20.View, { style: styles18.iconContainer }, status === "success" ? /* @__PURE__ */ import_react35.default.createElement(SuccessIcon, { size: 80 }) : /* @__PURE__ */ import_react35.default.createElement(ErrorIcon, { size: 80 })), /* @__PURE__ */ import_react35.default.createElement(import_react_native20.Text, { style: [styles18.message, { color: theme.colors.text }] }, status === "success" ? "Connection successful" : "Connection failed"))), /* @__PURE__ */ import_react35.default.createElement(ModalFooter, { style: { paddingVertical: 8 } }, /* @__PURE__ */ import_react35.default.createElement(
3849
4058
  Button,
3850
4059
  {
3851
4060
  variant: "outline",
@@ -3854,9 +4063,9 @@ var StatusModal = ({
3854
4063
  style: styles18.button
3855
4064
  },
3856
4065
  status === "success" ? "Continue" : "Try again later"
3857
- ), /* @__PURE__ */ import_react34.default.createElement(Footer, null)));
4066
+ ), /* @__PURE__ */ import_react35.default.createElement(Footer, null)));
3858
4067
  };
3859
- var styles18 = import_react_native19.StyleSheet.create({
4068
+ var styles18 = import_react_native20.StyleSheet.create({
3860
4069
  container: {
3861
4070
  flex: 1,
3862
4071
  alignItems: "center",
@@ -3881,28 +4090,28 @@ var styles18 = import_react_native19.StyleSheet.create({
3881
4090
  });
3882
4091
 
3883
4092
  // src/molecules/EndModal.tsx
3884
- var import_react35 = __toESM(require("react"));
3885
- var import_react_native20 = require("react-native");
4093
+ var import_react36 = __toESM(require("react"));
4094
+ var import_react_native21 = require("react-native");
3886
4095
  var EndModal = ({ open, onClose }) => {
3887
4096
  const theme = useTheme();
3888
- (0, import_react35.useEffect)(() => {
4097
+ (0, import_react36.useEffect)(() => {
3889
4098
  if (!open) return;
3890
4099
  const timer = setTimeout(() => {
3891
4100
  onClose();
3892
4101
  }, 5e3);
3893
4102
  return () => clearTimeout(timer);
3894
4103
  }, []);
3895
- return /* @__PURE__ */ import_react35.default.createElement(Modal, { isOpen: open, onClose, size: "md" }, /* @__PURE__ */ import_react35.default.createElement(ModalHeader, { onClose }, ""), /* @__PURE__ */ import_react35.default.createElement(ModalBody, null, /* @__PURE__ */ import_react35.default.createElement(import_react_native20.View, { style: styles19.container }, /* @__PURE__ */ import_react35.default.createElement(
3896
- import_react_native20.View,
4104
+ return /* @__PURE__ */ import_react36.default.createElement(Modal, { isOpen: open, onClose, size: "md" }, /* @__PURE__ */ import_react36.default.createElement(ModalHeader, { onClose }, ""), /* @__PURE__ */ import_react36.default.createElement(ModalBody, null, /* @__PURE__ */ import_react36.default.createElement(import_react_native21.View, { style: styles19.container }, /* @__PURE__ */ import_react36.default.createElement(
4105
+ import_react_native21.View,
3897
4106
  {
3898
4107
  style: [
3899
4108
  styles19.iconContainer,
3900
4109
  { backgroundColor: theme.colors.successLight }
3901
4110
  ]
3902
4111
  },
3903
- /* @__PURE__ */ import_react35.default.createElement(SuccessIcon, { size: 80 })
3904
- ), /* @__PURE__ */ import_react35.default.createElement(import_react_native20.Text, { style: [styles19.message, { color: theme.colors.text }] }, `All set! We're redirecting you back to the app. If it takes longer
3905
- than expected, tap the button below to continue.`))), /* @__PURE__ */ import_react35.default.createElement(ModalFooter, { style: { paddingVertical: 8 } }, /* @__PURE__ */ import_react35.default.createElement(
4112
+ /* @__PURE__ */ import_react36.default.createElement(SuccessIcon, { size: 80 })
4113
+ ), /* @__PURE__ */ import_react36.default.createElement(import_react_native21.Text, { style: [styles19.message, { color: theme.colors.text }] }, `All set! We're redirecting you back to the app. If it takes longer
4114
+ than expected, tap the button below to continue.`))), /* @__PURE__ */ import_react36.default.createElement(ModalFooter, { style: { paddingVertical: 8 } }, /* @__PURE__ */ import_react36.default.createElement(
3906
4115
  Button,
3907
4116
  {
3908
4117
  variant: "primary",
@@ -3911,9 +4120,9 @@ var EndModal = ({ open, onClose }) => {
3911
4120
  style: styles19.button
3912
4121
  },
3913
4122
  "Continue to App"
3914
- ), /* @__PURE__ */ import_react35.default.createElement(Footer, null)));
4123
+ ), /* @__PURE__ */ import_react36.default.createElement(Footer, null)));
3915
4124
  };
3916
- var styles19 = import_react_native20.StyleSheet.create({
4125
+ var styles19 = import_react_native21.StyleSheet.create({
3917
4126
  container: {
3918
4127
  alignItems: "center",
3919
4128
  paddingVertical: 20
@@ -3948,10 +4157,10 @@ var KryptosConnectButton = ({
3948
4157
  textStyle
3949
4158
  }) => {
3950
4159
  const { theme: themeName } = useKryptosConnect();
3951
- const [open, setOpen] = import_react36.default.useState(false);
4160
+ const [open, setOpen] = import_react37.default.useState(false);
3952
4161
  const theme = useTheme();
3953
- return /* @__PURE__ */ import_react36.default.createElement(import_react36.default.Fragment, null, children ? /* @__PURE__ */ import_react36.default.createElement(import_react_native21.TouchableOpacity, { onPress: () => setOpen(true), style }, children) : /* @__PURE__ */ import_react36.default.createElement(
3954
- import_react_native21.TouchableOpacity,
4162
+ return /* @__PURE__ */ import_react37.default.createElement(import_react37.default.Fragment, null, children ? /* @__PURE__ */ import_react37.default.createElement(import_react_native22.TouchableOpacity, { onPress: () => setOpen(true), style }, children) : /* @__PURE__ */ import_react37.default.createElement(
4163
+ import_react_native22.TouchableOpacity,
3955
4164
  {
3956
4165
  onPress: () => setOpen(true),
3957
4166
  style: [
@@ -3969,8 +4178,8 @@ var KryptosConnectButton = ({
3969
4178
  ],
3970
4179
  activeOpacity: 0.8
3971
4180
  },
3972
- /* @__PURE__ */ import_react36.default.createElement(
3973
- import_react_native21.Text,
4181
+ /* @__PURE__ */ import_react37.default.createElement(
4182
+ import_react_native22.Text,
3974
4183
  {
3975
4184
  style: [
3976
4185
  styles20.buttonText,
@@ -3984,8 +4193,8 @@ var KryptosConnectButton = ({
3984
4193
  "Connect with",
3985
4194
  " "
3986
4195
  ),
3987
- /* @__PURE__ */ import_react36.default.createElement(LogoIcon, { size: 24 })
3988
- ), /* @__PURE__ */ import_react36.default.createElement(
4196
+ /* @__PURE__ */ import_react37.default.createElement(LogoIcon, { size: 24 })
4197
+ ), /* @__PURE__ */ import_react37.default.createElement(
3989
4198
  KryptosConnectModal,
3990
4199
  {
3991
4200
  open,
@@ -4013,7 +4222,7 @@ var KryptosConnectModal = ({
4013
4222
  isAuthorized,
4014
4223
  linkToken
4015
4224
  } = useKryptosConnect();
4016
- const [step, setStep] = import_react36.default.useState("INIT" /* INIT */);
4225
+ const [step, setStep] = import_react37.default.useState("INIT" /* INIT */);
4017
4226
  const handleClose = () => {
4018
4227
  setOpen(false);
4019
4228
  setIsInitialized(false);
@@ -4049,7 +4258,7 @@ var KryptosConnectModal = ({
4049
4258
  handleClose();
4050
4259
  };
4051
4260
  if (!open) return null;
4052
- return /* @__PURE__ */ import_react36.default.createElement(import_react_native21.View, { style: styles20.container }, step === "INIT" /* INIT */ && /* @__PURE__ */ import_react36.default.createElement(
4261
+ return /* @__PURE__ */ import_react37.default.createElement(import_react_native22.View, { style: styles20.container }, step === "INIT" /* INIT */ && /* @__PURE__ */ import_react37.default.createElement(
4053
4262
  Init,
4054
4263
  {
4055
4264
  open,
@@ -4063,7 +4272,7 @@ var KryptosConnectModal = ({
4063
4272
  },
4064
4273
  onClose: handleAbort
4065
4274
  }
4066
- ), step === "AUTH" /* AUTH */ && /* @__PURE__ */ import_react36.default.createElement(
4275
+ ), step === "AUTH" /* AUTH */ && /* @__PURE__ */ import_react37.default.createElement(
4067
4276
  Auth,
4068
4277
  {
4069
4278
  open,
@@ -4071,28 +4280,28 @@ var KryptosConnectModal = ({
4071
4280
  onGuestSuccess: () => setStep("INTEGRATION" /* INTEGRATION */),
4072
4281
  onClose: handleAbort
4073
4282
  }
4074
- ), step === "OTP" /* OTP */ && /* @__PURE__ */ import_react36.default.createElement(
4283
+ ), step === "OTP" /* OTP */ && /* @__PURE__ */ import_react37.default.createElement(
4075
4284
  OTPVerify,
4076
4285
  {
4077
4286
  open,
4078
4287
  onSuccess: () => setStep("INTEGRATION" /* INTEGRATION */),
4079
4288
  onClose: handleAbort
4080
4289
  }
4081
- ), step === "INTEGRATION" /* INTEGRATION */ && /* @__PURE__ */ import_react36.default.createElement(
4290
+ ), step === "INTEGRATION" /* INTEGRATION */ && /* @__PURE__ */ import_react37.default.createElement(
4082
4291
  Integration,
4083
4292
  {
4084
4293
  open,
4085
4294
  onSuccess: handleConsentClick,
4086
4295
  onClose: handleAbort
4087
4296
  }
4088
- ), step === "PERMISSIONS" /* PERMISSIONS */ && /* @__PURE__ */ import_react36.default.createElement(
4297
+ ), step === "PERMISSIONS" /* PERMISSIONS */ && /* @__PURE__ */ import_react37.default.createElement(
4089
4298
  Permissions,
4090
4299
  {
4091
4300
  open,
4092
4301
  onClose: handleAbort,
4093
4302
  onSuccess: () => setStep("STATUS" /* STATUS */)
4094
4303
  }
4095
- ), step === "STATUS" /* STATUS */ && /* @__PURE__ */ import_react36.default.createElement(
4304
+ ), step === "STATUS" /* STATUS */ && /* @__PURE__ */ import_react37.default.createElement(
4096
4305
  StatusModal,
4097
4306
  {
4098
4307
  open,
@@ -4101,7 +4310,7 @@ var KryptosConnectModal = ({
4101
4310
  onError: handleError,
4102
4311
  status: userConsent?.public_token ? "success" : "error"
4103
4312
  }
4104
- ), step === "END" /* END */ && /* @__PURE__ */ import_react36.default.createElement(
4313
+ ), step === "END" /* END */ && /* @__PURE__ */ import_react37.default.createElement(
4105
4314
  EndModal,
4106
4315
  {
4107
4316
  open,
@@ -4113,7 +4322,7 @@ var KryptosConnectModal = ({
4113
4322
  }
4114
4323
  ));
4115
4324
  };
4116
- var styles20 = import_react_native21.StyleSheet.create({
4325
+ var styles20 = import_react_native22.StyleSheet.create({
4117
4326
  defaultButton: {
4118
4327
  flexDirection: "row",
4119
4328
  alignItems: "center",