musora-content-services 2.42.0 → 2.43.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 (128) hide show
  1. package/.claude/settings.local.json +8 -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/CHANGELOG.md +7 -0
  11. package/README.md +0 -0
  12. package/babel.config.cjs +0 -0
  13. package/docs/fonts/Montserrat/Montserrat-Bold.eot +0 -0
  14. package/docs/fonts/Montserrat/Montserrat-Bold.ttf +0 -0
  15. package/docs/fonts/Montserrat/Montserrat-Bold.woff +0 -0
  16. package/docs/fonts/Montserrat/Montserrat-Bold.woff2 +0 -0
  17. package/docs/fonts/Montserrat/Montserrat-Regular.eot +0 -0
  18. package/docs/fonts/Montserrat/Montserrat-Regular.ttf +0 -0
  19. package/docs/fonts/Montserrat/Montserrat-Regular.woff +0 -0
  20. package/docs/fonts/Montserrat/Montserrat-Regular.woff2 +0 -0
  21. package/docs/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.eot +0 -0
  22. package/docs/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.svg +0 -0
  23. package/docs/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.ttf +0 -0
  24. package/docs/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.woff +0 -0
  25. package/docs/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.woff2 +0 -0
  26. package/docs/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.eot +0 -0
  27. package/docs/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.svg +0 -0
  28. package/docs/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.ttf +0 -0
  29. package/docs/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.woff +0 -0
  30. package/docs/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.woff2 +0 -0
  31. package/docs/forums_discussions.js.html +0 -0
  32. package/docs/forums_forum.js.html +0 -0
  33. package/docs/gamification_awards.js.html +0 -0
  34. package/docs/gamification_types.js.html +0 -0
  35. package/docs/module-ForumCategories.html +0 -0
  36. package/docs/module-ForumDiscussions.html +0 -0
  37. package/docs/scripts/collapse.js +0 -0
  38. package/docs/scripts/commonNav.js +0 -0
  39. package/docs/scripts/linenumber.js +0 -0
  40. package/docs/scripts/nav.js +0 -0
  41. package/docs/scripts/polyfill.js +0 -0
  42. package/docs/scripts/prettify/Apache-License-2.0.txt +0 -0
  43. package/docs/scripts/prettify/lang-css.js +0 -0
  44. package/docs/scripts/prettify/prettify.js +0 -0
  45. package/docs/scripts/search.js +0 -0
  46. package/docs/styles/jsdoc.css +0 -0
  47. package/docs/styles/prettify.css +0 -0
  48. package/jest.config.js +0 -0
  49. package/jsdoc.json +0 -0
  50. package/package.json +1 -1
  51. package/src/contentMetaData.js +0 -0
  52. package/src/contentTypeConfig.js +51 -42
  53. package/src/filterBuilder.js +0 -0
  54. package/src/index.d.ts +0 -2
  55. package/src/index.js +0 -2
  56. package/src/infrastructure/http/HttpClient.ts +0 -0
  57. package/src/infrastructure/http/executors/FetchRequestExecutor.ts +0 -0
  58. package/src/infrastructure/http/index.ts +0 -0
  59. package/src/infrastructure/http/interfaces/HeaderProvider.ts +0 -0
  60. package/src/infrastructure/http/interfaces/HttpError.ts +0 -0
  61. package/src/infrastructure/http/interfaces/NetworkError.ts +0 -0
  62. package/src/infrastructure/http/interfaces/RequestExecutor.ts +0 -0
  63. package/src/infrastructure/http/interfaces/RequestOptions.ts +0 -0
  64. package/src/infrastructure/http/providers/DefaultHeaderProvider.ts +0 -0
  65. package/src/lib/httpHelper.js +0 -0
  66. package/src/lib/lastUpdated.js +0 -0
  67. package/src/services/api/types.js +0 -0
  68. package/src/services/api/types.ts +0 -0
  69. package/src/services/config.js +0 -0
  70. package/src/services/content-org/content-org.js +0 -0
  71. package/src/services/content-org/guided-courses.ts +0 -0
  72. package/src/services/content-org/playlists-types.js +0 -0
  73. package/src/services/content-org/playlists.js +0 -0
  74. package/src/services/content.js +0 -0
  75. package/src/services/contentAggregator.js +0 -0
  76. package/src/services/contentLikes.js +0 -0
  77. package/src/services/contentProgress.js +0 -0
  78. package/src/services/dataContext.js +0 -0
  79. package/src/services/dateUtils.js +0 -0
  80. package/src/services/eventsAPI.js +0 -0
  81. package/src/services/forum.js +0 -0
  82. package/src/services/forums/forums.ts +0 -0
  83. package/src/services/gamification/gamification.js +0 -0
  84. package/src/services/imageSRCBuilder.js +0 -0
  85. package/src/services/imageSRCVerify.js +0 -0
  86. package/src/services/railcontent.js +0 -0
  87. package/src/services/recommendations.js +0 -0
  88. package/src/services/sanity.js +1 -23
  89. package/src/services/types.js +0 -0
  90. package/src/services/user/account.ts +0 -0
  91. package/src/services/user/chat.js +0 -0
  92. package/src/services/user/interests.js +0 -0
  93. package/src/services/user/management.js +0 -0
  94. package/src/services/user/memberships.js +0 -0
  95. package/src/services/user/notifications.js +0 -0
  96. package/src/services/user/payments.ts +0 -0
  97. package/src/services/user/permissions.js +0 -0
  98. package/src/services/user/profile.js +0 -0
  99. package/src/services/user/sessions.js +0 -0
  100. package/src/services/user/types.js +0 -0
  101. package/src/services/user/user-management-system.js +0 -0
  102. package/src/services/userActivity.js +0 -0
  103. package/test/HttpClient.test.js +0 -0
  104. package/test/content.test.js +0 -0
  105. package/test/contentLikes.test.js +0 -0
  106. package/test/contentProgress.test.js +0 -0
  107. package/test/dataContext.test.js +0 -0
  108. package/test/forum.test.js +0 -0
  109. package/test/imageSRCBuilder.test.js +0 -0
  110. package/test/imageSRCVerify.test.js +0 -0
  111. package/test/initializeTests.js +0 -0
  112. package/test/lib/lastUpdated.test.js +0 -0
  113. package/test/live/contentProgressLive.test.js +0 -0
  114. package/test/live/railcontentLive.test.js +0 -0
  115. package/test/localStorageMock.js +0 -0
  116. package/test/log.js +0 -0
  117. package/test/mockData/mockData_fetchByRailContentIds_one_content.json +0 -0
  118. package/test/mockData/mockData_progress_content.json +0 -0
  119. package/test/mockData/mockData_sanity_progress_content.json +0 -0
  120. package/test/mockData/mockData_user_practices.json +0 -0
  121. package/test/notifications.test.js +0 -0
  122. package/test/progressRows.test.js +0 -0
  123. package/test/sanityQueryService.test.js +0 -0
  124. package/test/streakMessage.test.js +0 -0
  125. package/test/user/permissions.test.js +0 -0
  126. package/test/userActivity.test.js +0 -0
  127. package/tools/generate-index.cjs +0 -0
  128. package/.yarnrc.yml +0 -1
@@ -0,0 +1,8 @@
1
+ {
2
+ "permissions": {
3
+ "allow": [
4
+ "Bash(rg:*)"
5
+ ],
6
+ "deny": []
7
+ }
8
+ }
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/CHANGELOG.md CHANGED
@@ -2,6 +2,13 @@
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.43.0](https://github.com/railroadmedia/musora-content-services/compare/v2.42.0...v2.43.0) (2025-09-23)
6
+
7
+
8
+ ### Features
9
+
10
+ * **BEH-910:** fetch metadata for download functionality ([#463](https://github.com/railroadmedia/musora-content-services/issues/463)) ([8406795](https://github.com/railroadmedia/musora-content-services/commit/84067954f1aed3f7e65c42f8621d6c5d81970037))
11
+
5
12
  ## [2.42.0](https://github.com/railroadmedia/musora-content-services/compare/v2.40.0...v2.42.0) (2025-09-22)
6
13
 
7
14
 
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
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.42.0",
3
+ "version": "2.43.0",
4
4
  "description": "A package for Musoras content services ",
5
5
  "main": "src/index.js",
6
6
  "type": "module",
File without changes
@@ -17,7 +17,6 @@ export const artistField = `select(
17
17
  export const DEFAULT_FIELDS = [
18
18
  "'sanity_id' : _id",
19
19
  "'id': railcontent_id",
20
- 'railcontent_id',
21
20
  artistOrInstructorName(),
22
21
  `'artist': ${artistField}`,
23
22
  'title',
@@ -25,8 +24,6 @@ export const DEFAULT_FIELDS = [
25
24
  "'thumbnail': thumbnail.asset->url",
26
25
  'difficulty',
27
26
  'difficulty_string',
28
- 'web_url_path',
29
- "'url': web_url_path",
30
27
  'published_on',
31
28
  "'type': _type",
32
29
  "'length_in_seconds' : coalesce(length_in_seconds, soundslice[0].soundslice_length_in_second)",
@@ -35,17 +32,16 @@ export const DEFAULT_FIELDS = [
35
32
  'status',
36
33
  "'slug' : slug.current",
37
34
  "'permission_id': permission[]->railcontent_id",
38
- 'xp',
39
35
  'child_count',
40
- '"lesson_count": coalesce(count(child[]->.child[]->), child_count)',
41
36
  '"parent_id": parent_content_data[0].id',
42
37
  ]
43
38
 
39
+ // these are identical... why
44
40
  export const DEFAULT_CHILD_FIELDS = [
41
+ "'sanity_id' : _id",
45
42
  "'id': railcontent_id",
46
- 'railcontent_id',
47
43
  artistOrInstructorName(),
48
- "'artist': artist->{ 'name': name, 'thumbnail': thumbnail_url.asset->url}",
44
+ `'artist': ${artistField}`,
49
45
  'title',
50
46
  "'image': thumbnail.asset->url",
51
47
  "'thumbnail': thumbnail.asset->url",
@@ -63,6 +59,14 @@ export const DEFAULT_CHILD_FIELDS = [
63
59
  '"parent_id": parent_content_data[0].id',
64
60
  ]
65
61
 
62
+ export const playAlongMp3sField = `{
63
+ 'mp3_no_drums_no_click_url': mp3_no_drums_no_click_url,
64
+ 'mp3_no_drums_yes_click_url': mp3_no_drums_yes_click_url,
65
+ 'mp3_yes_drums_no_click_url': mp3_yes_drums_no_click_url,
66
+ 'mp3_yes_drums_yes_click_url': mp3_yes_drums_yes_click_url,
67
+ }
68
+ `
69
+
66
70
  export const instructorField = `instructor[]->{
67
71
  "id": railcontent_id,
68
72
  name,
@@ -319,44 +323,49 @@ export let contentTypeConfig = {
319
323
  ],
320
324
  slug: 'courses',
321
325
  },
322
- 'parent-download': {
326
+ 'download': {
323
327
  fields: [
324
- '"lesson_count": child_count',
325
- '"instructors": instructor[]->name',
326
- `"description": ${descriptionField}`,
327
328
  `"resource": ${resourcesField}`,
328
- 'xp',
329
- 'total_xp',
330
- '"thumbnail_url":thumbnail.asset->url',
331
- `"lessons": child[]->{
332
- "id": railcontent_id,
333
- title,
334
- published_on,
335
- "type":_type,
336
- "image": thumbnail.asset->url,
337
- length_in_seconds,
338
- "resources": ${resourcesField},
339
- difficulty,
340
- difficulty_string,
341
- artist->,
342
- "thumbnail_url":thumbnail.asset->url,
343
- "description": description[0].children[0].text,
344
- "chapters": ${chapterField},
345
- "instructors":instructor[]->name,
346
- "instructor": instructor[]->{
347
- "id":railcontent_id,
348
- name,
349
- short_bio,
350
- "biography": short_bio[0].children[0].text,
351
- web_url_path,
352
- "coach_card_image": coach_card_image.asset->url,
353
- "coach_profile_image":thumbnail_url.asset->url
354
- },
355
- ${assignmentsField}
356
- video,
357
- parent_content_data,
358
- }`,
329
+ 'soundslice',
330
+ 'instrumentless',
331
+ `"description": ${descriptionField}`,
332
+ `"chapters": ${chapterField}`,
333
+ '"instructors":instructor[]->name',
334
+ `"instructor": ${instructorField}`,
335
+ 'video',
336
+ `"play_along_mp3s": ${playAlongMp3sField}`,
337
+ `...select(
338
+ defined(live_event_start_time) => {
339
+ "live_event_start_time": live_event_start_time,
340
+ "live_event_end_time": live_event_end_time,
341
+ "live_event_youtube_id": live_event_youtube_id,
342
+ "videoId": coalesce(live_event_youtube_id, video.external_id),
343
+ "live_event_is_global": live_global_event == true
344
+ }
345
+ )`
346
+
359
347
  ],
348
+ childFields: [
349
+ `"resource": ${resourcesField}`,
350
+ 'soundslice',
351
+ 'instrumentless',
352
+ `"description": ${descriptionField}`,
353
+ `"chapters": ${chapterField}`,
354
+ '"instructors":instructor[]->name',
355
+ `"instructor": ${instructorField}`,
356
+ 'video',
357
+ `"play_along_mp3s": ${playAlongMp3sField}`,
358
+ `...select(
359
+ defined(live_event_start_time) => {
360
+ "live_event_start_time": live_event_start_time,
361
+ "live_event_end_time": live_event_end_time,
362
+ "live_event_youtube_id": live_event_youtube_id,
363
+ "videoId": coalesce(live_event_youtube_id, video.external_id),
364
+ "live_event_is_global": live_global_event == true
365
+ }
366
+ )`
367
+
368
+ ]
360
369
  },
361
370
  method: {
362
371
  fields: [
File without changes
package/src/index.d.ts CHANGED
@@ -211,7 +211,6 @@ import {
211
211
  fetchOtherSongVersions,
212
212
  fetchPackAll,
213
213
  fetchPackData,
214
- fetchParentForDownload,
215
214
  fetchPlayAlongsCount,
216
215
  fetchRelatedLessons,
217
216
  fetchRelatedRecommendedContent,
@@ -427,7 +426,6 @@ declare module 'musora-content-services' {
427
426
  fetchOtherSongVersions,
428
427
  fetchPackAll,
429
428
  fetchPackData,
430
- fetchParentForDownload,
431
429
  fetchPlayAlongsCount,
432
430
  fetchPlaylist,
433
431
  fetchPlaylistItems,
package/src/index.js CHANGED
@@ -211,7 +211,6 @@ import {
211
211
  fetchOtherSongVersions,
212
212
  fetchPackAll,
213
213
  fetchPackData,
214
- fetchParentForDownload,
215
214
  fetchPlayAlongsCount,
216
215
  fetchRelatedLessons,
217
216
  fetchRelatedRecommendedContent,
@@ -426,7 +425,6 @@ export {
426
425
  fetchOtherSongVersions,
427
426
  fetchPackAll,
428
427
  fetchPackData,
429
- fetchParentForDownload,
430
428
  fetchPlayAlongsCount,
431
429
  fetchPlaylist,
432
430
  fetchPlaylistItems,
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
@@ -468,7 +468,7 @@ export async function fetchByRailContentId(id, contentType) {
468
468
  /**
469
469
  * Fetch content by an array of Railcontent IDs.
470
470
  *
471
- * @param {Array<string>} ids - The array of Railcontent IDs of the content to fetch.
471
+ * @param {Array<string|number>} ids - The array of Railcontent IDs of the content to fetch.
472
472
  * @param {string} [contentType] - The content type the IDs to add needed fields to the response.
473
473
  * @returns {Promise<Array<Object>|null>} - A promise that resolves to an array of content objects or null if not found.
474
474
  *
@@ -1496,28 +1496,6 @@ export async function fetchCoachLessons(
1496
1496
  return fetchSanity(query, true)
1497
1497
  }
1498
1498
 
1499
- /**
1500
- * Fetch the data needed for the Course Overview screen.
1501
- * @param {string} id - The Railcontent ID of the course
1502
- * @returns {Promise<Object|null>} - The course information and lessons or null if not found.
1503
- *
1504
- * @example
1505
- * fetchParentForDownload('course123')
1506
- * .then(course => console.log(course))
1507
- * .catch(error => console.error(error));
1508
- */
1509
- export async function fetchParentForDownload(id) {
1510
- const query = buildRawQuery(
1511
- `railcontent_id == ${id}`,
1512
- getFieldsForContentType('parent-download'),
1513
- {
1514
- isSingle: true,
1515
- }
1516
- )
1517
-
1518
- return fetchSanity(query, false)
1519
- }
1520
-
1521
1499
  /**
1522
1500
  * Fetch the data needed for the coach screen.
1523
1501
  * @param {string} id - The Railcontent ID of the coach
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/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
package/.yarnrc.yml DELETED
@@ -1 +0,0 @@
1
- nodeLinker: node-modules