musora-content-services 2.33.7 → 2.34.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 (164) hide show
  1. package/.coderabbit.yaml +0 -0
  2. package/.editorconfig +0 -0
  3. package/.github/pull_request_template.md +0 -0
  4. package/.github/workflows/conventional-commits.yaml +0 -0
  5. package/.github/workflows/docs.js.yml +0 -0
  6. package/.github/workflows/node.js.yml +0 -0
  7. package/.prettierignore +0 -0
  8. package/.prettierrc +0 -0
  9. package/.yarnrc.yml +1 -0
  10. package/CHANGELOG.md +23 -0
  11. package/README.md +0 -0
  12. package/babel.config.cjs +0 -0
  13. package/docs/ContentOrganization.html +2 -2
  14. package/docs/Gamification.html +2 -2
  15. package/docs/UserManagementSystem.html +2 -2
  16. package/docs/api_types.js.html +2 -2
  17. package/docs/config.js.html +2 -2
  18. package/docs/content-org_content-org.js.html +2 -2
  19. package/docs/content-org_guided-courses.ts.html +2 -2
  20. package/docs/content-org_playlists-types.js.html +2 -2
  21. package/docs/content-org_playlists.js.html +2 -2
  22. package/docs/content.js.html +2 -2
  23. package/docs/fonts/Montserrat/Montserrat-Bold.eot +0 -0
  24. package/docs/fonts/Montserrat/Montserrat-Bold.ttf +0 -0
  25. package/docs/fonts/Montserrat/Montserrat-Bold.woff +0 -0
  26. package/docs/fonts/Montserrat/Montserrat-Bold.woff2 +0 -0
  27. package/docs/fonts/Montserrat/Montserrat-Regular.eot +0 -0
  28. package/docs/fonts/Montserrat/Montserrat-Regular.ttf +0 -0
  29. package/docs/fonts/Montserrat/Montserrat-Regular.woff +0 -0
  30. package/docs/fonts/Montserrat/Montserrat-Regular.woff2 +0 -0
  31. package/docs/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.eot +0 -0
  32. package/docs/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.svg +0 -0
  33. package/docs/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.ttf +0 -0
  34. package/docs/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.woff +0 -0
  35. package/docs/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.woff2 +0 -0
  36. package/docs/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.eot +0 -0
  37. package/docs/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.svg +0 -0
  38. package/docs/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.ttf +0 -0
  39. package/docs/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.woff +0 -0
  40. package/docs/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.woff2 +0 -0
  41. package/docs/gamification_awards.js.html +0 -0
  42. package/docs/gamification_awards.ts.html +2 -2
  43. package/docs/gamification_gamification.js.html +2 -2
  44. package/docs/gamification_types.js.html +0 -0
  45. package/docs/global.html +2 -2
  46. package/docs/index.html +2 -2
  47. package/docs/module-Accounts.html +2 -2
  48. package/docs/module-Awards.html +2 -2
  49. package/docs/module-Config.html +2 -2
  50. package/docs/module-Content-Services-V2.html +2 -2
  51. package/docs/module-GuidedCourses.html +2 -2
  52. package/docs/module-Interests.html +2 -2
  53. package/docs/module-Permissions.html +2 -2
  54. package/docs/module-Playlists.html +2 -2
  55. package/docs/module-Railcontent-Services.html +2 -2
  56. package/docs/module-Sanity-Services.html +2 -2
  57. package/docs/module-Sessions.html +2 -2
  58. package/docs/module-UserActivity.html +4 -4
  59. package/docs/module-UserChat.html +2 -2
  60. package/docs/module-UserManagement.html +2 -2
  61. package/docs/module-UserMemberships.html +406 -0
  62. package/docs/module-UserNotifications.html +14 -14
  63. package/docs/module-UserProfile.html +2 -2
  64. package/docs/railcontent.js.html +2 -2
  65. package/docs/sanity.js.html +5 -4
  66. package/docs/scripts/collapse.js +0 -0
  67. package/docs/scripts/commonNav.js +0 -0
  68. package/docs/scripts/linenumber.js +0 -0
  69. package/docs/scripts/nav.js +0 -0
  70. package/docs/scripts/polyfill.js +0 -0
  71. package/docs/scripts/prettify/Apache-License-2.0.txt +0 -0
  72. package/docs/scripts/prettify/lang-css.js +0 -0
  73. package/docs/scripts/prettify/prettify.js +0 -0
  74. package/docs/scripts/search.js +0 -0
  75. package/docs/styles/jsdoc.css +0 -0
  76. package/docs/styles/prettify.css +0 -0
  77. package/docs/userActivity.js.html +15 -6
  78. package/docs/user_account.ts.html +2 -2
  79. package/docs/user_chat.js.html +2 -2
  80. package/docs/user_interests.js.html +2 -2
  81. package/docs/user_management.js.html +2 -2
  82. package/docs/user_memberships.js.html +122 -0
  83. package/docs/user_notifications.js.html +7 -5
  84. package/docs/user_permissions.js.html +2 -2
  85. package/docs/user_profile.js.html +2 -2
  86. package/docs/user_sessions.js.html +2 -2
  87. package/docs/user_types.js.html +2 -2
  88. package/docs/user_user-management-system.js.html +2 -2
  89. package/jest.config.js +0 -0
  90. package/jsdoc.json +0 -0
  91. package/package.json +1 -1
  92. package/src/contentMetaData.js +0 -0
  93. package/src/filterBuilder.js +0 -0
  94. package/src/index.d.ts +13 -0
  95. package/src/index.js +13 -0
  96. package/src/infrastructure/http/HttpClient.ts +0 -0
  97. package/src/infrastructure/http/executors/FetchRequestExecutor.ts +0 -0
  98. package/src/infrastructure/http/index.ts +0 -0
  99. package/src/infrastructure/http/interfaces/HeaderProvider.ts +0 -0
  100. package/src/infrastructure/http/interfaces/HttpError.ts +0 -0
  101. package/src/infrastructure/http/interfaces/NetworkError.ts +0 -0
  102. package/src/infrastructure/http/interfaces/RequestExecutor.ts +0 -0
  103. package/src/infrastructure/http/interfaces/RequestOptions.ts +0 -0
  104. package/src/infrastructure/http/providers/DefaultHeaderProvider.ts +0 -0
  105. package/src/lib/httpHelper.js +0 -0
  106. package/src/lib/lastUpdated.js +0 -0
  107. package/src/services/api/types.js +0 -0
  108. package/src/services/api/types.ts +0 -0
  109. package/src/services/config.js +0 -0
  110. package/src/services/content-org/content-org.js +0 -0
  111. package/src/services/content-org/guided-courses.ts +0 -0
  112. package/src/services/content-org/playlists-types.js +0 -0
  113. package/src/services/content-org/playlists.js +0 -0
  114. package/src/services/content.js +0 -0
  115. package/src/services/contentAggregator.js +0 -0
  116. package/src/services/contentLikes.js +0 -0
  117. package/src/services/contentProgress.js +0 -0
  118. package/src/services/dataContext.js +1 -0
  119. package/src/services/dateUtils.js +0 -0
  120. package/src/services/eventsAPI.js +154 -0
  121. package/src/services/forum.js +0 -0
  122. package/src/services/gamification/awards.ts +0 -0
  123. package/src/services/gamification/gamification.js +0 -0
  124. package/src/services/imageSRCBuilder.js +0 -0
  125. package/src/services/railcontent.js +0 -0
  126. package/src/services/recommendations.js +0 -0
  127. package/src/services/types.js +0 -0
  128. package/src/services/user/account.ts +0 -0
  129. package/src/services/user/chat.js +0 -0
  130. package/src/services/user/interests.js +0 -0
  131. package/src/services/user/management.js +0 -0
  132. package/src/services/user/memberships.js +50 -0
  133. package/src/services/user/notifications.js +5 -3
  134. package/src/services/user/permissions.js +0 -0
  135. package/src/services/user/profile.js +0 -0
  136. package/src/services/user/sessions.js +0 -0
  137. package/src/services/user/types.js +0 -0
  138. package/src/services/user/user-management-system.js +0 -0
  139. package/src/services/userActivity.js +0 -0
  140. package/test/HttpClient.test.js +0 -0
  141. package/test/content.test.js +0 -0
  142. package/test/contentLikes.test.js +0 -0
  143. package/test/contentProgress.test.js +0 -0
  144. package/test/dataContext.test.js +0 -0
  145. package/test/forum.test.js +0 -0
  146. package/test/imageSRCBuilder.test.js +0 -0
  147. package/test/imageSRCVerify.test.js +0 -0
  148. package/test/initializeTests.js +0 -0
  149. package/test/lib/lastUpdated.test.js +0 -0
  150. package/test/live/contentProgressLive.test.js +0 -0
  151. package/test/live/railcontentLive.test.js +0 -0
  152. package/test/localStorageMock.js +0 -0
  153. package/test/log.js +0 -0
  154. package/test/mockData/mockData_fetchByRailContentIds_one_content.json +0 -0
  155. package/test/mockData/mockData_progress_content.json +0 -0
  156. package/test/mockData/mockData_sanity_progress_content.json +0 -0
  157. package/test/mockData/mockData_user_practices.json +0 -0
  158. package/test/notifications.test.js +0 -0
  159. package/test/progressRows.test.js +0 -0
  160. package/test/sanityQueryService.test.js +0 -0
  161. package/test/streakMessage.test.js +0 -0
  162. package/test/user/permissions.test.js +0 -0
  163. package/test/userActivity.test.js +0 -0
  164. package/tools/generate-index.cjs +8 -0
@@ -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-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-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-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-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>
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 Wed Aug 27 2025 17:20:43 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 05 2025 12:36:37 GMT+0300 (Eastern European Summer Time) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme.
70
70
  </footer>
71
71
 
72
72
  <script>prettyPrint();</script>
package/jest.config.js CHANGED
File without changes
package/jsdoc.json CHANGED
File without changes
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "musora-content-services",
3
- "version": "2.33.7",
3
+ "version": "2.34.0",
4
4
  "description": "A package for Musoras content services ",
5
5
  "main": "src/index.js",
6
6
  "type": "module",
File without changes
File without changes
package/src/index.d.ts CHANGED
@@ -254,6 +254,11 @@ import {
254
254
  uploadPictureFromS3
255
255
  } from './services/user/management.js';
256
256
 
257
+ import {
258
+ fetchMemberships,
259
+ fetchRechargeTokens
260
+ } from './services/user/memberships.js';
261
+
257
262
  import {
258
263
  deleteNotification,
259
264
  fetchLiveEventPollingState,
@@ -310,6 +315,10 @@ import {
310
315
  updateUserPractice
311
316
  } from './services/userActivity.js';
312
317
 
318
+ import {
319
+ default as EventsAPI
320
+ } from './services/eventsAPI';
321
+
313
322
  declare module 'musora-content-services' {
314
323
  export {
315
324
  addContextToContent,
@@ -380,6 +389,7 @@ declare module 'musora-content-services' {
380
389
  fetchLikeCount,
381
390
  fetchLiveEvent,
382
391
  fetchLiveEventPollingState,
392
+ fetchMemberships,
383
393
  fetchMetadata,
384
394
  fetchMethod,
385
395
  fetchMethodChildren,
@@ -400,6 +410,7 @@ declare module 'musora-content-services' {
400
410
  fetchRecent,
401
411
  fetchRecentActivitiesActiveTabs,
402
412
  fetchRecentUserActivities,
413
+ fetchRechargeTokens,
403
414
  fetchRelatedLessons,
404
415
  fetchRelatedRecommendedContent,
405
416
  fetchRelatedSongs,
@@ -549,3 +560,5 @@ declare module 'musora-content-services' {
549
560
  verifyLocalDataContext,
550
561
  }
551
562
  }
563
+
564
+ export default EventsAPI
package/src/index.js CHANGED
@@ -254,6 +254,11 @@ import {
254
254
  uploadPictureFromS3
255
255
  } from './services/user/management.js';
256
256
 
257
+ import {
258
+ fetchMemberships,
259
+ fetchRechargeTokens
260
+ } from './services/user/memberships.js';
261
+
257
262
  import {
258
263
  deleteNotification,
259
264
  fetchLiveEventPollingState,
@@ -310,6 +315,10 @@ import {
310
315
  updateUserPractice
311
316
  } from './services/userActivity.js';
312
317
 
318
+ import {
319
+ default as EventsAPI
320
+ } from './services/eventsAPI';
321
+
313
322
  export {
314
323
  addContextToContent,
315
324
  addItemToPlaylist,
@@ -379,6 +388,7 @@ export {
379
388
  fetchLikeCount,
380
389
  fetchLiveEvent,
381
390
  fetchLiveEventPollingState,
391
+ fetchMemberships,
382
392
  fetchMetadata,
383
393
  fetchMethod,
384
394
  fetchMethodChildren,
@@ -399,6 +409,7 @@ export {
399
409
  fetchRecent,
400
410
  fetchRecentActivitiesActiveTabs,
401
411
  fetchRecentUserActivities,
412
+ fetchRechargeTokens,
402
413
  fetchRelatedLessons,
403
414
  fetchRelatedRecommendedContent,
404
415
  fetchRelatedSongs,
@@ -547,3 +558,5 @@ export {
547
558
  verifyImageSRC,
548
559
  verifyLocalDataContext,
549
560
  };
561
+
562
+ export default EventsAPI
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -11,6 +11,7 @@ const excludeFromGeneratedIndex = []
11
11
  export const ContentLikesVersionKey = 0
12
12
  export const ContentProgressVersionKey = 1
13
13
  export const UserActivityVersionKey = 2
14
+ export const PollingStateVersionKey = 3
14
15
 
15
16
  let cache = null
16
17
 
File without changes
@@ -0,0 +1,154 @@
1
+ import {fetchLiveEventPollingState, fetchUnreadCount, pauseLiveEventPolling} from "./user/notifications"
2
+ import {fetchLiveEvent} from "./sanity"
3
+ import { DataContext, PollingStateVersionKey } from './dataContext'
4
+
5
+ const pollingStateContext = new DataContext(PollingStateVersionKey, fetchLiveEventPollingState)
6
+
7
+ /**
8
+ * API for managing notifications and live event polling.
9
+ */
10
+ class EventsAPI {
11
+ constructor() {
12
+ this.brand = 'drumeo'
13
+ this.onNotificationStateUpdated = []
14
+ this.pollingInterval = null
15
+ this.isLiveEventPollingActive = true
16
+ this.resumeLiveEventTimeout = null
17
+ }
18
+
19
+ async initPollingControl() {
20
+ return pollingStateContext.getData();
21
+ }
22
+
23
+ /**
24
+ * Initializes the EventsAPI, setting the brand and starting auto events.
25
+ * @param {Object} [options]
26
+ * @param {string} [options.brand='drumeo'] - Brand identifier.
27
+ */
28
+ async initialize({ brand = 'drumeo' } = {}) {
29
+ this.brand = brand;
30
+ await this.setupAutoEvents();
31
+ await this.checkNotifications();
32
+ }
33
+ /**
34
+ * Adds a callback for when the notification state updates.
35
+ * @param {(notifications: { unreadCount: number, liveEvent: any }) => void} callback
36
+ * @returns {() => void} Function to remove the handler.
37
+ */
38
+ addNotificationStateUpdatedHandler(callback) {
39
+ this.onNotificationStateUpdated.push(callback);
40
+ return () => this.removeNotificationStateUpdatedHandler(callback);
41
+ }
42
+
43
+ /**
44
+ * Removes a previously added notification state update callback.
45
+ * @param {Function} callback
46
+ */
47
+ removeNotificationStateUpdatedHandler(callback) {
48
+ const index = this.onNotificationStateUpdated.indexOf(callback);
49
+ if (index > -1) {
50
+ this.onNotificationStateUpdated.splice(index, 1);
51
+ }
52
+ }
53
+
54
+ /**
55
+ * Triggers all notification state update callbacks.
56
+ * @param {Object} notifications
57
+ * @param {number} notifications.unreadCount
58
+ * @param {any} notifications.liveEvent
59
+ */
60
+ triggerNotificationStateUpdated(notifications) {
61
+ this.onNotificationStateUpdated.forEach(callback => {
62
+ try {
63
+ callback(notifications);
64
+ } catch (error) {
65
+ console.error('Error in onNotificationStateUpdated callback:', error);
66
+ }
67
+ });
68
+ }
69
+
70
+ /**
71
+ * Sets up automatic polling for notifications.
72
+ */
73
+ async setupAutoEvents() {
74
+ try {
75
+ const pollingData = await this.initPollingControl();
76
+ const pauseUntil = Date.parse(pollingData?.pause_until); // UTC ms
77
+ const now = Date.now(); // UTC ms
78
+ const isPaused = pauseUntil > now;
79
+ if (isPaused) {
80
+ const ttlMs = pauseUntil - now;
81
+ await this.pauseLiveEventCheck(ttlMs);
82
+ }
83
+ this.pollingInterval = setInterval(() => {
84
+ this.checkNotifications();
85
+ }, 60000);
86
+ } catch (error) {
87
+ console.error('EventsApi: Failed to setup auto events:', error);
88
+ this.checkNotifications();
89
+ }
90
+ }
91
+
92
+
93
+ /**
94
+ * Checks for unread notifications and triggers callbacks.
95
+ */
96
+ async checkNotifications() {
97
+ try {
98
+ const notificationRes = await fetchUnreadCount({brand : this.brand });
99
+ this.triggerNotificationStateUpdated({
100
+ unreadCount: notificationRes.data,
101
+ liveEvent : notificationRes.liveEvent || null,
102
+ });
103
+ } catch (error) {
104
+ console.error('Failed to check notifications:', error);
105
+ }
106
+ }
107
+
108
+ /**
109
+ * Pauses live event polling for a specified TTL or until the live event ends.
110
+ * @param {number} ttlMs - Time to pause in milliseconds.
111
+ */
112
+ async pauseLiveEventCheck(ttlMs) {
113
+ this.isLiveEventPollingActive = false;
114
+ if (this.resumeLiveEventTimeout) {
115
+ clearTimeout(this.resumeLiveEventTimeout);
116
+ }
117
+ if (typeof ttlMs !== 'number') {
118
+ try {
119
+ const liveEvent = await fetchLiveEvent(this.brand);
120
+ if(liveEvent == null || liveEvent.live_event_end_time == null){
121
+ return;
122
+ }
123
+ const now = Date.now();
124
+ const endTime = new Date(liveEvent.live_event_end_time).getTime();
125
+ await pauseLiveEventPolling(this.brand);
126
+ ttlMs = endTime - now;
127
+ } catch (err) {
128
+ console.error('Failed to fetch live event for TTL fallback:', err);
129
+ return;
130
+ }
131
+ }
132
+
133
+ if (ttlMs > 0) {
134
+ this.resumeLiveEventTimeout = setTimeout(() => {
135
+ this.resumeLiveEventCheck();
136
+ }, ttlMs);
137
+ }
138
+ }
139
+
140
+ /**
141
+ * Resumes live event polling immediately.
142
+ */
143
+ resumeLiveEventCheck() {
144
+ this.isLiveEventPollingActive = true;
145
+ if (this.resumeLiveEventTimeout) {
146
+ clearTimeout(this.resumeLiveEventTimeout);
147
+ this.resumeLiveEventTimeout = null;
148
+ }
149
+ }
150
+ }
151
+
152
+ // Export singleton
153
+ const eventsAPI = new EventsAPI();
154
+ export default eventsAPI;
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -0,0 +1,50 @@
1
+ /**
2
+ * @module UserMemberships
3
+ */
4
+ import { fetchHandler } from '../railcontent.js'
5
+ import './types.js'
6
+
7
+ const baseUrl = `/api/user-memberships`
8
+
9
+ /**
10
+ * Fetches the authenticated user's memberships from the API.
11
+ *
12
+ * @returns {Promise<Array<Object>>} - A promise that resolves to an array of membership objects.
13
+ *
14
+ * @throws {Error} - Throws an error if the request fails.
15
+ *
16
+ * @example
17
+ * fetchMemberships()
18
+ * .then(memberships => console.log(memberships))
19
+ * .catch(error => console.error(error));
20
+ */
21
+ export async function fetchMemberships() {
22
+ const url = `${baseUrl}/v1`
23
+ return fetchHandler(url, 'get')
24
+ }
25
+
26
+ /**
27
+ * Fetches tokens required for interacting with Shopify and Recharge.
28
+ *
29
+ * @returns {Promise<Object>} - A promise that resolves to an object containing:
30
+ * - {string} shopify_customer_access_token - Shopify customer access token.
31
+ * - {string} store_identifier - The store domain identifier.
32
+ * - {string} recharge_storefront_access_token - Recharge storefront access token.
33
+ * - {string} storefront_access_token - Shopify storefront access token.
34
+ *
35
+ * @throws {Error} - Throws an error if the request fails.
36
+ *
37
+ * @example
38
+ * fetchRechargeTokens()
39
+ * .then(tokens => console.log(tokens))
40
+ * .catch(error => console.error(error));
41
+ */
42
+ export async function fetchRechargeTokens() {
43
+ const url = `${baseUrl}/v1/subscriptions-tokens`
44
+ return fetchHandler(url, 'get')
45
+ }
46
+
47
+
48
+
49
+
50
+
@@ -2,7 +2,9 @@
2
2
  * @module UserNotifications
3
3
  */
4
4
  import { fetchHandler } from '../railcontent.js'
5
+ import eventsAPI from '../eventsAPI.js'
5
6
  import './types.js'
7
+ import {globalConfig} from "../config";
6
8
  import {fetchLiveEvent} from "../sanity";
7
9
 
8
10
  const baseUrl = `/api/notifications`
@@ -67,8 +69,8 @@ export async function markNotificationAsRead(notificationId) {
67
69
  * @param {string} [brand='drumeo'] - The brand context for live event handling before marking notifications.
68
70
  * @returns {Promise<Object>} - A promise resolving to the API response from the notifications read endpoint.
69
71
  */
70
- export async function markAllNotificationsAsRead(brand = 'drumeo') {
71
- await pauseLiveEventPolling(brand)
72
+ export async function markAllNotificationsAsRead() {
73
+ await eventsAPI.pauseLiveEventCheck()
72
74
  const url = `${baseUrl}/v1/read`
73
75
  return fetchHandler(url, 'put')
74
76
  }
@@ -168,7 +170,7 @@ export async function fetchUnreadCount({ brand = 'drumeo'} = {}) {
168
170
  const liveEventPollingState = await fetchLiveEventPollingState()
169
171
  if(liveEventPollingState.data?.read_state === true){
170
172
  const liveEvent = await fetchLiveEvent(brand)
171
- return { data: liveEvent ? 1 : 0}
173
+ return { data: liveEvent ? 1 : 0, liveEvent}
172
174
  }
173
175
  return { data: 0}
174
176
  }
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
package/test/log.js CHANGED
File without changes
File without changes