musora-content-services 2.45.0 → 2.46.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 (123) 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 +12 -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-ForumDiscussions.html +0 -0
  36. package/docs/scripts/collapse.js +0 -0
  37. package/docs/scripts/commonNav.js +0 -0
  38. package/docs/scripts/linenumber.js +0 -0
  39. package/docs/scripts/nav.js +0 -0
  40. package/docs/scripts/polyfill.js +0 -0
  41. package/docs/scripts/prettify/Apache-License-2.0.txt +0 -0
  42. package/docs/scripts/prettify/lang-css.js +0 -0
  43. package/docs/scripts/prettify/prettify.js +0 -0
  44. package/docs/scripts/search.js +0 -0
  45. package/docs/styles/jsdoc.css +0 -0
  46. package/docs/styles/prettify.css +0 -0
  47. package/jest.config.js +0 -0
  48. package/jsdoc.json +0 -0
  49. package/package.json +1 -1
  50. package/src/contentMetaData.js +31 -362
  51. package/src/contentTypeConfig.js +3 -2
  52. package/src/filterBuilder.js +0 -0
  53. package/src/index.d.ts +0 -2
  54. package/src/index.js +0 -2
  55. package/src/infrastructure/http/HttpClient.ts +0 -0
  56. package/src/infrastructure/http/executors/FetchRequestExecutor.ts +0 -0
  57. package/src/infrastructure/http/index.ts +0 -0
  58. package/src/infrastructure/http/interfaces/HeaderProvider.ts +0 -0
  59. package/src/infrastructure/http/interfaces/HttpError.ts +0 -0
  60. package/src/infrastructure/http/interfaces/NetworkError.ts +0 -0
  61. package/src/infrastructure/http/interfaces/RequestExecutor.ts +0 -0
  62. package/src/infrastructure/http/interfaces/RequestOptions.ts +0 -0
  63. package/src/infrastructure/http/providers/DefaultHeaderProvider.ts +0 -0
  64. package/src/lib/httpHelper.js +0 -0
  65. package/src/lib/lastUpdated.js +0 -0
  66. package/src/services/api/types.js +0 -0
  67. package/src/services/api/types.ts +0 -0
  68. package/src/services/config.js +0 -0
  69. package/src/services/content-org/content-org.js +0 -0
  70. package/src/services/content-org/guided-courses.ts +0 -0
  71. package/src/services/content-org/playlists-types.js +0 -0
  72. package/src/services/content-org/playlists.js +0 -0
  73. package/src/services/content.js +0 -0
  74. package/src/services/contentAggregator.js +0 -0
  75. package/src/services/contentLikes.js +0 -0
  76. package/src/services/dataContext.js +0 -0
  77. package/src/services/dateUtils.js +0 -0
  78. package/src/services/eventsAPI.js +0 -0
  79. package/src/services/forum.js +0 -0
  80. package/src/services/forums/forums.ts +0 -0
  81. package/src/services/gamification/gamification.js +0 -0
  82. package/src/services/imageSRCBuilder.js +0 -0
  83. package/src/services/imageSRCVerify.js +0 -0
  84. package/src/services/railcontent.js +0 -0
  85. package/src/services/recommendations.js +0 -0
  86. package/src/services/types.js +0 -0
  87. package/src/services/user/account.ts +0 -0
  88. package/src/services/user/chat.js +0 -0
  89. package/src/services/user/interests.js +0 -0
  90. package/src/services/user/management.js +0 -0
  91. package/src/services/user/notifications.js +0 -0
  92. package/src/services/user/payments.ts +0 -0
  93. package/src/services/user/permissions.js +0 -0
  94. package/src/services/user/profile.js +0 -0
  95. package/src/services/user/types.js +0 -0
  96. package/src/services/user/user-management-system.js +0 -0
  97. package/src/services/userActivity.js +1 -1
  98. package/test/HttpClient.test.js +0 -0
  99. package/test/content.test.js +0 -0
  100. package/test/contentLikes.test.js +0 -0
  101. package/test/contentProgress.test.js +0 -0
  102. package/test/dataContext.test.js +0 -0
  103. package/test/forum.test.js +0 -0
  104. package/test/imageSRCBuilder.test.js +0 -0
  105. package/test/imageSRCVerify.test.js +0 -0
  106. package/test/initializeTests.js +0 -0
  107. package/test/lib/lastUpdated.test.js +0 -0
  108. package/test/live/contentProgressLive.test.js +0 -0
  109. package/test/live/railcontentLive.test.js +0 -0
  110. package/test/localStorageMock.js +0 -0
  111. package/test/log.js +0 -0
  112. package/test/mockData/mockData_fetchByRailContentIds_one_content.json +0 -0
  113. package/test/mockData/mockData_progress_content.json +0 -0
  114. package/test/mockData/mockData_sanity_progress_content.json +0 -0
  115. package/test/mockData/mockData_user_practices.json +0 -0
  116. package/test/notifications.test.js +0 -0
  117. package/test/progressRows.test.js +0 -0
  118. package/test/sanityQueryService.test.js +0 -0
  119. package/test/streakMessage.test.js +0 -0
  120. package/test/user/permissions.test.js +0 -0
  121. package/test/userActivity.test.js +0 -0
  122. package/tools/generate-index.cjs +0 -0
  123. 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,18 @@
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.46.0](https://github.com/railroadmedia/musora-content-services/compare/v2.45.0...v2.46.0) (2025-09-26)
6
+
7
+
8
+ ### Features
9
+
10
+ * **BEH-1106:** update contentTypeConfig and contentMetaData ([#458](https://github.com/railroadmedia/musora-content-services/issues/458)) ([8b8c7fc](https://github.com/railroadmedia/musora-content-services/commit/8b8c7fce81197a7e9ffde80b9718be87caec915d))
11
+
12
+
13
+ ### Bug Fixes
14
+
15
+ * 0 progress shows start course cta text ([#468](https://github.com/railroadmedia/musora-content-services/issues/468)) ([d9ae881](https://github.com/railroadmedia/musora-content-services/commit/d9ae8815fd233e142f60b2293136546f7693862d))
16
+
5
17
  ## [2.45.0](https://github.com/railroadmedia/musora-content-services/compare/v2.44.0...v2.45.0) (2025-09-25)
6
18
 
7
19
 
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
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.45.0",
3
+ "version": "2.46.0",
4
4
  "description": "A package for Musoras content services ",
5
5
  "main": "src/index.js",
6
6
  "type": "module",
@@ -56,132 +56,6 @@ export const TabResponseType = {
56
56
  };
57
57
 
58
58
  const commonMetadata = {
59
- instructor: {
60
- name: 'Coaches',
61
- icon: 'icon-coach',
62
- allowableFilters: ['genre', 'focus'],
63
- sortBy: '-published_on',
64
- },
65
- course: {
66
- name: 'Courses',
67
- allowableFilters: ['difficulty', 'genre', 'essential', 'theory', 'creativity', 'lifestyle'],
68
- icon: 'icon-courses',
69
- tabs: [
70
- Tabs.Courses,
71
- Tabs.Instructors,
72
- Tabs.Genres,
73
- ],
74
- },
75
- pack: {
76
- allowableFilters: [],
77
- },
78
- 'student-review': {
79
- name: 'Student Reviews',
80
- icon: 'icon-student-focus',
81
- allowableFilters: ['difficulty', 'genre', 'essential', 'theory', 'creativity', 'lifestyle'],
82
- sortBy: '-published_on',
83
- tabs: [
84
- Tabs.Lessons,
85
- Tabs.Instructors,
86
- Tabs.Genres,
87
- ],
88
- },
89
- song: {
90
- name: 'Songs',
91
- icon: 'icon-songs',
92
- description:
93
- 'Play the songs you love with note-for-note transcriptions and handy practice tools.',
94
- allowableFilters: ['difficulty', 'genre', 'lifestyle', 'instrumentless'],
95
- tabs: [
96
- Tabs.Songs,
97
- Tabs.Artists,
98
- Tabs.Genres,
99
- ],
100
- },
101
- 'quick-tips': {
102
- name: 'Quick Tips',
103
- icon: 'icon-shows',
104
- description:
105
- 'Only have 10 minutes? These short lessons are designed to inspire you with quick tips and exercises, even if you don’t have lots of time to practice.',
106
- allowableFilters: ['difficulty', 'genre', 'essential', 'theory', 'lifestyle', 'creativity'],
107
- sortBy: '-published_on',
108
- tabs: [
109
- Tabs.Lessons,
110
- Tabs.Instructors,
111
- Tabs.Genres,
112
- ],
113
- },
114
- 'question-and-answer': {
115
- name: 'Q&A',
116
- description:
117
- 'Each week we go live to answer your questions. Submit your questions in advance using the button below, in the Q&A thread in the forums, or live in the community chat.',
118
- allowableFilters: ['difficulty', 'genre', 'essential', 'theory'],
119
- sortBy: '-published_on',
120
- },
121
- recommendation: {
122
- tabs: [
123
- { name: 'All', is_group_by: true, value: ['group_by,Recommended'] },
124
- { name: 'Songs', value: ['filter,song'] },
125
- { name: 'Lessons', value: ['filter,lesson'] },
126
- { name: 'Workouts', value: ['filter,workout'] },
127
- ],
128
- },
129
- workout: {
130
- name: 'Workouts',
131
- shortname: 'Workouts',
132
- allowableFilters: ['difficulty', 'genre', 'topic'],
133
- tabs: [
134
- Tabs.All,
135
- {
136
- name: '5 Minutes',
137
- short_name: '5 MINS',
138
- is_required_field: true,
139
- value: 'length_in_seconds,-450',
140
- value_web: ['length_in_seconds < 450'],
141
- },
142
- {
143
- name: '10 Minutes',
144
- short_name: '10 MINS',
145
- is_required_field: true,
146
- value: 'length_in_seconds,450-750',
147
- value_web: ['length_in_seconds > 451', 'length_in_seconds < 751'],
148
- },
149
- {
150
- name: '15+ Minutes',
151
- short_name: '15+ MINS',
152
- is_required_field: true,
153
- value: 'length_in_seconds,750+',
154
- value_web: ['length_in_seconds > 750'],
155
- },
156
- Tabs.Instructors,
157
- ],
158
- modalText:
159
- 'Workouts are fun play-along lessons that help hone your musical skills. They cover various topics, and have multiple difficulty and duration options — so there’s always a perfect Workout for you. Just pick one, press start, and play along!',
160
- },
161
- 'coach-lessons': {
162
- allowableFilters: ['difficulty', 'genre', 'essential', 'theory', 'lifestyle', 'type'],
163
- },
164
- 'lesson-history': {
165
- name: 'Lesson History',
166
- shortname: 'Lesson History',
167
- icon: 'bookmark',
168
- allowableFilters: ['difficulty', 'type'],
169
- sortBy: '-published_on',
170
- tabs: [
171
- Tabs.InProgress,
172
- Tabs.Completed,
173
- ],
174
- },
175
- 'new-release': {
176
- name: 'New Releases',
177
- description:
178
- "Here's a list of all lessons recently added to Drumeo. Browse on your own or use search to find whatever it is you'd like to learn!",
179
- allowableFilters: ['type'],
180
- sortBy: '-published_on',
181
- tabs: [
182
- Tabs.Lessons,
183
- ],
184
- },
185
59
  'lessons': {
186
60
  name: 'Lessons',
187
61
  filterOptions: {
@@ -225,6 +99,22 @@ const commonMetadata = {
225
99
  Tabs.ExploreAll
226
100
  ],
227
101
  },
102
+ 'recent': {
103
+ name: 'Recent Lessons',
104
+ tabs: [
105
+ Tabs.RecentAll,
106
+ Tabs.RecentIncomplete,
107
+ Tabs.RecentCompleted
108
+ ],
109
+ },
110
+ recommendation: {
111
+ tabs: [
112
+ { name: 'All', is_group_by: true, value: ['group_by,Recommended'] },
113
+ { name: 'Songs', value: ['filter,song'] },
114
+ { name: 'Lessons', value: ['filter,lesson'] },
115
+ { name: 'Workouts', value: ['filter,workout'] },
116
+ ],
117
+ },
228
118
  'recent-activities': {
229
119
  name: 'Recent Activity',
230
120
  onlyAvailableTabs: true,
@@ -239,84 +129,6 @@ const commonMetadata = {
239
129
  }
240
130
  const contentMetadata = {
241
131
  drumeo: {
242
- instructor: {
243
- description:
244
- 'Your drumming journey is unique. You need personalized coaching that helps you reach your goals. Learn from some of the best drummers in the world!',
245
- },
246
- live: {
247
- thumbnailUrl: 'https://dpwjbsxqtam5n.cloudfront.net/shows/show-live.jpg',
248
- name: 'Live',
249
- url: '/live-streams',
250
- shortname: 'Live Lessons',
251
- icon: 'icon-shows',
252
- description:
253
- 'Practice sessions, Q&A, celebrations, and more are available during Drumeo live lessons. Subscribe to an event or the whole calendar, so you don’t miss out!',
254
- allowableFilters: ['difficulty', 'genre', 'essential', 'theory'],
255
- sortBy: '-published_on',
256
- tabs: [
257
- Tabs.Lessons,
258
- Tabs.Instructors,
259
- Tabs.Genres,
260
- ],
261
- },
262
- 'odd-times': {
263
- thumbnailUrl:
264
- 'https://musora.com/cdn-cgi/imagedelivery/0Hon__GSkIjm-B_W77SWCA/1bf6fc7a-d1a5-4934-d322-b9f6da454000/public',
265
- name: 'Odd Times With Aaron Edgar',
266
- shortname: 'Episodes',
267
- icon: 'icon-shows',
268
- allowableFilters: [],
269
- sortBy: 'sort',
270
- },
271
- rudiment: {
272
- name: 'Rudiments',
273
- icon: 'icon-drums',
274
- description:
275
- 'The 40 drum rudiments are essential for any drummer, no matter the style, genre, or scenario. You can use the videos below to help you learn, practice, and perfect every single one.',
276
- allowableFilters: ['difficulty', 'genre', 'gear', 'topic'],
277
- tabs: [
278
- Tabs.All,
279
- {
280
- name: 'Drags',
281
- short_name: 'DRAGS',
282
- is_required_field: true,
283
- value: 'topic,Drags',
284
- },
285
- {
286
- name: 'Flams',
287
- short_name: 'FLAMS',
288
- is_required_field: true,
289
- value: 'topic,Flams',
290
- },
291
- {
292
- name: 'Paradiddles',
293
- short_name: 'PARADIDDLES',
294
- is_required_field: true,
295
- value: 'topic,Paradiddles',
296
- },
297
- {
298
- name: 'Rolls',
299
- short_name: 'ROLLS',
300
- is_required_field: true,
301
- value: 'topic,Rolls',
302
- },
303
- ],
304
- sortBy: 'sort',
305
- },
306
- 'play-along': {
307
- name: 'Play-Alongs',
308
- icon: 'icon-play-alongs',
309
- description:
310
- 'Add your drumming to high-quality drumless play-along tracks - with handy playback tools to help you create the perfect performance.',
311
- allowableFilters: ['difficulty', 'genre', 'bpm'],
312
- tabs: [
313
- {
314
- name: 'All Play-Alongs',
315
- short_name: 'ALL',
316
- value: '',
317
- },
318
- ],
319
- },
320
132
  'lessons': {
321
133
  name: 'Lessons',
322
134
  filterOptions: {
@@ -325,32 +137,6 @@ const contentMetadata = {
325
137
  type: ['Single Lessons', 'Practice Alongs', 'Performances', 'Courses', 'Shows', 'Documentaries', 'Live Archives', 'Student Archives'],
326
138
  progress: PROGRESS_NAMES,
327
139
  },
328
- tabs: [
329
- Tabs.ForYou,
330
- Tabs.Individuals,
331
- Tabs.Collections,
332
- Tabs.ExploreAll
333
- ],
334
- },
335
- 'recent': {
336
- name: 'Recent Lessons',
337
- tabs: [
338
- Tabs.RecentAll,
339
- Tabs.RecentIncomplete,
340
- Tabs.RecentCompleted
341
- ],
342
- },
343
- 'songs': {
344
- name: 'Songs',
345
- filterOptions: {
346
- difficulty: DIFFICULTY_STRINGS,
347
- style: [
348
- 'Blues', 'Christian', 'Classical', 'Country', 'Disco', 'Electronic', 'Folk', 'Funk', 'Hip-Hop/Rap', 'Holiday', 'Jazz', 'Soundtrack',
349
- 'World', 'Metal', 'Pop', 'R&B/Soul', 'Rock'
350
- ],
351
- type: ['Tutorials', 'Transcriptions', 'Play-Alongs', 'Jam Tracks'],
352
- progress: PROGRESS_NAMES,
353
- },
354
140
  sortingOptions: {
355
141
  title: 'Sort By',
356
142
  type: 'radio',
@@ -358,13 +144,12 @@ const contentMetadata = {
358
144
  },
359
145
  tabs: [
360
146
  Tabs.ForYou,
361
- Tabs.Tutorials,
362
- Tabs.Transcriptions,
363
- Tabs.PlayAlongs,
364
- Tabs.JamTracks,
147
+ Tabs.Individuals,
148
+ Tabs.Collections,
365
149
  Tabs.ExploreAll
366
150
  ],
367
151
  },
152
+ 'songs-types': ['Tutorials', 'Transcriptions', 'Play-Alongs', 'Jam Tracks'],
368
153
  },
369
154
  pianote: {
370
155
  'lessons': {
@@ -375,24 +160,6 @@ const contentMetadata = {
375
160
  type: ['Single Lessons', 'Practice Alongs', 'Performances', 'Courses', 'Live Archives', 'Student Archives'],
376
161
  progress: PROGRESS_NAMES,
377
162
  },
378
- tabs: [
379
- Tabs.ForYou,
380
- Tabs.Individuals,
381
- Tabs.Collections,
382
- Tabs.ExploreAll
383
- ],
384
- },
385
- 'songs': {
386
- name: 'Songs',
387
- filterOptions: {
388
- difficulty: DIFFICULTY_STRINGS,
389
- style: [
390
- 'Blues', 'Christian', 'Classical', 'Country', 'Disco', 'Electronic', 'Folk', 'Funk', 'Hip-Hop/Rap', 'Holiday', 'Jazz', 'Soundtrack',
391
- 'World', 'Metal', 'Pop', 'R&B/Soul', 'Rock'
392
- ],
393
- type: ['Tutorials', 'Sheet Music', 'Play-Alongs', 'Jam Tracks'],
394
- progress: PROGRESS_NAMES,
395
- },
396
163
  sortingOptions: {
397
164
  title: 'Sort By',
398
165
  type: 'radio',
@@ -400,114 +167,21 @@ const contentMetadata = {
400
167
  },
401
168
  tabs: [
402
169
  Tabs.ForYou,
403
- Tabs.Tutorials,
404
- Tabs.Transcriptions,
405
- Tabs.PlayAlongs,
406
- Tabs.JamTracks,
170
+ Tabs.Individuals,
171
+ Tabs.Collections,
407
172
  Tabs.ExploreAll
408
173
  ],
409
174
  },
410
- 'recent': {
411
- name: 'Recent Lessons',
412
- tabs: [
413
- Tabs.RecentAll,
414
- Tabs.RecentIncomplete,
415
- Tabs.RecentCompleted
416
- ],
417
- },
175
+ 'songs-types': ['Tutorials', 'Sheet Music', 'Play-Alongs', 'Jam Tracks'],
418
176
  },
419
177
  guitareo: {
420
- instructor: {
421
- description:
422
- 'Tackle your next guitar goal with bite-sized courses from many of the world\'s best guitarists.',
423
- },
424
- recording: {
425
- name: 'Archives',
426
- shortname: 'Lessons',
427
- icon: 'icon-library',
428
- description:
429
- 'Miss a live event or just want to watch a particular episode again? This is the place to do it. All of the Guitareo live broadcasts are archived here for you to watch at your leisure. If you have any questions or want to discuss the topics mentioned in the videos you can always post in the forum.',
430
- allowableFilters: ['difficulty', 'genre'],
431
- tabs: [
432
- Tabs.Lessons,
433
- Tabs.Instructors,
434
- Tabs.Genres,
435
- ],
436
- },
437
- 'songs': {
438
- name: 'Songs',
439
- filterOptions: {
440
- difficulty: DIFFICULTY_STRINGS,
441
- style: [
442
- 'Blues', 'Christian', 'Classical', 'Country', 'Disco', 'Electronic', 'Folk', 'Funk', 'Hip-Hop/Rap', 'Holiday', 'Jazz', 'Soundtrack',
443
- 'World', 'Metal', 'Pop', 'R&B/Soul', 'Rock'
444
- ],
445
- type: ['Tutorials', 'Tabs', 'Play-Alongs', 'Jam Tracks'],
446
- progress: PROGRESS_NAMES,
447
- },
448
- sortingOptions: {
449
- title: 'Sort By',
450
- type: 'radio',
451
- items: SortingOptions.AllSortingOptions,
452
- },
453
- tabs: [
454
- Tabs.ForYou,
455
- Tabs.Tutorials,
456
- Tabs.Transcriptions,
457
- Tabs.PlayAlongs,
458
- Tabs.JamTracks,
459
- Tabs.ExploreAll
460
- ],
461
- },
462
- 'recent': {
463
- name: 'Recent Lessons',
464
- tabs: [
465
- Tabs.RecentAll,
466
- Tabs.RecentIncomplete,
467
- Tabs.RecentCompleted
468
- ],
469
- },
178
+ 'songs-types': ['Tutorials', 'Tabs', 'Play-Alongs', 'Jam Tracks'],
179
+ },
180
+ playbass: {
181
+ 'songs-types': ['Tutorials', 'Tabs', 'Play-Alongs', 'Jam Tracks'],
470
182
  },
471
183
  singeo: {
472
- 'student-review': {
473
- thumbnailUrl: 'https://d1923uyy6spedc.cloudfront.net/student-reviews.png',
474
- icon: 'icon-student-focus',
475
- description:
476
- 'Want feedback on your singing? Submit a video for student review. We will watch your submission and then provide helpful encouragement and feedback. This is a great way to build accountability and benefit from the expertise of our teachers.',
477
- },
478
- 'songs': {
479
- name: 'Songs',
480
- filterOptions: {
481
- difficulty: DIFFICULTY_STRINGS,
482
- style: [
483
- 'Blues', 'Christian', 'Classical', 'Country', 'Disco', 'Electronic', 'Folk', 'Funk', 'Hip-Hop/Rap', 'Holiday', 'Jazz', 'Soundtrack',
484
- 'World', 'Metal', 'Pop', 'R&B/Soul', 'Rock'
485
- ],
486
- type: ['Tutorials', 'Sheet Music', 'Play-Alongs', 'Jam Tracks'],
487
- progress: PROGRESS_NAMES,
488
- },
489
- sortingOptions: {
490
- title: 'Sort By',
491
- type: 'radio',
492
- items: SortingOptions.AllSortingOptions,
493
- },
494
- tabs: [
495
- Tabs.ForYou,
496
- Tabs.Tutorials,
497
- Tabs.Transcriptions,
498
- Tabs.PlayAlongs,
499
- Tabs.JamTracks,
500
- Tabs.ExploreAll
501
- ],
502
- },
503
- 'recent': {
504
- name: 'Recent Lessons',
505
- tabs: [
506
- Tabs.RecentAll,
507
- Tabs.RecentIncomplete,
508
- Tabs.RecentCompleted
509
- ],
510
- },
184
+ 'songs-types': ['Tutorials', 'Sheet Music', 'Play-Alongs', 'Jam Tracks'],
511
185
  }
512
186
  }
513
187
 
@@ -519,22 +193,17 @@ export const typeWithSortOrder = [
519
193
 
520
194
  export function processMetadata(brand, type, withFilters = false) {
521
195
  let brandMetaData = contentMetadata[brand]?.[type]
522
- // If the type is explicitly defined as null or the brand doesn't exist return null
523
- // Specifically this is for drumeo.student-review
524
- if (brandMetaData === null) {
525
- return null
526
- }
527
196
  let commonMetaData = commonMetadata[type]
528
197
  brandMetaData = { ...commonMetaData, ...brandMetaData }
198
+ if (type === 'songs' && contentMetadata[brand]?.['songs-types']) {
199
+ brandMetaData['filterOptions']['type'] = contentMetadata[brand]['songs-types']
200
+ }
529
201
  if (Object.keys(brandMetaData).length === 0) {
530
202
  return null
531
203
  }
532
204
  const processedData = {
533
205
  type,
534
- thumbnailUrl: brandMetaData.thumbnailUrl || null,
535
206
  name: brandMetaData.name || null,
536
- description: brandMetaData.description || null,
537
- url: brandMetaData.url ? brand + brandMetaData.url : brand + '/' + type,
538
207
  sort: brandMetaData.sortingOptions || null,
539
208
  tabs: brandMetaData.tabs || [],
540
209
  }
@@ -545,7 +214,7 @@ export function processMetadata(brand, type, withFilters = false) {
545
214
 
546
215
  if (withFilters && !brandMetaData.filterOptions) {
547
216
  Object.keys(brandMetaData).forEach((key) => {
548
- if (!['thumbnailUrl', 'name', 'description'].includes(key)) {
217
+ if ('name' !== key) {
549
218
  processedData[key] = brandMetaData[key]
550
219
  }
551
220
  })
@@ -150,6 +150,7 @@ export const showsTypes = {
150
150
  pianote: ['student-review', 'question-and-answer'],
151
151
  guitareo: ['student-review', 'question-and-answer', 'archives', 'recording'],
152
152
  singeo: ['student-review', 'question-and-answer'],
153
+ playbass: ['student-review', 'question-and-answer'],
153
154
  }
154
155
 
155
156
  export const coachLessonsTypes = [
@@ -241,6 +242,7 @@ export const songs = {
241
242
  guitareo: 'tab',
242
243
  pianote: 'sheet music',
243
244
  singeo: 'sheet music',
245
+ playbass: 'tab',
244
246
  }
245
247
 
246
248
  export const filterTypes = {
@@ -631,6 +633,7 @@ export function getNewReleasesTypes(brand) {
631
633
  return [...baseNewTypes, 'archives', 'recording', 'chords-and-scales']
632
634
  case 'pianote':
633
635
  case 'singeo':
636
+ case 'playbass':
634
637
  default:
635
638
  return baseNewTypes
636
639
  }
@@ -678,8 +681,6 @@ export function getUpcomingEventsTypes(brand) {
678
681
  ]
679
682
  case 'guitareo':
680
683
  return [...baseLiveTypes, 'archives']
681
- case 'pianote':
682
- case 'singeo':
683
684
  default:
684
685
  return baseLiveTypes
685
686
  }
File without changes
package/src/index.d.ts CHANGED
@@ -313,7 +313,6 @@ import {
313
313
 
314
314
  import {
315
315
  login,
316
- loginWithProvider,
317
316
  logout
318
317
  } from './services/user/sessions.js';
319
318
 
@@ -530,7 +529,6 @@ declare module 'musora-content-services' {
530
529
  lockThread,
531
530
  logUserPractice,
532
531
  login,
533
- loginWithProvider,
534
532
  logout,
535
533
  markAllNotificationsAsRead,
536
534
  markContentAsInterested,
package/src/index.js CHANGED
@@ -313,7 +313,6 @@ import {
313
313
 
314
314
  import {
315
315
  login,
316
- loginWithProvider,
317
316
  logout
318
317
  } from './services/user/sessions.js';
319
318
 
@@ -529,7 +528,6 @@ export {
529
528
  lockThread,
530
529
  logUserPractice,
531
530
  login,
532
- loginWithProvider,
533
531
  logout,
534
532
  markAllNotificationsAsRead,
535
533
  markContentAsInterested,
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
@@ -1118,7 +1118,7 @@ async function processContentItem(content) {
1118
1118
  })
1119
1119
  content.time_remaining_seconds = timeRemaining.totalSeconds
1120
1120
  ctaText = 'Next lesson in ' + timeRemaining.formatted
1121
- } else if (!content.progressStatus || content.progressStatus === 'not-started') {
1121
+ } else if (!content.progressStatus || content.progressStatus === 'not-started' || content.progressPercentage === 0) {
1122
1122
  ctaText = 'Start Course'
1123
1123
  }
1124
1124
  }
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