@getpara/react-sdk 1.1.0 → 1.3.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.
Files changed (146) hide show
  1. package/dist/MoonPayEmbed-GAWXP6V7.js +2 -0
  2. package/dist/MoonPayEmbed-GAWXP6V7.js.br +0 -0
  3. package/dist/MoonPayEmbed-GAWXP6V7.js.gz +0 -0
  4. package/dist/index.js +675 -5
  5. package/dist/index.js.br +0 -0
  6. package/dist/index.js.gz +0 -0
  7. package/dist/provider/hooks/utils/useEventListeners.d.ts +1 -1
  8. package/dist/provider/stores/useStore.d.ts +7 -2
  9. package/dist/provider/types/provider.d.ts +15 -3
  10. package/package.json +8 -7
  11. package/dist/modal/ParaModal.js +0 -281
  12. package/dist/modal/components/Account/Account.js +0 -60
  13. package/dist/modal/components/AddFunds/AddFunds.js +0 -147
  14. package/dist/modal/components/AddFunds/AddFundsAwaiting.js +0 -65
  15. package/dist/modal/components/AddFunds/AddFundsDone.js +0 -26
  16. package/dist/modal/components/AddFunds/MoonPayEmbed.js +0 -2
  17. package/dist/modal/components/AddFunds/index.js +0 -3
  18. package/dist/modal/components/AuthInput/AuthInput.js +0 -221
  19. package/dist/modal/components/AuthInput/countryCodes.js +0 -40
  20. package/dist/modal/components/AuthInput/hooks/useDropdownPosition.js +0 -23
  21. package/dist/modal/components/AuthInput/phoneMasks.js +0 -247
  22. package/dist/modal/components/AuthMainStep/AuthMainStep.js +0 -21
  23. package/dist/modal/components/AuthMainStep/AuthMainStepContent.js +0 -89
  24. package/dist/modal/components/AuthOptions/AuthOptions.js +0 -28
  25. package/dist/modal/components/AwaitingBiometricsStep/AwaitingBiometricsStep.js +0 -7
  26. package/dist/modal/components/AwaitingOAuthStep/AwaitingOAuthStep.js +0 -5
  27. package/dist/modal/components/AwaitingPasswordStep/AwaitingPasswordStep.js +0 -7
  28. package/dist/modal/components/AwaitingWalletCreationStep/AwaitingWalletCreationStep.js +0 -18
  29. package/dist/modal/components/BiometricCreationStep/BiometricCreationStep.js +0 -17
  30. package/dist/modal/components/BiometricLoginStep/BiometricLoginStep.js +0 -131
  31. package/dist/modal/components/Body/AnimatedHeightWrapper.js +0 -26
  32. package/dist/modal/components/Body/Body.js +0 -232
  33. package/dist/modal/components/ChainSwitch/ChainSwitch.js +0 -77
  34. package/dist/modal/components/ChainSwitch/config.js +0 -11
  35. package/dist/modal/components/Controls/Controls.js +0 -54
  36. package/dist/modal/components/Controls/Selects.js +0 -159
  37. package/dist/modal/components/ExternalWalletStep/ExternalWalletStep.js +0 -116
  38. package/dist/modal/components/ExternalWalletStep/config.js +0 -11
  39. package/dist/modal/components/ExternalWallets/ExternalWallets.js +0 -142
  40. package/dist/modal/components/ExternalWalletsWrapper/ExternalWalletsWrapper.js +0 -119
  41. package/dist/modal/components/Footer/Footer.js +0 -71
  42. package/dist/modal/components/Header/Header.js +0 -24
  43. package/dist/modal/components/Header/hooks/useStepTitle.js +0 -42
  44. package/dist/modal/components/Hero/Hero.js +0 -119
  45. package/dist/modal/components/IFrameStep/IFrameStep.js +0 -41
  46. package/dist/modal/components/LoginDoneStep/LoginDoneStep.js +0 -19
  47. package/dist/modal/components/ModalContent/ModalContent.js +0 -280
  48. package/dist/modal/components/OAuth/FarcasterOAuthStep.js +0 -82
  49. package/dist/modal/components/OAuth/OAuth.js +0 -125
  50. package/dist/modal/components/OAuth/TelegramOAuthStep.js +0 -133
  51. package/dist/modal/components/OnRampComponents/AddingFunds.js +0 -10
  52. package/dist/modal/components/OnRampComponents/OnRampProviderButton.js +0 -72
  53. package/dist/modal/components/RecoverySecretStep/RecoverySecretStep.js +0 -67
  54. package/dist/modal/components/Setup2FAStep/Setup2FAStep.js +0 -105
  55. package/dist/modal/components/StripeComponents/StripeComponents.js +0 -78
  56. package/dist/modal/components/TwoFactorDoneStep/TwoFactorDoneStep.js +0 -8
  57. package/dist/modal/components/VerificationCodeStep/VerificationCodeStep.js +0 -135
  58. package/dist/modal/components/Waiting/Waiting.js +0 -6
  59. package/dist/modal/components/WalletCard/PartnerIcon.js +0 -29
  60. package/dist/modal/components/WalletCard/WalletCard.js +0 -93
  61. package/dist/modal/components/WalletCreationDoneStep/WalletCreationDoneStep.js +0 -50
  62. package/dist/modal/components/common.js +0 -67
  63. package/dist/modal/components/index.js +0 -1
  64. package/dist/modal/constants/constants.js +0 -93
  65. package/dist/modal/constants/defaults.js +0 -5
  66. package/dist/modal/constants/oAuthLogos.js +0 -18
  67. package/dist/modal/hooks/useActiveWallet.js +0 -11
  68. package/dist/modal/hooks/useEmbeddedExternalConnection.js +0 -46
  69. package/dist/modal/hooks/useGoBack.js +0 -34
  70. package/dist/modal/index.js +0 -9
  71. package/dist/modal/providers/CosmosExternalWalletContextStub.js +0 -18
  72. package/dist/modal/providers/EvmExternalWalletContextStub.js +0 -22
  73. package/dist/modal/providers/ExternalWalletContext.js +0 -253
  74. package/dist/modal/providers/SolanaExternalWalletContextStub.js +0 -12
  75. package/dist/modal/stores/externalWalletProvider/actions.js +0 -5
  76. package/dist/modal/stores/externalWalletProvider/useExternalWalletProviderStore.js +0 -13
  77. package/dist/modal/stores/index.js +0 -3
  78. package/dist/modal/stores/modal/actions.js +0 -64
  79. package/dist/modal/stores/modal/useModalStore.js +0 -41
  80. package/dist/modal/stores/para/actions.js +0 -5
  81. package/dist/modal/stores/para/useParaStore.js +0 -3
  82. package/dist/modal/stores/theme/actions.js +0 -24
  83. package/dist/modal/stores/theme/useThemeStore.js +0 -14
  84. package/dist/modal/stores/userInfo/actions.js +0 -34
  85. package/dist/modal/stores/userInfo/useUserInfoStore.js +0 -9
  86. package/dist/modal/types/commonTypes.js +0 -1
  87. package/dist/modal/types/externalWallets.js +0 -21
  88. package/dist/modal/types/modalProps.js +0 -7
  89. package/dist/modal/utils/authLayoutHelpers.js +0 -2
  90. package/dist/modal/utils/getMailtoLink.js +0 -5
  91. package/dist/modal/utils/getTileButtonFlex.js +0 -15
  92. package/dist/modal/utils/isPasskeySupported.js +0 -10
  93. package/dist/modal/utils/openPopup.js +0 -55
  94. package/dist/modal/utils/routeMobileExternalWallet.js +0 -35
  95. package/dist/modal/utils/steps.js +0 -215
  96. package/dist/modal/utils/stringFormatters.js +0 -12
  97. package/dist/modal/utils/validateOnRampConfig.js +0 -26
  98. package/dist/provider/ParaProvider.js +0 -16
  99. package/dist/provider/actions/checkIfUserExists.js +0 -26
  100. package/dist/provider/actions/createUser.js +0 -30
  101. package/dist/provider/actions/getAccount.js +0 -24
  102. package/dist/provider/actions/getWallet.js +0 -16
  103. package/dist/provider/actions/initiateLogin.js +0 -23
  104. package/dist/provider/actions/keepSessionAlive.js +0 -23
  105. package/dist/provider/actions/logout.js +0 -20
  106. package/dist/provider/actions/signMessage.js +0 -23
  107. package/dist/provider/actions/signTransaction.js +0 -23
  108. package/dist/provider/actions/waitForAccountCreation.js +0 -24
  109. package/dist/provider/actions/waitForLoginAndSetup.js +0 -27
  110. package/dist/provider/actions/waitForPasskeyAndCreateWallet.js +0 -24
  111. package/dist/provider/hooks/index.js +0 -3
  112. package/dist/provider/hooks/mutations/index.js +0 -10
  113. package/dist/provider/hooks/mutations/useCheckIfUserExists.js +0 -23
  114. package/dist/provider/hooks/mutations/useCreateUser.js +0 -23
  115. package/dist/provider/hooks/mutations/useInitiateLogin.js +0 -23
  116. package/dist/provider/hooks/mutations/useKeepSessionAlive.js +0 -23
  117. package/dist/provider/hooks/mutations/useLogout.js +0 -33
  118. package/dist/provider/hooks/mutations/useSignMessage.js +0 -33
  119. package/dist/provider/hooks/mutations/useSignTransaction.js +0 -33
  120. package/dist/provider/hooks/mutations/useWaitForAccountCreation.js +0 -30
  121. package/dist/provider/hooks/mutations/useWaitForLoginAndSetup.js +0 -30
  122. package/dist/provider/hooks/mutations/useWaitForPasskeyAndCreateWallet.js +0 -30
  123. package/dist/provider/hooks/queries/index.js +0 -2
  124. package/dist/provider/hooks/queries/useAccount.js +0 -23
  125. package/dist/provider/hooks/queries/useWallet.js +0 -24
  126. package/dist/provider/hooks/utils/index.js +0 -3
  127. package/dist/provider/hooks/utils/useAutoSessionKeepAlive.js +0 -79
  128. package/dist/provider/hooks/utils/useClient.js +0 -8
  129. package/dist/provider/hooks/utils/useEventListeners.js +0 -87
  130. package/dist/provider/hooks/utils/useInternalClient.js +0 -9
  131. package/dist/provider/hooks/utils/useModal.js +0 -15
  132. package/dist/provider/hooks/utils/useWalletState.js +0 -33
  133. package/dist/provider/index.js +0 -3
  134. package/dist/provider/stores/getters.js +0 -5
  135. package/dist/provider/stores/slices/client.js +0 -4
  136. package/dist/provider/stores/slices/index.js +0 -3
  137. package/dist/provider/stores/slices/modal.js +0 -4
  138. package/dist/provider/stores/slices/wallet.js +0 -6
  139. package/dist/provider/stores/types.js +0 -1
  140. package/dist/provider/stores/useStore.js +0 -12
  141. package/dist/provider/types/provider.js +0 -1
  142. package/dist/provider/types/query.js +0 -1
  143. package/dist/provider/types/utils.js +0 -1
  144. package/dist/provider/utils/renameMutations.js +0 -19
  145. /package/dist/{modal/css → css}/modal.css +0 -0
  146. /package/dist/{modal/public → public}/Inter-VariableFont_slnt,wght.ttf +0 -0
@@ -1,89 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
- import { Fragment, useMemo } from 'react';
3
- import { CpslButton, CpslDivider, CpslIconGroup } from '@getpara/react-components';
4
- import styled from 'styled-components';
5
- import { useExternalWallets } from '../../providers/ExternalWalletContext.js';
6
- import { ExternalWallets } from '../ExternalWallets/ExternalWallets.js';
7
- import { useModalStore, useThemeStore } from '../../stores/index.js';
8
- import { ModalStep } from '../../utils/steps.js';
9
- import { AuthLayout } from '../../types/modalProps.js';
10
- import { brandedOAuthLogos, oAuthLogos } from '../../constants/oAuthLogos.js';
11
- import { AuthOptions } from '../AuthOptions/AuthOptions.js';
12
- export const AuthMainStepContent = ({ oAuthMethods, disableEmailLogin, disablePhoneLogin }) => {
13
- const { wallets } = useExternalWallets();
14
- const authLayout = useThemeStore(state => state.authLayout);
15
- const setStep = useModalStore(state => state.setStep);
16
- const oAuthLogoVariant = useThemeStore(state => state.oAuthLogoVariant);
17
- const isDark = useThemeStore(state => state.isDark);
18
- const useBrandedLogos = oAuthLogoVariant === 'default';
19
- const useDarkLogos = useBrandedLogos ? isDark : oAuthLogoVariant !== 'dark';
20
- const handleCondensedAuthClick = () => {
21
- setStep(ModalStep.AUTH_MORE);
22
- };
23
- const handleCondensedExternalClick = () => {
24
- setStep(ModalStep.EX_WALLET_MORE);
25
- };
26
- const Content = useMemo(() => {
27
- const methods = [];
28
- authLayout.forEach(layout => {
29
- switch (layout) {
30
- case AuthLayout.AUTH_FULL: {
31
- methods.push([
32
- _jsx(AuthOptions, { oAuthMethods: oAuthMethods, disableEmailLogin: disableEmailLogin, disablePhoneLogin: disablePhoneLogin }, "authFull"),
33
- layout,
34
- ]);
35
- break;
36
- }
37
- case AuthLayout.AUTH_CONDENSED: {
38
- const icons = [];
39
- oAuthMethods === null || oAuthMethods === void 0 ? void 0 : oAuthMethods.forEach(method => icons.push(useBrandedLogos ? brandedOAuthLogos[method] : oAuthLogos[method]));
40
- methods.push([
41
- _jsxs(CondensedButton, { onClick: handleCondensedAuthClick, variant: "tertiary", fullWidth: true, children: [_jsx(IconGroupSpacer, { slot: "start", icons: [], "$isDark": useDarkLogos }), "Sign Up or Login", _jsx(StyledIconGroup, { slot: "end", icons: icons.splice(0, 3), "$isDark": useDarkLogos })] }, "authCondensed"),
42
- layout,
43
- ]);
44
- break;
45
- }
46
- case AuthLayout.EXTERNAL_FULL: {
47
- if (!!wallets.length) {
48
- methods.push([_jsx(ExternalWallets, {}, "externalWallets"), layout]);
49
- }
50
- break;
51
- }
52
- case AuthLayout.EXTERNAL_CONDENSED: {
53
- const icons = [];
54
- wallets === null || wallets === void 0 ? void 0 : wallets.forEach(wallet => icons.push(wallet.iconUrl));
55
- methods.push([
56
- _jsxs(CondensedButton, { onClick: handleCondensedExternalClick, variant: "tertiary", fullWidth: true, children: [_jsx(IconGroupSpacer, { slot: "start", icons: [], "$isDark": useDarkLogos }), "Connect Wallet", _jsx(StyledIconGroup, { slot: "end", icons: icons.splice(0, 3), "$isDark": useDarkLogos })] }, "authCondensed"),
57
- layout,
58
- ]);
59
- break;
60
- }
61
- default: {
62
- break;
63
- }
64
- }
65
- });
66
- return (_jsx(_Fragment, { children: methods.map(([reactNode, key], index) => (_jsxs(Fragment, { children: [reactNode, methods.length > 1 && index < methods.length - 1 && _jsx(CpslDivider, { children: "or" }, "or")] }, key))) }));
67
- }, [oAuthMethods, disableEmailLogin, disablePhoneLogin, wallets, authLayout]);
68
- return _jsx(Container, { "data-testid": "main-auth-step-content", children: Content });
69
- };
70
- const Container = styled.div `
71
- display: flex;
72
- flex-direction: column;
73
- gap: 8px;
74
- `;
75
- const StyledIconGroup = styled(CpslIconGroup) `
76
- --icon-item-color: ${({ $isDark }) => ($isDark ? 'white' : 'black')};
77
- flex: 1;
78
- justify-content: flex-end;
79
- `;
80
- const IconGroupSpacer = styled(StyledIconGroup) `
81
- visibility: hidden;
82
- `;
83
- const CondensedButton = styled(CpslButton) `
84
- --button-justify-content: space-between;
85
-
86
- &::part(button-native) {
87
- max-height: 50px;
88
- }
89
- `;
@@ -1,28 +0,0 @@
1
- import { jsx as _jsx, Fragment as _Fragment } from "react/jsx-runtime";
2
- import { useMemo } from 'react';
3
- import styled from 'styled-components';
4
- import { OAuth } from '../OAuth/OAuth.js';
5
- import { AuthInput } from '../AuthInput/AuthInput.js';
6
- import { useExternalWallets } from '../../providers/ExternalWalletContext.js';
7
- import { useModalStore } from '../../stores/index.js';
8
- import { ModalStep } from '../../utils/steps.js';
9
- export const AuthOptions = ({ oAuthMethods, disableEmailLogin, disablePhoneLogin }) => {
10
- const { wallets } = useExternalWallets();
11
- const showAllOAuth = useModalStore(state => state.step === ModalStep.AUTH_MORE);
12
- const Content = useMemo(() => {
13
- const Methods = [];
14
- if (!!(oAuthMethods === null || oAuthMethods === void 0 ? void 0 : oAuthMethods.length)) {
15
- Methods.push(_jsx(OAuth, { methods: oAuthMethods }, "oAuth"));
16
- }
17
- if (!disableEmailLogin || !disablePhoneLogin) {
18
- Methods.push(_jsx(AuthInput, { disableEmailLogin: disableEmailLogin, disablePhoneLogin: disablePhoneLogin }, "input"));
19
- }
20
- return _jsx(_Fragment, { children: Methods });
21
- }, [showAllOAuth, oAuthMethods, disableEmailLogin, disablePhoneLogin, wallets]);
22
- return _jsx(Container, { children: Content });
23
- };
24
- const Container = styled.div `
25
- display: flex;
26
- flex-direction: column;
27
- gap: 8px;
28
- `;
@@ -1,7 +0,0 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
2
- import { useModalStore } from '../../stores/index.js';
3
- import { Waiting } from '../Waiting/Waiting.js';
4
- export const AwaitingBiometricsStep = () => {
5
- const isLogin = useModalStore(state => state.isLogin());
6
- return (_jsx(Waiting, { heading: isLogin ? 'Waiting for Passkey' : 'Creating Passkey', subheading: "Follow the prompts presented by your browser." }));
7
- };
@@ -1,5 +0,0 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
2
- import { Waiting } from '../Waiting/Waiting.js';
3
- export const AwaitingOAuthStep = () => {
4
- return _jsx(Waiting, { heading: "Complete Login", subheading: "Follow the prompts presented by your browser." });
5
- };
@@ -1,7 +0,0 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
2
- import { useModalStore } from '../../stores/index.js';
3
- import { Waiting } from '../Waiting/Waiting.js';
4
- export const AwaitingPasswordStep = () => {
5
- const isLogin = useModalStore(state => state.isLogin());
6
- return (_jsx(Waiting, { heading: isLogin ? 'Waiting for Password' : 'Creating Password', subheading: "Follow the prompts presented by your browser." }));
7
- };
@@ -1,18 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { CpslIcon, CpslInfoBox, CpslText } from '@getpara/react-components';
3
- import { InfoBoxContent, InfoBoxHeader, StepContainer } from '../common.js';
4
- import { useEffect, useRef, useState } from 'react';
5
- import { Waiting } from '../Waiting/Waiting.js';
6
- import { useThemeStore } from '../../stores/index.js';
7
- export const AwaitingWalletCreationStep = () => {
8
- const hideWallets = useThemeStore(state => state.hideWallets);
9
- const [showInfoBox, setShowInfoBox] = useState(false);
10
- const showInfoBoxTimeout = useRef();
11
- useEffect(() => {
12
- showInfoBoxTimeout.current = window.setTimeout(() => {
13
- setShowInfoBox(true);
14
- }, 4000);
15
- return () => clearTimeout(showInfoBoxTimeout.current);
16
- }, []);
17
- return (_jsxs(StepContainer, { "$wide": true, children: [_jsx(Waiting, { heading: hideWallets ? 'Creating Your Account' : 'Creating Your Wallet', subheading: "This should only take a couple of seconds." }), showInfoBox && (_jsx(CpslInfoBox, { children: _jsxs(InfoBoxContent, { children: [_jsxs(InfoBoxHeader, { children: [_jsx(CpslIcon, { icon: "clock" }), _jsx(CpslText, { weight: "medium", children: "Hang on" })] }), _jsxs(CpslText, { variant: "bodyS", weight: "medium", color: "secondary", children: ["Creating your ", hideWallets ? 'account' : 'wallet', " is taking a little longer than expected, but we're working on it!"] })] }) }))] }));
18
- };
@@ -1,17 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
- import { CpslButton, CpslDivider, CpslIcon, CpslQrCode, CpslSpinner, CpslText } from '@getpara/react-components';
3
- import { useModalStore, useUserInfoStore } from '../../stores/index.js';
4
- import { InnerStepContainer, StepContainer, Heading, QRContainer } from '../common.js';
5
- import { isPasskeySupported } from '../../utils/isPasskeySupported.js';
6
- import { useCopyToClipboard, UserIdentifier } from '@getpara/react-common';
7
- export const BiometricCreationStep = ({ handlePasswordClick, handlePasskeyClick, }) => {
8
- const webAuthURLForCreate = useModalStore(state => state.webAuthURLForCreate);
9
- const iFrameUrl = useModalStore(state => state.iFrameUrl);
10
- const authInfo = useUserInfoStore(state => state.getAuthInfo());
11
- const [isCopied, copy] = useCopyToClipboard();
12
- const handleCopy = () => {
13
- copy(webAuthURLForCreate);
14
- };
15
- const isBoth = !!webAuthURLForCreate && !!iFrameUrl;
16
- return (_jsxs(StepContainer, { "$wide": true, children: [_jsxs(InnerStepContainer, { children: [_jsx(Heading, { variant: "headingS", weight: "bold", children: isBoth ? 'Secure Your Account' : 'Create Passkey' }), _jsx(UserIdentifier, Object.assign({}, authInfo)), _jsx(CpslText, { variant: "bodyS", color: "secondary", weight: "medium", children: isBoth ? 'Choose a password or set up a passkey' : 'Your Passkey keeps your account safe.' })] }), _jsxs(InnerStepContainer, { children: [isPasskeySupported() ? (_jsxs(CpslButton, { fullWidth: true, onClick: handlePasskeyClick, children: [_jsx(CpslIcon, { slot: "start", icon: "key" }), isBoth ? 'Create Passkey' : 'Create'] })) : (_jsxs(_Fragment, { children: [_jsx(CpslText, { weight: "semiBold", children: "Scan with your mobile device" }), _jsx(QRContainer, { children: !webAuthURLForCreate ? _jsx(CpslSpinner, { size: 100 }) : _jsx(CpslQrCode, { url: webAuthURLForCreate }) }), _jsxs(CpslButton, { size: "small", variant: "ghost", onClick: handleCopy, children: [_jsx(CpslIcon, { slot: "start", icon: isCopied ? 'check' : 'copy' }), isCopied ? 'Copied' : 'Copy Link'] })] })), isBoth && (_jsxs(_Fragment, { children: [_jsx(CpslDivider, { children: "or" }), _jsxs(CpslButton, { fullWidth: true, onClick: handlePasswordClick, children: [_jsx(CpslIcon, { slot: "start", icon: "passcode" }), "Choose Password"] })] }))] })] }));
17
- };
@@ -1,131 +0,0 @@
1
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
- return new (P || (P = Promise))(function (resolve, reject) {
4
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
- step((generator = generator.apply(thisArg, _arguments || [])).next());
8
- });
9
- };
10
- import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
11
- import { CpslButton, CpslDivider, CpslIcon } from '@getpara/react-components';
12
- import { useEffect, useMemo, useState } from 'react';
13
- import { useModalStore, useUserInfoStore } from '../../stores/index.js';
14
- import { ModalStep } from '../../utils/steps.js';
15
- import { Heading, StepContainer, InnerStepContainer } from '../common.js';
16
- import { openPopup } from '../../utils/openPopup.js';
17
- import styled from 'styled-components';
18
- import { AuthMethod, getPublicKeyHex } from '@getpara/web-sdk';
19
- import { isPasskeySupported } from '../../utils/isPasskeySupported.js';
20
- import { formatBiometricHints, KnownDevices, UserIdentifier } from '@getpara/react-common';
21
- import { useInternalClient } from '../../../provider/hooks/utils/useInternalClient.js';
22
- export const BiometricLoginStep = () => {
23
- const popupWindow = useModalStore(state => state.popupWindow);
24
- const supportedAuthMethods = useModalStore(state => state.supportedAuthMethods);
25
- const passwordUrlForLogin = useModalStore(state => state.passwordUrlForLogin);
26
- const webAuthURLForLogin = useModalStore(state => state.webAuthURLForLogin);
27
- const setStep = useModalStore(state => state.setStep);
28
- const setPopupWindow = useModalStore(state => state.setPopupWindow);
29
- const biometricLocationHints = useModalStore(state => state.biometricLocationHints);
30
- const para = useInternalClient();
31
- const authInfo = useUserInfoStore(state => state.getAuthInfo());
32
- const setWebAuthURLForLogin = useModalStore(state => state.setWebAuthURLForLogin);
33
- const setPasswordUrlForLogin = useModalStore(state => state.setPasswordUrlForLogin);
34
- const passkeysSupported = isPasskeySupported();
35
- const formattedHints = useMemo(() => formatBiometricHints(biometricLocationHints), [biometricLocationHints]);
36
- const setSupportedAuthMethods = useModalStore(state => state.setSupportedAuthMethods);
37
- const [webAuthURLForKnownDeviceLogin, setWebAuthURLForKnownDeviceLogin] = useState();
38
- useEffect(() => {
39
- function setLinks() {
40
- return __awaiter(this, void 0, void 0, function* () {
41
- if (!(supportedAuthMethods === null || supportedAuthMethods === void 0 ? void 0 : supportedAuthMethods.size) && para.getUserId()) {
42
- const fetchedSupportedAuthMethods = yield para.supportedAuthMethods({ userId: para.getUserId() });
43
- if (fetchedSupportedAuthMethods === null || fetchedSupportedAuthMethods === void 0 ? void 0 : fetchedSupportedAuthMethods.size) {
44
- setSupportedAuthMethods(fetchedSupportedAuthMethods);
45
- }
46
- return;
47
- }
48
- if (!para.isEmail && !para.isPhone && !para.isFarcaster && !para.isTelegram) {
49
- return;
50
- }
51
- if (!para.loginEncryptionKeyPair) {
52
- return;
53
- }
54
- const authType = para.isEmail ? 'email' : para.isPhone ? 'phone' : para.isFarcaster ? 'farcaster' : 'telegram';
55
- const res = yield para.touchSession();
56
- const webAuthUrlForLogin = (supportedAuthMethods === null || supportedAuthMethods === void 0 ? void 0 : supportedAuthMethods.has) && supportedAuthMethods.has(AuthMethod.PASSKEY)
57
- ? yield para.getWebAuthURLForLogin({
58
- sessionId: res.data.sessionId,
59
- loginEncryptionPublicKey: getPublicKeyHex(para.loginEncryptionKeyPair),
60
- partnerId: res.data.partnerId,
61
- authType,
62
- displayName: authInfo.displayName,
63
- pfpUrl: authInfo.pfpUrl,
64
- })
65
- : undefined;
66
- const _webAuthURLForKnownDeviceLogin = (supportedAuthMethods === null || supportedAuthMethods === void 0 ? void 0 : supportedAuthMethods.has) && supportedAuthMethods.has(AuthMethod.PASSKEY)
67
- ? yield para.getWebAuthURLForLogin({
68
- sessionId: res.data.sessionId,
69
- loginEncryptionPublicKey: getPublicKeyHex(para.loginEncryptionKeyPair),
70
- partnerId: res.data.partnerId,
71
- newDeviceSessionId: res.data.sessionLookupId,
72
- newDeviceEncryptionKey: getPublicKeyHex(para.loginEncryptionKeyPair),
73
- authType,
74
- displayName: authInfo.displayName,
75
- pfpUrl: authInfo.pfpUrl,
76
- })
77
- : undefined;
78
- const passwordAuthUrlForLogin = (supportedAuthMethods === null || supportedAuthMethods === void 0 ? void 0 : supportedAuthMethods.has) && supportedAuthMethods.has(AuthMethod.PASSWORD)
79
- ? yield para.getPasswordURLForLogin({
80
- sessionId: res.data.sessionId,
81
- loginEncryptionPublicKey: getPublicKeyHex(para.loginEncryptionKeyPair),
82
- partnerId: res.data.partnerId,
83
- authType,
84
- displayName: authInfo.displayName,
85
- pfpUrl: authInfo.pfpUrl,
86
- })
87
- : undefined;
88
- const shortWebAuthLoginLink = webAuthUrlForLogin ? yield para.shortenLoginLink(webAuthUrlForLogin) : undefined;
89
- const shortWebAuthForKnownDeviceLoginLink = _webAuthURLForKnownDeviceLogin
90
- ? yield para.shortenLoginLink(_webAuthURLForKnownDeviceLogin)
91
- : undefined;
92
- setWebAuthURLForKnownDeviceLogin(shortWebAuthForKnownDeviceLoginLink);
93
- setWebAuthURLForLogin(shortWebAuthLoginLink);
94
- setPasswordUrlForLogin(passwordAuthUrlForLogin);
95
- });
96
- }
97
- setLinks();
98
- }, [supportedAuthMethods, para]);
99
- const handlePasskeyClick = () => {
100
- if (!!popupWindow) {
101
- return;
102
- }
103
- const loginWindow = openPopup(webAuthURLForLogin, 'ParaPasskey', 'LOGIN_PASSKEY');
104
- setPopupWindow(loginWindow);
105
- setStep(ModalStep.AWAITING_BIOMETRIC_LOGIN);
106
- };
107
- const handlePasswordClick = () => {
108
- const loginWindow = openPopup(passwordUrlForLogin, 'ParaPassword', 'LOGIN_PASSWORD');
109
- setPopupWindow(loginWindow);
110
- setStep(ModalStep.AWAITING_PASSWORD_LOGIN);
111
- };
112
- function shouldShowWelcomeBack() {
113
- return (!(biometricLocationHints === null || biometricLocationHints === void 0 ? void 0 : biometricLocationHints.length) ||
114
- (passkeysSupported && formattedHints.isOnKnownDevice) ||
115
- ((supportedAuthMethods === null || supportedAuthMethods === void 0 ? void 0 : supportedAuthMethods.has) && supportedAuthMethods.has(AuthMethod.PASSWORD)));
116
- }
117
- return (_jsxs(StepContainer, { "$wide": true, children: [_jsxs(InnerStepContainer, { children: [shouldShowWelcomeBack() && (_jsx(Heading, { variant: "headingS", weight: "bold", children: "Welcome back," })), _jsx(UserIdentifier, Object.assign({}, authInfo))] }), _jsxs(MainContainer, { children: [(supportedAuthMethods === null || supportedAuthMethods === void 0 ? void 0 : supportedAuthMethods.has) && supportedAuthMethods.has(AuthMethod.PASSWORD) && passwordUrlForLogin && (_jsx(PasswordOnly, { handlePasswordClick: handlePasswordClick })), (supportedAuthMethods === null || supportedAuthMethods === void 0 ? void 0 : supportedAuthMethods.has) &&
118
- supportedAuthMethods.has(AuthMethod.PASSKEY) &&
119
- webAuthURLForLogin &&
120
- webAuthURLForKnownDeviceLogin && (_jsx(BiometricOnly, { handlePasskeyClick: handlePasskeyClick, formattedHints: formattedHints, shortLoginLink: webAuthURLForKnownDeviceLogin, passkeysSupported: passkeysSupported, biometricLocationHints: biometricLocationHints }))] })] }));
121
- };
122
- const PasswordOnly = ({ handlePasswordClick }) => {
123
- return (_jsx(CpslButton, { fullWidth: true, onClick: handlePasswordClick, children: "Login" }));
124
- };
125
- const BiometricOnly = ({ handlePasskeyClick, formattedHints, shortLoginLink, passkeysSupported, biometricLocationHints = [], }) => {
126
- const [hasHints, isOnKnownDevice] = [biometricLocationHints.length > 0, formattedHints.isOnKnownDevice];
127
- return (_jsxs(_Fragment, { children: [((hasHints && !isOnKnownDevice) || !passkeysSupported) && (_jsx(KnownDevices, { hints: formattedHints, link: shortLoginLink })), passkeysSupported && (_jsxs(_Fragment, { children: [hasHints && !isOnKnownDevice && _jsx(CpslDivider, { children: "or" }), _jsx(CpslButton, { fullWidth: true, onClick: handlePasskeyClick, children: !hasHints || isOnKnownDevice ? (_jsxs(_Fragment, { children: [_jsx(CpslIcon, { slot: "start", icon: "key" }), "Login with passkey"] })) : ('Continue anyway') })] }))] }));
128
- };
129
- const MainContainer = styled(InnerStepContainer) `
130
- gap: 16px;
131
- `;
@@ -1,26 +0,0 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
2
- import { motion } from 'framer-motion';
3
- import { useEffect, useRef, useState } from 'react';
4
- import styled from 'styled-components';
5
- export const AnimatedHeightWrapper = ({ children, className }) => {
6
- const containerRef = useRef(null);
7
- const [height, setHeight] = useState('auto');
8
- useEffect(() => {
9
- if (containerRef.current) {
10
- const resizeObserver = new ResizeObserver(entries => {
11
- // We only have one entry, so we can use entries[0].
12
- const observedHeight = entries[0].contentRect.height;
13
- setHeight(observedHeight);
14
- });
15
- resizeObserver.observe(containerRef.current);
16
- return () => {
17
- // Cleanup the observer when the component is unmounted
18
- resizeObserver.disconnect();
19
- };
20
- }
21
- }, []);
22
- return (_jsx(Container, { className: className, style: { height }, animate: { height }, transition: { duration: 0.2 }, children: _jsx("div", { ref: containerRef, children: children }) }));
23
- };
24
- const Container = styled(motion.div) `
25
- overflow: hidden;
26
- `;
@@ -1,232 +0,0 @@
1
- import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { styled } from 'styled-components';
3
- import { IFrameSteps, ModalStep } from '../../utils/steps.js';
4
- import { CpslAlert, CpslIcon } from '@getpara/react-components';
5
- import { VerificationCodeStep } from '../VerificationCodeStep/VerificationCodeStep.js';
6
- import { useModalStore, useThemeStore } from '../../stores/index.js';
7
- import { BiometricLoginStep } from '../BiometricLoginStep/BiometricLoginStep.js';
8
- import { Setup2FAStep } from '../Setup2FAStep/Setup2FAStep.js';
9
- import { LoginDoneStep } from '../LoginDoneStep/LoginDoneStep.js';
10
- import { EnabledFlow } from '@getpara/web-sdk';
11
- import { AwaitingBiometricsStep } from '../AwaitingBiometricsStep/AwaitingBiometricsStep.js';
12
- import { AwaitingWalletCreationStep } from '../AwaitingWalletCreationStep/AwaitingWalletCreationStep.js';
13
- import { WalletCreationDoneStep } from '../WalletCreationDoneStep/WalletCreationDoneStep.js';
14
- import { RecoverySecretStep } from '../RecoverySecretStep/RecoverySecretStep.js';
15
- import { TwoFactorDoneStep } from '../TwoFactorDoneStep/TwoFactorDoneStep.js';
16
- import { BiometricCreationStep } from '../BiometricCreationStep/BiometricCreationStep.js';
17
- import { AwaitingOAuthStep } from '../AwaitingOAuthStep/AwaitingOAuthStep.js';
18
- import { AddFundsAwaiting, AddFundsDone, AddFunds } from '../AddFunds/index.js';
19
- import FarcasterOAuthStep from '../OAuth/FarcasterOAuthStep.js';
20
- import { Header } from '../Header/Header.js';
21
- import { AuthMainStep } from '../AuthMainStep/AuthMainStep.js';
22
- import { BODY_MOTION_VARIANTS, BODY_TRANSITION, MOBILE_SIZE } from '../../constants/constants.js';
23
- import { Account } from '../Account/Account.js';
24
- import { AuthOptions } from '../AuthOptions/AuthOptions.js';
25
- import { ExternalWallets } from '../ExternalWallets/ExternalWallets.js';
26
- import { ExternalWalletStep } from '../ExternalWalletStep/ExternalWalletStep.js';
27
- import { Hero } from '../Hero/Hero.js';
28
- import { AnimatedHeightWrapper } from './AnimatedHeightWrapper.js';
29
- import { ChainSwitch } from '../ChainSwitch/ChainSwitch.js';
30
- import { motion, AnimatePresence } from 'framer-motion';
31
- import { Controls } from '../Controls/Controls.js';
32
- import { useEffect, useState } from 'react';
33
- import { TelegramOAuthStep } from '../OAuth/TelegramOAuthStep.js';
34
- import { AwaitingPasswordStep } from '../AwaitingPasswordStep/AwaitingPasswordStep.js';
35
- import { IFrameStep } from '../IFrameStep/IFrameStep.js';
36
- const MIN_HEIGHT = {
37
- [ModalStep.ADD_FUNDS_AWAITING]: '680px',
38
- };
39
- const PADDING_TOP = {
40
- [ModalStep.TELEGRAM_OAUTH]: '36px',
41
- };
42
- const PADDING_BOTTOM = {
43
- [ModalStep.TELEGRAM_OAUTH]: '16px',
44
- };
45
- export const Body = ({ oAuthMethods, twoFactorAuthEnabled, disableEmailLogin, disablePhoneLogin, onClose, createAccountWithPasskey, createAccountWithPassword, }) => {
46
- const currentStep = useModalStore(state => state.step);
47
- const onRampConfig = useModalStore(state => state.onRampConfig);
48
- const stepDirection = useModalStore(state => state.stepDirection);
49
- const setStepDirection = useModalStore(state => state.setStepDirection);
50
- const accountAddFundTab = useModalStore(state => state.accountAddFundTab);
51
- const setAccountAddFundTab = useModalStore(state => state.setAccountAddFundTab);
52
- const appName = useThemeStore(state => state.appName);
53
- const embeddedModal = useThemeStore(state => state.embeddedModal);
54
- const [isTestModeAlert, setIsTestModeAlert] = useState(onRampConfig === null || onRampConfig === void 0 ? void 0 : onRampConfig.testMode);
55
- const Content = () => {
56
- switch (currentStep) {
57
- case ModalStep.AUTH_MAIN: {
58
- return (_jsx(AuthMainStep, { oAuthMethods: oAuthMethods, disableEmailLogin: disableEmailLogin, disablePhoneLogin: disablePhoneLogin }));
59
- }
60
- case ModalStep.EX_WALLET_MORE: {
61
- return _jsx(ExternalWallets, {});
62
- }
63
- case ModalStep.AUTH_MORE: {
64
- return (_jsx(AuthOptions, { oAuthMethods: oAuthMethods, disableEmailLogin: disableEmailLogin, disablePhoneLogin: disablePhoneLogin }));
65
- }
66
- case ModalStep.VERIFICATIONS: {
67
- return _jsx(VerificationCodeStep, {});
68
- }
69
- case ModalStep.BIOMETRIC_LOGIN: {
70
- return _jsx(BiometricLoginStep, {});
71
- }
72
- case ModalStep.SETUP_2FA:
73
- case ModalStep.VERIFY_2FA: {
74
- return _jsx(Setup2FAStep, { onClose: onClose });
75
- }
76
- case ModalStep.LOGIN_DONE: {
77
- return _jsx(LoginDoneStep, { onClose: onClose });
78
- }
79
- case ModalStep.AWAITING_BIOMETRIC_LOGIN:
80
- case ModalStep.AWAITING_BIOMETRIC_CREATION: {
81
- return _jsx(AwaitingBiometricsStep, {});
82
- }
83
- case ModalStep.AWAITING_PASSWORD_LOGIN:
84
- case ModalStep.AWAITING_PASSWORD_CREATION: {
85
- return _jsx(AwaitingPasswordStep, {});
86
- }
87
- case ModalStep.AWAITING_WALLET_CREATION: {
88
- return _jsx(AwaitingWalletCreationStep, {});
89
- }
90
- case ModalStep.WALLET_CREATION_DONE: {
91
- return _jsx(WalletCreationDoneStep, { twoFactorAuthEnabled: twoFactorAuthEnabled, onClose: onClose });
92
- }
93
- case ModalStep.SECRET: {
94
- return _jsx(RecoverySecretStep, {});
95
- }
96
- case ModalStep.TWO_FACTOR_DONE: {
97
- return _jsx(TwoFactorDoneStep, { onClose: onClose });
98
- }
99
- case ModalStep.BIOMETRIC_CREATION: {
100
- return (_jsx(BiometricCreationStep, { handlePasswordClick: createAccountWithPassword, handlePasskeyClick: createAccountWithPasskey }));
101
- }
102
- case ModalStep.AWAITING_OAUTH: {
103
- return _jsx(AwaitingOAuthStep, {});
104
- }
105
- case ModalStep.FARCASTER_OAUTH: {
106
- return _jsx(FarcasterOAuthStep, {});
107
- }
108
- case ModalStep.TELEGRAM_OAUTH: {
109
- return _jsx(TelegramOAuthStep, {});
110
- }
111
- case ModalStep.ADD_FUNDS_BUY:
112
- case ModalStep.ADD_FUNDS_RECEIVE:
113
- case ModalStep.ADD_FUNDS_WITHDRAW: {
114
- return _jsx(AddFunds, {});
115
- }
116
- case ModalStep.ADD_FUNDS_AWAITING: {
117
- return _jsx(AddFundsAwaiting, {});
118
- }
119
- case ModalStep.ADD_FUNDS_SUCCESS: {
120
- return _jsx(AddFundsDone, { isSuccess: true, onClose: onClose });
121
- }
122
- case ModalStep.ADD_FUNDS_FAILURE: {
123
- return _jsx(AddFundsDone, { onClose: onClose });
124
- }
125
- case ModalStep.ACCOUNT_MAIN: {
126
- return _jsx(Account, { onClose: onClose });
127
- }
128
- case ModalStep.EX_WALLET_SELECTED: {
129
- return _jsx(ExternalWalletStep, {});
130
- }
131
- case ModalStep.CHAIN_SWITCH: {
132
- return _jsx(ChainSwitch, {});
133
- }
134
- default: {
135
- if (IFrameSteps.includes(currentStep)) {
136
- return null;
137
- }
138
- }
139
- }
140
- };
141
- useEffect(() => {
142
- if (!isTestModeAlert && (onRampConfig === null || onRampConfig === void 0 ? void 0 : onRampConfig.testMode)) {
143
- setIsTestModeAlert(true);
144
- }
145
- }, [onRampConfig === null || onRampConfig === void 0 ? void 0 : onRampConfig.testMode]);
146
- useEffect(() => {
147
- switch (currentStep) {
148
- case ModalStep.ADD_FUNDS_BUY:
149
- setAccountAddFundTab(EnabledFlow.BUY);
150
- break;
151
- case ModalStep.ADD_FUNDS_RECEIVE:
152
- setAccountAddFundTab(EnabledFlow.RECEIVE);
153
- break;
154
- case ModalStep.ADD_FUNDS_WITHDRAW:
155
- setAccountAddFundTab(EnabledFlow.WITHDRAW);
156
- break;
157
- default:
158
- break;
159
- }
160
- }, [currentStep]);
161
- return (_jsxs(Container, { slot: "body", "data-testid": "modal-content", children: [!embeddedModal && (_jsxs(_Fragment, { children: [_jsx(Controls, { onClose: onClose }), _jsx(Header, {})] })), _jsxs(AnimatedWrapper, { children: [_jsx(AnimatePresence, { mode: "popLayout", initial: false, onExitComplete: () => {
162
- setStepDirection(1);
163
- }, custom: stepDirection, children: _jsxs(BodyContainer, { custom: stepDirection, variants: BODY_MOTION_VARIANTS, initial: "enter", animate: "center", exit: "exit", transition: BODY_TRANSITION, children: [_jsx(Hero, {}), _jsxs(InnerContainer, { "$embeddedModal": embeddedModal, "$step": currentStep, "$isIFrameStep": IFrameSteps.includes(currentStep), children: [Content(), (onRampConfig === null || onRampConfig === void 0 ? void 0 : onRampConfig.testMode) &&
164
- [
165
- ModalStep.ADD_FUNDS_BUY,
166
- ModalStep.ADD_FUNDS_WITHDRAW,
167
- ModalStep.ADD_FUNDS_AWAITING,
168
- ModalStep.ADD_FUNDS_FAILURE,
169
- ModalStep.ADD_FUNDS_SUCCESS,
170
- ].includes(currentStep) &&
171
- isTestModeAlert &&
172
- accountAddFundTab !== EnabledFlow.RECEIVE && (_jsx(TestModeAlert, { children: _jsxs("div", { style: { fontSize: '14px' }, children: ["This Para Modal is configured to run on-ramp services in ", _jsx("b", { children: "test mode" }), " only, for development purposes. If you are a user of ", appName, ", please contact support.", _jsx(CloseButton, { onClick: () => setIsTestModeAlert(false), children: _jsx(CloseX, { icon: "x" }) })] }) }))] })] }, ['ADD_FUNDS_BUY', 'ADD_FUNDS_RECEIVE', 'ADD_FUNDS_WITHDRAW'].includes(currentStep) ? 'ADD_FUNDS' : currentStep) }), _jsx(IFrameStep, {})] })] }));
173
- };
174
- const Container = styled.div `
175
- position: relative;
176
- `;
177
- const AnimatedWrapper = styled(AnimatedHeightWrapper) `
178
- margin-top: -16px;
179
- `;
180
- const BodyContainer = styled(motion.div) `
181
- position: relative;
182
- display: flex;
183
- flex-direction: column;
184
- gap: 24px;
185
- will-change: auto !important;
186
- `;
187
- const InnerContainer = styled.div `
188
- z-index: 1;
189
- flex: 1;
190
- display: flex;
191
- flex-direction: column;
192
- justify-content: flex-start;
193
- gap: 24px;
194
- padding: ${({ $embeddedModal, $step, $isIFrameStep }) => {
195
- var _a, _b;
196
- return $isIFrameStep
197
- ? '0px'
198
- : $embeddedModal
199
- ? '12px 0px 0px'
200
- : `${(_a = PADDING_TOP[$step]) !== null && _a !== void 0 ? _a : '72px'} 72px ${(_b = PADDING_BOTTOM[$step]) !== null && _b !== void 0 ? _b : '32px'}`;
201
- }};
202
- min-height: ${({ $step }) => { var _a; return (_a = MIN_HEIGHT[$step]) !== null && _a !== void 0 ? _a : 'auto'; }};
203
- height: ${({ $step }) => { var _a; return (_a = MIN_HEIGHT[$step]) !== null && _a !== void 0 ? _a : 'auto'; }};
204
-
205
- @media (max-width: ${MOBILE_SIZE}px) {
206
- padding: ${({ $embeddedModal, $step, $isIFrameStep }) => { var _a; return $isIFrameStep ? '0px' : $embeddedModal ? '12px 0px 0px' : `${(_a = PADDING_TOP[$step]) !== null && _a !== void 0 ? _a : '72px'} 16px 0px`; }};
207
- }
208
-
209
- cpsl-auth-modal.force-mobile-media & {
210
- padding: 72px 16px 0px;
211
- }
212
- `;
213
- const TestModeAlert = styled(CpslAlert) `
214
- --container-padding-end: 40px;
215
- position: absolute;
216
- bottom: 16px;
217
- left: 16px;
218
- right: 16px;
219
- z-index: 1000;
220
- `;
221
- const CloseButton = styled.button `
222
- background-color: transparent;
223
- border: none;
224
- padding: 4px;
225
- cursor: pointer;
226
- position: absolute;
227
- top: 0;
228
- right: 0;
229
- `;
230
- const CloseX = styled(CpslIcon) `
231
- --icon-color: var(--cpsl-color-foreground-0);
232
- `;