musora-content-services 2.30.9 → 2.31.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 (158) 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 +14 -0
  11. package/README.md +0 -0
  12. package/babel.config.cjs +0 -0
  13. package/docs/ContentOrganization.html +0 -0
  14. package/docs/Gamification.html +0 -0
  15. package/docs/UserManagementSystem.html +0 -0
  16. package/docs/api_types.js.html +0 -0
  17. package/docs/config.js.html +0 -0
  18. package/docs/content-org_content-org.js.html +0 -0
  19. package/docs/content-org_playlists-types.js.html +0 -0
  20. package/docs/content-org_playlists.js.html +0 -0
  21. package/docs/content.js.html +0 -0
  22. package/docs/fonts/Montserrat/Montserrat-Bold.eot +0 -0
  23. package/docs/fonts/Montserrat/Montserrat-Bold.ttf +0 -0
  24. package/docs/fonts/Montserrat/Montserrat-Bold.woff +0 -0
  25. package/docs/fonts/Montserrat/Montserrat-Bold.woff2 +0 -0
  26. package/docs/fonts/Montserrat/Montserrat-Regular.eot +0 -0
  27. package/docs/fonts/Montserrat/Montserrat-Regular.ttf +0 -0
  28. package/docs/fonts/Montserrat/Montserrat-Regular.woff +0 -0
  29. package/docs/fonts/Montserrat/Montserrat-Regular.woff2 +0 -0
  30. package/docs/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.eot +0 -0
  31. package/docs/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.svg +0 -0
  32. package/docs/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.ttf +0 -0
  33. package/docs/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.woff +0 -0
  34. package/docs/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.woff2 +0 -0
  35. package/docs/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.eot +0 -0
  36. package/docs/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.svg +0 -0
  37. package/docs/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.ttf +0 -0
  38. package/docs/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.woff +0 -0
  39. package/docs/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.woff2 +0 -0
  40. package/docs/gamification_awards.js.html +0 -0
  41. package/docs/gamification_gamification.js.html +0 -0
  42. package/docs/gamification_types.js.html +0 -0
  43. package/docs/global.html +0 -0
  44. package/docs/index.html +0 -0
  45. package/docs/module-Awards.html +0 -0
  46. package/docs/module-Config.html +0 -0
  47. package/docs/module-Content-Services-V2.html +0 -0
  48. package/docs/module-Interests.html +0 -0
  49. package/docs/module-Permissions.html +0 -0
  50. package/docs/module-Playlists.html +0 -0
  51. package/docs/module-Railcontent-Services.html +0 -0
  52. package/docs/module-Sanity-Services.html +0 -0
  53. package/docs/module-Sessions.html +0 -0
  54. package/docs/module-UserActivity.html +0 -0
  55. package/docs/module-UserChat.html +0 -0
  56. package/docs/module-UserManagement.html +0 -0
  57. package/docs/module-UserNotifications.html +0 -0
  58. package/docs/module-UserProfile.html +0 -0
  59. package/docs/railcontent.js.html +0 -0
  60. package/docs/sanity.js.html +0 -0
  61. package/docs/scripts/collapse.js +0 -0
  62. package/docs/scripts/commonNav.js +0 -0
  63. package/docs/scripts/linenumber.js +0 -0
  64. package/docs/scripts/nav.js +0 -0
  65. package/docs/scripts/polyfill.js +0 -0
  66. package/docs/scripts/prettify/Apache-License-2.0.txt +0 -0
  67. package/docs/scripts/prettify/lang-css.js +0 -0
  68. package/docs/scripts/prettify/prettify.js +0 -0
  69. package/docs/scripts/search.js +0 -0
  70. package/docs/styles/jsdoc.css +0 -0
  71. package/docs/styles/prettify.css +0 -0
  72. package/docs/userActivity.js.html +0 -0
  73. package/docs/user_chat.js.html +0 -0
  74. package/docs/user_interests.js.html +0 -0
  75. package/docs/user_management.js.html +0 -0
  76. package/docs/user_notifications.js.html +0 -0
  77. package/docs/user_permissions.js.html +0 -0
  78. package/docs/user_profile.js.html +0 -0
  79. package/docs/user_sessions.js.html +0 -0
  80. package/docs/user_types.js.html +0 -0
  81. package/docs/user_user-management-system.js.html +0 -0
  82. package/jest.config.js +0 -0
  83. package/jsdoc.json +0 -0
  84. package/package.json +1 -1
  85. package/src/contentMetaData.js +6 -0
  86. package/src/contentTypeConfig.js +7 -3
  87. package/src/filterBuilder.js +0 -0
  88. package/src/index.d.ts +0 -0
  89. package/src/index.js +0 -0
  90. package/src/infrastructure/http/HttpClient.ts +0 -0
  91. package/src/infrastructure/http/executors/FetchRequestExecutor.ts +0 -0
  92. package/src/infrastructure/http/index.ts +0 -0
  93. package/src/infrastructure/http/interfaces/HeaderProvider.ts +0 -0
  94. package/src/infrastructure/http/interfaces/HttpError.ts +0 -0
  95. package/src/infrastructure/http/interfaces/NetworkError.ts +0 -0
  96. package/src/infrastructure/http/interfaces/RequestExecutor.ts +0 -0
  97. package/src/infrastructure/http/interfaces/RequestOptions.ts +0 -0
  98. package/src/infrastructure/http/providers/DefaultHeaderProvider.ts +0 -0
  99. package/src/lib/httpHelper.js +0 -0
  100. package/src/lib/lastUpdated.js +0 -0
  101. package/src/services/api/types.js +0 -0
  102. package/src/services/config.js +0 -0
  103. package/src/services/content-org/content-org.js +0 -0
  104. package/src/services/content-org/guided-courses.ts +0 -0
  105. package/src/services/content-org/playlists-types.js +0 -0
  106. package/src/services/content-org/playlists.js +0 -0
  107. package/src/services/content.js +0 -0
  108. package/src/services/contentAggregator.js +0 -0
  109. package/src/services/contentLikes.js +0 -0
  110. package/src/services/contentProgress.js +0 -0
  111. package/src/services/dataContext.js +0 -0
  112. package/src/services/dateUtils.js +0 -0
  113. package/src/services/forum.js +0 -0
  114. package/src/services/gamification/awards.js +0 -0
  115. package/src/services/gamification/gamification.js +0 -0
  116. package/src/services/gamification/types.js +0 -0
  117. package/src/services/imageSRCBuilder.js +0 -0
  118. package/src/services/imageSRCVerify.js +0 -0
  119. package/src/services/railcontent.js +0 -0
  120. package/src/services/recommendations.js +0 -0
  121. package/src/services/sanity.js +1 -1
  122. package/src/services/types.js +0 -0
  123. package/src/services/user/account.ts +0 -0
  124. package/src/services/user/chat.js +0 -0
  125. package/src/services/user/interests.js +0 -0
  126. package/src/services/user/management.js +0 -0
  127. package/src/services/user/notifications.js +2 -2
  128. package/src/services/user/permissions.js +0 -0
  129. package/src/services/user/profile.js +0 -0
  130. package/src/services/user/sessions.js +0 -0
  131. package/src/services/user/types.js +0 -0
  132. package/src/services/user/user-management-system.js +0 -0
  133. package/src/services/userActivity.js +0 -0
  134. package/test/HttpClient.test.js +0 -0
  135. package/test/content.test.js +0 -0
  136. package/test/contentLikes.test.js +0 -0
  137. package/test/contentProgress.test.js +0 -0
  138. package/test/dataContext.test.js +0 -0
  139. package/test/forum.test.js +0 -0
  140. package/test/imageSRCBuilder.test.js +0 -0
  141. package/test/imageSRCVerify.test.js +0 -0
  142. package/test/initializeTests.js +0 -0
  143. package/test/lib/lastUpdated.test.js +0 -0
  144. package/test/live/contentProgressLive.test.js +0 -0
  145. package/test/live/railcontentLive.test.js +0 -0
  146. package/test/localStorageMock.js +0 -0
  147. package/test/log.js +0 -0
  148. package/test/mockData/mockData_fetchByRailContentIds_one_content.json +0 -0
  149. package/test/mockData/mockData_progress_content.json +0 -0
  150. package/test/mockData/mockData_sanity_progress_content.json +0 -0
  151. package/test/mockData/mockData_user_practices.json +0 -0
  152. package/test/notifications.test.js +0 -0
  153. package/test/progressRows.test.js +0 -0
  154. package/test/sanityQueryService.test.js +0 -0
  155. package/test/streakMessage.test.js +0 -0
  156. package/test/user/permissions.test.js +0 -0
  157. package/test/userActivity.test.js +0 -0
  158. package/tools/generate-index.cjs +0 -0
package/.coderabbit.yaml CHANGED
File without changes
package/.editorconfig CHANGED
File without changes
File without changes
File without changes
File without changes
File without changes
package/.prettierignore CHANGED
File without changes
package/.prettierrc CHANGED
File without changes
package/.yarnrc.yml ADDED
@@ -0,0 +1 @@
1
+ nodeLinker: node-modules
package/CHANGELOG.md CHANGED
@@ -2,6 +2,20 @@
2
2
 
3
3
  All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
4
4
 
5
+ ## [2.31.0](https://github.com/railroadmedia/musora-content-services/compare/v2.30.9...v2.31.0) (2025-08-14)
6
+
7
+
8
+ ### Features
9
+
10
+ * T3PS-458: Add Jam Tracks pill on Songs Overview page ([7351760](https://github.com/railroadmedia/musora-content-services/commit/7351760f3c4a92997036c860fadb6ef2602fc505))
11
+
12
+
13
+ ### Bug Fixes
14
+
15
+ * MU2-914: prevent null access error in fetchUnreadCount ([1813999](https://github.com/railroadmedia/musora-content-services/commit/1813999872466f970aa20c936d702b6a4ecc7b91))
16
+ * prevent null access error in fetchUnreadCount ([df39ccf](https://github.com/railroadmedia/musora-content-services/commit/df39ccfaf972214d08827e5a60f91653d491504e))
17
+ * T3PS-732 Filter sorting by name ([a25792c](https://github.com/railroadmedia/musora-content-services/commit/a25792cfce9163b8124c3f000569fd24541a7b33))
18
+
5
19
  ### [2.30.9](https://github.com/railroadmedia/musora-content-services/compare/v2.30.5...v2.30.9) (2025-08-13)
6
20
 
7
21
 
package/README.md CHANGED
File without changes
package/babel.config.cjs CHANGED
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
File without changes
File without changes
package/docs/global.html CHANGED
File without changes
package/docs/index.html CHANGED
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
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/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.30.9",
3
+ "version": "2.31.0",
4
4
  "description": "A package for Musoras content services ",
5
5
  "main": "src/index.js",
6
6
  "type": "module",
@@ -39,6 +39,7 @@ export class Tabs {
39
39
  static Tutorials = { name: 'Tutorials', short_name: 'Tutorials', value: 'type,tutorials', cardType: 'big' }
40
40
  static Transcriptions = { name: 'Transcriptions', short_name: 'Transcriptions', value: 'type,transcription', cardType: 'small' }
41
41
  static PlayAlongs = { name: 'Play-Alongs', short_name: 'Play-Alongs', value:'type,play along', cardType: 'small' }
42
+ static JamTracks = { name: 'Jam Tracks', short_name: 'Jam Tracks', value:'type,jam-track', cardType: 'small' }
42
43
  static RecentAll = { name: 'All', short_name: 'All' }
43
44
  static RecentIncomplete = { name: 'Incomplete', short_name: 'Incomplete' }
44
45
  static RecentCompleted = { name: 'Completed', short_name: 'Completed' }
@@ -220,6 +221,7 @@ const commonMetadata = {
220
221
  Tabs.Tutorials,
221
222
  Tabs.Transcriptions,
222
223
  Tabs.PlayAlongs,
224
+ Tabs.JamTracks,
223
225
  Tabs.ExploreAll
224
226
  ],
225
227
  },
@@ -359,6 +361,7 @@ const contentMetadata = {
359
361
  Tabs.Tutorials,
360
362
  Tabs.Transcriptions,
361
363
  Tabs.PlayAlongs,
364
+ Tabs.JamTracks,
362
365
  Tabs.ExploreAll
363
366
  ],
364
367
  },
@@ -400,6 +403,7 @@ const contentMetadata = {
400
403
  Tabs.Tutorials,
401
404
  Tabs.Transcriptions,
402
405
  Tabs.PlayAlongs,
406
+ Tabs.JamTracks,
403
407
  Tabs.ExploreAll
404
408
  ],
405
409
  },
@@ -451,6 +455,7 @@ const contentMetadata = {
451
455
  Tabs.Tutorials,
452
456
  Tabs.Transcriptions,
453
457
  Tabs.PlayAlongs,
458
+ Tabs.JamTracks,
454
459
  Tabs.ExploreAll
455
460
  ],
456
461
  },
@@ -491,6 +496,7 @@ const contentMetadata = {
491
496
  Tabs.Tutorials,
492
497
  Tabs.Transcriptions,
493
498
  Tabs.PlayAlongs,
499
+ Tabs.JamTracks,
494
500
  Tabs.ExploreAll
495
501
  ],
496
502
  },
@@ -174,6 +174,7 @@ export const studentArchivesLessonTypes = ['student-review', 'student-focus','st
174
174
  export const tutorialsLessonTypes = ['song-tutorial'];
175
175
  export const transcriptionsLessonTypes = ['song'];
176
176
  export const playAlongLessonTypes = ['play-along'];
177
+ export const jamTrackLessonTypes = ['jam-track'];
177
178
 
178
179
  export const individualLessonsTypes = [
179
180
  ...singleLessonTypes,
@@ -207,7 +208,7 @@ export const lessonTypesMapping = {
207
208
  'tabs': transcriptionsLessonTypes,
208
209
  'sheet music': transcriptionsLessonTypes,
209
210
  'play-alongs': playAlongLessonTypes,
210
- 'jam tracks': ['jam-track'],
211
+ 'jam tracks': jamTrackLessonTypes,
211
212
  };
212
213
 
213
214
  export const getNextLessonLessonParentTypes = ['course', 'guided-course', 'pack', 'pack-bundle', 'song-tutorial'];
@@ -222,7 +223,7 @@ export const progressTypesMapping = {
222
223
  'guided course': ['guided-course'],
223
224
  'pack': ['pack', 'semester-pack'],
224
225
  'method': ['learning-path'],
225
- 'jam track': ['jam-track'],
226
+ 'jam track': jamTrackLessonTypes,
226
227
  'course video': ['course-part'],
227
228
  };
228
229
 
@@ -235,7 +236,7 @@ export const songs = {
235
236
 
236
237
  export const filterTypes = {
237
238
  lessons: [...individualLessonsTypes, ...collectionLessonTypes],
238
- songs: [...tutorialsLessonTypes, ...transcriptionsLessonTypes, ...playAlongLessonTypes, 'jam-track'],
239
+ songs: [...tutorialsLessonTypes, ...transcriptionsLessonTypes, ...playAlongLessonTypes, ...jamTrackLessonTypes],
239
240
  }
240
241
 
241
242
  export const recentTypes = {
@@ -802,6 +803,9 @@ export function filtersToGroq(filters, selectedFilters = [], pageName = '') {
802
803
  } else if(value.toLowerCase() === Tabs.PlayAlongs.name.toLowerCase()){
803
804
  const conditions = playAlongLessonTypes.map(lessonType => `_type == '${lessonType}'`).join(' || ');
804
805
  return ` (${conditions})`;
806
+ } else if(value.toLowerCase() === Tabs.JamTracks.name.toLowerCase()){
807
+ const conditions = jamTrackLessonTypes.map(lessonType => `_type == '${lessonType}'`).join(' || ');
808
+ return ` (${conditions})`;
805
809
  } else if(value.toLowerCase() === Tabs.ExploreAll.name.toLowerCase()){
806
810
  var allLessons = filterTypes[pageName] || [];
807
811
  const conditions = allLessons.map(lessonType => `_type == '${lessonType}'`).join(' || ');
File without changes
package/src/index.d.ts CHANGED
File without changes
package/src/index.js CHANGED
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
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -753,7 +753,7 @@ export function getSortOrder(sort = '-published_on', brand, groupBy) {
753
753
  sort = isDesc ? sort.substring(1) : sort
754
754
  switch (sort) {
755
755
  case 'slug':
756
- sortOrder = groupBy ? 'name' : 'title'
756
+ sortOrder = groupBy ? 'name' : '!defined(title), lower(title)'
757
757
  break
758
758
  case 'name':
759
759
  sortOrder = sort
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -162,7 +162,7 @@ export async function restoreNotification(notificationId) {
162
162
  export async function fetchUnreadCount({ brand = 'drumeo'} = {}) {
163
163
  const url = `${baseUrl}/v1/unread-count`
164
164
  const notifUnread = await fetchHandler(url, 'get')
165
- if (notifUnread.data > 0) {
165
+ if (notifUnread && notifUnread.data > 0) {
166
166
  return notifUnread// Return early if unread notifications exist
167
167
  }
168
168
  const liveEventPollingState = await fetchLiveEventPollingState()
@@ -170,7 +170,7 @@ export async function fetchUnreadCount({ brand = 'drumeo'} = {}) {
170
170
  const liveEvent = await fetchLiveEvent(brand)
171
171
  return { data: liveEvent ? 1 : 0}
172
172
  }
173
- return notifUnread
173
+ return { data: 0}
174
174
  }
175
175
 
176
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
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes