musora-content-services 2.43.0 → 2.45.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.
Files changed (181) hide show
  1. package/.coderabbit.yaml +0 -0
  2. package/.editorconfig +0 -0
  3. package/.github/pull_request_template.md +0 -0
  4. package/.github/workflows/conventional-commits.yaml +0 -0
  5. package/.github/workflows/docs.js.yml +0 -0
  6. package/.github/workflows/node.js.yml +0 -0
  7. package/.prettierignore +0 -0
  8. package/.prettierrc +0 -0
  9. package/.yarnrc.yml +1 -0
  10. package/CHANGELOG.md +19 -0
  11. package/README.md +0 -0
  12. package/babel.config.cjs +0 -0
  13. package/docs/ContentOrganization.html +2 -2
  14. package/docs/Forums.html +2 -2
  15. package/docs/Gamification.html +2 -2
  16. package/docs/UserManagementSystem.html +2 -2
  17. package/docs/api_types.js.html +2 -2
  18. package/docs/config.js.html +2 -2
  19. package/docs/content-org_content-org.js.html +2 -2
  20. package/docs/content-org_guided-courses.ts.html +2 -2
  21. package/docs/content-org_playlists-types.js.html +2 -2
  22. package/docs/content-org_playlists.js.html +2 -2
  23. package/docs/content.js.html +2 -2
  24. package/docs/fonts/Montserrat/Montserrat-Bold.eot +0 -0
  25. package/docs/fonts/Montserrat/Montserrat-Bold.ttf +0 -0
  26. package/docs/fonts/Montserrat/Montserrat-Bold.woff +0 -0
  27. package/docs/fonts/Montserrat/Montserrat-Bold.woff2 +0 -0
  28. package/docs/fonts/Montserrat/Montserrat-Regular.eot +0 -0
  29. package/docs/fonts/Montserrat/Montserrat-Regular.ttf +0 -0
  30. package/docs/fonts/Montserrat/Montserrat-Regular.woff +0 -0
  31. package/docs/fonts/Montserrat/Montserrat-Regular.woff2 +0 -0
  32. package/docs/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.eot +0 -0
  33. package/docs/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.svg +0 -0
  34. package/docs/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.ttf +0 -0
  35. package/docs/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.woff +0 -0
  36. package/docs/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.woff2 +0 -0
  37. package/docs/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.eot +0 -0
  38. package/docs/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.svg +0 -0
  39. package/docs/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.ttf +0 -0
  40. package/docs/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.woff +0 -0
  41. package/docs/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.woff2 +0 -0
  42. package/docs/forums_categories.ts.html +2 -2
  43. package/docs/forums_discussions.js.html +0 -0
  44. package/docs/forums_forum.js.html +0 -0
  45. package/docs/forums_forums.ts.html +2 -2
  46. package/docs/forums_posts.ts.html +132 -0
  47. package/docs/forums_threads.ts.html +76 -5
  48. package/docs/gamification_awards.js.html +0 -0
  49. package/docs/gamification_awards.ts.html +2 -2
  50. package/docs/gamification_gamification.js.html +2 -2
  51. package/docs/gamification_types.js.html +0 -0
  52. package/docs/global.html +2 -2
  53. package/docs/index.html +2 -2
  54. package/docs/module-Accounts.html +2 -2
  55. package/docs/module-Awards.html +2 -2
  56. package/docs/module-Categories.html +24 -0
  57. package/docs/module-Config.html +2 -2
  58. package/docs/module-Content-Services-V2.html +2 -2
  59. package/docs/module-ForumDiscussions.html +0 -0
  60. package/docs/module-Forums.html +6225 -222
  61. package/docs/module-GuidedCourses.html +2 -2
  62. package/docs/module-Interests.html +2 -2
  63. package/docs/module-Payments.html +2 -2
  64. package/docs/module-Permissions.html +2 -2
  65. package/docs/module-Playlists.html +2 -2
  66. package/docs/module-Railcontent-Services.html +2 -2
  67. package/docs/module-Sanity-Services.html +10 -175
  68. package/docs/module-Sessions.html +2 -2
  69. package/docs/module-Threads.html +176 -1
  70. package/docs/module-UserActivity.html +2 -2
  71. package/docs/module-UserChat.html +2 -2
  72. package/docs/module-UserManagement.html +2 -2
  73. package/docs/module-UserMemberships.html +2 -2
  74. package/docs/module-UserNotifications.html +2 -2
  75. package/docs/module-UserProfile.html +2 -2
  76. package/docs/railcontent.js.html +2 -2
  77. package/docs/sanity.js.html +3 -25
  78. package/docs/scripts/collapse.js +0 -0
  79. package/docs/scripts/commonNav.js +0 -0
  80. package/docs/scripts/linenumber.js +0 -0
  81. package/docs/scripts/nav.js +0 -0
  82. package/docs/scripts/polyfill.js +0 -0
  83. package/docs/scripts/prettify/Apache-License-2.0.txt +0 -0
  84. package/docs/scripts/prettify/lang-css.js +0 -0
  85. package/docs/scripts/prettify/prettify.js +0 -0
  86. package/docs/scripts/search.js +0 -0
  87. package/docs/styles/jsdoc.css +0 -0
  88. package/docs/styles/prettify.css +0 -0
  89. package/docs/userActivity.js.html +2 -2
  90. package/docs/user_account.ts.html +2 -2
  91. package/docs/user_chat.js.html +2 -2
  92. package/docs/user_interests.js.html +2 -2
  93. package/docs/user_management.js.html +2 -2
  94. package/docs/user_memberships.js.html +2 -2
  95. package/docs/user_notifications.js.html +2 -2
  96. package/docs/user_payments.ts.html +2 -2
  97. package/docs/user_permissions.js.html +2 -2
  98. package/docs/user_profile.js.html +2 -2
  99. package/docs/user_sessions.js.html +5 -5
  100. package/docs/user_types.js.html +2 -2
  101. package/docs/user_user-management-system.js.html +2 -2
  102. package/jest.config.js +0 -0
  103. package/jsdoc.json +0 -0
  104. package/package.json +1 -1
  105. package/src/contentMetaData.js +0 -0
  106. package/src/filterBuilder.js +0 -0
  107. package/src/index.d.ts +18 -1
  108. package/src/index.js +18 -1
  109. package/src/infrastructure/http/HttpClient.ts +0 -0
  110. package/src/infrastructure/http/executors/FetchRequestExecutor.ts +0 -0
  111. package/src/infrastructure/http/index.ts +0 -0
  112. package/src/infrastructure/http/interfaces/HeaderProvider.ts +0 -0
  113. package/src/infrastructure/http/interfaces/HttpError.ts +0 -0
  114. package/src/infrastructure/http/interfaces/NetworkError.ts +0 -0
  115. package/src/infrastructure/http/interfaces/RequestExecutor.ts +0 -0
  116. package/src/infrastructure/http/interfaces/RequestOptions.ts +0 -0
  117. package/src/infrastructure/http/providers/DefaultHeaderProvider.ts +0 -0
  118. package/src/lib/httpHelper.js +0 -0
  119. package/src/lib/lastUpdated.js +0 -0
  120. package/src/services/api/types.js +0 -0
  121. package/src/services/api/types.ts +0 -0
  122. package/src/services/config.js +0 -0
  123. package/src/services/content-org/content-org.js +0 -0
  124. package/src/services/content-org/guided-courses.ts +0 -0
  125. package/src/services/content-org/playlists-types.js +0 -0
  126. package/src/services/content-org/playlists.js +0 -0
  127. package/src/services/content.js +0 -0
  128. package/src/services/contentAggregator.js +0 -0
  129. package/src/services/contentLikes.js +0 -0
  130. package/src/services/dataContext.js +0 -0
  131. package/src/services/dateUtils.js +0 -0
  132. package/src/services/eventsAPI.js +0 -0
  133. package/src/services/forum.js +0 -0
  134. package/src/services/forums/forums.ts +0 -0
  135. package/src/services/forums/posts.ts +60 -0
  136. package/src/services/forums/threads.ts +74 -3
  137. package/src/services/forums/types.ts +2 -0
  138. package/src/services/gamification/gamification.js +0 -0
  139. package/src/services/imageSRCBuilder.js +0 -0
  140. package/src/services/imageSRCVerify.js +0 -0
  141. package/src/services/railcontent.js +0 -0
  142. package/src/services/recommendations.js +0 -0
  143. package/src/services/types.js +0 -0
  144. package/src/services/user/account.ts +0 -0
  145. package/src/services/user/chat.js +0 -0
  146. package/src/services/user/interests.js +0 -0
  147. package/src/services/user/management.js +0 -0
  148. package/src/services/user/notifications.js +0 -0
  149. package/src/services/user/payments.ts +0 -0
  150. package/src/services/user/permissions.js +0 -0
  151. package/src/services/user/profile.js +0 -0
  152. package/src/services/user/sessions.js +3 -3
  153. package/src/services/user/types.js +0 -0
  154. package/src/services/user/user-management-system.js +0 -0
  155. package/src/services/userActivity.js +0 -0
  156. package/test/HttpClient.test.js +0 -0
  157. package/test/content.test.js +0 -0
  158. package/test/contentLikes.test.js +0 -0
  159. package/test/contentProgress.test.js +0 -0
  160. package/test/dataContext.test.js +0 -0
  161. package/test/forum.test.js +0 -0
  162. package/test/imageSRCBuilder.test.js +0 -0
  163. package/test/imageSRCVerify.test.js +0 -0
  164. package/test/initializeTests.js +0 -0
  165. package/test/lib/lastUpdated.test.js +0 -0
  166. package/test/live/contentProgressLive.test.js +0 -0
  167. package/test/live/railcontentLive.test.js +0 -0
  168. package/test/localStorageMock.js +0 -0
  169. package/test/log.js +0 -0
  170. package/test/mockData/mockData_fetchByRailContentIds_one_content.json +0 -0
  171. package/test/mockData/mockData_progress_content.json +0 -0
  172. package/test/mockData/mockData_sanity_progress_content.json +0 -0
  173. package/test/mockData/mockData_user_practices.json +0 -0
  174. package/test/notifications.test.js +0 -0
  175. package/test/progressRows.test.js +0 -0
  176. package/test/sanityQueryService.test.js +0 -0
  177. package/test/streakMessage.test.js +0 -0
  178. package/test/user/permissions.test.js +0 -0
  179. package/test/userActivity.test.js +0 -0
  180. package/tools/generate-index.cjs +0 -0
  181. package/.claude/settings.local.json +0 -8
package/src/index.js CHANGED
@@ -98,11 +98,21 @@ import {
98
98
  updateForumCategory
99
99
  } from './services/forums/categories.ts';
100
100
 
101
+ import {
102
+ createPost,
103
+ fetchPosts
104
+ } from './services/forums/posts.ts';
105
+
101
106
  import {
102
107
  createThread,
103
108
  fetchThreads,
104
109
  followThread,
105
- unfollowThread
110
+ lockThread,
111
+ pinThread,
112
+ unfollowThread,
113
+ unlockThread,
114
+ unpinThread,
115
+ updateThread
106
116
  } from './services/forums/threads.ts';
107
117
 
108
118
  import {
@@ -356,6 +366,7 @@ export {
356
366
  createComment,
357
367
  createForumCategory,
358
368
  createPlaylist,
369
+ createPost,
359
370
  createPracticeNotes,
360
371
  createThread,
361
372
  deleteComment,
@@ -428,6 +439,7 @@ export {
428
439
  fetchPlayAlongsCount,
429
440
  fetchPlaylist,
430
441
  fetchPlaylistItems,
442
+ fetchPosts,
431
443
  fetchRecent,
432
444
  fetchRecentActivitiesActiveTabs,
433
445
  fetchRecentUserActivities,
@@ -514,6 +526,7 @@ export {
514
526
  likeComment,
515
527
  likeContent,
516
528
  likePlaylist,
529
+ lockThread,
517
530
  logUserPractice,
518
531
  login,
519
532
  loginWithProvider,
@@ -527,6 +540,7 @@ export {
527
540
  otherStats,
528
541
  pauseLiveEventPolling,
529
542
  pinProgressRow,
543
+ pinThread,
530
544
  postContentComplete,
531
545
  postContentLiked,
532
546
  postContentReset,
@@ -572,12 +586,15 @@ export {
572
586
  unlikeComment,
573
587
  unlikeContent,
574
588
  unlikePlaylist,
589
+ unlockThread,
575
590
  unpinProgressRow,
591
+ unpinThread,
576
592
  updateDisplayName,
577
593
  updateForumCategory,
578
594
  updateNotificationSetting,
579
595
  updatePlaylist,
580
596
  updatePracticeNotes,
597
+ updateThread,
581
598
  updateUserPractice,
582
599
  upgradeSubscription,
583
600
  uploadPicture,
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -0,0 +1,60 @@
1
+ /**
2
+ * @module Forums
3
+ */
4
+ import { HttpClient } from '../../infrastructure/http/HttpClient'
5
+ import { globalConfig } from '../config.js'
6
+ import {ForumPost} from './types'
7
+ import { PaginatedResponse } from '../api/types'
8
+
9
+ const baseUrl = `/api/forums`
10
+
11
+ export interface CreatePostParams {
12
+ content: string
13
+ brand: string
14
+ }
15
+
16
+ /**
17
+ * Creates a new post under a forum thread.
18
+ *
19
+ * @param {CreatePostParams} params - The parameters for creating the post.
20
+ * @returns {Promise<ForumPost>} - A promise that resolves to the created post.
21
+ * @throws {HttpError} - If the request fails.
22
+ */
23
+ export async function createPost(
24
+ threadId: number,
25
+ params: CreatePostParams
26
+ ): Promise<ForumPost> {
27
+ const httpClient = new HttpClient(globalConfig.baseUrl)
28
+ return httpClient.post<ForumPost>(`${baseUrl}/v1/threads/${threadId}/posts`, params)
29
+ }
30
+
31
+ export interface FetchPostParams {
32
+ page?: number,
33
+ limit?: number,
34
+ /** Sort order: "-published_on" (default), "published_on", or "mine". */
35
+ sort?: '-published_on' | string
36
+ }
37
+ /**
38
+ * Fetches posts for the given thread.
39
+ *
40
+ * @param {number} threadId - The ID of the forum thread.
41
+ * @param {string} brand - The brand context (e.g., "drumeo", "singeo").
42
+ * @param {FetchPostParams} [params] - Optional parameters such as `page`, `limit`, and `sort`.
43
+ * @returns {Promise<PaginatedResponse<ForumPost>>} - Resolves to a paginated list of forum posts.
44
+ * @throws {HttpError} - If the request fails.
45
+ */
46
+ export async function fetchPosts(
47
+ threadId: number,
48
+ brand: string,
49
+ params: FetchPostParams = {}
50
+ ): Promise<PaginatedResponse<ForumPost>> {
51
+ const httpClient = new HttpClient(globalConfig.baseUrl)
52
+ const queryObj: Record<string, string> = { brand, ...Object.fromEntries(
53
+ Object.entries(params).filter(([_, v]) => v !== undefined && v !== null).map(([k, v]) => [k, String(v)])
54
+ )}
55
+ const query = new URLSearchParams(queryObj).toString()
56
+
57
+ const url = `${baseUrl}/v1/threads/${threadId}/posts?${query}`
58
+ return httpClient.get<PaginatedResponse<ForumPost>>(url)
59
+ }
60
+
@@ -9,9 +9,8 @@ import { PaginatedResponse } from '../api/types'
9
9
  const baseUrl = `/api/forums`
10
10
 
11
11
  export interface CreateThreadParams {
12
- name: string
13
- description: string
14
- weight: number
12
+ title: string
13
+ first_post_content: string
15
14
  brand: string
16
15
  }
17
16
 
@@ -30,6 +29,26 @@ export async function createThread(
30
29
  return httpClient.post<ForumThread>(`${baseUrl}/v1/categories/${categoryId}/threads`, params)
31
30
  }
32
31
 
32
+ export interface UpdateThreadParams {
33
+ title: string
34
+ brand: string
35
+ }
36
+ /**
37
+ * Updates an existing thread under a forum category.
38
+ *
39
+ * @param {number} threadId - The ID of the thread to update.
40
+ * @param {UpdateThreadParams} params - The parameters for updating the thread.
41
+ * @returns {Promise<ForumThread>} - A promise that resolves to the updated thread.
42
+ * @throws {HttpError} - If the request fails.
43
+ */
44
+ export async function updateThread(
45
+ threadId: number,
46
+ params: UpdateThreadParams
47
+ ): Promise<ForumThread> {
48
+ const httpClient = new HttpClient(globalConfig.baseUrl)
49
+ return httpClient.put<ForumThread>(`${baseUrl}/v1/threads/${threadId}`, params)
50
+ }
51
+
33
52
  /**
34
53
  * Follow a thread.
35
54
  *
@@ -86,3 +105,55 @@ export async function fetchThreads(
86
105
  return httpClient.get<PaginatedResponse<ForumThread>>(url)
87
106
  }
88
107
 
108
+ /**
109
+ * Pins a thread to the top of its category.
110
+ *
111
+ * @param {number} threadId - The ID of the thread to pin.
112
+ * @param {string} brand - The brand context (e.g., "drumeo", "singeo").
113
+ * @return {Promise<void>} - A promise that resolves when the thread is pinned.
114
+ * @throws {HttpError} - If the request fails.
115
+ */
116
+ export async function pinThread(threadId: number, brand: string): Promise<void> {
117
+ const httpClient = new HttpClient(globalConfig.baseUrl)
118
+ return httpClient.post<void>(`${baseUrl}/v1/threads/${threadId}/pin`, { brand })
119
+ }
120
+
121
+ /**
122
+ * Unpins a thread from the top of its category.
123
+ *
124
+ * @param {number} threadId - The ID of the thread to unpin.
125
+ * @param {string} brand - The brand context (e.g., "drumeo", "singeo").
126
+ * @return {Promise<void>} - A promise that resolves when the thread is unpinned.
127
+ * @throws {HttpError} - If the request fails.
128
+ */
129
+ export async function unpinThread(threadId: number, brand: string): Promise<void> {
130
+ const httpClient = new HttpClient(globalConfig.baseUrl)
131
+ return httpClient.delete<void>(`${baseUrl}/v1/threads/${threadId}/pin?brand=${brand}`)
132
+ }
133
+
134
+ /**
135
+ * Locks a thread to prevent further posts.
136
+ *
137
+ * @param {number} threadId - The ID of the thread to lock.
138
+ * @param {string} brand - The brand context (e.g., "drumeo", "singeo").
139
+ * @return {Promise<void>} - A promise that resolves when the thread is locked.
140
+ * @throws {HttpError} - If the request fails.
141
+ */
142
+ export async function lockThread(threadId: number, brand: string): Promise<void> {
143
+ const httpClient = new HttpClient(globalConfig.baseUrl)
144
+ return httpClient.post<void>(`${baseUrl}/v1/threads/${threadId}/unlock`, { brand })
145
+ }
146
+
147
+ /**
148
+ * Unlock a thread to allow further posts.
149
+ *
150
+ * @param {number} threadId - The ID of the thread to unlock.
151
+ * @param {string} brand - The brand context (e.g., "drumeo", "singeo").
152
+ * @return {Promise<void>} - A promise that resolves when the thread is unlocked.
153
+ * @throws {HttpError} - If the request fails.
154
+ */
155
+ export async function unlockThread(threadId: number, brand: string): Promise<void> {
156
+ const httpClient = new HttpClient(globalConfig.baseUrl)
157
+ return httpClient.delete<void>(`${baseUrl}/v1/threads/${threadId}/lock?brand=${brand}`)
158
+ }
159
+
@@ -10,6 +10,8 @@ export interface ForumPost {
10
10
  created_at: string
11
11
  created_at_human: string
12
12
  author: ForumUser | null
13
+ like_count: number
14
+ is_liked: boolean
13
15
  }
14
16
 
15
17
  export interface ForumThread {
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -45,8 +45,8 @@ export async function login(email, password, deviceName, deviceToken, platform)
45
45
  }),
46
46
  })
47
47
  }
48
-
49
- export async function loginWithProvider(provider, providerIdToken, deviceToken, deviceName, platform) {
48
+ //Removing 3rdParty OAuth2 for now => https://musora.atlassian.net/browse/BEH-624?focusedCommentId=21492
49
+ /*export async function loginWithProvider(provider, providerIdToken, deviceToken, deviceName, platform) {
50
50
  const baseUrl = `${globalConfig.baseUrl}/api/user-management-system`
51
51
 
52
52
  try {
@@ -74,7 +74,7 @@ export async function loginWithProvider(provider, providerIdToken, deviceToken,
74
74
  console.error('loginWithProvider failed', err)
75
75
  throw err
76
76
  }
77
- }
77
+ }*/
78
78
 
79
79
  /**
80
80
  * Logs the user out of the current session.
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
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
@@ -1,8 +0,0 @@
1
- {
2
- "permissions": {
3
- "allow": [
4
- "Bash(rg:*)"
5
- ],
6
- "deny": []
7
- }
8
- }