63 lines
1.7 KiB
TypeScript
63 lines
1.7 KiB
TypeScript
import {
|
|
ageAssuranceRuleIDs as ids,
|
|
type AppBskyAgeassuranceDefs,
|
|
} from '@atproto/api'
|
|
|
|
import {AgeAssuranceAccess} from '#/ageAssurance/types'
|
|
import {
|
|
ANDROID_API_LEVEL,
|
|
IOS_MAJOR_VERSION,
|
|
IS_ANDROID,
|
|
IS_IOS,
|
|
IS_WEB,
|
|
} from '#/env'
|
|
|
|
/**
|
|
* Minimum age required to access the app at all.
|
|
*/
|
|
export const MIN_ACCESS_AGE = 13
|
|
|
|
/**
|
|
* The identifier for the current platform, matching the `knownValues` of the
|
|
* `platforms` property on `app.bsky.ageassurance.defs#configRegion`. Used to
|
|
* filter out region configs that don't apply to this platform.
|
|
*/
|
|
export const AGE_ASSURANCE_PLATFORM: 'web' | 'ios' | 'android' = IS_WEB
|
|
? 'web'
|
|
: IS_IOS
|
|
? 'ios'
|
|
: 'android'
|
|
|
|
/**
|
|
* Whether the current device can provide the native on-device age signals we
|
|
* use for age assurance (via `expo-age-range`). We gate on OS version because
|
|
* the underlying platform APIs are only available on:
|
|
*
|
|
* - iOS 26.0+ (Declared Age Range API)
|
|
* https://developer.apple.com/documentation/declaredagerange/
|
|
* - Android 6.0 / API level 23+ (Play Age Signals API)
|
|
* https://developer.android.com/google/play/age-signals/use-age-signals-api
|
|
*
|
|
* On unsupported platforms/versions (including web) this is `false`, so we skip
|
|
* the device flow and fall back to KWS.
|
|
*/
|
|
export const DEVICE_SIGNALS_SUPPORTED: boolean =
|
|
(IS_IOS && IOS_MAJOR_VERSION >= 26) || (IS_ANDROID && ANDROID_API_LEVEL >= 23)
|
|
|
|
export const FALLBACK_REGION_CONFIG: AppBskyAgeassuranceDefs.ConfigRegion = {
|
|
countryCode: '*',
|
|
regionCode: undefined,
|
|
minAccessAge: MIN_ACCESS_AGE,
|
|
rules: [
|
|
{
|
|
$type: ids.IfDeclaredOverAge,
|
|
age: MIN_ACCESS_AGE,
|
|
access: AgeAssuranceAccess.Full,
|
|
},
|
|
{
|
|
$type: ids.Default,
|
|
access: AgeAssuranceAccess.None,
|
|
},
|
|
],
|
|
}
|