musora-content-services 2.121.2 → 2.122.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 (233) hide show
  1. package/.claude/settings.local.json +16 -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/.yarnrc.yml +1 -0
  11. package/CHANGELOG.md +19 -0
  12. package/CLAUDE.md +0 -0
  13. package/README.md +0 -0
  14. package/babel.config.cjs +0 -0
  15. package/check_content.js +30 -0
  16. package/check_content.mjs +32 -0
  17. package/jest.config.js +0 -0
  18. package/jsdoc.json +0 -0
  19. package/package.json +1 -1
  20. package/src/constants/award-assets.js +0 -0
  21. package/src/constants/membership-permissions.ts +0 -0
  22. package/src/contentMetaData.js +36 -0
  23. package/src/contentTypeConfig.js +32 -5
  24. package/src/filterBuilder.js +0 -0
  25. package/src/index.d.ts +0 -0
  26. package/src/index.js +0 -0
  27. package/src/infrastructure/http/HttpClient.ts +0 -0
  28. package/src/infrastructure/http/executors/FetchRequestExecutor.ts +0 -0
  29. package/src/infrastructure/http/index.ts +0 -0
  30. package/src/infrastructure/http/interfaces/HeaderProvider.ts +0 -0
  31. package/src/infrastructure/http/interfaces/HttpError.ts +0 -0
  32. package/src/infrastructure/http/interfaces/NetworkError.ts +0 -0
  33. package/src/infrastructure/http/interfaces/RequestExecutor.ts +0 -0
  34. package/src/infrastructure/http/interfaces/RequestOptions.ts +0 -0
  35. package/src/infrastructure/http/providers/DefaultHeaderProvider.ts +0 -0
  36. package/src/lib/ads/monoid.ts +0 -0
  37. package/src/lib/ads/semigroup.ts +0 -0
  38. package/src/lib/brands.ts +0 -0
  39. package/src/lib/lastUpdated.js +0 -0
  40. package/src/lib/sanity/filter.ts +0 -0
  41. package/src/lib/sanity/query.ts +0 -0
  42. package/src/services/api/types.js +0 -0
  43. package/src/services/api/types.ts +0 -0
  44. package/src/services/awards/award-callbacks.js +0 -0
  45. package/src/services/awards/award-query.js +0 -0
  46. package/src/services/awards/internal/.indexignore +0 -0
  47. package/src/services/awards/internal/award-definitions.js +0 -0
  48. package/src/services/awards/internal/award-events.js +0 -0
  49. package/src/services/awards/internal/award-manager.js +0 -0
  50. package/src/services/awards/internal/certificate-builder.js +0 -0
  51. package/src/services/awards/internal/completion-data-generator.js +0 -0
  52. package/src/services/awards/internal/content-progress-observer.js +0 -0
  53. package/src/services/awards/internal/image-utils.js +0 -0
  54. package/src/services/awards/internal/message-generator.js +0 -0
  55. package/src/services/awards/internal/types.js +0 -0
  56. package/src/services/awards/types.d.ts +0 -0
  57. package/src/services/awards/types.js +0 -0
  58. package/src/services/config.js +0 -0
  59. package/src/services/content/artist.ts +0 -0
  60. package/src/services/content/content.ts +0 -0
  61. package/src/services/content/genre.ts +0 -0
  62. package/src/services/content/instructor.ts +0 -0
  63. package/src/services/content-org/content-org.js +0 -0
  64. package/src/services/content-org/guided-courses.ts +0 -0
  65. package/src/services/content-org/learning-paths.ts +0 -0
  66. package/src/services/content-org/playlists-types.js +0 -0
  67. package/src/services/content-org/playlists.js +0 -0
  68. package/src/services/content.js +0 -0
  69. package/src/services/contentAggregator.js +0 -0
  70. package/src/services/contentLikes.js +0 -0
  71. package/src/services/contentProgress.js +0 -0
  72. package/src/services/dataContext.js +0 -0
  73. package/src/services/dateUtils.js +0 -0
  74. package/src/services/eventsAPI.js +0 -0
  75. package/src/services/forums/categories.ts +0 -0
  76. package/src/services/forums/forums.ts +0 -0
  77. package/src/services/forums/posts.ts +0 -0
  78. package/src/services/forums/threads.ts +0 -0
  79. package/src/services/forums/types.ts +0 -0
  80. package/src/services/gamification/awards.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/liveTesting.ts +0 -0
  85. package/src/services/permissions/PermissionsAdapter.ts +0 -0
  86. package/src/services/permissions/PermissionsAdapterFactory.ts +0 -0
  87. package/src/services/permissions/PermissionsV1Adapter.ts +0 -0
  88. package/src/services/permissions/PermissionsV2Adapter.ts +0 -0
  89. package/src/services/permissions/README.md +0 -0
  90. package/src/services/permissions/index.ts +0 -0
  91. package/src/services/progress-events.js +0 -0
  92. package/src/services/progress-row/base.js +0 -0
  93. package/src/services/progress-row/rows/.indexignore +0 -0
  94. package/src/services/progress-row/rows/content-card.js +0 -0
  95. package/src/services/progress-row/rows/method-card.js +0 -0
  96. package/src/services/progress-row/rows/playlist-card.js +0 -0
  97. package/src/services/railcontent.js +0 -0
  98. package/src/services/recommendations.js +0 -0
  99. package/src/services/reporting/README.md +0 -0
  100. package/src/services/reporting/reporting.ts +0 -0
  101. package/src/services/reporting/types.ts +0 -0
  102. package/src/services/sanity.js +25 -52
  103. package/src/services/sentry/.indexignore +0 -0
  104. package/src/services/sentry/index.ts +0 -0
  105. package/src/services/sync/.indexignore +0 -0
  106. package/src/services/sync/adapters/factory.ts +0 -0
  107. package/src/services/sync/adapters/lokijs.ts +0 -0
  108. package/src/services/sync/adapters/sqlite.ts +0 -0
  109. package/src/services/sync/context/index.ts +0 -0
  110. package/src/services/sync/context/providers/base.ts +0 -0
  111. package/src/services/sync/context/providers/connectivity.ts +0 -0
  112. package/src/services/sync/context/providers/durability.ts +0 -0
  113. package/src/services/sync/context/providers/index.ts +0 -0
  114. package/src/services/sync/context/providers/session.ts +0 -0
  115. package/src/services/sync/context/providers/tabs.ts +0 -0
  116. package/src/services/sync/context/providers/visibility.ts +0 -0
  117. package/src/services/sync/database/factory.ts +0 -0
  118. package/src/services/sync/effects/index.ts +0 -0
  119. package/src/services/sync/effects/logout-warning.ts +0 -0
  120. package/src/services/sync/errors/boundary.ts +0 -0
  121. package/src/services/sync/errors/index.ts +0 -0
  122. package/src/services/sync/errors/validators.ts +0 -0
  123. package/src/services/sync/fetch.ts +0 -0
  124. package/src/services/sync/index.ts +0 -0
  125. package/src/services/sync/manager.ts +0 -0
  126. package/src/services/sync/models/Base.ts +0 -0
  127. package/src/services/sync/models/ContentLike.ts +0 -0
  128. package/src/services/sync/models/ContentProgress.ts +0 -0
  129. package/src/services/sync/models/Practice.ts +0 -0
  130. package/src/services/sync/models/PracticeDayNote.ts +0 -0
  131. package/src/services/sync/models/UserAwardProgress.ts +0 -0
  132. package/src/services/sync/models/index.ts +0 -0
  133. package/src/services/sync/repositories/base.ts +0 -0
  134. package/src/services/sync/repositories/content-likes.ts +0 -0
  135. package/src/services/sync/repositories/content-progress.ts +0 -0
  136. package/src/services/sync/repositories/index.ts +0 -0
  137. package/src/services/sync/repositories/practice-day-notes.ts +0 -0
  138. package/src/services/sync/repositories/practices.ts +0 -0
  139. package/src/services/sync/repositories/user-award-progress.ts +0 -0
  140. package/src/services/sync/repository-proxy.ts +0 -0
  141. package/src/services/sync/resolver.ts +0 -0
  142. package/src/services/sync/retry.ts +0 -0
  143. package/src/services/sync/run-scope.ts +0 -0
  144. package/src/services/sync/schema/index.ts +0 -0
  145. package/src/services/sync/serializers/index.ts +0 -0
  146. package/src/services/sync/serializers/model.ts +0 -0
  147. package/src/services/sync/serializers/raw.ts +0 -0
  148. package/src/services/sync/store/index.ts +0 -0
  149. package/src/services/sync/store/push-coalescer.ts +0 -0
  150. package/src/services/sync/store-configs.ts +0 -0
  151. package/src/services/sync/strategies/base.ts +0 -0
  152. package/src/services/sync/strategies/index.ts +0 -0
  153. package/src/services/sync/strategies/initial.ts +0 -0
  154. package/src/services/sync/strategies/polling.ts +0 -0
  155. package/src/services/sync/telemetry/flood-prevention.ts +0 -0
  156. package/src/services/sync/telemetry/index.ts +0 -0
  157. package/src/services/sync/telemetry/sampling.ts +0 -0
  158. package/src/services/sync/utils/event-emitter.ts +0 -0
  159. package/src/services/sync/utils/index.ts +0 -0
  160. package/src/services/sync/utils/throttle.ts +0 -0
  161. package/src/services/sync/utils/timers.ts +0 -0
  162. package/src/services/types.js +0 -0
  163. package/src/services/urlBuilder.ts +0 -0
  164. package/src/services/user/account.ts +5 -1
  165. package/src/services/user/chat.js +0 -0
  166. package/src/services/user/interests.js +0 -0
  167. package/src/services/user/management.js +0 -0
  168. package/src/services/user/memberships.ts +0 -0
  169. package/src/services/user/notifications.js +0 -0
  170. package/src/services/user/onboarding.ts +0 -0
  171. package/src/services/user/payments.ts +0 -0
  172. package/src/services/user/permissions.js +0 -0
  173. package/src/services/user/profile.js +0 -0
  174. package/src/services/user/sessions.js +0 -0
  175. package/src/services/user/types.d.ts +0 -0
  176. package/src/services/user/types.js +0 -0
  177. package/src/services/user/user-management-system.js +0 -0
  178. package/src/services/userActivity.js +0 -0
  179. package/test/HttpClient.test.js +0 -0
  180. package/test/awards/award-alacarte-observer.test.js +0 -0
  181. package/test/awards/award-auto-refresh.test.js +0 -0
  182. package/test/awards/award-calculations.test.js +0 -0
  183. package/test/awards/award-certificate-display.test.js +0 -0
  184. package/test/awards/award-collection-edge-cases.test.js +0 -0
  185. package/test/awards/award-collection-filtering.test.js +0 -0
  186. package/test/awards/award-completion-flow.test.js +0 -0
  187. package/test/awards/award-exclusion-handling.test.js +0 -0
  188. package/test/awards/award-multi-lesson.test.js +0 -0
  189. package/test/awards/award-observer-integration.test.js +0 -0
  190. package/test/awards/award-query-messages.test.js +0 -0
  191. package/test/awards/award-user-collection.test.js +0 -0
  192. package/test/awards/duplicate-prevention.test.js +0 -0
  193. package/test/awards/helpers/completion-mock.js +0 -0
  194. package/test/awards/helpers/index.js +0 -0
  195. package/test/awards/helpers/mock-setup.js +0 -0
  196. package/test/awards/helpers/progress-emitter.js +0 -0
  197. package/test/awards/message-generator.test.js +0 -0
  198. package/test/content.test.js +0 -0
  199. package/test/contentLikes.test.js +0 -0
  200. package/test/contentProgress.test.js +0 -0
  201. package/test/dataContext.test.js +0 -0
  202. package/test/forum.test.js +0 -0
  203. package/test/imageSRCBuilder.test.js +0 -0
  204. package/test/imageSRCVerify.test.js +0 -0
  205. package/test/initializeTests.js +0 -0
  206. package/test/learningPaths.test.js +0 -0
  207. package/test/lib/__snapshots__/filter.test.ts.snap +0 -0
  208. package/test/lib/filter.test.ts +0 -0
  209. package/test/lib/lastUpdated.test.js +0 -0
  210. package/test/lib/query.test.ts +0 -0
  211. package/test/live/contentProgressLive.test.js +0 -0
  212. package/test/live/railcontentLive.test.js +0 -0
  213. package/test/localStorageMock.js +0 -0
  214. package/test/log.js +0 -0
  215. package/test/logout.test.js +199 -0
  216. package/test/mockData/award-definitions.js +0 -0
  217. package/test/mockData/mockData_fetchByRailContentIds_one_content.json +0 -0
  218. package/test/mockData/mockData_progress_content.json +0 -0
  219. package/test/mockData/mockData_sanity_progress_content.json +0 -0
  220. package/test/mockData/mockData_user_practices.json +0 -0
  221. package/test/notifications.test.js +0 -0
  222. package/test/progressRows.test.js +0 -0
  223. package/test/reporting.test.js +132 -0
  224. package/test/sanityQueryService.test.js +0 -0
  225. package/test/streakMessage.test.js +0 -0
  226. package/test/sync/adapter.ts +0 -0
  227. package/test/sync/initialize-sync-manager.js +0 -0
  228. package/test/sync/models/award-database-integration.test.js +0 -0
  229. package/test/user/permissions.test.js +0 -0
  230. package/test/userActivity.test.js +0 -0
  231. package/test_owned_navigate.js +74 -0
  232. package/tools/generate-index.cjs +0 -0
  233. package/tsconfig.json +17 -0
@@ -0,0 +1,16 @@
1
+ {
2
+ "permissions": {
3
+ "allow": [
4
+ "Read(//app/musora-platform-backend/**)",
5
+ "Read(//app/musora-platform-frontend/**)",
6
+ "Bash(find:*)",
7
+ "Bash(sed:*)",
8
+ "Read(//app/**)",
9
+ "Bash(cat:*)",
10
+ "Bash(docker exec:*)",
11
+ "Bash(npm config:*)"
12
+ ],
13
+ "deny": [],
14
+ "ask": []
15
+ }
16
+ }
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/.yarnrc.yml ADDED
@@ -0,0 +1 @@
1
+ nodeLinker: node-modules
package/CHANGELOG.md CHANGED
@@ -2,6 +2,25 @@
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.122.0](https://github.com/railroadmedia/musora-content-services/compare/v2.118.1...v2.122.0) (2026-01-22)
6
+
7
+
8
+ ### Features
9
+
10
+ * add fetchLiveStreamData method ([aa9b704](https://github.com/railroadmedia/musora-content-services/commit/aa9b7046c7fc69e8b30c0f035577da62f8c5b5fd))
11
+ * add vimeo_live_event_id to GROQ queries ([d4fff6f](https://github.com/railroadmedia/musora-content-services/commit/d4fff6f09ca62682f6cead7e43f6979a56b86e0a))
12
+ * adds restore methods (for progress deletion undo) ([#705](https://github.com/railroadmedia/musora-content-services/issues/705)) ([b01a718](https://github.com/railroadmedia/musora-content-services/commit/b01a71892175b38789d62fffac0ce5f8e2e4513d))
13
+ * **TP-1060:** method data caching in mcs ([#701](https://github.com/railroadmedia/musora-content-services/issues/701)) ([25efc43](https://github.com/railroadmedia/musora-content-services/commit/25efc43b6c07172db2f20d51d5b79ac9fc204eef))
14
+ * update brand endpoint ([#719](https://github.com/railroadmedia/musora-content-services/issues/719)) ([4938b61](https://github.com/railroadmedia/musora-content-services/commit/4938b61c8526e31194b284c6daf172764b7900ed))
15
+
16
+
17
+ ### Bug Fixes
18
+
19
+ * adds live_global_event field where live_event_stream_id is returned ([#708](https://github.com/railroadmedia/musora-content-services/issues/708)) ([23c58f4](https://github.com/railroadmedia/musora-content-services/commit/23c58f42da866cd1035276c62c773b82c09d3aa5))
20
+ * better logs in Sentry for debugging ([#712](https://github.com/railroadmedia/musora-content-services/issues/712)) ([e1019b5](https://github.com/railroadmedia/musora-content-services/commit/e1019b50b0cf606b86e71028db0a2f9ac354cfca))
21
+ * remove unsupported collection types ([#713](https://github.com/railroadmedia/musora-content-services/issues/713)) ([0441941](https://github.com/railroadmedia/musora-content-services/commit/04419413ffea82303258b839c8e1e11b3a4c507a))
22
+ * **T3PS-1347:** Implement WatermelonDB-based streak calculator with year boundary fix ([916a8ef](https://github.com/railroadmedia/musora-content-services/commit/916a8ef532a858f82a8133d1725ad69ea3d550e9))
23
+
5
24
  ### [2.121.2](https://github.com/railroadmedia/musora-content-services/compare/v2.121.1...v2.121.2) (2026-01-20)
6
25
 
7
26
  ### [2.121.1](https://github.com/railroadmedia/musora-content-services/compare/v2.121.0...v2.121.1) (2026-01-20)
package/CLAUDE.md CHANGED
File without changes
package/README.md CHANGED
File without changes
package/babel.config.cjs CHANGED
File without changes
@@ -0,0 +1,30 @@
1
+ const { initializeService } = require('./src/services/config.js');
2
+ const { fetchByRailContentIds } = require('./src/services/sanity.js');
3
+ require('dotenv/config');
4
+
5
+ async function checkContent() {
6
+ initializeService({
7
+ sanityConfig: {
8
+ token: process.env.SANITY_TOKEN,
9
+ projectId: process.env.SANITY_PROJECT_ID,
10
+ dataset: process.env.SANITY_DATASET,
11
+ version: process.env.SANITY_VERSION || '2021-06-07',
12
+ },
13
+ railcontentConfig: {
14
+ token: process.env.RAILCONTENT_TOKEN,
15
+ userId: process.env.RAILCONTENT_USER_ID,
16
+ baseUrl: process.env.RAILCONTENT_BASE_URL,
17
+ authToken: process.env.RAILCONTENT_AUTH_TOKEN,
18
+ },
19
+ baseUrl: process.env.RAILCONTENT_BASE_URL,
20
+ localStorage: null,
21
+ isMA: false,
22
+ });
23
+
24
+ console.log('Checking railcontent_id: 421814');
25
+ const contents = await fetchByRailContentIds([421814]);
26
+ console.log('Results:', JSON.stringify(contents, null, 2));
27
+ console.log('Found:', contents.length, 'items');
28
+ }
29
+
30
+ checkContent().catch(console.error);
@@ -0,0 +1,32 @@
1
+ import { initializeService } from './src/services/config.js';
2
+ import { fetchByRailContentIds } from './src/services/sanity.js';
3
+ import dotenv from 'dotenv';
4
+
5
+ dotenv.config();
6
+
7
+ async function checkContent() {
8
+ initializeService({
9
+ sanityConfig: {
10
+ token: process.env.SANITY_TOKEN,
11
+ projectId: process.env.SANITY_PROJECT_ID,
12
+ dataset: process.env.SANITY_DATASET,
13
+ version: process.env.SANITY_VERSION || '2021-06-07',
14
+ },
15
+ railcontentConfig: {
16
+ token: process.env.RAILCONTENT_TOKEN,
17
+ userId: process.env.RAILCONTENT_USER_ID,
18
+ baseUrl: process.env.RAILCONTENT_BASE_URL,
19
+ authToken: process.env.RAILCONTENT_AUTH_TOKEN,
20
+ },
21
+ baseUrl: process.env.RAILCONTENT_BASE_URL,
22
+ localStorage: null,
23
+ isMA: false,
24
+ });
25
+
26
+ console.log('Checking railcontent_id: 421814');
27
+ const contents = await fetchByRailContentIds([421814]);
28
+ console.log('Results:', JSON.stringify(contents, null, 2));
29
+ console.log('Found:', contents.length, 'items');
30
+ }
31
+
32
+ checkContent().catch(console.error);
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.121.2",
3
+ "version": "2.122.0",
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
@@ -128,6 +128,7 @@ export class Tabs {
128
128
  static SingleLessons = { name: 'Single Lessons', short_name: 'Single Lessons', value: 'type,Single Lessons', recSysSection: 'lesson', }
129
129
  static SkillPacks = { name: 'Skill Packs', short_name: 'Skill Packs', value: 'type,Skill Packs', recSysSection: 'lesson', }
130
130
  static Entertainment = { name: 'Entertainment', short_name: 'Entertainment', value: 'type,Entertainment', recSysSection: 'lesson', }
131
+ static Routines = { name: 'Routines', short_name: 'Routines', value: 'type,routine', recSysSection: 'lesson', }
131
132
  }
132
133
 
133
134
  /**
@@ -325,6 +326,41 @@ const contentMetadata = {
325
326
  },
326
327
  singeo: {
327
328
  'songs-types': ['Tutorials', 'Sheet Music', 'Play-Alongs', 'Jam Tracks'],
329
+ lessons: {
330
+ name: 'Lessons',
331
+ filterOptions: {
332
+ difficulty: DIFFICULTY_STRINGS,
333
+ length: LengthFilterOptions.AllOptions,
334
+ style: [
335
+ 'Country/Folk',
336
+ 'Funk/Disco',
337
+ 'Hard Rock/Metal',
338
+ 'Hip-Hop/Rap/EDM',
339
+ 'Holiday/Soundtrack',
340
+ 'Jazz/Blues',
341
+ 'Latin/World',
342
+ 'Pop/Rock',
343
+ 'R&B/Soul',
344
+ 'Worship/Gospel',
345
+ ],
346
+ type: LESSON_TYPE_FILTER,
347
+ progress: PROGRESS_NAMES,
348
+ },
349
+ sortingOptions: {
350
+ title: 'Sort By',
351
+ type: 'radio',
352
+ items: SortingOptions.AllSortingOptions,
353
+ },
354
+ tabs: [
355
+ Tabs.ForYou,
356
+ Tabs.SingleLessons,
357
+ Tabs.Courses,
358
+ Tabs.SkillPacks,
359
+ Tabs.Routines,
360
+ Tabs.Entertainment,
361
+ Tabs.ExploreAll,
362
+ ],
363
+ },
328
364
  },
329
365
  }
330
366
 
@@ -50,7 +50,7 @@ export const DEFAULT_FIELDS = [
50
50
  "'image': thumbnail.asset->url",
51
51
  "'thumbnail': thumbnail.asset->url",
52
52
  'difficulty',
53
- 'difficulty_string',
53
+ difficultyStringField(),
54
54
  'published_on',
55
55
  "'type': _type",
56
56
  "'length_in_seconds' : coalesce(length_in_seconds, soundslice[0].soundslice_length_in_second)",
@@ -132,6 +132,23 @@ export const assignmentsField = `"assignments":assignment[]{
132
132
  "description": coalesce(assignment_description,'')
133
133
  },`
134
134
 
135
+ // todo: refactor live event queries to use this
136
+ export const liveFields = `
137
+ 'slug': slug.current,
138
+ 'id': railcontent_id,
139
+ title,
140
+ live_event_start_time,
141
+ live_event_end_time,
142
+ live_event_stream_id,
143
+ "live_event_is_global": live_global_event == true,
144
+ published_on,
145
+ "thumbnail": thumbnail.asset->url,
146
+ ${artistOrInstructorName()},
147
+ difficulty_string,
148
+ "instructors": ${instructorField},
149
+ 'videoId': coalesce(live_event_stream_id, video.external_id)
150
+ `
151
+
135
152
  const contentWithInstructorsField = {
136
153
  fields: ['"instructors": instructor[]->name'],
137
154
  }
@@ -224,7 +241,7 @@ export const collectionLessonTypes = [...coursesLessonTypes, ...showsLessonTypes
224
241
 
225
242
  export const lessonTypesMapping = {
226
243
  lessons: singleLessonTypes,
227
- 'practice alongs': practiceAlongsLessonTypes,
244
+ 'practice alongs': [ ...practiceAlongsLessonTypes, 'routine'],
228
245
  'live archives': liveArchivesLessonTypes,
229
246
  performances: performancesLessonTypes,
230
247
  'student archives': studentArchivesLessonTypes,
@@ -250,6 +267,7 @@ export const lessonTypesMapping = {
250
267
  ...studentArchivesLessonTypes,
251
268
  ...practiceAlongsLessonTypes,
252
269
  ],
270
+ routines: ['routine']
253
271
  }
254
272
 
255
273
  export const getNextLessonLessonParentTypes = [
@@ -270,7 +288,8 @@ export const progressTypesMapping = {
270
288
  ...studentArchivesLessonTypes,
271
289
  'documentary-lesson',
272
290
  'live',
273
- 'course-lesson'
291
+ 'course-lesson',
292
+ 'routine'
274
293
  ],
275
294
  course: ['course'],
276
295
  show: showsLessonTypes,
@@ -302,6 +321,7 @@ export const filterTypes = {
302
321
  ...coursesLessonTypes,
303
322
  ...skillLessonTypes,
304
323
  ...entertainmentLessonTypes,
324
+ 'routine'
305
325
  ],
306
326
  songs: [
307
327
  ...tutorialsLessonTypes,
@@ -314,9 +334,12 @@ export const filterTypes = {
314
334
  export const recentTypes = {
315
335
  lessons: [
316
336
  ...individualLessonsTypes,
337
+ ...skillLessonTypes,
338
+ ...entertainmentLessonTypes,
317
339
  'course-lesson',
318
340
  'guided-course-lesson',
319
341
  'quick-tips',
342
+ 'routine'
320
343
  ],
321
344
  songs: [...SONG_TYPES],
322
345
  home: [
@@ -331,6 +354,7 @@ export const recentTypes = {
331
354
  'live',
332
355
  'course',
333
356
  'course-collection',
357
+ 'routine'
334
358
  ],
335
359
  }
336
360
 
@@ -666,7 +690,7 @@ export function getNewReleasesTypes(brand) {
666
690
  'quick-tips',
667
691
  'workout',
668
692
  'podcasts',
669
- 'pack',
693
+ 'course-collection',
670
694
  'song',
671
695
  'play-along',
672
696
  'course',
@@ -703,7 +727,6 @@ export function getUpcomingEventsTypes(brand) {
703
727
  'boot-camp',
704
728
  'quick-tips',
705
729
  'recording',
706
- 'pack-bundle-lesson',
707
730
  ]
708
731
  switch (brand) {
709
732
  case 'drumeo':
@@ -732,6 +755,10 @@ export function artistOrInstructorNameAsArray(key = 'artists') {
732
755
  return `'${key}': select(artist->name != null => [artist->name], instructor[]->name)`
733
756
  }
734
757
 
758
+ export function difficultyStringField(key = 'difficulty_string') {
759
+ return `'${key}': select(difficulty_string == 'Novice' => 'Introductory', difficulty_string)`
760
+ }
761
+
735
762
  export async function getFieldsForContentTypeWithFilteredChildren(
736
763
  contentType,
737
764
  asQueryString = true
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
package/src/lib/brands.ts 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
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes