@adminide-stack/marketplace-module-server 12.0.4-alpha.92 → 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.
Files changed (194) hide show
  1. package/Readme.md +321 -0
  2. package/lib/containers/module.d.ts +8 -0
  3. package/lib/containers/module.d.ts.map +1 -1
  4. package/lib/containers/module.js +16 -5
  5. package/lib/containers/module.js.map +1 -1
  6. package/lib/dataloaders/index.d.ts +2 -0
  7. package/lib/dataloaders/index.d.ts.map +1 -0
  8. package/lib/dataloaders/publisher-data-loader.d.ts +6 -0
  9. package/lib/dataloaders/publisher-data-loader.d.ts.map +1 -0
  10. package/lib/demo/test-graphql-examples.d.ts +73 -0
  11. package/lib/demo/test-graphql-examples.d.ts.map +1 -0
  12. package/lib/graphql/resolvers/form-templates-resolver.d.ts +220 -0
  13. package/lib/graphql/resolvers/form-templates-resolver.d.ts.map +1 -0
  14. package/lib/graphql/resolvers/form-templates-resolver.js +170 -0
  15. package/lib/graphql/resolvers/form-templates-resolver.js.map +1 -0
  16. package/lib/graphql/resolvers/gallery-resolver.d.ts +15 -0
  17. package/lib/graphql/resolvers/gallery-resolver.d.ts.map +1 -0
  18. package/lib/graphql/resolvers/gallery-resolver.js +35 -0
  19. package/lib/graphql/resolvers/gallery-resolver.js.map +1 -0
  20. package/lib/graphql/resolvers/index.d.ts +247 -1
  21. package/lib/graphql/resolvers/index.d.ts.map +1 -1
  22. package/lib/graphql/resolvers/index.js +1 -0
  23. package/lib/graphql/resolvers/index.js.map +1 -0
  24. package/lib/graphql/resolvers/installed-extension-resolver.d.ts +5 -0
  25. package/lib/graphql/resolvers/installed-extension-resolver.d.ts.map +1 -0
  26. package/lib/graphql/resolvers/installed-extension-resolver.js +309 -0
  27. package/lib/graphql/resolvers/installed-extension-resolver.js.map +1 -0
  28. package/lib/graphql/resolvers/marketplace-form-resolver.d.ts +13 -0
  29. package/lib/graphql/resolvers/marketplace-form-resolver.d.ts.map +1 -0
  30. package/lib/graphql/resolvers/marketplace-form-resolver.js +90 -0
  31. package/lib/graphql/resolvers/marketplace-form-resolver.js.map +1 -0
  32. package/lib/graphql/resolvers/publisher-analytics-resolver.d.ts +14 -0
  33. package/lib/graphql/resolvers/publisher-analytics-resolver.d.ts.map +1 -0
  34. package/lib/graphql/resolvers/publisher-analytics-resolver.js +221 -0
  35. package/lib/graphql/resolvers/publisher-analytics-resolver.js.map +1 -0
  36. package/lib/graphql/resolvers/publisher-resolver.d.ts +5 -0
  37. package/lib/graphql/resolvers/publisher-resolver.d.ts.map +1 -0
  38. package/lib/graphql/resolvers/publisher-resolver.js +183 -0
  39. package/lib/graphql/resolvers/publisher-resolver.js.map +1 -0
  40. package/lib/graphql/resolvers/registry-extension-resolver.d.ts +5 -0
  41. package/lib/graphql/resolvers/registry-extension-resolver.d.ts.map +1 -0
  42. package/lib/graphql/resolvers/registry-extension-resolver.js +46 -0
  43. package/lib/graphql/resolvers/registry-extension-resolver.js.map +1 -0
  44. package/lib/graphql/schemas/extension-pricing.graphql +546 -0
  45. package/lib/graphql/schemas/extension-pricing.graphql.js +1 -0
  46. package/lib/graphql/schemas/extension-pricing.graphql.js.map +1 -0
  47. package/lib/graphql/schemas/extension-registry.graphql +107 -0
  48. package/lib/graphql/schemas/extension-registry.graphql.js +1 -0
  49. package/lib/graphql/schemas/extension-registry.graphql.js.map +1 -0
  50. package/lib/graphql/schemas/form-templates.graphql +269 -0
  51. package/lib/graphql/schemas/form-templates.graphql.js +1 -0
  52. package/lib/graphql/schemas/form-templates.graphql.js.map +1 -0
  53. package/lib/graphql/schemas/gallery-schema.graphql +247 -0
  54. package/lib/graphql/schemas/gallery-schema.graphql.js +1 -0
  55. package/lib/graphql/schemas/gallery-schema.graphql.js.map +1 -0
  56. package/lib/graphql/schemas/index.d.ts.map +1 -1
  57. package/lib/graphql/schemas/index.js +3 -4
  58. package/lib/graphql/schemas/index.js.map +1 -1
  59. package/lib/graphql/schemas/installed-extension.graphql +324 -0
  60. package/lib/graphql/schemas/installed-extension.graphql.js +1 -0
  61. package/lib/graphql/schemas/installed-extension.graphql.js.map +1 -0
  62. package/lib/graphql/schemas/publisher-analytics.graphql +305 -0
  63. package/lib/graphql/schemas/publisher-analytics.graphql.js +1 -0
  64. package/lib/graphql/schemas/publisher-analytics.graphql.js.map +1 -0
  65. package/lib/graphql/schemas/publisher.graphql +584 -0
  66. package/lib/graphql/schemas/publisher.graphql.js +1 -0
  67. package/lib/graphql/schemas/publisher.graphql.js.map +1 -0
  68. package/lib/graphql/schemas/service.graphql +196 -0
  69. package/lib/index.d.ts +3 -1
  70. package/lib/index.d.ts.map +1 -1
  71. package/lib/index.js +1 -1
  72. package/lib/index.js.map +1 -1
  73. package/lib/migrations/dbMigrations/DropOldPublisherIndexMigration.d.ts +20 -0
  74. package/lib/migrations/dbMigrations/DropOldPublisherIndexMigration.d.ts.map +1 -0
  75. package/lib/migrations/dbMigrations/DropOldPublisherIndexMigration.js +61 -0
  76. package/lib/migrations/dbMigrations/DropOldPublisherIndexMigration.js.map +1 -0
  77. package/lib/migrations/index.d.ts +2 -0
  78. package/lib/migrations/index.d.ts.map +1 -0
  79. package/lib/module.d.ts +1 -1
  80. package/lib/module.d.ts.map +1 -1
  81. package/lib/module.js +12 -25
  82. package/lib/module.js.map +1 -1
  83. package/lib/plugins/extension-moleculer-service.d.ts +86 -0
  84. package/lib/plugins/extension-moleculer-service.d.ts.map +1 -0
  85. package/lib/plugins/index.d.ts +2 -0
  86. package/lib/plugins/index.d.ts.map +1 -0
  87. package/lib/services/extension-gallery-repository.d.ts +17 -0
  88. package/lib/services/extension-gallery-repository.d.ts.map +1 -0
  89. package/lib/services/extension-gallery-repository.js +192 -0
  90. package/lib/services/extension-gallery-repository.js.map +1 -0
  91. package/lib/services/extension-gallery-service-new.d.ts +39 -0
  92. package/lib/services/extension-gallery-service-new.d.ts.map +1 -0
  93. package/lib/services/extension-gallery-service.d.ts +30 -0
  94. package/lib/services/extension-gallery-service.d.ts.map +1 -0
  95. package/lib/services/extension-gallery-service.js +334 -0
  96. package/lib/services/extension-gallery-service.js.map +1 -0
  97. package/lib/services/index.d.ts +6 -1
  98. package/lib/services/index.d.ts.map +1 -1
  99. package/lib/services/installed-extension-service-ext.d.ts +16 -0
  100. package/lib/services/installed-extension-service-ext.d.ts.map +1 -0
  101. package/lib/services/installed-extension-service-ext.js +518 -0
  102. package/lib/services/installed-extension-service-ext.js.map +1 -0
  103. package/lib/services/installed-extension-service.d.ts +110 -0
  104. package/lib/services/installed-extension-service.d.ts.map +1 -0
  105. package/lib/services/installed-extension-service.js +633 -0
  106. package/lib/services/installed-extension-service.js.map +1 -0
  107. package/lib/services/installed-extension-service.test.d.ts +1 -0
  108. package/lib/services/installed-extension-service.test.d.ts.map +1 -0
  109. package/lib/services/publisher-analytics-service.d.ts +128 -0
  110. package/lib/services/publisher-analytics-service.d.ts.map +1 -0
  111. package/lib/services/publisher-event-service.d.ts +48 -0
  112. package/lib/services/publisher-event-service.d.ts.map +1 -0
  113. package/lib/services/publisher-event-service.js +296 -0
  114. package/lib/services/publisher-event-service.js.map +1 -0
  115. package/lib/services/publisher-service-context.d.ts +1 -0
  116. package/lib/services/publisher-service-context.d.ts.map +1 -0
  117. package/lib/services/publisher-service.d.ts +62 -0
  118. package/lib/services/publisher-service.d.ts.map +1 -0
  119. package/lib/services/publisher-service.js +135 -0
  120. package/lib/services/publisher-service.js.map +1 -0
  121. package/lib/store/index.d.ts +1 -1
  122. package/lib/store/index.d.ts.map +1 -1
  123. package/lib/store/models/index.d.ts +2 -1
  124. package/lib/store/models/index.d.ts.map +1 -1
  125. package/lib/store/models/installed-extension-model.d.ts +4 -0
  126. package/lib/store/models/installed-extension-model.d.ts.map +1 -0
  127. package/lib/store/models/installed-extension-model.js +269 -0
  128. package/lib/store/models/installed-extension-model.js.map +1 -0
  129. package/lib/store/models/publisher-event-model.d.ts +11 -0
  130. package/lib/store/models/publisher-event-model.d.ts.map +1 -0
  131. package/lib/store/models/publisher-model.d.ts +5 -0
  132. package/lib/store/models/publisher-model.d.ts.map +1 -0
  133. package/lib/store/models/publisher-model.js +117 -0
  134. package/lib/store/models/publisher-model.js.map +1 -0
  135. package/lib/store/models/publisher-stats-model.d.ts +1 -0
  136. package/lib/store/models/publisher-stats-model.d.ts.map +1 -0
  137. package/lib/store/repositories/index.d.ts +3 -0
  138. package/lib/store/repositories/index.d.ts.map +1 -0
  139. package/lib/store/repositories/installed-extension-repository.d.ts +77 -0
  140. package/lib/store/repositories/installed-extension-repository.d.ts.map +1 -0
  141. package/lib/store/repositories/installed-extension-repository.js +462 -0
  142. package/lib/store/repositories/installed-extension-repository.js.map +1 -0
  143. package/lib/store/repositories/publisher-analytics-repository.d.ts +1 -0
  144. package/lib/store/repositories/publisher-analytics-repository.d.ts.map +1 -0
  145. package/lib/store/repositories/publisher-repository.d.ts +19 -0
  146. package/lib/store/repositories/publisher-repository.d.ts.map +1 -0
  147. package/lib/store/repositories/publisher-repository.js +87 -0
  148. package/lib/store/repositories/publisher-repository.js.map +1 -0
  149. package/lib/templates/constants/DB_COLL_NAMES.ts.template +5 -0
  150. package/lib/templates/constants/SERVER_TYPES.ts.template +10 -4
  151. package/lib/templates/repositories/ExtensionGalleryRepository.ts.template +44 -0
  152. package/lib/templates/repositories/InstalledExtensionRepository.ts.template +99 -0
  153. package/lib/templates/repositories/MarketplacePublisherRepository.ts.template +24 -0
  154. package/lib/templates/repositories/RegistryExtensionRepository.ts.template +10 -15
  155. package/lib/templates/services/ExtensionGalleryDataLoader.ts.template +2 -0
  156. package/lib/templates/services/ExtensionGalleryService.ts.template +79 -0
  157. package/lib/templates/services/InstalledExtensionDataLoader.ts.template +2 -0
  158. package/lib/templates/services/InstalledExtensionService.ts.template +199 -0
  159. package/lib/templates/services/MarketplacePublisherService.ts.template +51 -0
  160. package/lib/templates/services/PublisherDataLoader.ts.template +3 -0
  161. package/lib/templates/services/PublisherEventService.ts.template +56 -0
  162. package/lib/templates/services/RegistryExtensionService.ts.template +62 -18
  163. package/lib/tests/extension-integration.test.d.ts +1 -0
  164. package/lib/tests/extension-integration.test.d.ts.map +1 -0
  165. package/lib/tests/install-extension-graphql.test.d.ts +2 -0
  166. package/lib/tests/install-extension-graphql.test.d.ts.map +1 -0
  167. package/lib/tests/test-extension-services.d.ts +1 -0
  168. package/lib/tests/test-extension-services.d.ts.map +1 -0
  169. package/lib/utils/publisherValidation.d.ts +23 -0
  170. package/lib/utils/publisherValidation.d.ts.map +1 -0
  171. package/lib/utils/publisherValidation.js +144 -0
  172. package/lib/utils/publisherValidation.js.map +1 -0
  173. package/package.json +16 -7
  174. package/lib/graphql/resolvers/resolvers.d.ts +0 -2
  175. package/lib/graphql/resolvers/resolvers.d.ts.map +0 -1
  176. package/lib/graphql/resolvers/resolvers.js +0 -167
  177. package/lib/graphql/resolvers/resolvers.js.map +0 -1
  178. package/lib/graphql/schemas/extension.graphql +0 -57
  179. package/lib/graphql/schemas/extension.graphql.js +0 -1
  180. package/lib/graphql/schemas/extension.graphql.js.map +0 -1
  181. package/lib/services/extension-service.d.ts +0 -54
  182. package/lib/services/extension-service.d.ts.map +0 -1
  183. package/lib/services/extension-service.js +0 -42
  184. package/lib/services/extension-service.js.map +0 -1
  185. package/lib/store/models/registry-extension-model.d.ts +0 -10
  186. package/lib/store/models/registry-extension-model.d.ts.map +0 -1
  187. package/lib/store/models/registry-extension-model.js +0 -62
  188. package/lib/store/models/registry-extension-model.js.map +0 -1
  189. package/lib/store/repository/index.d.ts +0 -2
  190. package/lib/store/repository/index.d.ts.map +0 -1
  191. package/lib/store/repository/registry-extension-repository.d.ts +0 -31
  192. package/lib/store/repository/registry-extension-repository.d.ts.map +0 -1
  193. package/lib/store/repository/registry-extension-repository.js +0 -135
  194. package/lib/store/repository/registry-extension-repository.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"installed-extension-repository.d.ts","sourceRoot":"","sources":["../../../src/store/repositories/installed-extension-repository.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,462 @@
1
+ import {__decorate,__param,__metadata}from'tslib';import {injectable,inject,optional}from'inversify';import {DB_COLL_NAMES}from'common/server';import {BaseMongoRepository}from'@common-stack/store-mongo';import*as mongoose from'mongoose';import {InstalledExtensionModelFunc}from'../models/installed-extension-model.js';import'../models/publisher-model.js';let InstalledExtensionRepository = class InstalledExtensionRepository extends BaseMongoRepository {
2
+ constructor(db, logger, options) {
3
+ super(InstalledExtensionModelFunc, db, logger, options);
4
+ if (!db) {
5
+ throw new Error('A database connection is required');
6
+ }
7
+ this.logger = logger.child({
8
+ className: 'InstalledExtensionRepository'
9
+ });
10
+ }
11
+ async findByOrgAndId(orgId, extensionSlug) {
12
+ try {
13
+ // Since we store extension as ObjectId, we need to look up by extension reference
14
+ // For now, we'll return null and let the service handle this differently
15
+ this.logger.info('findByOrgAndId called with extensionSlug, but we store extension ObjectIds', {
16
+ orgId,
17
+ extensionSlug
18
+ });
19
+ return null;
20
+ } catch (error) {
21
+ this.logger.error('Error in findByOrgAndId', {
22
+ error,
23
+ orgId,
24
+ extensionSlug
25
+ });
26
+ return null;
27
+ }
28
+ }
29
+ async findByOrgAndExtensionId(organizationId, extensionId) {
30
+ try {
31
+ // Convert organizationId string to ObjectId for organization field lookup
32
+ return await this.get({
33
+ organization: new mongoose.Types.ObjectId(organizationId),
34
+ extension: new mongoose.Types.ObjectId(extensionId)
35
+ });
36
+ } catch (error) {
37
+ this.logger.error('Error in findByOrgAndExtensionId', {
38
+ error,
39
+ organizationId,
40
+ extensionId
41
+ });
42
+ return null;
43
+ }
44
+ }
45
+ async countExtensions(filter) {
46
+ try {
47
+ const mongoQuery = {};
48
+ if (filter.orgId) {
49
+ // Convert orgId string to ObjectId for organization field lookup
50
+ mongoQuery.organization = new mongoose.Types.ObjectId(filter.orgId);
51
+ }
52
+ if (filter.status) {
53
+ mongoQuery.status = Array.isArray(filter.status) ? {
54
+ $in: filter.status
55
+ } : filter.status;
56
+ }
57
+ if (filter['lifecycle.registryStatus']) {
58
+ mongoQuery['lifecycle.registryStatus'] = Array.isArray(filter['lifecycle.registryStatus']) ? {
59
+ $in: filter['lifecycle.registryStatus']
60
+ } : filter['lifecycle.registryStatus'];
61
+ }
62
+ if (filter['lifecycle.isOrphaned'] !== undefined) {
63
+ mongoQuery['lifecycle.isOrphaned'] = filter['lifecycle.isOrphaned'];
64
+ }
65
+ if (filter['settings.effectiveEnabled'] !== undefined) {
66
+ mongoQuery['settings.effectiveEnabled'] = filter['settings.effectiveEnabled'];
67
+ }
68
+ if (filter.installedBy) {
69
+ mongoQuery.installedBy = filter.installedBy;
70
+ }
71
+ return await this.count(mongoQuery);
72
+ } catch (error) {
73
+ this.logger.error('Error in countExtensions', {
74
+ error,
75
+ filter
76
+ });
77
+ return 0;
78
+ }
79
+ }
80
+ /**
81
+ * Create a new installed extension record
82
+ */
83
+ async createExtension(input) {
84
+ try {
85
+ this.logger.trace('Creating installed extension with params (%j)', input);
86
+ const extensionData = {
87
+ ...input,
88
+ organization: new mongoose.Types.ObjectId(input.orgId),
89
+ // Convert orgId to ObjectId for organization field
90
+ extension: input.extensionId,
91
+ // Store ObjectId reference to extension registry
92
+ installedBy: new mongoose.Types.ObjectId(input.installedBy),
93
+ installedAt: new Date(),
94
+ status: 'installed',
95
+ lifecycle: {
96
+ registryStatus: 'active',
97
+ isOrphaned: false,
98
+ deprecationWarningShown: false,
99
+ autoUpdateBlocked: false,
100
+ lastRegistryCheck: new Date().toISOString()
101
+ },
102
+ policies: {
103
+ allowOrphanedExecution: false,
104
+ requireSecurityUpdates: true,
105
+ autoRemoveDeprecated: false,
106
+ deprecationGracePeriod: 30,
107
+ ...input.policies
108
+ },
109
+ settings: {
110
+ userEnabled: true,
111
+ systemEnabled: true,
112
+ effectiveEnabled: true,
113
+ userConfig: {},
114
+ systemConfig: {},
115
+ ...input.settings
116
+ },
117
+ runtime: {
118
+ activationState: 'enabled'
119
+ },
120
+ auditLog: [{
121
+ action: 'installed',
122
+ timestamp: new Date(),
123
+ user: new mongoose.Types.ObjectId(input.installedBy),
124
+ details: {
125
+ version: input.version,
126
+ source: 'manual'
127
+ }
128
+ }]
129
+ };
130
+ return await this.create(extensionData);
131
+ } catch (error) {
132
+ this.logger.error('Error creating installed extension', {
133
+ error,
134
+ input
135
+ });
136
+ throw error;
137
+ }
138
+ }
139
+ /**
140
+ * Update an existing installed extension
141
+ */
142
+ async updateExtension(orgId, extensionId, update) {
143
+ try {
144
+ const updateData = {
145
+ ...update,
146
+ lastUpdated: new Date(),
147
+ ...(update.lastUpdatedBy && {
148
+ lastUpdatedBy: new mongoose.Types.ObjectId(update.lastUpdatedBy)
149
+ })
150
+ };
151
+ return await this.update({
152
+ organization: new mongoose.Types.ObjectId(orgId),
153
+ extension: new mongoose.Types.ObjectId(extensionId)
154
+ }, {
155
+ $set: updateData
156
+ });
157
+ } catch (error) {
158
+ this.logger.error('Error updating installed extension', {
159
+ error,
160
+ orgId,
161
+ extensionId
162
+ });
163
+ throw error;
164
+ }
165
+ }
166
+ /**
167
+ * Find a specific installed extension by organization and extension ObjectIds
168
+ */
169
+ async findOne(orgId, extensionId) {
170
+ try {
171
+ return await this.get({
172
+ organization: new mongoose.Types.ObjectId(orgId),
173
+ extension: new mongoose.Types.ObjectId(extensionId)
174
+ });
175
+ } catch (error) {
176
+ this.logger.error('Error finding installed extension', {
177
+ error,
178
+ orgId,
179
+ extensionId
180
+ });
181
+ return null;
182
+ }
183
+ }
184
+ /**
185
+ * Find all installed extensions for a specific extension ObjectId
186
+ */
187
+ async findByExtensionId(extensionId) {
188
+ try {
189
+ const mongoQuery = {
190
+ extension: new mongoose.Types.ObjectId(extensionId)
191
+ };
192
+ const extensions = await this.model.find(mongoQuery).exec();
193
+ return extensions.map(ext => ext.toJSON({
194
+ virtuals: true
195
+ }));
196
+ } catch (error) {
197
+ this.logger.error('Error finding installed extensions by extensionId', {
198
+ error,
199
+ extensionId
200
+ });
201
+ return [];
202
+ }
203
+ }
204
+ /**
205
+ * Find installed extensions with optional filtering
206
+ * Uses BaseMongoRepository getAll with population to ensure proper _id to id transformation
207
+ */
208
+ async findExtensions(query) {
209
+ try {
210
+ const mongoQuery = {};
211
+ // Handle organization-based queries (preferred)
212
+ if (query.orgId) {
213
+ mongoQuery.organization = new mongoose.Types.ObjectId(query.orgId);
214
+ }
215
+ // Support accountId as a fallback mapping to organization for backward compatibility
216
+ else if (query.accountId) {
217
+ mongoQuery.organization = new mongoose.Types.ObjectId(query.accountId);
218
+ }
219
+ // Skip extensionSlug filtering at repository level since we store extension as ObjectId
220
+ // The GraphQL field resolver will handle mapping extension ObjectId to extension details
221
+ if (query.status) {
222
+ mongoQuery.status = Array.isArray(query.status) ? {
223
+ $in: query.status
224
+ } : query.status;
225
+ }
226
+ if (query['lifecycle.registryStatus']) {
227
+ mongoQuery['lifecycle.registryStatus'] = Array.isArray(query['lifecycle.registryStatus']) ? {
228
+ $in: query['lifecycle.registryStatus']
229
+ } : query['lifecycle.registryStatus'];
230
+ }
231
+ if (query['lifecycle.isOrphaned'] !== undefined) {
232
+ mongoQuery['lifecycle.isOrphaned'] = query['lifecycle.isOrphaned'];
233
+ }
234
+ if (query['settings.effectiveEnabled'] !== undefined) {
235
+ mongoQuery['settings.effectiveEnabled'] = query['settings.effectiveEnabled'];
236
+ }
237
+ if (query.installedBy) {
238
+ mongoQuery.installedBy = query.installedBy;
239
+ }
240
+ // Use BaseMongoRepository getAll with population
241
+ // This ensures proper _id to id transformation through virtual fields
242
+ const extensions = await this.model.find(mongoQuery).exec();
243
+ return extensions.map(ext => ext.toJSON({
244
+ virtuals: true
245
+ }));
246
+ } catch (error) {
247
+ this.logger.error('Error finding installed extensions', {
248
+ error,
249
+ query
250
+ });
251
+ return [];
252
+ }
253
+ }
254
+ /**
255
+ * Delete an installed extension
256
+ */
257
+ async deleteExtension(orgId, extensionId) {
258
+ try {
259
+ return await this.delete({
260
+ organization: new mongoose.Types.ObjectId(orgId),
261
+ extension: new mongoose.Types.ObjectId(extensionId)
262
+ });
263
+ } catch (error) {
264
+ this.logger.error('Error deleting installed extension', {
265
+ error,
266
+ orgId,
267
+ extensionId
268
+ });
269
+ return false;
270
+ }
271
+ }
272
+ /**
273
+ * Get installed extensions joined with registry information
274
+ */
275
+ async findWithRegistryInfo(query) {
276
+ try {
277
+ const mongoQuery = {};
278
+ if (query.orgId) {
279
+ mongoQuery.organization = new mongoose.Types.ObjectId(query.orgId);
280
+ }
281
+ const pipeline = [{
282
+ $match: mongoQuery
283
+ }, {
284
+ $lookup: {
285
+ from: 'extensionregistry',
286
+ localField: 'extension',
287
+ foreignField: '_id',
288
+ as: 'registryInfo'
289
+ }
290
+ }, {
291
+ $unwind: {
292
+ path: '$registryInfo',
293
+ preserveNullAndEmptyArrays: true
294
+ }
295
+ }];
296
+ const extensions = await this.model.aggregate(pipeline);
297
+ return extensions;
298
+ } catch (error) {
299
+ this.logger.error('Error finding extensions with registry info', {
300
+ error,
301
+ query
302
+ });
303
+ return [];
304
+ }
305
+ }
306
+ /**
307
+ * Check if extension exists for organization
308
+ */
309
+ async exists(extensionId, orgId) {
310
+ try {
311
+ const query = orgId ? {
312
+ organization: new mongoose.Types.ObjectId(orgId),
313
+ extension: new mongoose.Types.ObjectId(extensionId)
314
+ } : {
315
+ extension: new mongoose.Types.ObjectId(extensionId)
316
+ };
317
+ const count = await this.count(query);
318
+ return count > 0;
319
+ } catch (error) {
320
+ this.logger.error('Error checking extension existence', {
321
+ error,
322
+ orgId,
323
+ extensionId
324
+ });
325
+ return false;
326
+ }
327
+ }
328
+ /**
329
+ * Bulk update multiple extensions
330
+ */
331
+ async bulkUpdateExtensions(tenantId, filter, update) {
332
+ try {
333
+ const mongoQuery = {
334
+ tenantId,
335
+ ...filter
336
+ };
337
+ const result = await this.model.updateMany(mongoQuery, {
338
+ $set: update
339
+ });
340
+ return result.modifiedCount;
341
+ } catch (error) {
342
+ this.logger.error('Error bulk updating extensions', {
343
+ error,
344
+ tenantId,
345
+ filter,
346
+ update
347
+ });
348
+ return 0;
349
+ }
350
+ }
351
+ /**
352
+ * Get extension dependency graph for a tenant
353
+ */
354
+ async getDependencyGraph(tenantId) {
355
+ try {
356
+ const extensions = await this.model.find({
357
+ tenantId
358
+ }).populate(DB_COLL_NAMES.ExtensionRegistries).exec();
359
+ const extensionObjects = extensions.map(ext => ext.toJSON({
360
+ virtuals: true
361
+ }));
362
+ const dependencies = extensionObjects.map(ext => ({
363
+ extensionId: ext.extension?.toString() || '',
364
+ dependsOn: ext.dependencies || [],
365
+ dependents: ext.dependents || []
366
+ }));
367
+ return {
368
+ extensions: extensionObjects,
369
+ dependencies
370
+ };
371
+ } catch (error) {
372
+ this.logger.error('Error getting dependency graph', {
373
+ error,
374
+ tenantId
375
+ });
376
+ return {
377
+ extensions: [],
378
+ dependencies: []
379
+ };
380
+ }
381
+ }
382
+ /**
383
+ * Count installed extensions matching query
384
+ */
385
+ async countByQuery(query) {
386
+ try {
387
+ const mongoQuery = {};
388
+ if (query.orgId) {
389
+ mongoQuery.organization = new mongoose.Types.ObjectId(query.orgId);
390
+ }
391
+ if (query.status) {
392
+ mongoQuery.status = Array.isArray(query.status) ? {
393
+ $in: query.status
394
+ } : query.status;
395
+ }
396
+ return await this.count(mongoQuery);
397
+ } catch (error) {
398
+ this.logger.error('Error counting extensions', {
399
+ error,
400
+ query
401
+ });
402
+ return 0;
403
+ }
404
+ }
405
+ /**
406
+ * Find extensions that need registry sync
407
+ */
408
+ async findStaleExtensions(tenantId, maxAge) {
409
+ try {
410
+ const staleDate = new Date(Date.now() - maxAge);
411
+ const extensions = await this.model.find({
412
+ tenantId,
413
+ 'lifecycle.lastRegistryCheck': {
414
+ $lt: staleDate.toISOString()
415
+ }
416
+ }).exec();
417
+ return extensions.map(ext => ext.toJSON({
418
+ virtuals: true
419
+ }));
420
+ } catch (error) {
421
+ this.logger.error('Error finding stale extensions', {
422
+ error,
423
+ tenantId,
424
+ maxAge
425
+ });
426
+ return [];
427
+ }
428
+ }
429
+ /**
430
+ * Update registry status for multiple extensions
431
+ */
432
+ async syncRegistryStatus(updates) {
433
+ try {
434
+ const bulkOps = updates.map(update => ({
435
+ updateOne: {
436
+ filter: {
437
+ tenantId: update.orgId,
438
+ extensionSlug: update.extensionId
439
+ },
440
+ update: {
441
+ $set: {
442
+ 'lifecycle.registryStatus': update.registryStatus,
443
+ 'lifecycle.isOrphaned': update.isOrphaned,
444
+ 'lifecycle.lastRegistryCheck': new Date().toISOString(),
445
+ ...(update.latestVersion && {
446
+ availableVersion: update.latestVersion
447
+ })
448
+ }
449
+ }
450
+ }
451
+ }));
452
+ await this.model.bulkWrite(bulkOps);
453
+ } catch (error) {
454
+ this.logger.error('Error syncing registry status', {
455
+ error,
456
+ updates
457
+ });
458
+ throw error;
459
+ }
460
+ }
461
+ };
462
+ InstalledExtensionRepository = __decorate([injectable(), __param(0, inject('MongoDBConnection')), __param(1, inject('Logger')), __param(2, inject('MongoOptions')), __param(2, optional()), __metadata("design:paramtypes", [mongoose.Connection, Object, Object])], InstalledExtensionRepository);export{InstalledExtensionRepository};//# sourceMappingURL=installed-extension-repository.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"installed-extension-repository.js","sources":["../../../src/store/repositories/installed-extension-repository.ts"],"sourcesContent":[null],"names":[],"mappings":"mWAiCU,IAAA,4BAA4B,qCAAkC,SAAY;AAe1E,EAAA,WAAA,CAAA,EAAA,EAAA,MAAA,EAAA,OACF,EAAA;IAeE,KAAA,CAAA,2BAAwB,EAAA,EAAA,EAAA,MAAA,EAAA,OAA4B,CAAA;AA+B1D,IAAA,IAAA,CAAA,EAAA,EAAA;;AAEG,IAAA;IACU,IAAA,CAAA,MAAA,GAAA,MACT,CAAK,KAAE,CAAA;AAwDX,MAAA,SAAA,EAAA;;AAEG,EAAA;QACU,oBACF,EAAA,aACP,EAAA;AAyBJ,IAAA,IAAA;;AAEG;AACU,MAAA,IAAA,CAAO,MAAM,CAAA,IAAE,CAAA;AAY5B,QAAA,KAAA;;AAEG,OAAA,CAAA;AACU,MAAA,OAAA,IAAA;AAab,IAAA,CAAA,CAAA,OAAA,KAAA,EAAA;;;AAGG,QAAA,KAAA;AACU,QAAA;AAgDb,OAAA,CAAA;;AAEG,IAAA;AACU,EAAA;AAYb,EAAA,MAAA,uBAAA,CAAA,cAAA,EAAA,WAAA,EAAA;;AAEG;MACU,OAAA,MAAA,IAAA,CAAoB;AAkCjC,QAAA,YAAA,EAAA,IAAA,QAAA,CAAA,KAAA,CAAA,QAAA,CAAA,cAAA,CAAA;;AAEG,OAAA,CAAA;AACU,IAAA,CAAA,CAAA,OAAO,KAAA,EAAA;AAgBpB,MAAA,IAAA,CAAA,MAAA,CAAA,KAAA,CAAA,kCAAA,EAAA;;AAEG,QAAA,cAAA;QACU;AAeb,OAAA,CAAA;;AAEG,IAAA;AACU,EAAA;AACT,EAAA,MAAA,eAAY,CAAA,MAAA,EAAY;QACxB;YACI,UAAA,GAAa;gBACb,CAAA,KAAS,EAAE;;AAEd,QAAA,UAAE,CAAA,YAAA,GAAA,IAAA,QAAA,CAAA,KAAA,CAAA,QAAA,CAAA,MAAA,CAAA,KAAA,CAAA;MACL;AAoBF,MAAA,IAAA,MAAA,CAAA,MAAA,EAAA;;AAEG,UAAA,GAAA,EAAA,MAAA,CAAA;SACU,GAAA,aAAoB;AAmBjC,MAAA;;AAEG,QAAA,UAAA,CAAA,0BAAA,CAAA,GAAA,KAAA,CAAA,OAAA,CAAA,MAAA,CAAA,0BAAA,CAAA,CAAA,GAAA;AACU,UAAA,GAAA,EAAA,MAAA,CAAA,0BAEH;AAkBV,SAAA,GAAA,MAAA,CAAA,0BAAA,CAAA;;AAEG,MAAA,IAAA,MAAA,CAAA,sBAAA,CAAA,KAAA,SAAA,EAAA;AACU,QAAA,UAAA,CAAA,sBACM,CAAA,GAAA,MAAA,CAAA,sBAAA,CAAA;;UAEX,MAAA,CAAA,2BAAoB,CAAA,KAAA,SAAA,EAAA;QACpB,UAAA,CAAA,2BAAuB,CAAA,GAAA,MAAA,CAAA,2BAAA,CAAA;;UAEvB,MAAA,CAAA,WAAoB,EAAA;AACvB,QAAC,UACK,CAAA,WAAK,GAAA,MAAA,CAAA,WAAA;AAyBnB,MAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=publisher-analytics-repository.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"publisher-analytics-repository.d.ts","sourceRoot":"","sources":["../../../src/store/repositories/publisher-analytics-repository.ts"],"names":[],"mappings":""}
@@ -0,0 +1,19 @@
1
+ import * as mongoose from 'mongoose';
2
+ import { CdmLogger } from '@cdm-logger/core';
3
+ import { BaseMongoRepository } from '@common-stack/store-mongo';
4
+ import { AsDomainType, IMarketplacePublisherRepository, IMarketplacePublisherModel } from 'common/server';
5
+ export declare class MarketplacePublisherRepository extends BaseMongoRepository<IMarketplacePublisherModel> implements IMarketplacePublisherRepository {
6
+ constructor(db: mongoose.Connection, logger: CdmLogger.ILogger, options?: unknown);
7
+ findByPublisherName(publisherName: string): Promise<AsDomainType<IMarketplacePublisherModel> | null>;
8
+ findPublishers(search?: string, orderBy?: string, orderDirection?: 'ASC' | 'DESC', limit?: number, offset?: number): Promise<{
9
+ publishers: AsDomainType<IMarketplacePublisherModel>[];
10
+ totalCount: number;
11
+ }>;
12
+ updatePublisherStats(publisherId: string, stats: {
13
+ extensionCount?: number;
14
+ totalInstalls?: number;
15
+ averageRating?: number;
16
+ }): Promise<AsDomainType<IMarketplacePublisherModel> | null>;
17
+ verifyPublisher(publisherId: string): Promise<AsDomainType<IMarketplacePublisherModel> | null>;
18
+ }
19
+ //# sourceMappingURL=publisher-repository.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"publisher-repository.d.ts","sourceRoot":"","sources":["../../../src/store/repositories/publisher-repository.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,QAAQ,MAAM,UAAU,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,EAAE,YAAY,EAAE,+BAA+B,EAAE,0BAA0B,EAAE,MAAM,eAAe,CAAC;AAG1G,qBACa,8BACT,SAAQ,mBAAmB,CAAC,0BAA0B,CACtD,YAAW,+BAA+B;gBAGT,EAAE,EAAE,QAAQ,CAAC,UAAU,EAClC,MAAM,EAAE,SAAS,CAAC,OAAO,EACP,OAAO,CAAC,EAAE,OAAO;IAS5C,mBAAmB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,0BAA0B,CAAC,GAAG,IAAI,CAAC;IAKpG,cAAc,CACvB,MAAM,CAAC,EAAE,MAAM,EACf,OAAO,SAAc,EACrB,cAAc,GAAE,KAAK,GAAG,MAAe,EACvC,KAAK,SAAK,EACV,MAAM,SAAI,GACX,OAAO,CAAC;QACP,UAAU,EAAE,YAAY,CAAC,0BAA0B,CAAC,EAAE,CAAC;QACvD,UAAU,EAAE,MAAM,CAAC;KACtB,CAAC;IA2CW,oBAAoB,CAC7B,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE;QACH,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,aAAa,CAAC,EAAE,MAAM,CAAC;KAC1B,GACF,OAAO,CAAC,YAAY,CAAC,0BAA0B,CAAC,GAAG,IAAI,CAAC;IAkB9C,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,0BAA0B,CAAC,GAAG,IAAI,CAAC;CAa9G"}
@@ -0,0 +1,87 @@
1
+ import {__decorate,__param,__metadata}from'tslib';import {injectable,inject,optional}from'inversify';import*as mongoose from'mongoose';import'@cdm-logger/core';import {BaseMongoRepository}from'@common-stack/store-mongo';import'../models/installed-extension-model.js';import {PublisherModelFunc}from'../models/publisher-model.js';var MarketplacePublisherRepository_1;
2
+ let MarketplacePublisherRepository = MarketplacePublisherRepository_1 = class MarketplacePublisherRepository extends BaseMongoRepository {
3
+ constructor(db, logger, options) {
4
+ super(PublisherModelFunc, db, logger, options);
5
+ if (!db) {
6
+ throw new Error('MongoDB connection is not provided');
7
+ }
8
+ this.logger = logger.child({
9
+ className: MarketplacePublisherRepository_1.name
10
+ });
11
+ }
12
+ async findByPublisherName(publisherName) {
13
+ this.logger.trace('findByPublisherName with publisherName [%s]', publisherName);
14
+ return this.model.findOne({
15
+ name: publisherName.toLowerCase()
16
+ }).exec();
17
+ }
18
+ async findPublishers(search, orderBy = 'createdAt', orderDirection = 'DESC', limit = 20, offset = 0) {
19
+ this.logger.trace('findPublishers with limit [%d], offset [%d], search [%s]', limit, offset, search);
20
+ const query = this.model.find();
21
+ // Apply search filter
22
+ if (search && search.trim()) {
23
+ const searchRegex = new RegExp(search.trim(), 'i');
24
+ query.or([{
25
+ displayName: searchRegex
26
+ }, {
27
+ publisherName: searchRegex
28
+ }, {
29
+ description: searchRegex
30
+ }]);
31
+ }
32
+ // Get total count for pagination
33
+ const totalCount = await this.model.countDocuments(query.getQuery()).exec();
34
+ // Apply ordering
35
+ const sortDirection = orderDirection === 'ASC' ? 1 : -1;
36
+ let sortField;
37
+ if (orderBy === 'displayName') {
38
+ sortField = 'displayName';
39
+ } else if (orderBy === 'extensionCount') {
40
+ sortField = 'extensionCount';
41
+ } else if (orderBy === 'totalInstalls') {
42
+ sortField = 'totalInstalls';
43
+ } else if (orderBy === 'averageRating') {
44
+ sortField = 'averageRating';
45
+ } else {
46
+ sortField = 'createdAt';
47
+ }
48
+ query.sort({
49
+ [sortField]: sortDirection
50
+ });
51
+ // Apply pagination
52
+ query.skip(offset).limit(limit);
53
+ const publishers = await query.exec();
54
+ return {
55
+ publishers,
56
+ totalCount
57
+ };
58
+ }
59
+ async updatePublisherStats(publisherId, stats) {
60
+ this.logger.trace('updatePublisherStats for publisher [%s] with stats [%j]', publisherId, stats);
61
+ const updateData = {
62
+ updatedAt: new Date()
63
+ };
64
+ if (stats.extensionCount !== undefined) {
65
+ updateData.extensionCount = stats.extensionCount;
66
+ }
67
+ if (stats.totalInstalls !== undefined) {
68
+ updateData.totalInstalls = stats.totalInstalls;
69
+ }
70
+ if (stats.averageRating !== undefined) {
71
+ updateData.averageRating = Math.max(0, Math.min(5, stats.averageRating)); // Clamp between 0-5
72
+ }
73
+ return this.model.findByIdAndUpdate(publisherId, updateData, {
74
+ new: true
75
+ }).exec();
76
+ }
77
+ async verifyPublisher(publisherId) {
78
+ this.logger.trace('verifyPublisher with publisherId [%s]', publisherId);
79
+ return this.model.findByIdAndUpdate(publisherId, {
80
+ verified: true,
81
+ updatedAt: new Date()
82
+ }, {
83
+ new: true
84
+ }).exec();
85
+ }
86
+ };
87
+ MarketplacePublisherRepository = MarketplacePublisherRepository_1 = __decorate([injectable(), __param(0, inject('MongoDBConnection')), __param(1, inject('Logger')), __param(2, inject('MongoOptions')), __param(2, optional()), __metadata("design:paramtypes", [mongoose.Connection, Object, Object])], MarketplacePublisherRepository);export{MarketplacePublisherRepository};//# sourceMappingURL=publisher-repository.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"publisher-repository.js","sources":["../../../src/store/repositories/publisher-repository.ts"],"sourcesContent":[null],"names":[],"mappings":"yUACA,IAAA,gCAAoC;IA4BnB,8BACM,GACf,gCACc,SAAO,8BAErB,SAAM,mBACC,CAAA;AACP,EAAA,WAAA,CAAA,EAAA,EAAU,MAAE,EAAA,OAAa,EAAA;SACzB,CAAA,kBAAmB,EAAA,EAAA,EAAA,MAAA,EAAA,OAAA,CAAA;QACrB,CAAA,EAAA,EAAA;AA2CW,MAAA,MAAA,IAAA,KAAA,CAAA,oCAEF,CAAA;;QAEH,CAAA,MAAA,GAAA,MAAgB,CAAA,KAAM,CAAC;eACvB,EAAA,gCAAuB,CAAA;KAC1B,CAAA;AAmBQ,EAAA;AAahB,EAAA,MAAA,mBAAA,CAAA,aAAA,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -0,0 +1,5 @@
1
+ export const DB_COLL_NAMES = {
2
+ // from package: marketplace-server
3
+ InstalledExtensions: 'installed_extensions',
4
+ MarketplacePublisher: 'marketplace_publishers',
5
+ };
@@ -1,6 +1,12 @@
1
-
2
1
  export const SERVER_TYPES = {
3
- IExtensionMongoConnection: Symbol('ExtensionMongoConnection'),
4
- IRegistryExtensionService: Symbol('IRegistryExtensionService'),
5
- IRegistryExtensionRepository: Symbol('IRegistryExtensionRepository'),
2
+
3
+ IInstalledExtensionService: Symbol('IInstalledExtensionService'),
4
+ IInstalledExtensionRepository: Symbol('IInstalledExtensionRepository'),
5
+ IMarketplacePublisherService: Symbol('IMarketplacePublisherService'),
6
+ IMarketplacePublisherRepository: Symbol('IMarketplacePublisherRepository'),
7
+ IPublisherEventService: Symbol('IPublisherEventService'),
8
+ // Extension Gallery Services
9
+ IExtensionGalleryService: Symbol.for('IExtensionGalleryService'),
10
+ IExtensionGalleryRepository: Symbol.for('IExtensionGalleryRepository'),
11
+ ExtensionGalleryDataLoader: Symbol.for('ExtensionGalleryDataLoader'),
6
12
  };
@@ -0,0 +1,44 @@
1
+ // from package: marketplace-server
2
+ import { IGalleryExtension } from 'common/server';
3
+
4
+ /**
5
+ * Gallery query result interface for repository operations
6
+ */
7
+ export interface IGalleryQueryResult {
8
+ results: IGalleryExtension[];
9
+ total: number;
10
+ pageSize: number;
11
+ }
12
+
13
+ /**
14
+ * Extension asset interface
15
+ */
16
+ export interface IExtensionAsset {
17
+ uri: string;
18
+ fallbackUri?: string;
19
+ }
20
+
21
+ /**
22
+ * Repository interface for ExtensionGallery data access
23
+ */
24
+ export interface IExtensionGalleryRepository {
25
+ /**
26
+ * Get asset content for an extension
27
+ */
28
+ asset<T>(extensionSlug: string, version: string, asset: string): Promise<T>;
29
+
30
+ /**
31
+ * Get extensions by ID
32
+ */
33
+ get(id: string, fields: string[]): Promise<IGalleryExtension[]>;
34
+
35
+ /**
36
+ * Download an extension
37
+ */
38
+ download(extension: IGalleryExtension): Promise<boolean>;
39
+
40
+ /**
41
+ * Query extensions
42
+ */
43
+ query(query: Record<string, unknown>): Promise<IGalleryQueryResult>;
44
+ }