@adminide-stack/marketplace-module-server 12.0.4-alpha.95 → 13.0.1-alpha.0
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/lib/containers/module.d.ts +4 -4
- package/lib/containers/module.d.ts.map +1 -1
- package/lib/containers/module.js +12 -7
- package/lib/containers/module.js.map +1 -1
- package/lib/dataloaders/index.d.ts +1 -1
- package/lib/dataloaders/index.d.ts.map +1 -1
- package/lib/dataloaders/publisher-data-loader.d.ts +6 -0
- package/lib/dataloaders/publisher-data-loader.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 -1
- package/lib/graphql/resolvers/installed-extension-resolver.d.ts.map +1 -1
- package/lib/graphql/resolvers/installed-extension-resolver.js +161 -35
- package/lib/graphql/resolvers/installed-extension-resolver.js.map +1 -1
- 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 +183 -0
- package/lib/graphql/resolvers/publisher-resolver.js.map +1 -0
- package/lib/graphql/resolvers/registry-extension-resolver.d.ts.map +1 -1
- package/lib/graphql/resolvers/registry-extension-resolver.js +34 -167
- package/lib/graphql/resolvers/registry-extension-resolver.js.map +1 -1
- 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 +91 -58
- package/lib/graphql/schemas/extension-registry.graphql.js +1 -1
- 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 -1
- package/lib/graphql/schemas/index.js.map +1 -1
- package/lib/graphql/schemas/installed-extension.graphql +37 -7
- package/lib/graphql/schemas/installed-extension.graphql.js +1 -1
- 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 +584 -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 +15 -0
- package/lib/index.d.ts +1 -1
- package/lib/index.js +1 -1
- package/lib/index.js.map +1 -1
- package/lib/migrations/dbMigrations/DropOldPublisherIndexMigration.d.ts +20 -0
- package/lib/migrations/dbMigrations/DropOldPublisherIndexMigration.d.ts.map +1 -0
- package/lib/migrations/dbMigrations/DropOldPublisherIndexMigration.js +61 -0
- package/lib/migrations/dbMigrations/DropOldPublisherIndexMigration.js.map +1 -0
- package/lib/migrations/index.d.ts +2 -0
- package/lib/migrations/index.d.ts.map +1 -0
- package/lib/module.d.ts +1 -1
- package/lib/module.d.ts.map +1 -1
- package/lib/module.js +11 -26
- package/lib/module.js.map +1 -1
- 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 +334 -0
- package/lib/services/extension-gallery-service.js.map +1 -0
- package/lib/services/index.d.ts +4 -1
- package/lib/services/index.d.ts.map +1 -1
- package/lib/services/installed-extension-service-ext.d.ts +5 -2
- package/lib/services/installed-extension-service-ext.d.ts.map +1 -1
- package/lib/services/installed-extension-service-ext.js +364 -117
- package/lib/services/installed-extension-service-ext.js.map +1 -1
- package/lib/services/installed-extension-service.d.ts +30 -13
- package/lib/services/installed-extension-service.d.ts.map +1 -1
- package/lib/services/installed-extension-service.js +301 -68
- package/lib/services/installed-extension-service.js.map +1 -1
- package/lib/services/installed-extension-service.test.d.ts +0 -1
- 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 +62 -0
- package/lib/services/publisher-service.d.ts.map +1 -0
- package/lib/services/publisher-service.js +135 -0
- package/lib/services/publisher-service.js.map +1 -0
- package/lib/store/models/index.d.ts +1 -1
- package/lib/store/models/index.d.ts.map +1 -1
- package/lib/store/models/installed-extension-model.d.ts.map +1 -1
- package/lib/store/models/installed-extension-model.js +17 -45
- package/lib/store/models/installed-extension-model.js.map +1 -1
- 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 +117 -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 +1 -1
- package/lib/store/repositories/index.d.ts.map +1 -1
- package/lib/store/repositories/installed-extension-repository.d.ts +17 -11
- package/lib/store/repositories/installed-extension-repository.d.ts.map +1 -1
- package/lib/store/repositories/installed-extension-repository.js +123 -75
- package/lib/store/repositories/installed-extension-repository.js.map +1 -1
- 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 +1 -1
- package/lib/templates/constants/SERVER_TYPES.ts.template +8 -5
- package/lib/templates/repositories/ExtensionGalleryRepository.ts.template +44 -0
- package/lib/templates/repositories/InstalledExtensionRepository.ts.template +19 -14
- package/lib/templates/repositories/MarketplacePublisherRepository.ts.template +24 -0
- package/lib/templates/repositories/RegistryExtensionRepository.ts.template +2 -2
- package/lib/templates/services/ExtensionGalleryDataLoader.ts.template +2 -0
- package/lib/templates/services/ExtensionGalleryService.ts.template +79 -0
- package/lib/templates/services/InstalledExtensionService.ts.template +63 -32
- package/lib/templates/services/MarketplacePublisherService.ts.template +51 -0
- package/lib/templates/services/PublisherDataLoader.ts.template +3 -0
- package/lib/templates/services/PublisherEventService.ts.template +56 -0
- package/lib/templates/services/RegistryExtensionService.ts.template +46 -2
- package/lib/tests/extension-integration.test.d.ts +0 -1
- 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/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 +13 -9
- package/lib/constants/extension-events.d.ts +0 -136
- package/lib/constants/extension-events.d.ts.map +0 -1
- package/lib/dataloaders/registry-extension-data-loader.d.ts +0 -6
- package/lib/dataloaders/registry-extension-data-loader.d.ts.map +0 -1
- package/lib/dataloaders/registry-extension-data-loader.js +0 -6
- package/lib/dataloaders/registry-extension-data-loader.js.map +0 -1
- package/lib/graphql/schemas/service.graphql.js +0 -1
- package/lib/graphql/schemas/service.graphql.js.map +0 -1
- package/lib/services/extension-service.d.ts +0 -42
- package/lib/services/extension-service.d.ts.map +0 -1
- package/lib/services/extension-service.js +0 -60
- package/lib/services/extension-service.js.map +0 -1
- package/lib/store/models/registry-extension-model.d.ts +0 -5
- package/lib/store/models/registry-extension-model.d.ts.map +0 -1
- package/lib/store/models/registry-extension-model.js +0 -83
- package/lib/store/models/registry-extension-model.js.map +0 -1
- package/lib/store/repositories/registry-extension-repository.d.ts +0 -54
- package/lib/store/repositories/registry-extension-repository.d.ts.map +0 -1
- package/lib/store/repositories/registry-extension-repository.js +0 -137
- package/lib/store/repositories/registry-extension-repository.js.map +0 -1
- package/lib/templates/services/RegistryExtensionDataLoader.ts.template +0 -2
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { PubSub } from 'graphql-subscriptions';
|
|
2
|
+
import { CdmLogger } from '@cdm-logger/core';
|
|
3
|
+
import { IResolvers } from 'common/server';
|
|
4
|
+
/**
|
|
5
|
+
* Publisher Analytics Resolver
|
|
6
|
+
*
|
|
7
|
+
* Handles comprehensive analytics and insights for extension publishers:
|
|
8
|
+
* - Publisher analytics and metrics
|
|
9
|
+
* - Revenue analytics
|
|
10
|
+
* - Analytics event tracking
|
|
11
|
+
* - Real-time analytics subscriptions
|
|
12
|
+
*/
|
|
13
|
+
export declare const publisherAnalyticsResolver: (pubsub: PubSub, logger?: CdmLogger.ILogger) => IResolvers;
|
|
14
|
+
//# sourceMappingURL=publisher-analytics-resolver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"publisher-analytics-resolver.d.ts","sourceRoot":"","sources":["../../../src/graphql/resolvers/publisher-analytics-resolver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3C;;;;;;;;GAQG;AACH,eAAO,MAAM,0BAA0B,GAAI,QAAQ,MAAM,EAAE,SAAS,SAAS,CAAC,OAAO,KAAG,UAwQ3E,CAAC"}
|
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Publisher Analytics Resolver
|
|
3
|
+
*
|
|
4
|
+
* Handles comprehensive analytics and insights for extension publishers:
|
|
5
|
+
* - Publisher analytics and metrics
|
|
6
|
+
* - Revenue analytics
|
|
7
|
+
* - Analytics event tracking
|
|
8
|
+
* - Real-time analytics subscriptions
|
|
9
|
+
*/
|
|
10
|
+
const publisherAnalyticsResolver = (pubsub, logger) => ({
|
|
11
|
+
Query: {
|
|
12
|
+
/**
|
|
13
|
+
* Get comprehensive analytics for a publisher
|
|
14
|
+
*/
|
|
15
|
+
publisherAnalytics: async (root, args,
|
|
16
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
17
|
+
ctx) => {
|
|
18
|
+
if (logger) {
|
|
19
|
+
logger.debug('publisherAnalytics args [%j]', args);
|
|
20
|
+
}
|
|
21
|
+
// Mock analytics data for now - in real implementation, this would use the analytics service
|
|
22
|
+
const mockAnalytics = {
|
|
23
|
+
publisherId: args.input.publisherId,
|
|
24
|
+
totalExtensions: Math.floor(Math.random() * 50) + 5,
|
|
25
|
+
totalDownloads: Math.floor(Math.random() * 100000) + 10000,
|
|
26
|
+
totalInstallations: Math.floor(Math.random() * 50000) + 5000,
|
|
27
|
+
averageRating: 4.2 + Math.random() * 0.8,
|
|
28
|
+
period: args.input.period,
|
|
29
|
+
extensions: [{
|
|
30
|
+
extensionSlug: 'sample-extension-1',
|
|
31
|
+
name: 'Sample Extension 1',
|
|
32
|
+
version: '1.0.0',
|
|
33
|
+
downloads: Math.floor(Math.random() * 10000),
|
|
34
|
+
installations: Math.floor(Math.random() * 5000),
|
|
35
|
+
rating: 4.0 + Math.random() * 1.0,
|
|
36
|
+
reviewCount: Math.floor(Math.random() * 100),
|
|
37
|
+
revenue: args.input.includeRevenue ? Math.random() * 1000 : null,
|
|
38
|
+
lastUpdated: new Date().toISOString(),
|
|
39
|
+
versionMetrics: [{
|
|
40
|
+
version: '1.0.0',
|
|
41
|
+
downloads: Math.floor(Math.random() * 1000),
|
|
42
|
+
installations: Math.floor(Math.random() * 500),
|
|
43
|
+
releasedAt: new Date().toISOString(),
|
|
44
|
+
adoptionRate: Math.random() * 100
|
|
45
|
+
}]
|
|
46
|
+
}],
|
|
47
|
+
downloadTrend: Array.from({
|
|
48
|
+
length: 30
|
|
49
|
+
}, (_, i) => ({
|
|
50
|
+
timestamp: new Date(Date.now() - i * 24 * 60 * 60 * 1000).toISOString(),
|
|
51
|
+
value: Math.floor(Math.random() * 1000),
|
|
52
|
+
secondaryValue: Math.floor(Math.random() * 100)
|
|
53
|
+
})),
|
|
54
|
+
installationTrend: Array.from({
|
|
55
|
+
length: 30
|
|
56
|
+
}, (_, i) => ({
|
|
57
|
+
timestamp: new Date(Date.now() - i * 24 * 60 * 60 * 1000).toISOString(),
|
|
58
|
+
value: Math.floor(Math.random() * 500),
|
|
59
|
+
secondaryValue: Math.floor(Math.random() * 50)
|
|
60
|
+
})),
|
|
61
|
+
popularRegions: args.input.includeRegions ? [{
|
|
62
|
+
region: 'US',
|
|
63
|
+
regionName: 'United States',
|
|
64
|
+
downloads: Math.floor(Math.random() * 10000),
|
|
65
|
+
installations: Math.floor(Math.random() * 5000),
|
|
66
|
+
percentage: Math.random() * 20
|
|
67
|
+
}, {
|
|
68
|
+
region: 'UK',
|
|
69
|
+
regionName: 'United Kingdom',
|
|
70
|
+
downloads: Math.floor(Math.random() * 8000),
|
|
71
|
+
installations: Math.floor(Math.random() * 4000),
|
|
72
|
+
percentage: Math.random() * 15
|
|
73
|
+
}] : []
|
|
74
|
+
};
|
|
75
|
+
return mockAnalytics;
|
|
76
|
+
},
|
|
77
|
+
/**
|
|
78
|
+
* Get revenue analytics for a publisher
|
|
79
|
+
*/
|
|
80
|
+
publisherRevenueAnalytics: async (root, args,
|
|
81
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
82
|
+
ctx) => {
|
|
83
|
+
if (logger) {
|
|
84
|
+
logger.debug('publisherRevenueAnalytics args [%j]', args);
|
|
85
|
+
}
|
|
86
|
+
const mockRevenue = {
|
|
87
|
+
publisherId: args.input.publisherId,
|
|
88
|
+
totalRevenue: Math.random() * 10000,
|
|
89
|
+
currency: args.input.currency || 'USD',
|
|
90
|
+
extensionRevenue: [{
|
|
91
|
+
extensionSlug: 'sample-extension-1',
|
|
92
|
+
name: 'Sample Extension 1',
|
|
93
|
+
revenue: Math.random() * 500,
|
|
94
|
+
paidInstallations: Math.floor(Math.random() * 100),
|
|
95
|
+
arpu: Math.random() * 10
|
|
96
|
+
}],
|
|
97
|
+
revenueTrend: Array.from({
|
|
98
|
+
length: 30
|
|
99
|
+
}, (_, i) => ({
|
|
100
|
+
timestamp: new Date(Date.now() - i * 24 * 60 * 60 * 1000).toISOString(),
|
|
101
|
+
revenue: Math.random() * 100,
|
|
102
|
+
transactions: Math.floor(Math.random() * 20)
|
|
103
|
+
})),
|
|
104
|
+
topEarningExtensions: [{
|
|
105
|
+
extensionSlug: 'sample-extension-1',
|
|
106
|
+
name: 'Sample Extension 1',
|
|
107
|
+
revenue: Math.random() * 500,
|
|
108
|
+
paidInstallations: Math.floor(Math.random() * 100),
|
|
109
|
+
arpu: Math.random() * 10
|
|
110
|
+
}]
|
|
111
|
+
};
|
|
112
|
+
return mockRevenue;
|
|
113
|
+
},
|
|
114
|
+
/**
|
|
115
|
+
* Get recent analytics events
|
|
116
|
+
*/
|
|
117
|
+
recentAnalyticsEvents: async (root, args,
|
|
118
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
119
|
+
ctx) => {
|
|
120
|
+
if (logger) {
|
|
121
|
+
logger.debug('recentAnalyticsEvents args [%j]', args);
|
|
122
|
+
}
|
|
123
|
+
const limit = args.limit || 50;
|
|
124
|
+
const eventTypes = ['download', 'install', 'uninstall', 'update', 'view'];
|
|
125
|
+
const regions = ['US', 'UK', 'DE', 'FR', 'JP'];
|
|
126
|
+
const mockEvents = Array.from({
|
|
127
|
+
length: Math.min(limit, 20)
|
|
128
|
+
}, () => ({
|
|
129
|
+
eventType: eventTypes[Math.floor(Math.random() * eventTypes.length)],
|
|
130
|
+
extensionSlug: `ext-${Math.floor(Math.random() * 10)}`,
|
|
131
|
+
publisherId: args.publisherId,
|
|
132
|
+
timestamp: new Date(Date.now() - Math.random() * 86400000).toISOString(),
|
|
133
|
+
metadata: JSON.stringify({
|
|
134
|
+
source: 'marketplace',
|
|
135
|
+
userAgent: 'VS Code'
|
|
136
|
+
}),
|
|
137
|
+
region: regions[Math.floor(Math.random() * regions.length)],
|
|
138
|
+
version: `1.${Math.floor(Math.random() * 10)}.${Math.floor(Math.random() * 10)}`
|
|
139
|
+
}));
|
|
140
|
+
return mockEvents.sort((a, b) => new Date(b.timestamp).getTime() - new Date(a.timestamp).getTime());
|
|
141
|
+
}
|
|
142
|
+
},
|
|
143
|
+
Mutation: {
|
|
144
|
+
/**
|
|
145
|
+
* Track an analytics event
|
|
146
|
+
*/
|
|
147
|
+
trackAnalyticsEvent: async (root, args,
|
|
148
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
149
|
+
ctx) => {
|
|
150
|
+
if (logger) {
|
|
151
|
+
logger.debug('trackAnalyticsEvent args [%j]', args);
|
|
152
|
+
}
|
|
153
|
+
const eventId = `evt_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;
|
|
154
|
+
// Create analytics event for real-time subscriptions
|
|
155
|
+
const analyticsEvent = {
|
|
156
|
+
eventType: args.input.eventType,
|
|
157
|
+
extensionSlug: args.input.extensionSlug,
|
|
158
|
+
publisherId: 'publisher-id',
|
|
159
|
+
// Would be resolved from extension
|
|
160
|
+
timestamp: new Date().toISOString(),
|
|
161
|
+
metadata: args.input.metadata,
|
|
162
|
+
region: args.input.region,
|
|
163
|
+
version: args.input.version
|
|
164
|
+
};
|
|
165
|
+
// Emit to subscriptions
|
|
166
|
+
pubsub.publish('ANALYTICS_EVENT', {
|
|
167
|
+
analyticsEvents: analyticsEvent
|
|
168
|
+
});
|
|
169
|
+
if (args.input.eventType === 'download') {
|
|
170
|
+
pubsub.publish('DOWNLOAD_EVENT', {
|
|
171
|
+
downloadEvents: analyticsEvent
|
|
172
|
+
});
|
|
173
|
+
}
|
|
174
|
+
if (args.input.eventType === 'install') {
|
|
175
|
+
pubsub.publish('INSTALLATION_EVENT', {
|
|
176
|
+
installationEvents: analyticsEvent
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
return {
|
|
180
|
+
success: true,
|
|
181
|
+
message: `Analytics event '${args.input.eventType}' tracked successfully`,
|
|
182
|
+
eventId
|
|
183
|
+
};
|
|
184
|
+
}
|
|
185
|
+
},
|
|
186
|
+
Subscription: {
|
|
187
|
+
/**
|
|
188
|
+
* Subscribe to real-time analytics events
|
|
189
|
+
*/
|
|
190
|
+
analyticsEvents: {
|
|
191
|
+
subscribe: (root, args) => {
|
|
192
|
+
if (logger) {
|
|
193
|
+
logger.debug('analyticsEvents subscription for publisher [%s]', args.publisherId);
|
|
194
|
+
}
|
|
195
|
+
return pubsub.asyncIterator('ANALYTICS_EVENT');
|
|
196
|
+
}
|
|
197
|
+
},
|
|
198
|
+
/**
|
|
199
|
+
* Subscribe to download events
|
|
200
|
+
*/
|
|
201
|
+
downloadEvents: {
|
|
202
|
+
subscribe: (root, args) => {
|
|
203
|
+
if (logger) {
|
|
204
|
+
logger.debug('downloadEvents subscription for publisher [%s]', args.publisherId);
|
|
205
|
+
}
|
|
206
|
+
return pubsub.asyncIterator('DOWNLOAD_EVENT');
|
|
207
|
+
}
|
|
208
|
+
},
|
|
209
|
+
/**
|
|
210
|
+
* Subscribe to installation events
|
|
211
|
+
*/
|
|
212
|
+
installationEvents: {
|
|
213
|
+
subscribe: (root, args) => {
|
|
214
|
+
if (logger) {
|
|
215
|
+
logger.debug('installationEvents subscription for publisher [%s]', args.publisherId);
|
|
216
|
+
}
|
|
217
|
+
return pubsub.asyncIterator('INSTALLATION_EVENT');
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
});export{publisherAnalyticsResolver};//# sourceMappingURL=publisher-analytics-resolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"publisher-analytics-resolver.js","sources":["../../../src/graphql/resolvers/publisher-analytics-resolver.ts"],"sourcesContent":[null],"names":[],"mappings":"AAAA;AACA;AACA;AAEA;;;;;;;;AAQG;AACH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { PubSub } from 'graphql-subscriptions';
|
|
2
|
+
import { CdmLogger } from '@cdm-logger/core';
|
|
3
|
+
import { IResolvers } from 'common/server';
|
|
4
|
+
export declare const publisherResolver: (pubsub: PubSub, logger?: CdmLogger.ILogger) => IResolvers;
|
|
5
|
+
//# sourceMappingURL=publisher-resolver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"publisher-resolver.d.ts","sourceRoot":"","sources":["../../../src/graphql/resolvers/publisher-resolver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EACH,UAAU,EAMb,MAAM,eAAe,CAAC;AAEvB,eAAO,MAAM,iBAAiB,GAAI,QAAQ,MAAM,EAAE,SAAS,SAAS,CAAC,OAAO,KAAG,UAqO7E,CAAC"}
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
import {PublisherOrderBy}from'common/server';const publisherResolver = (pubsub, logger) => ({
|
|
2
|
+
Query: {
|
|
3
|
+
async publisherStats(root, args, {
|
|
4
|
+
marketplacePublisherService
|
|
5
|
+
}) {
|
|
6
|
+
if (logger) {
|
|
7
|
+
logger.debug('publisherStats query with args [%j]', args);
|
|
8
|
+
}
|
|
9
|
+
const stats = await marketplacePublisherService.getPublisherStats(args.publisherId);
|
|
10
|
+
// Cast service result to GraphQL interface - field resolvers will handle computed fields
|
|
11
|
+
return stats;
|
|
12
|
+
},
|
|
13
|
+
async publishers(root, args, {
|
|
14
|
+
marketplacePublisherService
|
|
15
|
+
}) {
|
|
16
|
+
if (logger) {
|
|
17
|
+
logger.debug('publishers query with args [%j]', args);
|
|
18
|
+
}
|
|
19
|
+
const {
|
|
20
|
+
first = 20,
|
|
21
|
+
skip = 0,
|
|
22
|
+
search,
|
|
23
|
+
orderBy = PublisherOrderBy.CreatedDesc
|
|
24
|
+
} = args;
|
|
25
|
+
// Note: verified filtering not implemented yet in service layer
|
|
26
|
+
// Convert GraphQL orderBy enum to service format
|
|
27
|
+
const serviceOrderBy = orderBy === PublisherOrderBy.CreatedDesc ? 'createdAt' : 'createdAt';
|
|
28
|
+
const serviceOrderDirection = orderBy === PublisherOrderBy.CreatedDesc ? 'DESC' : 'ASC';
|
|
29
|
+
try {
|
|
30
|
+
const result = await marketplacePublisherService.findPublishers(search, serviceOrderBy, serviceOrderDirection, first, skip);
|
|
31
|
+
return {
|
|
32
|
+
nodes: result.publishers,
|
|
33
|
+
totalCount: result.totalCount,
|
|
34
|
+
hasNextPage: skip + first < result.totalCount,
|
|
35
|
+
hasPreviousPage: skip > 0
|
|
36
|
+
};
|
|
37
|
+
} catch (error) {
|
|
38
|
+
if (logger) {
|
|
39
|
+
logger.error('publishers query error: %s', error.message);
|
|
40
|
+
}
|
|
41
|
+
// Return empty result instead of null to satisfy non-nullable schema
|
|
42
|
+
return {
|
|
43
|
+
nodes: [],
|
|
44
|
+
totalCount: 0,
|
|
45
|
+
hasNextPage: false,
|
|
46
|
+
hasPreviousPage: false
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
},
|
|
50
|
+
async publisher(root, args, {
|
|
51
|
+
marketplacePublisherService
|
|
52
|
+
}) {
|
|
53
|
+
if (logger) {
|
|
54
|
+
logger.debug('publisher query with args [%j]', args);
|
|
55
|
+
}
|
|
56
|
+
try {
|
|
57
|
+
const publisher = await marketplacePublisherService.findByPublisherName(args.name);
|
|
58
|
+
return publisher;
|
|
59
|
+
} catch (error) {
|
|
60
|
+
if (logger) {
|
|
61
|
+
logger.error('publisher query error: %s', error.message);
|
|
62
|
+
}
|
|
63
|
+
return null;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
},
|
|
67
|
+
Mutation: {
|
|
68
|
+
async createPublisherMutation(root, args, {
|
|
69
|
+
marketplacePublisherService
|
|
70
|
+
}) {
|
|
71
|
+
if (logger) {
|
|
72
|
+
logger.debug('createPublisherMutation with args [%j]', args);
|
|
73
|
+
}
|
|
74
|
+
try {
|
|
75
|
+
const publisher = await marketplacePublisherService.createPublisher(args.input);
|
|
76
|
+
return {
|
|
77
|
+
publisher: publisher,
|
|
78
|
+
success: true,
|
|
79
|
+
error: null
|
|
80
|
+
};
|
|
81
|
+
} catch (error) {
|
|
82
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
83
|
+
if (logger) {
|
|
84
|
+
logger.error('createPublisherMutation error: %s', errorMessage);
|
|
85
|
+
}
|
|
86
|
+
throw error;
|
|
87
|
+
}
|
|
88
|
+
},
|
|
89
|
+
async updatePublisherMutation(root, args, {
|
|
90
|
+
marketplacePublisherService
|
|
91
|
+
}) {
|
|
92
|
+
if (logger) {
|
|
93
|
+
logger.debug('updatePublisherMutation with args [%j]', args);
|
|
94
|
+
}
|
|
95
|
+
try {
|
|
96
|
+
const publisher = await marketplacePublisherService.updatePublisher(args.id, args.input);
|
|
97
|
+
return {
|
|
98
|
+
publisher: publisher ? publisher : null,
|
|
99
|
+
success: true,
|
|
100
|
+
error: null
|
|
101
|
+
};
|
|
102
|
+
} catch (error) {
|
|
103
|
+
if (logger) {
|
|
104
|
+
logger.error('updatePublisherMutation error: %s', error.message);
|
|
105
|
+
}
|
|
106
|
+
return {
|
|
107
|
+
publisher: null,
|
|
108
|
+
success: false,
|
|
109
|
+
error: error.message
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
},
|
|
113
|
+
async verifyPublisherMutation(root, args, {
|
|
114
|
+
marketplacePublisherService
|
|
115
|
+
}) {
|
|
116
|
+
if (logger) {
|
|
117
|
+
logger.debug('verifyPublisherMutation with args [%j]', args);
|
|
118
|
+
}
|
|
119
|
+
try {
|
|
120
|
+
const publisher = await marketplacePublisherService.verifyPublisher(args.id);
|
|
121
|
+
return {
|
|
122
|
+
publisher: publisher ? publisher : null,
|
|
123
|
+
success: true,
|
|
124
|
+
error: null
|
|
125
|
+
};
|
|
126
|
+
} catch (error) {
|
|
127
|
+
if (logger) {
|
|
128
|
+
logger.error('verifyPublisherMutation error: %s', error.message);
|
|
129
|
+
}
|
|
130
|
+
return {
|
|
131
|
+
publisher: null,
|
|
132
|
+
success: false,
|
|
133
|
+
error: error.message
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
},
|
|
138
|
+
ExtensionRegistry: {
|
|
139
|
+
// Publisher-related queries are now in root Query section
|
|
140
|
+
},
|
|
141
|
+
MarketplacePublisher: {
|
|
142
|
+
tenant: (parent, args, {
|
|
143
|
+
tenantDataLoader
|
|
144
|
+
}) => {
|
|
145
|
+
// Implement tenant resolver logic here
|
|
146
|
+
const tenantId = String(parent.tenant || '');
|
|
147
|
+
if (!tenantId) {
|
|
148
|
+
return null;
|
|
149
|
+
}
|
|
150
|
+
return tenantDataLoader.load(tenantId);
|
|
151
|
+
},
|
|
152
|
+
extensionCount: root => root.extensionCount || 0,
|
|
153
|
+
totalDownloads: root => root.totalDownloads || 0,
|
|
154
|
+
viewerCanManage: () => false,
|
|
155
|
+
// TODO: Implement proper authorization logic
|
|
156
|
+
// Analytics computed from time series collection
|
|
157
|
+
async stats(root, args, {
|
|
158
|
+
publisherEventService
|
|
159
|
+
}) {
|
|
160
|
+
if (logger) {
|
|
161
|
+
logger.debug('Computing publisher stats for publisherId [%s]', root.id);
|
|
162
|
+
}
|
|
163
|
+
return publisherEventService.getPublisherStats(root.id);
|
|
164
|
+
},
|
|
165
|
+
async analytics(root, args, {
|
|
166
|
+
publisherEventService
|
|
167
|
+
}) {
|
|
168
|
+
if (logger) {
|
|
169
|
+
logger.debug('Computing publisher analytics for publisherId [%s], period [%s - %s]', root.id, args.startDate, args.endDate);
|
|
170
|
+
}
|
|
171
|
+
return publisherEventService.getPublisherAnalytics(root.id, new Date(args.startDate), new Date(args.endDate), args.granularity);
|
|
172
|
+
},
|
|
173
|
+
async trends(root, args, {
|
|
174
|
+
publisherEventService
|
|
175
|
+
}) {
|
|
176
|
+
if (logger) {
|
|
177
|
+
logger.debug('Computing publisher trends for publisherId [%s], days [%d]', root.id, args.days);
|
|
178
|
+
}
|
|
179
|
+
const result = await publisherEventService.getPublisherTrends(root.id, args.days);
|
|
180
|
+
return result;
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
});export{publisherResolver};//# sourceMappingURL=publisher-resolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"publisher-resolver.js","sources":["../../../src/graphql/resolvers/publisher-resolver.ts"],"sourcesContent":[null],"names":[],"mappings":"6CACS,MAAA,mCAAoC,MAAA;AAC7C,EAAA,KAAO,EACH;AAQJ,IAAA,MAAA,cAAa,CAAA,IAAA,EAAA,IAAA,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry-extension-resolver.d.ts","sourceRoot":"","sources":["../../../src/graphql/resolvers/registry-extension-resolver.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAsB,UAAU,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"registry-extension-resolver.d.ts","sourceRoot":"","sources":["../../../src/graphql/resolvers/registry-extension-resolver.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAsB,UAAU,EAAE,MAAM,eAAe,CAAC;AAE/D,eAAO,MAAM,QAAQ,GAAI,QAAQ,MAAM,EAAE,SAAS,SAAS,CAAC,OAAO,KAAG,UAsDpE,CAAC"}
|
|
@@ -1,178 +1,45 @@
|
|
|
1
|
-
import*as url from'url';/* eslint-disable no-unused-expressions */
|
|
2
|
-
const bundleUrlGenerator = (extensionSlug, version) => url.resolve(process.env.BACKEND_URL, `_registry/${extensionSlug}/${version}`);
|
|
3
1
|
const resolver = (pubsub, logger) => ({
|
|
4
|
-
Contributes: {
|
|
5
|
-
menus: root => {
|
|
6
|
-
let result;
|
|
7
|
-
// const manifest = JSON.parse(root.manifest);
|
|
8
|
-
// console.log('manifest======>', manifest);
|
|
9
|
-
const {
|
|
10
|
-
menus
|
|
11
|
-
} = root;
|
|
12
|
-
console.log('menus=========>', menus);
|
|
13
|
-
try {
|
|
14
|
-
result = {
|
|
15
|
-
commandPalette: menus.commandPalette || [],
|
|
16
|
-
explorer: {
|
|
17
|
-
context: menus['explorer/context'] || []
|
|
18
|
-
},
|
|
19
|
-
editor: {
|
|
20
|
-
context: menus['editor/context'] || [],
|
|
21
|
-
title: {
|
|
22
|
-
own: menus['editor/title'] || [],
|
|
23
|
-
context: menus['editor/title/context'] || []
|
|
24
|
-
}
|
|
25
|
-
},
|
|
26
|
-
debug: {
|
|
27
|
-
callstack: {
|
|
28
|
-
context: menus['debug/callstack/context'] || []
|
|
29
|
-
},
|
|
30
|
-
toolbar: menus['debug/toolbar'] || []
|
|
31
|
-
},
|
|
32
|
-
scm: {
|
|
33
|
-
title: menus['scm/title'] || [],
|
|
34
|
-
resourceGroup: {
|
|
35
|
-
context: menus['scm/resourceGroup/context'] || []
|
|
36
|
-
},
|
|
37
|
-
resource: {
|
|
38
|
-
context: menus['scm/resource/context'] || []
|
|
39
|
-
},
|
|
40
|
-
change: {
|
|
41
|
-
title: menus['scm/change/title'] || []
|
|
42
|
-
}
|
|
43
|
-
},
|
|
44
|
-
view: {
|
|
45
|
-
title: menus['view/title'] || [],
|
|
46
|
-
item: {
|
|
47
|
-
context: menus['view/item/context'] || []
|
|
48
|
-
}
|
|
49
|
-
},
|
|
50
|
-
touchBar: menus.touchBar || []
|
|
51
|
-
};
|
|
52
|
-
} catch (err) {
|
|
53
|
-
console.log('err', err);
|
|
54
|
-
}
|
|
55
|
-
console.log('result====>', result, result.editor);
|
|
56
|
-
return result;
|
|
57
|
-
}
|
|
58
|
-
},
|
|
59
|
-
ExtensionRegistry: {
|
|
60
|
-
async extensions(root, args, ctx) {
|
|
61
|
-
logger && logger.debug('args [%j]', args);
|
|
62
|
-
const nodes = await ctx.registryExtensionService.findExtensions(args.first, args.query, args.local, args.remote, args.prioritizeExtensionIDs);
|
|
63
|
-
return {
|
|
64
|
-
nodes: nodes,
|
|
65
|
-
pageInfo: {
|
|
66
|
-
hasNextPage: false,
|
|
67
|
-
hasPreviousPage: false
|
|
68
|
-
},
|
|
69
|
-
totalCount: nodes.length
|
|
70
|
-
};
|
|
71
|
-
},
|
|
72
|
-
async extension(root, args, ctx) {
|
|
73
|
-
return ctx.registryExtensionService.findExtension(args.extensionSlug);
|
|
74
|
-
},
|
|
75
|
-
async releases(root, args, ctx) {
|
|
76
|
-
return ctx.registryExtensionService.extensionReleases(args.extensionSlug);
|
|
77
|
-
},
|
|
78
|
-
async publishers(root, args, ctx) {
|
|
79
|
-
return {
|
|
80
|
-
nodes: [],
|
|
81
|
-
pageInfo: {
|
|
82
|
-
hasNextPage: false,
|
|
83
|
-
hasPreviousPage: false
|
|
84
|
-
},
|
|
85
|
-
totalCount: 0
|
|
86
|
-
};
|
|
87
|
-
},
|
|
88
|
-
async viewerPublishers(root, args, ctx) {
|
|
89
|
-
return [];
|
|
90
|
-
},
|
|
91
|
-
async localExtensionIDPrefix(root, args, ctx) {
|
|
92
|
-
return null;
|
|
93
|
-
}
|
|
94
|
-
},
|
|
95
|
-
ExtensionRelease: {
|
|
96
|
-
bundleURL: root => bundleUrlGenerator(root.extensionSlug, root.version)
|
|
97
|
-
},
|
|
98
|
-
ExtensionManifest: {
|
|
99
|
-
bundleURL: ({
|
|
100
|
-
version,
|
|
101
|
-
extensionSlug
|
|
102
|
-
}) => bundleUrlGenerator(extensionSlug, version)
|
|
103
|
-
},
|
|
104
2
|
RegistryExtension: {
|
|
3
|
+
// Resolve manifest from the current release
|
|
105
4
|
manifest: root => {
|
|
106
|
-
|
|
107
|
-
|
|
5
|
+
if (!root.releases || root.releases.length === 0) {
|
|
6
|
+
return null;
|
|
7
|
+
}
|
|
8
|
+
// Find the current release that matches the extension's version
|
|
9
|
+
const currentRelease = root.releases.find(release => release.version === root.version);
|
|
10
|
+
if (!currentRelease || !currentRelease.manifest) {
|
|
11
|
+
return null;
|
|
12
|
+
}
|
|
108
13
|
try {
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
14
|
+
// Parse the manifest from the release (stored as JSON string)
|
|
15
|
+
const parsedManifest = typeof currentRelease.manifest === 'string' ? JSON.parse(currentRelease.manifest) : currentRelease.manifest;
|
|
16
|
+
return {
|
|
17
|
+
...parsedManifest,
|
|
18
|
+
raw: currentRelease.manifest // Keep the original raw JSON for backwards compatibility
|
|
19
|
+
};
|
|
20
|
+
} catch (error) {
|
|
21
|
+
logger?.warn('Failed to parse extension manifest for', root.extensionSlug, ':', error);
|
|
22
|
+
// Fallback to raw string format for backwards compatibility
|
|
23
|
+
return {
|
|
24
|
+
raw: currentRelease.manifest
|
|
113
25
|
};
|
|
114
|
-
} catch (err) {
|
|
115
|
-
result = {};
|
|
116
26
|
}
|
|
117
|
-
return result;
|
|
118
|
-
},
|
|
119
|
-
url: root => bundleUrlGenerator(root.extensionSlug, root.version)
|
|
120
|
-
},
|
|
121
|
-
Query: {
|
|
122
|
-
// namespace for running all extension registry queries
|
|
123
|
-
extensionRegistry() {
|
|
124
|
-
return {};
|
|
125
|
-
},
|
|
126
|
-
/// DEPRECATED: Remove all fo the following resolvers as they moved to namespace ExtensionRegistry
|
|
127
|
-
async extensions(root, args, ctx) {
|
|
128
|
-
logger && logger.debug('args [%j]', args);
|
|
129
|
-
const nodes = await ctx.registryExtensionService.findExtensions(args.first, args.query, args.local, args.remote, args.prioritizeExtensionIDs);
|
|
130
|
-
// const res = { nodes: {...nodes, manifest: JSON.parse(nodes[0].manifest)} };
|
|
131
|
-
// console.log('nodes==>', nodes);
|
|
132
|
-
// nodes = nodes.map(el => {
|
|
133
|
-
// return {
|
|
134
|
-
// ...JSON.parse(JSON.stringify(el)),
|
|
135
|
-
// manifest: JSON.parse(el.manifest),
|
|
136
|
-
// };
|
|
137
|
-
// });
|
|
138
|
-
// console.log('nodes=======after>', nodes);
|
|
139
|
-
return {
|
|
140
|
-
nodes: nodes,
|
|
141
|
-
pageInfo: {
|
|
142
|
-
hasNextPage: false,
|
|
143
|
-
hasPreviousPage: false
|
|
144
|
-
},
|
|
145
|
-
totalCount: nodes.length
|
|
146
|
-
};
|
|
147
|
-
},
|
|
148
|
-
async extension(root, args, ctx) {
|
|
149
|
-
return ctx.registryExtensionService.findExtension(args.extensionSlug);
|
|
150
27
|
},
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
return ctx.registryExtensionService.updateExtensionName(args.extension, args.name);
|
|
162
|
-
},
|
|
163
|
-
async deleteExtension(root, args, ctx) {
|
|
164
|
-
const result = await ctx.registryExtensionService.deleteExtension(args.extension);
|
|
165
|
-
return {
|
|
166
|
-
success: !!result,
|
|
167
|
-
message: 'Extension deleted successfully'
|
|
168
|
-
};
|
|
169
|
-
},
|
|
170
|
-
async publishExtension(root, args, ctx) {
|
|
171
|
-
const extension = await ctx.registryExtensionService.publishExtension({
|
|
172
|
-
...args
|
|
173
|
-
});
|
|
28
|
+
// Resolve releases
|
|
29
|
+
releases: root => root.releases || [],
|
|
30
|
+
// Resolve the current version directly from the extension
|
|
31
|
+
version: root => root.version || null,
|
|
32
|
+
// Resolve publisher
|
|
33
|
+
publisher: (root, args, ctx) => {
|
|
34
|
+
if (!root.publisher) {
|
|
35
|
+
return null;
|
|
36
|
+
}
|
|
37
|
+
// For now, return a basic publisher object - this should be replaced with proper dataloader
|
|
174
38
|
return {
|
|
175
|
-
|
|
39
|
+
id: String(root.publisher),
|
|
40
|
+
name: 'Publisher Name',
|
|
41
|
+
// This should come from the actual publisher data
|
|
42
|
+
__typename: 'RegistryPublisher'
|
|
176
43
|
};
|
|
177
44
|
}
|
|
178
45
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry-extension-resolver.js","sources":["../../../src/graphql/resolvers/registry-extension-resolver.ts"],"sourcesContent":[null],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"registry-extension-resolver.js","sources":["../../../src/graphql/resolvers/registry-extension-resolver.ts"],"sourcesContent":[null],"names":[],"mappings":"AAES,MAAA,QAAQ;AACjB,EAAA,iBAAkB,EAAE;AACpB;AAEA,IAAA,QAAA,EAAA,IAAO,IAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|