@rynt/sdk 0.9.53

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 (332) hide show
  1. package/README.md +122 -0
  2. package/REGISTRIES.md +189 -0
  3. package/env.d.ts +11 -0
  4. package/host-shims.d.ts +30 -0
  5. package/package.json +88 -0
  6. package/src/extension-marketplace/api-types.ts +141 -0
  7. package/src/extension-marketplace/client.ts +296 -0
  8. package/src/extension-marketplace/index.ts +22 -0
  9. package/src/extension-marketplace/schemas.ts +178 -0
  10. package/src/extensions/ExtensionRoutePage.vue +17 -0
  11. package/src/extensions/context.ts +37 -0
  12. package/src/extensions/disabled-folder.ts +21 -0
  13. package/src/extensions/extension-expose-map.ts +5 -0
  14. package/src/extensions/extension-expose.ts +48 -0
  15. package/src/extensions/graph.ts +67 -0
  16. package/src/extensions/index.ts +251 -0
  17. package/src/extensions/invite-handler/types.ts +20 -0
  18. package/src/extensions/launcher-entities/create-launcher-entity.ts +25 -0
  19. package/src/extensions/launcher-entities/keys.ts +46 -0
  20. package/src/extensions/launcher-entities/launcher-entity-components.ts +177 -0
  21. package/src/extensions/launcher-entities/props-map.ts +69 -0
  22. package/src/extensions/launcher-entities/registry.ts +32 -0
  23. package/src/extensions/launcher-models/apis/accounts-contracts.ts +102 -0
  24. package/src/extensions/launcher-models/apis/launcher-model-apis.ts +553 -0
  25. package/src/extensions/launcher-models/keys.ts +23 -0
  26. package/src/extensions/launcher-models/public.ts +9 -0
  27. package/src/extensions/launcher-models/registry-core.ts +34 -0
  28. package/src/extensions/manifest-types.ts +22 -0
  29. package/src/extensions/manifest.ts +46 -0
  30. package/src/extensions/marketplace-open-key.ts +26 -0
  31. package/src/extensions/plugin-types.ts +44 -0
  32. package/src/extensions/plugin.ts +62 -0
  33. package/src/extensions/registries/bootstrap.ts +11 -0
  34. package/src/extensions/registries/builtins/account-provider.ts +6 -0
  35. package/src/extensions/registries/builtins/app-topbar-left-widgets.ts +6 -0
  36. package/src/extensions/registries/builtins/app-topbar-right-widgets.ts +6 -0
  37. package/src/extensions/registries/builtins/app-topbar-status-widgets.ts +6 -0
  38. package/src/extensions/registries/builtins/build-card-actions.ts +6 -0
  39. package/src/extensions/registries/builtins/build-card-after-meta.ts +6 -0
  40. package/src/extensions/registries/builtins/build-card-before-media.ts +6 -0
  41. package/src/extensions/registries/builtins/build-card-before-meta.ts +6 -0
  42. package/src/extensions/registries/builtins/build-card-footer-actions.ts +6 -0
  43. package/src/extensions/registries/builtins/build-detail-after-content.ts +6 -0
  44. package/src/extensions/registries/builtins/build-detail-before-content.ts +6 -0
  45. package/src/extensions/registries/builtins/build-detail-before-hero.ts +6 -0
  46. package/src/extensions/registries/builtins/build-detail-header-actions.ts +6 -0
  47. package/src/extensions/registries/builtins/build-detail-mod-row-actions.ts +6 -0
  48. package/src/extensions/registries/builtins/build-detail-resourcepack-row-actions.ts +6 -0
  49. package/src/extensions/registries/builtins/build-detail-right-column-bottom.ts +6 -0
  50. package/src/extensions/registries/builtins/build-detail-right-column-top.ts +6 -0
  51. package/src/extensions/registries/builtins/dialog-footer-actions.ts +6 -0
  52. package/src/extensions/registries/builtins/feed-after-content.ts +6 -0
  53. package/src/extensions/registries/builtins/feed-before-content.ts +6 -0
  54. package/src/extensions/registries/builtins/file-editor.ts +19 -0
  55. package/src/extensions/registries/builtins/friends-after-list.ts +6 -0
  56. package/src/extensions/registries/builtins/friends-before-list.ts +6 -0
  57. package/src/extensions/registries/builtins/index.ts +141 -0
  58. package/src/extensions/registries/builtins/invite-handler.ts +7 -0
  59. package/src/extensions/registries/builtins/library-after-content.ts +6 -0
  60. package/src/extensions/registries/builtins/library-before-content.ts +6 -0
  61. package/src/extensions/registries/builtins/loader.ts +8 -0
  62. package/src/extensions/registries/builtins/map-card-actions.ts +6 -0
  63. package/src/extensions/registries/builtins/map-card-after-meta.ts +6 -0
  64. package/src/extensions/registries/builtins/map-card-before-meta.ts +6 -0
  65. package/src/extensions/registries/builtins/map-card-footer-actions.ts +6 -0
  66. package/src/extensions/registries/builtins/map-detail-after-content.ts +6 -0
  67. package/src/extensions/registries/builtins/map-detail-before-content.ts +6 -0
  68. package/src/extensions/registries/builtins/map-detail-header-actions.ts +6 -0
  69. package/src/extensions/registries/builtins/markdown-editor-tiptap-extensions.ts +7 -0
  70. package/src/extensions/registries/builtins/markdown-editor-toolbar-actions.ts +6 -0
  71. package/src/extensions/registries/builtins/markdown-renderer-after-content.ts +6 -0
  72. package/src/extensions/registries/builtins/markdown-renderer-before-content.ts +6 -0
  73. package/src/extensions/registries/builtins/mod-details-footer-actions.ts +6 -0
  74. package/src/extensions/registries/builtins/mod-manage-actions.ts +6 -0
  75. package/src/extensions/registries/builtins/mod-provider.ts +5 -0
  76. package/src/extensions/registries/builtins/nav.ts +7 -0
  77. package/src/extensions/registries/builtins/page.ts +13 -0
  78. package/src/extensions/registries/builtins/projects-after-content.ts +6 -0
  79. package/src/extensions/registries/builtins/projects-before-content.ts +6 -0
  80. package/src/extensions/registries/builtins/resourcepack-manage-actions.ts +7 -0
  81. package/src/extensions/registries/builtins/server-card-actions.ts +6 -0
  82. package/src/extensions/registries/builtins/server-card-after-meta.ts +6 -0
  83. package/src/extensions/registries/builtins/server-card-before-meta.ts +6 -0
  84. package/src/extensions/registries/builtins/server-card-footer-actions.ts +6 -0
  85. package/src/extensions/registries/builtins/server-detail-after-content.ts +6 -0
  86. package/src/extensions/registries/builtins/server-detail-before-content.ts +6 -0
  87. package/src/extensions/registries/builtins/server-detail-header-actions.ts +6 -0
  88. package/src/extensions/registries/builtins/settings-after-sections.ts +6 -0
  89. package/src/extensions/registries/builtins/settings-before-sections.ts +6 -0
  90. package/src/extensions/registries/builtins/settings-section-widgets.ts +6 -0
  91. package/src/extensions/registries/builtins/shaderpack-manage-actions.ts +7 -0
  92. package/src/extensions/registries/builtins/shell.ts +5 -0
  93. package/src/extensions/registries/builtins/sidebar-after-content.ts +6 -0
  94. package/src/extensions/registries/builtins/sidebar-before-content.ts +6 -0
  95. package/src/extensions/registries/builtins/sidebar-footer-widgets.ts +6 -0
  96. package/src/extensions/registries/builtins/sidebar-header-widgets.ts +6 -0
  97. package/src/extensions/registries/builtins/sidebar.ts +11 -0
  98. package/src/extensions/registries/builtins/theme.ts +5 -0
  99. package/src/extensions/registries/builtins/user-card-after-meta.ts +6 -0
  100. package/src/extensions/registries/builtins/user-card-before-meta.ts +6 -0
  101. package/src/extensions/registries/builtins/user-menu-actions.ts +6 -0
  102. package/src/extensions/registries/builtins/user-menu-after-actions.ts +6 -0
  103. package/src/extensions/registries/builtins/user-menu-before-actions.ts +6 -0
  104. package/src/extensions/registries/builtins/user-strip.ts +5 -0
  105. package/src/extensions/registries/clear-extension-ui-registries.ts +15 -0
  106. package/src/extensions/registries/define-extension-registry.ts +58 -0
  107. package/src/extensions/registries/extension-host-api.ts +41 -0
  108. package/src/extensions/registries/extension-registry-api.ts +103 -0
  109. package/src/extensions/registries/extension-registry-payload-map.ts +9 -0
  110. package/src/extensions/registries/extension-scope.ts +41 -0
  111. package/src/extensions/registries/get-registry.ts +23 -0
  112. package/src/extensions/registries/index.ts +58 -0
  113. package/src/extensions/registries/manifest-rynt.ts +193 -0
  114. package/src/extensions/registries/registry-slot.ts +40 -0
  115. package/src/extensions/registries/registry-value-map.ts +89 -0
  116. package/src/extensions/registries/store.ts +206 -0
  117. package/src/extensions/resolve-extensions.ts +245 -0
  118. package/src/extensions/router-bridge.ts +103 -0
  119. package/src/extensions/session.ts +6 -0
  120. package/src/extensions/slug.ts +23 -0
  121. package/src/extensions/version.ts +147 -0
  122. package/src/host/extensions-composables.ts +33 -0
  123. package/src/host/extensions-init.ts +194 -0
  124. package/src/host/index.ts +11 -0
  125. package/src/host/launcher-models/index.ts +4 -0
  126. package/src/index.ts +229 -0
  127. package/src/minecraft-loader/base-loader.ts +102 -0
  128. package/src/minecraft-loader/index.ts +11 -0
  129. package/src/minecraft-loader/loader-registry.ts +72 -0
  130. package/src/shared/api/assets.ts +112 -0
  131. package/src/shared/api/auth.ts +283 -0
  132. package/src/shared/api/builds.ts +647 -0
  133. package/src/shared/api/config.ts +19 -0
  134. package/src/shared/api/download-stats.ts +103 -0
  135. package/src/shared/api/downloads.ts +36 -0
  136. package/src/shared/api/entity-authorship.ts +60 -0
  137. package/src/shared/api/events.ts +393 -0
  138. package/src/shared/api/friends.ts +140 -0
  139. package/src/shared/api/graphql.ts +87 -0
  140. package/src/shared/api/index.ts +23 -0
  141. package/src/shared/api/invites.ts +262 -0
  142. package/src/shared/api/library.ts +44 -0
  143. package/src/shared/api/maps.ts +385 -0
  144. package/src/shared/api/notify-websocket.ts +140 -0
  145. package/src/shared/api/posts.ts +357 -0
  146. package/src/shared/api/projectServers.ts +379 -0
  147. package/src/shared/api/serverMembers.ts +173 -0
  148. package/src/shared/api/users.ts +294 -0
  149. package/src/shared/composables/buildEditor/useBuildEditor.ts +66 -0
  150. package/src/shared/composables/buildManifest/buildManifest.ts +447 -0
  151. package/src/shared/composables/filesEditor/filesEditor.ts +346 -0
  152. package/src/shared/composables/index.ts +10 -0
  153. package/src/shared/composables/modsEditor/modsEditor.ts +1678 -0
  154. package/src/shared/composables/registrySlot/registry-slot-utils.ts +25 -0
  155. package/src/shared/composables/registrySlot/useRegistrySlotMissing.ts +35 -0
  156. package/src/shared/composables/resourcePacksEditor/resourcePacksEditor.ts +448 -0
  157. package/src/shared/composables/shaderPacksEditor/shaderPacksEditor.ts +395 -0
  158. package/src/shared/composables/useSkinRender.ts +70 -0
  159. package/src/shared/composables/useZlDeepLink.ts +178 -0
  160. package/src/shared/definitions/defineGraphCache.ts +216 -0
  161. package/src/shared/definitions/defineStore.ts +32 -0
  162. package/src/shared/definitions/index.ts +2 -0
  163. package/src/shared/minecraft-types/build-manifest.ts +611 -0
  164. package/src/shared/minecraft-types/index.ts +3 -0
  165. package/src/shared/minecraft-types/launcher-versions.ts +32 -0
  166. package/src/shared/minecraft-types/minecraft-launcher-types.ts +276 -0
  167. package/src/shared/mocks/index.ts +1 -0
  168. package/src/shared/mocks/navigation.ts +17 -0
  169. package/src/shared/mods/http.ts +45 -0
  170. package/src/shared/mods/index.ts +5 -0
  171. package/src/shared/mods/marketplace-editor-search.ts +266 -0
  172. package/src/shared/mods/marketplace-search-utils.ts +42 -0
  173. package/src/shared/mods/mod-marketplace-registry.ts +66 -0
  174. package/src/shared/mods/mod-marketplace-types.ts +28 -0
  175. package/src/shared/mods/providers/curseforge.ts +464 -0
  176. package/src/shared/mods/providers/index.ts +8 -0
  177. package/src/shared/mods/providers/modrinth.ts +402 -0
  178. package/src/shared/mods/resolve-mods-provider-loader-ids.ts +77 -0
  179. package/src/shared/mods/types.ts +76 -0
  180. package/src/shared/styles/index.css +713 -0
  181. package/src/shared/themes/index.ts +23 -0
  182. package/src/shared/themes/theme-tokens-black.json +126 -0
  183. package/src/shared/themes/theme-tokens-classic.json +126 -0
  184. package/src/shared/themes/theme-tokens-pink.json +126 -0
  185. package/src/shared/themes/theme-tokens.json +126 -0
  186. package/src/shared/themes/types.ts +85 -0
  187. package/src/shared/types/API_DOCUMENTATION.md +422 -0
  188. package/src/shared/types/account.ts +40 -0
  189. package/src/shared/types/build.ts +8 -0
  190. package/src/shared/types/entities.ts +181 -0
  191. package/src/shared/types/index.ts +6 -0
  192. package/src/shared/types/invite-payloads.ts +60 -0
  193. package/src/shared/types/navigation.ts +16 -0
  194. package/src/shared/types/running-build.ts +51 -0
  195. package/src/shared/types/serverMember.ts +17 -0
  196. package/src/shared/types/user.ts +55 -0
  197. package/src/shared/ui/base/Avatar.vue +262 -0
  198. package/src/shared/ui/base/Badge.vue +47 -0
  199. package/src/shared/ui/base/Button.vue +78 -0
  200. package/src/shared/ui/base/Divider.vue +42 -0
  201. package/src/shared/ui/base/Icon.vue +597 -0
  202. package/src/shared/ui/base/StatusIndicator.vue +44 -0
  203. package/src/shared/ui/base/index.ts +7 -0
  204. package/src/shared/ui/cards/InviteCard.vue +47 -0
  205. package/src/shared/ui/cards/index.ts +2 -0
  206. package/src/shared/ui/dialog/Dialog.vue +71 -0
  207. package/src/shared/ui/dialog/DialogContent.vue +31 -0
  208. package/src/shared/ui/dialog/DialogFooter.vue +14 -0
  209. package/src/shared/ui/dialog/DialogHeader.vue +41 -0
  210. package/src/shared/ui/dialog/index.ts +5 -0
  211. package/src/shared/ui/editors/AttachmentImagesEditor.vue +133 -0
  212. package/src/shared/ui/editors/ContentAttachmentsDisplay.vue +76 -0
  213. package/src/shared/ui/editors/MarkdownEditor.vue +956 -0
  214. package/src/shared/ui/editors/MarkdownRenderer.vue +299 -0
  215. package/src/shared/ui/editors/RichContentImageViewer.vue +85 -0
  216. package/src/shared/ui/editors/SocialPostMediaZone.vue +320 -0
  217. package/src/shared/ui/editors/index.ts +6 -0
  218. package/src/shared/ui/editors/markdown-editor-gallery.ts +234 -0
  219. package/src/shared/ui/editors/markdown-editor-image.ts +178 -0
  220. package/src/shared/ui/form/Checkbox.vue +38 -0
  221. package/src/shared/ui/form/FormField.vue +30 -0
  222. package/src/shared/ui/form/FormGrid.vue +38 -0
  223. package/src/shared/ui/form/ImageEditor.vue +598 -0
  224. package/src/shared/ui/form/Input.vue +72 -0
  225. package/src/shared/ui/form/Range.vue +65 -0
  226. package/src/shared/ui/form/Select.vue +76 -0
  227. package/src/shared/ui/form/Switch.vue +38 -0
  228. package/src/shared/ui/form/Textarea.vue +144 -0
  229. package/src/shared/ui/form/index.ts +9 -0
  230. package/src/shared/ui/index.ts +9 -0
  231. package/src/shared/ui/layout/BusyOverlay.vue +31 -0
  232. package/src/shared/ui/layout/Callout.vue +44 -0
  233. package/src/shared/ui/layout/Card.vue +38 -0
  234. package/src/shared/ui/layout/Container.vue +36 -0
  235. package/src/shared/ui/layout/EmptyState.vue +99 -0
  236. package/src/shared/ui/layout/EntityMediaRow.vue +54 -0
  237. package/src/shared/ui/layout/FilterResultsLayout.vue +22 -0
  238. package/src/shared/ui/layout/FloatingPanel.vue +37 -0
  239. package/src/shared/ui/layout/FullscreenDimmer.vue +11 -0
  240. package/src/shared/ui/layout/Grid.vue +40 -0
  241. package/src/shared/ui/layout/Inline.vue +59 -0
  242. package/src/shared/ui/layout/LoadingState.vue +39 -0
  243. package/src/shared/ui/layout/MediaBox.vue +47 -0
  244. package/src/shared/ui/layout/OverlayPanel.vue +28 -0
  245. package/src/shared/ui/layout/OverlayWaitPanel.vue +22 -0
  246. package/src/shared/ui/layout/PageSection.vue +43 -0
  247. package/src/shared/ui/layout/PageToolbar.vue +29 -0
  248. package/src/shared/ui/layout/Panel.vue +39 -0
  249. package/src/shared/ui/layout/ProgressBar.vue +49 -0
  250. package/src/shared/ui/layout/Section.vue +30 -0
  251. package/src/shared/ui/layout/SegmentedControl.vue +43 -0
  252. package/src/shared/ui/layout/SelectableCard.vue +46 -0
  253. package/src/shared/ui/layout/SelectableRow.vue +41 -0
  254. package/src/shared/ui/layout/Skeleton.vue +25 -0
  255. package/src/shared/ui/layout/SkeletonAvatar.vue +30 -0
  256. package/src/shared/ui/layout/SkeletonEntityCard.vue +20 -0
  257. package/src/shared/ui/layout/SkeletonFeedPost.vue +22 -0
  258. package/src/shared/ui/layout/SkeletonGrid.vue +18 -0
  259. package/src/shared/ui/layout/SkeletonListRow.vue +31 -0
  260. package/src/shared/ui/layout/SkeletonText.vue +25 -0
  261. package/src/shared/ui/layout/Stack.vue +42 -0
  262. package/src/shared/ui/layout/StateBlock.vue +44 -0
  263. package/src/shared/ui/layout/TwoPaneLayout.vue +35 -0
  264. package/src/shared/ui/layout/VirtualList.vue +160 -0
  265. package/src/shared/ui/layout/index.ts +35 -0
  266. package/src/shared/ui/layout/skeletonSurfaceStyles.ts +24 -0
  267. package/src/shared/ui/navigation/NavItem.vue +139 -0
  268. package/src/shared/ui/navigation/Tab.vue +61 -0
  269. package/src/shared/ui/navigation/Tabs.vue +37 -0
  270. package/src/shared/ui/navigation/index.ts +4 -0
  271. package/src/shared/ui/primitives/Action.vue +19 -0
  272. package/src/shared/ui/primitives/Block.vue +28 -0
  273. package/src/shared/ui/primitives/CanvasView.vue +19 -0
  274. package/src/shared/ui/primitives/Control.vue +24 -0
  275. package/src/shared/ui/primitives/ControlSelect.vue +19 -0
  276. package/src/shared/ui/primitives/ControlTextarea.vue +17 -0
  277. package/src/shared/ui/primitives/FieldLabel.vue +19 -0
  278. package/src/shared/ui/primitives/Form.vue +19 -0
  279. package/src/shared/ui/primitives/Heading.vue +29 -0
  280. package/src/shared/ui/primitives/Image.vue +17 -0
  281. package/src/shared/ui/primitives/LineBreak.vue +3 -0
  282. package/src/shared/ui/primitives/Link.vue +19 -0
  283. package/src/shared/ui/primitives/List.vue +28 -0
  284. package/src/shared/ui/primitives/ListItem.vue +19 -0
  285. package/src/shared/ui/primitives/OptionItem.vue +19 -0
  286. package/src/shared/ui/primitives/Text.vue +28 -0
  287. package/src/shared/ui/primitives/VideoView.vue +19 -0
  288. package/src/shared/ui/primitives/index.ts +19 -0
  289. package/src/shared/ui/primitives/resolveElement.ts +25 -0
  290. package/src/shared/ui/special/AngularAccent.vue +106 -0
  291. package/src/shared/ui/special/ExtensionRegistrySlotButton.vue +143 -0
  292. package/src/shared/ui/special/InfoRow.vue +39 -0
  293. package/src/shared/ui/special/LogViewer.vue +53 -0
  294. package/src/shared/ui/special/PageHeader.vue +23 -0
  295. package/src/shared/ui/special/RegistrySlotMissingCallout.vue +48 -0
  296. package/src/shared/ui/special/WelcomeCard.vue +32 -0
  297. package/src/shared/ui/special/index.ts +9 -0
  298. package/src/shared/utils/app-paths.ts +50 -0
  299. package/src/shared/utils/attachments.ts +16 -0
  300. package/src/shared/utils/autostart.ts +213 -0
  301. package/src/shared/utils/build-files.ts +439 -0
  302. package/src/shared/utils/build-manifest-init.ts +176 -0
  303. package/src/shared/utils/cloudinary.ts +67 -0
  304. package/src/shared/utils/cn.ts +7 -0
  305. package/src/shared/utils/download-stats-week.ts +165 -0
  306. package/src/shared/utils/entity-api-to-cache.ts +84 -0
  307. package/src/shared/utils/entity-build-from-api.ts +1 -0
  308. package/src/shared/utils/entity-display.ts +27 -0
  309. package/src/shared/utils/entity-map-from-api.ts +1 -0
  310. package/src/shared/utils/file-hash.ts +65 -0
  311. package/src/shared/utils/formatSize.ts +5 -0
  312. package/src/shared/utils/formatTime.ts +157 -0
  313. package/src/shared/utils/getAccountSkinRender.ts +32 -0
  314. package/src/shared/utils/index.ts +34 -0
  315. package/src/shared/utils/local-mods.ts +678 -0
  316. package/src/shared/utils/local-settings.ts +217 -0
  317. package/src/shared/utils/member-join-stats.ts +35 -0
  318. package/src/shared/utils/platform.ts +86 -0
  319. package/src/shared/utils/play-host-slug.ts +92 -0
  320. package/src/shared/utils/rich-content.ts +294 -0
  321. package/src/shared/utils/safeRequest.ts +23 -0
  322. package/src/shared/utils/semver.ts +81 -0
  323. package/src/shared/utils/serverPermissions.ts +155 -0
  324. package/src/shared/utils/skin-render-cache.ts +372 -0
  325. package/src/shared/utils/stripMarkdown.ts +45 -0
  326. package/src/shared/utils/transliterate.ts +74 -0
  327. package/src/shared/utils/updateAccountSkinRender.ts +64 -0
  328. package/src/shared/utils/updater.ts +218 -0
  329. package/src/shared/utils/uploadImage.ts +195 -0
  330. package/src/shared/utils/user-status.ts +9 -0
  331. package/src/tiptap/index.ts +7 -0
  332. package/tsconfig.json +13 -0
@@ -0,0 +1,173 @@
1
+ /**
2
+ * API для работы с участниками серверов
3
+ */
4
+
5
+ import type { EntityServerMember } from '../types/entities';
6
+ import type { ServerMemberRole } from '../types/serverMember';
7
+ import { safeRequest } from '../utils/safeRequest';
8
+ import { graphqlRequest } from './graphql';
9
+
10
+ export interface ServerMemberInput {
11
+ serverId: string;
12
+ userId: string;
13
+ role: ServerMemberRole;
14
+ invitedBy?: string;
15
+ }
16
+
17
+ const memberFragment = `
18
+ id
19
+ user {
20
+ id
21
+ username
22
+ avatar
23
+ }
24
+ role
25
+ joinedAt
26
+ invitedBy {
27
+ id
28
+ username
29
+ }
30
+ `;
31
+
32
+ /**
33
+ * Получает список участников сервера
34
+ */
35
+ export const getServerMembers = (serverId: string) =>
36
+ safeRequest(async (): Promise<EntityServerMember[]> => {
37
+ const query = `
38
+ query GetServerMembers($where: ServerMemberWhereInput!) {
39
+ serverMembers(where: $where) {
40
+ ${memberFragment}
41
+ }
42
+ }
43
+ `;
44
+
45
+ const result = await graphqlRequest<{ serverMembers: EntityServerMember[] }>(query, {
46
+ where: {
47
+ server: { id: { equals: serverId } },
48
+ },
49
+ });
50
+
51
+ return result.serverMembers;
52
+ });
53
+
54
+ /**
55
+ * Приглашает участника на сервер
56
+ */
57
+ export const inviteServerMember = (data: ServerMemberInput) =>
58
+ safeRequest(async (): Promise<EntityServerMember> => {
59
+ const mutation = `
60
+ mutation CreateServerMember($data: ServerMemberCreateInput!) {
61
+ createServerMember(data: $data) {
62
+ ${memberFragment}
63
+ }
64
+ }
65
+ `;
66
+
67
+ const result = await graphqlRequest<{ createServerMember: EntityServerMember }>(mutation, {
68
+ data: {
69
+ server: { connect: { id: data.serverId } },
70
+ user: { connect: { id: data.userId } },
71
+ role: data.role,
72
+ invitedBy: data.invitedBy ? { connect: { id: data.invitedBy } } : undefined,
73
+ },
74
+ });
75
+
76
+ return result.createServerMember;
77
+ });
78
+
79
+ /**
80
+ * Обновляет роль участника
81
+ */
82
+ export const updateServerMemberRole = (memberId: string, role: ServerMemberRole) =>
83
+ safeRequest(async (): Promise<EntityServerMember> => {
84
+ const mutation = `
85
+ mutation UpdateServerMember($where: ServerMemberWhereUniqueInput!, $data: ServerMemberUpdateInput!) {
86
+ updateServerMember(where: $where, data: $data) {
87
+ id
88
+ role
89
+ }
90
+ }
91
+ `;
92
+
93
+ const result = await graphqlRequest<{ updateServerMember: EntityServerMember }>(mutation, {
94
+ where: { id: memberId },
95
+ data: { role },
96
+ });
97
+
98
+ return result.updateServerMember;
99
+ });
100
+
101
+ /**
102
+ * Удаляет участника с сервера
103
+ */
104
+ export const removeServerMember = (memberId: string) =>
105
+ safeRequest(async (): Promise<{ id: string }> => {
106
+ const mutation = `
107
+ mutation DeleteServerMember($where: ServerMemberWhereUniqueInput!) {
108
+ deleteServerMember(where: $where) {
109
+ id
110
+ }
111
+ }
112
+ `;
113
+
114
+ const result = await graphqlRequest<{ deleteServerMember: { id: string } }>(mutation, {
115
+ where: { id: memberId },
116
+ });
117
+
118
+ return result.deleteServerMember;
119
+ });
120
+
121
+ /**
122
+ * Присоединяет текущего пользователя к серверу
123
+ */
124
+ export const joinServer = (serverId: string) =>
125
+ safeRequest(async (): Promise<EntityServerMember> => {
126
+ const mutation = `
127
+ mutation CreateServerMember($data: ServerMemberCreateInput!) {
128
+ createServerMember(data: $data) {
129
+ ${memberFragment}
130
+ }
131
+ }
132
+ `;
133
+
134
+ const result = await graphqlRequest<{ createServerMember: EntityServerMember }>(mutation, {
135
+ data: {
136
+ server: { connect: { id: serverId } },
137
+ },
138
+ });
139
+
140
+ return result.createServerMember;
141
+ });
142
+
143
+ /**
144
+ * Получает роль текущего пользователя на сервере
145
+ */
146
+ export const getCurrentUserServerRole = (serverId: string) =>
147
+ safeRequest(async (): Promise<ServerMemberRole | null> => {
148
+ const query = `
149
+ query GetCurrentUserServerRole($serverId: ID!) {
150
+ authenticatedItem {
151
+ ... on User {
152
+ id
153
+ serverMemberships(where: { server: { id: { equals: $serverId } } }) {
154
+ role
155
+ }
156
+ }
157
+ }
158
+ }
159
+ `;
160
+
161
+ const result = await graphqlRequest<{
162
+ authenticatedItem: {
163
+ id: string;
164
+ serverMemberships: Array<{ role: ServerMemberRole }>;
165
+ } | null;
166
+ }>(query, { serverId });
167
+
168
+ if (!result.authenticatedItem || result.authenticatedItem.serverMemberships.length === 0) {
169
+ return null;
170
+ }
171
+
172
+ return result.authenticatedItem.serverMemberships[0].role;
173
+ });
@@ -0,0 +1,294 @@
1
+ /**
2
+ * API профиля пользователя и публичного контента автора
3
+ */
4
+
5
+ import type { EntityPost, EntityServer, EntityUser } from '../types/entities';
6
+ import type { Build } from './builds';
7
+ import type { Map } from './maps';
8
+ import { getUserServers } from './projectServers';
9
+ import { safeRequest } from '../utils/safeRequest';
10
+ import { graphqlRequest } from './graphql';
11
+
12
+ export type UserProfile = Pick<
13
+ EntityUser,
14
+ 'id' | 'username' | 'avatar' | 'bio' | 'status' | 'statusDetail' | 'level' | 'lastSeenAt'
15
+ >;
16
+
17
+ const postListFragment = `
18
+ id
19
+ title
20
+ description
21
+ image
22
+ date
23
+ author {
24
+ id
25
+ username
26
+ avatar
27
+ }
28
+ project {
29
+ id
30
+ name
31
+ }
32
+ server {
33
+ id
34
+ name
35
+ }
36
+ `;
37
+
38
+ const publicServerFragment = `
39
+ id
40
+ name
41
+ address
42
+ port
43
+ status
44
+ build {
45
+ id
46
+ name
47
+ }
48
+ buildName
49
+ players
50
+ maxPlayers
51
+ tags
52
+ image
53
+ description
54
+ isPublic
55
+ `;
56
+
57
+ /**
58
+ * Публичный профиль пользователя (без email)
59
+ */
60
+ export const getUserProfile = (userId: string) =>
61
+ safeRequest(async (): Promise<UserProfile | null> => {
62
+ const query = `
63
+ query GetUserProfile($where: UserWhereUniqueInput!) {
64
+ user(where: $where) {
65
+ id
66
+ username
67
+ avatar
68
+ bio
69
+ status
70
+ statusDetail
71
+ level
72
+ lastSeenAt
73
+ }
74
+ }
75
+ `;
76
+
77
+ const result = await graphqlRequest<{ user: UserProfile | null }>(query, {
78
+ where: { id: userId },
79
+ });
80
+
81
+ return result.user;
82
+ });
83
+
84
+ /**
85
+ * Посты пользователя (с учётом filter.query на Post — приватные серверы скрыты)
86
+ */
87
+ export const getUserPosts = (
88
+ userId: string,
89
+ options?: {
90
+ take?: number;
91
+ skip?: number;
92
+ orderBy?: Array<{ date?: 'asc' | 'desc' }>;
93
+ },
94
+ ) =>
95
+ safeRequest(async (): Promise<EntityPost[]> => {
96
+ const query = `
97
+ query GetUserPosts($where: PostWhereInput!, $orderBy: [PostOrderByInput!]!, $take: Int, $skip: Int!) {
98
+ posts(where: $where, orderBy: $orderBy, take: $take, skip: $skip) {
99
+ ${postListFragment}
100
+ }
101
+ }
102
+ `;
103
+
104
+ const orderBy = options?.orderBy || [{ date: 'desc' }];
105
+
106
+ const result = await graphqlRequest<{ posts: EntityPost[] }>(query, {
107
+ where: {
108
+ author: { id: { equals: userId } },
109
+ },
110
+ orderBy,
111
+ take: options?.take ?? 24,
112
+ skip: options?.skip ?? 0,
113
+ });
114
+
115
+ return result.posts;
116
+ });
117
+
118
+ /**
119
+ * Публичные серверы, на которых пользователь состоит (любая роль)
120
+ */
121
+ export const getUserPublicServerMemberships = (userId: string) =>
122
+ safeRequest(async (): Promise<EntityServer[]> => {
123
+ const query = `
124
+ query GetUserPublicMemberships($where: ServerMemberWhereInput!) {
125
+ serverMembers(where: $where) {
126
+ server {
127
+ ${publicServerFragment}
128
+ }
129
+ }
130
+ }
131
+ `;
132
+
133
+ const result = await graphqlRequest<{
134
+ serverMembers: Array<{ server: EntityServer | null }>;
135
+ }>(query, {
136
+ where: {
137
+ user: { id: { equals: userId } },
138
+ server: { isPublic: { equals: true } },
139
+ },
140
+ });
141
+
142
+ return result.serverMembers
143
+ .map((m) => {
144
+ const server = m.server;
145
+ if (!server) return null;
146
+ if (server.build) {
147
+ server.buildId = server.build.id;
148
+ delete (server as { build?: unknown }).build;
149
+ }
150
+ return server;
151
+ })
152
+ .filter((s): s is EntityServer => !!s);
153
+ });
154
+
155
+ /**
156
+ * Публичные сборки автора
157
+ */
158
+ export const getUserPublicBuilds = (
159
+ userId: string,
160
+ options?: { take?: number; skip?: number },
161
+ ) =>
162
+ safeRequest(async (): Promise<Build[]> => {
163
+ const query = `
164
+ query GetUserPublicBuilds($where: BuildWhereInput!, $take: Int, $skip: Int!) {
165
+ builds(where: $where, orderBy: [{ downloads: desc }], take: $take, skip: $skip) {
166
+ id
167
+ name
168
+ description
169
+ image
170
+ isPublic
171
+ downloads
172
+ rating
173
+ minecraftVersion
174
+ loader
175
+ author {
176
+ id
177
+ username
178
+ }
179
+ }
180
+ }
181
+ `;
182
+
183
+ const result = await graphqlRequest<{ builds: Build[] }>(query, {
184
+ where: {
185
+ AND: [
186
+ { author: { id: { equals: userId } } },
187
+ { isPublic: { equals: true } },
188
+ ],
189
+ },
190
+ take: options?.take ?? 48,
191
+ skip: options?.skip ?? 0,
192
+ });
193
+
194
+ return result.builds;
195
+ });
196
+
197
+ /**
198
+ * Публичные карты автора
199
+ */
200
+ export const getUserPublicMaps = (
201
+ userId: string,
202
+ options?: { take?: number; skip?: number },
203
+ ) =>
204
+ safeRequest(async (): Promise<Map[]> => {
205
+ const query = `
206
+ query GetUserPublicMaps($where: MapWhereInput!, $take: Int, $skip: Int!) {
207
+ maps(where: $where, orderBy: [{ downloads: desc }], take: $take, skip: $skip) {
208
+ id
209
+ name
210
+ description
211
+ image
212
+ minecraftVersion
213
+ mapType
214
+ buildId
215
+ buildName
216
+ version
217
+ sha1
218
+ size
219
+ isPublic
220
+ downloads
221
+ author { id username }
222
+ createdAt
223
+ }
224
+ }
225
+ `;
226
+
227
+ const result = await graphqlRequest<{ maps: Map[] }>(query, {
228
+ where: {
229
+ AND: [
230
+ { author: { id: { equals: userId } } },
231
+ { isPublic: { equals: true } },
232
+ ],
233
+ },
234
+ take: options?.take ?? 48,
235
+ skip: options?.skip ?? 0,
236
+ });
237
+
238
+ return result.maps;
239
+ });
240
+
241
+ /**
242
+ * Публичные серверы, где пользователь автор проекта или администратор
243
+ */
244
+ export const getUserPublicAuthoredServers = (userId: string) =>
245
+ safeRequest(async (): Promise<EntityServer[]> => {
246
+ const projectAuthorQuery = `
247
+ query GetProjectAuthorServers($where: ProjectServerWhereInput!) {
248
+ projectServers(where: $where) {
249
+ ${publicServerFragment}
250
+ project {
251
+ id
252
+ name
253
+ }
254
+ }
255
+ }
256
+ `;
257
+
258
+ const [projectResult, adminRes] = await Promise.all([
259
+ graphqlRequest<{ projectServers: EntityServer[] }>(projectAuthorQuery, {
260
+ where: {
261
+ AND: [
262
+ { isPublic: { equals: true } },
263
+ { project: { author: { id: { equals: userId } } } },
264
+ ],
265
+ },
266
+ }),
267
+ getUserServers(userId),
268
+ ]);
269
+
270
+ const byId = new Map<string, EntityServer>();
271
+
272
+ for (const server of projectResult.projectServers) {
273
+ if (!server?.id) continue;
274
+ const normalized = { ...server };
275
+ if (normalized.build) {
276
+ normalized.buildId = normalized.build.id;
277
+ delete (normalized as { build?: unknown }).build;
278
+ }
279
+ if (normalized.isPublic !== false) {
280
+ byId.set(normalized.id, normalized);
281
+ }
282
+ }
283
+
284
+ if (adminRes.ok) {
285
+ for (const server of adminRes.result) {
286
+ if (!server?.id || server.isPublic === false) continue;
287
+ if (!byId.has(server.id)) {
288
+ byId.set(server.id, server);
289
+ }
290
+ }
291
+ }
292
+
293
+ return Array.from(byId.values());
294
+ });
@@ -0,0 +1,66 @@
1
+ import { ref, computed } from 'vue';
2
+ import { defineStore } from '../../definitions/defineStore';
3
+ import { useBuildManifestModel } from '../buildManifest/buildManifest';
4
+
5
+ /**
6
+ * Глобальное состояние редактора сборки.
7
+ * Редактор не привязан к роуту: открытие/закрытие только через startEditing/stopEditing.
8
+ */
9
+ export const useBuildEditor = defineStore(() => {
10
+ const editingBuildUuid = ref<string | null>(null);
11
+ const isEditorVisible = ref(true);
12
+
13
+ const buildManifest = useBuildManifestModel();
14
+
15
+ const isEditorActive = computed(() => editingBuildUuid.value !== null);
16
+
17
+ /** Показывать ли слой редактора (активен и не свёрнут) */
18
+ const isEditorShown = computed(
19
+ () => editingBuildUuid.value !== null && isEditorVisible.value,
20
+ );
21
+
22
+ /** Название открытой сборки для сайдбара и т.п. */
23
+ const openBuildDisplayName = computed(() => {
24
+ const name = buildManifest.manifest.value?._meta?.name;
25
+ if (name?.trim()) return name.trim();
26
+ const uuid = editingBuildUuid.value;
27
+ if (uuid === '_new') return 'Новая сборка';
28
+ return uuid ? 'Сборка' : '';
29
+ });
30
+
31
+ /** Открыть сборку для редактирования (показывает редактор) */
32
+ const startEditing = (uuid: string) => {
33
+ editingBuildUuid.value = uuid;
34
+ isEditorVisible.value = true;
35
+ };
36
+
37
+ const stopEditing = () => {
38
+ editingBuildUuid.value = null;
39
+ isEditorVisible.value = false;
40
+ };
41
+
42
+ /** Показать уже открытый редактор (например, по клику в сайдбаре) */
43
+ const showEditor = () => {
44
+ if (editingBuildUuid.value !== null) {
45
+ isEditorVisible.value = true;
46
+ }
47
+ };
48
+
49
+ /** Свернуть редактор (оставить сборку «открытой», скрыть слой) */
50
+ const hideEditor = () => {
51
+ isEditorVisible.value = false;
52
+ };
53
+
54
+ return {
55
+ editingBuildUuid,
56
+ isEditorActive,
57
+ isEditorVisible,
58
+ isEditorShown,
59
+ openBuildDisplayName,
60
+ startEditing,
61
+ stopEditing,
62
+ showEditor,
63
+ hideEditor,
64
+ buildManifest,
65
+ };
66
+ });