musora-content-services 2.36.4 → 2.38.0

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 (68) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/docs/ContentOrganization.html +2 -2
  3. package/docs/Gamification.html +2 -2
  4. package/docs/UserManagementSystem.html +2 -2
  5. package/docs/api_types.js.html +2 -2
  6. package/docs/config.js.html +2 -2
  7. package/docs/content-org_content-org.js.html +2 -2
  8. package/docs/content-org_guided-courses.ts.html +11 -19
  9. package/docs/content-org_playlists-types.js.html +2 -2
  10. package/docs/content-org_playlists.js.html +2 -2
  11. package/docs/content.js.html +2 -2
  12. package/docs/forums_categories.ts.html +92 -0
  13. package/docs/forums_discussions.js.html +95 -0
  14. package/docs/forums_forum.js.html +95 -0
  15. package/docs/gamification_awards.ts.html +5 -3
  16. package/docs/gamification_gamification.js.html +2 -2
  17. package/docs/global.html +2 -2
  18. package/docs/index.html +2 -2
  19. package/docs/module-Accounts.html +2 -2
  20. package/docs/module-Awards.html +4 -4
  21. package/docs/module-Config.html +2 -2
  22. package/docs/module-Content-Services-V2.html +2 -2
  23. package/docs/module-ForumCategories.html +303 -0
  24. package/docs/module-ForumDiscussions.html +370 -0
  25. package/docs/module-Forums.html +370 -0
  26. package/docs/module-GuidedCourses.html +2 -2
  27. package/docs/module-Interests.html +2 -2
  28. package/docs/module-Payments.html +36 -6
  29. package/docs/module-Permissions.html +2 -2
  30. package/docs/module-Playlists.html +2 -2
  31. package/docs/module-Railcontent-Services.html +174 -26
  32. package/docs/module-Sanity-Services.html +11 -11
  33. package/docs/module-Sessions.html +3 -3
  34. package/docs/module-UserActivity.html +6 -30
  35. package/docs/module-UserChat.html +2 -2
  36. package/docs/module-UserManagement.html +2 -2
  37. package/docs/module-UserMemberships.html +2 -2
  38. package/docs/module-UserNotifications.html +2 -2
  39. package/docs/module-UserProfile.html +2 -2
  40. package/docs/railcontent.js.html +12 -2
  41. package/docs/sanity.js.html +5 -7
  42. package/docs/userActivity.js.html +24 -48
  43. package/docs/user_account.ts.html +2 -2
  44. package/docs/user_chat.js.html +2 -2
  45. package/docs/user_interests.js.html +2 -2
  46. package/docs/user_management.js.html +2 -2
  47. package/docs/user_memberships.js.html +2 -2
  48. package/docs/user_notifications.js.html +2 -2
  49. package/docs/user_payments.ts.html +17 -8
  50. package/docs/user_permissions.js.html +2 -2
  51. package/docs/user_profile.js.html +2 -2
  52. package/docs/user_sessions.js.html +17 -2
  53. package/docs/user_types.js.html +2 -2
  54. package/docs/user_user-management-system.js.html +2 -2
  55. package/jsdoc.json +1 -0
  56. package/package.json +1 -1
  57. package/src/index.d.ts +10 -9
  58. package/src/index.js +10 -9
  59. package/src/services/content-org/guided-courses.ts +9 -12
  60. package/src/services/contentProgress.js +14 -24
  61. package/src/services/forums/categories.ts +20 -0
  62. package/src/services/forums/types.ts +23 -0
  63. package/src/services/gamification/awards.ts +3 -1
  64. package/src/services/imageSRCVerify.js +0 -0
  65. package/src/services/railcontent.js +4 -4
  66. package/src/services/sanity.js +3 -2
  67. package/src/services/user/payments.ts +1 -1
  68. 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#~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="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 Wed Sep 10 2025 21:37:59 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.36.4",
3
+ "version": "2.38.0",
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,10 @@ import {
94
92
  getActiveDiscussions
95
93
  } from './services/forum.js';
96
94
 
95
+ import {
96
+ fetchForumCategories
97
+ } from './services/forums/categories.ts';
98
+
97
99
  import {
98
100
  fetchAwardsForUser,
99
101
  fetchCertificate
@@ -149,7 +151,7 @@ import {
149
151
  postContentLiked,
150
152
  postContentReset,
151
153
  postContentRestore,
152
- postContentStartForGC,
154
+ postContentStart,
153
155
  postContentUnliked,
154
156
  postPlaylistContentEngaged,
155
157
  postRecordWatchSession,
@@ -339,7 +341,7 @@ declare module 'musora-content-services' {
339
341
  confirmEmailChange,
340
342
  contentStatusCompleted,
341
343
  contentStatusReset,
342
- contentStatusStartedForGuidedCourseEnrollment,
344
+ contentStatusStarted,
343
345
  convertToTimeZone,
344
346
  createComment,
345
347
  createPlaylist,
@@ -384,6 +386,7 @@ declare module 'musora-content-services' {
384
386
  fetchContentRows,
385
387
  fetchCustomerPayments,
386
388
  fetchEnrollmentPageMetadata,
389
+ fetchForumCategories,
387
390
  fetchFoundation,
388
391
  fetchGenreLessons,
389
392
  fetchHandler,
@@ -508,13 +511,12 @@ declare module 'musora-content-services' {
508
511
  openComment,
509
512
  otherStats,
510
513
  pauseLiveEventPolling,
511
- pinGuidedCourse,
512
514
  pinProgressRow,
513
515
  postContentComplete,
514
516
  postContentLiked,
515
517
  postContentReset,
516
518
  postContentRestore,
517
- postContentStartForGC,
519
+ postContentStart,
518
520
  postContentUnliked,
519
521
  postPlaylistContentEngaged,
520
522
  postRecordWatchSession,
@@ -548,7 +550,6 @@ declare module 'musora-content-services' {
548
550
  toDayjs,
549
551
  togglePlaylistPrivate,
550
552
  unEnrollUserInGuidedCourse,
551
- unPinGuidedCourse,
552
553
  unassignModeratorToComment,
553
554
  unblockUser,
554
555
  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,10 @@ import {
94
92
  getActiveDiscussions
95
93
  } from './services/forum.js';
96
94
 
95
+ import {
96
+ fetchForumCategories
97
+ } from './services/forums/categories.ts';
98
+
97
99
  import {
98
100
  fetchAwardsForUser,
99
101
  fetchCertificate
@@ -149,7 +151,7 @@ import {
149
151
  postContentLiked,
150
152
  postContentReset,
151
153
  postContentRestore,
152
- postContentStartForGC,
154
+ postContentStart,
153
155
  postContentUnliked,
154
156
  postPlaylistContentEngaged,
155
157
  postRecordWatchSession,
@@ -338,7 +340,7 @@ export {
338
340
  confirmEmailChange,
339
341
  contentStatusCompleted,
340
342
  contentStatusReset,
341
- contentStatusStartedForGuidedCourseEnrollment,
343
+ contentStatusStarted,
342
344
  convertToTimeZone,
343
345
  createComment,
344
346
  createPlaylist,
@@ -383,6 +385,7 @@ export {
383
385
  fetchContentRows,
384
386
  fetchCustomerPayments,
385
387
  fetchEnrollmentPageMetadata,
388
+ fetchForumCategories,
386
389
  fetchFoundation,
387
390
  fetchGenreLessons,
388
391
  fetchHandler,
@@ -507,13 +510,12 @@ export {
507
510
  openComment,
508
511
  otherStats,
509
512
  pauseLiveEventPolling,
510
- pinGuidedCourse,
511
513
  pinProgressRow,
512
514
  postContentComplete,
513
515
  postContentLiked,
514
516
  postContentReset,
515
517
  postContentRestore,
516
- postContentStartForGC,
518
+ postContentStart,
517
519
  postContentUnliked,
518
520
  postPlaylistContentEngaged,
519
521
  postRecordWatchSession,
@@ -547,7 +549,6 @@ export {
547
549
  toDayjs,
548
550
  togglePlaylistPrivate,
549
551
  unEnrollUserInGuidedCourse,
550
- unPinGuidedCourse,
551
552
  unassignModeratorToComment,
552
553
  unblockUser,
553
554
  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'
@@ -115,10 +115,10 @@ export async function getNavigateTo(data) {
115
115
  const contentState = await getProgressState(content.id)
116
116
  if (contentState !== STATE_STARTED) {
117
117
  const firstChild = content.children[0]
118
- let lastInteractedChildNavToData =
119
- (await getNavigateTo([firstChild])[firstChild.id]) ?? null
118
+ let lastInteractedChildNavToData = await getNavigateTo([firstChild])
119
+ lastInteractedChildNavToData = lastInteractedChildNavToData[firstChild.id] ?? null
120
120
  navigateToData[content.id] = buildNavigateTo(
121
- content.children[0],
121
+ firstChild,
122
122
  lastInteractedChildNavToData
123
123
  )
124
124
  } else {
@@ -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,20 @@
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 or HttpError.
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
+ }
@@ -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
  /**
@@ -1450,7 +1450,8 @@ export async function fetchLiveEvent(brand, forcedContentId = null) {
1450
1450
  * .catch(error => console.error(error));
1451
1451
  */
1452
1452
  export async function fetchPackData(id) {
1453
- const query = `*[railcontent_id == ${id}]{
1453
+ const builder = await new FilterBuilder(`railcontent_id == ${id}`).buildFilter()
1454
+ const query = `*[${builder}]{
1454
1455
  ${await getFieldsForContentTypeWithFilteredChildren('pack')}
1455
1456
  } [0...1]`
1456
1457
  return fetchSanity(query, false)
@@ -2183,7 +2184,7 @@ export async function fetchTabData(
2183
2184
  const lessonCountFilter = await new FilterBuilder(`_id in ^.child[]._ref`).buildFilter()
2184
2185
  entityFieldsString =
2185
2186
  ` ${fieldsString}
2186
- 'children': child[${childrenFilter}]->{ ${childrenFields} },
2187
+ 'children': child[${childrenFilter}]->{ ${childrenFields} 'children': child[${childrenFilter}]->{ ${childrenFields} }, },
2187
2188
  'isLive': live_event_start_time <= "${now}" && live_event_end_time >= "${now}",
2188
2189
  'lesson_count': coalesce(count(*[${lessonCountFilter}]), 0),
2189
2190
  'length_in_seconds': coalesce(
@@ -2,7 +2,7 @@
2
2
  * @module Payments
3
3
  */
4
4
  import { globalConfig } from '../config.js'
5
- import { HttpClient } from '../../infrastructure/http'
5
+ import { HttpClient } from '../../infrastructure/http/HttpClient'
6
6
 
7
7
  interface CustomerOrder {
8
8
  id: string
@@ -1037,15 +1037,13 @@ function generateContentsMap(contents, playlistsContents) {
1037
1037
  export async function getProgressRows({ brand = null, limit = 8 } = {}) {
1038
1038
  // TODO slice progress to a reasonable number, say 100
1039
1039
 
1040
- const [recentPlaylists, progressContents, userPinnedItem, enrolledGuidedCourses] =
1040
+ const [recentPlaylists, progressContents, userPinnedItem] =
1041
1041
  await Promise.all([
1042
1042
  fetchUserPlaylists(brand, { sort: '-last_progress', limit: limit }),
1043
1043
  getAllStartedOrCompleted({ onlyIds: false, brand: brand }),
1044
1044
  getUserPinnedItem(brand),
1045
- guidedCourses()
1046
1045
  ])
1047
1046
 
1048
- const enrolledGuidedCoursesIds = enrolledGuidedCourses.map(course => String(course.content_id));
1049
1047
  const playlists = recentPlaylists?.data || []
1050
1048
  const eligiblePlaylistItems = await getEligiblePlaylistItems(playlists)
1051
1049
  const playlistEngagedOnContents = eligiblePlaylistItems.map(
@@ -1053,9 +1051,6 @@ export async function getProgressRows({ brand = null, limit = 8 } = {}) {
1053
1051
  )
1054
1052
 
1055
1053
  const nonPlaylistContentIds = Object.keys(progressContents)
1056
- if (enrolledGuidedCoursesIds.length > 0) {
1057
- nonPlaylistContentIds.push(...enrolledGuidedCoursesIds)
1058
- }
1059
1054
  if (userPinnedItem?.progressType === 'content') {
1060
1055
  nonPlaylistContentIds.push(userPinnedItem.id)
1061
1056
  }
@@ -1423,7 +1418,6 @@ export async function pinProgressRow(brand, id, progressType) {
1423
1418
  * Unpins the current pinned progress row for a user, scoped by brand.
1424
1419
  *
1425
1420
  * @param {string} brand - The brand context for the unpin action.
1426
- * @param {string} id - The content or playlist id to unpin.
1427
1421
  * @returns {Promise<Object>} - A promise resolving to the response from the unpin API.
1428
1422
  *
1429
1423
  * @example
@@ -1431,11 +1425,10 @@ export async function pinProgressRow(brand, id, progressType) {
1431
1425
  * .then(response => console.log(response))
1432
1426
  * .catch(error => console.error(error));
1433
1427
  */
1434
- export async function unpinProgressRow(brand, id) {
1435
- if (!(brand && id)) throw new Error(`undefined parameter brand: ${brand} or id: ${id}`)
1436
- const url = `/api/user-management-system/v1/progress/unpin?brand=${brand}&id=${id}`
1428
+ export async function unpinProgressRow(brand) {
1429
+ const url = `/api/user-management-system/v1/progress/unpin?brand=${brand}`
1437
1430
  const response = await fetchHandler(url, 'PUT', null)
1438
- if (response && !response.error && response['action'] === 'clear_user_pin') {
1431
+ if (response && !response.error) {
1439
1432
  await updateUserPinnedProgressRow(brand, null)
1440
1433
  }
1441
1434
  return response