@adminide-stack/marketplace-module-server 12.0.4-alpha.41 → 12.0.4-alpha.412
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 +321 -0
- package/lib/containers/module.d.ts +8 -0
- package/lib/containers/module.d.ts.map +1 -1
- package/lib/containers/module.js +15 -5
- package/lib/containers/module.js.map +1 -1
- package/lib/dataloaders/index.d.ts +1 -0
- package/lib/dataloaders/index.d.ts.map +1 -0
- package/lib/demo/test-graphql-examples.d.ts +73 -0
- package/lib/demo/test-graphql-examples.d.ts.map +1 -0
- package/lib/graphql/resolvers/form-templates-resolver.d.ts +220 -0
- package/lib/graphql/resolvers/form-templates-resolver.d.ts.map +1 -0
- package/lib/graphql/resolvers/form-templates-resolver.js +170 -0
- package/lib/graphql/resolvers/form-templates-resolver.js.map +1 -0
- package/lib/graphql/resolvers/gallery-resolver.d.ts +15 -0
- package/lib/graphql/resolvers/gallery-resolver.d.ts.map +1 -0
- package/lib/graphql/resolvers/gallery-resolver.js +35 -0
- package/lib/graphql/resolvers/gallery-resolver.js.map +1 -0
- package/lib/graphql/resolvers/index.d.ts +247 -1
- package/lib/graphql/resolvers/index.d.ts.map +1 -1
- package/lib/graphql/resolvers/index.js +1 -0
- package/lib/graphql/resolvers/index.js.map +1 -0
- package/lib/graphql/resolvers/installed-extension-resolver.d.ts +5 -0
- package/lib/graphql/resolvers/installed-extension-resolver.d.ts.map +1 -0
- package/lib/graphql/resolvers/installed-extension-resolver.js +289 -0
- package/lib/graphql/resolvers/installed-extension-resolver.js.map +1 -0
- package/lib/graphql/resolvers/marketplace-form-resolver.d.ts +13 -0
- package/lib/graphql/resolvers/marketplace-form-resolver.d.ts.map +1 -0
- package/lib/graphql/resolvers/marketplace-form-resolver.js +90 -0
- package/lib/graphql/resolvers/marketplace-form-resolver.js.map +1 -0
- package/lib/graphql/resolvers/publisher-analytics-resolver.d.ts +14 -0
- package/lib/graphql/resolvers/publisher-analytics-resolver.d.ts.map +1 -0
- package/lib/graphql/resolvers/publisher-analytics-resolver.js +221 -0
- package/lib/graphql/resolvers/publisher-analytics-resolver.js.map +1 -0
- package/lib/graphql/resolvers/publisher-resolver.d.ts +5 -0
- package/lib/graphql/resolvers/publisher-resolver.d.ts.map +1 -0
- package/lib/graphql/resolvers/publisher-resolver.js +176 -0
- package/lib/graphql/resolvers/publisher-resolver.js.map +1 -0
- package/lib/graphql/resolvers/registry-extension-resolver.d.ts +5 -0
- package/lib/graphql/resolvers/registry-extension-resolver.d.ts.map +1 -0
- package/lib/graphql/resolvers/registry-extension-resolver.js +46 -0
- package/lib/graphql/resolvers/registry-extension-resolver.js.map +1 -0
- package/lib/graphql/schemas/extension-pricing.graphql +546 -0
- package/lib/graphql/schemas/extension-pricing.graphql.js +1 -0
- package/lib/graphql/schemas/extension-pricing.graphql.js.map +1 -0
- package/lib/graphql/schemas/extension-registry.graphql +107 -0
- package/lib/graphql/schemas/extension-registry.graphql.js +1 -0
- package/lib/graphql/schemas/extension-registry.graphql.js.map +1 -0
- package/lib/graphql/schemas/form-templates.graphql +269 -0
- package/lib/graphql/schemas/form-templates.graphql.js +1 -0
- package/lib/graphql/schemas/form-templates.graphql.js.map +1 -0
- package/lib/graphql/schemas/gallery-schema.graphql +247 -0
- package/lib/graphql/schemas/gallery-schema.graphql.js +1 -0
- package/lib/graphql/schemas/gallery-schema.graphql.js.map +1 -0
- package/lib/graphql/schemas/index.d.ts.map +1 -1
- package/lib/graphql/schemas/index.js +3 -4
- package/lib/graphql/schemas/index.js.map +1 -1
- package/lib/graphql/schemas/installed-extension.graphql +309 -0
- package/lib/graphql/schemas/installed-extension.graphql.js +1 -0
- package/lib/graphql/schemas/installed-extension.graphql.js.map +1 -0
- package/lib/graphql/schemas/publisher-analytics.graphql +305 -0
- package/lib/graphql/schemas/publisher-analytics.graphql.js +1 -0
- package/lib/graphql/schemas/publisher-analytics.graphql.js.map +1 -0
- package/lib/graphql/schemas/publisher.graphql +376 -0
- package/lib/graphql/schemas/publisher.graphql.js +1 -0
- package/lib/graphql/schemas/publisher.graphql.js.map +1 -0
- package/lib/graphql/schemas/service.graphql +196 -0
- package/lib/index.d.ts +3 -1
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +1 -1
- package/lib/index.js.map +1 -1
- package/lib/module.d.ts +1 -1
- package/lib/module.d.ts.map +1 -1
- package/lib/module.js +10 -23
- package/lib/module.js.map +1 -1
- package/lib/plugins/extension-moleculer-service.d.ts +86 -0
- package/lib/plugins/extension-moleculer-service.d.ts.map +1 -0
- package/lib/plugins/index.d.ts +2 -0
- package/lib/plugins/index.d.ts.map +1 -0
- package/lib/services/extension-gallery-repository.d.ts +17 -0
- package/lib/services/extension-gallery-repository.d.ts.map +1 -0
- package/lib/services/extension-gallery-repository.js +192 -0
- package/lib/services/extension-gallery-repository.js.map +1 -0
- package/lib/services/extension-gallery-service-new.d.ts +39 -0
- package/lib/services/extension-gallery-service-new.d.ts.map +1 -0
- package/lib/services/extension-gallery-service.d.ts +30 -0
- package/lib/services/extension-gallery-service.d.ts.map +1 -0
- package/lib/services/extension-gallery-service.js +311 -0
- package/lib/services/extension-gallery-service.js.map +1 -0
- package/lib/services/index.d.ts +6 -1
- package/lib/services/index.d.ts.map +1 -1
- package/lib/services/installed-extension-service-ext.d.ts +16 -0
- package/lib/services/installed-extension-service-ext.d.ts.map +1 -0
- package/lib/services/installed-extension-service-ext.js +485 -0
- package/lib/services/installed-extension-service-ext.js.map +1 -0
- package/lib/services/installed-extension-service.d.ts +96 -0
- package/lib/services/installed-extension-service.d.ts.map +1 -0
- package/lib/services/installed-extension-service.js +521 -0
- package/lib/services/installed-extension-service.js.map +1 -0
- package/lib/services/installed-extension-service.test.d.ts +1 -0
- package/lib/services/installed-extension-service.test.d.ts.map +1 -0
- package/lib/services/publisher-analytics-service.d.ts +128 -0
- package/lib/services/publisher-analytics-service.d.ts.map +1 -0
- package/lib/services/publisher-event-service.d.ts +48 -0
- package/lib/services/publisher-event-service.d.ts.map +1 -0
- package/lib/services/publisher-event-service.js +296 -0
- package/lib/services/publisher-event-service.js.map +1 -0
- package/lib/services/publisher-service-context.d.ts +1 -0
- package/lib/services/publisher-service-context.d.ts.map +1 -0
- package/lib/services/publisher-service.d.ts +60 -0
- package/lib/services/publisher-service.d.ts.map +1 -0
- package/lib/services/publisher-service.js +134 -0
- package/lib/services/publisher-service.js.map +1 -0
- package/lib/store/index.d.ts +1 -1
- package/lib/store/index.d.ts.map +1 -1
- package/lib/store/models/index.d.ts +2 -1
- package/lib/store/models/index.d.ts.map +1 -1
- package/lib/store/models/installed-extension-model.d.ts +4 -0
- package/lib/store/models/installed-extension-model.d.ts.map +1 -0
- package/lib/store/models/installed-extension-model.js +269 -0
- package/lib/store/models/installed-extension-model.js.map +1 -0
- package/lib/store/models/publisher-event-model.d.ts +11 -0
- package/lib/store/models/publisher-event-model.d.ts.map +1 -0
- package/lib/store/models/publisher-model.d.ts +5 -0
- package/lib/store/models/publisher-model.d.ts.map +1 -0
- package/lib/store/models/publisher-model.js +103 -0
- package/lib/store/models/publisher-model.js.map +1 -0
- package/lib/store/models/publisher-stats-model.d.ts +1 -0
- package/lib/store/models/publisher-stats-model.d.ts.map +1 -0
- package/lib/store/repositories/index.d.ts +3 -0
- package/lib/store/repositories/index.d.ts.map +1 -0
- package/lib/store/repositories/installed-extension-repository.d.ts +73 -0
- package/lib/store/repositories/installed-extension-repository.d.ts.map +1 -0
- package/lib/store/repositories/installed-extension-repository.js +442 -0
- package/lib/store/repositories/installed-extension-repository.js.map +1 -0
- package/lib/store/repositories/publisher-analytics-repository.d.ts +1 -0
- package/lib/store/repositories/publisher-analytics-repository.d.ts.map +1 -0
- package/lib/store/repositories/publisher-repository.d.ts +19 -0
- package/lib/store/repositories/publisher-repository.d.ts.map +1 -0
- package/lib/store/repositories/publisher-repository.js +87 -0
- package/lib/store/repositories/publisher-repository.js.map +1 -0
- package/lib/templates/constants/DB_COLL_NAMES.ts.template +5 -0
- package/lib/templates/constants/SERVER_TYPES.ts.template +10 -4
- package/lib/templates/repositories/ExtensionGalleryRepository.ts.template +44 -0
- package/lib/templates/repositories/InstalledExtensionRepository.ts.template +94 -0
- package/lib/templates/repositories/MarketplacePublisherRepository.ts.template +24 -0
- package/lib/templates/repositories/RegistryExtensionRepository.ts.template +10 -15
- package/lib/templates/services/ExtensionGalleryDataLoader.ts.template +2 -0
- package/lib/templates/services/ExtensionGalleryService.ts.template +79 -0
- package/lib/templates/services/InstalledExtensionDataLoader.ts.template +2 -0
- package/lib/templates/services/InstalledExtensionService.ts.template +181 -0
- package/lib/templates/services/MarketplacePublisherService.ts.template +49 -0
- package/lib/templates/services/PublisherEventService.ts.template +56 -0
- package/lib/templates/services/RegistryExtensionService.ts.template +62 -18
- package/lib/tests/extension-integration.test.d.ts +1 -0
- package/lib/tests/extension-integration.test.d.ts.map +1 -0
- package/lib/tests/install-extension-graphql.test.d.ts +2 -0
- package/lib/tests/install-extension-graphql.test.d.ts.map +1 -0
- package/lib/tests/test-extension-services.d.ts +1 -0
- package/lib/tests/test-extension-services.d.ts.map +1 -0
- package/lib/utils/publisherValidation.d.ts +23 -0
- package/lib/utils/publisherValidation.d.ts.map +1 -0
- package/lib/utils/publisherValidation.js +144 -0
- package/lib/utils/publisherValidation.js.map +1 -0
- package/package.json +15 -7
- package/lib/graphql/resolvers/resolvers.d.ts +0 -2
- package/lib/graphql/resolvers/resolvers.d.ts.map +0 -1
- package/lib/graphql/resolvers/resolvers.js +0 -167
- package/lib/graphql/resolvers/resolvers.js.map +0 -1
- package/lib/graphql/schemas/extension.graphql +0 -57
- package/lib/graphql/schemas/extension.graphql.js +0 -1
- package/lib/graphql/schemas/extension.graphql.js.map +0 -1
- package/lib/services/extension-service.d.ts +0 -54
- package/lib/services/extension-service.d.ts.map +0 -1
- package/lib/services/extension-service.js +0 -42
- package/lib/services/extension-service.js.map +0 -1
- package/lib/store/models/registry-extension-model.d.ts +0 -10
- package/lib/store/models/registry-extension-model.d.ts.map +0 -1
- package/lib/store/models/registry-extension-model.js +0 -62
- package/lib/store/models/registry-extension-model.js.map +0 -1
- package/lib/store/repository/index.d.ts +0 -2
- package/lib/store/repository/index.d.ts.map +0 -1
- package/lib/store/repository/registry-extension-repository.d.ts +0 -31
- package/lib/store/repository/registry-extension-repository.d.ts.map +0 -1
- package/lib/store/repository/registry-extension-repository.js +0 -135
- package/lib/store/repository/registry-extension-repository.js.map +0 -1
|
@@ -0,0 +1,311 @@
|
|
|
1
|
+
import {__decorate,__param,__metadata}from'tslib';import {injectable,inject}from'inversify';import'@cdm-logger/core';import {DisposableCollection,Emitter}from'@adminide-stack/core';import {SERVER_TYPES,ExtensionRegistryStatus}from'common/server';let ExtensionGalleryService = class ExtensionGalleryService {
|
|
2
|
+
logger;
|
|
3
|
+
registryExtensionService;
|
|
4
|
+
publisherService;
|
|
5
|
+
galleryRepository;
|
|
6
|
+
disposables = new DisposableCollection();
|
|
7
|
+
_onDidChange = new Emitter();
|
|
8
|
+
onDidChange = this._onDidChange.event;
|
|
9
|
+
constructor(logger, registryExtensionService, publisherService, galleryRepository) {
|
|
10
|
+
this.logger = logger;
|
|
11
|
+
this.registryExtensionService = registryExtensionService;
|
|
12
|
+
this.publisherService = publisherService;
|
|
13
|
+
this.galleryRepository = galleryRepository;
|
|
14
|
+
this.disposables.push(this._onDidChange);
|
|
15
|
+
}
|
|
16
|
+
isEnabled() {
|
|
17
|
+
return true;
|
|
18
|
+
}
|
|
19
|
+
async query(options = {}) {
|
|
20
|
+
this.logger.trace('ExtensionGalleryService.query with options: %j', options);
|
|
21
|
+
try {
|
|
22
|
+
const {
|
|
23
|
+
text = '',
|
|
24
|
+
pageSize = 50
|
|
25
|
+
} = options;
|
|
26
|
+
const extensions = await this.registryExtensionService.findExtensions(pageSize, text, false,
|
|
27
|
+
// local
|
|
28
|
+
true);
|
|
29
|
+
const galleryExtensions = await Promise.all(extensions.map(ext => this.toGalleryExtension(ext)));
|
|
30
|
+
return {
|
|
31
|
+
__typename: 'GalleryPager',
|
|
32
|
+
firstPage: galleryExtensions,
|
|
33
|
+
total: galleryExtensions.length,
|
|
34
|
+
pageSize,
|
|
35
|
+
page: 0
|
|
36
|
+
};
|
|
37
|
+
} catch (error) {
|
|
38
|
+
this.logger.error('ExtensionGalleryService.query error: %s', error.message);
|
|
39
|
+
return {
|
|
40
|
+
__typename: 'GalleryPager',
|
|
41
|
+
firstPage: [],
|
|
42
|
+
total: 0,
|
|
43
|
+
pageSize: options.pageSize || 50,
|
|
44
|
+
page: 0
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
async getExtension(identifier) {
|
|
49
|
+
this.logger.trace('ExtensionGalleryService.getExtension: %s', typeof identifier === 'string' ? identifier : identifier.id);
|
|
50
|
+
try {
|
|
51
|
+
const extensionId = typeof identifier === 'string' ? identifier : identifier.id;
|
|
52
|
+
const extension = await this.registryExtensionService.findExtension(extensionId);
|
|
53
|
+
if (!extension) {
|
|
54
|
+
return null;
|
|
55
|
+
}
|
|
56
|
+
return this.toGalleryExtension(extension);
|
|
57
|
+
} catch (error) {
|
|
58
|
+
this.logger.error('ExtensionGalleryService.getExtension error: %s', error.message);
|
|
59
|
+
return null;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
async download(extension) {
|
|
63
|
+
this.logger.trace('ExtensionGalleryService.download: %s', extension.id);
|
|
64
|
+
try {
|
|
65
|
+
const success = await this.galleryRepository.download(extension);
|
|
66
|
+
if (success) {
|
|
67
|
+
// Return the download URL for the extension
|
|
68
|
+
const downloadUrl = extension.assets?.download?.uri || `${extension.url}/${extension.version}.vsix`;
|
|
69
|
+
this.logger.info('Extension download prepared: %s -> %s', extension.id, downloadUrl);
|
|
70
|
+
return downloadUrl;
|
|
71
|
+
}
|
|
72
|
+
throw new Error(`Failed to prepare download for extension: ${extension.id}`);
|
|
73
|
+
} catch (error) {
|
|
74
|
+
this.logger.error('ExtensionGalleryService.download error: %s', error.message);
|
|
75
|
+
throw error;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
async getReadme(extension) {
|
|
79
|
+
this.logger.trace('ExtensionGalleryService.getReadme: %s', extension.id);
|
|
80
|
+
try {
|
|
81
|
+
const readmeUrl = extension.assets?.readme?.uri;
|
|
82
|
+
if (!readmeUrl) {
|
|
83
|
+
return 'No README available for this extension.';
|
|
84
|
+
}
|
|
85
|
+
const readmeAsset = await this.galleryRepository.asset(extension.extensionSlug || extension.id, extension.version, 'README.md');
|
|
86
|
+
return readmeAsset || 'README content could not be loaded.';
|
|
87
|
+
} catch (error) {
|
|
88
|
+
this.logger.warn('Failed to fetch README for %s: %s', extension.id, error.message);
|
|
89
|
+
return 'Error loading README content.';
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
async getManifest(extension) {
|
|
93
|
+
this.logger.trace('ExtensionGalleryService.getManifest: %s', extension.id);
|
|
94
|
+
try {
|
|
95
|
+
// First try to return the already loaded manifest
|
|
96
|
+
if (extension.manifest) {
|
|
97
|
+
return extension.manifest;
|
|
98
|
+
}
|
|
99
|
+
// If not available, try to fetch from repository
|
|
100
|
+
const manifestAsset = await this.galleryRepository.asset(extension.extensionSlug || extension.id, extension.version, 'package.json');
|
|
101
|
+
return manifestAsset;
|
|
102
|
+
} catch (error) {
|
|
103
|
+
this.logger.warn('Failed to fetch manifest for %s: %s', extension.id, error.message);
|
|
104
|
+
return null;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
async getChangelog(extension) {
|
|
108
|
+
this.logger.trace('ExtensionGalleryService.getChangelog: %s', extension.id);
|
|
109
|
+
try {
|
|
110
|
+
const changelogUrl = extension.assets?.changelog?.uri;
|
|
111
|
+
if (!changelogUrl) {
|
|
112
|
+
return 'No changelog available for this extension.';
|
|
113
|
+
}
|
|
114
|
+
const changelogAsset = await this.galleryRepository.asset(extension.extensionSlug || extension.id, extension.version, 'CHANGELOG.md');
|
|
115
|
+
return changelogAsset || 'Changelog content could not be loaded.';
|
|
116
|
+
} catch (error) {
|
|
117
|
+
this.logger.warn('Failed to fetch changelog for %s: %s', extension.id, error.message);
|
|
118
|
+
return 'Error loading changelog content.';
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
async getLicense(extension) {
|
|
122
|
+
this.logger.trace('ExtensionGalleryService.getLicense: %s', extension.id);
|
|
123
|
+
try {
|
|
124
|
+
const licenseUrl = extension.assets?.license?.uri;
|
|
125
|
+
if (!licenseUrl) {
|
|
126
|
+
return 'No license information available for this extension.';
|
|
127
|
+
}
|
|
128
|
+
const licenseAsset = await this.galleryRepository.asset(extension.extensionSlug || extension.id, extension.version, 'LICENSE');
|
|
129
|
+
return licenseAsset || 'License content could not be loaded.';
|
|
130
|
+
} catch (error) {
|
|
131
|
+
this.logger.warn('Failed to fetch license for %s: %s', extension.id, error.message);
|
|
132
|
+
return 'Error loading license information.';
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
async loadCompatibleVersion(extension) {
|
|
136
|
+
this.logger.trace('ExtensionGalleryService.loadCompatibleVersion: %s', extension.id);
|
|
137
|
+
try {
|
|
138
|
+
// Get all extensions from registry (search for this specific extension)
|
|
139
|
+
const allExtensions = await this.registryExtensionService.findExtensions(100, `${extension.publisher.displayName}.${extension.name}`, true, true);
|
|
140
|
+
// Filter to get versions of the same extension
|
|
141
|
+
const extensionVersions = allExtensions.filter(ext => ext.name === extension.name);
|
|
142
|
+
if (!extensionVersions || extensionVersions.length === 0) {
|
|
143
|
+
// If no versions found, return the current extension
|
|
144
|
+
return extension;
|
|
145
|
+
}
|
|
146
|
+
// Find the latest compatible version
|
|
147
|
+
const latestVersion = extensionVersions.sort((a, b) => b.version.localeCompare(a.version, undefined, {
|
|
148
|
+
numeric: true
|
|
149
|
+
}))[0];
|
|
150
|
+
// Convert to gallery extension if different from current
|
|
151
|
+
if (latestVersion.version !== extension.version) {
|
|
152
|
+
return this.toGalleryExtension(latestVersion);
|
|
153
|
+
}
|
|
154
|
+
return extension;
|
|
155
|
+
} catch (error) {
|
|
156
|
+
this.logger.warn('Failed to load compatible version for %s: %s', extension.id, error.message);
|
|
157
|
+
// Return original extension if we can't find a compatible version
|
|
158
|
+
return extension;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
async toGalleryExtension(registryExt) {
|
|
162
|
+
let publisherInfo = null;
|
|
163
|
+
try {
|
|
164
|
+
const publisherId = registryExt.publisherId || registryExt.publisher;
|
|
165
|
+
if (publisherId) {
|
|
166
|
+
publisherInfo = await this.publisherService.findById(publisherId);
|
|
167
|
+
}
|
|
168
|
+
} catch (error) {
|
|
169
|
+
this.logger.warn('Failed to get publisher info: %s', error.message);
|
|
170
|
+
}
|
|
171
|
+
const manifest = this.getManifestFromRelease(registryExt);
|
|
172
|
+
const galleryExtension = {
|
|
173
|
+
__typename: 'GalleryExtension',
|
|
174
|
+
id: registryExt.id || registryExt._id?.toString() || '',
|
|
175
|
+
uuid: registryExt.uuid,
|
|
176
|
+
name: registryExt.name,
|
|
177
|
+
displayName: manifest?.displayName || registryExt.name,
|
|
178
|
+
description: manifest?.description || '',
|
|
179
|
+
version: registryExt.version || '0.0.1',
|
|
180
|
+
extensionSlug: registryExt.extensionSlug,
|
|
181
|
+
manifest: manifest,
|
|
182
|
+
publisher: publisherInfo,
|
|
183
|
+
publisherId: publisherInfo?.id || '',
|
|
184
|
+
installed: registryExt.installed || false,
|
|
185
|
+
updatedAt: registryExt.updatedAt,
|
|
186
|
+
url: registryExt.url,
|
|
187
|
+
remoteURL: registryExt.remoteURL,
|
|
188
|
+
status: ExtensionRegistryStatus.Active,
|
|
189
|
+
viewerCanAdminister: registryExt.viewerCanAdminister || false,
|
|
190
|
+
isLocal: registryExt.isLocal || false,
|
|
191
|
+
categories: manifest?.categories || [],
|
|
192
|
+
tags: manifest?.keywords || [],
|
|
193
|
+
releases: registryExt.releases || [],
|
|
194
|
+
downloadCount: 0,
|
|
195
|
+
installCount: 0,
|
|
196
|
+
weeklyDownloads: 0,
|
|
197
|
+
rating: 0,
|
|
198
|
+
ratingCount: 0,
|
|
199
|
+
featured: false,
|
|
200
|
+
preview: false,
|
|
201
|
+
date: registryExt.updatedAt?.toISOString(),
|
|
202
|
+
assets: {
|
|
203
|
+
__typename: 'GalleryExtensionAssets',
|
|
204
|
+
icon: {
|
|
205
|
+
__typename: 'GalleryExtensionAsset',
|
|
206
|
+
uri: manifest?.icon || './media/defaultIcon.png',
|
|
207
|
+
fallbackUri: './media/defaultIcon.png'
|
|
208
|
+
},
|
|
209
|
+
readme: {
|
|
210
|
+
__typename: 'GalleryExtensionAsset',
|
|
211
|
+
uri: `${registryExt.url}/README.md`,
|
|
212
|
+
fallbackUri: `${registryExt.url}/README.md`
|
|
213
|
+
},
|
|
214
|
+
changelog: {
|
|
215
|
+
__typename: 'GalleryExtensionAsset',
|
|
216
|
+
uri: `${registryExt.url}/CHANGELOG.md`,
|
|
217
|
+
fallbackUri: `${registryExt.url}/CHANGELOG.md`
|
|
218
|
+
},
|
|
219
|
+
license: {
|
|
220
|
+
__typename: 'GalleryExtensionAsset',
|
|
221
|
+
uri: `${registryExt.url}/LICENSE`,
|
|
222
|
+
fallbackUri: `${registryExt.url}/LICENSE`
|
|
223
|
+
},
|
|
224
|
+
download: {
|
|
225
|
+
__typename: 'GalleryExtensionAsset',
|
|
226
|
+
uri: `${registryExt.url}/${registryExt.version}.vsix`,
|
|
227
|
+
fallbackUri: `${registryExt.url}/${registryExt.version}.vsix`
|
|
228
|
+
},
|
|
229
|
+
manifest: {
|
|
230
|
+
__typename: 'GalleryExtensionAsset',
|
|
231
|
+
uri: `${registryExt.url}/package.json`,
|
|
232
|
+
fallbackUri: `${registryExt.url}/package.json`
|
|
233
|
+
}
|
|
234
|
+
},
|
|
235
|
+
properties: {
|
|
236
|
+
__typename: 'GalleryExtensionProperties',
|
|
237
|
+
dependencies: manifest?.extensionDependencies || [],
|
|
238
|
+
extensionPack: manifest?.extensionPack || [],
|
|
239
|
+
engine: manifest?.engines?.vscode || 'unknown',
|
|
240
|
+
localizedLanguages: []
|
|
241
|
+
},
|
|
242
|
+
resources: {
|
|
243
|
+
__typename: 'GalleryExtensionResources',
|
|
244
|
+
license: `${registryExt.url}/LICENSE`,
|
|
245
|
+
repository: manifest?.repository?.url || '',
|
|
246
|
+
changelog: `${registryExt.url}/CHANGELOG.md`,
|
|
247
|
+
download: `${registryExt.url}/${registryExt.version}.vsix`,
|
|
248
|
+
icon: manifest?.icon || './media/defaultIcon.png',
|
|
249
|
+
manifest: `${registryExt.url}/package.json`,
|
|
250
|
+
readme: `${registryExt.url}/README.md`
|
|
251
|
+
},
|
|
252
|
+
coreExtension: registryExt,
|
|
253
|
+
identifier: {
|
|
254
|
+
__typename: 'ExtensionIdentifier',
|
|
255
|
+
id: registryExt.extensionSlug || registryExt.id,
|
|
256
|
+
uuid: registryExt.uuid
|
|
257
|
+
}
|
|
258
|
+
};
|
|
259
|
+
return galleryExtension;
|
|
260
|
+
}
|
|
261
|
+
async getAllVersions(extension) {
|
|
262
|
+
this.logger.trace('ExtensionGalleryService.getAllVersions: %s', extension.id);
|
|
263
|
+
try {
|
|
264
|
+
// Get all versions from registry
|
|
265
|
+
const allExtensions = await this.registryExtensionService.findExtensions(1000,
|
|
266
|
+
// Get more versions
|
|
267
|
+
`${extension.publisher.displayName}.${extension.name}`, true, true);
|
|
268
|
+
// Filter to get all versions of the same extension
|
|
269
|
+
const extensionVersions = allExtensions.filter(ext => ext.name === extension.name);
|
|
270
|
+
// Convert all to gallery extensions and sort by version (newest first)
|
|
271
|
+
const galleryVersions = await Promise.all(extensionVersions.map(ext => this.toGalleryExtension(ext)));
|
|
272
|
+
// Sort by version (descending)
|
|
273
|
+
return galleryVersions.sort((a, b) => b.version.localeCompare(a.version, undefined, {
|
|
274
|
+
numeric: true
|
|
275
|
+
}));
|
|
276
|
+
} catch (error) {
|
|
277
|
+
this.logger.warn('Failed to get all versions for %s: %s', extension.id, error.message);
|
|
278
|
+
// Return empty array if we can't find versions
|
|
279
|
+
return [];
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
/**
|
|
283
|
+
* Helper method to get manifest from the current release
|
|
284
|
+
* Since manifests are stored in releases, not directly in the registry extension
|
|
285
|
+
*/
|
|
286
|
+
getManifestFromRelease(registryExt) {
|
|
287
|
+
const {
|
|
288
|
+
releases
|
|
289
|
+
} = registryExt;
|
|
290
|
+
if (!releases || releases.length === 0) {
|
|
291
|
+
return null;
|
|
292
|
+
}
|
|
293
|
+
// Find the current release that matches the extension's version
|
|
294
|
+
const currentRelease = releases.find(release => release.version === registryExt.version);
|
|
295
|
+
if (!currentRelease || !currentRelease.manifest) {
|
|
296
|
+
return null;
|
|
297
|
+
}
|
|
298
|
+
try {
|
|
299
|
+
// Parse the manifest from the release (stored as JSON string)
|
|
300
|
+
const parsedManifest = typeof currentRelease.manifest === 'string' ? JSON.parse(currentRelease.manifest) : currentRelease.manifest;
|
|
301
|
+
return parsedManifest;
|
|
302
|
+
} catch (error) {
|
|
303
|
+
this.logger.warn('Failed to parse extension manifest for', registryExt.extensionSlug, ':', error);
|
|
304
|
+
return null;
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
dispose() {
|
|
308
|
+
this.disposables.dispose();
|
|
309
|
+
}
|
|
310
|
+
};
|
|
311
|
+
ExtensionGalleryService = __decorate([injectable(), __param(0, inject('Logger')), __param(1, inject(SERVER_TYPES.IRegistryExtensionService)), __param(2, inject(SERVER_TYPES.IMarketplacePublisherService)), __param(3, inject(SERVER_TYPES.IExtensionGalleryRepository)), __metadata("design:paramtypes", [Object, Object, Object, Object])], ExtensionGalleryService);export{ExtensionGalleryService};//# sourceMappingURL=extension-gallery-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extension-gallery-service.js","sources":["../../src/services/extension-gallery-service.ts"],"sourcesContent":[null],"names":[],"mappings":"0PAgCQ,uBAAiB,GAAA,MAAA,uBAAgB,CAAA;QAEjC;AAbJ,EAAA,wBAAiB;AAEjB,EAAA,gBAAQ;AAER,EAAA;AAGuC,EAAA,WAAA,GAAA,IAAA,oBAAkB;AAWlD,EAAA,eAAa,IAAA,OAAO,EAAA;oBAIC,CAAA,YAAkB,MAAG;AAkCpC,EAAA,WAAA,CAAA,MAAa,EAAA,wBAAY,EAAA,gBAAgC,EAAA,iBAAQ,EAAA;IAqBjE,IAAA,CAAA,eAAoB;IAkBpB,IAAA,CAAA,wBAAqB,GAAA,wBAAmC;IAsBxD,IAAA,CAAA,gBAAqB,GAAE,gBAAiB;IAuBxC,IAAA,CAAA,iBAAsB,GAAE;IAsBxB,IAAA,CAAA,gBAAoB,CAAE,IAAA,CAAA,YAAiB;;cA4DtC;IAwHD,OAAA,IAAA;AA2Bb,EAAA;;;AAGG,IAAA,IAAA;AACH,MAAA,MAAQ;AA2BD,QAAA,OAAW,EAAA;AAGrB,QAAA,QAAA,GAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
package/lib/services/index.d.ts
CHANGED
|
@@ -1,2 +1,7 @@
|
|
|
1
|
-
export * from './extension-service';
|
|
1
|
+
export * from './installed-extension-service';
|
|
2
|
+
export * from './installed-extension-service-ext';
|
|
3
|
+
export * from './publisher-service';
|
|
4
|
+
export * from './publisher-event-service';
|
|
5
|
+
export * from './extension-gallery-service';
|
|
6
|
+
export * from './extension-gallery-repository';
|
|
2
7
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":"AAAA,cAAc,+BAA+B,CAAC;AAC9C,cAAc,mCAAmC,CAAC;AAClD,cAAc,qBAAqB,CAAC;AACpC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,gCAAgC,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { ServiceBroker } from 'moleculer';
|
|
2
|
+
import { CdmLogger } from '@cdm-logger/core';
|
|
3
|
+
import { IRegistryExtensionService, IInstalledExtensionRepository, ISlugService, IRedisCacheManager } from 'common/server';
|
|
4
|
+
import { InstalledExtensionService } from './installed-extension-service';
|
|
5
|
+
/**
|
|
6
|
+
* Extended InstalledExtensionService that handles Moleculer event broadcasting
|
|
7
|
+
* Follows the pattern of AccountService/AccountServiceExt
|
|
8
|
+
*/
|
|
9
|
+
export declare class InstalledExtensionServiceExt extends InstalledExtensionService {
|
|
10
|
+
protected slugService: ISlugService;
|
|
11
|
+
protected readonly redisCacheManager: IRedisCacheManager;
|
|
12
|
+
constructor(repository: IInstalledExtensionRepository, registryService: IRegistryExtensionService, slugService: ISlugService, redisCacheManager: IRedisCacheManager, broker: ServiceBroker, logger: CdmLogger.ILogger);
|
|
13
|
+
private setupEventListeners;
|
|
14
|
+
private dropCache;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=installed-extension-service-ext.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"installed-extension-service-ext.d.ts","sourceRoot":"","sources":["../../src/services/installed-extension-service-ext.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAE1C,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAgBH,yBAAyB,EACzB,6BAA6B,EAO7B,YAAY,EACZ,kBAAkB,EACrB,MAAM,eAAe,CAAC;AAQvB,OAAO,EAAE,yBAAyB,EAAE,MAAM,+BAA+B,CAAC;AA0D1E;;;GAGG;AACH,qBACa,4BAA6B,SAAQ,yBAAyB;IAKnE,SAAS,CAAC,WAAW,EAAE,YAAY;IAEnC,SAAS,CAAC,QAAQ,CAAC,iBAAiB,EAAE,kBAAkB;gBALJ,UAAU,EAAE,6BAA6B,EAC7C,eAAe,EAAE,yBAAyB,EAEhF,WAAW,EAAE,YAAY,EAEhB,iBAAiB,EAAE,kBAAkB,EACnB,MAAM,EAAE,aAAa,EAC/B,MAAM,EAAE,SAAS,CAAC,OAAO;IAMxD,OAAO,CAAC,mBAAmB;YAoeb,SAAS;CA6C1B"}
|