1*435bbba8SBrent Vatneimport { ConfigPlugin, createRunOncePlugin } from 'expo/config-plugins';
245f57828SCharlie Cruzan
345f57828SCharlie Cruzanconst pkg = require('expo-tracking-transparency/package.json');
445f57828SCharlie Cruzan
545f57828SCharlie Cruzanexport const DEFAULT_NSUserTrackingUsageDescription =
645f57828SCharlie Cruzan  'Allow this app to collect app-related data that can be used for tracking you or your device.';
745f57828SCharlie Cruzan
83a421c96SJames Ideconst withTrackingTransparency: ConfigPlugin<
93a421c96SJames Ide  {
1045f57828SCharlie Cruzan    /**
1145f57828SCharlie Cruzan     * Sets the iOS `NSUserTrackingUsageDescription` permission message in `Info.plist`. Omitting a
1245f57828SCharlie Cruzan     * description will result in using the default permission message.
1345f57828SCharlie Cruzan     * @default 'Allow this app to collect app-related data that can be used for tracking you or your
1445f57828SCharlie Cruzan     * device.'
1545f57828SCharlie Cruzan     */
1645f57828SCharlie Cruzan    userTrackingPermission?: string;
173a421c96SJames Ide  } | void
183a421c96SJames Ide> = (config, props) => {
1945f57828SCharlie Cruzan  config = withUserTrackingPermission(config, props);
2045f57828SCharlie Cruzan  return config;
2145f57828SCharlie Cruzan};
2245f57828SCharlie Cruzan
233a421c96SJames Ideexport const withUserTrackingPermission: ConfigPlugin<
243a421c96SJames Ide  {
2545f57828SCharlie Cruzan    userTrackingPermission?: string;
263a421c96SJames Ide  } | void
273a421c96SJames Ide> = (config, { userTrackingPermission } = {}) => {
2845f57828SCharlie Cruzan  if (!config.ios) config.ios = {};
2945f57828SCharlie Cruzan  if (!config.ios.infoPlist) config.ios.infoPlist = {};
3045f57828SCharlie Cruzan  config.ios.infoPlist.NSUserTrackingUsageDescription =
3145f57828SCharlie Cruzan    userTrackingPermission ||
3245f57828SCharlie Cruzan    config.ios.infoPlist.NSUserTrackingUsageDescription ||
3345f57828SCharlie Cruzan    DEFAULT_NSUserTrackingUsageDescription;
3445f57828SCharlie Cruzan
3545f57828SCharlie Cruzan  return config;
3645f57828SCharlie Cruzan};
3745f57828SCharlie Cruzan
3845f57828SCharlie Cruzanexport default createRunOncePlugin(withTrackingTransparency, pkg.name, pkg.version);
39