/* Metro module 11997; source: modules/contact_sync/native/ContactSyncUtils.tsx; dependencies: [5, 27, 5040, 11996, 11995, 661, 478, 5046, 480, 694, 11998, 3829, 1216, 566, 1391, 1948, 3853, 5080, 2] */ function _fun92150(global, require, importDefault, importAll, module, exports, dependencyMap) { // fn#92150, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:12183:6, offset: 0x0207e29e, size: 624 bytes, params: 8, frame: 23 const env0_0 = require; const closure = isContactSyncEnabled; const closure2 = function() { return importDefault(dependencyMap[15]).getArticleURL(HelpdeskArticles.CONTACT_SYNC); }; const Object = global.Object; Object.defineProperty(exports, '__esModule', {value: true}); const env0_3 = importDefault(5) /* metro dependency 5 */; const env0_4 = (require(27) /* metro dependency 27 */).NativeModules; const connectedAccountsStore = importDefault(5040) /* metro dependency 5040: ConnectedAccountsStore */; let value = require(11996) /* metro dependency 11996: ContactSyncPersistedStore */; const env0_6 = value.useContactSyncStore; const env0_7 = value.clearDismissState; const env0_8 = value.deleteStoredContacts; value = require(11995) /* metro dependency 11995: ContactSyncConstants */; const env0_9 = value.CONTACT_SYNC_MODAL_KEY; const env0_10 = value.ContactPermissions; const env0_11 = value.ContactSyncSuggestionsSetting; value = require(661) /* metro dependency 661: Constants */; const env0_12 = value.Endpoints; const env0_13 = value.PlatformTypes; const env0_14 = value.FriendDiscoveryFlags; const env0_15 = value.HelpdeskArticles; let Error = global.Error; let error = new Error('No contact permissions'); Error = global.Error; error = new Error('No phone number'); Error = global.Error; error = new Error('Failed to fetch contact image'); const closure3 = isContactSyncAvailable; const value6 = _fun92154(); (require(2) /* metro dependency 2 */).fileFinishedImporting('modules/contact_sync/native/ContactSyncUtils.tsx'); exports.ContactSyncPermissionDenied = error; exports.ContactSyncFailedUserHasNoPhone = error; exports.ContactImageFetchFailed = error; exports.isContactSyncAvailable = closure3; exports.checkContactPermissions = checkContactPermissions; exports.uploadContacts = value6; exports.bulkAddFriends = bulkAddFriends; exports.adminDeleteContactSync = adminDeleteContactSync; exports.getImageForContactId = getImageForContactId; exports.getContacts = getContacts; exports.getStoredContacts = getStoredContacts; exports.useContactSyncAccount = function() { return require(dependencyMap[13]).useStateFromStores([ConnectedAccountsStore], _fun92172); }; exports.useContactSyncEnabled = function() { return require(dependencyMap[13]).useStateFromStores([ConnectedAccountsStore], _fun92174); }; exports.useContactSyncUserIsDiscoverable = useContactSyncUserIsDiscoverable; exports.isContactSyncEnabled = closure; exports.getOpenLearnMoreUrl = closure2; exports.handleOpenLearnMoreLink = function() { importDefault(dependencyMap[16]).openURL(getOpenLearnMoreUrl()); }; exports.transitionToAddFriendsLandingPage = function() { importDefault(dependencyMap[17]).popWithKey(CONTACT_SYNC_MODAL_KEY); }; } function isContactSyncEnabled(a0) { // fn#92151, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:12183:1173, offset: 0x0207e50e, size: 45 bytes, params: 2, frame: 3 return a0 != null && a0.friendSync && a0.type === PlatformTypes.CONTACTS; } function isContactSyncAvailable() { // fn#92153, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:12183:542, offset: 0x0207e56b, size: 88 bytes, params: 1, frame: 13 const value2 = undefined; const isIOS2 = (require(478) /* metro dependency 478: PlatformUtils */).isIOS(); return isIOS2 ? !!isIOS2 : (NativeModules.DCDContactSyncManager == null ? value2 : NativeModules.DCDContactSyncManager.isContactSyncSupported) ?? (NativeModules.DCDContactSyncManager == null ? value2 : NativeModules.DCDContactSyncManager.isContactSyncSupported) != null; } function _fun92154() { // fn#92154, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:12183:662, offset: 0x0207e5c3, size: 36 bytes, params: 1, frame: 12 const env0_0 = env0_3(_fun92156); return _fun92158; } function checkContactPermissions() { // fn#92159, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:12183:1591, offset: 0x0207e749, size: 70 bytes, params: 1, frame: 12 return isContactSyncAvailable() ? NativeModules.DCDContactSyncManager.hasContactsPermissions() : global.Promise.resolve(ContactPermissions.UNAUTHORIZED); } function bulkAddFriends(a0, a1) { // fn#92160, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:12183:1739, offset: 0x0207e78f, size: 141 bytes, params: 3, frame: 16 const defaultImport = importDefault(5046) /* metro dependency 5046: TrackedHTTPUtils */; const post = defaultImport.post; const object2 = {}; const USER_BULK_RELATIONSHIPS = Endpoints.USER_BULK_RELATIONSHIPS; object2.url = USER_BULK_RELATIONSHIPS; object2.body = {user_ids: a0, token: a1}; const NetworkActionNames = (require(480) /* metro dependency 480: AnalyticsUtils */).NetworkActionNames; const USER_BULK_RELATIONSHIPS_UPDATE = NetworkActionNames.USER_BULK_RELATIONSHIPS_UPDATE; object2.trackedActionData = {event: USER_BULK_RELATIONSHIPS_UPDATE}; object2.rejectWithError = false; return Reflect.apply(post, defaultImport, [object2]).then(function(a0) { return a0.body; }); } function adminDeleteContactSync() { // fn#92162, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:12183:1965, offset: 0x0207e81c, size: 195 bytes, params: 1, frame: 20 clearDismissState(); deleteStoredContacts(); (require(11998) /* metro dependency 11998: ContactSyncManager */).removeLastUserContactsUpload(); const ContactSyncEnabled = (require(3829) /* metro dependency 3829: UserSettings */).ContactSyncEnabled; ContactSyncEnabled.updateSetting(false); const defaultImport = importDefault(5046) /* metro dependency 5046: TrackedHTTPUtils */; const object2 = {}; const CONNECTION = Endpoints.CONNECTION; const CONTACTS = PlatformTypes.CONTACTS; object2.url = Reflect.apply(CONNECTION, Endpoints, [CONTACTS, '@me']); object2.oldFormErrors = true; const NetworkActionNames = (require(480) /* metro dependency 480: AnalyticsUtils */).NetworkActionNames; const USER_CONNECTIONS_UPDATE = NetworkActionNames.USER_CONNECTIONS_UPDATE; object2.trackedActionData = {event: USER_CONNECTIONS_UPDATE}; object2.rejectWithError = false; return defaultImport.delete(object2); } function getImageForContactId(a0) { // fn#92163, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:12183:2255, offset: 0x0207e8df, size: 63 bytes, params: 2, frame: 11 const env0_0 = a0; const env0_1 = NativeModules.DCDContactSyncManager; const Promise = global.Promise; const value = Object.create(Promise.prototype, {constructor: {value: Promise}}); const promise = new Promise(_fun92164); return promise instanceof Object ? promise : value; } function getContacts(a0) { // fn#92166, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:12183:2420, offset: 0x0207e9a2, size: 84 bytes, params: 2, frame: 12 let value = a1; const env0_0 = a0; const env0_1 = value !== undefined ? value : ''; const env0_2 = NativeModules.DCDContactSyncManager; const Promise = global.Promise; value = Object.create(Promise.prototype, {constructor: {value: Promise}}); const promise = new Promise(function(a0, a1) { DCDContactSyncManager.syncContacts(a1, a0, _fun92168); }); return promise instanceof Object ? promise : value; } function getStoredContacts() { // fn#92170, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:12183:2742, offset: 0x0207eaf5, size: 87 bytes, params: 1, frame: 14 var r0; var JSON; var value2; var error; let value = environment; const getState = useContactSyncStore.getState; try { JSON = global.JSON; value2 = JSON.parse(Reflect.apply(getState, useContactSyncStore, []).storedContacts); r0 = value2; } catch (error) { value = importDefault(1216) /* metro dependency 1216: SentryUtilsNative */; value.captureException(error); r0 = {}; } return r0; } function useContactSyncAccount() { // fn#92171, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:12183:2903, offset: 0x0207eb4c, size: 59 bytes, params: 1, frame: 13 return (require(566) /* metro dependency 566: flux */).useStateFromStores([ConnectedAccountsStore], function() { return ConnectedAccountsStore.getLocalAccount(PlatformTypes.CONTACTS); }); } function useContactSyncEnabled() { // fn#92173, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:12183:3038, offset: 0x0207eba5, size: 59 bytes, params: 1, frame: 13 return (require(566) /* metro dependency 566: flux */).useStateFromStores([ConnectedAccountsStore], _fun92174); } function useContactSyncUserIsDiscoverable() { // fn#92175, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:12183:3206, offset: 0x0207ec09, size: 127 bytes, params: 1, frame: 18 const FriendDiscoverySettings = (require(3829) /* metro dependency 3829: UserSettings */).FriendDiscoverySettings; const value2 = FriendDiscoverySettings.useSetting(); const flagUtilsModule = require(1391) /* metro dependency 1391: FlagUtils */; let hasFlag = flagUtilsModule.hasFlag; const FIND_BY_PHONE = FriendDiscoveryFlags.FIND_BY_PHONE; const value = Reflect.apply(hasFlag, flagUtilsModule, [value2, FIND_BY_PHONE]); const moduleValue2 = flagUtilsModule; hasFlag = moduleValue2.hasFlag; const FIND_BY_EMAIL = FriendDiscoveryFlags.FIND_BY_EMAIL; const hasFlag2 = Reflect.apply(hasFlag, moduleValue2, [value2, FIND_BY_EMAIL]); return {phone: value, email: hasFlag2, any: value || hasFlag2}; } async function _fun92156(a0) { // fn#92156, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:12183:682, offset: 0x0207e5fb, size: 269 bytes, params: 2, frame: 21 let value = a1; if (false) { return undefined; } const r8 = value !== undefined ? value : false; await undefined; if (false) { return undefined; } const JSON = global.JSON; value = JSON.parse(a0); const binding = env2_1; const binding2 = env2_2; const value6 = binding(binding2[7]); const put = value6.put; const object2 = {}; const CONNECTION_SYNC_CONTACTS = env2_12.CONNECTION_SYNC_CONTACTS; object2.url = CONNECTION_SYNC_CONTACTS; const ANYONE_WITH_CONTACT_INFO = env2_11.ANYONE_WITH_CONTACT_INFO; object2.body = {friend_list_entries: value, background: r8, allowed_in_suggestions: ANYONE_WITH_CONTACT_INFO, include_mutual_friends_count: false}; const NetworkActionNames = env2_0(binding2[8]).NetworkActionNames; const USER_CONTACTS_SYNC = NetworkActionNames.USER_CONTACTS_SYNC; object2.trackedActionData = {event: USER_CONTACTS_SYNC}; object2.rejectWithError = false; await Reflect.apply(put, value6, [object2]); value = undefined; if (false) { return value; } const body = value.body; env2_1(env2_2[9]).wait(_fun92157); return body; } function _fun92164(a0, a1) { // fn#92164, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:12183:2309, offset: 0x0207e91e, size: 50 bytes, params: 3, frame: 13 const env0_0 = a0; const env0_1 = a1; DCDContactSyncManager.getImageForContactId(env0_0, _fun92165); } function _fun92167(a0, a1) { // fn#92167, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:12183:2481, offset: 0x0207e9f6, size: 55 bytes, params: 3, frame: 15 DCDContactSyncManager.syncContacts(a1, a0, _fun92168); } function _fun92174() { // fn#92174, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:12183:3111, offset: 0x0207ebe0, size: 41 bytes, params: 1, frame: 12 const value = environment.__proto__; const isContactSyncEnabledBinding = isContactSyncEnabled; const getLocalAccount = ConnectedAccountsStore.getLocalAccount; const CONTACTS = PlatformTypes.CONTACTS; return isContactSyncEnabledBinding(Reflect.apply(getLocalAccount, ConnectedAccountsStore, [CONTACTS])); } function _fun92157() { // fn#92157, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:12183:1017, offset: 0x0207e708, size: 65 bytes, params: 1, frame: 12 const value = environment.__proto__.__proto__.__proto__; return env3_1(env3_2[9]).dispatch({type: 'LOAD_FRIEND_SUGGESTIONS_SUCCESS', suggestions: body.friend_suggestions}); } function _fun92165(a0, a1) { // fn#92165, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:12183:2343, offset: 0x0207e950, size: 82 bytes, params: 3, frame: 14 var value; if (a0 == null) { env0_0(a1.replace(RegExp('(\\r\\n|\\n|\\r)', 'gm'), '')); } else { value = environment.__proto__.__proto__; require(env2_17); } } function _fun92168(a0, a1, a2) { // fn#92168, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:12183:2509, offset: 0x0207ea2d, size: 178 bytes, params: 4, frame: 18 var environment; var r2; var unencryptedName; var value4; var JSON; var value5; var error; var value7; const value = undefined; const value2 = null; if (value2 == a0) { try { JSON = global.JSON; value5 = JSON.parse(a1); r2 = value5; } catch (error) { r2 = {}; } value7 = global.Object.values(r2).find(_fun92169); unencryptedName = value2 == value7 ? value : value7.unencryptedName; env0_0({names: a1, ownName: value2 != unencryptedName ? unencryptedName : value2, payload: a2}); } else { value4 = environment.__proto__.__proto__; require(env2_16); } return value; } function _fun92169({phone}) { // fn#92169, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:12183:2615, offset: 0x0207eadf, size: 22 bytes, params: 2, frame: 2 return phone === env2_0; }