musora-content-services 2.12.0 → 2.14.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 (165) 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 +61 -0
  6. package/.github/workflows/node.js.yml +0 -0
  7. package/.prettierignore +0 -0
  8. package/.prettierrc +0 -0
  9. package/CHANGELOG.md +14 -0
  10. package/README.md +0 -0
  11. package/babel.config.cjs +0 -0
  12. package/docs/Content-Organization.html +0 -0
  13. package/docs/ContentOrganization.html +0 -0
  14. package/docs/Gamification.html +0 -0
  15. package/docs/UserManagement.html +0 -0
  16. package/docs/UserManagementSystem.html +0 -0
  17. package/docs/api_types.js.html +0 -0
  18. package/docs/config.js.html +0 -0
  19. package/docs/content-org_content-org.js.html +0 -0
  20. package/docs/content-org_playlists-types.js.html +0 -0
  21. package/docs/content-org_playlists.js.html +0 -0
  22. package/docs/content.js.html +0 -0
  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_gamification.js.html +0 -0
  43. package/docs/gamification_types.js.html +0 -0
  44. package/docs/global.html +0 -0
  45. package/docs/global.html#User +0 -0
  46. package/docs/index.html +0 -0
  47. package/docs/module-Awards.html +0 -0
  48. package/docs/module-Config.html +0 -0
  49. package/docs/module-Content-Services-V2.html +0 -0
  50. package/docs/module-Interests.html +0 -0
  51. package/docs/module-Notifications.html +0 -0
  52. package/docs/module-Permissions.html +0 -0
  53. package/docs/module-Playlists.html +0 -0
  54. package/docs/module-Railcontent-Services.html +0 -0
  55. package/docs/module-Sanity-Services.html +0 -0
  56. package/docs/module-Session-Management.html +0 -0
  57. package/docs/module-Sessions.html +0 -0
  58. package/docs/module-User-Activity.html +0 -0
  59. package/docs/module-User-Management.html +0 -0
  60. package/docs/module-User-Permissions.html +0 -0
  61. package/docs/module-UserActivity.html +0 -0
  62. package/docs/module-UserManagement.html +0 -0
  63. package/docs/module-UserNotifications.html +0 -0
  64. package/docs/module-UserProfile.html +0 -0
  65. package/docs/railcontent.js.html +0 -0
  66. package/docs/sanity.js.html +0 -0
  67. package/docs/scripts/collapse.js +0 -0
  68. package/docs/scripts/commonNav.js +0 -0
  69. package/docs/scripts/linenumber.js +0 -0
  70. package/docs/scripts/nav.js +0 -0
  71. package/docs/scripts/polyfill.js +0 -0
  72. package/docs/scripts/prettify/Apache-License-2.0.txt +0 -0
  73. package/docs/scripts/prettify/lang-css.js +0 -0
  74. package/docs/scripts/prettify/prettify.js +0 -0
  75. package/docs/scripts/search.js +0 -0
  76. package/docs/styles/jsdoc.css +0 -0
  77. package/docs/styles/prettify.css +0 -0
  78. package/docs/types.js.html +0 -0
  79. package/docs/userActivity.js.html +0 -0
  80. package/docs/user_interests.js.html +0 -0
  81. package/docs/user_management.js.html +0 -0
  82. package/docs/user_notifications.js.html +0 -0
  83. package/docs/user_permissions.js.html +0 -0
  84. package/docs/user_profile.js.html +0 -0
  85. package/docs/user_sessions.js.html +0 -0
  86. package/docs/user_types.js.html +0 -0
  87. package/docs/user_user-management-system.js.html +0 -0
  88. package/docs/user_user-management.js.html +0 -0
  89. package/jest.config.js +0 -0
  90. package/jsdoc.json +0 -0
  91. package/link_mcs.sh +0 -0
  92. package/package.json +1 -1
  93. package/src/contentMetaData.js +0 -0
  94. package/src/contentTypeConfig.js +4 -4
  95. package/src/filterBuilder.js +0 -0
  96. package/src/index.d.ts +9 -0
  97. package/src/index.js +9 -0
  98. package/src/infrastructure/http/HttpClient.ts +0 -0
  99. package/src/infrastructure/http/executors/FetchRequestExecutor.ts +0 -0
  100. package/src/infrastructure/http/index.ts +0 -0
  101. package/src/infrastructure/http/interfaces/HeaderProvider.ts +0 -0
  102. package/src/infrastructure/http/interfaces/HttpError.ts +0 -0
  103. package/src/infrastructure/http/interfaces/NetworkError.ts +0 -0
  104. package/src/infrastructure/http/interfaces/RequestExecutor.ts +0 -0
  105. package/src/infrastructure/http/interfaces/RequestOptions.ts +0 -0
  106. package/src/infrastructure/http/providers/DefaultHeaderProvider.ts +0 -0
  107. package/src/lib/httpHelper.js +0 -0
  108. package/src/lib/lastUpdated.js +0 -0
  109. package/src/services/api/types.js +0 -0
  110. package/src/services/config.js +0 -0
  111. package/src/services/content-org/content-org.js +0 -0
  112. package/src/services/content-org/guided-courses.ts +26 -0
  113. package/src/services/content-org/playlists-types.js +0 -0
  114. package/src/services/content-org/playlists.js +0 -0
  115. package/src/services/content.js +0 -0
  116. package/src/services/contentAggregator.js +0 -0
  117. package/src/services/contentLikes.js +0 -0
  118. package/src/services/contentProgress.js +2 -2
  119. package/src/services/dataContext.js +0 -0
  120. package/src/services/dateUtils.js +0 -0
  121. package/src/services/forum.js +0 -0
  122. package/src/services/gamification/awards.js +0 -0
  123. package/src/services/gamification/gamification.js +0 -0
  124. package/src/services/gamification/types.js +0 -0
  125. package/src/services/imageSRCBuilder.js +0 -0
  126. package/src/services/imageSRCVerify.js +0 -0
  127. package/src/services/railcontent.js +0 -0
  128. package/src/services/recommendations.js +0 -0
  129. package/src/services/sanity.js +3 -2
  130. package/src/services/types.js +0 -0
  131. package/src/services/user/chat.js +0 -0
  132. package/src/services/user/interests.js +0 -0
  133. package/src/services/user/management.js +0 -0
  134. package/src/services/user/notifications.js +0 -0
  135. package/src/services/user/permissions.js +0 -0
  136. package/src/services/user/profile.js +0 -0
  137. package/src/services/user/sessions.js +0 -0
  138. package/src/services/user/types.js +0 -0
  139. package/src/services/user/user-management-system.js +0 -0
  140. package/src/services/userActivity.js +0 -0
  141. package/test/HttpClient.test.js +0 -0
  142. package/test/content.test.js +0 -0
  143. package/test/contentLikes.test.js +0 -0
  144. package/test/contentProgress.test.js +0 -0
  145. package/test/dataContext.test.js +0 -0
  146. package/test/forum.test.js +0 -0
  147. package/test/imageSRCBuilder.test.js +0 -0
  148. package/test/imageSRCVerify.test.js +0 -0
  149. package/test/initializeTests.js +0 -0
  150. package/test/lib/lastUpdated.test.js +0 -0
  151. package/test/live/contentProgressLive.test.js +0 -0
  152. package/test/live/railcontentLive.test.js +0 -0
  153. package/test/localStorageMock.js +0 -0
  154. package/test/log.js +0 -0
  155. package/test/mockData/mockData_fetchByRailContentIds_one_content.json +0 -0
  156. package/test/mockData/mockData_progress_content.json +0 -0
  157. package/test/mockData/mockData_sanity_progress_content.json +0 -0
  158. package/test/mockData/mockData_user_practices.json +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 +0 -0
  165. package/.yarnrc.yml +0 -1
package/.coderabbit.yaml CHANGED
File without changes
package/.editorconfig CHANGED
File without changes
File without changes
File without changes
@@ -0,0 +1,61 @@
1
+ name: Sync V2 Docs to Main
2
+ on:
3
+ push:
4
+ branches: [project-v2]
5
+
6
+ jobs:
7
+ sync-docs:
8
+ runs-on: ubuntu-latest
9
+ steps:
10
+ - name: Checkout project-v2 branch
11
+ uses: actions/checkout@v4
12
+ with:
13
+ ref: project-v2
14
+ path: project-v2-content
15
+
16
+ - name: Checkout main branch
17
+ uses: actions/checkout@v4
18
+ with:
19
+ ref: main
20
+ path: main-content
21
+ token: ${{ secrets.PROJECT_V2_DOCS_TOKEN }} #use separate token to trigger other actions
22
+
23
+ - name: Copy docs from project-v2 to main
24
+ run: |
25
+ # Create the target directory if it doesn't exist
26
+ mkdir -p main-content/docs/v2
27
+
28
+ # Remove existing v2 docs to ensure clean copy
29
+ rm -rf main-content/docs/v2/*
30
+
31
+ # Copy docs from project-v2 to main/docs/v2
32
+ if [ -d "project-v2-content/docs" ]; then
33
+ cp -r project-v2-content/docs/* main-content/docs/v2/
34
+ echo "✅ Copied docs from project-v2 to main/docs/v2"
35
+ else
36
+ echo "⚠️ No docs folder found in project-v2 branch"
37
+ exit 1
38
+ fi
39
+
40
+ - name: Commit and push changes to main
41
+ id: commit
42
+ run: |
43
+ cd main-content
44
+ git config --local user.email "action@github.com"
45
+ git config --local user.name "GitHub Action"
46
+
47
+ # Check if there are any changes
48
+ if [ -n "$(git status --porcelain)" ]; then
49
+ git add docs/v2/
50
+ git commit -m "🔄 Auto-sync: Update v2 docs from project-v2 branch
51
+
52
+ - Synced from project-v2/docs
53
+ - Triggered by commit: ${{ github.sha }}
54
+ - Date: $(date)"
55
+ git push
56
+ echo "✅ Successfully pushed updated docs to main branch"
57
+ echo "changes=true" >> $GITHUB_OUTPUT
58
+ else
59
+ echo "ℹ️ No changes detected in docs"
60
+ echo "changes=false" >> $GITHUB_OUTPUT
61
+ fi
File without changes
package/.prettierignore CHANGED
File without changes
package/.prettierrc CHANGED
File without changes
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.14.0](https://github.com/railroadmedia/musora-content-services/compare/v2.13.0...v2.14.0) (2025-06-26)
6
+
7
+
8
+ ### Features
9
+
10
+ * **BEH-541:** guided course enrollment page endpoint ([#311](https://github.com/railroadmedia/musora-content-services/issues/311)) ([0e7aace](https://github.com/railroadmedia/musora-content-services/commit/0e7aacec67ea769f15d826ed9542d4af1bae228d))
11
+
12
+ ## [2.13.0](https://github.com/railroadmedia/musora-content-services/compare/v2.12.0...v2.13.0) (2025-06-26)
13
+
14
+
15
+ ### Features
16
+
17
+ * add logo data to parent in fetchLessonContent ([5c924b6](https://github.com/railroadmedia/musora-content-services/commit/5c924b6ad770d9befc0d5a972d0333840e8c5c83))
18
+
5
19
  ## [2.12.0](https://github.com/railroadmedia/musora-content-services/compare/v2.11.0...v2.12.0) (2025-06-25)
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
File without changes
File without changes
package/docs/global.html CHANGED
File without changes
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
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/link_mcs.sh CHANGED
File without changes
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "musora-content-services",
3
- "version": "2.12.0",
3
+ "version": "2.14.0",
4
4
  "description": "A package for Musoras content services ",
5
5
  "main": "src/index.js",
6
6
  "type": "module",
File without changes
@@ -426,8 +426,8 @@ export let contentTypeConfig = {
426
426
  }`,
427
427
  `"resources": ${resourcesField}`,
428
428
  '"thumbnail": thumbnail.asset->url',
429
- '"light_logo": light_mode_logo_url.asset->url',
430
- '"dark_logo": dark_mode_logo_url.asset->url',
429
+ '"light_mode_logo": light_mode_logo_url.asset->url',
430
+ '"dark_mode_logo": dark_mode_logo_url.asset->url',
431
431
  `"description": ${descriptionField}`,
432
432
  ],
433
433
  },
@@ -449,8 +449,8 @@ export let contentTypeConfig = {
449
449
  `"resources": ${resourcesField}`,
450
450
  '"image": logo_image_url.asset->url',
451
451
  '"thumbnail": thumbnail.asset->url',
452
- '"light_logo": light_mode_logo_url.asset->url',
453
- '"dark_logo": dark_mode_logo_url.asset->url',
452
+ '"light_mode_logo": light_mode_logo_url.asset->url',
453
+ '"dark_mode_logo": dark_mode_logo_url.asset->url',
454
454
  `"description": ${descriptionField}`,
455
455
  'total_xp',
456
456
  ],
File without changes
package/src/index.d.ts CHANGED
@@ -5,6 +5,12 @@ import {
5
5
  initializeService
6
6
  } from './services/config.js';
7
7
 
8
+ import {
9
+ enrollUserInGuidedCourse,
10
+ fetchEnrollmentPageMetadata,
11
+ unEnrollUserInGuidedCourse
12
+ } from './services/content-org/guided-courses.js';
13
+
8
14
  import {
9
15
  addItemToPlaylist,
10
16
  createPlaylist,
@@ -309,6 +315,7 @@ declare module 'musora-content-services' {
309
315
  deleteUserActivity,
310
316
  duplicatePlaylist,
311
317
  editComment,
318
+ enrollUserInGuidedCourse,
312
319
  extractSanityUrl,
313
320
  fetchAll,
314
321
  fetchAllCompletedStates,
@@ -338,6 +345,7 @@ declare module 'musora-content-services' {
338
345
  fetchContentInProgress,
339
346
  fetchContentPageUserData,
340
347
  fetchContentProgress,
348
+ fetchEnrollmentPageMetadata,
341
349
  fetchFoundation,
342
350
  fetchGenreLessons,
343
351
  fetchHandler,
@@ -481,6 +489,7 @@ declare module 'musora-content-services' {
481
489
  restoreUserPractice,
482
490
  setStudentViewForUser,
483
491
  togglePlaylistPrivate,
492
+ unEnrollUserInGuidedCourse,
484
493
  unassignModeratorToComment,
485
494
  unblockUser,
486
495
  undeletePlaylist,
package/src/index.js CHANGED
@@ -5,6 +5,12 @@ import {
5
5
  initializeService
6
6
  } from './services/config.js';
7
7
 
8
+ import {
9
+ enrollUserInGuidedCourse,
10
+ fetchEnrollmentPageMetadata,
11
+ unEnrollUserInGuidedCourse
12
+ } from './services/content-org/guided-courses.js';
13
+
8
14
  import {
9
15
  addItemToPlaylist,
10
16
  createPlaylist,
@@ -308,6 +314,7 @@ export {
308
314
  deleteUserActivity,
309
315
  duplicatePlaylist,
310
316
  editComment,
317
+ enrollUserInGuidedCourse,
311
318
  extractSanityUrl,
312
319
  fetchAll,
313
320
  fetchAllCompletedStates,
@@ -337,6 +344,7 @@ export {
337
344
  fetchContentInProgress,
338
345
  fetchContentPageUserData,
339
346
  fetchContentProgress,
347
+ fetchEnrollmentPageMetadata,
340
348
  fetchFoundation,
341
349
  fetchGenreLessons,
342
350
  fetchHandler,
@@ -480,6 +488,7 @@ export {
480
488
  restoreUserPractice,
481
489
  setStudentViewForUser,
482
490
  togglePlaylistPrivate,
491
+ unEnrollUserInGuidedCourse,
483
492
  unassignModeratorToComment,
484
493
  unblockUser,
485
494
  undeletePlaylist,
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,26 @@
1
+ /**
2
+ * @module GuidedCourses
3
+ */
4
+ import { globalConfig } from '../config.js'
5
+ import { fetchHandler } from '../railcontent.js'
6
+ import './playlists-types.js'
7
+
8
+
9
+ const excludeFromGeneratedIndex: string[] = []
10
+
11
+ const BASE_PATH: string = `/api/content-org`
12
+
13
+ export async function enrollUserInGuidedCourse(guidedCourse) {
14
+ const url: string = `${BASE_PATH}/v1/user/guided-courses/enroll-user/${guidedCourse}`
15
+ return await fetchHandler(url, 'POST')
16
+ }
17
+
18
+ export async function unEnrollUserInGuidedCourse(guidedCourse) {
19
+ const url: string = `${BASE_PATH}/v1/user/guided-courses/un-enroll-user/${guidedCourse}`
20
+ return await fetchHandler(url, 'POST')
21
+ }
22
+
23
+ export async function fetchEnrollmentPageMetadata(guidedCourse) {
24
+ const url: string = `${BASE_PATH}/v1/user/guided-courses/enrollment/${guidedCourse}`
25
+ return await fetchHandler(url, 'GET')
26
+ }
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -198,7 +198,7 @@ export async function assignmentStatusCompleted(assignmentId, parentContentId) {
198
198
  }
199
199
 
200
200
  export async function contentStatusCompleted(contentId) {
201
- await dataContext.update(
201
+ return await dataContext.update(
202
202
  async function (localContext) {
203
203
  let hierarchy = await fetchHierarchy(contentId)
204
204
  completeStatusInLocalContext(localContext, contentId, hierarchy)
@@ -361,7 +361,7 @@ function getMediaTypeId(mediaType, mediaCategory) {
361
361
  case 'practice_play-alongs':
362
362
  return 4
363
363
  case 'video_soundslice':
364
- return 6
364
+ return 6
365
365
  default:
366
366
  return 5
367
367
  }
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
@@ -1269,7 +1269,6 @@ export async function fetchLessonContent(railContentId) {
1269
1269
  "id":railcontent_id,
1270
1270
  slug, artist->,
1271
1271
  "thumbnail":thumbnail.asset->url,
1272
- "url": web_url_path,
1273
1272
  soundslice_slug,
1274
1273
  "description": description[0].children[0].text,
1275
1274
  "chapters": chapter[]{
@@ -1299,9 +1298,11 @@ export async function fetchLessonContent(railContentId) {
1299
1298
  "parent_content_data": parent_content_data[]{
1300
1299
  "id": id,
1301
1300
  "title": *[railcontent_id == ^.id][0].title,
1302
- "web_url_path": *[railcontent_id == ^.id][0].web_url_path,
1303
1301
  "slug":*[railcontent_id == ^.id][0].slug,
1304
1302
  "type": *[railcontent_id == ^.id][0]._type,
1303
+ "logo" : *[railcontent_id == ^.id][0].logo_image_url.asset->url,
1304
+ "dark_mode_logo": *[railcontent_id == ^.id][0].dark_mode_logo_url.asset->url,
1305
+ "light_mode_logo": *[railcontent_id == ^.id][0].light_mode_logo_url.asset->url,
1305
1306
  },
1306
1307
  sort,
1307
1308
  xp,
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/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
package/.yarnrc.yml DELETED
@@ -1 +0,0 @@
1
- nodeLinker: node-modules