1import { ConfigPlugin, createRunOncePlugin } from '@expo/config-plugins';
2
3const pkg = require('expo-tracking-transparency/package.json');
4
5export const DEFAULT_NSUserTrackingUsageDescription =
6  'Allow this app to collect app-related data that can be used for tracking you or your device.';
7
8const withTrackingTransparency: ConfigPlugin<{
9  /**
10   * Sets the iOS `NSUserTrackingUsageDescription` permission message in `Info.plist`. Omitting a
11   * description will result in using the default permission message.
12   * @default 'Allow this app to collect app-related data that can be used for tracking you or your
13   * device.'
14   */
15  userTrackingPermission?: string;
16} | void> = (config, props) => {
17  config = withUserTrackingPermission(config, props);
18  return config;
19};
20
21export const withUserTrackingPermission: ConfigPlugin<{
22  userTrackingPermission?: string;
23} | void> = (config, { userTrackingPermission } = {}) => {
24  if (!config.ios) config.ios = {};
25  if (!config.ios.infoPlist) config.ios.infoPlist = {};
26  config.ios.infoPlist.NSUserTrackingUsageDescription =
27    userTrackingPermission ||
28    config.ios.infoPlist.NSUserTrackingUsageDescription ||
29    DEFAULT_NSUserTrackingUsageDescription;
30
31  return config;
32};
33
34export default createRunOncePlugin(withTrackingTransparency, pkg.name, pkg.version);
35