musora-content-services 2.77.0 → 2.77.2
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.
- package/.claude/settings.local.json +3 -6
- package/.coderabbit.yaml +0 -0
- package/.editorconfig +0 -0
- package/.github/pull_request_template.md +0 -0
- package/.github/workflows/conventional-commits.yaml +0 -0
- package/.github/workflows/docs.js.yml +0 -0
- package/.github/workflows/node.js.yml +0 -0
- package/.prettierignore +0 -0
- package/.prettierrc +0 -0
- package/CHANGELOG.md +9 -0
- package/README.md +0 -0
- package/babel.config.cjs +0 -0
- package/docs/fonts/Montserrat/Montserrat-Bold.eot +0 -0
- package/docs/fonts/Montserrat/Montserrat-Bold.ttf +0 -0
- package/docs/fonts/Montserrat/Montserrat-Bold.woff +0 -0
- package/docs/fonts/Montserrat/Montserrat-Bold.woff2 +0 -0
- package/docs/fonts/Montserrat/Montserrat-Regular.eot +0 -0
- package/docs/fonts/Montserrat/Montserrat-Regular.ttf +0 -0
- package/docs/fonts/Montserrat/Montserrat-Regular.woff +0 -0
- package/docs/fonts/Montserrat/Montserrat-Regular.woff2 +0 -0
- package/docs/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.eot +0 -0
- package/docs/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.svg +0 -0
- package/docs/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.ttf +0 -0
- package/docs/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.woff +0 -0
- package/docs/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.woff2 +0 -0
- package/docs/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.eot +0 -0
- package/docs/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.svg +0 -0
- package/docs/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.ttf +0 -0
- package/docs/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.woff +0 -0
- package/docs/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.woff2 +0 -0
- package/docs/forums_discussions.js.html +0 -0
- package/docs/forums_forum.js.html +0 -0
- package/docs/gamification_awards.js.html +0 -0
- package/docs/gamification_types.js.html +0 -0
- package/docs/module-Categories.html +0 -0
- package/docs/module-ForumCategories.html +0 -0
- package/docs/module-ForumDiscussions.html +0 -0
- package/docs/module-Threads.html +0 -0
- package/docs/scripts/collapse.js +0 -0
- package/docs/scripts/commonNav.js +0 -0
- package/docs/scripts/linenumber.js +0 -0
- package/docs/scripts/nav.js +0 -0
- package/docs/scripts/polyfill.js +0 -0
- package/docs/scripts/prettify/Apache-License-2.0.txt +0 -0
- package/docs/scripts/prettify/lang-css.js +0 -0
- package/docs/scripts/prettify/prettify.js +0 -0
- package/docs/scripts/search.js +0 -0
- package/docs/styles/jsdoc.css +0 -0
- package/docs/styles/prettify.css +0 -0
- package/docs/user_memberships.js.html +0 -0
- package/jest.config.js +0 -0
- package/jsdoc.json +0 -0
- package/package.json +1 -1
- package/src/contentMetaData.js +0 -0
- package/src/contentTypeConfig.js +9 -61
- package/src/filterBuilder.js +0 -0
- package/src/infrastructure/http/executors/FetchRequestExecutor.ts +0 -0
- package/src/infrastructure/http/index.ts +0 -0
- package/src/infrastructure/http/interfaces/HeaderProvider.ts +0 -0
- package/src/infrastructure/http/interfaces/HttpError.ts +0 -0
- package/src/infrastructure/http/interfaces/NetworkError.ts +0 -0
- package/src/infrastructure/http/interfaces/RequestExecutor.ts +0 -0
- package/src/infrastructure/http/interfaces/RequestOptions.ts +0 -0
- package/src/infrastructure/http/providers/DefaultHeaderProvider.ts +0 -0
- package/src/lib/httpHelper.js +0 -0
- package/src/lib/lastUpdated.js +0 -0
- package/src/services/api/types.js +0 -0
- package/src/services/api/types.ts +0 -0
- package/src/services/config.js +0 -0
- package/src/services/content-org/content-org.js +0 -0
- package/src/services/content-org/guided-courses.ts +0 -0
- package/src/services/content-org/learning-paths.ts +1 -0
- package/src/services/content-org/playlists-types.js +0 -0
- package/src/services/content-org/playlists.js +0 -0
- package/src/services/content.js +0 -0
- package/src/services/contentLikes.js +0 -0
- package/src/services/dataContext.js +0 -0
- package/src/services/dateUtils.js +0 -0
- package/src/services/eventsAPI.js +0 -0
- package/src/services/forums/categories.ts +0 -0
- package/src/services/forums/forums.ts +0 -0
- package/src/services/gamification/awards.ts +0 -0
- package/src/services/gamification/gamification.js +0 -0
- package/src/services/imageSRCBuilder.js +0 -0
- package/src/services/imageSRCVerify.js +0 -0
- package/src/services/liveTesting.ts +0 -0
- package/src/services/progress-row/method-card.js +6 -5
- package/src/services/railcontent.js +0 -0
- package/src/services/recommendations.js +0 -0
- package/src/services/sanity.js +2 -1
- package/src/services/types.js +0 -0
- package/src/services/user/chat.js +0 -0
- package/src/services/user/interests.js +0 -0
- package/src/services/user/management.js +0 -0
- package/src/services/user/memberships.ts +0 -0
- package/src/services/user/notifications.js +0 -0
- package/src/services/user/onboarding.ts +0 -0
- package/src/services/user/payments.ts +0 -0
- package/src/services/user/permissions.js +0 -0
- package/src/services/user/profile.js +0 -0
- package/src/services/user/sessions.js +0 -0
- package/src/services/user/user-management-system.js +0 -0
- package/test/HttpClient.test.js +0 -0
- package/test/content.test.js +0 -0
- package/test/contentLikes.test.js +0 -0
- package/test/contentProgress.test.js +0 -0
- package/test/dataContext.test.js +0 -0
- package/test/forum.test.js +0 -0
- package/test/imageSRCBuilder.test.js +0 -0
- package/test/imageSRCVerify.test.js +0 -0
- package/test/initializeTests.js +0 -0
- package/test/lib/lastUpdated.test.js +0 -0
- package/test/live/contentProgressLive.test.js +0 -0
- package/test/live/railcontentLive.test.js +0 -0
- package/test/localStorageMock.js +0 -0
- package/test/log.js +0 -0
- package/test/mockData/mockData_fetchByRailContentIds_one_content.json +0 -0
- package/test/mockData/mockData_progress_content.json +0 -0
- package/test/mockData/mockData_sanity_progress_content.json +0 -0
- package/test/mockData/mockData_user_practices.json +0 -0
- package/test/notifications.test.js +0 -0
- package/test/progressRows.test.js +0 -0
- package/test/sanityQueryService.test.js +0 -0
- package/test/streakMessage.test.js +0 -0
- package/test/user/permissions.test.js +0 -0
- package/test/userActivity.test.js +0 -0
- package/tools/generate-index.cjs +0 -0
- package/.yarnrc.yml +0 -1
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,15 @@
|
|
|
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.77.2](https://github.com/railroadmedia/musora-content-services/compare/v2.77.1...v2.77.2) (2025-11-14)
|
|
6
|
+
|
|
7
|
+
### [2.77.1](https://github.com/railroadmedia/musora-content-services/compare/v2.77.0...v2.77.1) (2025-11-13)
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
### Bug Fixes
|
|
11
|
+
|
|
12
|
+
* difficulty & instructor fields ([#559](https://github.com/railroadmedia/musora-content-services/issues/559)) ([bd12f4e](https://github.com/railroadmedia/musora-content-services/commit/bd12f4e825f89eca3476bd130a23710991dff7a9))
|
|
13
|
+
|
|
5
14
|
## [2.77.0](https://github.com/railroadmedia/musora-content-services/compare/v2.64.0...v2.77.0) (2025-11-13)
|
|
6
15
|
|
|
7
16
|
|
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/docs/module-Threads.html
CHANGED
|
File without changes
|
package/docs/scripts/collapse.js
CHANGED
|
File without changes
|
|
File without changes
|
|
File without changes
|
package/docs/scripts/nav.js
CHANGED
|
File without changes
|
package/docs/scripts/polyfill.js
CHANGED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
package/docs/scripts/search.js
CHANGED
|
File without changes
|
package/docs/styles/jsdoc.css
CHANGED
|
File without changes
|
package/docs/styles/prettify.css
CHANGED
|
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
package/src/contentMetaData.js
CHANGED
|
File without changes
|
package/src/contentTypeConfig.js
CHANGED
|
@@ -299,8 +299,7 @@ export const progressTypesMapping = {
|
|
|
299
299
|
'play along': playAlongLessonTypes,
|
|
300
300
|
'guided course': ['guided-course'],
|
|
301
301
|
pack: ['pack', 'semester-pack'],
|
|
302
|
-
|
|
303
|
-
'learning path': ['learning-path'],
|
|
302
|
+
'learning path': ['learning-path-v2'],
|
|
304
303
|
'jam track': jamTrackLessonTypes,
|
|
305
304
|
'course video': ['course-part'],
|
|
306
305
|
}
|
|
@@ -346,7 +345,7 @@ export const recentTypes = {
|
|
|
346
345
|
...transcriptionsLessonTypes,
|
|
347
346
|
...playAlongLessonTypes,
|
|
348
347
|
'guided-course',
|
|
349
|
-
'learning-path',
|
|
348
|
+
'learning-path-v2',
|
|
350
349
|
'live',
|
|
351
350
|
'course',
|
|
352
351
|
'pack',
|
|
@@ -460,28 +459,9 @@ export let contentTypeConfig = {
|
|
|
460
459
|
)`,
|
|
461
460
|
],
|
|
462
461
|
},
|
|
463
|
-
method: {
|
|
464
|
-
fields: [
|
|
465
|
-
`"description": ${descriptionField}`,
|
|
466
|
-
'hide_from_recsys',
|
|
467
|
-
'"image": thumbnail.asset->url',
|
|
468
|
-
'"instructors":instructor[]->name',
|
|
469
|
-
'"lesson_count": child_count',
|
|
470
|
-
'length_in_seconds',
|
|
471
|
-
'permission',
|
|
472
|
-
'popularity',
|
|
473
|
-
'published_on',
|
|
474
|
-
'railcontent_id',
|
|
475
|
-
'"thumbnail_logo": logo_image_url.asset->url',
|
|
476
|
-
'title',
|
|
477
|
-
'total_xp',
|
|
478
|
-
'"type": _type',
|
|
479
|
-
'xp',
|
|
480
|
-
],
|
|
481
|
-
},
|
|
482
462
|
'learning-path-v2': {
|
|
483
463
|
fields: [
|
|
484
|
-
`"intro_video": intro_video->{ ${getIntroVideoFields('learning-path').join(', ')} }`,
|
|
464
|
+
`"intro_video": intro_video->{ ${getIntroVideoFields('learning-path-v2').join(', ')} }`,
|
|
485
465
|
'total_skills',
|
|
486
466
|
`"resource": ${resourcesField}`,
|
|
487
467
|
`"badge": *[
|
|
@@ -491,40 +471,6 @@ export let contentTypeConfig = {
|
|
|
491
471
|
],
|
|
492
472
|
includeChildFields: true,
|
|
493
473
|
},
|
|
494
|
-
'learning-path-course': {
|
|
495
|
-
fields: [
|
|
496
|
-
'"lesson_count": child_count',
|
|
497
|
-
'"instructors": instructor[]->name',
|
|
498
|
-
`"description": ${descriptionField}`,
|
|
499
|
-
`"resource": ${resourcesField}`,
|
|
500
|
-
'xp',
|
|
501
|
-
'total_xp',
|
|
502
|
-
`"lessons": child[]->{
|
|
503
|
-
"id": railcontent_id,
|
|
504
|
-
title,
|
|
505
|
-
"image": thumbnail.asset->url,
|
|
506
|
-
"instructors": instructor[]->name,
|
|
507
|
-
length_in_seconds,
|
|
508
|
-
}`,
|
|
509
|
-
],
|
|
510
|
-
},
|
|
511
|
-
'learning-path-level': {
|
|
512
|
-
fields: [
|
|
513
|
-
'"lesson_count": child_count',
|
|
514
|
-
'"instructors": instructor[]->name',
|
|
515
|
-
`"description": ${descriptionField}`,
|
|
516
|
-
`"resource": ${resourcesField}`,
|
|
517
|
-
'xp',
|
|
518
|
-
'total_xp',
|
|
519
|
-
`"lessons": child[]->{
|
|
520
|
-
"id": railcontent_id,
|
|
521
|
-
title,
|
|
522
|
-
"image": thumbnail.asset->url,
|
|
523
|
-
"instructors": instructor[]->name,
|
|
524
|
-
length_in_seconds,
|
|
525
|
-
}`,
|
|
526
|
-
],
|
|
527
|
-
},
|
|
528
474
|
workout: {
|
|
529
475
|
fields: [artistOrInstructorNameAsArray()],
|
|
530
476
|
slug: 'workouts',
|
|
@@ -680,7 +626,7 @@ export let contentTypeConfig = {
|
|
|
680
626
|
`"type":_type`,
|
|
681
627
|
'title',
|
|
682
628
|
'brand',
|
|
683
|
-
`"intro_video": intro_video->{ ${getIntroVideoFields('method').join(', ')} }`,
|
|
629
|
+
`"intro_video": intro_video->{ ${getIntroVideoFields('method-v2').join(', ')} }`,
|
|
684
630
|
`child[]->{
|
|
685
631
|
"resource": ${resourcesField},
|
|
686
632
|
total_skills,
|
|
@@ -705,6 +651,9 @@ export function getIntroVideoFields(type) {
|
|
|
705
651
|
`"id": railcontent_id`,
|
|
706
652
|
'title',
|
|
707
653
|
'brand',
|
|
654
|
+
`"instructor": *[_type == "method-v2" && brand == ^.brand && references(^._id)][0].${instructorField}`,
|
|
655
|
+
`"difficulty": *[_type == "method-v2" && brand == ^.brand && references(^._id)][0].difficulty`,
|
|
656
|
+
`"difficulty_string": *[_type == "method-v2" && brand == ^.brand][0].difficulty_string`,
|
|
708
657
|
`"type": _type`,
|
|
709
658
|
'brand',
|
|
710
659
|
`"description": ${descriptionField}`,
|
|
@@ -712,9 +661,9 @@ export function getIntroVideoFields(type) {
|
|
|
712
661
|
'length_in_seconds',
|
|
713
662
|
]
|
|
714
663
|
|
|
715
|
-
if (type === 'method') {
|
|
664
|
+
if (type === 'method-v2') {
|
|
716
665
|
fields.push(...['video_desktop', 'video_mobile'])
|
|
717
|
-
} else if (type === 'learning-path') {
|
|
666
|
+
} else if (type === 'learning-path-v2') {
|
|
718
667
|
fields.push('video')
|
|
719
668
|
}
|
|
720
669
|
|
|
@@ -737,7 +686,6 @@ export function getNewReleasesTypes(brand) {
|
|
|
737
686
|
'podcasts',
|
|
738
687
|
'pack',
|
|
739
688
|
'song',
|
|
740
|
-
'learning-path-level',
|
|
741
689
|
'play-along',
|
|
742
690
|
'course',
|
|
743
691
|
'unit',
|
package/src/filterBuilder.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/src/lib/httpHelper.js
CHANGED
|
File without changes
|
package/src/lib/lastUpdated.js
CHANGED
|
File without changes
|
|
File without changes
|
|
File without changes
|
package/src/services/config.js
CHANGED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -198,6 +198,7 @@ export async function fetchLearningPathLessons(
|
|
|
198
198
|
upcoming_lessons: upcomingLessons,
|
|
199
199
|
todays_lessons: todaysLessons,
|
|
200
200
|
next_learning_path_lessons: nextLPLessons,
|
|
201
|
+
next_learning_path_id: nextLearningPathId,
|
|
201
202
|
completed_lessons: completedLessons,
|
|
202
203
|
previous_learning_path_todays: previousLearningPathTodays,
|
|
203
204
|
}
|
|
File without changes
|
|
File without changes
|
package/src/services/content.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
|
|
@@ -16,19 +16,20 @@ import { getProgressState } from '../contentProgress'
|
|
|
16
16
|
|
|
17
17
|
export async function getMethodCard(brand) {
|
|
18
18
|
const introVideo = await fetchMethodV2IntroVideo(brand)
|
|
19
|
-
const introVideoProgressState = await getProgressState(introVideo
|
|
19
|
+
const introVideoProgressState = await getProgressState(introVideo?.id)
|
|
20
20
|
//resetAllLearningPaths()
|
|
21
21
|
if (introVideoProgressState != 'completed') {
|
|
22
22
|
//startLearningPath('drumeo', 422533)
|
|
23
23
|
const timestamp = Math.floor(Date.now() / 1000)
|
|
24
24
|
return {
|
|
25
|
-
id:
|
|
25
|
+
id: 1, // method card has no id
|
|
26
26
|
type: 'method',
|
|
27
27
|
header: 'Method',
|
|
28
|
+
progressType: 'method',
|
|
28
29
|
body: {
|
|
29
30
|
thumbnail: introVideo.thumbnail,
|
|
30
31
|
title: introVideo.title,
|
|
31
|
-
subtitle: `${introVideo.difficulty_string} • ${introVideo.
|
|
32
|
+
subtitle: `${introVideo.difficulty_string} • ${introVideo.instructor?.[0]?.name}`,
|
|
32
33
|
},
|
|
33
34
|
cta: {
|
|
34
35
|
text: 'Get Started',
|
|
@@ -85,9 +86,9 @@ export async function getMethodCard(brand) {
|
|
|
85
86
|
}
|
|
86
87
|
|
|
87
88
|
return {
|
|
88
|
-
id:
|
|
89
|
+
id: 1,
|
|
89
90
|
type: 'learning-path-v2',
|
|
90
|
-
progressType: '
|
|
91
|
+
progressType: 'method',
|
|
91
92
|
header: 'Method',
|
|
92
93
|
body: learningPath,
|
|
93
94
|
cta: {
|
|
File without changes
|
|
File without changes
|
package/src/services/sanity.js
CHANGED
|
@@ -878,6 +878,7 @@ export async function fetchAllFilterOptions(
|
|
|
878
878
|
return includeTabs ? { ...results, tabs, catalogName } : results
|
|
879
879
|
}
|
|
880
880
|
|
|
881
|
+
//Daniel Nov 14 2025 note - keeping this for when we migrate foundations to packs, so we know what fields to use.
|
|
881
882
|
/**
|
|
882
883
|
* Fetch the Foundations 2019.
|
|
883
884
|
* @param {string} slug - The slug of the method.
|
|
@@ -2299,7 +2300,7 @@ export async function fetchShows(brand, type, sort = 'sort') {
|
|
|
2299
2300
|
export async function fetchMethodV2IntroVideo(brand) {
|
|
2300
2301
|
const type = "method-intro";
|
|
2301
2302
|
const filter = `_type == '${type}' && brand == '${brand}'`;
|
|
2302
|
-
const fields = getIntroVideoFields('method');
|
|
2303
|
+
const fields = getIntroVideoFields('method-v2');
|
|
2303
2304
|
|
|
2304
2305
|
const query = `*[${filter}] { ${fields.join(", ")} }`;
|
|
2305
2306
|
return fetchSanity(query, false);
|
package/src/services/types.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
|
package/test/HttpClient.test.js
CHANGED
|
File without changes
|
package/test/content.test.js
CHANGED
|
File without changes
|
|
File without changes
|
|
File without changes
|
package/test/dataContext.test.js
CHANGED
|
File without changes
|
package/test/forum.test.js
CHANGED
|
File without changes
|
|
File without changes
|
|
File without changes
|
package/test/initializeTests.js
CHANGED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
package/test/localStorageMock.js
CHANGED
|
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
|
|
File without changes
|
package/tools/generate-index.cjs
CHANGED
|
File without changes
|
package/.yarnrc.yml
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
nodeLinker: node-modules
|