@kryptos_connect/mobile-sdk 1.0.4 → 1.0.6-dev.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -38,48 +38,11 @@ __export(index_exports, {
38
38
  module.exports = __toCommonJS(index_exports);
39
39
 
40
40
  // src/KryptosConnectButton.tsx
41
- var import_react37 = __toESM(require("react"));
42
- var import_react_native22 = require("react-native");
43
-
44
- // src/assets/LogoIcon.tsx
45
- var import_react = __toESM(require("react"));
46
- var import_react_native_svg = __toESM(require("react-native-svg"));
47
- var LogoIcon = ({ size = 36 }) => {
48
- return /* @__PURE__ */ import_react.default.createElement(import_react_native_svg.default, { width: size, height: size, viewBox: "0 0 36 36", fill: "none" }, /* @__PURE__ */ import_react.default.createElement(
49
- import_react_native_svg.Path,
50
- {
51
- d: "M0 4.11429C0 1.84203 1.84203 0 4.11429 0H31.8857C34.158 0 36 1.84203 36 4.11429V31.8857C36 34.158 34.158 36 31.8857 36H4.11429C1.84203 36 0 34.158 0 31.8857V4.11429Z",
52
- fill: "#00C693"
53
- }
54
- ), /* @__PURE__ */ import_react.default.createElement(
55
- import_react_native_svg.Path,
56
- {
57
- d: "M12.3916 28.2857H8.43388C8.03646 28.2857 7.71429 27.9886 7.71429 27.6221V22.92C7.71429 22.744 7.7901 22.5752 7.92505 22.4508L9.66229 20.8487C9.79724 20.7243 9.98027 20.6544 10.1711 20.6544H12.3916C12.789 20.6544 13.1112 20.9515 13.1112 21.318V27.6221C13.1112 27.9886 12.789 28.2857 12.3916 28.2857Z",
58
- fill: "white"
59
- }
60
- ), /* @__PURE__ */ import_react.default.createElement(
61
- import_react_native_svg.Path,
62
- {
63
- d: "M27.5647 28.2857H22.0443C21.8535 28.2857 21.6704 28.2158 21.5355 28.0914L13.9798 21.1236C13.6988 20.8645 13.6988 20.4443 13.9798 20.1851L15.7788 18.5262C15.9137 18.4017 16.0968 18.3318 16.2876 18.3318H18.21C18.4009 18.3318 18.5839 18.4017 18.7189 18.5262L28.0735 27.1529C28.5268 27.5709 28.2058 28.2857 27.5647 28.2857Z",
64
- fill: "white"
65
- }
66
- ), /* @__PURE__ */ import_react.default.createElement(
67
- import_react_native_svg.Path,
68
- {
69
- d: "M27.5647 7.71429H22.0443C21.8535 7.71429 21.6704 7.7842 21.5355 7.90865L13.9798 14.8764C13.6988 15.1355 13.6988 15.5557 13.9798 15.8149L15.7788 17.4738C15.9137 17.5983 16.0968 17.6682 16.2876 17.6682H18.21C18.4009 17.6682 18.5839 17.5983 18.7189 17.4738L28.0735 8.84711C28.5268 8.42907 28.2058 7.71429 27.5647 7.71429Z",
70
- fill: "white"
71
- }
72
- ), /* @__PURE__ */ import_react.default.createElement(
73
- import_react_native_svg.Path,
74
- {
75
- d: "M12.3916 7.71429H8.43388C8.03646 7.71429 7.71429 8.01139 7.71429 8.37788V13.08C7.71429 13.256 7.7901 13.4248 7.92505 13.5492L9.66229 15.1513C9.79724 15.2757 9.98027 15.3456 10.1711 15.3456H12.3916C12.789 15.3456 13.1112 15.0485 13.1112 14.682V8.37788C13.1112 8.01139 12.789 7.71429 12.3916 7.71429Z",
76
- fill: "white"
77
- }
78
- ));
79
- };
41
+ var import_react39 = __toESM(require("react"));
42
+ var import_react_native23 = require("react-native");
80
43
 
81
44
  // src/contexts/KryptosContext.tsx
82
- var import_react2 = __toESM(require("react"));
45
+ var import_react = __toESM(require("react"));
83
46
 
84
47
  // src/services/api.ts
85
48
  var import_axios = __toESM(require("axios"));
@@ -148,7 +111,7 @@ async function createAnonymousUser(linkToken, clientId) {
148
111
  }
149
112
  }
150
113
  );
151
- return res.data;
114
+ return res.data?.data;
152
115
  }
153
116
  async function addUserIntegration(linkToken, integration) {
154
117
  const res = await api.post(
@@ -184,8 +147,8 @@ async function testCredentials(linkToken, data) {
184
147
  });
185
148
  return res.data?.data;
186
149
  }
187
- async function getSupportedProviders(linkToken) {
188
- const res = await api.get("/integrations/providers", {
150
+ async function getSupportedProviders(linkToken, id) {
151
+ const res = await api.get(`/integrations/providers${id ? `?id=${id}` : ""}`, {
189
152
  headers: {
190
153
  "X-LINK-TOKEN": linkToken
191
154
  }
@@ -231,23 +194,23 @@ async function getUserInfo(linkToken) {
231
194
  // src/contexts/KryptosContext.tsx
232
195
  var globalBaseUrl;
233
196
  var getGlobalBaseUrl = () => globalBaseUrl;
234
- var KryptosContext = import_react2.default.createContext(
197
+ var KryptosContext = import_react.default.createContext(
235
198
  void 0
236
199
  );
237
200
  var KryptosConnectProvider = ({ children, config }) => {
238
- const [isInitialized, setIsInitialized] = import_react2.default.useState(false);
239
- const [linkToken, setLinkToken] = import_react2.default.useState("");
240
- const [user, setUser] = import_react2.default.useState(null);
241
- const [email, setEmail] = import_react2.default.useState("");
242
- const [userConsent, setUserConsent] = import_react2.default.useState(
201
+ const [isInitialized, setIsInitialized] = import_react.default.useState(false);
202
+ const [linkToken, setLinkToken] = import_react.default.useState("");
203
+ const [user, setUser] = import_react.default.useState(null);
204
+ const [email, setEmail] = import_react.default.useState("");
205
+ const [userConsent, setUserConsent] = import_react.default.useState(
243
206
  null
244
207
  );
245
- const [isAuthorized, setIsAuthorized] = import_react2.default.useState(false);
246
- const [clientInfo, setClientInfo] = import_react2.default.useState(null);
247
- import_react2.default.useEffect(() => {
208
+ const [isAuthorized, setIsAuthorized] = import_react.default.useState(false);
209
+ const [clientInfo, setClientInfo] = import_react.default.useState(null);
210
+ import_react.default.useEffect(() => {
248
211
  globalBaseUrl = config.baseUrl;
249
212
  }, [config.baseUrl]);
250
- import_react2.default.useEffect(() => {
213
+ import_react.default.useEffect(() => {
251
214
  const fetchClientInfo = async () => {
252
215
  if (linkToken) {
253
216
  const res = await getClientInfo(linkToken);
@@ -256,7 +219,7 @@ var KryptosConnectProvider = ({ children, config }) => {
256
219
  };
257
220
  fetchClientInfo();
258
221
  }, [linkToken]);
259
- return /* @__PURE__ */ import_react2.default.createElement(
222
+ return /* @__PURE__ */ import_react.default.createElement(
260
223
  KryptosContext.Provider,
261
224
  {
262
225
  value: {
@@ -280,7 +243,7 @@ var KryptosConnectProvider = ({ children, config }) => {
280
243
  );
281
244
  };
282
245
  var useKryptosConnect = () => {
283
- const ctx = import_react2.default.useContext(KryptosContext);
246
+ const ctx = import_react.default.useContext(KryptosContext);
284
247
  if (!ctx)
285
248
  throw new Error(
286
249
  "useKryptosConnect must be used inside <KryptosConnectProvider>"
@@ -289,7 +252,7 @@ var useKryptosConnect = () => {
289
252
  };
290
253
 
291
254
  // src/hooks/useTheme.ts
292
- var import_react3 = __toESM(require("react"));
255
+ var import_react2 = __toESM(require("react"));
293
256
 
294
257
  // src/theme/index.ts
295
258
  var lightTheme = {
@@ -430,14 +393,14 @@ var getTheme = (isDark) => {
430
393
  // src/hooks/useTheme.ts
431
394
  var useTheme = () => {
432
395
  const { theme } = useKryptosConnect();
433
- const currentTheme = import_react3.default.useMemo(() => {
396
+ const currentTheme = import_react2.default.useMemo(() => {
434
397
  return getTheme(theme === "dark");
435
398
  }, [theme]);
436
399
  return currentTheme;
437
400
  };
438
401
 
439
402
  // src/components/Button.tsx
440
- var import_react4 = __toESM(require("react"));
403
+ var import_react3 = __toESM(require("react"));
441
404
  var import_react_native = require("react-native");
442
405
  var Button = ({
443
406
  variant = "primary",
@@ -550,7 +513,7 @@ var Button = ({
550
513
  }
551
514
  };
552
515
  const sizeStyles = getSizeStyles();
553
- return /* @__PURE__ */ import_react4.default.createElement(
516
+ return /* @__PURE__ */ import_react3.default.createElement(
554
517
  import_react_native.TouchableOpacity,
555
518
  {
556
519
  onPress,
@@ -564,7 +527,7 @@ var Button = ({
564
527
  style
565
528
  ]
566
529
  },
567
- loading ? /* @__PURE__ */ import_react4.default.createElement(import_react_native.ActivityIndicator, { size: "small", color: getTextColor() }) : typeof children === "string" ? /* @__PURE__ */ import_react4.default.createElement(
530
+ loading ? /* @__PURE__ */ import_react3.default.createElement(import_react_native.ActivityIndicator, { size: "small", color: getTextColor() }) : typeof children === "string" ? /* @__PURE__ */ import_react3.default.createElement(
568
531
  import_react_native.Text,
569
532
  {
570
533
  style: [
@@ -575,7 +538,7 @@ var Button = ({
575
538
  ]
576
539
  },
577
540
  children
578
- ) : /* @__PURE__ */ import_react4.default.createElement(import_react_native.View, { style: styles.contentContainer }, children)
541
+ ) : /* @__PURE__ */ import_react3.default.createElement(import_react_native.View, { style: styles.contentContainer }, children)
579
542
  );
580
543
  };
581
544
  var styles = import_react_native.StyleSheet.create({
@@ -600,7 +563,7 @@ var styles = import_react_native.StyleSheet.create({
600
563
  });
601
564
 
602
565
  // src/components/Input.tsx
603
- var import_react5 = __toESM(require("react"));
566
+ var import_react4 = __toESM(require("react"));
604
567
  var import_react_native2 = require("react-native");
605
568
  var Input = ({
606
569
  label,
@@ -624,7 +587,7 @@ var Input = ({
624
587
  return theme.colors.border;
625
588
  }
626
589
  };
627
- return /* @__PURE__ */ import_react5.default.createElement(import_react_native2.View, { style: [styles2.wrapper, containerStyle] }, label && /* @__PURE__ */ import_react5.default.createElement(
590
+ return /* @__PURE__ */ import_react4.default.createElement(import_react_native2.View, { style: [styles2.wrapper, containerStyle] }, label && /* @__PURE__ */ import_react4.default.createElement(
628
591
  import_react_native2.Text,
629
592
  {
630
593
  style: [
@@ -634,7 +597,7 @@ var Input = ({
634
597
  ]
635
598
  },
636
599
  label
637
- ), /* @__PURE__ */ import_react5.default.createElement(
600
+ ), /* @__PURE__ */ import_react4.default.createElement(
638
601
  import_react_native2.TextInput,
639
602
  {
640
603
  placeholderTextColor: theme.colors.textTertiary,
@@ -653,7 +616,7 @@ var Input = ({
653
616
  ],
654
617
  ...props
655
618
  }
656
- ), error && /* @__PURE__ */ import_react5.default.createElement(
619
+ ), error && /* @__PURE__ */ import_react4.default.createElement(
657
620
  import_react_native2.Text,
658
621
  {
659
622
  style: [
@@ -662,7 +625,7 @@ var Input = ({
662
625
  ]
663
626
  },
664
627
  error
665
- ), helperText && !error && /* @__PURE__ */ import_react5.default.createElement(
628
+ ), helperText && !error && /* @__PURE__ */ import_react4.default.createElement(
666
629
  import_react_native2.Text,
667
630
  {
668
631
  style: [
@@ -701,7 +664,7 @@ var styles2 = import_react_native2.StyleSheet.create({
701
664
  });
702
665
 
703
666
  // src/components/Alert.tsx
704
- var import_react6 = __toESM(require("react"));
667
+ var import_react5 = __toESM(require("react"));
705
668
  var import_react_native3 = require("react-native");
706
669
  var Alert = ({
707
670
  variant = "default",
@@ -723,7 +686,7 @@ var Alert = ({
723
686
  };
724
687
  }
725
688
  };
726
- return /* @__PURE__ */ import_react6.default.createElement(
689
+ return /* @__PURE__ */ import_react5.default.createElement(
727
690
  import_react_native3.View,
728
691
  {
729
692
  style: [
@@ -739,12 +702,30 @@ var Alert = ({
739
702
  children
740
703
  );
741
704
  };
705
+ var AlertTitle = ({ children, style }) => {
706
+ const theme = useTheme();
707
+ return /* @__PURE__ */ import_react5.default.createElement(
708
+ import_react_native3.Text,
709
+ {
710
+ style: [
711
+ styles3.title,
712
+ {
713
+ color: theme.colors.text,
714
+ fontSize: theme.fontSize.md,
715
+ textAlign: "center"
716
+ },
717
+ style
718
+ ]
719
+ },
720
+ children
721
+ );
722
+ };
742
723
  var AlertDescription = ({
743
724
  children,
744
725
  style
745
726
  }) => {
746
727
  const theme = useTheme();
747
- return /* @__PURE__ */ import_react6.default.createElement(
728
+ return /* @__PURE__ */ import_react5.default.createElement(
748
729
  import_react_native3.Text,
749
730
  {
750
731
  style: [
@@ -777,18 +758,18 @@ var styles3 = import_react_native3.StyleSheet.create({
777
758
  });
778
759
 
779
760
  // src/components/Modal.tsx
780
- var import_react8 = __toESM(require("react"));
761
+ var import_react7 = __toESM(require("react"));
781
762
  var import_react_native4 = require("react-native");
782
763
 
783
764
  // src/assets/CloseIcon.tsx
784
- var import_react7 = __toESM(require("react"));
785
- var import_react_native_svg2 = __toESM(require("react-native-svg"));
765
+ var import_react6 = __toESM(require("react"));
766
+ var import_react_native_svg = __toESM(require("react-native-svg"));
786
767
  var CloseIcon = ({
787
768
  size = 20,
788
769
  color = "#000"
789
770
  }) => {
790
- return /* @__PURE__ */ import_react7.default.createElement(import_react_native_svg2.default, { width: size, height: size, viewBox: "0 0 20 20", fill: "none" }, /* @__PURE__ */ import_react7.default.createElement(
791
- import_react_native_svg2.Path,
771
+ return /* @__PURE__ */ import_react6.default.createElement(import_react_native_svg.default, { width: size, height: size, viewBox: "0 0 20 20", fill: "none" }, /* @__PURE__ */ import_react6.default.createElement(
772
+ import_react_native_svg.Path,
792
773
  {
793
774
  d: "M15 5L5 15M5 5L15 15",
794
775
  stroke: color,
@@ -814,7 +795,7 @@ var Modal = ({
814
795
  const getSizeStyles = () => {
815
796
  switch (size) {
816
797
  case "xs":
817
- return { maxHeight: SCREEN_HEIGHT * 0.35 };
798
+ return { maxHeight: SCREEN_HEIGHT * 0.4 };
818
799
  case "sm":
819
800
  return { maxHeight: SCREEN_HEIGHT * 0.45 };
820
801
  case "md":
@@ -832,13 +813,13 @@ var Modal = ({
832
813
  const handleOverlayPress = () => {
833
814
  if (!disableClose && closeOnOverlayClick) onClose();
834
815
  };
835
- return /* @__PURE__ */ import_react8.default.createElement(
816
+ return /* @__PURE__ */ import_react7.default.createElement(
836
817
  import_react_native4.KeyboardAvoidingView,
837
818
  {
838
819
  behavior: import_react_native4.Platform.OS === "ios" ? "padding" : "height",
839
820
  style: styles4.keyboardView
840
821
  },
841
- /* @__PURE__ */ import_react8.default.createElement(
822
+ /* @__PURE__ */ import_react7.default.createElement(
842
823
  import_react_native4.Modal,
843
824
  {
844
825
  visible: isOpen,
@@ -847,14 +828,14 @@ var Modal = ({
847
828
  statusBarTranslucent: true,
848
829
  onRequestClose: disableClose ? void 0 : onClose
849
830
  },
850
- /* @__PURE__ */ import_react8.default.createElement(
831
+ /* @__PURE__ */ import_react7.default.createElement(
851
832
  import_react_native4.TouchableOpacity,
852
833
  {
853
834
  activeOpacity: 1,
854
835
  style: [styles4.overlay, { backgroundColor: theme.colors.overlay }],
855
836
  onPress: handleOverlayPress
856
837
  },
857
- /* @__PURE__ */ import_react8.default.createElement(
838
+ /* @__PURE__ */ import_react7.default.createElement(
858
839
  import_react_native4.View,
859
840
  {
860
841
  style: [
@@ -885,7 +866,7 @@ var ModalHeader = ({
885
866
  style
886
867
  }) => {
887
868
  const theme = useTheme();
888
- return /* @__PURE__ */ import_react8.default.createElement(
869
+ return /* @__PURE__ */ import_react7.default.createElement(
889
870
  import_react_native4.View,
890
871
  {
891
872
  style: [
@@ -898,7 +879,7 @@ var ModalHeader = ({
898
879
  style
899
880
  ]
900
881
  },
901
- /* @__PURE__ */ import_react8.default.createElement(import_react_native4.View, { style: styles4.headerContent }, typeof children === "string" ? /* @__PURE__ */ import_react8.default.createElement(
882
+ /* @__PURE__ */ import_react7.default.createElement(import_react_native4.View, { style: styles4.headerContent }, typeof children === "string" ? /* @__PURE__ */ import_react7.default.createElement(
902
883
  import_react_native4.Text,
903
884
  {
904
885
  style: [
@@ -908,7 +889,7 @@ var ModalHeader = ({
908
889
  },
909
890
  children
910
891
  ) : children),
911
- showCloseButton && onClose && /* @__PURE__ */ import_react8.default.createElement(
892
+ showCloseButton && onClose && /* @__PURE__ */ import_react7.default.createElement(
912
893
  import_react_native4.TouchableOpacity,
913
894
  {
914
895
  onPress: onClose,
@@ -918,7 +899,7 @@ var ModalHeader = ({
918
899
  { backgroundColor: theme.colors.surface }
919
900
  ]
920
901
  },
921
- /* @__PURE__ */ import_react8.default.createElement(CloseIcon, { color: theme.colors.text, size: 20 })
902
+ /* @__PURE__ */ import_react7.default.createElement(CloseIcon, { color: theme.colors.text, size: 20 })
922
903
  )
923
904
  );
924
905
  };
@@ -929,7 +910,7 @@ var ModalBody = ({
929
910
  }) => {
930
911
  const theme = useTheme();
931
912
  if (scrollable) {
932
- return /* @__PURE__ */ import_react8.default.createElement(
913
+ return /* @__PURE__ */ import_react7.default.createElement(
933
914
  import_react_native4.ScrollView,
934
915
  {
935
916
  style: styles4.bodyScroll,
@@ -944,14 +925,14 @@ var ModalBody = ({
944
925
  children
945
926
  );
946
927
  }
947
- return /* @__PURE__ */ import_react8.default.createElement(import_react_native4.View, { style: [styles4.body, { padding: theme.spacing.lg }, style] }, children);
928
+ return /* @__PURE__ */ import_react7.default.createElement(import_react_native4.View, { style: [styles4.body, { padding: theme.spacing.lg }, style] }, children);
948
929
  };
949
930
  var ModalFooter = ({
950
931
  children,
951
932
  style
952
933
  }) => {
953
934
  const theme = useTheme();
954
- return /* @__PURE__ */ import_react8.default.createElement(
935
+ return /* @__PURE__ */ import_react7.default.createElement(
955
936
  import_react_native4.View,
956
937
  {
957
938
  style: [
@@ -1025,7 +1006,7 @@ var styles4 = import_react_native4.StyleSheet.create({
1025
1006
  });
1026
1007
 
1027
1008
  // src/components/OTP.tsx
1028
- var import_react9 = __toESM(require("react"));
1009
+ var import_react8 = __toESM(require("react"));
1029
1010
  var import_react_native5 = require("react-native");
1030
1011
  var OTP = ({
1031
1012
  length = 6,
@@ -1041,11 +1022,11 @@ var OTP = ({
1041
1022
  }) => {
1042
1023
  const theme = useTheme();
1043
1024
  const AUTO_SUBMIT_DELAY = 500;
1044
- const [otp, setOtp] = import_react9.default.useState(
1025
+ const [otp, setOtp] = import_react8.default.useState(
1045
1026
  value.split("").concat(Array(length).fill("")).slice(0, length)
1046
1027
  );
1047
- const inputRefs = import_react9.default.useRef([]);
1048
- import_react9.default.useEffect(() => {
1028
+ const inputRefs = import_react8.default.useRef([]);
1029
+ import_react8.default.useEffect(() => {
1049
1030
  const isComplete = otp.every((digit) => digit !== "");
1050
1031
  let timer;
1051
1032
  if (isComplete && onComplete) {
@@ -1057,12 +1038,12 @@ var OTP = ({
1057
1038
  if (timer) clearTimeout(timer);
1058
1039
  };
1059
1040
  }, [otp, onComplete]);
1060
- import_react9.default.useEffect(() => {
1041
+ import_react8.default.useEffect(() => {
1061
1042
  setTimeout(() => {
1062
1043
  inputRefs.current[0]?.focus();
1063
1044
  }, 100);
1064
1045
  }, []);
1065
- const handleChange = import_react9.default.useCallback(
1046
+ const handleChange = import_react8.default.useCallback(
1066
1047
  (index, val) => {
1067
1048
  if (disabled) return;
1068
1049
  setErrorMessage("");
@@ -1085,7 +1066,7 @@ var OTP = ({
1085
1066
  },
1086
1067
  [otp, length, onChange, onComplete, disabled]
1087
1068
  );
1088
- const handleKeyPress = import_react9.default.useCallback(
1069
+ const handleKeyPress = import_react8.default.useCallback(
1089
1070
  (index, e) => {
1090
1071
  if (disabled) return;
1091
1072
  if (e.nativeEvent.key === "Backspace") {
@@ -1106,7 +1087,7 @@ var OTP = ({
1106
1087
  if (otp[index]) return theme.colors.success;
1107
1088
  return theme.colors.border;
1108
1089
  };
1109
- return /* @__PURE__ */ import_react9.default.createElement(import_react_native5.View, { style: [styles5.wrapper, containerStyle] }, label && /* @__PURE__ */ import_react9.default.createElement(
1090
+ return /* @__PURE__ */ import_react8.default.createElement(import_react_native5.View, { style: [styles5.wrapper, containerStyle] }, label && /* @__PURE__ */ import_react8.default.createElement(
1110
1091
  import_react_native5.Text,
1111
1092
  {
1112
1093
  style: [
@@ -1115,7 +1096,7 @@ var OTP = ({
1115
1096
  ]
1116
1097
  },
1117
1098
  label
1118
- ), /* @__PURE__ */ import_react9.default.createElement(import_react_native5.View, { style: styles5.container }, Array.from({ length }, (_, index) => /* @__PURE__ */ import_react9.default.createElement(
1099
+ ), /* @__PURE__ */ import_react8.default.createElement(import_react_native5.View, { style: styles5.container }, Array.from({ length }, (_, index) => /* @__PURE__ */ import_react8.default.createElement(
1119
1100
  import_react_native5.TextInput,
1120
1101
  {
1121
1102
  key: index,
@@ -1140,7 +1121,7 @@ var OTP = ({
1140
1121
  selectTextOnFocus: true,
1141
1122
  caretHidden: true
1142
1123
  }
1143
- ))), error && /* @__PURE__ */ import_react9.default.createElement(
1124
+ ))), error && /* @__PURE__ */ import_react8.default.createElement(
1144
1125
  import_react_native5.Text,
1145
1126
  {
1146
1127
  style: [
@@ -1183,11 +1164,11 @@ var styles5 = import_react_native5.StyleSheet.create({
1183
1164
  });
1184
1165
 
1185
1166
  // src/components/SkeletonItem.tsx
1186
- var import_react10 = __toESM(require("react"));
1167
+ var import_react9 = __toESM(require("react"));
1187
1168
  var import_react_native6 = require("react-native");
1188
1169
  var SkeletonItem = () => {
1189
- const opacity = (0, import_react10.useRef)(new import_react_native6.Animated.Value(0.3)).current;
1190
- (0, import_react10.useEffect)(() => {
1170
+ const opacity = (0, import_react9.useRef)(new import_react_native6.Animated.Value(0.3)).current;
1171
+ (0, import_react9.useEffect)(() => {
1191
1172
  import_react_native6.Animated.loop(
1192
1173
  import_react_native6.Animated.sequence([
1193
1174
  import_react_native6.Animated.timing(opacity, {
@@ -1203,7 +1184,7 @@ var SkeletonItem = () => {
1203
1184
  ])
1204
1185
  ).start();
1205
1186
  }, []);
1206
- return /* @__PURE__ */ import_react10.default.createElement(import_react_native6.Animated.View, { style: [styles6.row, { opacity }] }, /* @__PURE__ */ import_react10.default.createElement(import_react_native6.View, { style: styles6.iconCircle }), /* @__PURE__ */ import_react10.default.createElement(import_react_native6.View, { style: styles6.textBlock }, /* @__PURE__ */ import_react10.default.createElement(import_react_native6.View, { style: styles6.lineLong }), /* @__PURE__ */ import_react10.default.createElement(import_react_native6.View, { style: styles6.lineShort })));
1187
+ return /* @__PURE__ */ import_react9.default.createElement(import_react_native6.Animated.View, { style: [styles6.row, { opacity }] }, /* @__PURE__ */ import_react9.default.createElement(import_react_native6.View, { style: styles6.iconCircle }), /* @__PURE__ */ import_react9.default.createElement(import_react_native6.View, { style: styles6.textBlock }, /* @__PURE__ */ import_react9.default.createElement(import_react_native6.View, { style: styles6.lineLong }), /* @__PURE__ */ import_react9.default.createElement(import_react_native6.View, { style: styles6.lineShort })));
1207
1188
  };
1208
1189
  var styles6 = import_react_native6.StyleSheet.create({
1209
1190
  row: {
@@ -1238,14 +1219,14 @@ var styles6 = import_react_native6.StyleSheet.create({
1238
1219
  var SkeletonItem_default = SkeletonItem;
1239
1220
 
1240
1221
  // src/components/Mode.tsx
1241
- var import_react11 = __toESM(require("react"));
1222
+ var import_react10 = __toESM(require("react"));
1242
1223
  var import_react_native7 = require("react-native");
1243
1224
  var Mode = () => {
1244
1225
  const { clientInfo } = useKryptosConnect();
1245
1226
  const theme = useTheme();
1246
1227
  if (!clientInfo) return null;
1247
1228
  if (clientInfo?.project_stage === "production") return null;
1248
- return /* @__PURE__ */ import_react11.default.createElement(import_react_native7.View, { style: [styles7.container, { backgroundColor: theme.colors.warning }] }, /* @__PURE__ */ import_react11.default.createElement(import_react_native7.Text, { style: [styles7.text, { color: theme.colors.warningText }] }, "Sandbox Mode"));
1229
+ return /* @__PURE__ */ import_react10.default.createElement(import_react_native7.View, { style: [styles7.container, { backgroundColor: theme.colors.warning }] }, /* @__PURE__ */ import_react10.default.createElement(import_react_native7.Text, { style: [styles7.text, { color: theme.colors.warningText }] }, "Sandbox Mode"));
1249
1230
  };
1250
1231
  var styles7 = import_react_native7.StyleSheet.create({
1251
1232
  container: {
@@ -1268,6 +1249,45 @@ var import_react_native9 = require("react-native");
1268
1249
  // src/components/PoweredByKryptos.tsx
1269
1250
  var import_react12 = __toESM(require("react"));
1270
1251
  var import_react_native8 = require("react-native");
1252
+
1253
+ // src/assets/LogoIcon.tsx
1254
+ var import_react11 = __toESM(require("react"));
1255
+ var import_react_native_svg2 = __toESM(require("react-native-svg"));
1256
+ var LogoIcon = ({ size = 36 }) => {
1257
+ return /* @__PURE__ */ import_react11.default.createElement(import_react_native_svg2.default, { width: size, height: size, viewBox: "0 0 36 36", fill: "none" }, /* @__PURE__ */ import_react11.default.createElement(
1258
+ import_react_native_svg2.Path,
1259
+ {
1260
+ d: "M0 4.11429C0 1.84203 1.84203 0 4.11429 0H31.8857C34.158 0 36 1.84203 36 4.11429V31.8857C36 34.158 34.158 36 31.8857 36H4.11429C1.84203 36 0 34.158 0 31.8857V4.11429Z",
1261
+ fill: "#00C693"
1262
+ }
1263
+ ), /* @__PURE__ */ import_react11.default.createElement(
1264
+ import_react_native_svg2.Path,
1265
+ {
1266
+ d: "M12.3916 28.2857H8.43388C8.03646 28.2857 7.71429 27.9886 7.71429 27.6221V22.92C7.71429 22.744 7.7901 22.5752 7.92505 22.4508L9.66229 20.8487C9.79724 20.7243 9.98027 20.6544 10.1711 20.6544H12.3916C12.789 20.6544 13.1112 20.9515 13.1112 21.318V27.6221C13.1112 27.9886 12.789 28.2857 12.3916 28.2857Z",
1267
+ fill: "white"
1268
+ }
1269
+ ), /* @__PURE__ */ import_react11.default.createElement(
1270
+ import_react_native_svg2.Path,
1271
+ {
1272
+ d: "M27.5647 28.2857H22.0443C21.8535 28.2857 21.6704 28.2158 21.5355 28.0914L13.9798 21.1236C13.6988 20.8645 13.6988 20.4443 13.9798 20.1851L15.7788 18.5262C15.9137 18.4017 16.0968 18.3318 16.2876 18.3318H18.21C18.4009 18.3318 18.5839 18.4017 18.7189 18.5262L28.0735 27.1529C28.5268 27.5709 28.2058 28.2857 27.5647 28.2857Z",
1273
+ fill: "white"
1274
+ }
1275
+ ), /* @__PURE__ */ import_react11.default.createElement(
1276
+ import_react_native_svg2.Path,
1277
+ {
1278
+ d: "M27.5647 7.71429H22.0443C21.8535 7.71429 21.6704 7.7842 21.5355 7.90865L13.9798 14.8764C13.6988 15.1355 13.6988 15.5557 13.9798 15.8149L15.7788 17.4738C15.9137 17.5983 16.0968 17.6682 16.2876 17.6682H18.21C18.4009 17.6682 18.5839 17.5983 18.7189 17.4738L28.0735 8.84711C28.5268 8.42907 28.2058 7.71429 27.5647 7.71429Z",
1279
+ fill: "white"
1280
+ }
1281
+ ), /* @__PURE__ */ import_react11.default.createElement(
1282
+ import_react_native_svg2.Path,
1283
+ {
1284
+ d: "M12.3916 7.71429H8.43388C8.03646 7.71429 7.71429 8.01139 7.71429 8.37788V13.08C7.71429 13.256 7.7901 13.4248 7.92505 13.5492L9.66229 15.1513C9.79724 15.2757 9.98027 15.3456 10.1711 15.3456H12.3916C12.789 15.3456 13.1112 15.0485 13.1112 14.682V8.37788C13.1112 8.01139 12.789 7.71429 12.3916 7.71429Z",
1285
+ fill: "white"
1286
+ }
1287
+ ));
1288
+ };
1289
+
1290
+ // src/components/PoweredByKryptos.tsx
1271
1291
  var PoweredByKryptos = () => {
1272
1292
  const theme = useTheme();
1273
1293
  const handlePress = () => {
@@ -1624,7 +1644,7 @@ var Auth = ({
1624
1644
  const err = error;
1625
1645
  console.error(error);
1626
1646
  setErrorMessage(
1627
- err?.response?.data?.message || "Failed to continue as guest"
1647
+ err?.response?.data?.error || err?.response?.data?.message || "Failed to continue as guest"
1628
1648
  );
1629
1649
  } finally {
1630
1650
  setIsLoading(false);
@@ -1772,9 +1792,101 @@ var styles11 = import_react_native12.StyleSheet.create({
1772
1792
  }
1773
1793
  });
1774
1794
 
1775
- // src/molecules/Init.tsx
1776
- var import_react21 = __toESM(require("react"));
1795
+ // src/molecules/EndModal.tsx
1796
+ var import_react22 = __toESM(require("react"));
1777
1797
  var import_react_native13 = require("react-native");
1798
+
1799
+ // src/assets/SuccessIcon.tsx
1800
+ var import_react21 = __toESM(require("react"));
1801
+ var import_react_native_svg8 = __toESM(require("react-native-svg"));
1802
+ var SuccessIcon = ({ size = 64 }) => {
1803
+ return /* @__PURE__ */ import_react21.default.createElement(import_react_native_svg8.default, { width: size, height: size, viewBox: "0 0 64 64", fill: "none" }, /* @__PURE__ */ import_react21.default.createElement(
1804
+ import_react_native_svg8.Circle,
1805
+ {
1806
+ cx: 32,
1807
+ cy: 32,
1808
+ r: 30,
1809
+ fill: "#00C693",
1810
+ opacity: 0.1
1811
+ }
1812
+ ), /* @__PURE__ */ import_react21.default.createElement(
1813
+ import_react_native_svg8.Circle,
1814
+ {
1815
+ cx: 32,
1816
+ cy: 32,
1817
+ r: 24,
1818
+ fill: "#00C693"
1819
+ }
1820
+ ), /* @__PURE__ */ import_react21.default.createElement(
1821
+ import_react_native_svg8.Path,
1822
+ {
1823
+ d: "M24 32l6 6 12-12",
1824
+ stroke: "white",
1825
+ strokeWidth: 3,
1826
+ strokeLinecap: "round",
1827
+ strokeLinejoin: "round"
1828
+ }
1829
+ ));
1830
+ };
1831
+
1832
+ // src/molecules/EndModal.tsx
1833
+ var EndModal = ({ open, onClose }) => {
1834
+ const theme = useTheme();
1835
+ (0, import_react22.useEffect)(() => {
1836
+ if (!open) return;
1837
+ const timer = setTimeout(() => {
1838
+ onClose();
1839
+ }, 5e3);
1840
+ return () => clearTimeout(timer);
1841
+ }, []);
1842
+ return /* @__PURE__ */ import_react22.default.createElement(Modal, { isOpen: open, onClose, size: "xl" }, /* @__PURE__ */ import_react22.default.createElement(ModalHeader, { onClose }, ""), /* @__PURE__ */ import_react22.default.createElement(ModalBody, null, /* @__PURE__ */ import_react22.default.createElement(import_react_native13.View, { style: styles12.container }, /* @__PURE__ */ import_react22.default.createElement(
1843
+ import_react_native13.View,
1844
+ {
1845
+ style: [
1846
+ styles12.iconContainer,
1847
+ { backgroundColor: theme.colors.successLight }
1848
+ ]
1849
+ },
1850
+ /* @__PURE__ */ import_react22.default.createElement(SuccessIcon, { size: 80 })
1851
+ ), /* @__PURE__ */ import_react22.default.createElement(import_react_native13.Text, { style: [styles12.message, { color: theme.colors.text }] }, "All set! We're redirecting you back to the app. If it takes longer than expected, tap the button below to continue."), /* @__PURE__ */ import_react22.default.createElement(Alert, null, /* @__PURE__ */ import_react22.default.createElement(AlertTitle, null, "Sync in Progress"), /* @__PURE__ */ import_react22.default.createElement(AlertDescription, null, "The syncing process might take a moment. Please wait, and your data will be updated soon.")))), /* @__PURE__ */ import_react22.default.createElement(ModalFooter, { style: { paddingVertical: 8 } }, /* @__PURE__ */ import_react22.default.createElement(
1852
+ Button,
1853
+ {
1854
+ variant: "primary",
1855
+ size: "lg",
1856
+ onPress: onClose,
1857
+ style: styles12.button
1858
+ },
1859
+ "Continue to App"
1860
+ ), /* @__PURE__ */ import_react22.default.createElement(Footer, null)));
1861
+ };
1862
+ var styles12 = import_react_native13.StyleSheet.create({
1863
+ container: {
1864
+ alignItems: "center",
1865
+ paddingVertical: 20
1866
+ },
1867
+ iconContainer: {
1868
+ width: 80,
1869
+ height: 80,
1870
+ borderRadius: 40,
1871
+ alignItems: "center",
1872
+ justifyContent: "center",
1873
+ marginBottom: 20
1874
+ },
1875
+ message: {
1876
+ fontSize: 14,
1877
+ textAlign: "center",
1878
+ lineHeight: 20,
1879
+ marginBottom: 24,
1880
+ paddingHorizontal: 20
1881
+ },
1882
+ button: {
1883
+ width: "100%"
1884
+ }
1885
+ });
1886
+
1887
+ // src/molecules/Init.tsx
1888
+ var import_react23 = __toESM(require("react"));
1889
+ var import_react_native14 = require("react-native");
1778
1890
  var Init = ({
1779
1891
  open,
1780
1892
  onSuccess,
@@ -1789,9 +1901,9 @@ var Init = ({
1789
1901
  setUser
1790
1902
  } = useKryptosConnect();
1791
1903
  const theme = useTheme();
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 () => {
1904
+ const [isFetching, setIsFetching] = import_react23.default.useState(false);
1905
+ const [error, setError] = import_react23.default.useState(null);
1906
+ const fetchLinkToken = import_react23.default.useCallback(async () => {
1795
1907
  if (!open) return;
1796
1908
  setIsFetching(true);
1797
1909
  setError(null);
@@ -1818,28 +1930,28 @@ var Init = ({
1818
1930
  setIsFetching(false);
1819
1931
  }
1820
1932
  }, []);
1821
- import_react21.default.useEffect(() => {
1933
+ import_react23.default.useEffect(() => {
1822
1934
  fetchLinkToken();
1823
1935
  }, [fetchLinkToken]);
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,
1936
+ return /* @__PURE__ */ import_react23.default.createElement(Modal, { isOpen: open, onClose, size: "md" }, /* @__PURE__ */ import_react23.default.createElement(ModalHeader, { onClose }, "Kryptos Connect"), /* @__PURE__ */ import_react23.default.createElement(ModalBody, null, /* @__PURE__ */ import_react23.default.createElement(import_react_native14.View, { style: styles13.container }, isFetching && /* @__PURE__ */ import_react23.default.createElement(import_react23.default.Fragment, null, /* @__PURE__ */ import_react23.default.createElement(
1937
+ import_react_native14.ActivityIndicator,
1826
1938
  {
1827
1939
  size: "large",
1828
1940
  color: theme.colors.primary,
1829
- style: styles12.spinner
1941
+ style: styles13.spinner
1830
1942
  }
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(
1943
+ ), /* @__PURE__ */ import_react23.default.createElement(import_react_native14.Text, { style: [styles13.message, { color: theme.colors.text }] }, isInitialized ? "Fetching link token..." : "Initializing...")), !isFetching && error && /* @__PURE__ */ import_react23.default.createElement(import_react23.default.Fragment, null, /* @__PURE__ */ import_react23.default.createElement(Alert, { variant: "destructive" }, /* @__PURE__ */ import_react23.default.createElement(AlertDescription, null, error)), /* @__PURE__ */ import_react23.default.createElement(
1832
1944
  Button,
1833
1945
  {
1834
1946
  variant: "primary",
1835
1947
  size: "lg",
1836
1948
  onPress: fetchLinkToken,
1837
- style: styles12.retryButton
1949
+ style: styles13.retryButton
1838
1950
  },
1839
1951
  "Retry"
1840
- )))), /* @__PURE__ */ import_react21.default.createElement(ModalFooter, { style: { paddingVertical: 0 } }, /* @__PURE__ */ import_react21.default.createElement(Footer, null)));
1952
+ )))), /* @__PURE__ */ import_react23.default.createElement(ModalFooter, { style: { paddingVertical: 0 } }, /* @__PURE__ */ import_react23.default.createElement(Footer, null)));
1841
1953
  };
1842
- var styles12 = import_react_native13.StyleSheet.create({
1954
+ var styles13 = import_react_native14.StyleSheet.create({
1843
1955
  container: {
1844
1956
  flex: 1,
1845
1957
  alignItems: "center",
@@ -1866,18 +1978,18 @@ var styles12 = import_react_native13.StyleSheet.create({
1866
1978
  });
1867
1979
 
1868
1980
  // src/molecules/Integration.tsx
1869
- var import_react32 = __toESM(require("react"));
1870
- var import_react_native17 = require("react-native");
1981
+ var import_react35 = __toESM(require("react"));
1982
+ var import_react_native19 = require("react-native");
1871
1983
 
1872
1984
  // src/assets/ArrowLeftIcon.tsx
1873
- var import_react22 = __toESM(require("react"));
1874
- var import_react_native_svg8 = __toESM(require("react-native-svg"));
1985
+ var import_react24 = __toESM(require("react"));
1986
+ var import_react_native_svg9 = __toESM(require("react-native-svg"));
1875
1987
  var ArrowLeftIcon = ({
1876
1988
  size = 20,
1877
1989
  color = "#000"
1878
1990
  }) => {
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,
1991
+ return /* @__PURE__ */ import_react24.default.createElement(import_react_native_svg9.default, { width: size, height: size, viewBox: "0 0 24 24", fill: "none" }, /* @__PURE__ */ import_react24.default.createElement(
1992
+ import_react_native_svg9.Path,
1881
1993
  {
1882
1994
  d: "M19 12H5M12 19l-7-7 7-7",
1883
1995
  stroke: color,
@@ -1889,14 +2001,14 @@ var ArrowLeftIcon = ({
1889
2001
  };
1890
2002
 
1891
2003
  // src/assets/CheckCircleIcon.tsx
1892
- var import_react23 = __toESM(require("react"));
1893
- var import_react_native_svg9 = __toESM(require("react-native-svg"));
2004
+ var import_react25 = __toESM(require("react"));
2005
+ var import_react_native_svg10 = __toESM(require("react-native-svg"));
1894
2006
  var CheckCircleIcon = ({
1895
2007
  size = 20,
1896
2008
  color = "#10B981"
1897
2009
  }) => {
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,
2010
+ return /* @__PURE__ */ import_react25.default.createElement(import_react_native_svg10.default, { width: size, height: size, viewBox: "0 0 24 24", fill: "none" }, /* @__PURE__ */ import_react25.default.createElement(
2011
+ import_react_native_svg10.Circle,
1900
2012
  {
1901
2013
  cx: 12,
1902
2014
  cy: 12,
@@ -1904,8 +2016,8 @@ var CheckCircleIcon = ({
1904
2016
  stroke: color,
1905
2017
  strokeWidth: 2
1906
2018
  }
1907
- ), /* @__PURE__ */ import_react23.default.createElement(
1908
- import_react_native_svg9.Path,
2019
+ ), /* @__PURE__ */ import_react25.default.createElement(
2020
+ import_react_native_svg10.Path,
1909
2021
  {
1910
2022
  d: "m9 12 2 2 4-4",
1911
2023
  stroke: color,
@@ -1917,21 +2029,21 @@ var CheckCircleIcon = ({
1917
2029
  };
1918
2030
 
1919
2031
  // src/assets/LoaderIcon.tsx
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);
2032
+ var import_react26 = __toESM(require("react"));
2033
+ var import_react_native15 = require("react-native");
2034
+ var import_react_native_svg11 = __toESM(require("react-native-svg"));
2035
+ var AnimatedSvg = import_react_native15.Animated.createAnimatedComponent(import_react_native_svg11.default);
1924
2036
  var LoaderIcon = ({
1925
2037
  size = 20,
1926
2038
  color = "#00C693"
1927
2039
  }) => {
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, {
2040
+ const rotateAnim = import_react26.default.useRef(new import_react_native15.Animated.Value(0)).current;
2041
+ import_react26.default.useEffect(() => {
2042
+ import_react_native15.Animated.loop(
2043
+ import_react_native15.Animated.timing(rotateAnim, {
1932
2044
  toValue: 1,
1933
2045
  duration: 1e3,
1934
- easing: import_react_native14.Easing.linear,
2046
+ easing: import_react_native15.Easing.linear,
1935
2047
  useNativeDriver: true
1936
2048
  })
1937
2049
  ).start();
@@ -1940,7 +2052,7 @@ var LoaderIcon = ({
1940
2052
  inputRange: [0, 1],
1941
2053
  outputRange: ["0deg", "360deg"]
1942
2054
  });
1943
- return /* @__PURE__ */ import_react24.default.createElement(
2055
+ return /* @__PURE__ */ import_react26.default.createElement(
1944
2056
  AnimatedSvg,
1945
2057
  {
1946
2058
  width: size,
@@ -1949,8 +2061,8 @@ var LoaderIcon = ({
1949
2061
  fill: "none",
1950
2062
  style: { transform: [{ rotate: spin }] }
1951
2063
  },
1952
- /* @__PURE__ */ import_react24.default.createElement(
1953
- import_react_native_svg10.Path,
2064
+ /* @__PURE__ */ import_react26.default.createElement(
2065
+ import_react_native_svg11.Path,
1954
2066
  {
1955
2067
  d: "M21 12a9 9 0 1 1-6.219-8.56",
1956
2068
  stroke: color,
@@ -1962,44 +2074,11 @@ var LoaderIcon = ({
1962
2074
  );
1963
2075
  };
1964
2076
 
1965
- // src/assets/SuccessIcon.tsx
1966
- var import_react25 = __toESM(require("react"));
1967
- var import_react_native_svg11 = __toESM(require("react-native-svg"));
1968
- var SuccessIcon = ({ size = 64 }) => {
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,
1971
- {
1972
- cx: 32,
1973
- cy: 32,
1974
- r: 30,
1975
- fill: "#00C693",
1976
- opacity: 0.1
1977
- }
1978
- ), /* @__PURE__ */ import_react25.default.createElement(
1979
- import_react_native_svg11.Circle,
1980
- {
1981
- cx: 32,
1982
- cy: 32,
1983
- r: 24,
1984
- fill: "#00C693"
1985
- }
1986
- ), /* @__PURE__ */ import_react25.default.createElement(
1987
- import_react_native_svg11.Path,
1988
- {
1989
- d: "M24 32l6 6 12-12",
1990
- stroke: "white",
1991
- strokeWidth: 3,
1992
- strokeLinecap: "round",
1993
- strokeLinejoin: "round"
1994
- }
1995
- ));
1996
- };
1997
-
1998
2077
  // src/assets/ErrorIcon.tsx
1999
- var import_react26 = __toESM(require("react"));
2078
+ var import_react27 = __toESM(require("react"));
2000
2079
  var import_react_native_svg12 = __toESM(require("react-native-svg"));
2001
2080
  var ErrorIcon = ({ size = 64 }) => {
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(
2081
+ return /* @__PURE__ */ import_react27.default.createElement(import_react_native_svg12.default, { width: size, height: size, viewBox: "0 0 64 64", fill: "none" }, /* @__PURE__ */ import_react27.default.createElement(
2003
2082
  import_react_native_svg12.Circle,
2004
2083
  {
2005
2084
  cx: 32,
@@ -2008,7 +2087,7 @@ var ErrorIcon = ({ size = 64 }) => {
2008
2087
  fill: "#EF4444",
2009
2088
  opacity: 0.1
2010
2089
  }
2011
- ), /* @__PURE__ */ import_react26.default.createElement(
2090
+ ), /* @__PURE__ */ import_react27.default.createElement(
2012
2091
  import_react_native_svg12.Circle,
2013
2092
  {
2014
2093
  cx: 32,
@@ -2016,7 +2095,7 @@ var ErrorIcon = ({ size = 64 }) => {
2016
2095
  r: 24,
2017
2096
  fill: "#EF4444"
2018
2097
  }
2019
- ), /* @__PURE__ */ import_react26.default.createElement(
2098
+ ), /* @__PURE__ */ import_react27.default.createElement(
2020
2099
  import_react_native_svg12.Path,
2021
2100
  {
2022
2101
  d: "M24 24l16 16M40 24l-16 16",
@@ -2029,17 +2108,17 @@ var ErrorIcon = ({ size = 64 }) => {
2029
2108
  };
2030
2109
 
2031
2110
  // src/assets/SearchIcon.tsx
2032
- var import_react27 = __toESM(require("react"));
2111
+ var import_react28 = __toESM(require("react"));
2033
2112
  var import_react_native_svg13 = __toESM(require("react-native-svg"));
2034
2113
 
2035
2114
  // src/assets/PlusIcon.tsx
2036
- var import_react28 = __toESM(require("react"));
2115
+ var import_react29 = __toESM(require("react"));
2037
2116
  var import_react_native_svg14 = __toESM(require("react-native-svg"));
2038
2117
  var PlusIcon = ({
2039
2118
  size = 14,
2040
2119
  color = "#6B7280"
2041
2120
  }) => {
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(
2121
+ return /* @__PURE__ */ import_react29.default.createElement(import_react_native_svg14.default, { width: size, height: size, viewBox: "0 0 14 14", fill: "none" }, /* @__PURE__ */ import_react29.default.createElement(
2043
2122
  import_react_native_svg14.Path,
2044
2123
  {
2045
2124
  d: "M7 3.5v7M3.5 7h7",
@@ -2050,14 +2129,52 @@ var PlusIcon = ({
2050
2129
  ));
2051
2130
  };
2052
2131
 
2053
- // src/wallet-connect/index.tsx
2054
- var import_appkit_react_native3 = require("@reown/appkit-react-native");
2132
+ // src/assets/RedirectIcon.tsx
2055
2133
  var import_react30 = __toESM(require("react"));
2056
- var import_react_native15 = require("react-native");
2057
-
2058
- // src/utils/uuid.ts
2059
- function generateUUID() {
2060
- return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function(c) {
2134
+ var import_react_native_svg15 = __toESM(require("react-native-svg"));
2135
+ var RedirectIcon = ({
2136
+ width = 20,
2137
+ height = 20,
2138
+ color = "currentColor"
2139
+ }) => {
2140
+ return /* @__PURE__ */ import_react30.default.createElement(import_react_native_svg15.default, { width, height, viewBox: "0 0 20 20", fill: "none" }, /* @__PURE__ */ import_react30.default.createElement(
2141
+ import_react_native_svg15.Path,
2142
+ {
2143
+ d: "M10.8333 9.16536L17.6666 2.33203",
2144
+ stroke: color,
2145
+ strokeWidth: 2,
2146
+ strokeLinecap: "round",
2147
+ strokeLinejoin: "round"
2148
+ }
2149
+ ), /* @__PURE__ */ import_react30.default.createElement(
2150
+ import_react_native_svg15.Path,
2151
+ {
2152
+ d: "M18.3333 5.66797V1.66797H14.3333",
2153
+ stroke: color,
2154
+ strokeWidth: 2,
2155
+ strokeLinecap: "round",
2156
+ strokeLinejoin: "round"
2157
+ }
2158
+ ), /* @__PURE__ */ import_react30.default.createElement(
2159
+ import_react_native_svg15.Path,
2160
+ {
2161
+ d: "M9.16669 1.66797H7.50002C3.33335 1.66797 1.66669 3.33464 1.66669 7.5013V12.5013C1.66669 16.668 3.33335 18.3346 7.50002 18.3346H12.5C16.6667 18.3346 18.3334 16.668 18.3334 12.5013V10.8346",
2162
+ stroke: color,
2163
+ strokeWidth: 2,
2164
+ strokeLinecap: "round",
2165
+ strokeLinejoin: "round"
2166
+ }
2167
+ ));
2168
+ };
2169
+
2170
+ // src/wallet-connect/index.tsx
2171
+ var import_appkit_react_native3 = require("@reown/appkit-react-native");
2172
+ var import_react32 = __toESM(require("react"));
2173
+ var import_react_native16 = require("react-native");
2174
+
2175
+ // src/utils/uuid.ts
2176
+ function generateUUID() {
2177
+ return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function(c) {
2061
2178
  const r = Math.random() * 16 | 0;
2062
2179
  const v = c === "x" ? r : r & 3 | 8;
2063
2180
  return v.toString(16);
@@ -2065,7 +2182,7 @@ function generateUUID() {
2065
2182
  }
2066
2183
 
2067
2184
  // src/wallet-connect/wallet-connect.tsx
2068
- var import_react29 = __toESM(require("react"));
2185
+ var import_react31 = __toESM(require("react"));
2069
2186
  var import_appkit_react_native2 = require("@reown/appkit-react-native");
2070
2187
 
2071
2188
  // src/wallet-connect/AppKitConfig.ts
@@ -2164,7 +2281,7 @@ var createAppKitInstance = (projectId) => {
2164
2281
  // src/wallet-connect/wallet-connect.tsx
2165
2282
  var WalletConnectWrapper = ({ children }) => {
2166
2283
  const { walletConnectProjectId } = useKryptosConnect();
2167
- const appKit = import_react29.default.useMemo(() => {
2284
+ const appKit = import_react31.default.useMemo(() => {
2168
2285
  if (!walletConnectProjectId) {
2169
2286
  console.warn(
2170
2287
  "walletConnectProjectId is missing in KryptosConnectProvider config"
@@ -2174,9 +2291,9 @@ var WalletConnectWrapper = ({ children }) => {
2174
2291
  return createAppKitInstance(walletConnectProjectId);
2175
2292
  }, [walletConnectProjectId]);
2176
2293
  if (!appKit) {
2177
- return /* @__PURE__ */ import_react29.default.createElement(import_react29.default.Fragment, null, children);
2294
+ return /* @__PURE__ */ import_react31.default.createElement(import_react31.default.Fragment, null, children);
2178
2295
  }
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);
2296
+ return /* @__PURE__ */ import_react31.default.createElement(import_appkit_react_native2.AppKitProvider, { instance: appKit }, /* @__PURE__ */ import_react31.default.createElement(import_appkit_react_native2.AppKit, null), children);
2180
2297
  };
2181
2298
  var wallet_connect_default = WalletConnectWrapper;
2182
2299
 
@@ -2188,47 +2305,49 @@ var WalletConnectComponent = ({
2188
2305
  handleClose,
2189
2306
  modalOpen,
2190
2307
  setAddIntegrationMode,
2191
- providersList
2308
+ providersList,
2309
+ errorMessage,
2310
+ showBackButton
2192
2311
  }) => {
2193
2312
  const { walletConnectProjectId } = useKryptosConnect();
2194
2313
  const theme = useTheme();
2195
2314
  if (!walletConnectProjectId) {
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,
2315
+ return /* @__PURE__ */ import_react32.default.createElement(Modal, { isOpen: modalOpen, onClose: handleClose, size: "full" }, /* @__PURE__ */ import_react32.default.createElement(ModalHeader, { onClose: handleClose }, /* @__PURE__ */ import_react32.default.createElement(import_react_native16.View, { style: styles14.headerContent }, showBackButton && /* @__PURE__ */ import_react32.default.createElement(
2316
+ import_react_native16.TouchableOpacity,
2198
2317
  {
2199
2318
  onPress: () => {
2200
2319
  setAddIntegrationMode(null);
2201
2320
  },
2202
- style: styles13.backButton
2321
+ style: styles14.backButton
2203
2322
  },
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,
2323
+ /* @__PURE__ */ import_react32.default.createElement(ArrowLeftIcon, { size: 20, color: theme.colors.text })
2324
+ ), /* @__PURE__ */ import_react32.default.createElement(import_react_native16.Text, { style: [styles14.headerTitle, { color: theme.colors.text }] }, "Integration"))), /* @__PURE__ */ import_react32.default.createElement(ModalBody, { scrollable: true, style: styles14.contentContainer }, /* @__PURE__ */ import_react32.default.createElement(import_react_native16.View, { style: styles14.emptyState }, /* @__PURE__ */ import_react32.default.createElement(
2325
+ import_react_native16.Text,
2207
2326
  {
2208
- style: [styles13.emptyStateTitle, { color: theme.colors.text }]
2327
+ style: [styles14.emptyStateTitle, { color: theme.colors.text }]
2209
2328
  },
2210
2329
  "WalletConnect is not configured"
2211
- ), /* @__PURE__ */ import_react30.default.createElement(
2212
- import_react_native15.Text,
2330
+ ), /* @__PURE__ */ import_react32.default.createElement(
2331
+ import_react_native16.Text,
2213
2332
  {
2214
2333
  style: [
2215
- styles13.infoText,
2334
+ styles14.infoText,
2216
2335
  { color: theme.colors.textSecondary, textAlign: "center" }
2217
2336
  ]
2218
2337
  },
2219
2338
  "Please add a walletConnectProjectId to KryptosConnectProvider to enable wallet connections."
2220
- ), /* @__PURE__ */ import_react30.default.createElement(
2339
+ ), /* @__PURE__ */ import_react32.default.createElement(
2221
2340
  Button,
2222
2341
  {
2223
2342
  variant: "outline",
2224
2343
  size: "sm",
2225
2344
  onPress: () => setAddIntegrationMode(null),
2226
- style: styles13.emptyStateButton
2345
+ style: styles14.emptyStateButton
2227
2346
  },
2228
2347
  "Go back"
2229
2348
  ))));
2230
2349
  }
2231
- return /* @__PURE__ */ import_react30.default.createElement(wallet_connect_default, null, /* @__PURE__ */ import_react30.default.createElement(
2350
+ return /* @__PURE__ */ import_react32.default.createElement(wallet_connect_default, null, /* @__PURE__ */ import_react32.default.createElement(
2232
2351
  ConnectButton,
2233
2352
  {
2234
2353
  integration,
@@ -2237,7 +2356,9 @@ var WalletConnectComponent = ({
2237
2356
  handleClose,
2238
2357
  modalOpen,
2239
2358
  setAddIntegrationMode,
2240
- providersList
2359
+ providersList,
2360
+ errorMessage,
2361
+ showBackButton
2241
2362
  }
2242
2363
  ));
2243
2364
  };
@@ -2247,28 +2368,36 @@ function ConnectButton({
2247
2368
  handleClose,
2248
2369
  modalOpen,
2249
2370
  setAddIntegrationMode,
2250
- providersList
2371
+ providersList,
2372
+ errorMessage: errorMessageProp,
2373
+ showBackButton
2251
2374
  }) {
2252
2375
  const theme = useTheme();
2253
2376
  const { open, disconnect } = (0, import_appkit_react_native3.useAppKit)();
2254
2377
  const { address, isConnected } = (0, import_appkit_react_native3.useAccount)();
2255
2378
  const { linkToken, user, clientId } = useKryptosConnect();
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)(() => {
2379
+ const [selectedChains, setSelectedChains] = (0, import_react32.useState)(/* @__PURE__ */ new Set());
2380
+ const [errorMessage, setErrorMessage] = (0, import_react32.useState)("");
2381
+ const [chainErrors, setChainErrors] = (0, import_react32.useState)({});
2382
+ const [isLoading, setIsLoading] = (0, import_react32.useState)(false);
2383
+ const [userUsedChains, setUserUsedChains] = (0, import_react32.useState)([]);
2384
+ const [isFetchingChains, setIsFetchingChains] = (0, import_react32.useState)(false);
2385
+ const availableChains = (0, import_react32.useMemo)(() => {
2263
2386
  if (userUsedChains.length > 0) {
2264
2387
  return userUsedChains;
2265
2388
  }
2266
2389
  if (integration.walletSupportedChains && integration.walletSupportedChains.length > 0) {
2267
- return integration.walletSupportedChains;
2390
+ return integration.walletSupportedChains.filter((supportedChain) => {
2391
+ const provider = providersList.find(
2392
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
2393
+ (p) => p.id === supportedChain.id
2394
+ );
2395
+ return provider && provider.is_working === true && provider.isEvmWallet === true;
2396
+ });
2268
2397
  }
2269
2398
  return [];
2270
- }, [userUsedChains, integration.walletSupportedChains]);
2271
- (0, import_react30.useEffect)(() => {
2399
+ }, [userUsedChains, integration.walletSupportedChains, providersList]);
2400
+ (0, import_react32.useEffect)(() => {
2272
2401
  if (!isConnected || !address || !address.trim()) {
2273
2402
  setUserUsedChains([]);
2274
2403
  setSelectedChains(/* @__PURE__ */ new Set());
@@ -2287,7 +2416,16 @@ function ConnectButton({
2287
2416
  }
2288
2417
  }
2289
2418
  if (chains.length === 0 && integration.walletSupportedChains && integration.walletSupportedChains.length > 0) {
2290
- chains = integration.walletSupportedChains;
2419
+ chains = integration.walletSupportedChains.filter(
2420
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
2421
+ (supportedChain) => {
2422
+ const provider = providersList.find(
2423
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
2424
+ (p) => p.id === supportedChain.id
2425
+ );
2426
+ return provider && provider.is_working === true && provider.isEvmWallet === true;
2427
+ }
2428
+ );
2291
2429
  }
2292
2430
  if (chains.length > 0) {
2293
2431
  setUserUsedChains(chains);
@@ -2299,11 +2437,21 @@ function ConnectButton({
2299
2437
  } catch (error) {
2300
2438
  console.error("Failed to fetch user chains:", error);
2301
2439
  if (integration.walletSupportedChains && integration.walletSupportedChains.length > 0) {
2302
- setUserUsedChains(integration.walletSupportedChains);
2440
+ const validChains = integration.walletSupportedChains.filter(
2441
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
2442
+ (supportedChain) => {
2443
+ const provider = providersList.find(
2444
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
2445
+ (p) => p.id === supportedChain.id
2446
+ );
2447
+ return provider && provider.is_working === true && provider.isEvmWallet === true;
2448
+ }
2449
+ );
2450
+ setUserUsedChains(validChains);
2303
2451
  setSelectedChains(
2304
2452
  new Set(
2305
2453
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
2306
- integration.walletSupportedChains.map((chain) => chain.id)
2454
+ validChains.map((chain) => chain.id)
2307
2455
  )
2308
2456
  );
2309
2457
  } else {
@@ -2323,7 +2471,8 @@ function ConnectButton({
2323
2471
  address,
2324
2472
  isConnected,
2325
2473
  integration.isEvmWallet,
2326
- integration.walletSupportedChains
2474
+ integration.walletSupportedChains,
2475
+ providersList
2327
2476
  ]);
2328
2477
  const validateForm = () => {
2329
2478
  if (!address) {
@@ -2360,11 +2509,11 @@ function ConnectButton({
2360
2509
  source: provider?.id,
2361
2510
  credential: {
2362
2511
  address,
2363
- userId: user?.user_id || "0",
2512
+ userId: user?.user_id || "",
2364
2513
  projectId: provider?.projectId,
2365
- apiKey: "0",
2366
- secret: "0",
2367
- privateKey: "0",
2514
+ apiKey: "",
2515
+ secret: "",
2516
+ privateKey: "",
2368
2517
  alias,
2369
2518
  walletId,
2370
2519
  exchange: provider?.id
@@ -2403,10 +2552,9 @@ function ConnectButton({
2403
2552
  default_chain_logo: integration?.logo || "",
2404
2553
  type: provider.type || "",
2405
2554
  isNftSupported: provider?.isEvmWallet || provider?.nftSupport || false,
2555
+ isCustomWallet: false,
2406
2556
  chainId: provider?.community_id,
2407
- credsData: {
2408
- address
2409
- }
2557
+ address: address?.trim()
2410
2558
  };
2411
2559
  integrationsToAdd.push(data);
2412
2560
  } else {
@@ -2425,7 +2573,7 @@ function ConnectButton({
2425
2573
  return;
2426
2574
  }
2427
2575
  if (integrationsToAdd.length > 0) {
2428
- onAddHandle(integrationsToAdd);
2576
+ await onAddHandle(integrationsToAdd);
2429
2577
  if (isConnected) {
2430
2578
  disconnect();
2431
2579
  }
@@ -2438,7 +2586,7 @@ function ConnectButton({
2438
2586
  const err = error;
2439
2587
  console.error(error);
2440
2588
  setErrorMessage(
2441
- err?.response?.data?.message || "Failed to add integration"
2589
+ err?.response?.data?.message || err?.response?.data?.error || "Failed to add integrations"
2442
2590
  );
2443
2591
  } finally {
2444
2592
  setIsLoading(false);
@@ -2458,8 +2606,14 @@ function ConnectButton({
2458
2606
  setChainErrors(newErrors);
2459
2607
  }
2460
2608
  };
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,
2609
+ const onClose = () => {
2610
+ if (isConnected) {
2611
+ disconnect();
2612
+ }
2613
+ handleClose();
2614
+ };
2615
+ return /* @__PURE__ */ import_react32.default.createElement(Modal, { isOpen: modalOpen, onClose, size: "full" }, /* @__PURE__ */ import_react32.default.createElement(ModalHeader, { onClose }, /* @__PURE__ */ import_react32.default.createElement(import_react_native16.View, { style: styles14.headerContent }, showBackButton && /* @__PURE__ */ import_react32.default.createElement(
2616
+ import_react_native16.TouchableOpacity,
2463
2617
  {
2464
2618
  onPress: () => {
2465
2619
  setAddIntegrationMode(null);
@@ -2467,26 +2621,26 @@ function ConnectButton({
2467
2621
  disconnect();
2468
2622
  }
2469
2623
  },
2470
- style: styles13.backButton
2624
+ style: styles14.backButton
2471
2625
  },
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,
2626
+ /* @__PURE__ */ import_react32.default.createElement(ArrowLeftIcon, { size: 20, color: theme.colors.text })
2627
+ ), /* @__PURE__ */ import_react32.default.createElement(import_react_native16.Text, { style: [styles14.headerTitle, { color: theme.colors.text }] }, "Integration"))), /* @__PURE__ */ import_react32.default.createElement(ModalBody, { scrollable: true, style: styles14.contentContainer }, /* @__PURE__ */ import_react32.default.createElement(import_react_native16.View, { style: styles14.header }, integration.logo ? isSvgUrl(integration.logo) ? /* @__PURE__ */ import_react32.default.createElement(RemoteSvg, { uri: integration.logo }) : /* @__PURE__ */ import_react32.default.createElement(
2628
+ import_react_native16.Image,
2475
2629
  {
2476
2630
  source: { uri: integration.logo },
2477
- style: styles13.logo,
2631
+ style: styles14.logo,
2478
2632
  resizeMode: "contain"
2479
2633
  }
2480
- ) : /* @__PURE__ */ import_react30.default.createElement(
2481
- import_react_native15.View,
2634
+ ) : /* @__PURE__ */ import_react32.default.createElement(
2635
+ import_react_native16.View,
2482
2636
  {
2483
2637
  style: [
2484
- styles13.logoPlaceholder,
2638
+ styles14.logoPlaceholder,
2485
2639
  { backgroundColor: theme.colors.surface }
2486
2640
  ]
2487
2641
  },
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(
2642
+ /* @__PURE__ */ import_react32.default.createElement(import_react_native16.Text, { style: { color: theme.colors.text } }, integration.name?.charAt(0) || "?")
2643
+ ), /* @__PURE__ */ import_react32.default.createElement(import_react_native16.Text, { style: [styles14.name, { color: theme.colors.text }] }, integration.name)), !isConnected ? /* @__PURE__ */ import_react32.default.createElement(import_react_native16.View, null, /* @__PURE__ */ import_react32.default.createElement(import_react_native16.Text, { style: [styles14.infoText, { color: theme.colors.text }] }, "Connect your wallet to continue"), /* @__PURE__ */ import_react32.default.createElement(
2490
2644
  Button,
2491
2645
  {
2492
2646
  variant: "primary",
@@ -2494,111 +2648,132 @@ function ConnectButton({
2494
2648
  onPress: () => open({ view: "Connect" })
2495
2649
  },
2496
2650
  "Connect Wallet"
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,
2651
+ )) : /* @__PURE__ */ import_react32.default.createElement(import_react_native16.View, { style: styles14.connectedContainer }, /* @__PURE__ */ import_react32.default.createElement(import_react_native16.View, { style: styles14.connectedHeader }, /* @__PURE__ */ import_react32.default.createElement(
2652
+ import_react_native16.Text,
2499
2653
  {
2500
- style: [styles13.connectedTitle, { color: theme.colors.text }]
2654
+ style: [styles14.connectedTitle, { color: theme.colors.text }]
2501
2655
  },
2502
2656
  "Wallet Connected"
2503
- ), /* @__PURE__ */ import_react30.default.createElement(
2504
- import_react_native15.Text,
2657
+ ), /* @__PURE__ */ import_react32.default.createElement(
2658
+ import_react_native16.Text,
2505
2659
  {
2506
- style: [styles13.connectedText, { color: theme.colors.text }]
2660
+ style: [styles14.connectedText, { color: theme.colors.text }]
2507
2661
  },
2508
2662
  "Address: ",
2509
2663
  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,
2664
+ ), /* @__PURE__ */ import_react32.default.createElement(Button, { variant: "ghost", size: "sm", onPress: () => disconnect() }, "Disconnect Wallet"), isFetchingChains ? /* @__PURE__ */ import_react32.default.createElement(
2665
+ import_react_native16.Text,
2512
2666
  {
2513
- style: [styles13.fetchingText, { color: theme.colors.text }]
2667
+ style: [styles14.fetchingText, { color: theme.colors.text }]
2514
2668
  },
2515
2669
  "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,
2670
+ ) : null), availableChains.length > 0 && address && /* @__PURE__ */ import_react32.default.createElement(import_react_native16.View, { style: styles14.chainListWrapper }, /* @__PURE__ */ import_react32.default.createElement(import_react_native16.Text, { style: [styles14.chainTitle, { color: theme.colors.text }] }, "Select Chains to Add:"), /* @__PURE__ */ import_react32.default.createElement(import_react_native16.View, { style: styles14.chainListContent }, /* @__PURE__ */ import_react32.default.createElement(import_react_native16.View, { style: styles14.chainChips }, availableChains.map((chain) => {
2671
+ const isSelected = selectedChains.has(chain.id);
2672
+ const hasError = chainErrors[chain.id];
2673
+ return /* @__PURE__ */ import_react32.default.createElement(
2674
+ import_react_native16.TouchableOpacity,
2675
+ {
2676
+ onPress: () => toggleChainSelection(chain.id),
2677
+ style: styles14.chainButton,
2678
+ key: chain.id
2679
+ },
2680
+ /* @__PURE__ */ import_react32.default.createElement(
2681
+ import_react_native16.View,
2530
2682
  {
2531
- onPress: () => toggleChainSelection(chain.id),
2532
- style: styles13.chainButton,
2533
- key: chain.id
2683
+ style: [
2684
+ styles14.chainChip,
2685
+ {
2686
+ backgroundColor: hasError ? theme.colors.errorLight : isSelected ? theme.colors.primary + "20" : theme.colors.surface,
2687
+ borderColor: hasError ? theme.colors.error : isSelected ? theme.colors.primary : theme.colors.border
2688
+ }
2689
+ ]
2534
2690
  },
2535
- /* @__PURE__ */ import_react30.default.createElement(
2536
- import_react_native15.View,
2691
+ /* @__PURE__ */ import_react32.default.createElement(
2692
+ import_react_native16.Text,
2537
2693
  {
2538
2694
  style: [
2539
- styles13.chainChip,
2695
+ styles14.chainName,
2540
2696
  {
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
2697
+ color: hasError ? theme.colors.error : isSelected ? theme.colors.primary : theme.colors.text
2543
2698
  }
2544
2699
  ]
2545
2700
  },
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
- )
2701
+ chain.name || chain?.id
2702
+ ),
2703
+ isSelected ? /* @__PURE__ */ import_react32.default.createElement(
2704
+ CloseIcon,
2705
+ {
2706
+ size: 12,
2707
+ color: hasError ? theme.colors.error : theme.colors.primary
2708
+ }
2709
+ ) : /* @__PURE__ */ import_react32.default.createElement(
2710
+ PlusIcon,
2711
+ {
2712
+ size: 12,
2713
+ color: theme.colors.textSecondary
2714
+ }
2571
2715
  )
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,
2716
+ )
2717
+ );
2718
+ })), selectedChains.size > 0 && availableChains.length > 0 && /* @__PURE__ */ import_react32.default.createElement(
2719
+ import_react_native16.TouchableOpacity,
2720
+ {
2721
+ onPress: () => setSelectedChains(/* @__PURE__ */ new Set()),
2722
+ style: styles14.chainButton,
2723
+ activeOpacity: 0.7
2724
+ },
2725
+ /* @__PURE__ */ import_react32.default.createElement(
2726
+ import_react_native16.View,
2575
2727
  {
2576
2728
  style: [
2577
- styles13.chainErrorsTitle,
2578
- { color: theme.colors.error }
2729
+ styles14.chainChip,
2730
+ styles14.chainChipRemoveAll,
2731
+ {
2732
+ borderWidth: 0,
2733
+ backgroundColor: "transparent"
2734
+ }
2579
2735
  ]
2580
2736
  },
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,
2737
+ /* @__PURE__ */ import_react32.default.createElement(
2738
+ import_react_native16.Text,
2588
2739
  {
2589
- key: chainId,
2590
2740
  style: [
2591
- styles13.chainErrorItem,
2592
- { color: theme.colors.error }
2741
+ styles14.chainName,
2742
+ { color: theme.colors.primary }
2593
2743
  ]
2594
2744
  },
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(
2745
+ "Remove All Chains"
2746
+ ),
2747
+ /* @__PURE__ */ import_react32.default.createElement(CloseIcon, { size: 12, color: theme.colors.primary })
2748
+ )
2749
+ ), Object.keys(chainErrors || {}).length > 0 && /* @__PURE__ */ import_react32.default.createElement(import_react_native16.View, { style: styles14.chainErrorsContainer }, /* @__PURE__ */ import_react32.default.createElement(
2750
+ import_react_native16.Text,
2751
+ {
2752
+ style: [
2753
+ styles14.chainErrorsTitle,
2754
+ { color: theme.colors.error }
2755
+ ]
2756
+ },
2757
+ "Errors:"
2758
+ ), Object.entries(chainErrors).map(([chainId, error]) => {
2759
+ const chain = availableChains.find(
2760
+ (c) => c.id === chainId
2761
+ );
2762
+ return /* @__PURE__ */ import_react32.default.createElement(
2763
+ import_react_native16.Text,
2764
+ {
2765
+ key: chainId,
2766
+ style: [
2767
+ styles14.chainErrorItem,
2768
+ { color: theme.colors.error }
2769
+ ]
2770
+ },
2771
+ "\u2022 ",
2772
+ chain?.name ?? chainId,
2773
+ ": ",
2774
+ String(error)
2775
+ );
2776
+ })))), errorMessage || errorMessageProp ? /* @__PURE__ */ import_react32.default.createElement(import_react_native16.View, { style: styles14.errorMessageContainer }, /* @__PURE__ */ import_react32.default.createElement(Alert, { variant: "destructive" }, /* @__PURE__ */ import_react32.default.createElement(AlertDescription, null, errorMessage || errorMessageProp))) : null)), /* @__PURE__ */ import_react32.default.createElement(ModalFooter, { style: { paddingVertical: 8 } }, availableChains.length > 0 && address && /* @__PURE__ */ import_react32.default.createElement(
2602
2777
  Button,
2603
2778
  {
2604
2779
  variant: "outline",
@@ -2606,14 +2781,20 @@ function ConnectButton({
2606
2781
  onPress: onSubmitWalletConnect,
2607
2782
  loading: isLoading,
2608
2783
  disabled: isLoading || !!address && availableChains.length > 0 && selectedChains.size === 0,
2609
- style: styles13.button
2784
+ style: styles14.button
2610
2785
  },
2611
2786
  selectedChains.size > 0 ? `Add ${selectedChains.size} Chain${selectedChains.size > 1 ? "s" : ""}` : "Add Integration"
2612
- ), /* @__PURE__ */ import_react30.default.createElement(Footer, null)));
2787
+ ), /* @__PURE__ */ import_react32.default.createElement(Footer, null)));
2613
2788
  }
2614
- var styles13 = import_react_native15.StyleSheet.create({
2789
+ var styles14 = import_react_native16.StyleSheet.create({
2615
2790
  connectedContainer: {
2616
- flex: 1
2791
+ flexShrink: 0
2792
+ },
2793
+ chainListWrapper: {
2794
+ marginTop: 8
2795
+ },
2796
+ chainListContent: {
2797
+ paddingBottom: 8
2617
2798
  },
2618
2799
  connectedHeader: {
2619
2800
  marginBottom: 8
@@ -2627,13 +2808,6 @@ var styles13 = import_react_native15.StyleSheet.create({
2627
2808
  marginBottom: 8,
2628
2809
  textAlign: "center"
2629
2810
  },
2630
- scrollView: {
2631
- flex: 1
2632
- },
2633
- scrollViewContent: {
2634
- paddingBottom: 40,
2635
- flexGrow: 1
2636
- },
2637
2811
  errorMessageContainer: {
2638
2812
  marginTop: 16
2639
2813
  },
@@ -2657,10 +2831,8 @@ var styles13 = import_react_native15.StyleSheet.create({
2657
2831
  // theme.spacing.xl
2658
2832
  paddingBottom: 20,
2659
2833
  width: "100%",
2660
- overflow: "hidden",
2661
2834
  alignSelf: "center",
2662
- flexDirection: "column",
2663
- flex: 1
2835
+ flexDirection: "column"
2664
2836
  },
2665
2837
  chainTitle: {
2666
2838
  fontSize: 14,
@@ -2686,6 +2858,11 @@ var styles13 = import_react_native15.StyleSheet.create({
2686
2858
  // theme.borderRadius.md
2687
2859
  borderWidth: 1
2688
2860
  },
2861
+ chainChipRemoveAll: {
2862
+ marginTop: 6,
2863
+ // theme.spacing.sm - separate from chain list
2864
+ width: "auto"
2865
+ },
2689
2866
  chainName: {
2690
2867
  fontSize: 12,
2691
2868
  fontWeight: "500",
@@ -2760,37 +2937,314 @@ var styles13 = import_react_native15.StyleSheet.create({
2760
2937
  });
2761
2938
 
2762
2939
  // src/molecules/IntegrationForm.tsx
2763
- var import_react31 = __toESM(require("react"));
2764
- var import_react_native16 = require("react-native");
2940
+ var import_react34 = __toESM(require("react"));
2941
+ var import_react_native18 = require("react-native");
2942
+
2943
+ // src/molecules/IntegrationInfo.tsx
2944
+ var import_react33 = __toESM(require("react"));
2945
+ var import_react_native17 = require("react-native");
2946
+ var ChevronDown = ({ isOpen, color }) => /* @__PURE__ */ import_react33.default.createElement(import_react_native17.Text, { style: [styles15.chevron, { color }] }, isOpen ? "\u25BC" : "\u25B6");
2947
+ var IntegrationInfo = ({
2948
+ content,
2949
+ type,
2950
+ import_guide
2951
+ }) => {
2952
+ const theme = useTheme();
2953
+ const instructionsData = (0, import_react33.useMemo)(
2954
+ () => content?.instructions?.[type] || null,
2955
+ [content, type]
2956
+ );
2957
+ const featuresData = (0, import_react33.useMemo)(
2958
+ () => content?.features?.[type] || [],
2959
+ [content, type]
2960
+ );
2961
+ const gtkData = (0, import_react33.useMemo)(() => content?.gtk?.[type] || [], [content, type]);
2962
+ const hasInstructions = instructionsData && (instructionsData?.content?.length ?? 0) > 0;
2963
+ const hasFeatures = (featuresData?.length ?? 0) > 0;
2964
+ const hasGtk = (gtkData?.length ?? 0) > 0;
2965
+ const defaultSection = hasInstructions ? "instructions" : hasGtk ? "good-to-know" : hasFeatures ? "supported-features" : null;
2966
+ const [openSection, setOpenSection] = (0, import_react33.useState)(defaultSection);
2967
+ const toggleSection = (value) => {
2968
+ setOpenSection((prev) => prev === value ? null : value);
2969
+ };
2970
+ const handleImportGuidePress = () => {
2971
+ if (import_guide) import_react_native17.Linking.openURL(import_guide);
2972
+ };
2973
+ if (!hasInstructions && !hasFeatures && !hasGtk && !import_guide) {
2974
+ return null;
2975
+ }
2976
+ return /* @__PURE__ */ import_react33.default.createElement(import_react_native17.View, { style: styles15.container }, import_guide && /* @__PURE__ */ import_react33.default.createElement(
2977
+ import_react_native17.TouchableOpacity,
2978
+ {
2979
+ onPress: handleImportGuidePress,
2980
+ style: [styles15.importGuide, { borderColor: theme.colors.primary }],
2981
+ activeOpacity: 0.7
2982
+ },
2983
+ /* @__PURE__ */ import_react33.default.createElement(
2984
+ import_react_native17.Text,
2985
+ {
2986
+ style: [styles15.importGuideText, { color: theme.colors.primary }]
2987
+ },
2988
+ "Import Guide"
2989
+ ),
2990
+ /* @__PURE__ */ import_react33.default.createElement(RedirectIcon, { width: 14, height: 14, color: theme.colors.primary })
2991
+ ), hasInstructions && /* @__PURE__ */ import_react33.default.createElement(import_react_native17.View, { style: styles15.accordionItem }, /* @__PURE__ */ import_react33.default.createElement(
2992
+ import_react_native17.TouchableOpacity,
2993
+ {
2994
+ onPress: () => toggleSection("instructions"),
2995
+ style: [
2996
+ styles15.trigger,
2997
+ {
2998
+ borderBottomColor: theme.colors.border,
2999
+ backgroundColor: theme.colors.surface
3000
+ }
3001
+ ],
3002
+ activeOpacity: 0.7
3003
+ },
3004
+ /* @__PURE__ */ import_react33.default.createElement(import_react_native17.Text, { style: [styles15.triggerText, { color: theme.colors.text }] }, "Instructions"),
3005
+ /* @__PURE__ */ import_react33.default.createElement(
3006
+ ChevronDown,
3007
+ {
3008
+ isOpen: openSection === "instructions",
3009
+ color: theme.colors.textSecondary
3010
+ }
3011
+ )
3012
+ ), openSection === "instructions" && /* @__PURE__ */ import_react33.default.createElement(
3013
+ import_react_native17.View,
3014
+ {
3015
+ style: [
3016
+ styles15.content,
3017
+ {
3018
+ backgroundColor: theme.colors.background,
3019
+ borderBottomColor: theme.colors.border
3020
+ }
3021
+ ]
3022
+ },
3023
+ instructionsData?.content && /* @__PURE__ */ import_react33.default.createElement(import_react_native17.View, { style: styles15.list }, instructionsData.content.map(
3024
+ (step, index) => /* @__PURE__ */ import_react33.default.createElement(
3025
+ import_react_native17.Text,
3026
+ {
3027
+ key: index,
3028
+ style: [
3029
+ styles15.listItem,
3030
+ styles15.orderedItem,
3031
+ { color: theme.colors.textSecondary }
3032
+ ]
3033
+ },
3034
+ index + 1,
3035
+ ". ",
3036
+ step
3037
+ )
3038
+ )),
3039
+ instructionsData?.videoLink && /* @__PURE__ */ import_react33.default.createElement(
3040
+ import_react_native17.TouchableOpacity,
3041
+ {
3042
+ onPress: () => import_react_native17.Linking.openURL(instructionsData.videoLink),
3043
+ style: styles15.videoLink,
3044
+ activeOpacity: 0.7
3045
+ },
3046
+ /* @__PURE__ */ import_react33.default.createElement(
3047
+ import_react_native17.Text,
3048
+ {
3049
+ style: [
3050
+ styles15.videoLinkText,
3051
+ { color: theme.colors.primary }
3052
+ ]
3053
+ },
3054
+ "\u25B6 Watch Video Tutorial"
3055
+ )
3056
+ )
3057
+ )), hasGtk && /* @__PURE__ */ import_react33.default.createElement(import_react_native17.View, { style: styles15.accordionItem }, /* @__PURE__ */ import_react33.default.createElement(
3058
+ import_react_native17.TouchableOpacity,
3059
+ {
3060
+ onPress: () => toggleSection("good-to-know"),
3061
+ style: [
3062
+ styles15.trigger,
3063
+ {
3064
+ borderBottomColor: theme.colors.border,
3065
+ backgroundColor: theme.colors.surface
3066
+ }
3067
+ ],
3068
+ activeOpacity: 0.7
3069
+ },
3070
+ /* @__PURE__ */ import_react33.default.createElement(import_react_native17.Text, { style: [styles15.triggerText, { color: theme.colors.text }] }, "Good to know"),
3071
+ /* @__PURE__ */ import_react33.default.createElement(
3072
+ ChevronDown,
3073
+ {
3074
+ isOpen: openSection === "good-to-know",
3075
+ color: theme.colors.textSecondary
3076
+ }
3077
+ )
3078
+ ), openSection === "good-to-know" && /* @__PURE__ */ import_react33.default.createElement(
3079
+ import_react_native17.View,
3080
+ {
3081
+ style: [
3082
+ styles15.content,
3083
+ {
3084
+ backgroundColor: theme.colors.background,
3085
+ borderBottomColor: theme.colors.border
3086
+ }
3087
+ ]
3088
+ },
3089
+ /* @__PURE__ */ import_react33.default.createElement(import_react_native17.View, { style: styles15.list }, gtkData.map((item, index) => /* @__PURE__ */ import_react33.default.createElement(
3090
+ import_react_native17.Text,
3091
+ {
3092
+ key: index,
3093
+ style: [
3094
+ styles15.listItem,
3095
+ styles15.bulletItem,
3096
+ { color: theme.colors.textSecondary }
3097
+ ]
3098
+ },
3099
+ "\u2022 ",
3100
+ item
3101
+ )))
3102
+ )), hasFeatures && /* @__PURE__ */ import_react33.default.createElement(import_react_native17.View, { style: styles15.accordionItem }, /* @__PURE__ */ import_react33.default.createElement(
3103
+ import_react_native17.TouchableOpacity,
3104
+ {
3105
+ onPress: () => toggleSection("supported-features"),
3106
+ style: [
3107
+ styles15.trigger,
3108
+ {
3109
+ borderBottomColor: theme.colors.border,
3110
+ backgroundColor: theme.colors.surface
3111
+ }
3112
+ ],
3113
+ activeOpacity: 0.7
3114
+ },
3115
+ /* @__PURE__ */ import_react33.default.createElement(import_react_native17.Text, { style: [styles15.triggerText, { color: theme.colors.text }] }, "Supported Features"),
3116
+ /* @__PURE__ */ import_react33.default.createElement(
3117
+ ChevronDown,
3118
+ {
3119
+ isOpen: openSection === "supported-features",
3120
+ color: theme.colors.textSecondary
3121
+ }
3122
+ )
3123
+ ), openSection === "supported-features" && /* @__PURE__ */ import_react33.default.createElement(
3124
+ import_react_native17.View,
3125
+ {
3126
+ style: [
3127
+ styles15.content,
3128
+ {
3129
+ backgroundColor: theme.colors.background,
3130
+ borderBottomColor: theme.colors.border
3131
+ }
3132
+ ]
3133
+ },
3134
+ /* @__PURE__ */ import_react33.default.createElement(import_react_native17.View, { style: styles15.list }, featuresData.map((feature, index) => /* @__PURE__ */ import_react33.default.createElement(
3135
+ import_react_native17.Text,
3136
+ {
3137
+ key: index,
3138
+ style: [
3139
+ styles15.listItem,
3140
+ styles15.bulletItem,
3141
+ { color: theme.colors.textSecondary }
3142
+ ]
3143
+ },
3144
+ "\u2022 ",
3145
+ feature
3146
+ )))
3147
+ )));
3148
+ };
3149
+ var styles15 = import_react_native17.StyleSheet.create({
3150
+ container: {
3151
+ marginTop: 8
3152
+ },
3153
+ importGuide: {
3154
+ flexDirection: "row",
3155
+ alignItems: "center",
3156
+ alignSelf: "flex-end",
3157
+ gap: 4,
3158
+ paddingVertical: 6,
3159
+ paddingHorizontal: 8,
3160
+ marginBottom: 8
3161
+ },
3162
+ importGuideText: {
3163
+ fontSize: 14,
3164
+ fontWeight: "500"
3165
+ },
3166
+ accordionItem: {
3167
+ marginBottom: 4,
3168
+ borderRadius: 8,
3169
+ overflow: "hidden"
3170
+ },
3171
+ trigger: {
3172
+ flexDirection: "row",
3173
+ alignItems: "center",
3174
+ justifyContent: "space-between",
3175
+ paddingVertical: 12,
3176
+ paddingHorizontal: 16,
3177
+ borderBottomWidth: 1
3178
+ },
3179
+ triggerText: {
3180
+ fontSize: 14,
3181
+ fontWeight: "600"
3182
+ },
3183
+ chevron: {
3184
+ fontSize: 12
3185
+ },
3186
+ content: {
3187
+ paddingVertical: 12,
3188
+ paddingHorizontal: 16,
3189
+ borderBottomWidth: 1
3190
+ },
3191
+ list: {
3192
+ paddingLeft: 4
3193
+ },
3194
+ listItem: {
3195
+ fontSize: 13,
3196
+ lineHeight: 20,
3197
+ marginBottom: 6
3198
+ },
3199
+ orderedItem: {
3200
+ marginLeft: 0
3201
+ },
3202
+ bulletItem: {
3203
+ marginLeft: 0
3204
+ },
3205
+ videoLink: {
3206
+ marginTop: 8,
3207
+ paddingVertical: 8,
3208
+ paddingHorizontal: 12
3209
+ },
3210
+ videoLinkText: {
3211
+ fontSize: 13,
3212
+ fontWeight: "500"
3213
+ }
3214
+ });
3215
+
3216
+ // src/molecules/IntegrationForm.tsx
2765
3217
  var IntegrationForm = ({
2766
3218
  metadata,
2767
3219
  onAddHandle,
2768
3220
  open,
2769
3221
  setAddIntegrationMode,
2770
3222
  handleClose,
2771
- providersList
3223
+ providersList,
3224
+ errorMessage: errorMessageProp,
3225
+ showBackButton = true
2772
3226
  }) => {
2773
3227
  const { clientId, linkToken, user } = useKryptosConnect();
2774
3228
  const theme = useTheme();
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(
3229
+ const [isLoading, setIsLoading] = import_react34.default.useState(false);
3230
+ const [isFetchingChains, setIsFetchingChains] = import_react34.default.useState(false);
3231
+ const [userUsedChains, setUserUsedChains] = import_react34.default.useState([]);
3232
+ const [selectedChains, setSelectedChains] = import_react34.default.useState(
2779
3233
  /* @__PURE__ */ new Set()
2780
3234
  );
2781
- const [chainErrors, setChainErrors] = import_react31.default.useState(
3235
+ const [chainErrors, setChainErrors] = import_react34.default.useState(
2782
3236
  {}
2783
3237
  );
2784
- const [errorMessage, setErrorMessage] = import_react31.default.useState("");
2785
- const [formValues, setFormValues] = import_react31.default.useState({
3238
+ const [errorMessage, setErrorMessage] = import_react34.default.useState("");
3239
+ const [formValues, setFormValues] = import_react34.default.useState({
2786
3240
  address: "",
2787
3241
  account_name: "",
2788
3242
  api_key: "",
2789
3243
  secret_key: "",
2790
3244
  password: ""
2791
3245
  });
2792
- const [formErrors, setFormErrors] = import_react31.default.useState({});
2793
- import_react31.default.useEffect(() => {
3246
+ const [formErrors, setFormErrors] = import_react34.default.useState({});
3247
+ import_react34.default.useEffect(() => {
2794
3248
  if (!formValues.address || !formValues.address.trim()) {
2795
3249
  setUserUsedChains([]);
2796
3250
  setSelectedChains(/* @__PURE__ */ new Set());
@@ -2873,18 +3327,18 @@ var IntegrationForm = ({
2873
3327
  const credentialTestsData = chainsToProcess.map((chain) => {
2874
3328
  const walletId = generateUUID();
2875
3329
  const displaySuffix = primaryField.length >= 8 ? `${primaryField.slice(0, 4)}...${primaryField.slice(-4)}` : primaryField;
2876
- const alias = `${metadata.id} - ${chain.name} (${displaySuffix})`;
3330
+ const alias = `${metadata.id} - ${chain?.name || ""} (${displaySuffix})`;
2877
3331
  const credential = {
2878
3332
  source: metadata.id,
2879
3333
  credential: {
2880
- apiKey: formValues.api_key?.trim() || "0",
2881
- secret: formValues.secret_key?.trim() || "0",
2882
- accountName: formValues.account_name?.trim() || "0",
2883
- address: formValues.address?.trim() || "0",
2884
- password: formValues.password?.trim() || "0",
2885
- userId: user?.user_id || "0",
2886
- projectId: metadata?.projectId || "0",
2887
- privateKey: "0",
3334
+ apiKey: formValues.api_key?.trim() || "",
3335
+ secret: formValues.secret_key?.trim() || "",
3336
+ accountName: formValues.account_name?.trim() || "",
3337
+ address: formValues.address?.trim() || "",
3338
+ password: formValues.password?.trim() || "",
3339
+ userId: user?.user_id || "",
3340
+ projectId: metadata?.projectId || "",
3341
+ privateKey: "",
2888
3342
  alias,
2889
3343
  walletId,
2890
3344
  exchange: metadata.id
@@ -2918,11 +3372,12 @@ var IntegrationForm = ({
2918
3372
  },
2919
3373
  addedOn: (/* @__PURE__ */ new Date()).getTime(),
2920
3374
  default_chain: chain.name,
2921
- default_chain_logo: chain.logo || null,
3375
+ default_chain_logo: "",
2922
3376
  type: metadata.type,
2923
3377
  isNftSupported: metadata.isEvmWallet || metadata.nftSupport || false,
2924
3378
  chainId: chain?.community_id || "",
2925
- address: formValues.address
3379
+ address: formValues.address,
3380
+ isCustomWallet: false
2926
3381
  };
2927
3382
  if (formValues.account_name)
2928
3383
  data.accountName = formValues.account_name;
@@ -2932,10 +3387,9 @@ var IntegrationForm = ({
2932
3387
  integrationsToAdd.push(data);
2933
3388
  } else {
2934
3389
  if (result.status === "rejected") {
2935
- const reason = result.reason;
2936
- errors[chain.id] = reason?.response?.data?.message || "Failed to process chain";
3390
+ errors[chain.id] = result.reason?.response?.data?.message || "Failed to process chain";
2937
3391
  } else if (result.status === "fulfilled") {
2938
- errors[chain.id] = result.value?.value?.message || "Failed to verify chain";
3392
+ errors[chain.id] = result.value?.message || "Failed to verify chain";
2939
3393
  }
2940
3394
  }
2941
3395
  });
@@ -2953,14 +3407,14 @@ var IntegrationForm = ({
2953
3407
  const credential = {
2954
3408
  source: metadata.id,
2955
3409
  credential: {
2956
- apiKey: formValues.api_key?.trim() || "0",
2957
- secret: formValues.secret_key?.trim() || "0",
2958
- accountName: formValues.account_name?.trim() || "0",
2959
- address: formValues.address?.trim() || "0",
2960
- password: formValues.password?.trim() || "0",
2961
- userId: user?.user_id || "0",
2962
- projectId: metadata?.projectId || "0",
2963
- privateKey: "0",
3410
+ apiKey: formValues.api_key?.trim() || "",
3411
+ secret: formValues.secret_key?.trim() || "",
3412
+ accountName: formValues.account_name?.trim() || "",
3413
+ address: formValues.address?.trim() || "",
3414
+ password: formValues.password?.trim() || "",
3415
+ userId: user?.user_id || "",
3416
+ projectId: metadata?.projectId || "",
3417
+ privateKey: "",
2964
3418
  alias,
2965
3419
  walletId,
2966
3420
  exchange: metadata.id
@@ -2968,9 +3422,7 @@ var IntegrationForm = ({
2968
3422
  };
2969
3423
  const testResult = await testCredentials(linkToken, { ...credential });
2970
3424
  if (!testResult?.valid) {
2971
- setErrorMessage(
2972
- testResult?.value?.message || "Credentials are invalid"
2973
- );
3425
+ setErrorMessage(testResult?.message || "Credentials are invalid");
2974
3426
  return;
2975
3427
  }
2976
3428
  const data = {
@@ -2989,14 +3441,12 @@ var IntegrationForm = ({
2989
3441
  clientId,
2990
3442
  createdAt: (/* @__PURE__ */ new Date()).toISOString()
2991
3443
  },
2992
- metadata: {
2993
- environment: "sandbox"
2994
- },
2995
3444
  addedOn: (/* @__PURE__ */ new Date()).getTime(),
2996
3445
  default_chain: metadata.id,
2997
- default_chain_logo: null,
3446
+ default_chain_logo: "",
2998
3447
  type: metadata.type,
2999
- isNftSupported: metadata.isEvmWallet || metadata.nftSupport || false
3448
+ isNftSupported: metadata.isEvmWallet || metadata.nftSupport || false,
3449
+ isCustomWallet: false
3000
3450
  };
3001
3451
  if (metadata.community_id) {
3002
3452
  data.chainId = metadata.community_id;
@@ -3009,7 +3459,7 @@ var IntegrationForm = ({
3009
3459
  integrationsToAdd.push(data);
3010
3460
  }
3011
3461
  if (integrationsToAdd.length > 0) {
3012
- onAddHandle(integrationsToAdd);
3462
+ await onAddHandle(integrationsToAdd);
3013
3463
  setFormErrors({});
3014
3464
  setFormValues({
3015
3465
  address: "",
@@ -3023,10 +3473,9 @@ var IntegrationForm = ({
3023
3473
  setErrorMessage("No integrations could be added. Please try again.");
3024
3474
  }
3025
3475
  } catch (error) {
3026
- const err = error;
3027
3476
  console.error(error);
3028
3477
  setErrorMessage(
3029
- err?.response?.data?.message || "Failed to add integration"
3478
+ error?.response?.data?.message || error?.response?.data?.error || "Failed to add integrations"
3030
3479
  );
3031
3480
  } finally {
3032
3481
  setIsLoading(false);
@@ -3034,24 +3483,24 @@ var IntegrationForm = ({
3034
3483
  };
3035
3484
  const hasNoFields = !metadata.password && !metadata.secret_key && !metadata.api_key && !metadata.address && !metadata.account_name;
3036
3485
  const shouldShowFormFields = metadata.password || metadata.secret_key || metadata.api_key || metadata.address || metadata.account_name;
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,
3486
+ const renderLogo = () => metadata.logo ? isSvgUrl(metadata.logo) ? /* @__PURE__ */ import_react34.default.createElement(RemoteSvg, { uri: metadata.logo }) : /* @__PURE__ */ import_react34.default.createElement(
3487
+ import_react_native18.Image,
3039
3488
  {
3040
3489
  source: { uri: metadata.logo },
3041
- style: styles14.logo,
3490
+ style: styles16.logo,
3042
3491
  resizeMode: "contain"
3043
3492
  }
3044
- ) : /* @__PURE__ */ import_react31.default.createElement(
3045
- import_react_native16.View,
3493
+ ) : /* @__PURE__ */ import_react34.default.createElement(
3494
+ import_react_native18.View,
3046
3495
  {
3047
3496
  style: [
3048
- styles14.logoPlaceholder,
3497
+ styles16.logoPlaceholder,
3049
3498
  { backgroundColor: theme.colors.surface }
3050
3499
  ]
3051
3500
  },
3052
- /* @__PURE__ */ import_react31.default.createElement(import_react_native16.Text, { style: { color: theme.colors.text } }, metadata.name?.charAt(0) || "?")
3501
+ /* @__PURE__ */ import_react34.default.createElement(import_react_native18.Text, { style: { color: theme.colors.text } }, metadata.name?.charAt(0) || "?")
3053
3502
  );
3054
- const renderInput = (key, props) => /* @__PURE__ */ import_react31.default.createElement(
3503
+ const renderInput = (key, props) => /* @__PURE__ */ import_react34.default.createElement(
3055
3504
  Input,
3056
3505
  {
3057
3506
  placeholder: props.placeholder,
@@ -3063,33 +3512,33 @@ var IntegrationForm = ({
3063
3512
  secureTextEntry: props.secureTextEntry
3064
3513
  }
3065
3514
  );
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) => {
3515
+ const renderErrorAlert = () => errorMessage || errorMessageProp ? /* @__PURE__ */ import_react34.default.createElement(Alert, { variant: "destructive" }, /* @__PURE__ */ import_react34.default.createElement(AlertDescription, null, errorMessage || errorMessageProp)) : null;
3516
+ const renderChainSelection = () => userUsedChains.length > 0 && formValues.address && /* @__PURE__ */ import_react34.default.createElement(import_react_native18.View, { style: styles16.chainSelection }, /* @__PURE__ */ import_react34.default.createElement(import_react_native18.Text, { style: [styles16.chainTitle, { color: theme.colors.text }] }, "Select Chains to Add:"), /* @__PURE__ */ import_react34.default.createElement(import_react_native18.View, { style: styles16.chainListContent }, /* @__PURE__ */ import_react34.default.createElement(import_react_native18.View, { style: styles16.chainChips }, userUsedChains.map((chain) => {
3068
3517
  const isSelected = selectedChains.has(chain.id);
3069
3518
  const hasError = chainErrors[chain.id];
3070
- return /* @__PURE__ */ import_react31.default.createElement(
3071
- import_react_native16.TouchableOpacity,
3519
+ return /* @__PURE__ */ import_react34.default.createElement(
3520
+ import_react_native18.TouchableOpacity,
3072
3521
  {
3073
3522
  onPress: () => toggleChainSelection(chain.id),
3074
- style: styles14.chainButton,
3523
+ style: styles16.chainButton,
3075
3524
  key: chain.id
3076
3525
  },
3077
- /* @__PURE__ */ import_react31.default.createElement(
3078
- import_react_native16.View,
3526
+ /* @__PURE__ */ import_react34.default.createElement(
3527
+ import_react_native18.View,
3079
3528
  {
3080
3529
  style: [
3081
- styles14.chainChip,
3530
+ styles16.chainChip,
3082
3531
  {
3083
3532
  backgroundColor: hasError ? theme.colors.errorLight : isSelected ? theme.colors.primary + "20" : theme.colors.surface,
3084
3533
  borderColor: hasError ? theme.colors.error : isSelected ? theme.colors.primary : theme.colors.border
3085
3534
  }
3086
3535
  ]
3087
3536
  },
3088
- /* @__PURE__ */ import_react31.default.createElement(
3089
- import_react_native16.Text,
3537
+ /* @__PURE__ */ import_react34.default.createElement(
3538
+ import_react_native18.Text,
3090
3539
  {
3091
3540
  style: [
3092
- styles14.chainName,
3541
+ styles16.chainName,
3093
3542
  {
3094
3543
  color: hasError ? theme.colors.error : isSelected ? theme.colors.primary : theme.colors.text
3095
3544
  }
@@ -3097,28 +3546,55 @@ var IntegrationForm = ({
3097
3546
  },
3098
3547
  chain.name
3099
3548
  ),
3100
- isSelected ? /* @__PURE__ */ import_react31.default.createElement(
3549
+ isSelected ? /* @__PURE__ */ import_react34.default.createElement(
3101
3550
  CloseIcon,
3102
3551
  {
3103
3552
  size: 12,
3104
3553
  color: hasError ? theme.colors.error : theme.colors.primary
3105
3554
  }
3106
- ) : /* @__PURE__ */ import_react31.default.createElement(PlusIcon, { size: 12, color: theme.colors.textSecondary })
3555
+ ) : /* @__PURE__ */ import_react34.default.createElement(PlusIcon, { size: 12, color: theme.colors.textSecondary })
3107
3556
  )
3108
3557
  );
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,
3558
+ })), selectedChains.size > 0 && userUsedChains.length > 0 && /* @__PURE__ */ import_react34.default.createElement(
3559
+ import_react_native18.TouchableOpacity,
3560
+ {
3561
+ onPress: () => setSelectedChains(/* @__PURE__ */ new Set()),
3562
+ style: styles16.chainButton,
3563
+ activeOpacity: 0.7
3564
+ },
3565
+ /* @__PURE__ */ import_react34.default.createElement(
3566
+ import_react_native18.View,
3567
+ {
3568
+ style: [
3569
+ styles16.chainChip,
3570
+ styles16.chainChipRemoveAll,
3571
+ {
3572
+ borderWidth: 0
3573
+ }
3574
+ ]
3575
+ },
3576
+ /* @__PURE__ */ import_react34.default.createElement(
3577
+ import_react_native18.Text,
3578
+ {
3579
+ style: [styles16.chainName, { color: theme.colors.primary }]
3580
+ },
3581
+ "Remove All Chains"
3582
+ ),
3583
+ /* @__PURE__ */ import_react34.default.createElement(CloseIcon, { size: 12, color: theme.colors.primary })
3584
+ )
3585
+ )), Object.keys(chainErrors).length > 0 && /* @__PURE__ */ import_react34.default.createElement(import_react_native18.View, { style: styles16.chainErrorsContainer }, /* @__PURE__ */ import_react34.default.createElement(
3586
+ import_react_native18.Text,
3111
3587
  {
3112
- style: [styles14.chainErrorsTitle, { color: theme.colors.error }]
3588
+ style: [styles16.chainErrorsTitle, { color: theme.colors.error }]
3113
3589
  },
3114
3590
  "Errors:"
3115
3591
  ), Object.entries(chainErrors).map(([chainId, error]) => {
3116
3592
  const chain = userUsedChains.find((c) => c.id === chainId);
3117
- return /* @__PURE__ */ import_react31.default.createElement(
3118
- import_react_native16.Text,
3593
+ return /* @__PURE__ */ import_react34.default.createElement(
3594
+ import_react_native18.Text,
3119
3595
  {
3120
3596
  key: chainId,
3121
- style: [styles14.chainErrorItem, { color: theme.colors.error }]
3597
+ style: [styles16.chainErrorItem, { color: theme.colors.error }]
3122
3598
  },
3123
3599
  "\u2022 ",
3124
3600
  chain?.name,
@@ -3126,7 +3602,7 @@ var IntegrationForm = ({
3126
3602
  error
3127
3603
  );
3128
3604
  })));
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", {
3605
+ const renderFormBlock = () => /* @__PURE__ */ import_react34.default.createElement(import_react34.default.Fragment, null, /* @__PURE__ */ import_react34.default.createElement(import_react_native18.View, { style: styles16.header }, renderLogo(), /* @__PURE__ */ import_react34.default.createElement(import_react_native18.Text, { style: [styles16.name, { color: theme.colors.text }] }, metadata.name)), shouldShowFormFields && /* @__PURE__ */ import_react34.default.createElement(import_react34.default.Fragment, null, metadata.address && /* @__PURE__ */ import_react34.default.createElement(import_react34.default.Fragment, null, renderInput("address", {
3130
3606
  placeholder: "Enter address",
3131
3607
  autoCapitalize: "none",
3132
3608
  autoCorrect: false
@@ -3142,16 +3618,23 @@ var IntegrationForm = ({
3142
3618
  }), metadata.password && renderInput("password", {
3143
3619
  placeholder: "Enter Password",
3144
3620
  secureTextEntry: true
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.")));
3621
+ })), hasNoFields && !metadata?.isWalletConnectSupported && /* @__PURE__ */ import_react34.default.createElement(Alert, { variant: "default", style: { marginTop: 12 } }, /* @__PURE__ */ import_react34.default.createElement(AlertDescription, null, "This integration is not supported here yet \u2014 try using it through our Kryptos Platform.")));
3146
3622
  const addIntegrationLabel = formValues.address && userUsedChains.length > 0 && selectedChains.size > 0 ? `Add ${selectedChains.size} Chain${selectedChains.size !== 1 ? "s" : ""}` : "Add Integration";
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,
3623
+ return /* @__PURE__ */ import_react34.default.createElement(import_react34.default.Fragment, null, !metadata?.isWalletConnectSupported ? /* @__PURE__ */ import_react34.default.createElement(Modal, { isOpen: open, onClose: handleClose, size: "full" }, /* @__PURE__ */ import_react34.default.createElement(ModalHeader, { onClose: handleClose }, /* @__PURE__ */ import_react34.default.createElement(import_react_native18.View, { style: styles16.headerContent }, showBackButton && /* @__PURE__ */ import_react34.default.createElement(
3624
+ import_react_native18.TouchableOpacity,
3149
3625
  {
3150
3626
  onPress: () => setAddIntegrationMode(null),
3151
- style: styles14.backButton
3627
+ style: styles16.backButton
3152
3628
  },
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(
3629
+ /* @__PURE__ */ import_react34.default.createElement(ArrowLeftIcon, { size: 20, color: theme.colors.text })
3630
+ ), /* @__PURE__ */ import_react34.default.createElement(import_react_native18.Text, { style: [styles16.headerTitle, { color: theme.colors.text }] }, "Integration"))), /* @__PURE__ */ import_react34.default.createElement(ModalBody, { scrollable: true, style: styles16.contentContainer }, renderFormBlock(), renderErrorAlert(), !metadata?.isWalletConnectSupported && metadata?.walletLimitations && /* @__PURE__ */ import_react34.default.createElement(
3631
+ IntegrationInfo,
3632
+ {
3633
+ content: metadata.walletLimitations,
3634
+ type: "api",
3635
+ import_guide: metadata.import_guide
3636
+ }
3637
+ )), !hasNoFields && /* @__PURE__ */ import_react34.default.createElement(ModalFooter, { style: { paddingVertical: 8 } }, /* @__PURE__ */ import_react34.default.createElement(
3155
3638
  Button,
3156
3639
  {
3157
3640
  variant: "outline",
@@ -3159,10 +3642,10 @@ var IntegrationForm = ({
3159
3642
  onPress: handleSubmit,
3160
3643
  loading: isLoading,
3161
3644
  disabled: isLoading || isFetchingChains || !!formValues.address && userUsedChains.length > 0 && selectedChains.size === 0,
3162
- style: styles14.button
3645
+ style: styles16.button
3163
3646
  },
3164
3647
  addIntegrationLabel
3165
- ), /* @__PURE__ */ import_react31.default.createElement(Footer, null))) : /* @__PURE__ */ import_react31.default.createElement(
3648
+ ), /* @__PURE__ */ import_react34.default.createElement(Footer, null))) : /* @__PURE__ */ import_react34.default.createElement(
3166
3649
  WalletConnectComponent,
3167
3650
  {
3168
3651
  integration: metadata,
@@ -3171,14 +3654,15 @@ var IntegrationForm = ({
3171
3654
  modalOpen: open,
3172
3655
  setAddIntegrationMode,
3173
3656
  handleClose,
3174
- providersList
3657
+ providersList,
3658
+ errorMessage: errorMessageProp,
3659
+ showBackButton
3175
3660
  }
3176
3661
  ));
3177
3662
  };
3178
- var styles14 = import_react_native16.StyleSheet.create({
3179
- scrollViewContent: {
3180
- flexGrow: 1,
3181
- paddingBottom: 100
3663
+ var styles16 = import_react_native18.StyleSheet.create({
3664
+ chainListContent: {
3665
+ paddingBottom: 8
3182
3666
  },
3183
3667
  headerContent: {
3184
3668
  flexDirection: "row",
@@ -3203,10 +3687,8 @@ var styles14 = import_react_native16.StyleSheet.create({
3203
3687
  // theme.spacing.xl
3204
3688
  paddingBottom: 40,
3205
3689
  width: "100%",
3206
- overflow: "hidden",
3207
3690
  alignSelf: "center",
3208
- flexDirection: "column",
3209
- flex: 1
3691
+ flexDirection: "column"
3210
3692
  },
3211
3693
  header: {
3212
3694
  flexDirection: "row",
@@ -3238,7 +3720,7 @@ var styles14 = import_react_native16.StyleSheet.create({
3238
3720
  textTransform: "capitalize"
3239
3721
  },
3240
3722
  chainSelection: {
3241
- marginBottom: 16
3723
+ marginBottom: 8
3242
3724
  // theme.spacing.lg
3243
3725
  },
3244
3726
  chainTitle: {
@@ -3265,6 +3747,11 @@ var styles14 = import_react_native16.StyleSheet.create({
3265
3747
  // theme.borderRadius.md
3266
3748
  borderWidth: 1
3267
3749
  },
3750
+ chainChipRemoveAll: {
3751
+ marginTop: 6,
3752
+ // theme.spacing.sm - separate from chain list
3753
+ width: "auto"
3754
+ },
3268
3755
  chainName: {
3269
3756
  fontSize: 12,
3270
3757
  fontWeight: "500",
@@ -3300,18 +3787,23 @@ var styles14 = import_react_native16.StyleSheet.create({
3300
3787
  var Integration = ({
3301
3788
  open,
3302
3789
  onSuccess,
3303
- onClose
3790
+ onClose,
3791
+ integrationDetails
3304
3792
  }) => {
3305
3793
  const { appName, linkToken } = useKryptosConnect();
3306
3794
  const theme = useTheme();
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("");
3795
+ const [addIntegrationMode, setAddIntegrationMode] = import_react35.default.useState(integrationDetails || null);
3796
+ const [query, setQuery] = import_react35.default.useState("");
3797
+ const [activeTab, setActiveTab] = import_react35.default.useState("all");
3798
+ const [supportedProviders, setSupportedProviders] = import_react35.default.useState([]);
3799
+ const [existingIntegrations, setExistingIntegrations] = import_react35.default.useState([]);
3800
+ const [isLoading, setIsLoading] = import_react35.default.useState(false);
3801
+ const [errorMessage, setErrorMessage] = import_react35.default.useState("");
3802
+ import_react35.default.useEffect(() => {
3803
+ if (integrationDetails) {
3804
+ setAddIntegrationMode(integrationDetails);
3805
+ }
3806
+ }, [integrationDetails]);
3315
3807
  const handleClose = () => {
3316
3808
  onClose();
3317
3809
  };
@@ -3322,7 +3814,7 @@ var Integration = ({
3322
3814
  } catch (error) {
3323
3815
  const err = error;
3324
3816
  setErrorMessage(
3325
- err?.response?.data?.message || "Failed to fetch existing integrations"
3817
+ err?.response?.data?.message || err?.response?.data?.error || "Failed to fetch existing integrations"
3326
3818
  );
3327
3819
  console.error(error);
3328
3820
  }
@@ -3335,38 +3827,38 @@ var Integration = ({
3335
3827
  } catch (error) {
3336
3828
  const err = error;
3337
3829
  setErrorMessage(
3338
- err?.response?.data?.message || "Failed to fetch supported providers"
3830
+ err?.response?.data?.message || err?.response?.data?.error || "Failed to fetch supported providers"
3339
3831
  );
3340
3832
  console.error(error);
3341
3833
  } finally {
3342
3834
  setIsLoading(false);
3343
3835
  }
3344
3836
  };
3345
- import_react32.default.useEffect(() => {
3837
+ import_react35.default.useEffect(() => {
3346
3838
  if (linkToken) {
3347
3839
  fetchSupportedProviders();
3348
3840
  fetchExistingIntegrations();
3349
3841
  }
3350
3842
  }, [linkToken]);
3351
- const isIntegrationAdded = import_react32.default.useCallback(
3843
+ const isIntegrationAdded = (0, import_react35.useCallback)(
3352
3844
  (publicName) => {
3353
- const integrations = [...addedIntegrations, ...existingIntegrations];
3845
+ const integrations = [...existingIntegrations];
3354
3846
  return integrations.some(
3355
3847
  (integration) => integration.public_name === publicName
3356
3848
  );
3357
3849
  },
3358
- [addedIntegrations, existingIntegrations]
3850
+ [existingIntegrations]
3359
3851
  );
3360
- const getIntegrationCount = import_react32.default.useCallback(
3852
+ const getIntegrationCount = (0, import_react35.useCallback)(
3361
3853
  (publicName) => {
3362
- const integrations = [...addedIntegrations, ...existingIntegrations];
3854
+ const integrations = [...existingIntegrations];
3363
3855
  return integrations.filter(
3364
3856
  (integration) => integration.public_name === publicName
3365
3857
  ).length;
3366
3858
  },
3367
- [addedIntegrations, existingIntegrations]
3859
+ [existingIntegrations]
3368
3860
  );
3369
- const filteredResults = import_react32.default.useMemo(() => {
3861
+ const filteredResults = import_react35.default.useMemo(() => {
3370
3862
  let filtered = supportedProviders;
3371
3863
  if (activeTab !== "all") {
3372
3864
  filtered = filtered.filter((provider) => provider.type === activeTab);
@@ -3384,33 +3876,41 @@ var Integration = ({
3384
3876
  return (a.name ?? "").localeCompare(b.name ?? "");
3385
3877
  });
3386
3878
  }, [query, supportedProviders, getIntegrationCount, activeTab]);
3387
- const handleAddIntegration = async () => {
3879
+ const handleAddIntegration = async (integrationsList) => {
3388
3880
  try {
3389
3881
  setIsLoading(true);
3390
- const integrations = [...addedIntegrations, ...existingIntegrations];
3882
+ const integrations = integrationsList ? integrationsList : [...existingIntegrations];
3391
3883
  if (integrations.length === 0) {
3392
3884
  setErrorMessage("Please add at least one integration");
3393
- } else if (addedIntegrations.length === 0) {
3394
- onSuccess();
3395
3885
  } else {
3396
- await addUserIntegration(linkToken, addedIntegrations);
3397
- onSuccess();
3886
+ await addUserIntegration(linkToken, integrations);
3887
+ if (integrationDetails) {
3888
+ onSuccess();
3889
+ }
3398
3890
  }
3891
+ await fetchExistingIntegrations();
3892
+ setAddIntegrationMode(null);
3399
3893
  } catch (error) {
3400
- const err = error;
3401
- console.error(error);
3402
- setErrorMessage(
3403
- err?.response?.data?.message || "Failed to add integrations"
3404
- );
3894
+ const message = error?.response?.data?.message || error?.response?.data?.error || "Failed to add integrations";
3895
+ setErrorMessage(message);
3896
+ throw error;
3405
3897
  } finally {
3406
3898
  setIsLoading(false);
3407
3899
  }
3408
3900
  };
3409
- const renderProviderItem = ({ item }) => /* @__PURE__ */ import_react32.default.createElement(
3410
- import_react_native17.TouchableOpacity,
3901
+ const handleContinue = () => {
3902
+ const integrations = [...existingIntegrations];
3903
+ if (integrations.length === 0) {
3904
+ setErrorMessage("Please add at least one integration");
3905
+ return;
3906
+ }
3907
+ onSuccess();
3908
+ };
3909
+ const renderProviderItem = ({ item }) => /* @__PURE__ */ import_react35.default.createElement(
3910
+ import_react_native19.TouchableOpacity,
3411
3911
  {
3412
3912
  style: [
3413
- styles15.providerItem,
3913
+ styles17.providerItem,
3414
3914
  {
3415
3915
  backgroundColor: theme.colors.surface,
3416
3916
  borderColor: theme.colors.border
@@ -3419,44 +3919,44 @@ var Integration = ({
3419
3919
  onPress: () => setAddIntegrationMode(item),
3420
3920
  activeOpacity: 0.7
3421
3921
  },
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,
3922
+ /* @__PURE__ */ import_react35.default.createElement(import_react_native19.View, { style: styles17.providerInfo }, item?.logo ? isSvgUrl(item?.logo) ? /* @__PURE__ */ import_react35.default.createElement(RemoteSvg, { uri: item?.logo }) : /* @__PURE__ */ import_react35.default.createElement(
3923
+ import_react_native19.Image,
3424
3924
  {
3425
3925
  source: { uri: item?.logo },
3426
- style: styles15.providerLogo,
3926
+ style: styles17.providerLogo,
3427
3927
  resizeMode: "contain"
3428
3928
  }
3429
- ) : /* @__PURE__ */ import_react32.default.createElement(
3430
- import_react_native17.View,
3929
+ ) : /* @__PURE__ */ import_react35.default.createElement(
3930
+ import_react_native19.View,
3431
3931
  {
3432
3932
  style: [
3433
- styles15.providerLogoPlaceholder,
3933
+ styles17.providerLogoPlaceholder,
3434
3934
  { backgroundColor: theme.colors.surfaceSecondary }
3435
3935
  ]
3436
3936
  },
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,
3937
+ /* @__PURE__ */ import_react35.default.createElement(import_react_native19.Text, { style: { color: theme.colors.text } }, item?.name?.charAt(0) || "?")
3938
+ ), /* @__PURE__ */ import_react35.default.createElement(import_react_native19.Text, { style: [styles17.providerName, { color: theme.colors.text }] }, item?.name + "\u200B")),
3939
+ isIntegrationAdded(item?.public_name) && /* @__PURE__ */ import_react35.default.createElement(import_react_native19.View, { style: styles17.providerStatus }, /* @__PURE__ */ import_react35.default.createElement(CheckCircleIcon, { size: 18, color: theme.colors.success }), /* @__PURE__ */ import_react35.default.createElement(
3940
+ import_react_native19.Text,
3441
3941
  {
3442
3942
  style: [
3443
- styles15.providerCount,
3943
+ styles17.providerCount,
3444
3944
  { color: theme.colors.textSecondary }
3445
3945
  ]
3446
3946
  },
3447
3947
  getIntegrationCount(item?.public_name)
3448
3948
  ))
3449
3949
  );
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,
3950
+ const renderSkeletonItem = () => /* @__PURE__ */ import_react35.default.createElement(SkeletonItem_default, null);
3951
+ return /* @__PURE__ */ import_react35.default.createElement(import_react35.default.Fragment, null, !addIntegrationMode ? /* @__PURE__ */ import_react35.default.createElement(Modal, { isOpen: open, onClose: handleClose, size: "full" }, /* @__PURE__ */ import_react35.default.createElement(ModalHeader, { onClose: handleClose }, /* @__PURE__ */ import_react35.default.createElement(import_react_native19.View, { style: styles17.headerContent }, addIntegrationMode && /* @__PURE__ */ import_react35.default.createElement(
3952
+ import_react_native19.TouchableOpacity,
3453
3953
  {
3454
3954
  onPress: () => setAddIntegrationMode(null),
3455
- style: styles15.backButton
3955
+ style: styles17.backButton
3456
3956
  },
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,
3957
+ /* @__PURE__ */ import_react35.default.createElement(ArrowLeftIcon, { size: 20, color: theme.colors.text })
3958
+ ), /* @__PURE__ */ import_react35.default.createElement(import_react_native19.Text, { style: [styles17.headerTitle, { color: theme.colors.text }] }, "Integration"))), /* @__PURE__ */ import_react35.default.createElement(ModalBody, { scrollable: false, style: styles17.noPadding }, /* @__PURE__ */ import_react35.default.createElement(import_react_native19.View, { style: styles17.container }, /* @__PURE__ */ import_react35.default.createElement(import_react_native19.View, { style: styles17.headerSection }, /* @__PURE__ */ import_react35.default.createElement(ConnectLogo, null), /* @__PURE__ */ import_react35.default.createElement(import_react_native19.Text, { style: [styles17.title, { color: theme.colors.text }] }, "Select an account to link to ", appName)), /* @__PURE__ */ import_react35.default.createElement(
3959
+ import_react_native19.View,
3460
3960
  {
3461
3961
  style: {
3462
3962
  paddingHorizontal: theme.spacing.xl,
@@ -3465,26 +3965,26 @@ var Integration = ({
3465
3965
  zIndex: 10
3466
3966
  }
3467
3967
  },
3468
- /* @__PURE__ */ import_react32.default.createElement(
3968
+ /* @__PURE__ */ import_react35.default.createElement(
3469
3969
  Input,
3470
3970
  {
3471
3971
  value: query,
3472
3972
  onChangeText: setQuery,
3473
3973
  placeholder: "Search Integrations...",
3474
- containerStyle: styles15.searchInput
3974
+ containerStyle: styles17.searchInput
3475
3975
  }
3476
3976
  ),
3477
- /* @__PURE__ */ import_react32.default.createElement(import_react_native17.View, { style: styles15.tabsContainer }, [
3977
+ /* @__PURE__ */ import_react35.default.createElement(import_react_native19.View, { style: styles17.tabsContainer }, [
3478
3978
  { label: "All", value: "all" },
3479
3979
  { label: "Exchanges", value: "exchange" },
3480
3980
  { label: "Blockchains", value: "blockchain" },
3481
3981
  { label: "Wallets", value: "wallet" }
3482
- ].map((tab) => /* @__PURE__ */ import_react32.default.createElement(
3483
- import_react_native17.TouchableOpacity,
3982
+ ].map((tab) => /* @__PURE__ */ import_react35.default.createElement(
3983
+ import_react_native19.TouchableOpacity,
3484
3984
  {
3485
3985
  key: tab.value,
3486
3986
  style: [
3487
- styles15.tab,
3987
+ styles17.tab,
3488
3988
  {
3489
3989
  backgroundColor: activeTab === tab.value ? theme.colors.primary : theme.colors.surface,
3490
3990
  borderColor: theme.colors.border
@@ -3496,11 +3996,11 @@ var Integration = ({
3496
3996
  );
3497
3997
  }
3498
3998
  },
3499
- /* @__PURE__ */ import_react32.default.createElement(
3500
- import_react_native17.Text,
3999
+ /* @__PURE__ */ import_react35.default.createElement(
4000
+ import_react_native19.Text,
3501
4001
  {
3502
4002
  style: [
3503
- styles15.tabText,
4003
+ styles17.tabText,
3504
4004
  {
3505
4005
  color: activeTab === tab.value ? theme.colors.white : theme.colors.text
3506
4006
  }
@@ -3509,8 +4009,8 @@ var Integration = ({
3509
4009
  tab.label
3510
4010
  )
3511
4011
  )))
3512
- ), /* @__PURE__ */ import_react32.default.createElement(
3513
- import_react_native17.FlatList,
4012
+ ), /* @__PURE__ */ import_react35.default.createElement(
4013
+ import_react_native19.FlatList,
3514
4014
  {
3515
4015
  data: isLoading ? Array.from({ length: 8 }, (_, i) => ({
3516
4016
  id: `skeleton-${i}`,
@@ -3520,50 +4020,53 @@ var Integration = ({
3520
4020
  })) : filteredResults,
3521
4021
  keyExtractor: (item, index) => isLoading ? item.id : `provider-${item.id}-${index}`,
3522
4022
  renderItem: isLoading ? renderSkeletonItem : renderProviderItem,
3523
- style: styles15.list,
4023
+ style: styles17.list,
3524
4024
  contentContainerStyle: [
3525
- styles15.listContent,
4025
+ styles17.listContent,
3526
4026
  { paddingHorizontal: theme.spacing.xl }
3527
4027
  ],
3528
4028
  showsVerticalScrollIndicator: false,
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,
4029
+ ListEmptyComponent: /* @__PURE__ */ import_react35.default.createElement(import_react_native19.View, { style: styles17.emptyContainer }, !isLoading && /* @__PURE__ */ import_react35.default.createElement(
4030
+ import_react_native19.Text,
3531
4031
  {
3532
4032
  style: [
3533
- styles15.emptyText,
4033
+ styles17.emptyText,
3534
4034
  { color: theme.colors.textSecondary }
3535
4035
  ]
3536
4036
  },
3537
4037
  query ? "No search results found" : "No supported integrations found"
3538
- ))
4038
+ )),
4039
+ ListFooterComponent: errorMessage ? /* @__PURE__ */ import_react35.default.createElement(import_react_native19.View, { style: styles17.errorContainer }, /* @__PURE__ */ import_react35.default.createElement(Alert, { variant: "destructive", style: styles17.errorAlert }, /* @__PURE__ */ import_react35.default.createElement(AlertDescription, null, errorMessage))) : null
3539
4040
  }
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(
4041
+ ))), /* @__PURE__ */ import_react35.default.createElement(ModalFooter, { style: { paddingVertical: 8 } }, filteredResults && filteredResults.length > 0 && /* @__PURE__ */ import_react35.default.createElement(
3541
4042
  Button,
3542
4043
  {
3543
4044
  variant: "outline",
3544
4045
  size: "lg",
3545
- onPress: handleAddIntegration,
4046
+ onPress: handleContinue,
3546
4047
  loading: isLoading,
3547
4048
  disabled: isLoading,
3548
- style: styles15.continueButton
4049
+ style: styles17.continueButton
3549
4050
  },
3550
4051
  "Continue"
3551
- ), /* @__PURE__ */ import_react32.default.createElement(Footer, null))) : /* @__PURE__ */ import_react32.default.createElement(
4052
+ ), /* @__PURE__ */ import_react35.default.createElement(Footer, null))) : /* @__PURE__ */ import_react35.default.createElement(
3552
4053
  IntegrationForm,
3553
4054
  {
3554
4055
  metadata: addIntegrationMode,
3555
- onAddHandle: (integrations) => {
3556
- setAddedIntegrations((prev) => [...prev, ...integrations]);
3557
- setAddIntegrationMode(null);
4056
+ onAddHandle: async (int) => {
4057
+ const integrationsList = [...int];
4058
+ await handleAddIntegration(integrationsList);
3558
4059
  },
3559
4060
  open: !!addIntegrationMode,
3560
4061
  setAddIntegrationMode,
3561
4062
  handleClose,
3562
- providersList: supportedProviders
4063
+ providersList: supportedProviders,
4064
+ errorMessage,
4065
+ showBackButton: !integrationDetails
3563
4066
  }
3564
4067
  ));
3565
4068
  };
3566
- var styles15 = import_react_native17.StyleSheet.create({
4069
+ var styles17 = import_react_native19.StyleSheet.create({
3567
4070
  headerContent: {
3568
4071
  flexDirection: "row",
3569
4072
  alignItems: "center"
@@ -3674,12 +4177,12 @@ var styles15 = import_react_native17.StyleSheet.create({
3674
4177
  width: "100%"
3675
4178
  },
3676
4179
  errorContainer: {
3677
- paddingHorizontal: 20
4180
+ paddingHorizontal: 20,
3678
4181
  // theme.spacing.xl
4182
+ marginBottom: 12
3679
4183
  },
3680
4184
  errorAlert: {
3681
- marginTop: 16
3682
- // theme.spacing.lg - consistent alert spacing
4185
+ marginTop: 8
3683
4186
  },
3684
4187
  tabsContainer: {
3685
4188
  flexDirection: "row",
@@ -3706,21 +4209,21 @@ var styles15 = import_react_native17.StyleSheet.create({
3706
4209
  });
3707
4210
 
3708
4211
  // src/molecules/OTPVerify.tsx
3709
- var import_react33 = __toESM(require("react"));
3710
- var import_react_native18 = require("react-native");
4212
+ var import_react36 = __toESM(require("react"));
4213
+ var import_react_native20 = require("react-native");
3711
4214
  var OTPVerify = ({
3712
4215
  open,
3713
4216
  onSuccess,
3714
4217
  onClose
3715
4218
  }) => {
3716
4219
  const theme = useTheme();
3717
- const [otp, setOtp] = import_react33.default.useState("");
4220
+ const [otp, setOtp] = import_react36.default.useState("");
3718
4221
  const { linkToken, clientId, email, setUser } = useKryptosConnect();
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("");
4222
+ const [isLoading, setIsLoading] = import_react36.default.useState(false);
4223
+ const [isResending, setIsResending] = import_react36.default.useState(false);
4224
+ const [resendCooldown, setResendCooldown] = import_react36.default.useState(0);
4225
+ const [errorMessage, setErrorMessage] = import_react36.default.useState("");
4226
+ const [successMessage, setSuccessMessage] = import_react36.default.useState("");
3724
4227
  const handleSubmit = async () => {
3725
4228
  if (otp.length !== 6) return;
3726
4229
  setIsLoading(true);
@@ -3771,7 +4274,7 @@ var OTPVerify = ({
3771
4274
  setSuccessMessage("");
3772
4275
  setOtp("");
3773
4276
  };
3774
- import_react33.default.useEffect(() => {
4277
+ import_react36.default.useEffect(() => {
3775
4278
  if (resendCooldown > 0) {
3776
4279
  const timer = setTimeout(() => {
3777
4280
  setResendCooldown(resendCooldown - 1);
@@ -3780,20 +4283,20 @@ var OTPVerify = ({
3780
4283
  }
3781
4284
  return void 0;
3782
4285
  }, [resendCooldown]);
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,
4286
+ return /* @__PURE__ */ import_react36.default.createElement(Modal, { isOpen: open, onClose: handleClose, size: "lg" }, /* @__PURE__ */ import_react36.default.createElement(ModalHeader, { onClose: handleClose }, /* @__PURE__ */ import_react36.default.createElement(import_react_native20.View, { style: styles18.headerContent }, /* @__PURE__ */ import_react36.default.createElement(import_react_native20.Text, { style: [styles18.headerTitle, { color: theme.colors.text }] }, "OTP Verification"))), /* @__PURE__ */ import_react36.default.createElement(ModalBody, null, /* @__PURE__ */ import_react36.default.createElement(import_react_native20.View, { style: styles18.container }, /* @__PURE__ */ import_react36.default.createElement(ConnectLogo, null), /* @__PURE__ */ import_react36.default.createElement(import_react_native20.View, { style: styles18.emailInfo }, /* @__PURE__ */ import_react36.default.createElement(
4287
+ import_react_native20.Text,
3785
4288
  {
3786
- style: [styles16.infoText, { color: theme.colors.textSecondary }]
4289
+ style: [styles18.infoText, { color: theme.colors.textSecondary }]
3787
4290
  },
3788
4291
  "We have sent a verification code to"
3789
- ), /* @__PURE__ */ import_react33.default.createElement(import_react_native18.Text, { style: [styles16.emailText, { color: theme.colors.text }] }, email)), /* @__PURE__ */ import_react33.default.createElement(
4292
+ ), /* @__PURE__ */ import_react36.default.createElement(import_react_native20.Text, { style: [styles18.emailText, { color: theme.colors.text }] }, email)), /* @__PURE__ */ import_react36.default.createElement(
3790
4293
  OTP,
3791
4294
  {
3792
4295
  onComplete: handleOtpComplete,
3793
4296
  length: 6,
3794
4297
  setErrorMessage
3795
4298
  }
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(
4299
+ ), errorMessage ? /* @__PURE__ */ import_react36.default.createElement(Alert, { variant: "destructive" }, /* @__PURE__ */ import_react36.default.createElement(AlertDescription, null, errorMessage)) : null, successMessage ? /* @__PURE__ */ import_react36.default.createElement(Alert, { variant: "default" }, /* @__PURE__ */ import_react36.default.createElement(AlertDescription, null, successMessage)) : null, /* @__PURE__ */ import_react36.default.createElement(
3797
4300
  Button,
3798
4301
  {
3799
4302
  variant: "outline",
@@ -3801,44 +4304,44 @@ var OTPVerify = ({
3801
4304
  onPress: handleSubmit,
3802
4305
  loading: isLoading,
3803
4306
  disabled: otp.length !== 6 || isLoading,
3804
- style: styles16.button
4307
+ style: styles18.button
3805
4308
  },
3806
4309
  "Continue"
3807
- ), /* @__PURE__ */ import_react33.default.createElement(
3808
- import_react_native18.TouchableOpacity,
4310
+ ), /* @__PURE__ */ import_react36.default.createElement(
4311
+ import_react_native20.TouchableOpacity,
3809
4312
  {
3810
4313
  onPress: handleResendOtp,
3811
4314
  disabled: resendCooldown > 0 || isResending,
3812
- style: styles16.resendContainer
4315
+ style: styles18.resendContainer
3813
4316
  },
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,
4317
+ isResending ? /* @__PURE__ */ import_react36.default.createElement(import_react_native20.View, { style: styles18.resendLoading }, /* @__PURE__ */ import_react36.default.createElement(LoaderIcon, { size: 16, color: theme.colors.primary }), /* @__PURE__ */ import_react36.default.createElement(
4318
+ import_react_native20.Text,
3816
4319
  {
3817
- style: [styles16.resendText, { color: theme.colors.primary }]
4320
+ style: [styles18.resendText, { color: theme.colors.primary }]
3818
4321
  },
3819
4322
  " ",
3820
4323
  "Sending..."
3821
- )) : resendCooldown > 0 ? /* @__PURE__ */ import_react33.default.createElement(
3822
- import_react_native18.Text,
4324
+ )) : resendCooldown > 0 ? /* @__PURE__ */ import_react36.default.createElement(
4325
+ import_react_native20.Text,
3823
4326
  {
3824
4327
  style: [
3825
- styles16.resendText,
4328
+ styles18.resendText,
3826
4329
  { color: theme.colors.textSecondary }
3827
4330
  ]
3828
4331
  },
3829
4332
  "Resend OTP in ",
3830
4333
  resendCooldown,
3831
4334
  "s"
3832
- ) : /* @__PURE__ */ import_react33.default.createElement(
3833
- import_react_native18.Text,
4335
+ ) : /* @__PURE__ */ import_react36.default.createElement(
4336
+ import_react_native20.Text,
3834
4337
  {
3835
- style: [styles16.resendText, { color: theme.colors.primary }]
4338
+ style: [styles18.resendText, { color: theme.colors.primary }]
3836
4339
  },
3837
4340
  "Resend OTP"
3838
4341
  )
3839
- ))), /* @__PURE__ */ import_react33.default.createElement(ModalFooter, { style: { paddingVertical: 0 } }, /* @__PURE__ */ import_react33.default.createElement(Footer, null)));
4342
+ ))), /* @__PURE__ */ import_react36.default.createElement(ModalFooter, { style: { paddingVertical: 0 } }, /* @__PURE__ */ import_react36.default.createElement(Footer, null)));
3840
4343
  };
3841
- var styles16 = import_react_native18.StyleSheet.create({
4344
+ var styles18 = import_react_native20.StyleSheet.create({
3842
4345
  headerContent: {
3843
4346
  flexDirection: "row",
3844
4347
  alignItems: "center"
@@ -3897,8 +4400,8 @@ var styles16 = import_react_native18.StyleSheet.create({
3897
4400
  });
3898
4401
 
3899
4402
  // src/molecules/Permissions.tsx
3900
- var import_react34 = __toESM(require("react"));
3901
- var import_react_native19 = require("react-native");
4403
+ var import_react37 = __toESM(require("react"));
4404
+ var import_react_native21 = require("react-native");
3902
4405
  var Permissions = ({
3903
4406
  open,
3904
4407
  onClose,
@@ -3906,8 +4409,8 @@ var Permissions = ({
3906
4409
  }) => {
3907
4410
  const { appName, linkToken, setUserConsent } = useKryptosConnect();
3908
4411
  const theme = useTheme();
3909
- const [isLoading, setIsLoading] = import_react34.default.useState(false);
3910
- const [errorMessage, setErrorMessage] = import_react34.default.useState("");
4412
+ const [isLoading, setIsLoading] = import_react37.default.useState(false);
4413
+ const [errorMessage, setErrorMessage] = import_react37.default.useState("");
3911
4414
  const handleConsentClick = async () => {
3912
4415
  try {
3913
4416
  setIsLoading(true);
@@ -3930,42 +4433,42 @@ var Permissions = ({
3930
4433
  "Access your transaction history and trading activity",
3931
4434
  "Keep this data updated and accessible when you're offline"
3932
4435
  ];
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,
4436
+ return /* @__PURE__ */ import_react37.default.createElement(Modal, { isOpen: open, onClose, size: "xl" }, /* @__PURE__ */ import_react37.default.createElement(ModalHeader, { onClose }, "Permissions"), /* @__PURE__ */ import_react37.default.createElement(ModalBody, null, /* @__PURE__ */ import_react37.default.createElement(import_react_native21.View, { style: styles19.container }, /* @__PURE__ */ import_react37.default.createElement(ConnectLogo, null), errorMessage ? /* @__PURE__ */ import_react37.default.createElement(Alert, { variant: "destructive" }, /* @__PURE__ */ import_react37.default.createElement(AlertDescription, null, errorMessage)) : null, /* @__PURE__ */ import_react37.default.createElement(import_react_native21.View, { style: styles19.permissionsList }, /* @__PURE__ */ import_react37.default.createElement(
4437
+ import_react_native21.Text,
3935
4438
  {
3936
- style: [styles17.subtitle, { color: theme.colors.textSecondary }]
4439
+ style: [styles19.subtitle, { color: theme.colors.textSecondary }]
3937
4440
  },
3938
4441
  "Allow ",
3939
4442
  appName,
3940
4443
  " to:"
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,
4444
+ ), permissionItems.map((item, index) => /* @__PURE__ */ import_react37.default.createElement(import_react_native21.View, { key: `permission-${index}`, style: styles19.permissionItem }, /* @__PURE__ */ import_react37.default.createElement(import_react_native21.Text, { style: [styles19.bullet, { color: theme.colors.primary }] }, index + 1, "."), /* @__PURE__ */ import_react37.default.createElement(
4445
+ import_react_native21.Text,
3943
4446
  {
3944
- style: [styles17.permissionText, { color: theme.colors.text }]
4447
+ style: [styles19.permissionText, { color: theme.colors.text }]
3945
4448
  },
3946
4449
  item
3947
- )))), /* @__PURE__ */ import_react34.default.createElement(
3948
- import_react_native19.View,
4450
+ )))), /* @__PURE__ */ import_react37.default.createElement(
4451
+ import_react_native21.View,
3949
4452
  {
3950
4453
  style: [
3951
- styles17.infoBox,
4454
+ styles19.infoBox,
3952
4455
  {
3953
4456
  backgroundColor: theme.colors.surface,
3954
4457
  borderColor: theme.colors.border
3955
4458
  }
3956
4459
  ]
3957
4460
  },
3958
- /* @__PURE__ */ import_react34.default.createElement(
3959
- import_react_native19.Text,
4461
+ /* @__PURE__ */ import_react37.default.createElement(
4462
+ import_react_native21.Text,
3960
4463
  {
3961
- style: [styles17.infoText, { color: theme.colors.textSecondary }]
4464
+ style: [styles19.infoText, { color: theme.colors.textSecondary }]
3962
4465
  },
3963
4466
  "By selecting",
3964
4467
  " ",
3965
- /* @__PURE__ */ import_react34.default.createElement(import_react_native19.Text, { style: { fontWeight: "600", color: theme.colors.text } }, "'Allow'"),
4468
+ /* @__PURE__ */ import_react37.default.createElement(import_react_native21.Text, { style: { fontWeight: "600", color: theme.colors.text } }, "'Allow'"),
3966
4469
  ", you agree to share this information and keep it updated."
3967
4470
  )
3968
- ))), /* @__PURE__ */ import_react34.default.createElement(ModalFooter, { style: { paddingVertical: 8 } }, /* @__PURE__ */ import_react34.default.createElement(
4471
+ ))), /* @__PURE__ */ import_react37.default.createElement(ModalFooter, { style: { paddingVertical: 8 } }, /* @__PURE__ */ import_react37.default.createElement(
3969
4472
  Button,
3970
4473
  {
3971
4474
  variant: "outline",
@@ -3973,12 +4476,12 @@ var Permissions = ({
3973
4476
  onPress: handleConsentClick,
3974
4477
  loading: isLoading,
3975
4478
  disabled: isLoading,
3976
- style: styles17.button
4479
+ style: styles19.button
3977
4480
  },
3978
4481
  "Allow"
3979
- ), /* @__PURE__ */ import_react34.default.createElement(Footer, null)));
4482
+ ), /* @__PURE__ */ import_react37.default.createElement(Footer, null)));
3980
4483
  };
3981
- var styles17 = import_react_native19.StyleSheet.create({
4484
+ var styles19 = import_react_native21.StyleSheet.create({
3982
4485
  container: {
3983
4486
  flex: 1
3984
4487
  },
@@ -4036,8 +4539,8 @@ var styles17 = import_react_native19.StyleSheet.create({
4036
4539
  });
4037
4540
 
4038
4541
  // src/molecules/StatusModal.tsx
4039
- var import_react35 = __toESM(require("react"));
4040
- var import_react_native20 = require("react-native");
4542
+ var import_react38 = __toESM(require("react"));
4543
+ var import_react_native22 = require("react-native");
4041
4544
  var StatusModal = ({
4042
4545
  open,
4043
4546
  onClose,
@@ -4054,18 +4557,18 @@ var StatusModal = ({
4054
4557
  }
4055
4558
  onClose();
4056
4559
  };
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(
4560
+ return /* @__PURE__ */ import_react38.default.createElement(Modal, { isOpen: open, onClose: handleClose, size: "xl" }, /* @__PURE__ */ import_react38.default.createElement(ModalHeader, { showCloseButton: false, onClose: handleClose }, ""), /* @__PURE__ */ import_react38.default.createElement(ModalBody, null, /* @__PURE__ */ import_react38.default.createElement(import_react_native22.View, { style: styles20.container }, /* @__PURE__ */ import_react38.default.createElement(import_react_native22.View, { style: styles20.iconContainer }, status === "success" ? /* @__PURE__ */ import_react38.default.createElement(SuccessIcon, { size: 80 }) : /* @__PURE__ */ import_react38.default.createElement(ErrorIcon, { size: 80 })), /* @__PURE__ */ import_react38.default.createElement(import_react_native22.Text, { style: [styles20.message, { color: theme.colors.text }] }, status === "success" ? "Connection successful" : "Connection failed"), /* @__PURE__ */ import_react38.default.createElement(Alert, null, /* @__PURE__ */ import_react38.default.createElement(AlertTitle, null, "Sync in Progress"), /* @__PURE__ */ import_react38.default.createElement(AlertDescription, null, "The syncing process might take a moment. Please wait, and your data will be updated soon.")))), /* @__PURE__ */ import_react38.default.createElement(ModalFooter, { style: { paddingVertical: 8 } }, /* @__PURE__ */ import_react38.default.createElement(
4058
4561
  Button,
4059
4562
  {
4060
4563
  variant: "outline",
4061
4564
  size: "lg",
4062
4565
  onPress: status === "success" ? onSuccess : onError,
4063
- style: styles18.button
4566
+ style: styles20.button
4064
4567
  },
4065
4568
  status === "success" ? "Continue" : "Try again later"
4066
- ), /* @__PURE__ */ import_react35.default.createElement(Footer, null)));
4569
+ ), /* @__PURE__ */ import_react38.default.createElement(Footer, null)));
4067
4570
  };
4068
- var styles18 = import_react_native20.StyleSheet.create({
4571
+ var styles20 = import_react_native22.StyleSheet.create({
4069
4572
  container: {
4070
4573
  flex: 1,
4071
4574
  alignItems: "center",
@@ -4089,64 +4592,6 @@ var styles18 = import_react_native20.StyleSheet.create({
4089
4592
  }
4090
4593
  });
4091
4594
 
4092
- // src/molecules/EndModal.tsx
4093
- var import_react36 = __toESM(require("react"));
4094
- var import_react_native21 = require("react-native");
4095
- var EndModal = ({ open, onClose }) => {
4096
- const theme = useTheme();
4097
- (0, import_react36.useEffect)(() => {
4098
- if (!open) return;
4099
- const timer = setTimeout(() => {
4100
- onClose();
4101
- }, 5e3);
4102
- return () => clearTimeout(timer);
4103
- }, []);
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,
4106
- {
4107
- style: [
4108
- styles19.iconContainer,
4109
- { backgroundColor: theme.colors.successLight }
4110
- ]
4111
- },
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(
4115
- Button,
4116
- {
4117
- variant: "primary",
4118
- size: "lg",
4119
- onPress: onClose,
4120
- style: styles19.button
4121
- },
4122
- "Continue to App"
4123
- ), /* @__PURE__ */ import_react36.default.createElement(Footer, null)));
4124
- };
4125
- var styles19 = import_react_native21.StyleSheet.create({
4126
- container: {
4127
- alignItems: "center",
4128
- paddingVertical: 20
4129
- },
4130
- iconContainer: {
4131
- width: 80,
4132
- height: 80,
4133
- borderRadius: 40,
4134
- alignItems: "center",
4135
- justifyContent: "center",
4136
- marginBottom: 20
4137
- },
4138
- message: {
4139
- fontSize: 14,
4140
- textAlign: "center",
4141
- lineHeight: 20,
4142
- marginBottom: 24,
4143
- paddingHorizontal: 20
4144
- },
4145
- button: {
4146
- width: "100%"
4147
- }
4148
- });
4149
-
4150
4595
  // src/KryptosConnectButton.tsx
4151
4596
  var KryptosConnectButton = ({
4152
4597
  children,
@@ -4154,17 +4599,18 @@ var KryptosConnectButton = ({
4154
4599
  onError,
4155
4600
  generateLinkToken,
4156
4601
  style,
4157
- textStyle
4602
+ textStyle,
4603
+ integrationName
4158
4604
  }) => {
4159
4605
  const { theme: themeName } = useKryptosConnect();
4160
- const [open, setOpen] = import_react37.default.useState(false);
4606
+ const [open, setOpen] = import_react39.default.useState(false);
4161
4607
  const theme = useTheme();
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,
4608
+ return /* @__PURE__ */ import_react39.default.createElement(import_react39.default.Fragment, null, children ? /* @__PURE__ */ import_react39.default.createElement(import_react_native23.TouchableOpacity, { onPress: () => setOpen(true), style }, children) : /* @__PURE__ */ import_react39.default.createElement(
4609
+ import_react_native23.TouchableOpacity,
4164
4610
  {
4165
4611
  onPress: () => setOpen(true),
4166
4612
  style: [
4167
- styles20.defaultButton,
4613
+ styles21.defaultButton,
4168
4614
  themeName === "light" ? {
4169
4615
  backgroundColor: theme.colors.white,
4170
4616
  borderRadius: theme.borderRadius.md,
@@ -4178,11 +4624,11 @@ var KryptosConnectButton = ({
4178
4624
  ],
4179
4625
  activeOpacity: 0.8
4180
4626
  },
4181
- /* @__PURE__ */ import_react37.default.createElement(
4182
- import_react_native22.Text,
4627
+ /* @__PURE__ */ import_react39.default.createElement(
4628
+ import_react_native23.Text,
4183
4629
  {
4184
4630
  style: [
4185
- styles20.buttonText,
4631
+ styles21.buttonText,
4186
4632
  {
4187
4633
  color: themeName === "light" ? theme.colors.primary : theme.colors.white,
4188
4634
  fontSize: theme.fontSize.lg
@@ -4190,18 +4636,17 @@ var KryptosConnectButton = ({
4190
4636
  textStyle
4191
4637
  ]
4192
4638
  },
4193
- "Connect with",
4194
- " "
4195
- ),
4196
- /* @__PURE__ */ import_react37.default.createElement(LogoIcon, { size: 24 })
4197
- ), /* @__PURE__ */ import_react37.default.createElement(
4639
+ integrationName ? `Connect ${integrationName.charAt(0).toUpperCase() + integrationName.slice(1)} Account` : "Connect With Kryptos"
4640
+ )
4641
+ ), open && /* @__PURE__ */ import_react39.default.createElement(
4198
4642
  KryptosConnectModal,
4199
4643
  {
4200
4644
  open,
4201
4645
  setOpen,
4202
4646
  onSuccess,
4203
4647
  onError,
4204
- generateLinkToken
4648
+ generateLinkToken,
4649
+ integrationName
4205
4650
  }
4206
4651
  ));
4207
4652
  };
@@ -4210,7 +4655,8 @@ var KryptosConnectModal = ({
4210
4655
  setOpen,
4211
4656
  onSuccess,
4212
4657
  onError,
4213
- generateLinkToken
4658
+ generateLinkToken,
4659
+ integrationName
4214
4660
  }) => {
4215
4661
  const {
4216
4662
  setIsInitialized,
@@ -4222,7 +4668,20 @@ var KryptosConnectModal = ({
4222
4668
  isAuthorized,
4223
4669
  linkToken
4224
4670
  } = useKryptosConnect();
4225
- const [step, setStep] = import_react37.default.useState("INIT" /* INIT */);
4671
+ const [step, setStep] = import_react39.default.useState("INIT" /* INIT */);
4672
+ const [integrationDetails, setIntegrationDetails] = (0, import_react39.useState)(null);
4673
+ (0, import_react39.useEffect)(() => {
4674
+ if (integrationName && linkToken) {
4675
+ const fetchIntegrationDetails = async () => {
4676
+ const integrationDetails2 = await getSupportedProviders(
4677
+ linkToken,
4678
+ integrationName
4679
+ );
4680
+ setIntegrationDetails(integrationDetails2?.providers?.[0]);
4681
+ };
4682
+ fetchIntegrationDetails();
4683
+ }
4684
+ }, [integrationName, linkToken]);
4226
4685
  const handleClose = () => {
4227
4686
  setOpen(false);
4228
4687
  setIsInitialized(false);
@@ -4258,7 +4717,7 @@ var KryptosConnectModal = ({
4258
4717
  handleClose();
4259
4718
  };
4260
4719
  if (!open) return null;
4261
- return /* @__PURE__ */ import_react37.default.createElement(import_react_native22.View, { style: styles20.container }, step === "INIT" /* INIT */ && /* @__PURE__ */ import_react37.default.createElement(
4720
+ return /* @__PURE__ */ import_react39.default.createElement(import_react_native23.View, { style: styles21.container }, step === "INIT" /* INIT */ && /* @__PURE__ */ import_react39.default.createElement(
4262
4721
  Init,
4263
4722
  {
4264
4723
  open,
@@ -4272,7 +4731,7 @@ var KryptosConnectModal = ({
4272
4731
  },
4273
4732
  onClose: handleAbort
4274
4733
  }
4275
- ), step === "AUTH" /* AUTH */ && /* @__PURE__ */ import_react37.default.createElement(
4734
+ ), step === "AUTH" /* AUTH */ && /* @__PURE__ */ import_react39.default.createElement(
4276
4735
  Auth,
4277
4736
  {
4278
4737
  open,
@@ -4280,28 +4739,29 @@ var KryptosConnectModal = ({
4280
4739
  onGuestSuccess: () => setStep("INTEGRATION" /* INTEGRATION */),
4281
4740
  onClose: handleAbort
4282
4741
  }
4283
- ), step === "OTP" /* OTP */ && /* @__PURE__ */ import_react37.default.createElement(
4742
+ ), step === "OTP" /* OTP */ && /* @__PURE__ */ import_react39.default.createElement(
4284
4743
  OTPVerify,
4285
4744
  {
4286
4745
  open,
4287
4746
  onSuccess: () => setStep("INTEGRATION" /* INTEGRATION */),
4288
4747
  onClose: handleAbort
4289
4748
  }
4290
- ), step === "INTEGRATION" /* INTEGRATION */ && /* @__PURE__ */ import_react37.default.createElement(
4749
+ ), step === "INTEGRATION" /* INTEGRATION */ && /* @__PURE__ */ import_react39.default.createElement(
4291
4750
  Integration,
4292
4751
  {
4293
4752
  open,
4294
4753
  onSuccess: handleConsentClick,
4295
- onClose: handleAbort
4754
+ onClose: handleAbort,
4755
+ integrationDetails
4296
4756
  }
4297
- ), step === "PERMISSIONS" /* PERMISSIONS */ && /* @__PURE__ */ import_react37.default.createElement(
4757
+ ), step === "PERMISSIONS" /* PERMISSIONS */ && /* @__PURE__ */ import_react39.default.createElement(
4298
4758
  Permissions,
4299
4759
  {
4300
4760
  open,
4301
4761
  onClose: handleAbort,
4302
4762
  onSuccess: () => setStep("STATUS" /* STATUS */)
4303
4763
  }
4304
- ), step === "STATUS" /* STATUS */ && /* @__PURE__ */ import_react37.default.createElement(
4764
+ ), step === "STATUS" /* STATUS */ && /* @__PURE__ */ import_react39.default.createElement(
4305
4765
  StatusModal,
4306
4766
  {
4307
4767
  open,
@@ -4310,7 +4770,7 @@ var KryptosConnectModal = ({
4310
4770
  onError: handleError,
4311
4771
  status: userConsent?.public_token ? "success" : "error"
4312
4772
  }
4313
- ), step === "END" /* END */ && /* @__PURE__ */ import_react37.default.createElement(
4773
+ ), step === "END" /* END */ && /* @__PURE__ */ import_react39.default.createElement(
4314
4774
  EndModal,
4315
4775
  {
4316
4776
  open,
@@ -4322,7 +4782,7 @@ var KryptosConnectModal = ({
4322
4782
  }
4323
4783
  ));
4324
4784
  };
4325
- var styles20 = import_react_native22.StyleSheet.create({
4785
+ var styles21 = import_react_native23.StyleSheet.create({
4326
4786
  defaultButton: {
4327
4787
  flexDirection: "row",
4328
4788
  alignItems: "center",