@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.
- package/README.md +122 -0
- package/REGISTRIES.md +189 -0
- package/env.d.ts +11 -0
- package/host-shims.d.ts +30 -0
- package/package.json +88 -0
- package/src/extension-marketplace/api-types.ts +141 -0
- package/src/extension-marketplace/client.ts +296 -0
- package/src/extension-marketplace/index.ts +22 -0
- package/src/extension-marketplace/schemas.ts +178 -0
- package/src/extensions/ExtensionRoutePage.vue +17 -0
- package/src/extensions/context.ts +37 -0
- package/src/extensions/disabled-folder.ts +21 -0
- package/src/extensions/extension-expose-map.ts +5 -0
- package/src/extensions/extension-expose.ts +48 -0
- package/src/extensions/graph.ts +67 -0
- package/src/extensions/index.ts +251 -0
- package/src/extensions/invite-handler/types.ts +20 -0
- package/src/extensions/launcher-entities/create-launcher-entity.ts +25 -0
- package/src/extensions/launcher-entities/keys.ts +46 -0
- package/src/extensions/launcher-entities/launcher-entity-components.ts +177 -0
- package/src/extensions/launcher-entities/props-map.ts +69 -0
- package/src/extensions/launcher-entities/registry.ts +32 -0
- package/src/extensions/launcher-models/apis/accounts-contracts.ts +102 -0
- package/src/extensions/launcher-models/apis/launcher-model-apis.ts +553 -0
- package/src/extensions/launcher-models/keys.ts +23 -0
- package/src/extensions/launcher-models/public.ts +9 -0
- package/src/extensions/launcher-models/registry-core.ts +34 -0
- package/src/extensions/manifest-types.ts +22 -0
- package/src/extensions/manifest.ts +46 -0
- package/src/extensions/marketplace-open-key.ts +26 -0
- package/src/extensions/plugin-types.ts +44 -0
- package/src/extensions/plugin.ts +62 -0
- package/src/extensions/registries/bootstrap.ts +11 -0
- package/src/extensions/registries/builtins/account-provider.ts +6 -0
- package/src/extensions/registries/builtins/app-topbar-left-widgets.ts +6 -0
- package/src/extensions/registries/builtins/app-topbar-right-widgets.ts +6 -0
- package/src/extensions/registries/builtins/app-topbar-status-widgets.ts +6 -0
- package/src/extensions/registries/builtins/build-card-actions.ts +6 -0
- package/src/extensions/registries/builtins/build-card-after-meta.ts +6 -0
- package/src/extensions/registries/builtins/build-card-before-media.ts +6 -0
- package/src/extensions/registries/builtins/build-card-before-meta.ts +6 -0
- package/src/extensions/registries/builtins/build-card-footer-actions.ts +6 -0
- package/src/extensions/registries/builtins/build-detail-after-content.ts +6 -0
- package/src/extensions/registries/builtins/build-detail-before-content.ts +6 -0
- package/src/extensions/registries/builtins/build-detail-before-hero.ts +6 -0
- package/src/extensions/registries/builtins/build-detail-header-actions.ts +6 -0
- package/src/extensions/registries/builtins/build-detail-mod-row-actions.ts +6 -0
- package/src/extensions/registries/builtins/build-detail-resourcepack-row-actions.ts +6 -0
- package/src/extensions/registries/builtins/build-detail-right-column-bottom.ts +6 -0
- package/src/extensions/registries/builtins/build-detail-right-column-top.ts +6 -0
- package/src/extensions/registries/builtins/dialog-footer-actions.ts +6 -0
- package/src/extensions/registries/builtins/feed-after-content.ts +6 -0
- package/src/extensions/registries/builtins/feed-before-content.ts +6 -0
- package/src/extensions/registries/builtins/file-editor.ts +19 -0
- package/src/extensions/registries/builtins/friends-after-list.ts +6 -0
- package/src/extensions/registries/builtins/friends-before-list.ts +6 -0
- package/src/extensions/registries/builtins/index.ts +141 -0
- package/src/extensions/registries/builtins/invite-handler.ts +7 -0
- package/src/extensions/registries/builtins/library-after-content.ts +6 -0
- package/src/extensions/registries/builtins/library-before-content.ts +6 -0
- package/src/extensions/registries/builtins/loader.ts +8 -0
- package/src/extensions/registries/builtins/map-card-actions.ts +6 -0
- package/src/extensions/registries/builtins/map-card-after-meta.ts +6 -0
- package/src/extensions/registries/builtins/map-card-before-meta.ts +6 -0
- package/src/extensions/registries/builtins/map-card-footer-actions.ts +6 -0
- package/src/extensions/registries/builtins/map-detail-after-content.ts +6 -0
- package/src/extensions/registries/builtins/map-detail-before-content.ts +6 -0
- package/src/extensions/registries/builtins/map-detail-header-actions.ts +6 -0
- package/src/extensions/registries/builtins/markdown-editor-tiptap-extensions.ts +7 -0
- package/src/extensions/registries/builtins/markdown-editor-toolbar-actions.ts +6 -0
- package/src/extensions/registries/builtins/markdown-renderer-after-content.ts +6 -0
- package/src/extensions/registries/builtins/markdown-renderer-before-content.ts +6 -0
- package/src/extensions/registries/builtins/mod-details-footer-actions.ts +6 -0
- package/src/extensions/registries/builtins/mod-manage-actions.ts +6 -0
- package/src/extensions/registries/builtins/mod-provider.ts +5 -0
- package/src/extensions/registries/builtins/nav.ts +7 -0
- package/src/extensions/registries/builtins/page.ts +13 -0
- package/src/extensions/registries/builtins/projects-after-content.ts +6 -0
- package/src/extensions/registries/builtins/projects-before-content.ts +6 -0
- package/src/extensions/registries/builtins/resourcepack-manage-actions.ts +7 -0
- package/src/extensions/registries/builtins/server-card-actions.ts +6 -0
- package/src/extensions/registries/builtins/server-card-after-meta.ts +6 -0
- package/src/extensions/registries/builtins/server-card-before-meta.ts +6 -0
- package/src/extensions/registries/builtins/server-card-footer-actions.ts +6 -0
- package/src/extensions/registries/builtins/server-detail-after-content.ts +6 -0
- package/src/extensions/registries/builtins/server-detail-before-content.ts +6 -0
- package/src/extensions/registries/builtins/server-detail-header-actions.ts +6 -0
- package/src/extensions/registries/builtins/settings-after-sections.ts +6 -0
- package/src/extensions/registries/builtins/settings-before-sections.ts +6 -0
- package/src/extensions/registries/builtins/settings-section-widgets.ts +6 -0
- package/src/extensions/registries/builtins/shaderpack-manage-actions.ts +7 -0
- package/src/extensions/registries/builtins/shell.ts +5 -0
- package/src/extensions/registries/builtins/sidebar-after-content.ts +6 -0
- package/src/extensions/registries/builtins/sidebar-before-content.ts +6 -0
- package/src/extensions/registries/builtins/sidebar-footer-widgets.ts +6 -0
- package/src/extensions/registries/builtins/sidebar-header-widgets.ts +6 -0
- package/src/extensions/registries/builtins/sidebar.ts +11 -0
- package/src/extensions/registries/builtins/theme.ts +5 -0
- package/src/extensions/registries/builtins/user-card-after-meta.ts +6 -0
- package/src/extensions/registries/builtins/user-card-before-meta.ts +6 -0
- package/src/extensions/registries/builtins/user-menu-actions.ts +6 -0
- package/src/extensions/registries/builtins/user-menu-after-actions.ts +6 -0
- package/src/extensions/registries/builtins/user-menu-before-actions.ts +6 -0
- package/src/extensions/registries/builtins/user-strip.ts +5 -0
- package/src/extensions/registries/clear-extension-ui-registries.ts +15 -0
- package/src/extensions/registries/define-extension-registry.ts +58 -0
- package/src/extensions/registries/extension-host-api.ts +41 -0
- package/src/extensions/registries/extension-registry-api.ts +103 -0
- package/src/extensions/registries/extension-registry-payload-map.ts +9 -0
- package/src/extensions/registries/extension-scope.ts +41 -0
- package/src/extensions/registries/get-registry.ts +23 -0
- package/src/extensions/registries/index.ts +58 -0
- package/src/extensions/registries/manifest-rynt.ts +193 -0
- package/src/extensions/registries/registry-slot.ts +40 -0
- package/src/extensions/registries/registry-value-map.ts +89 -0
- package/src/extensions/registries/store.ts +206 -0
- package/src/extensions/resolve-extensions.ts +245 -0
- package/src/extensions/router-bridge.ts +103 -0
- package/src/extensions/session.ts +6 -0
- package/src/extensions/slug.ts +23 -0
- package/src/extensions/version.ts +147 -0
- package/src/host/extensions-composables.ts +33 -0
- package/src/host/extensions-init.ts +194 -0
- package/src/host/index.ts +11 -0
- package/src/host/launcher-models/index.ts +4 -0
- package/src/index.ts +229 -0
- package/src/minecraft-loader/base-loader.ts +102 -0
- package/src/minecraft-loader/index.ts +11 -0
- package/src/minecraft-loader/loader-registry.ts +72 -0
- package/src/shared/api/assets.ts +112 -0
- package/src/shared/api/auth.ts +283 -0
- package/src/shared/api/builds.ts +647 -0
- package/src/shared/api/config.ts +19 -0
- package/src/shared/api/download-stats.ts +103 -0
- package/src/shared/api/downloads.ts +36 -0
- package/src/shared/api/entity-authorship.ts +60 -0
- package/src/shared/api/events.ts +393 -0
- package/src/shared/api/friends.ts +140 -0
- package/src/shared/api/graphql.ts +87 -0
- package/src/shared/api/index.ts +23 -0
- package/src/shared/api/invites.ts +262 -0
- package/src/shared/api/library.ts +44 -0
- package/src/shared/api/maps.ts +385 -0
- package/src/shared/api/notify-websocket.ts +140 -0
- package/src/shared/api/posts.ts +357 -0
- package/src/shared/api/projectServers.ts +379 -0
- package/src/shared/api/serverMembers.ts +173 -0
- package/src/shared/api/users.ts +294 -0
- package/src/shared/composables/buildEditor/useBuildEditor.ts +66 -0
- package/src/shared/composables/buildManifest/buildManifest.ts +447 -0
- package/src/shared/composables/filesEditor/filesEditor.ts +346 -0
- package/src/shared/composables/index.ts +10 -0
- package/src/shared/composables/modsEditor/modsEditor.ts +1678 -0
- package/src/shared/composables/registrySlot/registry-slot-utils.ts +25 -0
- package/src/shared/composables/registrySlot/useRegistrySlotMissing.ts +35 -0
- package/src/shared/composables/resourcePacksEditor/resourcePacksEditor.ts +448 -0
- package/src/shared/composables/shaderPacksEditor/shaderPacksEditor.ts +395 -0
- package/src/shared/composables/useSkinRender.ts +70 -0
- package/src/shared/composables/useZlDeepLink.ts +178 -0
- package/src/shared/definitions/defineGraphCache.ts +216 -0
- package/src/shared/definitions/defineStore.ts +32 -0
- package/src/shared/definitions/index.ts +2 -0
- package/src/shared/minecraft-types/build-manifest.ts +611 -0
- package/src/shared/minecraft-types/index.ts +3 -0
- package/src/shared/minecraft-types/launcher-versions.ts +32 -0
- package/src/shared/minecraft-types/minecraft-launcher-types.ts +276 -0
- package/src/shared/mocks/index.ts +1 -0
- package/src/shared/mocks/navigation.ts +17 -0
- package/src/shared/mods/http.ts +45 -0
- package/src/shared/mods/index.ts +5 -0
- package/src/shared/mods/marketplace-editor-search.ts +266 -0
- package/src/shared/mods/marketplace-search-utils.ts +42 -0
- package/src/shared/mods/mod-marketplace-registry.ts +66 -0
- package/src/shared/mods/mod-marketplace-types.ts +28 -0
- package/src/shared/mods/providers/curseforge.ts +464 -0
- package/src/shared/mods/providers/index.ts +8 -0
- package/src/shared/mods/providers/modrinth.ts +402 -0
- package/src/shared/mods/resolve-mods-provider-loader-ids.ts +77 -0
- package/src/shared/mods/types.ts +76 -0
- package/src/shared/styles/index.css +713 -0
- package/src/shared/themes/index.ts +23 -0
- package/src/shared/themes/theme-tokens-black.json +126 -0
- package/src/shared/themes/theme-tokens-classic.json +126 -0
- package/src/shared/themes/theme-tokens-pink.json +126 -0
- package/src/shared/themes/theme-tokens.json +126 -0
- package/src/shared/themes/types.ts +85 -0
- package/src/shared/types/API_DOCUMENTATION.md +422 -0
- package/src/shared/types/account.ts +40 -0
- package/src/shared/types/build.ts +8 -0
- package/src/shared/types/entities.ts +181 -0
- package/src/shared/types/index.ts +6 -0
- package/src/shared/types/invite-payloads.ts +60 -0
- package/src/shared/types/navigation.ts +16 -0
- package/src/shared/types/running-build.ts +51 -0
- package/src/shared/types/serverMember.ts +17 -0
- package/src/shared/types/user.ts +55 -0
- package/src/shared/ui/base/Avatar.vue +262 -0
- package/src/shared/ui/base/Badge.vue +47 -0
- package/src/shared/ui/base/Button.vue +78 -0
- package/src/shared/ui/base/Divider.vue +42 -0
- package/src/shared/ui/base/Icon.vue +597 -0
- package/src/shared/ui/base/StatusIndicator.vue +44 -0
- package/src/shared/ui/base/index.ts +7 -0
- package/src/shared/ui/cards/InviteCard.vue +47 -0
- package/src/shared/ui/cards/index.ts +2 -0
- package/src/shared/ui/dialog/Dialog.vue +71 -0
- package/src/shared/ui/dialog/DialogContent.vue +31 -0
- package/src/shared/ui/dialog/DialogFooter.vue +14 -0
- package/src/shared/ui/dialog/DialogHeader.vue +41 -0
- package/src/shared/ui/dialog/index.ts +5 -0
- package/src/shared/ui/editors/AttachmentImagesEditor.vue +133 -0
- package/src/shared/ui/editors/ContentAttachmentsDisplay.vue +76 -0
- package/src/shared/ui/editors/MarkdownEditor.vue +956 -0
- package/src/shared/ui/editors/MarkdownRenderer.vue +299 -0
- package/src/shared/ui/editors/RichContentImageViewer.vue +85 -0
- package/src/shared/ui/editors/SocialPostMediaZone.vue +320 -0
- package/src/shared/ui/editors/index.ts +6 -0
- package/src/shared/ui/editors/markdown-editor-gallery.ts +234 -0
- package/src/shared/ui/editors/markdown-editor-image.ts +178 -0
- package/src/shared/ui/form/Checkbox.vue +38 -0
- package/src/shared/ui/form/FormField.vue +30 -0
- package/src/shared/ui/form/FormGrid.vue +38 -0
- package/src/shared/ui/form/ImageEditor.vue +598 -0
- package/src/shared/ui/form/Input.vue +72 -0
- package/src/shared/ui/form/Range.vue +65 -0
- package/src/shared/ui/form/Select.vue +76 -0
- package/src/shared/ui/form/Switch.vue +38 -0
- package/src/shared/ui/form/Textarea.vue +144 -0
- package/src/shared/ui/form/index.ts +9 -0
- package/src/shared/ui/index.ts +9 -0
- package/src/shared/ui/layout/BusyOverlay.vue +31 -0
- package/src/shared/ui/layout/Callout.vue +44 -0
- package/src/shared/ui/layout/Card.vue +38 -0
- package/src/shared/ui/layout/Container.vue +36 -0
- package/src/shared/ui/layout/EmptyState.vue +99 -0
- package/src/shared/ui/layout/EntityMediaRow.vue +54 -0
- package/src/shared/ui/layout/FilterResultsLayout.vue +22 -0
- package/src/shared/ui/layout/FloatingPanel.vue +37 -0
- package/src/shared/ui/layout/FullscreenDimmer.vue +11 -0
- package/src/shared/ui/layout/Grid.vue +40 -0
- package/src/shared/ui/layout/Inline.vue +59 -0
- package/src/shared/ui/layout/LoadingState.vue +39 -0
- package/src/shared/ui/layout/MediaBox.vue +47 -0
- package/src/shared/ui/layout/OverlayPanel.vue +28 -0
- package/src/shared/ui/layout/OverlayWaitPanel.vue +22 -0
- package/src/shared/ui/layout/PageSection.vue +43 -0
- package/src/shared/ui/layout/PageToolbar.vue +29 -0
- package/src/shared/ui/layout/Panel.vue +39 -0
- package/src/shared/ui/layout/ProgressBar.vue +49 -0
- package/src/shared/ui/layout/Section.vue +30 -0
- package/src/shared/ui/layout/SegmentedControl.vue +43 -0
- package/src/shared/ui/layout/SelectableCard.vue +46 -0
- package/src/shared/ui/layout/SelectableRow.vue +41 -0
- package/src/shared/ui/layout/Skeleton.vue +25 -0
- package/src/shared/ui/layout/SkeletonAvatar.vue +30 -0
- package/src/shared/ui/layout/SkeletonEntityCard.vue +20 -0
- package/src/shared/ui/layout/SkeletonFeedPost.vue +22 -0
- package/src/shared/ui/layout/SkeletonGrid.vue +18 -0
- package/src/shared/ui/layout/SkeletonListRow.vue +31 -0
- package/src/shared/ui/layout/SkeletonText.vue +25 -0
- package/src/shared/ui/layout/Stack.vue +42 -0
- package/src/shared/ui/layout/StateBlock.vue +44 -0
- package/src/shared/ui/layout/TwoPaneLayout.vue +35 -0
- package/src/shared/ui/layout/VirtualList.vue +160 -0
- package/src/shared/ui/layout/index.ts +35 -0
- package/src/shared/ui/layout/skeletonSurfaceStyles.ts +24 -0
- package/src/shared/ui/navigation/NavItem.vue +139 -0
- package/src/shared/ui/navigation/Tab.vue +61 -0
- package/src/shared/ui/navigation/Tabs.vue +37 -0
- package/src/shared/ui/navigation/index.ts +4 -0
- package/src/shared/ui/primitives/Action.vue +19 -0
- package/src/shared/ui/primitives/Block.vue +28 -0
- package/src/shared/ui/primitives/CanvasView.vue +19 -0
- package/src/shared/ui/primitives/Control.vue +24 -0
- package/src/shared/ui/primitives/ControlSelect.vue +19 -0
- package/src/shared/ui/primitives/ControlTextarea.vue +17 -0
- package/src/shared/ui/primitives/FieldLabel.vue +19 -0
- package/src/shared/ui/primitives/Form.vue +19 -0
- package/src/shared/ui/primitives/Heading.vue +29 -0
- package/src/shared/ui/primitives/Image.vue +17 -0
- package/src/shared/ui/primitives/LineBreak.vue +3 -0
- package/src/shared/ui/primitives/Link.vue +19 -0
- package/src/shared/ui/primitives/List.vue +28 -0
- package/src/shared/ui/primitives/ListItem.vue +19 -0
- package/src/shared/ui/primitives/OptionItem.vue +19 -0
- package/src/shared/ui/primitives/Text.vue +28 -0
- package/src/shared/ui/primitives/VideoView.vue +19 -0
- package/src/shared/ui/primitives/index.ts +19 -0
- package/src/shared/ui/primitives/resolveElement.ts +25 -0
- package/src/shared/ui/special/AngularAccent.vue +106 -0
- package/src/shared/ui/special/ExtensionRegistrySlotButton.vue +143 -0
- package/src/shared/ui/special/InfoRow.vue +39 -0
- package/src/shared/ui/special/LogViewer.vue +53 -0
- package/src/shared/ui/special/PageHeader.vue +23 -0
- package/src/shared/ui/special/RegistrySlotMissingCallout.vue +48 -0
- package/src/shared/ui/special/WelcomeCard.vue +32 -0
- package/src/shared/ui/special/index.ts +9 -0
- package/src/shared/utils/app-paths.ts +50 -0
- package/src/shared/utils/attachments.ts +16 -0
- package/src/shared/utils/autostart.ts +213 -0
- package/src/shared/utils/build-files.ts +439 -0
- package/src/shared/utils/build-manifest-init.ts +176 -0
- package/src/shared/utils/cloudinary.ts +67 -0
- package/src/shared/utils/cn.ts +7 -0
- package/src/shared/utils/download-stats-week.ts +165 -0
- package/src/shared/utils/entity-api-to-cache.ts +84 -0
- package/src/shared/utils/entity-build-from-api.ts +1 -0
- package/src/shared/utils/entity-display.ts +27 -0
- package/src/shared/utils/entity-map-from-api.ts +1 -0
- package/src/shared/utils/file-hash.ts +65 -0
- package/src/shared/utils/formatSize.ts +5 -0
- package/src/shared/utils/formatTime.ts +157 -0
- package/src/shared/utils/getAccountSkinRender.ts +32 -0
- package/src/shared/utils/index.ts +34 -0
- package/src/shared/utils/local-mods.ts +678 -0
- package/src/shared/utils/local-settings.ts +217 -0
- package/src/shared/utils/member-join-stats.ts +35 -0
- package/src/shared/utils/platform.ts +86 -0
- package/src/shared/utils/play-host-slug.ts +92 -0
- package/src/shared/utils/rich-content.ts +294 -0
- package/src/shared/utils/safeRequest.ts +23 -0
- package/src/shared/utils/semver.ts +81 -0
- package/src/shared/utils/serverPermissions.ts +155 -0
- package/src/shared/utils/skin-render-cache.ts +372 -0
- package/src/shared/utils/stripMarkdown.ts +45 -0
- package/src/shared/utils/transliterate.ts +74 -0
- package/src/shared/utils/updateAccountSkinRender.ts +64 -0
- package/src/shared/utils/updater.ts +218 -0
- package/src/shared/utils/uploadImage.ts +195 -0
- package/src/shared/utils/user-status.ts +9 -0
- package/src/tiptap/index.ts +7 -0
- package/tsconfig.json +13 -0
package/README.md
ADDED
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
# @rynt/sdk
|
|
2
|
+
|
|
3
|
+
Официальный SDK для **Rynt Launcher**: UI-кит, типы, runtime расширений и API хоста.
|
|
4
|
+
|
|
5
|
+
**Документация:** [https://docs.rynt.space](https://docs.rynt.space)
|
|
6
|
+
**Сборка расширений:** [`@rynt/extension-build`](https://www.npmjs.com/package/@rynt/extension-build)
|
|
7
|
+
**Создать проект:** [`@rynt/create-extension`](https://www.npmjs.com/package/@rynt/create-extension)
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## Установка
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
npm install @rynt/sdk
|
|
15
|
+
# peer: vue ^3.5, vue-router ^4.6 (router опционален)
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
Для **авторов расширений** обычно ставят SDK вместе с пресетом Vite:
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
npm install -D @rynt/sdk @rynt/extension-build vite vue @vitejs/plugin-vue typescript vue-tsc
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
Быстрый старт проекта — [create-extension](https://www.npmjs.com/package/@rynt/create-extension) или [Hello World в документации](https://docs.rynt.space/get-started/hello-world).
|
|
25
|
+
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
## Экспорты
|
|
29
|
+
|
|
30
|
+
| Subpath | Назначение |
|
|
31
|
+
|---------|------------|
|
|
32
|
+
| **`@rynt/sdk`** | UI-компоненты, типы сущностей, утилиты |
|
|
33
|
+
| **`@rynt/sdk/extension`** | `defineRyntExtension`, реестры, `useModel`, лоадеры, entity-виджеты |
|
|
34
|
+
| **`@rynt/sdk/extension-marketplace`** | HTTP-клиент и типы REST каталога расширений |
|
|
35
|
+
| **`@rynt/sdk/extension-expose-map`** | Module augmentation для `useExtensionExpose` |
|
|
36
|
+
| **`@rynt/sdk/extension-registry-payload-map`** | Module augmentation для типов реестров |
|
|
37
|
+
| **`@rynt/sdk/extension/registries`** | Низкоуровневый доступ к реестрам |
|
|
38
|
+
| **`@rynt/sdk/session`** | Токен сессии для API |
|
|
39
|
+
| **`@rynt/sdk/host`** | API хоста лаунчера (модели, загрузка расширений) |
|
|
40
|
+
| **`@rynt/sdk/tiptap`** | TipTap-типы, согласованные с редактором лаунчера |
|
|
41
|
+
|
|
42
|
+
Подробный обзор: [SDK в документации](https://docs.rynt.space/sdk/).
|
|
43
|
+
|
|
44
|
+
---
|
|
45
|
+
|
|
46
|
+
## Пример: расширение
|
|
47
|
+
|
|
48
|
+
```ts
|
|
49
|
+
import { markRaw } from 'vue';
|
|
50
|
+
import {
|
|
51
|
+
defineRyntExtension,
|
|
52
|
+
resolvedNavigationPath,
|
|
53
|
+
} from '@rynt/sdk/extension';
|
|
54
|
+
|
|
55
|
+
import HelloPage from './HelloPage.vue';
|
|
56
|
+
|
|
57
|
+
const EXTENSION_ID = '@acme/hello-world';
|
|
58
|
+
|
|
59
|
+
export default defineRyntExtension((ctx) => {
|
|
60
|
+
const routePath = resolvedNavigationPath(EXTENSION_ID, 'hello');
|
|
61
|
+
|
|
62
|
+
ctx.registerRegistryEntry({
|
|
63
|
+
registryId: 'core.page',
|
|
64
|
+
key: 'hello',
|
|
65
|
+
value: {
|
|
66
|
+
path: 'hello',
|
|
67
|
+
title: 'Hello',
|
|
68
|
+
component: markRaw(HelloPage),
|
|
69
|
+
resolvedRoutePath: routePath,
|
|
70
|
+
},
|
|
71
|
+
});
|
|
72
|
+
|
|
73
|
+
ctx.registerRegistryEntry({
|
|
74
|
+
registryId: 'core.nav',
|
|
75
|
+
key: 'hello',
|
|
76
|
+
value: {
|
|
77
|
+
link: routePath,
|
|
78
|
+
label: 'Hello',
|
|
79
|
+
icon: 'home',
|
|
80
|
+
},
|
|
81
|
+
});
|
|
82
|
+
});
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
Сборка и манифест — в [`@rynt/extension-build`](https://www.npmjs.com/package/@rynt/extension-build).
|
|
86
|
+
|
|
87
|
+
---
|
|
88
|
+
|
|
89
|
+
## UI в расширении
|
|
90
|
+
|
|
91
|
+
Компоненты из корневого пакета подключаются через host-shim при сборке (см. extension-build):
|
|
92
|
+
|
|
93
|
+
```vue
|
|
94
|
+
<script setup lang="ts">
|
|
95
|
+
import { Button, Block, Text } from '@rynt/sdk';
|
|
96
|
+
</script>
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
Справочник компонентов: [UI-кит](https://docs.rynt.space/sdk/ui/).
|
|
100
|
+
|
|
101
|
+
---
|
|
102
|
+
|
|
103
|
+
## Типизация между расширениями
|
|
104
|
+
|
|
105
|
+
Для `useExtensionExpose` и кастомных реестров используйте module augmentation — [типизация контрактов](https://docs.rynt.space/extensions/typing-contracts).
|
|
106
|
+
|
|
107
|
+
---
|
|
108
|
+
|
|
109
|
+
## Требования
|
|
110
|
+
|
|
111
|
+
- **Node.js** ≥ 20 (для CLI и современного tooling)
|
|
112
|
+
- **Rynt Launcher** с поддержкой **Extension API `1`** (`extensionApi: "1"` в манифесте)
|
|
113
|
+
- **Vue 3.5+** в runtime лаунчера (в бандл расширения Vue не дублируется — один экземпляр с хоста)
|
|
114
|
+
|
|
115
|
+
---
|
|
116
|
+
|
|
117
|
+
## См. также
|
|
118
|
+
|
|
119
|
+
- [Документация](https://docs.rynt.space)
|
|
120
|
+
- [Расширения: обзор](https://docs.rynt.space/extensions/)
|
|
121
|
+
- [Dev-режим (hot reload)](https://docs.rynt.space/extensions/dev-workflow)
|
|
122
|
+
- [Маркетплейс](https://docs.rynt.space/marketplace/)
|
package/REGISTRIES.md
ADDED
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
# Реестры расширений
|
|
2
|
+
|
|
3
|
+
Единая модель: расширения и хост кладут значения под строковым **`registryId`** и ключом **`key`**. У каждой записи в store хранятся **`extensionId`** (кто записал) и опционально **`order`**.
|
|
4
|
+
|
|
5
|
+
## `extensionId` и хост
|
|
6
|
+
|
|
7
|
+
- **`extensionId`** всегда **строка** (нет `null`).
|
|
8
|
+
- Записи **самого лаунчера** (код, импортирующий `@rynt/sdk` напрямую, без бандла расширения) получают **`extensionId === 'rynt'`** — константа **`HOST_EXTENSION_ID`** в `packages/sdk/src/registries/extension-scope.ts`.
|
|
9
|
+
- Записи **расширения** получают **`id` манифеста** (например `@rynt/quilt-loader`) из **`ryntExtensionViteConfig({ manifest })`** / собранного **`dist/manifest.json`**.
|
|
10
|
+
|
|
11
|
+
Откуда берётся id при записи **без параметра** в `register`:
|
|
12
|
+
|
|
13
|
+
1. **В процессе `setup`** хост оборачивает вызов в `pushExtensionScope(manifest.id)` / `popExtensionScope` — см. `packages/sdk/src/extensions/host.ts`.
|
|
14
|
+
2. **`ctx.registerRegistryEntry`** дополнительно оборачивает запись в `withExtensionScope(ctx.extensionId, …)` — см. `packages/sdk/src/extensions/context.ts`.
|
|
15
|
+
3. **Собранное расширение** импортирует `@rynt/sdk/plugin` (и при необходимости `@rynt/sdk/registries`) через **хост-шимы** из `@rynt/extension-build`: в бандл запекается **`__RYNT_EXTENSION_ID__`** из **`manifest.id`** в Vite-пресете (`ryntExtensionViteConfig`), и каждый вызов метода `use*Registry()` оборачивается в `pushExtensionScope` / `popExtensionScope` с этим id. Подробнее — [packages/extension-build/README.md](../extension-build/README.md).
|
|
16
|
+
|
|
17
|
+
Публичное API одного реестра — **`ExtensionRegistryApi<T>`** в `packages/sdk/src/registries/extension-registry-api.ts`:
|
|
18
|
+
|
|
19
|
+
- **`register(key, value, order?)`** — без аргумента `extensionId`; внутри используется **`getCurrentExtensionId()`**.
|
|
20
|
+
- **`get`**, **`has`**, **`keys`**, **`keyValuePairs()`**, **`getMeta`**, **`getAll`**, **`entries()`**, **`delete(key)`**.
|
|
21
|
+
|
|
22
|
+
Строка **`RegistryRow<T>`** для UI: `registryKey`, `extensionId`, `order?`, **`value: T`**.
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
## Где живут «лаунчерные» реестры (SDK)
|
|
27
|
+
|
|
28
|
+
Реестры, которые связывают расширения с **конкретным UI и сервисами клиента** (маршруты, меню, слоты интерфейса, лоадеры, провайдеры модов), объявляются **только в `@rynt/sdk`**, в `packages/sdk/src/registries/builtins/`. Строковый **`registryId`** задаётся один раз литералом в **`defineExtensionRegistry<T>('…')`** в соответствующем файле.
|
|
29
|
+
|
|
30
|
+
| `registryId` | Тип значения (payload) | Назначение |
|
|
31
|
+
| ------------------ | ----------------------------- | ---------------------------------------------------------------------------------- |
|
|
32
|
+
| `core.page` | `CorePageItem` | Маршрут + компонент страницы (`path`, `title?`, `component`, `resolvedRoutePath`). |
|
|
33
|
+
| `core.nav` | `CoreNavItem` | Пункт меню: `link`, `label`, `icon`, `badgeCount?`. |
|
|
34
|
+
| `core.sidebar` | `CoreSidebarItem` | `placement`: `strip` \| `footer`, `component`. |
|
|
35
|
+
| `core.shell` | `Component` (Vue) | Оверлей: сам компонент как значение записи. |
|
|
36
|
+
| `core.userStrip` | `Component` (Vue) | То же для действий в строке пользователя. |
|
|
37
|
+
| `core.loader` | `BaseLoader` | Лоадеры Minecraft (ключ = `loader.id`). |
|
|
38
|
+
| `core.modProvider` | `ModMarketplaceProvider` | Провайдеры маркетплейса модов. |
|
|
39
|
+
| `core.fileEditor` | `FileEditorProvider` | Редактор файлов в IDE сборки. |
|
|
40
|
+
| `core.theme` | `ThemeDefinition` | Темы оформления. |
|
|
41
|
+
| `core.accountProvider` | `IAuthProvider` | Провайдеры входа (ключ = `provider.id`). |
|
|
42
|
+
| `core.inviteHandler` | `InviteHandlerRegistration` | UI/accept инвайтов (ключ = `invite.type`). |
|
|
43
|
+
|
|
44
|
+
Плюс **визуальные слоты** (`core.buildCardActions`, `core.feedBeforeContent`, `core.modManageActions`, …) — полный перечень с props и примерами:
|
|
45
|
+
|
|
46
|
+
**[Справочник `core.*` в launcher-docs](../launcher-docs/docs/extensions/core-registries.md)**
|
|
47
|
+
|
|
48
|
+
Сводная карта типов — `packages/sdk/src/extensions/registries/registry-value-map.ts`.
|
|
49
|
+
|
|
50
|
+
Из пакета экспортируются **`useExtensionPageRegistry`**, **`useLoaderRegistry`**, **`useModProviderRegistry`** и т.д.
|
|
51
|
+
|
|
52
|
+
При старте хост расширений вызывает **`ensureCoreExtensionRegistries()`** (в т.ч. из **`initializeRyntExtensions`**) — подтягиваются side-effect объявлений builtin-модулей.
|
|
53
|
+
|
|
54
|
+
**Встроенные записи хоста** (ванильные лоадеры, Modrinth/CurseForge в маркетплейсе) регистрируются в **`registerBuiltinRegistryEntries`** клиента после **`resetExtensionRegistries`**; при этом scope по умолчанию — **`rynt`**, записи помечаются как лаунчерные.
|
|
55
|
+
|
|
56
|
+
---
|
|
57
|
+
|
|
58
|
+
## Как использует клиент (лаунчер)
|
|
59
|
+
|
|
60
|
+
1. Импорт из **`@rynt/sdk`**: **`useExtension*Registry`**, при необходимости **`RegistryRow`**, **`CorePageItem`**, …
|
|
61
|
+
2. Во Vue — чтение в **`computed`**: **`useXRegistry().entries()`** (или `getAll()` / `keyValuePairs()`), чтобы трекать реактивный store.
|
|
62
|
+
3. В шаблоне: ключ `entry.extensionId` + `entry.registryKey`, данные — **`entry.value`**.
|
|
63
|
+
4. Маршруты страниц — **`syncExtensionRoutes`** / `attachExtensionRoutes` в `packages/sdk/src/extensions/router-bridge.ts` (реестр **`core.page`**).
|
|
64
|
+
5. Запись от имени приложения — тот же **`register(key, value, order?)`** на **`use*Registry()`** (scope = **`rynt`**).
|
|
65
|
+
|
|
66
|
+
---
|
|
67
|
+
|
|
68
|
+
## Как использует расширение
|
|
69
|
+
|
|
70
|
+
Два равноправных способа (оба дают корректный **`extensionId`** при условии актуального **`manifest.id`** и сборки через **`@rynt/extension-build`**):
|
|
71
|
+
|
|
72
|
+
### 1. Через контекст `setup`
|
|
73
|
+
|
|
74
|
+
```ts
|
|
75
|
+
defineRyntExtension((ctx) => {
|
|
76
|
+
ctx.registerRegistryEntry({
|
|
77
|
+
registryId: 'core.page',
|
|
78
|
+
key: 'main',
|
|
79
|
+
value: {
|
|
80
|
+
/* CorePageItem */
|
|
81
|
+
},
|
|
82
|
+
order: 10,
|
|
83
|
+
});
|
|
84
|
+
});
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
### 2. Через `use*Registry()` из `@rynt/sdk/plugin`
|
|
88
|
+
|
|
89
|
+
Удобно, когда нужен тот же API, что у хоста, или регистрация вне явной передачи `ctx`:
|
|
90
|
+
|
|
91
|
+
```ts
|
|
92
|
+
import { defineRyntExtension, useLoaderRegistry } from '@rynt/sdk/plugin';
|
|
93
|
+
|
|
94
|
+
defineRyntExtension(() => {
|
|
95
|
+
const loader = new MyLoader();
|
|
96
|
+
useLoaderRegistry().register(loader.id, loader);
|
|
97
|
+
});
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
Для экрана с пунктом в меню обычно две записи: **`core.page`** и **`core.nav`**. Путь в hash-router — **`resolvedNavigationPath(extensionId, slug)`** (для `link` в nav можно взять `ctx.extensionId` или константу, совпадающую с **`manifest.id`** расширения).
|
|
101
|
+
|
|
102
|
+
Импорты: **`@rynt/sdk/plugin`** — `defineRyntExtension`, `resolvedNavigationPath`, `use*Registry`, `defineExtensionRegistry`, `getExtensionRegistry`, `markModMarketplaceProvider`, …
|
|
103
|
+
|
|
104
|
+
---
|
|
105
|
+
|
|
106
|
+
## Маркетплейс модов и обёртка `registerModMarketplaceProvider`
|
|
107
|
+
|
|
108
|
+
Хелпер **`registerModMarketplaceProvider(provider)`** в `packages/sdk/src/shared/mods/mod-marketplace-registry.ts` внутри вызывает **`useModProviderRegistry().register(...)`** и тем же правилом scope получает **`rynt`** или id расширения.
|
|
109
|
+
|
|
110
|
+
---
|
|
111
|
+
|
|
112
|
+
## Класс `loaderRegistry` (`@rynt/sdk/minecraft-loader`)
|
|
113
|
+
|
|
114
|
+
**`loaderRegistry.register(loader)`** делегирует в **`useLoaderRegistry().register(loader.id, loader)`**. Используйте его, когда удобнее импортировать **`@rynt/sdk/minecraft-loader`**, а не реестр напрямую.
|
|
115
|
+
|
|
116
|
+
Опциональное поле **`modsProviderLoaderIds`** на **`BaseLoader`** задаёт id для фильтрации в маркетплейсах модов (CurseForge, Modrinth, кастомные провайдеры), если registry **`id`** не совпадает с именами на площадках. Резолв: **`resolveModsProviderLoaderIds(loaderId, providerId)`**.
|
|
117
|
+
|
|
118
|
+
---
|
|
119
|
+
|
|
120
|
+
## Свой `registryId`
|
|
121
|
+
|
|
122
|
+
Уникальная строка (часто префикс расширения + имя слота) и тип **`T`**.
|
|
123
|
+
|
|
124
|
+
1. **Через `ctx.registerRegistryEntry`** с нужным `registryId`.
|
|
125
|
+
2. **Use-функция** — как в SDK:
|
|
126
|
+
|
|
127
|
+
```ts
|
|
128
|
+
import { defineExtensionRegistry } from '@rynt/sdk/plugin';
|
|
129
|
+
|
|
130
|
+
type MySlotItem = { component: Component; label: string };
|
|
131
|
+
|
|
132
|
+
export const useStoredItemRegistry = defineExtensionRegistry<MySlotItem>(
|
|
133
|
+
'@rynt/my-pack.stored-item',
|
|
134
|
+
);
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
Запись из **`setup`**: либо **`ctx.registerRegistryEntry`**, либо **`useStoredItemRegistry().register(key, value, order?)`** (после импорта из плагина — с корректным scope в бандле расширения).
|
|
138
|
+
|
|
139
|
+
**Манифест** (`contributes.rynt`): **`declaresRegistries`**, **`extendsRegistries`** (с `keys`) — см. `packages/sdk/src/extensions/registries/manifest-rynt.ts` и [docs/marketplace/02-manifest-contract.md](../../docs/marketplace/02-manifest-contract.md).
|
|
140
|
+
|
|
141
|
+
**Расширение чужого реестра:** `getExtensionRegistry(registryId)` из **`@rynt/sdk/plugin`** / **`@rynt/sdk/registries`** — тот же `register`/`get`/`entries`, что у use-реестра. Тип строки реестра задаётся явным дженериком **`getExtensionRegistry<MyRow>(id)`** или через **`ExtensionRegistryPayloadMap`** (см. ниже), чтобы не импортировать типы из пакета владельца. В манифесте укажите **`extensionDependencies`**, чтобы `setup` шёл после расширения, которое объявляет реестр и записи по умолчанию.
|
|
142
|
+
|
|
143
|
+
---
|
|
144
|
+
|
|
145
|
+
## Публичный API расширения (`defineExpose` / `useExtensionExpose`)
|
|
146
|
+
|
|
147
|
+
Расширение может опубликовать объект, который **читают другие расширения** по **`manifest.id`** поставщика (тот же id, что в **`defineExtensionRegistry`** / scope).
|
|
148
|
+
|
|
149
|
+
**Запись expose (два равноправных способа):**
|
|
150
|
+
|
|
151
|
+
1. В **`setup`**: **`ctx.defineExpose(value)`** — сразу кладёт значение в хранилище.
|
|
152
|
+
2. **Результат `setup`**: вернуть **`{ expose: value }`** (или `Promise<…>` с таким полем). После завершения **`setup`** хост применяет `expose` и **перезаписывает** то, что успели задать через **`ctx.defineExpose`**, если использовались оба варианта.
|
|
153
|
+
|
|
154
|
+
**Чтение у потребителя:** **`getExtensionExpose(id)`** (императивно) или **`useExtensionExpose(id)`** (Vue **`computed`**, реагирует на появление/смену expose — см. **`extensionExposeRevision`** в рантайме).
|
|
155
|
+
|
|
156
|
+
Типизация: в пакете-поставщике объявляют интерфейс и дополняют карту **`ExtensionExposeMap`** (пустой интерфейс в **`@rynt/sdk/extension-expose-map`**, отдельный subpath пакета **`@rynt/sdk`**). Зависимый пакет импортирует модуль с **`declare module`** (или re-export «контрактного» entry), после чего **`useExtensionExpose('@rynt/…')`** выводит тип без `as`.
|
|
157
|
+
|
|
158
|
+
Исходники: **`packages/sdk/src/extensions/extension-expose.ts`**, **`packages/sdk/src/extensions/host.ts`** (вызов после `setup`), **`packages/sdk/src/extensions/context.ts`** (**`defineExpose`**).
|
|
159
|
+
|
|
160
|
+
---
|
|
161
|
+
|
|
162
|
+
## Типизация значений чужих реестров (`ExtensionRegistryPayloadMap`)
|
|
163
|
+
|
|
164
|
+
По аналогии с **`ExtensionExposeMap`**: в SDK есть пустой интерфейс **`ExtensionRegistryPayloadMap`** (**`@rynt/sdk/extension-registry-payload-map`**). **Владелец** реестра (тот, кто задаёт **`registryId`** в **`declaresRegistries`** и контракт строки `T`) добавляет в свой пакет файл вида:
|
|
165
|
+
|
|
166
|
+
```ts
|
|
167
|
+
import type { MyRow } from './types';
|
|
168
|
+
|
|
169
|
+
declare module '@rynt/sdk/extension-registry-payload-map' {
|
|
170
|
+
interface ExtensionRegistryPayloadMap {
|
|
171
|
+
'@rynt/my-pack.my-registry': MyRow;
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
и подключает его **side-effect** из entry, который и так импортируют потребители (например **`import './registry-payload-map'`** в **`index.ts`** субмодуля **`./message-types`**).
|
|
177
|
+
|
|
178
|
+
После этого зависимое расширение пишет **`getExtensionRegistry(MY_REGISTRY_ID)`** без дженерика — тип **`ExtensionRegistryApi<MyRow>`** выводится, если **`MY_REGISTRY_ID`** имеет литеральный тип (константа **`as const`** из пакета владельца). Для **`core.*`** по-прежнему действует **`BuiltinRegistryValueMap`**; приоритет у встроенной карты, если id совпал бы с расширенной (на практике **`core.*`** и id расширений не пересекаются).
|
|
179
|
+
|
|
180
|
+
Если augmentation не подключён (или аргумент распался до широкого **`string`**), остаётся явный вызов **`getExtensionRegistry<MyRow>(registryId)`** или импорт типа из пакета владельца.
|
|
181
|
+
|
|
182
|
+
---
|
|
183
|
+
|
|
184
|
+
## Удалённые / устаревшие API
|
|
185
|
+
|
|
186
|
+
- **`registerHostRegistryItem`**, **`registerExtensionRegistryItem`** (публично), **`forExtension`**, **`registerFromExtension`** — заменены единым **`register`** + scope.
|
|
187
|
+
- Отдельный литерал **`extensionId: null`** для «хоста» — заменён на строку **`'rynt'`**.
|
|
188
|
+
|
|
189
|
+
Дополнительно для авторов: **[packages/extension-build/README.md](../extension-build/README.md)**, обзор **[docs/extensions.md](../../docs/extensions.md)**.
|
package/env.d.ts
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/** Инструментальный файл типизации без vite-бандла SDK-пакета. Пути приложений задаём только через aliases типового режима typecheck. */
|
|
2
|
+
interface ImportMetaEnv {
|
|
3
|
+
readonly VITE_PACKAGE_VERSION?: string;
|
|
4
|
+
readonly MODE?: string;
|
|
5
|
+
readonly DEV?: boolean;
|
|
6
|
+
readonly PROD?: boolean;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
interface ImportMeta {
|
|
10
|
+
readonly env: ImportMetaEnv;
|
|
11
|
+
}
|
package/host-shims.d.ts
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* При изолированном typecheck SDK пакеты `@/models/*` не монтируются (остаются в хосте).
|
|
3
|
+
* `any` на границе хост ↔ SDK сохраняет реальную типизацию в клиентском проекте.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
declare module '@/models' {
|
|
7
|
+
export function useLauncherModel(): any;
|
|
8
|
+
export function useLocalBuildsModel(): any;
|
|
9
|
+
export function useUserModel(): any;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
declare module '@/models/user' {
|
|
13
|
+
export function useUserModel(): any;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
declare module '@/models/projectServers' {
|
|
17
|
+
export function useServersModel(): any;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
declare module '@/models/accounts/types' {
|
|
21
|
+
export interface Account {
|
|
22
|
+
readonly id?: string;
|
|
23
|
+
readonly profile?: {
|
|
24
|
+
readonly skinUrl?: string | null;
|
|
25
|
+
readonly skinSha1?: string | null;
|
|
26
|
+
readonly [key: string]: unknown;
|
|
27
|
+
};
|
|
28
|
+
readonly [key: string]: unknown;
|
|
29
|
+
}
|
|
30
|
+
}
|
package/package.json
ADDED
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@rynt/sdk",
|
|
3
|
+
"version": "0.9.53",
|
|
4
|
+
"description": "Rynt Launcher SDK — UI kit, extension runtime, and host APIs",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"exports": {
|
|
7
|
+
".": {
|
|
8
|
+
"types": "./src/index.ts",
|
|
9
|
+
"default": "./src/index.ts"
|
|
10
|
+
},
|
|
11
|
+
"./extension": {
|
|
12
|
+
"types": "./src/extensions/index.ts",
|
|
13
|
+
"default": "./src/extensions/index.ts"
|
|
14
|
+
},
|
|
15
|
+
"./extension-expose-map": {
|
|
16
|
+
"types": "./src/extensions/extension-expose-map.ts",
|
|
17
|
+
"default": "./src/extensions/extension-expose-map.ts"
|
|
18
|
+
},
|
|
19
|
+
"./extension-registry-payload-map": {
|
|
20
|
+
"types": "./src/extensions/registries/extension-registry-payload-map.ts",
|
|
21
|
+
"default": "./src/extensions/registries/extension-registry-payload-map.ts"
|
|
22
|
+
},
|
|
23
|
+
"./extension/registries": {
|
|
24
|
+
"types": "./src/extensions/registries/index.ts",
|
|
25
|
+
"default": "./src/extensions/registries/index.ts"
|
|
26
|
+
},
|
|
27
|
+
"./host": {
|
|
28
|
+
"types": "./src/host/index.ts",
|
|
29
|
+
"default": "./src/host/index.ts"
|
|
30
|
+
},
|
|
31
|
+
"./session": {
|
|
32
|
+
"types": "./src/extensions/session.ts",
|
|
33
|
+
"default": "./src/extensions/session.ts"
|
|
34
|
+
},
|
|
35
|
+
"./tiptap": {
|
|
36
|
+
"types": "./src/tiptap/index.ts",
|
|
37
|
+
"default": "./src/tiptap/index.ts"
|
|
38
|
+
},
|
|
39
|
+
"./extension-marketplace": {
|
|
40
|
+
"types": "./src/extension-marketplace/index.ts",
|
|
41
|
+
"default": "./src/extension-marketplace/index.ts"
|
|
42
|
+
}
|
|
43
|
+
},
|
|
44
|
+
"dependencies": {
|
|
45
|
+
"@tiptap/core": "^3.20.4",
|
|
46
|
+
"@tiptap/extension-image": "^3.20.4",
|
|
47
|
+
"@tiptap/extension-link": "^3.20.4",
|
|
48
|
+
"@tiptap/extension-text-style": "^3.20.4",
|
|
49
|
+
"@tiptap/pm": "^3.20.4",
|
|
50
|
+
"@tiptap/starter-kit": "^3.20.4",
|
|
51
|
+
"@tiptap/vue-3": "^3.20.4",
|
|
52
|
+
"@vueuse/core": "^10.11.1",
|
|
53
|
+
"axios": "^1.7.9",
|
|
54
|
+
"clsx": "^2.1.1",
|
|
55
|
+
"echarts": "^6.1.0",
|
|
56
|
+
"lodash-es": "^4.17.21",
|
|
57
|
+
"marked": "^17.0.1",
|
|
58
|
+
"semver": "^7.7.1",
|
|
59
|
+
"tailwind-merge": "^3.2.0",
|
|
60
|
+
"vue-advanced-cropper": "^2.8.9",
|
|
61
|
+
"zod": "^3.23.8"
|
|
62
|
+
},
|
|
63
|
+
"peerDependencies": {
|
|
64
|
+
"vue": "^3.5.0",
|
|
65
|
+
"vue-router": "^4.6.0"
|
|
66
|
+
},
|
|
67
|
+
"peerDependenciesMeta": {
|
|
68
|
+
"vue-router": {
|
|
69
|
+
"optional": true
|
|
70
|
+
}
|
|
71
|
+
},
|
|
72
|
+
"devDependencies": {
|
|
73
|
+
"@types/lodash-es": "^4.17.12",
|
|
74
|
+
"@types/semver": "^7.7.0",
|
|
75
|
+
"@vue/tsconfig": "^0.7.0",
|
|
76
|
+
"typescript": "~5.7.2",
|
|
77
|
+
"vue": "^3.5.13",
|
|
78
|
+
"vue-router": "^4.6.4",
|
|
79
|
+
"vue-tsc": "^2.2.0"
|
|
80
|
+
},
|
|
81
|
+
"scripts": {
|
|
82
|
+
"typecheck": "vue-tsc -p tsconfig.json --noEmit"
|
|
83
|
+
},
|
|
84
|
+
"publishConfig": {
|
|
85
|
+
"access": "public"
|
|
86
|
+
},
|
|
87
|
+
"license": "ISC"
|
|
88
|
+
}
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
RegistryDeclaration,
|
|
3
|
+
RegistryExtensionContribution,
|
|
4
|
+
} from '../extensions/registries/manifest-rynt';
|
|
5
|
+
|
|
6
|
+
export type { RegistryDeclaration, RegistryExtensionContribution };
|
|
7
|
+
|
|
8
|
+
export interface MarketplaceSlotQuery {
|
|
9
|
+
registryId: string;
|
|
10
|
+
key: string;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export interface MarketplaceExtensionSummary {
|
|
14
|
+
id: string;
|
|
15
|
+
name: string;
|
|
16
|
+
version: string;
|
|
17
|
+
/** Короткое описание из манифеста. */
|
|
18
|
+
description?: string;
|
|
19
|
+
iconUrl?: string;
|
|
20
|
+
authorName?: string;
|
|
21
|
+
downloadUrl: string;
|
|
22
|
+
artifactSha256?: string;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export type MarketplaceSlotLookupResult =
|
|
26
|
+
| { kind: 'none' }
|
|
27
|
+
| { kind: 'one'; extension: MarketplaceExtensionSummary }
|
|
28
|
+
| { kind: 'many'; extensions: MarketplaceExtensionSummary[] };
|
|
29
|
+
|
|
30
|
+
export interface MarketplaceExtensionDetail extends MarketplaceExtensionSummary {
|
|
31
|
+
manifest: Record<string, unknown>;
|
|
32
|
+
/** Rich-описание (TipTap HTML), хранится на сервере. */
|
|
33
|
+
listingDescriptionHtml?: string;
|
|
34
|
+
extensionDependencies?: Record<string, string>;
|
|
35
|
+
author?: { userId: string; displayName?: string };
|
|
36
|
+
publishedAt: string;
|
|
37
|
+
declaresRegistries: RegistryDeclaration[];
|
|
38
|
+
extendsRegistries: RegistryExtensionContribution[];
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export interface MarketplaceSearchQuery {
|
|
42
|
+
q?: string;
|
|
43
|
+
registryId?: string;
|
|
44
|
+
limit?: number;
|
|
45
|
+
offset?: number;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
export interface MarketplaceSearchResponse {
|
|
49
|
+
items: MarketplaceExtensionSummary[];
|
|
50
|
+
total: number;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
export interface PublishExtensionRequest {
|
|
54
|
+
manifest: Record<string, unknown>;
|
|
55
|
+
downloadUrl: string;
|
|
56
|
+
artifactSha256?: string;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
export interface PublishExtensionResponse {
|
|
60
|
+
id: string;
|
|
61
|
+
version: string;
|
|
62
|
+
publishedAt: string;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
export type SubmissionStatus = 'draft' | 'pending' | 'approved' | 'rejected';
|
|
66
|
+
|
|
67
|
+
export interface ExtensionArtifactUploadResult {
|
|
68
|
+
artifactId: string;
|
|
69
|
+
s3Key: string;
|
|
70
|
+
sizeBytes: number;
|
|
71
|
+
downloadUrl: string;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
export interface ExtensionListingMeta {
|
|
75
|
+
iconUrl?: string;
|
|
76
|
+
authorName?: string;
|
|
77
|
+
listingDescriptionHtml?: string;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
export interface UpdateExtensionListingRequest {
|
|
81
|
+
listingDescriptionHtml?: string;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
export interface ExtensionSubmission extends ExtensionListingMeta {
|
|
85
|
+
id: string;
|
|
86
|
+
extensionId: string;
|
|
87
|
+
version: string;
|
|
88
|
+
manifest: Record<string, unknown>;
|
|
89
|
+
artifactId: string;
|
|
90
|
+
status: SubmissionStatus;
|
|
91
|
+
authorUserId: string;
|
|
92
|
+
reviewerUserId?: string;
|
|
93
|
+
reviewNote?: string;
|
|
94
|
+
rejectionReason?: string;
|
|
95
|
+
submittedAt?: string;
|
|
96
|
+
reviewedAt?: string;
|
|
97
|
+
createdAt: string;
|
|
98
|
+
updatedAt: string;
|
|
99
|
+
s3Key?: string;
|
|
100
|
+
sizeBytes?: number;
|
|
101
|
+
downloadUrl?: string;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
export interface CreateSubmissionRequest {
|
|
105
|
+
artifactId: string;
|
|
106
|
+
manifest: Record<string, unknown>;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
export interface RejectSubmissionRequest {
|
|
110
|
+
reason?: string;
|
|
111
|
+
reviewNote?: string;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
export interface ApproveSubmissionRequest {
|
|
115
|
+
reviewNote?: string;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
export type MarketplaceApiErrorCode =
|
|
119
|
+
| 'VALIDATION_ERROR'
|
|
120
|
+
| 'SLOT_ALREADY_CLAIMED'
|
|
121
|
+
| 'REGISTRY_ALREADY_DECLARED'
|
|
122
|
+
| 'DUPLICATE_VERSION'
|
|
123
|
+
| 'VERSION_NOT_NEWER'
|
|
124
|
+
| 'SUBMISSION_ALREADY_PENDING'
|
|
125
|
+
| 'UNAUTHORIZED'
|
|
126
|
+
| 'NOT_FOUND';
|
|
127
|
+
|
|
128
|
+
/** Опубликованное расширение (latest) автора — для флоу обновления. */
|
|
129
|
+
export interface DeveloperPublishedExtension extends ExtensionListingMeta {
|
|
130
|
+
id: string;
|
|
131
|
+
version: string;
|
|
132
|
+
name: string;
|
|
133
|
+
description?: string;
|
|
134
|
+
publishedAt: string;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
export interface MarketplaceApiError {
|
|
138
|
+
code: MarketplaceApiErrorCode;
|
|
139
|
+
message: string;
|
|
140
|
+
details?: Record<string, unknown>;
|
|
141
|
+
}
|