musora-content-services 2.37.0 → 2.39.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (72) hide show
  1. package/CHANGELOG.md +21 -0
  2. package/docs/ContentOrganization.html +2 -2
  3. package/docs/Forums.html +245 -0
  4. package/docs/Gamification.html +2 -2
  5. package/docs/UserManagementSystem.html +2 -2
  6. package/docs/api_types.js.html +2 -2
  7. package/docs/config.js.html +2 -2
  8. package/docs/content-org_content-org.js.html +2 -2
  9. package/docs/content-org_guided-courses.ts.html +11 -19
  10. package/docs/content-org_playlists-types.js.html +2 -2
  11. package/docs/content-org_playlists.js.html +2 -2
  12. package/docs/content.js.html +2 -2
  13. package/docs/forums_categories.ts.html +114 -0
  14. package/docs/forums_discussions.js.html +95 -0
  15. package/docs/forums_forum.js.html +95 -0
  16. package/docs/forums_forums.ts.html +76 -0
  17. package/docs/gamification_awards.ts.html +5 -3
  18. package/docs/gamification_gamification.js.html +2 -2
  19. package/docs/global.html +2 -2
  20. package/docs/index.html +2 -2
  21. package/docs/module-Accounts.html +2 -2
  22. package/docs/module-Awards.html +4 -4
  23. package/docs/module-Config.html +2 -2
  24. package/docs/module-Content-Services-V2.html +2 -2
  25. package/docs/module-ForumCategories.html +491 -0
  26. package/docs/module-ForumDiscussions.html +370 -0
  27. package/docs/module-Forums.html +370 -0
  28. package/docs/module-GuidedCourses.html +2 -2
  29. package/docs/module-Interests.html +2 -2
  30. package/docs/module-Payments.html +36 -6
  31. package/docs/module-Permissions.html +2 -2
  32. package/docs/module-Playlists.html +2 -2
  33. package/docs/module-Railcontent-Services.html +174 -26
  34. package/docs/module-Sanity-Services.html +11 -11
  35. package/docs/module-Sessions.html +3 -3
  36. package/docs/module-UserActivity.html +6 -30
  37. package/docs/module-UserChat.html +2 -2
  38. package/docs/module-UserManagement.html +2 -2
  39. package/docs/module-UserMemberships.html +2 -2
  40. package/docs/module-UserNotifications.html +2 -2
  41. package/docs/module-UserProfile.html +2 -2
  42. package/docs/railcontent.js.html +12 -2
  43. package/docs/sanity.js.html +5 -8
  44. package/docs/userActivity.js.html +24 -48
  45. package/docs/user_account.ts.html +2 -2
  46. package/docs/user_chat.js.html +2 -2
  47. package/docs/user_interests.js.html +2 -2
  48. package/docs/user_management.js.html +2 -2
  49. package/docs/user_memberships.js.html +2 -2
  50. package/docs/user_notifications.js.html +2 -2
  51. package/docs/user_payments.ts.html +17 -8
  52. package/docs/user_permissions.js.html +2 -2
  53. package/docs/user_profile.js.html +2 -2
  54. package/docs/user_sessions.js.html +32 -2
  55. package/docs/user_types.js.html +2 -2
  56. package/docs/user_user-management-system.js.html +2 -2
  57. package/jsdoc.json +1 -0
  58. package/package.json +1 -1
  59. package/src/index.d.ts +14 -9
  60. package/src/index.js +14 -9
  61. package/src/services/content-org/guided-courses.ts +9 -12
  62. package/src/services/contentProgress.js +11 -21
  63. package/src/services/forums/categories.ts +42 -0
  64. package/src/services/forums/forums.ts +4 -0
  65. package/src/services/forums/types.ts +23 -0
  66. package/src/services/gamification/awards.ts +3 -1
  67. package/src/services/imageSRCVerify.js +0 -0
  68. package/src/services/railcontent.js +4 -4
  69. package/src/services/sanity.js +0 -1
  70. package/src/services/user/payments.ts +1 -1
  71. package/src/services/user/sessions.js +28 -13
  72. package/src/services/userActivity.js +4 -11
@@ -29,7 +29,7 @@
29
29
  <nav >
30
30
 
31
31
 
32
- <h2><a href="index.html">Home</a></h2><h3>Modules</h3><ul><li><a href="module-Accounts.html">Accounts</a><ul class='methods'><li data-type='method'><a href="module-Accounts.html#~confirmEmailChange">confirmEmailChange</a></li><li data-type='method'><a href="module-Accounts.html#~requestEmailChange">requestEmailChange</a></li><li data-type='method'><a href="module-Accounts.html#~resetPassword">resetPassword</a></li><li data-type='method'><a href="module-Accounts.html#~sendAccountSetupEmail">sendAccountSetupEmail</a></li><li data-type='method'><a href="module-Accounts.html#~sendPasswordResetEmail">sendPasswordResetEmail</a></li><li data-type='method'><a href="module-Accounts.html#~setupAccount">setupAccount</a></li><li data-type='method'><a href="module-Accounts.html#~status">status</a></li></ul></li><li><a href="module-Awards.html">Awards</a><ul class='methods'><li data-type='method'><a href="module-Awards.html#~fetchAwardsForUser">fetchAwardsForUser</a></li><li data-type='method'><a href="module-Awards.html#~fetchCertificate">fetchCertificate</a></li></ul></li><li><a href="module-Config.html">Config</a><ul class='methods'><li data-type='method'><a href="module-Config.html#.initializeService">initializeService</a></li></ul></li><li><a href="module-Content-Services-V2.html">Content-Services-V2</a><ul class='methods'><li data-type='method'><a href="module-Content-Services-V2.html#.getContentRows">getContentRows</a></li><li data-type='method'><a href="module-Content-Services-V2.html#.getNewAndUpcoming">getNewAndUpcoming</a></li><li data-type='method'><a href="module-Content-Services-V2.html#.getRecent">getRecent</a></li><li data-type='method'><a href="module-Content-Services-V2.html#.getRecentForTab">getRecentForTab</a></li><li data-type='method'><a href="module-Content-Services-V2.html#.getRecommendedForYou">getRecommendedForYou</a></li><li data-type='method'><a href="module-Content-Services-V2.html#.getScheduleContentRows">getScheduleContentRows</a></li><li data-type='method'><a href="module-Content-Services-V2.html#.getTabResults">getTabResults</a></li></ul></li><li><a href="module-GuidedCourses.html">GuidedCourses</a></li><li><a href="module-Interests.html">Interests</a><ul class='methods'><li data-type='method'><a href="module-Interests.html#.fetchInterests">fetchInterests</a></li><li data-type='method'><a href="module-Interests.html#.fetchUninterests">fetchUninterests</a></li><li data-type='method'><a href="module-Interests.html#.markContentAsInterested">markContentAsInterested</a></li><li data-type='method'><a href="module-Interests.html#.markContentAsNotInterested">markContentAsNotInterested</a></li><li data-type='method'><a href="module-Interests.html#.removeContentAsInterested">removeContentAsInterested</a></li><li data-type='method'><a href="module-Interests.html#.removeContentAsNotInterested">removeContentAsNotInterested</a></li></ul></li><li><a href="module-Payments.html">Payments</a><ul class='methods'><li data-type='method'><a href="module-Payments.html#~fetchCustomerPayments">fetchCustomerPayments</a></li></ul></li><li><a href="module-Permissions.html">Permissions</a><ul class='methods'><li data-type='method'><a href="module-Permissions.html#.fetchUserPermissions">fetchUserPermissions</a></li><li data-type='method'><a href="module-Permissions.html#.reset">reset</a></li></ul></li><li><a href="module-Playlists.html">Playlists</a><ul class='methods'><li data-type='method'><a href="module-Playlists.html#.addItemToPlaylist">addItemToPlaylist</a></li><li data-type='method'><a href="module-Playlists.html#.createPlaylist">createPlaylist</a></li><li data-type='method'><a href="module-Playlists.html#.deletePlaylist">deletePlaylist</a></li><li data-type='method'><a href="module-Playlists.html#.duplicatePlaylist">duplicatePlaylist</a></li><li data-type='method'><a href="module-Playlists.html#.fetchPlaylist">fetchPlaylist</a></li><li data-type='method'><a href="module-Playlists.html#.fetchPlaylistItems">fetchPlaylistItems</a></li><li data-type='method'><a href="module-Playlists.html#.fetchUserPlaylists">fetchUserPlaylists</a></li><li data-type='method'><a href="module-Playlists.html#.togglePlaylistPrivate">togglePlaylistPrivate</a></li><li data-type='method'><a href="module-Playlists.html#.undeletePlaylist">undeletePlaylist</a></li><li data-type='method'><a href="module-Playlists.html#.updatePlaylist">updatePlaylist</a></li><li data-type='method'><a href="module-Playlists.html#~deleteItemsFromPlaylist">deleteItemsFromPlaylist</a></li><li data-type='method'><a href="module-Playlists.html#~likePlaylist">likePlaylist</a></li><li data-type='method'><a href="module-Playlists.html#~reportPlaylist">reportPlaylist</a></li><li data-type='method'><a href="module-Playlists.html#~restoreItemFromPlaylist">restoreItemFromPlaylist</a></li><li data-type='method'><a href="module-Playlists.html#~unlikePlaylist">unlikePlaylist</a></li></ul></li><li><a href="module-Railcontent-Services.html">Railcontent-Services</a><ul class='methods'><li data-type='method'><a href="module-Railcontent-Services.html#.assignModeratorToComment">assignModeratorToComment</a></li><li data-type='method'><a href="module-Railcontent-Services.html#.closeComment">closeComment</a></li><li data-type='method'><a href="module-Railcontent-Services.html#.createComment">createComment</a></li><li data-type='method'><a href="module-Railcontent-Services.html#.deleteComment">deleteComment</a></li><li data-type='method'><a href="module-Railcontent-Services.html#.editComment">editComment</a></li><li data-type='method'><a href="module-Railcontent-Services.html#.fetchAllCompletedStates">fetchAllCompletedStates</a></li><li data-type='method'><a href="module-Railcontent-Services.html#.fetchCarouselCardData">fetchCarouselCardData</a></li><li data-type='method'><a href="module-Railcontent-Services.html#.fetchComment">fetchComment</a></li><li data-type='method'><a href="module-Railcontent-Services.html#.fetchCommentRelies">fetchCommentRelies</a></li><li data-type='method'><a href="module-Railcontent-Services.html#.fetchComments">fetchComments</a></li><li data-type='method'><a href="module-Railcontent-Services.html#.fetchCompletedContent">fetchCompletedContent</a></li><li data-type='method'><a href="module-Railcontent-Services.html#.fetchCompletedState">fetchCompletedState</a></li><li data-type='method'><a href="module-Railcontent-Services.html#.fetchContentInProgress">fetchContentInProgress</a></li><li data-type='method'><a href="module-Railcontent-Services.html#.fetchContentPageUserData">fetchContentPageUserData</a></li><li data-type='method'><a href="module-Railcontent-Services.html#.fetchNextContentDataForParent">fetchNextContentDataForParent</a></li><li data-type='method'><a href="module-Railcontent-Services.html#.fetchRecentUserActivities">fetchRecentUserActivities</a></li><li data-type='method'><a href="module-Railcontent-Services.html#.fetchSongsInProgress">fetchSongsInProgress</a></li><li data-type='method'><a href="module-Railcontent-Services.html#.fetchTopComment">fetchTopComment</a></li><li data-type='method'><a href="module-Railcontent-Services.html#.fetchUserAward">fetchUserAward</a></li><li data-type='method'><a href="module-Railcontent-Services.html#.fetchUserBadges">fetchUserBadges</a></li><li data-type='method'><a href="module-Railcontent-Services.html#.fetchUserPracticeNotes">fetchUserPracticeNotes</a></li><li data-type='method'><a href="module-Railcontent-Services.html#.likeComment">likeComment</a></li><li data-type='method'><a href="module-Railcontent-Services.html#.openComment">openComment</a></li><li data-type='method'><a href="module-Railcontent-Services.html#.postContentComplete">postContentComplete</a></li><li data-type='method'><a href="module-Railcontent-Services.html#.postContentReset">postContentReset</a></li><li data-type='method'><a href="module-Railcontent-Services.html#.postContentRestore">postContentRestore</a></li><li data-type='method'><a href="module-Railcontent-Services.html#.replyToComment">replyToComment</a></li><li data-type='method'><a href="module-Railcontent-Services.html#.reportComment">reportComment</a></li><li data-type='method'><a href="module-Railcontent-Services.html#.restoreComment">restoreComment</a></li><li data-type='method'><a href="module-Railcontent-Services.html#.setStudentViewForUser">setStudentViewForUser</a></li><li data-type='method'><a href="module-Railcontent-Services.html#.unassignModeratorToComment">unassignModeratorToComment</a></li><li data-type='method'><a href="module-Railcontent-Services.html#.unlikeComment">unlikeComment</a></li><li data-type='method'><a href="module-Railcontent-Services.html#~fetchLastInteractedChild">fetchLastInteractedChild</a></li></ul></li><li><a href="module-Sanity-Services.html">Sanity-Services</a><ul class='methods'><li data-type='method'><a href="module-Sanity-Services.html#.fetchAll">fetchAll</a></li><li data-type='method'><a href="module-Sanity-Services.html#.fetchAllFilterOptions">fetchAllFilterOptions</a></li><li data-type='method'><a href="module-Sanity-Services.html#.fetchAllPacks">fetchAllPacks</a></li><li data-type='method'><a href="module-Sanity-Services.html#.fetchArtistLessons">fetchArtistLessons</a></li><li data-type='method'><a href="module-Sanity-Services.html#.fetchArtists">fetchArtists</a></li><li data-type='method'><a href="module-Sanity-Services.html#.fetchByRailContentId">fetchByRailContentId</a></li><li data-type='method'><a href="module-Sanity-Services.html#.fetchByRailContentIds">fetchByRailContentIds</a></li><li data-type='method'><a href="module-Sanity-Services.html#.fetchByReference">fetchByReference</a></li><li data-type='method'><a href="module-Sanity-Services.html#.fetchCoachLessons">fetchCoachLessons</a></li><li data-type='method'><a href="module-Sanity-Services.html#.fetchComingSoon">fetchComingSoon</a></li><li data-type='method'><a href="module-Sanity-Services.html#.fetchCommentModContentData">fetchCommentModContentData</a></li><li data-type='method'><a href="module-Sanity-Services.html#.fetchFoundation">fetchFoundation</a></li><li data-type='method'><a href="module-Sanity-Services.html#.fetchGenreLessons">fetchGenreLessons</a></li><li data-type='method'><a href="module-Sanity-Services.html#.fetchLeaving">fetchLeaving</a></li><li data-type='method'><a href="module-Sanity-Services.html#.fetchLessonContent">fetchLessonContent</a></li><li data-type='method'><a href="module-Sanity-Services.html#.fetchLessonsFeaturingThisContent">fetchLessonsFeaturingThisContent</a></li><li data-type='method'><a href="module-Sanity-Services.html#.fetchMetadata">fetchMetadata</a></li><li data-type='method'><a href="module-Sanity-Services.html#.fetchMethod">fetchMethod</a></li><li data-type='method'><a href="module-Sanity-Services.html#.fetchMethodChildren">fetchMethodChildren</a></li><li data-type='method'><a href="module-Sanity-Services.html#.fetchMethodChildrenIds">fetchMethodChildrenIds</a></li><li data-type='method'><a href="module-Sanity-Services.html#.fetchMethodPreviousNextLesson">fetchMethodPreviousNextLesson</a></li><li data-type='method'><a href="module-Sanity-Services.html#.fetchNewReleases">fetchNewReleases</a></li><li data-type='method'><a href="module-Sanity-Services.html#.fetchNextPreviousLesson">fetchNextPreviousLesson</a></li><li data-type='method'><a href="module-Sanity-Services.html#.fetchOtherSongVersions">fetchOtherSongVersions</a></li><li data-type='method'><a href="module-Sanity-Services.html#.fetchPackAll">fetchPackAll</a></li><li data-type='method'><a href="module-Sanity-Services.html#.fetchPackData">fetchPackData</a></li><li data-type='method'><a href="module-Sanity-Services.html#.fetchParentForDownload">fetchParentForDownload</a></li><li data-type='method'><a href="module-Sanity-Services.html#.fetchRelatedLessons">fetchRelatedLessons</a></li><li data-type='method'><a href="module-Sanity-Services.html#.fetchRelatedRecommendedContent">fetchRelatedRecommendedContent</a></li><li data-type='method'><a href="module-Sanity-Services.html#.fetchRelatedSongs">fetchRelatedSongs</a></li><li data-type='method'><a href="module-Sanity-Services.html#.fetchReturning">fetchReturning</a></li><li data-type='method'><a href="module-Sanity-Services.html#.fetchSanity">fetchSanity</a></li><li data-type='method'><a href="module-Sanity-Services.html#.fetchScheduledReleases">fetchScheduledReleases</a></li><li data-type='method'><a href="module-Sanity-Services.html#.fetchShowsData">fetchShowsData</a></li><li data-type='method'><a href="module-Sanity-Services.html#.fetchSiblingContent">fetchSiblingContent</a></li><li data-type='method'><a href="module-Sanity-Services.html#.fetchSongArtistCount">fetchSongArtistCount</a></li><li data-type='method'><a href="module-Sanity-Services.html#.fetchSongById">fetchSongById</a></li><li data-type='method'><a href="module-Sanity-Services.html#.fetchUpcomingEvents">fetchUpcomingEvents</a></li><li data-type='method'><a href="module-Sanity-Services.html#.jumpToContinueContent">jumpToContinueContent</a></li><li data-type='method'><a href="module-Sanity-Services.html#~fetchRelatedByLicense">fetchRelatedByLicense</a></li><li data-type='method'><a href="module-Sanity-Services.html#~getQueryFromPage">getQueryFromPage</a></li></ul></li><li><a href="module-Sessions.html">Sessions</a><ul class='methods'><li data-type='method'><a href="module-Sessions.html#.login">login</a></li><li data-type='method'><a href="module-Sessions.html#.logout">logout</a></li></ul></li><li><a href="module-UserActivity.html">UserActivity</a><ul class='methods'><li data-type='method'><a href="module-UserActivity.html#.calculateLongestStreaks">calculateLongestStreaks</a></li><li data-type='method'><a href="module-UserActivity.html#.createPracticeNotes">createPracticeNotes</a></li><li data-type='method'><a href="module-UserActivity.html#.deletePracticeSession">deletePracticeSession</a></li><li data-type='method'><a href="module-UserActivity.html#.deleteUserActivity">deleteUserActivity</a></li><li data-type='method'><a href="module-UserActivity.html#.getPracticeNotes">getPracticeNotes</a></li><li data-type='method'><a href="module-UserActivity.html#.getPracticeSessions">getPracticeSessions</a></li><li data-type='method'><a href="module-UserActivity.html#.getProgressRows">getProgressRows</a></li><li data-type='method'><a href="module-UserActivity.html#.getRecentActivity">getRecentActivity</a></li><li data-type='method'><a href="module-UserActivity.html#.getUserMonthlyStats">getUserMonthlyStats</a></li><li data-type='method'><a href="module-UserActivity.html#.getUserWeeklyStats">getUserWeeklyStats</a></li><li data-type='method'><a href="module-UserActivity.html#.pinProgressRow">pinProgressRow</a></li><li data-type='method'><a href="module-UserActivity.html#.recordUserActivity">recordUserActivity</a></li><li data-type='method'><a href="module-UserActivity.html#.recordUserPractice">recordUserPractice</a></li><li data-type='method'><a href="module-UserActivity.html#.removeUserPractice">removeUserPractice</a></li><li data-type='method'><a href="module-UserActivity.html#.restorePracticeSession">restorePracticeSession</a></li><li data-type='method'><a href="module-UserActivity.html#.restoreUserActivity">restoreUserActivity</a></li><li data-type='method'><a href="module-UserActivity.html#.restoreUserPractice">restoreUserPractice</a></li><li data-type='method'><a href="module-UserActivity.html#.unpinProgressRow">unpinProgressRow</a></li><li data-type='method'><a href="module-UserActivity.html#.updatePracticeNotes">updatePracticeNotes</a></li><li data-type='method'><a href="module-UserActivity.html#.updateUserPractice">updateUserPractice</a></li></ul></li><li><a href="module-UserChat.html">UserChat</a><ul class='methods'><li data-type='method'><a href="module-UserChat.html#.fetchChatSettings">fetchChatSettings</a></li></ul></li><li><a href="module-UserManagement.html">UserManagement</a><ul class='methods'><li data-type='method'><a href="module-UserManagement.html#.blockUser">blockUser</a></li><li data-type='method'><a href="module-UserManagement.html#.blockedUsers">blockedUsers</a></li><li data-type='method'><a href="module-UserManagement.html#.deletePicture">deletePicture</a></li><li data-type='method'><a href="module-UserManagement.html#.getUserData">getUserData</a></li><li data-type='method'><a href="module-UserManagement.html#.isDisplayNameAvailable">isDisplayNameAvailable</a></li><li data-type='method'><a href="module-UserManagement.html#.unblockUser">unblockUser</a></li><li data-type='method'><a href="module-UserManagement.html#.updateDisplayName">updateDisplayName</a></li><li data-type='method'><a href="module-UserManagement.html#.uploadPicture">uploadPicture</a></li><li data-type='method'><a href="module-UserManagement.html#.uploadPictureFromS3">uploadPictureFromS3</a></li></ul></li><li><a href="module-UserMemberships.html">UserMemberships</a><ul class='methods'><li data-type='method'><a href="module-UserMemberships.html#.fetchMemberships">fetchMemberships</a></li><li data-type='method'><a href="module-UserMemberships.html#.fetchRechargeTokens">fetchRechargeTokens</a></li></ul></li><li><a href="module-UserNotifications.html">UserNotifications</a><ul class='methods'><li data-type='method'><a href="module-UserNotifications.html#.deleteNotification">deleteNotification</a></li><li data-type='method'><a href="module-UserNotifications.html#.fetchLiveEventPollingState">fetchLiveEventPollingState</a></li><li data-type='method'><a href="module-UserNotifications.html#.fetchNotificationSettings">fetchNotificationSettings</a></li><li data-type='method'><a href="module-UserNotifications.html#.fetchNotifications">fetchNotifications</a></li><li data-type='method'><a href="module-UserNotifications.html#.fetchUnreadCount">fetchUnreadCount</a></li><li data-type='method'><a href="module-UserNotifications.html#.markAllNotificationsAsRead">markAllNotificationsAsRead</a></li><li data-type='method'><a href="module-UserNotifications.html#.markNotificationAsRead">markNotificationAsRead</a></li><li data-type='method'><a href="module-UserNotifications.html#.markNotificationAsUnread">markNotificationAsUnread</a></li><li data-type='method'><a href="module-UserNotifications.html#.pauseLiveEventPolling">pauseLiveEventPolling</a></li><li data-type='method'><a href="module-UserNotifications.html#.restoreNotification">restoreNotification</a></li><li data-type='method'><a href="module-UserNotifications.html#.startLiveEventPolling">startLiveEventPolling</a></li><li data-type='method'><a href="module-UserNotifications.html#.updateNotificationSetting">updateNotificationSetting</a></li></ul></li><li><a href="module-UserProfile.html">UserProfile</a><ul class='methods'><li data-type='method'><a href="module-UserProfile.html#.deleteProfilePicture">deleteProfilePicture</a></li><li data-type='method'><a href="module-UserProfile.html#.otherStats">otherStats</a></li></ul></li></ul><h3>Namespaces</h3><ul><li><a href="ContentOrganization.html">ContentOrganization</a></li><li><a href="Gamification.html">Gamification</a></li><li><a href="UserManagementSystem.html">UserManagementSystem</a></li></ul><h3><a href="global.html">Global</a></h3>
32
+ <h2><a href="index.html">Home</a></h2><h3>Modules</h3><ul><li><a href="module-Accounts.html">Accounts</a><ul class='methods'><li data-type='method'><a href="module-Accounts.html#~confirmEmailChange">confirmEmailChange</a></li><li data-type='method'><a href="module-Accounts.html#~requestEmailChange">requestEmailChange</a></li><li data-type='method'><a href="module-Accounts.html#~resetPassword">resetPassword</a></li><li data-type='method'><a href="module-Accounts.html#~sendAccountSetupEmail">sendAccountSetupEmail</a></li><li data-type='method'><a href="module-Accounts.html#~sendPasswordResetEmail">sendPasswordResetEmail</a></li><li data-type='method'><a href="module-Accounts.html#~setupAccount">setupAccount</a></li><li data-type='method'><a href="module-Accounts.html#~status">status</a></li></ul></li><li><a href="module-Awards.html">Awards</a><ul class='methods'><li data-type='method'><a href="module-Awards.html#~fetchAwardsForUser">fetchAwardsForUser</a></li><li data-type='method'><a href="module-Awards.html#~fetchCertificate">fetchCertificate</a></li></ul></li><li><a href="module-Config.html">Config</a><ul class='methods'><li data-type='method'><a href="module-Config.html#.initializeService">initializeService</a></li></ul></li><li><a href="module-Content-Services-V2.html">Content-Services-V2</a><ul class='methods'><li data-type='method'><a href="module-Content-Services-V2.html#.getContentRows">getContentRows</a></li><li data-type='method'><a href="module-Content-Services-V2.html#.getNewAndUpcoming">getNewAndUpcoming</a></li><li data-type='method'><a href="module-Content-Services-V2.html#.getRecent">getRecent</a></li><li data-type='method'><a href="module-Content-Services-V2.html#.getRecentForTab">getRecentForTab</a></li><li data-type='method'><a href="module-Content-Services-V2.html#.getRecommendedForYou">getRecommendedForYou</a></li><li data-type='method'><a href="module-Content-Services-V2.html#.getScheduleContentRows">getScheduleContentRows</a></li><li data-type='method'><a href="module-Content-Services-V2.html#.getTabResults">getTabResults</a></li></ul></li><li><a href="module-ForumCategories.html">ForumCategories</a><ul class='methods'><li data-type='method'><a href="module-ForumCategories.html#~createForumCategory">createForumCategory</a></li><li data-type='method'><a href="module-ForumCategories.html#~fetchForumCategories">fetchForumCategories</a></li></ul></li><li><a href="module-GuidedCourses.html">GuidedCourses</a></li><li><a href="module-Interests.html">Interests</a><ul class='methods'><li data-type='method'><a href="module-Interests.html#.fetchInterests">fetchInterests</a></li><li data-type='method'><a href="module-Interests.html#.fetchUninterests">fetchUninterests</a></li><li data-type='method'><a href="module-Interests.html#.markContentAsInterested">markContentAsInterested</a></li><li data-type='method'><a href="module-Interests.html#.markContentAsNotInterested">markContentAsNotInterested</a></li><li data-type='method'><a href="module-Interests.html#.removeContentAsInterested">removeContentAsInterested</a></li><li data-type='method'><a href="module-Interests.html#.removeContentAsNotInterested">removeContentAsNotInterested</a></li></ul></li><li><a href="module-Payments.html">Payments</a><ul class='methods'><li data-type='method'><a href="module-Payments.html#~fetchCustomerPayments">fetchCustomerPayments</a></li></ul></li><li><a href="module-Permissions.html">Permissions</a><ul class='methods'><li data-type='method'><a href="module-Permissions.html#.fetchUserPermissions">fetchUserPermissions</a></li><li data-type='method'><a href="module-Permissions.html#.reset">reset</a></li></ul></li><li><a href="module-Playlists.html">Playlists</a><ul class='methods'><li data-type='method'><a href="module-Playlists.html#.addItemToPlaylist">addItemToPlaylist</a></li><li data-type='method'><a href="module-Playlists.html#.createPlaylist">createPlaylist</a></li><li data-type='method'><a href="module-Playlists.html#.deletePlaylist">deletePlaylist</a></li><li data-type='method'><a href="module-Playlists.html#.duplicatePlaylist">duplicatePlaylist</a></li><li data-type='method'><a href="module-Playlists.html#.fetchPlaylist">fetchPlaylist</a></li><li data-type='method'><a href="module-Playlists.html#.fetchPlaylistItems">fetchPlaylistItems</a></li><li data-type='method'><a href="module-Playlists.html#.fetchUserPlaylists">fetchUserPlaylists</a></li><li data-type='method'><a href="module-Playlists.html#.togglePlaylistPrivate">togglePlaylistPrivate</a></li><li data-type='method'><a href="module-Playlists.html#.undeletePlaylist">undeletePlaylist</a></li><li data-type='method'><a href="module-Playlists.html#.updatePlaylist">updatePlaylist</a></li><li data-type='method'><a href="module-Playlists.html#~deleteItemsFromPlaylist">deleteItemsFromPlaylist</a></li><li data-type='method'><a href="module-Playlists.html#~likePlaylist">likePlaylist</a></li><li data-type='method'><a href="module-Playlists.html#~reportPlaylist">reportPlaylist</a></li><li data-type='method'><a href="module-Playlists.html#~restoreItemFromPlaylist">restoreItemFromPlaylist</a></li><li data-type='method'><a href="module-Playlists.html#~unlikePlaylist">unlikePlaylist</a></li></ul></li><li><a href="module-Railcontent-Services.html">Railcontent-Services</a><ul class='methods'><li data-type='method'><a href="module-Railcontent-Services.html#.assignModeratorToComment">assignModeratorToComment</a></li><li data-type='method'><a href="module-Railcontent-Services.html#.closeComment">closeComment</a></li><li data-type='method'><a href="module-Railcontent-Services.html#.createComment">createComment</a></li><li data-type='method'><a href="module-Railcontent-Services.html#.deleteComment">deleteComment</a></li><li data-type='method'><a href="module-Railcontent-Services.html#.editComment">editComment</a></li><li data-type='method'><a href="module-Railcontent-Services.html#.fetchAllCompletedStates">fetchAllCompletedStates</a></li><li data-type='method'><a href="module-Railcontent-Services.html#.fetchCarouselCardData">fetchCarouselCardData</a></li><li data-type='method'><a href="module-Railcontent-Services.html#.fetchComment">fetchComment</a></li><li data-type='method'><a href="module-Railcontent-Services.html#.fetchCommentRelies">fetchCommentRelies</a></li><li data-type='method'><a href="module-Railcontent-Services.html#.fetchComments">fetchComments</a></li><li data-type='method'><a href="module-Railcontent-Services.html#.fetchCompletedContent">fetchCompletedContent</a></li><li data-type='method'><a href="module-Railcontent-Services.html#.fetchCompletedState">fetchCompletedState</a></li><li data-type='method'><a href="module-Railcontent-Services.html#.fetchContentInProgress">fetchContentInProgress</a></li><li data-type='method'><a href="module-Railcontent-Services.html#.fetchContentPageUserData">fetchContentPageUserData</a></li><li data-type='method'><a href="module-Railcontent-Services.html#.fetchNextContentDataForParent">fetchNextContentDataForParent</a></li><li data-type='method'><a href="module-Railcontent-Services.html#.fetchRecentUserActivities">fetchRecentUserActivities</a></li><li data-type='method'><a href="module-Railcontent-Services.html#.fetchSongsInProgress">fetchSongsInProgress</a></li><li data-type='method'><a href="module-Railcontent-Services.html#.fetchTopComment">fetchTopComment</a></li><li data-type='method'><a href="module-Railcontent-Services.html#.fetchUserAward">fetchUserAward</a></li><li data-type='method'><a href="module-Railcontent-Services.html#.fetchUserBadges">fetchUserBadges</a></li><li data-type='method'><a href="module-Railcontent-Services.html#.fetchUserPracticeNotes">fetchUserPracticeNotes</a></li><li data-type='method'><a href="module-Railcontent-Services.html#.likeComment">likeComment</a></li><li data-type='method'><a href="module-Railcontent-Services.html#.openComment">openComment</a></li><li data-type='method'><a href="module-Railcontent-Services.html#.postContentComplete">postContentComplete</a></li><li data-type='method'><a href="module-Railcontent-Services.html#.postContentReset">postContentReset</a></li><li data-type='method'><a href="module-Railcontent-Services.html#.postContentRestore">postContentRestore</a></li><li data-type='method'><a href="module-Railcontent-Services.html#.postContentStart">postContentStart</a></li><li data-type='method'><a href="module-Railcontent-Services.html#.replyToComment">replyToComment</a></li><li data-type='method'><a href="module-Railcontent-Services.html#.reportComment">reportComment</a></li><li data-type='method'><a href="module-Railcontent-Services.html#.restoreComment">restoreComment</a></li><li data-type='method'><a href="module-Railcontent-Services.html#.setStudentViewForUser">setStudentViewForUser</a></li><li data-type='method'><a href="module-Railcontent-Services.html#.unassignModeratorToComment">unassignModeratorToComment</a></li><li data-type='method'><a href="module-Railcontent-Services.html#.unlikeComment">unlikeComment</a></li><li data-type='method'><a href="module-Railcontent-Services.html#~fetchLastInteractedChild">fetchLastInteractedChild</a></li></ul></li><li><a href="module-Sanity-Services.html">Sanity-Services</a><ul class='methods'><li data-type='method'><a href="module-Sanity-Services.html#.fetchAll">fetchAll</a></li><li data-type='method'><a href="module-Sanity-Services.html#.fetchAllFilterOptions">fetchAllFilterOptions</a></li><li data-type='method'><a href="module-Sanity-Services.html#.fetchAllPacks">fetchAllPacks</a></li><li data-type='method'><a href="module-Sanity-Services.html#.fetchArtistLessons">fetchArtistLessons</a></li><li data-type='method'><a href="module-Sanity-Services.html#.fetchArtists">fetchArtists</a></li><li data-type='method'><a href="module-Sanity-Services.html#.fetchByRailContentId">fetchByRailContentId</a></li><li data-type='method'><a href="module-Sanity-Services.html#.fetchByRailContentIds">fetchByRailContentIds</a></li><li data-type='method'><a href="module-Sanity-Services.html#.fetchByReference">fetchByReference</a></li><li data-type='method'><a href="module-Sanity-Services.html#.fetchCoachLessons">fetchCoachLessons</a></li><li data-type='method'><a href="module-Sanity-Services.html#.fetchComingSoon">fetchComingSoon</a></li><li data-type='method'><a href="module-Sanity-Services.html#.fetchCommentModContentData">fetchCommentModContentData</a></li><li data-type='method'><a href="module-Sanity-Services.html#.fetchFoundation">fetchFoundation</a></li><li data-type='method'><a href="module-Sanity-Services.html#.fetchGenreLessons">fetchGenreLessons</a></li><li data-type='method'><a href="module-Sanity-Services.html#.fetchLeaving">fetchLeaving</a></li><li data-type='method'><a href="module-Sanity-Services.html#.fetchLessonContent">fetchLessonContent</a></li><li data-type='method'><a href="module-Sanity-Services.html#.fetchLessonsFeaturingThisContent">fetchLessonsFeaturingThisContent</a></li><li data-type='method'><a href="module-Sanity-Services.html#.fetchMetadata">fetchMetadata</a></li><li data-type='method'><a href="module-Sanity-Services.html#.fetchMethod">fetchMethod</a></li><li data-type='method'><a href="module-Sanity-Services.html#.fetchMethodChildren">fetchMethodChildren</a></li><li data-type='method'><a href="module-Sanity-Services.html#.fetchMethodChildrenIds">fetchMethodChildrenIds</a></li><li data-type='method'><a href="module-Sanity-Services.html#.fetchMethodPreviousNextLesson">fetchMethodPreviousNextLesson</a></li><li data-type='method'><a href="module-Sanity-Services.html#.fetchNewReleases">fetchNewReleases</a></li><li data-type='method'><a href="module-Sanity-Services.html#.fetchNextPreviousLesson">fetchNextPreviousLesson</a></li><li data-type='method'><a href="module-Sanity-Services.html#.fetchOtherSongVersions">fetchOtherSongVersions</a></li><li data-type='method'><a href="module-Sanity-Services.html#.fetchPackAll">fetchPackAll</a></li><li data-type='method'><a href="module-Sanity-Services.html#.fetchPackData">fetchPackData</a></li><li data-type='method'><a href="module-Sanity-Services.html#.fetchParentForDownload">fetchParentForDownload</a></li><li data-type='method'><a href="module-Sanity-Services.html#.fetchRelatedLessons">fetchRelatedLessons</a></li><li data-type='method'><a href="module-Sanity-Services.html#.fetchRelatedRecommendedContent">fetchRelatedRecommendedContent</a></li><li data-type='method'><a href="module-Sanity-Services.html#.fetchRelatedSongs">fetchRelatedSongs</a></li><li data-type='method'><a href="module-Sanity-Services.html#.fetchReturning">fetchReturning</a></li><li data-type='method'><a href="module-Sanity-Services.html#.fetchSanity">fetchSanity</a></li><li data-type='method'><a href="module-Sanity-Services.html#.fetchScheduledReleases">fetchScheduledReleases</a></li><li data-type='method'><a href="module-Sanity-Services.html#.fetchShowsData">fetchShowsData</a></li><li data-type='method'><a href="module-Sanity-Services.html#.fetchSiblingContent">fetchSiblingContent</a></li><li data-type='method'><a href="module-Sanity-Services.html#.fetchSongArtistCount">fetchSongArtistCount</a></li><li data-type='method'><a href="module-Sanity-Services.html#.fetchSongById">fetchSongById</a></li><li data-type='method'><a href="module-Sanity-Services.html#.fetchUpcomingEvents">fetchUpcomingEvents</a></li><li data-type='method'><a href="module-Sanity-Services.html#.jumpToContinueContent">jumpToContinueContent</a></li><li data-type='method'><a href="module-Sanity-Services.html#~fetchRelatedByLicense">fetchRelatedByLicense</a></li><li data-type='method'><a href="module-Sanity-Services.html#~getQueryFromPage">getQueryFromPage</a></li></ul></li><li><a href="module-Sessions.html">Sessions</a><ul class='methods'><li data-type='method'><a href="module-Sessions.html#.login">login</a></li><li data-type='method'><a href="module-Sessions.html#.logout">logout</a></li></ul></li><li><a href="module-UserActivity.html">UserActivity</a><ul class='methods'><li data-type='method'><a href="module-UserActivity.html#.calculateLongestStreaks">calculateLongestStreaks</a></li><li data-type='method'><a href="module-UserActivity.html#.createPracticeNotes">createPracticeNotes</a></li><li data-type='method'><a href="module-UserActivity.html#.deletePracticeSession">deletePracticeSession</a></li><li data-type='method'><a href="module-UserActivity.html#.deleteUserActivity">deleteUserActivity</a></li><li data-type='method'><a href="module-UserActivity.html#.getPracticeNotes">getPracticeNotes</a></li><li data-type='method'><a href="module-UserActivity.html#.getPracticeSessions">getPracticeSessions</a></li><li data-type='method'><a href="module-UserActivity.html#.getProgressRows">getProgressRows</a></li><li data-type='method'><a href="module-UserActivity.html#.getRecentActivity">getRecentActivity</a></li><li data-type='method'><a href="module-UserActivity.html#.getUserMonthlyStats">getUserMonthlyStats</a></li><li data-type='method'><a href="module-UserActivity.html#.getUserWeeklyStats">getUserWeeklyStats</a></li><li data-type='method'><a href="module-UserActivity.html#.pinProgressRow">pinProgressRow</a></li><li data-type='method'><a href="module-UserActivity.html#.recordUserActivity">recordUserActivity</a></li><li data-type='method'><a href="module-UserActivity.html#.recordUserPractice">recordUserPractice</a></li><li data-type='method'><a href="module-UserActivity.html#.removeUserPractice">removeUserPractice</a></li><li data-type='method'><a href="module-UserActivity.html#.restorePracticeSession">restorePracticeSession</a></li><li data-type='method'><a href="module-UserActivity.html#.restoreUserActivity">restoreUserActivity</a></li><li data-type='method'><a href="module-UserActivity.html#.restoreUserPractice">restoreUserPractice</a></li><li data-type='method'><a href="module-UserActivity.html#.unpinProgressRow">unpinProgressRow</a></li><li data-type='method'><a href="module-UserActivity.html#.updatePracticeNotes">updatePracticeNotes</a></li><li data-type='method'><a href="module-UserActivity.html#.updateUserPractice">updateUserPractice</a></li></ul></li><li><a href="module-UserChat.html">UserChat</a><ul class='methods'><li data-type='method'><a href="module-UserChat.html#.fetchChatSettings">fetchChatSettings</a></li></ul></li><li><a href="module-UserManagement.html">UserManagement</a><ul class='methods'><li data-type='method'><a href="module-UserManagement.html#.blockUser">blockUser</a></li><li data-type='method'><a href="module-UserManagement.html#.blockedUsers">blockedUsers</a></li><li data-type='method'><a href="module-UserManagement.html#.deletePicture">deletePicture</a></li><li data-type='method'><a href="module-UserManagement.html#.getUserData">getUserData</a></li><li data-type='method'><a href="module-UserManagement.html#.isDisplayNameAvailable">isDisplayNameAvailable</a></li><li data-type='method'><a href="module-UserManagement.html#.unblockUser">unblockUser</a></li><li data-type='method'><a href="module-UserManagement.html#.updateDisplayName">updateDisplayName</a></li><li data-type='method'><a href="module-UserManagement.html#.uploadPicture">uploadPicture</a></li><li data-type='method'><a href="module-UserManagement.html#.uploadPictureFromS3">uploadPictureFromS3</a></li></ul></li><li><a href="module-UserMemberships.html">UserMemberships</a><ul class='methods'><li data-type='method'><a href="module-UserMemberships.html#.fetchMemberships">fetchMemberships</a></li><li data-type='method'><a href="module-UserMemberships.html#.fetchRechargeTokens">fetchRechargeTokens</a></li></ul></li><li><a href="module-UserNotifications.html">UserNotifications</a><ul class='methods'><li data-type='method'><a href="module-UserNotifications.html#.deleteNotification">deleteNotification</a></li><li data-type='method'><a href="module-UserNotifications.html#.fetchLiveEventPollingState">fetchLiveEventPollingState</a></li><li data-type='method'><a href="module-UserNotifications.html#.fetchNotificationSettings">fetchNotificationSettings</a></li><li data-type='method'><a href="module-UserNotifications.html#.fetchNotifications">fetchNotifications</a></li><li data-type='method'><a href="module-UserNotifications.html#.fetchUnreadCount">fetchUnreadCount</a></li><li data-type='method'><a href="module-UserNotifications.html#.markAllNotificationsAsRead">markAllNotificationsAsRead</a></li><li data-type='method'><a href="module-UserNotifications.html#.markNotificationAsRead">markNotificationAsRead</a></li><li data-type='method'><a href="module-UserNotifications.html#.markNotificationAsUnread">markNotificationAsUnread</a></li><li data-type='method'><a href="module-UserNotifications.html#.pauseLiveEventPolling">pauseLiveEventPolling</a></li><li data-type='method'><a href="module-UserNotifications.html#.restoreNotification">restoreNotification</a></li><li data-type='method'><a href="module-UserNotifications.html#.startLiveEventPolling">startLiveEventPolling</a></li><li data-type='method'><a href="module-UserNotifications.html#.updateNotificationSetting">updateNotificationSetting</a></li></ul></li><li><a href="module-UserProfile.html">UserProfile</a><ul class='methods'><li data-type='method'><a href="module-UserProfile.html#.deleteProfilePicture">deleteProfilePicture</a></li><li data-type='method'><a href="module-UserProfile.html#.otherStats">otherStats</a></li></ul></li></ul><h3>Namespaces</h3><ul><li><a href="ContentOrganization.html">ContentOrganization</a></li><li><a href="Forums.html">Forums</a></li><li><a href="Gamification.html">Gamification</a></li><li><a href="UserManagementSystem.html">UserManagementSystem</a></li></ul><h3><a href="global.html">Global</a></h3>
33
33
 
34
34
  </nav>
35
35
 
@@ -66,7 +66,7 @@
66
66
  <br class="clear">
67
67
 
68
68
  <footer>
69
- Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.3</a> on Tue Sep 09 2025 17:31:59 GMT+0000 (Coordinated Universal Time) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme.
69
+ Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.3</a> on Fri Sep 12 2025 21:30:10 GMT+0000 (Coordinated Universal Time) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme.
70
70
  </footer>
71
71
 
72
72
  <script>prettyPrint();</script>
package/jsdoc.json CHANGED
@@ -10,6 +10,7 @@
10
10
  "src/services/content.js",
11
11
  "src/services/userActivity.js",
12
12
  "src/services/railcontent.js",
13
+ "src/services/forums",
13
14
  "src/index.js"
14
15
  ],
15
16
  "includePattern": "(.js|.ts$)",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "musora-content-services",
3
- "version": "2.37.0",
3
+ "version": "2.39.1",
4
4
  "description": "A package for Musoras content services ",
5
5
  "main": "src/index.js",
6
6
  "type": "module",
package/src/index.d.ts CHANGED
@@ -9,9 +9,7 @@ import {
9
9
  enrollUserInGuidedCourse,
10
10
  fetchEnrollmentPageMetadata,
11
11
  guidedCourses,
12
- pinGuidedCourse,
13
- unEnrollUserInGuidedCourse,
14
- unPinGuidedCourse
12
+ unEnrollUserInGuidedCourse
15
13
  } from './services/content-org/guided-courses.ts';
16
14
 
17
15
  import {
@@ -58,7 +56,7 @@ import {
58
56
  import {
59
57
  contentStatusCompleted,
60
58
  contentStatusReset,
61
- contentStatusStartedForGuidedCourseEnrollment,
59
+ contentStatusStarted,
62
60
  getAllCompleted,
63
61
  getAllStarted,
64
62
  getAllStartedOrCompleted,
@@ -94,6 +92,11 @@ import {
94
92
  getActiveDiscussions
95
93
  } from './services/forum.js';
96
94
 
95
+ import {
96
+ createForumCategory,
97
+ fetchForumCategories
98
+ } from './services/forums/categories.ts';
99
+
97
100
  import {
98
101
  fetchAwardsForUser,
99
102
  fetchCertificate
@@ -149,7 +152,7 @@ import {
149
152
  postContentLiked,
150
153
  postContentReset,
151
154
  postContentRestore,
152
- postContentStartForGC,
155
+ postContentStart,
153
156
  postContentUnliked,
154
157
  postPlaylistContentEngaged,
155
158
  postRecordWatchSession,
@@ -291,6 +294,7 @@ import {
291
294
 
292
295
  import {
293
296
  login,
297
+ loginWithProvider,
294
298
  logout
295
299
  } from './services/user/sessions.js';
296
300
 
@@ -339,9 +343,10 @@ declare module 'musora-content-services' {
339
343
  confirmEmailChange,
340
344
  contentStatusCompleted,
341
345
  contentStatusReset,
342
- contentStatusStartedForGuidedCourseEnrollment,
346
+ contentStatusStarted,
343
347
  convertToTimeZone,
344
348
  createComment,
349
+ createForumCategory,
345
350
  createPlaylist,
346
351
  createPracticeNotes,
347
352
  deleteComment,
@@ -384,6 +389,7 @@ declare module 'musora-content-services' {
384
389
  fetchContentRows,
385
390
  fetchCustomerPayments,
386
391
  fetchEnrollmentPageMetadata,
392
+ fetchForumCategories,
387
393
  fetchFoundation,
388
394
  fetchGenreLessons,
389
395
  fetchHandler,
@@ -499,6 +505,7 @@ declare module 'musora-content-services' {
499
505
  likePlaylist,
500
506
  logUserPractice,
501
507
  login,
508
+ loginWithProvider,
502
509
  logout,
503
510
  markAllNotificationsAsRead,
504
511
  markContentAsInterested,
@@ -508,13 +515,12 @@ declare module 'musora-content-services' {
508
515
  openComment,
509
516
  otherStats,
510
517
  pauseLiveEventPolling,
511
- pinGuidedCourse,
512
518
  pinProgressRow,
513
519
  postContentComplete,
514
520
  postContentLiked,
515
521
  postContentReset,
516
522
  postContentRestore,
517
- postContentStartForGC,
523
+ postContentStart,
518
524
  postContentUnliked,
519
525
  postPlaylistContentEngaged,
520
526
  postRecordWatchSession,
@@ -548,7 +554,6 @@ declare module 'musora-content-services' {
548
554
  toDayjs,
549
555
  togglePlaylistPrivate,
550
556
  unEnrollUserInGuidedCourse,
551
- unPinGuidedCourse,
552
557
  unassignModeratorToComment,
553
558
  unblockUser,
554
559
  undeletePlaylist,
package/src/index.js CHANGED
@@ -9,9 +9,7 @@ import {
9
9
  enrollUserInGuidedCourse,
10
10
  fetchEnrollmentPageMetadata,
11
11
  guidedCourses,
12
- pinGuidedCourse,
13
- unEnrollUserInGuidedCourse,
14
- unPinGuidedCourse
12
+ unEnrollUserInGuidedCourse
15
13
  } from './services/content-org/guided-courses.ts';
16
14
 
17
15
  import {
@@ -58,7 +56,7 @@ import {
58
56
  import {
59
57
  contentStatusCompleted,
60
58
  contentStatusReset,
61
- contentStatusStartedForGuidedCourseEnrollment,
59
+ contentStatusStarted,
62
60
  getAllCompleted,
63
61
  getAllStarted,
64
62
  getAllStartedOrCompleted,
@@ -94,6 +92,11 @@ import {
94
92
  getActiveDiscussions
95
93
  } from './services/forum.js';
96
94
 
95
+ import {
96
+ createForumCategory,
97
+ fetchForumCategories
98
+ } from './services/forums/categories.ts';
99
+
97
100
  import {
98
101
  fetchAwardsForUser,
99
102
  fetchCertificate
@@ -149,7 +152,7 @@ import {
149
152
  postContentLiked,
150
153
  postContentReset,
151
154
  postContentRestore,
152
- postContentStartForGC,
155
+ postContentStart,
153
156
  postContentUnliked,
154
157
  postPlaylistContentEngaged,
155
158
  postRecordWatchSession,
@@ -291,6 +294,7 @@ import {
291
294
 
292
295
  import {
293
296
  login,
297
+ loginWithProvider,
294
298
  logout
295
299
  } from './services/user/sessions.js';
296
300
 
@@ -338,9 +342,10 @@ export {
338
342
  confirmEmailChange,
339
343
  contentStatusCompleted,
340
344
  contentStatusReset,
341
- contentStatusStartedForGuidedCourseEnrollment,
345
+ contentStatusStarted,
342
346
  convertToTimeZone,
343
347
  createComment,
348
+ createForumCategory,
344
349
  createPlaylist,
345
350
  createPracticeNotes,
346
351
  deleteComment,
@@ -383,6 +388,7 @@ export {
383
388
  fetchContentRows,
384
389
  fetchCustomerPayments,
385
390
  fetchEnrollmentPageMetadata,
391
+ fetchForumCategories,
386
392
  fetchFoundation,
387
393
  fetchGenreLessons,
388
394
  fetchHandler,
@@ -498,6 +504,7 @@ export {
498
504
  likePlaylist,
499
505
  logUserPractice,
500
506
  login,
507
+ loginWithProvider,
501
508
  logout,
502
509
  markAllNotificationsAsRead,
503
510
  markContentAsInterested,
@@ -507,13 +514,12 @@ export {
507
514
  openComment,
508
515
  otherStats,
509
516
  pauseLiveEventPolling,
510
- pinGuidedCourse,
511
517
  pinProgressRow,
512
518
  postContentComplete,
513
519
  postContentLiked,
514
520
  postContentReset,
515
521
  postContentRestore,
516
- postContentStartForGC,
522
+ postContentStart,
517
523
  postContentUnliked,
518
524
  postPlaylistContentEngaged,
519
525
  postRecordWatchSession,
@@ -547,7 +553,6 @@ export {
547
553
  toDayjs,
548
554
  togglePlaylistPrivate,
549
555
  unEnrollUserInGuidedCourse,
550
- unPinGuidedCourse,
551
556
  unassignModeratorToComment,
552
557
  unblockUser,
553
558
  undeletePlaylist,
@@ -1,8 +1,8 @@
1
1
  /**
2
2
  * @module GuidedCourses
3
3
  */
4
- import { globalConfig } from '../config.js'
5
4
  import { fetchHandler } from '../railcontent.js'
5
+ import {contentStatusStarted, getProgressPercentage, getProgressState} from '../contentProgress.js'
6
6
  import './playlists-types.js'
7
7
 
8
8
 
@@ -12,7 +12,14 @@ const BASE_PATH: string = `/api/content-org`
12
12
 
13
13
  export async function enrollUserInGuidedCourse(guidedCourse, { notifications_enabled = false }) {
14
14
  const url: string = `${BASE_PATH}/v1/user/guided-courses/enroll-user/${guidedCourse}`
15
- return await fetchHandler(url, 'POST', null, { notifications_enabled })
15
+ const response = await fetchHandler(url, 'POST', null, { notifications_enabled })
16
+ // we only get the text response back (no status code) so I cannot do error checking on this. We hope it works
17
+ const state = await getProgressState(guidedCourse)
18
+ // If the content has been started already we don't want to reset the progress
19
+ if (!state) {
20
+ await contentStatusStarted(guidedCourse)
21
+ }
22
+ return response
16
23
  }
17
24
 
18
25
  export async function unEnrollUserInGuidedCourse(guidedCourse) {
@@ -25,16 +32,6 @@ export async function fetchEnrollmentPageMetadata(guidedCourse) {
25
32
  return await fetchHandler(url, 'GET')
26
33
  }
27
34
 
28
- export async function pinGuidedCourse(guidedCourse) {
29
- const url: string = `${BASE_PATH}/v1/user/guided-courses/pin/${guidedCourse}`
30
- return await fetchHandler(url, 'POST')
31
- }
32
-
33
- export async function unPinGuidedCourse(guidedCourse) {
34
- const url: string = `${BASE_PATH}/v1/user/guided-courses/unpin/${guidedCourse}`
35
- return await fetchHandler(url, 'POST')
36
- }
37
-
38
35
  export async function guidedCourses() {
39
36
  const url: string = `${BASE_PATH}/v1/user/guided-courses/`
40
37
  return await fetchHandler(url, 'GET')
@@ -2,7 +2,7 @@ import {
2
2
  fetchContentProgress,
3
3
  postContentComplete,
4
4
  postContentReset,
5
- postContentStartForGC,
5
+ postContentStart,
6
6
  postRecordWatchSession,
7
7
  } from './railcontent.js'
8
8
  import { DataContext, ContentProgressVersionKey } from './dataContext.js'
@@ -360,16 +360,14 @@ export async function contentStatusCompleted(contentId) {
360
360
  }
361
361
  )
362
362
  }
363
- export async function contentStatusStartedForGuidedCourseEnrollment(contentId) {
364
- const response = await postContentStartForGC(contentId);
365
-
363
+ export async function contentStatusStarted(contentId) {
366
364
  return await dataContext.update(
367
365
  async function (localContext) {
368
366
  let hierarchy = await fetchHierarchy(contentId)
369
367
  startStatusInLocalContext(localContext, contentId, hierarchy)
370
368
  },
371
369
  async function () {
372
- return response
370
+ return postContentStart(contentId)
373
371
  }
374
372
  )
375
373
  }
@@ -394,25 +392,17 @@ function saveContentProgress(localContext, contentId, progress, currentSeconds,
394
392
  }
395
393
 
396
394
  function completeStatusInLocalContext(localContext, contentId, hierarchy) {
397
- let data = localContext.data[contentId] ?? {}
398
- data[DATA_KEY_PROGRESS] = 100
399
- data[DATA_KEY_STATUS] = STATE_COMPLETED
400
- data[DATA_KEY_LAST_UPDATED_TIME] = Math.round(new Date().getTime() / 1000)
401
- localContext.data[contentId] = data
402
-
403
- if (!hierarchy) return
404
- let children = hierarchy.children[contentId] ?? []
405
- for (let i = 0; i < children.length; i++) {
406
- let childId = children[i]
407
- completeStatusInLocalContext(localContext, childId, hierarchy)
408
- }
409
- bubbleProgress(hierarchy, contentId, localContext)
395
+ setStartedOrCompletedStatusInLocalContext(localContext, contentId, true, hierarchy)
410
396
  }
411
397
 
412
398
  function startStatusInLocalContext(localContext, contentId, hierarchy) {
399
+ setStartedOrCompletedStatusInLocalContext(localContext, contentId, false, hierarchy)
400
+ }
401
+
402
+ function setStartedOrCompletedStatusInLocalContext(localContext, contentId, isCompleted, hierarchy) {
413
403
  let data = localContext.data[contentId] ?? {}
414
- data[DATA_KEY_PROGRESS] = 0
415
- data[DATA_KEY_STATUS] = STATE_STARTED
404
+ data[DATA_KEY_PROGRESS] = isCompleted ? 100 : 0
405
+ data[DATA_KEY_STATUS] = isCompleted ? STATE_COMPLETED : STATE_STARTED
416
406
  data[DATA_KEY_LAST_UPDATED_TIME] = Math.round(new Date().getTime() / 1000)
417
407
  localContext.data[contentId] = data
418
408
 
@@ -420,7 +410,7 @@ function startStatusInLocalContext(localContext, contentId, hierarchy) {
420
410
  let children = hierarchy.children[contentId] ?? []
421
411
  for (let i = 0; i < children.length; i++) {
422
412
  let childId = children[i]
423
- startStatusInLocalContext(localContext, childId, hierarchy)
413
+ setStartedOrCompletedStatusInLocalContext(localContext, childId, isCompleted, hierarchy)
424
414
  }
425
415
  bubbleProgress(hierarchy, contentId, localContext)
426
416
  }
@@ -0,0 +1,42 @@
1
+ /**
2
+ * @module ForumCategories
3
+ */
4
+ import { HttpClient } from '../../infrastructure/http/HttpClient'
5
+ import { globalConfig } from '../config.js'
6
+ import { ForumCategory } from './types'
7
+
8
+ const baseUrl = `/api/forums`
9
+
10
+ /**
11
+ * Fetches forum categories for the given brand.
12
+ *
13
+ * @param {string|null} brand - The brand context (e.g., "drumeo", "singeo").
14
+ * @returns {Promise<ForumCategory>} - A promise that resolves to the list of forum categories.
15
+ * @throws {HttpError} - If the request fails.
16
+ */
17
+ export async function fetchForumCategories(brand: string): Promise<ForumCategory> {
18
+ const httpClient = new HttpClient(globalConfig.baseUrl)
19
+ return httpClient.get<ForumCategory>(`${baseUrl}/v1/categories?brand=${brand}`)
20
+ }
21
+
22
+ export interface CreateForumCategoryParams {
23
+ name: string
24
+ description: string
25
+ weight: number
26
+ brand: string
27
+ icon?: string
28
+ }
29
+
30
+ /**
31
+ * Creates a new forum category.
32
+ *
33
+ * @param {CreateForumCategoryParams} params - The parameters for creating the forum category.
34
+ * @returns {Promise<ForumCategory>} - A promise that resolves to the created forum category.
35
+ * @throws {HttpError} - If the request fails.
36
+ */
37
+ export async function createForumCategory(
38
+ params: CreateForumCategoryParams
39
+ ): Promise<ForumCategory> {
40
+ const httpClient = new HttpClient(globalConfig.baseUrl)
41
+ return httpClient.post<ForumCategory>(`${baseUrl}/v1/categories`, params)
42
+ }
@@ -0,0 +1,4 @@
1
+ /**
2
+ * @namespace Forums
3
+ * @property {module:ForumCategories} ForumCategories
4
+ */
@@ -0,0 +1,23 @@
1
+ export interface ForumUser {
2
+ id: number
3
+ display_name: string
4
+ profile_picture_url: string | null
5
+ }
6
+
7
+ export interface ForumPost {
8
+ id: number
9
+ content: string
10
+ created_at: string
11
+ created_at_human: string
12
+ author: ForumUser | null
13
+ }
14
+
15
+ export interface ForumCategory {
16
+ id: number
17
+ brand: string
18
+ title: string
19
+ description: string
20
+ icon: string | null
21
+ threads_count: number
22
+ last_post: ForumPost | null
23
+ }
@@ -30,13 +30,15 @@ export interface Certificate {
30
30
  title: string
31
31
  musora_logo: string
32
32
  musora_logo_64: string
33
+ musora_bg_logo: string
34
+ musora_bg_logo_64: string
33
35
  brand_logo: string
34
36
  brand_logo_64: string
35
37
  ribbon_image: string
36
38
  ribbon_image_64: string
37
39
  award_image: string
38
40
  award_image_64: string
39
-
41
+ instructor_name: string
40
42
  instructor_signature?: string
41
43
  instructor_signature_64?: string
42
44
  }
File without changes
@@ -389,13 +389,13 @@ export async function postContentComplete(contentId) {
389
389
  }
390
390
 
391
391
  /**
392
- * start a Guided Course content's progress for a given user
392
+ * start the user's progress on a content
393
393
  * @param contentId
394
394
  * @returns {Promise<any|string|null>}
395
395
  */
396
- export async function postContentStartForGC(contentId) {
397
- let url = `/api/content/v1/user/progress/start`
398
- return postDataHandler(url, { contentId })
396
+ export async function postContentStart(contentId) {
397
+ let url = `/api/content/v1/user/progress/start/${contentId}`
398
+ return postDataHandler(url)
399
399
  }
400
400
 
401
401
  /**
@@ -1810,7 +1810,6 @@ export async function fetchSanity(
1810
1810
  const api = globalConfig.sanityConfig.useCachedAPI ? 'apicdn' : 'api'
1811
1811
  const url = `https://${globalConfig.sanityConfig.projectId}.${api}.sanity.io/v${globalConfig.sanityConfig.version}/data/query/${globalConfig.sanityConfig.dataset}?perspective=${perspective}`
1812
1812
  const headers = {
1813
- Authorization: `Bearer ${globalConfig.sanityConfig.token}`,
1814
1813
  'Content-Type': 'application/json',
1815
1814
  }
1816
1815
 
@@ -1,8 +1,8 @@
1
1
  /**
2
2
  * @module Payments
3
3
  */
4
+ import { HttpClient } from '../../infrastructure/http/HttpClient'
4
5
  import { globalConfig } from '../config.js'
5
- import { HttpClient } from '../../infrastructure/http'
6
6
 
7
7
  interface CustomerOrder {
8
8
  id: string
@@ -45,21 +45,36 @@ export async function login(email, password, deviceName, deviceToken, platform)
45
45
  })
46
46
  }
47
47
 
48
- export async function loginWithProvider(provider, token) {
48
+ export async function loginWithProvider(provider, providerIdToken, deviceToken, deviceName, platform) {
49
49
  const baseUrl = `${globalConfig.baseUrl}/api/user-management-system`
50
- return fetch(`${baseUrl}/v1/sessions`, {
51
- method: 'POST',
52
- headers: {
53
- 'Content-Type': 'application/json',
54
- 'X-Client-Platform': 'mobile',
55
- Authorization: null,
56
- },
57
- body: JSON.stringify({
58
- provider: provider,
59
- token: token,
60
- }),
61
- });
50
+
51
+ try {
52
+ const response = await fetch(`${baseUrl}/v1/auth/${provider}/mobile`, {
53
+ method: 'POST',
54
+ headers: {
55
+ 'Content-Type': 'application/json',
56
+ 'X-Client-Platform': 'mobile',
57
+ },
58
+ body: JSON.stringify({
59
+ id_token: providerIdToken,
60
+ device_name: deviceName,
61
+ firebase_token: deviceToken,
62
+ platform,
63
+ }),
64
+ })
65
+
66
+ if (!response.ok) {
67
+ const errorBody = await response.json().catch(() => ({}))
68
+ throw new Error(errorBody.error || `Login failed with status ${response.status}`)
69
+ }
70
+
71
+ return await response.json()
72
+ } catch (err) {
73
+ console.error('loginWithProvider failed', err)
74
+ throw err
75
+ }
62
76
  }
77
+
63
78
  /**
64
79
  * Logs the user out of the current session.
65
80
  *