module.exports = Session var constants = require('../lib/constants') var Snapchat = require('../') var User = require('./user') var Conversation = require('./conversation') var UserStory = require('./user-story') var StoryCollection = require('./story-collection') /** * Snapchat Session * * @class * @param {Snapchat} client * @param {Object} params */ function Session (client, params) { var self = this if (!(self instanceof Session)) return new Session(client, params) if (!(client instanceof Snapchat)) throw new Error('invalid client') self.client = client var storiesResponse = params['stories_response'] var friendsResponse = params['friends_response'] var updatesResponse = params['updates_response'] var identity = params['identity_check_response'] var features = updatesResponse['feature_settings'] var discover = params['discover'] var messagingGate = params['messaging_gateway_info'] var friendStories = storiesResponse['friend_stories'] || [] var myStories = storiesResponse['my_stories'] || [] // var groupStories = storiesResponse['my_group_stories'] || [] var friends = friendsResponse['friends'] || [] var addedFriends = friendsResponse['added_friends'] || [] var conversations = params['conversations_response'] || [] self.backgroundFetchSecret = params['background_fetch_secret_key'] self.bestFriendUsernames = friendsResponse['bests'] || [] self.storiesDelta = !!storiesResponse['friend_stories_delta'] self.emailVerified = !!identity['is_email_verified'] self.highAccuracyRequiredForNearby = !!identity['is_high_accuracy_required_for_nearby'] self.requirePhonePasswordConfirmed = !!identity['require_phone_password_confirmed'] self.redGearDurationMilliseconds = +identity['red_gear_duration_millis'] self.suggestedFriendFetchThresholdHours = identity['suggested_friend_fetch_threshold_hours'] | 0 self.messagingGatewayAuth = messagingGate['gateway_auth_token'] self.messagingGatewayServer = messagingGate['gateway_server'] // Discover self.discoverSupported = (discover['compatibility'] === 'supported') self.discoverSharingEnabled = !!discover['sharing_enabled'] self.discoverGetChannels = discover['get_channels'] self.discoverResourceParamName = discover['resource_parameter_name'] self.discoverResourceParamValue = discover['resource_parameter_value'] self.discoverVideoCatalog = discover['video_catalog'] // Friends self.friends = friends.map(function (friend) { return new User(friend) }) // Added friends self.addedFriends = addedFriends.map(function (friend) { return new User(friend) }) // Conversations self.conversations = conversations.map(function (conversation) { return new Conversation(conversation) }) // Story collections self.stories = friendStories.map(function (collection) { return new StoryCollection(self.client, collection) }) // User stories self.userStories = myStories.map(function (story) { return new UserStory(story) }) // Group stories? self.groupStories = [ ] // TODO // Added me but not added back self.pendingRequests = [ ] // TODO // Cash info self.canUseCash = !!updatesResponse['allowed_to_use_cash'] self.isCashActive = !!updatesResponse['is_cash_active'] self.cashCustomerIdentifier = updatesResponse['cash_customer_id'] self.cashClientProperties = updatesResponse['client_properties'] self.cashProvider = updatesResponse['cash_provider'] // Basic user info self.username = updatesResponse['username'] self.email = updatesResponse['email'] self.mobileNumber = updatesResponse['mobile'] self.recieved = updatesResponse['recieved'] | 0 self.sent = updatesResponse['sent'] | 0 self.score = updatesResponse['score'] | 0 self.recents = updatesResponse['recents'] || [] self.requests = updatesResponse['requests'] || [] // Account information self.addedFriendsTimestamp = new Date(updatesResponse['added_friends_timestamp']) self.authToken = updatesResponse['auth_token'] self.canSeeMatureContent = !!updatesResponse['can_view_mature_content'] self.countryCode = updatesResponse['country_code'] || 'US' self.lastTimestamp = new Date(updatesResponse['cash_provider']) self.devicetoken = updatesResponse['device_token'] self.canSaveStoryToGallery = !!updatesResponse['enable_save_story_to_gallery'] self.canVideoTranscodingAndroid = !!updatesResponse['enable_video_transcoding_android'] self.imageCaption = !!updatesResponse['image_caption'] self.requireRefreshingProfileMedia = !!updatesResponse['require_refreshing_profile_media'] self.isTwoFAEnabled = !!updatesResponse['is_two_fa_enabled'] self.lastAddressBookUpdateDate = new Date(updatesResponse['last_address_book_updated_date']) self.lastReplayedSnapDate = new Date(updatesResponse['last_replayed_snap_timestamp']) self.logged = !!updatesResponse['logged'] self.mobileVerificationKey = updatesResponse['mobile_verification_key'] self.canUploadRawThumbnail = !!updatesResponse['raw_thumbnail_upload_enabled'] self.seenTooltips = updatesResponse['seen_tooltips'] self.shouldCallToVerifyNumber = !!updatesResponse['should_call_to_verify_number'] self.shouldTextToVerifyNumber = !!updatesResponse['should_send_text_to_verify_number'] self.snapchatPhoneNumber = updatesResponse['snapchat_phone_number'] self.studySettings = updatesResponse['study_settings'] self.targeting = updatesResponse['targeting'] self.userIdentifier = updatesResponse['user_id'] self.videoFiltersEnabled = !!updatesResponse['video_filters_enabled'] self.QRPath = updatesResponse['qr_path'] // Preferences self.enableNotificationSounds = !!updatesResponse['notification_sound_setting'] self.numberOfBestFriends = updatesResponse['number_of_best_friends'] | 0 self.privacyEveryone = !updatesResponse['snap_p'] self.isSearchableByPhoneNumber = !!updatesResponse['searchable_by_phone_number'] // self.storyPrivacy = SKStoryPrivacyFromString(updatesResponse['story_privacy']) // TODO // Features self.enableFrontFacingFlash = !!features[constants.featureSettings.frontFacingFlash] self.enablePowerSaveMode = !!features[constants.featureSettings.powerSaveMode] self.enableReplaySnaps = !!features[constants.featureSettings.replaySnaps] self.enableSmartFilters = !!features[constants.featureSettings.smartFilters] self.enableSpecialText = !!features[constants.featureSettings.specialText] self.enableSwipeCashMode = !!features[constants.featureSettings.swipeCashMode] self.enableVisualFilters = !!features[constants.featureSettings.visualFilters] self.enableTravelMode = !!features[constants.featureSettings.travelMode] } /** * @param {string} username * @return {User|null} */ Session.prototype.getFriend = function (username) { var self = this for (var i = 0; i < self.friends.length; ++i) { var friend = self.friends[i] if (friend.username === username) { return friend } } return null } /** * @param {string} username * @return {Story|null} */ Session.prototype.getStory = function (username) { var self = this for (var i = 0; i < self.stories.length; i++) { var story = self.stories[i] if (story.username === username) { return story } } return null }