musora-content-services 2.165.5 → 2.167.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.
- package/.agent/decisions/2026-04-28-tma-275-mcs-sanity-add-a-v2-url-segmen.md +0 -0
- package/.agent/decisions/2026-05-19-content-progress-ts-part-2.md +0 -0
- package/.agent/decisions/2026-05-20-live-event-fetch-permissions-id.md +0 -0
- package/.claude/settings.local.json +19 -47
- package/.coderabbit.yaml +0 -0
- package/.editorconfig +0 -0
- package/.github/pull_request_template.md +0 -0
- package/.github/workflows/automated-testing.yml +0 -0
- package/.github/workflows/conventional-commits.yaml +0 -0
- package/.github/workflows/docs.js.yml +0 -0
- package/.prettierignore +0 -0
- package/.prettierrc +0 -0
- package/CHANGELOG.md +25 -0
- package/CLAUDE.md +0 -0
- package/README.md +0 -0
- package/babel.config.cjs +0 -0
- package/codecov.yml +0 -0
- package/jest.config.js +0 -0
- package/jest.integration.config.js +0 -0
- package/jest.live.config.js +0 -0
- package/jsdoc.json +0 -0
- package/package.json +1 -1
- package/src/constants/award-assets.js +12 -9
- package/src/constants/membership-permissions.ts +0 -0
- package/src/contentMetaData.js +0 -0
- package/src/contentTypeConfig.js +8 -1
- package/src/filterBuilder.js +0 -0
- package/src/index.d.ts +0 -0
- package/src/index.js +0 -0
- package/src/infrastructure/http/HttpClient.ts +0 -0
- package/src/infrastructure/http/executors/FetchRequestExecutor.ts +0 -0
- package/src/infrastructure/http/index.ts +0 -0
- package/src/infrastructure/http/interfaces/HeaderProvider.ts +0 -0
- package/src/infrastructure/http/interfaces/HttpError.ts +0 -0
- package/src/infrastructure/http/interfaces/NetworkError.ts +0 -0
- package/src/infrastructure/http/interfaces/RequestExecutor.ts +0 -0
- package/src/infrastructure/http/interfaces/RequestOptions.ts +0 -0
- package/src/infrastructure/http/providers/DefaultHeaderProvider.ts +0 -0
- package/src/infrastructure/sanity/README.md +0 -0
- package/src/infrastructure/sanity/SanityClient.ts +0 -0
- package/src/infrastructure/sanity/clients/ContentClient.ts +0 -0
- package/src/infrastructure/sanity/examples/usage.ts +0 -0
- package/src/infrastructure/sanity/executors/FetchQueryExecutor.ts +0 -0
- package/src/infrastructure/sanity/index.ts +0 -0
- package/src/infrastructure/sanity/interfaces/ConfigProvider.ts +0 -0
- package/src/infrastructure/sanity/interfaces/FetchByIdOptions.ts +0 -0
- package/src/infrastructure/sanity/interfaces/QueryExecutor.ts +0 -0
- package/src/infrastructure/sanity/interfaces/SanityConfig.ts +0 -0
- package/src/infrastructure/sanity/interfaces/SanityError.ts +0 -0
- package/src/infrastructure/sanity/interfaces/SanityQuery.ts +0 -0
- package/src/infrastructure/sanity/interfaces/SanityResponse.ts +0 -0
- package/src/infrastructure/sanity/providers/DefaultConfigProvider.ts +0 -0
- package/src/lib/ads/monoid.ts +0 -0
- package/src/lib/ads/semigroup.ts +0 -0
- package/src/lib/brands.ts +0 -0
- package/src/lib/lastUpdated.js +0 -0
- package/src/lib/sanity/decorators/base.ts +0 -0
- package/src/lib/sanity/decorators/examples.ts +0 -0
- package/src/lib/sanity/decorators/navigate-to.ts +0 -0
- package/src/lib/sanity/decorators/need-access.ts +0 -0
- package/src/lib/sanity/decorators/need-lifetime-upgrade.ts +0 -0
- package/src/lib/sanity/decorators/page-type.ts +0 -0
- package/src/lib/sanity/field-access.ts +0 -0
- package/src/lib/sanity/filter.ts +0 -0
- package/src/lib/sanity/query.ts +0 -0
- package/src/services/api/types.js +0 -0
- package/src/services/api/types.ts +0 -0
- package/src/services/awards/award-callbacks.js +0 -0
- package/src/services/awards/award-query.js +0 -0
- package/src/services/awards/internal/.indexignore +0 -0
- package/src/services/awards/internal/award-definitions.js +0 -0
- package/src/services/awards/internal/award-events.js +0 -0
- package/src/services/awards/internal/award-manager.js +0 -0
- package/src/services/awards/internal/certificate-builder.js +0 -0
- package/src/services/awards/internal/completion-data-generator.js +0 -0
- package/src/services/awards/internal/content-progress-observer.js +0 -0
- package/src/services/awards/internal/image-utils.js +0 -0
- package/src/services/awards/internal/message-generator.js +0 -0
- package/src/services/awards/internal/types.js +0 -0
- package/src/services/awards/types.d.ts +0 -0
- package/src/services/awards/types.js +0 -0
- package/src/services/config.js +0 -0
- package/src/services/content/artist.ts +0 -0
- package/src/services/content/content.ts +0 -0
- package/src/services/content/genre.ts +0 -0
- package/src/services/content/instructor.ts +0 -0
- package/src/services/content-org/content-org.js +0 -0
- package/src/services/content-org/guided-courses.ts +0 -0
- package/src/services/content-org/learning-paths.ts +0 -0
- package/src/services/content-org/playlists-types.js +0 -0
- package/src/services/content-org/playlists.js +0 -0
- package/src/services/content.js +0 -0
- package/src/services/contentAggregator.js +0 -0
- package/src/services/contentLikes.js +0 -0
- package/src/services/contentProgress.js +0 -0
- package/src/services/dataContext.js +0 -0
- package/src/services/dateUtils.js +0 -0
- package/src/services/endScreen/README.md +0 -0
- package/src/services/endScreen/endScreen.ts +0 -0
- package/src/services/endScreen/types.ts +0 -0
- package/src/services/eventsAPI.js +0 -0
- package/src/services/forums/categories.ts +0 -0
- package/src/services/forums/forums.ts +0 -0
- package/src/services/forums/posts.ts +0 -0
- package/src/services/forums/threads.ts +0 -0
- package/src/services/gamification/awards.ts +0 -0
- package/src/services/gamification/gamification.js +0 -0
- package/src/services/imageSRCBuilder.js +0 -0
- package/src/services/imageSRCVerify.js +0 -0
- package/src/services/liveTesting.ts +0 -0
- package/src/services/multi-user-accounts/multi-user-accounts.ts +3 -1
- package/src/services/offline/activities.ts +0 -0
- package/src/services/offline/practices.ts +0 -0
- package/src/services/offline/progress.ts +0 -0
- package/src/services/permissions/PermissionsAdapter.ts +0 -0
- package/src/services/permissions/PermissionsAdapterFactory.ts +0 -0
- package/src/services/permissions/PermissionsV1Adapter.ts +0 -0
- package/src/services/permissions/PermissionsV2Adapter.ts +0 -0
- package/src/services/permissions/README.md +0 -0
- package/src/services/permissions/index.ts +0 -0
- package/src/services/permissions/permissions.ts +0 -0
- package/src/services/permissions/types.d.ts +0 -0
- package/src/services/progress/.indexignore +0 -0
- package/src/services/progress/collections.ts +0 -0
- package/src/services/progress/index.ts +0 -0
- package/src/services/progress/internal/bubble.ts +1 -1
- package/src/services/progress/internal/queries.ts +25 -7
- package/src/services/progress/state.ts +32 -47
- package/src/services/progress/types.ts +0 -0
- package/src/services/progress/utils.ts +0 -0
- package/src/services/progress-events.js +0 -0
- package/src/services/progress-row/base.js +0 -0
- package/src/services/progress-row/rows/.indexignore +0 -0
- package/src/services/progress-row/rows/content-card.js +0 -0
- package/src/services/progress-row/rows/method-card.js +0 -0
- package/src/services/progress-row/rows/playlist-card.js +0 -0
- package/src/services/railcontent.js +0 -0
- package/src/services/recommendations.js +0 -0
- package/src/services/reporting/README.md +0 -0
- package/src/services/reporting/reporting.ts +0 -0
- package/src/services/reporting/types.ts +0 -0
- package/src/services/search.ts +0 -0
- package/src/services/sentry/.indexignore +0 -0
- package/src/services/sentry/index.ts +0 -0
- package/src/services/state.ts +0 -0
- package/src/services/sync/.indexignore +0 -0
- package/src/services/sync/adapters/factory.ts +0 -0
- package/src/services/sync/adapters/lokijs.ts +0 -0
- package/src/services/sync/adapters/sqlite.ts +0 -0
- package/src/services/sync/context/index.ts +0 -0
- package/src/services/sync/context/providers/base.ts +0 -0
- package/src/services/sync/context/providers/connectivity.ts +0 -0
- package/src/services/sync/context/providers/durability.ts +0 -0
- package/src/services/sync/context/providers/index.ts +0 -0
- package/src/services/sync/context/providers/session.ts +0 -0
- package/src/services/sync/context/providers/tabs.ts +0 -0
- package/src/services/sync/context/providers/visibility.ts +0 -0
- package/src/services/sync/database/factory.ts +0 -0
- package/src/services/sync/debug.ts +0 -0
- package/src/services/sync/effects/index.ts +0 -0
- package/src/services/sync/effects/logout-warning.ts +0 -0
- package/src/services/sync/effects/push-failure-notification.ts +0 -0
- package/src/services/sync/errors/boundary.ts +0 -0
- package/src/services/sync/errors/index.ts +0 -0
- package/src/services/sync/errors/validators.ts +0 -0
- package/src/services/sync/fetch.ts +0 -0
- package/src/services/sync/index.ts +0 -0
- package/src/services/sync/manager.ts +0 -0
- package/src/services/sync/models/Base.ts +0 -0
- package/src/services/sync/models/ContentLike.ts +0 -0
- package/src/services/sync/models/ContentProgress.ts +0 -0
- package/src/services/sync/models/Practice.ts +0 -0
- package/src/services/sync/models/PracticeDayNote.ts +0 -0
- package/src/services/sync/models/UserAwardProgress.ts +0 -0
- package/src/services/sync/models/index.ts +0 -0
- package/src/services/sync/repositories/base.ts +0 -0
- package/src/services/sync/repositories/content-likes.ts +0 -0
- package/src/services/sync/repositories/content-progress.ts +0 -0
- package/src/services/sync/repositories/index.ts +0 -0
- package/src/services/sync/repositories/practice-day-notes.ts +0 -0
- package/src/services/sync/repositories/practices.ts +0 -0
- package/src/services/sync/repositories/user-award-progress.ts +0 -0
- package/src/services/sync/repository-proxy.ts +0 -0
- package/src/services/sync/resolver.ts +0 -0
- package/src/services/sync/retry.ts +0 -0
- package/src/services/sync/run-scope.ts +0 -0
- package/src/services/sync/schema/index.ts +0 -0
- package/src/services/sync/serializers/index.ts +0 -0
- package/src/services/sync/serializers/model.ts +0 -0
- package/src/services/sync/serializers/raw.ts +0 -0
- package/src/services/sync/stale-record-cleanup.ts +0 -0
- package/src/services/sync/store/index.ts +0 -0
- package/src/services/sync/store/push-coalescer.ts +0 -0
- package/src/services/sync/store-configs.ts +0 -0
- package/src/services/sync/strategies/base.ts +0 -0
- package/src/services/sync/strategies/index.ts +0 -0
- package/src/services/sync/strategies/initial.ts +0 -0
- package/src/services/sync/strategies/polling.ts +0 -0
- package/src/services/sync/telemetry/flood-prevention.ts +0 -0
- package/src/services/sync/telemetry/index.ts +0 -0
- package/src/services/sync/telemetry/sampling.ts +0 -0
- package/src/services/sync/utils/event-emitter.ts +0 -0
- package/src/services/sync/utils/index.ts +0 -0
- package/src/services/sync/utils/throttle.ts +0 -0
- package/src/services/sync/utils/timers.ts +0 -0
- package/src/services/types.js +0 -0
- package/src/services/urlBuilder.ts +0 -0
- package/src/services/user/account.ts +0 -0
- package/src/services/user/chat.js +0 -0
- package/src/services/user/interests.js +0 -0
- package/src/services/user/management.js +0 -0
- package/src/services/user/memberships.ts +5 -2
- package/src/services/user/notifications.js +0 -0
- package/src/services/user/onboarding.ts +0 -0
- package/src/services/user/payments.ts +0 -0
- package/src/services/user/playerSettings.ts +0 -0
- package/src/services/user/profile.ts +0 -0
- package/src/services/user/sessions.js +0 -0
- package/src/services/user/streakCalculator.ts +0 -0
- package/src/services/user/types.js +0 -0
- package/src/services/user/user-management-system.js +0 -0
- package/src/services/userActivity.js +0 -0
- package/src/services/whoLiked.ts +0 -0
- package/test/initializeTests.js +0 -0
- package/test/integration/awards/award-exclusion-handling.test.ts +0 -0
- package/test/integration/awards/internal/image-utils.test.ts +0 -0
- package/test/integration/content-progress/__mocks__/mocks.ts +0 -0
- package/test/integration/content-progress/contentProgress.test.ts +0 -0
- package/test/integration/content-progress/e2eOfflineProgress.test.ts +0 -0
- package/test/integration/content-progress/e2eProgress.test.ts +0 -0
- package/test/integration/content-progress/getters.test.ts +0 -0
- package/test/integration/content-progress/helpers.test.ts +0 -0
- package/test/integration/content-progress/offlineContentProgress.test.ts +0 -0
- package/test/integration/forums.test.ts +0 -0
- package/test/integration/infrastructure/FetchRequestExecutor.test.ts +0 -0
- package/test/integration/initializeTestDB.ts +0 -0
- package/test/integration/learning-paths.test.ts +0 -0
- package/test/integration/notifications.test.ts +0 -0
- package/test/integration/progress-row/content-card.test.ts +0 -0
- package/test/integration/sync/adapters/idb-errors.test.ts +0 -0
- package/test/integration/sync/adapters/sqlite-errors.test.ts +0 -0
- package/test/integration/sync/fetch.test.ts +0 -0
- package/test/integration/sync/repositories/content-likes.test.ts +0 -0
- package/test/integration/sync/repositories/practices.test.ts +0 -0
- package/test/integration/sync/repositories/progress.test.ts +0 -0
- package/test/integration/sync/repositories/user-award-progress.static.test.ts +0 -0
- package/test/integration/sync/repositories/user-award-progress.test.ts +0 -0
- package/test/integration/sync/store/cross-user-protection.test.ts +0 -0
- package/test/integration/sync/store/store-idb.test.ts +0 -0
- package/test/integration/sync/store/store.test.ts +0 -0
- package/test/integration/user/permissions.test.js +0 -0
- package/test/integration/userActivity.test.ts +0 -0
- package/test/live/README.md +0 -0
- package/test/live/content.test.js +0 -0
- package/test/localStorageMock.js +0 -0
- package/test/log.js +0 -0
- package/test/mockData/award-definitions.js +0 -0
- package/test/mockData/mockData_fetchByRailContentIds_one_content.json +0 -0
- package/test/mockData/mockData_progress_content.json +0 -0
- package/test/mockData/mockData_sanity_progress_content.json +0 -0
- package/test/mockData/mockData_user_practices.json +0 -0
- package/test/setupConsole.js +0 -0
- package/test/setupNetworkGuard.js +0 -0
- package/test/setupTimers.js +0 -0
- package/test/unit/HttpClient.test.ts +0 -0
- package/test/unit/awards/award-alacarte-observer.test.ts +0 -0
- package/test/unit/awards/award-auto-refresh.test.ts +0 -0
- package/test/unit/awards/award-calculations.test.ts +0 -0
- package/test/unit/awards/award-callbacks.test.ts +0 -0
- package/test/unit/awards/award-certificate-display.test.ts +0 -0
- package/test/unit/awards/award-collection-edge-cases.test.ts +0 -0
- package/test/unit/awards/award-collection-filtering.test.ts +0 -0
- package/test/unit/awards/award-completion-flow.test.ts +0 -0
- package/test/unit/awards/award-multi-lesson.test.ts +0 -0
- package/test/unit/awards/award-observer-integration.test.ts +0 -0
- package/test/unit/awards/award-query-messages.test.ts +0 -0
- package/test/unit/awards/award-user-collection.test.ts +0 -0
- package/test/unit/awards/duplicate-prevention.test.ts +0 -0
- package/test/unit/awards/helpers/completion-mock.ts +0 -0
- package/test/unit/awards/helpers/index.ts +0 -0
- package/test/unit/awards/helpers/mock-setup.ts +0 -0
- package/test/unit/awards/helpers/progress-emitter.ts +0 -0
- package/test/unit/awards/message-generator.test.ts +0 -0
- package/test/unit/content-progress/bubbleTrickle.test.ts +0 -0
- package/test/unit/content-progress/helpers.test.ts +0 -0
- package/test/unit/content-progress/navigateTo.test.ts +0 -0
- package/test/unit/contentLikes.test.ts +0 -0
- package/test/unit/contentMetaData.test.ts +0 -0
- package/test/unit/dataContext.test.ts +0 -0
- package/test/unit/dateUtils.test.ts +0 -0
- package/test/unit/endScreen.test.js +0 -0
- package/test/unit/imageSRCBuilder.test.ts +0 -0
- package/test/unit/imageSRCVerify.test.ts +0 -0
- package/test/unit/infrastructure/DefaultHeaderProvider.test.ts +0 -0
- package/test/unit/infrastructure/sanity/ContentClient.test.ts +0 -0
- package/test/unit/infrastructure/sanity/DefaultConfigProvider.test.ts +0 -0
- package/test/unit/infrastructure/sanity/FetchQueryExecutor.test.ts +0 -0
- package/test/unit/infrastructure/sanity/SanityClient.test.ts +0 -0
- package/test/unit/lib/__snapshots__/filter.test.ts.snap +0 -0
- package/test/unit/lib/filter.test.ts +0 -0
- package/test/unit/lib/lastUpdated.test.ts +0 -0
- package/test/unit/lib/query.test.ts +0 -0
- package/test/unit/lib/sanity/decorators/base.test.ts +0 -0
- package/test/unit/lib/sanity/decorators/navigate-to.test.ts +0 -0
- package/test/unit/lib/sanity/decorators/need-access.test.ts +0 -0
- package/test/unit/lib/sanity/decorators/need-lifetime-upgrade.test.ts +0 -0
- package/test/unit/lib/sanity/decorators/page-type.test.ts +0 -0
- package/test/unit/playerSettings.test.ts +0 -0
- package/test/unit/progress-row/content-card.test.ts +0 -0
- package/test/unit/progress-row/playlist-card.test.ts +0 -0
- package/test/unit/progressRows.test.ts +0 -0
- package/test/unit/recommendations.test.js +0 -0
- package/test/unit/sanityQueryService.test.ts +0 -0
- package/test/unit/search.test.ts +0 -0
- package/test/unit/sentry.test.ts +0 -0
- package/test/unit/services/progress-internal/bubble.test.ts +0 -0
- package/test/unit/services/progress.test.ts +0 -0
- package/test/unit/streakMessage.test.ts +0 -0
- package/test/unit/sync/context.test.ts +0 -0
- package/test/unit/sync/effects/logout-warning.test.ts +0 -0
- package/test/unit/sync/effects/push-failure-notification.test.ts +0 -0
- package/test/unit/sync/errors/sync-errors.test.ts +0 -0
- package/test/unit/sync/errors/validators.test.ts +0 -0
- package/test/unit/sync/helpers/TestModel.ts +0 -0
- package/test/unit/sync/helpers/index.ts +0 -0
- package/test/unit/sync/manager.test.ts +0 -0
- package/test/unit/sync/models/user-award-progress.test.ts +0 -0
- package/test/unit/sync/resolver.test.ts +0 -0
- package/test/unit/sync/retry.test.ts +0 -0
- package/test/unit/sync/run-scope.test.ts +0 -0
- package/test/unit/sync/stale-record-cleanup.test.ts +0 -0
- package/test/unit/sync/store/push-coalescer.test.ts +0 -0
- package/test/unit/sync/store-configs.test.ts +0 -0
- package/test/unit/sync/telemetry/sync-telemetry.test.ts +0 -0
- package/test/unit/sync/utils/event-emitter.test.ts +0 -0
- package/test/unit/sync/utils/throttle.test.ts +0 -0
- package/test/unit/url-builder.test.ts +0 -0
- package/test/unit/user/account.test.ts +0 -0
- package/test/unit/user/permissions.test.js +0 -0
- package/tools/generate-index.cjs +0 -0
- package/tsconfig.json +0 -0
- package/usage/sanity/decorators/examples.ts +0 -0
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -1,52 +1,24 @@
|
|
|
1
1
|
{
|
|
2
2
|
"permissions": {
|
|
3
3
|
"allow": [
|
|
4
|
-
"Bash(
|
|
5
|
-
"Bash(
|
|
6
|
-
"
|
|
7
|
-
"Bash(
|
|
8
|
-
"Bash(
|
|
9
|
-
"Bash(
|
|
10
|
-
"Bash(
|
|
11
|
-
"Bash(
|
|
12
|
-
"Bash(
|
|
13
|
-
"Bash(
|
|
14
|
-
"
|
|
15
|
-
"Bash(
|
|
16
|
-
"Bash(
|
|
17
|
-
"Bash(echo \"
|
|
18
|
-
"
|
|
19
|
-
"
|
|
20
|
-
"
|
|
21
|
-
"
|
|
22
|
-
"mcp__github__push_files",
|
|
23
|
-
"Bash(git push *)",
|
|
24
|
-
"mcp__github__create_pull_request",
|
|
25
|
-
"mcp__github__search_pull_requests",
|
|
26
|
-
"Bash(git commit *)",
|
|
27
|
-
"Bash(git add *)"
|
|
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
|
+
"Read(//app/**)",
|
|
20
|
+
"Bash(git -C /app/musora-platform-backend log --oneline main..HEAD)",
|
|
21
|
+
"Bash(git -C /app/musora-platform-backend diff main..HEAD --name-only)"
|
|
28
22
|
]
|
|
29
|
-
}
|
|
30
|
-
"model": "sonnet",
|
|
31
|
-
"enabledMcpjsonServers": [
|
|
32
|
-
"atlassian",
|
|
33
|
-
"figma",
|
|
34
|
-
"google-workspace",
|
|
35
|
-
"snowflake",
|
|
36
|
-
"aws",
|
|
37
|
-
"hex",
|
|
38
|
-
"sanity",
|
|
39
|
-
"mysql",
|
|
40
|
-
"slack",
|
|
41
|
-
"langfuse",
|
|
42
|
-
"chrome-devtools",
|
|
43
|
-
"railway",
|
|
44
|
-
"github",
|
|
45
|
-
"asana"
|
|
46
|
-
],
|
|
47
|
-
"disabledMcpjsonServers": [
|
|
48
|
-
"nightwatch",
|
|
49
|
-
"1password"
|
|
50
|
-
],
|
|
51
|
-
"effortLevel": "medium"
|
|
23
|
+
}
|
|
52
24
|
}
|
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,31 @@
|
|
|
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.167.0](https://github.com/railroadmedia/musora-content-services/compare/v2.165.5...v2.167.0) (2026-07-13)
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
### Features
|
|
9
|
+
|
|
10
|
+
* **BEHLPT-186:** subscription upgrade endpoints ([#1003](https://github.com/railroadmedia/musora-content-services/issues/1003)) ([9da55f2](https://github.com/railroadmedia/musora-content-services/commit/9da55f24708976190317a3b69381acbccce2f33c))
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
### Bug Fixes
|
|
14
|
+
|
|
15
|
+
* **BR-658:** add playbass logo for ceritificates ([#1006](https://github.com/railroadmedia/musora-content-services/issues/1006)) ([da52391](https://github.com/railroadmedia/musora-content-services/commit/da5239178c3526c685b84220009f1f4e0774deb9))
|
|
16
|
+
* **BR-671:** fix Latin/World style search ([#1002](https://github.com/railroadmedia/musora-content-services/issues/1002)) ([25fdff8](https://github.com/railroadmedia/musora-content-services/commit/25fdff80c6279e8568ea057ac250f7e057717ccf))
|
|
17
|
+
|
|
18
|
+
## [2.166.0](https://github.com/railroadmedia/musora-content-services/compare/v2.165.5...v2.166.0) (2026-07-02)
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
### Features
|
|
22
|
+
|
|
23
|
+
* **BEHLPT-186:** subscription upgrade endpoints ([#1003](https://github.com/railroadmedia/musora-content-services/issues/1003)) ([9da55f2](https://github.com/railroadmedia/musora-content-services/commit/9da55f24708976190317a3b69381acbccce2f33c))
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
### Bug Fixes
|
|
27
|
+
|
|
28
|
+
* **BR-671:** fix Latin/World style search ([#1002](https://github.com/railroadmedia/musora-content-services/issues/1002)) ([25fdff8](https://github.com/railroadmedia/musora-content-services/commit/25fdff80c6279e8568ea057ac250f7e057717ccf))
|
|
29
|
+
|
|
5
30
|
### [2.165.5](https://github.com/railroadmedia/musora-content-services/compare/v2.165.4...v2.165.5) (2026-06-25)
|
|
6
31
|
|
|
7
32
|
|
package/CLAUDE.md
CHANGED
|
File without changes
|
package/README.md
CHANGED
|
File without changes
|
package/babel.config.cjs
CHANGED
|
File without changes
|
package/codecov.yml
CHANGED
|
File without changes
|
package/jest.config.js
CHANGED
|
File without changes
|
|
File without changes
|
package/jest.live.config.js
CHANGED
|
File without changes
|
package/jsdoc.json
CHANGED
|
File without changes
|
package/package.json
CHANGED
|
@@ -21,15 +21,18 @@
|
|
|
21
21
|
|
|
22
22
|
/** @type {AwardAssets} */
|
|
23
23
|
export const AWARD_ASSETS = {
|
|
24
|
-
ribbon:
|
|
25
|
-
musoraLogo:
|
|
26
|
-
musoraBgLogo:
|
|
24
|
+
ribbon: 'https://d3fzm1tzeyr5n3.cloudfront.net/challenges/gold_ribbon.png',
|
|
25
|
+
musoraLogo: 'https://d3fzm1tzeyr5n3.cloudfront.net/challenges/on_musora.png',
|
|
26
|
+
musoraBgLogo: 'https://d3fzm1tzeyr5n3.cloudfront.net/challenges/certificate_logo.png',
|
|
27
27
|
|
|
28
28
|
brandLogos: {
|
|
29
|
-
drumeo:
|
|
30
|
-
singeo:
|
|
31
|
-
guitareo:
|
|
32
|
-
pianote:
|
|
33
|
-
|
|
34
|
-
|
|
29
|
+
drumeo: 'https://dpwjbsxqtam5n.cloudfront.net/logos/logo-blue.png',
|
|
30
|
+
singeo: 'https://d21xeg6s76swyd.cloudfront.net/sales/2021/singeo-logo.png',
|
|
31
|
+
guitareo: 'https://d122ay5chh2hr5.cloudfront.net/sales/guitareo-logo-green.png',
|
|
32
|
+
pianote:
|
|
33
|
+
'https://d21q7xesnoiieh.cloudfront.net/fit-in/marketing/pianote/membership/homepage/2023/pianote-logo-red.png',
|
|
34
|
+
playbass:
|
|
35
|
+
'https://d21q7xesnoiieh.cloudfront.net/fit-in/1400x0/filters:quality(95)/marketing/musora/membership/homepage/2026/logo-playbass2.svg',
|
|
36
|
+
musora: 'https://d3fzm1tzeyr5n3.cloudfront.net/challenges/on_musora.png',
|
|
37
|
+
},
|
|
35
38
|
}
|
|
File without changes
|
package/src/contentMetaData.js
CHANGED
|
File without changes
|
package/src/contentTypeConfig.js
CHANGED
|
@@ -876,7 +876,14 @@ function createTypeConditions(lessonTypes) {
|
|
|
876
876
|
* Filter handler registry - maps filter keys to their handler functions
|
|
877
877
|
*/
|
|
878
878
|
const filterHandlers = {
|
|
879
|
-
style: (value) =>
|
|
879
|
+
style: (value) => {
|
|
880
|
+
const hasMultipleStyles = value.includes('/')
|
|
881
|
+
const styles = [value]
|
|
882
|
+
if (hasMultipleStyles) {
|
|
883
|
+
styles.push(...value.split('/').map((s) => s.trim()))
|
|
884
|
+
}
|
|
885
|
+
return styles.map((style) => `"${style}" in genre[]->name`).join(' || ')
|
|
886
|
+
},
|
|
880
887
|
|
|
881
888
|
difficulty: (value) => {
|
|
882
889
|
return `difficulty_string == "${value}"`
|
package/src/filterBuilder.js
CHANGED
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
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/ads/monoid.ts
CHANGED
|
File without changes
|
package/src/lib/ads/semigroup.ts
CHANGED
|
File without changes
|
package/src/lib/brands.ts
CHANGED
|
File without changes
|
package/src/lib/lastUpdated.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
|
package/src/lib/sanity/filter.ts
CHANGED
|
File without changes
|
package/src/lib/sanity/query.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
|
package/src/services/config.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/src/services/content.js
CHANGED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -20,7 +20,9 @@ export interface InviteResponse {
|
|
|
20
20
|
can_be_accepted: boolean
|
|
21
21
|
is_account_valid: boolean
|
|
22
22
|
is_invite_active: boolean
|
|
23
|
-
can_user_join: boolean
|
|
23
|
+
can_user_join: boolean // deprecated in favour of is_user_part_of_existing_mua which is more descriptive
|
|
24
|
+
is_user_active_subscriber: boolean
|
|
25
|
+
is_user_part_of_existing_mua: boolean
|
|
24
26
|
primary_user_name: string
|
|
25
27
|
product_name: string
|
|
26
28
|
// These fields leak user information and are excluded entirely for the public endpoint
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -85,7 +85,7 @@ export const bubbleProgress = async (
|
|
|
85
85
|
collection?: CollectionParameter
|
|
86
86
|
): Promise<Record<number, number>> => {
|
|
87
87
|
const ids = getAncestorAndSiblingIds(hierarchy, contentId)
|
|
88
|
-
const progresses = await getByIds(ids,
|
|
88
|
+
const progresses = await getByIds(ids, (p) => p.progress_percent, 0, collection)
|
|
89
89
|
return averageProgressesFor(hierarchy, contentId, progresses)
|
|
90
90
|
}
|
|
91
91
|
|
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
import { db } from '../../sync'
|
|
2
|
-
import {
|
|
2
|
+
import type { ModelSerialized } from '../../sync/serializers'
|
|
3
|
+
import ContentProgress, { CollectionParameter } from '../../sync/models/ContentProgress'
|
|
4
|
+
|
|
5
|
+
type Selector<V> = (p: ModelSerialized<ContentProgress>) => V
|
|
3
6
|
|
|
4
7
|
export const getByIds = async <V>(
|
|
5
8
|
contentIds: number[],
|
|
6
|
-
|
|
9
|
+
selector: Selector<V>,
|
|
7
10
|
defaultValue: V,
|
|
8
11
|
collection?: CollectionParameter
|
|
9
12
|
): Promise<Map<number, V>> => {
|
|
@@ -12,7 +15,7 @@ export const getByIds = async <V>(
|
|
|
12
15
|
const progress = new Map(contentIds.map((id) => [id, defaultValue]))
|
|
13
16
|
await db.contentProgress.getSomeProgressByContentIds(contentIds, collection).then((r) => {
|
|
14
17
|
r.data.forEach((p) => {
|
|
15
|
-
progress.set(p.content_id, p
|
|
18
|
+
progress.set(p.content_id, selector(p) ?? defaultValue)
|
|
16
19
|
})
|
|
17
20
|
})
|
|
18
21
|
return progress
|
|
@@ -20,24 +23,39 @@ export const getByIds = async <V>(
|
|
|
20
23
|
|
|
21
24
|
export const getById = async <V>(
|
|
22
25
|
contentId: number,
|
|
23
|
-
|
|
26
|
+
selector: Selector<V>,
|
|
24
27
|
defaultValue: V,
|
|
25
28
|
collection?: CollectionParameter
|
|
26
29
|
): Promise<V> => {
|
|
27
30
|
if (!contentId) return defaultValue
|
|
28
31
|
return db.contentProgress
|
|
29
32
|
.getOneProgressByContentId(contentId, collection)
|
|
30
|
-
.then((r) => r.data
|
|
33
|
+
.then((r) => (r.data ? selector(r.data) : defaultValue) ?? defaultValue)
|
|
31
34
|
}
|
|
32
35
|
|
|
33
|
-
export const getByRecordIds = async <V>(ids: string[],
|
|
36
|
+
export const getByRecordIds = async <V>(ids: string[], selector: Selector<V>, defaultValue: V) => {
|
|
34
37
|
const progress = Object.fromEntries(ids.map((id) => [id, defaultValue]))
|
|
35
38
|
|
|
36
39
|
await db.contentProgress.getSomeProgressByRecordIds(ids).then((r) => {
|
|
37
40
|
r.data.forEach((p) => {
|
|
38
|
-
progress[p.id] = p
|
|
41
|
+
progress[p.id] = selector(p) ?? defaultValue
|
|
39
42
|
})
|
|
40
43
|
})
|
|
41
44
|
|
|
42
45
|
return progress
|
|
43
46
|
}
|
|
47
|
+
|
|
48
|
+
export const queryById =
|
|
49
|
+
<V>(selector: Selector<V>, defaultValue: V) =>
|
|
50
|
+
(contentId: number, collection?: CollectionParameter) =>
|
|
51
|
+
getById(contentId, selector, defaultValue, collection)
|
|
52
|
+
|
|
53
|
+
export const queryByIds =
|
|
54
|
+
<V>(selector: Selector<V>, defaultValue: V) =>
|
|
55
|
+
(contentIds: number[], collection?: CollectionParameter) =>
|
|
56
|
+
getByIds(contentIds, selector, defaultValue, collection)
|
|
57
|
+
|
|
58
|
+
export const queryByRecordIds =
|
|
59
|
+
<V>(selector: Selector<V>, defaultValue: V) =>
|
|
60
|
+
(ids: string[]) =>
|
|
61
|
+
getByRecordIds(ids, selector, defaultValue)
|