musora-content-services 2.107.2 → 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.
- package/.coderabbit.yaml +0 -0
- package/.editorconfig +0 -0
- package/.github/pull_request_template.md +0 -0
- package/.github/workflows/conventional-commits.yaml +0 -0
- package/.github/workflows/docs.js.yml +0 -0
- package/.github/workflows/node.js.yml +0 -0
- package/.prettierignore +0 -0
- package/.prettierrc +0 -0
- package/CHANGELOG.md +9 -0
- package/CLAUDE.md +0 -0
- package/README.md +0 -0
- package/babel.config.cjs +0 -0
- package/jest.config.js +0 -0
- package/jsdoc.json +0 -0
- package/package.json +1 -1
- package/src/constants/award-assets.js +0 -0
- package/src/contentMetaData.js +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/lib/brands.ts +0 -0
- package/src/lib/lastUpdated.js +0 -0
- package/src/services/api/types.js +0 -0
- package/src/services/api/types.ts +0 -0
- package/src/services/awards/internal/.indexignore +0 -0
- package/src/services/awards/internal/award-events.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/config.js +0 -0
- package/src/services/content/artist.ts +5 -5
- package/src/services/content/content.ts +0 -0
- package/src/services/content/genre.ts +5 -5
- package/src/services/content/instructor.ts +7 -6
- package/src/services/content-org/content-org.js +0 -0
- package/src/services/content-org/playlists-types.js +0 -0
- package/src/services/contentLikes.js +0 -0
- package/src/services/dataContext.js +0 -0
- package/src/services/dateUtils.js +0 -0
- package/src/services/eventsAPI.js +0 -0
- package/src/services/forums/categories.ts +0 -0
- package/src/services/forums/posts.ts +0 -0
- package/src/services/forums/types.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/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/README.md +0 -0
- package/src/services/permissions/index.ts +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/sentry/.indexignore +0 -0
- package/src/services/sentry/index.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/concurrency-safety.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/errors/boundary.ts +0 -0
- package/src/services/sync/index.ts +0 -0
- package/src/services/sync/models/Base.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/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/repository-proxy.ts +0 -0
- package/src/services/sync/resolver.ts +0 -0
- package/src/services/sync/run-scope.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/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/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/user/account.ts +0 -0
- package/src/services/user/onboarding.ts +12 -122
- package/src/services/user/payments.ts +0 -0
- package/src/services/user/permissions.js +0 -0
- package/src/services/user/user-management-system.js +0 -0
- package/test/HttpClient.test.js +0 -0
- package/test/awards/award-alacarte-observer.test.js +0 -0
- package/test/awards/award-auto-refresh.test.js +0 -0
- package/test/awards/award-calculations.test.js +0 -0
- package/test/awards/award-certificate-display.test.js +0 -0
- package/test/awards/award-collection-edge-cases.test.js +0 -0
- package/test/awards/award-collection-filtering.test.js +0 -0
- package/test/awards/award-exclusion-handling.test.js +0 -0
- package/test/awards/award-multi-lesson.test.js +0 -0
- package/test/awards/award-observer-integration.test.js +0 -0
- package/test/awards/award-query-messages.test.js +0 -0
- package/test/awards/award-user-collection.test.js +0 -0
- package/test/awards/duplicate-prevention.test.js +0 -0
- package/test/awards/helpers/completion-mock.js +0 -0
- package/test/awards/helpers/index.js +0 -0
- package/test/awards/helpers/mock-setup.js +0 -0
- package/test/awards/helpers/progress-emitter.js +0 -0
- package/test/awards/message-generator.test.js +0 -0
- package/test/content.test.js +0 -0
- package/test/contentLikes.test.js +0 -0
- package/test/contentProgress.test.js +0 -0
- package/test/dataContext.test.js +0 -0
- package/test/forum.test.js +0 -0
- package/test/imageSRCBuilder.test.js +0 -0
- package/test/imageSRCVerify.test.js +0 -0
- package/test/lib/lastUpdated.test.js +0 -0
- package/test/live/contentProgressLive.test.js +0 -0
- package/test/live/railcontentLive.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/notifications.test.js +0 -0
- package/test/progressRows.test.js +0 -0
- package/test/streakMessage.test.js +0 -0
- package/test/sync/models/award-database-integration.test.js +0 -0
- package/test/user/permissions.test.js +0 -0
- package/test/userActivity.test.js +0 -0
- package/tools/generate-index.cjs +0 -0
- package/.claude/settings.local.json +0 -19
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,15 @@
|
|
|
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
|
+
|
|
5
14
|
### [2.107.2](https://github.com/railroadmedia/musora-content-services/compare/v2.107.1...v2.107.2) (2025-12-19)
|
|
6
15
|
|
|
7
16
|
### [2.107.1](https://github.com/railroadmedia/musora-content-services/compare/v2.107.0...v2.107.1) (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
|
File without changes
|
package/src/contentMetaData.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
|
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
|
|
File without changes
|
|
File without changes
|
package/src/services/config.js
CHANGED
|
File without changes
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @module Artist
|
|
3
3
|
*/
|
|
4
|
-
import {
|
|
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
|
|
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(
|
|
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 {
|
|
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(
|
|
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 {
|
|
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(
|
|
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
|
package/src/services/types.js
CHANGED
|
File without changes
|
|
File without changes
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @module Onboarding
|
|
3
3
|
*/
|
|
4
|
-
import {
|
|
5
|
-
import { Brands } from '../../lib/brands'
|
|
4
|
+
import { GET, POST, PUT } from '../../infrastructure/http/HttpClient'
|
|
6
5
|
import { globalConfig } from '../config.js'
|
|
7
6
|
|
|
8
7
|
export interface OnboardingSteps {
|
|
@@ -55,8 +54,7 @@ export async function startOnboarding({
|
|
|
55
54
|
steps = {},
|
|
56
55
|
marketingOptIn = false,
|
|
57
56
|
}: StartOnboardingParams): Promise<Onboarding> {
|
|
58
|
-
|
|
59
|
-
return httpClient.post<Onboarding>(`/api/user-management-system/v1/onboardings`, {
|
|
57
|
+
return POST(`/api/user-management-system/v1/onboardings`, {
|
|
60
58
|
email,
|
|
61
59
|
brand,
|
|
62
60
|
flow,
|
|
@@ -91,8 +89,7 @@ export async function updateOnboarding({
|
|
|
91
89
|
is_completed = false,
|
|
92
90
|
marketingOptIn = false,
|
|
93
91
|
}: UpdateOnboardingParams): Promise<Onboarding> {
|
|
94
|
-
|
|
95
|
-
return httpClient.put<Onboarding>(`/api/user-management-system/v1/onboardings/${id}`, {
|
|
92
|
+
return PUT(`/api/user-management-system/v1/onboardings/${id}`, {
|
|
96
93
|
email,
|
|
97
94
|
brand,
|
|
98
95
|
flow,
|
|
@@ -111,8 +108,7 @@ export async function updateOnboarding({
|
|
|
111
108
|
* @throws {HttpError} - If the HTTP request fails.
|
|
112
109
|
*/
|
|
113
110
|
export async function userOnboardingForBrand(brand: string): Promise<Onboarding> {
|
|
114
|
-
|
|
115
|
-
return httpClient.get<Onboarding>(
|
|
111
|
+
return GET(
|
|
116
112
|
`/api/user-management-system/v1/users/${globalConfig.sessionConfig.userId}/onboardings/brand/${encodeURIComponent(brand)}`
|
|
117
113
|
)
|
|
118
114
|
}
|
|
@@ -132,126 +128,20 @@ export interface OnboardingRecommendedContent {
|
|
|
132
128
|
}
|
|
133
129
|
}
|
|
134
130
|
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
title: 'The Power Of Your Left Hand (Beginner)',
|
|
139
|
-
difficulty: 'Beginner',
|
|
140
|
-
lesson_count: 12,
|
|
141
|
-
skill_count: 1,
|
|
142
|
-
badge:
|
|
143
|
-
'https://cdn.sanity.io/files/4032r8py/staging/9470587f03479b7c1f8019c3cbcbdfe12aa267f3.png',
|
|
144
|
-
description:
|
|
145
|
-
'Start your drumming journey with essential techniques and rhythms to get you playing quickly.',
|
|
146
|
-
video: {
|
|
147
|
-
external_id: '1002267396',
|
|
148
|
-
hlsManifestUrl:
|
|
149
|
-
'https://player.vimeo.com/external/250467786.m3u8?s=52dc97fc96fe903d80bf71bc1b1709cc444db407&oauth2_token_id=1284792283',
|
|
150
|
-
type: 'vimeo-video',
|
|
151
|
-
},
|
|
152
|
-
},
|
|
153
|
-
pianote: {
|
|
154
|
-
id: 412405,
|
|
155
|
-
title: 'Getting Started On The Piano',
|
|
156
|
-
difficulty: 'Beginner',
|
|
157
|
-
lesson_count: 4,
|
|
158
|
-
skill_count: 3,
|
|
159
|
-
badge:
|
|
160
|
-
'https://cdn.sanity.io/files/4032r8py/staging/9470587f03479b7c1f8019c3cbcbdfe12aa267f3.png',
|
|
161
|
-
description:
|
|
162
|
-
'The goal of this course is to introduce you to the keys, and get you playing a song as fast as possible. ',
|
|
163
|
-
video: {
|
|
164
|
-
external_id: '1001267395',
|
|
165
|
-
hlsManifestUrl:
|
|
166
|
-
'https://player.vimeo.com/external/1001267395.m3u8?s=8f8d8a8a762f688058e6e6fd6704c402baf1b797&oauth2_token_id=1284792283',
|
|
167
|
-
type: 'vimeo-video',
|
|
168
|
-
},
|
|
169
|
-
},
|
|
170
|
-
guitareo: {
|
|
171
|
-
id: 191346,
|
|
172
|
-
title: 'Understanding Your Instrument',
|
|
173
|
-
difficulty: 'Beginner',
|
|
174
|
-
lesson_count: 6,
|
|
175
|
-
skill_count: 5,
|
|
176
|
-
badge:
|
|
177
|
-
'https://cdn.sanity.io/files/4032r8py/staging/9470587f03479b7c1f8019c3cbcbdfe12aa267f3.png',
|
|
178
|
-
description:
|
|
179
|
-
'New to the acoustic guitar? Then this Course is for you! Learn everything you need to get started on the acoustic guitar, and start playing music as fast as possible!',
|
|
180
|
-
video: {
|
|
181
|
-
external_id: '1003267397',
|
|
182
|
-
hlsManifestUrl:
|
|
183
|
-
'https://player.vimeo.com/external/166972298.m3u8?s=a93bfe96a4ce9ac5a4eba3441838847ef2eafc9b&oauth2_token_id=1284792283',
|
|
184
|
-
type: 'vimeo-video',
|
|
185
|
-
},
|
|
186
|
-
},
|
|
187
|
-
singeo: {
|
|
188
|
-
id: 415737,
|
|
189
|
-
title: 'Sound Like A Star — Mastering Iconic Pop Voices',
|
|
190
|
-
difficulty: 'Beginner',
|
|
191
|
-
lesson_count: 5,
|
|
192
|
-
skill_count: 4,
|
|
193
|
-
badge:
|
|
194
|
-
'https://cdn.sanity.io/files/4032r8py/staging/9470587f03479b7c1f8019c3cbcbdfe12aa267f3.png',
|
|
195
|
-
description:
|
|
196
|
-
'Welcome to the Singing Starter Kit! This course will teach you everything you need to know to sound better when you sing! You will learn how your unique voice works so that you can develop vocal strength, accurate pitch, and find confidence singing your favorite songs. You can sing, and the Singing Starter Kit is the perfect way to start your singing journey.',
|
|
197
|
-
video: {
|
|
198
|
-
external_id: '1004267398',
|
|
199
|
-
hlsManifestUrl:
|
|
200
|
-
'https://player.vimeo.com/external/1040159819.m3u8?s=f238ad1a650fb30a49c36d61996c982f06ffffb1&oauth2_token_id=1284792283',
|
|
201
|
-
type: 'vimeo-video',
|
|
202
|
-
},
|
|
203
|
-
},
|
|
204
|
-
playbass: {
|
|
205
|
-
id: 191346,
|
|
206
|
-
title: 'Understanding Your Instrument',
|
|
207
|
-
difficulty: 'Beginner',
|
|
208
|
-
lesson_count: 6,
|
|
209
|
-
skill_count: 5,
|
|
210
|
-
badge:
|
|
211
|
-
'https://cdn.sanity.io/files/4032r8py/staging/9470587f03479b7c1f8019c3cbcbdfe12aa267f3.png',
|
|
212
|
-
description:
|
|
213
|
-
'New to the acoustic guitar? Then this Course is for you! Learn everything you need to get started on the acoustic guitar, and start playing music as fast as possible!',
|
|
214
|
-
video: {
|
|
215
|
-
external_id: '1003267397',
|
|
216
|
-
hlsManifestUrl:
|
|
217
|
-
'https://player.vimeo.com/external/166972298.m3u8?s=a93bfe96a4ce9ac5a4eba3441838847ef2eafc9b&oauth2_token_id=1284792283',
|
|
218
|
-
type: 'vimeo-video',
|
|
219
|
-
},
|
|
220
|
-
},
|
|
131
|
+
export interface OnboardingRecommendationResponse {
|
|
132
|
+
recommendation: OnboardingRecommendedContent
|
|
133
|
+
user_onboarding: Onboarding
|
|
221
134
|
}
|
|
222
135
|
|
|
223
136
|
/**
|
|
224
137
|
* Fetches recommended content for onboarding based on the specified brand.
|
|
225
138
|
*
|
|
226
|
-
* @param {
|
|
227
|
-
* @
|
|
228
|
-
* @returns {Promise<OnboardingRecommendedContent>} - A promise that resolves with the recommended content.
|
|
139
|
+
* @param {number} onboardingId - The ID of the onboarding process.
|
|
140
|
+
* @returns {Promise<OnboardingRecommendationResponse>} - A promise that resolves with the recommended content.
|
|
229
141
|
* @throws {HttpError} - If the HTTP request fails.
|
|
230
142
|
*/
|
|
231
143
|
export async function getOnboardingRecommendedContent(
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
// TODO: Replace with real API call when available
|
|
236
|
-
if (recommendedContentCache[brand]) {
|
|
237
|
-
return recommendedContentCache[brand]
|
|
238
|
-
}
|
|
239
|
-
|
|
240
|
-
return {
|
|
241
|
-
id: 412405,
|
|
242
|
-
title: 'Getting Started On The Piano',
|
|
243
|
-
difficulty: 'Beginner',
|
|
244
|
-
lesson_count: 4,
|
|
245
|
-
skill_count: 3,
|
|
246
|
-
badge:
|
|
247
|
-
'https://cdn.sanity.io/files/4032r8py/staging/9470587f03479b7c1f8019c3cbcbdfe12aa267f3.png',
|
|
248
|
-
description:
|
|
249
|
-
'The goal of this course is to introduce you to the keys, and get you playing a song as fast as possible. ',
|
|
250
|
-
video: {
|
|
251
|
-
external_id: '1001267395',
|
|
252
|
-
hlsManifestUrl:
|
|
253
|
-
'https://player.vimeo.com/external/1001267395.m3u8?s=8f8d8a8a762f688058e6e6fd6704c402baf1b797&oauth2_token_id=1284792283',
|
|
254
|
-
type: 'vimeo-video',
|
|
255
|
-
},
|
|
256
|
-
}
|
|
144
|
+
onboardingId: number
|
|
145
|
+
): Promise<OnboardingRecommendationResponse> {
|
|
146
|
+
return POST(`/api/user-management-system/v1/onboardings/${onboardingId}/recommendation`, {})
|
|
257
147
|
}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
package/test/HttpClient.test.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
|
package/test/content.test.js
CHANGED
|
File without changes
|
|
File without changes
|
|
File without changes
|
package/test/dataContext.test.js
CHANGED
|
File without changes
|
package/test/forum.test.js
CHANGED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
package/test/localStorageMock.js
CHANGED
|
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
|
package/tools/generate-index.cjs
CHANGED
|
File without changes
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"permissions": {
|
|
3
|
-
"allow": [
|
|
4
|
-
"Bash(find:*)",
|
|
5
|
-
"Bash(docker exec:*)",
|
|
6
|
-
"Bash(npm test:*)",
|
|
7
|
-
"WebSearch",
|
|
8
|
-
"WebFetch(domain:watermelondb.dev)",
|
|
9
|
-
"WebFetch(domain:github.com)",
|
|
10
|
-
"Bash(git checkout:*)",
|
|
11
|
-
"Bash(npm run doc:*)",
|
|
12
|
-
"Bash(cat:*)",
|
|
13
|
-
"Bash(tr:*)",
|
|
14
|
-
"Bash(npm run build-index:*)"
|
|
15
|
-
],
|
|
16
|
-
"deny": [],
|
|
17
|
-
"ask": []
|
|
18
|
-
}
|
|
19
|
-
}
|