@kryptos_connect/mobile-sdk 1.0.3 → 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 +1318 -782
- package/dist/index.mjs +1279 -755
- 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"));
|
|
@@ -88,6 +51,11 @@ var import_axios = __toESM(require("axios"));
|
|
|
88
51
|
var getBaseUrl = () => {
|
|
89
52
|
return getGlobalBaseUrl() || "https://connect-api.kryptos.io/";
|
|
90
53
|
};
|
|
54
|
+
var isSvgUrl = (url) => {
|
|
55
|
+
if (!url) return false;
|
|
56
|
+
const urlWithoutParams = url.split("?")[0].split("#")[0];
|
|
57
|
+
return /\.svg$/i.test(urlWithoutParams);
|
|
58
|
+
};
|
|
91
59
|
|
|
92
60
|
// src/services/api.ts
|
|
93
61
|
var api = import_axios.default.create({
|
|
@@ -143,7 +111,7 @@ async function createAnonymousUser(linkToken, clientId) {
|
|
|
143
111
|
}
|
|
144
112
|
}
|
|
145
113
|
);
|
|
146
|
-
return res.data;
|
|
114
|
+
return res.data?.data;
|
|
147
115
|
}
|
|
148
116
|
async function addUserIntegration(linkToken, integration) {
|
|
149
117
|
const res = await api.post(
|
|
@@ -179,8 +147,8 @@ async function testCredentials(linkToken, data) {
|
|
|
179
147
|
});
|
|
180
148
|
return res.data?.data;
|
|
181
149
|
}
|
|
182
|
-
async function getSupportedProviders(linkToken) {
|
|
183
|
-
const res = await api.get(
|
|
150
|
+
async function getSupportedProviders(linkToken, id) {
|
|
151
|
+
const res = await api.get(`/integrations/providers${id ? `?id=${id}` : ""}`, {
|
|
184
152
|
headers: {
|
|
185
153
|
"X-LINK-TOKEN": linkToken
|
|
186
154
|
}
|
|
@@ -226,23 +194,23 @@ async function getUserInfo(linkToken) {
|
|
|
226
194
|
// src/contexts/KryptosContext.tsx
|
|
227
195
|
var globalBaseUrl;
|
|
228
196
|
var getGlobalBaseUrl = () => globalBaseUrl;
|
|
229
|
-
var KryptosContext =
|
|
197
|
+
var KryptosContext = import_react.default.createContext(
|
|
230
198
|
void 0
|
|
231
199
|
);
|
|
232
200
|
var KryptosConnectProvider = ({ children, config }) => {
|
|
233
|
-
const [isInitialized, setIsInitialized] =
|
|
234
|
-
const [linkToken, setLinkToken] =
|
|
235
|
-
const [user, setUser] =
|
|
236
|
-
const [email, setEmail] =
|
|
237
|
-
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(
|
|
238
206
|
null
|
|
239
207
|
);
|
|
240
|
-
const [isAuthorized, setIsAuthorized] =
|
|
241
|
-
const [clientInfo, setClientInfo] =
|
|
242
|
-
|
|
208
|
+
const [isAuthorized, setIsAuthorized] = import_react.default.useState(false);
|
|
209
|
+
const [clientInfo, setClientInfo] = import_react.default.useState(null);
|
|
210
|
+
import_react.default.useEffect(() => {
|
|
243
211
|
globalBaseUrl = config.baseUrl;
|
|
244
212
|
}, [config.baseUrl]);
|
|
245
|
-
|
|
213
|
+
import_react.default.useEffect(() => {
|
|
246
214
|
const fetchClientInfo = async () => {
|
|
247
215
|
if (linkToken) {
|
|
248
216
|
const res = await getClientInfo(linkToken);
|
|
@@ -251,7 +219,7 @@ var KryptosConnectProvider = ({ children, config }) => {
|
|
|
251
219
|
};
|
|
252
220
|
fetchClientInfo();
|
|
253
221
|
}, [linkToken]);
|
|
254
|
-
return /* @__PURE__ */
|
|
222
|
+
return /* @__PURE__ */ import_react.default.createElement(
|
|
255
223
|
KryptosContext.Provider,
|
|
256
224
|
{
|
|
257
225
|
value: {
|
|
@@ -275,7 +243,7 @@ var KryptosConnectProvider = ({ children, config }) => {
|
|
|
275
243
|
);
|
|
276
244
|
};
|
|
277
245
|
var useKryptosConnect = () => {
|
|
278
|
-
const ctx =
|
|
246
|
+
const ctx = import_react.default.useContext(KryptosContext);
|
|
279
247
|
if (!ctx)
|
|
280
248
|
throw new Error(
|
|
281
249
|
"useKryptosConnect must be used inside <KryptosConnectProvider>"
|
|
@@ -284,7 +252,7 @@ var useKryptosConnect = () => {
|
|
|
284
252
|
};
|
|
285
253
|
|
|
286
254
|
// src/hooks/useTheme.ts
|
|
287
|
-
var
|
|
255
|
+
var import_react2 = __toESM(require("react"));
|
|
288
256
|
|
|
289
257
|
// src/theme/index.ts
|
|
290
258
|
var lightTheme = {
|
|
@@ -425,14 +393,14 @@ var getTheme = (isDark) => {
|
|
|
425
393
|
// src/hooks/useTheme.ts
|
|
426
394
|
var useTheme = () => {
|
|
427
395
|
const { theme } = useKryptosConnect();
|
|
428
|
-
const currentTheme =
|
|
396
|
+
const currentTheme = import_react2.default.useMemo(() => {
|
|
429
397
|
return getTheme(theme === "dark");
|
|
430
398
|
}, [theme]);
|
|
431
399
|
return currentTheme;
|
|
432
400
|
};
|
|
433
401
|
|
|
434
402
|
// src/components/Button.tsx
|
|
435
|
-
var
|
|
403
|
+
var import_react3 = __toESM(require("react"));
|
|
436
404
|
var import_react_native = require("react-native");
|
|
437
405
|
var Button = ({
|
|
438
406
|
variant = "primary",
|
|
@@ -545,7 +513,7 @@ var Button = ({
|
|
|
545
513
|
}
|
|
546
514
|
};
|
|
547
515
|
const sizeStyles = getSizeStyles();
|
|
548
|
-
return /* @__PURE__ */
|
|
516
|
+
return /* @__PURE__ */ import_react3.default.createElement(
|
|
549
517
|
import_react_native.TouchableOpacity,
|
|
550
518
|
{
|
|
551
519
|
onPress,
|
|
@@ -559,7 +527,7 @@ var Button = ({
|
|
|
559
527
|
style
|
|
560
528
|
]
|
|
561
529
|
},
|
|
562
|
-
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(
|
|
563
531
|
import_react_native.Text,
|
|
564
532
|
{
|
|
565
533
|
style: [
|
|
@@ -570,7 +538,7 @@ var Button = ({
|
|
|
570
538
|
]
|
|
571
539
|
},
|
|
572
540
|
children
|
|
573
|
-
) : /* @__PURE__ */
|
|
541
|
+
) : /* @__PURE__ */ import_react3.default.createElement(import_react_native.View, { style: styles.contentContainer }, children)
|
|
574
542
|
);
|
|
575
543
|
};
|
|
576
544
|
var styles = import_react_native.StyleSheet.create({
|
|
@@ -595,7 +563,7 @@ var styles = import_react_native.StyleSheet.create({
|
|
|
595
563
|
});
|
|
596
564
|
|
|
597
565
|
// src/components/Input.tsx
|
|
598
|
-
var
|
|
566
|
+
var import_react4 = __toESM(require("react"));
|
|
599
567
|
var import_react_native2 = require("react-native");
|
|
600
568
|
var Input = ({
|
|
601
569
|
label,
|
|
@@ -619,7 +587,7 @@ var Input = ({
|
|
|
619
587
|
return theme.colors.border;
|
|
620
588
|
}
|
|
621
589
|
};
|
|
622
|
-
return /* @__PURE__ */
|
|
590
|
+
return /* @__PURE__ */ import_react4.default.createElement(import_react_native2.View, { style: [styles2.wrapper, containerStyle] }, label && /* @__PURE__ */ import_react4.default.createElement(
|
|
623
591
|
import_react_native2.Text,
|
|
624
592
|
{
|
|
625
593
|
style: [
|
|
@@ -629,7 +597,7 @@ var Input = ({
|
|
|
629
597
|
]
|
|
630
598
|
},
|
|
631
599
|
label
|
|
632
|
-
), /* @__PURE__ */
|
|
600
|
+
), /* @__PURE__ */ import_react4.default.createElement(
|
|
633
601
|
import_react_native2.TextInput,
|
|
634
602
|
{
|
|
635
603
|
placeholderTextColor: theme.colors.textTertiary,
|
|
@@ -648,7 +616,7 @@ var Input = ({
|
|
|
648
616
|
],
|
|
649
617
|
...props
|
|
650
618
|
}
|
|
651
|
-
), error && /* @__PURE__ */
|
|
619
|
+
), error && /* @__PURE__ */ import_react4.default.createElement(
|
|
652
620
|
import_react_native2.Text,
|
|
653
621
|
{
|
|
654
622
|
style: [
|
|
@@ -657,7 +625,7 @@ var Input = ({
|
|
|
657
625
|
]
|
|
658
626
|
},
|
|
659
627
|
error
|
|
660
|
-
), helperText && !error && /* @__PURE__ */
|
|
628
|
+
), helperText && !error && /* @__PURE__ */ import_react4.default.createElement(
|
|
661
629
|
import_react_native2.Text,
|
|
662
630
|
{
|
|
663
631
|
style: [
|
|
@@ -696,7 +664,7 @@ var styles2 = import_react_native2.StyleSheet.create({
|
|
|
696
664
|
});
|
|
697
665
|
|
|
698
666
|
// src/components/Alert.tsx
|
|
699
|
-
var
|
|
667
|
+
var import_react5 = __toESM(require("react"));
|
|
700
668
|
var import_react_native3 = require("react-native");
|
|
701
669
|
var Alert = ({
|
|
702
670
|
variant = "default",
|
|
@@ -718,7 +686,7 @@ var Alert = ({
|
|
|
718
686
|
};
|
|
719
687
|
}
|
|
720
688
|
};
|
|
721
|
-
return /* @__PURE__ */
|
|
689
|
+
return /* @__PURE__ */ import_react5.default.createElement(
|
|
722
690
|
import_react_native3.View,
|
|
723
691
|
{
|
|
724
692
|
style: [
|
|
@@ -734,12 +702,30 @@ var Alert = ({
|
|
|
734
702
|
children
|
|
735
703
|
);
|
|
736
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
|
+
};
|
|
737
723
|
var AlertDescription = ({
|
|
738
724
|
children,
|
|
739
725
|
style
|
|
740
726
|
}) => {
|
|
741
727
|
const theme = useTheme();
|
|
742
|
-
return /* @__PURE__ */
|
|
728
|
+
return /* @__PURE__ */ import_react5.default.createElement(
|
|
743
729
|
import_react_native3.Text,
|
|
744
730
|
{
|
|
745
731
|
style: [
|
|
@@ -772,18 +758,18 @@ var styles3 = import_react_native3.StyleSheet.create({
|
|
|
772
758
|
});
|
|
773
759
|
|
|
774
760
|
// src/components/Modal.tsx
|
|
775
|
-
var
|
|
761
|
+
var import_react7 = __toESM(require("react"));
|
|
776
762
|
var import_react_native4 = require("react-native");
|
|
777
763
|
|
|
778
764
|
// src/assets/CloseIcon.tsx
|
|
779
|
-
var
|
|
780
|
-
var
|
|
765
|
+
var import_react6 = __toESM(require("react"));
|
|
766
|
+
var import_react_native_svg = __toESM(require("react-native-svg"));
|
|
781
767
|
var CloseIcon = ({
|
|
782
768
|
size = 20,
|
|
783
769
|
color = "#000"
|
|
784
770
|
}) => {
|
|
785
|
-
return /* @__PURE__ */
|
|
786
|
-
|
|
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,
|
|
787
773
|
{
|
|
788
774
|
d: "M15 5L5 15M5 5L15 15",
|
|
789
775
|
stroke: color,
|
|
@@ -809,7 +795,7 @@ var Modal = ({
|
|
|
809
795
|
const getSizeStyles = () => {
|
|
810
796
|
switch (size) {
|
|
811
797
|
case "xs":
|
|
812
|
-
return { maxHeight: SCREEN_HEIGHT * 0.
|
|
798
|
+
return { maxHeight: SCREEN_HEIGHT * 0.4 };
|
|
813
799
|
case "sm":
|
|
814
800
|
return { maxHeight: SCREEN_HEIGHT * 0.45 };
|
|
815
801
|
case "md":
|
|
@@ -827,13 +813,13 @@ var Modal = ({
|
|
|
827
813
|
const handleOverlayPress = () => {
|
|
828
814
|
if (!disableClose && closeOnOverlayClick) onClose();
|
|
829
815
|
};
|
|
830
|
-
return /* @__PURE__ */
|
|
816
|
+
return /* @__PURE__ */ import_react7.default.createElement(
|
|
831
817
|
import_react_native4.KeyboardAvoidingView,
|
|
832
818
|
{
|
|
833
819
|
behavior: import_react_native4.Platform.OS === "ios" ? "padding" : "height",
|
|
834
820
|
style: styles4.keyboardView
|
|
835
821
|
},
|
|
836
|
-
/* @__PURE__ */
|
|
822
|
+
/* @__PURE__ */ import_react7.default.createElement(
|
|
837
823
|
import_react_native4.Modal,
|
|
838
824
|
{
|
|
839
825
|
visible: isOpen,
|
|
@@ -842,14 +828,14 @@ var Modal = ({
|
|
|
842
828
|
statusBarTranslucent: true,
|
|
843
829
|
onRequestClose: disableClose ? void 0 : onClose
|
|
844
830
|
},
|
|
845
|
-
/* @__PURE__ */
|
|
831
|
+
/* @__PURE__ */ import_react7.default.createElement(
|
|
846
832
|
import_react_native4.TouchableOpacity,
|
|
847
833
|
{
|
|
848
834
|
activeOpacity: 1,
|
|
849
835
|
style: [styles4.overlay, { backgroundColor: theme.colors.overlay }],
|
|
850
836
|
onPress: handleOverlayPress
|
|
851
837
|
},
|
|
852
|
-
/* @__PURE__ */
|
|
838
|
+
/* @__PURE__ */ import_react7.default.createElement(
|
|
853
839
|
import_react_native4.View,
|
|
854
840
|
{
|
|
855
841
|
style: [
|
|
@@ -880,7 +866,7 @@ var ModalHeader = ({
|
|
|
880
866
|
style
|
|
881
867
|
}) => {
|
|
882
868
|
const theme = useTheme();
|
|
883
|
-
return /* @__PURE__ */
|
|
869
|
+
return /* @__PURE__ */ import_react7.default.createElement(
|
|
884
870
|
import_react_native4.View,
|
|
885
871
|
{
|
|
886
872
|
style: [
|
|
@@ -893,7 +879,7 @@ var ModalHeader = ({
|
|
|
893
879
|
style
|
|
894
880
|
]
|
|
895
881
|
},
|
|
896
|
-
/* @__PURE__ */
|
|
882
|
+
/* @__PURE__ */ import_react7.default.createElement(import_react_native4.View, { style: styles4.headerContent }, typeof children === "string" ? /* @__PURE__ */ import_react7.default.createElement(
|
|
897
883
|
import_react_native4.Text,
|
|
898
884
|
{
|
|
899
885
|
style: [
|
|
@@ -903,7 +889,7 @@ var ModalHeader = ({
|
|
|
903
889
|
},
|
|
904
890
|
children
|
|
905
891
|
) : children),
|
|
906
|
-
showCloseButton && onClose && /* @__PURE__ */
|
|
892
|
+
showCloseButton && onClose && /* @__PURE__ */ import_react7.default.createElement(
|
|
907
893
|
import_react_native4.TouchableOpacity,
|
|
908
894
|
{
|
|
909
895
|
onPress: onClose,
|
|
@@ -913,7 +899,7 @@ var ModalHeader = ({
|
|
|
913
899
|
{ backgroundColor: theme.colors.surface }
|
|
914
900
|
]
|
|
915
901
|
},
|
|
916
|
-
/* @__PURE__ */
|
|
902
|
+
/* @__PURE__ */ import_react7.default.createElement(CloseIcon, { color: theme.colors.text, size: 20 })
|
|
917
903
|
)
|
|
918
904
|
);
|
|
919
905
|
};
|
|
@@ -924,7 +910,7 @@ var ModalBody = ({
|
|
|
924
910
|
}) => {
|
|
925
911
|
const theme = useTheme();
|
|
926
912
|
if (scrollable) {
|
|
927
|
-
return /* @__PURE__ */
|
|
913
|
+
return /* @__PURE__ */ import_react7.default.createElement(
|
|
928
914
|
import_react_native4.ScrollView,
|
|
929
915
|
{
|
|
930
916
|
style: styles4.bodyScroll,
|
|
@@ -939,14 +925,14 @@ var ModalBody = ({
|
|
|
939
925
|
children
|
|
940
926
|
);
|
|
941
927
|
}
|
|
942
|
-
return /* @__PURE__ */
|
|
928
|
+
return /* @__PURE__ */ import_react7.default.createElement(import_react_native4.View, { style: [styles4.body, { padding: theme.spacing.lg }, style] }, children);
|
|
943
929
|
};
|
|
944
930
|
var ModalFooter = ({
|
|
945
931
|
children,
|
|
946
932
|
style
|
|
947
933
|
}) => {
|
|
948
934
|
const theme = useTheme();
|
|
949
|
-
return /* @__PURE__ */
|
|
935
|
+
return /* @__PURE__ */ import_react7.default.createElement(
|
|
950
936
|
import_react_native4.View,
|
|
951
937
|
{
|
|
952
938
|
style: [
|
|
@@ -1015,13 +1001,12 @@ var styles4 = import_react_native4.StyleSheet.create({
|
|
|
1015
1001
|
flex: 1
|
|
1016
1002
|
},
|
|
1017
1003
|
footer: {
|
|
1018
|
-
borderTopWidth: 1
|
|
1019
|
-
marginBottom: 24
|
|
1004
|
+
borderTopWidth: 1
|
|
1020
1005
|
}
|
|
1021
1006
|
});
|
|
1022
1007
|
|
|
1023
1008
|
// src/components/OTP.tsx
|
|
1024
|
-
var
|
|
1009
|
+
var import_react8 = __toESM(require("react"));
|
|
1025
1010
|
var import_react_native5 = require("react-native");
|
|
1026
1011
|
var OTP = ({
|
|
1027
1012
|
length = 6,
|
|
@@ -1037,11 +1022,11 @@ var OTP = ({
|
|
|
1037
1022
|
}) => {
|
|
1038
1023
|
const theme = useTheme();
|
|
1039
1024
|
const AUTO_SUBMIT_DELAY = 500;
|
|
1040
|
-
const [otp, setOtp] =
|
|
1025
|
+
const [otp, setOtp] = import_react8.default.useState(
|
|
1041
1026
|
value.split("").concat(Array(length).fill("")).slice(0, length)
|
|
1042
1027
|
);
|
|
1043
|
-
const inputRefs =
|
|
1044
|
-
|
|
1028
|
+
const inputRefs = import_react8.default.useRef([]);
|
|
1029
|
+
import_react8.default.useEffect(() => {
|
|
1045
1030
|
const isComplete = otp.every((digit) => digit !== "");
|
|
1046
1031
|
let timer;
|
|
1047
1032
|
if (isComplete && onComplete) {
|
|
@@ -1053,12 +1038,12 @@ var OTP = ({
|
|
|
1053
1038
|
if (timer) clearTimeout(timer);
|
|
1054
1039
|
};
|
|
1055
1040
|
}, [otp, onComplete]);
|
|
1056
|
-
|
|
1041
|
+
import_react8.default.useEffect(() => {
|
|
1057
1042
|
setTimeout(() => {
|
|
1058
1043
|
inputRefs.current[0]?.focus();
|
|
1059
1044
|
}, 100);
|
|
1060
1045
|
}, []);
|
|
1061
|
-
const handleChange =
|
|
1046
|
+
const handleChange = import_react8.default.useCallback(
|
|
1062
1047
|
(index, val) => {
|
|
1063
1048
|
if (disabled) return;
|
|
1064
1049
|
setErrorMessage("");
|
|
@@ -1081,7 +1066,7 @@ var OTP = ({
|
|
|
1081
1066
|
},
|
|
1082
1067
|
[otp, length, onChange, onComplete, disabled]
|
|
1083
1068
|
);
|
|
1084
|
-
const handleKeyPress =
|
|
1069
|
+
const handleKeyPress = import_react8.default.useCallback(
|
|
1085
1070
|
(index, e) => {
|
|
1086
1071
|
if (disabled) return;
|
|
1087
1072
|
if (e.nativeEvent.key === "Backspace") {
|
|
@@ -1102,7 +1087,7 @@ var OTP = ({
|
|
|
1102
1087
|
if (otp[index]) return theme.colors.success;
|
|
1103
1088
|
return theme.colors.border;
|
|
1104
1089
|
};
|
|
1105
|
-
return /* @__PURE__ */
|
|
1090
|
+
return /* @__PURE__ */ import_react8.default.createElement(import_react_native5.View, { style: [styles5.wrapper, containerStyle] }, label && /* @__PURE__ */ import_react8.default.createElement(
|
|
1106
1091
|
import_react_native5.Text,
|
|
1107
1092
|
{
|
|
1108
1093
|
style: [
|
|
@@ -1111,7 +1096,7 @@ var OTP = ({
|
|
|
1111
1096
|
]
|
|
1112
1097
|
},
|
|
1113
1098
|
label
|
|
1114
|
-
), /* @__PURE__ */
|
|
1099
|
+
), /* @__PURE__ */ import_react8.default.createElement(import_react_native5.View, { style: styles5.container }, Array.from({ length }, (_, index) => /* @__PURE__ */ import_react8.default.createElement(
|
|
1115
1100
|
import_react_native5.TextInput,
|
|
1116
1101
|
{
|
|
1117
1102
|
key: index,
|
|
@@ -1136,7 +1121,7 @@ var OTP = ({
|
|
|
1136
1121
|
selectTextOnFocus: true,
|
|
1137
1122
|
caretHidden: true
|
|
1138
1123
|
}
|
|
1139
|
-
))), error && /* @__PURE__ */
|
|
1124
|
+
))), error && /* @__PURE__ */ import_react8.default.createElement(
|
|
1140
1125
|
import_react_native5.Text,
|
|
1141
1126
|
{
|
|
1142
1127
|
style: [
|
|
@@ -1179,11 +1164,11 @@ var styles5 = import_react_native5.StyleSheet.create({
|
|
|
1179
1164
|
});
|
|
1180
1165
|
|
|
1181
1166
|
// src/components/SkeletonItem.tsx
|
|
1182
|
-
var
|
|
1167
|
+
var import_react9 = __toESM(require("react"));
|
|
1183
1168
|
var import_react_native6 = require("react-native");
|
|
1184
1169
|
var SkeletonItem = () => {
|
|
1185
|
-
const opacity = (0,
|
|
1186
|
-
(0,
|
|
1170
|
+
const opacity = (0, import_react9.useRef)(new import_react_native6.Animated.Value(0.3)).current;
|
|
1171
|
+
(0, import_react9.useEffect)(() => {
|
|
1187
1172
|
import_react_native6.Animated.loop(
|
|
1188
1173
|
import_react_native6.Animated.sequence([
|
|
1189
1174
|
import_react_native6.Animated.timing(opacity, {
|
|
@@ -1199,7 +1184,7 @@ var SkeletonItem = () => {
|
|
|
1199
1184
|
])
|
|
1200
1185
|
).start();
|
|
1201
1186
|
}, []);
|
|
1202
|
-
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 })));
|
|
1203
1188
|
};
|
|
1204
1189
|
var styles6 = import_react_native6.StyleSheet.create({
|
|
1205
1190
|
row: {
|
|
@@ -1234,14 +1219,14 @@ var styles6 = import_react_native6.StyleSheet.create({
|
|
|
1234
1219
|
var SkeletonItem_default = SkeletonItem;
|
|
1235
1220
|
|
|
1236
1221
|
// src/components/Mode.tsx
|
|
1237
|
-
var
|
|
1222
|
+
var import_react10 = __toESM(require("react"));
|
|
1238
1223
|
var import_react_native7 = require("react-native");
|
|
1239
1224
|
var Mode = () => {
|
|
1240
1225
|
const { clientInfo } = useKryptosConnect();
|
|
1241
1226
|
const theme = useTheme();
|
|
1242
1227
|
if (!clientInfo) return null;
|
|
1243
1228
|
if (clientInfo?.project_stage === "production") return null;
|
|
1244
|
-
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"));
|
|
1245
1230
|
};
|
|
1246
1231
|
var styles7 = import_react_native7.StyleSheet.create({
|
|
1247
1232
|
container: {
|
|
@@ -1264,6 +1249,45 @@ var import_react_native9 = require("react-native");
|
|
|
1264
1249
|
// src/components/PoweredByKryptos.tsx
|
|
1265
1250
|
var import_react12 = __toESM(require("react"));
|
|
1266
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
|
|
1267
1291
|
var PoweredByKryptos = () => {
|
|
1268
1292
|
const theme = useTheme();
|
|
1269
1293
|
const handlePress = () => {
|
|
@@ -1308,8 +1332,8 @@ var styles9 = import_react_native9.StyleSheet.create({
|
|
|
1308
1332
|
});
|
|
1309
1333
|
|
|
1310
1334
|
// src/molecules/Auth.tsx
|
|
1311
|
-
var
|
|
1312
|
-
var
|
|
1335
|
+
var import_react20 = __toESM(require("react"));
|
|
1336
|
+
var import_react_native12 = require("react-native");
|
|
1313
1337
|
|
|
1314
1338
|
// src/assets/LinkIcon.tsx
|
|
1315
1339
|
var import_react14 = __toESM(require("react"));
|
|
@@ -1378,8 +1402,8 @@ var EyeIcon = ({
|
|
|
1378
1402
|
};
|
|
1379
1403
|
|
|
1380
1404
|
// src/molecules/ConnectLogo.tsx
|
|
1381
|
-
var
|
|
1382
|
-
var
|
|
1405
|
+
var import_react19 = __toESM(require("react"));
|
|
1406
|
+
var import_react_native11 = require("react-native");
|
|
1383
1407
|
|
|
1384
1408
|
// src/assets/UnplugIcon.tsx
|
|
1385
1409
|
var import_react17 = __toESM(require("react"));
|
|
@@ -1438,15 +1462,40 @@ var UnplugIcon = ({
|
|
|
1438
1462
|
));
|
|
1439
1463
|
};
|
|
1440
1464
|
|
|
1465
|
+
// src/components/remote-svg.tsx
|
|
1466
|
+
var import_react18 = __toESM(require("react"));
|
|
1467
|
+
var import_react_native10 = require("react-native");
|
|
1468
|
+
var import_react_native_svg7 = require("react-native-svg");
|
|
1469
|
+
function RemoteSvg({
|
|
1470
|
+
uri,
|
|
1471
|
+
width = 32,
|
|
1472
|
+
height = 32
|
|
1473
|
+
}) {
|
|
1474
|
+
const [svgXml, setSvgXml] = (0, import_react18.useState)(null);
|
|
1475
|
+
(0, import_react18.useEffect)(() => {
|
|
1476
|
+
fetch(uri).then((res) => res.text()).then((text) => setSvgXml(text)).catch((err) => console.error("SVG load error:", err));
|
|
1477
|
+
}, [uri]);
|
|
1478
|
+
if (!svgXml) return /* @__PURE__ */ import_react18.default.createElement(import_react_native10.ActivityIndicator, null);
|
|
1479
|
+
return /* @__PURE__ */ import_react18.default.createElement(
|
|
1480
|
+
import_react_native_svg7.SvgXml,
|
|
1481
|
+
{
|
|
1482
|
+
xml: svgXml,
|
|
1483
|
+
width,
|
|
1484
|
+
height,
|
|
1485
|
+
style: { borderRadius: 8 }
|
|
1486
|
+
}
|
|
1487
|
+
);
|
|
1488
|
+
}
|
|
1489
|
+
|
|
1441
1490
|
// src/molecules/ConnectLogo.tsx
|
|
1442
1491
|
var KryptosLogo = () => {
|
|
1443
1492
|
const theme = useTheme();
|
|
1444
|
-
return /* @__PURE__ */
|
|
1445
|
-
|
|
1493
|
+
return /* @__PURE__ */ import_react19.default.createElement(
|
|
1494
|
+
import_react_native11.View,
|
|
1446
1495
|
{
|
|
1447
1496
|
style: [styles10.logoContainer, { backgroundColor: theme.colors.surface }]
|
|
1448
1497
|
},
|
|
1449
|
-
/* @__PURE__ */
|
|
1498
|
+
/* @__PURE__ */ import_react19.default.createElement(LogoIcon, { size: 36 })
|
|
1450
1499
|
);
|
|
1451
1500
|
};
|
|
1452
1501
|
var ConnectLogo = () => {
|
|
@@ -1461,11 +1510,11 @@ var ConnectLogo = () => {
|
|
|
1461
1510
|
}
|
|
1462
1511
|
};
|
|
1463
1512
|
const renderLogo = () => {
|
|
1464
|
-
if ((0,
|
|
1513
|
+
if ((0, import_react19.isValidElement)(appLogo)) {
|
|
1465
1514
|
return appLogo;
|
|
1466
1515
|
} else if (typeof appLogo === "string" && isValidUrl(appLogo)) {
|
|
1467
|
-
return /* @__PURE__ */
|
|
1468
|
-
|
|
1516
|
+
return isSvgUrl(appLogo) ? /* @__PURE__ */ import_react19.default.createElement(RemoteSvg, { uri: appLogo }) : /* @__PURE__ */ import_react19.default.createElement(
|
|
1517
|
+
import_react_native11.Image,
|
|
1469
1518
|
{
|
|
1470
1519
|
source: { uri: appLogo },
|
|
1471
1520
|
style: styles10.appLogoImage,
|
|
@@ -1473,8 +1522,8 @@ var ConnectLogo = () => {
|
|
|
1473
1522
|
}
|
|
1474
1523
|
);
|
|
1475
1524
|
} else if (typeof appLogo === "number" || typeof appLogo === "object" && appLogo !== null) {
|
|
1476
|
-
return /* @__PURE__ */
|
|
1477
|
-
|
|
1525
|
+
return /* @__PURE__ */ import_react19.default.createElement(
|
|
1526
|
+
import_react_native11.Image,
|
|
1478
1527
|
{
|
|
1479
1528
|
source: appLogo,
|
|
1480
1529
|
style: styles10.appLogoImage,
|
|
@@ -1482,12 +1531,12 @@ var ConnectLogo = () => {
|
|
|
1482
1531
|
}
|
|
1483
1532
|
);
|
|
1484
1533
|
} else if (appName) {
|
|
1485
|
-
return /* @__PURE__ */
|
|
1534
|
+
return /* @__PURE__ */ import_react19.default.createElement(import_react_native11.Text, { style: [styles10.appLogoText, { color: theme.colors.text }] }, appName.charAt(0).toUpperCase());
|
|
1486
1535
|
}
|
|
1487
|
-
return /* @__PURE__ */
|
|
1536
|
+
return /* @__PURE__ */ import_react19.default.createElement(import_react_native11.Text, { style: [styles10.appLogoText, { color: theme.colors.text }] }, "?");
|
|
1488
1537
|
};
|
|
1489
|
-
return /* @__PURE__ */
|
|
1490
|
-
|
|
1538
|
+
return /* @__PURE__ */ import_react19.default.createElement(import_react_native11.View, { style: styles10.container }, /* @__PURE__ */ import_react19.default.createElement(KryptosLogo, null), /* @__PURE__ */ import_react19.default.createElement(import_react_native11.View, { style: styles10.iconContainer }, /* @__PURE__ */ import_react19.default.createElement(UnplugIcon, { size: 24, color: theme.colors.textSecondary })), /* @__PURE__ */ import_react19.default.createElement(
|
|
1539
|
+
import_react_native11.View,
|
|
1491
1540
|
{
|
|
1492
1541
|
style: [
|
|
1493
1542
|
styles10.logoContainer,
|
|
@@ -1497,7 +1546,7 @@ var ConnectLogo = () => {
|
|
|
1497
1546
|
renderLogo()
|
|
1498
1547
|
));
|
|
1499
1548
|
};
|
|
1500
|
-
var styles10 =
|
|
1549
|
+
var styles10 = import_react_native11.StyleSheet.create({
|
|
1501
1550
|
container: {
|
|
1502
1551
|
flexDirection: "row",
|
|
1503
1552
|
alignItems: "center",
|
|
@@ -1538,11 +1587,11 @@ var Auth = ({
|
|
|
1538
1587
|
}) => {
|
|
1539
1588
|
const { appName, linkToken, clientId, setUser, setEmail } = useKryptosConnect();
|
|
1540
1589
|
const theme = useTheme();
|
|
1541
|
-
const [isLoading, setIsLoading] =
|
|
1542
|
-
const [errorMessage, setErrorMessage] =
|
|
1543
|
-
const [emailValue, setEmailValue] =
|
|
1544
|
-
const [emailError, setEmailError] =
|
|
1545
|
-
const [loadingType, setLoadingType] =
|
|
1590
|
+
const [isLoading, setIsLoading] = import_react20.default.useState(false);
|
|
1591
|
+
const [errorMessage, setErrorMessage] = import_react20.default.useState("");
|
|
1592
|
+
const [emailValue, setEmailValue] = import_react20.default.useState("");
|
|
1593
|
+
const [emailError, setEmailError] = import_react20.default.useState("");
|
|
1594
|
+
const [loadingType, setLoadingType] = import_react20.default.useState(null);
|
|
1546
1595
|
const validateEmail = (email) => {
|
|
1547
1596
|
const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
|
|
1548
1597
|
if (!email) {
|
|
@@ -1604,29 +1653,29 @@ var Auth = ({
|
|
|
1604
1653
|
};
|
|
1605
1654
|
const infoSections = [
|
|
1606
1655
|
{
|
|
1607
|
-
icon: /* @__PURE__ */
|
|
1656
|
+
icon: /* @__PURE__ */ import_react20.default.createElement(LinkIcon, { size: 20, color: theme.colors.primary }),
|
|
1608
1657
|
title: "Simple and secure",
|
|
1609
1658
|
text: "Link your accounts in just a few clicks"
|
|
1610
1659
|
},
|
|
1611
1660
|
{
|
|
1612
|
-
icon: /* @__PURE__ */
|
|
1661
|
+
icon: /* @__PURE__ */ import_react20.default.createElement(ShieldIcon, { size: 20, color: theme.colors.primary }),
|
|
1613
1662
|
title: "Control what you share",
|
|
1614
1663
|
text: "We never share your data without your permission"
|
|
1615
1664
|
},
|
|
1616
1665
|
{
|
|
1617
|
-
icon: /* @__PURE__ */
|
|
1666
|
+
icon: /* @__PURE__ */ import_react20.default.createElement(EyeIcon, { size: 20, color: theme.colors.primary }),
|
|
1618
1667
|
title: "View Only Access",
|
|
1619
1668
|
text: "Kryptos retrieves view-only data and cannot perform any transactions on your behalf."
|
|
1620
1669
|
}
|
|
1621
1670
|
];
|
|
1622
|
-
return /* @__PURE__ */
|
|
1623
|
-
|
|
1671
|
+
return /* @__PURE__ */ import_react20.default.createElement(Modal, { isOpen: open, onClose: handleClose, size: "full" }, /* @__PURE__ */ import_react20.default.createElement(ModalHeader, { onClose: handleClose }, ""), /* @__PURE__ */ import_react20.default.createElement(ModalBody, null, /* @__PURE__ */ import_react20.default.createElement(import_react_native12.View, { style: styles11.container }, /* @__PURE__ */ import_react20.default.createElement(import_react_native12.View, { style: styles11.header }, /* @__PURE__ */ import_react20.default.createElement(import_react_native12.Text, { style: [styles11.title, { color: theme.colors.text }] }, "Link your accounts to", " ", /* @__PURE__ */ import_react20.default.createElement(import_react_native12.Text, { style: { fontWeight: "700" } }, appName), " using Kryptos"), /* @__PURE__ */ import_react20.default.createElement(ConnectLogo, null), infoSections.map((section, index) => /* @__PURE__ */ import_react20.default.createElement(import_react_native12.View, { key: `info-${index}`, style: styles11.infoSection }, /* @__PURE__ */ import_react20.default.createElement(import_react_native12.View, { style: styles11.infoIcon }, section.icon), /* @__PURE__ */ import_react20.default.createElement(import_react_native12.View, { style: styles11.infoContent }, /* @__PURE__ */ import_react20.default.createElement(
|
|
1672
|
+
import_react_native12.Text,
|
|
1624
1673
|
{
|
|
1625
1674
|
style: [styles11.infoTitle, { color: theme.colors.text }]
|
|
1626
1675
|
},
|
|
1627
1676
|
section.title
|
|
1628
|
-
), /* @__PURE__ */
|
|
1629
|
-
|
|
1677
|
+
), /* @__PURE__ */ import_react20.default.createElement(
|
|
1678
|
+
import_react_native12.Text,
|
|
1630
1679
|
{
|
|
1631
1680
|
style: [
|
|
1632
1681
|
styles11.infoDescription,
|
|
@@ -1634,7 +1683,7 @@ var Auth = ({
|
|
|
1634
1683
|
]
|
|
1635
1684
|
},
|
|
1636
1685
|
section.text
|
|
1637
|
-
)))), errorMessage ? /* @__PURE__ */
|
|
1686
|
+
)))), errorMessage ? /* @__PURE__ */ import_react20.default.createElement(Alert, { variant: "destructive" }, /* @__PURE__ */ import_react20.default.createElement(AlertDescription, null, errorMessage)) : null), /* @__PURE__ */ import_react20.default.createElement(import_react_native12.View, { style: styles11.footer }, /* @__PURE__ */ import_react20.default.createElement(
|
|
1638
1687
|
Button,
|
|
1639
1688
|
{
|
|
1640
1689
|
variant: "outline",
|
|
@@ -1645,41 +1694,41 @@ var Auth = ({
|
|
|
1645
1694
|
style: styles11.button
|
|
1646
1695
|
},
|
|
1647
1696
|
"Continue"
|
|
1648
|
-
), /* @__PURE__ */
|
|
1649
|
-
|
|
1697
|
+
), /* @__PURE__ */ import_react20.default.createElement(
|
|
1698
|
+
import_react_native12.Text,
|
|
1650
1699
|
{
|
|
1651
1700
|
style: [styles11.footerText, { color: theme.colors.textSecondary }]
|
|
1652
1701
|
},
|
|
1653
1702
|
"By continuing, you agree to Kryptos",
|
|
1654
1703
|
" ",
|
|
1655
|
-
/* @__PURE__ */
|
|
1656
|
-
|
|
1704
|
+
/* @__PURE__ */ import_react20.default.createElement(
|
|
1705
|
+
import_react_native12.Text,
|
|
1657
1706
|
{
|
|
1658
1707
|
style: {
|
|
1659
1708
|
color: theme.colors.primary,
|
|
1660
1709
|
textDecorationLine: "underline"
|
|
1661
1710
|
},
|
|
1662
|
-
onPress: () =>
|
|
1711
|
+
onPress: () => import_react_native12.Linking.openURL("https://kryptos.io/privacy-policy")
|
|
1663
1712
|
},
|
|
1664
1713
|
"Privacy Policy"
|
|
1665
1714
|
),
|
|
1666
1715
|
" ",
|
|
1667
1716
|
"and",
|
|
1668
1717
|
" ",
|
|
1669
|
-
/* @__PURE__ */
|
|
1670
|
-
|
|
1718
|
+
/* @__PURE__ */ import_react20.default.createElement(
|
|
1719
|
+
import_react_native12.Text,
|
|
1671
1720
|
{
|
|
1672
1721
|
style: {
|
|
1673
1722
|
color: theme.colors.primary,
|
|
1674
1723
|
textDecorationLine: "underline"
|
|
1675
1724
|
},
|
|
1676
|
-
onPress: () =>
|
|
1725
|
+
onPress: () => import_react_native12.Linking.openURL("https://kryptos.io/terms-of-services")
|
|
1677
1726
|
},
|
|
1678
1727
|
"Terms of Service"
|
|
1679
1728
|
)
|
|
1680
|
-
)))), /* @__PURE__ */
|
|
1729
|
+
)))), /* @__PURE__ */ import_react20.default.createElement(ModalFooter, { style: { paddingVertical: 0 } }, /* @__PURE__ */ import_react20.default.createElement(Footer, null)));
|
|
1681
1730
|
};
|
|
1682
|
-
var styles11 =
|
|
1731
|
+
var styles11 = import_react_native12.StyleSheet.create({
|
|
1683
1732
|
container: {
|
|
1684
1733
|
flex: 1,
|
|
1685
1734
|
flexDirection: "column",
|
|
@@ -1743,9 +1792,101 @@ var styles11 = import_react_native11.StyleSheet.create({
|
|
|
1743
1792
|
}
|
|
1744
1793
|
});
|
|
1745
1794
|
|
|
1795
|
+
// src/molecules/EndModal.tsx
|
|
1796
|
+
var import_react22 = __toESM(require("react"));
|
|
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
|
+
|
|
1746
1887
|
// src/molecules/Init.tsx
|
|
1747
|
-
var
|
|
1748
|
-
var
|
|
1888
|
+
var import_react23 = __toESM(require("react"));
|
|
1889
|
+
var import_react_native14 = require("react-native");
|
|
1749
1890
|
var Init = ({
|
|
1750
1891
|
open,
|
|
1751
1892
|
onSuccess,
|
|
@@ -1760,9 +1901,9 @@ var Init = ({
|
|
|
1760
1901
|
setUser
|
|
1761
1902
|
} = useKryptosConnect();
|
|
1762
1903
|
const theme = useTheme();
|
|
1763
|
-
const [isFetching, setIsFetching] =
|
|
1764
|
-
const [error, setError] =
|
|
1765
|
-
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 () => {
|
|
1766
1907
|
if (!open) return;
|
|
1767
1908
|
setIsFetching(true);
|
|
1768
1909
|
setError(null);
|
|
@@ -1789,28 +1930,28 @@ var Init = ({
|
|
|
1789
1930
|
setIsFetching(false);
|
|
1790
1931
|
}
|
|
1791
1932
|
}, []);
|
|
1792
|
-
|
|
1933
|
+
import_react23.default.useEffect(() => {
|
|
1793
1934
|
fetchLinkToken();
|
|
1794
1935
|
}, [fetchLinkToken]);
|
|
1795
|
-
return /* @__PURE__ */
|
|
1796
|
-
|
|
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,
|
|
1797
1938
|
{
|
|
1798
1939
|
size: "large",
|
|
1799
1940
|
color: theme.colors.primary,
|
|
1800
|
-
style:
|
|
1941
|
+
style: styles13.spinner
|
|
1801
1942
|
}
|
|
1802
|
-
), /* @__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(
|
|
1803
1944
|
Button,
|
|
1804
1945
|
{
|
|
1805
1946
|
variant: "primary",
|
|
1806
1947
|
size: "lg",
|
|
1807
1948
|
onPress: fetchLinkToken,
|
|
1808
|
-
style:
|
|
1949
|
+
style: styles13.retryButton
|
|
1809
1950
|
},
|
|
1810
1951
|
"Retry"
|
|
1811
|
-
)))), /* @__PURE__ */
|
|
1952
|
+
)))), /* @__PURE__ */ import_react23.default.createElement(ModalFooter, { style: { paddingVertical: 0 } }, /* @__PURE__ */ import_react23.default.createElement(Footer, null)));
|
|
1812
1953
|
};
|
|
1813
|
-
var
|
|
1954
|
+
var styles13 = import_react_native14.StyleSheet.create({
|
|
1814
1955
|
container: {
|
|
1815
1956
|
flex: 1,
|
|
1816
1957
|
alignItems: "center",
|
|
@@ -1837,18 +1978,18 @@ var styles12 = import_react_native12.StyleSheet.create({
|
|
|
1837
1978
|
});
|
|
1838
1979
|
|
|
1839
1980
|
// src/molecules/Integration.tsx
|
|
1840
|
-
var
|
|
1841
|
-
var
|
|
1981
|
+
var import_react35 = __toESM(require("react"));
|
|
1982
|
+
var import_react_native19 = require("react-native");
|
|
1842
1983
|
|
|
1843
1984
|
// src/assets/ArrowLeftIcon.tsx
|
|
1844
|
-
var
|
|
1845
|
-
var
|
|
1985
|
+
var import_react24 = __toESM(require("react"));
|
|
1986
|
+
var import_react_native_svg9 = __toESM(require("react-native-svg"));
|
|
1846
1987
|
var ArrowLeftIcon = ({
|
|
1847
1988
|
size = 20,
|
|
1848
1989
|
color = "#000"
|
|
1849
1990
|
}) => {
|
|
1850
|
-
return /* @__PURE__ */
|
|
1851
|
-
|
|
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,
|
|
1852
1993
|
{
|
|
1853
1994
|
d: "M19 12H5M12 19l-7-7 7-7",
|
|
1854
1995
|
stroke: color,
|
|
@@ -1860,14 +2001,14 @@ var ArrowLeftIcon = ({
|
|
|
1860
2001
|
};
|
|
1861
2002
|
|
|
1862
2003
|
// src/assets/CheckCircleIcon.tsx
|
|
1863
|
-
var
|
|
1864
|
-
var
|
|
2004
|
+
var import_react25 = __toESM(require("react"));
|
|
2005
|
+
var import_react_native_svg10 = __toESM(require("react-native-svg"));
|
|
1865
2006
|
var CheckCircleIcon = ({
|
|
1866
2007
|
size = 20,
|
|
1867
2008
|
color = "#10B981"
|
|
1868
2009
|
}) => {
|
|
1869
|
-
return /* @__PURE__ */
|
|
1870
|
-
|
|
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,
|
|
1871
2012
|
{
|
|
1872
2013
|
cx: 12,
|
|
1873
2014
|
cy: 12,
|
|
@@ -1875,8 +2016,8 @@ var CheckCircleIcon = ({
|
|
|
1875
2016
|
stroke: color,
|
|
1876
2017
|
strokeWidth: 2
|
|
1877
2018
|
}
|
|
1878
|
-
), /* @__PURE__ */
|
|
1879
|
-
|
|
2019
|
+
), /* @__PURE__ */ import_react25.default.createElement(
|
|
2020
|
+
import_react_native_svg10.Path,
|
|
1880
2021
|
{
|
|
1881
2022
|
d: "m9 12 2 2 4-4",
|
|
1882
2023
|
stroke: color,
|
|
@@ -1888,21 +2029,21 @@ var CheckCircleIcon = ({
|
|
|
1888
2029
|
};
|
|
1889
2030
|
|
|
1890
2031
|
// src/assets/LoaderIcon.tsx
|
|
1891
|
-
var
|
|
1892
|
-
var
|
|
1893
|
-
var
|
|
1894
|
-
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);
|
|
1895
2036
|
var LoaderIcon = ({
|
|
1896
2037
|
size = 20,
|
|
1897
2038
|
color = "#00C693"
|
|
1898
2039
|
}) => {
|
|
1899
|
-
const rotateAnim =
|
|
1900
|
-
|
|
1901
|
-
|
|
1902
|
-
|
|
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, {
|
|
1903
2044
|
toValue: 1,
|
|
1904
2045
|
duration: 1e3,
|
|
1905
|
-
easing:
|
|
2046
|
+
easing: import_react_native15.Easing.linear,
|
|
1906
2047
|
useNativeDriver: true
|
|
1907
2048
|
})
|
|
1908
2049
|
).start();
|
|
@@ -1911,7 +2052,7 @@ var LoaderIcon = ({
|
|
|
1911
2052
|
inputRange: [0, 1],
|
|
1912
2053
|
outputRange: ["0deg", "360deg"]
|
|
1913
2054
|
});
|
|
1914
|
-
return /* @__PURE__ */
|
|
2055
|
+
return /* @__PURE__ */ import_react26.default.createElement(
|
|
1915
2056
|
AnimatedSvg,
|
|
1916
2057
|
{
|
|
1917
2058
|
width: size,
|
|
@@ -1920,8 +2061,8 @@ var LoaderIcon = ({
|
|
|
1920
2061
|
fill: "none",
|
|
1921
2062
|
style: { transform: [{ rotate: spin }] }
|
|
1922
2063
|
},
|
|
1923
|
-
/* @__PURE__ */
|
|
1924
|
-
|
|
2064
|
+
/* @__PURE__ */ import_react26.default.createElement(
|
|
2065
|
+
import_react_native_svg11.Path,
|
|
1925
2066
|
{
|
|
1926
2067
|
d: "M21 12a9 9 0 1 1-6.219-8.56",
|
|
1927
2068
|
stroke: color,
|
|
@@ -1933,64 +2074,31 @@ var LoaderIcon = ({
|
|
|
1933
2074
|
);
|
|
1934
2075
|
};
|
|
1935
2076
|
|
|
1936
|
-
// src/assets/
|
|
1937
|
-
var
|
|
1938
|
-
var
|
|
1939
|
-
var
|
|
1940
|
-
return /* @__PURE__ */
|
|
1941
|
-
|
|
2077
|
+
// src/assets/ErrorIcon.tsx
|
|
2078
|
+
var import_react27 = __toESM(require("react"));
|
|
2079
|
+
var import_react_native_svg12 = __toESM(require("react-native-svg"));
|
|
2080
|
+
var ErrorIcon = ({ size = 64 }) => {
|
|
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(
|
|
2082
|
+
import_react_native_svg12.Circle,
|
|
1942
2083
|
{
|
|
1943
2084
|
cx: 32,
|
|
1944
2085
|
cy: 32,
|
|
1945
2086
|
r: 30,
|
|
1946
|
-
fill: "#
|
|
2087
|
+
fill: "#EF4444",
|
|
1947
2088
|
opacity: 0.1
|
|
1948
2089
|
}
|
|
1949
|
-
), /* @__PURE__ */
|
|
1950
|
-
|
|
2090
|
+
), /* @__PURE__ */ import_react27.default.createElement(
|
|
2091
|
+
import_react_native_svg12.Circle,
|
|
1951
2092
|
{
|
|
1952
2093
|
cx: 32,
|
|
1953
2094
|
cy: 32,
|
|
1954
2095
|
r: 24,
|
|
1955
|
-
fill: "#
|
|
2096
|
+
fill: "#EF4444"
|
|
1956
2097
|
}
|
|
1957
|
-
), /* @__PURE__ */
|
|
1958
|
-
|
|
2098
|
+
), /* @__PURE__ */ import_react27.default.createElement(
|
|
2099
|
+
import_react_native_svg12.Path,
|
|
1959
2100
|
{
|
|
1960
|
-
d: "M24
|
|
1961
|
-
stroke: "white",
|
|
1962
|
-
strokeWidth: 3,
|
|
1963
|
-
strokeLinecap: "round",
|
|
1964
|
-
strokeLinejoin: "round"
|
|
1965
|
-
}
|
|
1966
|
-
));
|
|
1967
|
-
};
|
|
1968
|
-
|
|
1969
|
-
// src/assets/ErrorIcon.tsx
|
|
1970
|
-
var import_react25 = __toESM(require("react"));
|
|
1971
|
-
var import_react_native_svg11 = __toESM(require("react-native-svg"));
|
|
1972
|
-
var ErrorIcon = ({ size = 64 }) => {
|
|
1973
|
-
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(
|
|
1974
|
-
import_react_native_svg11.Circle,
|
|
1975
|
-
{
|
|
1976
|
-
cx: 32,
|
|
1977
|
-
cy: 32,
|
|
1978
|
-
r: 30,
|
|
1979
|
-
fill: "#EF4444",
|
|
1980
|
-
opacity: 0.1
|
|
1981
|
-
}
|
|
1982
|
-
), /* @__PURE__ */ import_react25.default.createElement(
|
|
1983
|
-
import_react_native_svg11.Circle,
|
|
1984
|
-
{
|
|
1985
|
-
cx: 32,
|
|
1986
|
-
cy: 32,
|
|
1987
|
-
r: 24,
|
|
1988
|
-
fill: "#EF4444"
|
|
1989
|
-
}
|
|
1990
|
-
), /* @__PURE__ */ import_react25.default.createElement(
|
|
1991
|
-
import_react_native_svg11.Path,
|
|
1992
|
-
{
|
|
1993
|
-
d: "M24 24l16 16M40 24l-16 16",
|
|
2101
|
+
d: "M24 24l16 16M40 24l-16 16",
|
|
1994
2102
|
stroke: "white",
|
|
1995
2103
|
strokeWidth: 3,
|
|
1996
2104
|
strokeLinecap: "round",
|
|
@@ -2000,18 +2108,18 @@ var ErrorIcon = ({ size = 64 }) => {
|
|
|
2000
2108
|
};
|
|
2001
2109
|
|
|
2002
2110
|
// src/assets/SearchIcon.tsx
|
|
2003
|
-
var
|
|
2004
|
-
var
|
|
2111
|
+
var import_react28 = __toESM(require("react"));
|
|
2112
|
+
var import_react_native_svg13 = __toESM(require("react-native-svg"));
|
|
2005
2113
|
|
|
2006
2114
|
// src/assets/PlusIcon.tsx
|
|
2007
|
-
var
|
|
2008
|
-
var
|
|
2115
|
+
var import_react29 = __toESM(require("react"));
|
|
2116
|
+
var import_react_native_svg14 = __toESM(require("react-native-svg"));
|
|
2009
2117
|
var PlusIcon = ({
|
|
2010
2118
|
size = 14,
|
|
2011
2119
|
color = "#6B7280"
|
|
2012
2120
|
}) => {
|
|
2013
|
-
return /* @__PURE__ */
|
|
2014
|
-
|
|
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(
|
|
2122
|
+
import_react_native_svg14.Path,
|
|
2015
2123
|
{
|
|
2016
2124
|
d: "M7 3.5v7M3.5 7h7",
|
|
2017
2125
|
stroke: color,
|
|
@@ -2021,10 +2129,48 @@ var PlusIcon = ({
|
|
|
2021
2129
|
));
|
|
2022
2130
|
};
|
|
2023
2131
|
|
|
2132
|
+
// src/assets/RedirectIcon.tsx
|
|
2133
|
+
var import_react30 = __toESM(require("react"));
|
|
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
|
+
|
|
2024
2170
|
// src/wallet-connect/index.tsx
|
|
2025
2171
|
var import_appkit_react_native3 = require("@reown/appkit-react-native");
|
|
2026
|
-
var
|
|
2027
|
-
var
|
|
2172
|
+
var import_react32 = __toESM(require("react"));
|
|
2173
|
+
var import_react_native16 = require("react-native");
|
|
2028
2174
|
|
|
2029
2175
|
// src/utils/uuid.ts
|
|
2030
2176
|
function generateUUID() {
|
|
@@ -2036,7 +2182,7 @@ function generateUUID() {
|
|
|
2036
2182
|
}
|
|
2037
2183
|
|
|
2038
2184
|
// src/wallet-connect/wallet-connect.tsx
|
|
2039
|
-
var
|
|
2185
|
+
var import_react31 = __toESM(require("react"));
|
|
2040
2186
|
var import_appkit_react_native2 = require("@reown/appkit-react-native");
|
|
2041
2187
|
|
|
2042
2188
|
// src/wallet-connect/AppKitConfig.ts
|
|
@@ -2135,7 +2281,7 @@ var createAppKitInstance = (projectId) => {
|
|
|
2135
2281
|
// src/wallet-connect/wallet-connect.tsx
|
|
2136
2282
|
var WalletConnectWrapper = ({ children }) => {
|
|
2137
2283
|
const { walletConnectProjectId } = useKryptosConnect();
|
|
2138
|
-
const appKit =
|
|
2284
|
+
const appKit = import_react31.default.useMemo(() => {
|
|
2139
2285
|
if (!walletConnectProjectId) {
|
|
2140
2286
|
console.warn(
|
|
2141
2287
|
"walletConnectProjectId is missing in KryptosConnectProvider config"
|
|
@@ -2145,9 +2291,9 @@ var WalletConnectWrapper = ({ children }) => {
|
|
|
2145
2291
|
return createAppKitInstance(walletConnectProjectId);
|
|
2146
2292
|
}, [walletConnectProjectId]);
|
|
2147
2293
|
if (!appKit) {
|
|
2148
|
-
return /* @__PURE__ */
|
|
2294
|
+
return /* @__PURE__ */ import_react31.default.createElement(import_react31.default.Fragment, null, children);
|
|
2149
2295
|
}
|
|
2150
|
-
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);
|
|
2151
2297
|
};
|
|
2152
2298
|
var wallet_connect_default = WalletConnectWrapper;
|
|
2153
2299
|
|
|
@@ -2159,47 +2305,48 @@ var WalletConnectComponent = ({
|
|
|
2159
2305
|
handleClose,
|
|
2160
2306
|
modalOpen,
|
|
2161
2307
|
setAddIntegrationMode,
|
|
2162
|
-
providersList
|
|
2308
|
+
providersList,
|
|
2309
|
+
errorMessage
|
|
2163
2310
|
}) => {
|
|
2164
2311
|
const { walletConnectProjectId } = useKryptosConnect();
|
|
2165
2312
|
const theme = useTheme();
|
|
2166
2313
|
if (!walletConnectProjectId) {
|
|
2167
|
-
return /* @__PURE__ */
|
|
2168
|
-
|
|
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,
|
|
2169
2316
|
{
|
|
2170
2317
|
onPress: () => {
|
|
2171
2318
|
setAddIntegrationMode(null);
|
|
2172
2319
|
},
|
|
2173
|
-
style:
|
|
2320
|
+
style: styles14.backButton
|
|
2174
2321
|
},
|
|
2175
|
-
/* @__PURE__ */
|
|
2176
|
-
), /* @__PURE__ */
|
|
2177
|
-
|
|
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,
|
|
2178
2325
|
{
|
|
2179
|
-
style: [
|
|
2326
|
+
style: [styles14.emptyStateTitle, { color: theme.colors.text }]
|
|
2180
2327
|
},
|
|
2181
2328
|
"WalletConnect is not configured"
|
|
2182
|
-
), /* @__PURE__ */
|
|
2183
|
-
|
|
2329
|
+
), /* @__PURE__ */ import_react32.default.createElement(
|
|
2330
|
+
import_react_native16.Text,
|
|
2184
2331
|
{
|
|
2185
2332
|
style: [
|
|
2186
|
-
|
|
2333
|
+
styles14.infoText,
|
|
2187
2334
|
{ color: theme.colors.textSecondary, textAlign: "center" }
|
|
2188
2335
|
]
|
|
2189
2336
|
},
|
|
2190
2337
|
"Please add a walletConnectProjectId to KryptosConnectProvider to enable wallet connections."
|
|
2191
|
-
), /* @__PURE__ */
|
|
2338
|
+
), /* @__PURE__ */ import_react32.default.createElement(
|
|
2192
2339
|
Button,
|
|
2193
2340
|
{
|
|
2194
2341
|
variant: "outline",
|
|
2195
2342
|
size: "sm",
|
|
2196
2343
|
onPress: () => setAddIntegrationMode(null),
|
|
2197
|
-
style:
|
|
2344
|
+
style: styles14.emptyStateButton
|
|
2198
2345
|
},
|
|
2199
2346
|
"Go back"
|
|
2200
2347
|
))));
|
|
2201
2348
|
}
|
|
2202
|
-
return /* @__PURE__ */
|
|
2349
|
+
return /* @__PURE__ */ import_react32.default.createElement(wallet_connect_default, null, /* @__PURE__ */ import_react32.default.createElement(
|
|
2203
2350
|
ConnectButton,
|
|
2204
2351
|
{
|
|
2205
2352
|
integration,
|
|
@@ -2208,7 +2355,8 @@ var WalletConnectComponent = ({
|
|
|
2208
2355
|
handleClose,
|
|
2209
2356
|
modalOpen,
|
|
2210
2357
|
setAddIntegrationMode,
|
|
2211
|
-
providersList
|
|
2358
|
+
providersList,
|
|
2359
|
+
errorMessage
|
|
2212
2360
|
}
|
|
2213
2361
|
));
|
|
2214
2362
|
};
|
|
@@ -2218,28 +2366,35 @@ function ConnectButton({
|
|
|
2218
2366
|
handleClose,
|
|
2219
2367
|
modalOpen,
|
|
2220
2368
|
setAddIntegrationMode,
|
|
2221
|
-
providersList
|
|
2369
|
+
providersList,
|
|
2370
|
+
errorMessage: errorMessageProp
|
|
2222
2371
|
}) {
|
|
2223
2372
|
const theme = useTheme();
|
|
2224
2373
|
const { open, disconnect } = (0, import_appkit_react_native3.useAppKit)();
|
|
2225
2374
|
const { address, isConnected } = (0, import_appkit_react_native3.useAccount)();
|
|
2226
2375
|
const { linkToken, user, clientId } = useKryptosConnect();
|
|
2227
|
-
const [selectedChains, setSelectedChains] = (0,
|
|
2228
|
-
const [errorMessage, setErrorMessage] = (0,
|
|
2229
|
-
const [chainErrors, setChainErrors] = (0,
|
|
2230
|
-
const [isLoading, setIsLoading] = (0,
|
|
2231
|
-
const [userUsedChains, setUserUsedChains] = (0,
|
|
2232
|
-
const [isFetchingChains, setIsFetchingChains] = (0,
|
|
2233
|
-
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)(() => {
|
|
2234
2383
|
if (userUsedChains.length > 0) {
|
|
2235
2384
|
return userUsedChains;
|
|
2236
2385
|
}
|
|
2237
2386
|
if (integration.walletSupportedChains && integration.walletSupportedChains.length > 0) {
|
|
2238
|
-
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
|
+
});
|
|
2239
2394
|
}
|
|
2240
2395
|
return [];
|
|
2241
|
-
}, [userUsedChains, integration.walletSupportedChains]);
|
|
2242
|
-
(0,
|
|
2396
|
+
}, [userUsedChains, integration.walletSupportedChains, providersList]);
|
|
2397
|
+
(0, import_react32.useEffect)(() => {
|
|
2243
2398
|
if (!isConnected || !address || !address.trim()) {
|
|
2244
2399
|
setUserUsedChains([]);
|
|
2245
2400
|
setSelectedChains(/* @__PURE__ */ new Set());
|
|
@@ -2258,7 +2413,16 @@ function ConnectButton({
|
|
|
2258
2413
|
}
|
|
2259
2414
|
}
|
|
2260
2415
|
if (chains.length === 0 && integration.walletSupportedChains && integration.walletSupportedChains.length > 0) {
|
|
2261
|
-
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
|
+
);
|
|
2262
2426
|
}
|
|
2263
2427
|
if (chains.length > 0) {
|
|
2264
2428
|
setUserUsedChains(chains);
|
|
@@ -2270,11 +2434,21 @@ function ConnectButton({
|
|
|
2270
2434
|
} catch (error) {
|
|
2271
2435
|
console.error("Failed to fetch user chains:", error);
|
|
2272
2436
|
if (integration.walletSupportedChains && integration.walletSupportedChains.length > 0) {
|
|
2273
|
-
|
|
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);
|
|
2274
2448
|
setSelectedChains(
|
|
2275
2449
|
new Set(
|
|
2276
2450
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
2277
|
-
|
|
2451
|
+
validChains.map((chain) => chain.id)
|
|
2278
2452
|
)
|
|
2279
2453
|
);
|
|
2280
2454
|
} else {
|
|
@@ -2294,7 +2468,8 @@ function ConnectButton({
|
|
|
2294
2468
|
address,
|
|
2295
2469
|
isConnected,
|
|
2296
2470
|
integration.isEvmWallet,
|
|
2297
|
-
integration.walletSupportedChains
|
|
2471
|
+
integration.walletSupportedChains,
|
|
2472
|
+
providersList
|
|
2298
2473
|
]);
|
|
2299
2474
|
const validateForm = () => {
|
|
2300
2475
|
if (!address) {
|
|
@@ -2321,7 +2496,7 @@ function ConnectButton({
|
|
|
2321
2496
|
const walletTestsPayload = chainsToProcess.map((chain) => {
|
|
2322
2497
|
const walletId = generateUUID();
|
|
2323
2498
|
const displaySuffix = address ? address?.length > 8 ? `${address.slice(0, 4)}...${address.slice(-4)}` : address : "";
|
|
2324
|
-
const alias = `${
|
|
2499
|
+
const alias = `${integration.public_name} (${displaySuffix})`;
|
|
2325
2500
|
const provider = providersList.find((p) => p.id === chain.id);
|
|
2326
2501
|
return {
|
|
2327
2502
|
chain,
|
|
@@ -2331,11 +2506,11 @@ function ConnectButton({
|
|
|
2331
2506
|
source: provider?.id,
|
|
2332
2507
|
credential: {
|
|
2333
2508
|
address,
|
|
2334
|
-
userId: user?.user_id || "
|
|
2509
|
+
userId: user?.user_id || "",
|
|
2335
2510
|
projectId: provider?.projectId,
|
|
2336
|
-
apiKey: "
|
|
2337
|
-
secret: "
|
|
2338
|
-
privateKey: "
|
|
2511
|
+
apiKey: "",
|
|
2512
|
+
secret: "",
|
|
2513
|
+
privateKey: "",
|
|
2339
2514
|
alias,
|
|
2340
2515
|
walletId,
|
|
2341
2516
|
exchange: provider?.id
|
|
@@ -2369,14 +2544,14 @@ function ConnectButton({
|
|
|
2369
2544
|
clientId,
|
|
2370
2545
|
createdAt: (/* @__PURE__ */ new Date()).toISOString()
|
|
2371
2546
|
},
|
|
2372
|
-
metadata: {
|
|
2373
|
-
environment: "sandbox"
|
|
2374
|
-
},
|
|
2375
2547
|
addedOn: (/* @__PURE__ */ new Date()).getTime(),
|
|
2376
|
-
default_chain:
|
|
2377
|
-
default_chain_logo:
|
|
2378
|
-
type: provider.type,
|
|
2379
|
-
isNftSupported: provider
|
|
2548
|
+
default_chain: integration?.id || "",
|
|
2549
|
+
default_chain_logo: integration?.logo || "",
|
|
2550
|
+
type: provider.type || "",
|
|
2551
|
+
isNftSupported: provider?.isEvmWallet || provider?.nftSupport || false,
|
|
2552
|
+
isCustomWallet: false,
|
|
2553
|
+
chainId: provider?.community_id,
|
|
2554
|
+
address: address?.trim()
|
|
2380
2555
|
};
|
|
2381
2556
|
integrationsToAdd.push(data);
|
|
2382
2557
|
} else {
|
|
@@ -2395,7 +2570,10 @@ function ConnectButton({
|
|
|
2395
2570
|
return;
|
|
2396
2571
|
}
|
|
2397
2572
|
if (integrationsToAdd.length > 0) {
|
|
2398
|
-
onAddHandle(integrationsToAdd);
|
|
2573
|
+
await onAddHandle(integrationsToAdd);
|
|
2574
|
+
if (isConnected) {
|
|
2575
|
+
disconnect();
|
|
2576
|
+
}
|
|
2399
2577
|
setChainErrors({});
|
|
2400
2578
|
setErrorMessage("");
|
|
2401
2579
|
} else {
|
|
@@ -2405,7 +2583,7 @@ function ConnectButton({
|
|
|
2405
2583
|
const err = error;
|
|
2406
2584
|
console.error(error);
|
|
2407
2585
|
setErrorMessage(
|
|
2408
|
-
err?.response?.data?.message || "Failed to add
|
|
2586
|
+
err?.response?.data?.message || err?.response?.data?.error || "Failed to add integrations"
|
|
2409
2587
|
);
|
|
2410
2588
|
} finally {
|
|
2411
2589
|
setIsLoading(false);
|
|
@@ -2425,16 +2603,41 @@ function ConnectButton({
|
|
|
2425
2603
|
setChainErrors(newErrors);
|
|
2426
2604
|
}
|
|
2427
2605
|
};
|
|
2428
|
-
|
|
2429
|
-
|
|
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,
|
|
2430
2614
|
{
|
|
2431
2615
|
onPress: () => {
|
|
2432
2616
|
setAddIntegrationMode(null);
|
|
2617
|
+
if (isConnected) {
|
|
2618
|
+
disconnect();
|
|
2619
|
+
}
|
|
2433
2620
|
},
|
|
2434
|
-
style:
|
|
2621
|
+
style: styles14.backButton
|
|
2435
2622
|
},
|
|
2436
|
-
/* @__PURE__ */
|
|
2437
|
-
), /* @__PURE__ */
|
|
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,
|
|
2626
|
+
{
|
|
2627
|
+
source: { uri: integration.logo },
|
|
2628
|
+
style: styles14.logo,
|
|
2629
|
+
resizeMode: "contain"
|
|
2630
|
+
}
|
|
2631
|
+
) : /* @__PURE__ */ import_react32.default.createElement(
|
|
2632
|
+
import_react_native16.View,
|
|
2633
|
+
{
|
|
2634
|
+
style: [
|
|
2635
|
+
styles14.logoPlaceholder,
|
|
2636
|
+
{ backgroundColor: theme.colors.surface }
|
|
2637
|
+
]
|
|
2638
|
+
},
|
|
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(
|
|
2438
2641
|
Button,
|
|
2439
2642
|
{
|
|
2440
2643
|
variant: "primary",
|
|
@@ -2442,111 +2645,132 @@ function ConnectButton({
|
|
|
2442
2645
|
onPress: () => open({ view: "Connect" })
|
|
2443
2646
|
},
|
|
2444
2647
|
"Connect Wallet"
|
|
2445
|
-
)) : /* @__PURE__ */
|
|
2446
|
-
|
|
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,
|
|
2447
2650
|
{
|
|
2448
|
-
style: [
|
|
2651
|
+
style: [styles14.connectedTitle, { color: theme.colors.text }]
|
|
2449
2652
|
},
|
|
2450
2653
|
"Wallet Connected"
|
|
2451
|
-
), /* @__PURE__ */
|
|
2452
|
-
|
|
2654
|
+
), /* @__PURE__ */ import_react32.default.createElement(
|
|
2655
|
+
import_react_native16.Text,
|
|
2453
2656
|
{
|
|
2454
|
-
style: [
|
|
2657
|
+
style: [styles14.connectedText, { color: theme.colors.text }]
|
|
2455
2658
|
},
|
|
2456
2659
|
"Address: ",
|
|
2457
2660
|
address
|
|
2458
|
-
), /* @__PURE__ */
|
|
2459
|
-
|
|
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,
|
|
2460
2663
|
{
|
|
2461
|
-
style: [
|
|
2664
|
+
style: [styles14.fetchingText, { color: theme.colors.text }]
|
|
2462
2665
|
},
|
|
2463
2666
|
"Fetching chains..."
|
|
2464
|
-
) : null), availableChains.length > 0 && address && /* @__PURE__ */
|
|
2465
|
-
|
|
2466
|
-
|
|
2467
|
-
|
|
2468
|
-
|
|
2469
|
-
|
|
2470
|
-
|
|
2471
|
-
|
|
2472
|
-
|
|
2473
|
-
|
|
2474
|
-
|
|
2475
|
-
|
|
2476
|
-
return /* @__PURE__ */ import_react29.default.createElement(
|
|
2477
|
-
import_react_native14.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,
|
|
2478
2679
|
{
|
|
2479
|
-
|
|
2480
|
-
|
|
2481
|
-
|
|
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
|
+
]
|
|
2482
2687
|
},
|
|
2483
|
-
/* @__PURE__ */
|
|
2484
|
-
|
|
2688
|
+
/* @__PURE__ */ import_react32.default.createElement(
|
|
2689
|
+
import_react_native16.Text,
|
|
2485
2690
|
{
|
|
2486
2691
|
style: [
|
|
2487
|
-
|
|
2692
|
+
styles14.chainName,
|
|
2488
2693
|
{
|
|
2489
|
-
|
|
2490
|
-
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
|
|
2491
2695
|
}
|
|
2492
2696
|
]
|
|
2493
2697
|
},
|
|
2494
|
-
|
|
2495
|
-
|
|
2496
|
-
|
|
2497
|
-
|
|
2498
|
-
|
|
2499
|
-
|
|
2500
|
-
|
|
2501
|
-
|
|
2502
|
-
|
|
2503
|
-
|
|
2504
|
-
|
|
2505
|
-
|
|
2506
|
-
|
|
2507
|
-
|
|
2508
|
-
{
|
|
2509
|
-
size: 12,
|
|
2510
|
-
color: hasError ? theme.colors.error : theme.colors.primary
|
|
2511
|
-
}
|
|
2512
|
-
) : /* @__PURE__ */ import_react29.default.createElement(
|
|
2513
|
-
PlusIcon,
|
|
2514
|
-
{
|
|
2515
|
-
size: 12,
|
|
2516
|
-
color: theme.colors.textSecondary
|
|
2517
|
-
}
|
|
2518
|
-
)
|
|
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
|
+
}
|
|
2519
2712
|
)
|
|
2520
|
-
)
|
|
2521
|
-
|
|
2522
|
-
|
|
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,
|
|
2523
2724
|
{
|
|
2524
2725
|
style: [
|
|
2525
|
-
|
|
2526
|
-
|
|
2726
|
+
styles14.chainChip,
|
|
2727
|
+
styles14.chainChipRemoveAll,
|
|
2728
|
+
{
|
|
2729
|
+
borderWidth: 0,
|
|
2730
|
+
backgroundColor: "transparent"
|
|
2731
|
+
}
|
|
2527
2732
|
]
|
|
2528
2733
|
},
|
|
2529
|
-
|
|
2530
|
-
|
|
2531
|
-
const chain = availableChains.find(
|
|
2532
|
-
(c) => c.id === chainId
|
|
2533
|
-
);
|
|
2534
|
-
return /* @__PURE__ */ import_react29.default.createElement(
|
|
2535
|
-
import_react_native14.Text,
|
|
2734
|
+
/* @__PURE__ */ import_react32.default.createElement(
|
|
2735
|
+
import_react_native16.Text,
|
|
2536
2736
|
{
|
|
2537
|
-
key: chainId,
|
|
2538
2737
|
style: [
|
|
2539
|
-
|
|
2540
|
-
{ color: theme.colors.
|
|
2738
|
+
styles14.chainName,
|
|
2739
|
+
{ color: theme.colors.primary }
|
|
2541
2740
|
]
|
|
2542
2741
|
},
|
|
2543
|
-
"
|
|
2544
|
-
|
|
2545
|
-
|
|
2546
|
-
|
|
2547
|
-
|
|
2548
|
-
|
|
2549
|
-
|
|
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(
|
|
2550
2774
|
Button,
|
|
2551
2775
|
{
|
|
2552
2776
|
variant: "outline",
|
|
@@ -2554,14 +2778,20 @@ function ConnectButton({
|
|
|
2554
2778
|
onPress: onSubmitWalletConnect,
|
|
2555
2779
|
loading: isLoading,
|
|
2556
2780
|
disabled: isLoading || !!address && availableChains.length > 0 && selectedChains.size === 0,
|
|
2557
|
-
style:
|
|
2781
|
+
style: styles14.button
|
|
2558
2782
|
},
|
|
2559
2783
|
selectedChains.size > 0 ? `Add ${selectedChains.size} Chain${selectedChains.size > 1 ? "s" : ""}` : "Add Integration"
|
|
2560
|
-
), /* @__PURE__ */
|
|
2784
|
+
), /* @__PURE__ */ import_react32.default.createElement(Footer, null)));
|
|
2561
2785
|
}
|
|
2562
|
-
var
|
|
2786
|
+
var styles14 = import_react_native16.StyleSheet.create({
|
|
2563
2787
|
connectedContainer: {
|
|
2564
|
-
|
|
2788
|
+
flexShrink: 0
|
|
2789
|
+
},
|
|
2790
|
+
chainListWrapper: {
|
|
2791
|
+
marginTop: 8
|
|
2792
|
+
},
|
|
2793
|
+
chainListContent: {
|
|
2794
|
+
paddingBottom: 8
|
|
2565
2795
|
},
|
|
2566
2796
|
connectedHeader: {
|
|
2567
2797
|
marginBottom: 8
|
|
@@ -2575,13 +2805,6 @@ var styles13 = import_react_native14.StyleSheet.create({
|
|
|
2575
2805
|
marginBottom: 8,
|
|
2576
2806
|
textAlign: "center"
|
|
2577
2807
|
},
|
|
2578
|
-
scrollView: {
|
|
2579
|
-
flex: 1
|
|
2580
|
-
},
|
|
2581
|
-
scrollViewContent: {
|
|
2582
|
-
paddingBottom: 40,
|
|
2583
|
-
flexGrow: 1
|
|
2584
|
-
},
|
|
2585
2808
|
errorMessageContainer: {
|
|
2586
2809
|
marginTop: 16
|
|
2587
2810
|
},
|
|
@@ -2605,10 +2828,8 @@ var styles13 = import_react_native14.StyleSheet.create({
|
|
|
2605
2828
|
// theme.spacing.xl
|
|
2606
2829
|
paddingBottom: 20,
|
|
2607
2830
|
width: "100%",
|
|
2608
|
-
overflow: "hidden",
|
|
2609
2831
|
alignSelf: "center",
|
|
2610
|
-
flexDirection: "column"
|
|
2611
|
-
flex: 1
|
|
2832
|
+
flexDirection: "column"
|
|
2612
2833
|
},
|
|
2613
2834
|
chainTitle: {
|
|
2614
2835
|
fontSize: 14,
|
|
@@ -2623,93 +2844,404 @@ var styles13 = import_react_native14.StyleSheet.create({
|
|
|
2623
2844
|
gap: 6
|
|
2624
2845
|
// theme.spacing.sm
|
|
2625
2846
|
},
|
|
2626
|
-
chainChip: {
|
|
2847
|
+
chainChip: {
|
|
2848
|
+
flexDirection: "row",
|
|
2849
|
+
alignItems: "center",
|
|
2850
|
+
paddingHorizontal: 8,
|
|
2851
|
+
// theme.spacing.sm
|
|
2852
|
+
paddingVertical: 5,
|
|
2853
|
+
// theme.spacing.xs
|
|
2854
|
+
borderRadius: 12,
|
|
2855
|
+
// theme.borderRadius.md
|
|
2856
|
+
borderWidth: 1
|
|
2857
|
+
},
|
|
2858
|
+
chainChipRemoveAll: {
|
|
2859
|
+
marginTop: 6,
|
|
2860
|
+
// theme.spacing.sm - separate from chain list
|
|
2861
|
+
width: "auto"
|
|
2862
|
+
},
|
|
2863
|
+
chainName: {
|
|
2864
|
+
fontSize: 12,
|
|
2865
|
+
fontWeight: "500",
|
|
2866
|
+
marginRight: 6
|
|
2867
|
+
// theme.spacing.xs
|
|
2868
|
+
},
|
|
2869
|
+
chainButton: {
|
|
2870
|
+
padding: 2
|
|
2871
|
+
// theme.spacing.xs
|
|
2872
|
+
},
|
|
2873
|
+
chainErrorsContainer: {
|
|
2874
|
+
marginTop: 12
|
|
2875
|
+
// theme.spacing.md - consistent spacing
|
|
2876
|
+
},
|
|
2877
|
+
chainErrorsTitle: {
|
|
2878
|
+
fontSize: 13,
|
|
2879
|
+
fontWeight: "500",
|
|
2880
|
+
marginBottom: 4
|
|
2881
|
+
// theme.spacing.xs
|
|
2882
|
+
},
|
|
2883
|
+
chainErrorItem: {
|
|
2884
|
+
fontSize: 12,
|
|
2885
|
+
// theme.fontSize.sm
|
|
2886
|
+
marginBottom: 4
|
|
2887
|
+
// theme.spacing.xs
|
|
2888
|
+
},
|
|
2889
|
+
button: {
|
|
2890
|
+
width: "100%"
|
|
2891
|
+
},
|
|
2892
|
+
emptyState: {
|
|
2893
|
+
flex: 1,
|
|
2894
|
+
alignItems: "center",
|
|
2895
|
+
justifyContent: "center",
|
|
2896
|
+
gap: 12
|
|
2897
|
+
},
|
|
2898
|
+
emptyStateTitle: {
|
|
2899
|
+
fontSize: 18,
|
|
2900
|
+
fontWeight: "600"
|
|
2901
|
+
},
|
|
2902
|
+
emptyStateButton: {
|
|
2903
|
+
marginTop: 8
|
|
2904
|
+
},
|
|
2905
|
+
header: {
|
|
2906
|
+
flexDirection: "row",
|
|
2907
|
+
justifyContent: "center",
|
|
2908
|
+
alignItems: "center",
|
|
2909
|
+
marginBottom: 16
|
|
2910
|
+
// theme.spacing.lg
|
|
2911
|
+
},
|
|
2912
|
+
logo: {
|
|
2913
|
+
width: 32,
|
|
2914
|
+
height: 32,
|
|
2915
|
+
borderRadius: 8
|
|
2916
|
+
// theme.borderRadius.sm
|
|
2917
|
+
},
|
|
2918
|
+
logoPlaceholder: {
|
|
2919
|
+
width: 32,
|
|
2920
|
+
height: 32,
|
|
2921
|
+
borderRadius: 8,
|
|
2922
|
+
// theme.borderRadius.sm
|
|
2923
|
+
alignItems: "center",
|
|
2924
|
+
justifyContent: "center"
|
|
2925
|
+
},
|
|
2926
|
+
name: {
|
|
2927
|
+
fontSize: 16,
|
|
2928
|
+
// theme.fontSize.lg
|
|
2929
|
+
fontWeight: "600",
|
|
2930
|
+
marginLeft: 12,
|
|
2931
|
+
// theme.spacing.md
|
|
2932
|
+
textTransform: "capitalize"
|
|
2933
|
+
}
|
|
2934
|
+
});
|
|
2935
|
+
|
|
2936
|
+
// src/molecules/IntegrationForm.tsx
|
|
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: {
|
|
2627
3169
|
flexDirection: "row",
|
|
2628
3170
|
alignItems: "center",
|
|
2629
|
-
|
|
2630
|
-
|
|
2631
|
-
|
|
2632
|
-
|
|
2633
|
-
borderRadius: 12,
|
|
2634
|
-
// theme.borderRadius.md
|
|
2635
|
-
borderWidth: 1
|
|
3171
|
+
justifyContent: "space-between",
|
|
3172
|
+
paddingVertical: 12,
|
|
3173
|
+
paddingHorizontal: 16,
|
|
3174
|
+
borderBottomWidth: 1
|
|
2636
3175
|
},
|
|
2637
|
-
|
|
2638
|
-
fontSize:
|
|
2639
|
-
fontWeight: "
|
|
2640
|
-
marginRight: 6
|
|
2641
|
-
// theme.spacing.xs
|
|
3176
|
+
triggerText: {
|
|
3177
|
+
fontSize: 14,
|
|
3178
|
+
fontWeight: "600"
|
|
2642
3179
|
},
|
|
2643
|
-
|
|
2644
|
-
|
|
2645
|
-
// theme.spacing.xs
|
|
3180
|
+
chevron: {
|
|
3181
|
+
fontSize: 12
|
|
2646
3182
|
},
|
|
2647
|
-
|
|
2648
|
-
|
|
2649
|
-
|
|
3183
|
+
content: {
|
|
3184
|
+
paddingVertical: 12,
|
|
3185
|
+
paddingHorizontal: 16,
|
|
3186
|
+
borderBottomWidth: 1
|
|
2650
3187
|
},
|
|
2651
|
-
|
|
2652
|
-
|
|
2653
|
-
fontWeight: "500",
|
|
2654
|
-
marginBottom: 4
|
|
2655
|
-
// theme.spacing.xs
|
|
3188
|
+
list: {
|
|
3189
|
+
paddingLeft: 4
|
|
2656
3190
|
},
|
|
2657
|
-
|
|
2658
|
-
fontSize:
|
|
2659
|
-
|
|
2660
|
-
marginBottom:
|
|
2661
|
-
// theme.spacing.xs
|
|
3191
|
+
listItem: {
|
|
3192
|
+
fontSize: 13,
|
|
3193
|
+
lineHeight: 20,
|
|
3194
|
+
marginBottom: 6
|
|
2662
3195
|
},
|
|
2663
|
-
|
|
2664
|
-
|
|
3196
|
+
orderedItem: {
|
|
3197
|
+
marginLeft: 0
|
|
2665
3198
|
},
|
|
2666
|
-
|
|
2667
|
-
|
|
2668
|
-
alignItems: "center",
|
|
2669
|
-
justifyContent: "center",
|
|
2670
|
-
gap: 12
|
|
3199
|
+
bulletItem: {
|
|
3200
|
+
marginLeft: 0
|
|
2671
3201
|
},
|
|
2672
|
-
|
|
2673
|
-
|
|
2674
|
-
|
|
3202
|
+
videoLink: {
|
|
3203
|
+
marginTop: 8,
|
|
3204
|
+
paddingVertical: 8,
|
|
3205
|
+
paddingHorizontal: 12
|
|
2675
3206
|
},
|
|
2676
|
-
|
|
2677
|
-
|
|
3207
|
+
videoLinkText: {
|
|
3208
|
+
fontSize: 13,
|
|
3209
|
+
fontWeight: "500"
|
|
2678
3210
|
}
|
|
2679
3211
|
});
|
|
2680
3212
|
|
|
2681
3213
|
// src/molecules/IntegrationForm.tsx
|
|
2682
|
-
var import_react30 = __toESM(require("react"));
|
|
2683
|
-
var import_react_native15 = require("react-native");
|
|
2684
3214
|
var IntegrationForm = ({
|
|
2685
3215
|
metadata,
|
|
2686
3216
|
onAddHandle,
|
|
2687
3217
|
open,
|
|
2688
3218
|
setAddIntegrationMode,
|
|
2689
3219
|
handleClose,
|
|
2690
|
-
providersList
|
|
3220
|
+
providersList,
|
|
3221
|
+
errorMessage: errorMessageProp,
|
|
3222
|
+
showBackButton = true
|
|
2691
3223
|
}) => {
|
|
2692
3224
|
const { clientId, linkToken, user } = useKryptosConnect();
|
|
2693
3225
|
const theme = useTheme();
|
|
2694
|
-
const [isLoading, setIsLoading] =
|
|
2695
|
-
const [isFetchingChains, setIsFetchingChains] =
|
|
2696
|
-
const [userUsedChains, setUserUsedChains] =
|
|
2697
|
-
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(
|
|
2698
3230
|
/* @__PURE__ */ new Set()
|
|
2699
3231
|
);
|
|
2700
|
-
const [chainErrors, setChainErrors] =
|
|
3232
|
+
const [chainErrors, setChainErrors] = import_react34.default.useState(
|
|
2701
3233
|
{}
|
|
2702
3234
|
);
|
|
2703
|
-
const [errorMessage, setErrorMessage] =
|
|
2704
|
-
const [formValues, setFormValues] =
|
|
3235
|
+
const [errorMessage, setErrorMessage] = import_react34.default.useState("");
|
|
3236
|
+
const [formValues, setFormValues] = import_react34.default.useState({
|
|
2705
3237
|
address: "",
|
|
2706
3238
|
account_name: "",
|
|
2707
3239
|
api_key: "",
|
|
2708
3240
|
secret_key: "",
|
|
2709
3241
|
password: ""
|
|
2710
3242
|
});
|
|
2711
|
-
const [formErrors, setFormErrors] =
|
|
2712
|
-
|
|
3243
|
+
const [formErrors, setFormErrors] = import_react34.default.useState({});
|
|
3244
|
+
import_react34.default.useEffect(() => {
|
|
2713
3245
|
if (!formValues.address || !formValues.address.trim()) {
|
|
2714
3246
|
setUserUsedChains([]);
|
|
2715
3247
|
setSelectedChains(/* @__PURE__ */ new Set());
|
|
@@ -2792,18 +3324,18 @@ var IntegrationForm = ({
|
|
|
2792
3324
|
const credentialTestsData = chainsToProcess.map((chain) => {
|
|
2793
3325
|
const walletId = generateUUID();
|
|
2794
3326
|
const displaySuffix = primaryField.length >= 8 ? `${primaryField.slice(0, 4)}...${primaryField.slice(-4)}` : primaryField;
|
|
2795
|
-
const alias = `${metadata.id} - ${chain
|
|
3327
|
+
const alias = `${metadata.id} - ${chain?.name || ""} (${displaySuffix})`;
|
|
2796
3328
|
const credential = {
|
|
2797
3329
|
source: metadata.id,
|
|
2798
3330
|
credential: {
|
|
2799
|
-
apiKey: formValues.api_key?.trim() || "
|
|
2800
|
-
secret: formValues.secret_key?.trim() || "
|
|
2801
|
-
accountName: formValues.account_name?.trim() || "
|
|
2802
|
-
address: formValues.address?.trim() || "
|
|
2803
|
-
password: formValues.password?.trim() || "
|
|
2804
|
-
userId: user?.user_id || "
|
|
2805
|
-
projectId: metadata?.projectId || "
|
|
2806
|
-
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: "",
|
|
2807
3339
|
alias,
|
|
2808
3340
|
walletId,
|
|
2809
3341
|
exchange: metadata.id
|
|
@@ -2835,16 +3367,14 @@ var IntegrationForm = ({
|
|
|
2835
3367
|
clientId,
|
|
2836
3368
|
createdAt: (/* @__PURE__ */ new Date()).toISOString()
|
|
2837
3369
|
},
|
|
2838
|
-
metadata: {
|
|
2839
|
-
environment: "sandbox"
|
|
2840
|
-
},
|
|
2841
3370
|
addedOn: (/* @__PURE__ */ new Date()).getTime(),
|
|
2842
3371
|
default_chain: chain.name,
|
|
2843
|
-
default_chain_logo:
|
|
3372
|
+
default_chain_logo: "",
|
|
2844
3373
|
type: metadata.type,
|
|
2845
3374
|
isNftSupported: metadata.isEvmWallet || metadata.nftSupport || false,
|
|
2846
3375
|
chainId: chain?.community_id || "",
|
|
2847
|
-
address: formValues.address
|
|
3376
|
+
address: formValues.address,
|
|
3377
|
+
isCustomWallet: false
|
|
2848
3378
|
};
|
|
2849
3379
|
if (formValues.account_name)
|
|
2850
3380
|
data.accountName = formValues.account_name;
|
|
@@ -2854,10 +3384,9 @@ var IntegrationForm = ({
|
|
|
2854
3384
|
integrationsToAdd.push(data);
|
|
2855
3385
|
} else {
|
|
2856
3386
|
if (result.status === "rejected") {
|
|
2857
|
-
|
|
2858
|
-
errors[chain.id] = reason?.response?.data?.message || "Failed to process chain";
|
|
3387
|
+
errors[chain.id] = result.reason?.response?.data?.message || "Failed to process chain";
|
|
2859
3388
|
} else if (result.status === "fulfilled") {
|
|
2860
|
-
errors[chain.id] = result.value?.
|
|
3389
|
+
errors[chain.id] = result.value?.message || "Failed to verify chain";
|
|
2861
3390
|
}
|
|
2862
3391
|
}
|
|
2863
3392
|
});
|
|
@@ -2875,14 +3404,14 @@ var IntegrationForm = ({
|
|
|
2875
3404
|
const credential = {
|
|
2876
3405
|
source: metadata.id,
|
|
2877
3406
|
credential: {
|
|
2878
|
-
apiKey: formValues.api_key?.trim() || "
|
|
2879
|
-
secret: formValues.secret_key?.trim() || "
|
|
2880
|
-
accountName: formValues.account_name?.trim() || "
|
|
2881
|
-
address: formValues.address?.trim() || "
|
|
2882
|
-
password: formValues.password?.trim() || "
|
|
2883
|
-
userId: user?.user_id || "
|
|
2884
|
-
projectId: metadata?.projectId || "
|
|
2885
|
-
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: "",
|
|
2886
3415
|
alias,
|
|
2887
3416
|
walletId,
|
|
2888
3417
|
exchange: metadata.id
|
|
@@ -2890,9 +3419,7 @@ var IntegrationForm = ({
|
|
|
2890
3419
|
};
|
|
2891
3420
|
const testResult = await testCredentials(linkToken, { ...credential });
|
|
2892
3421
|
if (!testResult?.valid) {
|
|
2893
|
-
setErrorMessage(
|
|
2894
|
-
testResult?.value?.message || "Credentials are invalid"
|
|
2895
|
-
);
|
|
3422
|
+
setErrorMessage(testResult?.message || "Credentials are invalid");
|
|
2896
3423
|
return;
|
|
2897
3424
|
}
|
|
2898
3425
|
const data = {
|
|
@@ -2911,14 +3438,12 @@ var IntegrationForm = ({
|
|
|
2911
3438
|
clientId,
|
|
2912
3439
|
createdAt: (/* @__PURE__ */ new Date()).toISOString()
|
|
2913
3440
|
},
|
|
2914
|
-
metadata: {
|
|
2915
|
-
environment: "sandbox"
|
|
2916
|
-
},
|
|
2917
3441
|
addedOn: (/* @__PURE__ */ new Date()).getTime(),
|
|
2918
3442
|
default_chain: metadata.id,
|
|
2919
|
-
default_chain_logo:
|
|
3443
|
+
default_chain_logo: "",
|
|
2920
3444
|
type: metadata.type,
|
|
2921
|
-
isNftSupported: metadata.isEvmWallet || metadata.nftSupport || false
|
|
3445
|
+
isNftSupported: metadata.isEvmWallet || metadata.nftSupport || false,
|
|
3446
|
+
isCustomWallet: false
|
|
2922
3447
|
};
|
|
2923
3448
|
if (metadata.community_id) {
|
|
2924
3449
|
data.chainId = metadata.community_id;
|
|
@@ -2931,7 +3456,7 @@ var IntegrationForm = ({
|
|
|
2931
3456
|
integrationsToAdd.push(data);
|
|
2932
3457
|
}
|
|
2933
3458
|
if (integrationsToAdd.length > 0) {
|
|
2934
|
-
onAddHandle(integrationsToAdd);
|
|
3459
|
+
await onAddHandle(integrationsToAdd);
|
|
2935
3460
|
setFormErrors({});
|
|
2936
3461
|
setFormValues({
|
|
2937
3462
|
address: "",
|
|
@@ -2945,10 +3470,9 @@ var IntegrationForm = ({
|
|
|
2945
3470
|
setErrorMessage("No integrations could be added. Please try again.");
|
|
2946
3471
|
}
|
|
2947
3472
|
} catch (error) {
|
|
2948
|
-
const err = error;
|
|
2949
3473
|
console.error(error);
|
|
2950
3474
|
setErrorMessage(
|
|
2951
|
-
|
|
3475
|
+
error?.response?.data?.message || error?.response?.data?.error || "Failed to add integrations"
|
|
2952
3476
|
);
|
|
2953
3477
|
} finally {
|
|
2954
3478
|
setIsLoading(false);
|
|
@@ -2956,24 +3480,24 @@ var IntegrationForm = ({
|
|
|
2956
3480
|
};
|
|
2957
3481
|
const hasNoFields = !metadata.password && !metadata.secret_key && !metadata.api_key && !metadata.address && !metadata.account_name;
|
|
2958
3482
|
const shouldShowFormFields = metadata.password || metadata.secret_key || metadata.api_key || metadata.address || metadata.account_name;
|
|
2959
|
-
const renderLogo = () => metadata.logo ? /* @__PURE__ */
|
|
2960
|
-
|
|
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,
|
|
2961
3485
|
{
|
|
2962
3486
|
source: { uri: metadata.logo },
|
|
2963
|
-
style:
|
|
3487
|
+
style: styles16.logo,
|
|
2964
3488
|
resizeMode: "contain"
|
|
2965
3489
|
}
|
|
2966
|
-
) : /* @__PURE__ */
|
|
2967
|
-
|
|
3490
|
+
) : /* @__PURE__ */ import_react34.default.createElement(
|
|
3491
|
+
import_react_native18.View,
|
|
2968
3492
|
{
|
|
2969
3493
|
style: [
|
|
2970
|
-
|
|
3494
|
+
styles16.logoPlaceholder,
|
|
2971
3495
|
{ backgroundColor: theme.colors.surface }
|
|
2972
3496
|
]
|
|
2973
3497
|
},
|
|
2974
|
-
/* @__PURE__ */
|
|
3498
|
+
/* @__PURE__ */ import_react34.default.createElement(import_react_native18.Text, { style: { color: theme.colors.text } }, metadata.name?.charAt(0) || "?")
|
|
2975
3499
|
);
|
|
2976
|
-
const renderInput = (key, props) => /* @__PURE__ */
|
|
3500
|
+
const renderInput = (key, props) => /* @__PURE__ */ import_react34.default.createElement(
|
|
2977
3501
|
Input,
|
|
2978
3502
|
{
|
|
2979
3503
|
placeholder: props.placeholder,
|
|
@@ -2985,33 +3509,33 @@ var IntegrationForm = ({
|
|
|
2985
3509
|
secureTextEntry: props.secureTextEntry
|
|
2986
3510
|
}
|
|
2987
3511
|
);
|
|
2988
|
-
const renderErrorAlert = () => errorMessage ? /* @__PURE__ */
|
|
2989
|
-
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) => {
|
|
2990
3514
|
const isSelected = selectedChains.has(chain.id);
|
|
2991
3515
|
const hasError = chainErrors[chain.id];
|
|
2992
|
-
return /* @__PURE__ */
|
|
2993
|
-
|
|
3516
|
+
return /* @__PURE__ */ import_react34.default.createElement(
|
|
3517
|
+
import_react_native18.TouchableOpacity,
|
|
2994
3518
|
{
|
|
2995
3519
|
onPress: () => toggleChainSelection(chain.id),
|
|
2996
|
-
style:
|
|
3520
|
+
style: styles16.chainButton,
|
|
2997
3521
|
key: chain.id
|
|
2998
3522
|
},
|
|
2999
|
-
/* @__PURE__ */
|
|
3000
|
-
|
|
3523
|
+
/* @__PURE__ */ import_react34.default.createElement(
|
|
3524
|
+
import_react_native18.View,
|
|
3001
3525
|
{
|
|
3002
3526
|
style: [
|
|
3003
|
-
|
|
3527
|
+
styles16.chainChip,
|
|
3004
3528
|
{
|
|
3005
3529
|
backgroundColor: hasError ? theme.colors.errorLight : isSelected ? theme.colors.primary + "20" : theme.colors.surface,
|
|
3006
3530
|
borderColor: hasError ? theme.colors.error : isSelected ? theme.colors.primary : theme.colors.border
|
|
3007
3531
|
}
|
|
3008
3532
|
]
|
|
3009
3533
|
},
|
|
3010
|
-
/* @__PURE__ */
|
|
3011
|
-
|
|
3534
|
+
/* @__PURE__ */ import_react34.default.createElement(
|
|
3535
|
+
import_react_native18.Text,
|
|
3012
3536
|
{
|
|
3013
3537
|
style: [
|
|
3014
|
-
|
|
3538
|
+
styles16.chainName,
|
|
3015
3539
|
{
|
|
3016
3540
|
color: hasError ? theme.colors.error : isSelected ? theme.colors.primary : theme.colors.text
|
|
3017
3541
|
}
|
|
@@ -3019,28 +3543,55 @@ var IntegrationForm = ({
|
|
|
3019
3543
|
},
|
|
3020
3544
|
chain.name
|
|
3021
3545
|
),
|
|
3022
|
-
isSelected ? /* @__PURE__ */
|
|
3546
|
+
isSelected ? /* @__PURE__ */ import_react34.default.createElement(
|
|
3023
3547
|
CloseIcon,
|
|
3024
3548
|
{
|
|
3025
3549
|
size: 12,
|
|
3026
3550
|
color: hasError ? theme.colors.error : theme.colors.primary
|
|
3027
3551
|
}
|
|
3028
|
-
) : /* @__PURE__ */
|
|
3552
|
+
) : /* @__PURE__ */ import_react34.default.createElement(PlusIcon, { size: 12, color: theme.colors.textSecondary })
|
|
3029
3553
|
)
|
|
3030
3554
|
);
|
|
3031
|
-
}))
|
|
3032
|
-
|
|
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,
|
|
3033
3584
|
{
|
|
3034
|
-
style: [
|
|
3585
|
+
style: [styles16.chainErrorsTitle, { color: theme.colors.error }]
|
|
3035
3586
|
},
|
|
3036
3587
|
"Errors:"
|
|
3037
3588
|
), Object.entries(chainErrors).map(([chainId, error]) => {
|
|
3038
3589
|
const chain = userUsedChains.find((c) => c.id === chainId);
|
|
3039
|
-
return /* @__PURE__ */
|
|
3040
|
-
|
|
3590
|
+
return /* @__PURE__ */ import_react34.default.createElement(
|
|
3591
|
+
import_react_native18.Text,
|
|
3041
3592
|
{
|
|
3042
3593
|
key: chainId,
|
|
3043
|
-
style: [
|
|
3594
|
+
style: [styles16.chainErrorItem, { color: theme.colors.error }]
|
|
3044
3595
|
},
|
|
3045
3596
|
"\u2022 ",
|
|
3046
3597
|
chain?.name,
|
|
@@ -3048,7 +3599,7 @@ var IntegrationForm = ({
|
|
|
3048
3599
|
error
|
|
3049
3600
|
);
|
|
3050
3601
|
})));
|
|
3051
|
-
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", {
|
|
3052
3603
|
placeholder: "Enter address",
|
|
3053
3604
|
autoCapitalize: "none",
|
|
3054
3605
|
autoCorrect: false
|
|
@@ -3064,16 +3615,23 @@ var IntegrationForm = ({
|
|
|
3064
3615
|
}), metadata.password && renderInput("password", {
|
|
3065
3616
|
placeholder: "Enter Password",
|
|
3066
3617
|
secureTextEntry: true
|
|
3067
|
-
})), 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.")));
|
|
3068
3619
|
const addIntegrationLabel = formValues.address && userUsedChains.length > 0 && selectedChains.size > 0 ? `Add ${selectedChains.size} Chain${selectedChains.size !== 1 ? "s" : ""}` : "Add Integration";
|
|
3069
|
-
return /* @__PURE__ */
|
|
3070
|
-
|
|
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,
|
|
3071
3622
|
{
|
|
3072
3623
|
onPress: () => setAddIntegrationMode(null),
|
|
3073
|
-
style:
|
|
3624
|
+
style: styles16.backButton
|
|
3074
3625
|
},
|
|
3075
|
-
/* @__PURE__ */
|
|
3076
|
-
), /* @__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(
|
|
3077
3635
|
Button,
|
|
3078
3636
|
{
|
|
3079
3637
|
variant: "outline",
|
|
@@ -3081,10 +3639,10 @@ var IntegrationForm = ({
|
|
|
3081
3639
|
onPress: handleSubmit,
|
|
3082
3640
|
loading: isLoading,
|
|
3083
3641
|
disabled: isLoading || isFetchingChains || !!formValues.address && userUsedChains.length > 0 && selectedChains.size === 0,
|
|
3084
|
-
style:
|
|
3642
|
+
style: styles16.button
|
|
3085
3643
|
},
|
|
3086
3644
|
addIntegrationLabel
|
|
3087
|
-
), /* @__PURE__ */
|
|
3645
|
+
), /* @__PURE__ */ import_react34.default.createElement(Footer, null))) : /* @__PURE__ */ import_react34.default.createElement(
|
|
3088
3646
|
WalletConnectComponent,
|
|
3089
3647
|
{
|
|
3090
3648
|
integration: metadata,
|
|
@@ -3093,14 +3651,14 @@ var IntegrationForm = ({
|
|
|
3093
3651
|
modalOpen: open,
|
|
3094
3652
|
setAddIntegrationMode,
|
|
3095
3653
|
handleClose,
|
|
3096
|
-
providersList
|
|
3654
|
+
providersList,
|
|
3655
|
+
errorMessage: errorMessageProp
|
|
3097
3656
|
}
|
|
3098
3657
|
));
|
|
3099
3658
|
};
|
|
3100
|
-
var
|
|
3101
|
-
|
|
3102
|
-
|
|
3103
|
-
paddingBottom: 100
|
|
3659
|
+
var styles16 = import_react_native18.StyleSheet.create({
|
|
3660
|
+
chainListContent: {
|
|
3661
|
+
paddingBottom: 8
|
|
3104
3662
|
},
|
|
3105
3663
|
headerContent: {
|
|
3106
3664
|
flexDirection: "row",
|
|
@@ -3125,10 +3683,8 @@ var styles14 = import_react_native15.StyleSheet.create({
|
|
|
3125
3683
|
// theme.spacing.xl
|
|
3126
3684
|
paddingBottom: 40,
|
|
3127
3685
|
width: "100%",
|
|
3128
|
-
overflow: "hidden",
|
|
3129
3686
|
alignSelf: "center",
|
|
3130
|
-
flexDirection: "column"
|
|
3131
|
-
flex: 1
|
|
3687
|
+
flexDirection: "column"
|
|
3132
3688
|
},
|
|
3133
3689
|
header: {
|
|
3134
3690
|
flexDirection: "row",
|
|
@@ -3160,7 +3716,7 @@ var styles14 = import_react_native15.StyleSheet.create({
|
|
|
3160
3716
|
textTransform: "capitalize"
|
|
3161
3717
|
},
|
|
3162
3718
|
chainSelection: {
|
|
3163
|
-
marginBottom:
|
|
3719
|
+
marginBottom: 8
|
|
3164
3720
|
// theme.spacing.lg
|
|
3165
3721
|
},
|
|
3166
3722
|
chainTitle: {
|
|
@@ -3187,6 +3743,11 @@ var styles14 = import_react_native15.StyleSheet.create({
|
|
|
3187
3743
|
// theme.borderRadius.md
|
|
3188
3744
|
borderWidth: 1
|
|
3189
3745
|
},
|
|
3746
|
+
chainChipRemoveAll: {
|
|
3747
|
+
marginTop: 6,
|
|
3748
|
+
// theme.spacing.sm - separate from chain list
|
|
3749
|
+
width: "auto"
|
|
3750
|
+
},
|
|
3190
3751
|
chainName: {
|
|
3191
3752
|
fontSize: 12,
|
|
3192
3753
|
fontWeight: "500",
|
|
@@ -3222,18 +3783,23 @@ var styles14 = import_react_native15.StyleSheet.create({
|
|
|
3222
3783
|
var Integration = ({
|
|
3223
3784
|
open,
|
|
3224
3785
|
onSuccess,
|
|
3225
|
-
onClose
|
|
3786
|
+
onClose,
|
|
3787
|
+
integrationDetails
|
|
3226
3788
|
}) => {
|
|
3227
3789
|
const { appName, linkToken } = useKryptosConnect();
|
|
3228
3790
|
const theme = useTheme();
|
|
3229
|
-
const [addIntegrationMode, setAddIntegrationMode] =
|
|
3230
|
-
const [query, setQuery] =
|
|
3231
|
-
const [activeTab, setActiveTab] =
|
|
3232
|
-
const [supportedProviders, setSupportedProviders] =
|
|
3233
|
-
const [
|
|
3234
|
-
const [
|
|
3235
|
-
const [
|
|
3236
|
-
|
|
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]);
|
|
3237
3803
|
const handleClose = () => {
|
|
3238
3804
|
onClose();
|
|
3239
3805
|
};
|
|
@@ -3244,7 +3810,7 @@ var Integration = ({
|
|
|
3244
3810
|
} catch (error) {
|
|
3245
3811
|
const err = error;
|
|
3246
3812
|
setErrorMessage(
|
|
3247
|
-
err?.response?.data?.message || "Failed to fetch existing integrations"
|
|
3813
|
+
err?.response?.data?.message || err?.response?.data?.error || "Failed to fetch existing integrations"
|
|
3248
3814
|
);
|
|
3249
3815
|
console.error(error);
|
|
3250
3816
|
}
|
|
@@ -3257,38 +3823,38 @@ var Integration = ({
|
|
|
3257
3823
|
} catch (error) {
|
|
3258
3824
|
const err = error;
|
|
3259
3825
|
setErrorMessage(
|
|
3260
|
-
err?.response?.data?.message || "Failed to fetch supported providers"
|
|
3826
|
+
err?.response?.data?.message || err?.response?.data?.error || "Failed to fetch supported providers"
|
|
3261
3827
|
);
|
|
3262
3828
|
console.error(error);
|
|
3263
3829
|
} finally {
|
|
3264
3830
|
setIsLoading(false);
|
|
3265
3831
|
}
|
|
3266
3832
|
};
|
|
3267
|
-
|
|
3833
|
+
import_react35.default.useEffect(() => {
|
|
3268
3834
|
if (linkToken) {
|
|
3269
3835
|
fetchSupportedProviders();
|
|
3270
3836
|
fetchExistingIntegrations();
|
|
3271
3837
|
}
|
|
3272
3838
|
}, [linkToken]);
|
|
3273
|
-
const isIntegrationAdded =
|
|
3839
|
+
const isIntegrationAdded = (0, import_react35.useCallback)(
|
|
3274
3840
|
(publicName) => {
|
|
3275
|
-
const integrations = [...
|
|
3841
|
+
const integrations = [...existingIntegrations];
|
|
3276
3842
|
return integrations.some(
|
|
3277
3843
|
(integration) => integration.public_name === publicName
|
|
3278
3844
|
);
|
|
3279
3845
|
},
|
|
3280
|
-
[
|
|
3846
|
+
[existingIntegrations]
|
|
3281
3847
|
);
|
|
3282
|
-
const getIntegrationCount =
|
|
3848
|
+
const getIntegrationCount = (0, import_react35.useCallback)(
|
|
3283
3849
|
(publicName) => {
|
|
3284
|
-
const integrations = [...
|
|
3850
|
+
const integrations = [...existingIntegrations];
|
|
3285
3851
|
return integrations.filter(
|
|
3286
3852
|
(integration) => integration.public_name === publicName
|
|
3287
3853
|
).length;
|
|
3288
3854
|
},
|
|
3289
|
-
[
|
|
3855
|
+
[existingIntegrations]
|
|
3290
3856
|
);
|
|
3291
|
-
const filteredResults =
|
|
3857
|
+
const filteredResults = import_react35.default.useMemo(() => {
|
|
3292
3858
|
let filtered = supportedProviders;
|
|
3293
3859
|
if (activeTab !== "all") {
|
|
3294
3860
|
filtered = filtered.filter((provider) => provider.type === activeTab);
|
|
@@ -3306,33 +3872,41 @@ var Integration = ({
|
|
|
3306
3872
|
return (a.name ?? "").localeCompare(b.name ?? "");
|
|
3307
3873
|
});
|
|
3308
3874
|
}, [query, supportedProviders, getIntegrationCount, activeTab]);
|
|
3309
|
-
const handleAddIntegration = async () => {
|
|
3875
|
+
const handleAddIntegration = async (integrationsList) => {
|
|
3310
3876
|
try {
|
|
3311
3877
|
setIsLoading(true);
|
|
3312
|
-
const integrations = [...
|
|
3878
|
+
const integrations = integrationsList ? integrationsList : [...existingIntegrations];
|
|
3313
3879
|
if (integrations.length === 0) {
|
|
3314
3880
|
setErrorMessage("Please add at least one integration");
|
|
3315
|
-
} else if (addedIntegrations.length === 0) {
|
|
3316
|
-
onSuccess();
|
|
3317
3881
|
} else {
|
|
3318
|
-
await addUserIntegration(linkToken,
|
|
3319
|
-
|
|
3882
|
+
await addUserIntegration(linkToken, integrations);
|
|
3883
|
+
if (integrationDetails) {
|
|
3884
|
+
onSuccess();
|
|
3885
|
+
}
|
|
3320
3886
|
}
|
|
3887
|
+
await fetchExistingIntegrations();
|
|
3888
|
+
setAddIntegrationMode(null);
|
|
3321
3889
|
} catch (error) {
|
|
3322
|
-
const
|
|
3323
|
-
|
|
3324
|
-
|
|
3325
|
-
err?.response?.data?.message || "Failed to add integrations"
|
|
3326
|
-
);
|
|
3890
|
+
const message = error?.response?.data?.message || error?.response?.data?.error || "Failed to add integrations";
|
|
3891
|
+
setErrorMessage(message);
|
|
3892
|
+
throw error;
|
|
3327
3893
|
} finally {
|
|
3328
3894
|
setIsLoading(false);
|
|
3329
3895
|
}
|
|
3330
3896
|
};
|
|
3331
|
-
const
|
|
3332
|
-
|
|
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,
|
|
3333
3907
|
{
|
|
3334
3908
|
style: [
|
|
3335
|
-
|
|
3909
|
+
styles17.providerItem,
|
|
3336
3910
|
{
|
|
3337
3911
|
backgroundColor: theme.colors.surface,
|
|
3338
3912
|
borderColor: theme.colors.border
|
|
@@ -3341,44 +3915,98 @@ var Integration = ({
|
|
|
3341
3915
|
onPress: () => setAddIntegrationMode(item),
|
|
3342
3916
|
activeOpacity: 0.7
|
|
3343
3917
|
},
|
|
3344
|
-
/* @__PURE__ */
|
|
3345
|
-
|
|
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,
|
|
3346
3920
|
{
|
|
3347
3921
|
source: { uri: item?.logo },
|
|
3348
|
-
style:
|
|
3922
|
+
style: styles17.providerLogo,
|
|
3349
3923
|
resizeMode: "contain"
|
|
3350
3924
|
}
|
|
3351
|
-
) : /* @__PURE__ */
|
|
3352
|
-
|
|
3925
|
+
) : /* @__PURE__ */ import_react35.default.createElement(
|
|
3926
|
+
import_react_native19.View,
|
|
3353
3927
|
{
|
|
3354
3928
|
style: [
|
|
3355
|
-
|
|
3929
|
+
styles17.providerLogoPlaceholder,
|
|
3356
3930
|
{ backgroundColor: theme.colors.surfaceSecondary }
|
|
3357
3931
|
]
|
|
3358
3932
|
},
|
|
3359
|
-
/* @__PURE__ */
|
|
3360
|
-
), /* @__PURE__ */
|
|
3361
|
-
isIntegrationAdded(item?.public_name) && /* @__PURE__ */
|
|
3362
|
-
|
|
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,
|
|
3363
3937
|
{
|
|
3364
3938
|
style: [
|
|
3365
|
-
|
|
3939
|
+
styles17.providerCount,
|
|
3366
3940
|
{ color: theme.colors.textSecondary }
|
|
3367
3941
|
]
|
|
3368
3942
|
},
|
|
3369
3943
|
getIntegrationCount(item?.public_name)
|
|
3370
3944
|
))
|
|
3371
3945
|
);
|
|
3372
|
-
const renderSkeletonItem = () => /* @__PURE__ */
|
|
3373
|
-
return /* @__PURE__ */
|
|
3374
|
-
|
|
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,
|
|
3375
3949
|
{
|
|
3376
3950
|
onPress: () => setAddIntegrationMode(null),
|
|
3377
|
-
style:
|
|
3951
|
+
style: styles17.backButton
|
|
3952
|
+
},
|
|
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,
|
|
3956
|
+
{
|
|
3957
|
+
style: {
|
|
3958
|
+
paddingHorizontal: theme.spacing.xl,
|
|
3959
|
+
paddingVertical: theme.spacing.sm + 2,
|
|
3960
|
+
backgroundColor: theme.colors.background,
|
|
3961
|
+
zIndex: 10
|
|
3962
|
+
}
|
|
3378
3963
|
},
|
|
3379
|
-
/* @__PURE__ */
|
|
3380
|
-
|
|
3381
|
-
|
|
3964
|
+
/* @__PURE__ */ import_react35.default.createElement(
|
|
3965
|
+
Input,
|
|
3966
|
+
{
|
|
3967
|
+
value: query,
|
|
3968
|
+
onChangeText: setQuery,
|
|
3969
|
+
placeholder: "Search Integrations...",
|
|
3970
|
+
containerStyle: styles17.searchInput
|
|
3971
|
+
}
|
|
3972
|
+
),
|
|
3973
|
+
/* @__PURE__ */ import_react35.default.createElement(import_react_native19.View, { style: styles17.tabsContainer }, [
|
|
3974
|
+
{ label: "All", value: "all" },
|
|
3975
|
+
{ label: "Exchanges", value: "exchange" },
|
|
3976
|
+
{ label: "Blockchains", value: "blockchain" },
|
|
3977
|
+
{ label: "Wallets", value: "wallet" }
|
|
3978
|
+
].map((tab) => /* @__PURE__ */ import_react35.default.createElement(
|
|
3979
|
+
import_react_native19.TouchableOpacity,
|
|
3980
|
+
{
|
|
3981
|
+
key: tab.value,
|
|
3982
|
+
style: [
|
|
3983
|
+
styles17.tab,
|
|
3984
|
+
{
|
|
3985
|
+
backgroundColor: activeTab === tab.value ? theme.colors.primary : theme.colors.surface,
|
|
3986
|
+
borderColor: theme.colors.border
|
|
3987
|
+
}
|
|
3988
|
+
],
|
|
3989
|
+
onPress: () => {
|
|
3990
|
+
setActiveTab(
|
|
3991
|
+
tab.value
|
|
3992
|
+
);
|
|
3993
|
+
}
|
|
3994
|
+
},
|
|
3995
|
+
/* @__PURE__ */ import_react35.default.createElement(
|
|
3996
|
+
import_react_native19.Text,
|
|
3997
|
+
{
|
|
3998
|
+
style: [
|
|
3999
|
+
styles17.tabText,
|
|
4000
|
+
{
|
|
4001
|
+
color: activeTab === tab.value ? theme.colors.white : theme.colors.text
|
|
4002
|
+
}
|
|
4003
|
+
]
|
|
4004
|
+
},
|
|
4005
|
+
tab.label
|
|
4006
|
+
)
|
|
4007
|
+
)))
|
|
4008
|
+
), /* @__PURE__ */ import_react35.default.createElement(
|
|
4009
|
+
import_react_native19.FlatList,
|
|
3382
4010
|
{
|
|
3383
4011
|
data: isLoading ? Array.from({ length: 8 }, (_, i) => ({
|
|
3384
4012
|
id: `skeleton-${i}`,
|
|
@@ -3388,104 +4016,53 @@ var Integration = ({
|
|
|
3388
4016
|
})) : filteredResults,
|
|
3389
4017
|
keyExtractor: (item, index) => isLoading ? item.id : `provider-${item.id}-${index}`,
|
|
3390
4018
|
renderItem: isLoading ? renderSkeletonItem : renderProviderItem,
|
|
3391
|
-
style:
|
|
4019
|
+
style: styles17.list,
|
|
3392
4020
|
contentContainerStyle: [
|
|
3393
|
-
|
|
4021
|
+
styles17.listContent,
|
|
3394
4022
|
{ paddingHorizontal: theme.spacing.xl }
|
|
3395
4023
|
],
|
|
3396
4024
|
showsVerticalScrollIndicator: false,
|
|
3397
|
-
|
|
3398
|
-
|
|
3399
|
-
{
|
|
3400
|
-
style: {
|
|
3401
|
-
paddingVertical: theme.spacing.sm + 2,
|
|
3402
|
-
backgroundColor: theme.colors.background,
|
|
3403
|
-
zIndex: 10
|
|
3404
|
-
}
|
|
3405
|
-
},
|
|
3406
|
-
/* @__PURE__ */ import_react31.default.createElement(
|
|
3407
|
-
Input,
|
|
3408
|
-
{
|
|
3409
|
-
value: query,
|
|
3410
|
-
onChangeText: setQuery,
|
|
3411
|
-
placeholder: "Search Integrations...",
|
|
3412
|
-
containerStyle: styles15.searchInput
|
|
3413
|
-
}
|
|
3414
|
-
),
|
|
3415
|
-
/* @__PURE__ */ import_react31.default.createElement(import_react_native16.View, { style: styles15.tabsContainer }, [
|
|
3416
|
-
{ label: "All", value: "all" },
|
|
3417
|
-
{ label: "Exchanges", value: "exchange" },
|
|
3418
|
-
{ label: "Blockchains", value: "blockchain" },
|
|
3419
|
-
{ label: "Wallets", value: "wallet" }
|
|
3420
|
-
].map((tab) => /* @__PURE__ */ import_react31.default.createElement(
|
|
3421
|
-
import_react_native16.TouchableOpacity,
|
|
3422
|
-
{
|
|
3423
|
-
key: tab.value,
|
|
3424
|
-
style: [
|
|
3425
|
-
styles15.tab,
|
|
3426
|
-
{
|
|
3427
|
-
backgroundColor: activeTab === tab.value ? theme.colors.primary : theme.colors.surface,
|
|
3428
|
-
borderColor: theme.colors.border
|
|
3429
|
-
}
|
|
3430
|
-
],
|
|
3431
|
-
onPress: () => setActiveTab(
|
|
3432
|
-
tab.value
|
|
3433
|
-
),
|
|
3434
|
-
activeOpacity: 0.7
|
|
3435
|
-
},
|
|
3436
|
-
/* @__PURE__ */ import_react31.default.createElement(
|
|
3437
|
-
import_react_native16.Text,
|
|
3438
|
-
{
|
|
3439
|
-
style: [
|
|
3440
|
-
styles15.tabText,
|
|
3441
|
-
{
|
|
3442
|
-
color: activeTab === tab.value ? theme.colors.white : theme.colors.text
|
|
3443
|
-
}
|
|
3444
|
-
]
|
|
3445
|
-
},
|
|
3446
|
-
tab.label
|
|
3447
|
-
)
|
|
3448
|
-
)))
|
|
3449
|
-
),
|
|
3450
|
-
stickyHeaderIndices: [0],
|
|
3451
|
-
ListEmptyComponent: /* @__PURE__ */ import_react31.default.createElement(import_react_native16.View, { style: styles15.emptyContainer }, !isLoading && /* @__PURE__ */ import_react31.default.createElement(
|
|
3452
|
-
import_react_native16.Text,
|
|
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,
|
|
3453
4027
|
{
|
|
3454
4028
|
style: [
|
|
3455
|
-
|
|
4029
|
+
styles17.emptyText,
|
|
3456
4030
|
{ color: theme.colors.textSecondary }
|
|
3457
4031
|
]
|
|
3458
4032
|
},
|
|
3459
4033
|
query ? "No search results found" : "No supported integrations found"
|
|
3460
|
-
))
|
|
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
|
|
3461
4036
|
}
|
|
3462
|
-
),
|
|
4037
|
+
))), /* @__PURE__ */ import_react35.default.createElement(ModalFooter, { style: { paddingVertical: 8 } }, filteredResults && filteredResults.length > 0 && /* @__PURE__ */ import_react35.default.createElement(
|
|
3463
4038
|
Button,
|
|
3464
4039
|
{
|
|
3465
4040
|
variant: "outline",
|
|
3466
4041
|
size: "lg",
|
|
3467
|
-
onPress:
|
|
4042
|
+
onPress: handleContinue,
|
|
3468
4043
|
loading: isLoading,
|
|
3469
4044
|
disabled: isLoading,
|
|
3470
|
-
style:
|
|
4045
|
+
style: styles17.continueButton
|
|
3471
4046
|
},
|
|
3472
4047
|
"Continue"
|
|
3473
|
-
), /* @__PURE__ */
|
|
4048
|
+
), /* @__PURE__ */ import_react35.default.createElement(Footer, null))) : /* @__PURE__ */ import_react35.default.createElement(
|
|
3474
4049
|
IntegrationForm,
|
|
3475
4050
|
{
|
|
3476
4051
|
metadata: addIntegrationMode,
|
|
3477
|
-
onAddHandle: (
|
|
3478
|
-
|
|
3479
|
-
|
|
4052
|
+
onAddHandle: async (int) => {
|
|
4053
|
+
const integrationsList = [...int];
|
|
4054
|
+
await handleAddIntegration(integrationsList);
|
|
3480
4055
|
},
|
|
3481
4056
|
open: !!addIntegrationMode,
|
|
3482
4057
|
setAddIntegrationMode,
|
|
3483
4058
|
handleClose,
|
|
3484
|
-
providersList: supportedProviders
|
|
4059
|
+
providersList: supportedProviders,
|
|
4060
|
+
errorMessage,
|
|
4061
|
+
showBackButton: !integrationDetails
|
|
3485
4062
|
}
|
|
3486
4063
|
));
|
|
3487
4064
|
};
|
|
3488
|
-
var
|
|
4065
|
+
var styles17 = import_react_native19.StyleSheet.create({
|
|
3489
4066
|
headerContent: {
|
|
3490
4067
|
flexDirection: "row",
|
|
3491
4068
|
alignItems: "center"
|
|
@@ -3534,7 +4111,9 @@ var styles15 = import_react_native16.StyleSheet.create({
|
|
|
3534
4111
|
flexDirection: "row",
|
|
3535
4112
|
alignItems: "center",
|
|
3536
4113
|
justifyContent: "space-between",
|
|
3537
|
-
|
|
4114
|
+
paddingVertical: 8,
|
|
4115
|
+
// theme.spacing.md
|
|
4116
|
+
paddingHorizontal: 12,
|
|
3538
4117
|
// theme.spacing.md
|
|
3539
4118
|
borderRadius: 12,
|
|
3540
4119
|
// theme.borderRadius.md
|
|
@@ -3594,53 +4173,53 @@ var styles15 = import_react_native16.StyleSheet.create({
|
|
|
3594
4173
|
width: "100%"
|
|
3595
4174
|
},
|
|
3596
4175
|
errorContainer: {
|
|
3597
|
-
paddingHorizontal: 20
|
|
4176
|
+
paddingHorizontal: 20,
|
|
3598
4177
|
// theme.spacing.xl
|
|
4178
|
+
marginBottom: 12
|
|
3599
4179
|
},
|
|
3600
4180
|
errorAlert: {
|
|
3601
|
-
marginTop:
|
|
3602
|
-
// theme.spacing.lg - consistent alert spacing
|
|
4181
|
+
marginTop: 8
|
|
3603
4182
|
},
|
|
3604
4183
|
tabsContainer: {
|
|
3605
4184
|
flexDirection: "row",
|
|
3606
|
-
gap:
|
|
4185
|
+
gap: 6,
|
|
3607
4186
|
// theme.spacing.sm
|
|
3608
4187
|
flexWrap: "wrap"
|
|
3609
4188
|
},
|
|
3610
4189
|
tab: {
|
|
3611
|
-
paddingVertical:
|
|
4190
|
+
paddingVertical: 4,
|
|
3612
4191
|
// theme.spacing.sm
|
|
3613
|
-
paddingHorizontal:
|
|
4192
|
+
paddingHorizontal: 10,
|
|
3614
4193
|
// theme.spacing.lg
|
|
3615
|
-
borderRadius:
|
|
4194
|
+
borderRadius: 8,
|
|
3616
4195
|
// theme.borderRadius.full / 2
|
|
3617
4196
|
borderWidth: 1,
|
|
3618
4197
|
alignItems: "center",
|
|
3619
4198
|
justifyContent: "center"
|
|
3620
4199
|
},
|
|
3621
4200
|
tabText: {
|
|
3622
|
-
fontSize:
|
|
4201
|
+
fontSize: 12,
|
|
3623
4202
|
// theme.fontSize.sm
|
|
3624
4203
|
fontWeight: "600"
|
|
3625
4204
|
}
|
|
3626
4205
|
});
|
|
3627
4206
|
|
|
3628
4207
|
// src/molecules/OTPVerify.tsx
|
|
3629
|
-
var
|
|
3630
|
-
var
|
|
4208
|
+
var import_react36 = __toESM(require("react"));
|
|
4209
|
+
var import_react_native20 = require("react-native");
|
|
3631
4210
|
var OTPVerify = ({
|
|
3632
4211
|
open,
|
|
3633
4212
|
onSuccess,
|
|
3634
4213
|
onClose
|
|
3635
4214
|
}) => {
|
|
3636
4215
|
const theme = useTheme();
|
|
3637
|
-
const [otp, setOtp] =
|
|
4216
|
+
const [otp, setOtp] = import_react36.default.useState("");
|
|
3638
4217
|
const { linkToken, clientId, email, setUser } = useKryptosConnect();
|
|
3639
|
-
const [isLoading, setIsLoading] =
|
|
3640
|
-
const [isResending, setIsResending] =
|
|
3641
|
-
const [resendCooldown, setResendCooldown] =
|
|
3642
|
-
const [errorMessage, setErrorMessage] =
|
|
3643
|
-
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("");
|
|
3644
4223
|
const handleSubmit = async () => {
|
|
3645
4224
|
if (otp.length !== 6) return;
|
|
3646
4225
|
setIsLoading(true);
|
|
@@ -3691,7 +4270,7 @@ var OTPVerify = ({
|
|
|
3691
4270
|
setSuccessMessage("");
|
|
3692
4271
|
setOtp("");
|
|
3693
4272
|
};
|
|
3694
|
-
|
|
4273
|
+
import_react36.default.useEffect(() => {
|
|
3695
4274
|
if (resendCooldown > 0) {
|
|
3696
4275
|
const timer = setTimeout(() => {
|
|
3697
4276
|
setResendCooldown(resendCooldown - 1);
|
|
@@ -3700,20 +4279,20 @@ var OTPVerify = ({
|
|
|
3700
4279
|
}
|
|
3701
4280
|
return void 0;
|
|
3702
4281
|
}, [resendCooldown]);
|
|
3703
|
-
return /* @__PURE__ */
|
|
3704
|
-
|
|
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,
|
|
3705
4284
|
{
|
|
3706
|
-
style: [
|
|
4285
|
+
style: [styles18.infoText, { color: theme.colors.textSecondary }]
|
|
3707
4286
|
},
|
|
3708
4287
|
"We have sent a verification code to"
|
|
3709
|
-
), /* @__PURE__ */
|
|
4288
|
+
), /* @__PURE__ */ import_react36.default.createElement(import_react_native20.Text, { style: [styles18.emailText, { color: theme.colors.text }] }, email)), /* @__PURE__ */ import_react36.default.createElement(
|
|
3710
4289
|
OTP,
|
|
3711
4290
|
{
|
|
3712
4291
|
onComplete: handleOtpComplete,
|
|
3713
4292
|
length: 6,
|
|
3714
4293
|
setErrorMessage
|
|
3715
4294
|
}
|
|
3716
|
-
), 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(
|
|
3717
4296
|
Button,
|
|
3718
4297
|
{
|
|
3719
4298
|
variant: "outline",
|
|
@@ -3721,44 +4300,44 @@ var OTPVerify = ({
|
|
|
3721
4300
|
onPress: handleSubmit,
|
|
3722
4301
|
loading: isLoading,
|
|
3723
4302
|
disabled: otp.length !== 6 || isLoading,
|
|
3724
|
-
style:
|
|
4303
|
+
style: styles18.button
|
|
3725
4304
|
},
|
|
3726
4305
|
"Continue"
|
|
3727
|
-
), /* @__PURE__ */
|
|
3728
|
-
|
|
4306
|
+
), /* @__PURE__ */ import_react36.default.createElement(
|
|
4307
|
+
import_react_native20.TouchableOpacity,
|
|
3729
4308
|
{
|
|
3730
4309
|
onPress: handleResendOtp,
|
|
3731
4310
|
disabled: resendCooldown > 0 || isResending,
|
|
3732
|
-
style:
|
|
4311
|
+
style: styles18.resendContainer
|
|
3733
4312
|
},
|
|
3734
|
-
isResending ? /* @__PURE__ */
|
|
3735
|
-
|
|
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,
|
|
3736
4315
|
{
|
|
3737
|
-
style: [
|
|
4316
|
+
style: [styles18.resendText, { color: theme.colors.primary }]
|
|
3738
4317
|
},
|
|
3739
4318
|
" ",
|
|
3740
4319
|
"Sending..."
|
|
3741
|
-
)) : resendCooldown > 0 ? /* @__PURE__ */
|
|
3742
|
-
|
|
4320
|
+
)) : resendCooldown > 0 ? /* @__PURE__ */ import_react36.default.createElement(
|
|
4321
|
+
import_react_native20.Text,
|
|
3743
4322
|
{
|
|
3744
4323
|
style: [
|
|
3745
|
-
|
|
4324
|
+
styles18.resendText,
|
|
3746
4325
|
{ color: theme.colors.textSecondary }
|
|
3747
4326
|
]
|
|
3748
4327
|
},
|
|
3749
4328
|
"Resend OTP in ",
|
|
3750
4329
|
resendCooldown,
|
|
3751
4330
|
"s"
|
|
3752
|
-
) : /* @__PURE__ */
|
|
3753
|
-
|
|
4331
|
+
) : /* @__PURE__ */ import_react36.default.createElement(
|
|
4332
|
+
import_react_native20.Text,
|
|
3754
4333
|
{
|
|
3755
|
-
style: [
|
|
4334
|
+
style: [styles18.resendText, { color: theme.colors.primary }]
|
|
3756
4335
|
},
|
|
3757
4336
|
"Resend OTP"
|
|
3758
4337
|
)
|
|
3759
|
-
))), /* @__PURE__ */
|
|
4338
|
+
))), /* @__PURE__ */ import_react36.default.createElement(ModalFooter, { style: { paddingVertical: 0 } }, /* @__PURE__ */ import_react36.default.createElement(Footer, null)));
|
|
3760
4339
|
};
|
|
3761
|
-
var
|
|
4340
|
+
var styles18 = import_react_native20.StyleSheet.create({
|
|
3762
4341
|
headerContent: {
|
|
3763
4342
|
flexDirection: "row",
|
|
3764
4343
|
alignItems: "center"
|
|
@@ -3817,8 +4396,8 @@ var styles16 = import_react_native17.StyleSheet.create({
|
|
|
3817
4396
|
});
|
|
3818
4397
|
|
|
3819
4398
|
// src/molecules/Permissions.tsx
|
|
3820
|
-
var
|
|
3821
|
-
var
|
|
4399
|
+
var import_react37 = __toESM(require("react"));
|
|
4400
|
+
var import_react_native21 = require("react-native");
|
|
3822
4401
|
var Permissions = ({
|
|
3823
4402
|
open,
|
|
3824
4403
|
onClose,
|
|
@@ -3826,8 +4405,8 @@ var Permissions = ({
|
|
|
3826
4405
|
}) => {
|
|
3827
4406
|
const { appName, linkToken, setUserConsent } = useKryptosConnect();
|
|
3828
4407
|
const theme = useTheme();
|
|
3829
|
-
const [isLoading, setIsLoading] =
|
|
3830
|
-
const [errorMessage, setErrorMessage] =
|
|
4408
|
+
const [isLoading, setIsLoading] = import_react37.default.useState(false);
|
|
4409
|
+
const [errorMessage, setErrorMessage] = import_react37.default.useState("");
|
|
3831
4410
|
const handleConsentClick = async () => {
|
|
3832
4411
|
try {
|
|
3833
4412
|
setIsLoading(true);
|
|
@@ -3850,42 +4429,42 @@ var Permissions = ({
|
|
|
3850
4429
|
"Access your transaction history and trading activity",
|
|
3851
4430
|
"Keep this data updated and accessible when you're offline"
|
|
3852
4431
|
];
|
|
3853
|
-
return /* @__PURE__ */
|
|
3854
|
-
|
|
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,
|
|
3855
4434
|
{
|
|
3856
|
-
style: [
|
|
4435
|
+
style: [styles19.subtitle, { color: theme.colors.textSecondary }]
|
|
3857
4436
|
},
|
|
3858
4437
|
"Allow ",
|
|
3859
4438
|
appName,
|
|
3860
4439
|
" to:"
|
|
3861
|
-
), permissionItems.map((item, index) => /* @__PURE__ */
|
|
3862
|
-
|
|
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,
|
|
3863
4442
|
{
|
|
3864
|
-
style: [
|
|
4443
|
+
style: [styles19.permissionText, { color: theme.colors.text }]
|
|
3865
4444
|
},
|
|
3866
4445
|
item
|
|
3867
|
-
)))), /* @__PURE__ */
|
|
3868
|
-
|
|
4446
|
+
)))), /* @__PURE__ */ import_react37.default.createElement(
|
|
4447
|
+
import_react_native21.View,
|
|
3869
4448
|
{
|
|
3870
4449
|
style: [
|
|
3871
|
-
|
|
4450
|
+
styles19.infoBox,
|
|
3872
4451
|
{
|
|
3873
4452
|
backgroundColor: theme.colors.surface,
|
|
3874
4453
|
borderColor: theme.colors.border
|
|
3875
4454
|
}
|
|
3876
4455
|
]
|
|
3877
4456
|
},
|
|
3878
|
-
/* @__PURE__ */
|
|
3879
|
-
|
|
4457
|
+
/* @__PURE__ */ import_react37.default.createElement(
|
|
4458
|
+
import_react_native21.Text,
|
|
3880
4459
|
{
|
|
3881
|
-
style: [
|
|
4460
|
+
style: [styles19.infoText, { color: theme.colors.textSecondary }]
|
|
3882
4461
|
},
|
|
3883
4462
|
"By selecting",
|
|
3884
4463
|
" ",
|
|
3885
|
-
/* @__PURE__ */
|
|
4464
|
+
/* @__PURE__ */ import_react37.default.createElement(import_react_native21.Text, { style: { fontWeight: "600", color: theme.colors.text } }, "'Allow'"),
|
|
3886
4465
|
", you agree to share this information and keep it updated."
|
|
3887
4466
|
)
|
|
3888
|
-
))), /* @__PURE__ */
|
|
4467
|
+
))), /* @__PURE__ */ import_react37.default.createElement(ModalFooter, { style: { paddingVertical: 8 } }, /* @__PURE__ */ import_react37.default.createElement(
|
|
3889
4468
|
Button,
|
|
3890
4469
|
{
|
|
3891
4470
|
variant: "outline",
|
|
@@ -3893,12 +4472,12 @@ var Permissions = ({
|
|
|
3893
4472
|
onPress: handleConsentClick,
|
|
3894
4473
|
loading: isLoading,
|
|
3895
4474
|
disabled: isLoading,
|
|
3896
|
-
style:
|
|
4475
|
+
style: styles19.button
|
|
3897
4476
|
},
|
|
3898
4477
|
"Allow"
|
|
3899
|
-
), /* @__PURE__ */
|
|
4478
|
+
), /* @__PURE__ */ import_react37.default.createElement(Footer, null)));
|
|
3900
4479
|
};
|
|
3901
|
-
var
|
|
4480
|
+
var styles19 = import_react_native21.StyleSheet.create({
|
|
3902
4481
|
container: {
|
|
3903
4482
|
flex: 1
|
|
3904
4483
|
},
|
|
@@ -3956,8 +4535,8 @@ var styles17 = import_react_native18.StyleSheet.create({
|
|
|
3956
4535
|
});
|
|
3957
4536
|
|
|
3958
4537
|
// src/molecules/StatusModal.tsx
|
|
3959
|
-
var
|
|
3960
|
-
var
|
|
4538
|
+
var import_react38 = __toESM(require("react"));
|
|
4539
|
+
var import_react_native22 = require("react-native");
|
|
3961
4540
|
var StatusModal = ({
|
|
3962
4541
|
open,
|
|
3963
4542
|
onClose,
|
|
@@ -3974,18 +4553,18 @@ var StatusModal = ({
|
|
|
3974
4553
|
}
|
|
3975
4554
|
onClose();
|
|
3976
4555
|
};
|
|
3977
|
-
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(
|
|
3978
4557
|
Button,
|
|
3979
4558
|
{
|
|
3980
4559
|
variant: "outline",
|
|
3981
4560
|
size: "lg",
|
|
3982
4561
|
onPress: status === "success" ? onSuccess : onError,
|
|
3983
|
-
style:
|
|
4562
|
+
style: styles20.button
|
|
3984
4563
|
},
|
|
3985
4564
|
status === "success" ? "Continue" : "Try again later"
|
|
3986
|
-
), /* @__PURE__ */
|
|
4565
|
+
), /* @__PURE__ */ import_react38.default.createElement(Footer, null)));
|
|
3987
4566
|
};
|
|
3988
|
-
var
|
|
4567
|
+
var styles20 = import_react_native22.StyleSheet.create({
|
|
3989
4568
|
container: {
|
|
3990
4569
|
flex: 1,
|
|
3991
4570
|
alignItems: "center",
|
|
@@ -4009,64 +4588,6 @@ var styles18 = import_react_native19.StyleSheet.create({
|
|
|
4009
4588
|
}
|
|
4010
4589
|
});
|
|
4011
4590
|
|
|
4012
|
-
// src/molecules/EndModal.tsx
|
|
4013
|
-
var import_react35 = __toESM(require("react"));
|
|
4014
|
-
var import_react_native20 = require("react-native");
|
|
4015
|
-
var EndModal = ({ open, onClose }) => {
|
|
4016
|
-
const theme = useTheme();
|
|
4017
|
-
(0, import_react35.useEffect)(() => {
|
|
4018
|
-
if (!open) return;
|
|
4019
|
-
const timer = setTimeout(() => {
|
|
4020
|
-
onClose();
|
|
4021
|
-
}, 5e3);
|
|
4022
|
-
return () => clearTimeout(timer);
|
|
4023
|
-
}, []);
|
|
4024
|
-
return /* @__PURE__ */ import_react35.default.createElement(Modal, { isOpen: open, onClose, size: "md" }, /* @__PURE__ */ import_react35.default.createElement(ModalHeader, { onClose }, ""), /* @__PURE__ */ import_react35.default.createElement(ModalBody, null, /* @__PURE__ */ import_react35.default.createElement(import_react_native20.View, { style: styles19.container }, /* @__PURE__ */ import_react35.default.createElement(
|
|
4025
|
-
import_react_native20.View,
|
|
4026
|
-
{
|
|
4027
|
-
style: [
|
|
4028
|
-
styles19.iconContainer,
|
|
4029
|
-
{ backgroundColor: theme.colors.successLight }
|
|
4030
|
-
]
|
|
4031
|
-
},
|
|
4032
|
-
/* @__PURE__ */ import_react35.default.createElement(SuccessIcon, { size: 80 })
|
|
4033
|
-
), /* @__PURE__ */ import_react35.default.createElement(import_react_native20.Text, { style: [styles19.message, { color: theme.colors.text }] }, `All set! We're redirecting you back to the app. If it takes longer
|
|
4034
|
-
than expected, tap the button below to continue.`))), /* @__PURE__ */ import_react35.default.createElement(ModalFooter, { style: { paddingVertical: 8 } }, /* @__PURE__ */ import_react35.default.createElement(
|
|
4035
|
-
Button,
|
|
4036
|
-
{
|
|
4037
|
-
variant: "primary",
|
|
4038
|
-
size: "lg",
|
|
4039
|
-
onPress: onClose,
|
|
4040
|
-
style: styles19.button
|
|
4041
|
-
},
|
|
4042
|
-
"Continue to App"
|
|
4043
|
-
), /* @__PURE__ */ import_react35.default.createElement(Footer, null)));
|
|
4044
|
-
};
|
|
4045
|
-
var styles19 = import_react_native20.StyleSheet.create({
|
|
4046
|
-
container: {
|
|
4047
|
-
alignItems: "center",
|
|
4048
|
-
paddingVertical: 20
|
|
4049
|
-
},
|
|
4050
|
-
iconContainer: {
|
|
4051
|
-
width: 80,
|
|
4052
|
-
height: 80,
|
|
4053
|
-
borderRadius: 40,
|
|
4054
|
-
alignItems: "center",
|
|
4055
|
-
justifyContent: "center",
|
|
4056
|
-
marginBottom: 20
|
|
4057
|
-
},
|
|
4058
|
-
message: {
|
|
4059
|
-
fontSize: 14,
|
|
4060
|
-
textAlign: "center",
|
|
4061
|
-
lineHeight: 20,
|
|
4062
|
-
marginBottom: 24,
|
|
4063
|
-
paddingHorizontal: 20
|
|
4064
|
-
},
|
|
4065
|
-
button: {
|
|
4066
|
-
width: "100%"
|
|
4067
|
-
}
|
|
4068
|
-
});
|
|
4069
|
-
|
|
4070
4591
|
// src/KryptosConnectButton.tsx
|
|
4071
4592
|
var KryptosConnectButton = ({
|
|
4072
4593
|
children,
|
|
@@ -4074,17 +4595,18 @@ var KryptosConnectButton = ({
|
|
|
4074
4595
|
onError,
|
|
4075
4596
|
generateLinkToken,
|
|
4076
4597
|
style,
|
|
4077
|
-
textStyle
|
|
4598
|
+
textStyle,
|
|
4599
|
+
integrationName
|
|
4078
4600
|
}) => {
|
|
4079
4601
|
const { theme: themeName } = useKryptosConnect();
|
|
4080
|
-
const [open, setOpen] =
|
|
4602
|
+
const [open, setOpen] = import_react39.default.useState(false);
|
|
4081
4603
|
const theme = useTheme();
|
|
4082
|
-
return /* @__PURE__ */
|
|
4083
|
-
|
|
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,
|
|
4084
4606
|
{
|
|
4085
4607
|
onPress: () => setOpen(true),
|
|
4086
4608
|
style: [
|
|
4087
|
-
|
|
4609
|
+
styles21.defaultButton,
|
|
4088
4610
|
themeName === "light" ? {
|
|
4089
4611
|
backgroundColor: theme.colors.white,
|
|
4090
4612
|
borderRadius: theme.borderRadius.md,
|
|
@@ -4098,11 +4620,11 @@ var KryptosConnectButton = ({
|
|
|
4098
4620
|
],
|
|
4099
4621
|
activeOpacity: 0.8
|
|
4100
4622
|
},
|
|
4101
|
-
/* @__PURE__ */
|
|
4102
|
-
|
|
4623
|
+
/* @__PURE__ */ import_react39.default.createElement(
|
|
4624
|
+
import_react_native23.Text,
|
|
4103
4625
|
{
|
|
4104
4626
|
style: [
|
|
4105
|
-
|
|
4627
|
+
styles21.buttonText,
|
|
4106
4628
|
{
|
|
4107
4629
|
color: themeName === "light" ? theme.colors.primary : theme.colors.white,
|
|
4108
4630
|
fontSize: theme.fontSize.lg
|
|
@@ -4110,18 +4632,17 @@ var KryptosConnectButton = ({
|
|
|
4110
4632
|
textStyle
|
|
4111
4633
|
]
|
|
4112
4634
|
},
|
|
4113
|
-
"Connect
|
|
4114
|
-
|
|
4115
|
-
|
|
4116
|
-
/* @__PURE__ */ import_react36.default.createElement(LogoIcon, { size: 24 })
|
|
4117
|
-
), /* @__PURE__ */ import_react36.default.createElement(
|
|
4635
|
+
integrationName ? `Connect ${integrationName.charAt(0).toUpperCase() + integrationName.slice(1)} Account` : "Connect With Kryptos"
|
|
4636
|
+
)
|
|
4637
|
+
), open && /* @__PURE__ */ import_react39.default.createElement(
|
|
4118
4638
|
KryptosConnectModal,
|
|
4119
4639
|
{
|
|
4120
4640
|
open,
|
|
4121
4641
|
setOpen,
|
|
4122
4642
|
onSuccess,
|
|
4123
4643
|
onError,
|
|
4124
|
-
generateLinkToken
|
|
4644
|
+
generateLinkToken,
|
|
4645
|
+
integrationName
|
|
4125
4646
|
}
|
|
4126
4647
|
));
|
|
4127
4648
|
};
|
|
@@ -4130,7 +4651,8 @@ var KryptosConnectModal = ({
|
|
|
4130
4651
|
setOpen,
|
|
4131
4652
|
onSuccess,
|
|
4132
4653
|
onError,
|
|
4133
|
-
generateLinkToken
|
|
4654
|
+
generateLinkToken,
|
|
4655
|
+
integrationName
|
|
4134
4656
|
}) => {
|
|
4135
4657
|
const {
|
|
4136
4658
|
setIsInitialized,
|
|
@@ -4142,7 +4664,20 @@ var KryptosConnectModal = ({
|
|
|
4142
4664
|
isAuthorized,
|
|
4143
4665
|
linkToken
|
|
4144
4666
|
} = useKryptosConnect();
|
|
4145
|
-
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]);
|
|
4146
4681
|
const handleClose = () => {
|
|
4147
4682
|
setOpen(false);
|
|
4148
4683
|
setIsInitialized(false);
|
|
@@ -4178,7 +4713,7 @@ var KryptosConnectModal = ({
|
|
|
4178
4713
|
handleClose();
|
|
4179
4714
|
};
|
|
4180
4715
|
if (!open) return null;
|
|
4181
|
-
return /* @__PURE__ */
|
|
4716
|
+
return /* @__PURE__ */ import_react39.default.createElement(import_react_native23.View, { style: styles21.container }, step === "INIT" /* INIT */ && /* @__PURE__ */ import_react39.default.createElement(
|
|
4182
4717
|
Init,
|
|
4183
4718
|
{
|
|
4184
4719
|
open,
|
|
@@ -4192,7 +4727,7 @@ var KryptosConnectModal = ({
|
|
|
4192
4727
|
},
|
|
4193
4728
|
onClose: handleAbort
|
|
4194
4729
|
}
|
|
4195
|
-
), step === "AUTH" /* AUTH */ && /* @__PURE__ */
|
|
4730
|
+
), step === "AUTH" /* AUTH */ && /* @__PURE__ */ import_react39.default.createElement(
|
|
4196
4731
|
Auth,
|
|
4197
4732
|
{
|
|
4198
4733
|
open,
|
|
@@ -4200,28 +4735,29 @@ var KryptosConnectModal = ({
|
|
|
4200
4735
|
onGuestSuccess: () => setStep("INTEGRATION" /* INTEGRATION */),
|
|
4201
4736
|
onClose: handleAbort
|
|
4202
4737
|
}
|
|
4203
|
-
), step === "OTP" /* OTP */ && /* @__PURE__ */
|
|
4738
|
+
), step === "OTP" /* OTP */ && /* @__PURE__ */ import_react39.default.createElement(
|
|
4204
4739
|
OTPVerify,
|
|
4205
4740
|
{
|
|
4206
4741
|
open,
|
|
4207
4742
|
onSuccess: () => setStep("INTEGRATION" /* INTEGRATION */),
|
|
4208
4743
|
onClose: handleAbort
|
|
4209
4744
|
}
|
|
4210
|
-
), step === "INTEGRATION" /* INTEGRATION */ && /* @__PURE__ */
|
|
4745
|
+
), step === "INTEGRATION" /* INTEGRATION */ && /* @__PURE__ */ import_react39.default.createElement(
|
|
4211
4746
|
Integration,
|
|
4212
4747
|
{
|
|
4213
4748
|
open,
|
|
4214
4749
|
onSuccess: handleConsentClick,
|
|
4215
|
-
onClose: handleAbort
|
|
4750
|
+
onClose: handleAbort,
|
|
4751
|
+
integrationDetails
|
|
4216
4752
|
}
|
|
4217
|
-
), step === "PERMISSIONS" /* PERMISSIONS */ && /* @__PURE__ */
|
|
4753
|
+
), step === "PERMISSIONS" /* PERMISSIONS */ && /* @__PURE__ */ import_react39.default.createElement(
|
|
4218
4754
|
Permissions,
|
|
4219
4755
|
{
|
|
4220
4756
|
open,
|
|
4221
4757
|
onClose: handleAbort,
|
|
4222
4758
|
onSuccess: () => setStep("STATUS" /* STATUS */)
|
|
4223
4759
|
}
|
|
4224
|
-
), step === "STATUS" /* STATUS */ && /* @__PURE__ */
|
|
4760
|
+
), step === "STATUS" /* STATUS */ && /* @__PURE__ */ import_react39.default.createElement(
|
|
4225
4761
|
StatusModal,
|
|
4226
4762
|
{
|
|
4227
4763
|
open,
|
|
@@ -4230,7 +4766,7 @@ var KryptosConnectModal = ({
|
|
|
4230
4766
|
onError: handleError,
|
|
4231
4767
|
status: userConsent?.public_token ? "success" : "error"
|
|
4232
4768
|
}
|
|
4233
|
-
), step === "END" /* END */ && /* @__PURE__ */
|
|
4769
|
+
), step === "END" /* END */ && /* @__PURE__ */ import_react39.default.createElement(
|
|
4234
4770
|
EndModal,
|
|
4235
4771
|
{
|
|
4236
4772
|
open,
|
|
@@ -4242,7 +4778,7 @@ var KryptosConnectModal = ({
|
|
|
4242
4778
|
}
|
|
4243
4779
|
));
|
|
4244
4780
|
};
|
|
4245
|
-
var
|
|
4781
|
+
var styles21 = import_react_native23.StyleSheet.create({
|
|
4246
4782
|
defaultButton: {
|
|
4247
4783
|
flexDirection: "row",
|
|
4248
4784
|
alignItems: "center",
|