@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/README.md +136 -80
- package/dist/index.d.mts +9 -6
- package/dist/index.d.ts +9 -6
- package/dist/index.js +1103 -643
- package/dist/index.mjs +1099 -652
- package/package.json +2 -2
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
|
|
42
|
-
var
|
|
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
|
|
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(
|
|
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 =
|
|
197
|
+
var KryptosContext = import_react.default.createContext(
|
|
235
198
|
void 0
|
|
236
199
|
);
|
|
237
200
|
var KryptosConnectProvider = ({ children, config }) => {
|
|
238
|
-
const [isInitialized, setIsInitialized] =
|
|
239
|
-
const [linkToken, setLinkToken] =
|
|
240
|
-
const [user, setUser] =
|
|
241
|
-
const [email, setEmail] =
|
|
242
|
-
const [userConsent, setUserConsent] =
|
|
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] =
|
|
246
|
-
const [clientInfo, setClientInfo] =
|
|
247
|
-
|
|
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
|
-
|
|
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__ */
|
|
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 =
|
|
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
|
|
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 =
|
|
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
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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
|
|
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__ */
|
|
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__ */
|
|
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
|
|
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
|
|
785
|
-
var
|
|
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__ */
|
|
791
|
-
|
|
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.
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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
|
|
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] =
|
|
1025
|
+
const [otp, setOtp] = import_react8.default.useState(
|
|
1045
1026
|
value.split("").concat(Array(length).fill("")).slice(0, length)
|
|
1046
1027
|
);
|
|
1047
|
-
const inputRefs =
|
|
1048
|
-
|
|
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
|
-
|
|
1041
|
+
import_react8.default.useEffect(() => {
|
|
1061
1042
|
setTimeout(() => {
|
|
1062
1043
|
inputRefs.current[0]?.focus();
|
|
1063
1044
|
}, 100);
|
|
1064
1045
|
}, []);
|
|
1065
|
-
const handleChange =
|
|
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 =
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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
|
|
1167
|
+
var import_react9 = __toESM(require("react"));
|
|
1187
1168
|
var import_react_native6 = require("react-native");
|
|
1188
1169
|
var SkeletonItem = () => {
|
|
1189
|
-
const opacity = (0,
|
|
1190
|
-
(0,
|
|
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__ */
|
|
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
|
|
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__ */
|
|
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/
|
|
1776
|
-
var
|
|
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] =
|
|
1793
|
-
const [error, setError] =
|
|
1794
|
-
const fetchLinkToken =
|
|
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
|
-
|
|
1933
|
+
import_react23.default.useEffect(() => {
|
|
1822
1934
|
fetchLinkToken();
|
|
1823
1935
|
}, [fetchLinkToken]);
|
|
1824
|
-
return /* @__PURE__ */
|
|
1825
|
-
|
|
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:
|
|
1941
|
+
style: styles13.spinner
|
|
1830
1942
|
}
|
|
1831
|
-
), /* @__PURE__ */
|
|
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:
|
|
1949
|
+
style: styles13.retryButton
|
|
1838
1950
|
},
|
|
1839
1951
|
"Retry"
|
|
1840
|
-
)))), /* @__PURE__ */
|
|
1952
|
+
)))), /* @__PURE__ */ import_react23.default.createElement(ModalFooter, { style: { paddingVertical: 0 } }, /* @__PURE__ */ import_react23.default.createElement(Footer, null)));
|
|
1841
1953
|
};
|
|
1842
|
-
var
|
|
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
|
|
1870
|
-
var
|
|
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
|
|
1874
|
-
var
|
|
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__ */
|
|
1880
|
-
|
|
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
|
|
1893
|
-
var
|
|
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__ */
|
|
1899
|
-
|
|
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__ */
|
|
1908
|
-
|
|
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
|
|
1921
|
-
var
|
|
1922
|
-
var
|
|
1923
|
-
var AnimatedSvg =
|
|
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 =
|
|
1929
|
-
|
|
1930
|
-
|
|
1931
|
-
|
|
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:
|
|
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__ */
|
|
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__ */
|
|
1953
|
-
|
|
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
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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
|
|
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
|
|
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__ */
|
|
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/
|
|
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
|
|
2057
|
-
|
|
2058
|
-
|
|
2059
|
-
|
|
2060
|
-
|
|
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
|
|
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 =
|
|
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__ */
|
|
2294
|
+
return /* @__PURE__ */ import_react31.default.createElement(import_react31.default.Fragment, null, children);
|
|
2178
2295
|
}
|
|
2179
|
-
return /* @__PURE__ */
|
|
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__ */
|
|
2197
|
-
|
|
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:
|
|
2321
|
+
style: styles14.backButton
|
|
2203
2322
|
},
|
|
2204
|
-
/* @__PURE__ */
|
|
2205
|
-
), /* @__PURE__ */
|
|
2206
|
-
|
|
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: [
|
|
2327
|
+
style: [styles14.emptyStateTitle, { color: theme.colors.text }]
|
|
2209
2328
|
},
|
|
2210
2329
|
"WalletConnect is not configured"
|
|
2211
|
-
), /* @__PURE__ */
|
|
2212
|
-
|
|
2330
|
+
), /* @__PURE__ */ import_react32.default.createElement(
|
|
2331
|
+
import_react_native16.Text,
|
|
2213
2332
|
{
|
|
2214
2333
|
style: [
|
|
2215
|
-
|
|
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__ */
|
|
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:
|
|
2345
|
+
style: styles14.emptyStateButton
|
|
2227
2346
|
},
|
|
2228
2347
|
"Go back"
|
|
2229
2348
|
))));
|
|
2230
2349
|
}
|
|
2231
|
-
return /* @__PURE__ */
|
|
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,
|
|
2257
|
-
const [errorMessage, setErrorMessage] = (0,
|
|
2258
|
-
const [chainErrors, setChainErrors] = (0,
|
|
2259
|
-
const [isLoading, setIsLoading] = (0,
|
|
2260
|
-
const [userUsedChains, setUserUsedChains] = (0,
|
|
2261
|
-
const [isFetchingChains, setIsFetchingChains] = (0,
|
|
2262
|
-
const availableChains = (0,
|
|
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,
|
|
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
|
-
|
|
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
|
-
|
|
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 || "
|
|
2512
|
+
userId: user?.user_id || "",
|
|
2364
2513
|
projectId: provider?.projectId,
|
|
2365
|
-
apiKey: "
|
|
2366
|
-
secret: "
|
|
2367
|
-
privateKey: "
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
2462
|
-
|
|
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:
|
|
2624
|
+
style: styles14.backButton
|
|
2471
2625
|
},
|
|
2472
|
-
/* @__PURE__ */
|
|
2473
|
-
), /* @__PURE__ */
|
|
2474
|
-
|
|
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:
|
|
2631
|
+
style: styles14.logo,
|
|
2478
2632
|
resizeMode: "contain"
|
|
2479
2633
|
}
|
|
2480
|
-
) : /* @__PURE__ */
|
|
2481
|
-
|
|
2634
|
+
) : /* @__PURE__ */ import_react32.default.createElement(
|
|
2635
|
+
import_react_native16.View,
|
|
2482
2636
|
{
|
|
2483
2637
|
style: [
|
|
2484
|
-
|
|
2638
|
+
styles14.logoPlaceholder,
|
|
2485
2639
|
{ backgroundColor: theme.colors.surface }
|
|
2486
2640
|
]
|
|
2487
2641
|
},
|
|
2488
|
-
/* @__PURE__ */
|
|
2489
|
-
), /* @__PURE__ */
|
|
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__ */
|
|
2498
|
-
|
|
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: [
|
|
2654
|
+
style: [styles14.connectedTitle, { color: theme.colors.text }]
|
|
2501
2655
|
},
|
|
2502
2656
|
"Wallet Connected"
|
|
2503
|
-
), /* @__PURE__ */
|
|
2504
|
-
|
|
2657
|
+
), /* @__PURE__ */ import_react32.default.createElement(
|
|
2658
|
+
import_react_native16.Text,
|
|
2505
2659
|
{
|
|
2506
|
-
style: [
|
|
2660
|
+
style: [styles14.connectedText, { color: theme.colors.text }]
|
|
2507
2661
|
},
|
|
2508
2662
|
"Address: ",
|
|
2509
2663
|
address
|
|
2510
|
-
), /* @__PURE__ */
|
|
2511
|
-
|
|
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: [
|
|
2667
|
+
style: [styles14.fetchingText, { color: theme.colors.text }]
|
|
2514
2668
|
},
|
|
2515
2669
|
"Fetching chains..."
|
|
2516
|
-
) : null), availableChains.length > 0 && address && /* @__PURE__ */
|
|
2517
|
-
|
|
2518
|
-
|
|
2519
|
-
|
|
2520
|
-
|
|
2521
|
-
|
|
2522
|
-
|
|
2523
|
-
|
|
2524
|
-
|
|
2525
|
-
|
|
2526
|
-
|
|
2527
|
-
|
|
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
|
-
|
|
2532
|
-
|
|
2533
|
-
|
|
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__ */
|
|
2536
|
-
|
|
2691
|
+
/* @__PURE__ */ import_react32.default.createElement(
|
|
2692
|
+
import_react_native16.Text,
|
|
2537
2693
|
{
|
|
2538
2694
|
style: [
|
|
2539
|
-
|
|
2695
|
+
styles14.chainName,
|
|
2540
2696
|
{
|
|
2541
|
-
|
|
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
|
-
|
|
2547
|
-
|
|
2548
|
-
|
|
2549
|
-
|
|
2550
|
-
|
|
2551
|
-
|
|
2552
|
-
|
|
2553
|
-
|
|
2554
|
-
|
|
2555
|
-
|
|
2556
|
-
|
|
2557
|
-
|
|
2558
|
-
|
|
2559
|
-
|
|
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
|
-
|
|
2574
|
-
|
|
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
|
-
|
|
2578
|
-
|
|
2729
|
+
styles14.chainChip,
|
|
2730
|
+
styles14.chainChipRemoveAll,
|
|
2731
|
+
{
|
|
2732
|
+
borderWidth: 0,
|
|
2733
|
+
backgroundColor: "transparent"
|
|
2734
|
+
}
|
|
2579
2735
|
]
|
|
2580
2736
|
},
|
|
2581
|
-
|
|
2582
|
-
|
|
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
|
-
|
|
2592
|
-
{ color: theme.colors.
|
|
2741
|
+
styles14.chainName,
|
|
2742
|
+
{ color: theme.colors.primary }
|
|
2593
2743
|
]
|
|
2594
2744
|
},
|
|
2595
|
-
"
|
|
2596
|
-
|
|
2597
|
-
|
|
2598
|
-
|
|
2599
|
-
|
|
2600
|
-
|
|
2601
|
-
|
|
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:
|
|
2784
|
+
style: styles14.button
|
|
2610
2785
|
},
|
|
2611
2786
|
selectedChains.size > 0 ? `Add ${selectedChains.size} Chain${selectedChains.size > 1 ? "s" : ""}` : "Add Integration"
|
|
2612
|
-
), /* @__PURE__ */
|
|
2787
|
+
), /* @__PURE__ */ import_react32.default.createElement(Footer, null)));
|
|
2613
2788
|
}
|
|
2614
|
-
var
|
|
2789
|
+
var styles14 = import_react_native16.StyleSheet.create({
|
|
2615
2790
|
connectedContainer: {
|
|
2616
|
-
|
|
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
|
|
2764
|
-
var
|
|
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] =
|
|
2776
|
-
const [isFetchingChains, setIsFetchingChains] =
|
|
2777
|
-
const [userUsedChains, setUserUsedChains] =
|
|
2778
|
-
const [selectedChains, setSelectedChains] =
|
|
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] =
|
|
3235
|
+
const [chainErrors, setChainErrors] = import_react34.default.useState(
|
|
2782
3236
|
{}
|
|
2783
3237
|
);
|
|
2784
|
-
const [errorMessage, setErrorMessage] =
|
|
2785
|
-
const [formValues, setFormValues] =
|
|
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] =
|
|
2793
|
-
|
|
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
|
|
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() || "
|
|
2881
|
-
secret: formValues.secret_key?.trim() || "
|
|
2882
|
-
accountName: formValues.account_name?.trim() || "
|
|
2883
|
-
address: formValues.address?.trim() || "
|
|
2884
|
-
password: formValues.password?.trim() || "
|
|
2885
|
-
userId: user?.user_id || "
|
|
2886
|
-
projectId: metadata?.projectId || "
|
|
2887
|
-
privateKey: "
|
|
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:
|
|
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
|
-
|
|
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?.
|
|
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() || "
|
|
2957
|
-
secret: formValues.secret_key?.trim() || "
|
|
2958
|
-
accountName: formValues.account_name?.trim() || "
|
|
2959
|
-
address: formValues.address?.trim() || "
|
|
2960
|
-
password: formValues.password?.trim() || "
|
|
2961
|
-
userId: user?.user_id || "
|
|
2962
|
-
projectId: metadata?.projectId || "
|
|
2963
|
-
privateKey: "
|
|
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:
|
|
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
|
-
|
|
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__ */
|
|
3038
|
-
|
|
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:
|
|
3490
|
+
style: styles16.logo,
|
|
3042
3491
|
resizeMode: "contain"
|
|
3043
3492
|
}
|
|
3044
|
-
) : /* @__PURE__ */
|
|
3045
|
-
|
|
3493
|
+
) : /* @__PURE__ */ import_react34.default.createElement(
|
|
3494
|
+
import_react_native18.View,
|
|
3046
3495
|
{
|
|
3047
3496
|
style: [
|
|
3048
|
-
|
|
3497
|
+
styles16.logoPlaceholder,
|
|
3049
3498
|
{ backgroundColor: theme.colors.surface }
|
|
3050
3499
|
]
|
|
3051
3500
|
},
|
|
3052
|
-
/* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
3067
|
-
const renderChainSelection = () => userUsedChains.length > 0 && formValues.address && /* @__PURE__ */
|
|
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__ */
|
|
3071
|
-
|
|
3519
|
+
return /* @__PURE__ */ import_react34.default.createElement(
|
|
3520
|
+
import_react_native18.TouchableOpacity,
|
|
3072
3521
|
{
|
|
3073
3522
|
onPress: () => toggleChainSelection(chain.id),
|
|
3074
|
-
style:
|
|
3523
|
+
style: styles16.chainButton,
|
|
3075
3524
|
key: chain.id
|
|
3076
3525
|
},
|
|
3077
|
-
/* @__PURE__ */
|
|
3078
|
-
|
|
3526
|
+
/* @__PURE__ */ import_react34.default.createElement(
|
|
3527
|
+
import_react_native18.View,
|
|
3079
3528
|
{
|
|
3080
3529
|
style: [
|
|
3081
|
-
|
|
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__ */
|
|
3089
|
-
|
|
3537
|
+
/* @__PURE__ */ import_react34.default.createElement(
|
|
3538
|
+
import_react_native18.Text,
|
|
3090
3539
|
{
|
|
3091
3540
|
style: [
|
|
3092
|
-
|
|
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__ */
|
|
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__ */
|
|
3555
|
+
) : /* @__PURE__ */ import_react34.default.createElement(PlusIcon, { size: 12, color: theme.colors.textSecondary })
|
|
3107
3556
|
)
|
|
3108
3557
|
);
|
|
3109
|
-
}))
|
|
3110
|
-
|
|
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: [
|
|
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__ */
|
|
3118
|
-
|
|
3593
|
+
return /* @__PURE__ */ import_react34.default.createElement(
|
|
3594
|
+
import_react_native18.Text,
|
|
3119
3595
|
{
|
|
3120
3596
|
key: chainId,
|
|
3121
|
-
style: [
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
3148
|
-
|
|
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:
|
|
3627
|
+
style: styles16.backButton
|
|
3152
3628
|
},
|
|
3153
|
-
/* @__PURE__ */
|
|
3154
|
-
), /* @__PURE__ */
|
|
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:
|
|
3645
|
+
style: styles16.button
|
|
3163
3646
|
},
|
|
3164
3647
|
addIntegrationLabel
|
|
3165
|
-
), /* @__PURE__ */
|
|
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
|
|
3179
|
-
|
|
3180
|
-
|
|
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:
|
|
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] =
|
|
3308
|
-
const [query, setQuery] =
|
|
3309
|
-
const [activeTab, setActiveTab] =
|
|
3310
|
-
const [supportedProviders, setSupportedProviders] =
|
|
3311
|
-
const [
|
|
3312
|
-
const [
|
|
3313
|
-
const [
|
|
3314
|
-
|
|
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
|
-
|
|
3837
|
+
import_react35.default.useEffect(() => {
|
|
3346
3838
|
if (linkToken) {
|
|
3347
3839
|
fetchSupportedProviders();
|
|
3348
3840
|
fetchExistingIntegrations();
|
|
3349
3841
|
}
|
|
3350
3842
|
}, [linkToken]);
|
|
3351
|
-
const isIntegrationAdded =
|
|
3843
|
+
const isIntegrationAdded = (0, import_react35.useCallback)(
|
|
3352
3844
|
(publicName) => {
|
|
3353
|
-
const integrations = [...
|
|
3845
|
+
const integrations = [...existingIntegrations];
|
|
3354
3846
|
return integrations.some(
|
|
3355
3847
|
(integration) => integration.public_name === publicName
|
|
3356
3848
|
);
|
|
3357
3849
|
},
|
|
3358
|
-
[
|
|
3850
|
+
[existingIntegrations]
|
|
3359
3851
|
);
|
|
3360
|
-
const getIntegrationCount =
|
|
3852
|
+
const getIntegrationCount = (0, import_react35.useCallback)(
|
|
3361
3853
|
(publicName) => {
|
|
3362
|
-
const integrations = [...
|
|
3854
|
+
const integrations = [...existingIntegrations];
|
|
3363
3855
|
return integrations.filter(
|
|
3364
3856
|
(integration) => integration.public_name === publicName
|
|
3365
3857
|
).length;
|
|
3366
3858
|
},
|
|
3367
|
-
[
|
|
3859
|
+
[existingIntegrations]
|
|
3368
3860
|
);
|
|
3369
|
-
const filteredResults =
|
|
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 = [...
|
|
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,
|
|
3397
|
-
|
|
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
|
|
3401
|
-
|
|
3402
|
-
|
|
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
|
|
3410
|
-
|
|
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
|
-
|
|
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__ */
|
|
3423
|
-
|
|
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:
|
|
3926
|
+
style: styles17.providerLogo,
|
|
3427
3927
|
resizeMode: "contain"
|
|
3428
3928
|
}
|
|
3429
|
-
) : /* @__PURE__ */
|
|
3430
|
-
|
|
3929
|
+
) : /* @__PURE__ */ import_react35.default.createElement(
|
|
3930
|
+
import_react_native19.View,
|
|
3431
3931
|
{
|
|
3432
3932
|
style: [
|
|
3433
|
-
|
|
3933
|
+
styles17.providerLogoPlaceholder,
|
|
3434
3934
|
{ backgroundColor: theme.colors.surfaceSecondary }
|
|
3435
3935
|
]
|
|
3436
3936
|
},
|
|
3437
|
-
/* @__PURE__ */
|
|
3438
|
-
), /* @__PURE__ */
|
|
3439
|
-
isIntegrationAdded(item?.public_name) && /* @__PURE__ */
|
|
3440
|
-
|
|
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
|
-
|
|
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__ */
|
|
3451
|
-
return /* @__PURE__ */
|
|
3452
|
-
|
|
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:
|
|
3955
|
+
style: styles17.backButton
|
|
3456
3956
|
},
|
|
3457
|
-
/* @__PURE__ */
|
|
3458
|
-
), /* @__PURE__ */
|
|
3459
|
-
|
|
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__ */
|
|
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:
|
|
3974
|
+
containerStyle: styles17.searchInput
|
|
3475
3975
|
}
|
|
3476
3976
|
),
|
|
3477
|
-
/* @__PURE__ */
|
|
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__ */
|
|
3483
|
-
|
|
3982
|
+
].map((tab) => /* @__PURE__ */ import_react35.default.createElement(
|
|
3983
|
+
import_react_native19.TouchableOpacity,
|
|
3484
3984
|
{
|
|
3485
3985
|
key: tab.value,
|
|
3486
3986
|
style: [
|
|
3487
|
-
|
|
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__ */
|
|
3500
|
-
|
|
3999
|
+
/* @__PURE__ */ import_react35.default.createElement(
|
|
4000
|
+
import_react_native19.Text,
|
|
3501
4001
|
{
|
|
3502
4002
|
style: [
|
|
3503
|
-
|
|
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__ */
|
|
3513
|
-
|
|
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:
|
|
4023
|
+
style: styles17.list,
|
|
3524
4024
|
contentContainerStyle: [
|
|
3525
|
-
|
|
4025
|
+
styles17.listContent,
|
|
3526
4026
|
{ paddingHorizontal: theme.spacing.xl }
|
|
3527
4027
|
],
|
|
3528
4028
|
showsVerticalScrollIndicator: false,
|
|
3529
|
-
ListEmptyComponent: /* @__PURE__ */
|
|
3530
|
-
|
|
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
|
-
|
|
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
|
-
),
|
|
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:
|
|
4046
|
+
onPress: handleContinue,
|
|
3546
4047
|
loading: isLoading,
|
|
3547
4048
|
disabled: isLoading,
|
|
3548
|
-
style:
|
|
4049
|
+
style: styles17.continueButton
|
|
3549
4050
|
},
|
|
3550
4051
|
"Continue"
|
|
3551
|
-
), /* @__PURE__ */
|
|
4052
|
+
), /* @__PURE__ */ import_react35.default.createElement(Footer, null))) : /* @__PURE__ */ import_react35.default.createElement(
|
|
3552
4053
|
IntegrationForm,
|
|
3553
4054
|
{
|
|
3554
4055
|
metadata: addIntegrationMode,
|
|
3555
|
-
onAddHandle: (
|
|
3556
|
-
|
|
3557
|
-
|
|
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
|
|
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:
|
|
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
|
|
3710
|
-
var
|
|
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] =
|
|
4220
|
+
const [otp, setOtp] = import_react36.default.useState("");
|
|
3718
4221
|
const { linkToken, clientId, email, setUser } = useKryptosConnect();
|
|
3719
|
-
const [isLoading, setIsLoading] =
|
|
3720
|
-
const [isResending, setIsResending] =
|
|
3721
|
-
const [resendCooldown, setResendCooldown] =
|
|
3722
|
-
const [errorMessage, setErrorMessage] =
|
|
3723
|
-
const [successMessage, setSuccessMessage] =
|
|
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
|
-
|
|
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__ */
|
|
3784
|
-
|
|
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: [
|
|
4289
|
+
style: [styles18.infoText, { color: theme.colors.textSecondary }]
|
|
3787
4290
|
},
|
|
3788
4291
|
"We have sent a verification code to"
|
|
3789
|
-
), /* @__PURE__ */
|
|
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__ */
|
|
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:
|
|
4307
|
+
style: styles18.button
|
|
3805
4308
|
},
|
|
3806
4309
|
"Continue"
|
|
3807
|
-
), /* @__PURE__ */
|
|
3808
|
-
|
|
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:
|
|
4315
|
+
style: styles18.resendContainer
|
|
3813
4316
|
},
|
|
3814
|
-
isResending ? /* @__PURE__ */
|
|
3815
|
-
|
|
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: [
|
|
4320
|
+
style: [styles18.resendText, { color: theme.colors.primary }]
|
|
3818
4321
|
},
|
|
3819
4322
|
" ",
|
|
3820
4323
|
"Sending..."
|
|
3821
|
-
)) : resendCooldown > 0 ? /* @__PURE__ */
|
|
3822
|
-
|
|
4324
|
+
)) : resendCooldown > 0 ? /* @__PURE__ */ import_react36.default.createElement(
|
|
4325
|
+
import_react_native20.Text,
|
|
3823
4326
|
{
|
|
3824
4327
|
style: [
|
|
3825
|
-
|
|
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__ */
|
|
3833
|
-
|
|
4335
|
+
) : /* @__PURE__ */ import_react36.default.createElement(
|
|
4336
|
+
import_react_native20.Text,
|
|
3834
4337
|
{
|
|
3835
|
-
style: [
|
|
4338
|
+
style: [styles18.resendText, { color: theme.colors.primary }]
|
|
3836
4339
|
},
|
|
3837
4340
|
"Resend OTP"
|
|
3838
4341
|
)
|
|
3839
|
-
))), /* @__PURE__ */
|
|
4342
|
+
))), /* @__PURE__ */ import_react36.default.createElement(ModalFooter, { style: { paddingVertical: 0 } }, /* @__PURE__ */ import_react36.default.createElement(Footer, null)));
|
|
3840
4343
|
};
|
|
3841
|
-
var
|
|
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
|
|
3901
|
-
var
|
|
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] =
|
|
3910
|
-
const [errorMessage, setErrorMessage] =
|
|
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__ */
|
|
3934
|
-
|
|
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: [
|
|
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__ */
|
|
3942
|
-
|
|
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: [
|
|
4447
|
+
style: [styles19.permissionText, { color: theme.colors.text }]
|
|
3945
4448
|
},
|
|
3946
4449
|
item
|
|
3947
|
-
)))), /* @__PURE__ */
|
|
3948
|
-
|
|
4450
|
+
)))), /* @__PURE__ */ import_react37.default.createElement(
|
|
4451
|
+
import_react_native21.View,
|
|
3949
4452
|
{
|
|
3950
4453
|
style: [
|
|
3951
|
-
|
|
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__ */
|
|
3959
|
-
|
|
4461
|
+
/* @__PURE__ */ import_react37.default.createElement(
|
|
4462
|
+
import_react_native21.Text,
|
|
3960
4463
|
{
|
|
3961
|
-
style: [
|
|
4464
|
+
style: [styles19.infoText, { color: theme.colors.textSecondary }]
|
|
3962
4465
|
},
|
|
3963
4466
|
"By selecting",
|
|
3964
4467
|
" ",
|
|
3965
|
-
/* @__PURE__ */
|
|
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__ */
|
|
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:
|
|
4479
|
+
style: styles19.button
|
|
3977
4480
|
},
|
|
3978
4481
|
"Allow"
|
|
3979
|
-
), /* @__PURE__ */
|
|
4482
|
+
), /* @__PURE__ */ import_react37.default.createElement(Footer, null)));
|
|
3980
4483
|
};
|
|
3981
|
-
var
|
|
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
|
|
4040
|
-
var
|
|
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__ */
|
|
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:
|
|
4566
|
+
style: styles20.button
|
|
4064
4567
|
},
|
|
4065
4568
|
status === "success" ? "Continue" : "Try again later"
|
|
4066
|
-
), /* @__PURE__ */
|
|
4569
|
+
), /* @__PURE__ */ import_react38.default.createElement(Footer, null)));
|
|
4067
4570
|
};
|
|
4068
|
-
var
|
|
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] =
|
|
4606
|
+
const [open, setOpen] = import_react39.default.useState(false);
|
|
4161
4607
|
const theme = useTheme();
|
|
4162
|
-
return /* @__PURE__ */
|
|
4163
|
-
|
|
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
|
-
|
|
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__ */
|
|
4182
|
-
|
|
4627
|
+
/* @__PURE__ */ import_react39.default.createElement(
|
|
4628
|
+
import_react_native23.Text,
|
|
4183
4629
|
{
|
|
4184
4630
|
style: [
|
|
4185
|
-
|
|
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
|
|
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] =
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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
|
|
4785
|
+
var styles21 = import_react_native23.StyleSheet.create({
|
|
4326
4786
|
defaultButton: {
|
|
4327
4787
|
flexDirection: "row",
|
|
4328
4788
|
alignItems: "center",
|