musora-content-services 2.9.5 → 2.9.6

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/node.js.yml +0 -0
  5. package/.prettierignore +0 -0
  6. package/.prettierrc +0 -0
  7. package/CHANGELOG.md +8 -0
  8. package/README.md +0 -0
  9. package/babel.config.cjs +0 -0
  10. package/docs/Content-Organization.html +0 -0
  11. package/docs/ContentOrganization.html +0 -0
  12. package/docs/Gamification.html +0 -0
  13. package/docs/UserManagement.html +0 -0
  14. package/docs/UserManagementSystem.html +0 -0
  15. package/docs/api_types.js.html +0 -0
  16. package/docs/config.js.html +0 -0
  17. package/docs/content-org_content-org.js.html +0 -0
  18. package/docs/content-org_playlists-types.js.html +0 -0
  19. package/docs/content-org_playlists.js.html +0 -0
  20. package/docs/content.js.html +0 -0
  21. package/docs/fonts/Montserrat/Montserrat-Bold.eot +0 -0
  22. package/docs/fonts/Montserrat/Montserrat-Bold.ttf +0 -0
  23. package/docs/fonts/Montserrat/Montserrat-Bold.woff +0 -0
  24. package/docs/fonts/Montserrat/Montserrat-Bold.woff2 +0 -0
  25. package/docs/fonts/Montserrat/Montserrat-Regular.eot +0 -0
  26. package/docs/fonts/Montserrat/Montserrat-Regular.ttf +0 -0
  27. package/docs/fonts/Montserrat/Montserrat-Regular.woff +0 -0
  28. package/docs/fonts/Montserrat/Montserrat-Regular.woff2 +0 -0
  29. package/docs/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.eot +0 -0
  30. package/docs/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.svg +0 -0
  31. package/docs/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.ttf +0 -0
  32. package/docs/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.woff +0 -0
  33. package/docs/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.woff2 +0 -0
  34. package/docs/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.eot +0 -0
  35. package/docs/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.svg +0 -0
  36. package/docs/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.ttf +0 -0
  37. package/docs/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.woff +0 -0
  38. package/docs/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.woff2 +0 -0
  39. package/docs/gamification_awards.js.html +0 -0
  40. package/docs/gamification_gamification.js.html +0 -0
  41. package/docs/gamification_types.js.html +0 -0
  42. package/docs/global.html +0 -0
  43. package/docs/global.html#User +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-Notifications.html +0 -0
  50. package/docs/module-Permissions.html +0 -0
  51. package/docs/module-Playlists.html +0 -0
  52. package/docs/module-Railcontent-Services.html +0 -0
  53. package/docs/module-Sanity-Services.html +0 -0
  54. package/docs/module-Session-Management.html +0 -0
  55. package/docs/module-Sessions.html +0 -0
  56. package/docs/module-User-Activity.html +0 -0
  57. package/docs/module-User-Management.html +0 -0
  58. package/docs/module-User-Permissions.html +0 -0
  59. package/docs/module-UserActivity.html +0 -0
  60. package/docs/module-UserManagement.html +0 -0
  61. package/docs/module-UserNotifications.html +0 -0
  62. package/docs/module-UserProfile.html +0 -0
  63. package/docs/railcontent.js.html +0 -0
  64. package/docs/sanity.js.html +0 -0
  65. package/docs/scripts/collapse.js +0 -0
  66. package/docs/scripts/commonNav.js +0 -0
  67. package/docs/scripts/linenumber.js +0 -0
  68. package/docs/scripts/nav.js +0 -0
  69. package/docs/scripts/polyfill.js +0 -0
  70. package/docs/scripts/prettify/Apache-License-2.0.txt +0 -0
  71. package/docs/scripts/prettify/lang-css.js +0 -0
  72. package/docs/scripts/prettify/prettify.js +0 -0
  73. package/docs/scripts/search.js +0 -0
  74. package/docs/styles/jsdoc.css +0 -0
  75. package/docs/styles/prettify.css +0 -0
  76. package/docs/types.js.html +0 -0
  77. package/docs/userActivity.js.html +0 -0
  78. package/docs/user_interests.js.html +0 -0
  79. package/docs/user_management.js.html +0 -0
  80. package/docs/user_notifications.js.html +0 -0
  81. package/docs/user_permissions.js.html +0 -0
  82. package/docs/user_profile.js.html +0 -0
  83. package/docs/user_sessions.js.html +0 -0
  84. package/docs/user_types.js.html +0 -0
  85. package/docs/user_user-management-system.js.html +0 -0
  86. package/docs/user_user-management.js.html +0 -0
  87. package/jest.config.js +0 -0
  88. package/jsdoc.json +0 -0
  89. package/link_mcs.sh +0 -0
  90. package/package.json +1 -1
  91. package/src/contentMetaData.js +0 -0
  92. package/src/filterBuilder.js +0 -0
  93. package/src/index.d.ts +0 -0
  94. package/src/index.js +0 -0
  95. package/src/infrastructure/http/HttpClient.ts +0 -0
  96. package/src/infrastructure/http/executors/FetchRequestExecutor.ts +0 -0
  97. package/src/infrastructure/http/index.ts +0 -0
  98. package/src/infrastructure/http/interfaces/HeaderProvider.ts +0 -0
  99. package/src/infrastructure/http/interfaces/HttpError.ts +0 -0
  100. package/src/infrastructure/http/interfaces/NetworkError.ts +0 -0
  101. package/src/infrastructure/http/interfaces/RequestExecutor.ts +0 -0
  102. package/src/infrastructure/http/interfaces/RequestOptions.ts +0 -0
  103. package/src/infrastructure/http/providers/DefaultHeaderProvider.ts +0 -0
  104. package/src/lib/httpHelper.js +0 -0
  105. package/src/lib/lastUpdated.js +0 -0
  106. package/src/services/api/types.js +0 -0
  107. package/src/services/config.js +0 -0
  108. package/src/services/content-org/content-org.js +0 -0
  109. package/src/services/content-org/playlists-types.js +0 -0
  110. package/src/services/content-org/playlists.js +0 -0
  111. package/src/services/content.js +0 -0
  112. package/src/services/contentAggregator.js +0 -0
  113. package/src/services/contentLikes.js +0 -0
  114. package/src/services/contentProgress.js +0 -0
  115. package/src/services/dataContext.js +0 -0
  116. package/src/services/dateUtils.js +0 -0
  117. package/src/services/forum.js +0 -0
  118. package/src/services/gamification/awards.js +0 -0
  119. package/src/services/gamification/gamification.js +0 -0
  120. package/src/services/gamification/types.js +0 -0
  121. package/src/services/imageSRCBuilder.js +5 -0
  122. package/src/services/imageSRCVerify.js +0 -0
  123. package/src/services/railcontent.js +0 -0
  124. package/src/services/recommendations.js +0 -0
  125. package/src/services/sanity.js +27 -7
  126. package/src/services/types.js +0 -0
  127. package/src/services/user/chat.js +0 -0
  128. package/src/services/user/interests.js +0 -0
  129. package/src/services/user/management.js +0 -0
  130. package/src/services/user/notifications.js +0 -0
  131. package/src/services/user/permissions.js +0 -0
  132. package/src/services/user/profile.js +0 -0
  133. package/src/services/user/sessions.js +0 -0
  134. package/src/services/user/types.js +0 -0
  135. package/src/services/user/user-management-system.js +0 -0
  136. package/src/services/userActivity.js +0 -0
  137. package/test/HttpClient.test.js +0 -0
  138. package/test/content.test.js +0 -0
  139. package/test/contentLikes.test.js +0 -0
  140. package/test/contentProgress.test.js +0 -0
  141. package/test/dataContext.test.js +0 -0
  142. package/test/forum.test.js +0 -0
  143. package/test/imageSRCBuilder.test.js +0 -0
  144. package/test/imageSRCVerify.test.js +0 -0
  145. package/test/initializeTests.js +0 -0
  146. package/test/lib/lastUpdated.test.js +0 -0
  147. package/test/live/contentProgressLive.test.js +0 -0
  148. package/test/live/railcontentLive.test.js +0 -0
  149. package/test/localStorageMock.js +0 -0
  150. package/test/log.js +0 -0
  151. package/test/mockData/mockData_fetchByRailContentIds_one_content.json +0 -0
  152. package/test/mockData/mockData_progress_content.json +0 -0
  153. package/test/mockData/mockData_sanity_progress_content.json +0 -0
  154. package/test/mockData/mockData_user_practices.json +0 -0
  155. package/test/progressRows.test.js +0 -0
  156. package/test/sanityQueryService.test.js +0 -0
  157. package/test/streakMessage.test.js +0 -0
  158. package/test/user/permissions.test.js +0 -0
  159. package/test/userActivity.test.js +0 -0
  160. package/tools/generate-index.cjs +0 -0
  161. package/.yarnrc.yml +0 -1
  162. package/docs/module-Content-Services.html +0 -763
  163. package/docs/module-UserChat.html +0 -410
  164. package/docs/user_chat.js.html +0 -98
package/.coderabbit.yaml CHANGED
File without changes
package/.editorconfig CHANGED
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,14 @@
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.9.6](https://github.com/railroadmedia/musora-content-services/compare/v2.9.5...v2.9.6) (2025-06-18)
6
+
7
+
8
+ ### Bug Fixes
9
+
10
+ * **BEH-547:** collection modules updates ([#300](https://github.com/railroadmedia/musora-content-services/issues/300)) ([d07002b](https://github.com/railroadmedia/musora-content-services/commit/d07002b32946d3d03dc9b8f3469863a34d2696b5))
11
+ * null check for buildImageSRC ([f841b46](https://github.com/railroadmedia/musora-content-services/commit/f841b460bd41e0405caf7f2c06dd0c057a5f9aa1))
12
+
5
13
  ### [2.9.5](https://github.com/railroadmedia/musora-content-services/compare/v2.9.4...v2.9.5) (2025-06-18)
6
14
 
7
15
  ### [2.9.4](https://github.com/railroadmedia/musora-content-services/compare/v2.9.3...v2.9.4) (2025-06-17)
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.9.5",
3
+ "version": "2.9.6",
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
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
@@ -35,6 +35,11 @@
35
35
  * @returns {string} The fully constructed image URL with transformations
36
36
  */
37
37
  export function buildImageSRC(url, options = {}) {
38
+ // Return early if url is null, undefined, or empty
39
+ if (!url) {
40
+ return url
41
+ }
42
+
38
43
  // Process Sanity URL first if applicable
39
44
  if (url.includes('cdn.sanity.io')) {
40
45
  url = applySanityTransformations(url, options)
File without changes
File without changes
File without changes
@@ -1414,23 +1414,27 @@ async function fetchRelatedByLicense(railcontentId, brand, onlyUseSongTypes, cou
1414
1414
  */
1415
1415
  export async function fetchRelatedLessons(railContentId, brand) {
1416
1416
  const filterSameTypeAndSortOrder = await new FilterBuilder(
1417
- `_type==^._type && _type in ${JSON.stringify(typeWithSortOrder)} && brand == "${brand}" && railcontent_id !=${railContentId}`
1417
+ `_type==^._type && _type in ${JSON.stringify(typeWithSortOrder)} && brand == "${brand}" && railcontent_id !=${railContentId}`,
1418
1418
  ).buildFilter()
1419
1419
  const filterSameType = await new FilterBuilder(
1420
- `_type==^._type && !(_type in ${JSON.stringify(typeWithSortOrder)}) && !(defined(parent_type)) && brand == "${brand}" && railcontent_id !=${railContentId}`
1420
+ `_type==^._type && !(_type in ${JSON.stringify(typeWithSortOrder)}) && !(defined(parent_type)) && brand == "${brand}" && railcontent_id !=${railContentId}`,
1421
1421
  ).buildFilter()
1422
1422
  const filterSongSameArtist = await new FilterBuilder(
1423
- `_type=="song" && _type==^._type && brand == "${brand}" && references(^.artist->_id) && railcontent_id !=${railContentId}`
1423
+ `_type=="song" && _type==^._type && brand == "${brand}" && references(^.artist->_id) && railcontent_id !=${railContentId}`,
1424
1424
  ).buildFilter()
1425
1425
  const filterSongSameGenre = await new FilterBuilder(
1426
- `_type=="song" && _type==^._type && brand == "${brand}" && references(^.genre[]->_id) && railcontent_id !=${railContentId}`
1426
+ `_type=="song" && _type==^._type && brand == "${brand}" && references(^.genre[]->_id) && railcontent_id !=${railContentId}`,
1427
1427
  ).buildFilter()
1428
- const filterNeighbouringSiblings = await new FilterBuilder(`references(^._id)`).buildFilter()
1428
+ const filterNeighbouringSiblings = await new FilterBuilder(`references(^._id)`, {pullFutureContent: true}).buildFilter()
1429
1429
  const childrenFilter = await new FilterBuilder(``, { isChildrenFilter: true }).buildFilter()
1430
1430
  const queryFields = `_id, "id":railcontent_id, published_on, "instructor": instructor[0]->name, title, "thumbnail":thumbnail.asset->url, length_in_seconds, web_url_path, "type": _type, difficulty, difficulty_string, railcontent_id, artist->,"permission_id": permission[]->railcontent_id,_type, "genre": genre[]->name`
1431
1431
  const queryFieldsWithSort = queryFields + ', sort'
1432
1432
  const query = `*[railcontent_id == ${railContentId} && brand == "${brand}" && (!defined(permission) || references(*[_type=='permission']._id))]{
1433
- _type, parent_type, railcontent_id,
1433
+ _type, parent_type, 'parent_id': parent_content_data[0].id, railcontent_id,
1434
+ 'for-calculations': *[references(^._id) && !(_type in ['license'])][0]{
1435
+ 'siblings-list': child[]->railcontent_id,
1436
+ 'parents-list': *[references(^._id)][0].child[]->railcontent_id
1437
+ },
1434
1438
  "related_lessons" : array::unique([
1435
1439
  ...(*[${filterNeighbouringSiblings}][0].child[${childrenFilter}]->{${queryFields}}),
1436
1440
  ...(*[${filterSongSameArtist}]{${queryFields}}|order(published_on desc, title asc)[0...10]),
@@ -1439,7 +1443,23 @@ export async function fetchRelatedLessons(railContentId, brand) {
1439
1443
  ...(*[${filterSameType}]{${queryFields}}|order(published_on desc, title asc)[0...10])
1440
1444
  ,
1441
1445
  ])[0...10]}`
1442
- return fetchSanity(query, false)
1446
+ let result = await fetchSanity(query, false)
1447
+
1448
+ //there's no way in sanity to retrieve the index of an array, so we must calculate after fetch
1449
+ if (result['for-calculations']['parents-list']) {
1450
+ const calc = result['for-calculations']
1451
+ const parentCount = calc['parents-list'].length
1452
+ const currentParent = (calc['parents-list'].indexOf(result['parent_id']) + 1)
1453
+ const siblingCount = calc['siblings-list'].length
1454
+ const currentSibling = (calc['siblings-list'].indexOf(result['railcontent_id']) + 1)
1455
+
1456
+ delete result['for-calculations']
1457
+ result = {...result, parentCount, currentParent, siblingCount, currentSibling}
1458
+ return result
1459
+ } else {
1460
+ delete result['for-calculations']
1461
+ return result
1462
+ }
1443
1463
  }
1444
1464
 
1445
1465
  /**
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