synapse-react-client 4.0.9 → 4.0.10

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 (543) hide show
  1. package/dist/SWC.index.d.ts +1 -0
  2. package/dist/SWC.index.d.ts.map +1 -1
  3. package/dist/SWC.index.js +2 -1
  4. package/dist/SWC.index.js.map +1 -1
  5. package/dist/aridhia-queries/aridhiaTokenExchange.js.map +1 -1
  6. package/dist/aridhia-queries/useGetAridhiaRequests.js.map +1 -1
  7. package/dist/assets/icons/TasksIcon.d.ts.map +1 -1
  8. package/dist/assets/icons/TasksIcon.js +6 -10
  9. package/dist/assets/icons/TasksIcon.js.map +1 -1
  10. package/dist/components/AccessRequirementAclEditor/AccessRequirementAclEditor.d.ts.map +1 -1
  11. package/dist/components/AccessRequirementAclEditor/AccessRequirementAclEditor.js +69 -63
  12. package/dist/components/AccessRequirementAclEditor/AccessRequirementAclEditor.js.map +1 -1
  13. package/dist/components/AccessRequirementList/AccessApprovalCheckMark.js.map +1 -1
  14. package/dist/components/AccessRequirementList/AccessRequirementList.js.map +1 -1
  15. package/dist/components/AccessRequirementList/AccessRequirementListUtils.js.map +1 -1
  16. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/DataAccessRequestAccessorsEditor.js.map +1 -1
  17. package/dist/components/AccessRequirementList/RequirementItem/SelfSignAccessRequirementItem.js.map +1 -1
  18. package/dist/components/AccessRequirementRelatedProjectsList/AccessRequirementRelatedProjectsList.js.map +1 -1
  19. package/dist/components/AccessTokenPage/AccessTokenCard/AccessTokenCard.js.map +1 -1
  20. package/dist/components/AcknowledgementsPage/StudyAcknowledgements.js.map +1 -1
  21. package/dist/components/AclEditor/PermissionLevelMenu.js.map +1 -1
  22. package/dist/components/AclEditor/ResourceAccessAndUserGroupHeader.js.map +1 -1
  23. package/dist/components/AclEditor/useSortResourceAccessList.js.map +1 -1
  24. package/dist/components/AclEditor/useUpdateAcl.js.map +1 -1
  25. package/dist/components/Aridhia/AridhiaAccessStatus.js.map +1 -1
  26. package/dist/components/Authentication/AuthenticationMethodSelection.d.ts.map +1 -1
  27. package/dist/components/Authentication/AuthenticationMethodSelection.js +38 -37
  28. package/dist/components/Authentication/AuthenticationMethodSelection.js.map +1 -1
  29. package/dist/components/Authentication/Constants.d.ts +1 -0
  30. package/dist/components/Authentication/Constants.d.ts.map +1 -1
  31. package/dist/components/Authentication/Constants.js +2 -2
  32. package/dist/components/Authentication/Constants.js.map +1 -1
  33. package/dist/components/Authentication/LastLoginInfo.js.map +1 -1
  34. package/dist/components/Authentication/RecoveryCodeForm.js.map +1 -1
  35. package/dist/components/Authentication/RecoveryCodeGrid.js.map +1 -1
  36. package/dist/components/Authentication/RegenerateBackupCodesWarning.js.map +1 -1
  37. package/dist/components/Authentication/Reset2FAWarning.js.map +1 -1
  38. package/dist/components/Authentication/StandaloneLoginForm.js +1 -1
  39. package/dist/components/Authentication/TwoFactorBackupCodes.js.map +1 -1
  40. package/dist/components/Authentication/TwoFactorEnrollmentForm.d.ts.map +1 -1
  41. package/dist/components/Authentication/TwoFactorEnrollmentForm.js +2 -1
  42. package/dist/components/Authentication/TwoFactorEnrollmentForm.js.map +1 -1
  43. package/dist/components/BasePortalCard/ColorfulPortalCardWithChips/ColorfulPortalCardWithChips.js.map +1 -1
  44. package/dist/components/CardContainer/CardContainer.js.map +1 -1
  45. package/dist/components/CardDeck/CardDeck.Mobile.js.map +1 -1
  46. package/dist/components/CardDeck/TableQueryCardDeck.js.map +1 -1
  47. package/dist/components/CertificationQuiz/CertificationQuiz.js.map +1 -1
  48. package/dist/components/ChallengeDataDownload/ChallengeDataDownload.js.map +1 -1
  49. package/dist/components/ChallengeSubmission/ChallengeSubmission.js.map +1 -1
  50. package/dist/components/ChallengeSubmission/ChallengeSubmissionStepper.js.map +1 -1
  51. package/dist/components/ChallengeSubmission/EvaluationQueueCurrentRoundInfo.js.map +1 -1
  52. package/dist/components/ChallengeSubmission/EvaluationQueueList.js.map +1 -1
  53. package/dist/components/ChallengeSubmission/SubmissionDirectoryList.js.map +1 -1
  54. package/dist/components/ChallengeTeamWizard/ChallengeTeamWizard.js.map +1 -1
  55. package/dist/components/ChallengeTeamWizard/CreateChallengeTeam.js.map +1 -1
  56. package/dist/components/ChangePassword/ChangePassword.js.map +1 -1
  57. package/dist/components/ChangePassword/ChangePasswordWithToken.js.map +1 -1
  58. package/dist/components/ChangePassword/useChangePasswordFormState.js +1 -1
  59. package/dist/components/ChangePassword/useChangePasswordFormState.js.map +1 -1
  60. package/dist/components/CitationPopover/CitationPopoverContent.js.map +1 -1
  61. package/dist/components/ColumnFilter/ColumnFilter.js.map +1 -1
  62. package/dist/components/ComponentCollapse.js.map +1 -1
  63. package/dist/components/CookiesNotification/CookiesNotification.js.map +1 -1
  64. package/dist/components/CreateProjectModal/CreateProjectModal.js.map +1 -1
  65. package/dist/components/CreateTableViewWizard/CreateTableViewWizardUtils.js.map +1 -1
  66. package/dist/components/DataGrid/DataGrid.d.ts +0 -1
  67. package/dist/components/DataGrid/DataGrid.d.ts.map +1 -1
  68. package/dist/components/DataGrid/DataGrid.js +72 -72
  69. package/dist/components/DataGrid/DataGrid.js.map +1 -1
  70. package/dist/components/DataGrid/DataGridWebSocket.d.ts +4 -0
  71. package/dist/components/DataGrid/DataGridWebSocket.d.ts.map +1 -1
  72. package/dist/components/DataGrid/DataGridWebSocket.js +9 -8
  73. package/dist/components/DataGrid/DataGridWebSocket.js.map +1 -1
  74. package/dist/components/DataGrid/SynapseGrid.d.ts.map +1 -1
  75. package/dist/components/DataGrid/SynapseGrid.js +326 -268
  76. package/dist/components/DataGrid/SynapseGrid.js.map +1 -1
  77. package/dist/components/DataGrid/columns/AutocompleteColumn.d.ts +2 -0
  78. package/dist/components/DataGrid/columns/AutocompleteColumn.d.ts.map +1 -1
  79. package/dist/components/DataGrid/columns/AutocompleteColumn.js +113 -67
  80. package/dist/components/DataGrid/columns/AutocompleteColumn.js.map +1 -1
  81. package/dist/components/DataGrid/columns/AutocompleteMultipleEnumColumn.d.ts +2 -1
  82. package/dist/components/DataGrid/columns/AutocompleteMultipleEnumColumn.d.ts.map +1 -1
  83. package/dist/components/DataGrid/columns/AutocompleteMultipleEnumColumn.js +126 -122
  84. package/dist/components/DataGrid/columns/AutocompleteMultipleEnumColumn.js.map +1 -1
  85. package/dist/components/DataGrid/columns/useGridAutocompleteState.d.ts +58 -0
  86. package/dist/components/DataGrid/columns/useGridAutocompleteState.d.ts.map +1 -0
  87. package/dist/components/DataGrid/columns/useGridAutocompleteState.js +52 -0
  88. package/dist/components/DataGrid/columns/useGridAutocompleteState.js.map +1 -0
  89. package/dist/components/DataGrid/components/ValidationAlert.d.ts +5 -2
  90. package/dist/components/DataGrid/components/ValidationAlert.d.ts.map +1 -1
  91. package/dist/components/DataGrid/components/ValidationAlert.js +429 -24
  92. package/dist/components/DataGrid/components/ValidationAlert.js.map +1 -1
  93. package/dist/components/DataGrid/hooks/useColumnResizeHandles.js.map +1 -1
  94. package/dist/components/DataGrid/hooks/useGetSchemaForGrid.js.map +1 -1
  95. package/dist/components/DataGrid/hooks/useGridUndoRedo.js.map +1 -1
  96. package/dist/components/DataGrid/hooks/useStack.js.map +1 -1
  97. package/dist/components/DataGrid/useCRDTModelView.js.map +1 -1
  98. package/dist/components/DataGrid/useDataGridWebsocket.d.ts +7 -0
  99. package/dist/components/DataGrid/useDataGridWebsocket.d.ts.map +1 -1
  100. package/dist/components/DataGrid/useDataGridWebsocket.js +16 -2
  101. package/dist/components/DataGrid/useDataGridWebsocket.js.map +1 -1
  102. package/dist/components/DataGrid/useInitializeGridConnection.js.map +1 -1
  103. package/dist/components/DataGrid/useMergeGridWithRecordSet.js.map +1 -1
  104. package/dist/components/DataGrid/useMergeGridWithSource.js.map +1 -1
  105. package/dist/components/DataGrid/useMergeGridWithTable.js.map +1 -1
  106. package/dist/components/DataGrid/utils/DataGridUtils.js.map +1 -1
  107. package/dist/components/DataGrid/utils/applyModelChange.js.map +1 -1
  108. package/dist/components/DataGrid/utils/columnFactory.js.map +1 -1
  109. package/dist/components/DataGrid/utils/computeReplicaSelectionModel.js.map +1 -1
  110. package/dist/components/DataGrid/utils/extractColumnValidationMessages.js.map +1 -1
  111. package/dist/components/DataGrid/utils/getCellClassName.d.ts.map +1 -1
  112. package/dist/components/DataGrid/utils/getCellClassName.js +8 -8
  113. package/dist/components/DataGrid/utils/getCellClassName.js.map +1 -1
  114. package/dist/components/DataGrid/utils/json-rx/JsonRx.js.map +1 -1
  115. package/dist/components/DataGrid/utils/modelRowsToGrid.js.map +1 -1
  116. package/dist/components/DataGrid/utils/parseFreeTextUsingJsonSchemaType.js.map +1 -1
  117. package/dist/components/DataGrid/utils/splitPatch.js.map +1 -1
  118. package/dist/components/DateTimePicker/DateTimePicker.js.map +1 -1
  119. package/dist/components/DirectDownload/DirectDownload.js.map +1 -1
  120. package/dist/components/DirectDownloadButton.js.map +1 -1
  121. package/dist/components/DownloadCart/CreatePackageV2.js.map +1 -1
  122. package/dist/components/DownloadCart/DownloadIneligibleForPackagingFilesFromListButton.js.map +1 -1
  123. package/dist/components/DownloadCart/DownloadListActionsRequired.js.map +1 -1
  124. package/dist/components/DownloadCart/DownloadListTable.js.map +1 -1
  125. package/dist/components/DownloadCart/fileNameUtils.js.map +1 -1
  126. package/dist/components/DraggableDialog/DraggableDialog.js.map +1 -1
  127. package/dist/components/DynamicForm/DynamicFormModal.js.map +1 -1
  128. package/dist/components/Ecosystem/TableQueryEcosystem.js.map +1 -1
  129. package/dist/components/EntityAclEditor/EntityAclEditor.d.ts.map +1 -1
  130. package/dist/components/EntityAclEditor/EntityAclEditor.js +103 -103
  131. package/dist/components/EntityAclEditor/EntityAclEditor.js.map +1 -1
  132. package/dist/components/EntityAclEditor/useNotifyNewACLUsers.js.map +1 -1
  133. package/dist/components/EntityBadgeIcons/EntityBadgeIcons.js.map +1 -1
  134. package/dist/components/EntityCitation/EntityCitation.js.map +1 -1
  135. package/dist/components/EntityDownloadButton/EntityDownloadButton.js.map +1 -1
  136. package/dist/components/EntityDownloadConfirmation/EntityDownloadConfirmation.d.ts.map +1 -1
  137. package/dist/components/EntityDownloadConfirmation/EntityDownloadConfirmation.js +36 -30
  138. package/dist/components/EntityDownloadConfirmation/EntityDownloadConfirmation.js.map +1 -1
  139. package/dist/components/EntityFinder/EntityFinder.js.map +1 -1
  140. package/dist/components/EntityFinder/VersionSelectionType.js.map +1 -1
  141. package/dist/components/EntityFinder/details/configurations/EntityChildrenDetails.js.map +1 -1
  142. package/dist/components/EntityFinder/details/configurations/FavoritesDetails.js.map +1 -1
  143. package/dist/components/EntityFinder/details/configurations/ProjectListDetails.js.map +1 -1
  144. package/dist/components/EntityFinder/details/view/DetailsView.js.map +1 -1
  145. package/dist/components/EntityFinder/tree/EntityTree.js.map +1 -1
  146. package/dist/components/EntityFinder/tree/VirtualizedTree.js.map +1 -1
  147. package/dist/components/EntityFinder/useEntitySelection.js.map +1 -1
  148. package/dist/components/EntityForm/EntityForm.js.map +1 -1
  149. package/dist/components/EntityHeaderTable/EntityHeaderTable.js.map +1 -1
  150. package/dist/components/EntityHeaderTable/Filter.js.map +1 -1
  151. package/dist/components/EntityHeaderTable/useEntityHeaderTableState.js.map +1 -1
  152. package/dist/components/EntitySubjectsSelector/EntitySubjectsSelector.js.map +1 -1
  153. package/dist/components/EntityTreeTable/components/IdColumnHeader.js.map +1 -1
  154. package/dist/components/EntityTreeTable/hooks/useEntityTreeState.js.map +1 -1
  155. package/dist/components/EntityTreeTable/hooks/useTableColumns.js.map +1 -1
  156. package/dist/components/EntityTreeTable/hooks/useTableData.js.map +1 -1
  157. package/dist/components/EntityTreeTable/hooks/useTreeOperationsWithDirectFetch.js.map +1 -1
  158. package/dist/components/EntityUpload/EntityUpload.js.map +1 -1
  159. package/dist/components/ExperimentalMode/ExperimentalMode.js.map +1 -1
  160. package/dist/components/ExternalFileHandleLink/ExternalFileHandleLink.js.map +1 -1
  161. package/dist/components/FeaturedDataTabs/FacetPlotsCard.js.map +1 -1
  162. package/dist/components/FeaturedDataTabs/QueryPerFacetPlotsCard.js.map +1 -1
  163. package/dist/components/FeaturedDataTabs/SingleQueryFacetPlotsCards.js.map +1 -1
  164. package/dist/components/FeaturedResearch/FeaturedResearch.js.map +1 -1
  165. package/dist/components/FeaturedToolsList/FeaturedToolsList.js.map +1 -1
  166. package/dist/components/FilePreview/FileHandleContentRenderer.js.map +1 -1
  167. package/dist/components/FilePreview/HtmlPreview/HtmlPreview.js.map +1 -1
  168. package/dist/components/FilePreview/PreviewRendererType.js.map +1 -1
  169. package/dist/components/Forum/DiscussionReply.js.map +1 -1
  170. package/dist/components/Forum/DiscussionSearchResult.js.map +1 -1
  171. package/dist/components/Forum/ForumTable.js.map +1 -1
  172. package/dist/components/Forum/ForumThreadEditor.js.map +1 -1
  173. package/dist/components/FullTextSearch/FullTextSearchUtils.js.map +1 -1
  174. package/dist/components/GenericCard/GenericCard.d.ts.map +1 -1
  175. package/dist/components/GenericCard/GenericCard.js +12 -7
  176. package/dist/components/GenericCard/GenericCard.js.map +1 -1
  177. package/dist/components/GenericCard/Linkify.js.map +1 -1
  178. package/dist/components/GenericCard/SynapseCardLabel.js.map +1 -1
  179. package/dist/components/GenericCard/TableRowGenericCard.js +105 -105
  180. package/dist/components/GenericCard/TableRowGenericCard.js.map +1 -1
  181. package/dist/components/Goals/Goals.Mobile.js.map +1 -1
  182. package/dist/components/Goals/Goals.js.map +1 -1
  183. package/dist/components/GoalsV2/GoalsV2.Mobile.js.map +1 -1
  184. package/dist/components/GoalsV2/GoalsV2.js.map +1 -1
  185. package/dist/components/GoalsV3/GoalsV3.Mobile.js.map +1 -1
  186. package/dist/components/GoalsV3/GoalsV3.js.map +1 -1
  187. package/dist/components/GoogleMap/SynapseUserMarker.js.map +1 -1
  188. package/dist/components/HasAccess/AccessIcon.js.map +1 -1
  189. package/dist/components/HasAccess/useHasAccess.js.map +1 -1
  190. package/dist/components/HeaderCard/HeaderCardV2.js.map +1 -1
  191. package/dist/components/HeaderCard.d.ts +6 -1
  192. package/dist/components/HeaderCard.d.ts.map +1 -1
  193. package/dist/components/HeaderCard.js +107 -76
  194. package/dist/components/HeaderCard.js.map +1 -1
  195. package/dist/components/HexGrid/HexGrid.js.map +1 -1
  196. package/dist/components/IconList.js.map +1 -1
  197. package/dist/components/ImageCardGridWithLinks/ImageCardGridWithLinks.js.map +1 -1
  198. package/dist/components/ImageFromSynapseTable.js.map +1 -1
  199. package/dist/components/JSONArrayEditor/useParseCsv.js.map +1 -1
  200. package/dist/components/JsonSchemaForm/templates/ArrayFieldDescriptionTemplate.js.map +1 -1
  201. package/dist/components/JsonSchemaForm/templates/ArrayFieldItemTemplate.js.map +1 -1
  202. package/dist/components/JsonSchemaForm/templates/BaseInputTemplate.js.map +1 -1
  203. package/dist/components/JsonSchemaForm/templates/FieldTemplate.js.map +1 -1
  204. package/dist/components/JsonSchemaForm/templates/RJSFInputLabel.js.map +1 -1
  205. package/dist/components/Markdown/MarkdownGithub.js.map +1 -1
  206. package/dist/components/Markdown/MarkdownSynapse.js.map +1 -1
  207. package/dist/components/Markdown/MarkdownUtils.js.map +1 -1
  208. package/dist/components/Markdown/SynapseWikiContext.js.map +1 -1
  209. package/dist/components/Markdown/UserMentionModal.js.map +1 -1
  210. package/dist/components/Markdown/widget/MarkdownProvenanceGraph.js.map +1 -1
  211. package/dist/components/MissingQueryResultsWarning/MissingQueryResultsWarning.js.map +1 -1
  212. package/dist/components/ModalDownload/ModalDownload.js.map +1 -1
  213. package/dist/components/OAuthClientAclEditor/OAuthClientAclEditor.d.ts.map +1 -1
  214. package/dist/components/OAuthClientAclEditor/OAuthClientAclEditor.js +45 -39
  215. package/dist/components/OAuthClientAclEditor/OAuthClientAclEditor.js.map +1 -1
  216. package/dist/components/OAuthClientManagement/OAuthManagement.js.map +1 -1
  217. package/dist/components/PageProgress/PageProgress.js.map +1 -1
  218. package/dist/components/Plot/DotPlot.js.map +1 -1
  219. package/dist/components/Plot/Plot.js.map +1 -1
  220. package/dist/components/Plot/SynapsePlot.js.map +1 -1
  221. package/dist/components/Plot/ThemesPlot.js.map +1 -1
  222. package/dist/components/Plot/UpsetPlot.js.map +1 -1
  223. package/dist/components/PortalAclEditor/PortalAclEditor.d.ts.map +1 -1
  224. package/dist/components/PortalAclEditor/PortalAclEditor.js +43 -41
  225. package/dist/components/PortalAclEditor/PortalAclEditor.js.map +1 -1
  226. package/dist/components/PortalFeaturedPartners/PortalFeaturedPartners.js.map +1 -1
  227. package/dist/components/PortalList/CreatePortalModal.js.map +1 -1
  228. package/dist/components/ProgrammaticInstructionsModal/ProgrammaticInstructionsModal.js.map +1 -1
  229. package/dist/components/ProgrammaticTableDownload/ProgrammaticTableDownload.js.map +1 -1
  230. package/dist/components/Programs/Programs.Mobile.js.map +1 -1
  231. package/dist/components/Programs/Programs.js.map +1 -1
  232. package/dist/components/ProvenanceGraph/ProvenanceExternalIcon.js.map +1 -1
  233. package/dist/components/ProvenanceGraph/ProvenanceGraph.js.map +1 -1
  234. package/dist/components/ProvenanceGraph/ProvenanceGraphUtils.js.map +1 -1
  235. package/dist/components/ProvenanceGraph/ProvenanceUtils.js.map +1 -1
  236. package/dist/components/QueryCount/QueryCount.js.map +1 -1
  237. package/dist/components/QueryCountButton/QueryCountButton.js.map +1 -1
  238. package/dist/components/QueryVisualizationWrapper/QueryVisualizationWrapper.js.map +1 -1
  239. package/dist/components/QueryWrapper/QueryWrapper.js.map +1 -1
  240. package/dist/components/QueryWrapper/TableQueryUseQueryOptions.js.map +1 -1
  241. package/dist/components/QueryWrapper/TableRowSelectionState.js.map +1 -1
  242. package/dist/components/QueryWrapper/generateEncodedPathAndQueryForSelectedFacetURL.js.map +1 -1
  243. package/dist/components/QueryWrapper/useGetQueryMetadata.js.map +1 -1
  244. package/dist/components/QueryWrapperErrorBoundary.js.map +1 -1
  245. package/dist/components/QueryWrapperPlotNav/QueryWrapperPlotNav.js.map +1 -1
  246. package/dist/components/QueryWrapperPlotNav/UseRowSet.js.map +1 -1
  247. package/dist/components/RecentPublicationsGrid/RecentPublicationsGrid.js.map +1 -1
  248. package/dist/components/ReleaseCard/ReleaseCardUtils.js.map +1 -1
  249. package/dist/components/ResizableContainer/hooks/useResizable.js.map +1 -1
  250. package/dist/components/Resources/Resources.Mobile.js.map +1 -1
  251. package/dist/components/Resources/Resources.js.map +1 -1
  252. package/dist/components/RowDataTable/RowDataTableWithQuery.js.map +1 -1
  253. package/dist/components/SageResourcesPopover/SageResourcesPopover.js.map +1 -1
  254. package/dist/components/SchemaDrivenAnnotationEditor/AnnotationEditorUtils.js.map +1 -1
  255. package/dist/components/SetAccessRequirementCommonFields/SetAccessRequirementCommonFields.js.map +1 -1
  256. package/dist/components/SetManagedAccessRequirementFields/SetManagedAccessRequirementFields.js.map +1 -1
  257. package/dist/components/SmartLink/SmartButton.js.map +1 -1
  258. package/dist/components/SmartLink/SmartLink.js.map +1 -1
  259. package/dist/components/SourceAppImage.js.map +1 -1
  260. package/dist/components/StandaloneQueryWrapper/StandaloneQueryWrapper.js.map +1 -1
  261. package/dist/components/StatisticsPlot.js.map +1 -1
  262. package/dist/components/StorybookComponentWrapper.js.map +1 -1
  263. package/dist/components/SubsectionRowRenderer/SubsectionRowRenderer.js.map +1 -1
  264. package/dist/components/SustainabilityScorecard/SustainabilityScorecard.js.map +1 -1
  265. package/dist/components/SynapseChat/GridAgentChat.js.map +1 -1
  266. package/dist/components/SynapseChat/SynapseChatInteraction.js.map +1 -1
  267. package/dist/components/SynapseChat/SynapseChatMessage.js.map +1 -1
  268. package/dist/components/SynapseChat/extractMessageFromTraceEvent.js.map +1 -1
  269. package/dist/components/SynapseForm/StepsSideNav.js.map +1 -1
  270. package/dist/components/SynapseForm/SummaryTable.js.map +1 -1
  271. package/dist/components/SynapseForm/SynapseForm.js +4 -2
  272. package/dist/components/SynapseForm/SynapseForm.js.map +1 -1
  273. package/dist/components/SynapseForm/SynapseFormWrapper.js.map +1 -1
  274. package/dist/components/SynapseHomepageV2/SynapseByTheNumbersItem.js.map +1 -1
  275. package/dist/components/SynapseHomepageV2/SynapseFeatureItem.js.map +1 -1
  276. package/dist/components/SynapseHomepageV2/SynapseHomepageChatSearch.js.map +1 -1
  277. package/dist/components/SynapseHomepageV2/SynapseHomepageSearch.js.map +1 -1
  278. package/dist/components/SynapseHomepageV2/SynapseInActionItem.js.map +1 -1
  279. package/dist/components/SynapseHomepageV2/SynapsePlans.js.map +1 -1
  280. package/dist/components/SynapseHomepageV2/SynapseTrendingProjects.js.map +1 -1
  281. package/dist/components/SynapseNavDrawer/SynapseNavDrawer.d.ts +8 -7
  282. package/dist/components/SynapseNavDrawer/SynapseNavDrawer.d.ts.map +1 -1
  283. package/dist/components/SynapseNavDrawer/SynapseNavDrawer.js +173 -164
  284. package/dist/components/SynapseNavDrawer/SynapseNavDrawer.js.map +1 -1
  285. package/dist/components/SynapsePortalBanners/SynapsePortalBanners.js.map +1 -1
  286. package/dist/components/SynapseSearchPageResults/SearchFacetPanel/SearchFacetPanel.js.map +1 -1
  287. package/dist/components/SynapseSearchPageResults/SearchFacetPanel/SearchFacetPanelUtils.js.map +1 -1
  288. package/dist/components/SynapseSearchPageResults/SynapseSearchPageResults.js.map +1 -1
  289. package/dist/components/SynapseTable/EntityIDColumnCopyIcon.js.map +1 -1
  290. package/dist/components/SynapseTable/NoContentPlaceholderType.js.map +1 -1
  291. package/dist/components/SynapseTable/RowSelection/RowSelectionControls.js.map +1 -1
  292. package/dist/components/SynapseTable/SynapseTableCell/SynapseTableCell.js.map +1 -1
  293. package/dist/components/SynapseTable/SynapseTableRenderers.js.map +1 -1
  294. package/dist/components/SynapseTable/datasets/DatasetItemsEditor.js.map +1 -1
  295. package/dist/components/SynapseTable/table-top/ColumnSelection.js.map +1 -1
  296. package/dist/components/SynapseTable/table-top/DownloadOptions.js.map +1 -1
  297. package/dist/components/SynapseTable/usePrefetchTableData.js.map +1 -1
  298. package/dist/components/TableColumnSchemaEditor/ColumnModelForm.js.map +1 -1
  299. package/dist/components/TableColumnSchemaEditor/ColumnModelFormFields/DefaultValueField.js.map +1 -1
  300. package/dist/components/TableColumnSchemaEditor/ImportTableColumnsButton.js.map +1 -1
  301. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaEditorUtils.d.ts +1 -1
  302. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaEditorUtils.d.ts.map +1 -1
  303. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaEditorUtils.js.map +1 -1
  304. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaForm.js.map +1 -1
  305. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaFormReducer.js.map +1 -1
  306. package/dist/components/TableColumnSchemaEditor/Validators/ColumnModelValidator.js.map +1 -1
  307. package/dist/components/TableColumnSchemaEditor/Validators/DatetimeSchema.js.map +1 -1
  308. package/dist/components/TanStackTable/ColumnHeader.d.ts +1 -0
  309. package/dist/components/TanStackTable/ColumnHeader.d.ts.map +1 -1
  310. package/dist/components/TanStackTable/ColumnHeader.js +8 -8
  311. package/dist/components/TanStackTable/ColumnHeader.js.map +1 -1
  312. package/dist/components/TanStackTable/ColumnHeaderEnumFilter.js.map +1 -1
  313. package/dist/components/TanStackTable/TableBody.js.map +1 -1
  314. package/dist/components/TeamSubjectsSelector/TeamSubjectsSelector.js.map +1 -1
  315. package/dist/components/TextField/TextField.js.map +1 -1
  316. package/dist/components/TimelinePlot/TimelinePhase.js.map +1 -1
  317. package/dist/components/TimelinePlot/TimelinePlot.js.map +1 -1
  318. package/dist/components/TimelinePlot/TimelinePlotSpeciesSelector.js.map +1 -1
  319. package/dist/components/UserCard/Avatar.js.map +1 -1
  320. package/dist/components/UserCardList/UserCardList.js.map +1 -1
  321. package/dist/components/UserCardList/UserCardListGroups/UserCardListGroups.Mobile.js.map +1 -1
  322. package/dist/components/UserCardList/UserCardListRotate.js.map +1 -1
  323. package/dist/components/UserOrTeamBadge/useUserOrTeam.js.map +1 -1
  324. package/dist/components/UserProfileLinks/UserProjects.js.map +1 -1
  325. package/dist/components/UserSearchBox/UserSearchBox.js.map +1 -1
  326. package/dist/components/Webhook/WebhookDashboard.js.map +1 -1
  327. package/dist/components/WikiMarkdownEditor/WikiMarkdownEditor.js.map +1 -1
  328. package/dist/components/WikiMarkdownEditorButton/WikiMarkdownEditorButton.js.map +1 -1
  329. package/dist/components/dataaccess/AccessApprovalsTable.js.map +1 -1
  330. package/dist/components/dataaccess/AccessRequestSubmissionTable.js.map +1 -1
  331. package/dist/components/dataaccess/SubmissionPage/SubmissionPage.js.map +1 -1
  332. package/dist/components/dataaccess/UseAccessRequirementTable.js.map +1 -1
  333. package/dist/components/dataaccess/UserAccessRequestHistory/UserAccessRequestHistoryTable.js.map +1 -1
  334. package/dist/components/doi/CreateOrUpdateDoiModal.js.map +1 -1
  335. package/dist/components/entity/page/CreatedByModifiedBy.js.map +1 -1
  336. package/dist/components/entity/page/action_menu/EntityActionMenu.js.map +1 -1
  337. package/dist/components/entity/page/title_bar/useDataCiteUsage.js.map +1 -1
  338. package/dist/components/entity/page/title_bar/useGetMentions.js.map +1 -1
  339. package/dist/components/error/ErrorPage.js.map +1 -1
  340. package/dist/components/favorites/FavoritesPage.js.map +1 -1
  341. package/dist/components/file/upload/BasicFileHandleUpload.js.map +1 -1
  342. package/dist/components/layout/SWCHeader.d.ts +9 -0
  343. package/dist/components/layout/SWCHeader.d.ts.map +1 -0
  344. package/dist/components/layout/SWCHeader.js +19 -0
  345. package/dist/components/layout/SWCHeader.js.map +1 -0
  346. package/dist/components/layout/SWCPageLayout.d.ts +9 -0
  347. package/dist/components/layout/SWCPageLayout.d.ts.map +1 -0
  348. package/dist/components/layout/SWCPageLayout.js +14 -0
  349. package/dist/components/layout/SWCPageLayout.js.map +1 -0
  350. package/dist/components/menu/ComplexMenu.js.map +1 -1
  351. package/dist/components/row_renderers/utils/ChipContainer.js.map +1 -1
  352. package/dist/components/styled/StyledPopover.js.map +1 -1
  353. package/dist/components/table/CsvPreview/CsvPreview.js +2 -1
  354. package/dist/components/table/CsvPreview/CsvPreview.js.map +1 -1
  355. package/dist/components/table/CsvPreview/CsvPreviewDialog.js.map +1 -1
  356. package/dist/components/trash/TrashCanList.js.map +1 -1
  357. package/dist/components/widgets/FileHandleLink.js.map +1 -1
  358. package/dist/components/widgets/RangeSlider/RangeSlider.js.map +1 -1
  359. package/dist/components/widgets/SynapseVideo.js.map +1 -1
  360. package/dist/components/widgets/facet-nav/FacetNavPanel.js.map +1 -1
  361. package/dist/components/widgets/facet-nav/PlotsContainer.js.map +1 -1
  362. package/dist/components/widgets/facet-nav/SelectionCriteriaPills.js.map +1 -1
  363. package/dist/components/widgets/facet-nav/useFacetPlots.js.map +1 -1
  364. package/dist/components/widgets/query-filter/CombinedRangeFacetFilter.js.map +1 -1
  365. package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilter.js.map +1 -1
  366. package/dist/components/widgets/query-filter/FacetFilterControls.js.map +1 -1
  367. package/dist/components/widgets/query-filter/RangeFacetFilter.js.map +1 -1
  368. package/dist/components/widgets/query-filter/RangeFacetFilterUI.js.map +1 -1
  369. package/dist/features/curator/GridPage/components/GridPageTitle.d.ts.map +1 -1
  370. package/dist/features/curator/GridPage/components/GridPageTitle.js +23 -30
  371. package/dist/features/curator/GridPage/components/GridPageTitle.js.map +1 -1
  372. package/dist/features/curator/dashboard/CuratorDashboard.d.ts +2 -0
  373. package/dist/features/curator/dashboard/CuratorDashboard.d.ts.map +1 -0
  374. package/dist/features/curator/dashboard/CuratorDashboard.js +45 -0
  375. package/dist/features/curator/dashboard/CuratorDashboard.js.map +1 -0
  376. package/dist/features/curator/dashboard/components/CurationTaskCard.css +1 -0
  377. package/dist/features/curator/dashboard/components/CurationTaskCard.d.ts +9 -0
  378. package/dist/features/curator/dashboard/components/CurationTaskCard.d.ts.map +1 -0
  379. package/dist/features/curator/dashboard/components/CurationTaskCard.js +106 -0
  380. package/dist/features/curator/dashboard/components/CurationTaskCard.js.map +1 -0
  381. package/dist/features/curator/dashboard/components/CurationTaskCard.module.js +12 -0
  382. package/dist/features/curator/dashboard/components/CurationTaskCard.module.js.map +1 -0
  383. package/dist/features/curator/dashboard/components/CurationTaskCard.module.scss +52 -0
  384. package/dist/features/curator/dashboard/components/NextStepButton.css +1 -0
  385. package/dist/features/curator/dashboard/components/NextStepButton.d.ts +14 -0
  386. package/dist/features/curator/dashboard/components/NextStepButton.d.ts.map +1 -0
  387. package/dist/features/curator/dashboard/components/NextStepButton.js +35 -0
  388. package/dist/features/curator/dashboard/components/NextStepButton.js.map +1 -0
  389. package/dist/features/curator/dashboard/components/NextStepButton.module.js +11 -0
  390. package/dist/features/curator/dashboard/components/NextStepButton.module.js.map +1 -0
  391. package/dist/features/curator/dashboard/components/NextStepButton.module.scss +57 -0
  392. package/dist/features/curator/dashboard/components/UserOrTeamChip.css +1 -1
  393. package/dist/features/curator/dashboard/components/UserOrTeamChip.module.js +1 -1
  394. package/dist/features/curator/dashboard/components/UserOrTeamChip.module.js.map +1 -1
  395. package/dist/features/curator/dashboard/components/UserOrTeamChip.module.scss +5 -5
  396. package/dist/features/curator/dashboard/components/shared.css +1 -0
  397. package/dist/features/curator/dashboard/components/shared.module.js +5 -0
  398. package/dist/features/curator/dashboard/components/shared.module.js.map +1 -0
  399. package/dist/features/curator/dashboard/components/shared.module.scss +8 -0
  400. package/dist/features/entity/metadata-task/components/MetadataTaskTableActionCell.d.ts +0 -2
  401. package/dist/features/entity/metadata-task/components/MetadataTaskTableActionCell.d.ts.map +1 -1
  402. package/dist/features/entity/metadata-task/components/MetadataTaskTableActionCell.js +16 -34
  403. package/dist/features/entity/metadata-task/components/MetadataTaskTableActionCell.js.map +1 -1
  404. package/dist/features/entity/metadata-task/components/MetadataTasksTableAssigneeCell.js.map +1 -1
  405. package/dist/features/entity/metadata-task/hooks/useGetOrCreateGridSessionForSource.js.map +1 -1
  406. package/dist/features/entity/metadata-task/hooks/useGridSessionForCurationTask.js.map +1 -1
  407. package/dist/features/entity/metadata-task/hooks/useGridSessionForCurationTask_legacy.js.map +1 -1
  408. package/dist/features/entity/metadata-task/hooks/useMetadataTaskTable.js +1 -1
  409. package/dist/features/entity/metadata-task/hooks/useMetadataTaskTable.js.map +1 -1
  410. package/dist/features/entity/metadata-task/hooks/useOpenCuratorButton.d.ts +10 -0
  411. package/dist/features/entity/metadata-task/hooks/useOpenCuratorButton.d.ts.map +1 -0
  412. package/dist/features/entity/metadata-task/hooks/useOpenCuratorButton.js +37 -0
  413. package/dist/features/entity/metadata-task/hooks/useOpenCuratorButton.js.map +1 -0
  414. package/dist/features/entity/metadata-task/utils/constants.d.ts +5 -0
  415. package/dist/features/entity/metadata-task/utils/constants.d.ts.map +1 -0
  416. package/dist/features/entity/metadata-task/utils/constants.js +6 -0
  417. package/dist/features/entity/metadata-task/utils/constants.js.map +1 -0
  418. package/dist/mocks/challenge/mockChallenge.js.map +1 -1
  419. package/dist/mocks/entity/mockDataset.js.map +1 -1
  420. package/dist/mocks/entity/mockDatasetCollection.js.map +1 -1
  421. package/dist/mocks/entity/mockFileEntity.js.map +1 -1
  422. package/dist/mocks/entity/mockFileView.js.map +1 -1
  423. package/dist/mocks/entity/mockGeneratedEntityData.js.map +1 -1
  424. package/dist/mocks/entity/mockProject.js.map +1 -1
  425. package/dist/mocks/entity/mockProjectView.js.map +1 -1
  426. package/dist/mocks/entity/mockRootEntity.js.map +1 -1
  427. package/dist/mocks/entity/mockTableEntity.js.map +1 -1
  428. package/dist/mocks/mockWiki.js.map +1 -1
  429. package/dist/mocks/msw/handlers/asyncJobHandlers.js.map +1 -1
  430. package/dist/mocks/msw/handlers/challengeHandlers.js.map +1 -1
  431. package/dist/mocks/msw/handlers/changePasswordHandlers.js.map +1 -1
  432. package/dist/mocks/msw/handlers/discussionHandlers.js.map +1 -1
  433. package/dist/mocks/msw/handlers/entityHandlers.js.map +1 -1
  434. package/dist/mocks/msw/handlers/fileHandlers.js.map +1 -1
  435. package/dist/mocks/msw/handlers/gridHandlers.js.map +1 -1
  436. package/dist/mocks/msw/handlers/personalAccessTokenHandlers.js.map +1 -1
  437. package/dist/mocks/msw/handlers/subscriptionHandlers.js.map +1 -1
  438. package/dist/mocks/msw/handlers/teamHandlers.js.map +1 -1
  439. package/dist/mocks/msw/handlers/userProfileHandlers.js.map +1 -1
  440. package/dist/mocks/msw/handlers/wikiHandlers.js.map +1 -1
  441. package/dist/mocks/provenance/mockActivity.js.map +1 -1
  442. package/dist/mocks/query/mockReleaseCardsTableQueryResultBundle.js.map +1 -1
  443. package/dist/ror-client/index.js.map +1 -1
  444. package/dist/style/components/_cards.scss +4 -0
  445. package/dist/style/components/_data-grid-extra.css +1 -1
  446. package/dist/style/components/_data-grid-extra.scss +2 -0
  447. package/dist/style/main.css +1 -1
  448. package/dist/synapse-client/HttpClient.js.map +1 -1
  449. package/dist/synapse-client/SynapseClient.js.map +1 -1
  450. package/dist/synapse-queries/QueryMatching.test-utils.js.map +1 -1
  451. package/dist/synapse-queries/auth/useTwoFactorEnrollment.js.map +1 -1
  452. package/dist/synapse-queries/curation/task/useCurationTask.d.ts +1 -1
  453. package/dist/synapse-queries/curation/task/useCurationTask.d.ts.map +1 -1
  454. package/dist/synapse-queries/curation/task/useCurationTask.js +1 -1
  455. package/dist/synapse-queries/curation/task/useCurationTask.js.map +1 -1
  456. package/dist/synapse-queries/dataaccess/useRestrictionInformation.js.map +1 -1
  457. package/dist/synapse-queries/doi/useDOI.js.map +1 -1
  458. package/dist/synapse-queries/download/useDownloadList.js.map +1 -1
  459. package/dist/synapse-queries/entity/useEntity.js.map +1 -1
  460. package/dist/synapse-queries/entity/useEntityBundle.js.map +1 -1
  461. package/dist/synapse-queries/entity/useExportTableQueryToAnalysisPlatform.js.map +1 -1
  462. package/dist/synapse-queries/entity/useExportToTerra.js.map +1 -1
  463. package/dist/synapse-queries/entity/useGetQueryResultBundle.js.map +1 -1
  464. package/dist/synapse-queries/entity/useSchema.js.map +1 -1
  465. package/dist/synapse-queries/file/UploadToS3.js.map +1 -1
  466. package/dist/synapse-queries/file/useDirectUploadToS3.js.map +1 -1
  467. package/dist/synapse-queries/file/useFiles.js.map +1 -1
  468. package/dist/synapse-queries/forum/useReply.js.map +1 -1
  469. package/dist/synapse-queries/forum/useThread.js.map +1 -1
  470. package/dist/synapse-queries/grid/useEstablishWebsocketConnection.d.ts +2 -0
  471. package/dist/synapse-queries/grid/useEstablishWebsocketConnection.d.ts.map +1 -1
  472. package/dist/synapse-queries/grid/useEstablishWebsocketConnection.js.map +1 -1
  473. package/dist/synapse-queries/grid/useExportGrid.js.map +1 -1
  474. package/dist/synapse-queries/grid/useGridSession.js.map +1 -1
  475. package/dist/synapse-queries/grid/useImportCsvIntoGrid.js.map +1 -1
  476. package/dist/synapse-queries/subscription/useSubscription.js.map +1 -1
  477. package/dist/synapse-queries/table/useGetCsvPreview.js.map +1 -1
  478. package/dist/synapse-queries/table/useTableUpdateTransaction.js.map +1 -1
  479. package/dist/synapse-queries/team/useTeamMembers.js.map +1 -1
  480. package/dist/synapse-queries/user/useGetUserChallenges.js.map +1 -1
  481. package/dist/synapse-queries/user/useUserBundle.js.map +1 -1
  482. package/dist/synapse-queries/user/useUserGroupHeader.js.map +1 -1
  483. package/dist/testutils/ReactQueryMockUtils.js.map +1 -1
  484. package/dist/theme/ThemeProvider.js.map +1 -1
  485. package/dist/tsconfig.build.tsbuildinfo +1 -1
  486. package/dist/utils/AppUtils/session/SynapseSessionManager.js.map +1 -1
  487. package/dist/utils/AppUtils/session/useSessionManager.js.map +1 -1
  488. package/dist/utils/PermissionLevelToAccessType.js.map +1 -1
  489. package/dist/utils/challenge/evaluation/EvaluationUtils.js.map +1 -1
  490. package/dist/utils/context/SynapseContext.js.map +1 -1
  491. package/dist/utils/functions/AccessControlListUtils.d.ts +4 -0
  492. package/dist/utils/functions/AccessControlListUtils.d.ts.map +1 -1
  493. package/dist/utils/functions/AccessControlListUtils.js +12 -1
  494. package/dist/utils/functions/AccessControlListUtils.js.map +1 -1
  495. package/dist/utils/functions/GridApiUtils.js.map +1 -1
  496. package/dist/utils/functions/QueryFilterUtils.js.map +1 -1
  497. package/dist/utils/functions/RealmUtils.d.ts +4 -0
  498. package/dist/utils/functions/RealmUtils.d.ts.map +1 -1
  499. package/dist/utils/functions/RealmUtils.js +9 -3
  500. package/dist/utils/functions/RealmUtils.js.map +1 -1
  501. package/dist/utils/functions/SanitizeHtmlUtils.js.map +1 -1
  502. package/dist/utils/functions/SanitizeHtmlUtils.test-utils.js.map +1 -1
  503. package/dist/utils/functions/SqlFunctions.js.map +1 -1
  504. package/dist/utils/functions/StringUtils.js.map +1 -1
  505. package/dist/utils/functions/deepLinkingUtils.js.map +1 -1
  506. package/dist/utils/functions/getDataFromFromStorage.js.map +1 -1
  507. package/dist/utils/functions/getEndpoint.js.map +1 -1
  508. package/dist/utils/functions/getUserData.js.map +1 -1
  509. package/dist/utils/functions/queryUtils.js.map +1 -1
  510. package/dist/utils/functions/testDownloadSpeed.js.map +1 -1
  511. package/dist/utils/hooks/useConfirmItems.js.map +1 -1
  512. package/dist/utils/hooks/useCookiePreferences.js.map +1 -1
  513. package/dist/utils/hooks/useCreateShortUrl.js.map +1 -1
  514. package/dist/utils/hooks/useDetectSSOCode.js.map +1 -1
  515. package/dist/utils/hooks/useDirectDownloadHandler.js.map +1 -1
  516. package/dist/utils/hooks/useGetGoalData.js.map +1 -1
  517. package/dist/utils/hooks/useGetInfoFromIds.js.map +1 -1
  518. package/dist/utils/hooks/useImageUrlUtils.js.map +1 -1
  519. package/dist/utils/hooks/useImmutableTableQuery/useImmutableTableQuery.js.map +1 -1
  520. package/dist/utils/hooks/useImmutableTableQuery/useTableQueryReducer.js.map +1 -1
  521. package/dist/utils/hooks/useIsBot.js.map +1 -1
  522. package/dist/utils/hooks/useListState.js.map +1 -1
  523. package/dist/utils/hooks/useLogin.d.ts.map +1 -1
  524. package/dist/utils/hooks/useLogin.js +53 -52
  525. package/dist/utils/hooks/useLogin.js.map +1 -1
  526. package/dist/utils/hooks/useMutuallyExclusiveState.js.map +1 -1
  527. package/dist/utils/hooks/useOverlay.js.map +1 -1
  528. package/dist/utils/hooks/usePreFetchResource.js.map +1 -1
  529. package/dist/utils/hooks/useQuerySearchParam.js.map +1 -1
  530. package/dist/utils/hooks/useScrollFadeTransition.js.map +1 -1
  531. package/dist/utils/hooks/useSet.js.map +1 -1
  532. package/dist/utils/hooks/useSourceAppConfigs.js.map +1 -1
  533. package/dist/utils/hooks/useTableImageUrl.js.map +1 -1
  534. package/dist/utils/hooks/useUploadFileEntity/useCreatePathsAndGetParentId.js.map +1 -1
  535. package/dist/utils/hooks/useUploadFileEntity/useLinkFileEntityToURL.js.map +1 -1
  536. package/dist/utils/hooks/useUploadFileEntity/usePrepareFileEntityUpload.js.map +1 -1
  537. package/dist/utils/hooks/useUploadFileEntity/useTrackFileUploads.js.map +1 -1
  538. package/dist/utils/hooks/useUploadFileEntity/useUploadFileEntities.js.map +1 -1
  539. package/dist/utils/hooks/useUploadFileEntity/useUploadFiles.js.map +1 -1
  540. package/dist/utils/hooks/useUploadFileEntity/willUploadsExceedStorageLimit.js.map +1 -1
  541. package/dist/utils/html/TargetEnum.js.map +1 -1
  542. package/dist/utils/jsonschema/SchemaAnnotationUtils.js.map +1 -1
  543. package/package.json +4 -4
@@ -1 +1 @@
1
- {"version":3,"file":"mockProject.js","names":[],"sources":["../../../src/mocks/entity/mockProject.ts"],"sourcesContent":["import { normalizeNumericId } from '@/utils/functions/StringUtils'\nimport { DoiAssociation, EntityType } from '@sage-bionetworks/synapse-client'\nimport {\n ACCESS_TYPE,\n AnnotationsValueType,\n EntityBundle,\n EntityHeader,\n EntityJson,\n ObjectType,\n Project,\n ProjectHeader,\n RestrictionLevel,\n} from '@sage-bionetworks/synapse-types'\nimport { times } from 'lodash-es'\nimport { MOCK_TEAM_ID } from '../team/mockTeam'\nimport { MOCK_USER_ID } from '../user/mock_user_profile'\nimport { MockEntityData } from './MockEntityData'\n\nexport const mockProjectIds = times(20).map(i => i + 10001)\n\nconst MOCK_PROJECT_ID = `syn10000`\nconst MOCK_PROJECT_NAME = 'A Mock Project'\n\nexport const mockDoiAssociation: DoiAssociation = {\n associationId: '9606623',\n etag: 'ddef9fe1-56b2-42f5-9a3c-db2d6f15401b',\n doiUri: `10.7303/${MOCK_PROJECT_ID}`,\n doiUrl: `https://repo-prod.prod.sagebase.org/repo/v1/doi/locate?id=${MOCK_PROJECT_ID}&type=ENTITY`,\n objectId: MOCK_PROJECT_ID,\n objectType: ObjectType.ENTITY,\n associatedBy: `${MOCK_USER_ID}`,\n associatedOn: '2021-01-04T15:42:18.000Z',\n updatedBy: `${MOCK_USER_ID}`,\n updatedOn: '2021-04-28T18:49:48.000Z',\n}\n\nconst mockProjectEntity = {\n name: MOCK_PROJECT_NAME,\n id: MOCK_PROJECT_ID,\n etag: '7849ff2c-1c93-4104-adcf-9e6d6b0c50b5',\n createdOn: '2020-11-18T20:05:06.519Z',\n modifiedOn: '2021-05-19T12:44:35.457Z',\n createdBy: `${MOCK_USER_ID}`,\n modifiedBy: `${MOCK_USER_ID}`,\n parentId: 'syn4489',\n concreteType: 'org.sagebionetworks.repo.model.Project',\n} satisfies Project\n\nconst mockProjectAcl = {\n id: MOCK_PROJECT_ID,\n creationDate: '2020-11-18T20:05:06.540Z',\n etag: 'f143bbfd-ba09-4a42-b1e9-f9368777ad9b',\n resourceAccess: [\n {\n principalId: MOCK_USER_ID,\n accessType: [\n ACCESS_TYPE.DELETE,\n ACCESS_TYPE.CHANGE_SETTINGS,\n ACCESS_TYPE.MODERATE,\n ACCESS_TYPE.CHANGE_PERMISSIONS,\n ACCESS_TYPE.UPDATE,\n ACCESS_TYPE.READ,\n ACCESS_TYPE.DOWNLOAD,\n ACCESS_TYPE.CREATE,\n ],\n },\n {\n principalId: MOCK_TEAM_ID,\n accessType: [\n ACCESS_TYPE.READ,\n ACCESS_TYPE.DOWNLOAD,\n ACCESS_TYPE.MODERATE,\n ACCESS_TYPE.CREATE,\n ],\n },\n ],\n}\n\nconst mockProjectEntityBundle: EntityBundle = {\n entity: mockProjectEntity,\n entityType: EntityType.project,\n annotations: {\n id: MOCK_PROJECT_ID,\n etag: '7849ff2c-1c93-4104-adcf-9e6d6b0c50b5',\n annotations: {\n projectImage: {\n type: AnnotationsValueType.STRING,\n value: ['69006408'],\n },\n projectDescription: {\n type: AnnotationsValueType.STRING,\n value: ['WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW'],\n },\n projectDisplayName: {\n type: AnnotationsValueType.STRING,\n value: ['WWWWWWWWWWWWWWWWWW'],\n },\n },\n },\n permissions: {\n canView: true,\n canEdit: true,\n canAddChild: true,\n canCertifiedUserEdit: true,\n canCertifiedUserAddChild: true,\n isCertifiedUser: true,\n canChangePermissions: true,\n canChangeSettings: true,\n canDelete: true,\n canDownload: true,\n canUpload: true,\n canEnableInheritance: false,\n ownerPrincipalId: MOCK_USER_ID,\n canPublicRead: true,\n canModerate: true,\n canMove: true,\n isEntityOpenData: false,\n isCertificationRequired: true,\n isUserDataContributor: true,\n },\n path: {\n path: [\n {\n name: 'root',\n id: 'syn4489',\n type: 'org.sagebionetworks.repo.model.Folder',\n },\n {\n name: 'A Mock Project',\n id: MOCK_PROJECT_ID,\n type: 'org.sagebionetworks.repo.model.Project',\n },\n ],\n },\n hasChildren: true,\n accessControlList: mockProjectAcl,\n fileHandles: [],\n rootWikiId: '607416',\n benefactorAcl: mockProjectAcl,\n doiAssociation: mockDoiAssociation,\n threadCount: 2,\n restrictionInformation: {\n objectId: normalizeNumericId(MOCK_PROJECT_ID),\n restrictionDetails: [],\n restrictionLevel: RestrictionLevel.OPEN,\n hasUnmetAccessRequirement: false,\n },\n}\n\nconst mockProjectEntityHeader: EntityHeader = {\n name: MOCK_PROJECT_NAME,\n id: MOCK_PROJECT_ID,\n type: 'org.sagebionetworks.repo.model.Project',\n versionNumber: 1,\n versionLabel: '1',\n benefactorId: 12345,\n isLatestVersion: true,\n createdOn: mockProjectEntity.createdOn,\n modifiedOn: mockProjectEntity.modifiedOn,\n createdBy: mockProjectEntity.createdBy,\n modifiedBy: mockProjectEntity.modifiedBy,\n}\n\nconst mockProjectHeader: ProjectHeader = {\n id: MOCK_PROJECT_ID,\n name: MOCK_PROJECT_NAME,\n lastActivity: '2021-04-28T18:49:48.000Z',\n modifiedBy: parseInt(mockProjectEntity.modifiedBy),\n modifiedOn: mockProjectEntity.modifiedOn,\n}\n\nconst mockProjectJson: EntityJson = {\n name: MOCK_PROJECT_NAME,\n id: MOCK_PROJECT_ID,\n etag: mockProjectEntity.etag,\n createdOn: mockProjectEntity.createdOn,\n modifiedOn: mockProjectEntity.modifiedOn,\n createdBy: mockProjectEntity.createdBy,\n modifiedBy: mockProjectEntity.modifiedBy,\n parentId: 'syn4489',\n concreteType: 'org.sagebionetworks.repo.model.Project',\n}\n\nconst mockProjectEntityData = {\n id: MOCK_PROJECT_ID,\n name: MOCK_PROJECT_NAME,\n entity: mockProjectEntity,\n bundle: mockProjectEntityBundle,\n entityHeader: mockProjectEntityHeader,\n projectHeader: mockProjectHeader,\n json: mockProjectJson,\n} satisfies MockEntityData<Project>\n\nexport default mockProjectEntityData\n"],"mappings":";;;;;;;AAkBA,IAAa,IAAiB,EAAM,GAAG,CAAC,KAAI,MAAK,IAAI,MAAM,EAErD,IAAkB,YAClB,IAAoB,kBAEb,IAAqC;CAChD,eAAe;CACf,MAAM;CACN,QAAQ,WAAW;CACnB,QAAQ,6DAA6D,EAAgB;CACrF,UAAU;CACV,YAAY,EAAW;CACvB,cAAc;CACd,cAAc;CACd,WAAW;CACX,WAAW;CACZ,EAEK,IAAoB;CACxB,MAAM;CACN,IAAI;CACJ,MAAM;CACN,WAAW;CACX,YAAY;CACZ,WAAW;CACX,YAAY;CACZ,UAAU;CACV,cAAc;CACf,EAEK,IAAiB;CACrB,IAAI;CACJ,cAAc;CACd,MAAM;CACN,gBAAgB,CACd;EACE,aAAA;EACA,YAAY;GACV,EAAY;GACZ,EAAY;GACZ,EAAY;GACZ,EAAY;GACZ,EAAY;GACZ,EAAY;GACZ,EAAY;GACZ,EAAY;GACb;EACF,EACD;EACE,aAAa;EACb,YAAY;GACV,EAAY;GACZ,EAAY;GACZ,EAAY;GACZ,EAAY;GACb;EACF,CACF;CACF,EA2GK,IAAwB;CAC5B,IAAI;CACJ,MAAM;CACN,QAAQ;CACR,QA7G4C;EAC5C,QAAQ;EACR,YAAY,EAAW;EACvB,aAAa;GACX,IAAI;GACJ,MAAM;GACN,aAAa;IACX,cAAc;KACZ,MAAM,EAAqB;KAC3B,OAAO,CAAC,WAAW;KACpB;IACD,oBAAoB;KAClB,MAAM,EAAqB;KAC3B,OAAO,CAAC,6CAA6C;KACtD;IACD,oBAAoB;KAClB,MAAM,EAAqB;KAC3B,OAAO,CAAC,qBAAqB;KAC9B;IACF;GACF;EACD,aAAa;GACX,SAAS;GACT,SAAS;GACT,aAAa;GACb,sBAAsB;GACtB,0BAA0B;GAC1B,iBAAiB;GACjB,sBAAsB;GACtB,mBAAmB;GACnB,WAAW;GACX,aAAa;GACb,WAAW;GACX,sBAAsB;GACtB,kBAAA;GACA,eAAe;GACf,aAAa;GACb,SAAS;GACT,kBAAkB;GAClB,yBAAyB;GACzB,uBAAuB;GACxB;EACD,MAAM,EACJ,MAAM,CACJ;GACE,MAAM;GACN,IAAI;GACJ,MAAM;GACP,EACD;GACE,MAAM;GACN,IAAI;GACJ,MAAM;GACP,CACF,EACF;EACD,aAAa;EACb,mBAAmB;EACnB,aAAa,EAAE;EACf,YAAY;EACZ,eAAe;EACf,gBAAgB;EAChB,aAAa;EACb,wBAAwB;GACtB,UAAU,EAAmB,EAAgB;GAC7C,oBAAoB,EAAE;GACtB,kBAAkB,EAAiB;GACnC,2BAA2B;GAC5B;EACF;CAyCC,cAvC4C;EAC5C,MAAM;EACN,IAAI;EACJ,MAAM;EACN,eAAe;EACf,cAAc;EACd,cAAc;EACd,iBAAiB;EACjB,WAAW,EAAkB;EAC7B,YAAY,EAAkB;EAC9B,WAAW,EAAkB;EAC7B,YAAY,EAAkB;EAC/B;CA4BC,eA1BuC;EACvC,IAAI;EACJ,MAAM;EACN,cAAc;EACd,YAAY,SAAS,EAAkB,WAAW;EAClD,YAAY,EAAkB;EAC/B;CAqBC,MAnBkC;EAClC,MAAM;EACN,IAAI;EACJ,MAAM,EAAkB;EACxB,WAAW,EAAkB;EAC7B,YAAY,EAAkB;EAC9B,WAAW,EAAkB;EAC7B,YAAY,EAAkB;EAC9B,UAAU;EACV,cAAc;EACf;CAUA"}
1
+ {"version":3,"file":"mockProject.js","names":[],"sources":["../../../src/mocks/entity/mockProject.ts"],"sourcesContent":["import { normalizeNumericId } from '@/utils/functions/StringUtils'\nimport { DoiAssociation, EntityType } from '@sage-bionetworks/synapse-client'\nimport {\n ACCESS_TYPE,\n AnnotationsValueType,\n EntityBundle,\n EntityHeader,\n EntityJson,\n ObjectType,\n Project,\n ProjectHeader,\n RestrictionLevel,\n} from '@sage-bionetworks/synapse-types'\nimport { times } from 'lodash-es'\nimport { MOCK_TEAM_ID } from '../team/mockTeam'\nimport { MOCK_USER_ID } from '../user/mock_user_profile'\nimport { MockEntityData } from './MockEntityData'\n\nexport const mockProjectIds = times(20).map(i => i + 10001)\n\nconst MOCK_PROJECT_ID = `syn10000`\nconst MOCK_PROJECT_NAME = 'A Mock Project'\n\nexport const mockDoiAssociation: DoiAssociation = {\n associationId: '9606623',\n etag: 'ddef9fe1-56b2-42f5-9a3c-db2d6f15401b',\n doiUri: `10.7303/${MOCK_PROJECT_ID}`,\n doiUrl: `https://repo-prod.prod.sagebase.org/repo/v1/doi/locate?id=${MOCK_PROJECT_ID}&type=ENTITY`,\n objectId: MOCK_PROJECT_ID,\n objectType: ObjectType.ENTITY,\n associatedBy: `${MOCK_USER_ID}`,\n associatedOn: '2021-01-04T15:42:18.000Z',\n updatedBy: `${MOCK_USER_ID}`,\n updatedOn: '2021-04-28T18:49:48.000Z',\n}\n\nconst mockProjectEntity = {\n name: MOCK_PROJECT_NAME,\n id: MOCK_PROJECT_ID,\n etag: '7849ff2c-1c93-4104-adcf-9e6d6b0c50b5',\n createdOn: '2020-11-18T20:05:06.519Z',\n modifiedOn: '2021-05-19T12:44:35.457Z',\n createdBy: `${MOCK_USER_ID}`,\n modifiedBy: `${MOCK_USER_ID}`,\n parentId: 'syn4489',\n concreteType: 'org.sagebionetworks.repo.model.Project',\n} satisfies Project\n\nconst mockProjectAcl = {\n id: MOCK_PROJECT_ID,\n creationDate: '2020-11-18T20:05:06.540Z',\n etag: 'f143bbfd-ba09-4a42-b1e9-f9368777ad9b',\n resourceAccess: [\n {\n principalId: MOCK_USER_ID,\n accessType: [\n ACCESS_TYPE.DELETE,\n ACCESS_TYPE.CHANGE_SETTINGS,\n ACCESS_TYPE.MODERATE,\n ACCESS_TYPE.CHANGE_PERMISSIONS,\n ACCESS_TYPE.UPDATE,\n ACCESS_TYPE.READ,\n ACCESS_TYPE.DOWNLOAD,\n ACCESS_TYPE.CREATE,\n ],\n },\n {\n principalId: MOCK_TEAM_ID,\n accessType: [\n ACCESS_TYPE.READ,\n ACCESS_TYPE.DOWNLOAD,\n ACCESS_TYPE.MODERATE,\n ACCESS_TYPE.CREATE,\n ],\n },\n ],\n}\n\nconst mockProjectEntityBundle: EntityBundle = {\n entity: mockProjectEntity,\n entityType: EntityType.project,\n annotations: {\n id: MOCK_PROJECT_ID,\n etag: '7849ff2c-1c93-4104-adcf-9e6d6b0c50b5',\n annotations: {\n projectImage: {\n type: AnnotationsValueType.STRING,\n value: ['69006408'],\n },\n projectDescription: {\n type: AnnotationsValueType.STRING,\n value: ['WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW'],\n },\n projectDisplayName: {\n type: AnnotationsValueType.STRING,\n value: ['WWWWWWWWWWWWWWWWWW'],\n },\n },\n },\n permissions: {\n canView: true,\n canEdit: true,\n canAddChild: true,\n canCertifiedUserEdit: true,\n canCertifiedUserAddChild: true,\n isCertifiedUser: true,\n canChangePermissions: true,\n canChangeSettings: true,\n canDelete: true,\n canDownload: true,\n canUpload: true,\n canEnableInheritance: false,\n ownerPrincipalId: MOCK_USER_ID,\n canPublicRead: true,\n canModerate: true,\n canMove: true,\n isEntityOpenData: false,\n isCertificationRequired: true,\n isUserDataContributor: true,\n },\n path: {\n path: [\n {\n name: 'root',\n id: 'syn4489',\n type: 'org.sagebionetworks.repo.model.Folder',\n },\n {\n name: 'A Mock Project',\n id: MOCK_PROJECT_ID,\n type: 'org.sagebionetworks.repo.model.Project',\n },\n ],\n },\n hasChildren: true,\n accessControlList: mockProjectAcl,\n fileHandles: [],\n rootWikiId: '607416',\n benefactorAcl: mockProjectAcl,\n doiAssociation: mockDoiAssociation,\n threadCount: 2,\n restrictionInformation: {\n objectId: normalizeNumericId(MOCK_PROJECT_ID),\n restrictionDetails: [],\n restrictionLevel: RestrictionLevel.OPEN,\n hasUnmetAccessRequirement: false,\n },\n}\n\nconst mockProjectEntityHeader: EntityHeader = {\n name: MOCK_PROJECT_NAME,\n id: MOCK_PROJECT_ID,\n type: 'org.sagebionetworks.repo.model.Project',\n versionNumber: 1,\n versionLabel: '1',\n benefactorId: 12345,\n isLatestVersion: true,\n createdOn: mockProjectEntity.createdOn,\n modifiedOn: mockProjectEntity.modifiedOn,\n createdBy: mockProjectEntity.createdBy,\n modifiedBy: mockProjectEntity.modifiedBy,\n}\n\nconst mockProjectHeader: ProjectHeader = {\n id: MOCK_PROJECT_ID,\n name: MOCK_PROJECT_NAME,\n lastActivity: '2021-04-28T18:49:48.000Z',\n modifiedBy: parseInt(mockProjectEntity.modifiedBy),\n modifiedOn: mockProjectEntity.modifiedOn,\n}\n\nconst mockProjectJson: EntityJson = {\n name: MOCK_PROJECT_NAME,\n id: MOCK_PROJECT_ID,\n etag: mockProjectEntity.etag,\n createdOn: mockProjectEntity.createdOn,\n modifiedOn: mockProjectEntity.modifiedOn,\n createdBy: mockProjectEntity.createdBy,\n modifiedBy: mockProjectEntity.modifiedBy,\n parentId: 'syn4489',\n concreteType: 'org.sagebionetworks.repo.model.Project',\n}\n\nconst mockProjectEntityData = {\n id: MOCK_PROJECT_ID,\n name: MOCK_PROJECT_NAME,\n entity: mockProjectEntity,\n bundle: mockProjectEntityBundle,\n entityHeader: mockProjectEntityHeader,\n projectHeader: mockProjectHeader,\n json: mockProjectJson,\n} satisfies MockEntityData<Project>\n\nexport default mockProjectEntityData\n"],"mappings":";;;;;;;AAkBA,IAAa,IAAiB,EAAM,GAAG,CAAC,KAAI,MAAK,IAAI,MAAM,EAErD,IAAkB,YAClB,IAAoB,kBAEb,IAAqC;CAChD,eAAe;CACf,MAAM;CACN,QAAQ,WAAW;CACnB,QAAQ,6DAA6D,EAAgB;CACrF,UAAU;CACV,YAAY,EAAW;CACvB,cAAc;CACd,cAAc;CACd,WAAW;CACX,WAAW;CACZ,EAEK,IAAoB;CACxB,MAAM;CACN,IAAI;CACJ,MAAM;CACN,WAAW;CACX,YAAY;CACZ,WAAW;CACX,YAAY;CACZ,UAAU;CACV,cAAc;CACf,EAEK,IAAiB;CACrB,IAAI;CACJ,cAAc;CACd,MAAM;CACN,gBAAgB,CACd;EACE,aAAA;EACA,YAAY;GACV,EAAY;GACZ,EAAY;GACZ,EAAY;GACZ,EAAY;GACZ,EAAY;GACZ,EAAY;GACZ,EAAY;GACZ,EAAY;GACb;EACF,EACD;EACE,aAAa;EACb,YAAY;GACV,EAAY;GACZ,EAAY;GACZ,EAAY;GACZ,EAAY;GACb;EACF,CACF;CACF,EA2GK,IAAwB;CAC5B,IAAI;CACJ,MAAM;CACN,QAAQ;CACR,QAAQ;EA5GR,QAAQ;EACR,YAAY,EAAW;EACvB,aAAa;GACX,IAAI;GACJ,MAAM;GACN,aAAa;IACX,cAAc;KACZ,MAAM,EAAqB;KAC3B,OAAO,CAAC,WAAW;KACpB;IACD,oBAAoB;KAClB,MAAM,EAAqB;KAC3B,OAAO,CAAC,6CAA6C;KACtD;IACD,oBAAoB;KAClB,MAAM,EAAqB;KAC3B,OAAO,CAAC,qBAAqB;KAC9B;IACF;GACF;EACD,aAAa;GACX,SAAS;GACT,SAAS;GACT,aAAa;GACb,sBAAsB;GACtB,0BAA0B;GAC1B,iBAAiB;GACjB,sBAAsB;GACtB,mBAAmB;GACnB,WAAW;GACX,aAAa;GACb,WAAW;GACX,sBAAsB;GACtB,kBAAA;GACA,eAAe;GACf,aAAa;GACb,SAAS;GACT,kBAAkB;GAClB,yBAAyB;GACzB,uBAAuB;GACxB;EACD,MAAM,EACJ,MAAM,CACJ;GACE,MAAM;GACN,IAAI;GACJ,MAAM;GACP,EACD;GACE,MAAM;GACN,IAAI;GACJ,MAAM;GACP,CACF,EACF;EACD,aAAa;EACb,mBAAmB;EACnB,aAAa,EAAE;EACf,YAAY;EACZ,eAAe;EACf,gBAAgB;EAChB,aAAa;EACb,wBAAwB;GACtB,UAAU,EAAmB,EAAgB;GAC7C,oBAAoB,EAAE;GACtB,kBAAkB,EAAiB;GACnC,2BAA2B;GAC5B;EAyCO;CACR,cAAc;EAtCd,MAAM;EACN,IAAI;EACJ,MAAM;EACN,eAAe;EACf,cAAc;EACd,cAAc;EACd,iBAAiB;EACjB,WAAW,EAAkB;EAC7B,YAAY,EAAkB;EAC9B,WAAW,EAAkB;EAC7B,YAAY,EAAkB;EA4BhB;CACd,eAAe;EAzBf,IAAI;EACJ,MAAM;EACN,cAAc;EACd,YAAY,SAAS,EAAkB,WAAW;EAClD,YAAY,EAAkB;EAqBf;CACf,MAAM;EAlBN,MAAM;EACN,IAAI;EACJ,MAAM,EAAkB;EACxB,WAAW,EAAkB;EAC7B,YAAY,EAAkB;EAC9B,WAAW,EAAkB;EAC7B,YAAY,EAAkB;EAC9B,UAAU;EACV,cAAc;EAUR;CACP"}
@@ -1 +1 @@
1
- {"version":3,"file":"mockProjectView.js","names":[],"sources":["../../../src/mocks/entity/mockProjectView.ts"],"sourcesContent":["import { MOCK_USER_ID } from '../user/mock_user_profile'\nimport {\n ENTITY_VIEW_TYPE_MASK_PROJECT,\n EntityHeader,\n EntityView,\n} from '@sage-bionetworks/synapse-types'\nimport mockProject from './mockProject'\nimport { MockEntityData } from './MockEntityData'\nimport { MOCK_TABLE_ENTITY_ID } from './mockTableEntity'\n\nexport const MOCK_PROJECT_VIEW_ENTITY_ID = `syn500001`\nexport const MOCK_PROJECT_VIEW_NAME = 'Mocked Project View'\n\nexport const mockProjectViewEntity = {\n id: MOCK_PROJECT_VIEW_ENTITY_ID,\n parentId: mockProject.id,\n name: MOCK_PROJECT_VIEW_NAME,\n concreteType: 'org.sagebionetworks.repo.model.table.EntityView',\n createdBy: MOCK_USER_ID.toString(),\n modifiedBy: MOCK_USER_ID.toString(),\n etag: '00000000-0000-0000-0000-000000000000',\n columnIds: [],\n viewTypeMask: ENTITY_VIEW_TYPE_MASK_PROJECT,\n scopeIds: [mockProject.id],\n isSearchEnabled: true,\n versionNumber: 1,\n versionLabel: 'in progress',\n createdOn: '2023-02-09T12:44:35.457Z',\n modifiedOn: '2023-03-17T17:10:36.915Z',\n isLatestVersion: true,\n} satisfies EntityView\n\nconst mockProjectViewEntityHeader: EntityHeader = {\n name: mockProjectViewEntity.name,\n id: MOCK_TABLE_ENTITY_ID,\n type: 'org.sagebionetworks.repo.model.table.TableEntity',\n versionNumber: mockProjectViewEntity.versionNumber,\n versionLabel: mockProjectViewEntity.versionLabel,\n benefactorId: parseInt(mockProject.id),\n createdOn: mockProjectViewEntity.createdOn,\n modifiedOn: mockProjectViewEntity.modifiedOn,\n createdBy: mockProjectViewEntity.createdBy,\n modifiedBy: mockProjectViewEntity.modifiedBy,\n isLatestVersion: mockProjectViewEntity.isLatestVersion,\n}\n\nexport const mockProjectViewData: MockEntityData<EntityView> = {\n id: MOCK_PROJECT_VIEW_ENTITY_ID,\n name: MOCK_PROJECT_VIEW_NAME,\n entity: mockProjectViewEntity,\n entityHeader: mockProjectViewEntityHeader,\n}\n"],"mappings":";;;;;AAUA,IAAa,IAA8B,aAC9B,IAAyB,uBAEzB,IAAwB;CACnC,IAAI;CACJ,UAAU,EAAY;CACtB,MAAM;CACN,cAAc;CACd,WAAA;CACA,YAAA;CACA,MAAM;CACN,WAAW,EAAE;CACb,cAAc;CACd,UAAU,CAAC,EAAY,GAAG;CAC1B,iBAAiB;CACjB,eAAe;CACf,cAAc;CACd,WAAW;CACX,YAAY;CACZ,iBAAiB;CAClB,EAgBY,IAAkD;CAC7D,IAAI;CACJ,MAAM;CACN,QAAQ;CACR,cAlBgD;EAChD,MAAM,EAAsB;EAC5B,IAAI;EACJ,MAAM;EACN,eAAe,EAAsB;EACrC,cAAc,EAAsB;EACpC,cAAc,SAAS,EAAY,GAAG;EACtC,WAAW,EAAsB;EACjC,YAAY,EAAsB;EAClC,WAAW,EAAsB;EACjC,YAAY,EAAsB;EAClC,iBAAiB,EAAsB;EACxC;CAOA"}
1
+ {"version":3,"file":"mockProjectView.js","names":[],"sources":["../../../src/mocks/entity/mockProjectView.ts"],"sourcesContent":["import { MOCK_USER_ID } from '../user/mock_user_profile'\nimport {\n ENTITY_VIEW_TYPE_MASK_PROJECT,\n EntityHeader,\n EntityView,\n} from '@sage-bionetworks/synapse-types'\nimport mockProject from './mockProject'\nimport { MockEntityData } from './MockEntityData'\nimport { MOCK_TABLE_ENTITY_ID } from './mockTableEntity'\n\nexport const MOCK_PROJECT_VIEW_ENTITY_ID = `syn500001`\nexport const MOCK_PROJECT_VIEW_NAME = 'Mocked Project View'\n\nexport const mockProjectViewEntity = {\n id: MOCK_PROJECT_VIEW_ENTITY_ID,\n parentId: mockProject.id,\n name: MOCK_PROJECT_VIEW_NAME,\n concreteType: 'org.sagebionetworks.repo.model.table.EntityView',\n createdBy: MOCK_USER_ID.toString(),\n modifiedBy: MOCK_USER_ID.toString(),\n etag: '00000000-0000-0000-0000-000000000000',\n columnIds: [],\n viewTypeMask: ENTITY_VIEW_TYPE_MASK_PROJECT,\n scopeIds: [mockProject.id],\n isSearchEnabled: true,\n versionNumber: 1,\n versionLabel: 'in progress',\n createdOn: '2023-02-09T12:44:35.457Z',\n modifiedOn: '2023-03-17T17:10:36.915Z',\n isLatestVersion: true,\n} satisfies EntityView\n\nconst mockProjectViewEntityHeader: EntityHeader = {\n name: mockProjectViewEntity.name,\n id: MOCK_TABLE_ENTITY_ID,\n type: 'org.sagebionetworks.repo.model.table.TableEntity',\n versionNumber: mockProjectViewEntity.versionNumber,\n versionLabel: mockProjectViewEntity.versionLabel,\n benefactorId: parseInt(mockProject.id),\n createdOn: mockProjectViewEntity.createdOn,\n modifiedOn: mockProjectViewEntity.modifiedOn,\n createdBy: mockProjectViewEntity.createdBy,\n modifiedBy: mockProjectViewEntity.modifiedBy,\n isLatestVersion: mockProjectViewEntity.isLatestVersion,\n}\n\nexport const mockProjectViewData: MockEntityData<EntityView> = {\n id: MOCK_PROJECT_VIEW_ENTITY_ID,\n name: MOCK_PROJECT_VIEW_NAME,\n entity: mockProjectViewEntity,\n entityHeader: mockProjectViewEntityHeader,\n}\n"],"mappings":";;;;;AAUA,IAAa,IAA8B,aAC9B,IAAyB,uBAEzB,IAAwB;CACnC,IAAI;CACJ,UAAU,EAAY;CACtB,MAAM;CACN,cAAc;CACd,WAAA;CACA,YAAA;CACA,MAAM;CACN,WAAW,EAAE;CACb,cAAc;CACd,UAAU,CAAC,EAAY,GAAG;CAC1B,iBAAiB;CACjB,eAAe;CACf,cAAc;CACd,WAAW;CACX,YAAY;CACZ,iBAAiB;CAClB,EAgBY,IAAkD;CAC7D,IAAI;CACJ,MAAM;CACN,QAAQ;CACR,cAAc;EAjBd,MAAM,EAAsB;EAC5B,IAAI;EACJ,MAAM;EACN,eAAe,EAAsB;EACrC,cAAc,EAAsB;EACpC,cAAc,SAAS,EAAY,GAAG;EACtC,WAAW,EAAsB;EACjC,YAAY,EAAsB;EAClC,WAAW,EAAsB;EACjC,YAAY,EAAsB;EAClC,iBAAiB,EAAsB;EAOzB;CACf"}
@@ -1 +1 @@
1
- {"version":3,"file":"mockRootEntity.js","names":[],"sources":["../../../src/mocks/entity/mockRootEntity.ts"],"sourcesContent":["import { EntityType } from '@sage-bionetworks/synapse-client'\nimport {\n ACCESS_TYPE,\n AccessControlList,\n Folder,\n} from '@sage-bionetworks/synapse-types'\nimport { generateBaseEntity } from '../faker/generateFakeEntity'\nimport { MockEntityData } from './MockEntityData'\n\nconst rootEntityBenefactorAcl: AccessControlList = {\n id: 'syn4489',\n creationDate: '2011-08-07T01:14:53.898Z',\n etag: 'e5edca05-4442-4073-8474-1a6a384053e9',\n resourceAccess: [\n {\n principalId: 273948,\n accessType: [ACCESS_TYPE.CREATE],\n },\n ],\n}\n\nconst mockRootEntityData: MockEntityData<Folder> = generateBaseEntity<Folder>({\n id: 4489,\n entity: { name: '' },\n acl: rootEntityBenefactorAcl,\n type: EntityType.folder,\n permissions: {\n canView: false,\n canEdit: false,\n canMove: false,\n canAddChild: false,\n canCertifiedUserEdit: false,\n canCertifiedUserAddChild: false,\n isCertifiedUser: false,\n canChangePermissions: false,\n canChangeSettings: false,\n canDelete: false,\n canDownload: false,\n canUpload: false,\n canEnableInheritance: false,\n ownerPrincipalId: 0,\n canPublicRead: false,\n canModerate: false,\n isCertificationRequired: false,\n isEntityOpenData: false,\n },\n})\n\nexport default mockRootEntityData\n"],"mappings":";;;;AAqBA,IAAM,IAA6C,EAA2B;CAC5E,IAAI;CACJ,QAAQ,EAAE,MAAM,IAAI;CACpB,KAfiD;EACjD,IAAI;EACJ,cAAc;EACd,MAAM;EACN,gBAAgB,CACd;GACE,aAAa;GACb,YAAY,CAAC,EAAY,OAAO;GACjC,CACF;EACF;CAMC,MAAM,EAAW;CACjB,aAAa;EACX,SAAS;EACT,SAAS;EACT,SAAS;EACT,aAAa;EACb,sBAAsB;EACtB,0BAA0B;EAC1B,iBAAiB;EACjB,sBAAsB;EACtB,mBAAmB;EACnB,WAAW;EACX,aAAa;EACb,WAAW;EACX,sBAAsB;EACtB,kBAAkB;EAClB,eAAe;EACf,aAAa;EACb,yBAAyB;EACzB,kBAAkB;EACnB;CACF,CAAC"}
1
+ {"version":3,"file":"mockRootEntity.js","names":[],"sources":["../../../src/mocks/entity/mockRootEntity.ts"],"sourcesContent":["import { EntityType } from '@sage-bionetworks/synapse-client'\nimport {\n ACCESS_TYPE,\n AccessControlList,\n Folder,\n} from '@sage-bionetworks/synapse-types'\nimport { generateBaseEntity } from '../faker/generateFakeEntity'\nimport { MockEntityData } from './MockEntityData'\n\nconst rootEntityBenefactorAcl: AccessControlList = {\n id: 'syn4489',\n creationDate: '2011-08-07T01:14:53.898Z',\n etag: 'e5edca05-4442-4073-8474-1a6a384053e9',\n resourceAccess: [\n {\n principalId: 273948,\n accessType: [ACCESS_TYPE.CREATE],\n },\n ],\n}\n\nconst mockRootEntityData: MockEntityData<Folder> = generateBaseEntity<Folder>({\n id: 4489,\n entity: { name: '' },\n acl: rootEntityBenefactorAcl,\n type: EntityType.folder,\n permissions: {\n canView: false,\n canEdit: false,\n canMove: false,\n canAddChild: false,\n canCertifiedUserEdit: false,\n canCertifiedUserAddChild: false,\n isCertifiedUser: false,\n canChangePermissions: false,\n canChangeSettings: false,\n canDelete: false,\n canDownload: false,\n canUpload: false,\n canEnableInheritance: false,\n ownerPrincipalId: 0,\n canPublicRead: false,\n canModerate: false,\n isCertificationRequired: false,\n isEntityOpenData: false,\n },\n})\n\nexport default mockRootEntityData\n"],"mappings":";;;;AAqBA,IAAM,IAA6C,EAA2B;CAC5E,IAAI;CACJ,QAAQ,EAAE,MAAM,IAAI;CACpB,KAAK;EAdL,IAAI;EACJ,cAAc;EACd,MAAM;EACN,gBAAgB,CACd;GACE,aAAa;GACb,YAAY,CAAC,EAAY,OAAO;GACjC,CACF;EAMI;CACL,MAAM,EAAW;CACjB,aAAa;EACX,SAAS;EACT,SAAS;EACT,SAAS;EACT,aAAa;EACb,sBAAsB;EACtB,0BAA0B;EAC1B,iBAAiB;EACjB,sBAAsB;EACtB,mBAAmB;EACnB,WAAW;EACX,aAAa;EACb,WAAW;EACX,sBAAsB;EACtB,kBAAkB;EAClB,eAAe;EACf,aAAa;EACb,yBAAyB;EACzB,kBAAkB;EACnB;CACF,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"mockTableEntity.js","names":[],"sources":["../../../src/mocks/entity/mockTableEntity.ts"],"sourcesContent":["import { EntityHeader, TableEntity } from '@sage-bionetworks/synapse-types'\nimport { MOCK_USER_ID, MOCK_USER_ID_2 } from '../user/mock_user_profile'\nimport mockProject from './mockProject'\nimport { MockEntityData } from './MockEntityData'\n\nexport const MOCK_TABLE_ENTITY_ID = `syn40000`\nexport const MOCK_TABLE_ENTITY_NAME = 'my table name'\n\nconst parentId = mockProject.id\n\nexport const mockTableEntity = {\n id: MOCK_TABLE_ENTITY_ID,\n versionNumber: 1,\n versionLabel: 'in progress',\n versionComment: 'in progress',\n parentId: parentId,\n name: MOCK_TABLE_ENTITY_NAME,\n concreteType: 'org.sagebionetworks.repo.model.table.TableEntity',\n createdBy: MOCK_USER_ID.toString(),\n createdOn: '2022-02-03T12:44:35.457Z',\n modifiedOn: '2022-05-14T17:10:36.915Z',\n modifiedBy: MOCK_USER_ID_2.toString(),\n etag: '00000000-0000-0000-0000-000000000000',\n columnIds: [],\n isSearchEnabled: true,\n isLatestVersion: true,\n} satisfies TableEntity\n\nconst mockTableEntityHeader: EntityHeader = {\n name: mockTableEntity.name,\n id: MOCK_TABLE_ENTITY_ID,\n type: 'org.sagebionetworks.repo.model.table.TableEntity',\n versionNumber: mockTableEntity.versionNumber,\n versionLabel: mockTableEntity.versionLabel,\n benefactorId: parseInt(parentId),\n createdOn: mockTableEntity.createdOn,\n modifiedOn: mockTableEntity.modifiedOn,\n createdBy: mockTableEntity.createdBy,\n modifiedBy: mockTableEntity.modifiedBy,\n isLatestVersion: mockTableEntity.isLatestVersion,\n}\n\nconst mockTableEntityData: MockEntityData<TableEntity> = {\n id: MOCK_TABLE_ENTITY_ID,\n name: MOCK_TABLE_ENTITY_NAME,\n entity: mockTableEntity,\n entityHeader: mockTableEntityHeader,\n}\n\nexport default mockTableEntityData\n"],"mappings":";;;AAKA,IAAa,IAAuB,YACvB,IAAyB,iBAEhC,IAAW,EAAY,IAEhB,IAAkB;CAC7B,IAAI;CACJ,eAAe;CACf,cAAc;CACd,gBAAgB;CACN;CACV,MAAM;CACN,cAAc;CACd,WAAA;CACA,WAAW;CACX,YAAY;CACZ,YAAY,EAAe,UAAU;CACrC,MAAM;CACN,WAAW,EAAE;CACb,iBAAiB;CACjB,iBAAiB;CAClB,EAgBK,IAAmD;CACvD,IAAI;CACJ,MAAM;CACN,QAAQ;CACR,cAlB0C;EAC1C,MAAM,EAAgB;EACtB,IAAI;EACJ,MAAM;EACN,eAAe,EAAgB;EAC/B,cAAc,EAAgB;EAC9B,cAAc,SAAS,EAAS;EAChC,WAAW,EAAgB;EAC3B,YAAY,EAAgB;EAC5B,WAAW,EAAgB;EAC3B,YAAY,EAAgB;EAC5B,iBAAiB,EAAgB;EAClC;CAOA"}
1
+ {"version":3,"file":"mockTableEntity.js","names":[],"sources":["../../../src/mocks/entity/mockTableEntity.ts"],"sourcesContent":["import { EntityHeader, TableEntity } from '@sage-bionetworks/synapse-types'\nimport { MOCK_USER_ID, MOCK_USER_ID_2 } from '../user/mock_user_profile'\nimport mockProject from './mockProject'\nimport { MockEntityData } from './MockEntityData'\n\nexport const MOCK_TABLE_ENTITY_ID = `syn40000`\nexport const MOCK_TABLE_ENTITY_NAME = 'my table name'\n\nconst parentId = mockProject.id\n\nexport const mockTableEntity = {\n id: MOCK_TABLE_ENTITY_ID,\n versionNumber: 1,\n versionLabel: 'in progress',\n versionComment: 'in progress',\n parentId: parentId,\n name: MOCK_TABLE_ENTITY_NAME,\n concreteType: 'org.sagebionetworks.repo.model.table.TableEntity',\n createdBy: MOCK_USER_ID.toString(),\n createdOn: '2022-02-03T12:44:35.457Z',\n modifiedOn: '2022-05-14T17:10:36.915Z',\n modifiedBy: MOCK_USER_ID_2.toString(),\n etag: '00000000-0000-0000-0000-000000000000',\n columnIds: [],\n isSearchEnabled: true,\n isLatestVersion: true,\n} satisfies TableEntity\n\nconst mockTableEntityHeader: EntityHeader = {\n name: mockTableEntity.name,\n id: MOCK_TABLE_ENTITY_ID,\n type: 'org.sagebionetworks.repo.model.table.TableEntity',\n versionNumber: mockTableEntity.versionNumber,\n versionLabel: mockTableEntity.versionLabel,\n benefactorId: parseInt(parentId),\n createdOn: mockTableEntity.createdOn,\n modifiedOn: mockTableEntity.modifiedOn,\n createdBy: mockTableEntity.createdBy,\n modifiedBy: mockTableEntity.modifiedBy,\n isLatestVersion: mockTableEntity.isLatestVersion,\n}\n\nconst mockTableEntityData: MockEntityData<TableEntity> = {\n id: MOCK_TABLE_ENTITY_ID,\n name: MOCK_TABLE_ENTITY_NAME,\n entity: mockTableEntity,\n entityHeader: mockTableEntityHeader,\n}\n\nexport default mockTableEntityData\n"],"mappings":";;;AAKA,IAAa,IAAuB,YACvB,IAAyB,iBAEhC,IAAW,EAAY,IAEhB,IAAkB;CAC7B,IAAI;CACJ,eAAe;CACf,cAAc;CACd,gBAAgB;CACN;CACV,MAAM;CACN,cAAc;CACd,WAAA;CACA,WAAW;CACX,YAAY;CACZ,YAAY,EAAe,UAAU;CACrC,MAAM;CACN,WAAW,EAAE;CACb,iBAAiB;CACjB,iBAAiB;CAClB,EAgBK,IAAmD;CACvD,IAAI;CACJ,MAAM;CACN,QAAQ;CACR,cAAc;EAjBd,MAAM,EAAgB;EACtB,IAAI;EACJ,MAAM;EACN,eAAe,EAAgB;EAC/B,cAAc,EAAgB;EAC9B,cAAc,SAAS,EAAS;EAChC,WAAW,EAAgB;EAC3B,YAAY,EAAgB;EAC5B,WAAW,EAAgB;EAC3B,YAAY,EAAgB;EAC5B,iBAAiB,EAAgB;EAOnB;CACf"}
@@ -1 +1 @@
1
- {"version":3,"file":"mockWiki.js","names":[],"sources":["../../src/mocks/mockWiki.ts"],"sourcesContent":["import { WikiPage } from '@sage-bionetworks/synapse-types'\nimport { MOCK_USER_ID, MOCK_USER_ID_2 } from './user/mock_user_profile'\nimport { MOCK_FILE_HANDLE_ID } from './mock_file_handle'\n\nexport const MOCK_WIKI_ETAG = 'mock-wiki-etag'\nconst mockWikiMarkdown =\n '**You have access to these data under the following terms:**\\n\\nAccess to these data is controlled at the request of the data contributor(s) and due to the sensitive nature of the data. The terms for data access cannot be modified. \\n&nbsp;\\nClick the **Request Access** button below to start your application, where you will be prompted to enter:\\n1.\\tA brief Intended Data Use statement to be posted on the AD Knowledge Portal (500 words maximum in English). The Intended Data Use statement must include the following:\\n * **The names of the AD Knowledge Portal studies from which you plan to access data.** A full list of study names can be found **[here](https://adknowledgeportal.synapse.org/Explore/Studies)**.\\n * Objectives of the proposed research\\n * Study design and analysis plan\\n2.\\tList the Synapse username of all collaborators from your institution who will be accessing the data. \\n3.\\tSubmit the embedded [Data Use Certificate (DUC)](https://www.synapse.org/Synapse:syn25441378) signed by yourself, your institutional signing official, and all collaborating investigators from your institution who will be accessing the data\\n\\n&nbsp;\\nFor annual renewal or to add an investigator to an existing DUC, please see the instructions provided on the [AD Portal Docs](https://help.adknowledgeportal.org/apd/Data-Use-Certificates.2623373330.html) help page.\\n\\nExpected data access application review time is one to two weeks. Once approved, data may be used for one year. You must submit a renewal at the conclusion of one year, otherwise your access will be revoked.\\n\\n**Please note that it is a violation of the Data Access Terms and Conditions to share Individual-level Human data and/or results outside of the AD Knowledge Portal**. This is true for files obtained directly from the AD Knowledge Portal and/or generated through your own analysis. Also, proper acknowledgment of data sources is mandatory in publications based on secondary data use. See the [Data Use and Acknowledgement ](https://help.adknowledgeportal.org/apd/Data-Use-&-Acknowledgement.2623242281.html) instructions for more information.\\n\\n&nbsp;\\nIf you have questions about the data access process, please contact the Synapse Access & Compliance Team by submitting your question to the [Access and Compliance Team Help Center Portal](https://sagebionetworks.jira.com/servicedesk/customer/portal/8) or by emailing the team at act@sagebionetworks.org. \\n'\n\nexport const mockManagedACTAccessRequirementWikiPage: WikiPage = {\n id: '123',\n etag: '00924558-f46d-4f05-9f62-0686ddecf8ed',\n createdOn: '2017-08-23T18:48:37.515Z',\n createdBy: MOCK_USER_ID.toString(),\n modifiedOn: '2022-12-06T23:18:27.877Z',\n modifiedBy: MOCK_USER_ID_2.toString(),\n title: '',\n markdown: mockWikiMarkdown,\n attachmentFileHandleIds: [],\n}\n\nexport const mockSelfSignAccessRequirementWikiPage: WikiPage = {\n id: '124',\n etag: '00924558-f46d-4f05-9f62-0686ddecf8ed',\n createdOn: '2017-08-23T18:48:37.515Z',\n createdBy: MOCK_USER_ID.toString(),\n modifiedOn: '2022-12-06T23:18:27.877Z',\n modifiedBy: MOCK_USER_ID_2.toString(),\n title: '',\n markdown:\n 'You must accept the terms of this self-sign access requirement. The terms are described here, and you sign it yourself.',\n attachmentFileHandleIds: [],\n}\n\nexport const mockToUAccessRequirementWikiPage: WikiPage = {\n id: '125',\n etag: '00924558-f46d-4f05-9f62-0686ddecf8ed',\n createdOn: '2017-08-23T18:48:37.515Z',\n createdBy: MOCK_USER_ID.toString(),\n modifiedOn: '2022-12-06T23:18:27.877Z',\n modifiedBy: MOCK_USER_ID_2.toString(),\n title: '',\n markdown:\n 'This is a wiki page. You must accept the terms of this legacy terms of use access requirement. The terms are described here, and you sign it yourself.',\n attachmentFileHandleIds: [],\n}\n\nexport const mockACTAccessRequirementWikiPage: WikiPage = {\n id: '126',\n etag: '00924558-f46d-4f05-9f62-0686ddecf8ed',\n createdOn: '2017-08-23T18:48:37.515Z',\n createdBy: MOCK_USER_ID.toString(),\n modifiedOn: '2022-12-06T23:18:27.877Z',\n modifiedBy: MOCK_USER_ID_2.toString(),\n title: '',\n markdown:\n 'This is a wiki page. You must request access using this legacy ACT access requirement. Access to these data is controlled at the request of the data contributor(s) and due to the sensitive nature of the data.',\n attachmentFileHandleIds: [],\n}\n\nexport const mockEntityRootWikiPage: WikiPage = {\n id: '127',\n etag: '00924558-f46d-4f05-9f62-0686ddecf8ed',\n createdOn: '2017-08-23T18:48:37.515Z',\n createdBy: MOCK_USER_ID.toString(),\n modifiedOn: '2022-12-06T23:18:27.877Z',\n modifiedBy: MOCK_USER_ID_2.toString(),\n title: '',\n markdown: 'This is the root page for an Entity wiki',\n attachmentFileHandleIds: [],\n}\n\nexport const mockEntityWikiPage: WikiPage = {\n id: '128',\n etag: '00924558-f46d-4f05-9f62-0686ddecf8ed',\n createdOn: '2017-08-23T18:48:37.515Z',\n createdBy: MOCK_USER_ID.toString(),\n modifiedOn: '2022-12-06T23:18:27.877Z',\n modifiedBy: MOCK_USER_ID_2.toString(),\n title: 'Some title',\n markdown: 'This is a a subpage for an Entity wiki',\n attachmentFileHandleIds: [MOCK_FILE_HANDLE_ID],\n parentWikiId: mockEntityRootWikiPage.id,\n}\n\nexport const mockWikiPages: WikiPage[] = [\n mockManagedACTAccessRequirementWikiPage,\n mockSelfSignAccessRequirementWikiPage,\n mockToUAccessRequirementWikiPage,\n mockACTAccessRequirementWikiPage,\n mockEntityRootWikiPage,\n mockEntityWikiPage,\n]\n"],"mappings":";;;AAIA,IAAa,IAAiB,kBAIjB,IAAoD;CAC/D,IAAI;CACJ,MAAM;CACN,WAAW;CACX,WAAA;CACA,YAAY;CACZ,YAAY,EAAe,UAAU;CACrC,OAAO;CACP,UAVA;CAWA,yBAAyB,EAAE;CAC5B,EAEY,IAAkD;CAC7D,IAAI;CACJ,MAAM;CACN,WAAW;CACX,WAAA;CACA,YAAY;CACZ,YAAY,EAAe,UAAU;CACrC,OAAO;CACP,UACE;CACF,yBAAyB,EAAE;CAC5B,EAEY,IAA6C;CACxD,IAAI;CACJ,MAAM;CACN,WAAW;CACX,WAAA;CACA,YAAY;CACZ,YAAY,EAAe,UAAU;CACrC,OAAO;CACP,UACE;CACF,yBAAyB,EAAE;CAC5B,EAEY,IAA6C;CACxD,IAAI;CACJ,MAAM;CACN,WAAW;CACX,WAAA;CACA,YAAY;CACZ,YAAY,EAAe,UAAU;CACrC,OAAO;CACP,UACE;CACF,yBAAyB,EAAE;CAC5B,EAEY,IAAmC;CAC9C,IAAI;CACJ,MAAM;CACN,WAAW;CACX,WAAA;CACA,YAAY;CACZ,YAAY,EAAe,UAAU;CACrC,OAAO;CACP,UAAU;CACV,yBAAyB,EAAE;CAC5B,EAEY,IAA+B;CAC1C,IAAI;CACJ,MAAM;CACN,WAAW;CACX,WAAA;CACA,YAAY;CACZ,YAAY,EAAe,UAAU;CACrC,OAAO;CACP,UAAU;CACV,yBAAyB,CAAC,EAAoB;CAC9C,cAAc,EAAuB;CACtC,EAEY,IAA4B;CACvC;CACA;CACA;CACA;CACA;CACA;CACD"}
1
+ {"version":3,"file":"mockWiki.js","names":[],"sources":["../../src/mocks/mockWiki.ts"],"sourcesContent":["import { WikiPage } from '@sage-bionetworks/synapse-types'\nimport { MOCK_USER_ID, MOCK_USER_ID_2 } from './user/mock_user_profile'\nimport { MOCK_FILE_HANDLE_ID } from './mock_file_handle'\n\nexport const MOCK_WIKI_ETAG = 'mock-wiki-etag'\nconst mockWikiMarkdown =\n '**You have access to these data under the following terms:**\\n\\nAccess to these data is controlled at the request of the data contributor(s) and due to the sensitive nature of the data. The terms for data access cannot be modified. \\n&nbsp;\\nClick the **Request Access** button below to start your application, where you will be prompted to enter:\\n1.\\tA brief Intended Data Use statement to be posted on the AD Knowledge Portal (500 words maximum in English). The Intended Data Use statement must include the following:\\n * **The names of the AD Knowledge Portal studies from which you plan to access data.** A full list of study names can be found **[here](https://adknowledgeportal.synapse.org/Explore/Studies)**.\\n * Objectives of the proposed research\\n * Study design and analysis plan\\n2.\\tList the Synapse username of all collaborators from your institution who will be accessing the data. \\n3.\\tSubmit the embedded [Data Use Certificate (DUC)](https://www.synapse.org/Synapse:syn25441378) signed by yourself, your institutional signing official, and all collaborating investigators from your institution who will be accessing the data\\n\\n&nbsp;\\nFor annual renewal or to add an investigator to an existing DUC, please see the instructions provided on the [AD Portal Docs](https://help.adknowledgeportal.org/apd/Data-Use-Certificates.2623373330.html) help page.\\n\\nExpected data access application review time is one to two weeks. Once approved, data may be used for one year. You must submit a renewal at the conclusion of one year, otherwise your access will be revoked.\\n\\n**Please note that it is a violation of the Data Access Terms and Conditions to share Individual-level Human data and/or results outside of the AD Knowledge Portal**. This is true for files obtained directly from the AD Knowledge Portal and/or generated through your own analysis. Also, proper acknowledgment of data sources is mandatory in publications based on secondary data use. See the [Data Use and Acknowledgement ](https://help.adknowledgeportal.org/apd/Data-Use-&-Acknowledgement.2623242281.html) instructions for more information.\\n\\n&nbsp;\\nIf you have questions about the data access process, please contact the Synapse Access & Compliance Team by submitting your question to the [Access and Compliance Team Help Center Portal](https://sagebionetworks.jira.com/servicedesk/customer/portal/8) or by emailing the team at act@sagebionetworks.org. \\n'\n\nexport const mockManagedACTAccessRequirementWikiPage: WikiPage = {\n id: '123',\n etag: '00924558-f46d-4f05-9f62-0686ddecf8ed',\n createdOn: '2017-08-23T18:48:37.515Z',\n createdBy: MOCK_USER_ID.toString(),\n modifiedOn: '2022-12-06T23:18:27.877Z',\n modifiedBy: MOCK_USER_ID_2.toString(),\n title: '',\n markdown: mockWikiMarkdown,\n attachmentFileHandleIds: [],\n}\n\nexport const mockSelfSignAccessRequirementWikiPage: WikiPage = {\n id: '124',\n etag: '00924558-f46d-4f05-9f62-0686ddecf8ed',\n createdOn: '2017-08-23T18:48:37.515Z',\n createdBy: MOCK_USER_ID.toString(),\n modifiedOn: '2022-12-06T23:18:27.877Z',\n modifiedBy: MOCK_USER_ID_2.toString(),\n title: '',\n markdown:\n 'You must accept the terms of this self-sign access requirement. The terms are described here, and you sign it yourself.',\n attachmentFileHandleIds: [],\n}\n\nexport const mockToUAccessRequirementWikiPage: WikiPage = {\n id: '125',\n etag: '00924558-f46d-4f05-9f62-0686ddecf8ed',\n createdOn: '2017-08-23T18:48:37.515Z',\n createdBy: MOCK_USER_ID.toString(),\n modifiedOn: '2022-12-06T23:18:27.877Z',\n modifiedBy: MOCK_USER_ID_2.toString(),\n title: '',\n markdown:\n 'This is a wiki page. You must accept the terms of this legacy terms of use access requirement. The terms are described here, and you sign it yourself.',\n attachmentFileHandleIds: [],\n}\n\nexport const mockACTAccessRequirementWikiPage: WikiPage = {\n id: '126',\n etag: '00924558-f46d-4f05-9f62-0686ddecf8ed',\n createdOn: '2017-08-23T18:48:37.515Z',\n createdBy: MOCK_USER_ID.toString(),\n modifiedOn: '2022-12-06T23:18:27.877Z',\n modifiedBy: MOCK_USER_ID_2.toString(),\n title: '',\n markdown:\n 'This is a wiki page. You must request access using this legacy ACT access requirement. Access to these data is controlled at the request of the data contributor(s) and due to the sensitive nature of the data.',\n attachmentFileHandleIds: [],\n}\n\nexport const mockEntityRootWikiPage: WikiPage = {\n id: '127',\n etag: '00924558-f46d-4f05-9f62-0686ddecf8ed',\n createdOn: '2017-08-23T18:48:37.515Z',\n createdBy: MOCK_USER_ID.toString(),\n modifiedOn: '2022-12-06T23:18:27.877Z',\n modifiedBy: MOCK_USER_ID_2.toString(),\n title: '',\n markdown: 'This is the root page for an Entity wiki',\n attachmentFileHandleIds: [],\n}\n\nexport const mockEntityWikiPage: WikiPage = {\n id: '128',\n etag: '00924558-f46d-4f05-9f62-0686ddecf8ed',\n createdOn: '2017-08-23T18:48:37.515Z',\n createdBy: MOCK_USER_ID.toString(),\n modifiedOn: '2022-12-06T23:18:27.877Z',\n modifiedBy: MOCK_USER_ID_2.toString(),\n title: 'Some title',\n markdown: 'This is a a subpage for an Entity wiki',\n attachmentFileHandleIds: [MOCK_FILE_HANDLE_ID],\n parentWikiId: mockEntityRootWikiPage.id,\n}\n\nexport const mockWikiPages: WikiPage[] = [\n mockManagedACTAccessRequirementWikiPage,\n mockSelfSignAccessRequirementWikiPage,\n mockToUAccessRequirementWikiPage,\n mockACTAccessRequirementWikiPage,\n mockEntityRootWikiPage,\n mockEntityWikiPage,\n]\n"],"mappings":";;;AAIA,IAAa,IAAiB,kBAIjB,IAAoD;CAC/D,IAAI;CACJ,MAAM;CACN,WAAW;CACX,WAAA;CACA,YAAY;CACZ,YAAY,EAAe,UAAU;CACrC,OAAO;CACP,UAAU;CACV,yBAAyB,EAAE;CAC5B,EAEY,IAAkD;CAC7D,IAAI;CACJ,MAAM;CACN,WAAW;CACX,WAAA;CACA,YAAY;CACZ,YAAY,EAAe,UAAU;CACrC,OAAO;CACP,UACE;CACF,yBAAyB,EAAE;CAC5B,EAEY,IAA6C;CACxD,IAAI;CACJ,MAAM;CACN,WAAW;CACX,WAAA;CACA,YAAY;CACZ,YAAY,EAAe,UAAU;CACrC,OAAO;CACP,UACE;CACF,yBAAyB,EAAE;CAC5B,EAEY,IAA6C;CACxD,IAAI;CACJ,MAAM;CACN,WAAW;CACX,WAAA;CACA,YAAY;CACZ,YAAY,EAAe,UAAU;CACrC,OAAO;CACP,UACE;CACF,yBAAyB,EAAE;CAC5B,EAEY,IAAmC;CAC9C,IAAI;CACJ,MAAM;CACN,WAAW;CACX,WAAA;CACA,YAAY;CACZ,YAAY,EAAe,UAAU;CACrC,OAAO;CACP,UAAU;CACV,yBAAyB,EAAE;CAC5B,EAEY,IAA+B;CAC1C,IAAI;CACJ,MAAM;CACN,WAAW;CACX,WAAA;CACA,YAAY;CACZ,YAAY,EAAe,UAAU;CACrC,OAAO;CACP,UAAU;CACV,yBAAyB,CAAC,EAAoB;CAC9C,cAAc,EAAuB;CACtC,EAEY,IAA4B;CACvC;CACA;CACA;CACA;CACA;CACA;CACD"}
@@ -1 +1 @@
1
- {"version":3,"file":"asyncJobHandlers.js","names":[],"sources":["../../../../src/mocks/msw/handlers/asyncJobHandlers.ts"],"sourcesContent":["import { ASYNCHRONOUS_JOB_TOKEN } from '@/utils/APIConstants'\nimport {\n BackendDestinationEnum,\n getEndpoint,\n} from '@/utils/functions/getEndpoint'\nimport { ErrorResponse } from '@sage-bionetworks/synapse-client'\nimport {\n AsynchJobState,\n AsynchronousJobStatus,\n AsyncJobId,\n} from '@sage-bionetworks/synapse-types'\nimport { DefaultBodyType, http, HttpResponse } from 'msw'\nimport BasicMockedCrudService from '../util/BasicMockedCrudService'\n\ntype AsyncJobDetails<TRequestBody, TResponseBody> = {\n id: string\n request: TRequestBody\n response: TResponseBody\n}\n\nconst mockAsynchronousJobService = new BasicMockedCrudService<\n AsyncJobDetails<unknown, unknown>,\n 'id'\n>({\n idField: 'id',\n autoGenerateId: true,\n})\n\n/**\n * Generates MSW handlers for asynchronous jobs.\n * @param requestPath the path to the service-specific asynchronous job request endpoint.\n * For example, `'/repo/v1/entity/:id/table/query/async/start'`\n * @param responsePath a function that takes the token parameter ID and returns a path to the service-specific asynchronous job response endpoint.\n * For example, `param => /repo/v1/entity/:id/table/query/async/get/${param}`\n * The generic asynchronous job retrieval handler will be generated automatically.\n * @param responseBody the response body, or a function that takes the request body and returns the response body\n * @param backendOrigin the backend origin to use for the handlers.\n * @param serviceSpecificEndpointResponseStatus the status code to use for the service-specific endpoint. The asynchronous job endpoint will always return 200.\n */\nexport function generateAsyncJobHandlers<\n TRequestBody = unknown,\n TResponseBody extends DefaultBodyType | ErrorResponse =\n | DefaultBodyType\n | ErrorResponse,\n>(\n requestPath: string,\n responsePath: (tokenParam: string) => string,\n responseBody: TResponseBody | ((requestBody: TRequestBody) => TResponseBody),\n backendOrigin = getEndpoint(BackendDestinationEnum.REPO_ENDPOINT),\n serviceSpecificEndpointResponseStatus = 201,\n) {\n return [\n // Handler for the asynchronous job request endpoint.\n http.post(`${backendOrigin}${requestPath}`, async ({ request }) => {\n const createdJob = mockAsynchronousJobService.create({\n request: await request.json(),\n response: responseBody,\n })\n\n const asyncJobResponse: AsyncJobId = {\n token: createdJob.id,\n }\n\n return HttpResponse.json(asyncJobResponse, { status: 201 })\n }),\n\n // Generic async job response handler. Since this implementation is the same for all services and references the global map, it's fine if this is overridden.\n http.get(\n `${backendOrigin}${ASYNCHRONOUS_JOB_TOKEN(':id')}`,\n ({ params }) => {\n const id = params.id as string\n const asyncJobDetails = mockAsynchronousJobService.getOneById(id)\n if (!id || !asyncJobDetails) {\n return HttpResponse.json(\n { message: 'The mocked asynchronous job was not found' },\n { status: 404 },\n )\n }\n const { request, response } = asyncJobDetails as {\n request: TRequestBody\n response: TResponseBody\n }\n const responseObject: TResponseBody =\n typeof response === 'function' ? response(request) : response\n\n const jobState: AsynchJobState =\n serviceSpecificEndpointResponseStatus < 400 ? 'COMPLETE' : 'FAILED'\n\n return HttpResponse.json<\n AsynchronousJobStatus<TRequestBody, TResponseBody>\n >(\n {\n jobState,\n jobCanceling: false,\n requestBody: request,\n etag: '00000000-0000-0000-0000-000000000000',\n jobId: id,\n responseBody: responseObject,\n startedByUserId: 0,\n startedOn: '',\n changedOn: '',\n progressMessage: '',\n progressCurrent: 100,\n progressTotal: 100,\n exception: '',\n errorMessage: '',\n errorDetails: '',\n runtimeMS: 100,\n },\n {\n // This endpoint returns a successful status code regardless of the job status\n status: 200,\n },\n )\n },\n ),\n\n // Service-specific response endpoint\n http.get<{ asyncJobToken: string }, TResponseBody>(\n `${backendOrigin}${responsePath(':asyncJobToken')}`,\n ({ params }) => {\n const asyncJobToken = params.asyncJobToken\n const asyncJobDetails =\n mockAsynchronousJobService.getOneById(asyncJobToken)\n if (!asyncJobToken || !asyncJobDetails) {\n return HttpResponse.json(\n { message: 'The mocked asynchronous job was not found' },\n { status: 404 },\n )\n }\n\n const { request, response } = asyncJobDetails as {\n request: TRequestBody\n response: TResponseBody\n }\n const responseObject: TResponseBody =\n typeof response === 'function' ? response(request) : response\n\n return HttpResponse.json(responseObject, {\n status: serviceSpecificEndpointResponseStatus,\n })\n },\n ),\n ]\n}\n"],"mappings":";;;;;AAoBA,IAAM,IAA6B,IAAI,EAGrC;CACA,SAAS;CACT,gBAAgB;CACjB,CAAC;AAaF,SAAgB,EAMd,GACA,GACA,GACA,IAAgB,EAAY,EAAuB,cAAc,EACjE,IAAwC,KACxC;AACA,QAAO;EAEL,EAAK,KAAK,GAAG,IAAgB,KAAe,OAAO,EAAE,iBAAc;GAMjE,IAAM,IAA+B,EACnC,OANiB,EAA2B,OAAO;IACnD,SAAS,MAAM,EAAQ,MAAM;IAC7B,UAAU;IACX,CAAC,CAGkB,IACnB;AAED,UAAO,EAAa,KAAK,GAAkB,EAAE,QAAQ,KAAK,CAAC;IAC3D;EAGF,EAAK,IACH,GAAG,IAAgB,EAAuB,MAAM,KAC/C,EAAE,gBAAa;GACd,IAAM,IAAK,EAAO,IACZ,IAAkB,EAA2B,WAAW,EAAG;AACjE,OAAI,CAAC,KAAM,CAAC,EACV,QAAO,EAAa,KAClB,EAAE,SAAS,6CAA6C,EACxD,EAAE,QAAQ,KAAK,CAChB;GAEH,IAAM,EAAE,YAAS,gBAAa,GAIxB,IACJ,OAAO,KAAa,aAAa,EAAS,EAAQ,GAAG,GAEjD,IACJ,IAAwC,MAAM,aAAa;AAE7D,UAAO,EAAa,KAGlB;IACE;IACA,cAAc;IACd,aAAa;IACb,MAAM;IACN,OAAO;IACP,cAAc;IACd,iBAAiB;IACjB,WAAW;IACX,WAAW;IACX,iBAAiB;IACjB,iBAAiB;IACjB,eAAe;IACf,WAAW;IACX,cAAc;IACd,cAAc;IACd,WAAW;IACZ,EACD,EAEE,QAAQ,KACT,CACF;IAEJ;EAGD,EAAK,IACH,GAAG,IAAgB,EAAa,iBAAiB,KAChD,EAAE,gBAAa;GACd,IAAM,IAAgB,EAAO,eACvB,IACJ,EAA2B,WAAW,EAAc;AACtD,OAAI,CAAC,KAAiB,CAAC,EACrB,QAAO,EAAa,KAClB,EAAE,SAAS,6CAA6C,EACxD,EAAE,QAAQ,KAAK,CAChB;GAGH,IAAM,EAAE,YAAS,gBAAa,GAIxB,IACJ,OAAO,KAAa,aAAa,EAAS,EAAQ,GAAG;AAEvD,UAAO,EAAa,KAAK,GAAgB,EACvC,QAAQ,GACT,CAAC;IAEL;EACF"}
1
+ {"version":3,"file":"asyncJobHandlers.js","names":[],"sources":["../../../../src/mocks/msw/handlers/asyncJobHandlers.ts"],"sourcesContent":["import { ASYNCHRONOUS_JOB_TOKEN } from '@/utils/APIConstants'\nimport {\n BackendDestinationEnum,\n getEndpoint,\n} from '@/utils/functions/getEndpoint'\nimport { ErrorResponse } from '@sage-bionetworks/synapse-client'\nimport {\n AsynchJobState,\n AsynchronousJobStatus,\n AsyncJobId,\n} from '@sage-bionetworks/synapse-types'\nimport { DefaultBodyType, http, HttpResponse } from 'msw'\nimport BasicMockedCrudService from '../util/BasicMockedCrudService'\n\ntype AsyncJobDetails<TRequestBody, TResponseBody> = {\n id: string\n request: TRequestBody\n response: TResponseBody\n}\n\nconst mockAsynchronousJobService = new BasicMockedCrudService<\n AsyncJobDetails<unknown, unknown>,\n 'id'\n>({\n idField: 'id',\n autoGenerateId: true,\n})\n\n/**\n * Generates MSW handlers for asynchronous jobs.\n * @param requestPath the path to the service-specific asynchronous job request endpoint.\n * For example, `'/repo/v1/entity/:id/table/query/async/start'`\n * @param responsePath a function that takes the token parameter ID and returns a path to the service-specific asynchronous job response endpoint.\n * For example, `param => /repo/v1/entity/:id/table/query/async/get/${param}`\n * The generic asynchronous job retrieval handler will be generated automatically.\n * @param responseBody the response body, or a function that takes the request body and returns the response body\n * @param backendOrigin the backend origin to use for the handlers.\n * @param serviceSpecificEndpointResponseStatus the status code to use for the service-specific endpoint. The asynchronous job endpoint will always return 200.\n */\nexport function generateAsyncJobHandlers<\n TRequestBody = unknown,\n TResponseBody extends DefaultBodyType | ErrorResponse =\n | DefaultBodyType\n | ErrorResponse,\n>(\n requestPath: string,\n responsePath: (tokenParam: string) => string,\n responseBody: TResponseBody | ((requestBody: TRequestBody) => TResponseBody),\n backendOrigin = getEndpoint(BackendDestinationEnum.REPO_ENDPOINT),\n serviceSpecificEndpointResponseStatus = 201,\n) {\n return [\n // Handler for the asynchronous job request endpoint.\n http.post(`${backendOrigin}${requestPath}`, async ({ request }) => {\n const createdJob = mockAsynchronousJobService.create({\n request: await request.json(),\n response: responseBody,\n })\n\n const asyncJobResponse: AsyncJobId = {\n token: createdJob.id,\n }\n\n return HttpResponse.json(asyncJobResponse, { status: 201 })\n }),\n\n // Generic async job response handler. Since this implementation is the same for all services and references the global map, it's fine if this is overridden.\n http.get(\n `${backendOrigin}${ASYNCHRONOUS_JOB_TOKEN(':id')}`,\n ({ params }) => {\n const id = params.id as string\n const asyncJobDetails = mockAsynchronousJobService.getOneById(id)\n if (!id || !asyncJobDetails) {\n return HttpResponse.json(\n { message: 'The mocked asynchronous job was not found' },\n { status: 404 },\n )\n }\n const { request, response } = asyncJobDetails as {\n request: TRequestBody\n response: TResponseBody\n }\n const responseObject: TResponseBody =\n typeof response === 'function' ? response(request) : response\n\n const jobState: AsynchJobState =\n serviceSpecificEndpointResponseStatus < 400 ? 'COMPLETE' : 'FAILED'\n\n return HttpResponse.json<\n AsynchronousJobStatus<TRequestBody, TResponseBody>\n >(\n {\n jobState,\n jobCanceling: false,\n requestBody: request,\n etag: '00000000-0000-0000-0000-000000000000',\n jobId: id,\n responseBody: responseObject,\n startedByUserId: 0,\n startedOn: '',\n changedOn: '',\n progressMessage: '',\n progressCurrent: 100,\n progressTotal: 100,\n exception: '',\n errorMessage: '',\n errorDetails: '',\n runtimeMS: 100,\n },\n {\n // This endpoint returns a successful status code regardless of the job status\n status: 200,\n },\n )\n },\n ),\n\n // Service-specific response endpoint\n http.get<{ asyncJobToken: string }, TResponseBody>(\n `${backendOrigin}${responsePath(':asyncJobToken')}`,\n ({ params }) => {\n const asyncJobToken = params.asyncJobToken\n const asyncJobDetails =\n mockAsynchronousJobService.getOneById(asyncJobToken)\n if (!asyncJobToken || !asyncJobDetails) {\n return HttpResponse.json(\n { message: 'The mocked asynchronous job was not found' },\n { status: 404 },\n )\n }\n\n const { request, response } = asyncJobDetails as {\n request: TRequestBody\n response: TResponseBody\n }\n const responseObject: TResponseBody =\n typeof response === 'function' ? response(request) : response\n\n return HttpResponse.json(responseObject, {\n status: serviceSpecificEndpointResponseStatus,\n })\n },\n ),\n ]\n}\n"],"mappings":";;;;;AAoBA,IAAM,IAA6B,IAAI,EAGrC;CACA,SAAS;CACT,gBAAgB;CACjB,CAAC;AAaF,SAAgB,EAMd,GACA,GACA,GACA,IAAgB,EAAY,EAAuB,cAAc,EACjE,IAAwC,KACxC;AACA,QAAO;EAEL,EAAK,KAAK,GAAG,IAAgB,KAAe,OAAO,EAAE,iBAAc;GAMjE,IAAM,IAA+B,EACnC,OANiB,EAA2B,OAAO;IACnD,SAAS,MAAM,EAAQ,MAAM;IAC7B,UAAU;IACX,CAGQ,CAAW,IACnB;AAED,UAAO,EAAa,KAAK,GAAkB,EAAE,QAAQ,KAAK,CAAC;IAC3D;EAGF,EAAK,IACH,GAAG,IAAgB,EAAuB,MAAM,KAC/C,EAAE,gBAAa;GACd,IAAM,IAAK,EAAO,IACZ,IAAkB,EAA2B,WAAW,EAAG;AACjE,OAAI,CAAC,KAAM,CAAC,EACV,QAAO,EAAa,KAClB,EAAE,SAAS,6CAA6C,EACxD,EAAE,QAAQ,KAAK,CAChB;GAEH,IAAM,EAAE,YAAS,gBAAa,GAIxB,IACJ,OAAO,KAAa,aAAa,EAAS,EAAQ,GAAG,GAEjD,IACJ,IAAwC,MAAM,aAAa;AAE7D,UAAO,EAAa,KAGlB;IACE;IACA,cAAc;IACd,aAAa;IACb,MAAM;IACN,OAAO;IACP,cAAc;IACd,iBAAiB;IACjB,WAAW;IACX,WAAW;IACX,iBAAiB;IACjB,iBAAiB;IACjB,eAAe;IACf,WAAW;IACX,cAAc;IACd,cAAc;IACd,WAAW;IACZ,EACD,EAEE,QAAQ,KACT,CACF;IAEJ;EAGD,EAAK,IACH,GAAG,IAAgB,EAAa,iBAAiB,KAChD,EAAE,gBAAa;GACd,IAAM,IAAgB,EAAO,eACvB,IACJ,EAA2B,WAAW,EAAc;AACtD,OAAI,CAAC,KAAiB,CAAC,EACrB,QAAO,EAAa,KAClB,EAAE,SAAS,6CAA6C,EACxD,EAAE,QAAQ,KAAK,CAChB;GAGH,IAAM,EAAE,YAAS,gBAAa,GAIxB,IACJ,OAAO,KAAa,aAAa,EAAS,EAAQ,GAAG;AAEvD,UAAO,EAAa,KAAK,GAAgB,EACvC,QAAQ,GACT,CAAC;IAEL;EACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"challengeHandlers.js","names":[],"sources":["../../../../src/mocks/msw/handlers/challengeHandlers.ts"],"sourcesContent":["import {\n Challenge,\n ChallengeTeam,\n ChallengeTeamPagedResults,\n CreateChallengeTeamRequest,\n PaginatedIds,\n} from '@sage-bionetworks/synapse-types'\nimport { http, HttpResponse } from 'msw'\nimport {\n MOCK_CHALLENGE_ID,\n mockRegisteredChallengeTeams,\n} from '../../challenge/mockChallenge'\nimport { MOCK_CHALLENGE_PARTICIPANT_TEAM_ID } from '../../team/mockTeam'\nimport { SynapseApiResponse } from '../handlers'\nimport BasicMockedCrudService from '../util/BasicMockedCrudService'\n\nconst registeredChallengeTeamService = new BasicMockedCrudService<\n ChallengeTeam,\n 'id'\n>({\n initialData: mockRegisteredChallengeTeams,\n idField: 'id',\n autoGenerateId: true,\n})\n\nexport function getChallengeHandler(backendOrigin: string) {\n return http.get(\n `${backendOrigin}/repo/v1/entity/:id/challenge`,\n ({ params }) => {\n const response: SynapseApiResponse<Challenge> = {\n id: MOCK_CHALLENGE_ID,\n etag: 'f5e9df54-360b-4ede-9a17-f7f5680c8dd4',\n projectId: params.id as string,\n participantTeamId: String(MOCK_CHALLENGE_PARTICIPANT_TEAM_ID),\n }\n return HttpResponse.json(response, { status: 200 })\n },\n )\n}\n\nexport function getRegisteredChallengeTeamsHandler(backendOrigin: string) {\n return http.get(\n `${backendOrigin}/repo/v1/challenge/:challengeId/challengeTeam`,\n () => {\n const results = registeredChallengeTeamService.getAll()\n const response: SynapseApiResponse<ChallengeTeamPagedResults> = {\n results: results,\n totalNumberOfResults: results.length,\n }\n return HttpResponse.json(response, { status: 200 })\n },\n )\n}\n\nexport function getRegisterTeamForChallengeHandler(backendOrigin: string) {\n return http.post<never, CreateChallengeTeamRequest>(\n `${backendOrigin}/repo/v1/challenge/:challengeId/challengeTeam`,\n async ({ request }) => {\n const requestBody = await request.json()\n const created = registeredChallengeTeamService.create({\n ...requestBody,\n etag: 'abcdef0987654321',\n })\n return HttpResponse.json(created, { status: 200 })\n },\n )\n}\n\nexport function getSubmissionTeamsHandler(backendOrigin: string) {\n return http.get(\n `${backendOrigin}/repo/v1/challenge/:challengeId/submissionTeams`,\n () => {\n const response: SynapseApiResponse<PaginatedIds> = {\n results: [],\n totalNumberOfResults: 0,\n }\n return HttpResponse.json(response, { status: 200 })\n },\n )\n}\n\nexport default function getAllChallengeHandlers(backendOrigin: string) {\n return [\n getChallengeHandler(backendOrigin),\n getSubmissionTeamsHandler(backendOrigin),\n getRegisterTeamForChallengeHandler(backendOrigin),\n getRegisteredChallengeTeamsHandler(backendOrigin),\n ]\n}\n"],"mappings":";;;;;AAgBA,IAAM,IAAiC,IAAI,EAGzC;CACA,aAAa;CACb,SAAS;CACT,gBAAgB;CACjB,CAAC;AAEF,SAAgB,EAAoB,GAAuB;AACzD,QAAO,EAAK,IACV,GAAG,EAAc,iCAChB,EAAE,gBAAa;EACd,IAAM,IAA0C;GAC9C,IAAI;GACJ,MAAM;GACN,WAAW,EAAO;GAClB,mBAAmB,OAAO,EAAmC;GAC9D;AACD,SAAO,EAAa,KAAK,GAAU,EAAE,QAAQ,KAAK,CAAC;GAEtD;;AAGH,SAAgB,EAAmC,GAAuB;AACxE,QAAO,EAAK,IACV,GAAG,EAAc,sDACX;EACJ,IAAM,IAAU,EAA+B,QAAQ,EACjD,IAA0D;GACrD;GACT,sBAAsB,EAAQ;GAC/B;AACD,SAAO,EAAa,KAAK,GAAU,EAAE,QAAQ,KAAK,CAAC;GAEtD;;AAGH,SAAgB,EAAmC,GAAuB;AACxE,QAAO,EAAK,KACV,GAAG,EAAc,gDACjB,OAAO,EAAE,iBAAc;EACrB,IAAM,IAAc,MAAM,EAAQ,MAAM,EAClC,IAAU,EAA+B,OAAO;GACpD,GAAG;GACH,MAAM;GACP,CAAC;AACF,SAAO,EAAa,KAAK,GAAS,EAAE,QAAQ,KAAK,CAAC;GAErD;;AAGH,SAAgB,EAA0B,GAAuB;AAC/D,QAAO,EAAK,IACV,GAAG,EAAc,wDAMR,EAAa,KAJ+B;EACjD,SAAS,EAAE;EACX,sBAAsB;EACvB,EACkC,EAAE,QAAQ,KAAK,CAAC,CAEtD;;AAGH,SAAwB,EAAwB,GAAuB;AACrE,QAAO;EACL,EAAoB,EAAc;EAClC,EAA0B,EAAc;EACxC,EAAmC,EAAc;EACjD,EAAmC,EAAc;EAClD"}
1
+ {"version":3,"file":"challengeHandlers.js","names":[],"sources":["../../../../src/mocks/msw/handlers/challengeHandlers.ts"],"sourcesContent":["import {\n Challenge,\n ChallengeTeam,\n ChallengeTeamPagedResults,\n CreateChallengeTeamRequest,\n PaginatedIds,\n} from '@sage-bionetworks/synapse-types'\nimport { http, HttpResponse } from 'msw'\nimport {\n MOCK_CHALLENGE_ID,\n mockRegisteredChallengeTeams,\n} from '../../challenge/mockChallenge'\nimport { MOCK_CHALLENGE_PARTICIPANT_TEAM_ID } from '../../team/mockTeam'\nimport { SynapseApiResponse } from '../handlers'\nimport BasicMockedCrudService from '../util/BasicMockedCrudService'\n\nconst registeredChallengeTeamService = new BasicMockedCrudService<\n ChallengeTeam,\n 'id'\n>({\n initialData: mockRegisteredChallengeTeams,\n idField: 'id',\n autoGenerateId: true,\n})\n\nexport function getChallengeHandler(backendOrigin: string) {\n return http.get(\n `${backendOrigin}/repo/v1/entity/:id/challenge`,\n ({ params }) => {\n const response: SynapseApiResponse<Challenge> = {\n id: MOCK_CHALLENGE_ID,\n etag: 'f5e9df54-360b-4ede-9a17-f7f5680c8dd4',\n projectId: params.id as string,\n participantTeamId: String(MOCK_CHALLENGE_PARTICIPANT_TEAM_ID),\n }\n return HttpResponse.json(response, { status: 200 })\n },\n )\n}\n\nexport function getRegisteredChallengeTeamsHandler(backendOrigin: string) {\n return http.get(\n `${backendOrigin}/repo/v1/challenge/:challengeId/challengeTeam`,\n () => {\n const results = registeredChallengeTeamService.getAll()\n const response: SynapseApiResponse<ChallengeTeamPagedResults> = {\n results: results,\n totalNumberOfResults: results.length,\n }\n return HttpResponse.json(response, { status: 200 })\n },\n )\n}\n\nexport function getRegisterTeamForChallengeHandler(backendOrigin: string) {\n return http.post<never, CreateChallengeTeamRequest>(\n `${backendOrigin}/repo/v1/challenge/:challengeId/challengeTeam`,\n async ({ request }) => {\n const requestBody = await request.json()\n const created = registeredChallengeTeamService.create({\n ...requestBody,\n etag: 'abcdef0987654321',\n })\n return HttpResponse.json(created, { status: 200 })\n },\n )\n}\n\nexport function getSubmissionTeamsHandler(backendOrigin: string) {\n return http.get(\n `${backendOrigin}/repo/v1/challenge/:challengeId/submissionTeams`,\n () => {\n const response: SynapseApiResponse<PaginatedIds> = {\n results: [],\n totalNumberOfResults: 0,\n }\n return HttpResponse.json(response, { status: 200 })\n },\n )\n}\n\nexport default function getAllChallengeHandlers(backendOrigin: string) {\n return [\n getChallengeHandler(backendOrigin),\n getSubmissionTeamsHandler(backendOrigin),\n getRegisterTeamForChallengeHandler(backendOrigin),\n getRegisteredChallengeTeamsHandler(backendOrigin),\n ]\n}\n"],"mappings":";;;;;AAgBA,IAAM,IAAiC,IAAI,EAGzC;CACA,aAAa;CACb,SAAS;CACT,gBAAgB;CACjB,CAAC;AAEF,SAAgB,EAAoB,GAAuB;AACzD,QAAO,EAAK,IACV,GAAG,EAAc,iCAChB,EAAE,gBAAa;EACd,IAAM,IAA0C;GAC9C,IAAI;GACJ,MAAM;GACN,WAAW,EAAO;GAClB,mBAAmB,OAAO,EAAmC;GAC9D;AACD,SAAO,EAAa,KAAK,GAAU,EAAE,QAAQ,KAAK,CAAC;GAEtD;;AAGH,SAAgB,EAAmC,GAAuB;AACxE,QAAO,EAAK,IACV,GAAG,EAAc,sDACX;EACJ,IAAM,IAAU,EAA+B,QAAQ,EACjD,IAA0D;GACrD;GACT,sBAAsB,EAAQ;GAC/B;AACD,SAAO,EAAa,KAAK,GAAU,EAAE,QAAQ,KAAK,CAAC;GAEtD;;AAGH,SAAgB,EAAmC,GAAuB;AACxE,QAAO,EAAK,KACV,GAAG,EAAc,gDACjB,OAAO,EAAE,iBAAc;EACrB,IAAM,IAAc,MAAM,EAAQ,MAAM,EAClC,IAAU,EAA+B,OAAO;GACpD,GAAG;GACH,MAAM;GACP,CAAC;AACF,SAAO,EAAa,KAAK,GAAS,EAAE,QAAQ,KAAK,CAAC;GAErD;;AAGH,SAAgB,EAA0B,GAAuB;AAC/D,QAAO,EAAK,IACV,GAAG,EAAc,wDAMR,EAAa,KAAK;EAHvB,SAAS,EAAE;EACX,sBAAsB;EAEC,EAAU,EAAE,QAAQ,KAAK,CAAC,CAEtD;;AAGH,SAAwB,EAAwB,GAAuB;AACrE,QAAO;EACL,EAAoB,EAAc;EAClC,EAA0B,EAAc;EACxC,EAAmC,EAAc;EACjD,EAAmC,EAAc;EAClD"}
@@ -1 +1 @@
1
- {"version":3,"file":"changePasswordHandlers.js","names":[],"sources":["../../../../src/mocks/msw/handlers/changePasswordHandlers.ts"],"sourcesContent":["import { CHANGE_PASSWORD } from '@/utils/APIConstants'\nimport {\n ChangePasswordInterface,\n ErrorResponseCode,\n TwoFactorAuthErrorResponse,\n} from '@sage-bionetworks/synapse-types'\nimport { http, HttpResponse } from 'msw'\n\nexport function getSuccessfulChangePasswordHandler(backendOrigin: string) {\n return http.post(backendOrigin + CHANGE_PASSWORD, () => {\n return new Response(null, { status: 204 })\n })\n}\n\nexport function getBadRequestChangePasswordHandler(\n backendOrigin: string,\n message: string,\n) {\n return http.post(backendOrigin + CHANGE_PASSWORD, () => {\n return HttpResponse.json(\n {\n concreteType: 'org.sagebionetworks.repo.model.ErrorResponse',\n reason: message,\n },\n { status: 401 },\n )\n })\n}\n\nexport function getRequires2FAChangePasswordHandler(\n backendOrigin: string,\n userId: number,\n twoFaToken: string,\n) {\n return http.post<never, ChangePasswordInterface>(\n backendOrigin + CHANGE_PASSWORD,\n async ({ request }) => {\n const requestBody = await request.json()\n if ('twoFaToken' in requestBody) {\n // If a 2FA token is provided, accept the request.\n return new Response(null, { status: 204 })\n }\n\n // Otherwise, reject it with a 2FA challenge.\n const response: TwoFactorAuthErrorResponse = {\n concreteType:\n 'org.sagebionetworks.repo.model.auth.TwoFactorAuthErrorResponse',\n reason: 'Two factor authentication required.',\n errorCode: ErrorResponseCode.TWO_FA_REQUIRED,\n userId: userId,\n twoFaToken: twoFaToken,\n }\n\n return HttpResponse.json(response, { status: 401 })\n },\n )\n}\n"],"mappings":";;;;AAQA,SAAgB,EAAmC,GAAuB;AACxE,QAAO,EAAK,KAAK,IAAgB,SACxB,IAAI,SAAS,MAAM,EAAE,QAAQ,KAAK,CAAC,CAC1C;;AAGJ,SAAgB,EACd,GACA,GACA;AACA,QAAO,EAAK,KAAK,IAAgB,SACxB,EAAa,KAClB;EACE,cAAc;EACd,QAAQ;EACT,EACD,EAAE,QAAQ,KAAK,CAChB,CACD;;AAGJ,SAAgB,EACd,GACA,GACA,GACA;AACA,QAAO,EAAK,KACV,IAAgB,GAChB,OAAO,EAAE,iBAAc;AAErB,MAAI,gBADgB,MAAM,EAAQ,MAAM,CAGtC,QAAO,IAAI,SAAS,MAAM,EAAE,QAAQ,KAAK,CAAC;EAI5C,IAAM,IAAuC;GAC3C,cACE;GACF,QAAQ;GACR,WAAW,EAAkB;GACrB;GACI;GACb;AAED,SAAO,EAAa,KAAK,GAAU,EAAE,QAAQ,KAAK,CAAC;GAEtD"}
1
+ {"version":3,"file":"changePasswordHandlers.js","names":[],"sources":["../../../../src/mocks/msw/handlers/changePasswordHandlers.ts"],"sourcesContent":["import { CHANGE_PASSWORD } from '@/utils/APIConstants'\nimport {\n ChangePasswordInterface,\n ErrorResponseCode,\n TwoFactorAuthErrorResponse,\n} from '@sage-bionetworks/synapse-types'\nimport { http, HttpResponse } from 'msw'\n\nexport function getSuccessfulChangePasswordHandler(backendOrigin: string) {\n return http.post(backendOrigin + CHANGE_PASSWORD, () => {\n return new Response(null, { status: 204 })\n })\n}\n\nexport function getBadRequestChangePasswordHandler(\n backendOrigin: string,\n message: string,\n) {\n return http.post(backendOrigin + CHANGE_PASSWORD, () => {\n return HttpResponse.json(\n {\n concreteType: 'org.sagebionetworks.repo.model.ErrorResponse',\n reason: message,\n },\n { status: 401 },\n )\n })\n}\n\nexport function getRequires2FAChangePasswordHandler(\n backendOrigin: string,\n userId: number,\n twoFaToken: string,\n) {\n return http.post<never, ChangePasswordInterface>(\n backendOrigin + CHANGE_PASSWORD,\n async ({ request }) => {\n const requestBody = await request.json()\n if ('twoFaToken' in requestBody) {\n // If a 2FA token is provided, accept the request.\n return new Response(null, { status: 204 })\n }\n\n // Otherwise, reject it with a 2FA challenge.\n const response: TwoFactorAuthErrorResponse = {\n concreteType:\n 'org.sagebionetworks.repo.model.auth.TwoFactorAuthErrorResponse',\n reason: 'Two factor authentication required.',\n errorCode: ErrorResponseCode.TWO_FA_REQUIRED,\n userId: userId,\n twoFaToken: twoFaToken,\n }\n\n return HttpResponse.json(response, { status: 401 })\n },\n )\n}\n"],"mappings":";;;;AAQA,SAAgB,EAAmC,GAAuB;AACxE,QAAO,EAAK,KAAK,IAAgB,SACxB,IAAI,SAAS,MAAM,EAAE,QAAQ,KAAK,CAAC,CAC1C;;AAGJ,SAAgB,EACd,GACA,GACA;AACA,QAAO,EAAK,KAAK,IAAgB,SACxB,EAAa,KAClB;EACE,cAAc;EACd,QAAQ;EACT,EACD,EAAE,QAAQ,KAAK,CAChB,CACD;;AAGJ,SAAgB,EACd,GACA,GACA,GACA;AACA,QAAO,EAAK,KACV,IAAgB,GAChB,OAAO,EAAE,iBAAc;AAErB,MAAI,gBAAgB,MADM,EAAQ,MAAM,CAGtC,QAAO,IAAI,SAAS,MAAM,EAAE,QAAQ,KAAK,CAAC;EAI5C,IAAM,IAAuC;GAC3C,cACE;GACF,QAAQ;GACR,WAAW,EAAkB;GACrB;GACI;GACb;AAED,SAAO,EAAa,KAAK,GAAU,EAAE,QAAQ,KAAK,CAAC;GAEtD"}
@@ -1 +1 @@
1
- {"version":3,"file":"discussionHandlers.js","names":[],"sources":["../../../../src/mocks/msw/handlers/discussionHandlers.ts"],"sourcesContent":["import { FORUM, FORUM_THREAD, THREAD } from '@/utils/APIConstants'\nimport {\n CreateDiscussionThread,\n DiscussionFilter,\n DiscussionThreadBundle,\n Forum,\n PaginatedIds,\n PaginatedResults,\n} from '@sage-bionetworks/synapse-types'\nimport { http, HttpResponse } from 'msw'\nimport {\n mockDiscussionThreadBundles,\n mockForums,\n} from '../../discussion/mock_discussion'\nimport mockProject from '../../entity/mockProject'\nimport { MOCK_USER_ID } from '../../user/mock_user_profile'\nimport { SynapseApiResponse } from '../handlers'\nimport BasicMockedCrudService from '../util/BasicMockedCrudService'\n\nconst forumService = new BasicMockedCrudService<Forum, 'id'>({\n initialData: mockForums,\n idField: 'id',\n autoGenerateId: true,\n})\n\nconst threadService = new BasicMockedCrudService<DiscussionThreadBundle, 'id'>({\n initialData: mockDiscussionThreadBundles,\n idField: 'id',\n autoGenerateId: true,\n})\n\nfunction getAllThreadsMatchingForum(forumId: string, filter: DiscussionFilter) {\n return threadService\n .getMany(thread => thread.forumId === forumId)\n .filter(thread => {\n switch (filter) {\n case DiscussionFilter.NO_FILTER:\n return true\n case DiscussionFilter.DELETED_ONLY:\n return thread.isDeleted\n case DiscussionFilter.EXCLUDE_DELETED:\n return !thread.isDeleted\n }\n })\n}\n\nexport function getDiscussionHandlers(backendOrigin: string) {\n return [\n http.get(`${backendOrigin}${FORUM}/:id`, ({ params }) => {\n let status = 404\n let resp: SynapseApiResponse<Forum> = {\n concreteType: 'org.sagebionetworks.repo.model.ErrorResponse',\n reason: `MSW could not find a mock forum object with ID ${params.id}`,\n }\n\n const match = forumService.getOneById(params.id as string)\n if (match) {\n status = 200\n resp = match\n }\n\n return HttpResponse.json(resp, { status: status })\n }),\n\n http.get(`${backendOrigin}${THREAD}/:id`, ({ params }) => {\n let status = 404\n let resp: SynapseApiResponse<Forum> = {\n concreteType: 'org.sagebionetworks.repo.model.ErrorResponse',\n reason: `MSW could not find a mock discussion thread bundle object with ID ${params.id}`,\n }\n if (params.id === 'messageUrl') {\n // This is a different endpoint\n resp = {\n concreteType: 'org.sagebionetworks.repo.model.ErrorResponse',\n reason: 'GET /thread/messageUrl is not yet implemented',\n }\n }\n\n const match = threadService.getOneById(params.id as string)\n if (match) {\n status = 200\n resp = match\n }\n\n return HttpResponse.json(resp, { status: status })\n }),\n\n http.post<never, CreateDiscussionThread>(\n `${backendOrigin}${THREAD}`,\n async ({ request }) => {\n const requestBody = await request.json()\n\n const newDiscussionThreadBundle = threadService.create({\n forumId: requestBody.forumId,\n projectId: mockProject.id,\n title: requestBody.title,\n createdOn: new Date().toISOString(),\n createdBy: String(MOCK_USER_ID),\n modifiedOn: new Date().toISOString(),\n etag: 'etag',\n messageKey: 'todo key',\n numberOfViews: 0,\n numberOfReplies: 0,\n lastActivity: new Date().toISOString(),\n activeAuthors: [String(MOCK_USER_ID)],\n isEdited: false,\n isDeleted: false,\n isPinned: false,\n })\n\n return HttpResponse.json(newDiscussionThreadBundle, { status: 201 })\n },\n ),\n\n http.get(\n `${backendOrigin}${FORUM_THREAD(':forumId')}`,\n ({ params, request }) => {\n const offsetParam = new URL(request.url).searchParams.get('offset')\n const offset = offsetParam ? parseInt(offsetParam) : 0\n const limitParam = new URL(request.url).searchParams.get('limit')\n const limit = limitParam ? parseInt(limitParam) : 10\n const filter: DiscussionFilter =\n (params.filter as DiscussionFilter) ??\n DiscussionFilter.EXCLUDE_DELETED\n\n const matchingThreads = getAllThreadsMatchingForum(\n params.forumId as string,\n filter,\n )\n\n const response: SynapseApiResponse<\n PaginatedResults<DiscussionThreadBundle>\n > = {\n results: matchingThreads.slice(offset, offset + limit),\n totalNumberOfResults: matchingThreads.length,\n }\n return HttpResponse.json(response, { status: 200 })\n },\n ),\n http.get(`${backendOrigin}${FORUM}/:id/moderators`, () => {\n const resp: PaginatedIds = {\n results: [String(MOCK_USER_ID)],\n totalNumberOfResults: 1,\n }\n return HttpResponse.json(resp, { status: 200 })\n }),\n ]\n}\n"],"mappings":";;;;;;;;AAmBA,IAAM,IAAe,IAAI,EAAoC;CAC3D,aAAa;CACb,SAAS;CACT,gBAAgB;CACjB,CAAC,EAEI,IAAgB,IAAI,EAAqD;CAC7E,aAAa;CACb,SAAS;CACT,gBAAgB;CACjB,CAAC;AAEF,SAAS,EAA2B,GAAiB,GAA0B;AAC7E,QAAO,EACJ,SAAQ,MAAU,EAAO,YAAY,EAAQ,CAC7C,QAAO,MAAU;AAChB,UAAQ,GAAR;GACE,KAAK,EAAiB,UACpB,QAAO;GACT,KAAK,EAAiB,aACpB,QAAO,EAAO;GAChB,KAAK,EAAiB,gBACpB,QAAO,CAAC,EAAO;;GAEnB;;AAGN,SAAgB,EAAsB,GAAuB;AAC3D,QAAO;EACL,EAAK,IAAI,GAAG,IAAgB,EAAM,QAAQ,EAAE,gBAAa;GACvD,IAAI,IAAS,KACT,IAAkC;IACpC,cAAc;IACd,QAAQ,kDAAkD,EAAO;IAClE,EAEK,IAAQ,EAAa,WAAW,EAAO,GAAa;AAM1D,UALI,MACF,IAAS,KACT,IAAO,IAGF,EAAa,KAAK,GAAM,EAAU,WAAQ,CAAC;IAClD;EAEF,EAAK,IAAI,GAAG,IAAgB,EAAO,QAAQ,EAAE,gBAAa;GACxD,IAAI,IAAS,KACT,IAAkC;IACpC,cAAc;IACd,QAAQ,qEAAqE,EAAO;IACrF;AACD,GAAI,EAAO,OAAO,iBAEhB,IAAO;IACL,cAAc;IACd,QAAQ;IACT;GAGH,IAAM,IAAQ,EAAc,WAAW,EAAO,GAAa;AAM3D,UALI,MACF,IAAS,KACT,IAAO,IAGF,EAAa,KAAK,GAAM,EAAU,WAAQ,CAAC;IAClD;EAEF,EAAK,KACH,GAAG,IAAgB,KACnB,OAAO,EAAE,iBAAc;GACrB,IAAM,IAAc,MAAM,EAAQ,MAAM,EAElC,IAA4B,EAAc,OAAO;IACrD,SAAS,EAAY;IACrB,WAAW,EAAY;IACvB,OAAO,EAAY;IACnB,4BAAW,IAAI,MAAM,EAAC,aAAa;IACnC,WAAW;IACX,6BAAY,IAAI,MAAM,EAAC,aAAa;IACpC,MAAM;IACN,YAAY;IACZ,eAAe;IACf,iBAAiB;IACjB,+BAAc,IAAI,MAAM,EAAC,aAAa;IACtC,eAAe,CAAC,MAAqB;IACrC,UAAU;IACV,WAAW;IACX,UAAU;IACX,CAAC;AAEF,UAAO,EAAa,KAAK,GAA2B,EAAE,QAAQ,KAAK,CAAC;IAEvE;EAED,EAAK,IACH,GAAG,IAAgB,EAAa,WAAW,KAC1C,EAAE,WAAQ,iBAAc;GACvB,IAAM,IAAc,IAAI,IAAI,EAAQ,IAAI,CAAC,aAAa,IAAI,SAAS,EAC7D,IAAS,IAAc,SAAS,EAAY,GAAG,GAC/C,IAAa,IAAI,IAAI,EAAQ,IAAI,CAAC,aAAa,IAAI,QAAQ,EAC3D,IAAQ,IAAa,SAAS,EAAW,GAAG,IAC5C,IACH,EAAO,UACR,EAAiB,iBAEb,IAAkB,EACtB,EAAO,SACP,EACD,EAEK,IAEF;IACF,SAAS,EAAgB,MAAM,GAAQ,IAAS,EAAM;IACtD,sBAAsB,EAAgB;IACvC;AACD,UAAO,EAAa,KAAK,GAAU,EAAE,QAAQ,KAAK,CAAC;IAEtD;EACD,EAAK,IAAI,GAAG,IAAgB,EAAM,wBAKzB,EAAa,KAJO;GACzB,SAAS,CAAC,MAAqB;GAC/B,sBAAsB;GACvB,EAC8B,EAAE,QAAQ,KAAK,CAAC,CAC/C;EACH"}
1
+ {"version":3,"file":"discussionHandlers.js","names":[],"sources":["../../../../src/mocks/msw/handlers/discussionHandlers.ts"],"sourcesContent":["import { FORUM, FORUM_THREAD, THREAD } from '@/utils/APIConstants'\nimport {\n CreateDiscussionThread,\n DiscussionFilter,\n DiscussionThreadBundle,\n Forum,\n PaginatedIds,\n PaginatedResults,\n} from '@sage-bionetworks/synapse-types'\nimport { http, HttpResponse } from 'msw'\nimport {\n mockDiscussionThreadBundles,\n mockForums,\n} from '../../discussion/mock_discussion'\nimport mockProject from '../../entity/mockProject'\nimport { MOCK_USER_ID } from '../../user/mock_user_profile'\nimport { SynapseApiResponse } from '../handlers'\nimport BasicMockedCrudService from '../util/BasicMockedCrudService'\n\nconst forumService = new BasicMockedCrudService<Forum, 'id'>({\n initialData: mockForums,\n idField: 'id',\n autoGenerateId: true,\n})\n\nconst threadService = new BasicMockedCrudService<DiscussionThreadBundle, 'id'>({\n initialData: mockDiscussionThreadBundles,\n idField: 'id',\n autoGenerateId: true,\n})\n\nfunction getAllThreadsMatchingForum(forumId: string, filter: DiscussionFilter) {\n return threadService\n .getMany(thread => thread.forumId === forumId)\n .filter(thread => {\n switch (filter) {\n case DiscussionFilter.NO_FILTER:\n return true\n case DiscussionFilter.DELETED_ONLY:\n return thread.isDeleted\n case DiscussionFilter.EXCLUDE_DELETED:\n return !thread.isDeleted\n }\n })\n}\n\nexport function getDiscussionHandlers(backendOrigin: string) {\n return [\n http.get(`${backendOrigin}${FORUM}/:id`, ({ params }) => {\n let status = 404\n let resp: SynapseApiResponse<Forum> = {\n concreteType: 'org.sagebionetworks.repo.model.ErrorResponse',\n reason: `MSW could not find a mock forum object with ID ${params.id}`,\n }\n\n const match = forumService.getOneById(params.id as string)\n if (match) {\n status = 200\n resp = match\n }\n\n return HttpResponse.json(resp, { status: status })\n }),\n\n http.get(`${backendOrigin}${THREAD}/:id`, ({ params }) => {\n let status = 404\n let resp: SynapseApiResponse<Forum> = {\n concreteType: 'org.sagebionetworks.repo.model.ErrorResponse',\n reason: `MSW could not find a mock discussion thread bundle object with ID ${params.id}`,\n }\n if (params.id === 'messageUrl') {\n // This is a different endpoint\n resp = {\n concreteType: 'org.sagebionetworks.repo.model.ErrorResponse',\n reason: 'GET /thread/messageUrl is not yet implemented',\n }\n }\n\n const match = threadService.getOneById(params.id as string)\n if (match) {\n status = 200\n resp = match\n }\n\n return HttpResponse.json(resp, { status: status })\n }),\n\n http.post<never, CreateDiscussionThread>(\n `${backendOrigin}${THREAD}`,\n async ({ request }) => {\n const requestBody = await request.json()\n\n const newDiscussionThreadBundle = threadService.create({\n forumId: requestBody.forumId,\n projectId: mockProject.id,\n title: requestBody.title,\n createdOn: new Date().toISOString(),\n createdBy: String(MOCK_USER_ID),\n modifiedOn: new Date().toISOString(),\n etag: 'etag',\n messageKey: 'todo key',\n numberOfViews: 0,\n numberOfReplies: 0,\n lastActivity: new Date().toISOString(),\n activeAuthors: [String(MOCK_USER_ID)],\n isEdited: false,\n isDeleted: false,\n isPinned: false,\n })\n\n return HttpResponse.json(newDiscussionThreadBundle, { status: 201 })\n },\n ),\n\n http.get(\n `${backendOrigin}${FORUM_THREAD(':forumId')}`,\n ({ params, request }) => {\n const offsetParam = new URL(request.url).searchParams.get('offset')\n const offset = offsetParam ? parseInt(offsetParam) : 0\n const limitParam = new URL(request.url).searchParams.get('limit')\n const limit = limitParam ? parseInt(limitParam) : 10\n const filter: DiscussionFilter =\n (params.filter as DiscussionFilter) ??\n DiscussionFilter.EXCLUDE_DELETED\n\n const matchingThreads = getAllThreadsMatchingForum(\n params.forumId as string,\n filter,\n )\n\n const response: SynapseApiResponse<\n PaginatedResults<DiscussionThreadBundle>\n > = {\n results: matchingThreads.slice(offset, offset + limit),\n totalNumberOfResults: matchingThreads.length,\n }\n return HttpResponse.json(response, { status: 200 })\n },\n ),\n http.get(`${backendOrigin}${FORUM}/:id/moderators`, () => {\n const resp: PaginatedIds = {\n results: [String(MOCK_USER_ID)],\n totalNumberOfResults: 1,\n }\n return HttpResponse.json(resp, { status: 200 })\n }),\n ]\n}\n"],"mappings":";;;;;;;;AAmBA,IAAM,IAAe,IAAI,EAAoC;CAC3D,aAAa;CACb,SAAS;CACT,gBAAgB;CACjB,CAAC,EAEI,IAAgB,IAAI,EAAqD;CAC7E,aAAa;CACb,SAAS;CACT,gBAAgB;CACjB,CAAC;AAEF,SAAS,EAA2B,GAAiB,GAA0B;AAC7E,QAAO,EACJ,SAAQ,MAAU,EAAO,YAAY,EAAQ,CAC7C,QAAO,MAAU;AAChB,UAAQ,GAAR;GACE,KAAK,EAAiB,UACpB,QAAO;GACT,KAAK,EAAiB,aACpB,QAAO,EAAO;GAChB,KAAK,EAAiB,gBACpB,QAAO,CAAC,EAAO;;GAEnB;;AAGN,SAAgB,EAAsB,GAAuB;AAC3D,QAAO;EACL,EAAK,IAAI,GAAG,IAAgB,EAAM,QAAQ,EAAE,gBAAa;GACvD,IAAI,IAAS,KACT,IAAkC;IACpC,cAAc;IACd,QAAQ,kDAAkD,EAAO;IAClE,EAEK,IAAQ,EAAa,WAAW,EAAO,GAAa;AAM1D,UALI,MACF,IAAS,KACT,IAAO,IAGF,EAAa,KAAK,GAAM,EAAU,WAAQ,CAAC;IAClD;EAEF,EAAK,IAAI,GAAG,IAAgB,EAAO,QAAQ,EAAE,gBAAa;GACxD,IAAI,IAAS,KACT,IAAkC;IACpC,cAAc;IACd,QAAQ,qEAAqE,EAAO;IACrF;AACD,GAAI,EAAO,OAAO,iBAEhB,IAAO;IACL,cAAc;IACd,QAAQ;IACT;GAGH,IAAM,IAAQ,EAAc,WAAW,EAAO,GAAa;AAM3D,UALI,MACF,IAAS,KACT,IAAO,IAGF,EAAa,KAAK,GAAM,EAAU,WAAQ,CAAC;IAClD;EAEF,EAAK,KACH,GAAG,IAAgB,KACnB,OAAO,EAAE,iBAAc;GACrB,IAAM,IAAc,MAAM,EAAQ,MAAM,EAElC,IAA4B,EAAc,OAAO;IACrD,SAAS,EAAY;IACrB,WAAW,EAAY;IACvB,OAAO,EAAY;IACnB,4BAAW,IAAI,MAAM,EAAC,aAAa;IACnC,WAAW;IACX,6BAAY,IAAI,MAAM,EAAC,aAAa;IACpC,MAAM;IACN,YAAY;IACZ,eAAe;IACf,iBAAiB;IACjB,+BAAc,IAAI,MAAM,EAAC,aAAa;IACtC,eAAe,CAAC,MAAqB;IACrC,UAAU;IACV,WAAW;IACX,UAAU;IACX,CAAC;AAEF,UAAO,EAAa,KAAK,GAA2B,EAAE,QAAQ,KAAK,CAAC;IAEvE;EAED,EAAK,IACH,GAAG,IAAgB,EAAa,WAAW,KAC1C,EAAE,WAAQ,iBAAc;GACvB,IAAM,IAAc,IAAI,IAAI,EAAQ,IAAI,CAAC,aAAa,IAAI,SAAS,EAC7D,IAAS,IAAc,SAAS,EAAY,GAAG,GAC/C,IAAa,IAAI,IAAI,EAAQ,IAAI,CAAC,aAAa,IAAI,QAAQ,EAC3D,IAAQ,IAAa,SAAS,EAAW,GAAG,IAC5C,IACH,EAAO,UACR,EAAiB,iBAEb,IAAkB,EACtB,EAAO,SACP,EACD,EAEK,IAEF;IACF,SAAS,EAAgB,MAAM,GAAQ,IAAS,EAAM;IACtD,sBAAsB,EAAgB;IACvC;AACD,UAAO,EAAa,KAAK,GAAU,EAAE,QAAQ,KAAK,CAAC;IAEtD;EACD,EAAK,IAAI,GAAG,IAAgB,EAAM,wBAKzB,EAAa,KAAK;GAHvB,SAAS,CAAC,MAAqB;GAC/B,sBAAsB;GAEC,EAAM,EAAE,QAAQ,KAAK,CAAC,CAC/C;EACH"}
@@ -1 +1 @@
1
- {"version":3,"file":"entityHandlers.js","names":[],"sources":["../../../../src/mocks/msw/handlers/entityHandlers.ts"],"sourcesContent":["import {\n ENTITY,\n ENTITY_BUNDLE_V2,\n ENTITY_HEADERS,\n ENTITY_ID,\n ENTITY_ID_VERSION,\n ENTITY_ID_VERSIONS,\n ENTITY_JSON,\n ENTITY_SCHEMA_BINDING,\n} from '@/utils/APIConstants'\nimport { normalizeSynPrefix } from '@/utils/functions/EntityTypeUtils'\nimport {\n ErrorResponse,\n UploadDestination,\n} from '@sage-bionetworks/synapse-client'\nimport {\n AccessControlList,\n Entity,\n EntityBundle,\n EntityHeader,\n EntityJson,\n EntityPath,\n PaginatedResults,\n ProjectHeaderList,\n Reference,\n VersionableEntity,\n VersionInfo,\n} from '@sage-bionetworks/synapse-types'\nimport { uniqueId } from 'lodash-es'\nimport { http, HttpResponse } from 'msw'\nimport mockEntities, { mockProjectsEntityData } from '../../entity'\nimport { MOCK_INVALID_PROJECT_NAME } from '../../entity/mockEntity'\nimport { MockEntityData } from '../../entity/MockEntityData'\nimport {\n mockSynapseStorageUploadDestination,\n mockUploadDestinations,\n} from '../../mock_upload_destination'\nimport { mockSchemaBinding } from '../../mockSchema'\nimport { SynapseApiResponse } from '../handlers'\n\nfunction getMatchingMockEntities(entityIds: string[]): MockEntityData[] {\n const normalizedPassedIds = entityIds.map(normalizeSynPrefix)\n return mockEntities.filter(entity =>\n normalizedPassedIds.includes(normalizeSynPrefix(entity.id)),\n )\n}\nfunction getMatchingMockEntity(entityId: string): MockEntityData | undefined {\n const matches = getMatchingMockEntities([entityId])\n if (matches.length == 0) {\n return undefined\n }\n return matches[0]\n}\n\nexport function getEntityBundleHandler(\n backendOrigin: string,\n bundle?: Partial<EntityBundle>,\n) {\n return http.post(\n `${backendOrigin}${ENTITY_BUNDLE_V2(':entityId')}`,\n ({ params }) => {\n let status = 404\n let response: SynapseApiResponse<EntityBundle> = {\n concreteType: 'org.sagebionetworks.repo.model.ErrorResponse',\n reason: `Mock Service worker could not find a mock entity bundle with ID ${params.entityId}`,\n }\n if (bundle) {\n response = bundle as EntityBundle\n status = 200\n } else {\n const entityData = getMatchingMockEntity(params.entityId as string)\n if (entityData?.bundle) {\n response = entityData.bundle\n status = 200\n }\n }\n return HttpResponse.json(response, { status })\n },\n )\n}\n\nexport function getEntityJsonHandler(\n backendOrigin: string,\n entityJson?: Partial<EntityJson>,\n) {\n return http.get(\n `${backendOrigin}${ENTITY_JSON(':entityId')}`,\n\n () => {\n const response = entityJson\n return HttpResponse.json(response, { status: 200 })\n },\n )\n}\n\nexport function getVersionedEntityBundleHandler(\n backendOrigin: string,\n bundle?: Partial<EntityBundle>,\n) {\n return http.post(\n `${backendOrigin}${ENTITY_BUNDLE_V2(':entityId', ':versionNumber')}`,\n ({ params }) => {\n const entityId = params.entityId as string\n const versionNumber = parseInt(params.versionNumber as string)\n let status = 404\n let response: SynapseApiResponse<EntityBundle> = {\n concreteType: 'org.sagebionetworks.repo.model.ErrorResponse',\n reason: `Mock Service worker could not find a mock entity bundle with ID ${entityId}`,\n }\n if (bundle) {\n response = bundle as EntityBundle\n status = 200\n } else {\n const entityData = getMatchingMockEntity(entityId)\n if (entityData) {\n const bundle = entityData.bundle\n if (entityData.versions && entityData.versions[versionNumber]) {\n response = {\n ...bundle,\n entity: entityData.versions[versionNumber],\n } as EntityBundle\n } else {\n response = bundle as EntityBundle\n }\n status = 200\n }\n }\n return HttpResponse.json(response, { status })\n },\n )\n}\n\nexport const getEntityHandlers = (backendOrigin: string) => [\n /**\n * Create a new entity\n */\n http.post<never, Entity>(`${backendOrigin}${ENTITY}`, async ({ request }) => {\n let status = 200\n const requestBody = await request.json()\n let response: SynapseApiResponse<Entity> = {\n concreteType: 'org.sagebionetworks.repo.model.ErrorResponse',\n reason: '...',\n }\n if (!requestBody) {\n status = 400\n response = {\n concreteType: 'org.sagebionetworks.repo.model.ErrorResponse',\n reason: `Mock service worker received the following malformed body for PUT ${ENTITY} : ${JSON.stringify(\n requestBody,\n )}`,\n }\n } else {\n if (requestBody.name === MOCK_INVALID_PROJECT_NAME) {\n ;(response as ErrorResponse).reason = 'Invalid project name'\n status = 403\n } else {\n response = { id: uniqueId('syn'), ...requestBody }\n }\n }\n\n return HttpResponse.json(response, { status })\n }),\n\n /**\n * Get entity by ID\n */\n http.get(`${backendOrigin}${ENTITY_ID(':entityId')}`, ({ params }) => {\n let status = 404\n let response: SynapseApiResponse<Entity> = {\n concreteType: 'org.sagebionetworks.repo.model.ErrorResponse',\n reason: `Mock Service worker could not find a mock entity with ID ${params.entityId}`,\n }\n\n const entityData = getMatchingMockEntity(params.entityId as string)\n if (entityData) {\n response = entityData.entity\n status = 200\n }\n return HttpResponse.json(response, { status })\n }),\n\n http.get(\n `${backendOrigin}${ENTITY_ID_VERSIONS(':entityId')}`,\n ({ params }) => {\n let status = 404\n let response: SynapseApiResponse<PaginatedResults<VersionInfo>> = {\n concreteType: 'org.sagebionetworks.repo.model.ErrorResponse',\n reason: `Mock Service worker could not find mock entity versions for ID ${params.entityId}`,\n }\n\n const entityData = getMatchingMockEntity(params.entityId as string)\n if (entityData && entityData.versionInfo) {\n response = { results: entityData.versionInfo }\n status = 200\n }\n return HttpResponse.json(response, { status })\n },\n ),\n\n http.get<{ entityId: string; versionNumber: string }>(\n `${backendOrigin}${ENTITY_ID_VERSION(':entityId', ':versionNumber')}`,\n ({ params }) => {\n let status = 404\n const entityId = params.entityId\n const versionNumber = params.versionNumber.toString()\n const requestedVersionNumber = parseInt(versionNumber)\n\n let response: SynapseApiResponse<VersionableEntity> = {\n concreteType: 'org.sagebionetworks.repo.model.ErrorResponse',\n reason: `Mock Service worker could not find a mock versioned entity with ID ${entityId}.${versionNumber}`,\n }\n\n const entityData = getMatchingMockEntity(params.entityId)\n if (\n entityData &&\n entityData.versions &&\n entityData.versions[requestedVersionNumber]\n ) {\n response = entityData.versions[\n requestedVersionNumber\n ] as VersionableEntity\n status = 200\n }\n return HttpResponse.json(response, { status })\n },\n ),\n\n getEntityBundleHandler(backendOrigin),\n getVersionedEntityBundleHandler(backendOrigin),\n\n http.get(`${backendOrigin}${ENTITY_SCHEMA_BINDING(':entityId')}`, () => {\n return HttpResponse.json(mockSchemaBinding, { status: 200 })\n }),\n http.get(\n `${backendOrigin}${ENTITY_JSON(':entityId')}`,\n\n ({ params }) => {\n let status = 404\n let response: SynapseApiResponse<EntityJson> = {\n concreteType: 'org.sagebionetworks.repo.model.ErrorResponse',\n reason: `Mock Service worker could not find a mock entity bundle with ID ${params.entityId}`,\n }\n const entityData = getMatchingMockEntity(params.entityId as string)\n if (entityData?.json) {\n response = entityData.json\n status = 200\n }\n\n return HttpResponse.json(response, { status })\n },\n ),\n\n http.post<{ entityId: string }, { references: Reference[] }>(\n `${backendOrigin}${ENTITY_HEADERS}`,\n\n async ({ params, request }) => {\n let status = 404\n let response: SynapseApiResponse<PaginatedResults<EntityHeader>> = {\n concreteType: 'org.sagebionetworks.repo.model.ErrorResponse',\n reason: `Mock Service worker could not find a mock entity bundle with ID ${params.entityId}`,\n }\n\n const referenceList = await request.json()\n const entityData: EntityHeader[] = referenceList.references\n .map(ref => {\n const entityHeader = getMatchingMockEntity(ref.targetId)?.entityHeader\n if (entityHeader) {\n return {\n ...entityHeader,\n // ID should match what is passed in (i.e. may or may not have syn prefix)\n id: ref.targetId,\n }\n }\n return undefined\n })\n .filter((header): header is EntityHeader => !!header)\n\n if (entityData) {\n response = { results: entityData }\n status = 200\n }\n\n return HttpResponse.json(response, { status })\n },\n ),\n\n http.get(\n `${backendOrigin}${ENTITY_ID(':entityId')}/path`,\n\n ({ params }) => {\n let status = 404\n let response: SynapseApiResponse<EntityPath> = {\n concreteType: 'org.sagebionetworks.repo.model.ErrorResponse',\n reason: `Mock Service worker could not find a mock entity path using ID ${params.entityId}`,\n }\n const entityData = getMatchingMockEntity(params.entityId as string)\n\n if (entityData && entityData.path) {\n response = entityData.path\n status = 200\n }\n\n return HttpResponse.json(response, { status })\n },\n ),\n\n http.get(`${backendOrigin}/file/v1/entity/:id/uploadDestination`, () => {\n const response: UploadDestination = mockSynapseStorageUploadDestination\n return HttpResponse.json(response, { status: 200 })\n }),\n\n http.get(\n `${backendOrigin}/file/v1/entity/:id/uploadDestination/:storageLocationId`,\n ({ params }) => {\n let status = 404\n let response: SynapseApiResponse<UploadDestination> = {\n concreteType: 'org.sagebionetworks.repo.model.ErrorResponse',\n reason: `Mock Service worker could not find an uploadDestination using storageLocationId ${params.storageLocationId}`,\n }\n const uploadDestination = mockUploadDestinations.find(\n e => Number(params.storageLocationId) === e.storageLocationId,\n )\n\n if (uploadDestination) {\n response = uploadDestination\n status = 200\n }\n\n return HttpResponse.json(response, { status })\n },\n ),\n\n http.get(`${backendOrigin}/repo/v1/projects`, () => {\n const response: ProjectHeaderList = {\n results: mockProjectsEntityData.map(p => ({\n name: p.name,\n id: p.id,\n lastActivity: '2024-01-04T21:11:59.000Z',\n modifiedBy: parseInt(p.entity.modifiedBy!),\n modifiedOn: p.entity.modifiedOn!,\n })),\n }\n return HttpResponse.json(response, { status: 200 })\n }),\n\n http.post<{ entityId: string }, AccessControlList>(\n `${backendOrigin}${ENTITY_ID(':entityId')}/acl`,\n async ({ params, request }) => {\n const entityData = getMatchingMockEntity(params.entityId)\n let status: number\n let response: SynapseApiResponse<AccessControlList>\n if (!entityData) {\n status = 404\n response = {\n concreteType: 'org.sagebionetworks.repo.model.ErrorResponse',\n reason: `Mock Service worker could not find a mock entity bundle with ID ${params.entityId}`,\n }\n } else if (entityData.bundle?.accessControlList) {\n status = 403\n response = {\n concreteType: 'org.sagebionetworks.repo.model.ErrorResponse',\n reason: 'Resource already has an ACL.',\n }\n } else {\n response = await request.json()\n status = 201\n }\n\n return HttpResponse.json(response, { status })\n },\n ),\n\n http.put<{ entityId: string }, AccessControlList>(\n `${backendOrigin}${ENTITY_ID(':entityId')}/acl`,\n async ({ params, request }) => {\n const entityData = getMatchingMockEntity(params.entityId)\n\n let status: number\n let response: SynapseApiResponse<AccessControlList>\n\n if (!entityData) {\n status = 404\n response = {\n concreteType: 'org.sagebionetworks.repo.model.ErrorResponse',\n reason: `Mock Service worker could not find a mock entity bundle with ID ${params.entityId}`,\n }\n } else if (!entityData?.bundle?.accessControlList) {\n response = {\n concreteType: 'org.sagebionetworks.repo.model.ErrorResponse',\n reason:\n 'Cannot update ACL for a resource which inherits its permissions.',\n }\n status = 403\n } else {\n response = await request.json()\n status = 200\n }\n\n return HttpResponse.json(response, { status })\n },\n ),\n\n http.delete(`${backendOrigin}${ENTITY_ID(':entityId')}/acl`, ({ params }) => {\n const entityData = getMatchingMockEntity(params.entityId as string)\n\n let status: number\n let response: SynapseApiResponse<''>\n\n if (!entityData) {\n status = 404\n response = {\n concreteType: 'org.sagebionetworks.repo.model.ErrorResponse',\n reason: `Mock Service worker could not find a mock entity bundle with ID ${params.entityId}`,\n }\n } else if (!entityData?.bundle?.accessControlList) {\n response = {\n concreteType: 'org.sagebionetworks.repo.model.ErrorResponse',\n reason:\n 'Cannot delete ACL for a resource which inherits its permissions.',\n }\n status = 403\n } else {\n response = ''\n status = 200\n }\n\n return HttpResponse.json(response, { status })\n }),\n]\n"],"mappings":"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"}
1
+ {"version":3,"file":"entityHandlers.js","names":[],"sources":["../../../../src/mocks/msw/handlers/entityHandlers.ts"],"sourcesContent":["import {\n ENTITY,\n ENTITY_BUNDLE_V2,\n ENTITY_HEADERS,\n ENTITY_ID,\n ENTITY_ID_VERSION,\n ENTITY_ID_VERSIONS,\n ENTITY_JSON,\n ENTITY_SCHEMA_BINDING,\n} from '@/utils/APIConstants'\nimport { normalizeSynPrefix } from '@/utils/functions/EntityTypeUtils'\nimport {\n ErrorResponse,\n UploadDestination,\n} from '@sage-bionetworks/synapse-client'\nimport {\n AccessControlList,\n Entity,\n EntityBundle,\n EntityHeader,\n EntityJson,\n EntityPath,\n PaginatedResults,\n ProjectHeaderList,\n Reference,\n VersionableEntity,\n VersionInfo,\n} from '@sage-bionetworks/synapse-types'\nimport { uniqueId } from 'lodash-es'\nimport { http, HttpResponse } from 'msw'\nimport mockEntities, { mockProjectsEntityData } from '../../entity'\nimport { MOCK_INVALID_PROJECT_NAME } from '../../entity/mockEntity'\nimport { MockEntityData } from '../../entity/MockEntityData'\nimport {\n mockSynapseStorageUploadDestination,\n mockUploadDestinations,\n} from '../../mock_upload_destination'\nimport { mockSchemaBinding } from '../../mockSchema'\nimport { SynapseApiResponse } from '../handlers'\n\nfunction getMatchingMockEntities(entityIds: string[]): MockEntityData[] {\n const normalizedPassedIds = entityIds.map(normalizeSynPrefix)\n return mockEntities.filter(entity =>\n normalizedPassedIds.includes(normalizeSynPrefix(entity.id)),\n )\n}\nfunction getMatchingMockEntity(entityId: string): MockEntityData | undefined {\n const matches = getMatchingMockEntities([entityId])\n if (matches.length == 0) {\n return undefined\n }\n return matches[0]\n}\n\nexport function getEntityBundleHandler(\n backendOrigin: string,\n bundle?: Partial<EntityBundle>,\n) {\n return http.post(\n `${backendOrigin}${ENTITY_BUNDLE_V2(':entityId')}`,\n ({ params }) => {\n let status = 404\n let response: SynapseApiResponse<EntityBundle> = {\n concreteType: 'org.sagebionetworks.repo.model.ErrorResponse',\n reason: `Mock Service worker could not find a mock entity bundle with ID ${params.entityId}`,\n }\n if (bundle) {\n response = bundle as EntityBundle\n status = 200\n } else {\n const entityData = getMatchingMockEntity(params.entityId as string)\n if (entityData?.bundle) {\n response = entityData.bundle\n status = 200\n }\n }\n return HttpResponse.json(response, { status })\n },\n )\n}\n\nexport function getEntityJsonHandler(\n backendOrigin: string,\n entityJson?: Partial<EntityJson>,\n) {\n return http.get(\n `${backendOrigin}${ENTITY_JSON(':entityId')}`,\n\n () => {\n const response = entityJson\n return HttpResponse.json(response, { status: 200 })\n },\n )\n}\n\nexport function getVersionedEntityBundleHandler(\n backendOrigin: string,\n bundle?: Partial<EntityBundle>,\n) {\n return http.post(\n `${backendOrigin}${ENTITY_BUNDLE_V2(':entityId', ':versionNumber')}`,\n ({ params }) => {\n const entityId = params.entityId as string\n const versionNumber = parseInt(params.versionNumber as string)\n let status = 404\n let response: SynapseApiResponse<EntityBundle> = {\n concreteType: 'org.sagebionetworks.repo.model.ErrorResponse',\n reason: `Mock Service worker could not find a mock entity bundle with ID ${entityId}`,\n }\n if (bundle) {\n response = bundle as EntityBundle\n status = 200\n } else {\n const entityData = getMatchingMockEntity(entityId)\n if (entityData) {\n const bundle = entityData.bundle\n if (entityData.versions && entityData.versions[versionNumber]) {\n response = {\n ...bundle,\n entity: entityData.versions[versionNumber],\n } as EntityBundle\n } else {\n response = bundle as EntityBundle\n }\n status = 200\n }\n }\n return HttpResponse.json(response, { status })\n },\n )\n}\n\nexport const getEntityHandlers = (backendOrigin: string) => [\n /**\n * Create a new entity\n */\n http.post<never, Entity>(`${backendOrigin}${ENTITY}`, async ({ request }) => {\n let status = 200\n const requestBody = await request.json()\n let response: SynapseApiResponse<Entity> = {\n concreteType: 'org.sagebionetworks.repo.model.ErrorResponse',\n reason: '...',\n }\n if (!requestBody) {\n status = 400\n response = {\n concreteType: 'org.sagebionetworks.repo.model.ErrorResponse',\n reason: `Mock service worker received the following malformed body for PUT ${ENTITY} : ${JSON.stringify(\n requestBody,\n )}`,\n }\n } else {\n if (requestBody.name === MOCK_INVALID_PROJECT_NAME) {\n ;(response as ErrorResponse).reason = 'Invalid project name'\n status = 403\n } else {\n response = { id: uniqueId('syn'), ...requestBody }\n }\n }\n\n return HttpResponse.json(response, { status })\n }),\n\n /**\n * Get entity by ID\n */\n http.get(`${backendOrigin}${ENTITY_ID(':entityId')}`, ({ params }) => {\n let status = 404\n let response: SynapseApiResponse<Entity> = {\n concreteType: 'org.sagebionetworks.repo.model.ErrorResponse',\n reason: `Mock Service worker could not find a mock entity with ID ${params.entityId}`,\n }\n\n const entityData = getMatchingMockEntity(params.entityId as string)\n if (entityData) {\n response = entityData.entity\n status = 200\n }\n return HttpResponse.json(response, { status })\n }),\n\n http.get(\n `${backendOrigin}${ENTITY_ID_VERSIONS(':entityId')}`,\n ({ params }) => {\n let status = 404\n let response: SynapseApiResponse<PaginatedResults<VersionInfo>> = {\n concreteType: 'org.sagebionetworks.repo.model.ErrorResponse',\n reason: `Mock Service worker could not find mock entity versions for ID ${params.entityId}`,\n }\n\n const entityData = getMatchingMockEntity(params.entityId as string)\n if (entityData && entityData.versionInfo) {\n response = { results: entityData.versionInfo }\n status = 200\n }\n return HttpResponse.json(response, { status })\n },\n ),\n\n http.get<{ entityId: string; versionNumber: string }>(\n `${backendOrigin}${ENTITY_ID_VERSION(':entityId', ':versionNumber')}`,\n ({ params }) => {\n let status = 404\n const entityId = params.entityId\n const versionNumber = params.versionNumber.toString()\n const requestedVersionNumber = parseInt(versionNumber)\n\n let response: SynapseApiResponse<VersionableEntity> = {\n concreteType: 'org.sagebionetworks.repo.model.ErrorResponse',\n reason: `Mock Service worker could not find a mock versioned entity with ID ${entityId}.${versionNumber}`,\n }\n\n const entityData = getMatchingMockEntity(params.entityId)\n if (\n entityData &&\n entityData.versions &&\n entityData.versions[requestedVersionNumber]\n ) {\n response = entityData.versions[\n requestedVersionNumber\n ] as VersionableEntity\n status = 200\n }\n return HttpResponse.json(response, { status })\n },\n ),\n\n getEntityBundleHandler(backendOrigin),\n getVersionedEntityBundleHandler(backendOrigin),\n\n http.get(`${backendOrigin}${ENTITY_SCHEMA_BINDING(':entityId')}`, () => {\n return HttpResponse.json(mockSchemaBinding, { status: 200 })\n }),\n http.get(\n `${backendOrigin}${ENTITY_JSON(':entityId')}`,\n\n ({ params }) => {\n let status = 404\n let response: SynapseApiResponse<EntityJson> = {\n concreteType: 'org.sagebionetworks.repo.model.ErrorResponse',\n reason: `Mock Service worker could not find a mock entity bundle with ID ${params.entityId}`,\n }\n const entityData = getMatchingMockEntity(params.entityId as string)\n if (entityData?.json) {\n response = entityData.json\n status = 200\n }\n\n return HttpResponse.json(response, { status })\n },\n ),\n\n http.post<{ entityId: string }, { references: Reference[] }>(\n `${backendOrigin}${ENTITY_HEADERS}`,\n\n async ({ params, request }) => {\n let status = 404\n let response: SynapseApiResponse<PaginatedResults<EntityHeader>> = {\n concreteType: 'org.sagebionetworks.repo.model.ErrorResponse',\n reason: `Mock Service worker could not find a mock entity bundle with ID ${params.entityId}`,\n }\n\n const referenceList = await request.json()\n const entityData: EntityHeader[] = referenceList.references\n .map(ref => {\n const entityHeader = getMatchingMockEntity(ref.targetId)?.entityHeader\n if (entityHeader) {\n return {\n ...entityHeader,\n // ID should match what is passed in (i.e. may or may not have syn prefix)\n id: ref.targetId,\n }\n }\n return undefined\n })\n .filter((header): header is EntityHeader => !!header)\n\n if (entityData) {\n response = { results: entityData }\n status = 200\n }\n\n return HttpResponse.json(response, { status })\n },\n ),\n\n http.get(\n `${backendOrigin}${ENTITY_ID(':entityId')}/path`,\n\n ({ params }) => {\n let status = 404\n let response: SynapseApiResponse<EntityPath> = {\n concreteType: 'org.sagebionetworks.repo.model.ErrorResponse',\n reason: `Mock Service worker could not find a mock entity path using ID ${params.entityId}`,\n }\n const entityData = getMatchingMockEntity(params.entityId as string)\n\n if (entityData && entityData.path) {\n response = entityData.path\n status = 200\n }\n\n return HttpResponse.json(response, { status })\n },\n ),\n\n http.get(`${backendOrigin}/file/v1/entity/:id/uploadDestination`, () => {\n const response: UploadDestination = mockSynapseStorageUploadDestination\n return HttpResponse.json(response, { status: 200 })\n }),\n\n http.get(\n `${backendOrigin}/file/v1/entity/:id/uploadDestination/:storageLocationId`,\n ({ params }) => {\n let status = 404\n let response: SynapseApiResponse<UploadDestination> = {\n concreteType: 'org.sagebionetworks.repo.model.ErrorResponse',\n reason: `Mock Service worker could not find an uploadDestination using storageLocationId ${params.storageLocationId}`,\n }\n const uploadDestination = mockUploadDestinations.find(\n e => Number(params.storageLocationId) === e.storageLocationId,\n )\n\n if (uploadDestination) {\n response = uploadDestination\n status = 200\n }\n\n return HttpResponse.json(response, { status })\n },\n ),\n\n http.get(`${backendOrigin}/repo/v1/projects`, () => {\n const response: ProjectHeaderList = {\n results: mockProjectsEntityData.map(p => ({\n name: p.name,\n id: p.id,\n lastActivity: '2024-01-04T21:11:59.000Z',\n modifiedBy: parseInt(p.entity.modifiedBy!),\n modifiedOn: p.entity.modifiedOn!,\n })),\n }\n return HttpResponse.json(response, { status: 200 })\n }),\n\n http.post<{ entityId: string }, AccessControlList>(\n `${backendOrigin}${ENTITY_ID(':entityId')}/acl`,\n async ({ params, request }) => {\n const entityData = getMatchingMockEntity(params.entityId)\n let status: number\n let response: SynapseApiResponse<AccessControlList>\n if (!entityData) {\n status = 404\n response = {\n concreteType: 'org.sagebionetworks.repo.model.ErrorResponse',\n reason: `Mock Service worker could not find a mock entity bundle with ID ${params.entityId}`,\n }\n } else if (entityData.bundle?.accessControlList) {\n status = 403\n response = {\n concreteType: 'org.sagebionetworks.repo.model.ErrorResponse',\n reason: 'Resource already has an ACL.',\n }\n } else {\n response = await request.json()\n status = 201\n }\n\n return HttpResponse.json(response, { status })\n },\n ),\n\n http.put<{ entityId: string }, AccessControlList>(\n `${backendOrigin}${ENTITY_ID(':entityId')}/acl`,\n async ({ params, request }) => {\n const entityData = getMatchingMockEntity(params.entityId)\n\n let status: number\n let response: SynapseApiResponse<AccessControlList>\n\n if (!entityData) {\n status = 404\n response = {\n concreteType: 'org.sagebionetworks.repo.model.ErrorResponse',\n reason: `Mock Service worker could not find a mock entity bundle with ID ${params.entityId}`,\n }\n } else if (!entityData?.bundle?.accessControlList) {\n response = {\n concreteType: 'org.sagebionetworks.repo.model.ErrorResponse',\n reason:\n 'Cannot update ACL for a resource which inherits its permissions.',\n }\n status = 403\n } else {\n response = await request.json()\n status = 200\n }\n\n return HttpResponse.json(response, { status })\n },\n ),\n\n http.delete(`${backendOrigin}${ENTITY_ID(':entityId')}/acl`, ({ params }) => {\n const entityData = getMatchingMockEntity(params.entityId as string)\n\n let status: number\n let response: SynapseApiResponse<''>\n\n if (!entityData) {\n status = 404\n response = {\n concreteType: 'org.sagebionetworks.repo.model.ErrorResponse',\n reason: `Mock Service worker could not find a mock entity bundle with ID ${params.entityId}`,\n }\n } else if (!entityData?.bundle?.accessControlList) {\n response = {\n concreteType: 'org.sagebionetworks.repo.model.ErrorResponse',\n reason:\n 'Cannot delete ACL for a resource which inherits its permissions.',\n }\n status = 403\n } else {\n response = ''\n status = 200\n }\n\n return HttpResponse.json(response, { status })\n }),\n]\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"fileHandlers.js","names":[],"sources":["../../../../src/mocks/msw/handlers/fileHandlers.ts"],"sourcesContent":["import { FILE, FILE_HANDLE_BATCH } from '@/utils/APIConstants'\nimport { ExternalFileHandleInterface } from '@sage-bionetworks/synapse-client'\nimport {\n BatchFileRequest,\n BatchFileResult,\n MultipartUploadStatus,\n} from '@sage-bionetworks/synapse-types'\nimport { uniqueId } from 'lodash-es'\nimport { http, HttpResponse } from 'msw'\nimport { MOCK_FILE_HANDLE_ID, mockFileHandles } from '../../mock_file_handle'\nimport { MOCK_USER_ID } from '../../user/mock_user_profile'\nimport { SynapseApiResponse } from '../handlers'\n\nexport function getFileHandlers(backendOrigin: string) {\n return [\n http.post<never, BatchFileRequest>(\n `${backendOrigin}${FILE_HANDLE_BATCH}`,\n async ({ request }) => {\n const requestBody: BatchFileRequest = await request.json()\n\n const response: BatchFileResult = {\n requestedFiles: [],\n }\n\n requestBody.requestedFiles.forEach(fileHandleAssociation => {\n const fileHandle = mockFileHandles.find(\n fh => fh.id === fileHandleAssociation.fileHandleId,\n )\n if (fileHandle) {\n response.requestedFiles.push({\n fileHandleId: fileHandle.id,\n fileHandle,\n })\n }\n })\n\n return HttpResponse.json(response, { status: 201 })\n },\n ),\n\n http.post(`${backendOrigin}${FILE}/file/multipart`, () => {\n const response: SynapseApiResponse<MultipartUploadStatus> = {\n state: 'COMPLETED',\n resultFileHandleId: MOCK_FILE_HANDLE_ID,\n uploadId: 'mockUploadId',\n startedBy: String(MOCK_USER_ID),\n startedOn: new Date().toISOString(),\n updatedOn: new Date().toISOString(),\n partsState: '1',\n }\n\n return HttpResponse.json(response, { status: 201 })\n }),\n http.put(`${backendOrigin}${FILE}/file/multipart/:id/complete`, () => {\n const response: SynapseApiResponse<MultipartUploadStatus> = {\n state: 'COMPLETED',\n resultFileHandleId: MOCK_FILE_HANDLE_ID,\n uploadId: 'mockUploadId',\n startedBy: String(MOCK_USER_ID),\n startedOn: new Date().toISOString(),\n updatedOn: new Date().toISOString(),\n partsState: '1',\n }\n\n return HttpResponse.json(response, { status: 201 })\n }),\n\n http.post<never, ExternalFileHandleInterface>(\n `${backendOrigin}${FILE}/externalFileHandle`,\n async ({ request }) => {\n const requestBody = await request.json()\n\n const response: SynapseApiResponse<ExternalFileHandleInterface> = {\n ...requestBody,\n id: uniqueId(),\n etag: 'fake-etag',\n createdBy: MOCK_USER_ID.toString(),\n createdOn: new Date().toISOString(),\n modifiedOn: new Date().toISOString(),\n }\n\n return HttpResponse.json(response, { status: 201 })\n },\n ),\n ]\n}\n"],"mappings":";;;;;;AAaA,SAAgB,EAAgB,GAAuB;AACrD,QAAO;EACL,EAAK,KACH,GAAG,IAAgB,KACnB,OAAO,EAAE,iBAAc;GACrB,IAAM,IAAgC,MAAM,EAAQ,MAAM,EAEpD,IAA4B,EAChC,gBAAgB,EAAE,EACnB;AAcD,UAZA,EAAY,eAAe,SAAQ,MAAyB;IAC1D,IAAM,IAAa,EAAgB,MACjC,MAAM,EAAG,OAAO,EAAsB,aACvC;AACD,IAAI,KACF,EAAS,eAAe,KAAK;KAC3B,cAAc,EAAW;KACzB;KACD,CAAC;KAEJ,EAEK,EAAa,KAAK,GAAU,EAAE,QAAQ,KAAK,CAAC;IAEtD;EAED,EAAK,KAAK,GAAG,IAAgB,EAAK,wBAAwB;GACxD,IAAM,IAAsD;IAC1D,OAAO;IACP,oBAAoB;IACpB,UAAU;IACV,WAAW;IACX,4BAAW,IAAI,MAAM,EAAC,aAAa;IACnC,4BAAW,IAAI,MAAM,EAAC,aAAa;IACnC,YAAY;IACb;AAED,UAAO,EAAa,KAAK,GAAU,EAAE,QAAQ,KAAK,CAAC;IACnD;EACF,EAAK,IAAI,GAAG,IAAgB,EAAK,qCAAqC;GACpE,IAAM,IAAsD;IAC1D,OAAO;IACP,oBAAoB;IACpB,UAAU;IACV,WAAW;IACX,4BAAW,IAAI,MAAM,EAAC,aAAa;IACnC,4BAAW,IAAI,MAAM,EAAC,aAAa;IACnC,YAAY;IACb;AAED,UAAO,EAAa,KAAK,GAAU,EAAE,QAAQ,KAAK,CAAC;IACnD;EAEF,EAAK,KACH,GAAG,IAAgB,EAAK,sBACxB,OAAO,EAAE,iBAAc;GAGrB,IAAM,IAA4D;IAChE,GAHkB,MAAM,EAAQ,MAAM;IAItC,IAAI,GAAU;IACd,MAAM;IACN,WAAA;IACA,4BAAW,IAAI,MAAM,EAAC,aAAa;IACnC,6BAAY,IAAI,MAAM,EAAC,aAAa;IACrC;AAED,UAAO,EAAa,KAAK,GAAU,EAAE,QAAQ,KAAK,CAAC;IAEtD;EACF"}
1
+ {"version":3,"file":"fileHandlers.js","names":[],"sources":["../../../../src/mocks/msw/handlers/fileHandlers.ts"],"sourcesContent":["import { FILE, FILE_HANDLE_BATCH } from '@/utils/APIConstants'\nimport { ExternalFileHandleInterface } from '@sage-bionetworks/synapse-client'\nimport {\n BatchFileRequest,\n BatchFileResult,\n MultipartUploadStatus,\n} from '@sage-bionetworks/synapse-types'\nimport { uniqueId } from 'lodash-es'\nimport { http, HttpResponse } from 'msw'\nimport { MOCK_FILE_HANDLE_ID, mockFileHandles } from '../../mock_file_handle'\nimport { MOCK_USER_ID } from '../../user/mock_user_profile'\nimport { SynapseApiResponse } from '../handlers'\n\nexport function getFileHandlers(backendOrigin: string) {\n return [\n http.post<never, BatchFileRequest>(\n `${backendOrigin}${FILE_HANDLE_BATCH}`,\n async ({ request }) => {\n const requestBody: BatchFileRequest = await request.json()\n\n const response: BatchFileResult = {\n requestedFiles: [],\n }\n\n requestBody.requestedFiles.forEach(fileHandleAssociation => {\n const fileHandle = mockFileHandles.find(\n fh => fh.id === fileHandleAssociation.fileHandleId,\n )\n if (fileHandle) {\n response.requestedFiles.push({\n fileHandleId: fileHandle.id,\n fileHandle,\n })\n }\n })\n\n return HttpResponse.json(response, { status: 201 })\n },\n ),\n\n http.post(`${backendOrigin}${FILE}/file/multipart`, () => {\n const response: SynapseApiResponse<MultipartUploadStatus> = {\n state: 'COMPLETED',\n resultFileHandleId: MOCK_FILE_HANDLE_ID,\n uploadId: 'mockUploadId',\n startedBy: String(MOCK_USER_ID),\n startedOn: new Date().toISOString(),\n updatedOn: new Date().toISOString(),\n partsState: '1',\n }\n\n return HttpResponse.json(response, { status: 201 })\n }),\n http.put(`${backendOrigin}${FILE}/file/multipart/:id/complete`, () => {\n const response: SynapseApiResponse<MultipartUploadStatus> = {\n state: 'COMPLETED',\n resultFileHandleId: MOCK_FILE_HANDLE_ID,\n uploadId: 'mockUploadId',\n startedBy: String(MOCK_USER_ID),\n startedOn: new Date().toISOString(),\n updatedOn: new Date().toISOString(),\n partsState: '1',\n }\n\n return HttpResponse.json(response, { status: 201 })\n }),\n\n http.post<never, ExternalFileHandleInterface>(\n `${backendOrigin}${FILE}/externalFileHandle`,\n async ({ request }) => {\n const requestBody = await request.json()\n\n const response: SynapseApiResponse<ExternalFileHandleInterface> = {\n ...requestBody,\n id: uniqueId(),\n etag: 'fake-etag',\n createdBy: MOCK_USER_ID.toString(),\n createdOn: new Date().toISOString(),\n modifiedOn: new Date().toISOString(),\n }\n\n return HttpResponse.json(response, { status: 201 })\n },\n ),\n ]\n}\n"],"mappings":";;;;;;AAaA,SAAgB,EAAgB,GAAuB;AACrD,QAAO;EACL,EAAK,KACH,GAAG,IAAgB,KACnB,OAAO,EAAE,iBAAc;GACrB,IAAM,IAAgC,MAAM,EAAQ,MAAM,EAEpD,IAA4B,EAChC,gBAAgB,EAAE,EACnB;AAcD,UAZA,EAAY,eAAe,SAAQ,MAAyB;IAC1D,IAAM,IAAa,EAAgB,MACjC,MAAM,EAAG,OAAO,EAAsB,aACvC;AACD,IAAI,KACF,EAAS,eAAe,KAAK;KAC3B,cAAc,EAAW;KACzB;KACD,CAAC;KAEJ,EAEK,EAAa,KAAK,GAAU,EAAE,QAAQ,KAAK,CAAC;IAEtD;EAED,EAAK,KAAK,GAAG,IAAgB,EAAK,wBAAwB;GACxD,IAAM,IAAsD;IAC1D,OAAO;IACP,oBAAoB;IACpB,UAAU;IACV,WAAW;IACX,4BAAW,IAAI,MAAM,EAAC,aAAa;IACnC,4BAAW,IAAI,MAAM,EAAC,aAAa;IACnC,YAAY;IACb;AAED,UAAO,EAAa,KAAK,GAAU,EAAE,QAAQ,KAAK,CAAC;IACnD;EACF,EAAK,IAAI,GAAG,IAAgB,EAAK,qCAAqC;GACpE,IAAM,IAAsD;IAC1D,OAAO;IACP,oBAAoB;IACpB,UAAU;IACV,WAAW;IACX,4BAAW,IAAI,MAAM,EAAC,aAAa;IACnC,4BAAW,IAAI,MAAM,EAAC,aAAa;IACnC,YAAY;IACb;AAED,UAAO,EAAa,KAAK,GAAU,EAAE,QAAQ,KAAK,CAAC;IACnD;EAEF,EAAK,KACH,GAAG,IAAgB,EAAK,sBACxB,OAAO,EAAE,iBAAc;GAGrB,IAAM,IAA4D;IAChE,GAAG,MAHqB,EAAQ,MAAM;IAItC,IAAI,GAAU;IACd,MAAM;IACN,WAAA;IACA,4BAAW,IAAI,MAAM,EAAC,aAAa;IACnC,6BAAY,IAAI,MAAM,EAAC,aAAa;IACrC;AAED,UAAO,EAAa,KAAK,GAAU,EAAE,QAAQ,KAAK,CAAC;IAEtD;EACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"gridHandlers.js","names":[],"sources":["../../../../src/mocks/msw/handlers/gridHandlers.ts"],"sourcesContent":["import { CreateReplicaRequest } from '@sage-bionetworks/synapse-client'\nimport { http, HttpResponse } from 'msw'\n\nfunction getRandomInt() {\n return crypto.getRandomValues(new Uint32Array(1))[0]\n}\n\n// Generate unique session IDs for grid sessions\nconst generateSessionId = () => {\n const randomId: number = getRandomInt()\n return `grid-session-${randomId * 100000}`\n}\n\ninterface GridJob {\n status: string\n startTime: number\n sessionId: string\n}\n\n// In-memory storage to track async jobs\nconst pendingJobs = new Map<string, GridJob>()\n\nexport function getGridHandlers(backendOrigin: string) {\n return [\n // Handler for starting a grid session\n http.post(\n `${backendOrigin}/repo/v1/grid/session/async/start`,\n async ({ request }) => {\n // Generate a unique job token\n const jobToken = `job-${Date.now()}-${Math.random()\n .toString(36)\n .substring(2, 9)}`\n const requestBody = await request.json()\n\n // Store job details for later reference\n pendingJobs.set(jobToken, {\n status: 'PROCESSING',\n startTime: Date.now(),\n sessionId: generateSessionId(),\n })\n\n return HttpResponse.json(requestBody, { status: 201 })\n },\n ),\n\n // Handler for retrieving async job results\n http.get<{ token: string }>(\n `${backendOrigin}/repo/v1/grid/session/async/get/:token`,\n ({ params }) => {\n // Retrieve job data\n const jobData = pendingJobs.get(params.token)\n\n if (!jobData) {\n return HttpResponse.text('Job not found', { status: 404 })\n }\n\n // Job is complete, return result\n jobData.status = 'COMPLETE'\n return HttpResponse.json(\n {\n concreteType: 'org.sagebionetworks.repo.model.grid.GridSession',\n gridSession: {\n sessionId: jobData.sessionId,\n startedBy: 'mockUser',\n startedOn: new Date().toISOString(),\n etag: `etag-${Date.now()}`,\n modifiedOn: new Date().toISOString(),\n lastReplicaIdClient: 1,\n lastReplicaIdService: 1,\n },\n },\n { status: 200 },\n )\n },\n ),\n\n // Handler for GridSessionReplica\n http.post<{ sessionId: string }, CreateReplicaRequest>(\n `${backendOrigin}/repo/v1/grid/:sessionId/replica`,\n async ({ request }) => {\n const { gridSessionId } = await request.json()\n\n // Check if the session ID exists in pending jobs\n const jobData = Array.from(pendingJobs.values()).find(\n job => job.sessionId === gridSessionId,\n )\n\n if (!jobData) {\n return HttpResponse.text('Grid session not found', { status: 404 })\n }\n\n // Create a replica for the session\n const replicaId = getRandomInt() % 1000\n const replicaResponse = {\n concreteType: 'org.sagebionetworks.repo.model.grid.GridReplica',\n replica: {\n gridSessionId,\n replicaId,\n createdBy: 'mockUser',\n isAgentReplica: false,\n createdOn: new Date().toISOString(),\n },\n }\n return HttpResponse.json(replicaResponse, { status: 201 })\n },\n ),\n\n // Handler for Grid presigned URL\n http.get<{ sessionId: string }>(\n `${backendOrigin}/repo/v1/grid/:sessionId/presignedUrl`,\n ({ params }) => {\n const { sessionId } = params\n\n const jobData = Array.from(pendingJobs.values()).find(\n job => job.sessionId === sessionId,\n )\n if (!jobData) {\n return HttpResponse.text('Grid session not found', { status: 404 })\n }\n // Generate a mock presigned URL\n const presignedUrl = `https://mock-s3-bucket/${sessionId}/data.csv?presigned=true`\n return HttpResponse.json({ presignedUrl }, { status: 200 })\n },\n ),\n ]\n}\n"],"mappings":";;AAGA,SAAS,IAAe;AACtB,QAAO,OAAO,gBAAgB,IAAI,YAAY,EAAE,CAAC,CAAC;;AAIpD,IAAM,UAEG,gBADkB,GAAc,GACL,OAU9B,oBAAc,IAAI,KAAsB;AAE9C,SAAgB,EAAgB,GAAuB;AACrD,QAAO;EAEL,EAAK,KACH,GAAG,EAAc,oCACjB,OAAO,EAAE,iBAAc;GAErB,IAAM,IAAW,OAAO,KAAK,KAAK,CAAC,GAAG,KAAK,QAAQ,CAChD,SAAS,GAAG,CACZ,UAAU,GAAG,EAAE,IACZ,IAAc,MAAM,EAAQ,MAAM;AASxC,UANA,EAAY,IAAI,GAAU;IACxB,QAAQ;IACR,WAAW,KAAK,KAAK;IACrB,WAAW,GAAmB;IAC/B,CAAC,EAEK,EAAa,KAAK,GAAa,EAAE,QAAQ,KAAK,CAAC;IAEzD;EAGD,EAAK,IACH,GAAG,EAAc,0CAChB,EAAE,gBAAa;GAEd,IAAM,IAAU,EAAY,IAAI,EAAO,MAAM;AAQ7C,UANK,KAKL,EAAQ,SAAS,YACV,EAAa,KAClB;IACE,cAAc;IACd,aAAa;KACX,WAAW,EAAQ;KACnB,WAAW;KACX,4BAAW,IAAI,MAAM,EAAC,aAAa;KACnC,MAAM,QAAQ,KAAK,KAAK;KACxB,6BAAY,IAAI,MAAM,EAAC,aAAa;KACpC,qBAAqB;KACrB,sBAAsB;KACvB;IACF,EACD,EAAE,QAAQ,KAAK,CAChB,IAnBQ,EAAa,KAAK,iBAAiB,EAAE,QAAQ,KAAK,CAAC;IAqB/D;EAGD,EAAK,KACH,GAAG,EAAc,mCACjB,OAAO,EAAE,iBAAc;GACrB,IAAM,EAAE,qBAAkB,MAAM,EAAQ,MAAM;AAO9C,OAAI,CAJY,MAAM,KAAK,EAAY,QAAQ,CAAC,CAAC,MAC/C,MAAO,EAAI,cAAc,EAC1B,CAGC,QAAO,EAAa,KAAK,0BAA0B,EAAE,QAAQ,KAAK,CAAC;GAKrE,IAAM,IAAkB;IACtB,cAAc;IACd,SAAS;KACP;KACA,WALc,GAAc,GAAG;KAM/B,WAAW;KACX,gBAAgB;KAChB,4BAAW,IAAI,MAAM,EAAC,aAAa;KACpC;IACF;AACD,UAAO,EAAa,KAAK,GAAiB,EAAE,QAAQ,KAAK,CAAC;IAE7D;EAGD,EAAK,IACH,GAAG,EAAc,yCAChB,EAAE,gBAAa;GACd,IAAM,EAAE,iBAAc;AAKtB,OAAI,CAHY,MAAM,KAAK,EAAY,QAAQ,CAAC,CAAC,MAC/C,MAAO,EAAI,cAAc,EAC1B,CAEC,QAAO,EAAa,KAAK,0BAA0B,EAAE,QAAQ,KAAK,CAAC;GAGrE,IAAM,IAAe,0BAA0B,EAAU;AACzD,UAAO,EAAa,KAAK,EAAE,iBAAc,EAAE,EAAE,QAAQ,KAAK,CAAC;IAE9D;EACF"}
1
+ {"version":3,"file":"gridHandlers.js","names":[],"sources":["../../../../src/mocks/msw/handlers/gridHandlers.ts"],"sourcesContent":["import { CreateReplicaRequest } from '@sage-bionetworks/synapse-client'\nimport { http, HttpResponse } from 'msw'\n\nfunction getRandomInt() {\n return crypto.getRandomValues(new Uint32Array(1))[0]\n}\n\n// Generate unique session IDs for grid sessions\nconst generateSessionId = () => {\n const randomId: number = getRandomInt()\n return `grid-session-${randomId * 100000}`\n}\n\ninterface GridJob {\n status: string\n startTime: number\n sessionId: string\n}\n\n// In-memory storage to track async jobs\nconst pendingJobs = new Map<string, GridJob>()\n\nexport function getGridHandlers(backendOrigin: string) {\n return [\n // Handler for starting a grid session\n http.post(\n `${backendOrigin}/repo/v1/grid/session/async/start`,\n async ({ request }) => {\n // Generate a unique job token\n const jobToken = `job-${Date.now()}-${Math.random()\n .toString(36)\n .substring(2, 9)}`\n const requestBody = await request.json()\n\n // Store job details for later reference\n pendingJobs.set(jobToken, {\n status: 'PROCESSING',\n startTime: Date.now(),\n sessionId: generateSessionId(),\n })\n\n return HttpResponse.json(requestBody, { status: 201 })\n },\n ),\n\n // Handler for retrieving async job results\n http.get<{ token: string }>(\n `${backendOrigin}/repo/v1/grid/session/async/get/:token`,\n ({ params }) => {\n // Retrieve job data\n const jobData = pendingJobs.get(params.token)\n\n if (!jobData) {\n return HttpResponse.text('Job not found', { status: 404 })\n }\n\n // Job is complete, return result\n jobData.status = 'COMPLETE'\n return HttpResponse.json(\n {\n concreteType: 'org.sagebionetworks.repo.model.grid.GridSession',\n gridSession: {\n sessionId: jobData.sessionId,\n startedBy: 'mockUser',\n startedOn: new Date().toISOString(),\n etag: `etag-${Date.now()}`,\n modifiedOn: new Date().toISOString(),\n lastReplicaIdClient: 1,\n lastReplicaIdService: 1,\n },\n },\n { status: 200 },\n )\n },\n ),\n\n // Handler for GridSessionReplica\n http.post<{ sessionId: string }, CreateReplicaRequest>(\n `${backendOrigin}/repo/v1/grid/:sessionId/replica`,\n async ({ request }) => {\n const { gridSessionId } = await request.json()\n\n // Check if the session ID exists in pending jobs\n const jobData = Array.from(pendingJobs.values()).find(\n job => job.sessionId === gridSessionId,\n )\n\n if (!jobData) {\n return HttpResponse.text('Grid session not found', { status: 404 })\n }\n\n // Create a replica for the session\n const replicaId = getRandomInt() % 1000\n const replicaResponse = {\n concreteType: 'org.sagebionetworks.repo.model.grid.GridReplica',\n replica: {\n gridSessionId,\n replicaId,\n createdBy: 'mockUser',\n isAgentReplica: false,\n createdOn: new Date().toISOString(),\n },\n }\n return HttpResponse.json(replicaResponse, { status: 201 })\n },\n ),\n\n // Handler for Grid presigned URL\n http.get<{ sessionId: string }>(\n `${backendOrigin}/repo/v1/grid/:sessionId/presignedUrl`,\n ({ params }) => {\n const { sessionId } = params\n\n const jobData = Array.from(pendingJobs.values()).find(\n job => job.sessionId === sessionId,\n )\n if (!jobData) {\n return HttpResponse.text('Grid session not found', { status: 404 })\n }\n // Generate a mock presigned URL\n const presignedUrl = `https://mock-s3-bucket/${sessionId}/data.csv?presigned=true`\n return HttpResponse.json({ presignedUrl }, { status: 200 })\n },\n ),\n ]\n}\n"],"mappings":";;AAGA,SAAS,IAAe;AACtB,QAAO,OAAO,gBAAgB,IAAI,YAAY,EAAE,CAAC,CAAC;;AAIpD,IAAM,UAEG,gBADkB,GACF,GAAW,OAU9B,oBAAc,IAAI,KAAsB;AAE9C,SAAgB,EAAgB,GAAuB;AACrD,QAAO;EAEL,EAAK,KACH,GAAG,EAAc,oCACjB,OAAO,EAAE,iBAAc;GAErB,IAAM,IAAW,OAAO,KAAK,KAAK,CAAC,GAAG,KAAK,QAAQ,CAChD,SAAS,GAAG,CACZ,UAAU,GAAG,EAAE,IACZ,IAAc,MAAM,EAAQ,MAAM;AASxC,UANA,EAAY,IAAI,GAAU;IACxB,QAAQ;IACR,WAAW,KAAK,KAAK;IACrB,WAAW,GAAmB;IAC/B,CAAC,EAEK,EAAa,KAAK,GAAa,EAAE,QAAQ,KAAK,CAAC;IAEzD;EAGD,EAAK,IACH,GAAG,EAAc,0CAChB,EAAE,gBAAa;GAEd,IAAM,IAAU,EAAY,IAAI,EAAO,MAAM;AAQ7C,UANK,KAKL,EAAQ,SAAS,YACV,EAAa,KAClB;IACE,cAAc;IACd,aAAa;KACX,WAAW,EAAQ;KACnB,WAAW;KACX,4BAAW,IAAI,MAAM,EAAC,aAAa;KACnC,MAAM,QAAQ,KAAK,KAAK;KACxB,6BAAY,IAAI,MAAM,EAAC,aAAa;KACpC,qBAAqB;KACrB,sBAAsB;KACvB;IACF,EACD,EAAE,QAAQ,KAAK,CAChB,IAnBQ,EAAa,KAAK,iBAAiB,EAAE,QAAQ,KAAK,CAAC;IAqB/D;EAGD,EAAK,KACH,GAAG,EAAc,mCACjB,OAAO,EAAE,iBAAc;GACrB,IAAM,EAAE,qBAAkB,MAAM,EAAQ,MAAM;AAO9C,OAAI,CAJY,MAAM,KAAK,EAAY,QAAQ,CAAC,CAAC,MAC/C,MAAO,EAAI,cAAc,EAGtB,CACH,QAAO,EAAa,KAAK,0BAA0B,EAAE,QAAQ,KAAK,CAAC;GAKrE,IAAM,IAAkB;IACtB,cAAc;IACd,SAAS;KACP;KACA,WALc,GAAc,GAAG;KAM/B,WAAW;KACX,gBAAgB;KAChB,4BAAW,IAAI,MAAM,EAAC,aAAa;KACpC;IACF;AACD,UAAO,EAAa,KAAK,GAAiB,EAAE,QAAQ,KAAK,CAAC;IAE7D;EAGD,EAAK,IACH,GAAG,EAAc,yCAChB,EAAE,gBAAa;GACd,IAAM,EAAE,iBAAc;AAKtB,OAAI,CAHY,MAAM,KAAK,EAAY,QAAQ,CAAC,CAAC,MAC/C,MAAO,EAAI,cAAc,EAEtB,CACH,QAAO,EAAa,KAAK,0BAA0B,EAAE,QAAQ,KAAK,CAAC;GAGrE,IAAM,IAAe,0BAA0B,EAAU;AACzD,UAAO,EAAa,KAAK,EAAE,iBAAc,EAAE,EAAE,QAAQ,KAAK,CAAC;IAE9D;EACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"personalAccessTokenHandlers.js","names":[],"sources":["../../../../src/mocks/msw/handlers/personalAccessTokenHandlers.ts"],"sourcesContent":["import {\n AccessTokenGenerationResponse,\n AccessTokenRecordList,\n} from '@sage-bionetworks/synapse-types'\nimport { http, HttpResponse } from 'msw'\nimport {\n mockAccessTokenRecordListPageOne,\n mockAccessTokenRecordListPageTwo,\n} from '../../personalAccessToken/mockPersonalAccessToken'\n\nexport function getPersonalAccessTokenHandlers(\n backendOrigin: string,\n tokenRecordOverride?: AccessTokenRecordList,\n) {\n return [\n http.get(`${backendOrigin}/auth/v1/personalAccessToken`, ({ request }) => {\n let response = mockAccessTokenRecordListPageOne\n if (tokenRecordOverride) {\n response = tokenRecordOverride\n } else if (new URL(request.url).searchParams.get('nextPageToken')) {\n response = mockAccessTokenRecordListPageTwo\n }\n\n return HttpResponse.json(response, { status: 200 })\n }),\n http.delete(`${backendOrigin}/auth/v1/personalAccessToken/:id`, () => {\n return new Response('', { status: 202 })\n }),\n\n http.post(`${backendOrigin}/auth/v1/personalAccessToken`, () => {\n const responseBody: AccessTokenGenerationResponse = {\n token: 'your-token-here',\n }\n return HttpResponse.json(responseBody, { status: 201 })\n }),\n ]\n}\n"],"mappings":";;;AAUA,SAAgB,EACd,GACA,GACA;AACA,QAAO;EACL,EAAK,IAAI,GAAG,EAAc,gCAAgC,EAAE,iBAAc;GACxE,IAAI,IAAW;AAOf,UANI,IACF,IAAW,IACF,IAAI,IAAI,EAAQ,IAAI,CAAC,aAAa,IAAI,gBAAgB,KAC/D,IAAW,IAGN,EAAa,KAAK,GAAU,EAAE,QAAQ,KAAK,CAAC;IACnD;EACF,EAAK,OAAO,GAAG,EAAc,yCACpB,IAAI,SAAS,IAAI,EAAE,QAAQ,KAAK,CAAC,CACxC;EAEF,EAAK,KAAK,GAAG,EAAc,qCAIlB,EAAa,KAHgC,EAClD,OAAO,mBACR,EACsC,EAAE,QAAQ,KAAK,CAAC,CACvD;EACH"}
1
+ {"version":3,"file":"personalAccessTokenHandlers.js","names":[],"sources":["../../../../src/mocks/msw/handlers/personalAccessTokenHandlers.ts"],"sourcesContent":["import {\n AccessTokenGenerationResponse,\n AccessTokenRecordList,\n} from '@sage-bionetworks/synapse-types'\nimport { http, HttpResponse } from 'msw'\nimport {\n mockAccessTokenRecordListPageOne,\n mockAccessTokenRecordListPageTwo,\n} from '../../personalAccessToken/mockPersonalAccessToken'\n\nexport function getPersonalAccessTokenHandlers(\n backendOrigin: string,\n tokenRecordOverride?: AccessTokenRecordList,\n) {\n return [\n http.get(`${backendOrigin}/auth/v1/personalAccessToken`, ({ request }) => {\n let response = mockAccessTokenRecordListPageOne\n if (tokenRecordOverride) {\n response = tokenRecordOverride\n } else if (new URL(request.url).searchParams.get('nextPageToken')) {\n response = mockAccessTokenRecordListPageTwo\n }\n\n return HttpResponse.json(response, { status: 200 })\n }),\n http.delete(`${backendOrigin}/auth/v1/personalAccessToken/:id`, () => {\n return new Response('', { status: 202 })\n }),\n\n http.post(`${backendOrigin}/auth/v1/personalAccessToken`, () => {\n const responseBody: AccessTokenGenerationResponse = {\n token: 'your-token-here',\n }\n return HttpResponse.json(responseBody, { status: 201 })\n }),\n ]\n}\n"],"mappings":";;;AAUA,SAAgB,EACd,GACA,GACA;AACA,QAAO;EACL,EAAK,IAAI,GAAG,EAAc,gCAAgC,EAAE,iBAAc;GACxE,IAAI,IAAW;AAOf,UANI,IACF,IAAW,IACF,IAAI,IAAI,EAAQ,IAAI,CAAC,aAAa,IAAI,gBAAgB,KAC/D,IAAW,IAGN,EAAa,KAAK,GAAU,EAAE,QAAQ,KAAK,CAAC;IACnD;EACF,EAAK,OAAO,GAAG,EAAc,yCACpB,IAAI,SAAS,IAAI,EAAE,QAAQ,KAAK,CAAC,CACxC;EAEF,EAAK,KAAK,GAAG,EAAc,qCAIlB,EAAa,KAAK,EAFvB,OAAO,mBAEgB,EAAc,EAAE,QAAQ,KAAK,CAAC,CACvD;EACH"}
@@ -1 +1 @@
1
- {"version":3,"file":"subscriptionHandlers.js","names":[],"sources":["../../../../src/mocks/msw/handlers/subscriptionHandlers.ts"],"sourcesContent":["import {\n SortDirection,\n SubscriberPagedResults,\n Subscription,\n SubscriptionObjectType,\n SubscriptionPagedResults,\n SubscriptionRequest,\n Topic,\n} from '@sage-bionetworks/synapse-types'\nimport { http, HttpResponse } from 'msw'\nimport { forumSubscriptions, threadSubscriptions } from '../../mockSubscription'\nimport { MOCK_USER_ID } from '../../user/mock_user_profile'\nimport { SynapseApiResponse } from '../handlers'\nimport BasicMockedCrudService from '../util/BasicMockedCrudService'\n\nconst subscriptionService = new BasicMockedCrudService<\n Subscription,\n 'subscriptionId'\n>({\n initialData: [...forumSubscriptions, ...threadSubscriptions],\n idField: 'subscriptionId',\n autoGenerateId: true,\n})\n\nfunction getSubscriptions(\n objectType?: SubscriptionObjectType,\n sortDirection: SortDirection = 'ASC',\n offset = 0,\n limit = 10,\n idList?: string[],\n): SubscriptionPagedResults {\n const allResults = subscriptionService\n .getAll()\n .filter(s => {\n if (objectType) {\n return s.objectType === objectType\n }\n return true\n })\n .filter(s => {\n if (idList) {\n return idList.includes(s.objectId)\n }\n return true\n })\n .sort((a, b) => {\n const val =\n new Date(b.createdOn).getTime() - new Date(a.createdOn).getTime()\n return sortDirection === 'ASC' ? val : -1 * val\n })\n\n const totalNumberOfResults = allResults.length\n\n return {\n results: allResults.slice(offset, offset + limit),\n totalNumberOfResults,\n }\n}\n\nexport function getSubscriptionHandlers(backendOrigin: string) {\n return [\n http.get(`${backendOrigin}/repo/v1/subscription/all`, ({ request }) => {\n const objectType =\n (new URL(request.url).searchParams.get(\n 'objectType',\n ) as SubscriptionObjectType) ?? undefined\n const sortDirection =\n (new URL(request.url).searchParams.get(\n 'sortDirection',\n ) as SortDirection) ?? undefined\n const offsetParam = new URL(request.url).searchParams.get('offset')\n const offset = offsetParam ? parseInt(offsetParam) : undefined\n const limitParam = new URL(request.url).searchParams.get('limit')\n const limit = limitParam ? parseInt(limitParam) : undefined\n\n const resp: SynapseApiResponse<SubscriptionPagedResults> =\n getSubscriptions(objectType ?? undefined, sortDirection, offset, limit)\n\n return HttpResponse.json(resp, { status: 200 })\n }),\n http.post<never, SubscriptionRequest>(\n `${backendOrigin}/repo/v1/subscription/list`,\n async ({ request }) => {\n const requestBody: SubscriptionRequest = await request.json()\n\n const resp: SynapseApiResponse<SubscriptionPagedResults> =\n getSubscriptions(\n requestBody.objectType,\n requestBody.sortDirection,\n undefined,\n undefined,\n requestBody.idList,\n )\n\n return HttpResponse.json(resp, { status: 200 })\n },\n ),\n http.post<never, Topic>(\n `${backendOrigin}/repo/v1/subscription`,\n async ({ request }) => {\n const requestBody: Topic = await request.json()\n\n const newSubscription = subscriptionService.create({\n subscriberId: String(MOCK_USER_ID),\n objectId: requestBody.objectId,\n objectType: requestBody.objectType,\n createdOn: new Date().toISOString(),\n })\n return HttpResponse.json(newSubscription, { status: 201 })\n },\n ),\n http.delete(`${backendOrigin}/repo/v1/subscription/:id`, ({ params }) => {\n const subscriptionId = params.id as string\n subscriptionService.delete(subscriptionId)\n return new Response('', { status: 200 })\n }),\n http.post<never, Topic>(\n `${backendOrigin}/repo/v1/subscription/subscribers`,\n async ({ request }) => {\n const topic: Topic = await request.json()\n\n const matchingSubscriptions = subscriptionService.getMany(\n s =>\n s.objectType === topic.objectType && s.objectId === topic.objectId,\n )\n\n const resp: SubscriberPagedResults = {\n subscribers: matchingSubscriptions.map(s => s.subscriberId),\n }\n return HttpResponse.json(resp, { status: 200 })\n },\n ),\n ]\n}\n"],"mappings":";;;;;AAeA,IAAM,IAAsB,IAAI,EAG9B;CACA,aAAa,CAAC,GAAG,GAAoB,GAAG,EAAoB;CAC5D,SAAS;CACT,gBAAgB;CACjB,CAAC;AAEF,SAAS,EACP,GACA,IAA+B,OAC/B,IAAS,GACT,IAAQ,IACR,GAC0B;CAC1B,IAAM,IAAa,EAChB,QAAQ,CACR,QAAO,MACF,IACK,EAAE,eAAe,IAEnB,GACP,CACD,QAAO,MACF,IACK,EAAO,SAAS,EAAE,SAAS,GAE7B,GACP,CACD,MAAM,GAAG,MAAM;EACd,IAAM,IACJ,IAAI,KAAK,EAAE,UAAU,CAAC,SAAS,GAAG,IAAI,KAAK,EAAE,UAAU,CAAC,SAAS;AACnE,SAAO,MAAkB,QAAQ,IAAM,KAAK;GAC5C,EAEE,IAAuB,EAAW;AAExC,QAAO;EACL,SAAS,EAAW,MAAM,GAAQ,IAAS,EAAM;EACjD;EACD;;AAGH,SAAgB,EAAwB,GAAuB;AAC7D,QAAO;EACL,EAAK,IAAI,GAAG,EAAc,6BAA6B,EAAE,iBAAc;GACrE,IAAM,IACH,IAAI,IAAI,EAAQ,IAAI,CAAC,aAAa,IACjC,aACD,IAA+B,KAAA,GAC5B,IACH,IAAI,IAAI,EAAQ,IAAI,CAAC,aAAa,IACjC,gBACD,IAAsB,KAAA,GACnB,IAAc,IAAI,IAAI,EAAQ,IAAI,CAAC,aAAa,IAAI,SAAS,EAC7D,IAAS,IAAc,SAAS,EAAY,GAAG,KAAA,GAC/C,IAAa,IAAI,IAAI,EAAQ,IAAI,CAAC,aAAa,IAAI,QAAQ,EAG3D,IACJ,EAAiB,KAAc,KAAA,GAAW,GAAe,GAH7C,IAAa,SAAS,EAAW,GAAG,KAAA,EAGuB;AAEzE,UAAO,EAAa,KAAK,GAAM,EAAE,QAAQ,KAAK,CAAC;IAC/C;EACF,EAAK,KACH,GAAG,EAAc,6BACjB,OAAO,EAAE,iBAAc;GACrB,IAAM,IAAmC,MAAM,EAAQ,MAAM,EAEvD,IACJ,EACE,EAAY,YACZ,EAAY,eACZ,KAAA,GACA,KAAA,GACA,EAAY,OACb;AAEH,UAAO,EAAa,KAAK,GAAM,EAAE,QAAQ,KAAK,CAAC;IAElD;EACD,EAAK,KACH,GAAG,EAAc,wBACjB,OAAO,EAAE,iBAAc;GACrB,IAAM,IAAqB,MAAM,EAAQ,MAAM,EAEzC,IAAkB,EAAoB,OAAO;IACjD,cAAc;IACd,UAAU,EAAY;IACtB,YAAY,EAAY;IACxB,4BAAW,IAAI,MAAM,EAAC,aAAa;IACpC,CAAC;AACF,UAAO,EAAa,KAAK,GAAiB,EAAE,QAAQ,KAAK,CAAC;IAE7D;EACD,EAAK,OAAO,GAAG,EAAc,6BAA6B,EAAE,gBAAa;GACvE,IAAM,IAAiB,EAAO;AAE9B,UADA,EAAoB,OAAO,EAAe,EACnC,IAAI,SAAS,IAAI,EAAE,QAAQ,KAAK,CAAC;IACxC;EACF,EAAK,KACH,GAAG,EAAc,oCACjB,OAAO,EAAE,iBAAc;GACrB,IAAM,IAAe,MAAM,EAAQ,MAAM,EAOnC,IAA+B,EACnC,aAN4B,EAAoB,SAChD,MACE,EAAE,eAAe,EAAM,cAAc,EAAE,aAAa,EAAM,SAC7D,CAGoC,KAAI,MAAK,EAAE,aAAa,EAC5D;AACD,UAAO,EAAa,KAAK,GAAM,EAAE,QAAQ,KAAK,CAAC;IAElD;EACF"}
1
+ {"version":3,"file":"subscriptionHandlers.js","names":[],"sources":["../../../../src/mocks/msw/handlers/subscriptionHandlers.ts"],"sourcesContent":["import {\n SortDirection,\n SubscriberPagedResults,\n Subscription,\n SubscriptionObjectType,\n SubscriptionPagedResults,\n SubscriptionRequest,\n Topic,\n} from '@sage-bionetworks/synapse-types'\nimport { http, HttpResponse } from 'msw'\nimport { forumSubscriptions, threadSubscriptions } from '../../mockSubscription'\nimport { MOCK_USER_ID } from '../../user/mock_user_profile'\nimport { SynapseApiResponse } from '../handlers'\nimport BasicMockedCrudService from '../util/BasicMockedCrudService'\n\nconst subscriptionService = new BasicMockedCrudService<\n Subscription,\n 'subscriptionId'\n>({\n initialData: [...forumSubscriptions, ...threadSubscriptions],\n idField: 'subscriptionId',\n autoGenerateId: true,\n})\n\nfunction getSubscriptions(\n objectType?: SubscriptionObjectType,\n sortDirection: SortDirection = 'ASC',\n offset = 0,\n limit = 10,\n idList?: string[],\n): SubscriptionPagedResults {\n const allResults = subscriptionService\n .getAll()\n .filter(s => {\n if (objectType) {\n return s.objectType === objectType\n }\n return true\n })\n .filter(s => {\n if (idList) {\n return idList.includes(s.objectId)\n }\n return true\n })\n .sort((a, b) => {\n const val =\n new Date(b.createdOn).getTime() - new Date(a.createdOn).getTime()\n return sortDirection === 'ASC' ? val : -1 * val\n })\n\n const totalNumberOfResults = allResults.length\n\n return {\n results: allResults.slice(offset, offset + limit),\n totalNumberOfResults,\n }\n}\n\nexport function getSubscriptionHandlers(backendOrigin: string) {\n return [\n http.get(`${backendOrigin}/repo/v1/subscription/all`, ({ request }) => {\n const objectType =\n (new URL(request.url).searchParams.get(\n 'objectType',\n ) as SubscriptionObjectType) ?? undefined\n const sortDirection =\n (new URL(request.url).searchParams.get(\n 'sortDirection',\n ) as SortDirection) ?? undefined\n const offsetParam = new URL(request.url).searchParams.get('offset')\n const offset = offsetParam ? parseInt(offsetParam) : undefined\n const limitParam = new URL(request.url).searchParams.get('limit')\n const limit = limitParam ? parseInt(limitParam) : undefined\n\n const resp: SynapseApiResponse<SubscriptionPagedResults> =\n getSubscriptions(objectType ?? undefined, sortDirection, offset, limit)\n\n return HttpResponse.json(resp, { status: 200 })\n }),\n http.post<never, SubscriptionRequest>(\n `${backendOrigin}/repo/v1/subscription/list`,\n async ({ request }) => {\n const requestBody: SubscriptionRequest = await request.json()\n\n const resp: SynapseApiResponse<SubscriptionPagedResults> =\n getSubscriptions(\n requestBody.objectType,\n requestBody.sortDirection,\n undefined,\n undefined,\n requestBody.idList,\n )\n\n return HttpResponse.json(resp, { status: 200 })\n },\n ),\n http.post<never, Topic>(\n `${backendOrigin}/repo/v1/subscription`,\n async ({ request }) => {\n const requestBody: Topic = await request.json()\n\n const newSubscription = subscriptionService.create({\n subscriberId: String(MOCK_USER_ID),\n objectId: requestBody.objectId,\n objectType: requestBody.objectType,\n createdOn: new Date().toISOString(),\n })\n return HttpResponse.json(newSubscription, { status: 201 })\n },\n ),\n http.delete(`${backendOrigin}/repo/v1/subscription/:id`, ({ params }) => {\n const subscriptionId = params.id as string\n subscriptionService.delete(subscriptionId)\n return new Response('', { status: 200 })\n }),\n http.post<never, Topic>(\n `${backendOrigin}/repo/v1/subscription/subscribers`,\n async ({ request }) => {\n const topic: Topic = await request.json()\n\n const matchingSubscriptions = subscriptionService.getMany(\n s =>\n s.objectType === topic.objectType && s.objectId === topic.objectId,\n )\n\n const resp: SubscriberPagedResults = {\n subscribers: matchingSubscriptions.map(s => s.subscriberId),\n }\n return HttpResponse.json(resp, { status: 200 })\n },\n ),\n ]\n}\n"],"mappings":";;;;;AAeA,IAAM,IAAsB,IAAI,EAG9B;CACA,aAAa,CAAC,GAAG,GAAoB,GAAG,EAAoB;CAC5D,SAAS;CACT,gBAAgB;CACjB,CAAC;AAEF,SAAS,EACP,GACA,IAA+B,OAC/B,IAAS,GACT,IAAQ,IACR,GAC0B;CAC1B,IAAM,IAAa,EAChB,QAAQ,CACR,QAAO,MACF,IACK,EAAE,eAAe,IAEnB,GACP,CACD,QAAO,MACF,IACK,EAAO,SAAS,EAAE,SAAS,GAE7B,GACP,CACD,MAAM,GAAG,MAAM;EACd,IAAM,IACJ,IAAI,KAAK,EAAE,UAAU,CAAC,SAAS,GAAG,IAAI,KAAK,EAAE,UAAU,CAAC,SAAS;AACnE,SAAO,MAAkB,QAAQ,IAAM,KAAK;GAC5C,EAEE,IAAuB,EAAW;AAExC,QAAO;EACL,SAAS,EAAW,MAAM,GAAQ,IAAS,EAAM;EACjD;EACD;;AAGH,SAAgB,EAAwB,GAAuB;AAC7D,QAAO;EACL,EAAK,IAAI,GAAG,EAAc,6BAA6B,EAAE,iBAAc;GACrE,IAAM,IACH,IAAI,IAAI,EAAQ,IAAI,CAAC,aAAa,IACjC,aACD,IAA+B,KAAA,GAC5B,IACH,IAAI,IAAI,EAAQ,IAAI,CAAC,aAAa,IACjC,gBACD,IAAsB,KAAA,GACnB,IAAc,IAAI,IAAI,EAAQ,IAAI,CAAC,aAAa,IAAI,SAAS,EAC7D,IAAS,IAAc,SAAS,EAAY,GAAG,KAAA,GAC/C,IAAa,IAAI,IAAI,EAAQ,IAAI,CAAC,aAAa,IAAI,QAAQ,EAG3D,IACJ,EAAiB,KAAc,KAAA,GAAW,GAAe,GAH7C,IAAa,SAAS,EAAW,GAAG,KAAA,EAGuB;AAEzE,UAAO,EAAa,KAAK,GAAM,EAAE,QAAQ,KAAK,CAAC;IAC/C;EACF,EAAK,KACH,GAAG,EAAc,6BACjB,OAAO,EAAE,iBAAc;GACrB,IAAM,IAAmC,MAAM,EAAQ,MAAM,EAEvD,IACJ,EACE,EAAY,YACZ,EAAY,eACZ,KAAA,GACA,KAAA,GACA,EAAY,OACb;AAEH,UAAO,EAAa,KAAK,GAAM,EAAE,QAAQ,KAAK,CAAC;IAElD;EACD,EAAK,KACH,GAAG,EAAc,wBACjB,OAAO,EAAE,iBAAc;GACrB,IAAM,IAAqB,MAAM,EAAQ,MAAM,EAEzC,IAAkB,EAAoB,OAAO;IACjD,cAAc;IACd,UAAU,EAAY;IACtB,YAAY,EAAY;IACxB,4BAAW,IAAI,MAAM,EAAC,aAAa;IACpC,CAAC;AACF,UAAO,EAAa,KAAK,GAAiB,EAAE,QAAQ,KAAK,CAAC;IAE7D;EACD,EAAK,OAAO,GAAG,EAAc,6BAA6B,EAAE,gBAAa;GACvE,IAAM,IAAiB,EAAO;AAE9B,UADA,EAAoB,OAAO,EAAe,EACnC,IAAI,SAAS,IAAI,EAAE,QAAQ,KAAK,CAAC;IACxC;EACF,EAAK,KACH,GAAG,EAAc,oCACjB,OAAO,EAAE,iBAAc;GACrB,IAAM,IAAe,MAAM,EAAQ,MAAM,EAOnC,IAA+B,EACnC,aAN4B,EAAoB,SAChD,MACE,EAAE,eAAe,EAAM,cAAc,EAAE,aAAa,EAAM,SAI/C,CAAsB,KAAI,MAAK,EAAE,aAAa,EAC5D;AACD,UAAO,EAAa,KAAK,GAAM,EAAE,QAAQ,KAAK,CAAC;IAElD;EACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"teamHandlers.js","names":[],"sources":["../../../../src/mocks/msw/handlers/teamHandlers.ts"],"sourcesContent":["import { delay } from '@/synapse-client/HttpClient'\nimport { IdList } from '@sage-bionetworks/synapse-client'\nimport {\n CreateMembershipRequestRequest,\n CreateTeamRequest,\n ListWrapper,\n MembershipInvitation,\n MembershipRequest,\n PaginatedResults,\n Team,\n TeamMembershipStatus,\n} from '@sage-bionetworks/synapse-types'\nimport { uniqueId } from 'lodash-es'\nimport { http, HttpResponse } from 'msw'\nimport {\n mockTeamMembershipInvitations,\n mockTeamMembershipStatuses,\n mockTeams,\n} from '../../team/mockTeam'\nimport { MOCK_USER_ID } from '../../user/mock_user_profile'\nimport { SynapseApiResponse } from '../handlers'\nimport BasicMockedCrudService from '../util/BasicMockedCrudService'\n\nconst mockedTeamService = new BasicMockedCrudService<Team, 'id'>({\n initialData: mockTeams as Team[],\n idField: 'id',\n autoGenerateId: true,\n})\n\nconst mockedTeamMembershipService =\n new BasicMockedCrudService<TeamMembershipStatus>({\n initialData: mockTeamMembershipStatuses as TeamMembershipStatus[],\n })\n\nfunction getTeamMembershipStatusByTeamIdMemberId(\n teamId: string,\n memberId: string,\n): TeamMembershipStatus | undefined {\n return mockedTeamMembershipService.getOneByPredicate(\n membership =>\n membership.teamId === teamId && membership.userId === memberId,\n )\n}\n\nexport function getTeamHandler(backendOrigin: string) {\n return http.get(`${backendOrigin}/repo/v1/team/:teamId`, ({ params }) => {\n const team = mockedTeamService.getOneById(params.teamId as string)\n\n if (team) {\n return HttpResponse.json(team, { status: 200 })\n }\n\n const errorResponse: SynapseApiResponse<ListWrapper<Team>> = {\n concreteType: 'org.sagebionetworks.repo.model.ErrorResponse',\n reason: `Team id: '${params.teamId}' does not exist`,\n }\n return HttpResponse.json(errorResponse, { status: 404 })\n })\n}\n\nexport function getTeamListHandler(backendOrigin: string) {\n return http.post<never, IdList>(\n `${backendOrigin}/repo/v1/teamList`,\n async ({ request }) => {\n const requestBody = await request.json()\n const teams: Team[] = []\n for (const teamId of requestBody.list!) {\n const team = mockedTeamService.getOneById(teamId.toString())\n if (!team) {\n const errorResponse: SynapseApiResponse<ListWrapper<Team>> = {\n concreteType: 'org.sagebionetworks.repo.model.ErrorResponse',\n reason: `Team with id ${teamId} not found`,\n }\n return HttpResponse.json(errorResponse, { status: 404 })\n }\n teams.push(team)\n }\n\n const response: SynapseApiResponse<ListWrapper<Team>> = {\n concreteType: 'org.sagebionetworks.repo.model.Team',\n list: teams,\n }\n\n return HttpResponse.json(response, { status: 200 })\n },\n )\n}\n\nexport function getCreateTeamHandler(backendOrigin: string) {\n return http.post<never, CreateTeamRequest>(\n `${backendOrigin}/repo/v1/team`,\n async ({ request }) => {\n const requestBody: CreateTeamRequest = await request.json()\n\n const createdTeam = mockedTeamService.create({\n ...requestBody,\n createdBy: String(MOCK_USER_ID),\n createdOn: new Date().toISOString(),\n etag: 'etag',\n modifiedBy: String(MOCK_USER_ID),\n modifiedOn: new Date().toISOString(),\n })\n\n mockedTeamMembershipService.create({\n teamId: createdTeam.id,\n userId: String(MOCK_USER_ID),\n isMember: true,\n hasOpenInvitation: false,\n hasOpenRequest: false,\n canJoin: false,\n membershipApprovalRequired: false,\n hasUnmetAccessRequirement: false,\n canSendEmail: true,\n })\n\n // Avoid a race condition where the data in the arrays may not have updated before subsequent calls are made by the client\n await delay(250)\n\n return HttpResponse.json(createdTeam, { status: 201 })\n },\n )\n}\n\nexport function getTeamMembershipStatusHandler(backendOrigin: string) {\n return http.get(\n `${backendOrigin}/repo/v1/team/:teamId/member/:memberId/membershipStatus`,\n ({ params }) => {\n const teamId = params.teamId as string\n const memberId = params.memberId as string\n let response: SynapseApiResponse<TeamMembershipStatus>\n let status: number\n\n const team = mockedTeamService.getOneById(teamId)\n if (!team) {\n response = {\n concreteType: 'org.sagebionetworks.repo.model.ErrorResponse',\n reason: `getTeamMembershipStatusHandler could not locate a team with ID ${teamId}`,\n }\n status = 404\n } else {\n const membershipStatus: TeamMembershipStatus =\n getTeamMembershipStatusByTeamIdMemberId(teamId, memberId) ?? {\n teamId: teamId,\n userId: memberId,\n isMember: false,\n hasOpenInvitation: false, // TODO\n hasOpenRequest: false, // TODO\n canJoin: true, // TODO\n membershipApprovalRequired: false, // TODO\n hasUnmetAccessRequirement: false, // TODO\n canSendEmail: false, // TODO\n }\n\n response = membershipStatus\n status = 200\n }\n return HttpResponse.json(response, { status })\n },\n )\n}\n\nexport function getUpdateTeamMembershipStatusHandler(\n backendOrigin: string,\n mockedInvitationService: BasicMockedCrudService<MembershipInvitation, 'id'>,\n) {\n return http.put(\n `${backendOrigin}/repo/v1/team/:teamId/member/:memberId`,\n ({ params }) => {\n const teamId = params.teamId as string\n const memberId = params.memberId as string\n let response: SynapseApiResponse<void> | ''\n let status: number\n\n const team = mockedTeamService.getOneById(teamId)\n if (!team) {\n response = {\n concreteType: 'org.sagebionetworks.repo.model.ErrorResponse',\n reason: `getTeamMembershipStatusHandler could not locate a team with ID ${teamId}`,\n }\n status = 404\n } else {\n const membershipStatus: TeamMembershipStatus = {\n teamId: teamId,\n userId: memberId,\n isMember: true,\n hasOpenInvitation: false, // TODO\n hasOpenRequest: false, // TODO\n canJoin: true, // TODO\n membershipApprovalRequired: false, // TODO\n hasUnmetAccessRequirement: false, // TODO\n canSendEmail: false, // TODO\n }\n mockedTeamMembershipService.create(membershipStatus)\n // Remove any open invitation for this user/team so subsequent GET reflects the accepted state\n const invitation = mockedInvitationService.getOneByPredicate(\n inv => inv.teamId === teamId && inv.inviteeId === memberId,\n )\n if (invitation?.id) {\n mockedInvitationService.delete(invitation.id)\n }\n response = ''\n status = 201\n }\n return HttpResponse.json(response, { status })\n },\n )\n}\n\nexport function getCreateTeamMembershipRequestHandler(backendOrigin: string) {\n return http.post<never, CreateMembershipRequestRequest>(\n `${backendOrigin}/repo/v1/membershipRequest`,\n async ({ request }) => {\n const requestBody: CreateMembershipRequestRequest = await request.json()\n\n const response: SynapseApiResponse<MembershipRequest> = {\n ...requestBody,\n id: uniqueId(),\n createdOn: new Date().toISOString(),\n createdBy: String(MOCK_USER_ID),\n }\n return HttpResponse.json(response, { status: 201 })\n },\n )\n}\n\nexport function getOpenInvitationsForUserHandler(\n backendOrigin: string,\n mockedInvitationService: BasicMockedCrudService<MembershipInvitation, 'id'>,\n) {\n return http.get(\n `${backendOrigin}/repo/v1/user/:userId/openInvitation`,\n ({ params }) => {\n const userInvitations = mockedInvitationService.getMany(\n inv => String(inv.inviteeId) === String(params.userId),\n )\n const response: SynapseApiResponse<\n PaginatedResults<MembershipInvitation>\n > = {\n results: userInvitations,\n totalNumberOfResults: userInvitations.length,\n }\n return HttpResponse.json(response, { status: 200 })\n },\n )\n}\n\nexport function getDeleteMembershipInvitationHandler(\n backendOrigin: string,\n mockedInvitationService: BasicMockedCrudService<MembershipInvitation, 'id'>,\n) {\n return http.delete(\n `${backendOrigin}/repo/v1/membershipInvitation/:invitationId`,\n ({ params }) => {\n const invitationId = params.invitationId as string\n const invitation = mockedInvitationService.getOneById(invitationId)\n if (!invitation) {\n const errorResponse: SynapseApiResponse<void> = {\n concreteType: 'org.sagebionetworks.repo.model.ErrorResponse',\n reason: `Membership invitation with ID ${invitationId} not found`,\n }\n return HttpResponse.json(errorResponse, { status: 404 })\n }\n mockedInvitationService.delete(invitationId)\n return new HttpResponse(null, { status: 204 })\n },\n )\n}\n\nexport default function getAllTeamHandlers(\n backendOrigin: string,\n initialInvitations: MembershipInvitation[] = [\n ...mockTeamMembershipInvitations,\n ],\n) {\n const mockedInvitationService = new BasicMockedCrudService<\n MembershipInvitation,\n 'id'\n >({\n initialData: initialInvitations,\n idField: 'id',\n })\n\n return [\n getTeamHandler(backendOrigin),\n getTeamListHandler(backendOrigin),\n getCreateTeamHandler(backendOrigin),\n getTeamMembershipStatusHandler(backendOrigin),\n getUpdateTeamMembershipStatusHandler(\n backendOrigin,\n mockedInvitationService,\n ),\n getCreateTeamMembershipRequestHandler(backendOrigin),\n getOpenInvitationsForUserHandler(backendOrigin, mockedInvitationService),\n getDeleteMembershipInvitationHandler(\n backendOrigin,\n mockedInvitationService,\n ),\n ]\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"teamHandlers.js","names":[],"sources":["../../../../src/mocks/msw/handlers/teamHandlers.ts"],"sourcesContent":["import { delay } from '@/synapse-client/HttpClient'\nimport { IdList } from '@sage-bionetworks/synapse-client'\nimport {\n CreateMembershipRequestRequest,\n CreateTeamRequest,\n ListWrapper,\n MembershipInvitation,\n MembershipRequest,\n PaginatedResults,\n Team,\n TeamMembershipStatus,\n} from '@sage-bionetworks/synapse-types'\nimport { uniqueId } from 'lodash-es'\nimport { http, HttpResponse } from 'msw'\nimport {\n mockTeamMembershipInvitations,\n mockTeamMembershipStatuses,\n mockTeams,\n} from '../../team/mockTeam'\nimport { MOCK_USER_ID } from '../../user/mock_user_profile'\nimport { SynapseApiResponse } from '../handlers'\nimport BasicMockedCrudService from '../util/BasicMockedCrudService'\n\nconst mockedTeamService = new BasicMockedCrudService<Team, 'id'>({\n initialData: mockTeams as Team[],\n idField: 'id',\n autoGenerateId: true,\n})\n\nconst mockedTeamMembershipService =\n new BasicMockedCrudService<TeamMembershipStatus>({\n initialData: mockTeamMembershipStatuses as TeamMembershipStatus[],\n })\n\nfunction getTeamMembershipStatusByTeamIdMemberId(\n teamId: string,\n memberId: string,\n): TeamMembershipStatus | undefined {\n return mockedTeamMembershipService.getOneByPredicate(\n membership =>\n membership.teamId === teamId && membership.userId === memberId,\n )\n}\n\nexport function getTeamHandler(backendOrigin: string) {\n return http.get(`${backendOrigin}/repo/v1/team/:teamId`, ({ params }) => {\n const team = mockedTeamService.getOneById(params.teamId as string)\n\n if (team) {\n return HttpResponse.json(team, { status: 200 })\n }\n\n const errorResponse: SynapseApiResponse<ListWrapper<Team>> = {\n concreteType: 'org.sagebionetworks.repo.model.ErrorResponse',\n reason: `Team id: '${params.teamId}' does not exist`,\n }\n return HttpResponse.json(errorResponse, { status: 404 })\n })\n}\n\nexport function getTeamListHandler(backendOrigin: string) {\n return http.post<never, IdList>(\n `${backendOrigin}/repo/v1/teamList`,\n async ({ request }) => {\n const requestBody = await request.json()\n const teams: Team[] = []\n for (const teamId of requestBody.list!) {\n const team = mockedTeamService.getOneById(teamId.toString())\n if (!team) {\n const errorResponse: SynapseApiResponse<ListWrapper<Team>> = {\n concreteType: 'org.sagebionetworks.repo.model.ErrorResponse',\n reason: `Team with id ${teamId} not found`,\n }\n return HttpResponse.json(errorResponse, { status: 404 })\n }\n teams.push(team)\n }\n\n const response: SynapseApiResponse<ListWrapper<Team>> = {\n concreteType: 'org.sagebionetworks.repo.model.Team',\n list: teams,\n }\n\n return HttpResponse.json(response, { status: 200 })\n },\n )\n}\n\nexport function getCreateTeamHandler(backendOrigin: string) {\n return http.post<never, CreateTeamRequest>(\n `${backendOrigin}/repo/v1/team`,\n async ({ request }) => {\n const requestBody: CreateTeamRequest = await request.json()\n\n const createdTeam = mockedTeamService.create({\n ...requestBody,\n createdBy: String(MOCK_USER_ID),\n createdOn: new Date().toISOString(),\n etag: 'etag',\n modifiedBy: String(MOCK_USER_ID),\n modifiedOn: new Date().toISOString(),\n })\n\n mockedTeamMembershipService.create({\n teamId: createdTeam.id,\n userId: String(MOCK_USER_ID),\n isMember: true,\n hasOpenInvitation: false,\n hasOpenRequest: false,\n canJoin: false,\n membershipApprovalRequired: false,\n hasUnmetAccessRequirement: false,\n canSendEmail: true,\n })\n\n // Avoid a race condition where the data in the arrays may not have updated before subsequent calls are made by the client\n await delay(250)\n\n return HttpResponse.json(createdTeam, { status: 201 })\n },\n )\n}\n\nexport function getTeamMembershipStatusHandler(backendOrigin: string) {\n return http.get(\n `${backendOrigin}/repo/v1/team/:teamId/member/:memberId/membershipStatus`,\n ({ params }) => {\n const teamId = params.teamId as string\n const memberId = params.memberId as string\n let response: SynapseApiResponse<TeamMembershipStatus>\n let status: number\n\n const team = mockedTeamService.getOneById(teamId)\n if (!team) {\n response = {\n concreteType: 'org.sagebionetworks.repo.model.ErrorResponse',\n reason: `getTeamMembershipStatusHandler could not locate a team with ID ${teamId}`,\n }\n status = 404\n } else {\n const membershipStatus: TeamMembershipStatus =\n getTeamMembershipStatusByTeamIdMemberId(teamId, memberId) ?? {\n teamId: teamId,\n userId: memberId,\n isMember: false,\n hasOpenInvitation: false, // TODO\n hasOpenRequest: false, // TODO\n canJoin: true, // TODO\n membershipApprovalRequired: false, // TODO\n hasUnmetAccessRequirement: false, // TODO\n canSendEmail: false, // TODO\n }\n\n response = membershipStatus\n status = 200\n }\n return HttpResponse.json(response, { status })\n },\n )\n}\n\nexport function getUpdateTeamMembershipStatusHandler(\n backendOrigin: string,\n mockedInvitationService: BasicMockedCrudService<MembershipInvitation, 'id'>,\n) {\n return http.put(\n `${backendOrigin}/repo/v1/team/:teamId/member/:memberId`,\n ({ params }) => {\n const teamId = params.teamId as string\n const memberId = params.memberId as string\n let response: SynapseApiResponse<void> | ''\n let status: number\n\n const team = mockedTeamService.getOneById(teamId)\n if (!team) {\n response = {\n concreteType: 'org.sagebionetworks.repo.model.ErrorResponse',\n reason: `getTeamMembershipStatusHandler could not locate a team with ID ${teamId}`,\n }\n status = 404\n } else {\n const membershipStatus: TeamMembershipStatus = {\n teamId: teamId,\n userId: memberId,\n isMember: true,\n hasOpenInvitation: false, // TODO\n hasOpenRequest: false, // TODO\n canJoin: true, // TODO\n membershipApprovalRequired: false, // TODO\n hasUnmetAccessRequirement: false, // TODO\n canSendEmail: false, // TODO\n }\n mockedTeamMembershipService.create(membershipStatus)\n // Remove any open invitation for this user/team so subsequent GET reflects the accepted state\n const invitation = mockedInvitationService.getOneByPredicate(\n inv => inv.teamId === teamId && inv.inviteeId === memberId,\n )\n if (invitation?.id) {\n mockedInvitationService.delete(invitation.id)\n }\n response = ''\n status = 201\n }\n return HttpResponse.json(response, { status })\n },\n )\n}\n\nexport function getCreateTeamMembershipRequestHandler(backendOrigin: string) {\n return http.post<never, CreateMembershipRequestRequest>(\n `${backendOrigin}/repo/v1/membershipRequest`,\n async ({ request }) => {\n const requestBody: CreateMembershipRequestRequest = await request.json()\n\n const response: SynapseApiResponse<MembershipRequest> = {\n ...requestBody,\n id: uniqueId(),\n createdOn: new Date().toISOString(),\n createdBy: String(MOCK_USER_ID),\n }\n return HttpResponse.json(response, { status: 201 })\n },\n )\n}\n\nexport function getOpenInvitationsForUserHandler(\n backendOrigin: string,\n mockedInvitationService: BasicMockedCrudService<MembershipInvitation, 'id'>,\n) {\n return http.get(\n `${backendOrigin}/repo/v1/user/:userId/openInvitation`,\n ({ params }) => {\n const userInvitations = mockedInvitationService.getMany(\n inv => String(inv.inviteeId) === String(params.userId),\n )\n const response: SynapseApiResponse<\n PaginatedResults<MembershipInvitation>\n > = {\n results: userInvitations,\n totalNumberOfResults: userInvitations.length,\n }\n return HttpResponse.json(response, { status: 200 })\n },\n )\n}\n\nexport function getDeleteMembershipInvitationHandler(\n backendOrigin: string,\n mockedInvitationService: BasicMockedCrudService<MembershipInvitation, 'id'>,\n) {\n return http.delete(\n `${backendOrigin}/repo/v1/membershipInvitation/:invitationId`,\n ({ params }) => {\n const invitationId = params.invitationId as string\n const invitation = mockedInvitationService.getOneById(invitationId)\n if (!invitation) {\n const errorResponse: SynapseApiResponse<void> = {\n concreteType: 'org.sagebionetworks.repo.model.ErrorResponse',\n reason: `Membership invitation with ID ${invitationId} not found`,\n }\n return HttpResponse.json(errorResponse, { status: 404 })\n }\n mockedInvitationService.delete(invitationId)\n return new HttpResponse(null, { status: 204 })\n },\n )\n}\n\nexport default function getAllTeamHandlers(\n backendOrigin: string,\n initialInvitations: MembershipInvitation[] = [\n ...mockTeamMembershipInvitations,\n ],\n) {\n const mockedInvitationService = new BasicMockedCrudService<\n MembershipInvitation,\n 'id'\n >({\n initialData: initialInvitations,\n idField: 'id',\n })\n\n return [\n getTeamHandler(backendOrigin),\n getTeamListHandler(backendOrigin),\n getCreateTeamHandler(backendOrigin),\n getTeamMembershipStatusHandler(backendOrigin),\n getUpdateTeamMembershipStatusHandler(\n backendOrigin,\n mockedInvitationService,\n ),\n getCreateTeamMembershipRequestHandler(backendOrigin),\n getOpenInvitationsForUserHandler(backendOrigin, mockedInvitationService),\n getDeleteMembershipInvitationHandler(\n backendOrigin,\n mockedInvitationService,\n ),\n ]\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"userProfileHandlers.js","names":[],"sources":["../../../../src/mocks/msw/handlers/userProfileHandlers.ts"],"sourcesContent":["import { UserProfileList } from '@/synapse-client/SynapseClient'\nimport {\n FAVORITES,\n NOTIFICATION_EMAIL,\n PROFILE_IMAGE_PREVIEW,\n USER_BUNDLE,\n USER_GROUP_HEADERS,\n USER_GROUP_HEADERS_BATCH,\n USER_ID_BUNDLE,\n USER_PROFILE,\n USER_PROFILE_ID,\n} from '@/utils/APIConstants'\nimport { IdList } from '@sage-bionetworks/synapse-client'\nimport {\n TwoFactorAuthStatus,\n TYPE_FILTER,\n UserBundle,\n UserGroupHeaderResponsePage,\n UserProfile,\n} from '@sage-bionetworks/synapse-types'\nimport { http, HttpResponse } from 'msw'\nimport { mockPaginatedEntityHeaders } from '../../entity/mockEntity'\nimport {\n mockUserBundle,\n mockUserData,\n mockUserProfileData,\n} from '../../user/mock_user_profile'\nimport { mockUserGroupData } from '../../usergroup/mockUserGroup'\nimport { SynapseApiResponse } from '../handlers'\n\nexport const getUserProfileHandlers = (backendOrigin: string) => [\n /**\n * Get User Profile by ID\n */\n http.get(`${backendOrigin}${USER_PROFILE_ID(':id')}`, ({ params }) => {\n let status = 404\n let response: SynapseApiResponse<UserProfile> = {\n concreteType: 'org.sagebionetworks.repo.model.ErrorResponse',\n reason: `Mock Service worker could not find a user profile with ID ${params.id}`,\n }\n const match = mockUserData.find(\n userData => userData.id.toString() === params.id,\n )\n if (match && match.userProfile) {\n response = match.userProfile\n status = 200\n }\n return HttpResponse.json(response, { status })\n }),\n\n /**\n * Get the caller's user profile\n */\n http.get(`${backendOrigin}${USER_PROFILE}`, () => {\n // default return a mock UserProfile.\n const response: UserProfile = mockUserProfileData\n const status = 200\n return HttpResponse.json(response, { status })\n }),\n\n /**\n * Get the caller's user bundle\n */\n http.get(`${backendOrigin}${USER_BUNDLE}`, () => {\n const result: UserBundle = mockUserBundle\n return HttpResponse.json(result, { status: 200 })\n }),\n\n /**\n * Get a user bundle by ID\n */\n http.get(`${backendOrigin}${USER_ID_BUNDLE(':id')}`, ({ params }) => {\n let status = 404\n let response: SynapseApiResponse<UserBundle> = {\n concreteType: 'org.sagebionetworks.repo.model.ErrorResponse',\n reason: `Mock Service worker could not find a user bundle with ID ${params.id}`,\n }\n const match = mockUserData.find(\n userData => userData.id.toString() === params.id,\n )\n if (match && match.userBundle) {\n response = match.userBundle\n status = 200\n }\n return HttpResponse.json(response, { status })\n }),\n\n /**\n * Get the caller's favorites\n */\n http.get(`${backendOrigin}${FAVORITES}`, () => {\n return HttpResponse.json(mockPaginatedEntityHeaders, { status: 200 })\n }),\n\n /**\n * Get a batch of user group headers\n */\n http.get(`${backendOrigin}${USER_GROUP_HEADERS_BATCH}`, ({ request }) => {\n const ids = new URL(request.url).searchParams.get('ids')!.split(',')\n const responsePage: UserGroupHeaderResponsePage = {\n children: mockUserGroupData\n .filter(userData => ids.includes(userData.id.toString()))\n .map(userData => userData.userGroupHeader),\n }\n return HttpResponse.json(responsePage, { status: 200 })\n }),\n\n /**\n * Get a batch of user profiles\n */\n http.post<never, IdList>(\n `${backendOrigin}${USER_PROFILE}`,\n async ({ request }) => {\n const requestedList = ((await request.json()).list ?? []).map(String)\n const responsePage: UserProfileList = {\n list: mockUserData\n .filter(userData => requestedList.includes(userData.id.toString()))\n .map(userData => userData.userProfile)\n .filter(\n (userProfile): userProfile is UserProfile => userProfile != null,\n ),\n }\n return HttpResponse.json(responsePage, { status: 200 })\n },\n ),\n\n /**\n * Get userGroupHeaders by prefix\n */\n http.get(`${backendOrigin}${USER_GROUP_HEADERS}`, ({ request }) => {\n const prefix = (\n new URL(request.url).searchParams.get('prefix') ?? ''\n ).toLowerCase()\n const typeFilter = new URL(request.url).searchParams.get(\n 'typeFilter',\n ) as TYPE_FILTER\n const responsePage: UserGroupHeaderResponsePage = {\n children: mockUserGroupData\n .filter(userData => {\n if (!typeFilter || typeFilter === TYPE_FILTER.ALL) {\n return true\n } else if (typeFilter === TYPE_FILTER.USERS_ONLY) {\n return userData.userGroupHeader.isIndividual\n } else {\n return !userData.userGroupHeader.isIndividual\n }\n })\n .filter(\n userData =>\n userData.userGroupHeader.userName\n .toLowerCase()\n .startsWith(prefix) ||\n (userData.userGroupHeader.firstName || '')\n .toLowerCase()\n .startsWith(prefix) ||\n (userData.userGroupHeader.displayName || '')\n .toLowerCase()\n .startsWith(prefix) ||\n (userData.userGroupHeader.lastName || '')\n .toLowerCase()\n .startsWith(prefix),\n )\n .map(userData => userData.userGroupHeader),\n }\n return HttpResponse.json(responsePage, { status: 200 })\n }),\n\n /**\n * Return a 404 when fetching the profile image\n */\n http.get(`${backendOrigin}${PROFILE_IMAGE_PREVIEW(':userId')}`, () => {\n return HttpResponse.json(\n { reason: 'user has no profile image' },\n { status: 404 },\n )\n }),\n\n http.get(`${backendOrigin}${NOTIFICATION_EMAIL}`, () => {\n return HttpResponse.json(\n { email: mockUserBundle.userProfile?.email },\n { status: 200 },\n )\n }),\n\n http.get(`${backendOrigin}/auth/v1/2fa`, () => {\n const response: TwoFactorAuthStatus = {\n status: 'ENABLED',\n }\n return HttpResponse.json(response, { status: 200 })\n }),\n]\n\nexport function getCurrentUserCertifiedValidatedHandler(\n backendOrigin: string,\n isCertified: boolean,\n isValidated: boolean,\n) {\n return http.get(`${backendOrigin}${USER_BUNDLE}`, () => {\n const status = 200\n const response: UserBundle = {\n ...mockUserBundle,\n isCertified: isCertified,\n isVerified: isValidated,\n }\n\n return HttpResponse.json(response, { status })\n })\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"userProfileHandlers.js","names":[],"sources":["../../../../src/mocks/msw/handlers/userProfileHandlers.ts"],"sourcesContent":["import { UserProfileList } from '@/synapse-client/SynapseClient'\nimport {\n FAVORITES,\n NOTIFICATION_EMAIL,\n PROFILE_IMAGE_PREVIEW,\n USER_BUNDLE,\n USER_GROUP_HEADERS,\n USER_GROUP_HEADERS_BATCH,\n USER_ID_BUNDLE,\n USER_PROFILE,\n USER_PROFILE_ID,\n} from '@/utils/APIConstants'\nimport { IdList } from '@sage-bionetworks/synapse-client'\nimport {\n TwoFactorAuthStatus,\n TYPE_FILTER,\n UserBundle,\n UserGroupHeaderResponsePage,\n UserProfile,\n} from '@sage-bionetworks/synapse-types'\nimport { http, HttpResponse } from 'msw'\nimport { mockPaginatedEntityHeaders } from '../../entity/mockEntity'\nimport {\n mockUserBundle,\n mockUserData,\n mockUserProfileData,\n} from '../../user/mock_user_profile'\nimport { mockUserGroupData } from '../../usergroup/mockUserGroup'\nimport { SynapseApiResponse } from '../handlers'\n\nexport const getUserProfileHandlers = (backendOrigin: string) => [\n /**\n * Get User Profile by ID\n */\n http.get(`${backendOrigin}${USER_PROFILE_ID(':id')}`, ({ params }) => {\n let status = 404\n let response: SynapseApiResponse<UserProfile> = {\n concreteType: 'org.sagebionetworks.repo.model.ErrorResponse',\n reason: `Mock Service worker could not find a user profile with ID ${params.id}`,\n }\n const match = mockUserData.find(\n userData => userData.id.toString() === params.id,\n )\n if (match && match.userProfile) {\n response = match.userProfile\n status = 200\n }\n return HttpResponse.json(response, { status })\n }),\n\n /**\n * Get the caller's user profile\n */\n http.get(`${backendOrigin}${USER_PROFILE}`, () => {\n // default return a mock UserProfile.\n const response: UserProfile = mockUserProfileData\n const status = 200\n return HttpResponse.json(response, { status })\n }),\n\n /**\n * Get the caller's user bundle\n */\n http.get(`${backendOrigin}${USER_BUNDLE}`, () => {\n const result: UserBundle = mockUserBundle\n return HttpResponse.json(result, { status: 200 })\n }),\n\n /**\n * Get a user bundle by ID\n */\n http.get(`${backendOrigin}${USER_ID_BUNDLE(':id')}`, ({ params }) => {\n let status = 404\n let response: SynapseApiResponse<UserBundle> = {\n concreteType: 'org.sagebionetworks.repo.model.ErrorResponse',\n reason: `Mock Service worker could not find a user bundle with ID ${params.id}`,\n }\n const match = mockUserData.find(\n userData => userData.id.toString() === params.id,\n )\n if (match && match.userBundle) {\n response = match.userBundle\n status = 200\n }\n return HttpResponse.json(response, { status })\n }),\n\n /**\n * Get the caller's favorites\n */\n http.get(`${backendOrigin}${FAVORITES}`, () => {\n return HttpResponse.json(mockPaginatedEntityHeaders, { status: 200 })\n }),\n\n /**\n * Get a batch of user group headers\n */\n http.get(`${backendOrigin}${USER_GROUP_HEADERS_BATCH}`, ({ request }) => {\n const ids = new URL(request.url).searchParams.get('ids')!.split(',')\n const responsePage: UserGroupHeaderResponsePage = {\n children: mockUserGroupData\n .filter(userData => ids.includes(userData.id.toString()))\n .map(userData => userData.userGroupHeader),\n }\n return HttpResponse.json(responsePage, { status: 200 })\n }),\n\n /**\n * Get a batch of user profiles\n */\n http.post<never, IdList>(\n `${backendOrigin}${USER_PROFILE}`,\n async ({ request }) => {\n const requestedList = ((await request.json()).list ?? []).map(String)\n const responsePage: UserProfileList = {\n list: mockUserData\n .filter(userData => requestedList.includes(userData.id.toString()))\n .map(userData => userData.userProfile)\n .filter(\n (userProfile): userProfile is UserProfile => userProfile != null,\n ),\n }\n return HttpResponse.json(responsePage, { status: 200 })\n },\n ),\n\n /**\n * Get userGroupHeaders by prefix\n */\n http.get(`${backendOrigin}${USER_GROUP_HEADERS}`, ({ request }) => {\n const prefix = (\n new URL(request.url).searchParams.get('prefix') ?? ''\n ).toLowerCase()\n const typeFilter = new URL(request.url).searchParams.get(\n 'typeFilter',\n ) as TYPE_FILTER\n const responsePage: UserGroupHeaderResponsePage = {\n children: mockUserGroupData\n .filter(userData => {\n if (!typeFilter || typeFilter === TYPE_FILTER.ALL) {\n return true\n } else if (typeFilter === TYPE_FILTER.USERS_ONLY) {\n return userData.userGroupHeader.isIndividual\n } else {\n return !userData.userGroupHeader.isIndividual\n }\n })\n .filter(\n userData =>\n userData.userGroupHeader.userName\n .toLowerCase()\n .startsWith(prefix) ||\n (userData.userGroupHeader.firstName || '')\n .toLowerCase()\n .startsWith(prefix) ||\n (userData.userGroupHeader.displayName || '')\n .toLowerCase()\n .startsWith(prefix) ||\n (userData.userGroupHeader.lastName || '')\n .toLowerCase()\n .startsWith(prefix),\n )\n .map(userData => userData.userGroupHeader),\n }\n return HttpResponse.json(responsePage, { status: 200 })\n }),\n\n /**\n * Return a 404 when fetching the profile image\n */\n http.get(`${backendOrigin}${PROFILE_IMAGE_PREVIEW(':userId')}`, () => {\n return HttpResponse.json(\n { reason: 'user has no profile image' },\n { status: 404 },\n )\n }),\n\n http.get(`${backendOrigin}${NOTIFICATION_EMAIL}`, () => {\n return HttpResponse.json(\n { email: mockUserBundle.userProfile?.email },\n { status: 200 },\n )\n }),\n\n http.get(`${backendOrigin}/auth/v1/2fa`, () => {\n const response: TwoFactorAuthStatus = {\n status: 'ENABLED',\n }\n return HttpResponse.json(response, { status: 200 })\n }),\n]\n\nexport function getCurrentUserCertifiedValidatedHandler(\n backendOrigin: string,\n isCertified: boolean,\n isValidated: boolean,\n) {\n return http.get(`${backendOrigin}${USER_BUNDLE}`, () => {\n const status = 200\n const response: UserBundle = {\n ...mockUserBundle,\n isCertified: isCertified,\n isVerified: isValidated,\n }\n\n return HttpResponse.json(response, { status })\n })\n}\n"],"mappings":"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"}