Skip to content

Commit

Permalink
Amina/poi workflow (#17899)
Browse files Browse the repository at this point in the history
* feat: added feature flag

* feat: added feature flag

* feat: added feature flag

* fix: platform

* fix: platform

* fix: redirection

* fix: redirection
  • Loading branch information
amina-deriv authored Jan 6, 2025
1 parent a5631cc commit 392e99b
Show file tree
Hide file tree
Showing 9 changed files with 98 additions and 24 deletions.
4 changes: 2 additions & 2 deletions packages/account/src/Constants/routes-config.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import { routes, moduleLoader, makeLazyLoader } from '@deriv/shared';
import { localize } from '@deriv/translations';
import {
PersonalDetails,
ProofOfIdentity,
ProofOfIdentityFlow,
ProofOfAddress,
ProofOfOwnership,
Account,
Expand Down Expand Up @@ -155,7 +155,7 @@ const initRoutesConfig = () => [
subroutes: [
{
path: routes.proof_of_identity,
component: ProofOfIdentity,
component: ProofOfIdentityFlow,
getTitle: () => localize('Proof of identity'),
},
{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
export { default as ProofOfIdentity } from './proof-of-identity.jsx';
export { default as ProofOfIdentityContainer } from './proof-of-identity-container.jsx';
export { default as ProofOfIdentityFlow } from './proof-of-identity-flow';
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
import React from 'react';

import { Loading } from '@deriv/components';
import { useGrowthbookGetFeatureValue } from '@deriv/hooks';
import { ACCOUNTS_OS_POI_STATUS_URL, ACCOUNTS_OS_POI_URL, getAppId, getSocketURL } from '@deriv/shared';
import { observer, useStore } from '@deriv/stores';

import { useKycAuthStatus } from '../../../hooks';

import ProofOfIdentity from './proof-of-identity';

const ProofOfIdentityFlow = observer(() => {
const {
client: { getToken, residence },
common: { is_from_tradershub_os },
} = useStore();
const { kyc_auth_status } = useKycAuthStatus({ country: residence });
const [shouldRedirectToAccountsOSApp, isRedirectToAccountsOSAppFFLoaded] = useGrowthbookGetFeatureValue({
featureFlag: 'redirect_to_poi_in_accounts_os',
});

const getFormattedURL = url_link => {
const url = new URL(url_link);
const urlParams = new URLSearchParams(location.search);
const platform = urlParams.get('platform') ?? (is_from_tradershub_os ? 'tradershub_os' : 'deriv_app');

const params = {
platform,
appid: getAppId(),
lang: 'en',
server: getSocketURL(),
token: getToken(),
};

Object.entries(params).forEach(([key, value]) => {
url.searchParams.append(key, value);
});

return url.toString();
};

if (isRedirectToAccountsOSAppFFLoaded) {
if (shouldRedirectToAccountsOSApp && kyc_auth_status) {
const { identity } = kyc_auth_status;
const redirect_url =
identity.status === 'none' || identity.status === 'required'
? ACCOUNTS_OS_POI_URL
: ACCOUNTS_OS_POI_STATUS_URL;
window.location.href = getFormattedURL(redirect_url);
} else {
return <ProofOfIdentity />;
}
}

return <Loading is_fullscreen={false} className='account__initial-loader' />;
});

export default ProofOfIdentityFlow;
3 changes: 2 additions & 1 deletion packages/account/src/Sections/index.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import PersonalDetails from 'Sections/Profile/PersonalDetails';
import { ProofOfIdentityContainer, ProofOfIdentity } from 'Sections/Verification/ProofOfIdentity';
import { ProofOfIdentityContainer, ProofOfIdentity, ProofOfIdentityFlow } from 'Sections/Verification/ProofOfIdentity';
import ProofOfAddress from 'Sections/Verification/ProofOfAddress';
import ProofOfOwnership from 'Sections/Verification/ProofOfOwnership';
import ProofOfIncome from 'Sections/Verification/ProofOfIncome';
Expand All @@ -11,6 +11,7 @@ export {
PersonalDetails,
ProofOfIdentityContainer,
ProofOfIdentity,
ProofOfIdentityFlow,
ProofOfAddress,
ProofOfOwnership,
ProofOfIncome,
Expand Down
44 changes: 23 additions & 21 deletions packages/api/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -281,7 +281,7 @@ type KycAuthStatus = {
/**
* Current POI status.
*/
status?: 'none' | 'pending' | 'rejected' | 'verified' | 'expired' | 'suspected';
status?: 'none' | 'pending' | 'rejected' | 'verified' | 'expired' | 'suspected' | 'required';
/**
* Supported documents per service.
*/
Expand Down Expand Up @@ -3105,18 +3105,19 @@ export type TSocketPaginatateableRequestCleaned<T extends TSocketPaginateableEnd
};

export type TSocketRequestPayload<
T extends TSocketEndpointNames | TSocketPaginateableEndpointNames = TSocketEndpointNames
> = Partial<TSocketRequestCleaned<T>> extends TSocketRequestCleaned<T>
? {
payload?: T extends TSocketPaginateableEndpointNames
? TSocketPaginatateableRequestCleaned<T>
: TSocketRequestCleaned<T>;
}
: {
payload: T extends TSocketPaginateableEndpointNames
? TSocketPaginatateableRequestCleaned<T>
: TSocketRequestCleaned<T>;
};
T extends TSocketEndpointNames | TSocketPaginateableEndpointNames = TSocketEndpointNames,
> =
Partial<TSocketRequestCleaned<T>> extends TSocketRequestCleaned<T>
? {
payload?: T extends TSocketPaginateableEndpointNames
? TSocketPaginatateableRequestCleaned<T>
: TSocketRequestCleaned<T>;
}
: {
payload: T extends TSocketPaginateableEndpointNames
? TSocketPaginatateableRequestCleaned<T>
: TSocketRequestCleaned<T>;
};

export type TSocketRequestQueryOptions<T extends TSocketEndpointNames> = Parameters<
typeof useQuery<TSocketResponseData<T>, TSocketError<T>>
Expand All @@ -3133,7 +3134,7 @@ export type TSocketRequestMutationOptions<T extends TSocketEndpointNames> = Para
type TSocketRequestWithOptions<
T extends TSocketEndpointNames,
O extends boolean = false,
OT extends 'useQuery' | 'useInfiniteQuery' = 'useQuery'
OT extends 'useQuery' | 'useInfiniteQuery' = 'useQuery',
> = Omit<
TSocketRequestPayload<T> & {
options?: OT extends 'useQuery' ? TSocketRequestQueryOptions<T> : TSocketRequestInfiniteQueryOptions<T>;
Expand All @@ -3148,18 +3149,19 @@ type TNever<T> = T extends Record<string, never> ? never : T;
type TSocketRequestProps<
T extends TSocketEndpointNames,
O extends boolean = false,
OT extends 'useQuery' | 'useInfiniteQuery' = 'useQuery'
OT extends 'useQuery' | 'useInfiniteQuery' = 'useQuery',
> = TNever<TSocketRequestWithOptions<T, O, OT>>;

export type TSocketAcceptableProps<
T extends TSocketEndpointNames,
O extends boolean = false,
OT extends 'useQuery' | 'useInfiniteQuery' = 'useQuery'
> = TSocketRequestProps<T, O, OT> extends never
? [undefined?]
: Partial<TSocketRequestProps<T, O, OT>> extends TSocketRequestProps<T, O, OT>
? [TSocketRequestProps<T, O, OT>?]
: [TSocketRequestProps<T, O, OT>];
OT extends 'useQuery' | 'useInfiniteQuery' = 'useQuery',
> =
TSocketRequestProps<T, O, OT> extends never
? [undefined?]
: Partial<TSocketRequestProps<T, O, OT>> extends TSocketRequestProps<T, O, OT>
? [TSocketRequestProps<T, O, OT>?]
: [TSocketRequestProps<T, O, OT>];

export type TSocketPaginateableEndpointNames = KeysMatching<
TSocketEndpoints,
Expand Down
1 change: 1 addition & 0 deletions packages/core/src/Stores/client-store.js
Original file line number Diff line number Diff line change
Expand Up @@ -382,6 +382,7 @@ export default class ClientStore extends BaseStore {
setNewEmail: action.bound,
setDeviceData: action.bound,
getSignupParams: action.bound,
getToken: action.bound,
onSetResidence: action.bound,
onSetCitizen: action.bound,
onSignup: action.bound,
Expand Down
9 changes: 9 additions & 0 deletions packages/shared/src/utils/routes/routes.ts
Original file line number Diff line number Diff line change
Expand Up @@ -119,3 +119,12 @@ export const isDisabledLandscapeBlockerRoute = (path: string) => {
if (path === routes.traders_hub) return true;
return DISABLE_LANDSCAPE_BLOCKER_ROUTES.some(route => path.startsWith(route));
};

export const ACCOUNTS_OS_POI_URL =
process.env.NODE_ENV === 'production'
? 'https://hub.deriv.com/Accounts/ProofOfIdentity'
: 'https://staging-hub.deriv.com/Accounts/ProofOfIdentity';
export const ACCOUNTS_OS_POI_STATUS_URL =
process.env.NODE_ENV === 'production'
? 'https://hub.deriv.com/Accounts/ProofOfIdentityStatus'
: 'https://staging-hub.deriv.com/Accounts/ProofOfIdentityStatus';
1 change: 1 addition & 0 deletions packages/stores/src/mockStore.ts
Original file line number Diff line number Diff line change
Expand Up @@ -208,6 +208,7 @@ const mock = (): TStores & { is_mock: boolean } => {
document_status: '',
identity_status: '',
},
getToken: jest.fn(),
phone_settings: {
carriers: [],
countries: [
Expand Down
1 change: 1 addition & 0 deletions packages/stores/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -710,6 +710,7 @@ export type TClientStore = {
poi_status: string;
valid_tin: 0 | 1;
};
getToken: () => string;
should_show_trustpilot_notification: boolean;
};

Expand Down

0 comments on commit 392e99b

Please sign in to comment.