musora-content-services 2.84.0 → 2.85.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (219) hide show
  1. package/.claude/settings.local.json +14 -0
  2. package/.coderabbit.yaml +0 -0
  3. package/.editorconfig +0 -0
  4. package/.github/pull_request_template.md +0 -0
  5. package/.github/workflows/conventional-commits.yaml +0 -0
  6. package/.github/workflows/docs.js.yml +0 -0
  7. package/.github/workflows/node.js.yml +0 -0
  8. package/.prettierignore +0 -0
  9. package/.prettierrc +0 -0
  10. package/.yarnrc.yml +1 -0
  11. package/CHANGELOG.md +15 -0
  12. package/README.md +0 -0
  13. package/babel.config.cjs +0 -0
  14. package/docs/Content.html +0 -0
  15. package/docs/ContentOrganization.html +2 -2
  16. package/docs/Forums.html +2 -2
  17. package/docs/Gamification.html +2 -2
  18. package/docs/TestUser.html +2 -2
  19. package/docs/UserManagementSystem.html +2 -2
  20. package/docs/api_types.js.html +2 -2
  21. package/docs/config.js.html +2 -5
  22. package/docs/content-org_content-org.js.html +2 -2
  23. package/docs/content-org_guided-courses.ts.html +2 -2
  24. package/docs/content-org_learning-paths.ts.html +24 -126
  25. package/docs/content-org_playlists-types.js.html +2 -2
  26. package/docs/content-org_playlists.js.html +2 -2
  27. package/docs/content.js.html +10 -88
  28. package/docs/content_artist.ts.html +0 -0
  29. package/docs/content_content.ts.html +0 -0
  30. package/docs/content_genre.ts.html +0 -0
  31. package/docs/content_instructor.ts.html +0 -0
  32. package/docs/fonts/Montserrat/Montserrat-Bold.eot +0 -0
  33. package/docs/fonts/Montserrat/Montserrat-Bold.ttf +0 -0
  34. package/docs/fonts/Montserrat/Montserrat-Bold.woff +0 -0
  35. package/docs/fonts/Montserrat/Montserrat-Bold.woff2 +0 -0
  36. package/docs/fonts/Montserrat/Montserrat-Regular.eot +0 -0
  37. package/docs/fonts/Montserrat/Montserrat-Regular.ttf +0 -0
  38. package/docs/fonts/Montserrat/Montserrat-Regular.woff +0 -0
  39. package/docs/fonts/Montserrat/Montserrat-Regular.woff2 +0 -0
  40. package/docs/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.eot +0 -0
  41. package/docs/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.svg +0 -0
  42. package/docs/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.ttf +0 -0
  43. package/docs/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.woff +0 -0
  44. package/docs/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.woff2 +0 -0
  45. package/docs/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.eot +0 -0
  46. package/docs/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.svg +0 -0
  47. package/docs/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.ttf +0 -0
  48. package/docs/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.woff +0 -0
  49. package/docs/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.woff2 +0 -0
  50. package/docs/forums_categories.ts.html +3 -22
  51. package/docs/forums_discussions.js.html +0 -0
  52. package/docs/forums_forum.js.html +0 -0
  53. package/docs/forums_forums.ts.html +2 -2
  54. package/docs/forums_posts.ts.html +2 -2
  55. package/docs/forums_threads.ts.html +2 -2
  56. package/docs/gamification_awards.js.html +0 -0
  57. package/docs/gamification_awards.ts.html +12 -26
  58. package/docs/gamification_gamification.js.html +2 -2
  59. package/docs/gamification_types.js.html +0 -0
  60. package/docs/global.html +2 -2
  61. package/docs/index.html +2 -2
  62. package/docs/liveTesting.ts.html +2 -2
  63. package/docs/module-Accounts.html +14 -14
  64. package/docs/module-Artist.html +0 -0
  65. package/docs/module-Awards.html +6 -106
  66. package/docs/module-Categories.html +0 -0
  67. package/docs/module-Config.html +4 -5
  68. package/docs/module-Content-Services-V2.html +9 -440
  69. package/docs/module-ForumCategories.html +0 -0
  70. package/docs/module-ForumDiscussions.html +0 -0
  71. package/docs/module-Forums.html +43 -607
  72. package/docs/module-Genre.html +0 -0
  73. package/docs/module-GuidedCourses.html +2 -2
  74. package/docs/module-Instructor.html +0 -0
  75. package/docs/module-Interests.html +2 -2
  76. package/docs/module-LearningPaths.html +12 -640
  77. package/docs/module-Onboarding.html +2 -2
  78. package/docs/module-Payments.html +2 -2
  79. package/docs/module-Permissions.html +2 -2
  80. package/docs/module-Playlists.html +2 -2
  81. package/docs/module-ProgressRow.html +2 -2
  82. package/docs/module-Railcontent-Services.html +298 -31
  83. package/docs/module-Sanity-Services.html +1901 -530
  84. package/docs/module-Sessions.html +2 -2
  85. package/docs/module-Threads.html +0 -0
  86. package/docs/module-UserActivity.html +5 -5
  87. package/docs/module-UserChat.html +2 -2
  88. package/docs/module-UserManagement.html +2 -2
  89. package/docs/module-UserMemberships.html +2 -2
  90. package/docs/module-UserNotifications.html +2 -2
  91. package/docs/module-UserProfile.html +2 -2
  92. package/docs/progress-row_method-card.js.html +3 -3
  93. package/docs/railcontent.js.html +20 -8
  94. package/docs/sanity.js.html +313 -199
  95. package/docs/scripts/collapse.js +0 -0
  96. package/docs/scripts/commonNav.js +0 -0
  97. package/docs/scripts/linenumber.js +0 -0
  98. package/docs/scripts/nav.js +0 -0
  99. package/docs/scripts/polyfill.js +0 -0
  100. package/docs/scripts/prettify/Apache-License-2.0.txt +0 -0
  101. package/docs/scripts/prettify/lang-css.js +0 -0
  102. package/docs/scripts/prettify/prettify.js +0 -0
  103. package/docs/scripts/search.js +0 -0
  104. package/docs/styles/jsdoc.css +0 -0
  105. package/docs/styles/prettify.css +0 -0
  106. package/docs/userActivity.js.html +5 -17
  107. package/docs/user_account.ts.html +13 -14
  108. package/docs/user_chat.js.html +2 -2
  109. package/docs/user_interests.js.html +2 -2
  110. package/docs/user_management.js.html +2 -2
  111. package/docs/user_memberships.js.html +0 -0
  112. package/docs/user_memberships.ts.html +2 -2
  113. package/docs/user_notifications.js.html +2 -2
  114. package/docs/user_onboarding.ts.html +2 -2
  115. package/docs/user_payments.ts.html +2 -2
  116. package/docs/user_permissions.js.html +3 -3
  117. package/docs/user_profile.js.html +2 -2
  118. package/docs/user_sessions.js.html +2 -2
  119. package/docs/user_types.js.html +2 -2
  120. package/docs/user_user-management-system.js.html +2 -2
  121. package/jest.config.js +0 -0
  122. package/jsdoc.json +0 -0
  123. package/package.json +1 -1
  124. package/src/contentMetaData.js +0 -0
  125. package/src/filterBuilder.js +0 -0
  126. package/src/index.d.ts +2 -2
  127. package/src/index.js +2 -2
  128. package/src/infrastructure/http/HttpClient.ts +0 -0
  129. package/src/infrastructure/http/executors/FetchRequestExecutor.ts +0 -0
  130. package/src/infrastructure/http/index.ts +0 -0
  131. package/src/infrastructure/http/interfaces/HeaderProvider.ts +0 -0
  132. package/src/infrastructure/http/interfaces/HttpError.ts +0 -0
  133. package/src/infrastructure/http/interfaces/NetworkError.ts +0 -0
  134. package/src/infrastructure/http/interfaces/RequestExecutor.ts +0 -0
  135. package/src/infrastructure/http/interfaces/RequestOptions.ts +0 -0
  136. package/src/infrastructure/http/providers/DefaultHeaderProvider.ts +0 -0
  137. package/src/lib/httpHelper.js +0 -0
  138. package/src/lib/lastUpdated.js +0 -0
  139. package/src/services/api/types.js +0 -0
  140. package/src/services/api/types.ts +0 -0
  141. package/src/services/config.js +0 -0
  142. package/src/services/content/artist.ts +0 -0
  143. package/src/services/content/content.ts +0 -0
  144. package/src/services/content/genre.ts +0 -0
  145. package/src/services/content/instructor.ts +0 -0
  146. package/src/services/content-org/content-org.js +0 -0
  147. package/src/services/content-org/guided-courses.ts +0 -0
  148. package/src/services/content-org/learning-paths.ts +0 -0
  149. package/src/services/content-org/playlists-types.js +0 -0
  150. package/src/services/content-org/playlists.js +0 -0
  151. package/src/services/content.js +0 -0
  152. package/src/services/contentAggregator.js +10 -23
  153. package/src/services/contentLikes.js +0 -0
  154. package/src/services/contentProgress.js +250 -147
  155. package/src/services/dataContext.js +0 -0
  156. package/src/services/dateUtils.js +0 -0
  157. package/src/services/eventsAPI.js +0 -0
  158. package/src/services/forums/categories.ts +0 -0
  159. package/src/services/forums/forums.ts +0 -0
  160. package/src/services/forums/posts.ts +0 -0
  161. package/src/services/forums/threads.ts +7 -7
  162. package/src/services/forums/types.ts +1 -0
  163. package/src/services/gamification/awards.ts +0 -0
  164. package/src/services/gamification/gamification.js +0 -0
  165. package/src/services/imageSRCBuilder.js +0 -0
  166. package/src/services/imageSRCVerify.js +0 -0
  167. package/src/services/liveTesting.ts +0 -0
  168. package/src/services/permissions/PermissionsAdapter.ts +0 -0
  169. package/src/services/permissions/PermissionsAdapterFactory.ts +0 -0
  170. package/src/services/permissions/PermissionsV1Adapter.ts +0 -0
  171. package/src/services/permissions/PermissionsV2Adapter.ts +0 -0
  172. package/src/services/permissions/README.md +0 -0
  173. package/src/services/permissions/index.ts +0 -0
  174. package/src/services/progress-row/method-card.js +0 -0
  175. package/src/services/railcontent.js +18 -6
  176. package/src/services/recommendations.js +0 -0
  177. package/src/services/sanity.js +18 -2
  178. package/src/services/types.js +0 -0
  179. package/src/services/user/account.ts +0 -0
  180. package/src/services/user/chat.js +0 -0
  181. package/src/services/user/interests.js +0 -0
  182. package/src/services/user/management.js +0 -0
  183. package/src/services/user/memberships.ts +0 -0
  184. package/src/services/user/notifications.js +0 -0
  185. package/src/services/user/onboarding.ts +0 -0
  186. package/src/services/user/payments.ts +0 -0
  187. package/src/services/user/permissions.js +0 -0
  188. package/src/services/user/profile.js +0 -0
  189. package/src/services/user/sessions.js +0 -0
  190. package/src/services/user/types.d.ts +0 -0
  191. package/src/services/user/types.js +0 -0
  192. package/src/services/user/user-management-system.js +0 -0
  193. package/src/services/userActivity.js +3 -14
  194. package/test/HttpClient.test.js +0 -0
  195. package/test/content.test.js +0 -0
  196. package/test/contentLikes.test.js +0 -0
  197. package/test/contentProgress.test.js +0 -0
  198. package/test/dataContext.test.js +0 -0
  199. package/test/forum.test.js +0 -0
  200. package/test/imageSRCBuilder.test.js +0 -0
  201. package/test/imageSRCVerify.test.js +0 -0
  202. package/test/initializeTests.js +0 -0
  203. package/test/learningPaths.test.js +0 -0
  204. package/test/lib/lastUpdated.test.js +0 -0
  205. package/test/live/contentProgressLive.test.js +0 -0
  206. package/test/live/railcontentLive.test.js +0 -0
  207. package/test/localStorageMock.js +0 -0
  208. package/test/log.js +0 -0
  209. package/test/mockData/mockData_fetchByRailContentIds_one_content.json +0 -0
  210. package/test/mockData/mockData_progress_content.json +0 -0
  211. package/test/mockData/mockData_sanity_progress_content.json +0 -0
  212. package/test/mockData/mockData_user_practices.json +0 -0
  213. package/test/notifications.test.js +0 -0
  214. package/test/progressRows.test.js +0 -0
  215. package/test/sanityQueryService.test.js +0 -0
  216. package/test/streakMessage.test.js +0 -0
  217. package/test/user/permissions.test.js +0 -0
  218. package/test/userActivity.test.js +0 -0
  219. package/tools/generate-index.cjs +0 -0
@@ -52,9 +52,9 @@ export async function updateThread(
52
52
  /**
53
53
  * Follow a thread.
54
54
  *
55
- * @param {number} threadId - The ID of the thread to lock.
55
+ * @param {number} threadId - The ID of the thread to follow.
56
56
  * @param {string} brand - The brand associated with the follow action.
57
- * @return {Promise<void>} - A promise that resolves when the thread is locked.
57
+ * @return {Promise<void>} - A promise that resolves when the thread is followed.
58
58
  * @throws {HttpError} - If the request fails.
59
59
  */
60
60
  export async function followThread(threadId: number, brand: string): Promise<void> {
@@ -63,11 +63,11 @@ export async function followThread(threadId: number, brand: string): Promise<voi
63
63
  }
64
64
 
65
65
  /**
66
- * Unlock a thread to allow further posts.
66
+ * Unfollow a thread to allow further posts.
67
67
  *
68
- * @param {number} threadId - The ID of the thread to unlock.
69
- * @param {string} brand - The brand associated with the unlock action.
70
- * @return {Promise<void>} - A promise that resolves when the thread is unlocked.
68
+ * @param {number} threadId - The ID of the thread to unfollow.
69
+ * @param {string} brand - The brand associated with the unfollow action.
70
+ * @return {Promise<void>} - A promise that resolves when the thread is unfollowed.
71
71
  * @throws {HttpError} - If the request fails.
72
72
  */
73
73
  export async function unfollowThread(threadId: number, brand: string): Promise<void> {
@@ -154,7 +154,7 @@ export async function unpinThread(threadId: number, brand: string): Promise<void
154
154
  */
155
155
  export async function lockThread(threadId: number, brand: string): Promise<void> {
156
156
  const httpClient = new HttpClient(globalConfig.baseUrl)
157
- return httpClient.post<void>(`${baseUrl}/v1/threads/${threadId}/unlock`, { brand })
157
+ return httpClient.post<void>(`${baseUrl}/v1/threads/${threadId}/lock`, { brand })
158
158
  }
159
159
 
160
160
  /**
@@ -3,6 +3,7 @@ export interface ForumUser {
3
3
  display_name: string
4
4
  profile_picture_url: string | null
5
5
  access_level: string
6
+ signature: string | null
6
7
  }
7
8
 
8
9
  export interface ForumPost {
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
@@ -381,31 +381,43 @@ export async function fetchUserBadges(brand = null) {
381
381
  /**
382
382
  * complete a content's progress for a given user
383
383
  * @param contentId
384
+ * @param collection {object|null} - the collection context of the progress. null is normal content progress
385
+ * @param collection.type - the type of collection. options: ["learning-path"]
386
+ * @param collection.id - the content_id of collection.
384
387
  * @returns {Promise<any|string|null>}
385
388
  */
386
- export async function postContentComplete(contentId) {
389
+ export async function postContentComplete(contentId, collection = null) {
387
390
  let url = `/api/content/v1/user/progress/complete/${contentId}`
388
- return postDataHandler(url)
391
+ const body = {collection: collection}
392
+ return postDataHandler(url, body)
389
393
  }
390
394
 
391
395
  /**
392
396
  * start the user's progress on a content
393
397
  * @param contentId
398
+ * @param collection {object|null} - the collection context of the progress. null is normal content progress
399
+ * @param collection.type - the type of collection. options: ["learning-path"]
400
+ * @param collection.id - the content_id of collection.
394
401
  * @returns {Promise<any|string|null>}
395
402
  */
396
- export async function postContentStart(contentId) {
403
+ export async function postContentStart(contentId, collection = null) {
397
404
  let url = `/api/content/v1/user/progress/start/${contentId}`
398
- return postDataHandler(url)
405
+ const body = {collection: collection}
406
+ return postDataHandler(url, body)
399
407
  }
400
408
 
401
409
  /**
402
410
  * resets the user's progress on a content
403
411
  * @param contentId
412
+ * @param collection {object|null} - the collection context of the progress. null is normal content progress
413
+ * @param collection.type - the type of collection. options: ["learning-path"]
414
+ * @param collection.id - the content_id of collection.
404
415
  * @returns {Promise<any|string|null>}
405
416
  */
406
- export async function postContentReset(contentId) {
417
+ export async function postContentReset(contentId, collection = null) {
407
418
  let url = `/api/content/v1/user/progress/reset/${contentId}`
408
- return postDataHandler(url)
419
+ const body = {collection: collection}
420
+ return postDataHandler(url, body)
409
421
  }
410
422
 
411
423
  /**
File without changes
@@ -478,7 +478,6 @@ export async function fetchByRailContentIds(
478
478
  live_event_end_time,
479
479
  }`
480
480
 
481
- console.log('ids query', query)
482
481
  const customPostProcess = (results) => {
483
482
  const now = getSanityDate(new Date(), false)
484
483
  const liveProcess = (result) => {
@@ -2165,7 +2164,7 @@ export async function fetchMethodV2Structure(brand) {
2165
2164
  const _type = 'method-v2'
2166
2165
  const query = `*[_type == '${_type}' && brand == '${brand}'][0...1]{
2167
2166
  'sanity_id': _id,
2168
- 'learningPaths': child[]->{
2167
+ 'learning_paths': child[]->{
2169
2168
  'id': railcontent_id,
2170
2169
  'children': child[]->railcontent_id
2171
2170
  }
@@ -2173,6 +2172,23 @@ export async function fetchMethodV2Structure(brand) {
2173
2172
  return await fetchSanity(query, false)
2174
2173
  }
2175
2174
 
2175
+ /**
2176
+ * Fetch the structure (just ids) of the Method of a given learning path or learning path lesson.
2177
+ * @param contentId
2178
+ * @returns {Promise<*|null>}
2179
+ */
2180
+ export async function fetchMethodV2StructureFromId(contentId) {
2181
+ const _type = "method-v2";
2182
+ const query = `*[_type == '${_type}' && brand == *[railcontent_id == ${contentId}][0].brand][0...1]{
2183
+ 'sanity_id': _id,
2184
+ 'learning_paths': child[]->{
2185
+ 'id': railcontent_id,
2186
+ 'children': child[]->railcontent_id
2187
+ }
2188
+ }`
2189
+ return await fetchSanity(query, false);
2190
+ }
2191
+
2176
2192
  /**
2177
2193
  * Fetch content owned by the user (excluding membership content).
2178
2194
  * Shows only content accessible through purchases/entitlements, not through membership.
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
@@ -986,7 +986,7 @@ async function extractPinnedItemsAndSortAllItems(
986
986
  return mergeAndSortItems(combined, limit)
987
987
  }
988
988
 
989
- function generateContentsMap(contents, playlistsContents, methodProgressContents) {
989
+ function generateContentsMap(contents, playlistsContents) {
990
990
  const excludedTypes = new Set(['pack-bundle', 'guided-course-part'])
991
991
  const existingShows = new Set()
992
992
  const contentsMap = new Map()
@@ -1027,15 +1027,6 @@ function generateContentsMap(contents, playlistsContents, methodProgressContents
1027
1027
  parentIds.forEach((id) => contentsMap.delete(id))
1028
1028
  }
1029
1029
  }
1030
- //TODO:: remove method cards from progress rows
1031
- // if (methodProgressContents && Object.keys(methodProgressContents).length) {
1032
- // for (const item of methodProgressContents) {
1033
- // const contentId = item.id
1034
- // contentsMap.delete(contentId)
1035
- // const parentIds = item.parent_content_data || []
1036
- // parentIds.forEach((id) => contentsMap.delete(id))
1037
- // }
1038
- // }
1039
1030
 
1040
1031
  return contentsMap
1041
1032
  }
@@ -1075,23 +1066,21 @@ export async function getProgressRows({ brand = 'drumeo', limit = 8 } = {}) {
1075
1066
  }
1076
1067
  //need to update addContextToContent to accept collection info
1077
1068
  const [playlistsContents, contents] = await Promise.all([
1078
- playlistEngagedOnContents
1069
+ (playlistEngagedOnContents.length > 0)
1079
1070
  ? addContextToContent(fetchByRailContentIds, playlistEngagedOnContents, 'progress-tracker', {
1080
- addNextLesson: true,
1081
1071
  addNavigateTo: true,
1082
1072
  addProgressStatus: true,
1083
1073
  addProgressPercentage: true,
1084
1074
  addProgressTimestamp: true,
1085
1075
  })
1086
1076
  : Promise.resolve([]),
1087
- nonPlaylistContentIds
1077
+ (nonPlaylistContentIds.length > 0)
1088
1078
  ? addContextToContent(
1089
1079
  fetchByRailContentIds,
1090
1080
  nonPlaylistContentIds,
1091
1081
  'progress-tracker',
1092
1082
  brand,
1093
1083
  {
1094
- addNextLesson: true,
1095
1084
  addNavigateTo: true,
1096
1085
  addProgressStatus: true,
1097
1086
  addProgressPercentage: true,
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