@kryptos_connect/mobile-sdk 1.0.4 → 1.0.6-dev.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.mts +9 -6
- package/dist/index.d.ts +9 -6
- package/dist/index.js +1098 -642
- package/dist/index.mjs +1094 -651
- 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 = () => {
|
|
@@ -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,48 @@ var WalletConnectComponent = ({
|
|
|
2188
2305
|
handleClose,
|
|
2189
2306
|
modalOpen,
|
|
2190
2307
|
setAddIntegrationMode,
|
|
2191
|
-
providersList
|
|
2308
|
+
providersList,
|
|
2309
|
+
errorMessage
|
|
2192
2310
|
}) => {
|
|
2193
2311
|
const { walletConnectProjectId } = useKryptosConnect();
|
|
2194
2312
|
const theme = useTheme();
|
|
2195
2313
|
if (!walletConnectProjectId) {
|
|
2196
|
-
return /* @__PURE__ */
|
|
2197
|
-
|
|
2314
|
+
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 }, /* @__PURE__ */ import_react32.default.createElement(
|
|
2315
|
+
import_react_native16.TouchableOpacity,
|
|
2198
2316
|
{
|
|
2199
2317
|
onPress: () => {
|
|
2200
2318
|
setAddIntegrationMode(null);
|
|
2201
2319
|
},
|
|
2202
|
-
style:
|
|
2320
|
+
style: styles14.backButton
|
|
2203
2321
|
},
|
|
2204
|
-
/* @__PURE__ */
|
|
2205
|
-
), /* @__PURE__ */
|
|
2206
|
-
|
|
2322
|
+
/* @__PURE__ */ import_react32.default.createElement(ArrowLeftIcon, { size: 20, color: theme.colors.text })
|
|
2323
|
+
), /* @__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(
|
|
2324
|
+
import_react_native16.Text,
|
|
2207
2325
|
{
|
|
2208
|
-
style: [
|
|
2326
|
+
style: [styles14.emptyStateTitle, { color: theme.colors.text }]
|
|
2209
2327
|
},
|
|
2210
2328
|
"WalletConnect is not configured"
|
|
2211
|
-
), /* @__PURE__ */
|
|
2212
|
-
|
|
2329
|
+
), /* @__PURE__ */ import_react32.default.createElement(
|
|
2330
|
+
import_react_native16.Text,
|
|
2213
2331
|
{
|
|
2214
2332
|
style: [
|
|
2215
|
-
|
|
2333
|
+
styles14.infoText,
|
|
2216
2334
|
{ color: theme.colors.textSecondary, textAlign: "center" }
|
|
2217
2335
|
]
|
|
2218
2336
|
},
|
|
2219
2337
|
"Please add a walletConnectProjectId to KryptosConnectProvider to enable wallet connections."
|
|
2220
|
-
), /* @__PURE__ */
|
|
2338
|
+
), /* @__PURE__ */ import_react32.default.createElement(
|
|
2221
2339
|
Button,
|
|
2222
2340
|
{
|
|
2223
2341
|
variant: "outline",
|
|
2224
2342
|
size: "sm",
|
|
2225
2343
|
onPress: () => setAddIntegrationMode(null),
|
|
2226
|
-
style:
|
|
2344
|
+
style: styles14.emptyStateButton
|
|
2227
2345
|
},
|
|
2228
2346
|
"Go back"
|
|
2229
2347
|
))));
|
|
2230
2348
|
}
|
|
2231
|
-
return /* @__PURE__ */
|
|
2349
|
+
return /* @__PURE__ */ import_react32.default.createElement(wallet_connect_default, null, /* @__PURE__ */ import_react32.default.createElement(
|
|
2232
2350
|
ConnectButton,
|
|
2233
2351
|
{
|
|
2234
2352
|
integration,
|
|
@@ -2237,7 +2355,8 @@ var WalletConnectComponent = ({
|
|
|
2237
2355
|
handleClose,
|
|
2238
2356
|
modalOpen,
|
|
2239
2357
|
setAddIntegrationMode,
|
|
2240
|
-
providersList
|
|
2358
|
+
providersList,
|
|
2359
|
+
errorMessage
|
|
2241
2360
|
}
|
|
2242
2361
|
));
|
|
2243
2362
|
};
|
|
@@ -2247,28 +2366,35 @@ function ConnectButton({
|
|
|
2247
2366
|
handleClose,
|
|
2248
2367
|
modalOpen,
|
|
2249
2368
|
setAddIntegrationMode,
|
|
2250
|
-
providersList
|
|
2369
|
+
providersList,
|
|
2370
|
+
errorMessage: errorMessageProp
|
|
2251
2371
|
}) {
|
|
2252
2372
|
const theme = useTheme();
|
|
2253
2373
|
const { open, disconnect } = (0, import_appkit_react_native3.useAppKit)();
|
|
2254
2374
|
const { address, isConnected } = (0, import_appkit_react_native3.useAccount)();
|
|
2255
2375
|
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,
|
|
2376
|
+
const [selectedChains, setSelectedChains] = (0, import_react32.useState)(/* @__PURE__ */ new Set());
|
|
2377
|
+
const [errorMessage, setErrorMessage] = (0, import_react32.useState)("");
|
|
2378
|
+
const [chainErrors, setChainErrors] = (0, import_react32.useState)({});
|
|
2379
|
+
const [isLoading, setIsLoading] = (0, import_react32.useState)(false);
|
|
2380
|
+
const [userUsedChains, setUserUsedChains] = (0, import_react32.useState)([]);
|
|
2381
|
+
const [isFetchingChains, setIsFetchingChains] = (0, import_react32.useState)(false);
|
|
2382
|
+
const availableChains = (0, import_react32.useMemo)(() => {
|
|
2263
2383
|
if (userUsedChains.length > 0) {
|
|
2264
2384
|
return userUsedChains;
|
|
2265
2385
|
}
|
|
2266
2386
|
if (integration.walletSupportedChains && integration.walletSupportedChains.length > 0) {
|
|
2267
|
-
return integration.walletSupportedChains
|
|
2387
|
+
return integration.walletSupportedChains.filter((supportedChain) => {
|
|
2388
|
+
const provider = providersList.find(
|
|
2389
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
2390
|
+
(p) => p.id === supportedChain.id
|
|
2391
|
+
);
|
|
2392
|
+
return provider && provider.is_working === true && provider.isEvmWallet === true;
|
|
2393
|
+
});
|
|
2268
2394
|
}
|
|
2269
2395
|
return [];
|
|
2270
|
-
}, [userUsedChains, integration.walletSupportedChains]);
|
|
2271
|
-
(0,
|
|
2396
|
+
}, [userUsedChains, integration.walletSupportedChains, providersList]);
|
|
2397
|
+
(0, import_react32.useEffect)(() => {
|
|
2272
2398
|
if (!isConnected || !address || !address.trim()) {
|
|
2273
2399
|
setUserUsedChains([]);
|
|
2274
2400
|
setSelectedChains(/* @__PURE__ */ new Set());
|
|
@@ -2287,7 +2413,16 @@ function ConnectButton({
|
|
|
2287
2413
|
}
|
|
2288
2414
|
}
|
|
2289
2415
|
if (chains.length === 0 && integration.walletSupportedChains && integration.walletSupportedChains.length > 0) {
|
|
2290
|
-
chains = integration.walletSupportedChains
|
|
2416
|
+
chains = integration.walletSupportedChains.filter(
|
|
2417
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
2418
|
+
(supportedChain) => {
|
|
2419
|
+
const provider = providersList.find(
|
|
2420
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
2421
|
+
(p) => p.id === supportedChain.id
|
|
2422
|
+
);
|
|
2423
|
+
return provider && provider.is_working === true && provider.isEvmWallet === true;
|
|
2424
|
+
}
|
|
2425
|
+
);
|
|
2291
2426
|
}
|
|
2292
2427
|
if (chains.length > 0) {
|
|
2293
2428
|
setUserUsedChains(chains);
|
|
@@ -2299,11 +2434,21 @@ function ConnectButton({
|
|
|
2299
2434
|
} catch (error) {
|
|
2300
2435
|
console.error("Failed to fetch user chains:", error);
|
|
2301
2436
|
if (integration.walletSupportedChains && integration.walletSupportedChains.length > 0) {
|
|
2302
|
-
|
|
2437
|
+
const validChains = integration.walletSupportedChains.filter(
|
|
2438
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
2439
|
+
(supportedChain) => {
|
|
2440
|
+
const provider = providersList.find(
|
|
2441
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
2442
|
+
(p) => p.id === supportedChain.id
|
|
2443
|
+
);
|
|
2444
|
+
return provider && provider.is_working === true && provider.isEvmWallet === true;
|
|
2445
|
+
}
|
|
2446
|
+
);
|
|
2447
|
+
setUserUsedChains(validChains);
|
|
2303
2448
|
setSelectedChains(
|
|
2304
2449
|
new Set(
|
|
2305
2450
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
2306
|
-
|
|
2451
|
+
validChains.map((chain) => chain.id)
|
|
2307
2452
|
)
|
|
2308
2453
|
);
|
|
2309
2454
|
} else {
|
|
@@ -2323,7 +2468,8 @@ function ConnectButton({
|
|
|
2323
2468
|
address,
|
|
2324
2469
|
isConnected,
|
|
2325
2470
|
integration.isEvmWallet,
|
|
2326
|
-
integration.walletSupportedChains
|
|
2471
|
+
integration.walletSupportedChains,
|
|
2472
|
+
providersList
|
|
2327
2473
|
]);
|
|
2328
2474
|
const validateForm = () => {
|
|
2329
2475
|
if (!address) {
|
|
@@ -2360,11 +2506,11 @@ function ConnectButton({
|
|
|
2360
2506
|
source: provider?.id,
|
|
2361
2507
|
credential: {
|
|
2362
2508
|
address,
|
|
2363
|
-
userId: user?.user_id || "
|
|
2509
|
+
userId: user?.user_id || "",
|
|
2364
2510
|
projectId: provider?.projectId,
|
|
2365
|
-
apiKey: "
|
|
2366
|
-
secret: "
|
|
2367
|
-
privateKey: "
|
|
2511
|
+
apiKey: "",
|
|
2512
|
+
secret: "",
|
|
2513
|
+
privateKey: "",
|
|
2368
2514
|
alias,
|
|
2369
2515
|
walletId,
|
|
2370
2516
|
exchange: provider?.id
|
|
@@ -2403,10 +2549,9 @@ function ConnectButton({
|
|
|
2403
2549
|
default_chain_logo: integration?.logo || "",
|
|
2404
2550
|
type: provider.type || "",
|
|
2405
2551
|
isNftSupported: provider?.isEvmWallet || provider?.nftSupport || false,
|
|
2552
|
+
isCustomWallet: false,
|
|
2406
2553
|
chainId: provider?.community_id,
|
|
2407
|
-
|
|
2408
|
-
address
|
|
2409
|
-
}
|
|
2554
|
+
address: address?.trim()
|
|
2410
2555
|
};
|
|
2411
2556
|
integrationsToAdd.push(data);
|
|
2412
2557
|
} else {
|
|
@@ -2425,7 +2570,7 @@ function ConnectButton({
|
|
|
2425
2570
|
return;
|
|
2426
2571
|
}
|
|
2427
2572
|
if (integrationsToAdd.length > 0) {
|
|
2428
|
-
onAddHandle(integrationsToAdd);
|
|
2573
|
+
await onAddHandle(integrationsToAdd);
|
|
2429
2574
|
if (isConnected) {
|
|
2430
2575
|
disconnect();
|
|
2431
2576
|
}
|
|
@@ -2438,7 +2583,7 @@ function ConnectButton({
|
|
|
2438
2583
|
const err = error;
|
|
2439
2584
|
console.error(error);
|
|
2440
2585
|
setErrorMessage(
|
|
2441
|
-
err?.response?.data?.message || "Failed to add
|
|
2586
|
+
err?.response?.data?.message || err?.response?.data?.error || "Failed to add integrations"
|
|
2442
2587
|
);
|
|
2443
2588
|
} finally {
|
|
2444
2589
|
setIsLoading(false);
|
|
@@ -2458,8 +2603,14 @@ function ConnectButton({
|
|
|
2458
2603
|
setChainErrors(newErrors);
|
|
2459
2604
|
}
|
|
2460
2605
|
};
|
|
2461
|
-
|
|
2462
|
-
|
|
2606
|
+
const onClose = () => {
|
|
2607
|
+
if (isConnected) {
|
|
2608
|
+
disconnect();
|
|
2609
|
+
}
|
|
2610
|
+
handleClose();
|
|
2611
|
+
};
|
|
2612
|
+
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 }, /* @__PURE__ */ import_react32.default.createElement(
|
|
2613
|
+
import_react_native16.TouchableOpacity,
|
|
2463
2614
|
{
|
|
2464
2615
|
onPress: () => {
|
|
2465
2616
|
setAddIntegrationMode(null);
|
|
@@ -2467,26 +2618,26 @@ function ConnectButton({
|
|
|
2467
2618
|
disconnect();
|
|
2468
2619
|
}
|
|
2469
2620
|
},
|
|
2470
|
-
style:
|
|
2621
|
+
style: styles14.backButton
|
|
2471
2622
|
},
|
|
2472
|
-
/* @__PURE__ */
|
|
2473
|
-
), /* @__PURE__ */
|
|
2474
|
-
|
|
2623
|
+
/* @__PURE__ */ import_react32.default.createElement(ArrowLeftIcon, { size: 20, color: theme.colors.text })
|
|
2624
|
+
), /* @__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(
|
|
2625
|
+
import_react_native16.Image,
|
|
2475
2626
|
{
|
|
2476
2627
|
source: { uri: integration.logo },
|
|
2477
|
-
style:
|
|
2628
|
+
style: styles14.logo,
|
|
2478
2629
|
resizeMode: "contain"
|
|
2479
2630
|
}
|
|
2480
|
-
) : /* @__PURE__ */
|
|
2481
|
-
|
|
2631
|
+
) : /* @__PURE__ */ import_react32.default.createElement(
|
|
2632
|
+
import_react_native16.View,
|
|
2482
2633
|
{
|
|
2483
2634
|
style: [
|
|
2484
|
-
|
|
2635
|
+
styles14.logoPlaceholder,
|
|
2485
2636
|
{ backgroundColor: theme.colors.surface }
|
|
2486
2637
|
]
|
|
2487
2638
|
},
|
|
2488
|
-
/* @__PURE__ */
|
|
2489
|
-
), /* @__PURE__ */
|
|
2639
|
+
/* @__PURE__ */ import_react32.default.createElement(import_react_native16.Text, { style: { color: theme.colors.text } }, integration.name?.charAt(0) || "?")
|
|
2640
|
+
), /* @__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
2641
|
Button,
|
|
2491
2642
|
{
|
|
2492
2643
|
variant: "primary",
|
|
@@ -2494,111 +2645,132 @@ function ConnectButton({
|
|
|
2494
2645
|
onPress: () => open({ view: "Connect" })
|
|
2495
2646
|
},
|
|
2496
2647
|
"Connect Wallet"
|
|
2497
|
-
)) : /* @__PURE__ */
|
|
2498
|
-
|
|
2648
|
+
)) : /* @__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(
|
|
2649
|
+
import_react_native16.Text,
|
|
2499
2650
|
{
|
|
2500
|
-
style: [
|
|
2651
|
+
style: [styles14.connectedTitle, { color: theme.colors.text }]
|
|
2501
2652
|
},
|
|
2502
2653
|
"Wallet Connected"
|
|
2503
|
-
), /* @__PURE__ */
|
|
2504
|
-
|
|
2654
|
+
), /* @__PURE__ */ import_react32.default.createElement(
|
|
2655
|
+
import_react_native16.Text,
|
|
2505
2656
|
{
|
|
2506
|
-
style: [
|
|
2657
|
+
style: [styles14.connectedText, { color: theme.colors.text }]
|
|
2507
2658
|
},
|
|
2508
2659
|
"Address: ",
|
|
2509
2660
|
address
|
|
2510
|
-
), /* @__PURE__ */
|
|
2511
|
-
|
|
2661
|
+
), /* @__PURE__ */ import_react32.default.createElement(Button, { variant: "ghost", size: "sm", onPress: () => disconnect() }, "Disconnect Wallet"), isFetchingChains ? /* @__PURE__ */ import_react32.default.createElement(
|
|
2662
|
+
import_react_native16.Text,
|
|
2512
2663
|
{
|
|
2513
|
-
style: [
|
|
2664
|
+
style: [styles14.fetchingText, { color: theme.colors.text }]
|
|
2514
2665
|
},
|
|
2515
2666
|
"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,
|
|
2667
|
+
) : 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) => {
|
|
2668
|
+
const isSelected = selectedChains.has(chain.id);
|
|
2669
|
+
const hasError = chainErrors[chain.id];
|
|
2670
|
+
return /* @__PURE__ */ import_react32.default.createElement(
|
|
2671
|
+
import_react_native16.TouchableOpacity,
|
|
2672
|
+
{
|
|
2673
|
+
onPress: () => toggleChainSelection(chain.id),
|
|
2674
|
+
style: styles14.chainButton,
|
|
2675
|
+
key: chain.id
|
|
2676
|
+
},
|
|
2677
|
+
/* @__PURE__ */ import_react32.default.createElement(
|
|
2678
|
+
import_react_native16.View,
|
|
2530
2679
|
{
|
|
2531
|
-
|
|
2532
|
-
|
|
2533
|
-
|
|
2680
|
+
style: [
|
|
2681
|
+
styles14.chainChip,
|
|
2682
|
+
{
|
|
2683
|
+
backgroundColor: hasError ? theme.colors.errorLight : isSelected ? theme.colors.primary + "20" : theme.colors.surface,
|
|
2684
|
+
borderColor: hasError ? theme.colors.error : isSelected ? theme.colors.primary : theme.colors.border
|
|
2685
|
+
}
|
|
2686
|
+
]
|
|
2534
2687
|
},
|
|
2535
|
-
/* @__PURE__ */
|
|
2536
|
-
|
|
2688
|
+
/* @__PURE__ */ import_react32.default.createElement(
|
|
2689
|
+
import_react_native16.Text,
|
|
2537
2690
|
{
|
|
2538
2691
|
style: [
|
|
2539
|
-
|
|
2692
|
+
styles14.chainName,
|
|
2540
2693
|
{
|
|
2541
|
-
|
|
2542
|
-
borderColor: hasError ? theme.colors.error : isSelected ? theme.colors.primary : theme.colors.border
|
|
2694
|
+
color: hasError ? theme.colors.error : isSelected ? theme.colors.primary : theme.colors.text
|
|
2543
2695
|
}
|
|
2544
2696
|
]
|
|
2545
2697
|
},
|
|
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
|
-
)
|
|
2698
|
+
chain.name || chain?.id
|
|
2699
|
+
),
|
|
2700
|
+
isSelected ? /* @__PURE__ */ import_react32.default.createElement(
|
|
2701
|
+
CloseIcon,
|
|
2702
|
+
{
|
|
2703
|
+
size: 12,
|
|
2704
|
+
color: hasError ? theme.colors.error : theme.colors.primary
|
|
2705
|
+
}
|
|
2706
|
+
) : /* @__PURE__ */ import_react32.default.createElement(
|
|
2707
|
+
PlusIcon,
|
|
2708
|
+
{
|
|
2709
|
+
size: 12,
|
|
2710
|
+
color: theme.colors.textSecondary
|
|
2711
|
+
}
|
|
2571
2712
|
)
|
|
2572
|
-
)
|
|
2573
|
-
|
|
2574
|
-
|
|
2713
|
+
)
|
|
2714
|
+
);
|
|
2715
|
+
})), selectedChains.size > 0 && availableChains.length > 0 && /* @__PURE__ */ import_react32.default.createElement(
|
|
2716
|
+
import_react_native16.TouchableOpacity,
|
|
2717
|
+
{
|
|
2718
|
+
onPress: () => setSelectedChains(/* @__PURE__ */ new Set()),
|
|
2719
|
+
style: styles14.chainButton,
|
|
2720
|
+
activeOpacity: 0.7
|
|
2721
|
+
},
|
|
2722
|
+
/* @__PURE__ */ import_react32.default.createElement(
|
|
2723
|
+
import_react_native16.View,
|
|
2575
2724
|
{
|
|
2576
2725
|
style: [
|
|
2577
|
-
|
|
2578
|
-
|
|
2726
|
+
styles14.chainChip,
|
|
2727
|
+
styles14.chainChipRemoveAll,
|
|
2728
|
+
{
|
|
2729
|
+
borderWidth: 0,
|
|
2730
|
+
backgroundColor: "transparent"
|
|
2731
|
+
}
|
|
2579
2732
|
]
|
|
2580
2733
|
},
|
|
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,
|
|
2734
|
+
/* @__PURE__ */ import_react32.default.createElement(
|
|
2735
|
+
import_react_native16.Text,
|
|
2588
2736
|
{
|
|
2589
|
-
key: chainId,
|
|
2590
2737
|
style: [
|
|
2591
|
-
|
|
2592
|
-
{ color: theme.colors.
|
|
2738
|
+
styles14.chainName,
|
|
2739
|
+
{ color: theme.colors.primary }
|
|
2593
2740
|
]
|
|
2594
2741
|
},
|
|
2595
|
-
"
|
|
2596
|
-
|
|
2597
|
-
|
|
2598
|
-
|
|
2599
|
-
|
|
2600
|
-
|
|
2601
|
-
|
|
2742
|
+
"Remove All Chains"
|
|
2743
|
+
),
|
|
2744
|
+
/* @__PURE__ */ import_react32.default.createElement(CloseIcon, { size: 12, color: theme.colors.primary })
|
|
2745
|
+
)
|
|
2746
|
+
), Object.keys(chainErrors || {}).length > 0 && /* @__PURE__ */ import_react32.default.createElement(import_react_native16.View, { style: styles14.chainErrorsContainer }, /* @__PURE__ */ import_react32.default.createElement(
|
|
2747
|
+
import_react_native16.Text,
|
|
2748
|
+
{
|
|
2749
|
+
style: [
|
|
2750
|
+
styles14.chainErrorsTitle,
|
|
2751
|
+
{ color: theme.colors.error }
|
|
2752
|
+
]
|
|
2753
|
+
},
|
|
2754
|
+
"Errors:"
|
|
2755
|
+
), Object.entries(chainErrors).map(([chainId, error]) => {
|
|
2756
|
+
const chain = availableChains.find(
|
|
2757
|
+
(c) => c.id === chainId
|
|
2758
|
+
);
|
|
2759
|
+
return /* @__PURE__ */ import_react32.default.createElement(
|
|
2760
|
+
import_react_native16.Text,
|
|
2761
|
+
{
|
|
2762
|
+
key: chainId,
|
|
2763
|
+
style: [
|
|
2764
|
+
styles14.chainErrorItem,
|
|
2765
|
+
{ color: theme.colors.error }
|
|
2766
|
+
]
|
|
2767
|
+
},
|
|
2768
|
+
"\u2022 ",
|
|
2769
|
+
chain?.name ?? chainId,
|
|
2770
|
+
": ",
|
|
2771
|
+
String(error)
|
|
2772
|
+
);
|
|
2773
|
+
})))), 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
2774
|
Button,
|
|
2603
2775
|
{
|
|
2604
2776
|
variant: "outline",
|
|
@@ -2606,14 +2778,20 @@ function ConnectButton({
|
|
|
2606
2778
|
onPress: onSubmitWalletConnect,
|
|
2607
2779
|
loading: isLoading,
|
|
2608
2780
|
disabled: isLoading || !!address && availableChains.length > 0 && selectedChains.size === 0,
|
|
2609
|
-
style:
|
|
2781
|
+
style: styles14.button
|
|
2610
2782
|
},
|
|
2611
2783
|
selectedChains.size > 0 ? `Add ${selectedChains.size} Chain${selectedChains.size > 1 ? "s" : ""}` : "Add Integration"
|
|
2612
|
-
), /* @__PURE__ */
|
|
2784
|
+
), /* @__PURE__ */ import_react32.default.createElement(Footer, null)));
|
|
2613
2785
|
}
|
|
2614
|
-
var
|
|
2786
|
+
var styles14 = import_react_native16.StyleSheet.create({
|
|
2615
2787
|
connectedContainer: {
|
|
2616
|
-
|
|
2788
|
+
flexShrink: 0
|
|
2789
|
+
},
|
|
2790
|
+
chainListWrapper: {
|
|
2791
|
+
marginTop: 8
|
|
2792
|
+
},
|
|
2793
|
+
chainListContent: {
|
|
2794
|
+
paddingBottom: 8
|
|
2617
2795
|
},
|
|
2618
2796
|
connectedHeader: {
|
|
2619
2797
|
marginBottom: 8
|
|
@@ -2627,13 +2805,6 @@ var styles13 = import_react_native15.StyleSheet.create({
|
|
|
2627
2805
|
marginBottom: 8,
|
|
2628
2806
|
textAlign: "center"
|
|
2629
2807
|
},
|
|
2630
|
-
scrollView: {
|
|
2631
|
-
flex: 1
|
|
2632
|
-
},
|
|
2633
|
-
scrollViewContent: {
|
|
2634
|
-
paddingBottom: 40,
|
|
2635
|
-
flexGrow: 1
|
|
2636
|
-
},
|
|
2637
2808
|
errorMessageContainer: {
|
|
2638
2809
|
marginTop: 16
|
|
2639
2810
|
},
|
|
@@ -2657,10 +2828,8 @@ var styles13 = import_react_native15.StyleSheet.create({
|
|
|
2657
2828
|
// theme.spacing.xl
|
|
2658
2829
|
paddingBottom: 20,
|
|
2659
2830
|
width: "100%",
|
|
2660
|
-
overflow: "hidden",
|
|
2661
2831
|
alignSelf: "center",
|
|
2662
|
-
flexDirection: "column"
|
|
2663
|
-
flex: 1
|
|
2832
|
+
flexDirection: "column"
|
|
2664
2833
|
},
|
|
2665
2834
|
chainTitle: {
|
|
2666
2835
|
fontSize: 14,
|
|
@@ -2686,6 +2855,11 @@ var styles13 = import_react_native15.StyleSheet.create({
|
|
|
2686
2855
|
// theme.borderRadius.md
|
|
2687
2856
|
borderWidth: 1
|
|
2688
2857
|
},
|
|
2858
|
+
chainChipRemoveAll: {
|
|
2859
|
+
marginTop: 6,
|
|
2860
|
+
// theme.spacing.sm - separate from chain list
|
|
2861
|
+
width: "auto"
|
|
2862
|
+
},
|
|
2689
2863
|
chainName: {
|
|
2690
2864
|
fontSize: 12,
|
|
2691
2865
|
fontWeight: "500",
|
|
@@ -2760,37 +2934,314 @@ var styles13 = import_react_native15.StyleSheet.create({
|
|
|
2760
2934
|
});
|
|
2761
2935
|
|
|
2762
2936
|
// src/molecules/IntegrationForm.tsx
|
|
2763
|
-
var
|
|
2764
|
-
var
|
|
2937
|
+
var import_react34 = __toESM(require("react"));
|
|
2938
|
+
var import_react_native18 = require("react-native");
|
|
2939
|
+
|
|
2940
|
+
// src/molecules/IntegrationInfo.tsx
|
|
2941
|
+
var import_react33 = __toESM(require("react"));
|
|
2942
|
+
var import_react_native17 = require("react-native");
|
|
2943
|
+
var ChevronDown = ({ isOpen, color }) => /* @__PURE__ */ import_react33.default.createElement(import_react_native17.Text, { style: [styles15.chevron, { color }] }, isOpen ? "\u25BC" : "\u25B6");
|
|
2944
|
+
var IntegrationInfo = ({
|
|
2945
|
+
content,
|
|
2946
|
+
type,
|
|
2947
|
+
import_guide
|
|
2948
|
+
}) => {
|
|
2949
|
+
const theme = useTheme();
|
|
2950
|
+
const instructionsData = (0, import_react33.useMemo)(
|
|
2951
|
+
() => content?.instructions?.[type] || null,
|
|
2952
|
+
[content, type]
|
|
2953
|
+
);
|
|
2954
|
+
const featuresData = (0, import_react33.useMemo)(
|
|
2955
|
+
() => content?.features?.[type] || [],
|
|
2956
|
+
[content, type]
|
|
2957
|
+
);
|
|
2958
|
+
const gtkData = (0, import_react33.useMemo)(() => content?.gtk?.[type] || [], [content, type]);
|
|
2959
|
+
const hasInstructions = instructionsData && (instructionsData?.content?.length ?? 0) > 0;
|
|
2960
|
+
const hasFeatures = (featuresData?.length ?? 0) > 0;
|
|
2961
|
+
const hasGtk = (gtkData?.length ?? 0) > 0;
|
|
2962
|
+
const defaultSection = hasInstructions ? "instructions" : hasGtk ? "good-to-know" : hasFeatures ? "supported-features" : null;
|
|
2963
|
+
const [openSection, setOpenSection] = (0, import_react33.useState)(defaultSection);
|
|
2964
|
+
const toggleSection = (value) => {
|
|
2965
|
+
setOpenSection((prev) => prev === value ? null : value);
|
|
2966
|
+
};
|
|
2967
|
+
const handleImportGuidePress = () => {
|
|
2968
|
+
if (import_guide) import_react_native17.Linking.openURL(import_guide);
|
|
2969
|
+
};
|
|
2970
|
+
if (!hasInstructions && !hasFeatures && !hasGtk && !import_guide) {
|
|
2971
|
+
return null;
|
|
2972
|
+
}
|
|
2973
|
+
return /* @__PURE__ */ import_react33.default.createElement(import_react_native17.View, { style: styles15.container }, import_guide && /* @__PURE__ */ import_react33.default.createElement(
|
|
2974
|
+
import_react_native17.TouchableOpacity,
|
|
2975
|
+
{
|
|
2976
|
+
onPress: handleImportGuidePress,
|
|
2977
|
+
style: [styles15.importGuide, { borderColor: theme.colors.primary }],
|
|
2978
|
+
activeOpacity: 0.7
|
|
2979
|
+
},
|
|
2980
|
+
/* @__PURE__ */ import_react33.default.createElement(
|
|
2981
|
+
import_react_native17.Text,
|
|
2982
|
+
{
|
|
2983
|
+
style: [styles15.importGuideText, { color: theme.colors.primary }]
|
|
2984
|
+
},
|
|
2985
|
+
"Import Guide"
|
|
2986
|
+
),
|
|
2987
|
+
/* @__PURE__ */ import_react33.default.createElement(RedirectIcon, { width: 14, height: 14, color: theme.colors.primary })
|
|
2988
|
+
), hasInstructions && /* @__PURE__ */ import_react33.default.createElement(import_react_native17.View, { style: styles15.accordionItem }, /* @__PURE__ */ import_react33.default.createElement(
|
|
2989
|
+
import_react_native17.TouchableOpacity,
|
|
2990
|
+
{
|
|
2991
|
+
onPress: () => toggleSection("instructions"),
|
|
2992
|
+
style: [
|
|
2993
|
+
styles15.trigger,
|
|
2994
|
+
{
|
|
2995
|
+
borderBottomColor: theme.colors.border,
|
|
2996
|
+
backgroundColor: theme.colors.surface
|
|
2997
|
+
}
|
|
2998
|
+
],
|
|
2999
|
+
activeOpacity: 0.7
|
|
3000
|
+
},
|
|
3001
|
+
/* @__PURE__ */ import_react33.default.createElement(import_react_native17.Text, { style: [styles15.triggerText, { color: theme.colors.text }] }, "Instructions"),
|
|
3002
|
+
/* @__PURE__ */ import_react33.default.createElement(
|
|
3003
|
+
ChevronDown,
|
|
3004
|
+
{
|
|
3005
|
+
isOpen: openSection === "instructions",
|
|
3006
|
+
color: theme.colors.textSecondary
|
|
3007
|
+
}
|
|
3008
|
+
)
|
|
3009
|
+
), openSection === "instructions" && /* @__PURE__ */ import_react33.default.createElement(
|
|
3010
|
+
import_react_native17.View,
|
|
3011
|
+
{
|
|
3012
|
+
style: [
|
|
3013
|
+
styles15.content,
|
|
3014
|
+
{
|
|
3015
|
+
backgroundColor: theme.colors.background,
|
|
3016
|
+
borderBottomColor: theme.colors.border
|
|
3017
|
+
}
|
|
3018
|
+
]
|
|
3019
|
+
},
|
|
3020
|
+
instructionsData?.content && /* @__PURE__ */ import_react33.default.createElement(import_react_native17.View, { style: styles15.list }, instructionsData.content.map(
|
|
3021
|
+
(step, index) => /* @__PURE__ */ import_react33.default.createElement(
|
|
3022
|
+
import_react_native17.Text,
|
|
3023
|
+
{
|
|
3024
|
+
key: index,
|
|
3025
|
+
style: [
|
|
3026
|
+
styles15.listItem,
|
|
3027
|
+
styles15.orderedItem,
|
|
3028
|
+
{ color: theme.colors.textSecondary }
|
|
3029
|
+
]
|
|
3030
|
+
},
|
|
3031
|
+
index + 1,
|
|
3032
|
+
". ",
|
|
3033
|
+
step
|
|
3034
|
+
)
|
|
3035
|
+
)),
|
|
3036
|
+
instructionsData?.videoLink && /* @__PURE__ */ import_react33.default.createElement(
|
|
3037
|
+
import_react_native17.TouchableOpacity,
|
|
3038
|
+
{
|
|
3039
|
+
onPress: () => import_react_native17.Linking.openURL(instructionsData.videoLink),
|
|
3040
|
+
style: styles15.videoLink,
|
|
3041
|
+
activeOpacity: 0.7
|
|
3042
|
+
},
|
|
3043
|
+
/* @__PURE__ */ import_react33.default.createElement(
|
|
3044
|
+
import_react_native17.Text,
|
|
3045
|
+
{
|
|
3046
|
+
style: [
|
|
3047
|
+
styles15.videoLinkText,
|
|
3048
|
+
{ color: theme.colors.primary }
|
|
3049
|
+
]
|
|
3050
|
+
},
|
|
3051
|
+
"\u25B6 Watch Video Tutorial"
|
|
3052
|
+
)
|
|
3053
|
+
)
|
|
3054
|
+
)), hasGtk && /* @__PURE__ */ import_react33.default.createElement(import_react_native17.View, { style: styles15.accordionItem }, /* @__PURE__ */ import_react33.default.createElement(
|
|
3055
|
+
import_react_native17.TouchableOpacity,
|
|
3056
|
+
{
|
|
3057
|
+
onPress: () => toggleSection("good-to-know"),
|
|
3058
|
+
style: [
|
|
3059
|
+
styles15.trigger,
|
|
3060
|
+
{
|
|
3061
|
+
borderBottomColor: theme.colors.border,
|
|
3062
|
+
backgroundColor: theme.colors.surface
|
|
3063
|
+
}
|
|
3064
|
+
],
|
|
3065
|
+
activeOpacity: 0.7
|
|
3066
|
+
},
|
|
3067
|
+
/* @__PURE__ */ import_react33.default.createElement(import_react_native17.Text, { style: [styles15.triggerText, { color: theme.colors.text }] }, "Good to know"),
|
|
3068
|
+
/* @__PURE__ */ import_react33.default.createElement(
|
|
3069
|
+
ChevronDown,
|
|
3070
|
+
{
|
|
3071
|
+
isOpen: openSection === "good-to-know",
|
|
3072
|
+
color: theme.colors.textSecondary
|
|
3073
|
+
}
|
|
3074
|
+
)
|
|
3075
|
+
), openSection === "good-to-know" && /* @__PURE__ */ import_react33.default.createElement(
|
|
3076
|
+
import_react_native17.View,
|
|
3077
|
+
{
|
|
3078
|
+
style: [
|
|
3079
|
+
styles15.content,
|
|
3080
|
+
{
|
|
3081
|
+
backgroundColor: theme.colors.background,
|
|
3082
|
+
borderBottomColor: theme.colors.border
|
|
3083
|
+
}
|
|
3084
|
+
]
|
|
3085
|
+
},
|
|
3086
|
+
/* @__PURE__ */ import_react33.default.createElement(import_react_native17.View, { style: styles15.list }, gtkData.map((item, index) => /* @__PURE__ */ import_react33.default.createElement(
|
|
3087
|
+
import_react_native17.Text,
|
|
3088
|
+
{
|
|
3089
|
+
key: index,
|
|
3090
|
+
style: [
|
|
3091
|
+
styles15.listItem,
|
|
3092
|
+
styles15.bulletItem,
|
|
3093
|
+
{ color: theme.colors.textSecondary }
|
|
3094
|
+
]
|
|
3095
|
+
},
|
|
3096
|
+
"\u2022 ",
|
|
3097
|
+
item
|
|
3098
|
+
)))
|
|
3099
|
+
)), hasFeatures && /* @__PURE__ */ import_react33.default.createElement(import_react_native17.View, { style: styles15.accordionItem }, /* @__PURE__ */ import_react33.default.createElement(
|
|
3100
|
+
import_react_native17.TouchableOpacity,
|
|
3101
|
+
{
|
|
3102
|
+
onPress: () => toggleSection("supported-features"),
|
|
3103
|
+
style: [
|
|
3104
|
+
styles15.trigger,
|
|
3105
|
+
{
|
|
3106
|
+
borderBottomColor: theme.colors.border,
|
|
3107
|
+
backgroundColor: theme.colors.surface
|
|
3108
|
+
}
|
|
3109
|
+
],
|
|
3110
|
+
activeOpacity: 0.7
|
|
3111
|
+
},
|
|
3112
|
+
/* @__PURE__ */ import_react33.default.createElement(import_react_native17.Text, { style: [styles15.triggerText, { color: theme.colors.text }] }, "Supported Features"),
|
|
3113
|
+
/* @__PURE__ */ import_react33.default.createElement(
|
|
3114
|
+
ChevronDown,
|
|
3115
|
+
{
|
|
3116
|
+
isOpen: openSection === "supported-features",
|
|
3117
|
+
color: theme.colors.textSecondary
|
|
3118
|
+
}
|
|
3119
|
+
)
|
|
3120
|
+
), openSection === "supported-features" && /* @__PURE__ */ import_react33.default.createElement(
|
|
3121
|
+
import_react_native17.View,
|
|
3122
|
+
{
|
|
3123
|
+
style: [
|
|
3124
|
+
styles15.content,
|
|
3125
|
+
{
|
|
3126
|
+
backgroundColor: theme.colors.background,
|
|
3127
|
+
borderBottomColor: theme.colors.border
|
|
3128
|
+
}
|
|
3129
|
+
]
|
|
3130
|
+
},
|
|
3131
|
+
/* @__PURE__ */ import_react33.default.createElement(import_react_native17.View, { style: styles15.list }, featuresData.map((feature, index) => /* @__PURE__ */ import_react33.default.createElement(
|
|
3132
|
+
import_react_native17.Text,
|
|
3133
|
+
{
|
|
3134
|
+
key: index,
|
|
3135
|
+
style: [
|
|
3136
|
+
styles15.listItem,
|
|
3137
|
+
styles15.bulletItem,
|
|
3138
|
+
{ color: theme.colors.textSecondary }
|
|
3139
|
+
]
|
|
3140
|
+
},
|
|
3141
|
+
"\u2022 ",
|
|
3142
|
+
feature
|
|
3143
|
+
)))
|
|
3144
|
+
)));
|
|
3145
|
+
};
|
|
3146
|
+
var styles15 = import_react_native17.StyleSheet.create({
|
|
3147
|
+
container: {
|
|
3148
|
+
marginTop: 8
|
|
3149
|
+
},
|
|
3150
|
+
importGuide: {
|
|
3151
|
+
flexDirection: "row",
|
|
3152
|
+
alignItems: "center",
|
|
3153
|
+
alignSelf: "flex-end",
|
|
3154
|
+
gap: 4,
|
|
3155
|
+
paddingVertical: 6,
|
|
3156
|
+
paddingHorizontal: 8,
|
|
3157
|
+
marginBottom: 8
|
|
3158
|
+
},
|
|
3159
|
+
importGuideText: {
|
|
3160
|
+
fontSize: 14,
|
|
3161
|
+
fontWeight: "500"
|
|
3162
|
+
},
|
|
3163
|
+
accordionItem: {
|
|
3164
|
+
marginBottom: 4,
|
|
3165
|
+
borderRadius: 8,
|
|
3166
|
+
overflow: "hidden"
|
|
3167
|
+
},
|
|
3168
|
+
trigger: {
|
|
3169
|
+
flexDirection: "row",
|
|
3170
|
+
alignItems: "center",
|
|
3171
|
+
justifyContent: "space-between",
|
|
3172
|
+
paddingVertical: 12,
|
|
3173
|
+
paddingHorizontal: 16,
|
|
3174
|
+
borderBottomWidth: 1
|
|
3175
|
+
},
|
|
3176
|
+
triggerText: {
|
|
3177
|
+
fontSize: 14,
|
|
3178
|
+
fontWeight: "600"
|
|
3179
|
+
},
|
|
3180
|
+
chevron: {
|
|
3181
|
+
fontSize: 12
|
|
3182
|
+
},
|
|
3183
|
+
content: {
|
|
3184
|
+
paddingVertical: 12,
|
|
3185
|
+
paddingHorizontal: 16,
|
|
3186
|
+
borderBottomWidth: 1
|
|
3187
|
+
},
|
|
3188
|
+
list: {
|
|
3189
|
+
paddingLeft: 4
|
|
3190
|
+
},
|
|
3191
|
+
listItem: {
|
|
3192
|
+
fontSize: 13,
|
|
3193
|
+
lineHeight: 20,
|
|
3194
|
+
marginBottom: 6
|
|
3195
|
+
},
|
|
3196
|
+
orderedItem: {
|
|
3197
|
+
marginLeft: 0
|
|
3198
|
+
},
|
|
3199
|
+
bulletItem: {
|
|
3200
|
+
marginLeft: 0
|
|
3201
|
+
},
|
|
3202
|
+
videoLink: {
|
|
3203
|
+
marginTop: 8,
|
|
3204
|
+
paddingVertical: 8,
|
|
3205
|
+
paddingHorizontal: 12
|
|
3206
|
+
},
|
|
3207
|
+
videoLinkText: {
|
|
3208
|
+
fontSize: 13,
|
|
3209
|
+
fontWeight: "500"
|
|
3210
|
+
}
|
|
3211
|
+
});
|
|
3212
|
+
|
|
3213
|
+
// src/molecules/IntegrationForm.tsx
|
|
2765
3214
|
var IntegrationForm = ({
|
|
2766
3215
|
metadata,
|
|
2767
3216
|
onAddHandle,
|
|
2768
3217
|
open,
|
|
2769
3218
|
setAddIntegrationMode,
|
|
2770
3219
|
handleClose,
|
|
2771
|
-
providersList
|
|
3220
|
+
providersList,
|
|
3221
|
+
errorMessage: errorMessageProp,
|
|
3222
|
+
showBackButton = true
|
|
2772
3223
|
}) => {
|
|
2773
3224
|
const { clientId, linkToken, user } = useKryptosConnect();
|
|
2774
3225
|
const theme = useTheme();
|
|
2775
|
-
const [isLoading, setIsLoading] =
|
|
2776
|
-
const [isFetchingChains, setIsFetchingChains] =
|
|
2777
|
-
const [userUsedChains, setUserUsedChains] =
|
|
2778
|
-
const [selectedChains, setSelectedChains] =
|
|
3226
|
+
const [isLoading, setIsLoading] = import_react34.default.useState(false);
|
|
3227
|
+
const [isFetchingChains, setIsFetchingChains] = import_react34.default.useState(false);
|
|
3228
|
+
const [userUsedChains, setUserUsedChains] = import_react34.default.useState([]);
|
|
3229
|
+
const [selectedChains, setSelectedChains] = import_react34.default.useState(
|
|
2779
3230
|
/* @__PURE__ */ new Set()
|
|
2780
3231
|
);
|
|
2781
|
-
const [chainErrors, setChainErrors] =
|
|
3232
|
+
const [chainErrors, setChainErrors] = import_react34.default.useState(
|
|
2782
3233
|
{}
|
|
2783
3234
|
);
|
|
2784
|
-
const [errorMessage, setErrorMessage] =
|
|
2785
|
-
const [formValues, setFormValues] =
|
|
3235
|
+
const [errorMessage, setErrorMessage] = import_react34.default.useState("");
|
|
3236
|
+
const [formValues, setFormValues] = import_react34.default.useState({
|
|
2786
3237
|
address: "",
|
|
2787
3238
|
account_name: "",
|
|
2788
3239
|
api_key: "",
|
|
2789
3240
|
secret_key: "",
|
|
2790
3241
|
password: ""
|
|
2791
3242
|
});
|
|
2792
|
-
const [formErrors, setFormErrors] =
|
|
2793
|
-
|
|
3243
|
+
const [formErrors, setFormErrors] = import_react34.default.useState({});
|
|
3244
|
+
import_react34.default.useEffect(() => {
|
|
2794
3245
|
if (!formValues.address || !formValues.address.trim()) {
|
|
2795
3246
|
setUserUsedChains([]);
|
|
2796
3247
|
setSelectedChains(/* @__PURE__ */ new Set());
|
|
@@ -2873,18 +3324,18 @@ var IntegrationForm = ({
|
|
|
2873
3324
|
const credentialTestsData = chainsToProcess.map((chain) => {
|
|
2874
3325
|
const walletId = generateUUID();
|
|
2875
3326
|
const displaySuffix = primaryField.length >= 8 ? `${primaryField.slice(0, 4)}...${primaryField.slice(-4)}` : primaryField;
|
|
2876
|
-
const alias = `${metadata.id} - ${chain
|
|
3327
|
+
const alias = `${metadata.id} - ${chain?.name || ""} (${displaySuffix})`;
|
|
2877
3328
|
const credential = {
|
|
2878
3329
|
source: metadata.id,
|
|
2879
3330
|
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: "
|
|
3331
|
+
apiKey: formValues.api_key?.trim() || "",
|
|
3332
|
+
secret: formValues.secret_key?.trim() || "",
|
|
3333
|
+
accountName: formValues.account_name?.trim() || "",
|
|
3334
|
+
address: formValues.address?.trim() || "",
|
|
3335
|
+
password: formValues.password?.trim() || "",
|
|
3336
|
+
userId: user?.user_id || "",
|
|
3337
|
+
projectId: metadata?.projectId || "",
|
|
3338
|
+
privateKey: "",
|
|
2888
3339
|
alias,
|
|
2889
3340
|
walletId,
|
|
2890
3341
|
exchange: metadata.id
|
|
@@ -2918,11 +3369,12 @@ var IntegrationForm = ({
|
|
|
2918
3369
|
},
|
|
2919
3370
|
addedOn: (/* @__PURE__ */ new Date()).getTime(),
|
|
2920
3371
|
default_chain: chain.name,
|
|
2921
|
-
default_chain_logo:
|
|
3372
|
+
default_chain_logo: "",
|
|
2922
3373
|
type: metadata.type,
|
|
2923
3374
|
isNftSupported: metadata.isEvmWallet || metadata.nftSupport || false,
|
|
2924
3375
|
chainId: chain?.community_id || "",
|
|
2925
|
-
address: formValues.address
|
|
3376
|
+
address: formValues.address,
|
|
3377
|
+
isCustomWallet: false
|
|
2926
3378
|
};
|
|
2927
3379
|
if (formValues.account_name)
|
|
2928
3380
|
data.accountName = formValues.account_name;
|
|
@@ -2932,10 +3384,9 @@ var IntegrationForm = ({
|
|
|
2932
3384
|
integrationsToAdd.push(data);
|
|
2933
3385
|
} else {
|
|
2934
3386
|
if (result.status === "rejected") {
|
|
2935
|
-
|
|
2936
|
-
errors[chain.id] = reason?.response?.data?.message || "Failed to process chain";
|
|
3387
|
+
errors[chain.id] = result.reason?.response?.data?.message || "Failed to process chain";
|
|
2937
3388
|
} else if (result.status === "fulfilled") {
|
|
2938
|
-
errors[chain.id] = result.value?.
|
|
3389
|
+
errors[chain.id] = result.value?.message || "Failed to verify chain";
|
|
2939
3390
|
}
|
|
2940
3391
|
}
|
|
2941
3392
|
});
|
|
@@ -2953,14 +3404,14 @@ var IntegrationForm = ({
|
|
|
2953
3404
|
const credential = {
|
|
2954
3405
|
source: metadata.id,
|
|
2955
3406
|
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: "
|
|
3407
|
+
apiKey: formValues.api_key?.trim() || "",
|
|
3408
|
+
secret: formValues.secret_key?.trim() || "",
|
|
3409
|
+
accountName: formValues.account_name?.trim() || "",
|
|
3410
|
+
address: formValues.address?.trim() || "",
|
|
3411
|
+
password: formValues.password?.trim() || "",
|
|
3412
|
+
userId: user?.user_id || "",
|
|
3413
|
+
projectId: metadata?.projectId || "",
|
|
3414
|
+
privateKey: "",
|
|
2964
3415
|
alias,
|
|
2965
3416
|
walletId,
|
|
2966
3417
|
exchange: metadata.id
|
|
@@ -2968,9 +3419,7 @@ var IntegrationForm = ({
|
|
|
2968
3419
|
};
|
|
2969
3420
|
const testResult = await testCredentials(linkToken, { ...credential });
|
|
2970
3421
|
if (!testResult?.valid) {
|
|
2971
|
-
setErrorMessage(
|
|
2972
|
-
testResult?.value?.message || "Credentials are invalid"
|
|
2973
|
-
);
|
|
3422
|
+
setErrorMessage(testResult?.message || "Credentials are invalid");
|
|
2974
3423
|
return;
|
|
2975
3424
|
}
|
|
2976
3425
|
const data = {
|
|
@@ -2989,14 +3438,12 @@ var IntegrationForm = ({
|
|
|
2989
3438
|
clientId,
|
|
2990
3439
|
createdAt: (/* @__PURE__ */ new Date()).toISOString()
|
|
2991
3440
|
},
|
|
2992
|
-
metadata: {
|
|
2993
|
-
environment: "sandbox"
|
|
2994
|
-
},
|
|
2995
3441
|
addedOn: (/* @__PURE__ */ new Date()).getTime(),
|
|
2996
3442
|
default_chain: metadata.id,
|
|
2997
|
-
default_chain_logo:
|
|
3443
|
+
default_chain_logo: "",
|
|
2998
3444
|
type: metadata.type,
|
|
2999
|
-
isNftSupported: metadata.isEvmWallet || metadata.nftSupport || false
|
|
3445
|
+
isNftSupported: metadata.isEvmWallet || metadata.nftSupport || false,
|
|
3446
|
+
isCustomWallet: false
|
|
3000
3447
|
};
|
|
3001
3448
|
if (metadata.community_id) {
|
|
3002
3449
|
data.chainId = metadata.community_id;
|
|
@@ -3009,7 +3456,7 @@ var IntegrationForm = ({
|
|
|
3009
3456
|
integrationsToAdd.push(data);
|
|
3010
3457
|
}
|
|
3011
3458
|
if (integrationsToAdd.length > 0) {
|
|
3012
|
-
onAddHandle(integrationsToAdd);
|
|
3459
|
+
await onAddHandle(integrationsToAdd);
|
|
3013
3460
|
setFormErrors({});
|
|
3014
3461
|
setFormValues({
|
|
3015
3462
|
address: "",
|
|
@@ -3023,10 +3470,9 @@ var IntegrationForm = ({
|
|
|
3023
3470
|
setErrorMessage("No integrations could be added. Please try again.");
|
|
3024
3471
|
}
|
|
3025
3472
|
} catch (error) {
|
|
3026
|
-
const err = error;
|
|
3027
3473
|
console.error(error);
|
|
3028
3474
|
setErrorMessage(
|
|
3029
|
-
|
|
3475
|
+
error?.response?.data?.message || error?.response?.data?.error || "Failed to add integrations"
|
|
3030
3476
|
);
|
|
3031
3477
|
} finally {
|
|
3032
3478
|
setIsLoading(false);
|
|
@@ -3034,24 +3480,24 @@ var IntegrationForm = ({
|
|
|
3034
3480
|
};
|
|
3035
3481
|
const hasNoFields = !metadata.password && !metadata.secret_key && !metadata.api_key && !metadata.address && !metadata.account_name;
|
|
3036
3482
|
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
|
-
|
|
3483
|
+
const renderLogo = () => metadata.logo ? isSvgUrl(metadata.logo) ? /* @__PURE__ */ import_react34.default.createElement(RemoteSvg, { uri: metadata.logo }) : /* @__PURE__ */ import_react34.default.createElement(
|
|
3484
|
+
import_react_native18.Image,
|
|
3039
3485
|
{
|
|
3040
3486
|
source: { uri: metadata.logo },
|
|
3041
|
-
style:
|
|
3487
|
+
style: styles16.logo,
|
|
3042
3488
|
resizeMode: "contain"
|
|
3043
3489
|
}
|
|
3044
|
-
) : /* @__PURE__ */
|
|
3045
|
-
|
|
3490
|
+
) : /* @__PURE__ */ import_react34.default.createElement(
|
|
3491
|
+
import_react_native18.View,
|
|
3046
3492
|
{
|
|
3047
3493
|
style: [
|
|
3048
|
-
|
|
3494
|
+
styles16.logoPlaceholder,
|
|
3049
3495
|
{ backgroundColor: theme.colors.surface }
|
|
3050
3496
|
]
|
|
3051
3497
|
},
|
|
3052
|
-
/* @__PURE__ */
|
|
3498
|
+
/* @__PURE__ */ import_react34.default.createElement(import_react_native18.Text, { style: { color: theme.colors.text } }, metadata.name?.charAt(0) || "?")
|
|
3053
3499
|
);
|
|
3054
|
-
const renderInput = (key, props) => /* @__PURE__ */
|
|
3500
|
+
const renderInput = (key, props) => /* @__PURE__ */ import_react34.default.createElement(
|
|
3055
3501
|
Input,
|
|
3056
3502
|
{
|
|
3057
3503
|
placeholder: props.placeholder,
|
|
@@ -3063,33 +3509,33 @@ var IntegrationForm = ({
|
|
|
3063
3509
|
secureTextEntry: props.secureTextEntry
|
|
3064
3510
|
}
|
|
3065
3511
|
);
|
|
3066
|
-
const renderErrorAlert = () => errorMessage ? /* @__PURE__ */
|
|
3067
|
-
const renderChainSelection = () => userUsedChains.length > 0 && formValues.address && /* @__PURE__ */
|
|
3512
|
+
const renderErrorAlert = () => errorMessage || errorMessageProp ? /* @__PURE__ */ import_react34.default.createElement(Alert, { variant: "destructive" }, /* @__PURE__ */ import_react34.default.createElement(AlertDescription, null, errorMessage || errorMessageProp)) : null;
|
|
3513
|
+
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
3514
|
const isSelected = selectedChains.has(chain.id);
|
|
3069
3515
|
const hasError = chainErrors[chain.id];
|
|
3070
|
-
return /* @__PURE__ */
|
|
3071
|
-
|
|
3516
|
+
return /* @__PURE__ */ import_react34.default.createElement(
|
|
3517
|
+
import_react_native18.TouchableOpacity,
|
|
3072
3518
|
{
|
|
3073
3519
|
onPress: () => toggleChainSelection(chain.id),
|
|
3074
|
-
style:
|
|
3520
|
+
style: styles16.chainButton,
|
|
3075
3521
|
key: chain.id
|
|
3076
3522
|
},
|
|
3077
|
-
/* @__PURE__ */
|
|
3078
|
-
|
|
3523
|
+
/* @__PURE__ */ import_react34.default.createElement(
|
|
3524
|
+
import_react_native18.View,
|
|
3079
3525
|
{
|
|
3080
3526
|
style: [
|
|
3081
|
-
|
|
3527
|
+
styles16.chainChip,
|
|
3082
3528
|
{
|
|
3083
3529
|
backgroundColor: hasError ? theme.colors.errorLight : isSelected ? theme.colors.primary + "20" : theme.colors.surface,
|
|
3084
3530
|
borderColor: hasError ? theme.colors.error : isSelected ? theme.colors.primary : theme.colors.border
|
|
3085
3531
|
}
|
|
3086
3532
|
]
|
|
3087
3533
|
},
|
|
3088
|
-
/* @__PURE__ */
|
|
3089
|
-
|
|
3534
|
+
/* @__PURE__ */ import_react34.default.createElement(
|
|
3535
|
+
import_react_native18.Text,
|
|
3090
3536
|
{
|
|
3091
3537
|
style: [
|
|
3092
|
-
|
|
3538
|
+
styles16.chainName,
|
|
3093
3539
|
{
|
|
3094
3540
|
color: hasError ? theme.colors.error : isSelected ? theme.colors.primary : theme.colors.text
|
|
3095
3541
|
}
|
|
@@ -3097,28 +3543,55 @@ var IntegrationForm = ({
|
|
|
3097
3543
|
},
|
|
3098
3544
|
chain.name
|
|
3099
3545
|
),
|
|
3100
|
-
isSelected ? /* @__PURE__ */
|
|
3546
|
+
isSelected ? /* @__PURE__ */ import_react34.default.createElement(
|
|
3101
3547
|
CloseIcon,
|
|
3102
3548
|
{
|
|
3103
3549
|
size: 12,
|
|
3104
3550
|
color: hasError ? theme.colors.error : theme.colors.primary
|
|
3105
3551
|
}
|
|
3106
|
-
) : /* @__PURE__ */
|
|
3552
|
+
) : /* @__PURE__ */ import_react34.default.createElement(PlusIcon, { size: 12, color: theme.colors.textSecondary })
|
|
3107
3553
|
)
|
|
3108
3554
|
);
|
|
3109
|
-
}))
|
|
3110
|
-
|
|
3555
|
+
})), selectedChains.size > 0 && userUsedChains.length > 0 && /* @__PURE__ */ import_react34.default.createElement(
|
|
3556
|
+
import_react_native18.TouchableOpacity,
|
|
3557
|
+
{
|
|
3558
|
+
onPress: () => setSelectedChains(/* @__PURE__ */ new Set()),
|
|
3559
|
+
style: styles16.chainButton,
|
|
3560
|
+
activeOpacity: 0.7
|
|
3561
|
+
},
|
|
3562
|
+
/* @__PURE__ */ import_react34.default.createElement(
|
|
3563
|
+
import_react_native18.View,
|
|
3564
|
+
{
|
|
3565
|
+
style: [
|
|
3566
|
+
styles16.chainChip,
|
|
3567
|
+
styles16.chainChipRemoveAll,
|
|
3568
|
+
{
|
|
3569
|
+
borderWidth: 0
|
|
3570
|
+
}
|
|
3571
|
+
]
|
|
3572
|
+
},
|
|
3573
|
+
/* @__PURE__ */ import_react34.default.createElement(
|
|
3574
|
+
import_react_native18.Text,
|
|
3575
|
+
{
|
|
3576
|
+
style: [styles16.chainName, { color: theme.colors.primary }]
|
|
3577
|
+
},
|
|
3578
|
+
"Remove All Chains"
|
|
3579
|
+
),
|
|
3580
|
+
/* @__PURE__ */ import_react34.default.createElement(CloseIcon, { size: 12, color: theme.colors.primary })
|
|
3581
|
+
)
|
|
3582
|
+
)), Object.keys(chainErrors).length > 0 && /* @__PURE__ */ import_react34.default.createElement(import_react_native18.View, { style: styles16.chainErrorsContainer }, /* @__PURE__ */ import_react34.default.createElement(
|
|
3583
|
+
import_react_native18.Text,
|
|
3111
3584
|
{
|
|
3112
|
-
style: [
|
|
3585
|
+
style: [styles16.chainErrorsTitle, { color: theme.colors.error }]
|
|
3113
3586
|
},
|
|
3114
3587
|
"Errors:"
|
|
3115
3588
|
), Object.entries(chainErrors).map(([chainId, error]) => {
|
|
3116
3589
|
const chain = userUsedChains.find((c) => c.id === chainId);
|
|
3117
|
-
return /* @__PURE__ */
|
|
3118
|
-
|
|
3590
|
+
return /* @__PURE__ */ import_react34.default.createElement(
|
|
3591
|
+
import_react_native18.Text,
|
|
3119
3592
|
{
|
|
3120
3593
|
key: chainId,
|
|
3121
|
-
style: [
|
|
3594
|
+
style: [styles16.chainErrorItem, { color: theme.colors.error }]
|
|
3122
3595
|
},
|
|
3123
3596
|
"\u2022 ",
|
|
3124
3597
|
chain?.name,
|
|
@@ -3126,7 +3599,7 @@ var IntegrationForm = ({
|
|
|
3126
3599
|
error
|
|
3127
3600
|
);
|
|
3128
3601
|
})));
|
|
3129
|
-
const renderFormBlock = () => /* @__PURE__ */
|
|
3602
|
+
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
3603
|
placeholder: "Enter address",
|
|
3131
3604
|
autoCapitalize: "none",
|
|
3132
3605
|
autoCorrect: false
|
|
@@ -3142,16 +3615,23 @@ var IntegrationForm = ({
|
|
|
3142
3615
|
}), metadata.password && renderInput("password", {
|
|
3143
3616
|
placeholder: "Enter Password",
|
|
3144
3617
|
secureTextEntry: true
|
|
3145
|
-
})), hasNoFields && !metadata?.isWalletConnectSupported && /* @__PURE__ */
|
|
3618
|
+
})), 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
3619
|
const addIntegrationLabel = formValues.address && userUsedChains.length > 0 && selectedChains.size > 0 ? `Add ${selectedChains.size} Chain${selectedChains.size !== 1 ? "s" : ""}` : "Add Integration";
|
|
3147
|
-
return /* @__PURE__ */
|
|
3148
|
-
|
|
3620
|
+
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(
|
|
3621
|
+
import_react_native18.TouchableOpacity,
|
|
3149
3622
|
{
|
|
3150
3623
|
onPress: () => setAddIntegrationMode(null),
|
|
3151
|
-
style:
|
|
3624
|
+
style: styles16.backButton
|
|
3152
3625
|
},
|
|
3153
|
-
/* @__PURE__ */
|
|
3154
|
-
), /* @__PURE__ */
|
|
3626
|
+
/* @__PURE__ */ import_react34.default.createElement(ArrowLeftIcon, { size: 20, color: theme.colors.text })
|
|
3627
|
+
), /* @__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(
|
|
3628
|
+
IntegrationInfo,
|
|
3629
|
+
{
|
|
3630
|
+
content: metadata.walletLimitations,
|
|
3631
|
+
type: "api",
|
|
3632
|
+
import_guide: metadata.import_guide
|
|
3633
|
+
}
|
|
3634
|
+
)), !hasNoFields && /* @__PURE__ */ import_react34.default.createElement(ModalFooter, { style: { paddingVertical: 8 } }, /* @__PURE__ */ import_react34.default.createElement(
|
|
3155
3635
|
Button,
|
|
3156
3636
|
{
|
|
3157
3637
|
variant: "outline",
|
|
@@ -3159,10 +3639,10 @@ var IntegrationForm = ({
|
|
|
3159
3639
|
onPress: handleSubmit,
|
|
3160
3640
|
loading: isLoading,
|
|
3161
3641
|
disabled: isLoading || isFetchingChains || !!formValues.address && userUsedChains.length > 0 && selectedChains.size === 0,
|
|
3162
|
-
style:
|
|
3642
|
+
style: styles16.button
|
|
3163
3643
|
},
|
|
3164
3644
|
addIntegrationLabel
|
|
3165
|
-
), /* @__PURE__ */
|
|
3645
|
+
), /* @__PURE__ */ import_react34.default.createElement(Footer, null))) : /* @__PURE__ */ import_react34.default.createElement(
|
|
3166
3646
|
WalletConnectComponent,
|
|
3167
3647
|
{
|
|
3168
3648
|
integration: metadata,
|
|
@@ -3171,14 +3651,14 @@ var IntegrationForm = ({
|
|
|
3171
3651
|
modalOpen: open,
|
|
3172
3652
|
setAddIntegrationMode,
|
|
3173
3653
|
handleClose,
|
|
3174
|
-
providersList
|
|
3654
|
+
providersList,
|
|
3655
|
+
errorMessage: errorMessageProp
|
|
3175
3656
|
}
|
|
3176
3657
|
));
|
|
3177
3658
|
};
|
|
3178
|
-
var
|
|
3179
|
-
|
|
3180
|
-
|
|
3181
|
-
paddingBottom: 100
|
|
3659
|
+
var styles16 = import_react_native18.StyleSheet.create({
|
|
3660
|
+
chainListContent: {
|
|
3661
|
+
paddingBottom: 8
|
|
3182
3662
|
},
|
|
3183
3663
|
headerContent: {
|
|
3184
3664
|
flexDirection: "row",
|
|
@@ -3203,10 +3683,8 @@ var styles14 = import_react_native16.StyleSheet.create({
|
|
|
3203
3683
|
// theme.spacing.xl
|
|
3204
3684
|
paddingBottom: 40,
|
|
3205
3685
|
width: "100%",
|
|
3206
|
-
overflow: "hidden",
|
|
3207
3686
|
alignSelf: "center",
|
|
3208
|
-
flexDirection: "column"
|
|
3209
|
-
flex: 1
|
|
3687
|
+
flexDirection: "column"
|
|
3210
3688
|
},
|
|
3211
3689
|
header: {
|
|
3212
3690
|
flexDirection: "row",
|
|
@@ -3238,7 +3716,7 @@ var styles14 = import_react_native16.StyleSheet.create({
|
|
|
3238
3716
|
textTransform: "capitalize"
|
|
3239
3717
|
},
|
|
3240
3718
|
chainSelection: {
|
|
3241
|
-
marginBottom:
|
|
3719
|
+
marginBottom: 8
|
|
3242
3720
|
// theme.spacing.lg
|
|
3243
3721
|
},
|
|
3244
3722
|
chainTitle: {
|
|
@@ -3265,6 +3743,11 @@ var styles14 = import_react_native16.StyleSheet.create({
|
|
|
3265
3743
|
// theme.borderRadius.md
|
|
3266
3744
|
borderWidth: 1
|
|
3267
3745
|
},
|
|
3746
|
+
chainChipRemoveAll: {
|
|
3747
|
+
marginTop: 6,
|
|
3748
|
+
// theme.spacing.sm - separate from chain list
|
|
3749
|
+
width: "auto"
|
|
3750
|
+
},
|
|
3268
3751
|
chainName: {
|
|
3269
3752
|
fontSize: 12,
|
|
3270
3753
|
fontWeight: "500",
|
|
@@ -3300,18 +3783,23 @@ var styles14 = import_react_native16.StyleSheet.create({
|
|
|
3300
3783
|
var Integration = ({
|
|
3301
3784
|
open,
|
|
3302
3785
|
onSuccess,
|
|
3303
|
-
onClose
|
|
3786
|
+
onClose,
|
|
3787
|
+
integrationDetails
|
|
3304
3788
|
}) => {
|
|
3305
3789
|
const { appName, linkToken } = useKryptosConnect();
|
|
3306
3790
|
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
|
-
|
|
3791
|
+
const [addIntegrationMode, setAddIntegrationMode] = import_react35.default.useState(integrationDetails || null);
|
|
3792
|
+
const [query, setQuery] = import_react35.default.useState("");
|
|
3793
|
+
const [activeTab, setActiveTab] = import_react35.default.useState("all");
|
|
3794
|
+
const [supportedProviders, setSupportedProviders] = import_react35.default.useState([]);
|
|
3795
|
+
const [existingIntegrations, setExistingIntegrations] = import_react35.default.useState([]);
|
|
3796
|
+
const [isLoading, setIsLoading] = import_react35.default.useState(false);
|
|
3797
|
+
const [errorMessage, setErrorMessage] = import_react35.default.useState("");
|
|
3798
|
+
import_react35.default.useEffect(() => {
|
|
3799
|
+
if (integrationDetails) {
|
|
3800
|
+
setAddIntegrationMode(integrationDetails);
|
|
3801
|
+
}
|
|
3802
|
+
}, [integrationDetails]);
|
|
3315
3803
|
const handleClose = () => {
|
|
3316
3804
|
onClose();
|
|
3317
3805
|
};
|
|
@@ -3322,7 +3810,7 @@ var Integration = ({
|
|
|
3322
3810
|
} catch (error) {
|
|
3323
3811
|
const err = error;
|
|
3324
3812
|
setErrorMessage(
|
|
3325
|
-
err?.response?.data?.message || "Failed to fetch existing integrations"
|
|
3813
|
+
err?.response?.data?.message || err?.response?.data?.error || "Failed to fetch existing integrations"
|
|
3326
3814
|
);
|
|
3327
3815
|
console.error(error);
|
|
3328
3816
|
}
|
|
@@ -3335,38 +3823,38 @@ var Integration = ({
|
|
|
3335
3823
|
} catch (error) {
|
|
3336
3824
|
const err = error;
|
|
3337
3825
|
setErrorMessage(
|
|
3338
|
-
err?.response?.data?.message || "Failed to fetch supported providers"
|
|
3826
|
+
err?.response?.data?.message || err?.response?.data?.error || "Failed to fetch supported providers"
|
|
3339
3827
|
);
|
|
3340
3828
|
console.error(error);
|
|
3341
3829
|
} finally {
|
|
3342
3830
|
setIsLoading(false);
|
|
3343
3831
|
}
|
|
3344
3832
|
};
|
|
3345
|
-
|
|
3833
|
+
import_react35.default.useEffect(() => {
|
|
3346
3834
|
if (linkToken) {
|
|
3347
3835
|
fetchSupportedProviders();
|
|
3348
3836
|
fetchExistingIntegrations();
|
|
3349
3837
|
}
|
|
3350
3838
|
}, [linkToken]);
|
|
3351
|
-
const isIntegrationAdded =
|
|
3839
|
+
const isIntegrationAdded = (0, import_react35.useCallback)(
|
|
3352
3840
|
(publicName) => {
|
|
3353
|
-
const integrations = [...
|
|
3841
|
+
const integrations = [...existingIntegrations];
|
|
3354
3842
|
return integrations.some(
|
|
3355
3843
|
(integration) => integration.public_name === publicName
|
|
3356
3844
|
);
|
|
3357
3845
|
},
|
|
3358
|
-
[
|
|
3846
|
+
[existingIntegrations]
|
|
3359
3847
|
);
|
|
3360
|
-
const getIntegrationCount =
|
|
3848
|
+
const getIntegrationCount = (0, import_react35.useCallback)(
|
|
3361
3849
|
(publicName) => {
|
|
3362
|
-
const integrations = [...
|
|
3850
|
+
const integrations = [...existingIntegrations];
|
|
3363
3851
|
return integrations.filter(
|
|
3364
3852
|
(integration) => integration.public_name === publicName
|
|
3365
3853
|
).length;
|
|
3366
3854
|
},
|
|
3367
|
-
[
|
|
3855
|
+
[existingIntegrations]
|
|
3368
3856
|
);
|
|
3369
|
-
const filteredResults =
|
|
3857
|
+
const filteredResults = import_react35.default.useMemo(() => {
|
|
3370
3858
|
let filtered = supportedProviders;
|
|
3371
3859
|
if (activeTab !== "all") {
|
|
3372
3860
|
filtered = filtered.filter((provider) => provider.type === activeTab);
|
|
@@ -3384,33 +3872,41 @@ var Integration = ({
|
|
|
3384
3872
|
return (a.name ?? "").localeCompare(b.name ?? "");
|
|
3385
3873
|
});
|
|
3386
3874
|
}, [query, supportedProviders, getIntegrationCount, activeTab]);
|
|
3387
|
-
const handleAddIntegration = async () => {
|
|
3875
|
+
const handleAddIntegration = async (integrationsList) => {
|
|
3388
3876
|
try {
|
|
3389
3877
|
setIsLoading(true);
|
|
3390
|
-
const integrations = [...
|
|
3878
|
+
const integrations = integrationsList ? integrationsList : [...existingIntegrations];
|
|
3391
3879
|
if (integrations.length === 0) {
|
|
3392
3880
|
setErrorMessage("Please add at least one integration");
|
|
3393
|
-
} else if (addedIntegrations.length === 0) {
|
|
3394
|
-
onSuccess();
|
|
3395
3881
|
} else {
|
|
3396
|
-
await addUserIntegration(linkToken,
|
|
3397
|
-
|
|
3882
|
+
await addUserIntegration(linkToken, integrations);
|
|
3883
|
+
if (integrationDetails) {
|
|
3884
|
+
onSuccess();
|
|
3885
|
+
}
|
|
3398
3886
|
}
|
|
3887
|
+
await fetchExistingIntegrations();
|
|
3888
|
+
setAddIntegrationMode(null);
|
|
3399
3889
|
} catch (error) {
|
|
3400
|
-
const
|
|
3401
|
-
|
|
3402
|
-
|
|
3403
|
-
err?.response?.data?.message || "Failed to add integrations"
|
|
3404
|
-
);
|
|
3890
|
+
const message = error?.response?.data?.message || error?.response?.data?.error || "Failed to add integrations";
|
|
3891
|
+
setErrorMessage(message);
|
|
3892
|
+
throw error;
|
|
3405
3893
|
} finally {
|
|
3406
3894
|
setIsLoading(false);
|
|
3407
3895
|
}
|
|
3408
3896
|
};
|
|
3409
|
-
const
|
|
3410
|
-
|
|
3897
|
+
const handleContinue = () => {
|
|
3898
|
+
const integrations = [...existingIntegrations];
|
|
3899
|
+
if (integrations.length === 0) {
|
|
3900
|
+
setErrorMessage("Please add at least one integration");
|
|
3901
|
+
return;
|
|
3902
|
+
}
|
|
3903
|
+
onSuccess();
|
|
3904
|
+
};
|
|
3905
|
+
const renderProviderItem = ({ item }) => /* @__PURE__ */ import_react35.default.createElement(
|
|
3906
|
+
import_react_native19.TouchableOpacity,
|
|
3411
3907
|
{
|
|
3412
3908
|
style: [
|
|
3413
|
-
|
|
3909
|
+
styles17.providerItem,
|
|
3414
3910
|
{
|
|
3415
3911
|
backgroundColor: theme.colors.surface,
|
|
3416
3912
|
borderColor: theme.colors.border
|
|
@@ -3419,44 +3915,44 @@ var Integration = ({
|
|
|
3419
3915
|
onPress: () => setAddIntegrationMode(item),
|
|
3420
3916
|
activeOpacity: 0.7
|
|
3421
3917
|
},
|
|
3422
|
-
/* @__PURE__ */
|
|
3423
|
-
|
|
3918
|
+
/* @__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(
|
|
3919
|
+
import_react_native19.Image,
|
|
3424
3920
|
{
|
|
3425
3921
|
source: { uri: item?.logo },
|
|
3426
|
-
style:
|
|
3922
|
+
style: styles17.providerLogo,
|
|
3427
3923
|
resizeMode: "contain"
|
|
3428
3924
|
}
|
|
3429
|
-
) : /* @__PURE__ */
|
|
3430
|
-
|
|
3925
|
+
) : /* @__PURE__ */ import_react35.default.createElement(
|
|
3926
|
+
import_react_native19.View,
|
|
3431
3927
|
{
|
|
3432
3928
|
style: [
|
|
3433
|
-
|
|
3929
|
+
styles17.providerLogoPlaceholder,
|
|
3434
3930
|
{ backgroundColor: theme.colors.surfaceSecondary }
|
|
3435
3931
|
]
|
|
3436
3932
|
},
|
|
3437
|
-
/* @__PURE__ */
|
|
3438
|
-
), /* @__PURE__ */
|
|
3439
|
-
isIntegrationAdded(item?.public_name) && /* @__PURE__ */
|
|
3440
|
-
|
|
3933
|
+
/* @__PURE__ */ import_react35.default.createElement(import_react_native19.Text, { style: { color: theme.colors.text } }, item?.name?.charAt(0) || "?")
|
|
3934
|
+
), /* @__PURE__ */ import_react35.default.createElement(import_react_native19.Text, { style: [styles17.providerName, { color: theme.colors.text }] }, item?.name + "\u200B")),
|
|
3935
|
+
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(
|
|
3936
|
+
import_react_native19.Text,
|
|
3441
3937
|
{
|
|
3442
3938
|
style: [
|
|
3443
|
-
|
|
3939
|
+
styles17.providerCount,
|
|
3444
3940
|
{ color: theme.colors.textSecondary }
|
|
3445
3941
|
]
|
|
3446
3942
|
},
|
|
3447
3943
|
getIntegrationCount(item?.public_name)
|
|
3448
3944
|
))
|
|
3449
3945
|
);
|
|
3450
|
-
const renderSkeletonItem = () => /* @__PURE__ */
|
|
3451
|
-
return /* @__PURE__ */
|
|
3452
|
-
|
|
3946
|
+
const renderSkeletonItem = () => /* @__PURE__ */ import_react35.default.createElement(SkeletonItem_default, null);
|
|
3947
|
+
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(
|
|
3948
|
+
import_react_native19.TouchableOpacity,
|
|
3453
3949
|
{
|
|
3454
3950
|
onPress: () => setAddIntegrationMode(null),
|
|
3455
|
-
style:
|
|
3951
|
+
style: styles17.backButton
|
|
3456
3952
|
},
|
|
3457
|
-
/* @__PURE__ */
|
|
3458
|
-
), /* @__PURE__ */
|
|
3459
|
-
|
|
3953
|
+
/* @__PURE__ */ import_react35.default.createElement(ArrowLeftIcon, { size: 20, color: theme.colors.text })
|
|
3954
|
+
), /* @__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(
|
|
3955
|
+
import_react_native19.View,
|
|
3460
3956
|
{
|
|
3461
3957
|
style: {
|
|
3462
3958
|
paddingHorizontal: theme.spacing.xl,
|
|
@@ -3465,26 +3961,26 @@ var Integration = ({
|
|
|
3465
3961
|
zIndex: 10
|
|
3466
3962
|
}
|
|
3467
3963
|
},
|
|
3468
|
-
/* @__PURE__ */
|
|
3964
|
+
/* @__PURE__ */ import_react35.default.createElement(
|
|
3469
3965
|
Input,
|
|
3470
3966
|
{
|
|
3471
3967
|
value: query,
|
|
3472
3968
|
onChangeText: setQuery,
|
|
3473
3969
|
placeholder: "Search Integrations...",
|
|
3474
|
-
containerStyle:
|
|
3970
|
+
containerStyle: styles17.searchInput
|
|
3475
3971
|
}
|
|
3476
3972
|
),
|
|
3477
|
-
/* @__PURE__ */
|
|
3973
|
+
/* @__PURE__ */ import_react35.default.createElement(import_react_native19.View, { style: styles17.tabsContainer }, [
|
|
3478
3974
|
{ label: "All", value: "all" },
|
|
3479
3975
|
{ label: "Exchanges", value: "exchange" },
|
|
3480
3976
|
{ label: "Blockchains", value: "blockchain" },
|
|
3481
3977
|
{ label: "Wallets", value: "wallet" }
|
|
3482
|
-
].map((tab) => /* @__PURE__ */
|
|
3483
|
-
|
|
3978
|
+
].map((tab) => /* @__PURE__ */ import_react35.default.createElement(
|
|
3979
|
+
import_react_native19.TouchableOpacity,
|
|
3484
3980
|
{
|
|
3485
3981
|
key: tab.value,
|
|
3486
3982
|
style: [
|
|
3487
|
-
|
|
3983
|
+
styles17.tab,
|
|
3488
3984
|
{
|
|
3489
3985
|
backgroundColor: activeTab === tab.value ? theme.colors.primary : theme.colors.surface,
|
|
3490
3986
|
borderColor: theme.colors.border
|
|
@@ -3496,11 +3992,11 @@ var Integration = ({
|
|
|
3496
3992
|
);
|
|
3497
3993
|
}
|
|
3498
3994
|
},
|
|
3499
|
-
/* @__PURE__ */
|
|
3500
|
-
|
|
3995
|
+
/* @__PURE__ */ import_react35.default.createElement(
|
|
3996
|
+
import_react_native19.Text,
|
|
3501
3997
|
{
|
|
3502
3998
|
style: [
|
|
3503
|
-
|
|
3999
|
+
styles17.tabText,
|
|
3504
4000
|
{
|
|
3505
4001
|
color: activeTab === tab.value ? theme.colors.white : theme.colors.text
|
|
3506
4002
|
}
|
|
@@ -3509,8 +4005,8 @@ var Integration = ({
|
|
|
3509
4005
|
tab.label
|
|
3510
4006
|
)
|
|
3511
4007
|
)))
|
|
3512
|
-
), /* @__PURE__ */
|
|
3513
|
-
|
|
4008
|
+
), /* @__PURE__ */ import_react35.default.createElement(
|
|
4009
|
+
import_react_native19.FlatList,
|
|
3514
4010
|
{
|
|
3515
4011
|
data: isLoading ? Array.from({ length: 8 }, (_, i) => ({
|
|
3516
4012
|
id: `skeleton-${i}`,
|
|
@@ -3520,50 +4016,53 @@ var Integration = ({
|
|
|
3520
4016
|
})) : filteredResults,
|
|
3521
4017
|
keyExtractor: (item, index) => isLoading ? item.id : `provider-${item.id}-${index}`,
|
|
3522
4018
|
renderItem: isLoading ? renderSkeletonItem : renderProviderItem,
|
|
3523
|
-
style:
|
|
4019
|
+
style: styles17.list,
|
|
3524
4020
|
contentContainerStyle: [
|
|
3525
|
-
|
|
4021
|
+
styles17.listContent,
|
|
3526
4022
|
{ paddingHorizontal: theme.spacing.xl }
|
|
3527
4023
|
],
|
|
3528
4024
|
showsVerticalScrollIndicator: false,
|
|
3529
|
-
ListEmptyComponent: /* @__PURE__ */
|
|
3530
|
-
|
|
4025
|
+
ListEmptyComponent: /* @__PURE__ */ import_react35.default.createElement(import_react_native19.View, { style: styles17.emptyContainer }, !isLoading && /* @__PURE__ */ import_react35.default.createElement(
|
|
4026
|
+
import_react_native19.Text,
|
|
3531
4027
|
{
|
|
3532
4028
|
style: [
|
|
3533
|
-
|
|
4029
|
+
styles17.emptyText,
|
|
3534
4030
|
{ color: theme.colors.textSecondary }
|
|
3535
4031
|
]
|
|
3536
4032
|
},
|
|
3537
4033
|
query ? "No search results found" : "No supported integrations found"
|
|
3538
|
-
))
|
|
4034
|
+
)),
|
|
4035
|
+
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
4036
|
}
|
|
3540
|
-
),
|
|
4037
|
+
))), /* @__PURE__ */ import_react35.default.createElement(ModalFooter, { style: { paddingVertical: 8 } }, filteredResults && filteredResults.length > 0 && /* @__PURE__ */ import_react35.default.createElement(
|
|
3541
4038
|
Button,
|
|
3542
4039
|
{
|
|
3543
4040
|
variant: "outline",
|
|
3544
4041
|
size: "lg",
|
|
3545
|
-
onPress:
|
|
4042
|
+
onPress: handleContinue,
|
|
3546
4043
|
loading: isLoading,
|
|
3547
4044
|
disabled: isLoading,
|
|
3548
|
-
style:
|
|
4045
|
+
style: styles17.continueButton
|
|
3549
4046
|
},
|
|
3550
4047
|
"Continue"
|
|
3551
|
-
), /* @__PURE__ */
|
|
4048
|
+
), /* @__PURE__ */ import_react35.default.createElement(Footer, null))) : /* @__PURE__ */ import_react35.default.createElement(
|
|
3552
4049
|
IntegrationForm,
|
|
3553
4050
|
{
|
|
3554
4051
|
metadata: addIntegrationMode,
|
|
3555
|
-
onAddHandle: (
|
|
3556
|
-
|
|
3557
|
-
|
|
4052
|
+
onAddHandle: async (int) => {
|
|
4053
|
+
const integrationsList = [...int];
|
|
4054
|
+
await handleAddIntegration(integrationsList);
|
|
3558
4055
|
},
|
|
3559
4056
|
open: !!addIntegrationMode,
|
|
3560
4057
|
setAddIntegrationMode,
|
|
3561
4058
|
handleClose,
|
|
3562
|
-
providersList: supportedProviders
|
|
4059
|
+
providersList: supportedProviders,
|
|
4060
|
+
errorMessage,
|
|
4061
|
+
showBackButton: !integrationDetails
|
|
3563
4062
|
}
|
|
3564
4063
|
));
|
|
3565
4064
|
};
|
|
3566
|
-
var
|
|
4065
|
+
var styles17 = import_react_native19.StyleSheet.create({
|
|
3567
4066
|
headerContent: {
|
|
3568
4067
|
flexDirection: "row",
|
|
3569
4068
|
alignItems: "center"
|
|
@@ -3674,12 +4173,12 @@ var styles15 = import_react_native17.StyleSheet.create({
|
|
|
3674
4173
|
width: "100%"
|
|
3675
4174
|
},
|
|
3676
4175
|
errorContainer: {
|
|
3677
|
-
paddingHorizontal: 20
|
|
4176
|
+
paddingHorizontal: 20,
|
|
3678
4177
|
// theme.spacing.xl
|
|
4178
|
+
marginBottom: 12
|
|
3679
4179
|
},
|
|
3680
4180
|
errorAlert: {
|
|
3681
|
-
marginTop:
|
|
3682
|
-
// theme.spacing.lg - consistent alert spacing
|
|
4181
|
+
marginTop: 8
|
|
3683
4182
|
},
|
|
3684
4183
|
tabsContainer: {
|
|
3685
4184
|
flexDirection: "row",
|
|
@@ -3706,21 +4205,21 @@ var styles15 = import_react_native17.StyleSheet.create({
|
|
|
3706
4205
|
});
|
|
3707
4206
|
|
|
3708
4207
|
// src/molecules/OTPVerify.tsx
|
|
3709
|
-
var
|
|
3710
|
-
var
|
|
4208
|
+
var import_react36 = __toESM(require("react"));
|
|
4209
|
+
var import_react_native20 = require("react-native");
|
|
3711
4210
|
var OTPVerify = ({
|
|
3712
4211
|
open,
|
|
3713
4212
|
onSuccess,
|
|
3714
4213
|
onClose
|
|
3715
4214
|
}) => {
|
|
3716
4215
|
const theme = useTheme();
|
|
3717
|
-
const [otp, setOtp] =
|
|
4216
|
+
const [otp, setOtp] = import_react36.default.useState("");
|
|
3718
4217
|
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] =
|
|
4218
|
+
const [isLoading, setIsLoading] = import_react36.default.useState(false);
|
|
4219
|
+
const [isResending, setIsResending] = import_react36.default.useState(false);
|
|
4220
|
+
const [resendCooldown, setResendCooldown] = import_react36.default.useState(0);
|
|
4221
|
+
const [errorMessage, setErrorMessage] = import_react36.default.useState("");
|
|
4222
|
+
const [successMessage, setSuccessMessage] = import_react36.default.useState("");
|
|
3724
4223
|
const handleSubmit = async () => {
|
|
3725
4224
|
if (otp.length !== 6) return;
|
|
3726
4225
|
setIsLoading(true);
|
|
@@ -3771,7 +4270,7 @@ var OTPVerify = ({
|
|
|
3771
4270
|
setSuccessMessage("");
|
|
3772
4271
|
setOtp("");
|
|
3773
4272
|
};
|
|
3774
|
-
|
|
4273
|
+
import_react36.default.useEffect(() => {
|
|
3775
4274
|
if (resendCooldown > 0) {
|
|
3776
4275
|
const timer = setTimeout(() => {
|
|
3777
4276
|
setResendCooldown(resendCooldown - 1);
|
|
@@ -3780,20 +4279,20 @@ var OTPVerify = ({
|
|
|
3780
4279
|
}
|
|
3781
4280
|
return void 0;
|
|
3782
4281
|
}, [resendCooldown]);
|
|
3783
|
-
return /* @__PURE__ */
|
|
3784
|
-
|
|
4282
|
+
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(
|
|
4283
|
+
import_react_native20.Text,
|
|
3785
4284
|
{
|
|
3786
|
-
style: [
|
|
4285
|
+
style: [styles18.infoText, { color: theme.colors.textSecondary }]
|
|
3787
4286
|
},
|
|
3788
4287
|
"We have sent a verification code to"
|
|
3789
|
-
), /* @__PURE__ */
|
|
4288
|
+
), /* @__PURE__ */ import_react36.default.createElement(import_react_native20.Text, { style: [styles18.emailText, { color: theme.colors.text }] }, email)), /* @__PURE__ */ import_react36.default.createElement(
|
|
3790
4289
|
OTP,
|
|
3791
4290
|
{
|
|
3792
4291
|
onComplete: handleOtpComplete,
|
|
3793
4292
|
length: 6,
|
|
3794
4293
|
setErrorMessage
|
|
3795
4294
|
}
|
|
3796
|
-
), errorMessage ? /* @__PURE__ */
|
|
4295
|
+
), 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
4296
|
Button,
|
|
3798
4297
|
{
|
|
3799
4298
|
variant: "outline",
|
|
@@ -3801,44 +4300,44 @@ var OTPVerify = ({
|
|
|
3801
4300
|
onPress: handleSubmit,
|
|
3802
4301
|
loading: isLoading,
|
|
3803
4302
|
disabled: otp.length !== 6 || isLoading,
|
|
3804
|
-
style:
|
|
4303
|
+
style: styles18.button
|
|
3805
4304
|
},
|
|
3806
4305
|
"Continue"
|
|
3807
|
-
), /* @__PURE__ */
|
|
3808
|
-
|
|
4306
|
+
), /* @__PURE__ */ import_react36.default.createElement(
|
|
4307
|
+
import_react_native20.TouchableOpacity,
|
|
3809
4308
|
{
|
|
3810
4309
|
onPress: handleResendOtp,
|
|
3811
4310
|
disabled: resendCooldown > 0 || isResending,
|
|
3812
|
-
style:
|
|
4311
|
+
style: styles18.resendContainer
|
|
3813
4312
|
},
|
|
3814
|
-
isResending ? /* @__PURE__ */
|
|
3815
|
-
|
|
4313
|
+
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(
|
|
4314
|
+
import_react_native20.Text,
|
|
3816
4315
|
{
|
|
3817
|
-
style: [
|
|
4316
|
+
style: [styles18.resendText, { color: theme.colors.primary }]
|
|
3818
4317
|
},
|
|
3819
4318
|
" ",
|
|
3820
4319
|
"Sending..."
|
|
3821
|
-
)) : resendCooldown > 0 ? /* @__PURE__ */
|
|
3822
|
-
|
|
4320
|
+
)) : resendCooldown > 0 ? /* @__PURE__ */ import_react36.default.createElement(
|
|
4321
|
+
import_react_native20.Text,
|
|
3823
4322
|
{
|
|
3824
4323
|
style: [
|
|
3825
|
-
|
|
4324
|
+
styles18.resendText,
|
|
3826
4325
|
{ color: theme.colors.textSecondary }
|
|
3827
4326
|
]
|
|
3828
4327
|
},
|
|
3829
4328
|
"Resend OTP in ",
|
|
3830
4329
|
resendCooldown,
|
|
3831
4330
|
"s"
|
|
3832
|
-
) : /* @__PURE__ */
|
|
3833
|
-
|
|
4331
|
+
) : /* @__PURE__ */ import_react36.default.createElement(
|
|
4332
|
+
import_react_native20.Text,
|
|
3834
4333
|
{
|
|
3835
|
-
style: [
|
|
4334
|
+
style: [styles18.resendText, { color: theme.colors.primary }]
|
|
3836
4335
|
},
|
|
3837
4336
|
"Resend OTP"
|
|
3838
4337
|
)
|
|
3839
|
-
))), /* @__PURE__ */
|
|
4338
|
+
))), /* @__PURE__ */ import_react36.default.createElement(ModalFooter, { style: { paddingVertical: 0 } }, /* @__PURE__ */ import_react36.default.createElement(Footer, null)));
|
|
3840
4339
|
};
|
|
3841
|
-
var
|
|
4340
|
+
var styles18 = import_react_native20.StyleSheet.create({
|
|
3842
4341
|
headerContent: {
|
|
3843
4342
|
flexDirection: "row",
|
|
3844
4343
|
alignItems: "center"
|
|
@@ -3897,8 +4396,8 @@ var styles16 = import_react_native18.StyleSheet.create({
|
|
|
3897
4396
|
});
|
|
3898
4397
|
|
|
3899
4398
|
// src/molecules/Permissions.tsx
|
|
3900
|
-
var
|
|
3901
|
-
var
|
|
4399
|
+
var import_react37 = __toESM(require("react"));
|
|
4400
|
+
var import_react_native21 = require("react-native");
|
|
3902
4401
|
var Permissions = ({
|
|
3903
4402
|
open,
|
|
3904
4403
|
onClose,
|
|
@@ -3906,8 +4405,8 @@ var Permissions = ({
|
|
|
3906
4405
|
}) => {
|
|
3907
4406
|
const { appName, linkToken, setUserConsent } = useKryptosConnect();
|
|
3908
4407
|
const theme = useTheme();
|
|
3909
|
-
const [isLoading, setIsLoading] =
|
|
3910
|
-
const [errorMessage, setErrorMessage] =
|
|
4408
|
+
const [isLoading, setIsLoading] = import_react37.default.useState(false);
|
|
4409
|
+
const [errorMessage, setErrorMessage] = import_react37.default.useState("");
|
|
3911
4410
|
const handleConsentClick = async () => {
|
|
3912
4411
|
try {
|
|
3913
4412
|
setIsLoading(true);
|
|
@@ -3930,42 +4429,42 @@ var Permissions = ({
|
|
|
3930
4429
|
"Access your transaction history and trading activity",
|
|
3931
4430
|
"Keep this data updated and accessible when you're offline"
|
|
3932
4431
|
];
|
|
3933
|
-
return /* @__PURE__ */
|
|
3934
|
-
|
|
4432
|
+
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(
|
|
4433
|
+
import_react_native21.Text,
|
|
3935
4434
|
{
|
|
3936
|
-
style: [
|
|
4435
|
+
style: [styles19.subtitle, { color: theme.colors.textSecondary }]
|
|
3937
4436
|
},
|
|
3938
4437
|
"Allow ",
|
|
3939
4438
|
appName,
|
|
3940
4439
|
" to:"
|
|
3941
|
-
), permissionItems.map((item, index) => /* @__PURE__ */
|
|
3942
|
-
|
|
4440
|
+
), 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(
|
|
4441
|
+
import_react_native21.Text,
|
|
3943
4442
|
{
|
|
3944
|
-
style: [
|
|
4443
|
+
style: [styles19.permissionText, { color: theme.colors.text }]
|
|
3945
4444
|
},
|
|
3946
4445
|
item
|
|
3947
|
-
)))), /* @__PURE__ */
|
|
3948
|
-
|
|
4446
|
+
)))), /* @__PURE__ */ import_react37.default.createElement(
|
|
4447
|
+
import_react_native21.View,
|
|
3949
4448
|
{
|
|
3950
4449
|
style: [
|
|
3951
|
-
|
|
4450
|
+
styles19.infoBox,
|
|
3952
4451
|
{
|
|
3953
4452
|
backgroundColor: theme.colors.surface,
|
|
3954
4453
|
borderColor: theme.colors.border
|
|
3955
4454
|
}
|
|
3956
4455
|
]
|
|
3957
4456
|
},
|
|
3958
|
-
/* @__PURE__ */
|
|
3959
|
-
|
|
4457
|
+
/* @__PURE__ */ import_react37.default.createElement(
|
|
4458
|
+
import_react_native21.Text,
|
|
3960
4459
|
{
|
|
3961
|
-
style: [
|
|
4460
|
+
style: [styles19.infoText, { color: theme.colors.textSecondary }]
|
|
3962
4461
|
},
|
|
3963
4462
|
"By selecting",
|
|
3964
4463
|
" ",
|
|
3965
|
-
/* @__PURE__ */
|
|
4464
|
+
/* @__PURE__ */ import_react37.default.createElement(import_react_native21.Text, { style: { fontWeight: "600", color: theme.colors.text } }, "'Allow'"),
|
|
3966
4465
|
", you agree to share this information and keep it updated."
|
|
3967
4466
|
)
|
|
3968
|
-
))), /* @__PURE__ */
|
|
4467
|
+
))), /* @__PURE__ */ import_react37.default.createElement(ModalFooter, { style: { paddingVertical: 8 } }, /* @__PURE__ */ import_react37.default.createElement(
|
|
3969
4468
|
Button,
|
|
3970
4469
|
{
|
|
3971
4470
|
variant: "outline",
|
|
@@ -3973,12 +4472,12 @@ var Permissions = ({
|
|
|
3973
4472
|
onPress: handleConsentClick,
|
|
3974
4473
|
loading: isLoading,
|
|
3975
4474
|
disabled: isLoading,
|
|
3976
|
-
style:
|
|
4475
|
+
style: styles19.button
|
|
3977
4476
|
},
|
|
3978
4477
|
"Allow"
|
|
3979
|
-
), /* @__PURE__ */
|
|
4478
|
+
), /* @__PURE__ */ import_react37.default.createElement(Footer, null)));
|
|
3980
4479
|
};
|
|
3981
|
-
var
|
|
4480
|
+
var styles19 = import_react_native21.StyleSheet.create({
|
|
3982
4481
|
container: {
|
|
3983
4482
|
flex: 1
|
|
3984
4483
|
},
|
|
@@ -4036,8 +4535,8 @@ var styles17 = import_react_native19.StyleSheet.create({
|
|
|
4036
4535
|
});
|
|
4037
4536
|
|
|
4038
4537
|
// src/molecules/StatusModal.tsx
|
|
4039
|
-
var
|
|
4040
|
-
var
|
|
4538
|
+
var import_react38 = __toESM(require("react"));
|
|
4539
|
+
var import_react_native22 = require("react-native");
|
|
4041
4540
|
var StatusModal = ({
|
|
4042
4541
|
open,
|
|
4043
4542
|
onClose,
|
|
@@ -4054,18 +4553,18 @@ var StatusModal = ({
|
|
|
4054
4553
|
}
|
|
4055
4554
|
onClose();
|
|
4056
4555
|
};
|
|
4057
|
-
return /* @__PURE__ */
|
|
4556
|
+
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
4557
|
Button,
|
|
4059
4558
|
{
|
|
4060
4559
|
variant: "outline",
|
|
4061
4560
|
size: "lg",
|
|
4062
4561
|
onPress: status === "success" ? onSuccess : onError,
|
|
4063
|
-
style:
|
|
4562
|
+
style: styles20.button
|
|
4064
4563
|
},
|
|
4065
4564
|
status === "success" ? "Continue" : "Try again later"
|
|
4066
|
-
), /* @__PURE__ */
|
|
4565
|
+
), /* @__PURE__ */ import_react38.default.createElement(Footer, null)));
|
|
4067
4566
|
};
|
|
4068
|
-
var
|
|
4567
|
+
var styles20 = import_react_native22.StyleSheet.create({
|
|
4069
4568
|
container: {
|
|
4070
4569
|
flex: 1,
|
|
4071
4570
|
alignItems: "center",
|
|
@@ -4089,64 +4588,6 @@ var styles18 = import_react_native20.StyleSheet.create({
|
|
|
4089
4588
|
}
|
|
4090
4589
|
});
|
|
4091
4590
|
|
|
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
4591
|
// src/KryptosConnectButton.tsx
|
|
4151
4592
|
var KryptosConnectButton = ({
|
|
4152
4593
|
children,
|
|
@@ -4154,17 +4595,18 @@ var KryptosConnectButton = ({
|
|
|
4154
4595
|
onError,
|
|
4155
4596
|
generateLinkToken,
|
|
4156
4597
|
style,
|
|
4157
|
-
textStyle
|
|
4598
|
+
textStyle,
|
|
4599
|
+
integrationName
|
|
4158
4600
|
}) => {
|
|
4159
4601
|
const { theme: themeName } = useKryptosConnect();
|
|
4160
|
-
const [open, setOpen] =
|
|
4602
|
+
const [open, setOpen] = import_react39.default.useState(false);
|
|
4161
4603
|
const theme = useTheme();
|
|
4162
|
-
return /* @__PURE__ */
|
|
4163
|
-
|
|
4604
|
+
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(
|
|
4605
|
+
import_react_native23.TouchableOpacity,
|
|
4164
4606
|
{
|
|
4165
4607
|
onPress: () => setOpen(true),
|
|
4166
4608
|
style: [
|
|
4167
|
-
|
|
4609
|
+
styles21.defaultButton,
|
|
4168
4610
|
themeName === "light" ? {
|
|
4169
4611
|
backgroundColor: theme.colors.white,
|
|
4170
4612
|
borderRadius: theme.borderRadius.md,
|
|
@@ -4178,11 +4620,11 @@ var KryptosConnectButton = ({
|
|
|
4178
4620
|
],
|
|
4179
4621
|
activeOpacity: 0.8
|
|
4180
4622
|
},
|
|
4181
|
-
/* @__PURE__ */
|
|
4182
|
-
|
|
4623
|
+
/* @__PURE__ */ import_react39.default.createElement(
|
|
4624
|
+
import_react_native23.Text,
|
|
4183
4625
|
{
|
|
4184
4626
|
style: [
|
|
4185
|
-
|
|
4627
|
+
styles21.buttonText,
|
|
4186
4628
|
{
|
|
4187
4629
|
color: themeName === "light" ? theme.colors.primary : theme.colors.white,
|
|
4188
4630
|
fontSize: theme.fontSize.lg
|
|
@@ -4190,18 +4632,17 @@ var KryptosConnectButton = ({
|
|
|
4190
4632
|
textStyle
|
|
4191
4633
|
]
|
|
4192
4634
|
},
|
|
4193
|
-
"Connect
|
|
4194
|
-
|
|
4195
|
-
|
|
4196
|
-
/* @__PURE__ */ import_react37.default.createElement(LogoIcon, { size: 24 })
|
|
4197
|
-
), /* @__PURE__ */ import_react37.default.createElement(
|
|
4635
|
+
integrationName ? `Connect ${integrationName.charAt(0).toUpperCase() + integrationName.slice(1)} Account` : "Connect With Kryptos"
|
|
4636
|
+
)
|
|
4637
|
+
), open && /* @__PURE__ */ import_react39.default.createElement(
|
|
4198
4638
|
KryptosConnectModal,
|
|
4199
4639
|
{
|
|
4200
4640
|
open,
|
|
4201
4641
|
setOpen,
|
|
4202
4642
|
onSuccess,
|
|
4203
4643
|
onError,
|
|
4204
|
-
generateLinkToken
|
|
4644
|
+
generateLinkToken,
|
|
4645
|
+
integrationName
|
|
4205
4646
|
}
|
|
4206
4647
|
));
|
|
4207
4648
|
};
|
|
@@ -4210,7 +4651,8 @@ var KryptosConnectModal = ({
|
|
|
4210
4651
|
setOpen,
|
|
4211
4652
|
onSuccess,
|
|
4212
4653
|
onError,
|
|
4213
|
-
generateLinkToken
|
|
4654
|
+
generateLinkToken,
|
|
4655
|
+
integrationName
|
|
4214
4656
|
}) => {
|
|
4215
4657
|
const {
|
|
4216
4658
|
setIsInitialized,
|
|
@@ -4222,7 +4664,20 @@ var KryptosConnectModal = ({
|
|
|
4222
4664
|
isAuthorized,
|
|
4223
4665
|
linkToken
|
|
4224
4666
|
} = useKryptosConnect();
|
|
4225
|
-
const [step, setStep] =
|
|
4667
|
+
const [step, setStep] = import_react39.default.useState("INIT" /* INIT */);
|
|
4668
|
+
const [integrationDetails, setIntegrationDetails] = (0, import_react39.useState)(null);
|
|
4669
|
+
(0, import_react39.useEffect)(() => {
|
|
4670
|
+
if (integrationName && linkToken) {
|
|
4671
|
+
const fetchIntegrationDetails = async () => {
|
|
4672
|
+
const integrationDetails2 = await getSupportedProviders(
|
|
4673
|
+
linkToken,
|
|
4674
|
+
integrationName
|
|
4675
|
+
);
|
|
4676
|
+
setIntegrationDetails(integrationDetails2?.providers?.[0]);
|
|
4677
|
+
};
|
|
4678
|
+
fetchIntegrationDetails();
|
|
4679
|
+
}
|
|
4680
|
+
}, [integrationName, linkToken]);
|
|
4226
4681
|
const handleClose = () => {
|
|
4227
4682
|
setOpen(false);
|
|
4228
4683
|
setIsInitialized(false);
|
|
@@ -4258,7 +4713,7 @@ var KryptosConnectModal = ({
|
|
|
4258
4713
|
handleClose();
|
|
4259
4714
|
};
|
|
4260
4715
|
if (!open) return null;
|
|
4261
|
-
return /* @__PURE__ */
|
|
4716
|
+
return /* @__PURE__ */ import_react39.default.createElement(import_react_native23.View, { style: styles21.container }, step === "INIT" /* INIT */ && /* @__PURE__ */ import_react39.default.createElement(
|
|
4262
4717
|
Init,
|
|
4263
4718
|
{
|
|
4264
4719
|
open,
|
|
@@ -4272,7 +4727,7 @@ var KryptosConnectModal = ({
|
|
|
4272
4727
|
},
|
|
4273
4728
|
onClose: handleAbort
|
|
4274
4729
|
}
|
|
4275
|
-
), step === "AUTH" /* AUTH */ && /* @__PURE__ */
|
|
4730
|
+
), step === "AUTH" /* AUTH */ && /* @__PURE__ */ import_react39.default.createElement(
|
|
4276
4731
|
Auth,
|
|
4277
4732
|
{
|
|
4278
4733
|
open,
|
|
@@ -4280,28 +4735,29 @@ var KryptosConnectModal = ({
|
|
|
4280
4735
|
onGuestSuccess: () => setStep("INTEGRATION" /* INTEGRATION */),
|
|
4281
4736
|
onClose: handleAbort
|
|
4282
4737
|
}
|
|
4283
|
-
), step === "OTP" /* OTP */ && /* @__PURE__ */
|
|
4738
|
+
), step === "OTP" /* OTP */ && /* @__PURE__ */ import_react39.default.createElement(
|
|
4284
4739
|
OTPVerify,
|
|
4285
4740
|
{
|
|
4286
4741
|
open,
|
|
4287
4742
|
onSuccess: () => setStep("INTEGRATION" /* INTEGRATION */),
|
|
4288
4743
|
onClose: handleAbort
|
|
4289
4744
|
}
|
|
4290
|
-
), step === "INTEGRATION" /* INTEGRATION */ && /* @__PURE__ */
|
|
4745
|
+
), step === "INTEGRATION" /* INTEGRATION */ && /* @__PURE__ */ import_react39.default.createElement(
|
|
4291
4746
|
Integration,
|
|
4292
4747
|
{
|
|
4293
4748
|
open,
|
|
4294
4749
|
onSuccess: handleConsentClick,
|
|
4295
|
-
onClose: handleAbort
|
|
4750
|
+
onClose: handleAbort,
|
|
4751
|
+
integrationDetails
|
|
4296
4752
|
}
|
|
4297
|
-
), step === "PERMISSIONS" /* PERMISSIONS */ && /* @__PURE__ */
|
|
4753
|
+
), step === "PERMISSIONS" /* PERMISSIONS */ && /* @__PURE__ */ import_react39.default.createElement(
|
|
4298
4754
|
Permissions,
|
|
4299
4755
|
{
|
|
4300
4756
|
open,
|
|
4301
4757
|
onClose: handleAbort,
|
|
4302
4758
|
onSuccess: () => setStep("STATUS" /* STATUS */)
|
|
4303
4759
|
}
|
|
4304
|
-
), step === "STATUS" /* STATUS */ && /* @__PURE__ */
|
|
4760
|
+
), step === "STATUS" /* STATUS */ && /* @__PURE__ */ import_react39.default.createElement(
|
|
4305
4761
|
StatusModal,
|
|
4306
4762
|
{
|
|
4307
4763
|
open,
|
|
@@ -4310,7 +4766,7 @@ var KryptosConnectModal = ({
|
|
|
4310
4766
|
onError: handleError,
|
|
4311
4767
|
status: userConsent?.public_token ? "success" : "error"
|
|
4312
4768
|
}
|
|
4313
|
-
), step === "END" /* END */ && /* @__PURE__ */
|
|
4769
|
+
), step === "END" /* END */ && /* @__PURE__ */ import_react39.default.createElement(
|
|
4314
4770
|
EndModal,
|
|
4315
4771
|
{
|
|
4316
4772
|
open,
|
|
@@ -4322,7 +4778,7 @@ var KryptosConnectModal = ({
|
|
|
4322
4778
|
}
|
|
4323
4779
|
));
|
|
4324
4780
|
};
|
|
4325
|
-
var
|
|
4781
|
+
var styles21 = import_react_native23.StyleSheet.create({
|
|
4326
4782
|
defaultButton: {
|
|
4327
4783
|
flexDirection: "row",
|
|
4328
4784
|
alignItems: "center",
|