musora-content-services 2.107.1 → 2.107.3

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 (210) 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/conventional-commits.yaml +0 -0
  5. package/.github/workflows/docs.js.yml +0 -0
  6. package/.github/workflows/node.js.yml +0 -0
  7. package/.prettierignore +0 -0
  8. package/.prettierrc +0 -0
  9. package/CHANGELOG.md +11 -0
  10. package/CLAUDE.md +0 -0
  11. package/README.md +0 -0
  12. package/babel.config.cjs +0 -0
  13. package/jest.config.js +0 -0
  14. package/jsdoc.json +0 -0
  15. package/package.json +1 -1
  16. package/src/constants/award-assets.js +0 -0
  17. package/src/contentMetaData.js +0 -0
  18. package/src/filterBuilder.js +0 -0
  19. package/src/index.d.ts +2 -4
  20. package/src/index.js +2 -4
  21. package/src/infrastructure/http/executors/FetchRequestExecutor.ts +0 -0
  22. package/src/infrastructure/http/index.ts +0 -0
  23. package/src/infrastructure/http/interfaces/HeaderProvider.ts +0 -0
  24. package/src/infrastructure/http/interfaces/HttpError.ts +0 -0
  25. package/src/infrastructure/http/interfaces/NetworkError.ts +0 -0
  26. package/src/infrastructure/http/interfaces/RequestExecutor.ts +0 -0
  27. package/src/infrastructure/http/interfaces/RequestOptions.ts +0 -0
  28. package/src/infrastructure/http/providers/DefaultHeaderProvider.ts +0 -0
  29. package/src/lib/ads/monoid.ts +0 -0
  30. package/src/lib/ads/semigroup.ts +0 -0
  31. package/src/lib/brands.ts +0 -0
  32. package/src/lib/lastUpdated.js +0 -0
  33. package/src/lib/sanity/filter.ts +0 -0
  34. package/src/lib/sanity/query.ts +0 -0
  35. package/src/services/api/types.js +0 -0
  36. package/src/services/api/types.ts +0 -0
  37. package/src/services/awards/award-callbacks.js +0 -0
  38. package/src/services/awards/award-query.js +0 -0
  39. package/src/services/awards/internal/.indexignore +0 -0
  40. package/src/services/awards/internal/award-definitions.js +0 -0
  41. package/src/services/awards/internal/award-events.js +0 -0
  42. package/src/services/awards/internal/award-manager.js +0 -0
  43. package/src/services/awards/internal/certificate-builder.js +0 -0
  44. package/src/services/awards/internal/completion-data-generator.js +0 -0
  45. package/src/services/awards/internal/content-progress-observer.js +0 -0
  46. package/src/services/awards/internal/image-utils.js +0 -0
  47. package/src/services/awards/internal/message-generator.js +0 -0
  48. package/src/services/awards/internal/types.js +0 -0
  49. package/src/services/awards/types.d.ts +0 -0
  50. package/src/services/awards/types.js +0 -0
  51. package/src/services/config.js +0 -0
  52. package/src/services/content/artist.ts +5 -5
  53. package/src/services/content/content.ts +0 -0
  54. package/src/services/content/genre.ts +5 -5
  55. package/src/services/content/instructor.ts +7 -6
  56. package/src/services/content-org/content-org.js +0 -0
  57. package/src/services/content-org/playlists-types.js +0 -0
  58. package/src/services/content.js +0 -0
  59. package/src/services/contentAggregator.js +0 -0
  60. package/src/services/contentLikes.js +0 -0
  61. package/src/services/contentProgress.js +0 -0
  62. package/src/services/dataContext.js +0 -0
  63. package/src/services/dateUtils.js +0 -0
  64. package/src/services/eventsAPI.js +0 -0
  65. package/src/services/forums/categories.ts +0 -0
  66. package/src/services/forums/forums.ts +0 -0
  67. package/src/services/forums/posts.ts +0 -0
  68. package/src/services/forums/threads.ts +0 -0
  69. package/src/services/forums/types.ts +0 -0
  70. package/src/services/gamification/awards.ts +0 -0
  71. package/src/services/gamification/gamification.js +0 -0
  72. package/src/services/imageSRCBuilder.js +0 -0
  73. package/src/services/imageSRCVerify.js +0 -0
  74. package/src/services/liveTesting.ts +0 -0
  75. package/src/services/permissions/PermissionsAdapter.ts +0 -0
  76. package/src/services/permissions/PermissionsAdapterFactory.ts +0 -0
  77. package/src/services/permissions/PermissionsV1Adapter.ts +0 -0
  78. package/src/services/permissions/PermissionsV2Adapter.ts +0 -0
  79. package/src/services/permissions/README.md +0 -0
  80. package/src/services/permissions/index.ts +0 -0
  81. package/src/services/progress-events.js +0 -0
  82. package/src/services/progress-row/method-card.js +0 -0
  83. package/src/services/railcontent.js +0 -0
  84. package/src/services/reporting/README.md +0 -0
  85. package/src/services/reporting/reporting.ts +0 -0
  86. package/src/services/reporting/types.ts +0 -0
  87. package/src/services/sentry/.indexignore +0 -0
  88. package/src/services/sentry/index.ts +0 -0
  89. package/src/services/sync/.indexignore +0 -0
  90. package/src/services/sync/adapters/factory.ts +0 -0
  91. package/src/services/sync/adapters/lokijs.ts +0 -0
  92. package/src/services/sync/adapters/sqlite.ts +0 -0
  93. package/src/services/sync/concurrency-safety.ts +0 -0
  94. package/src/services/sync/context/index.ts +0 -0
  95. package/src/services/sync/context/providers/base.ts +0 -0
  96. package/src/services/sync/context/providers/connectivity.ts +0 -0
  97. package/src/services/sync/context/providers/durability.ts +0 -0
  98. package/src/services/sync/context/providers/index.ts +0 -0
  99. package/src/services/sync/context/providers/session.ts +0 -0
  100. package/src/services/sync/context/providers/tabs.ts +0 -0
  101. package/src/services/sync/context/providers/visibility.ts +0 -0
  102. package/src/services/sync/database/factory.ts +0 -0
  103. package/src/services/sync/errors/boundary.ts +0 -0
  104. package/src/services/sync/errors/index.ts +0 -0
  105. package/src/services/sync/errors/validators.ts +0 -0
  106. package/src/services/sync/fetch.ts +0 -0
  107. package/src/services/sync/index.ts +0 -0
  108. package/src/services/sync/manager.ts +0 -0
  109. package/src/services/sync/models/Base.ts +0 -0
  110. package/src/services/sync/models/ContentLike.ts +0 -0
  111. package/src/services/sync/models/ContentProgress.ts +0 -0
  112. package/src/services/sync/models/Practice.ts +0 -0
  113. package/src/services/sync/models/PracticeDayNote.ts +0 -0
  114. package/src/services/sync/models/UserAwardProgress.ts +0 -0
  115. package/src/services/sync/models/index.ts +0 -0
  116. package/src/services/sync/repositories/base.ts +0 -0
  117. package/src/services/sync/repositories/content-likes.ts +0 -0
  118. package/src/services/sync/repositories/content-progress.ts +0 -0
  119. package/src/services/sync/repositories/index.ts +0 -0
  120. package/src/services/sync/repositories/practice-day-notes.ts +0 -0
  121. package/src/services/sync/repositories/practices.ts +0 -0
  122. package/src/services/sync/repositories/user-award-progress.ts +0 -0
  123. package/src/services/sync/repository-proxy.ts +0 -0
  124. package/src/services/sync/resolver.ts +0 -0
  125. package/src/services/sync/retry.ts +0 -0
  126. package/src/services/sync/run-scope.ts +0 -0
  127. package/src/services/sync/schema/index.ts +0 -0
  128. package/src/services/sync/serializers/index.ts +0 -0
  129. package/src/services/sync/serializers/model.ts +0 -0
  130. package/src/services/sync/serializers/raw.ts +0 -0
  131. package/src/services/sync/store/index.ts +0 -0
  132. package/src/services/sync/store/push-coalescer.ts +0 -0
  133. package/src/services/sync/store-configs.ts +0 -0
  134. package/src/services/sync/strategies/base.ts +0 -0
  135. package/src/services/sync/strategies/index.ts +0 -0
  136. package/src/services/sync/strategies/initial.ts +0 -0
  137. package/src/services/sync/strategies/polling.ts +0 -0
  138. package/src/services/sync/telemetry/index.ts +0 -0
  139. package/src/services/sync/telemetry/sampling.ts +0 -0
  140. package/src/services/sync/utils/event-emitter.ts +0 -0
  141. package/src/services/sync/utils/index.ts +0 -0
  142. package/src/services/sync/utils/throttle.ts +0 -0
  143. package/src/services/sync/utils/timers.ts +0 -0
  144. package/src/services/types.js +0 -0
  145. package/src/services/user/account.ts +0 -0
  146. package/src/services/user/memberships.ts +0 -0
  147. package/src/services/user/onboarding.ts +12 -122
  148. package/src/services/user/payments.ts +0 -0
  149. package/src/services/user/permissions.js +0 -0
  150. package/src/services/user/sessions.js +25 -33
  151. package/src/services/user/types.d.ts +0 -0
  152. package/src/services/user/types.js +6 -0
  153. package/src/services/user/user-management-system.js +0 -0
  154. package/test/HttpClient.test.js +0 -0
  155. package/test/awards/award-alacarte-observer.test.js +0 -0
  156. package/test/awards/award-auto-refresh.test.js +0 -0
  157. package/test/awards/award-calculations.test.js +0 -0
  158. package/test/awards/award-certificate-display.test.js +0 -0
  159. package/test/awards/award-collection-edge-cases.test.js +0 -0
  160. package/test/awards/award-collection-filtering.test.js +0 -0
  161. package/test/awards/award-completion-flow.test.js +0 -0
  162. package/test/awards/award-exclusion-handling.test.js +0 -0
  163. package/test/awards/award-multi-lesson.test.js +0 -0
  164. package/test/awards/award-observer-integration.test.js +0 -0
  165. package/test/awards/award-query-messages.test.js +0 -0
  166. package/test/awards/award-user-collection.test.js +0 -0
  167. package/test/awards/duplicate-prevention.test.js +0 -0
  168. package/test/awards/helpers/completion-mock.js +0 -0
  169. package/test/awards/helpers/index.js +0 -0
  170. package/test/awards/helpers/mock-setup.js +0 -0
  171. package/test/awards/helpers/progress-emitter.js +0 -0
  172. package/test/awards/message-generator.test.js +0 -0
  173. package/test/content.test.js +0 -0
  174. package/test/contentLikes.test.js +0 -0
  175. package/test/contentProgress.test.js +0 -0
  176. package/test/dataContext.test.js +0 -0
  177. package/test/forum.test.js +0 -0
  178. package/test/imageSRCBuilder.test.js +0 -0
  179. package/test/imageSRCVerify.test.js +0 -0
  180. package/test/initializeTests.js +0 -0
  181. package/test/learningPaths.test.js +0 -0
  182. package/test/lib/__snapshots__/filter.test.ts.snap +0 -0
  183. package/test/lib/filter.test.ts +0 -0
  184. package/test/lib/lastUpdated.test.js +0 -0
  185. package/test/lib/query.test.ts +0 -0
  186. package/test/live/contentProgressLive.test.js +0 -0
  187. package/test/live/railcontentLive.test.js +0 -0
  188. package/test/localStorageMock.js +0 -0
  189. package/test/log.js +0 -0
  190. package/test/mockData/award-definitions.js +0 -0
  191. package/test/mockData/mockData_fetchByRailContentIds_one_content.json +0 -0
  192. package/test/mockData/mockData_progress_content.json +0 -0
  193. package/test/mockData/mockData_sanity_progress_content.json +0 -0
  194. package/test/mockData/mockData_user_practices.json +0 -0
  195. package/test/notifications.test.js +0 -0
  196. package/test/progressRows.test.js +0 -0
  197. package/test/sanityQueryService.test.js +0 -0
  198. package/test/streakMessage.test.js +0 -0
  199. package/test/sync/adapter.ts +0 -0
  200. package/test/sync/initialize-sync-manager.js +0 -0
  201. package/test/sync/models/award-database-integration.test.js +0 -0
  202. package/test/user/permissions.test.js +0 -0
  203. package/test/userActivity.test.js +0 -0
  204. package/tools/generate-index.cjs +0 -0
  205. package/.claude/settings.local.json +0 -16
  206. package/.yarnrc.yml +0 -1
  207. package/check_content.js +0 -30
  208. package/check_content.mjs +0 -32
  209. package/test/reporting.test.js +0 -132
  210. package/test_owned_navigate.js +0 -74
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,17 @@
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.107.3](https://github.com/railroadmedia/musora-content-services/compare/v2.107.2...v2.107.3) (2025-12-19)
6
+
7
+
8
+ ### Bug Fixes
9
+
10
+ * **AGI:** contentType optional ([deae293](https://github.com/railroadmedia/musora-content-services/commit/deae2934c26ea0b9ee4d68c736fbb5753616a5e9))
11
+ * **AGI:** return children on AGI lessons functions ([#671](https://github.com/railroadmedia/musora-content-services/issues/671)) ([92ed791](https://github.com/railroadmedia/musora-content-services/commit/92ed791ce563aa4f1bf16cb41d2b6fe421504064))
12
+ * **onboarding:** call BE for recommendation ([#670](https://github.com/railroadmedia/musora-content-services/issues/670)) ([a876736](https://github.com/railroadmedia/musora-content-services/commit/a8767363ff3428638bde477cd6c30e5bf61179b2))
13
+
14
+ ### [2.107.2](https://github.com/railroadmedia/musora-content-services/compare/v2.107.1...v2.107.2) (2025-12-19)
15
+
5
16
  ### [2.107.1](https://github.com/railroadmedia/musora-content-services/compare/v2.107.0...v2.107.1) (2025-12-19)
6
17
 
7
18
  ## [2.107.0](https://github.com/railroadmedia/musora-content-services/compare/v2.105.0...v2.107.0) (2025-12-19)
package/CLAUDE.md CHANGED
File without changes
package/README.md CHANGED
File without changes
package/babel.config.cjs CHANGED
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.107.1",
3
+ "version": "2.107.3",
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
File without changes
package/src/index.d.ts CHANGED
@@ -396,9 +396,8 @@ import {
396
396
  } from './services/user/profile.js';
397
397
 
398
398
  import {
399
- getAuthKey,
399
+ generateAuthSessionUrl,
400
400
  login,
401
- loginWithAuthKey,
402
401
  logout
403
402
  } from './services/user/sessions.js';
404
403
 
@@ -580,13 +579,13 @@ declare module 'musora-content-services' {
580
579
  fetchUserPractices,
581
580
  findIncompleteLesson,
582
581
  followThread,
582
+ generateAuthSessionUrl,
583
583
  getActiveDiscussions,
584
584
  getActivePath,
585
585
  getAllCompleted,
586
586
  getAllCompletedByIds,
587
587
  getAllStarted,
588
588
  getAllStartedOrCompleted,
589
- getAuthKey,
590
589
  getAwardStatistics,
591
590
  getCompletedAwards,
592
591
  getContentAwards,
@@ -650,7 +649,6 @@ declare module 'musora-content-services' {
650
649
  likePost,
651
650
  lockThread,
652
651
  login,
653
- loginWithAuthKey,
654
652
  logout,
655
653
  mapContentToParent,
656
654
  markAllNotificationsAsRead,
package/src/index.js CHANGED
@@ -400,9 +400,8 @@ import {
400
400
  } from './services/user/profile.js';
401
401
 
402
402
  import {
403
- getAuthKey,
403
+ generateAuthSessionUrl,
404
404
  login,
405
- loginWithAuthKey,
406
405
  logout
407
406
  } from './services/user/sessions.js';
408
407
 
@@ -579,13 +578,13 @@ export {
579
578
  fetchUserPractices,
580
579
  findIncompleteLesson,
581
580
  followThread,
581
+ generateAuthSessionUrl,
582
582
  getActiveDiscussions,
583
583
  getActivePath,
584
584
  getAllCompleted,
585
585
  getAllCompletedByIds,
586
586
  getAllStarted,
587
587
  getAllStartedOrCompleted,
588
- getAuthKey,
589
588
  getAwardStatistics,
590
589
  getCompletedAwards,
591
590
  getContentAwards,
@@ -649,7 +648,6 @@ export {
649
648
  likePost,
650
649
  lockThread,
651
650
  login,
652
- loginWithAuthKey,
653
651
  logout,
654
652
  mapContentToParent,
655
653
  markAllNotificationsAsRead,
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
@@ -1,12 +1,12 @@
1
1
  /**
2
2
  * @module Artist
3
3
  */
4
- import { getFieldsForContentType } from '../../contentTypeConfig.js'
4
+ import { getFieldsForContentTypeWithFilteredChildren } from '../../contentTypeConfig.js'
5
+ import { Brands } from '../../lib/brands'
6
+ import { Filters as f } from '../../lib/sanity/filter'
5
7
  import { BuildQueryOptions, query } from '../../lib/sanity/query'
6
8
  import { fetchSanity, getSortOrder } from '../sanity.js'
7
9
  import { Lesson } from './content'
8
- import { Brands } from '../../lib/brands'
9
- import { Filters as f } from '../../lib/sanity/filter'
10
10
 
11
11
  export interface Artist {
12
12
  slug: string
@@ -123,7 +123,7 @@ export interface ArtistLessons {
123
123
  export async function fetchArtistLessons(
124
124
  slug: string,
125
125
  brand: Brands | string,
126
- contentType: string,
126
+ contentType?: string,
127
127
  {
128
128
  sort = '-published_on',
129
129
  searchTerm = '',
@@ -150,7 +150,7 @@ export async function fetchArtistLessons(
150
150
  .and(restrictions)
151
151
  .order(sort)
152
152
  .slice(offset, limit)
153
- .select(getFieldsForContentType(contentType) as string)
153
+ .select((await getFieldsForContentTypeWithFilteredChildren(contentType, true)) as string)
154
154
  .build()
155
155
 
156
156
  const total = query().and(restrictions).build()
File without changes
@@ -1,12 +1,12 @@
1
1
  /**
2
2
  * @module Genre
3
3
  */
4
- import { getFieldsForContentType } from '../../contentTypeConfig.js'
5
- import { fetchSanity, getSortOrder } from '../sanity.js'
6
- import { Lesson } from './content'
7
- import { BuildQueryOptions, query } from '../../lib/sanity/query'
4
+ import { getFieldsForContentTypeWithFilteredChildren } from '../../contentTypeConfig.js'
8
5
  import { Brands } from '../../lib/brands'
9
6
  import { Filters as f } from '../../lib/sanity/filter'
7
+ import { BuildQueryOptions, query } from '../../lib/sanity/query'
8
+ import { fetchSanity, getSortOrder } from '../sanity.js'
9
+ import { Lesson } from './content'
10
10
 
11
11
  export interface Genre {
12
12
  name: string
@@ -149,7 +149,7 @@ export async function fetchGenreLessons(
149
149
  .and(restrictions)
150
150
  .order(sort)
151
151
  .slice(offset, limit)
152
- .select(getFieldsForContentType(contentType) as string)
152
+ .select((await getFieldsForContentTypeWithFilteredChildren(contentType, true)) as string)
153
153
  .build()
154
154
 
155
155
  const total = query().and(restrictions).build()
@@ -1,12 +1,12 @@
1
1
  /**
2
2
  * @module Instructor
3
3
  */
4
- import { getFieldsForContentType } from '../../contentTypeConfig.js'
5
- import { fetchSanity, getSortOrder } from '../sanity.js'
6
- import { Lesson } from './content'
7
- import { BuildQueryOptions, query } from '../../lib/sanity/query'
4
+ import { getFieldsForContentTypeWithFilteredChildren } from '../../contentTypeConfig.js'
8
5
  import { Brands } from '../../lib/brands'
9
6
  import { Filters as f } from '../../lib/sanity/filter'
7
+ import { BuildQueryOptions, query } from '../../lib/sanity/query'
8
+ import { fetchSanity, getSortOrder } from '../sanity.js'
9
+ import { Lesson } from './content'
10
10
 
11
11
  export interface Instructor {
12
12
  lesson_count: number
@@ -106,7 +106,7 @@ export interface InstructorLessons {
106
106
  * Fetch the data needed for the instructor screen.
107
107
  * @param {string} slug - The slug of the instructor
108
108
  * @param {Brands|string} brand - The brand for which to fetch instructor lessons
109
- *
109
+ * @param {string|null} [contentType] - The content type to filter lessons by (e.g., 'lesson', 'course').
110
110
  * @param {FetchInstructorLessonsOptions} options - Parameters for pagination, filtering and sorting.
111
111
  * @param {string} [options.sortOrder="-published_on"] - The field to sort the lessons by.
112
112
  * @param {string} [options.searchTerm=""] - The search term to filter content by title.
@@ -123,6 +123,7 @@ export interface InstructorLessons {
123
123
  export async function fetchInstructorLessons(
124
124
  slug: string,
125
125
  brand: Brands | string,
126
+ contentType?: string,
126
127
  {
127
128
  sort = '-published_on',
128
129
  searchTerm = '',
@@ -147,7 +148,7 @@ export async function fetchInstructorLessons(
147
148
  .and(restrictions)
148
149
  .order(sort)
149
150
  .slice(offset, limit)
150
- .select(getFieldsForContentType() as string)
151
+ .select((await getFieldsForContentTypeWithFilteredChildren(contentType, true)) as string)
151
152
  .build()
152
153
 
153
154
  const total = query().and(restrictions).build()
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes