/* Metro module 13021; source: modules/rpc/server/commands/channels.tsx; dependencies: [1383, 1379, 1867, 3784, 1934, 4297, 4135, 661, 4122, 8076, 8081, 22, 13018, 8079, 4796, 4800, 1230, 8879, 2] */ function _fun99387(global, require, importDefault, importAll, module, exports, dependencyMap) { // fn#99387, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:13211:6, offset: 0x021c674d, size: 822 bytes, params: 8, frame: 25 var object2; let env0_0 = require; const Object = global.Object; Object.defineProperty(exports, '__esModule', {value: true}); let value = require(1383) /* metro dependency 1383: ChannelRecord */; const env0_3 = value.isVoiceChannel; const env0_4 = value.isTextChannel; const channelStore = importDefault(1379) /* metro dependency 1379: ChannelStore */; const guildStore = importDefault(1867) /* metro dependency 1867: GuildStore */; const permissionStore = importDefault(3784) /* metro dependency 3784: PermissionStore */; const selectedChannelStore = importDefault(1934) /* metro dependency 1934: SelectedChannelStore */; const voiceStateStore = importDefault(4297) /* metro dependency 4297: VoiceStateStore */; const RPC_SCOPE_CONFIG = (require(4135) /* metro dependency 4135: Constants */).RPC_SCOPE_CONFIG; value = require(661) /* metro dependency 661: Constants */; const env0_10 = value.Routes; const env0_11 = value.Permissions; const RPCCommands = value.RPCCommands; const env0_12 = value.RPCErrors; object2 = {}; const GET_CHANNEL = RPCCommands.GET_CHANNEL; let ANY = RPC_SCOPE_CONFIG.ANY; const OAuth2Scopes = (require(4122) /* metro dependency 4122: OAuth2Scopes */).OAuth2Scopes; let RPC = OAuth2Scopes.RPC; const GUILDS = OAuth2Scopes.GUILDS; let GUILDS_CHANNELS_READ = OAuth2Scopes.GUILDS_CHANNELS_READ; object2[GET_CHANNEL] = {scope: {[ANY]: [RPC, GUILDS, GUILDS_CHANNELS_READ]}, handler: handler_99388}; const GET_CHANNELS = RPCCommands.GET_CHANNELS; RPC = OAuth2Scopes.RPC; object2[GET_CHANNELS] = {scope: RPC, handler: handler_99389}; const GET_CHANNEL_PERMISSIONS = RPCCommands.GET_CHANNEL_PERMISSIONS; ANY = RPC_SCOPE_CONFIG.ANY; const GUILDS_MEMBERS_READ = OAuth2Scopes.GUILDS_MEMBERS_READ; GUILDS_CHANNELS_READ = OAuth2Scopes.GUILDS_CHANNELS_READ; object2[GET_CHANNEL_PERMISSIONS] = {scope: {[ANY]: [GUILDS_MEMBERS_READ, GUILDS_CHANNELS_READ]}, handler: handler_99393}; const SELECT_VOICE_CHANNEL = RPCCommands.SELECT_VOICE_CHANNEL; RPC = OAuth2Scopes.RPC; object2[SELECT_VOICE_CHANNEL] = {scope: RPC, validation: validation_99394, handler: handler_99395}; const GET_SELECTED_VOICE_CHANNEL = RPCCommands.GET_SELECTED_VOICE_CHANNEL; ANY = RPC_SCOPE_CONFIG.ANY; RPC = OAuth2Scopes.RPC; const RPC_VOICE_READ = OAuth2Scopes.RPC_VOICE_READ; object2[GET_SELECTED_VOICE_CHANNEL] = {scope: {[ANY]: [RPC, RPC_VOICE_READ]}, handler: handler_99400}; const SELECT_TEXT_CHANNEL = RPCCommands.SELECT_TEXT_CHANNEL; RPC = OAuth2Scopes.RPC; object2[SELECT_TEXT_CHANNEL] = {scope: RPC, validation: validation_99401, handler: handler_99402}; const CREATE_CHANNEL_INVITE = RPCCommands.CREATE_CHANNEL_INVITE; RPC = OAuth2Scopes.RPC; object2[CREATE_CHANNEL_INVITE] = {scope: RPC, handler: function({args}) { var channel_id = args.channel_id; var env0_0 = channel_id; var value = Object.create(null); value.channel_id = 0; value = copyDataProperties({}, args, value, channel_id); value = importDefault(dependencyMap[17]).createInvite(channel_id, value, 'RPC'); return value.catch(_fun99408); }}; (require(2) /* metro dependency 2 */).fileFinishedImporting('modules/rpc/server/commands/channels.tsx'); exports.default = object2; } function handler_99388({args, socket}) { // fn#99388, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:13211:420, offset: 0x021c6a83, size: 399 bytes, params: 2, frame: 20 var scopes; var includes; const OAuth2Scopes = (require(4122) /* metro dependency 4122: OAuth2Scopes */).OAuth2Scopes; var transformChannel; var moduleValue; var defaultImport2; const channel_id = args.channel_id; var value; const channel = ChannelStore.getChannel(channel_id); if (channel == null) { defaultImport2 = importDefault(8076) /* metro dependency 8076: RPCError */; ({}).errorCode = RPCErrors.INVALID_CHANNEL; value = 'Invalid channel id: ' + channel_id; value = new defaultImport2(); throw value; } if (channel.isPrivate()) { scopes = socket.authorization.scopes; includes = scopes.includes; if (Reflect.apply(includes, scopes, [OAuth2Scopes.RPC])) { value = require(8081) /* metro dependency 8081: RPCHelpers */; transformChannel = value.transformChannel; moduleValue = require(8081) /* metro dependency 8081: RPCHelpers */; return Reflect.apply(transformChannel, value, [channel, moduleValue.hasMessageReadPermission(channel, socket.application.id, socket.authorization.scopes)]); } includes = scopes.includes; if (Reflect.apply(includes, scopes, [OAuth2Scopes.DM_CHANNELS_READ])) { value = require(8081) /* metro dependency 8081: RPCHelpers */; transformChannel = value.transformChannel; moduleValue = require(8081) /* metro dependency 8081: RPCHelpers */; return Reflect.apply(transformChannel, value, [channel, moduleValue.hasMessageReadPermission(channel, socket.application.id, socket.authorization.scopes)]); } throw new (importDefault(8076) /* metro dependency 8076: RPCError */)({errorCode: RPCErrors.INVALID_PERMISSIONS}, 'Invalid scope'); } value = require(8081) /* metro dependency 8081: RPCHelpers */; transformChannel = value.transformChannel; moduleValue = require(8081) /* metro dependency 8081: RPCHelpers */; return Reflect.apply(transformChannel, value, [channel, moduleValue.hasMessageReadPermission(channel, socket.application.id, socket.authorization.scopes)]); } function handler_99389({args}) { // fn#99389, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:13211:944, offset: 0x021c6c12, size: 246 bytes, params: 2, frame: 17 var r7; var object2; var defaultImport2; const guild_id = args.guild_id; var value; const defaultImport = importDefault(22) /* metro dependency 22 */; const value2 = defaultImport.values(ChannelStore.loadAllGuildAndPrivateChannelsFromDisk()); if (guild_id) { if (GuildStore.getGuild(guild_id) == null) { defaultImport2 = importDefault(8076) /* metro dependency 8076: RPCError */; ({}).errorCode = RPCErrors.INVALID_GUILD; value = 'Invalid guild id: ' + guild_id; value = new defaultImport2(); throw value; } value = value2.filter(_fun99390); r7 = value; object2 = {}; value = r7.filter(function(a0) { return PermissionStore.can(Permissions.VIEW_CHANNEL, a0); }); object2.channels = value.map(_fun99392); } else { r7 = value2; object2 = {}; object2.channels = r7.filter(function(a0) { return PermissionStore.can(Permissions.VIEW_CHANNEL, a0); }).map(function({id, name, type}) { return {id: id, name: name, type: type}; }); } return object2; } function handler_99393() { // fn#99393, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:13211:1430, offset: 0x021c6d66, size: 127 bytes, params: 1, frame: 15 const value2 = (importDefault(13018) /* metro dependency 13018: getCurrentEmbeddedActivityChannel */)(); if (value2 == null) { throw new (importDefault(8076) /* metro dependency 8076: RPCError */)({errorCode: RPCErrors.INVALID_CHANNEL}, 'Invalid channel'); } const object2 = {}; object2.permissions = PermissionStore.computePermissions(value2); return object2; } function validation_99394(a0) { // fn#99394, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:13211:1650, offset: 0x021c6de5, size: 153 bytes, params: 2, frame: 15 let value = (importDefault(8079) /* metro dependency 8079: createRpcJoiSchemaObject */)(a0); value = value.required(); const keys = value.keys; const object2 = {}; object2.channel_id = a0.string().allow(null); object2.timeout = a0.number().min(0).max(60); object2.force = a0.boolean(); object2.navigate = a0.boolean(); return Reflect.apply(keys, value, [object2]); } function handler_99395({server, socket, args}) { // fn#99395, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:13211:1791, offset: 0x021c6e7e, size: 291 bytes, params: 2, frame: 21 var value; var voiceChannelId; const channel_id = args.channel_id; let timeout = args.timeout; timeout = timeout === undefined ? 0 : timeout; let force = args.force; force = !(force === undefined) && force; if (args.navigate !== undefined) { } if (channel_id) { voiceChannelId = SelectedChannelStore.getVoiceChannelId(); if (voiceChannelId == null) { value = server.storeWait(socket, function() { return ChannelStore.getChannel(channel_id); }, timeout); value = value.catch(_fun99397); value = value.then(_fun99398); return value.then(_fun99399); } if (voiceChannelId === channel_id) { value = server.storeWait(socket, _fun99396, timeout); value = value.catch(_fun99397); value = value.then(_fun99398); return value.then(_fun99399); } if (force === false) { throw new (importDefault(8076) /* metro dependency 8076: RPCError */)({errorCode: RPCErrors.SELECT_VOICE_FORCE_REQUIRED}, 'User is already joined to a voice channel.'); } value = server.storeWait(socket, _fun99396, timeout); value = value.catch(_fun99397); value = value.then(_fun99398); return value.then(_fun99399); } (importDefault(4796) /* metro dependency 4796: SelectedChannelActionCreators */).selectVoiceChannel(null); return null; } function handler_99400({socket}) { // fn#99400, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:13211:3066, offset: 0x021c72c3, size: 140 bytes, params: 2, frame: 19 var r0; var transformChannel; var moduleValue; var value; const voiceChannelId = SelectedChannelStore.getVoiceChannelId(); const r4 = voiceChannelId != null ? ChannelStore.getChannel(voiceChannelId) : null; if (r4 != null) { value = require(8081) /* metro dependency 8081: RPCHelpers */; transformChannel = value.transformChannel; moduleValue = require(8081) /* metro dependency 8081: RPCHelpers */; value = Reflect.apply(transformChannel, value, [r4, moduleValue.hasMessageReadPermission(r4, socket.application.id, socket.authorization.scopes)]); r0 = value; } else { r0 = null; } return r0; } function validation_99401(a0) { // fn#99401, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:13211:3340, offset: 0x021c734f, size: 123 bytes, params: 2, frame: 15 let value = (importDefault(8079) /* metro dependency 8079: createRpcJoiSchemaObject */)(a0); value = value.required(); const keys = value.keys; const object2 = {}; object2.channel_id = a0.string().allow(null); object2.timeout = a0.number().min(0).max(60); return Reflect.apply(keys, value, [object2]); } function handler_99402({server, socket, args}) { // fn#99402, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:13211:3450, offset: 0x021c73ca, size: 175 bytes, params: 2, frame: 19 var r0; var value; var moduleValue; const channel_id = args.channel_id; let timeout = args.timeout; timeout = timeout === undefined ? 0 : timeout; if (channel_id) { value = server.storeWait(socket, function() { return ChannelStore.getChannel(channel_id); }, timeout); value = value.catch(_fun99404); value = value.then(_fun99405); value = value.then(_fun99406); r0 = value; } else { moduleValue = require(1230) /* metro dependency 1230: router_utils */; moduleValue.transitionTo(Routes.ME); r0 = null; } return r0; } function handler_99407({args}) { // fn#99407, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:13211:4355, offset: 0x021c7725, size: 105 bytes, params: 2, frame: 16 const channel_id = args.channel_id; let value = Object.create(null); value.channel_id = 0; value = copyDataProperties({}, args, value, channel_id); value = (importDefault(8879) /* metro dependency 8879: InstantInviteActionCreators */).createInvite(channel_id, value, 'RPC'); return value.catch(_fun99408); } function _fun99390({guild_id}) { // fn#99390, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:13211:1161, offset: 0x021c6d08, size: 26 bytes, params: 2, frame: 2 return guild_id === env0_0.id; } function _fun99392({id, name, type}) { // fn#99392, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:13211:1248, offset: 0x021c6d44, size: 34 bytes, params: 2, frame: 4 return {id: id, name: name, type: type}; } function _fun99397() { // fn#99397, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:13211:2143, offset: 0x021c6fa1, size: 73 bytes, params: 1, frame: 13 const value = environment.__proto__; const defaultImport = importDefault(8076) /* metro dependency 8076: RPCError */; const SELECT_CHANNEL_TIMED_OUT = RPCErrors.SELECT_CHANNEL_TIMED_OUT; throw new defaultImport({errorCode: SELECT_CHANNEL_TIMED_OUT}, 'Request to select voice channel timed out.'); } function _fun99398(a0) { // fn#99398, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:13211:2261, offset: 0x021c6fea, size: 332 bytes, params: 2, frame: 20 var value; var items; var Promise; var all; var transformChannel; var moduleValue; var hasMessageReadPermission; var socketBinding; var defaultImport2; if (a0 == null) { value = environment.__proto__; defaultImport2 = importDefault(8076) /* metro dependency 8076: RPCError */; ({}).errorCode = RPCErrors.INVALID_CHANNEL; value = 'Invalid channel id: ' + channel_id; value = new defaultImport2(); throw value; } value = environment.__proto__; if (isVoiceChannel(a0.type)) { Promise = global.Promise; all = Promise.all; items = [global.Promise.resolve(a0)]; value = require(8081) /* metro dependency 8081: RPCHelpers */; transformChannel = value.transformChannel; moduleValue = require(8081) /* metro dependency 8081: RPCHelpers */; hasMessageReadPermission = moduleValue.hasMessageReadPermission; socketBinding = socket; items[1] = Reflect.apply(transformChannel, value, [a0, Reflect.apply(hasMessageReadPermission, moduleValue, [a0, socketBinding.application.id, socketBinding.authorization.scopes])]); return Reflect.apply(all, Promise, [items]); } const defaultImport = importDefault(8076) /* metro dependency 8076: RPCError */; const INVALID_CHANNEL = RPCErrors.INVALID_CHANNEL; throw new defaultImport({errorCode: INVALID_CHANNEL}, 'Channel is not a voice channel'); } function _fun99399(a0) { // fn#99399, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:13211:2606, offset: 0x021c7136, size: 397 bytes, params: 2, frame: 19 var r0; var r1; var r4; var item3; var value3; var value4; var moduleValue; var value6; var defaultImport; const iterator = a0[Symbol.iterator](); const iterator2 = iterator.next; let item2 = Reflect.apply(iterator2, iterator, []); let item = item2.value; item2 = item2.done ? undefined : iterator; let value = undefined; const value2 = item2 === value; const r2 = value2 ? value : item; if (value2) { r0 = item2; r1 = value; r4 = value2; } else { item3 = Reflect.apply(iterator2, item2, []); item = item3.value; item3 = item3.done ? undefined : item2; value3 = item3 === value; if (value3) { r0 = item3; r1 = value; r4 = value3; } else { r0 = item3; r1 = item; r4 = value3; } } if (!r4) { r0.return(); } if (r1.guild_id) { value4 = environment.__proto__; moduleValue = require(4800) /* metro dependency 4800: ChannelUtils */; if (moduleValue.isChannelFull(r2, VoiceStateStore, GuildStore)) { value = importDefault(8076) /* metro dependency 8076: RPCError */; value = new value({errorCode: RPCErrors.INVALID_CHANNEL}, 'Channel is full'); throw value; } if (PermissionStore.can(Permissions.CONNECT, r2)) { value6 = environment.__proto__; defaultImport = importDefault(4796) /* metro dependency 4796: SelectedChannelActionCreators */; defaultImport.selectVoiceChannel(r2.id); if (navigate) { value = require(1230) /* metro dependency 1230: router_utils */; value.replaceWith(Routes.CHANNEL(r2.guild_id, r2.id)); } return r1; } value = importDefault(8076) /* metro dependency 8076: RPCError */; value = new value({errorCode: RPCErrors.INVALID_PERMISSIONS}, 'Connect permission required to join channel'); throw value; } defaultImport = importDefault(4796) /* metro dependency 4796: SelectedChannelActionCreators */; defaultImport.selectVoiceChannel(r2.id); if (navigate) { value = require(1230) /* metro dependency 1230: router_utils */; value.replaceWith(Routes.CHANNEL(r2.guild_id, r2.id)); } return r1; } function _fun99404() { // fn#99404, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:13211:3553, offset: 0x021c7479, size: 73 bytes, params: 1, frame: 13 const value = environment.__proto__; const defaultImport = importDefault(8076) /* metro dependency 8076: RPCError */; const SELECT_CHANNEL_TIMED_OUT = RPCErrors.SELECT_CHANNEL_TIMED_OUT; throw new defaultImport({errorCode: SELECT_CHANNEL_TIMED_OUT}, 'Request to select text channel timed out.'); } function _fun99405(a0) { // fn#99405, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:13211:3670, offset: 0x021c74c2, size: 332 bytes, params: 2, frame: 20 var value; var items; var Promise; var all; var transformChannel; var moduleValue; var hasMessageReadPermission; var socketBinding; var defaultImport2; if (a0 == null) { value = environment.__proto__; defaultImport2 = importDefault(8076) /* metro dependency 8076: RPCError */; ({}).errorCode = RPCErrors.INVALID_CHANNEL; value = 'Invalid channel id: ' + channel_id; value = new defaultImport2(); throw value; } value = environment.__proto__; if (isTextChannel(a0.type)) { Promise = global.Promise; all = Promise.all; items = [global.Promise.resolve(a0)]; value = require(8081) /* metro dependency 8081: RPCHelpers */; transformChannel = value.transformChannel; moduleValue = require(8081) /* metro dependency 8081: RPCHelpers */; hasMessageReadPermission = moduleValue.hasMessageReadPermission; socketBinding = socket; items[1] = Reflect.apply(transformChannel, value, [a0, Reflect.apply(hasMessageReadPermission, moduleValue, [a0, socketBinding.application.id, socketBinding.authorization.scopes])]); return Reflect.apply(all, Promise, [items]); } const defaultImport = importDefault(8076) /* metro dependency 8076: RPCError */; const INVALID_CHANNEL = RPCErrors.INVALID_CHANNEL; throw new defaultImport({errorCode: INVALID_CHANNEL}, 'Channel is not a text channel'); } function _fun99406(a0) { // fn#99406, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:13211:4014, offset: 0x021c760e, size: 279 bytes, params: 2, frame: 17 var r0; var r2; var r3; var item3; var value3; var value4; var value6; const iterator = a0[Symbol.iterator](); const iterator2 = iterator.next; let item2 = Reflect.apply(iterator2, iterator, []); let item = item2.value; item2 = item2.done ? undefined : iterator; let value = undefined; const value2 = item2 === value; const r1 = value2 ? value : item; if (value2) { r0 = value; r2 = item2; r3 = value2; } else { item3 = Reflect.apply(iterator2, item2, []); item = item3.value; item3 = item3.done ? undefined : item2; value3 = item3 === value; if (value3) { r0 = value; r2 = item3; r3 = value3; } else { r0 = item; r2 = item3; r3 = value3; } } if (!r3) { r2.return(); } let guild_id = r0.guild_id; if (guild_id) { value4 = environment.__proto__; if (PermissionStore.can(Permissions.VIEW_CHANNEL, r1)) { guild_id = r0.guild_id; value6 = environment.__proto__; if (guild_id) { value = require(1230) /* metro dependency 1230: router_utils */; value.replaceWith(Routes.CHANNEL(r0.guild_id, r1.id)); } else { value = importDefault(4796) /* metro dependency 4796: SelectedChannelActionCreators */; value.selectPrivateChannel(r1.id); } return r0; } value = importDefault(8076) /* metro dependency 8076: RPCError */; value = new value({errorCode: RPCErrors.INVALID_CHANNEL}, 'No permission to see channel'); throw value; } if (r0.guild_id) { value = require(1230) /* metro dependency 1230: router_utils */; value.replaceWith(Routes.CHANNEL(r0.guild_id, r1.id)); } else { value = importDefault(4796) /* metro dependency 4796: SelectedChannelActionCreators */; value.selectPrivateChannel(r1.id); } return r0; } function _fun99408() { // fn#99408, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:13211:4425, offset: 0x021c778e, size: 105 bytes, params: 1, frame: 15 let value = environment.__proto__; const defaultImport = importDefault(8076) /* metro dependency 8076: RPCError */; const INVALID_PERMISSIONS = RPCErrors.INVALID_PERMISSIONS; value = 'Unable to generate an invite for ' + channel_id + '. Does this user have permissions?'; value = new defaultImport({errorCode: INVALID_PERMISSIONS}, value); throw value; }