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
|
@@ -1,21 +1,32 @@
|
|
|
1
1
|
import { db } from '../sync'
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
2
|
+
import type { ModelSerialized } from '../sync/serializers'
|
|
3
|
+
import ContentProgress, { COLLECTION_TYPE, CollectionParameter } from '../sync/models/ContentProgress'
|
|
4
|
+
import { queryById, queryByIds, queryByRecordIds } from './internal/queries'
|
|
4
5
|
import type { ProgressSnapshot } from './types'
|
|
5
6
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
7
|
+
const buildSnapshotMap = <K extends string | number>(
|
|
8
|
+
ids: K[],
|
|
9
|
+
records: ModelSerialized<ContentProgress>[],
|
|
10
|
+
keyOf: (p: ModelSerialized<ContentProgress>) => K,
|
|
11
|
+
lastUpdateOf: (p: ModelSerialized<ContentProgress>) => number
|
|
12
|
+
): Map<K, ProgressSnapshot> => {
|
|
13
|
+
const overrides = new Map(
|
|
14
|
+
records.map((p) => [
|
|
15
|
+
keyOf(p),
|
|
16
|
+
{ last_update: lastUpdateOf(p), progress: p.progress_percent, status: p.state as string },
|
|
17
|
+
])
|
|
18
|
+
)
|
|
19
|
+
return new Map(
|
|
20
|
+
ids.map((id) => [id, overrides.get(id) ?? { last_update: 0, progress: 0, status: '' }])
|
|
21
|
+
)
|
|
22
|
+
}
|
|
13
23
|
|
|
14
|
-
export const
|
|
15
|
-
|
|
24
|
+
export const state = queryById((p) => p.state as string, '')
|
|
25
|
+
export const stateByIds = queryByIds((p) => p.state as string, '')
|
|
26
|
+
export const stateByRecordIds = queryByRecordIds((p) => p.state as string, '')
|
|
16
27
|
|
|
17
|
-
export const
|
|
18
|
-
|
|
28
|
+
export const playbackPositionByIds = queryByIds((p) => p.resume_time_seconds ?? 0, 0)
|
|
29
|
+
export const playbackPositionByRecordIds = queryByRecordIds((p) => p.resume_time_seconds ?? 0, 0)
|
|
19
30
|
|
|
20
31
|
export const lastInteractedOf = (
|
|
21
32
|
contentIds: number[],
|
|
@@ -53,43 +64,17 @@ export const incompleteLesson = (
|
|
|
53
64
|
export const snapshotByIds = async (
|
|
54
65
|
contentIds: number[],
|
|
55
66
|
collection?: CollectionParameter
|
|
56
|
-
): Promise<Map<number, ProgressSnapshot>> =>
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
await db.contentProgress.getSomeProgressByContentIds(contentIds, collection).then((r) => {
|
|
62
|
-
r.data.forEach((p) => {
|
|
63
|
-
result.set(p.content_id, {
|
|
64
|
-
last_update: p.last_interacted_a_la_carte,
|
|
65
|
-
progress: p.progress_percent,
|
|
66
|
-
status: p.state,
|
|
67
|
-
})
|
|
68
|
-
})
|
|
69
|
-
})
|
|
70
|
-
|
|
71
|
-
return result
|
|
72
|
-
}
|
|
67
|
+
): Promise<Map<number, ProgressSnapshot>> =>
|
|
68
|
+
db.contentProgress
|
|
69
|
+
.getSomeProgressByContentIds(contentIds, collection)
|
|
70
|
+
.then((r) => buildSnapshotMap(contentIds, r.data, (p) => p.content_id, (p) => p.last_interacted_a_la_carte))
|
|
73
71
|
|
|
74
72
|
export const snapshotByRecordIds = async (
|
|
75
73
|
ids: string[]
|
|
76
|
-
): Promise<Record<string, ProgressSnapshot>> =>
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
await db.contentProgress.getSomeProgressByRecordIds(ids).then((r) => {
|
|
82
|
-
r.data.forEach((p) => {
|
|
83
|
-
result[p.id] = {
|
|
84
|
-
last_update: p.updated_at,
|
|
85
|
-
progress: p.progress_percent,
|
|
86
|
-
status: p.state,
|
|
87
|
-
}
|
|
88
|
-
})
|
|
89
|
-
})
|
|
90
|
-
|
|
91
|
-
return result
|
|
92
|
-
}
|
|
74
|
+
): Promise<Record<string, ProgressSnapshot>> =>
|
|
75
|
+
db.contentProgress
|
|
76
|
+
.getSomeProgressByRecordIds(ids)
|
|
77
|
+
.then((r) => Object.fromEntries(buildSnapshotMap(ids, r.data, (p) => p.id, (p) => p.updated_at)))
|
|
93
78
|
|
|
94
79
|
export const methodAccessedIds = async (contentIds: number[]): Promise<number[]> =>
|
|
95
80
|
db.contentProgress
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
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/search.ts
CHANGED
|
File without changes
|
|
File without changes
|
|
File without changes
|
package/src/services/state.ts
CHANGED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
package/src/services/types.js
CHANGED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -23,6 +23,7 @@ export interface MembershipData {
|
|
|
23
23
|
export interface UserMembershipResponse {
|
|
24
24
|
user_membership_data: MembershipData[]
|
|
25
25
|
can_upgrade_membership: boolean // pre multiUserAccount data
|
|
26
|
+
need_lifetime_upgrade: boolean
|
|
26
27
|
sub_account_data: MultiUserAccountResponse // post multiUserAccount data
|
|
27
28
|
upgrade_options: UpgradeOption[] // post multiuser account data
|
|
28
29
|
}
|
|
@@ -148,6 +149,7 @@ export async function fetchRechargeTokens(): Promise<RechargeTokens> {
|
|
|
148
149
|
* Upgrades the user's subscription or provides a prefilled add-to-cart URL.
|
|
149
150
|
*
|
|
150
151
|
* @param {boolean} featureFlag - MultiUserAccount feature Flag - default false
|
|
152
|
+
* @param {string} sku- product sku to upgrade to, required if feature flag is set
|
|
151
153
|
*
|
|
152
154
|
* @returns {Promise<UpgradeSubscriptionResponse>} A promise that resolves to an object containing either:
|
|
153
155
|
* - {string} action - The action performed (e.g., 'instant_upgrade').
|
|
@@ -163,10 +165,11 @@ export async function fetchRechargeTokens(): Promise<RechargeTokens> {
|
|
|
163
165
|
* .then(response => console.log(response))
|
|
164
166
|
* .catch(error => console.error(error));
|
|
165
167
|
*/
|
|
166
|
-
export async function upgradeSubscription(featureFlag = false): Promise<UpgradeSubscriptionResponse> {
|
|
168
|
+
export async function upgradeSubscription(featureFlag = false, sku): Promise<UpgradeSubscriptionResponse> {
|
|
167
169
|
let featureFlagValue = featureFlag ? 1 : 0
|
|
170
|
+
let skuValue = sku ? `&sku=${sku}` : ''
|
|
168
171
|
const httpClient = new HttpClient(globalConfig.baseUrl)
|
|
169
|
-
return httpClient.get<UpgradeSubscriptionResponse>(`${baseUrl}/v1/update-subscription?${multiUserAccountFeatureFlag}=${featureFlagValue}`)
|
|
172
|
+
return httpClient.get<UpgradeSubscriptionResponse>(`${baseUrl}/v1/update-subscription?${multiUserAccountFeatureFlag}=${featureFlagValue}${skuValue}`)
|
|
170
173
|
}
|
|
171
174
|
|
|
172
175
|
/**
|
|
File without changes
|
|
File without changes
|
|
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/whoLiked.ts
CHANGED
|
File without changes
|
package/test/initializeTests.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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
package/test/live/README.md
CHANGED
|
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
|
package/test/setupConsole.js
CHANGED
|
File without changes
|
|
File without changes
|
package/test/setupTimers.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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|