@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,422 @@
1
+ # API Documentation для Backend
2
+
3
+ Документация сущностей системы zakLauncher для интеграции с backend API.
4
+
5
+ ## Общие принципы
6
+
7
+ - Все даты в формате ISO 8601 (например: `2026-02-06T17:47:21.955Z`)
8
+ - Все идентификаторы - строки (UUID или другие уникальные строки)
9
+ - Изображения хранятся в Cloudinary, передаются полные URL
10
+
11
+ ---
12
+ ## 2. Build (Сборки)
13
+
14
+ ### Описание
15
+ Базовая информация о сборке Minecraft. Содержит только публичные метаданные для отображения в UI и маркетплейсе.
16
+
17
+ ### Структура
18
+
19
+ ```typescript
20
+ interface Build {
21
+ id: string; // UUID сборки
22
+ name: string; // Название сборки
23
+ description: string; // Описание сборки
24
+ image?: string; // URL изображения сборки (Cloudinary)
25
+ author: User; // Информация об авторе
26
+ createdAt: string; // Дата создания (ISO 8601)
27
+ updatedAt: string; // Дата обновления (ISO 8601)
28
+ isPublic: boolean; // Публичная сборка (видна в маркетплейсе)
29
+ downloads: number; // Количество скачиваний
30
+ rating?: number; // Рейтинг (0-5)
31
+ tags: string[]; // Теги сборки (например: ["adventure", "modded"])
32
+ }
33
+ ```
34
+
35
+ ### Особенности
36
+ - Сборка содержит только базовую информацию для отображения
37
+ - Полный манифест хранится в связанной сущности `Version`
38
+ - `image` - опциональное поле, если не указано - используется placeholder
39
+ - `isPublic: false` - сборка видна только автору
40
+
41
+ ---
42
+
43
+ ## 3. Version (Версии сборок)
44
+
45
+ ### Описание
46
+ Версия сборки содержит полный манифест сборки (JSON) и плоский блок метаданных `_meta` для удобной работы в базе данных.
47
+
48
+ ### Структура
49
+
50
+ ```typescript
51
+ interface Version {
52
+ id: string; // UUID версии
53
+ buildId: string; // ID связанной сборки (FK -> Build.id)
54
+ version: string; // Номер версии (например: "1.0.0")
55
+ manifest: JSON; // Полный манифест сборки (BuildVersionManifest как JSON)
56
+
57
+ // Плоские поля из _meta (для индексации и фильтрации)
58
+ name: string; // Название из _meta.name
59
+ description: string; // Описание из _meta.description
60
+ image: string; // URL изображения из _meta.image
61
+ releaseTime: string; // Дата релиза из _meta.releaseTime (ISO 8601)
62
+ time: string; // Время создания из _meta.time (ISO 8601)
63
+
64
+ // Поля из _meta.manifest
65
+ minecraftVersion: string; // Версия Minecraft (например: "1.21")
66
+ loader: string; // Загрузчик ("fabric", "quilt", "vanilla", etc.)
67
+ loaderVersion: string; // Версия загрузчика (например: "0.18.4")
68
+
69
+ createdAt: string; // Дата создания записи (ISO 8601)
70
+ updatedAt: string; // Дата обновления записи (ISO 8601)
71
+ }
72
+ ```
73
+
74
+ ### Структура манифеста (manifest JSON)
75
+
76
+ Манифест представляет собой полный объект `BuildVersionManifest`:
77
+
78
+ ```typescript
79
+ interface BuildVersionManifest {
80
+ id: string;
81
+ type: string; // "release", "snapshot", etc.
82
+ inheritsFrom?: string; // ID базовой версии Minecraft
83
+ arguments?: {
84
+ game: (string | { rules?: Rule[]; value: string | string[] })[];
85
+ jvm: (string | { rules?: Rule[]; value: string | string[] })[];
86
+ };
87
+ libraries: Library[]; // Список библиотек
88
+ mods: Mod[]; // Список модов
89
+ resourcePacks: ResourcePack[]; // Список ресурс-паков
90
+ versionAssets: VersionAsset[]; // Кастомные ассеты
91
+ selectedFiles?: string[]; // Выбранные файлы
92
+ _meta: BuildMetadata; // Метаданные (дублируются в плоских полях)
93
+ // ... другие поля манифеста
94
+ }
95
+ ```
96
+
97
+ ### Особенности
98
+ - `manifest` хранится как JSON в базе данных
99
+ - Некоторые плоские поля из `_meta` дублируются для удобства запросов и индексации
100
+ - При обновлении версии необходимо синхронизировать плоские поля с `manifest._meta`
101
+ - `buildId` связывает версию с базовой информацией сборки
102
+ - Одна сборка может иметь несколько версий
103
+
104
+ ---
105
+
106
+ ## 4. User (Пользователи системы)
107
+
108
+ ### Описание
109
+ Пользователи системы zakLauncher (авторизованные через систему).
110
+
111
+ ### Структура
112
+
113
+ ```typescript
114
+ interface User {
115
+ id: string; // UUID пользователя
116
+ username: string; // Username (уникальный)
117
+ email: string; // Email (уникальный)
118
+ name?: string; // Отображаемое имя
119
+ avatar?: string; // URL аватара
120
+ status: 'offline' | 'online'; // Статус пользователя
121
+ statusDetail: JSON; // Поле, которое будет иметь необычный формат, там может быть инфа о том в какой игре находится, или на каком мероприятии
122
+ level: number; // Уровень пользователя (для геймификации)
123
+
124
+ // Подписка и хранилище
125
+ subscriptionId?: string; // ID активной подписки (FK -> Subscription.id)
126
+ usedStorage: number; // Использованное место в байтах (сумма размеров всех ассетов пользователя)
127
+ storageQuota: number; // Квота хранилища в байтах (из активной подписки или 50мб (лень считать сколько в байтах) для бесплатного плана)
128
+
129
+ createdAt: string; // Дата регистрации (ISO 8601)
130
+ lastSeenAt?: string; // Дата последнего визита (ISO 8601)
131
+ friends: User[]; // Список друзей (загружается отдельно)
132
+ }
133
+ ```
134
+
135
+ ### Особенности
136
+ - `usedStorage` рассчитывается автоматически как сумма `size` всех ассетов, где пользователь является владельцем
137
+ - `storageQuota` берется из активной подписки, если подписки нет - значение 0 (бесплатный план)
138
+ - `statusDetail` может содержать JSON с информацией о текущей игре, мероприятии и т.д.
139
+ Пример: `{ game: "Minecraft", buildId: "uuid", server: "example.com" }`
140
+
141
+ ---
142
+
143
+ ## 5. Subscription (Подписки)
144
+
145
+ ### Описание
146
+ Платные подписки пользователей с квотами на хранилище и другие функции.
147
+
148
+ ### Структура
149
+
150
+ ```typescript
151
+ interface Subscription {
152
+ id: string; // UUID подписки
153
+ userId: string; // ID пользователя (FK -> User.id)
154
+ planId: string; // ID плана подписки (FK -> SubscriptionPlan.id)
155
+ planName: string; // Название плана (для быстрого доступа)
156
+
157
+ // Квоты и лимиты
158
+ storageQuota: number; // Квота хранилища в байтах
159
+ maxBuilds?: number; // Максимальное количество сборок (null = без ограничений)
160
+ maxVersionsPerBuild?: number; // Максимальное количество версий на сборку (null = без ограничений)
161
+
162
+ // Даты подписки
163
+ startedAt: string; // Дата начала подписки (ISO 8601)
164
+ expiresAt: string; // Дата окончания подписки (ISO 8601)
165
+ cancelledAt?: string; // Дата отмены подписки (ISO 8601, если отменена)
166
+ autoRenew: boolean; // Автопродление подписки
167
+
168
+ // Статус
169
+ status: 'active' | 'expired' | 'cancelled' | 'pending'; // Статус подписки
170
+ isActive: boolean; // Активна ли подписка (вычисляемое поле: status === 'active' && expiresAt > now)
171
+
172
+ createdAt: string; // Дата создания записи (ISO 8601)
173
+ updatedAt: string; // Дата обновления записи (ISO 8601)
174
+ }
175
+ ```
176
+
177
+ ### SubscriptionPlan (Планы подписок)
178
+
179
+ ```typescript
180
+ interface SubscriptionPlan {
181
+ id: string; // UUID плана
182
+ name: string; // Название плана (например: "Basic", "Pro", "Premium")
183
+ description: string; // Описание плана
184
+ price: number; // Цена в копейках (или минимальной валюте)
185
+ currency: string; // Валюта (например: "RUB", "USD")
186
+ interval: 'month' | 'year'; // Интервал оплаты
187
+ storageQuota: number; // Квота хранилища в байтах
188
+ maxBuilds?: number; // Максимальное количество сборок
189
+ maxVersionsPerBuild?: number; // Максимальное количество версий на сборку
190
+ features: string[]; // Список функций плана
191
+ isActive: boolean; // Активен ли план для продажи
192
+ createdAt: string; // Дата создания (ISO 8601)
193
+ }
194
+ ```
195
+
196
+ ### Особенности
197
+ - При создании подписки `storageQuota` копируется из плана
198
+ - `isActive` вычисляется как `status === 'active' && expiresAt > now`
199
+ - При истечении подписки `status` меняется на `expired`, `storageQuota` пользователя обнуляется
200
+ - `autoRenew: true` означает автоматическое продление через платежную систему
201
+
202
+ ---
203
+
204
+ ## 6. Payment (Платежи)
205
+
206
+ ### Описание
207
+ История платежей за подписки.
208
+
209
+ ### Структура
210
+
211
+ ```typescript
212
+ interface Payment {
213
+ id: string; // UUID платежа
214
+ userId: string; // ID пользователя (FK -> User.id)
215
+ subscriptionId: string; // ID подписки (FK -> Subscription.id)
216
+ planId: string; // ID плана подписки (FK -> SubscriptionPlan.id)
217
+
218
+ // Информация о платеже
219
+ amount: number; // Сумма в копейках (или минимальной валюте)
220
+ currency: string; // Валюта (например: "RUB", "USD")
221
+ status: 'pending' | 'completed' | 'failed' | 'refunded'; // Статус платежа
222
+
223
+ // Интеграция с платежной системой
224
+ paymentMethod: string; // Метод оплаты (например: "card", "yookassa", "stripe")
225
+ externalId?: string; // ID платежа во внешней системе
226
+ externalData?: JSON; // Дополнительные данные от платежной системы
227
+
228
+ // Даты
229
+ paidAt?: string; // Дата успешной оплаты (ISO 8601)
230
+ refundedAt?: string; // Дата возврата средств (ISO 8601)
231
+ createdAt: string; // Дата создания платежа (ISO 8601)
232
+ updatedAt: string; // Дата обновления (ISO 8601)
233
+ }
234
+ ```
235
+
236
+ ### Особенности
237
+ - `status: 'pending'` - платеж создан, ожидает оплаты
238
+ - `status: 'completed'` - платеж успешно завершен, подписка активирована/продлена
239
+ - `status: 'failed'` - платеж не прошел
240
+ - `status: 'refunded'` - средства возвращены
241
+ - `externalData` может содержать webhook данные от платежной системы
242
+
243
+ ---
244
+
245
+ ## 7. VersionAsset (Ассеты файлов сборок)
246
+
247
+ ### Описание
248
+ Файлы сборок, хранящиеся в S3. Каждый файл (мод, ресурс-пак, кастомный файл) загружается в S3 и регистрируется как ассет.
249
+
250
+ ### Структура
251
+
252
+ ```typescript
253
+ interface Asset {
254
+ id: string; // UUID ассета
255
+
256
+ versions: Version[]; // версии, в которых этот ассет используется
257
+ authors: User[]; // Пользователи, которые "загружали" этот ассет (авторы версий)
258
+
259
+ // Информация о файле
260
+ filename: string; // Оригинальное имя файла
261
+ mimeType: string; // MIME тип файла (например: "application/java-archive", "application/zip")
262
+ size: number; // Размер файла в байтах
263
+ sha1: string; // SHA1 хеш файла (для проверки целостности)
264
+
265
+ // S3 информация
266
+ s3Key: string; // Ключ файла в S3 (путь)
267
+ s3Bucket: string; // Бакет S3
268
+ s3Url: string; // Публичный URL файла в S3 (или presigned URL)
269
+
270
+ createdAt: string; // Дата загрузки (ISO 8601)
271
+ updatedAt: string; // Дата обновления (ISO 8601)
272
+ }
273
+ ```
274
+
275
+ ### Особенности
276
+ - При загрузке сборки система анализирует манифест и определяет, какие файлы нужно загрузить
277
+ - Пользователь загружает файлы, backend сохраняет их в S3 и создает записи `VersionAsset`
278
+ - `size` используется для расчета `User.usedStorage`
279
+ - При удалении ассета файл удаляется из S3, при удалении версий, связанные ассеты проверяются, удаляется из ассета связанная версия. Смотрится на автора версии, берём другие версии этого юзера, и смотрим есть ли в них этот ассет. Если в других версиях этого юзера этого ассета нет, то удаляем из ассета и юзера. Если выходит так, что у ассета нет привязанных других версий (от кого либо) и нет юзеров, то ассет удаляется из s3 и из базы.
280
+
281
+ ### Расчет использованного места
282
+
283
+ `User.usedStorage` рассчитывается как сумма `size` всех ассетов, где:
284
+ - `Asset.userId === User.id` (пользователь является владельцем)
285
+
286
+ Формула: `SELECT SUM(size) FROM assets WHERE userId = ? AND isPublic = false`
287
+
288
+ ---
289
+
290
+ ## 10. Project (Проекты/Серверы)
291
+
292
+ ### Описание
293
+ Проекты Minecraft (серверы, моды, ресурс-паки и т.д.).
294
+
295
+ ### Структура
296
+
297
+ ```typescript
298
+ interface Project {
299
+ id: string; // UUID проекта
300
+ name: string; // Название проекта
301
+ description: string; // Описание
302
+ online: number; // Количество игроков онлайн
303
+ maxPlayers: number; // Максимальное количество игроков
304
+ version: string; // Версия Minecraft
305
+ tags: string[]; // Теги проекта
306
+ image?: string; // URL изображения
307
+ welcomeMessage?: string; // Приветственное сообщение
308
+ servers?: ProjectServer[]; // Список серверов проекта
309
+ events?: ProjectEvent[]; // События проекта
310
+ news?: ProjectNews[]; // Новости проекта
311
+ createdAt: string; // Дата создания (ISO 8601)
312
+ updatedAt: string; // Дата обновления (ISO 8601)
313
+ }
314
+ ```
315
+
316
+ ### ProjectServer
317
+
318
+ ```typescript
319
+ interface ProjectServer {
320
+ id: string; // UUID сервера
321
+ projectId: string; // ID проекта (FK -> Project.id)
322
+ name: string; // Название сервера
323
+ address: string; // IP адрес или домен
324
+ port: number; // Порт сервера
325
+ status: 'online' | 'offline'; // Статус сервера
326
+ buildId?: string; // ID рекомендуемой сборки (FK -> Build.id)
327
+ buildName?: string; // Название сборки (для отображения)
328
+ players?: number; // Количество игроков онлайн
329
+ maxPlayers?: number; // Максимальное количество игроков
330
+ }
331
+ ```
332
+
333
+ ### ProjectEvent
334
+
335
+ ```typescript
336
+ interface ProjectEvent {
337
+ id: string; // UUID события
338
+ projectId: string; // ID проекта (FK -> Project.id)
339
+ title: string; // Заголовок события
340
+ description: string; // Описание
341
+ date: string; // Дата события (ISO 8601)
342
+ startTime?: string; // Время начала (ISO 8601)
343
+ endTime?: string; // Время окончания (ISO 8601)
344
+ participants: number; // Количество участников
345
+ image?: string; // URL изображения
346
+ serverId?: string; // ID сервера (FK -> ProjectServer.id)
347
+ isActive: boolean; // Активно ли событие
348
+ createdAt: string; // Дата создания (ISO 8601)
349
+ }
350
+ ```
351
+
352
+ ### ProjectNews
353
+
354
+ ```typescript
355
+ interface ProjectNews {
356
+ id: string; // UUID новости
357
+ projectId: string; // ID проекта (FK -> Project.id)
358
+ title: string; // Заголовок новости
359
+ description: string; // Описание
360
+ image?: string; // URL изображения
361
+ author: string; // Автор новости
362
+ date: string; // Дата публикации (ISO 8601)
363
+ createdAt: string; // Дата создания (ISO 8601)
364
+ }
365
+ ```
366
+
367
+ ## 12. Event (События)
368
+
369
+ ### Описание
370
+ События, привязанные к проектам.
371
+
372
+ ### Структура
373
+
374
+ ```typescript
375
+ interface Event {
376
+ id: string; // UUID события
377
+ projectId: string; // ID проекта (FK -> Project.id)
378
+ title: string; // Заголовок
379
+ description: string; // Описание
380
+ date: string; // Дата события (ISO 8601)
381
+ startTime?: string; // Время начала (ISO 8601)
382
+ endTime?: string; // Время окончания (ISO 8601)
383
+ participants: number; // Количество участников
384
+ image?: string; // URL изображения
385
+ serverId?: string; // ID сервера (FK -> ProjectServer.id, опционально)
386
+ isActive: boolean; // Активно ли событие
387
+ createdAt: string; // Дата создания (ISO 8601)
388
+ updatedAt: string; // Дата обновления (ISO 8601)
389
+ }
390
+ ```
391
+
392
+ ### Особенности
393
+ - События всегда привязаны к проекту через `projectId`
394
+ - `serverId` опционален - событие может быть привязано к конкретному серверу проекта
395
+ - `isActive: true` означает, что событие активно и отображается пользователям
396
+ - `participants` обновляется при регистрации участников на событие
397
+
398
+ ---
399
+
400
+ ## Примечания
401
+
402
+ 1. **Безопасность**: Все токены и чувствительные данные должны быть зашифрованы
403
+ 2. **Валидация**: Все входящие данные должны валидироваться на backend
404
+ 3. **Авторизация**: Проверка прав доступа для всех операций (создание, редактирование, удаление)
405
+ 4. **Синхронизация**: При обновлении `Version.manifest` необходимо синхронизировать плоские поля с `_meta`
406
+ 5. **Изображения**: Все изображения хранятся в Cloudinary, передаются полные URL
407
+ 6. **Пагинация**: Для списков рекомендуется использовать пагинацию (limit/offset или cursor-based)
408
+ 7. **Хранилище**:
409
+ - При загрузке/удалении ассета необходимо пересчитывать `User.usedStorage`
410
+ - Проверять квоту перед загрузкой: `usedStorage + newFileSize <= storageQuota`
411
+ 8. **Подписки**:
412
+ - При истечении подписки автоматически обновлять `status` на `expired`
413
+ - При отмене подписки устанавливать `cancelledAt` и `status: 'cancelled'`
414
+ - При активации новой подписки обновлять `User.storageQuota` из плана
415
+ 9. **Ассеты**:
416
+ - Использовать SHA1 для дедупликации файлов (один файл может использоваться несколькими версиями)
417
+ - При удалении ассета проверять, используется ли он другими версиями
418
+ - Генерировать presigned URL для безопасной загрузки/скачивания из S3
419
+ 10. **Платежи**:
420
+ - Webhook от платежной системы должен обновлять статус платежа и активировать подписку
421
+ - При успешном платеже (`status: 'completed'`) активировать/продлить подписку
422
+
@@ -0,0 +1,40 @@
1
+ export type MinecraftAccountProvider = 'Microsoft' | 'Ely.by' | 'LittleSkin' | 'Offline' | 'Mojang';
2
+
3
+ export interface MinecraftAccount {
4
+ id: string;
5
+ provider: MinecraftAccountProvider;
6
+ username: string;
7
+ uuid?: string;
8
+ email?: string; // Для Microsoft/Mojang
9
+ accessToken?: string; // Токен доступа (зашифрован)
10
+ refreshToken?: string; // Токен обновления (зашифрован)
11
+ expiresAt?: string; // Дата истечения токена
12
+ isActive: boolean; // Активный аккаунт для запуска
13
+ avatar?: string; // URL аватара
14
+ skinSha1?: string; // SHA1 хеш скина для кеширования рендеров
15
+ createdAt: string;
16
+ lastUsedAt?: string;
17
+ }
18
+
19
+
20
+
21
+
22
+
23
+
24
+
25
+
26
+
27
+
28
+
29
+
30
+
31
+
32
+
33
+
34
+
35
+
36
+
37
+
38
+
39
+
40
+
@@ -0,0 +1,8 @@
1
+ export interface BuildVersion {
2
+ id: string;
3
+ version: string;
4
+ createdAt: string;
5
+ publishedAt?: string;
6
+ description?: string;
7
+ size: number;
8
+ }
@@ -0,0 +1,181 @@
1
+ import type { BuildVersionManifest } from '../minecraft-types/build-manifest';
2
+ import type { InviteLauncherConfigPayload } from './invite-payloads';
3
+ import type { ServerMember } from './serverMember';
4
+ import type { UserStatusDetail } from './user';
5
+
6
+ export type EntityUser = {
7
+ id: string;
8
+ username: string;
9
+ email: string;
10
+ avatar: string;
11
+ bio?: string;
12
+ status: 'online' | 'offline';
13
+ statusDetail: UserStatusDetail | null;
14
+ level: number;
15
+ usedStorage: number;
16
+ storageQuota: number;
17
+ lastSeenAt: string;
18
+ serverMemberships: EntityServerMember[];
19
+ friends: EntityUser[];
20
+ };
21
+
22
+ export type EntityPost = {
23
+ id: string;
24
+ server: EntityServer | null;
25
+ title: string;
26
+ description: string;
27
+ image: string;
28
+ attachments?: string[];
29
+ author: EntityUser;
30
+ date: string;
31
+ };
32
+
33
+ export type EntityEvent = {
34
+ id: string;
35
+ title: string;
36
+ description: string;
37
+ startDateTime: string;
38
+ endTime: string;
39
+ participants: number;
40
+ image: string | null;
41
+ attachments?: string[];
42
+ server: EntityServer;
43
+ isActive: boolean;
44
+ };
45
+
46
+ export type EntityServerMember = {
47
+ id: string;
48
+ server: EntityServer;
49
+ user: EntityUser;
50
+ displayName: string;
51
+ role: 'player' | 'moderator' | 'admin';
52
+ joinedAt: string;
53
+ invitedBy: EntityUser | null;
54
+ };
55
+
56
+ export type EntityServer = {
57
+ id: string;
58
+ name: string;
59
+ address: string;
60
+ port: number;
61
+ status: 'online' | 'offline';
62
+ /** Заполняется из GraphQL `build` или нормализуется в `buildId` в API */
63
+ build?: EntityBuild | null;
64
+ buildId?: string;
65
+ buildName: string;
66
+ players: number;
67
+ maxPlayers: number;
68
+ tags: string[];
69
+ allowedProviders: string[] | null;
70
+ image: string;
71
+ description: string;
72
+ rules: string;
73
+ isPublic?: boolean;
74
+ events: EntityEvent[];
75
+ members: ServerMember[];
76
+ /** Проект может приходить только в части доменных сценариев (лаунчер/профиль сервера). */
77
+ project?: { author?: { id: string } } | null;
78
+ };
79
+
80
+ /** Встроенные типы инвайта; API допускает и произвольные строки (`Invite.type` на бэкенде). */
81
+ export type KnownEntityInviteType =
82
+ | 'friend'
83
+ | 'server'
84
+ | 'build'
85
+ | 'map'
86
+ | 'local_build'
87
+ | 'local_game'
88
+ | 'request_join_local';
89
+
90
+ export type EntityInviteType = KnownEntityInviteType | (string & {});
91
+
92
+ export type EntityInvite = {
93
+ id: string;
94
+ target: EntityUser;
95
+ author: EntityUser;
96
+ type: EntityInviteType;
97
+ status: 'pending' | 'accepted' | 'rejected';
98
+ /** Для `friend` — обычно `{}`. Для лаунчер-типов — см. `InviteLauncherConfigPayload`. */
99
+ config: InviteLauncherConfigPayload | Record<string, unknown> | null;
100
+ createdAt: string;
101
+ updatedAt: string;
102
+ };
103
+
104
+ /**
105
+ * Общие поля сборки для карточек и локального индекса (без обязательного графа `versions`).
106
+ */
107
+ export type EntityBuildBase = {
108
+ id: string;
109
+ name: string;
110
+ description: string | null;
111
+ image: string | null;
112
+ minecraftVersion: string | null;
113
+ loader: string | null;
114
+ loaderVersion?: string | null;
115
+ uuid?: string;
116
+ lastPlayed?: string;
117
+ playTime?: number;
118
+ hasIssues?: boolean;
119
+ downloads?: number;
120
+ rating?: number | null;
121
+ author?: EntityUser | null;
122
+ authorPublic?: EntityUser | null;
123
+ };
124
+
125
+ /** Локальная запись из манифестов (`getBuildsList` и карточка «Мои сборки»). */
126
+ export type EntityBuildLocal = EntityBuildBase & {
127
+ uuid: string;
128
+ loaderVersion: string;
129
+ hasIssues: boolean;
130
+ };
131
+
132
+ /** Сборка в graph cache (поля догружаются по мере запросов). */
133
+ export type EntityBuild = EntityBuildBase & {
134
+ isPublic?: boolean;
135
+ managers?: EntityUser[];
136
+ tags?: unknown[] | null;
137
+ versions?: Partial<EntityVersion> | Record<string, unknown>;
138
+ };
139
+
140
+ /**
141
+ * Общие поля карты для карточек и локального индекса
142
+ */
143
+ export type EntityMapBase = {
144
+ id: string;
145
+ name: string;
146
+ description: string | null;
147
+ image: string | null;
148
+ minecraftVersion: string | null;
149
+ mapType: 'any' | 'build';
150
+ buildId?: string;
151
+ buildName?: string;
152
+ version: string | null;
153
+ sha1: string;
154
+ size: number;
155
+ s3Url: string;
156
+ isPublic: boolean;
157
+ downloads: number;
158
+ manifest?: Record<string, unknown>;
159
+ author?: EntityUser | null;
160
+ authorPublic?: EntityUser | null;
161
+ createdAt?: string;
162
+ };
163
+
164
+ /** Карта в graph cache (поля догружаются по мере запросов). */
165
+ export type EntityMap = EntityMapBase;
166
+
167
+ export type EntityVersion = {
168
+ id: string;
169
+ build: EntityBuild;
170
+ version: string;
171
+ manifest: BuildVersionManifest;
172
+ name: string;
173
+ description: string | null;
174
+ image: string | null;
175
+ releaseTime: string | null;
176
+ time: string | null;
177
+ minecraftVersion: string;
178
+ loader: string;
179
+ loaderVersion: string | null;
180
+ assets: Record<string, any>[];
181
+ };
@@ -0,0 +1,6 @@
1
+ export * from './account';
2
+ export * from './user';
3
+ export * from './running-build';
4
+ export * from './navigation';
5
+ export * from './build';
6
+ export * from './entities';