UNPKG

smule.js

Version:

A javascript library for Smule's mobile API

1,115 lines (1,108 loc) 192 kB
var __create = Object.create; var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __getProtoOf = Object.getPrototypeOf; var __hasOwnProp = Object.prototype.hasOwnProperty; var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( // If the importer is in node compatibility mode or this is not an ESM // file that has been converted to a CommonJS file using a Babel- // compatible transform (i.e. "__esModule" has not been set), then set // "default" to the CommonJS "module.exports" for node compatibility. isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, mod )); var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); // src/index.ts var index_exports = {}; __export(index_exports, { AvTemplateCategoryListRequest: () => AvTemplateCategoryListRequest, CategoryRequest: () => CategoryRequest, CustomFormData: () => CustomFormData, Device: () => Device, IsFollowingRequest: () => IsFollowingRequest, LoginAsGuestRequest: () => LoginAsGuestRequest, LoginCommonData: () => LoginCommonData, LoginRequest: () => LoginRequest, PerformanceCreateRequest: () => PerformanceCreateRequest, PerformancePartsRequest: () => PerformancePartsRequest, PerformanceReq: () => PerformanceReq, PerformancesListRequest: () => PerformancesListRequest, PreferencesRequest: () => PreferencesRequest, PreuploadRequest: () => PreuploadRequest, SearchAutocompleteRequest: () => SearchAutocompleteRequest, SearchRequest: () => SearchRequest, SettingsRequest: () => SettingsRequest, SingUserProfileRequest: () => SingUserProfileRequest, Smule: () => Smule, SmuleDotCom: () => SmuleDotCom, SmuleErrorCode: () => SmuleErrorCode, SmuleRegisterErrorCode: () => SmuleRegisterErrorCode, SmuleSession: () => SmuleSession, SmuleUrls: () => SmuleUrls, SmuleUserSinging: () => SmuleUserSinging, SmuleUtil: () => SmuleUtil, SongbookRequest: () => SongbookRequest, UpdateFollowingRequest: () => UpdateFollowingRequest, Util: () => Util }); module.exports = __toCommonJS(index_exports); // src/types/smule-requests.ts var import_crypto = require("crypto"); var Device = class { carrierCountry = "us"; country = "US"; deviceId = "a:198de726-8de9-4b60-858e-cef5abaf5a59"; deviceType = "AND"; googlePlayServices = "21.26.21 (100800-387928701)"; hasMail = true; lang = "en"; limitAdTrack = false; locale = "en_US"; machine = "SM-S908E"; manufacturer = "samsung"; os = "9"; product = "b0qxxx"; screenSize = "large"; script = ""; constructor(carrierCountry = "us", country = "US", deviceId = "a:" + (0, import_crypto.randomUUID)(), deviceType = "AND", googlePlayServices = "21.26.21 (100800-387928701)", hasMail = true, lang = "en", limitAdTrack = false, locale = "en_US", machine = "SM-S908E", manufacturer = "samsung", os = "9", product = "b0qxxx", screenSize = "large", script = "") { this.carrierCountry = carrierCountry; this.country = country; this.deviceId = deviceId; this.deviceType = deviceType; this.googlePlayServices = googlePlayServices; this.hasMail = hasMail; this.lang = lang; this.limitAdTrack = limitAdTrack; this.locale = locale; this.machine = machine; this.manufacturer = manufacturer; this.os = os; this.product = product; this.screenSize = screenSize; this.script = script; } }; var LoginCommonData = class { advId = (0, import_crypto.randomUUID)(); device = new Device(); automaticLogin = true; playerId = 0; reactivateSubmittedAccount = false; tzOffset = 7200; vorgom = false; welcome = false; constructor(device) { if (device) this.device = device; } }; var LoginAsGuestRequest = class { loginCommon = new LoginCommonData(); constructor(loginCommon) { if (loginCommon) this.loginCommon = loginCommon; } toJSON() { return { common: this.loginCommon, forceNewPlayer: true, lookupAccount: true, settingsIds: [ "sing_google.subscriptions", "sing_google.stream_values", "sing_google.user_messages", "sing_google.buy_msg", "sing_google.tutorial", "sing_google.get_more_credits", "sing_google.cccp", "sing_google.songbook", "sing_google.preSing", "sing_google.ftuxBlocking", "sing_google.songUpsell", "sing_google.explore", "sing_google.mediaPlayer", "sing_google.ads", "sing_google.smeaks", "sing.profile", "sing.playlists", "sing.audio", "sing.audioFilters", "sing.arr", "sing.suggestions", "sing.onboarding", "sing.cccp", "sing.acappella", "sing.video", "sing.videoEncoding", "sing.chat", "sing.search", "sing.videoFX", "sing.videoStyles", "sing.avqSurvey", "sing.paywall", "sing_google.subscriptions", "sing.freeform", "dfp", "appLaunch", "sing.crm", "sing.boost", "sing.share", "sing.feed", "sing.findFriendsModule", "sing.localization", "sing.seeds", "sing.nowPlaying", "sing.registration", "sing.upload", "sing.families", "sing.appSettings", "campfire.avStreamQuality", "campfire.config", "sing.virtualCurrency", "campfire.audioFilters", "links", "sing.singingFlow", "sing.explore", "sing.songbookUsability", "sing.templates", "sing.notifications", "sing.topics", "sing.banners", "sing.shortJoins", "sing.vcs", "sing.notifications", "sing.customPitchMarker", "sing.tipping" ] }; } }; var LoginRequest = class { loginCommon = new LoginCommonData(); data = { email: "", password: "" }; constructor(email, password, loginCommon) { this.data.email = email; this.data.password = password; if (loginCommon) this.loginCommon = loginCommon; } toJSON() { return { ...this.loginCommon, ...this.data }; } }; var SearchRequest = class { data = { "cursor": "start", "limit": 25, "resultType": "RECORDING", "sort": "RECENT", "term": "i deserve this" }; constructor(cursor = "start", limit = 25, resultType = "SONG", sort = "POPULAR", term = "") { this.data.cursor = cursor; this.data.limit = limit; this.data.resultType = resultType; this.data.sort = sort; this.data.term = term; } toJSON() { return this.data; } }; var SearchAutocompleteRequest = class { data = { limit: 5, term: "" }; constructor(term, limit) { this.data.limit = limit; this.data.term = term; } toJSON() { return this.data; } }; var PerformancesListRequest = class { data = { "fillStatus": "ACTIVESEED", "limit": 25, "offset": 0, "sort": "SUGGESTED", "video": false }; constructor(sort = "SUGGESTED", fillStatus = "ACTIVESEED", limit = 25, offset = 0) { this.data.fillStatus = fillStatus; this.data.limit = limit; this.data.offset = offset; this.data.sort = sort; } toJSON() { return this.data; } }; var PerformancePartsRequest = class { data = { "accountId": 0, "app": "sing_google", "collapsed": true, "fillStatus": "FILLED", "limit": 20, "offset": 0, "sortMethod": "NEWEST_FIRST" }; constructor(accountId, fillStatus, sortMethod, limit = 20, offset = 0) { this.data.accountId = accountId; this.data.fillStatus = fillStatus; this.data.sortMethod = sortMethod; this.data.limit = limit; this.data.offset = offset; } toJSON() { return this.data; } }; var PreuploadRequest = class { data = { "arrKey": "16827545_16827545", "compType": "ARR", "ensembleType": "SOLO", "trackVideo": false, "uploadType": "CREATE", seedKey: void 0 }; constructor(arrKey, compType, ensembleType, uploadType = "CREATE", trackVideo = false, seedKey) { this.data.arrKey = arrKey; this.data.compType = compType; this.data.ensembleType = ensembleType; this.data.trackVideo = trackVideo; this.data.uploadType = uploadType; this.data.seedKey = seedKey; } toJSON() { return this.data; } }; var PerformanceCreateRequest = class { arrKey = void 0; arrVer = 2; audioResourceId; avTemplateId = 652900; compType = "ARR"; coverResourceId; ensembleType = "SOLO"; isPrivate = true; latitude = 37; // 39.0138299 lol longitude = -120; // 125.777819 lol message; metadataResourceId; seconds = 0; title; trackAvTemplateId = 306890; trackFxMode = "ALYCE"; trackOptions = '{"score":0,"afx_ver":0,"gain":-0.11999998986721039}'; trackVideo = false; usedHeadphone = true; vfactor = 0; vscore = 0; trackPartId = void 0; savedEarly = false; performanceKey = void 0; constructor(arrKey, arrVer = 0, ensembleType = "SOLO", avTemplateId = 652900, isPrivate = true, message, title, usedHeadphone = false, compType = "ARR", seconds = 0, trackPartId = 1, performanceKey = void 0, trackAvTemplateId = void 0, trackFxMode = "ALYCE", trackOptions = '{"score":0,"afx_ver":0,"gain":-0.11999998986721039,"aiStylesDisabled":true}', trackVideo = false, vfactor = 0, vscore = 0) { this.arrKey = arrKey; this.arrVer = arrVer; this.avTemplateId = avTemplateId; this.compType = compType; this.isPrivate = isPrivate; this.message = message; this.seconds = seconds; this.title = title; this.trackAvTemplateId = trackAvTemplateId; this.trackFxMode = trackFxMode; this.trackOptions = trackOptions; this.trackVideo = trackVideo; this.usedHeadphone = usedHeadphone; this.vfactor = vfactor; this.vscore = vscore; this.ensembleType = ensembleType; this.performanceKey = performanceKey; if (ensembleType != "SOLO") { this.trackPartId = parseInt(trackPartId); } } }; var PerformanceReq = class { app = "sing_google"; arrKey = ""; fillStatus = "SEED"; limit = 25; offset = 0; sort = "RECENT"; video = void 0; /** * Used to request a list of performances for this song key with these criterias * * @param key - The arr key associated with the song. * @param sort - The order in which performances should be sorted. Default is RECENT. * @param fillStatus - The fill status of the performances. Default is ACTIVESEED. * @param limit - The maximum number of performances to fetch. Default is 25. * @param offset - The starting point for fetching performances. Default is 0. * @param video - Whether to retrieve only video performances. */ constructor(key, sort = "RECENT", fillStatus = "ACTIVESEED", limit = 25, offset = 0, video) { this.arrKey = key; this.fillStatus = fillStatus; this.limit = limit; this.offset = offset; this.sort = sort; this.video = video; } }; var SingUserProfileRequest = class { data = { accountId: 0, includeActiveState: true }; constructor(accountId) { this.data.accountId = accountId; } toJSON() { return this.data; } }; var IsFollowingRequest = class { data = { accountIds: [], apps: ["sing_google"] }; constructor(accountIds) { this.data.accountIds = accountIds; } toJSON() { return this.data; } }; var UpdateFollowingRequest = class { data = { add: [], content: "APP", remove: [] }; constructor(accountIdsToAdd, accountIdsToRemove) { this.data.add = accountIdsToAdd; this.data.remove = accountIdsToRemove; } toJSON() { return this.data; } }; var SongbookRequest = class { data = { cat1SongsCursor: "start", cat1SongsLimit: 10 }; constructor(cursor = "start", limit = 10) { this.data.cat1SongsCursor = cursor; this.data.cat1SongsLimit = limit; } toJSON() { return this.data; } }; var CategoryRequest = class { data = { cursor: "start", limit: 10, id: 9998, duetAccountId: void 0 }; constructor(cursor = "start", limit = 10, categoryId = 9998, duetAccountId) { this.data.cursor = cursor; this.data.limit = limit; this.data.id = categoryId; if (duetAccountId) this.data.duetAccountId = duetAccountId; } toJSON() { return this.data; } }; var SettingsRequest = class { device = new Device(); constructor(device) { if (device) this.device = device; } // while yes i could manually feed it the settings strings, // theres no real reason why i shouldnt just list them all lol toJSON() { return { "device": this.device, "settingsIds": [ "sing_google.subscriptions", "sing_google.stream_values", "sing_google.user_messages", "sing_google.buy_msg", "sing_google.tutorial", "sing_google.get_more_credits", "sing_google.cccp", "sing_google.songbook", "sing_google.preSing", "sing_google.ftuxBlocking", "sing_google.songUpsell", "sing_google.explore", "sing_google.mediaPlayer", "sing_google.ads", "sing_google.smeaks", "sing.profile", "sing.playlists", "sing.audio", "sing.audioFilters", "sing.arr", "sing.suggestions", "sing.onboarding", "sing.cccp", "sing.acappella", "sing.video", "sing.videoEncoding", "sing.chat", "sing.search", "sing.videoFX", "sing.videoStyles", "sing.avqSurvey", "sing.paywall", "sing_google.subscriptions", "sing.freeform", "dfp", "appLaunch", "sing.crm", "sing.boost", "sing.share", "sing.feed", "sing.findFriendsModule", "sing.localization", "sing.seeds", "sing.nowPlaying", "sing.registration", "sing.upload", "sing.families", "sing.appSettings", "campfire.avStreamQuality", "campfire.config", "sing.virtualCurrency", "campfire.audioFilters", "links", "sing.singingFlow", "sing.explore", "sing.songbookUsability", "sing.templates", "sing.notifications", "sing.topics", "sing.banners", "sing.shortJoins", "sing.vcs", "sing.notifications", "sing.customPitchMarker", "sing.tipping", "appFamily" ] }; } }; var PreferencesRequest = class { toJSON() { return { names: [ "SPARK_PUSH_DISABLE", "SPARK_READRECEIPT_DISABLE", "CHAT_STATE_DISABLE" ] }; } }; var AvTemplateCategoryListRequest = class { data = { "category": "AUDIO", "cursor": "start", "limit": 25, "avTemplateType": "STANDARD" }; constructor(category = "AUDIO", cursor = "start", limit = 25, avTemplateType = "STANDARD") { this.data.category = category; this.data.cursor = cursor; this.data.limit = limit; this.data.avTemplateType = avTemplateType; } toJSON() { return this.data; } }; // src/types/smule-types.ts var SmuleSession = class { sessionToken = ""; refreshToken = ""; isGuest = false; expired = true; device = new Device(); // globe geolocation stuff // these are used for creating performances and such latitude; longitude; }; var SmuleErrorCode = { 61: "Tried to access non-guest endpoint, but you are guest", // Error code 50 can also be something along the lines of "Filename not specified" // during multipart requests 50: "Digest error / Digest not provided", 51: "Session error / Session not provided / Session expired", 69: "Wrong credentials / Failed to log in", 71: "Invalid offset", // this triggers if we attempt to use an older session token 2001: "New session token required. Try to refresh your login!", 1012: "VIP required", 1013: "Subscription error / VIP required", 10: "No result?", 1052: "Not enough coins", 2017: "Group waiting period not expired", // unsure what this actually means 2013: "Banned from group", 1044: "Group join limit reached" }; var SmuleRegisterErrorCode = { 13: "Account already exists" }; // src/util.ts var Util; ((Util2) => { function getParametersFromUrl(url) { return url.split("?")[1]; } Util2.getParametersFromUrl = getParametersFromUrl; function getHostFromFullUrl(url) { return url.split("/")[2]; } Util2.getHostFromFullUrl = getHostFromFullUrl; function getPathFromFullUrl(url) { let temp = url.replaceAll("://", "").split("/"); temp.shift(); return "/" + temp.join("/").split("?")[0]; } Util2.getPathFromFullUrl = getPathFromFullUrl; function queryToObject(query) { if (query instanceof URLSearchParams) return Object.fromEntries(query); return Object.fromEntries(new URLSearchParams(query)); } Util2.queryToObject = queryToObject; function objectToQuery(query) { return Object.entries(query).map(([key, value]) => `${key}=${value}`).join("&"); } Util2.objectToQuery = objectToQuery; function formatTime(ms, showMS = false) { if (!ms) return showMS ? "00:00.000" : "00:00"; let sec = Math.floor(ms / 1e3); let min = Math.floor(sec / 60); sec %= 60; if (sec < 10) sec = "0" + sec; if (min < 10) min = "0" + min; if (showMS) return `${min}:${sec}.${ms % 1e3}`; return `${min}:${sec}`; } Util2.formatTime = formatTime; function formatValue(value, largeCharacter = true) { if (value >= 1e3) { if (value >= 1e6) return Math.round(value / 1e5) / 10 + (largeCharacter ? "M" : "m"); return Math.round(value / 100) / 10 + (largeCharacter ? "K" : "k"); } return value + ""; } Util2.formatValue = formatValue; })(Util || (Util = {})); var CustomFormData = class { data = {}; set(key, value, type = "application/octet-stream", filename) { this.data[key] = { type, value, filename }; } get(key) { return this.data[key]?.value; } serialize() { let boundary = "--1335a53d-7c46-4dd6-8e1e-c2f96c3987c5"; let buffers = [ Buffer.from(boundary + "\r\n") ]; for (let key of Object.keys(this.data)) { let str = `Content-Disposition: form-data; name="${key}"` + (this.data[key].filename != void 0 ? `; filename="${this.data[key].filename}"\r ` : "\r\n") + `Content-Transfer-Encoding: binary\r Content-Type: ${this.data[key].type}\r Content-Length: ${this.data[key].value.length}\r \r `; buffers.push(Buffer.from(str)); buffers.push(Buffer.from(this.data[key].value)); buffers.push(Buffer.from("\r\n" + boundary + "\r\n")); } buffers.pop(); buffers.push(Buffer.from("\r\n" + boundary + "--\r\n")); return Buffer.concat(buffers); } }; var SmuleUtil; ((SmuleUtil2) => { function checkLoggedIn(session) { return !session.expired && session.sessionToken != ""; } SmuleUtil2.checkLoggedIn = checkLoggedIn; function isVerified(verifiedType) { return ["STAFF", "PARTNER_ARTIST", "VERIFIED_BASIC"].includes(verifiedType); } SmuleUtil2.isVerified = isVerified; function isVIP(subApps) { return subApps.filter((s) => ["sing_google", "sing"].includes(s)).length > 0; } SmuleUtil2.isVIP = isVIP; function getGroupMembershipType(membership) { switch (membership) { case 1: return "ADMIN"; case 2: return "MEMBER"; case 3: return "PENDING_INVTN"; case 4: return "PENDING_RQST"; case 5: return "GUEST"; default: return "UNKNOWN"; } } SmuleUtil2.getGroupMembershipType = getGroupMembershipType; function getFilesFromArr(arr) { return { preview: arr.normResources.find((r) => r.role == "preview")?.url, cover: arr.normResources.find((r) => r.role == "cover_art")?.url, cover_android: arr.normResources.find((r) => r.role == "cover_art_google")?.url, cover_ios: arr.normResources.find((r) => r.role == "cover_art_ios")?.url, midi_file: arr.normResources.find((r) => r.role == "main")?.url, song_file: arr.normResources.find((r) => r.role == "background")?.url, meta_file: arr.normResources.find((r) => r.role == "meta")?.url, mir_file: arr.normResources.find((r) => r.role == "mir")?.url, preview_original: arr.origResources.find((r) => r.role == "preview")?.url, cover_original: arr.origResources.find((r) => r.role == "cover")?.url, cover_android_original: arr.origResources.find((r) => r.role == "cover_google")?.url, cover_ios_original: arr.origResources.find((r) => r.role == "cover_ios")?.url, midi_file_original: arr.origResources.find((r) => r.role == "midi")?.url, song_file_original: arr.origResources.find((r) => r.role == "bg")?.url, pitch_file: arr.origResources.find((r) => r.role == "pitch")?.url }; } SmuleUtil2.getFilesFromArr = getFilesFromArr; })(SmuleUtil || (SmuleUtil = {})); // src/smule.ts var import_axios = __toESM(require("axios"), 1); // src/smule-live-chat.ts var import_client = require("@xmpp/client"); // src/smule-urls.ts var SmuleUrls; ((SmuleUrls2) => { SmuleUrls2.normalHost = "api-sing.smule.com"; SmuleUrls2.betaHost = "api-beta.smule.com"; SmuleUrls2.userChat = "j.smule.com"; SmuleUrls2.cfireChat = "jc.smule.com"; SmuleUrls2.baseUrl = "https://api-sing.smule.com/v2"; SmuleUrls2.AccessToken = SmuleUrls2.baseUrl + "/access/token"; SmuleUrls2.AccountDeleteSubmit = SmuleUrls2.baseUrl + "/account/delete/submit"; SmuleUrls2.AccountExplore = SmuleUrls2.baseUrl + "/account/explore"; SmuleUrls2.AccountInfo = SmuleUrls2.baseUrl + "/account/info"; SmuleUrls2.AccountLookup = SmuleUrls2.baseUrl + "/account/lookup"; SmuleUrls2.AccountProfileStats = SmuleUrls2.baseUrl + "/account/profile/stats"; SmuleUrls2.AccountProfileStatsViews = SmuleUrls2.baseUrl + "/account/profile/stats/views"; SmuleUrls2.AccountProfileStatsDrilldownAccounts = SmuleUrls2.baseUrl + "/account/profile/stats/drilldown/accounts"; SmuleUrls2.AccountProfileStatsDrilldownPerformances = SmuleUrls2.baseUrl + "/account/profile/stats/drilldown/performances"; SmuleUrls2.AccountStatisticsYearly = SmuleUrls2.baseUrl + "/account/statistics/yearly"; SmuleUrls2.AccountStats = SmuleUrls2.baseUrl + "/account/stats"; SmuleUrls2.AccountWallet = SmuleUrls2.baseUrl + "/account/wallet"; SmuleUrls2.AnalyticsCfireStats = SmuleUrls2.baseUrl + "/analytics/cfireStats"; SmuleUrls2.AnalyticsEl = SmuleUrls2.baseUrl + "/analytics/el"; SmuleUrls2.Aplist = SmuleUrls2.baseUrl + "/aplist"; SmuleUrls2.AplistCreate = SmuleUrls2.baseUrl + "/aplist/create"; SmuleUrls2.AplistDelete = SmuleUrls2.baseUrl + "/aplist/delete"; SmuleUrls2.AplistFavorites = SmuleUrls2.baseUrl + "/aplist/favorites"; SmuleUrls2.AplistFavoritesCreate = SmuleUrls2.baseUrl + "/aplist/favorites/create"; SmuleUrls2.AplistList = SmuleUrls2.baseUrl + "/aplist/list"; SmuleUrls2.AplistListInfo = SmuleUrls2.baseUrl + "/aplist/list/info"; SmuleUrls2.AplistPerfAdd = SmuleUrls2.baseUrl + "/aplist/perf/add"; SmuleUrls2.AplistPerfDelete = SmuleUrls2.baseUrl + "/aplist/perf/delete"; SmuleUrls2.AplistUpdate = SmuleUrls2.baseUrl + "/aplist/update"; SmuleUrls2.AplistView = SmuleUrls2.baseUrl + "/aplist/view"; SmuleUrls2.Arr = SmuleUrls2.baseUrl + "/arr"; SmuleUrls2.ArrActionAfterSing = SmuleUrls2.baseUrl + "/arr/actionAfterSing"; SmuleUrls2.ArrBookmark = SmuleUrls2.baseUrl + "/arr/bookmark"; SmuleUrls2.ArrBookmarkList = SmuleUrls2.baseUrl + "/arr/bookmark/list"; SmuleUrls2.ArrBookmarkRemove = SmuleUrls2.baseUrl + "/arr/bookmark/remove"; SmuleUrls2.ArrByKeys = SmuleUrls2.baseUrl + "/arr/byKeys"; SmuleUrls2.ArrCreate = SmuleUrls2.baseUrl + "/arr/create"; SmuleUrls2.ArrDelete = SmuleUrls2.baseUrl + "/arr/delete"; SmuleUrls2.ArrDetail = SmuleUrls2.baseUrl + "/arr/detail"; SmuleUrls2.ArrFromRSong = SmuleUrls2.baseUrl + "/arr/fromrsong"; SmuleUrls2.ArrList = SmuleUrls2.baseUrl + "/arr/list"; SmuleUrls2.ArrOwned = SmuleUrls2.baseUrl + "/arr/owned"; SmuleUrls2.ArrPlay = SmuleUrls2.baseUrl + "/arr/play"; SmuleUrls2.ArrResourceCreate = SmuleUrls2.baseUrl + "/arr/resource/create"; SmuleUrls2.ArrUpdate = SmuleUrls2.baseUrl + "/arr/update"; SmuleUrls2.ArrVerCreate = SmuleUrls2.baseUrl + "/arr/ver/create"; SmuleUrls2.ArrVote = SmuleUrls2.baseUrl + "/arr/vote"; SmuleUrls2.ArrVoteTopic = SmuleUrls2.baseUrl + "/arr/voteTopic"; SmuleUrls2.AvcomponentList = SmuleUrls2.baseUrl + "/avcomponent/list"; SmuleUrls2.AvcomponentsetList = SmuleUrls2.baseUrl + "/avcomponentset/list"; SmuleUrls2.AvfilterAudiofilterList = SmuleUrls2.baseUrl + "/avfilter/audiofilter/list"; SmuleUrls2.Avtemplate = SmuleUrls2.baseUrl + "/avtemplate"; SmuleUrls2.AvtemplateByAccount = SmuleUrls2.baseUrl + "/avtemplate/byAccount"; SmuleUrls2.AvtemplateCategoryList = SmuleUrls2.baseUrl + "/avtemplate/category/list"; SmuleUrls2.AvtemplateCategoryLists = SmuleUrls2.baseUrl + "/avtemplate/category/lists"; SmuleUrls2.AvtemplateCreate = SmuleUrls2.baseUrl + "/avtemplate/create"; SmuleUrls2.AvtemplateDelete = SmuleUrls2.baseUrl + "/avtemplate/delete"; SmuleUrls2.AvtemplateDraft = SmuleUrls2.baseUrl + "/avtemplate/draft"; SmuleUrls2.AvtemplateByIds = SmuleUrls2.baseUrl + "/avtemplate/byIds"; SmuleUrls2.AvtemplateMixlistRec = SmuleUrls2.baseUrl + "/avtemplate/mixlist/rec"; SmuleUrls2.AvtemplateResourceCreate = SmuleUrls2.baseUrl + "/avtemplate/resource/create"; SmuleUrls2.AvtemplateUpdate = SmuleUrls2.baseUrl + "/avtemplate/update"; SmuleUrls2.Banner = SmuleUrls2.baseUrl + "/banner"; SmuleUrls2.Boost = SmuleUrls2.baseUrl + "/boost"; SmuleUrls2.BoostPerf = SmuleUrls2.baseUrl + "/boost/perf"; SmuleUrls2.CardCreate = SmuleUrls2.baseUrl + "/card/create"; SmuleUrls2.CardGet = SmuleUrls2.baseUrl + "/card/get"; SmuleUrls2.Category = SmuleUrls2.baseUrl + "/category"; SmuleUrls2.CategoryList = SmuleUrls2.baseUrl + "/category/list"; SmuleUrls2.Cfire = SmuleUrls2.baseUrl + "/cfire"; SmuleUrls2.CfireClose = SmuleUrls2.baseUrl + "/cfire/close"; SmuleUrls2.CfireCreate = SmuleUrls2.baseUrl + "/cfire/create"; SmuleUrls2.CfireGuestEnd = SmuleUrls2.baseUrl + "/cfire/guest/end"; SmuleUrls2.CfireGuestTerminate = SmuleUrls2.baseUrl + "/cfire/guest/terminate"; SmuleUrls2.CfireHostEnd = SmuleUrls2.baseUrl + "/cfire/host/end"; SmuleUrls2.CfireHostTerminate = SmuleUrls2.baseUrl + "/cfire/host/terminate"; SmuleUrls2.CfireList = SmuleUrls2.baseUrl + "/cfire/list"; SmuleUrls2.CfireListAccount = SmuleUrls2.baseUrl + "/cfire/list/account"; SmuleUrls2.CfireListen = SmuleUrls2.baseUrl + "/cfire/listen"; SmuleUrls2.CfireModerate = SmuleUrls2.baseUrl + "/cfire/moderate"; SmuleUrls2.CfirePerfEnd = SmuleUrls2.baseUrl + "/cfire/perf/end"; SmuleUrls2.CfirePerfStart = SmuleUrls2.baseUrl + "/cfire/perf/start"; SmuleUrls2.CfireReport = SmuleUrls2.baseUrl + "/cfire/report"; SmuleUrls2.CfireReportList = SmuleUrls2.baseUrl + "/cfire/report/list"; SmuleUrls2.CfireSignupAdd = SmuleUrls2.baseUrl + "/cfire/signup/add"; SmuleUrls2.CfireSignupRemove = SmuleUrls2.baseUrl + "/cfire/signup/remove"; SmuleUrls2.CfireSignupTerminate = SmuleUrls2.baseUrl + "/cfire/signup/terminate"; SmuleUrls2.CfireSignupUpdate = SmuleUrls2.baseUrl + "/cfire/signup/update"; SmuleUrls2.CfireSync = SmuleUrls2.baseUrl + "/cfire/sync"; SmuleUrls2.CfireTakeup = SmuleUrls2.baseUrl + "/cfire/takeup"; SmuleUrls2.CfireUpdate = SmuleUrls2.baseUrl + "/cfire/update"; SmuleUrls2.CfireUploadResource = SmuleUrls2.baseUrl + "/cfire/uploadResource"; SmuleUrls2.CommentLike = SmuleUrls2.baseUrl + "/comment/like"; SmuleUrls2.CommentLikes = SmuleUrls2.baseUrl + "/comment/likes"; SmuleUrls2.CommentUnlike = SmuleUrls2.baseUrl + "/comment/unlike"; SmuleUrls2.ConsumableList = SmuleUrls2.baseUrl + "/consumable/list"; SmuleUrls2.ConsumablePurchase = SmuleUrls2.baseUrl + "/consumable/purchase"; SmuleUrls2.ContactClear = SmuleUrls2.baseUrl + "/contact/clear"; SmuleUrls2.ContactFind = SmuleUrls2.baseUrl + "/contact/find"; SmuleUrls2.ConsentUpdate = SmuleUrls2.baseUrl + "/consent/update"; SmuleUrls2.ContestGet = SmuleUrls2.baseUrl + "/contest/get"; SmuleUrls2.ContestScore = SmuleUrls2.baseUrl + "/contest/score"; SmuleUrls2.DebugPreupload = SmuleUrls2.baseUrl + "/debug/preupload"; SmuleUrls2.DebugUpload = SmuleUrls2.baseUrl + "/debug/upload"; SmuleUrls2.Dvcset = SmuleUrls2.baseUrl + "/dvcset"; SmuleUrls2.DiscoveryPerfByAvTemplateList = SmuleUrls2.baseUrl + "/discovery/perf/byAvTemplate/list"; SmuleUrls2.DiscoveryPerfList = SmuleUrls2.baseUrl + "/discovery/perf/list"; SmuleUrls2.DiscoveryPerfListByAvTemplate = SmuleUrls2.baseUrl + "/discovery/perf/listByAvTemplate"; SmuleUrls2.FbConnect = SmuleUrls2.baseUrl + "/fb/connect"; SmuleUrls2.FbDisconnect = SmuleUrls2.baseUrl + "/fb/disconnect"; SmuleUrls2.FbFriendFind = SmuleUrls2.baseUrl + "/fb/friend/find"; SmuleUrls2.FbLogin = SmuleUrls2.baseUrl + "/fb/login"; SmuleUrls2.GameGet = SmuleUrls2.baseUrl + "/game/get"; SmuleUrls2.GamePlayerAchievementGet = SmuleUrls2.baseUrl + "/game/player/achievement/get"; SmuleUrls2.GamePlayerLevelGet = SmuleUrls2.baseUrl + "/game/player/level/get"; SmuleUrls2.GamePlayerRestore = SmuleUrls2.baseUrl + "/game/player/restore"; SmuleUrls2.GamePlayerAchievementSet = SmuleUrls2.baseUrl + "/game/player/achievement/set"; SmuleUrls2.GamePlayerScoreSet = SmuleUrls2.baseUrl + "/game/player/score/set"; SmuleUrls2.GiftCategoryList = SmuleUrls2.baseUrl + "/gift/category/list"; SmuleUrls2.GiftCatalogCategory = SmuleUrls2.baseUrl + "/gift/catalog/category"; SmuleUrls2.GiftGet = SmuleUrls2.baseUrl + "/gift/get"; SmuleUrls2.GiftGive = SmuleUrls2.baseUrl + "/gift/give"; SmuleUrls2.GiftGiveVip = SmuleUrls2.baseUrl + "/gift/give/vip"; SmuleUrls2.GiftGiveVipInBulk = SmuleUrls2.baseUrl + "/gift/give/vip/inBulk"; SmuleUrls2.GiftIsGiftable = SmuleUrls2.baseUrl + "/gift/isGiftable"; SmuleUrls2.GiftList = SmuleUrls2.baseUrl + "/gift/list"; SmuleUrls2.GiftNotificationList = SmuleUrls2.baseUrl + "/gift/notification/list"; SmuleUrls2.GiftPerformanceReceivers = SmuleUrls2.baseUrl + "/gift/performanceReceivers"; SmuleUrls2.GiftRecentTransactions = SmuleUrls2.baseUrl + "/gift/recentTransactions"; SmuleUrls2.GiftReport = SmuleUrls2.baseUrl + "/gift/report"; SmuleUrls2.GiftSearch = SmuleUrls2.baseUrl + "/gift/search"; SmuleUrls2.GiftTopGivers = SmuleUrls2.baseUrl + "/gift/topGivers"; SmuleUrls2.GiftTransactions = SmuleUrls2.baseUrl + "/gift/transactions"; SmuleUrls2.GiftUserCatalog = SmuleUrls2.baseUrl + "/gift/usercatalog"; SmuleUrls2.InviteChat = SmuleUrls2.baseUrl + "/invite/chat"; SmuleUrls2.InviteFollower = SmuleUrls2.baseUrl + "/invite/follower"; SmuleUrls2.InviteList = SmuleUrls2.baseUrl + "/invite/list"; SmuleUrls2.InviteMe = SmuleUrls2.baseUrl + "/invite/me"; SmuleUrls2.InviteSend = SmuleUrls2.baseUrl + "/invite/send"; SmuleUrls2.LoginGuest = SmuleUrls2.baseUrl + "/login/guest"; SmuleUrls2.LoginHuaweiid = SmuleUrls2.baseUrl + "/login/huaweiid"; SmuleUrls2.LoginInfo = SmuleUrls2.baseUrl + "/login/info"; SmuleUrls2.LoginPhone = SmuleUrls2.baseUrl + "/login/phone"; SmuleUrls2.LoginPhonePinResend = SmuleUrls2.baseUrl + "/login/phone/pin/resend"; SmuleUrls2.LoginPhonePinSend = SmuleUrls2.baseUrl + "/login/phone/pin/send"; SmuleUrls2.LoginRefresh = SmuleUrls2.baseUrl + "/login/refresh"; SmuleUrls2.LocLangSet = SmuleUrls2.baseUrl + "/loc/lang/set"; SmuleUrls2.LocResource = SmuleUrls2.baseUrl + "/loc/resource"; SmuleUrls2.Offer = SmuleUrls2.baseUrl + "/offer"; SmuleUrls2.Oauth2Authorize = SmuleUrls2.baseUrl + "/oauth2/authorize"; SmuleUrls2.Oauth2Info = SmuleUrls2.baseUrl + "/oauth2/info"; SmuleUrls2.PaymentBundle = SmuleUrls2.baseUrl + "/payment/bundle"; SmuleUrls2.PerfCreate = SmuleUrls2.baseUrl + "/perf/create"; SmuleUrls2.PerfJoin = SmuleUrls2.baseUrl + "/perf/join"; SmuleUrls2.PerfPreupload = SmuleUrls2.baseUrl + "/perf/preupload"; SmuleUrls2.PerfUpdate = SmuleUrls2.baseUrl + "/perf/update"; SmuleUrls2.PerfUploadVideo = SmuleUrls2.baseUrl + "/perf/uploadVideo"; SmuleUrls2.PerformanceUrl = SmuleUrls2.baseUrl + "/performance"; SmuleUrls2.PerformanceBookmarkSeed = SmuleUrls2.baseUrl + "/performance/bookmarkSeed"; SmuleUrls2.PerformanceBookmarkSeedUpdate = SmuleUrls2.baseUrl + "/performance/bookmarkSeed/update"; SmuleUrls2.PerformanceByKeys = SmuleUrls2.baseUrl + "/performance/byKeys"; SmuleUrls2.PerformanceByFeed = SmuleUrls2.baseUrl + "/performance/byFeed"; SmuleUrls2.PerformanceByPerformer = SmuleUrls2.baseUrl + "/performance/byPerformer"; SmuleUrls2.PerformanceCastAsSeed = SmuleUrls2.baseUrl + "/performance/castAsSeed"; SmuleUrls2.PerformanceChildren = SmuleUrls2.baseUrl + "/performance/children"; SmuleUrls2.PerformanceChildrenSocial = SmuleUrls2.baseUrl + "/performance/children/social"; SmuleUrls2.PerformanceComment = SmuleUrls2.baseUrl + "/performance/comment"; SmuleUrls2.PerformanceCommenters = SmuleUrls2.baseUrl + "/performance/commenters"; SmuleUrls2.PerformanceCommentingInfo = SmuleUrls2.baseUrl + "/performance/commenting/info"; SmuleUrls2.PerformanceCommentReportAbuse = SmuleUrls2.baseUrl + "/performance/commentReportAbuse"; SmuleUrls2.PerformanceConnected = SmuleUrls2.baseUrl + "/performance/connected"; SmuleUrls2.PerformanceCreate = SmuleUrls2.baseUrl + "/performance/create"; SmuleUrls2.PerformanceDelete = SmuleUrls2.baseUrl + "/performance/delete"; SmuleUrls2.PerformanceDeleteComment = SmuleUrls2.baseUrl + "/performance/deleteComment"; SmuleUrls2.PerformanceGetComments = SmuleUrls2.baseUrl + "/performance/getComments"; SmuleUrls2.PerformanceGetLoves = SmuleUrls2.baseUrl + "/performance/getLoves"; SmuleUrls2.PerformanceGiftTransactions = SmuleUrls2.baseUrl + "/performance/giftTransactions"; SmuleUrls2.PerformanceIsBookmarkSeed = SmuleUrls2.baseUrl + "/performance/isBookmarkSeed"; SmuleUrls2.PerformanceJoin = SmuleUrls2.baseUrl + "/performance/join"; SmuleUrls2.PerformanceJoiners = SmuleUrls2.baseUrl + "/performance/joiners"; SmuleUrls2.PerformanceLimits = SmuleUrls2.baseUrl + "/performance/limits"; SmuleUrls2.PerformanceList = SmuleUrls2.baseUrl + "/performance/list"; SmuleUrls2.PerformanceListRec = SmuleUrls2.baseUrl + "/performance/list/rec"; SmuleUrls2.PerformanceListSeeds = SmuleUrls2.baseUrl + "/performance/list/seeds"; SmuleUrls2.PerformanceListDetails = SmuleUrls2.baseUrl + "/performance/listDetails"; SmuleUrls2.PerformanceLists = SmuleUrls2.baseUrl + "/performance/lists"; SmuleUrls2.PerformanceListsRec = SmuleUrls2.baseUrl + "/performance/lists/rec"; SmuleUrls2.PerformanceListen = SmuleUrls2.baseUrl + "/performance/listen"; SmuleUrls2.PerformanceListenStart = SmuleUrls2.baseUrl + "/performance/listenStart"; SmuleUrls2.PerformanceLogRecCompletedArr = SmuleUrls2.baseUrl + "/performance/logRecCompletedArr"; SmuleUrls2.PerformanceLove = SmuleUrls2.baseUrl + "/performance/love"; SmuleUrls2.PerformanceNetwork = SmuleUrls2.baseUrl + "/performance/network"; SmuleUrls2.PerformanceParts = SmuleUrls2.baseUrl + "/performance/parts"; SmuleUrls2.PerformancePlay = SmuleUrls2.baseUrl + "/performance/play"; SmuleUrls2.PerformanceRecentTracks = SmuleUrls2.baseUrl + "/performance/recentTracks"; SmuleUrls2.PerformanceRender = SmuleUrls2.baseUrl + "/performance/render"; SmuleUrls2.PerformanceRenderTrimmed = SmuleUrls2.baseUrl + "/performance/render/trimmed"; SmuleUrls2.PerformanceReportAbuse = SmuleUrls2.baseUrl + "/performance/reportAbuse"; SmuleUrls2.PerformanceSearchByTag = SmuleUrls2.baseUrl + "/performance/search/byTag"; SmuleUrls2.PerformanceSeedExtend = SmuleUrls2.baseUrl + "/performance/seed/extend"; SmuleUrls2.PerformanceShow = SmuleUrls2.baseUrl + "/performance/show"; SmuleUrls2.PerformanceTracks = SmuleUrls2.baseUrl + "/performance/tracks"; SmuleUrls2.PerformanceTracksDelete = SmuleUrls2.baseUrl + "/performance/tracks/delete"; SmuleUrls2.PerformanceUnvote = SmuleUrls2.baseUrl + "/performance/unvote"; SmuleUrls2.PerformanceUpnext = SmuleUrls2.baseUrl + "/performance/upnext"; SmuleUrls2.PerformanceVote = SmuleUrls2.baseUrl + "/performance/vote"; SmuleUrls2.PerformanceVoting = SmuleUrls2.baseUrl + "/performance/voting"; SmuleUrls2.getPerformanceUploadUrl = (hostName) => "https://" + hostName + "/v2/perf/upload"; SmuleUrls2.Pref = SmuleUrls2.baseUrl + "/pref"; SmuleUrls2.PrefUpdate = SmuleUrls2.baseUrl + "/pref/update"; SmuleUrls2.Promotion = SmuleUrls2.baseUrl + "/promotion"; SmuleUrls2.PlaylistExplore = SmuleUrls2.baseUrl + "/playlist/explore"; SmuleUrls2.PlaylistGet = SmuleUrls2.baseUrl + "/playlist/get"; SmuleUrls2.PushTokenRegister = SmuleUrls2.baseUrl + "/pushToken/register"; SmuleUrls2.ProfileSearch = SmuleUrls2.baseUrl + "/profile/search"; SmuleUrls2.ProfileSearchAutocomplete = SmuleUrls2.baseUrl + "/profile/search/autocomplete"; SmuleUrls2.RecAccount = SmuleUrls2.baseUrl + "/rec/account"; SmuleUrls2.RecAcct = SmuleUrls2.baseUrl + "/rec/acct"; SmuleUrls2.RecComp = SmuleUrls2.baseUrl + "/rec/comp"; SmuleUrls2.RecCompLocale = SmuleUrls2.baseUrl + "/rec/comp/locale"; SmuleUrls2.RecCompSimilar = SmuleUrls2.baseUrl + "/rec/comp/similar"; SmuleUrls2.RecSelect = SmuleUrls2.baseUrl + "/rec/select"; SmuleUrls2.RecSongSimilar = SmuleUrls2.baseUrl + "/rec/song/similar"; SmuleUrls2.RecSongs = SmuleUrls2.baseUrl + "/rec/songs"; SmuleUrls2.RecTsrch = SmuleUrls2.baseUrl + "/rec/tsrch"; SmuleUrls2.Settings = SmuleUrls2.baseUrl + "/settings"; SmuleUrls2.SocialActivityFeed = SmuleUrls2.baseUrl + "/social/activityFeed"; SmuleUrls2.SocialBlockList = SmuleUrls2.baseUrl + "/social/block/list"; SmuleUrls2.SocialBlockUpdate = SmuleUrls2.baseUrl + "/social/block/update"; SmuleUrls2.SocialFeed = SmuleUrls2.baseUrl + "/social/feed"; SmuleUrls2.SocialFeedList = SmuleUrls2.baseUrl + "/social/feed/list"; SmuleUrls2.SocialFollowee = SmuleUrls2.baseUrl + "/social/followee"; SmuleUrls2.SocialFolloweeUpdate = SmuleUrls2.baseUrl + "/social/followee/update"; SmuleUrls2.SocialFollower = SmuleUrls2.baseUrl + "/social/follower"; SmuleUrls2.SocialFollowerByActiveness = SmuleUrls2.baseUrl + "/social/follower/byActiveness"; SmuleUrls2.SocialInfo = SmuleUrls2.baseUrl + "/social/info"; SmuleUrls2.SocialIsFollowing = SmuleUrls2.baseUrl + "/social/isFollowing"; SmuleUrls2.SocialMyFeed = SmuleUrls2.baseUrl + "/social/myFeed"; SmuleUrls2.SocialNotificationActivity = SmuleUrls2.baseUrl + "/social/notification/activity"; SmuleUrls2.SocialNotificationList = SmuleUrls2.baseUrl + "/social/notification/list"; SmuleUrls2.SocialNotificationLookup = SmuleUrls2.baseUrl + "/social/notification/lookup"; SmuleUrls2.SocialNotificationNewCounts = SmuleUrls2.baseUrl + "/social/notification/new/counts"; SmuleUrls2.Songbook = SmuleUrls2.baseUrl + "/songbook"; SmuleUrls2.SongbookGuest = SmuleUrls2.baseUrl + "/songbook/guest"; SmuleUrls2.SongbookUpdate = SmuleUrls2.baseUrl + "/songbook/update"; SmuleUrls2.StoreBalance = SmuleUrls2.baseUrl + "/store/balance"; SmuleUrls2.StoreCoinSpend = SmuleUrls2.baseUrl + "/store/coin/spend"; SmuleUrls2.StoreCoinpackList = SmuleUrls2.baseUrl + "/store/coinpack/list"; SmuleUrls2.StoreConsumablePurchaseConfirm = SmuleUrls2.baseUrl + "/store/consumable/purchase/confirm"; SmuleUrls2.StoreCreditPlans = SmuleUrls2.baseUrl + "/store/credit/plans"; SmuleUrls2.StoreCreditPurchaseConfirm = SmuleUrls2.baseUrl + "/store/credit/purchase/confirm"; SmuleUrls2.StoreGoogleSubscriptionValidate = SmuleUrls2.baseUrl + "/store/google/subscription/validate"; SmuleUrls2.StorePlayerEntitlementList = SmuleUrls2.baseUrl + "/store/player/entitlement/list"; SmuleUrls2.StoreProductAcquire = SmuleUrls2.baseUrl + "/store/product/acquire"; SmuleUrls2.StoreProductAcquireFree = SmuleUrls2.baseUrl + "/store/product/acquire_free"; SmuleUrls2.StoreProductPurchase = SmuleUrls2.baseUrl + "/store/product/purchase"; SmuleUrls2.StoreProductReward = SmuleUrls2.baseUrl + "/store/product/reward"; SmuleUrls2.StoreRewardCoins = SmuleUrls2.baseUrl + "/store/rewardCoins"; SmuleUrls2.StoreSkuPlansConsumables = SmuleUrls2.baseUrl + "/store/sku/plans/consumables"; SmuleUrls2.StoreSkuType = SmuleUrls2.baseUrl + "/store/sku/type"; SmuleUrls2.StoreSong = SmuleUrls2.baseUrl + "/store/song"; SmuleUrls2.StoreSoundfont = SmuleUrls2.baseUrl + "/store/soundfont"; SmuleUrls2.StoreStore = SmuleUrls2.baseUrl + "/store/store"; SmuleUrls2.StoreStreamLog = SmuleUrls2.baseUrl + "/store/stream/log"; SmuleUrls2.StoreSubscriptionStatus = SmuleUrls2.baseUrl + "/store/subscription/status"; SmuleUrls2.StoreSubscriptionUpdate = SmuleUrls2.baseUrl + "/store/subscription/update"; SmuleUrls2.SparkChatList = SmuleUrls2.baseUrl + "/spark/chat/list"; SmuleUrls2.SparkChatOffline = SmuleUrls2.baseUrl + "/spark/chat/offline"; SmuleUrls2.SparkChatUpdate = SmuleUrls2.baseUrl + "/spark/chat/update"; SmuleUrls2.SparkPushMuteState = SmuleUrls2.baseUrl + "/spark/push/mutestate"; SmuleUrls2.SparkPushMuteStateUpdate = SmuleUrls2.baseUrl + "/spark/push/mutestate/update"; SmuleUrls2.SingCoverPhotoDelete = SmuleUrls2.baseUrl + "/sing/coverPhoto/delete"; SmuleUrls2.SingCoverPhotoUpload = SmuleUrls2.baseUrl + "/sing/coverPhoto/upload"; SmuleUrls2.SingOpenCallGet = SmuleUrls2.baseUrl + "/sing/opencall/get"; SmuleUrls2.SingOpenCallGetByPlayer = SmuleUrls2.baseUrl + "/sing/opencall/getByPlayer"; SmuleUrls2.SingOpenCallGetBySong = SmuleUrls2.baseUrl + "/sing/opencall/getBySong"; SmuleUrls2.SingOpenCallGetSuggested = SmuleUrls2.baseUrl + "/sing/opencall/getSuggested"; SmuleUrls2.SingOpenCallSetPrivacy = SmuleUrls2.baseUrl + "/sing/opencall/setPrivacy"; SmuleUrls2.SingPerfOpenCallByPlayer = SmuleUrls2.baseUrl + "/sing/perfOpencall/byPlayer"; SmuleUrls2.SingProfileUpdate = SmuleUrls2.baseUrl + "/sing/profile/update"; SmuleUrls2.SingUserProfile = SmuleUrls2.baseUrl + "/sing/user/profile"; SmuleUrls2.SingUserProfileMe = SmuleUrls2.baseUrl + "/sing/user/profile/me"; SmuleUrls2.SfamAdminBan = SmuleUrls2.baseUrl + "/sfam/admin/ban"; SmuleUrls2.SfamAdminChangeRole = SmuleUrls2.baseUrl + "/sfam/admin/member/changerole"; SmuleUrls2.SfamAdminCFireClose = SmuleUrls2.baseUrl + "/sfam/admin/cfire/close"; SmuleUrls2.SfamAdminMemberBanList = SmuleUrls2.baseUrl + "/sfam/admin/ban/list"; SmuleUrls2.SfamAdminMemberUnban = SmuleUrls2.baseUrl + "/sfam/admin/unban"; SmuleUrls2.SfamAdminMembershipRequestApprove = SmuleUrls2.baseUrl + "/sfam/admin/mbrship/rqst/approve"; SmuleUrls2.SfamAdminMembershipRequestReject = SmuleUrls2.baseUrl + "/sfam/admin/mbrship/rqst/reject"; SmuleUrls2.SfamCountByMyOwnership = SmuleUrls2.baseUrl + "/sfam/count/myOwnership"; SmuleUrls2.SfamCountMyPendingMembership = SmuleUrls2.baseUrl + "/sfam/count/myPendingMbrship"; SmuleUrls2.SfamCoverPhotoUpload = SmuleUrls2.baseUrl + "/sfam/coverPhoto/upload"; SmuleUrls2.SfamCreate = SmuleUrls2.baseUrl + "/sfam/create"; SmuleUrls2.SfamDelete = SmuleUrls2.baseUrl + "/sfam/delete"; SmuleUrls2.SfamInfo = SmuleUrls2.baseUrl + "/sfam/info"; SmuleUrls2.SfamList = SmuleUrls2.baseUrl + "/sfam/list"; SmuleUrls2.SfamListByAccountMember = SmuleUrls2.baseUrl + "/sfam/list/byAcct/member"; SmuleUrls2.SfamListByAccountOwner = SmuleUrls2.baseUrl + "/sfam/list/byAcct/owner"; SmuleUrls2.SfamListByAccountRoles = SmuleUrls2.baseUrl + "/sfam/list/byAcct/roles"; SmuleUrls2.SfamListMyRequests = SmuleUrls2.baseUrl + "/sfam/list/myRqst"; SmuleUrls2.SfamListMyInvitation = SmuleUrls2.baseUrl + "/sfam/list/myInvtn"; SmuleUrls2.SfamMemberLeave = SmuleUrls2.baseUrl + "/sfam/member/leave"; SmuleUrls2.SfamMemberList = SmuleUrls2.baseUrl + "/sfam/member/list"; SmuleUrls2.SfamMemberReport = SmuleUrls2.baseUrl + "/sfam/member/report"; SmuleUrls2.SfamMembershipInvitationAccept = SmuleUrls2.baseUrl + "/sfam/mbrship/invtn/accept"; SmuleUrls2.SfamMembershipInvitationCancel = SmuleUrls2.baseUrl + "/sfam/mbrship/invtn/cancel"; SmuleUrls2.SfamMembershipInvitationReject = SmuleUrls2.baseUrl + "/sfam/mbrship/invtn/reject"; SmuleUrls2.SfamMembershipInvitationSend = SmuleUrls2.baseUrl + "/sfam/mbrship/invtn/send"; SmuleUrls2.SfamMembershipRequestRoles = SmuleUrls2.baseUrl + "/sfam/mbrship/rqst/roles"; SmuleUrls2.SfamMembershipRequestSend = SmuleUrls2.baseUrl + "/sfam/mbrship/rqst/send"; SmuleUrls2.SfamPostAdd = SmuleUrls2.baseUrl + "/sfam/post/add"; SmuleUrls2.SfamPostFeed = SmuleUrls2.baseUrl + "/sfam/post/feed"; SmuleUrls2.SfamPostRemove = SmuleUrls2.baseUrl + "/sfam/post/remove"; SmuleUrls2.SfamSearchHandle = SmuleUrls2.baseUrl + "/sfam/search/handle"; SmuleUrls2.SfamUpdate = SmuleUrls2.baseUrl + "/sfam/update"; SmuleUrls2.Search = SmuleUrls2.baseUrl + "/search"; SmuleUrls2.SearchAutocomplete = SmuleUrls2.baseUrl + "/search/autocomplete"; SmuleUrls2.SearchGlobal = SmuleUrls2.baseUrl + "/search/global"; SmuleUrls2.SearchSongbook = SmuleUrls2.baseUrl + "/search/songbook"; SmuleUrls2.SearchSongbookAutocomplete = SmuleUrls2.baseUrl + "/search/songbook/autocomplete"; SmuleUrls2.SongPlay = SmuleUrls2.baseUrl + "/song/play"; SmuleUrls2.StudioPerformance = SmuleUrls2.baseUrl + "/studio/performance"; SmuleUrls2.StudioPerformanceByPerformer = SmuleUrls2.baseUrl + "/studio/performance/byPerformer"; SmuleUrls2.StudioPerformanceChildren = SmuleUrls2.baseUrl + "/studio/performance/children"; SmuleUrls2.StudioPerformanceList = SmuleUrls2.baseUrl + "/studio/performance/list"; SmuleUrls2.StudioSearchSegPerf = SmuleUrls2.baseUrl + "/studio/search/segPerf"; SmuleUrls2.StkrList = SmuleUrls2.baseUrl + "/stkr/list"; SmuleUrls2.Topic = SmuleUrls2.baseUrl + "/topic"; SmuleUrls2.TopicChoose = SmuleUrls2.baseUrl + "/topic/choose"; SmuleUrls2.TopicOnboarding = SmuleUrls2.baseUrl + "/topic/onboarding"; SmuleUrls2.TopicOption = SmuleUrls2.baseUrl + "/topic/option"; SmuleUrls2.TopicSelect = SmuleUrls2.baseUrl + "/topic/select"; SmuleUrls2.TrackUploadAudio = SmuleUrls2.baseUrl + "/track/uploadAudio"; SmuleUrls2.TrackUploadAudioResource = SmuleUrls2.baseUrl + "/track/uploadAudioResource"; SmuleUrls2.TrackUploadTrackAudio = SmuleUrls2.baseUrl + "/track/uploadTrackAudio"; SmuleUrls2.TrackUploadVideo = SmuleUrls2.baseUrl + "/track/uploadVideo"; SmuleUrls2.UserActivationSend = SmuleUrls2.baseUrl + "/user/activation/send"; SmuleUrls2.UserBlurb = SmuleUrls2.baseUrl + "/user/blurb"; SmuleUrls2.UserBlurbUpdate = SmuleUrls2.baseUrl + "/user/blurb/update"; SmuleUrls2.UserConnectedPhone = SmuleUrls2.baseUrl + "/user/connectedPhone"; SmuleUrls2.UserDeviceLogin = SmuleUrls2.baseUrl + "/user/device/login"; SmuleUrls2.UserDeviceLookup = SmuleUrls2.baseUrl + "/user/device/lookup"; SmuleUrls2.UserEmailExistingCodeSend = SmuleUrls2.baseUrl + "/user/email/existing/code/send"; SmuleUrls2.UserEmailExistingConfirm = SmuleUrls2.baseUrl + "/user/email/existing/confirm"; SmuleUrls2.UserEmailExistingResend = SmuleUrls2.baseUrl + "/user/email/existing/resend"; SmuleUrls2.UserEmailRegisterComplete = SmuleUrls2.baseUrl + "/user/email/register/complete"; SmuleUrls2.UserEmailRegisterResend = SmuleUrls2.baseUrl + "/user/email/register/resend"; SmuleUrls2.UserEmailUpdateConfirm = SmuleUrls2.baseUrl + "/user/email/update/confirm"; SmuleUrls2.UserEmailUpdateResend = SmuleUrls2.baseUrl + "/user/email/update/resend"; SmuleUrls2.UserEmailRegister = SmuleUrls2.baseUrl + "/user/emailRegister"; SmuleUrls2.UserGoogleLogin = SmuleUrls2.baseUrl + "/user/google/login"; SmuleUrls2.UserGuestLogin = SmuleUrls2.baseUrl + "/user/guestLogin"; SmuleUrls2.UserInit = SmuleUrls2.baseUrl + "/user/init"; SmuleUrls2.UserLogin = SmuleUrls2.baseUrl + "/user/login"; SmuleUrls2.UserLookup = SmuleUrls2.baseUrl + "/user/lookup"; SmuleUrls2.UserPasswordReset = SmuleUrls2.baseUrl + "/user/password/reset"; SmuleUrls2.UserPersonalUpdate = SmuleUrls2.baseUrl + "/user/personal/update"; SmuleUrls2.UserProfileUpdate = SmuleUrls2.baseUrl + "/user/personal/update"; SmuleUrls2.UserPhoneConnect = SmuleUrls2.baseUrl + "/user/phone/connect"; SmuleUrls2.UserPictureDelete = SmuleUrls2.baseUrl + "/user/picture/delete"; SmuleUrls2.UserProfile = SmuleUrls2.baseUrl + "/user/profile"; SmuleUrls2.UserSearchAutocomplete = SmuleUrls2.baseUrl + "/user/search/autocomplete"; SmuleUrls2.UserSearchByHandle = SmuleUrls2.baseUrl + "/user/search/byHandle"; SmuleUrls2.UserTippingHandleDelete = SmuleUrls2.baseUrl + "/user/tipping/handle/delete"; SmuleUrls2.UserTippingHandleUpdate = SmuleUrls2.baseUrl + "/user/tipping/handle/update"; SmuleUrls2.UserTippingProviders = SmuleUrls2.baseUrl + "/user/tipping/providers"; SmuleUrls2.UserTippingUpdate = SmuleUrls2.baseUrl + "/user/tipping/update"; SmuleUrls2.UserUpdate = SmuleUrls2.baseUrl + "/user/update"; SmuleUrls2.UserUploadPicture = SmuleUrls2.baseUrl + "/user/uploadPicture"; SmuleUrls2.GuestProhibited = /* @__PURE__ */ new Set([ SmuleUrls2.AccountDeleteSubmit, SmuleUrls2.AccountInfo, SmuleUrls2.AccountStats, SmuleUrls2.AccountWallet, SmuleUrls2.AnalyticsCfireStats, SmuleUrls2.Aplist, SmuleUrls2.AplistCreate, SmuleUrls2.AplistDelete, SmuleUrls2.AplistFavorites, SmuleUrls2.AplistFavoritesCreate, SmuleUrls