@kryptos_connect/mobile-sdk 0.0.0 → 1.0.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/README.md +1 -1
- package/dist/index.d.mts +8 -2
- package/dist/index.d.ts +8 -2
- package/dist/index.js +218 -240
- package/dist/index.mjs +217 -239
- package/package.json +7 -7
package/dist/index.js
CHANGED
|
@@ -267,8 +267,8 @@ var useTheme = () => {
|
|
|
267
267
|
};
|
|
268
268
|
|
|
269
269
|
// src/molecules/Auth.tsx
|
|
270
|
-
var
|
|
271
|
-
var
|
|
270
|
+
var import_react12 = __toESM(require("react"));
|
|
271
|
+
var import_react_native5 = require("react-native");
|
|
272
272
|
|
|
273
273
|
// src/assets/LinkIcon.tsx
|
|
274
274
|
var import_react4 = __toESM(require("react"));
|
|
@@ -565,119 +565,18 @@ var styles2 = import_react_native2.StyleSheet.create({
|
|
|
565
565
|
}
|
|
566
566
|
});
|
|
567
567
|
|
|
568
|
-
// src/components/Input.tsx
|
|
569
|
-
var import_react8 = __toESM(require("react"));
|
|
570
|
-
var import_react_native3 = require("react-native");
|
|
571
|
-
var Input = ({
|
|
572
|
-
label,
|
|
573
|
-
error,
|
|
574
|
-
helperText,
|
|
575
|
-
status = "default",
|
|
576
|
-
containerStyle,
|
|
577
|
-
inputStyle,
|
|
578
|
-
labelStyle,
|
|
579
|
-
...props
|
|
580
|
-
}) => {
|
|
581
|
-
const theme = useTheme();
|
|
582
|
-
const inputStatus = error ? "error" : status;
|
|
583
|
-
const getBorderColor = () => {
|
|
584
|
-
switch (inputStatus) {
|
|
585
|
-
case "error":
|
|
586
|
-
return theme.colors.error;
|
|
587
|
-
case "success":
|
|
588
|
-
return theme.colors.success;
|
|
589
|
-
default:
|
|
590
|
-
return theme.colors.border;
|
|
591
|
-
}
|
|
592
|
-
};
|
|
593
|
-
return /* @__PURE__ */ import_react8.default.createElement(import_react_native3.View, { style: [styles3.wrapper, containerStyle] }, label && /* @__PURE__ */ import_react8.default.createElement(
|
|
594
|
-
import_react_native3.Text,
|
|
595
|
-
{
|
|
596
|
-
style: [
|
|
597
|
-
styles3.label,
|
|
598
|
-
{ color: theme.colors.text, fontSize: theme.fontSize.sm },
|
|
599
|
-
labelStyle
|
|
600
|
-
]
|
|
601
|
-
},
|
|
602
|
-
label
|
|
603
|
-
), /* @__PURE__ */ import_react8.default.createElement(
|
|
604
|
-
import_react_native3.TextInput,
|
|
605
|
-
{
|
|
606
|
-
placeholderTextColor: theme.colors.textTertiary,
|
|
607
|
-
style: [
|
|
608
|
-
styles3.input,
|
|
609
|
-
{
|
|
610
|
-
backgroundColor: theme.colors.surface,
|
|
611
|
-
borderColor: getBorderColor(),
|
|
612
|
-
color: theme.colors.text,
|
|
613
|
-
fontSize: theme.fontSize.md,
|
|
614
|
-
borderRadius: theme.borderRadius.md,
|
|
615
|
-
paddingHorizontal: theme.spacing.lg,
|
|
616
|
-
paddingVertical: theme.spacing.md
|
|
617
|
-
},
|
|
618
|
-
inputStyle
|
|
619
|
-
],
|
|
620
|
-
...props
|
|
621
|
-
}
|
|
622
|
-
), error && /* @__PURE__ */ import_react8.default.createElement(
|
|
623
|
-
import_react_native3.Text,
|
|
624
|
-
{
|
|
625
|
-
style: [
|
|
626
|
-
styles3.error,
|
|
627
|
-
{ color: theme.colors.error, fontSize: theme.fontSize.sm }
|
|
628
|
-
]
|
|
629
|
-
},
|
|
630
|
-
error
|
|
631
|
-
), helperText && !error && /* @__PURE__ */ import_react8.default.createElement(
|
|
632
|
-
import_react_native3.Text,
|
|
633
|
-
{
|
|
634
|
-
style: [
|
|
635
|
-
styles3.helper,
|
|
636
|
-
{
|
|
637
|
-
color: theme.colors.textSecondary,
|
|
638
|
-
fontSize: theme.fontSize.sm
|
|
639
|
-
}
|
|
640
|
-
]
|
|
641
|
-
},
|
|
642
|
-
helperText
|
|
643
|
-
));
|
|
644
|
-
};
|
|
645
|
-
var styles3 = import_react_native3.StyleSheet.create({
|
|
646
|
-
wrapper: {
|
|
647
|
-
marginBottom: 16
|
|
648
|
-
// theme.spacing.lg - consistent form spacing
|
|
649
|
-
},
|
|
650
|
-
label: {
|
|
651
|
-
fontWeight: "500",
|
|
652
|
-
marginBottom: 8
|
|
653
|
-
// theme.spacing.sm
|
|
654
|
-
},
|
|
655
|
-
input: {
|
|
656
|
-
borderWidth: 1,
|
|
657
|
-
minHeight: 48
|
|
658
|
-
},
|
|
659
|
-
error: {
|
|
660
|
-
marginTop: 4
|
|
661
|
-
// theme.spacing.xs
|
|
662
|
-
},
|
|
663
|
-
helper: {
|
|
664
|
-
marginTop: 4
|
|
665
|
-
// theme.spacing.xs
|
|
666
|
-
}
|
|
667
|
-
});
|
|
668
|
-
|
|
669
568
|
// src/components/Modal.tsx
|
|
670
|
-
var
|
|
671
|
-
var
|
|
569
|
+
var import_react9 = __toESM(require("react"));
|
|
570
|
+
var import_react_native3 = require("react-native");
|
|
672
571
|
|
|
673
572
|
// src/assets/CloseIcon.tsx
|
|
674
|
-
var
|
|
573
|
+
var import_react8 = __toESM(require("react"));
|
|
675
574
|
var import_react_native_svg4 = __toESM(require("react-native-svg"));
|
|
676
575
|
var CloseIcon = ({
|
|
677
576
|
size = 20,
|
|
678
577
|
color = "#000"
|
|
679
578
|
}) => {
|
|
680
|
-
return /* @__PURE__ */
|
|
579
|
+
return /* @__PURE__ */ import_react8.default.createElement(import_react_native_svg4.default, { width: size, height: size, viewBox: "0 0 20 20", fill: "none" }, /* @__PURE__ */ import_react8.default.createElement(
|
|
681
580
|
import_react_native_svg4.Path,
|
|
682
581
|
{
|
|
683
582
|
d: "M15 5L5 15M5 5L15 15",
|
|
@@ -690,7 +589,7 @@ var CloseIcon = ({
|
|
|
690
589
|
};
|
|
691
590
|
|
|
692
591
|
// src/components/Modal.tsx
|
|
693
|
-
var { height: SCREEN_HEIGHT } =
|
|
592
|
+
var { height: SCREEN_HEIGHT } = import_react_native3.Dimensions.get("window");
|
|
694
593
|
var Modal = ({
|
|
695
594
|
isOpen,
|
|
696
595
|
onClose,
|
|
@@ -722,14 +621,14 @@ var Modal = ({
|
|
|
722
621
|
const handleOverlayPress = () => {
|
|
723
622
|
if (!disableClose && closeOnOverlayClick) onClose();
|
|
724
623
|
};
|
|
725
|
-
return /* @__PURE__ */
|
|
726
|
-
|
|
624
|
+
return /* @__PURE__ */ import_react9.default.createElement(
|
|
625
|
+
import_react_native3.KeyboardAvoidingView,
|
|
727
626
|
{
|
|
728
|
-
behavior:
|
|
729
|
-
style:
|
|
627
|
+
behavior: import_react_native3.Platform.OS === "ios" ? "padding" : "height",
|
|
628
|
+
style: styles3.keyboardView
|
|
730
629
|
},
|
|
731
|
-
/* @__PURE__ */
|
|
732
|
-
|
|
630
|
+
/* @__PURE__ */ import_react9.default.createElement(
|
|
631
|
+
import_react_native3.Modal,
|
|
733
632
|
{
|
|
734
633
|
visible: isOpen,
|
|
735
634
|
transparent: true,
|
|
@@ -737,18 +636,18 @@ var Modal = ({
|
|
|
737
636
|
statusBarTranslucent: true,
|
|
738
637
|
onRequestClose: disableClose ? void 0 : onClose
|
|
739
638
|
},
|
|
740
|
-
/* @__PURE__ */
|
|
741
|
-
|
|
639
|
+
/* @__PURE__ */ import_react9.default.createElement(
|
|
640
|
+
import_react_native3.TouchableOpacity,
|
|
742
641
|
{
|
|
743
642
|
activeOpacity: 1,
|
|
744
|
-
style: [
|
|
643
|
+
style: [styles3.overlay, { backgroundColor: theme.colors.overlay }],
|
|
745
644
|
onPress: handleOverlayPress
|
|
746
645
|
},
|
|
747
|
-
/* @__PURE__ */
|
|
748
|
-
|
|
646
|
+
/* @__PURE__ */ import_react9.default.createElement(
|
|
647
|
+
import_react_native3.View,
|
|
749
648
|
{
|
|
750
649
|
style: [
|
|
751
|
-
|
|
650
|
+
styles3.container,
|
|
752
651
|
{
|
|
753
652
|
backgroundColor: theme.colors.background,
|
|
754
653
|
borderTopLeftRadius: theme.borderRadius.xl,
|
|
@@ -775,11 +674,11 @@ var ModalHeader = ({
|
|
|
775
674
|
style
|
|
776
675
|
}) => {
|
|
777
676
|
const theme = useTheme();
|
|
778
|
-
return /* @__PURE__ */
|
|
779
|
-
|
|
677
|
+
return /* @__PURE__ */ import_react9.default.createElement(
|
|
678
|
+
import_react_native3.View,
|
|
780
679
|
{
|
|
781
680
|
style: [
|
|
782
|
-
|
|
681
|
+
styles3.header,
|
|
783
682
|
{
|
|
784
683
|
borderBottomColor: theme.colors.border,
|
|
785
684
|
paddingHorizontal: theme.spacing.lg,
|
|
@@ -788,27 +687,27 @@ var ModalHeader = ({
|
|
|
788
687
|
style
|
|
789
688
|
]
|
|
790
689
|
},
|
|
791
|
-
/* @__PURE__ */
|
|
792
|
-
|
|
690
|
+
/* @__PURE__ */ import_react9.default.createElement(import_react_native3.View, { style: styles3.headerContent }, typeof children === "string" ? /* @__PURE__ */ import_react9.default.createElement(
|
|
691
|
+
import_react_native3.Text,
|
|
793
692
|
{
|
|
794
693
|
style: [
|
|
795
|
-
|
|
694
|
+
styles3.title,
|
|
796
695
|
{ color: theme.colors.text, fontSize: theme.fontSize.lg }
|
|
797
696
|
]
|
|
798
697
|
},
|
|
799
698
|
children
|
|
800
699
|
) : children),
|
|
801
|
-
showCloseButton && onClose && /* @__PURE__ */
|
|
802
|
-
|
|
700
|
+
showCloseButton && onClose && /* @__PURE__ */ import_react9.default.createElement(
|
|
701
|
+
import_react_native3.TouchableOpacity,
|
|
803
702
|
{
|
|
804
703
|
onPress: onClose,
|
|
805
704
|
hitSlop: { top: 10, bottom: 10, left: 10, right: 10 },
|
|
806
705
|
style: [
|
|
807
|
-
|
|
706
|
+
styles3.closeButton,
|
|
808
707
|
{ backgroundColor: theme.colors.surface }
|
|
809
708
|
]
|
|
810
709
|
},
|
|
811
|
-
/* @__PURE__ */
|
|
710
|
+
/* @__PURE__ */ import_react9.default.createElement(CloseIcon, { color: theme.colors.text, size: 20 })
|
|
812
711
|
)
|
|
813
712
|
);
|
|
814
713
|
};
|
|
@@ -819,12 +718,12 @@ var ModalBody = ({
|
|
|
819
718
|
}) => {
|
|
820
719
|
const theme = useTheme();
|
|
821
720
|
if (scrollable) {
|
|
822
|
-
return /* @__PURE__ */
|
|
823
|
-
|
|
721
|
+
return /* @__PURE__ */ import_react9.default.createElement(
|
|
722
|
+
import_react_native3.ScrollView,
|
|
824
723
|
{
|
|
825
|
-
style:
|
|
724
|
+
style: styles3.bodyScroll,
|
|
826
725
|
contentContainerStyle: [
|
|
827
|
-
|
|
726
|
+
styles3.bodyContent,
|
|
828
727
|
{ padding: theme.spacing.lg },
|
|
829
728
|
style
|
|
830
729
|
],
|
|
@@ -834,18 +733,18 @@ var ModalBody = ({
|
|
|
834
733
|
children
|
|
835
734
|
);
|
|
836
735
|
}
|
|
837
|
-
return /* @__PURE__ */
|
|
736
|
+
return /* @__PURE__ */ import_react9.default.createElement(import_react_native3.View, { style: [styles3.body, { padding: theme.spacing.lg }, style] }, children);
|
|
838
737
|
};
|
|
839
738
|
var ModalFooter = ({
|
|
840
739
|
children,
|
|
841
740
|
style
|
|
842
741
|
}) => {
|
|
843
742
|
const theme = useTheme();
|
|
844
|
-
return /* @__PURE__ */
|
|
845
|
-
|
|
743
|
+
return /* @__PURE__ */ import_react9.default.createElement(
|
|
744
|
+
import_react_native3.View,
|
|
846
745
|
{
|
|
847
746
|
style: [
|
|
848
|
-
|
|
747
|
+
styles3.footer,
|
|
849
748
|
{
|
|
850
749
|
borderTopColor: theme.colors.border,
|
|
851
750
|
paddingHorizontal: theme.spacing.lg,
|
|
@@ -857,7 +756,7 @@ var ModalFooter = ({
|
|
|
857
756
|
children
|
|
858
757
|
);
|
|
859
758
|
};
|
|
860
|
-
var
|
|
759
|
+
var styles3 = import_react_native3.StyleSheet.create({
|
|
861
760
|
keyboardView: {
|
|
862
761
|
flex: 1
|
|
863
762
|
},
|
|
@@ -918,7 +817,7 @@ var styles4 = import_react_native4.StyleSheet.create({
|
|
|
918
817
|
var import_axios = __toESM(require("axios"));
|
|
919
818
|
|
|
920
819
|
// src/config/index.ts
|
|
921
|
-
var BASE_URL = "https://connect-dev.kryptos.io/
|
|
820
|
+
var BASE_URL = "https://connect-api-dev.kryptos.io/";
|
|
922
821
|
|
|
923
822
|
// src/services/api.ts
|
|
924
823
|
var api = import_axios.default.create({
|
|
@@ -927,7 +826,7 @@ var api = import_axios.default.create({
|
|
|
927
826
|
"Content-Type": "application/json"
|
|
928
827
|
}
|
|
929
828
|
});
|
|
930
|
-
var SCOPES = "openid offline_access
|
|
829
|
+
var SCOPES = "openid profile offline_access email portfolios:read transactions:read integrations:read tax:read accounting:read reports:read workspace:read users:read";
|
|
931
830
|
async function sendEmailOtp(linkToken, email, clientId) {
|
|
932
831
|
const res = await api.post(
|
|
933
832
|
"/v1/sendEmailOTP",
|
|
@@ -938,7 +837,7 @@ async function sendEmailOtp(linkToken, email, clientId) {
|
|
|
938
837
|
},
|
|
939
838
|
{
|
|
940
839
|
headers: {
|
|
941
|
-
"X-
|
|
840
|
+
"X-LINK-TOKEN": linkToken
|
|
942
841
|
}
|
|
943
842
|
}
|
|
944
843
|
);
|
|
@@ -955,7 +854,7 @@ async function loginWithOtp(linkToken, email, code, clientId) {
|
|
|
955
854
|
},
|
|
956
855
|
{
|
|
957
856
|
headers: {
|
|
958
|
-
"X-
|
|
857
|
+
"X-LINK-TOKEN": linkToken
|
|
959
858
|
}
|
|
960
859
|
}
|
|
961
860
|
);
|
|
@@ -963,11 +862,11 @@ async function loginWithOtp(linkToken, email, code, clientId) {
|
|
|
963
862
|
}
|
|
964
863
|
async function createAnonymousUser(linkToken, clientId) {
|
|
965
864
|
const res = await api.post(
|
|
966
|
-
"/
|
|
865
|
+
"/link-token/login",
|
|
967
866
|
{ clientId },
|
|
968
867
|
{
|
|
969
868
|
headers: {
|
|
970
|
-
"X-
|
|
869
|
+
"X-LINK-TOKEN": linkToken
|
|
971
870
|
}
|
|
972
871
|
}
|
|
973
872
|
);
|
|
@@ -975,79 +874,78 @@ async function createAnonymousUser(linkToken, clientId) {
|
|
|
975
874
|
}
|
|
976
875
|
async function addUserIntegration(linkToken, integration) {
|
|
977
876
|
const res = await api.post(
|
|
978
|
-
"/
|
|
979
|
-
{
|
|
877
|
+
"/integrations/keys",
|
|
878
|
+
{ keys: [...integration] },
|
|
980
879
|
{
|
|
981
880
|
headers: {
|
|
982
|
-
"X-
|
|
881
|
+
"X-LINK-TOKEN": linkToken
|
|
983
882
|
}
|
|
984
883
|
}
|
|
985
884
|
);
|
|
986
|
-
return res.data;
|
|
885
|
+
return res.data?.data;
|
|
987
886
|
}
|
|
988
887
|
async function giveUserConsent(linkToken) {
|
|
989
888
|
const res = await api.post(
|
|
990
|
-
"/
|
|
889
|
+
"/consent",
|
|
991
890
|
{
|
|
992
|
-
granted_scopes: SCOPES
|
|
993
|
-
user_consent: true
|
|
891
|
+
granted_scopes: SCOPES
|
|
994
892
|
},
|
|
995
893
|
{
|
|
996
894
|
headers: {
|
|
997
|
-
"X-
|
|
895
|
+
"X-LINK-TOKEN": linkToken
|
|
998
896
|
}
|
|
999
897
|
}
|
|
1000
898
|
);
|
|
1001
|
-
return res.data;
|
|
899
|
+
return res.data?.data;
|
|
1002
900
|
}
|
|
1003
901
|
async function testCredentials(linkToken, data) {
|
|
1004
|
-
const res = await api.post("/
|
|
902
|
+
const res = await api.post("/integrations/credentials/test", data, {
|
|
1005
903
|
headers: {
|
|
1006
|
-
"X-
|
|
904
|
+
"X-LINK-TOKEN": linkToken
|
|
1007
905
|
}
|
|
1008
906
|
});
|
|
1009
|
-
return res.data;
|
|
907
|
+
return res.data?.data;
|
|
1010
908
|
}
|
|
1011
909
|
async function getSupportedProviders(linkToken) {
|
|
1012
|
-
const res = await api.get("/
|
|
910
|
+
const res = await api.get("/integrations/providers", {
|
|
1013
911
|
headers: {
|
|
1014
|
-
"X-
|
|
912
|
+
"X-LINK-TOKEN": linkToken
|
|
1015
913
|
}
|
|
1016
914
|
});
|
|
1017
|
-
return res.data;
|
|
915
|
+
return res.data?.data;
|
|
1018
916
|
}
|
|
1019
917
|
async function getUserIntegrations(linkToken) {
|
|
1020
|
-
const res = await api.get("/
|
|
918
|
+
const res = await api.get("/integrations", {
|
|
1021
919
|
headers: {
|
|
1022
|
-
"X-
|
|
920
|
+
"X-LINK-TOKEN": linkToken
|
|
1023
921
|
}
|
|
1024
922
|
});
|
|
1025
|
-
return res.data;
|
|
923
|
+
return res.data?.data;
|
|
1026
924
|
}
|
|
1027
925
|
async function getUserUsedChains(linkToken, address) {
|
|
1028
|
-
const res = await api.get("/
|
|
926
|
+
const res = await api.get("/integrations/user-used-chain", {
|
|
1029
927
|
headers: {
|
|
1030
|
-
"X-
|
|
928
|
+
"X-LINK-TOKEN": linkToken
|
|
1031
929
|
},
|
|
1032
930
|
params: {
|
|
1033
931
|
id: address
|
|
1034
932
|
}
|
|
1035
933
|
});
|
|
1036
|
-
return res.data;
|
|
934
|
+
return res.data?.data?.chains || [];
|
|
1037
935
|
}
|
|
1038
936
|
|
|
1039
937
|
// src/molecules/ConnectLogo.tsx
|
|
1040
|
-
var
|
|
1041
|
-
var
|
|
938
|
+
var import_react11 = __toESM(require("react"));
|
|
939
|
+
var import_react_native4 = require("react-native");
|
|
1042
940
|
|
|
1043
941
|
// src/assets/UnplugIcon.tsx
|
|
1044
|
-
var
|
|
942
|
+
var import_react10 = __toESM(require("react"));
|
|
1045
943
|
var import_react_native_svg5 = __toESM(require("react-native-svg"));
|
|
1046
944
|
var UnplugIcon = ({
|
|
1047
945
|
size = 24,
|
|
1048
946
|
color = "#6B7280"
|
|
1049
947
|
}) => {
|
|
1050
|
-
return /* @__PURE__ */
|
|
948
|
+
return /* @__PURE__ */ import_react10.default.createElement(import_react_native_svg5.default, { width: size, height: size, viewBox: "0 0 24 24", fill: "none" }, /* @__PURE__ */ import_react10.default.createElement(
|
|
1051
949
|
import_react_native_svg5.Path,
|
|
1052
950
|
{
|
|
1053
951
|
d: "m19 5 3-3",
|
|
@@ -1056,7 +954,7 @@ var UnplugIcon = ({
|
|
|
1056
954
|
strokeLinecap: "round",
|
|
1057
955
|
strokeLinejoin: "round"
|
|
1058
956
|
}
|
|
1059
|
-
), /* @__PURE__ */
|
|
957
|
+
), /* @__PURE__ */ import_react10.default.createElement(
|
|
1060
958
|
import_react_native_svg5.Path,
|
|
1061
959
|
{
|
|
1062
960
|
d: "m2 22 3-3",
|
|
@@ -1065,7 +963,7 @@ var UnplugIcon = ({
|
|
|
1065
963
|
strokeLinecap: "round",
|
|
1066
964
|
strokeLinejoin: "round"
|
|
1067
965
|
}
|
|
1068
|
-
), /* @__PURE__ */
|
|
966
|
+
), /* @__PURE__ */ import_react10.default.createElement(
|
|
1069
967
|
import_react_native_svg5.Path,
|
|
1070
968
|
{
|
|
1071
969
|
d: "M6.3 20.3a2.4 2.4 0 0 0 3.4 0L12 18l-6-6-2.3 2.3a2.4 2.4 0 0 0 0 3.4Z",
|
|
@@ -1074,7 +972,7 @@ var UnplugIcon = ({
|
|
|
1074
972
|
strokeLinecap: "round",
|
|
1075
973
|
strokeLinejoin: "round"
|
|
1076
974
|
}
|
|
1077
|
-
), /* @__PURE__ */
|
|
975
|
+
), /* @__PURE__ */ import_react10.default.createElement(
|
|
1078
976
|
import_react_native_svg5.Path,
|
|
1079
977
|
{
|
|
1080
978
|
d: "m18 12-6-6 2.3-2.3a2.4 2.4 0 0 1 3.4 0l2.6 2.6a2.4 2.4 0 0 1 0 3.4Z",
|
|
@@ -1083,7 +981,7 @@ var UnplugIcon = ({
|
|
|
1083
981
|
strokeLinecap: "round",
|
|
1084
982
|
strokeLinejoin: "round"
|
|
1085
983
|
}
|
|
1086
|
-
), /* @__PURE__ */
|
|
984
|
+
), /* @__PURE__ */ import_react10.default.createElement(
|
|
1087
985
|
import_react_native_svg5.Line,
|
|
1088
986
|
{
|
|
1089
987
|
x1: 7.5,
|
|
@@ -1100,12 +998,12 @@ var UnplugIcon = ({
|
|
|
1100
998
|
// src/molecules/ConnectLogo.tsx
|
|
1101
999
|
var KryptosLogo = () => {
|
|
1102
1000
|
const theme = useTheme();
|
|
1103
|
-
return /* @__PURE__ */
|
|
1104
|
-
|
|
1001
|
+
return /* @__PURE__ */ import_react11.default.createElement(
|
|
1002
|
+
import_react_native4.View,
|
|
1105
1003
|
{
|
|
1106
|
-
style: [
|
|
1004
|
+
style: [styles4.logoContainer, { backgroundColor: theme.colors.surface }]
|
|
1107
1005
|
},
|
|
1108
|
-
/* @__PURE__ */
|
|
1006
|
+
/* @__PURE__ */ import_react11.default.createElement(LogoIcon, { size: 36 })
|
|
1109
1007
|
);
|
|
1110
1008
|
};
|
|
1111
1009
|
var ConnectLogo = () => {
|
|
@@ -1120,43 +1018,43 @@ var ConnectLogo = () => {
|
|
|
1120
1018
|
}
|
|
1121
1019
|
};
|
|
1122
1020
|
const renderLogo = () => {
|
|
1123
|
-
if ((0,
|
|
1021
|
+
if ((0, import_react11.isValidElement)(appLogo)) {
|
|
1124
1022
|
return appLogo;
|
|
1125
1023
|
} else if (typeof appLogo === "string" && isValidUrl(appLogo)) {
|
|
1126
|
-
return /* @__PURE__ */
|
|
1127
|
-
|
|
1024
|
+
return /* @__PURE__ */ import_react11.default.createElement(
|
|
1025
|
+
import_react_native4.Image,
|
|
1128
1026
|
{
|
|
1129
1027
|
source: { uri: appLogo },
|
|
1130
|
-
style:
|
|
1028
|
+
style: styles4.appLogoImage,
|
|
1131
1029
|
resizeMode: "contain"
|
|
1132
1030
|
}
|
|
1133
1031
|
);
|
|
1134
1032
|
} else if (typeof appLogo === "number" || typeof appLogo === "object" && appLogo !== null) {
|
|
1135
|
-
return /* @__PURE__ */
|
|
1136
|
-
|
|
1033
|
+
return /* @__PURE__ */ import_react11.default.createElement(
|
|
1034
|
+
import_react_native4.Image,
|
|
1137
1035
|
{
|
|
1138
1036
|
source: appLogo,
|
|
1139
|
-
style:
|
|
1037
|
+
style: styles4.appLogoImage,
|
|
1140
1038
|
resizeMode: "contain"
|
|
1141
1039
|
}
|
|
1142
1040
|
);
|
|
1143
1041
|
} else if (appName) {
|
|
1144
|
-
return /* @__PURE__ */
|
|
1042
|
+
return /* @__PURE__ */ import_react11.default.createElement(import_react_native4.Text, { style: [styles4.appLogoText, { color: theme.colors.text }] }, appName.charAt(0).toUpperCase());
|
|
1145
1043
|
}
|
|
1146
|
-
return /* @__PURE__ */
|
|
1044
|
+
return /* @__PURE__ */ import_react11.default.createElement(import_react_native4.Text, { style: [styles4.appLogoText, { color: theme.colors.text }] }, "?");
|
|
1147
1045
|
};
|
|
1148
|
-
return /* @__PURE__ */
|
|
1149
|
-
|
|
1046
|
+
return /* @__PURE__ */ import_react11.default.createElement(import_react_native4.View, { style: styles4.container }, /* @__PURE__ */ import_react11.default.createElement(KryptosLogo, null), /* @__PURE__ */ import_react11.default.createElement(import_react_native4.View, { style: styles4.iconContainer }, /* @__PURE__ */ import_react11.default.createElement(UnplugIcon, { size: 24, color: theme.colors.textSecondary })), /* @__PURE__ */ import_react11.default.createElement(
|
|
1047
|
+
import_react_native4.View,
|
|
1150
1048
|
{
|
|
1151
1049
|
style: [
|
|
1152
|
-
|
|
1050
|
+
styles4.logoContainer,
|
|
1153
1051
|
{ backgroundColor: theme.colors.surface }
|
|
1154
1052
|
]
|
|
1155
1053
|
},
|
|
1156
1054
|
renderLogo()
|
|
1157
1055
|
));
|
|
1158
1056
|
};
|
|
1159
|
-
var
|
|
1057
|
+
var styles4 = import_react_native4.StyleSheet.create({
|
|
1160
1058
|
container: {
|
|
1161
1059
|
flexDirection: "row",
|
|
1162
1060
|
alignItems: "center",
|
|
@@ -1199,11 +1097,11 @@ var Auth = ({
|
|
|
1199
1097
|
}) => {
|
|
1200
1098
|
const { appName, linkToken, clientId, setUser, setEmail } = useKryptosConnect();
|
|
1201
1099
|
const theme = useTheme();
|
|
1202
|
-
const [isLoading, setIsLoading] =
|
|
1203
|
-
const [errorMessage, setErrorMessage] =
|
|
1204
|
-
const [emailValue, setEmailValue] =
|
|
1205
|
-
const [emailError, setEmailError] =
|
|
1206
|
-
const [loadingType, setLoadingType] =
|
|
1100
|
+
const [isLoading, setIsLoading] = import_react12.default.useState(false);
|
|
1101
|
+
const [errorMessage, setErrorMessage] = import_react12.default.useState("");
|
|
1102
|
+
const [emailValue, setEmailValue] = import_react12.default.useState("");
|
|
1103
|
+
const [emailError, setEmailError] = import_react12.default.useState("");
|
|
1104
|
+
const [loadingType, setLoadingType] = import_react12.default.useState(null);
|
|
1207
1105
|
const validateEmail = (email) => {
|
|
1208
1106
|
const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
|
|
1209
1107
|
if (!email) {
|
|
@@ -1265,52 +1163,27 @@ var Auth = ({
|
|
|
1265
1163
|
};
|
|
1266
1164
|
const infoSections = [
|
|
1267
1165
|
{
|
|
1268
|
-
icon: /* @__PURE__ */
|
|
1166
|
+
icon: /* @__PURE__ */ import_react12.default.createElement(LinkIcon, { size: 20, color: theme.colors.primary }),
|
|
1269
1167
|
title: "Simple and secure",
|
|
1270
1168
|
text: "Connect your Web3 accounts with Kryptos in just a few clicks"
|
|
1271
1169
|
},
|
|
1272
1170
|
{
|
|
1273
|
-
icon: /* @__PURE__ */
|
|
1171
|
+
icon: /* @__PURE__ */ import_react12.default.createElement(ShieldIcon, { size: 20, color: theme.colors.primary }),
|
|
1274
1172
|
title: "Control what you share",
|
|
1275
1173
|
text: "We never share your data without your permission"
|
|
1276
1174
|
}
|
|
1277
1175
|
];
|
|
1278
|
-
return /* @__PURE__ */
|
|
1279
|
-
|
|
1176
|
+
return /* @__PURE__ */ import_react12.default.createElement(Modal, { isOpen: open, onClose: handleClose, size: "full" }, /* @__PURE__ */ import_react12.default.createElement(ModalHeader, { onClose: handleClose }, ""), /* @__PURE__ */ import_react12.default.createElement(ModalBody, null, /* @__PURE__ */ import_react12.default.createElement(import_react_native5.View, { style: styles5.container }, /* @__PURE__ */ import_react12.default.createElement(import_react_native5.Text, { style: [styles5.title, { color: theme.colors.text }] }, "Connect ", appName, " to your Kryptos account"), /* @__PURE__ */ import_react12.default.createElement(ConnectLogo, null), infoSections.map((section, index) => /* @__PURE__ */ import_react12.default.createElement(import_react_native5.View, { key: `info-${index}`, style: styles5.infoSection }, /* @__PURE__ */ import_react12.default.createElement(import_react_native5.View, { style: styles5.infoIcon }, section.icon), /* @__PURE__ */ import_react12.default.createElement(import_react_native5.View, { style: styles5.infoContent }, /* @__PURE__ */ import_react12.default.createElement(import_react_native5.Text, { style: [styles5.infoTitle, { color: theme.colors.text }] }, section.title), /* @__PURE__ */ import_react12.default.createElement(
|
|
1177
|
+
import_react_native5.Text,
|
|
1280
1178
|
{
|
|
1281
1179
|
style: [
|
|
1282
|
-
|
|
1180
|
+
styles5.infoDescription,
|
|
1283
1181
|
{ color: theme.colors.textSecondary }
|
|
1284
1182
|
]
|
|
1285
1183
|
},
|
|
1286
1184
|
section.text
|
|
1287
|
-
)))), errorMessage ? /* @__PURE__ */
|
|
1288
|
-
|
|
1289
|
-
{
|
|
1290
|
-
placeholder: "Enter email address",
|
|
1291
|
-
value: emailValue,
|
|
1292
|
-
onChangeText: (text) => {
|
|
1293
|
-
setEmailValue(text);
|
|
1294
|
-
if (emailError) validateEmail(text);
|
|
1295
|
-
},
|
|
1296
|
-
error: emailError,
|
|
1297
|
-
keyboardType: "email-address",
|
|
1298
|
-
autoCapitalize: "none",
|
|
1299
|
-
autoCorrect: false
|
|
1300
|
-
}
|
|
1301
|
-
), /* @__PURE__ */ import_react13.default.createElement(Alert, { variant: "default" }, /* @__PURE__ */ import_react13.default.createElement(AlertDescription, null, "Sign in or create your Kryptos account with your email for quicker access next time.")), /* @__PURE__ */ import_react13.default.createElement(
|
|
1302
|
-
Button,
|
|
1303
|
-
{
|
|
1304
|
-
variant: "outline",
|
|
1305
|
-
size: "lg",
|
|
1306
|
-
onPress: handleEmailSubmit,
|
|
1307
|
-
loading: loadingType === "email",
|
|
1308
|
-
disabled: isLoading,
|
|
1309
|
-
style: styles6.button
|
|
1310
|
-
},
|
|
1311
|
-
"Continue"
|
|
1312
|
-
), /* @__PURE__ */ import_react13.default.createElement(import_react_native6.Text, { style: [styles6.footer, { color: theme.colors.textSecondary }] }, "By continuing, you agree to Kryptos", " ", /* @__PURE__ */ import_react13.default.createElement(
|
|
1313
|
-
import_react_native6.Text,
|
|
1185
|
+
)))), errorMessage ? /* @__PURE__ */ import_react12.default.createElement(Alert, { variant: "destructive" }, /* @__PURE__ */ import_react12.default.createElement(AlertDescription, null, errorMessage)) : null, /* @__PURE__ */ import_react12.default.createElement(import_react_native5.Text, { style: [styles5.footer, { color: theme.colors.textSecondary }] }, "By continuing, you agree to Kryptos", " ", /* @__PURE__ */ import_react12.default.createElement(
|
|
1186
|
+
import_react_native5.Text,
|
|
1314
1187
|
{
|
|
1315
1188
|
style: {
|
|
1316
1189
|
color: theme.colors.primary,
|
|
@@ -1318,20 +1191,20 @@ var Auth = ({
|
|
|
1318
1191
|
}
|
|
1319
1192
|
},
|
|
1320
1193
|
"Privacy Policy"
|
|
1321
|
-
)), /* @__PURE__ */
|
|
1194
|
+
)), /* @__PURE__ */ import_react12.default.createElement(
|
|
1322
1195
|
Button,
|
|
1323
1196
|
{
|
|
1324
|
-
variant: "
|
|
1197
|
+
variant: "outline",
|
|
1325
1198
|
size: "lg",
|
|
1326
1199
|
onPress: handleContinueAsGuest,
|
|
1327
1200
|
loading: loadingType === "guest",
|
|
1328
1201
|
disabled: isLoading,
|
|
1329
|
-
style:
|
|
1202
|
+
style: styles5.button
|
|
1330
1203
|
},
|
|
1331
1204
|
"Continue as guest"
|
|
1332
1205
|
))));
|
|
1333
1206
|
};
|
|
1334
|
-
var
|
|
1207
|
+
var styles5 = import_react_native5.StyleSheet.create({
|
|
1335
1208
|
container: {
|
|
1336
1209
|
flex: 1
|
|
1337
1210
|
},
|
|
@@ -1387,6 +1260,107 @@ var styles6 = import_react_native6.StyleSheet.create({
|
|
|
1387
1260
|
}
|
|
1388
1261
|
});
|
|
1389
1262
|
|
|
1263
|
+
// src/components/Input.tsx
|
|
1264
|
+
var import_react13 = __toESM(require("react"));
|
|
1265
|
+
var import_react_native6 = require("react-native");
|
|
1266
|
+
var Input = ({
|
|
1267
|
+
label,
|
|
1268
|
+
error,
|
|
1269
|
+
helperText,
|
|
1270
|
+
status = "default",
|
|
1271
|
+
containerStyle,
|
|
1272
|
+
inputStyle,
|
|
1273
|
+
labelStyle,
|
|
1274
|
+
...props
|
|
1275
|
+
}) => {
|
|
1276
|
+
const theme = useTheme();
|
|
1277
|
+
const inputStatus = error ? "error" : status;
|
|
1278
|
+
const getBorderColor = () => {
|
|
1279
|
+
switch (inputStatus) {
|
|
1280
|
+
case "error":
|
|
1281
|
+
return theme.colors.error;
|
|
1282
|
+
case "success":
|
|
1283
|
+
return theme.colors.success;
|
|
1284
|
+
default:
|
|
1285
|
+
return theme.colors.border;
|
|
1286
|
+
}
|
|
1287
|
+
};
|
|
1288
|
+
return /* @__PURE__ */ import_react13.default.createElement(import_react_native6.View, { style: [styles6.wrapper, containerStyle] }, label && /* @__PURE__ */ import_react13.default.createElement(
|
|
1289
|
+
import_react_native6.Text,
|
|
1290
|
+
{
|
|
1291
|
+
style: [
|
|
1292
|
+
styles6.label,
|
|
1293
|
+
{ color: theme.colors.text, fontSize: theme.fontSize.sm },
|
|
1294
|
+
labelStyle
|
|
1295
|
+
]
|
|
1296
|
+
},
|
|
1297
|
+
label
|
|
1298
|
+
), /* @__PURE__ */ import_react13.default.createElement(
|
|
1299
|
+
import_react_native6.TextInput,
|
|
1300
|
+
{
|
|
1301
|
+
placeholderTextColor: theme.colors.textTertiary,
|
|
1302
|
+
style: [
|
|
1303
|
+
styles6.input,
|
|
1304
|
+
{
|
|
1305
|
+
backgroundColor: theme.colors.surface,
|
|
1306
|
+
borderColor: getBorderColor(),
|
|
1307
|
+
color: theme.colors.text,
|
|
1308
|
+
fontSize: theme.fontSize.md,
|
|
1309
|
+
borderRadius: theme.borderRadius.md,
|
|
1310
|
+
paddingHorizontal: theme.spacing.lg,
|
|
1311
|
+
paddingVertical: theme.spacing.md
|
|
1312
|
+
},
|
|
1313
|
+
inputStyle
|
|
1314
|
+
],
|
|
1315
|
+
...props
|
|
1316
|
+
}
|
|
1317
|
+
), error && /* @__PURE__ */ import_react13.default.createElement(
|
|
1318
|
+
import_react_native6.Text,
|
|
1319
|
+
{
|
|
1320
|
+
style: [
|
|
1321
|
+
styles6.error,
|
|
1322
|
+
{ color: theme.colors.error, fontSize: theme.fontSize.sm }
|
|
1323
|
+
]
|
|
1324
|
+
},
|
|
1325
|
+
error
|
|
1326
|
+
), helperText && !error && /* @__PURE__ */ import_react13.default.createElement(
|
|
1327
|
+
import_react_native6.Text,
|
|
1328
|
+
{
|
|
1329
|
+
style: [
|
|
1330
|
+
styles6.helper,
|
|
1331
|
+
{
|
|
1332
|
+
color: theme.colors.textSecondary,
|
|
1333
|
+
fontSize: theme.fontSize.sm
|
|
1334
|
+
}
|
|
1335
|
+
]
|
|
1336
|
+
},
|
|
1337
|
+
helperText
|
|
1338
|
+
));
|
|
1339
|
+
};
|
|
1340
|
+
var styles6 = import_react_native6.StyleSheet.create({
|
|
1341
|
+
wrapper: {
|
|
1342
|
+
marginBottom: 16
|
|
1343
|
+
// theme.spacing.lg - consistent form spacing
|
|
1344
|
+
},
|
|
1345
|
+
label: {
|
|
1346
|
+
fontWeight: "500",
|
|
1347
|
+
marginBottom: 8
|
|
1348
|
+
// theme.spacing.sm
|
|
1349
|
+
},
|
|
1350
|
+
input: {
|
|
1351
|
+
borderWidth: 1,
|
|
1352
|
+
minHeight: 48
|
|
1353
|
+
},
|
|
1354
|
+
error: {
|
|
1355
|
+
marginTop: 4
|
|
1356
|
+
// theme.spacing.xs
|
|
1357
|
+
},
|
|
1358
|
+
helper: {
|
|
1359
|
+
marginTop: 4
|
|
1360
|
+
// theme.spacing.xs
|
|
1361
|
+
}
|
|
1362
|
+
});
|
|
1363
|
+
|
|
1390
1364
|
// src/components/OTP.tsx
|
|
1391
1365
|
var import_react14 = __toESM(require("react"));
|
|
1392
1366
|
var import_react_native7 = require("react-native");
|
|
@@ -1564,14 +1538,14 @@ var Init = ({
|
|
|
1564
1538
|
setError(null);
|
|
1565
1539
|
try {
|
|
1566
1540
|
const linkToken = await generateLinkToken();
|
|
1567
|
-
if (!linkToken) {
|
|
1541
|
+
if (!linkToken || !linkToken?.link_token || linkToken.link_token === "" || linkToken.link_token === null || linkToken.link_token === void 0) {
|
|
1568
1542
|
setIsInitialized(false);
|
|
1569
1543
|
setError("Failed to fetch link token. Please try again.");
|
|
1570
1544
|
return;
|
|
1571
1545
|
}
|
|
1572
|
-
setLinkToken(linkToken);
|
|
1546
|
+
setLinkToken(linkToken.link_token);
|
|
1573
1547
|
setIsInitialized(true);
|
|
1574
|
-
onSuccess();
|
|
1548
|
+
onSuccess(linkToken.isAuthorized ? { isAuthorized: true } : null);
|
|
1575
1549
|
} catch (err) {
|
|
1576
1550
|
console.error("Failed to fetch link token:", err);
|
|
1577
1551
|
setIsInitialized(false);
|
|
@@ -2070,7 +2044,7 @@ function ConnectButton({
|
|
|
2070
2044
|
);
|
|
2071
2045
|
results.forEach((result, index) => {
|
|
2072
2046
|
const { chain, walletId, alias } = walletTestsPayload[index];
|
|
2073
|
-
if (result.status === "fulfilled") {
|
|
2047
|
+
if (result.status === "fulfilled" && result.value?.valid) {
|
|
2074
2048
|
const data = {
|
|
2075
2049
|
alias,
|
|
2076
2050
|
exchange: integration.id.toLowerCase(),
|
|
@@ -2478,7 +2452,7 @@ var IntegrationForm = ({
|
|
|
2478
2452
|
);
|
|
2479
2453
|
results.forEach((result, index) => {
|
|
2480
2454
|
const { chain, walletId, alias } = credentialTestsData[index];
|
|
2481
|
-
if (result.status === "fulfilled" && result.value?.
|
|
2455
|
+
if (result.status === "fulfilled" && result.value?.valid) {
|
|
2482
2456
|
const data = {
|
|
2483
2457
|
alias,
|
|
2484
2458
|
exchange: metadata.id.toLowerCase(),
|
|
@@ -2549,7 +2523,7 @@ var IntegrationForm = ({
|
|
|
2549
2523
|
}
|
|
2550
2524
|
};
|
|
2551
2525
|
const testResult = await testCredentials(linkToken, { ...credential });
|
|
2552
|
-
if (!testResult?.value?.
|
|
2526
|
+
if (!testResult?.value?.valid) {
|
|
2553
2527
|
setErrorMessage(
|
|
2554
2528
|
testResult?.value?.message || "Credentials are invalid"
|
|
2555
2529
|
);
|
|
@@ -3759,8 +3733,12 @@ var KryptosConnectModal = ({
|
|
|
3759
3733
|
{
|
|
3760
3734
|
open,
|
|
3761
3735
|
generateLinkToken,
|
|
3762
|
-
onSuccess: () => {
|
|
3763
|
-
|
|
3736
|
+
onSuccess: (data) => {
|
|
3737
|
+
if (data?.isAuthorized) {
|
|
3738
|
+
setStep("INTEGRATION" /* INTEGRATION */);
|
|
3739
|
+
} else {
|
|
3740
|
+
setStep("AUTH" /* AUTH */);
|
|
3741
|
+
}
|
|
3764
3742
|
},
|
|
3765
3743
|
onClose: handleAbort
|
|
3766
3744
|
}
|