This commit is contained in:
janisslsm committed 2026-11-01 12:12:55 +02:00
1 parent 1781d25a15
commit 732c0ad767
33051 files changed
+2591613 -3019689

No files matched your search

@@ -0,0 +1,65 @@
// Metro module 7625 (f7626).
import { useCallback } from "react";
import { HelpdeskArticles } from "../../../Constants";
import { createStyles } from "../../../design/components/Styles/native/createStyles";
import Module712 from "../../../_bundle/Module712";
import { useIsSuspendedUser } from "../../safety_hub/SafetyHubUtils";
import { AgeVerificationGetStartedModalScenes } from "./AgeVerificationGetStartedModal";
import useAgeVerificationMethods from "../hooks/useAgeVerificationMethods";
import { ModalScreen } from "../../../design/components/Modal/native/ModalScreen.native";
import { ModalContent } from "../../../design/components/Modal/native/ModalContent.native";
import { Stack } from "../../../design/components/Stack/native/Stack.native";
import { ShieldSpotIllustration } from "../../../design/assets/native";
import { Text } from "../../../design/components/Text/native/Text";
import { getAgeVerificationGetStartedTitle, getAgeVerificationGetStartedSubtitle } from "../AgeVerificationUtils";
import { AgeVerificationMethodsContainer } from "./AgeVerificationMethodsContainer";
import { intl } from "../../../intl/index.native";
import AgeAssurance_messages from "../AgeAssurance.messages";
import AgeVerificationActionCreators_native from "../AgeVerificationActionCreators.native";
import HelpdeskUtils from "../../../utils/HelpdeskUtils";
const useStyles = createStyles({
header: {
textAlign: "center"
},
helpLink: {
marginTop: Module712.space.PX_16,
textAlign: "center"
}
});
export default function AgeVerificationEmbeddedIntroScreen(props) {
const { onClose, modalSessionId, classificationId, entryPoint, navigation } = props;
const styles = useStyles();
const isSuspendedUser = useIsSuspendedUser();
const ageVerificationMethods = useAgeVerificationMethods({
onClose,
classificationId,
onGoogleWalletSelect: useCallback(() => {
navigation.navigate(AgeVerificationGetStartedModalScenes.GOOGLE_WALLET_VERIFICATION);
}, [navigation])
}).ageVerificationMethods;
return <ModalScreen>
<ModalContent>
<Stack align="center" justify="center" spacing={24}>
<Stack align="center" justify="center" spacing={16}>
<ShieldSpotIllustration height={100} width={177} />
<Stack align="center" justify="center" spacing={8}>
<Text accessibilityRole="header" variant="heading-xl/bold" color="mobile-text-heading-primary">
{getAgeVerificationGetStartedTitle(entryPoint)}
</Text>
<Text variant="text-md/medium" color="text-strong" style={styles.header}>
{getAgeVerificationGetStartedSubtitle(entryPoint, void 0, isSuspendedUser)}
</Text>
</Stack>
</Stack>
<AgeVerificationMethodsContainer ageVerificationMethods={ageVerificationMethods} modalSessionId={modalSessionId} />
</Stack>
<Text variant="text-xs/medium" color="text-muted" style={styles.helpLink}>
{intl.format(AgeAssurance_messages.lG69e1, {
handleOnHelpUrlHook: () => {
AgeVerificationActionCreators_native.openUrl(HelpdeskUtils.getArticleURL(HelpdeskArticles.TIGGER_PAWTECT_LEARN_MORE));
}
})}
</Text>
</ModalContent>
</ModalScreen>;
};
@@ -0,0 +1,255 @@
// Metro module 6771 (f6772).
import _slicedToArray from "../../../_bundle/_slicedToArray";
import { useState, useEffect, useMemo, useRef, useCallback } from "react";
import { ActivityIndicator } from "react-native";
import { HelpdeskArticles } from "../../../Constants";
import { jsx } from "react/jsx-runtime";
import { AgeAssuranceMethod } from "../../../_bundle/Module1892";
import { WalletIcon } from "../../../design/components/Icon/native/redesign/generated/WalletIcon";
import { UserCircleIcon } from "../../../design/components/Icon/native/redesign/generated/UserCircleIcon";
import { IdIcon } from "../../../design/components/Icon/native/redesign/generated/IdIcon";
import { createStyles } from "../../../design/components/Styles/native/createStyles";
import Module712 from "../../../_bundle/Module712";
import { useIsSuspendedUser } from "../../safety_hub/SafetyHubUtils";
import { useAgeVerificationMethodsV2 } from "../hooks/useAgeVerificationMethodsV2";
import { checkGoogleWalletAvailable } from "../GoogleWalletActionCreators.native";
import { useInitiateAgeVerification, getAgeVerificationGetStartedTitle, getAgeVerificationGetStartedSubtitle } from "../AgeVerificationUtils";
import { V2_METHOD_TO_VERIFICATION_METHOD, V2_VENDOR_TO_VERIFICATION_VENDOR } from "../AgeVerificationMethodsV2";
import { ModalScreen } from "../../../design/components/Modal/native/ModalScreen.native";
import { ModalContent } from "../../../design/components/Modal/native/ModalContent.native";
import { Stack } from "../../../design/components/Stack/native/Stack.native";
import { AgeVerificationSpotIllustration } from "../../../design/assets/native";
import { Text } from "../../../design/components/Text/native/Text";
import AgeVerificationActionCreators_native from "../AgeVerificationActionCreators.native";
import HelpdeskUtils from "../../../utils/HelpdeskUtils";
import { HelpMessage, HelpMessageTypes } from "../../../design/void/native";
import { Button } from "../../../design/components/Button/native/Button.native";
import { intl, t } from "../../../intl/index.native";
import AgeAssurance_messages from "../AgeAssurance.messages";
import { TableRowGroup } from "../../../design/components/TableRow/native/TableRowGroup.native";
import { TableRow } from "../../../design/components/TableRow/native/TableRow.native";
import ModalActionCreators from "../../../actions/ModalActionCreators";
import { getHeaderCloseButton, getHeaderBackButton } from "../../../design/components/Navigator/native/NavigatorHeader.native";
import GoogleWalletVerificationScreen from "./GoogleWalletVerificationScreen";
import { v4 } from "../../../_bundle/Module514";
import { Navigator } from "../../../design/components/Navigator/native/Navigator.native";
let MethodErrorScreen, c4353_10, useStyles, c4353_12;
let env4353 = {};
const MethodsScreen = function MethodsScreen(props) {
let c15906_0;
let env15905 = {
$parent: env4353
};
const { entryPoint: entryPoint3, navigation } = props;
env15905[0] = navigation;
const onClose3 = props.onClose;
env15905[1] = void 0;
env15905[2] = void 0;
env15905[3] = void 0;
env15905[4] = void 0;
env15905[5] = void 0;
env15905[6] = void 0;
const styles = useStyles();
const isSuspendedUser = useIsSuspendedUser();
const ageVerificationMethodsV2 = useAgeVerificationMethodsV2();
const { loading, error, methods } = ageVerificationMethodsV2;
env15905[1] = methods;
const refetch = ageVerificationMethodsV2.refetch;
const r42 = _slicedToArray(useState(false), 2);
const r43 = r42[0];
env15905[2] = r43;
env15905[3] = r42[1];
useEffect(() => {
let c25998_0 = false;
checkGoogleWalletAvailable().then((result) => {
if (!c25998_0) {
(0, env15905[3])(result);
}
});
return () => {
c25998_0 = true;
};
}, []);
const memo3 = useMemo(() => env15905[1].filter((item) => item.method !== AgeAssuranceMethod.GOOGLE_WALLET || env15905[2]), [methods, r43]);
const r3 = memo3.length > 0;
const initiateAgeVerification = useInitiateAgeVerification({
onComplete: onClose3,
entryPoint: entryPoint3,
shouldShowExpressiveModal: true
}).initiateAgeVerification;
env15905[4] = initiateAgeVerification;
env15905[5] = useRef(false);
c15906_0 = void 0;
c15906_0 = async (c29840_0) => {
let c29840_3;
let c29840_4 = 0;
L18: {
L17: {
try {
if (env15905[5].current) {
break L18;
}
if (c29840_0.method !== AgeAssuranceMethod.GOOGLE_WALLET) {
const r43 = V2_METHOD_TO_VERIFICATION_METHOD[c29840_0.method];
const r48 = V2_VENDOR_TO_VERIFICATION_VENDOR[c29840_0.vendor];
if (r43 != null && r48 != null) {
env15905[5].current = true;
c29840_4 = 1;
await (0, env15905[4])(r43, r48);
c29840_4 = 0;
env15905[5].current = false;
break L17;
}
env15905[0].navigate(c4353_12.METHOD_ERROR);
break L18;
}
env15905[0].navigate(c4353_12.GOOGLE_WALLET_VERIFICATION);
break L18;
} catch ($e) {
const r30 = $e;
let r7 = r30;
c29840_3 = r30;
if (c29840_4 !== 0) {
while (true) {
try {
const r90 = c29840_3;
c29840_4 = 0;
env15905[5].current = false;
throw r90;
} catch (r87) {
r7 = r87;
c29840_3 = r87;
if (c29840_4 === 0) {
break;
}
}
}
}
throw r7;
}
}
return void 0;
}
};
env15905[6] = useCallback(function() {
return c15906_0.apply(this, arguments);
}, [navigation, initiateAgeVerification]);
const r109 = [<Stack align="center" justify="center" spacing={16}>
<AgeVerificationSpotIllustration width={150} height={100} />
<Stack align="center" justify="center" spacing={8}>
<Text accessibilityRole="header" variant="heading-xl/bold" color="mobile-text-heading-primary">
{getAgeVerificationGetStartedTitle(entryPoint3)}
</Text>
<Text variant="text-md/medium" color="text-strong" style={styles.header}>
{getAgeVerificationGetStartedSubtitle(entryPoint3, () => {
AgeVerificationActionCreators_native.openUrl(HelpdeskUtils.getArticleURL(HelpdeskArticles.TIGGER_PAWTECT_LEARN_MORE));
}, isSuspendedUser)}
</Text>
</Stack>
</Stack>, loading && <Stack align="center" justify="center" style={styles.loadingContainer}>
<ActivityIndicator size="large" />
</Stack>, (loading ? !loading : !r3) && <Stack style={styles.emptyContainer}>
<HelpMessage messageType={HelpMessageTypes.ERROR} button={<Button variant="primary" size="sm" text={intl.string(AgeAssurance_messages.hDvmYP)} onPress={refetch} />}>
{intl.string(error ? AgeAssurance_messages.Bkmk4Y : AgeAssurance_messages.cR6336)}
</HelpMessage>
</Stack>, (loading ? !loading : r3) && <TableRowGroup hasIcons>
{memo3.map((item) => {
const IconComponent = c4353_10[item.method];
return <TableRow key={`${item.method}-${item.vendor}`} arrow icon={IconComponent != null ? <TableRow.Icon IconComponent={IconComponent} variant="secondary" /> : void 0} label={item.title} subLabel={<Stack direction="vertical" spacing={4}>
<Text variant="text-sm/normal" color="text-muted">{item.description}</Text>
{item.providedBy != null && <Text variant="text-sm/normal" color="text-subtle">{item.providedBy}</Text>}
</Stack>} onPress={() => {
(0, env15905[6])(item);
}} />;
})}
</TableRowGroup>];
return <ModalScreen>
<ModalContent>
<Stack align="stretch" spacing={24} style={styles.container}>{r109}</Stack>
</ModalContent>
</ModalScreen>;
};
MethodErrorScreen = function MethodErrorScreen() {
return <ModalScreen>
<ModalContent>
<Stack style={useStyles().errorMessage}>
<HelpMessage messageType={HelpMessageTypes.ERROR}>
{intl.string(AgeAssurance_messages["1RD2jW"])}
</HelpMessage>
</Stack>
</ModalContent>
</ModalScreen>;
};
const r32 = {};
r32[AgeAssuranceMethod.GOOGLE_WALLET] = WalletIcon;
r32[AgeAssuranceMethod.FACIAL_AGE_ESTIMATION] = UserCircleIcon;
r32[AgeAssuranceMethod.ID_SELFIE_MATCH] = IdIcon;
c4353_10 = r32;
useStyles = createStyles({
headerStyle: {
backgroundColor: Module712.colors.BACKGROUND_BASE_LOWER,
shadowColor: "transparent"
},
container: {
alignSelf: "stretch"
},
header: {
textAlign: "center"
},
loadingContainer: {
marginTop: Module712.space.PX_24
},
emptyContainer: {
marginTop: Module712.space.PX_24
},
errorMessage: {
marginTop: Module712.space.PX_24
}
});
c4353_12 = {
METHODS: "METHODS",
GOOGLE_WALLET_VERIFICATION: "GOOGLE_WALLET_VERIFICATION",
METHOD_ERROR: "METHOD_ERROR"
};
export default function AgeVerificationExpressiveV2Modal(props) {
const { entryPoint, onClose } = props;
const styles = useStyles();
let c15907_2 = styles;
const memo = useMemo(() => v4(), []);
return <Navigator screens={useMemo(() => {
const memo2 = memo;
const entryPoint2 = entryPoint;
const onClose2 = onClose;
const closeModal2 = function closeModal() {
ModalActionCreators.pop();
onClose2();
};
const r14 = {};
r14[c4353_12.METHODS] = {
headerStyle: c15907_2.headerStyle,
headerTitle: () => null,
headerLeft: getHeaderCloseButton(closeModal2),
render: (a0, a1) => (0, jsx)(MethodsScreen, {
entryPoint: entryPoint2,
navigation: a1,
onClose: closeModal2
})
};
r14[c4353_12.GOOGLE_WALLET_VERIFICATION] = {
headerStyle: c15907_2.headerStyle,
headerTitle: () => null,
headerLeft: getHeaderBackButton(),
render: () => (0, jsx)(GoogleWalletVerificationScreen, {
onClose: closeModal2,
modalSessionId: memo2
})
};
r14[c4353_12.METHOD_ERROR] = {
headerStyle: c15907_2.headerStyle,
headerTitle: () => null,
headerLeft: getHeaderBackButton(),
render: () => (0, jsx)(MethodErrorScreen, {})
};
return r14;
}, [styles, memo, entryPoint, onClose])} initialRouteName={c4353_12.METHODS} headerBackTitle={intl.string(t["13/7kX"])} />;
};
@@ -0,0 +1,83 @@
// Metro module 7618 (f7619).
import { useMemo, useEffect } from "react";
import { createStyles } from "../../../design/components/Styles/native/createStyles";
import Module712 from "../../../_bundle/Module712";
import ModalActionCreators from "../../../actions/ModalActionCreators";
import { getHeaderCloseButton, getHeaderBackButton } from "../../../design/components/Navigator/native/NavigatorHeader.native";
import AgeVerificationIntroScreen from "./AgeVerificationIntroScreen";
import AgeVerificationRetryScreen from "./AgeVerificationRetryScreen";
import AgeVerificationEmbeddedIntroScreen from "./AgeVerificationEmbeddedIntroScreen";
import GoogleWalletVerificationScreen from "./GoogleWalletVerificationScreen";
import { v4 } from "../../../_bundle/Module514";
import { AgeVerificationModalVersion, trackAgeVerificationModalViewed } from "../AgeVerificationAnalyticsUtils";
import { Navigator } from "../../../design/components/Navigator/native/Navigator.native";
import { intl, t } from "../../../intl/index.native";
const useStyles = createStyles({
headerStyle: {
backgroundColor: Module712.colors.BACKGROUND_BASE_LOWER,
shadowColor: "transparent"
}
});
let c4780_6 = {
INTRO: "INTRO",
RETRY: "RETRY",
EXPRESSIVE_INTRO: "EXPRESSIVE_INTRO",
GOOGLE_WALLET_VERIFICATION: "GOOGLE_WALLET_VERIFICATION"
};
export default function AgeVerificationGetStartedModal(props) {
let memo2;
const { entryPoint, isRetry, useEmbeddedMethods = false } = props;
let c15911_2 = useEmbeddedMethods;
const { classificationId, onComplete } = props;
memo2 = void 0;
const styles = useStyles();
const memo = useMemo(() => v4(), []);
const memo4 = useMemo(() => {
let closeModalWithOnComplete2;
const memo3 = memo;
const entryPoint2 = entryPoint;
const classificationId2 = classificationId;
const onComplete2 = onComplete;
const closeModal2 = function closeModal() {
return ModalActionCreators.pop();
};
closeModalWithOnComplete2 = function closeModalWithOnComplete() {
ModalActionCreators.pop();
if (onComplete2 != null) {
onComplete2();
}
};
const r14 = {};
r14[c4780_6.INTRO] = {
headerStyle: styles.headerStyle,
headerTitle: () => null,
headerLeft: getHeaderCloseButton(closeModal2),
render: () => <AgeVerificationIntroScreen onClose={closeModal2} modalSessionId={memo3} entryPoint={entryPoint2} />
};
r14[c4780_6.RETRY] = {
headerStyle: styles.headerStyle,
headerTitle: () => null,
headerLeft: getHeaderCloseButton(closeModal2),
render: () => <AgeVerificationRetryScreen onClose={closeModal2} modalSessionId={memo3} />
};
r14[c4780_6.EXPRESSIVE_INTRO] = {
headerStyle: styles.headerStyle,
headerTitle: () => null,
headerLeft: getHeaderCloseButton(closeModal2),
render: (a0, a1) => <AgeVerificationEmbeddedIntroScreen onClose={closeModalWithOnComplete2} modalSessionId={memo3} classificationId={classificationId2} entryPoint={entryPoint2} navigation={a1} />
};
r14[c4780_6.GOOGLE_WALLET_VERIFICATION] = {
headerStyle: styles.headerStyle,
headerTitle: () => null,
headerLeft: getHeaderBackButton(),
render: () => <GoogleWalletVerificationScreen onClose={closeModalWithOnComplete2} modalSessionId={memo3} />
};
return r14;
}, [styles, memo, classificationId, onComplete, entryPoint]);
memo2 = useMemo(() => c15911_2 ? AgeVerificationModalVersion.EXPRESSIVE_PRIMARY : isRetry ? AgeVerificationModalVersion.RETRY : AgeVerificationModalVersion.PRIMARY, [useEmbeddedMethods, isRetry]);
useEffect(() => {
trackAgeVerificationModalViewed(memo, memo2, entryPoint);
}, [memo, entryPoint, memo2]);
return <Navigator screens={memo4} initialRouteName={useEmbeddedMethods ? c4780_6.EXPRESSIVE_INTRO : isRetry ? c4780_6.RETRY : c4780_6.INTRO} headerBackTitle={intl.string(t["13/7kX"])} />;
};
export { c4780_6 as AgeVerificationGetStartedModalScenes };
@@ -0,0 +1,166 @@
// Metro module 6753 (f6754).
import _slicedToArray from "../../../_bundle/_slicedToArray";
import { useState, useCallback } from "react";
import { View } from "react-native";
import ThemeStore from "../../user_settings/ThemeStore";
import { VerificationMethod } from "../AgeVerificationConstants";
import { buildIncodeParamsInjection } from "../AgeVerificationIncodeWebViewConstants";
import { createStyles } from "../../../design/components/Styles/native/createStyles";
import Module712 from "../../../_bundle/Module712";
import { requestIncodeMethodSession } from "../AgeVerificationURLActionCreators";
import { ActivityIndicator } from "../../../design/components/ActivityIndicator/native/ActivityIndicator.native";
import { Stack } from "../../../design/components/Stack/native/Stack.native";
import { Heading, Text } from "../../../design/components/Text/native/Text";
import { intl, t } from "../../../intl/index.native";
import AgeAssurance_messages from "../AgeAssurance.messages";
import { TableRowGroup } from "../../../design/components/TableRow/native/TableRowGroup.native";
import { TableRow } from "../../../design/components/TableRow/native/TableRow.native";
let env4340 = {};
const useStyles = createStyles({
container: {
flex: 1,
backgroundColor: Module712.colors.BACKGROUND_BASE_LOWEST
},
content: {
padding: Module712.space.PX_16
},
loadingOverlay: {
flex: 1,
alignItems: "center",
justifyContent: "center",
backgroundColor: Module712.colors.BACKGROUND_BASE_LOWEST
}
});
export default function AgeVerificationIncodeMethodSelectScreen(props) {
let props2;
let env15897 = {
$parent: env4340
};
const onMethodSelected = props.onMethodSelected;
env15897[0] = onMethodSelected;
const trustedOrigin = props.trustedOrigin;
env15897[1] = trustedOrigin;
env15897[2] = void 0;
env15897[3] = void 0;
env15897[4] = void 0;
const r4 = _slicedToArray(useState(false), 2);
const r26 = r4[0];
env15897[2] = r4[1];
const r30 = _slicedToArray(useState(false), 2);
let r12 = r30[0];
env15897[3] = r30[1];
const styles = useStyles();
let c15898_0 = async (c29835_0) => {
let c29835_3;
let c29835_4 = 0;
let c31437_0, c31437_1, c31437_2;
L13: {
L12: {
try {
c31437_0 = c29835_0;
c31437_1 = void 0;
c31437_2 = void 0;
(0, env15897[2])(true);
(0, env15897[3])(false);
c29835_4 = 2;
c31437_1 = await requestIncodeMethodSession(c29835_0);
if (c31437_1 == null) {
(0, env15897[3])(true);
c29835_4 = 0;
(0, env15897[2])(false);
break L13;
}
c31437_2 = buildIncodeParamsInjection({
apiUrl: c31437_1.apiUrl,
sessionToken: c31437_1.sessionToken,
consentId: c31437_1.consentId,
interviewId: c31437_1.interviewId,
theme: ThemeStore.theme,
method: c31437_0
}, env15897[1]);
(0, env15897[0])(c31437_2);
c29835_4 = 1;
c29835_4 = 0;
(0, env15897[2])(false);
} catch ($e) {
const r30 = $e;
let r7 = r30;
c29835_3 = r30;
let r31 = c29835_4;
if (r31 !== 0) {
while (true) {
if (r31 === 1) {
try {
const r115 = c29835_3;
c29835_4 = 0;
(0, env15897[2])(false);
throw r115;
} catch (r113) {
r7 = r113;
c29835_3 = r113;
r31 = c29835_4;
if (r31 === 0) {
break;
}
}
} else {
try {
c29835_4 = 1;
(0, env15897[3])(true);
c29835_4 = 0;
(0, env15897[2])(false);
break L12;
} catch (r101) {
r7 = r101;
c29835_3 = r101;
r31 = c29835_4;
if (r31 === 0) {
break;
}
}
}
}
}
throw r7;
}
}
return void 0;
}
};
env15897[4] = useCallback(function() {
return c15898_0.apply(this, arguments);
}, [onMethodSelected, trustedOrigin]);
const r41 = {
style: null,
children: null
};
if (r26) {
r41.style = styles.loadingOverlay;
r41.children = <ActivityIndicator />;
props2 = r41;
} else {
r41.style = styles.container;
const r59 = [<Heading variant="heading-lg/bold" color="text-strong">
{intl.string(AgeAssurance_messages.eZvwAe)}
</Heading>, <Text variant="text-md/normal" color="text-muted">
{intl.string(AgeAssurance_messages["5yWXmT"])}
</Text>, , ,];
if (r12) {
r12 = <Text variant="text-sm/medium" color="text-feedback-critical">
{intl.string(t.c6kn6F)}
</Text>;
}
r59[2] = r12;
r59[3] = <TableRowGroup hasIcons={false}>
<TableRow arrow label={intl.string(AgeAssurance_messages.rgXXcW)} subLabel={intl.string(AgeAssurance_messages.fm7qBC)} onPress={() => {
(0, env15897[4])(VerificationMethod.FACIAL_AGE_ESTIMATION);
}} />
<TableRow arrow label={intl.string(AgeAssurance_messages["NeVlw/"])} subLabel={intl.string(AgeAssurance_messages.ARmJ0M)} onPress={() => {
(0, env15897[4])(VerificationMethod.ID_VERIFICATION);
}} />
</TableRowGroup>;
r41.children = <Stack spacing={16} style={styles.content}>{r59}</Stack>;
props2 = r41;
}
return <View {...props2} />;
};
@@ -0,0 +1,51 @@
// Metro module 6751 (f6752).
import { useMemo } from "react";
import { createStyles } from "../../../design/components/Styles/native/createStyles";
import Module712 from "../../../_bundle/Module712";
import ModalActionCreators from "../../../actions/ModalActionCreators";
import { intl, t } from "../../../intl/index.native";
import { HeaderActionButton } from "../../../design/components/Navigator/native/HeaderActionButton.native";
import AgeVerificationIncodeMethodSelectScreen from "./AgeVerificationIncodeMethodSelectScreen";
import AgeVerificationWebViewScreen from "./AgeVerificationWebViewScreen";
import { Navigator } from "../../../design/components/Navigator/native/Navigator.native";
let c4338_5 = {
METHOD_SELECT: "METHOD_SELECT",
VERIFY_AGE: "VERIFY_AGE"
};
const useStyles = createStyles({
headerStyle: {
backgroundColor: Module712.colors.BACKGROUND_BASE_LOWER
}
});
export default function AgeVerificationIncodeModal(props) {
const { webviewUrl, onComplete, onClose } = props;
const styles = useStyles();
const headerTitle = intl.string(t.wJVyYR);
return <Navigator screens={useMemo(() => {
let origin;
const webviewUrl2 = webviewUrl;
const onComplete2 = onComplete;
const onClose2 = onClose;
const handleClose2 = function handleClose() {
onClose2();
ModalActionCreators.pop();
};
origin = new URL(webviewUrl).origin;
const r22 = {};
r22[c4338_5.METHOD_SELECT] = {
headerStyle: styles.headerStyle,
headerTitle: intl.string(t.wJVyYR),
headerLeft: () => <HeaderActionButton onPress={handleClose2} text={intl.string(t.cpT0Cq)} />,
render: (a0, c25983_0) => <AgeVerificationIncodeMethodSelectScreen onClose={handleClose2} trustedOrigin={origin} onMethodSelected={(event) => c25983_0.navigate(c4338_5.VERIFY_AGE, {
injectedJavaScriptBeforeContentLoaded: event
})} />
};
r22[c4338_5.VERIFY_AGE] = {
headerStyle: styles.headerStyle,
headerTitle,
headerLeft: () => <HeaderActionButton onPress={handleClose2} text={intl.string(t.cpT0Cq)} />,
render: (a0) => <AgeVerificationWebViewScreen webviewUrl={webviewUrl2} onComplete={onComplete2} onClose={handleClose2} injectedJavaScriptBeforeContentLoaded={a0.injectedJavaScriptBeforeContentLoaded} />
};
return r22;
}, [styles, webviewUrl, onComplete, onClose, headerTitle])} initialRouteName={c4338_5.METHOD_SELECT} headerBackTitle={intl.string(t["13/7kX"])} />;
};
@@ -0,0 +1,111 @@
// Metro module 7619 (f7620).
import { ScrollView, View } from "react-native";
import { getAgeVerificationGetStartedSteps } from "../AgeVerificationConstants";
import { HelpdeskArticles } from "../../../Constants";
import { SafetyHubLinks } from "../../safety_hub/SafetyHubConstants";
import { createStyles } from "../../../design/components/Styles/native/createStyles";
import Module712 from "../../../_bundle/Module712";
import useSafeAreaInsets_native from "../../safe_area/useSafeAreaInsets.native";
import { useInitiateAgeVerification, getAgeVerificationGetStartedTitle, getAgeVerificationGetStartedSubtitle } from "../AgeVerificationUtils";
import { useIsManualAgeVerificationHidden } from "../HideManualAgeVerificationExperiment";
import { ShieldSpotIllustration } from "../../../design/assets/native";
import { Text } from "../../../design/components/Text/native/Text";
import { TableRowGroup } from "../../../design/components/TableRow/native/TableRowGroup.native";
import SafetyTipsRow from "../../self_mod/shared/native/SafetyTipsRow";
import { intl, t } from "../../../intl/index.native";
import AgeVerificationActionCreators_native from "../AgeVerificationActionCreators.native";
import HelpdeskUtils from "../../../utils/HelpdeskUtils";
import { trackAgeVerificationModalClicked, AgeVerificationModalVersion, AgeVerificationModalCta } from "../AgeVerificationAnalyticsUtils";
import { Button } from "../../../design/components/Button/native/Button.native";
import { LinkExternalSmallIcon } from "../../../design/components/Icon/native/redesign/generated/LinkExternalSmallIcon";
const useStyles = createStyles({
getStartedContainer: {
paddingHorizontal: Module712.space.PX_16,
gap: Module712.space.PX_16,
flex: 1
},
getStartedHeaderContainer: {
alignItems: "center",
gap: Module712.space.PX_8
},
ageGroupLearnMoreContainer: {
alignItems: "center",
marginTop: -Module712.space.PX_8
},
getStartedHeaderText: {
textAlign: "center"
},
getStartedRequestTextContainer: {
alignItems: "center"
},
getStartedFooterContainer: {
paddingHorizontal: Module712.space.PX_16,
paddingTop: Module712.space.PX_48
},
getStartedRequestText: {
textAlign: "center",
marginBottom: Module712.space.PX_16
},
getStartedFooterButtonsContainer: {
gap: Module712.space.PX_8
}
});
export default function GetStartedScreen(props) {
const { modalSessionId, onClose, entryPoint } = props;
const styles = useStyles();
const bottom = useSafeAreaInsets_native().bottom;
const initiateAgeVerification2 = useInitiateAgeVerification({
onComplete: onClose,
entryPoint
});
const { loading, initiateAgeVerification } = initiateAgeVerification2;
const isManualAgeVerificationHidden = useIsManualAgeVerificationHidden("age_verification_get_started_modal");
return <>
<ScrollView>
<View style={styles.getStartedContainer}>
<View style={styles.getStartedHeaderContainer}>
<ShieldSpotIllustration />
<Text variant="heading-xl/bold" color="mobile-text-heading-primary" style={styles.getStartedHeaderText}>
{getAgeVerificationGetStartedTitle(entryPoint)}
</Text>
<Text variant="heading-md/medium" color="text-default" style={styles.getStartedHeaderText}>
{getAgeVerificationGetStartedSubtitle(entryPoint)}
</Text>
</View>
<TableRowGroup hasIcons>
{getAgeVerificationGetStartedSteps(modalSessionId).map(({ title, description }, a1) => <SafetyTipsRow key={a1} index={a1 + 1} tip={<Text variant="text-md/medium" color="mobile-text-heading-primary">{title}</Text>} description={description != null ? <Text variant="text-xs/medium" color="text-subtle">{description}</Text> : null} />)}
</TableRowGroup>
<View style={styles.ageGroupLearnMoreContainer}>
<Text variant="text-xs/medium" color="text-muted">
{intl.format(t["L+FgkZ"], {
handleOnHelpUrlHook: () => {
AgeVerificationActionCreators_native.openUrl(HelpdeskUtils.getArticleURL(HelpdeskArticles.TIGGER_PAWTECT_LEARN_MORE));
trackAgeVerificationModalClicked(modalSessionId, AgeVerificationModalVersion.PRIMARY, AgeVerificationModalCta.LEARN_MORE);
}
})}
</Text>
</View>
</View>
</ScrollView>
<View style={[styles.getStartedFooterContainer, {
paddingBottom: bottom
}]}>
{isManualAgeVerificationHidden ? !isManualAgeVerificationHidden : <View style={styles.getStartedRequestTextContainer}>
<Text variant="text-xs/medium" color="text-muted" style={styles.getStartedRequestText}>
{intl.format(t.pJAxgQ, {
handleOnRequestHook: () => {
AgeVerificationActionCreators_native.openUrl(SafetyHubLinks.APPEALS_LINK);
trackAgeVerificationModalClicked(modalSessionId, AgeVerificationModalVersion.PRIMARY, AgeVerificationModalCta.MANUAL_REVIEW_REQUEST);
}
})}
</Text>
</View>}
<View style={styles.getStartedFooterButtonsContainer}>
<Button variant="primary" size="lg" text={intl.string(t.SJMnkX)} onPress={async () => {
trackAgeVerificationModalClicked(modalSessionId, AgeVerificationModalVersion.PRIMARY, AgeVerificationModalCta.GET_STARTED);
await initiateAgeVerification();
}} icon={<LinkExternalSmallIcon color={Module712.colors.WHITE} />} loading={loading} iconPosition="end" />
</View>
</View>
</>;
};
@@ -0,0 +1,74 @@
// Metro module 7628 (f7629).
import { useEffect } from "react";
import { VerificationMethod } from "../AgeVerificationConstants";
import { SafetyHubLinks } from "../../safety_hub/SafetyHubConstants";
import { createStyles } from "../../../design/components/Styles/native/createStyles";
import Module712 from "../../../_bundle/Module712";
import { useIsSuspendedUser } from "../../safety_hub/SafetyHubUtils";
import MonitoringAgent from "../../monitoring/MonitoringAgent";
import { MetricEvents } from "../../../_bundle/Module5872";
import { Stack } from "../../../design/components/Stack/native/Stack.native";
import { HelpMessage, HelpMessageTypes } from "../../../design/void/native";
import { intl, t } from "../../../intl/index.native";
import { TableRowGroup } from "../../../design/components/TableRow/native/TableRowGroup.native";
import { Text } from "../../../design/components/Text/native/Text";
import AgeAssurance_messages from "../AgeAssurance.messages";
import { ButtonGroup } from "../../../design/components/ButtonGroup/native/ButtonGroup.native";
import { Button } from "../../../design/components/Button/native/Button.native";
import { getAgeVerificationMethods } from "../AgeVerificationURLActionCreators";
import { TableRow } from "../../../design/components/TableRow/native/TableRow.native";
import AgeVerificationActionCreators_native from "../AgeVerificationActionCreators.native";
const useStyles = createStyles({
content: {
marginTop: Module712.space.PX_8
},
errorContainer: {
marginTop: Module712.space.PX_24,
marginBottom: Module712.space.PX_24
},
noMethodsText: {
paddingHorizontal: Module712.space.PX_40,
textAlign: "center"
},
buttonGroup: {
paddingVertical: 0
}
});
export function AgeVerificationMethodsContainer(props) {
const { ageVerificationMethods, modalSessionId } = props;
const styles = useStyles();
const isSuspendedUser = useIsSuspendedUser();
useEffect(() => {
if (ageVerificationMethods == null ? void 0 : ageVerificationMethods.some((ageVerificationMethod) => ageVerificationMethod.id === VerificationMethod.GOOGLE_WALLET)) {
MonitoringAgent.increment({
name: MetricEvents.GOOGLE_WALLET_METHOD_IMPRESSION
});
}
}, [ageVerificationMethods]);
return <Stack spacing={8} align="center">
<Stack spacing={16} style={styles.content}>
<HelpMessage messageType={HelpMessageTypes.INFO} textColor="text-feedback-info" textVariant="text-sm/medium">
{intl.string(t.El4aXl)}
</HelpMessage>
<TableRowGroup hasIcons={false}>
{ageVerificationMethods != null && ageVerificationMethods.length !== 0 ? ageVerificationMethods.map((ageVerificationMethod) => {
return <TableRow key={ageVerificationMethod.id} label={ageVerificationMethod.title} subLabel={ageVerificationMethod.description} onPress={() => ageVerificationMethod.onClick(modalSessionId)} arrow />;
}) : <Stack direction="vertical" align="center" spacing={16} style={styles.errorContainer}>
<Text variant="text-sm/medium" color="text-subtle" style={styles.noMethodsText}>
{intl.string(AgeAssurance_messages.cR6336)}
</Text>
<ButtonGroup style={styles.buttonGroup}>
<Button variant="primary" size="lg" text={intl.string(AgeAssurance_messages.hDvmYP)} onPress={getAgeVerificationMethods} />
</ButtonGroup>
</Stack>}
</TableRowGroup>
</Stack>
{isSuspendedUser && <Text variant="text-xs/medium">
{intl.format(AgeAssurance_messages.htWh1G, {
handleOnHelpUrlHook: () => {
AgeVerificationActionCreators_native.openUrl(SafetyHubLinks.LEARN_MORE_UU_APPEAL_LINK);
}
})}
</Text>}
</Stack>;
}
@@ -0,0 +1,73 @@
// Metro module 6769 (f6770).
import { useCallback, useMemo } from "react";
import { AGE_VERIFICATION_MODAL_KEY } from "../AgeVerificationConstants";
import { useIsSuspendedUser } from "../../safety_hub/SafetyHubUtils";
import { isModalOpen } from "../../main_tabs_v2/helpers/NavigationRouteUtils.native";
import { useWatchAgeVerificationStatusChange } from "../AgeVerificationUtils";
import Module6759 from "../../../_bundle/Module6759";
import { createStyles } from "../../../design/components/Styles/native/createStyles";
import Module712 from "../../../_bundle/Module712";
import ModalActionCreators from "../../../actions/ModalActionCreators";
import { HeaderActionButton } from "../../../design/components/Navigator/native/HeaderActionButton.native";
import { intl, t } from "../../../intl/index.native";
import { Navigator } from "../../../design/components/Navigator/native/Navigator.native";
let c4351_6, useStyles;
const AgeVerifyScreen = function AgeVerifyScreen(props) {
const { webviewUrl: webviewUrl3, onComplete, onClose } = props;
const isSuspendedUser = useIsSuspendedUser();
const callback = useCallback(() => {
onComplete();
onClose();
}, [onComplete, onClose]);
useWatchAgeVerificationStatusChange(useCallback(() => {
if (isModalOpen(AGE_VERIFICATION_MODAL_KEY)) {
callback();
}
}, [callback]));
return <Module6759 allowsInlineMediaPlayback javaScriptEnabled source={{
uri: webviewUrl3
}} onMessage={useCallback((a0) => {
if (a0.nativeEvent.data != null) {
try {
const r16 = typeof a0.nativeEvent.data === "string" ? JSON.parse(a0.nativeEvent.data) : a0.nativeEvent.data;
let r17 = isSuspendedUser;
if (isSuspendedUser) {
r17 = r16?.eventType === "Verification.Result";
}
if (r17) {
callback();
}
} catch ($e) {}
}
}, [callback, isSuspendedUser])} injectedJavaScript={"\n window.addEventListener('message', function(event) {\n window.ReactNativeWebView.postMessage(event.data);\n }, true);\n"} />;
};
c4351_6 = {
VERIFY_AGE: "VERIFY_AGE"
};
useStyles = createStyles({
headerStyle: {
backgroundColor: Module712.colors.BACKGROUND_BASE_LOWER
}
});
export default function AgeVerificationModal(props) {
const { webviewUrl, onComplete: onComplete2, onClose: onClose2 } = props;
const styles = useStyles();
const headerTitle = intl.string(t.wJVyYR);
return <Navigator screens={useMemo(() => {
const webviewUrl2 = webviewUrl;
const onComplete3 = onComplete2;
const onClose3 = onClose2;
const handleClose2 = function handleClose() {
onClose3();
ModalActionCreators.pop();
};
const r9 = {};
r9[c4351_6.VERIFY_AGE] = {
headerStyle: styles.headerStyle,
headerTitle,
headerLeft: () => <HeaderActionButton onPress={handleClose2} text={intl.string(t.cpT0Cq)} />,
render: () => <AgeVerifyScreen webviewUrl={webviewUrl2} onComplete={onComplete3} onClose={handleClose2} />
};
return r9;
}, [styles, webviewUrl, onComplete2, onClose2, headerTitle])} initialRouteName={c4351_6.VERIFY_AGE} headerBackTitle={intl.string(t["13/7kX"])} />;
};
@@ -0,0 +1,10 @@
// Metro module 6767 (f6768).
import { AlertModal, AlertActionButton } from "../../../design/components/AlertModal/native/AlertModal.native";
import { intl, t } from "../../../intl/index.native";
import AgeAssurance_messages from "../AgeAssurance.messages";
import { AlertActions } from "../../../design/components/AlertModal/native/AlertModal.native";
export default function AgeVerificationQuestUnsupportedAlertModal() {
return <AlertModal title={intl.string(AgeAssurance_messages.gUqXQN)} content={intl.string(AgeAssurance_messages.yBHwMy)} actions={<AlertActions>
<AlertActionButton key="got-it" text={intl.string(t["NX+WJN"])} />
</AlertActions>} />;
};
@@ -0,0 +1,107 @@
// Metro module 7624 (f7625).
import { useMemo } from "react";
import { ActivityIndicator, ScrollView, View } from "react-native";
import { HelpdeskArticles } from "../../../Constants";
import { SafetyHubLinks } from "../../safety_hub/SafetyHubConstants";
import { createStyles } from "../../../design/components/Styles/native/createStyles";
import Module712 from "../../../_bundle/Module712";
import { useInitiateAgeVerification } from "../AgeVerificationUtils";
import { AgeVerificationModalEntryPoint, trackAgeVerificationModalClicked, AgeVerificationModalVersion, AgeVerificationModalCta } from "../AgeVerificationAnalyticsUtils";
import { useIsManualAgeVerificationHidden } from "../HideManualAgeVerificationExperiment";
import { intl, t } from "../../../intl/index.native";
import AgeVerificationActionCreators_native from "../AgeVerificationActionCreators.native";
import { isAndroid } from "../../../utils/PlatformUtils";
import { ShieldSpotIllustration } from "../../../design/assets/native";
import { Text } from "../../../design/components/Text/native/Text";
import { TableRowGroup } from "../../../design/components/TableRow/native/TableRowGroup.native";
import { TableRow } from "../../../design/components/TableRow/native/TableRow.native";
import HelpdeskUtils from "../../../utils/HelpdeskUtils";
const useStyles = createStyles({
loadingIndicator: {
position: "absolute",
top: 0,
left: 0,
right: 0,
bottom: 0,
zIndex: 1
},
container: {
paddingHorizontal: Module712.space.PX_16,
flex: 1
},
headerContainer: {
paddingVertical: Module712.space.PX_16,
alignItems: "center",
gap: Module712.space.PX_8
},
centerText: {
textAlign: "center"
},
helpLink: {
marginTop: Module712.space.PX_8
}
});
export default function GetStartedScreen(props) {
const { onClose, modalSessionId } = props;
const styles = useStyles();
const initiateAgeVerification2 = useInitiateAgeVerification({
onComplete: onClose,
entryPoint: AgeVerificationModalEntryPoint.RETRY_MODAL
});
let loading = initiateAgeVerification2.loading;
const initiateAgeVerification = initiateAgeVerification2.initiateAgeVerification;
const isManualAgeVerificationHidden = useIsManualAgeVerificationHidden("age_verification_retry_modal");
const r20 = intl.string(t.JSdbBe);
const r19 = intl.string(t.JNK1ue);
const title = intl.string(t.mFvt9M);
const memo = useMemo(() => {
const r2 = {
title,
description: intl.string(t.ecdUKD),
onPress: null
};
let c26010_0 = async () => {
trackAgeVerificationModalClicked(modalSessionId, AgeVerificationModalVersion.RETRY, AgeVerificationModalCta.GET_STARTED);
await initiateAgeVerification();
};
r2.onPress = function() {
return c26010_0.apply(this, arguments);
};
const r21 = [r2];
if (!isManualAgeVerificationHidden) {
r21.push({
title: intl.string(t["LZO+Hd"]),
description: intl.string(t["ty+iWP"]),
onPress: () => {
AgeVerificationActionCreators_native.openUrl(SafetyHubLinks.APPEALS_LINK);
trackAgeVerificationModalClicked(modalSessionId, AgeVerificationModalVersion.RETRY, AgeVerificationModalCta.MANUAL_REVIEW_REQUEST);
}
});
}
return r21;
}, [initiateAgeVerification, modalSessionId, isManualAgeVerificationHidden, title]);
if (loading) {
loading = <ActivityIndicator style={styles.loadingIndicator} size="small" color={isAndroid() ? Module712.unsafe_rawColors.WHITE : void 0} />;
}
return <>
{loading}
<ScrollView style={styles.container}>
<View style={styles.headerContainer}>
<ShieldSpotIllustration />
<Text variant="heading-xl/bold" color="mobile-text-heading-primary" style={styles.centerText}>{r20}</Text>
<Text variant="heading-md/medium" color="text-strong" style={styles.centerText}>{r19}</Text>
</View>
<TableRowGroup hasIcons={false}>
{memo.map((item, index) => <TableRow key={index} arrow label={item.title} subLabel={item.description} onPress={item.onPress} />)}
</TableRowGroup>
<Text variant="text-xs/medium" color="text-muted" style={[styles.centerText, styles.helpLink]}>
{intl.format(t["L+FgkZ"], {
handleOnHelpUrlHook: () => {
AgeVerificationActionCreators_native.openUrl(HelpdeskUtils.getArticleURL(HelpdeskArticles.TIGGER_PAWTECT_LEARN_MORE));
trackAgeVerificationModalClicked(modalSessionId, AgeVerificationModalVersion.RETRY, AgeVerificationModalCta.LEARN_MORE);
}
})}
</Text>
</ScrollView>
</>;
};
@@ -0,0 +1,188 @@
// Metro module 6758 (f6759).
import { useRef, useState, useCallback, useEffect, useMemo } from "react";
import { View } from "react-native";
import { AGE_VERIFICATION_MODAL_KEY } from "../AgeVerificationConstants";
import { AgeVerificationIncodeResultStatus, buildIncodeFallbackSessionInjection, parseIncodeWebViewMessage } from "../AgeVerificationIncodeWebViewConstants";
import Logger from "../../debug/Logger";
import { createStyles } from "../../../design/components/Styles/native/createStyles";
import Module712 from "../../../_bundle/Module712";
import { isModalOpen } from "../../main_tabs_v2/helpers/NavigationRouteUtils.native";
import { useWatchAgeVerificationStatusChange, isAgeVerified } from "../AgeVerificationUtils";
import { registerIncodeInterview, requestIncodeSessionBootstrap } from "../AgeVerificationURLActionCreators";
import Linking from "../../../lib/native/Linking";
import Module6759 from "../../../_bundle/Module6759";
import { ActivityIndicator } from "../../../design/components/ActivityIndicator/native/ActivityIndicator.native";
let c4343_12 = new Logger("AgeVerificationWebViewScreen");
const useStyles = createStyles({
container: {
flex: 1,
backgroundColor: Module712.colors.BACKGROUND_BASE_LOWEST
},
loadingOverlay: {
position: "absolute",
top: 0,
left: 0,
right: 0,
bottom: 0,
alignItems: "center",
justifyContent: "center",
backgroundColor: Module712.colors.BACKGROUND_BASE_LOWEST
},
webView: {
flex: 1,
backgroundColor: Module712.colors.BACKGROUND_BASE_LOWEST
}
});
export default function AgeVerificationWebViewScreen(props) {
let callback2, callback3, memo;
const { webviewUrl, onComplete, onClose, injectedJavaScriptBeforeContentLoaded } = props;
callback2 = void 0;
callback3 = void 0;
memo = void 0;
const ref = useRef(null);
const ref2 = useRef(false);
const ref3 = useRef(false);
let [state, setState] = useState(true);
const callback = useCallback(() => {
if (!ref3.current) {
ref3.current = true;
setState(false);
}
}, []);
useEffect(() => {
let c25992_0 = setTimeout(() => {
if (!ref3.current) {
c4343_12.warn("WebView initial load timed out", {
timeoutMs: 15000
});
}
callback();
}, 15000);
return () => clearTimeout(c25992_0);
}, [callback]);
callback2 = useCallback(() => {
if (!ref2.current) {
ref2.current = true;
onComplete();
onClose();
}
}, [onComplete, onClose]);
useWatchAgeVerificationStatusChange(useCallback(() => {
if (isModalOpen(AGE_VERIFICATION_MODAL_KEY) && isAgeVerified()) {
callback2();
}
}, [callback2]));
callback3 = useCallback((a0) => {
const current = ref.current;
if (current != null) {
current.injectJavaScript(buildIncodeFallbackSessionInjection(a0));
}
}, []);
const callback4 = useCallback((a0) => {
L14: {
L13: {
L16: {
L11: {
try {
const r10 = parseIncodeWebViewMessage(a0.nativeEvent.data);
if (r10 == null) {
break L14;
}
if (r10.kind === "capture_complete") {
registerIncodeInterview(r10.interviewId).then(() => {
const current = ref2.current;
if (current ? !current : isAgeVerified()) {
callback2();
}
}).catch((a0) => {
c4343_12.warn("Failed to register Incode interview from WebView", {
error: a0
});
});
break L13;
}
if (r10.kind === "fallback_request") {
requestIncodeSessionBootstrap({
previousInterviewId: r10.previousInterviewId
}).then(({ incode_parameters }) => {
if (incode_parameters?.session_token != null && incode_parameters.interview_id != null) {
callback3({
sessionToken: incode_parameters.session_token,
interviewId: incode_parameters.interview_id
});
} else {
callback3({
error: true
});
}
}).catch((a0) => {
c4343_12.warn("Failed to bootstrap Incode fallback session from WebView", {
error: a0
});
callback3({
error: true
});
});
break L11;
}
if (r10.status !== AgeVerificationIncodeResultStatus.COMPLETED) {
if (ref2.current) {
break L16;
}
ref2.current = true;
onClose();
break L16;
}
callback2();
} catch ($e) {
c4343_12.warn("Failed to parse WebView message", {
error: $e
});
break L16;
}
return void 0;
}
return void 0;
}
return void 0;
}
return void 0;
}
}, [callback2, callback3, onClose]);
memo = useMemo(() => new URL(webviewUrl).origin, [webviewUrl]);
const callback5 = useCallback((a0) => {
let origin;
if (a0.isTopFrame != null && !a0.isTopFrame) {
return true;
}
try {
origin = new URL(a0.url).origin;
} catch ($e) {
origin = null;
}
let r19 = origin === memo;
if (!r19) {
Linking.openURL(a0.url);
r19 = false;
}
return r19;
}, [memo]);
const styles = useStyles();
const r80 = [<Module6759 ref={ref} allowsInlineMediaPlayback mediaCapturePermissionGrantType="grant" javaScriptEnabled source={{
uri: webviewUrl
}} onShouldStartLoadWithRequest={callback5} onMessage={callback4} onError={(event) => {
c4343_12.warn("WebView load error", {
code: event.nativeEvent.code
});
callback();
}} onLoadEnd={() => {
callback();
}} injectedJavaScriptBeforeContentLoaded={injectedJavaScriptBeforeContentLoaded} style={styles.webView} containerStyle={styles.webView} />, ,];
if (state) {
state = <View style={styles.loadingOverlay}>
<ActivityIndicator />
</View>;
}
r80[1] = state;
return <View style={styles.container}>{r80}</View>;
};
@@ -0,0 +1,57 @@
// Metro module 16287 (f16288).
import * as _PlayAgeSignals from "./PlayAgeSignals";
import { AgeSignalsVerificationStatus } from "./PlayAgeSignals";
let env11704 = {};
const r14 = {};
r14[AgeSignalsVerificationStatus.VERIFIED] = "VERIFIED";
r14[AgeSignalsVerificationStatus.SUPERVISED] = "SUPERVISED";
r14[AgeSignalsVerificationStatus.SUPERVISED_APPROVAL_PENDING] = "SUPERVISED_APPROVAL_PENDING";
r14[AgeSignalsVerificationStatus.SUPERVISED_APPROVAL_DENIED] = "SUPERVISED_APPROVAL_DENIED";
r14[AgeSignalsVerificationStatus.UNKNOWN] = "UNKNOWN";
r14[AgeSignalsVerificationStatus.DECLARED] = "DECLARED";
const c11704_3 = r14;
const c11704_4 = Object.fromEntries(Object.entries(r14).map((item) => {
const [r22, r23] = item;
return [r23, Number(r22)];
}));
const r56 = {
getAgeSignals: async () => {
const toAppStoreAgeCheck2 = function toAppStoreAgeCheck(a0) {
return {
platform: "android",
ageLower: a0.ageLower,
ageUpper: a0.ageUpper,
googleUserStatus: a0.userStatus == null ? void 0 : c11704_3[a0.userStatus]
};
};
return toAppStoreAgeCheck2(await _PlayAgeSignals.getAgeSignals());
},
getIsConsideredOlderThan: async (c22951_0, c22951_1) => {
let isConsideredOlderThan;
let c28324_0, c28324_1;
L13: {
let env31024;
c28324_1 = void 0;
const r13 = env31024 = {
$parent: env11704
};
c28324_0 = r13;
env31024[0] = void 0;
if (c22951_1 != null) {
env31024[0] = (function toPlayAgeSignals(a0) {
return {
userStatus: a0.googleUserStatus == null ? void 0 : c11704_4[a0.googleUserStatus],
ageLower: a0.ageLower,
ageUpper: a0.ageUpper
};
})(c22951_1);
isConsideredOlderThan = _PlayAgeSignals.isConsideredOlderThan(env31024[0], c22951_0);
break L13;
}
env31024[0] = await _PlayAgeSignals.getAgeSignals();
return _PlayAgeSignals.isConsideredOlderThan(env31024[0], c22951_0);
}
return isConsideredOlderThan;
}
};
export default r56;
@@ -0,0 +1,179 @@
// Metro module 7616 (f7617).
import { useState, useCallback, useRef, useEffect } from "react";
import { ActivityIndicator } from "react-native";
import { jsxs } from "react/jsx-runtime";
import { useNavigation } from "../../../design/components/Navigator/native/useNavigation.native";
import { useWatchAgeVerificationStatusChange } from "../AgeVerificationUtils";
import { requestGoogleWalletVerification, getGoogleWalletCredential, verifyGoogleWalletCredential } from "../GoogleWalletActionCreators.native";
import MonitoringAgent from "../../monitoring/MonitoringAgent";
import { MetricEvents } from "../../../_bundle/Module5872";
import { intl } from "../../../intl/index.native";
import AgeAssurance_messages from "../AgeAssurance.messages";
import { ModalScreen } from "../../../design/components/Modal/native/ModalScreen.native";
import { ModalContent } from "../../../design/components/Modal/native/ModalContent.native";
import { Stack } from "../../../design/components/Stack/native/Stack.native";
import { Text } from "../../../design/components/Text/native/Text";
import { ButtonGroup } from "../../../design/components/ButtonGroup/native/ButtonGroup.native";
import { Button } from "../../../design/components/Button/native/Button.native";
import { trackAgeVerificationModalClicked, AgeVerificationModalVersion, AgeVerificationModalCta } from "../AgeVerificationAnalyticsUtils";
function $mk115044($env) {
return function getFailureReason(a0) {
const status = a0?.status;
let r3 = "rate_limited";
if (status !== 429) {
const r10 = a0?.code != null;
let r11 = "unknown";
if (r10) {
const code = a0.code;
r11 = code in c4778_9 ? c4778_9[a0.code] : "unknown";
}
r3 = r11;
}
return r3;
};
}
let env4778 = {};
const c4778_9 = {
NOT_AVAILABLE: "not_available",
FAILED: "credential_error"
};
export default function GoogleWalletVerificationScreen(props) {
let callback2, ref;
const { onClose, modalSessionId } = props;
callback2 = void 0;
ref = void 0;
const navigation = useNavigation();
const [state, setState] = useState({
type: "loading"
});
useWatchAgeVerificationStatusChange(onClose);
const callback = useCallback(() => {
navigation.goBack();
}, [navigation]);
callback2 = useCallback(async () => {
let c26006_0, c26006_1, c26006_2;
let c26006_3 = 0;
const r17 = void 0;
const r16 = env4778;
L14: {
try {
let env29842;
c26006_1 = r17;
const r39 = env29842 = {
$parent: r16
};
c26006_0 = r39;
env29842[0] = void 0;
env29842[1] = void 0;
env29842[2] = void 0;
env29842[3] = void 0;
c26006_3 = 1;
env29842[0] = (await requestGoogleWalletVerification()).request_json;
env29842[1] = await getGoogleWalletCredential(env29842[0]);
await verifyGoogleWalletCredential(env29842[1]);
c26006_3 = 0;
} catch ($e) {
const r37 = $e;
let r7 = r37;
c26006_2 = r37;
if (c26006_3 !== 0) {
while (true) {
L32: {
try {
const r138 = c26006_2;
c26006_3 = 0;
env29842[2] = r138;
if (env29842[2]?.code === "CANCELLED") {
MonitoringAgent.increment({
name: MetricEvents.GOOGLE_WALLET_VERIFICATION_FAILED,
tags: ["reason:user_cancelled"]
});
(0, callback)();
break L32;
}
const r160 = env29842[2];
if ((r160 == null ? void 0 : r160.body?.reason) !== "unsupported_issuing_country") {
const r198 = env29842[2];
env29842[3] = $mk115044(env4778)(r198);
MonitoringAgent.increment({
name: MetricEvents.GOOGLE_WALLET_VERIFICATION_FAILED,
tags: [`reason:${env29842[3]}`]
});
(0, setState)({
type: "error",
message: intl.string(AgeAssurance_messages["+pwfOA"])
});
break L14;
}
MonitoringAgent.increment({
name: MetricEvents.GOOGLE_WALLET_VERIFICATION_FAILED,
tags: ["reason:unsupported_issuing_country"]
});
(0, setState)({
type: "error",
message: intl.string(AgeAssurance_messages.Pf5xUq)
});
} catch (r135) {
r7 = r135;
c26006_2 = r135;
if (c26006_3 === 0) {
break;
}
continue;
}
return void 0;
}
return void 0;
}
}
throw r7;
}
}
}, [callback]);
ref = useRef(false);
useEffect(() => {
let c26007_1;
let c26007_0 = navigation.addListener("transitionEnd", (a0) => {
if (!(ref.current || a0.data.closing === true)) {
ref.current = true;
callback2();
}
});
c26007_1 = setTimeout(() => {
if (!ref.current) {
ref.current = true;
callback2();
}
}, 1000);
return () => {
c26007_0();
clearTimeout(c26007_1);
};
}, [navigation, callback2]);
return state.type === "loading" ? <ModalScreen>
<ModalContent>
{(0, jsxs)(Stack, {
align: "center",
justify: "center",
spacing: 16,
children: [<ActivityIndicator size="large" />, <Text variant="text-md/medium" color="text-strong">
{intl.string(AgeAssurance_messages.MlFuBI)}
</Text>]
})}
</ModalContent>
</ModalScreen> : <ModalScreen>
<ModalContent>
{(0, jsxs)(Stack, {
align: "center",
justify: "center",
spacing: 16,
children: [<Text variant="text-md/medium" color="text-strong">{state.message}</Text>, <ButtonGroup>
<Button variant="primary" size="lg" text={intl.string(AgeAssurance_messages.fEUKEv)} onPress={() => {
trackAgeVerificationModalClicked(modalSessionId, AgeVerificationModalVersion.EXPRESSIVE_PRIMARY, AgeVerificationModalCta.METHOD_SELECT);
callback();
}} />
</ButtonGroup>]
})}
</ModalContent>
</ModalScreen>;
};
@@ -0,0 +1,19 @@
// Metro module 16286 (f16287).
import { createApexExperiment } from "../../experiments/apex/index";
const apexExperiment = createApexExperiment({
kind: "user",
name: "2026-07-native-app-store-age-signals",
defaultConfig: {
enabled: false
},
variations: {
1: {
enabled: true
}
}
});
export function isNativeAppStoreAgeSignalsEnabled(a0) {
return apexExperiment.getConfig({
location: a0
}).enabled;
}
@@ -0,0 +1,19 @@
// Metro module 16285 (f16286).
import { createApexExperiment } from "../../experiments/apex/index";
const apexExperiment = createApexExperiment({
kind: "user",
name: "2026-01-age-and-parental-consent-check",
defaultConfig: {
enabled: false
},
variations: {
1: {
enabled: true
}
}
});
export function isParentalConsentCheckEnabled(a0) {
return apexExperiment.getConfig({
location: a0
}).enabled;
}
@@ -0,0 +1,122 @@
// Metro module 16284 (f16285).
import UserStore from "../../../stores/UserStore";
import { AnalyticEvents } from "../../../Constants";
import { isMetaQuest } from "../../device/MetaQuestUtils.android";
import { getIsRunningOnSimulator, getSystemVersion } from "../../../utils/native/DeviceUtils";
import { isIOS, getNativePlatform } from "../../../utils/PlatformUtils";
import AutomaticLifecycleManager from "../../../lib/AutomaticLifecycleManager";
import { isParentalConsentCheckEnabled } from "./ParentalConsentExperiment";
import { isNativeAppStoreAgeSignalsEnabled } from "./NativeAppStoreAgeSignalsExperiment";
import * as _AppStoreAgeAssurance_android from "./AppStoreAgeAssurance.android";
import { setAgeRangeThresholds, getIsConsideredOlderThan } from "../../../_bundle/getAndroidPlayAgeRangeStatus";
import { HTTP } from "../../../_bundle/sendRequest";
import AnalyticsUtils from "../../../utils/AnalyticsUtils";
import SentryUtils_native from "../../../utils/SentryUtils.native";
let c11701_6 = 26;
let c11701_7 = 2;
class ParentalConsentManager extends AutomaticLifecycleManager {
actions = {
POST_CONNECTION_OPEN: () => this.onPostConnectionOpen()
};
async onPostConnectionOpen() {
const _this = this;
L14: {
L13: {
if (!isParentalConsentCheckEnabled("ParentalConsentManager")) {
break L14;
}
if (UserStore.getCurrentUser() != null && (function isPlatformSupported() {
if (isMetaQuest()) {
return false;
}
if (getIsRunningOnSimulator()) {
return false;
}
const r23 = getSystemVersion().split(".");
const r26 = parseInt(r23[0], 10);
const r27 = parseInt;
let r28 = r23[1];
if (r28 == null) {
r28 = "0";
}
const r29 = r27(r28, 10);
return isIOS() ? r26 > c11701_6 || r26 === c11701_6 && r29 >= c11701_7 : r26 >= 35;
})()) {
await _this.performAgeCheck();
break L13;
}
break L14;
}
return void 0;
}
}
async performAgeCheck() {
let c28322_2;
let c28322_3 = 0;
let c31023_0, c31023_1, c31023_2, c31023_3, c31023_4;
L17: {
try {
c31023_0 = void 0;
c31023_1 = void 0;
c31023_2 = void 0;
c31023_3 = void 0;
c28322_3 = 1;
if (isNativeAppStoreAgeSignalsEnabled("ParentalConsentManager")) {
c31023_1 = _AppStoreAgeAssurance_android.default;
c31023_2 = await _AppStoreAgeAssurance_android.default.getAgeSignals({
firstAgeGate: 18
});
c31023_0 = await c31023_1.getIsConsideredOlderThan(18, c31023_2);
} else {
if (isIOS()) {
setAgeRangeThresholds([18]);
}
c31023_0 = await getIsConsideredOlderThan(18);
}
c31023_3 = (await HTTP.post({
url: "/users/@me/parental-consent-status",
body: {
platform: getNativePlatform(),
parental_consent: c31023_0
},
rejectWithError: true
})).body.should_block;
AnalyticsUtils.track(AnalyticEvents.PARENTAL_CONSENT_CHECKED, {
eligible: c31023_0,
should_block: c31023_3,
platform: getNativePlatform()
});
c28322_3 = 0;
} catch ($e) {
const r37 = $e;
let r8 = r37;
c28322_2 = r37;
if (c28322_3 !== 0) {
while (true) {
try {
const r190 = c28322_2;
c28322_3 = 0;
c31023_4 = r190;
SentryUtils_native.captureException(c31023_4, {
tags: {
source: "parental_consent_manager",
step: "perform_age_check"
}
});
break L17;
} catch (r186) {
r8 = r186;
c28322_2 = r186;
if (c28322_3 === 0) {
break;
}
}
}
}
throw r8;
}
}
}
}
const parentalConsentManager = new ParentalConsentManager();
export default parentalConsentManager;
@@ -0,0 +1,30 @@
// Metro module 16288 (f16289).
import Module16289 from "../../../_bundle/Module16289";
let c11705_3 = {
VERIFIED: 0,
SUPERVISED: 1,
SUPERVISED_APPROVAL_PENDING: 2,
SUPERVISED_APPROVAL_DENIED: 3,
UNKNOWN: 4,
DECLARED: 5
};
export { c11705_3 as AgeSignalsVerificationStatus };
export async function getAgeSignals() {
if (Module16289 == null) {
throw new Error("NativePlayAgeSignalsModule is not available on this platform");
}
return await Module16289.getAgeSignals();
}
export function isConsideredOlderThan(a0, a1) {
if (a0.userStatus == null) {
return true;
}
const userStatus = a0.userStatus;
if (c11705_3.VERIFIED === userStatus) {
return true;
}
if (c11705_3.SUPERVISED !== userStatus && c11705_3.SUPERVISED_APPROVAL_PENDING !== userStatus && c11705_3.SUPERVISED_APPROVAL_DENIED !== userStatus) {
return false;
}
return a0.ageLower != null && a0.ageLower >= a1;
}