musora-content-services 2.138.0 → 2.138.1

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 (222) 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/.prettierignore +0 -0
  7. package/.prettierrc +0 -0
  8. package/CHANGELOG.md +7 -0
  9. package/CLAUDE.md +0 -0
  10. package/README.md +0 -0
  11. package/babel.config.cjs +0 -0
  12. package/jest.config.js +0 -0
  13. package/jsdoc.json +0 -0
  14. package/package.json +1 -1
  15. package/src/constants/award-assets.js +0 -0
  16. package/src/constants/membership-permissions.ts +0 -0
  17. package/src/contentMetaData.js +0 -0
  18. package/src/filterBuilder.js +0 -0
  19. package/src/infrastructure/http/HttpClient.ts +0 -0
  20. package/src/infrastructure/http/executors/FetchRequestExecutor.ts +0 -0
  21. package/src/infrastructure/http/index.ts +0 -0
  22. package/src/infrastructure/http/interfaces/HeaderProvider.ts +0 -0
  23. package/src/infrastructure/http/interfaces/HttpError.ts +0 -0
  24. package/src/infrastructure/http/interfaces/NetworkError.ts +0 -0
  25. package/src/infrastructure/http/interfaces/RequestExecutor.ts +0 -0
  26. package/src/infrastructure/http/interfaces/RequestOptions.ts +0 -0
  27. package/src/infrastructure/http/providers/DefaultHeaderProvider.ts +0 -0
  28. package/src/lib/ads/monoid.ts +0 -0
  29. package/src/lib/ads/semigroup.ts +0 -0
  30. package/src/lib/brands.ts +0 -0
  31. package/src/lib/lastUpdated.js +0 -0
  32. package/src/lib/sanity/field-access.ts +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 +0 -0
  53. package/src/services/content/content.ts +0 -0
  54. package/src/services/content/genre.ts +0 -0
  55. package/src/services/content/instructor.ts +0 -0
  56. package/src/services/content-org/content-org.js +0 -0
  57. package/src/services/content-org/guided-courses.ts +0 -0
  58. package/src/services/content-org/playlists-types.js +0 -0
  59. package/src/services/content-org/playlists.js +0 -0
  60. package/src/services/content.js +0 -0
  61. package/src/services/contentAggregator.js +0 -0
  62. package/src/services/contentLikes.js +0 -0
  63. package/src/services/contentProgress.js +4 -14
  64. package/src/services/dataContext.js +0 -0
  65. package/src/services/dateUtils.js +0 -0
  66. package/src/services/eventsAPI.js +0 -0
  67. package/src/services/forums/categories.ts +0 -0
  68. package/src/services/forums/forums.ts +0 -0
  69. package/src/services/forums/posts.ts +0 -0
  70. package/src/services/forums/types.ts +0 -0
  71. package/src/services/gamification/awards.ts +0 -0
  72. package/src/services/gamification/gamification.js +0 -0
  73. package/src/services/imageSRCBuilder.js +0 -0
  74. package/src/services/imageSRCVerify.js +0 -0
  75. package/src/services/liveTesting.ts +0 -0
  76. package/src/services/permissions/PermissionsAdapter.ts +0 -0
  77. package/src/services/permissions/PermissionsAdapterFactory.ts +0 -0
  78. package/src/services/permissions/PermissionsV1Adapter.ts +0 -0
  79. package/src/services/permissions/PermissionsV2Adapter.ts +0 -0
  80. package/src/services/permissions/README.md +0 -0
  81. package/src/services/permissions/index.ts +0 -0
  82. package/src/services/progress-events.js +0 -0
  83. package/src/services/progress-row/base.js +0 -0
  84. package/src/services/progress-row/rows/.indexignore +0 -0
  85. package/src/services/progress-row/rows/content-card.js +0 -0
  86. package/src/services/progress-row/rows/method-card.js +0 -0
  87. package/src/services/progress-row/rows/playlist-card.js +0 -0
  88. package/src/services/railcontent.js +0 -0
  89. package/src/services/recommendations.js +0 -0
  90. package/src/services/reporting/README.md +0 -0
  91. package/src/services/reporting/reporting.ts +0 -0
  92. package/src/services/reporting/types.ts +0 -0
  93. package/src/services/sentry/.indexignore +0 -0
  94. package/src/services/sentry/index.ts +0 -0
  95. package/src/services/state.ts +0 -0
  96. package/src/services/sync/.indexignore +0 -0
  97. package/src/services/sync/adapters/factory.ts +0 -0
  98. package/src/services/sync/adapters/lokijs.ts +0 -0
  99. package/src/services/sync/adapters/sqlite.ts +0 -0
  100. package/src/services/sync/context/index.ts +0 -0
  101. package/src/services/sync/context/providers/base.ts +0 -0
  102. package/src/services/sync/context/providers/connectivity.ts +0 -0
  103. package/src/services/sync/context/providers/durability.ts +0 -0
  104. package/src/services/sync/context/providers/index.ts +0 -0
  105. package/src/services/sync/context/providers/session.ts +0 -0
  106. package/src/services/sync/context/providers/tabs.ts +0 -0
  107. package/src/services/sync/context/providers/visibility.ts +0 -0
  108. package/src/services/sync/database/factory.ts +0 -0
  109. package/src/services/sync/effects/index.ts +0 -0
  110. package/src/services/sync/effects/logout-warning.ts +0 -0
  111. package/src/services/sync/effects/push-failure-notification.ts +0 -0
  112. package/src/services/sync/errors/boundary.ts +0 -0
  113. package/src/services/sync/errors/index.ts +0 -0
  114. package/src/services/sync/errors/validators.ts +0 -0
  115. package/src/services/sync/fetch.ts +0 -0
  116. package/src/services/sync/index.ts +0 -0
  117. package/src/services/sync/manager.ts +0 -0
  118. package/src/services/sync/models/Base.ts +0 -0
  119. package/src/services/sync/models/ContentLike.ts +0 -0
  120. package/src/services/sync/models/ContentProgress.ts +0 -0
  121. package/src/services/sync/models/Practice.ts +0 -0
  122. package/src/services/sync/models/PracticeDayNote.ts +0 -0
  123. package/src/services/sync/models/UserAwardProgress.ts +0 -0
  124. package/src/services/sync/models/index.ts +0 -0
  125. package/src/services/sync/repositories/base.ts +0 -0
  126. package/src/services/sync/repositories/content-likes.ts +0 -0
  127. package/src/services/sync/repositories/content-progress.ts +0 -0
  128. package/src/services/sync/repositories/index.ts +0 -0
  129. package/src/services/sync/repositories/practice-day-notes.ts +0 -0
  130. package/src/services/sync/repositories/practices.ts +0 -0
  131. package/src/services/sync/repositories/user-award-progress.ts +0 -0
  132. package/src/services/sync/repository-proxy.ts +0 -0
  133. package/src/services/sync/resolver.ts +0 -0
  134. package/src/services/sync/retry.ts +0 -0
  135. package/src/services/sync/run-scope.ts +0 -0
  136. package/src/services/sync/schema/index.ts +0 -0
  137. package/src/services/sync/serializers/index.ts +0 -0
  138. package/src/services/sync/serializers/model.ts +0 -0
  139. package/src/services/sync/serializers/raw.ts +0 -0
  140. package/src/services/sync/store/index.ts +0 -0
  141. package/src/services/sync/store/push-coalescer.ts +0 -0
  142. package/src/services/sync/store-configs.ts +0 -0
  143. package/src/services/sync/strategies/base.ts +0 -0
  144. package/src/services/sync/strategies/index.ts +0 -0
  145. package/src/services/sync/strategies/initial.ts +0 -0
  146. package/src/services/sync/strategies/polling.ts +0 -0
  147. package/src/services/sync/telemetry/flood-prevention.ts +0 -0
  148. package/src/services/sync/telemetry/index.ts +0 -0
  149. package/src/services/sync/telemetry/sampling.ts +0 -0
  150. package/src/services/sync/utils/event-emitter.ts +0 -0
  151. package/src/services/sync/utils/index.ts +0 -0
  152. package/src/services/sync/utils/throttle.ts +0 -0
  153. package/src/services/sync/utils/timers.ts +0 -0
  154. package/src/services/types.js +0 -0
  155. package/src/services/urlBuilder.ts +0 -0
  156. package/src/services/user/account.ts +0 -0
  157. package/src/services/user/chat.js +0 -0
  158. package/src/services/user/interests.js +0 -0
  159. package/src/services/user/management.js +0 -0
  160. package/src/services/user/memberships.ts +0 -0
  161. package/src/services/user/onboarding.ts +0 -0
  162. package/src/services/user/payments.ts +0 -0
  163. package/src/services/user/permissions.js +0 -0
  164. package/src/services/user/profile.js +0 -0
  165. package/src/services/user/sessions.js +0 -0
  166. package/src/services/user/streakCalculator.ts +0 -0
  167. package/src/services/user/types.d.ts +0 -0
  168. package/src/services/user/types.js +0 -0
  169. package/src/services/user/user-management-system.js +0 -0
  170. package/src/services/userActivity.js +0 -0
  171. package/test/HttpClient.test.js +0 -0
  172. package/test/awards/award-alacarte-observer.test.js +0 -0
  173. package/test/awards/award-auto-refresh.test.js +0 -0
  174. package/test/awards/award-calculations.test.js +0 -0
  175. package/test/awards/award-certificate-display.test.js +0 -0
  176. package/test/awards/award-collection-edge-cases.test.js +0 -0
  177. package/test/awards/award-collection-filtering.test.js +0 -0
  178. package/test/awards/award-completion-flow.test.js +0 -0
  179. package/test/awards/award-exclusion-handling.test.js +0 -0
  180. package/test/awards/award-multi-lesson.test.js +0 -0
  181. package/test/awards/award-observer-integration.test.js +0 -0
  182. package/test/awards/award-query-messages.test.js +0 -0
  183. package/test/awards/award-user-collection.test.js +0 -0
  184. package/test/awards/duplicate-prevention.test.js +0 -0
  185. package/test/awards/helpers/completion-mock.js +0 -0
  186. package/test/awards/helpers/index.js +0 -0
  187. package/test/awards/helpers/mock-setup.js +0 -0
  188. package/test/awards/helpers/progress-emitter.js +0 -0
  189. package/test/awards/message-generator.test.js +0 -0
  190. package/test/content.test.js +0 -0
  191. package/test/contentLikes.test.js +0 -0
  192. package/test/contentProgress.test.js +0 -0
  193. package/test/dataContext.test.js +0 -0
  194. package/test/forum.test.js +0 -0
  195. package/test/imageSRCBuilder.test.js +0 -0
  196. package/test/imageSRCVerify.test.js +0 -0
  197. package/test/initializeTests.js +0 -0
  198. package/test/learningPaths.test.js +0 -0
  199. package/test/lib/__snapshots__/filter.test.ts.snap +0 -0
  200. package/test/lib/filter.test.ts +0 -0
  201. package/test/lib/lastUpdated.test.js +0 -0
  202. package/test/lib/query.test.ts +0 -0
  203. package/test/live/contentProgressLive.test.js +0 -0
  204. package/test/live/railcontentLive.test.js +0 -0
  205. package/test/localStorageMock.js +0 -0
  206. package/test/log.js +0 -0
  207. package/test/mockData/award-definitions.js +0 -0
  208. package/test/mockData/mockData_fetchByRailContentIds_one_content.json +0 -0
  209. package/test/mockData/mockData_progress_content.json +0 -0
  210. package/test/mockData/mockData_sanity_progress_content.json +0 -0
  211. package/test/mockData/mockData_user_practices.json +0 -0
  212. package/test/notifications.test.js +0 -0
  213. package/test/progressRows.test.js +0 -0
  214. package/test/sanityQueryService.test.js +0 -0
  215. package/test/streakMessage.test.js +0 -0
  216. package/test/sync/adapter.ts +0 -0
  217. package/test/sync/initialize-sync-manager.js +0 -0
  218. package/test/sync/models/award-database-integration.test.js +0 -0
  219. package/test/user/permissions.test.js +0 -0
  220. package/test/userActivity.test.js +0 -0
  221. package/tools/generate-index.cjs +0 -0
  222. package/.claude/settings.local.json +0 -21
package/.coderabbit.yaml CHANGED
File without changes
package/.editorconfig CHANGED
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,13 @@
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.138.1](https://github.com/railroadmedia/musora-content-services/compare/v2.138.0...v2.138.1) (2026-03-03)
6
+
7
+
8
+ ### Bug Fixes
9
+
10
+ * removes redundant/buggy practice session tracking in trackPractice ([#850](https://github.com/railroadmedia/musora-content-services/issues/850)) ([8702b4b](https://github.com/railroadmedia/musora-content-services/commit/8702b4b4b183a8e02b25b0731c8fa422b26c976e))
11
+
5
12
  ## [2.138.0](https://github.com/railroadmedia/musora-content-services/compare/v2.137.4...v2.138.0) (2026-03-03)
6
13
 
7
14
 
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.138.0",
3
+ "version": "2.138.1",
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
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
@@ -416,14 +416,13 @@ export async function recordWatchSession(
416
416
 
417
417
  if (!prevSession) {
418
418
  prevSession = {
419
- practiceSession: new Map(),
420
419
  pushInterval: null
421
420
  }
422
421
  }
423
422
 
424
423
  // Track practice and progress locally (no immediate push)
425
- const [session] = await Promise.all([
426
- trackPractice(contentId, secondsPlayed, prevSession.practiceSession, { instrumentId, categoryId }),
424
+ await Promise.all([
425
+ trackPractice(contentId, secondsPlayed, { instrumentId, categoryId }),
427
426
  trackProgress(contentId, collection, currentSeconds, mediaLengthSeconds),
428
427
  ])
429
428
 
@@ -432,9 +431,6 @@ export async function recordWatchSession(
432
431
  flushWatchSession()
433
432
  }, PUSH_INTERVAL)
434
433
  }
435
-
436
- prevSession.practiceSession = session
437
-
438
434
  return prevSession
439
435
  }
440
436
 
@@ -448,14 +444,8 @@ export async function flushWatchSession(sessionToFlush = null, shouldClearInterv
448
444
  db.practices.requestPushUnsynced('flush-watch-session')
449
445
  }
450
446
 
451
- async function trackPractice(contentId, secondsPlayed, practiceSession, details = {}) {
452
- const session = practiceSession || new Map()
453
-
454
- const secondsSinceLastUpdate = Math.ceil(secondsPlayed - (session.get(contentId) ?? 0))
455
- session.set(contentId, secondsPlayed)
456
-
457
- await trackUserPractice(contentId, secondsSinceLastUpdate, details)
458
- return session
447
+ async function trackPractice(contentId, secondsPlayed, details = {}) {
448
+ return trackUserPractice(contentId, secondsPlayed, details)
459
449
  }
460
450
 
461
451
  async function trackProgress(contentId, collection, currentSeconds, mediaLengthSeconds) {
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
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
File without changes
File without changes
File without changes
@@ -1,21 +0,0 @@
1
- {
2
- "permissions": {
3
- "allow": [
4
- "Bash(tree:*)",
5
- "Bash(find:*)",
6
- "Bash(docker exec:*)",
7
- "Bash(node:*)",
8
- "Bash(npm run build-index:*)",
9
- "Bash(npm run link_mcs:*)",
10
- "Bash(./link_mcs.sh:*)",
11
- "Bash(curl:*)",
12
- "Bash(php artisan:*)",
13
- "Bash(git checkout:*)",
14
- "Bash(source .env)",
15
- "Bash(echo:*)",
16
- "Bash(grep:*)",
17
- "Bash(gh api repos/railroadmedia/musora-platform-backend/commits/1f9878a5e681bf1e2233c0d59a618d477b118c49 --jq '.commit.message' 2>/dev/null || echo \"no access\")",
18
- "WebFetch(domain:github.com)"
19
- ]
20
- }
21
- }