@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.
Files changed (175) hide show
  1. package/lib/containers/module.d.ts +4 -4
  2. package/lib/containers/module.d.ts.map +1 -1
  3. package/lib/containers/module.js +12 -7
  4. package/lib/containers/module.js.map +1 -1
  5. package/lib/dataloaders/index.d.ts +1 -1
  6. package/lib/dataloaders/index.d.ts.map +1 -1
  7. package/lib/dataloaders/publisher-data-loader.d.ts +6 -0
  8. package/lib/dataloaders/publisher-data-loader.d.ts.map +1 -0
  9. package/lib/demo/test-graphql-examples.d.ts +73 -0
  10. package/lib/demo/test-graphql-examples.d.ts.map +1 -0
  11. package/lib/graphql/resolvers/form-templates-resolver.d.ts +220 -0
  12. package/lib/graphql/resolvers/form-templates-resolver.d.ts.map +1 -0
  13. package/lib/graphql/resolvers/form-templates-resolver.js +170 -0
  14. package/lib/graphql/resolvers/form-templates-resolver.js.map +1 -0
  15. package/lib/graphql/resolvers/gallery-resolver.d.ts +15 -0
  16. package/lib/graphql/resolvers/gallery-resolver.d.ts.map +1 -0
  17. package/lib/graphql/resolvers/gallery-resolver.js +35 -0
  18. package/lib/graphql/resolvers/gallery-resolver.js.map +1 -0
  19. package/lib/graphql/resolvers/index.d.ts +247 -1
  20. package/lib/graphql/resolvers/index.d.ts.map +1 -1
  21. package/lib/graphql/resolvers/index.js +1 -1
  22. package/lib/graphql/resolvers/installed-extension-resolver.d.ts.map +1 -1
  23. package/lib/graphql/resolvers/installed-extension-resolver.js +161 -35
  24. package/lib/graphql/resolvers/installed-extension-resolver.js.map +1 -1
  25. package/lib/graphql/resolvers/marketplace-form-resolver.d.ts +13 -0
  26. package/lib/graphql/resolvers/marketplace-form-resolver.d.ts.map +1 -0
  27. package/lib/graphql/resolvers/marketplace-form-resolver.js +90 -0
  28. package/lib/graphql/resolvers/marketplace-form-resolver.js.map +1 -0
  29. package/lib/graphql/resolvers/publisher-analytics-resolver.d.ts +14 -0
  30. package/lib/graphql/resolvers/publisher-analytics-resolver.d.ts.map +1 -0
  31. package/lib/graphql/resolvers/publisher-analytics-resolver.js +221 -0
  32. package/lib/graphql/resolvers/publisher-analytics-resolver.js.map +1 -0
  33. package/lib/graphql/resolvers/publisher-resolver.d.ts +5 -0
  34. package/lib/graphql/resolvers/publisher-resolver.d.ts.map +1 -0
  35. package/lib/graphql/resolvers/publisher-resolver.js +183 -0
  36. package/lib/graphql/resolvers/publisher-resolver.js.map +1 -0
  37. package/lib/graphql/resolvers/registry-extension-resolver.d.ts.map +1 -1
  38. package/lib/graphql/resolvers/registry-extension-resolver.js +34 -167
  39. package/lib/graphql/resolvers/registry-extension-resolver.js.map +1 -1
  40. package/lib/graphql/schemas/extension-pricing.graphql +546 -0
  41. package/lib/graphql/schemas/extension-pricing.graphql.js +1 -0
  42. package/lib/graphql/schemas/extension-pricing.graphql.js.map +1 -0
  43. package/lib/graphql/schemas/extension-registry.graphql +91 -58
  44. package/lib/graphql/schemas/extension-registry.graphql.js +1 -1
  45. package/lib/graphql/schemas/form-templates.graphql +269 -0
  46. package/lib/graphql/schemas/form-templates.graphql.js +1 -0
  47. package/lib/graphql/schemas/form-templates.graphql.js.map +1 -0
  48. package/lib/graphql/schemas/gallery-schema.graphql +247 -0
  49. package/lib/graphql/schemas/gallery-schema.graphql.js +1 -0
  50. package/lib/graphql/schemas/gallery-schema.graphql.js.map +1 -0
  51. package/lib/graphql/schemas/index.d.ts.map +1 -1
  52. package/lib/graphql/schemas/index.js +3 -1
  53. package/lib/graphql/schemas/index.js.map +1 -1
  54. package/lib/graphql/schemas/installed-extension.graphql +37 -7
  55. package/lib/graphql/schemas/installed-extension.graphql.js +1 -1
  56. package/lib/graphql/schemas/publisher-analytics.graphql +305 -0
  57. package/lib/graphql/schemas/publisher-analytics.graphql.js +1 -0
  58. package/lib/graphql/schemas/publisher-analytics.graphql.js.map +1 -0
  59. package/lib/graphql/schemas/publisher.graphql +584 -0
  60. package/lib/graphql/schemas/publisher.graphql.js +1 -0
  61. package/lib/graphql/schemas/publisher.graphql.js.map +1 -0
  62. package/lib/graphql/schemas/service.graphql +15 -0
  63. package/lib/index.d.ts +1 -1
  64. package/lib/index.js +1 -1
  65. package/lib/index.js.map +1 -1
  66. package/lib/migrations/dbMigrations/DropOldPublisherIndexMigration.d.ts +20 -0
  67. package/lib/migrations/dbMigrations/DropOldPublisherIndexMigration.d.ts.map +1 -0
  68. package/lib/migrations/dbMigrations/DropOldPublisherIndexMigration.js +61 -0
  69. package/lib/migrations/dbMigrations/DropOldPublisherIndexMigration.js.map +1 -0
  70. package/lib/migrations/index.d.ts +2 -0
  71. package/lib/migrations/index.d.ts.map +1 -0
  72. package/lib/module.d.ts +1 -1
  73. package/lib/module.d.ts.map +1 -1
  74. package/lib/module.js +11 -26
  75. package/lib/module.js.map +1 -1
  76. package/lib/services/extension-gallery-repository.d.ts +17 -0
  77. package/lib/services/extension-gallery-repository.d.ts.map +1 -0
  78. package/lib/services/extension-gallery-repository.js +192 -0
  79. package/lib/services/extension-gallery-repository.js.map +1 -0
  80. package/lib/services/extension-gallery-service-new.d.ts +39 -0
  81. package/lib/services/extension-gallery-service-new.d.ts.map +1 -0
  82. package/lib/services/extension-gallery-service.d.ts +30 -0
  83. package/lib/services/extension-gallery-service.d.ts.map +1 -0
  84. package/lib/services/extension-gallery-service.js +334 -0
  85. package/lib/services/extension-gallery-service.js.map +1 -0
  86. package/lib/services/index.d.ts +4 -1
  87. package/lib/services/index.d.ts.map +1 -1
  88. package/lib/services/installed-extension-service-ext.d.ts +5 -2
  89. package/lib/services/installed-extension-service-ext.d.ts.map +1 -1
  90. package/lib/services/installed-extension-service-ext.js +364 -117
  91. package/lib/services/installed-extension-service-ext.js.map +1 -1
  92. package/lib/services/installed-extension-service.d.ts +30 -13
  93. package/lib/services/installed-extension-service.d.ts.map +1 -1
  94. package/lib/services/installed-extension-service.js +301 -68
  95. package/lib/services/installed-extension-service.js.map +1 -1
  96. package/lib/services/installed-extension-service.test.d.ts +0 -1
  97. package/lib/services/publisher-analytics-service.d.ts +128 -0
  98. package/lib/services/publisher-analytics-service.d.ts.map +1 -0
  99. package/lib/services/publisher-event-service.d.ts +48 -0
  100. package/lib/services/publisher-event-service.d.ts.map +1 -0
  101. package/lib/services/publisher-event-service.js +296 -0
  102. package/lib/services/publisher-event-service.js.map +1 -0
  103. package/lib/services/publisher-service-context.d.ts +1 -0
  104. package/lib/services/publisher-service-context.d.ts.map +1 -0
  105. package/lib/services/publisher-service.d.ts +62 -0
  106. package/lib/services/publisher-service.d.ts.map +1 -0
  107. package/lib/services/publisher-service.js +135 -0
  108. package/lib/services/publisher-service.js.map +1 -0
  109. package/lib/store/models/index.d.ts +1 -1
  110. package/lib/store/models/index.d.ts.map +1 -1
  111. package/lib/store/models/installed-extension-model.d.ts.map +1 -1
  112. package/lib/store/models/installed-extension-model.js +17 -45
  113. package/lib/store/models/installed-extension-model.js.map +1 -1
  114. package/lib/store/models/publisher-event-model.d.ts +11 -0
  115. package/lib/store/models/publisher-event-model.d.ts.map +1 -0
  116. package/lib/store/models/publisher-model.d.ts +5 -0
  117. package/lib/store/models/publisher-model.d.ts.map +1 -0
  118. package/lib/store/models/publisher-model.js +117 -0
  119. package/lib/store/models/publisher-model.js.map +1 -0
  120. package/lib/store/models/publisher-stats-model.d.ts +1 -0
  121. package/lib/store/models/publisher-stats-model.d.ts.map +1 -0
  122. package/lib/store/repositories/index.d.ts +1 -1
  123. package/lib/store/repositories/index.d.ts.map +1 -1
  124. package/lib/store/repositories/installed-extension-repository.d.ts +17 -11
  125. package/lib/store/repositories/installed-extension-repository.d.ts.map +1 -1
  126. package/lib/store/repositories/installed-extension-repository.js +123 -75
  127. package/lib/store/repositories/installed-extension-repository.js.map +1 -1
  128. package/lib/store/repositories/publisher-analytics-repository.d.ts +1 -0
  129. package/lib/store/repositories/publisher-analytics-repository.d.ts.map +1 -0
  130. package/lib/store/repositories/publisher-repository.d.ts +19 -0
  131. package/lib/store/repositories/publisher-repository.d.ts.map +1 -0
  132. package/lib/store/repositories/publisher-repository.js +87 -0
  133. package/lib/store/repositories/publisher-repository.js.map +1 -0
  134. package/lib/templates/constants/DB_COLL_NAMES.ts.template +1 -1
  135. package/lib/templates/constants/SERVER_TYPES.ts.template +8 -5
  136. package/lib/templates/repositories/ExtensionGalleryRepository.ts.template +44 -0
  137. package/lib/templates/repositories/InstalledExtensionRepository.ts.template +19 -14
  138. package/lib/templates/repositories/MarketplacePublisherRepository.ts.template +24 -0
  139. package/lib/templates/repositories/RegistryExtensionRepository.ts.template +2 -2
  140. package/lib/templates/services/ExtensionGalleryDataLoader.ts.template +2 -0
  141. package/lib/templates/services/ExtensionGalleryService.ts.template +79 -0
  142. package/lib/templates/services/InstalledExtensionService.ts.template +63 -32
  143. package/lib/templates/services/MarketplacePublisherService.ts.template +51 -0
  144. package/lib/templates/services/PublisherDataLoader.ts.template +3 -0
  145. package/lib/templates/services/PublisherEventService.ts.template +56 -0
  146. package/lib/templates/services/RegistryExtensionService.ts.template +46 -2
  147. package/lib/tests/extension-integration.test.d.ts +0 -1
  148. package/lib/tests/install-extension-graphql.test.d.ts +2 -0
  149. package/lib/tests/install-extension-graphql.test.d.ts.map +1 -0
  150. package/lib/utils/publisherValidation.d.ts +23 -0
  151. package/lib/utils/publisherValidation.d.ts.map +1 -0
  152. package/lib/utils/publisherValidation.js +144 -0
  153. package/lib/utils/publisherValidation.js.map +1 -0
  154. package/package.json +13 -9
  155. package/lib/constants/extension-events.d.ts +0 -136
  156. package/lib/constants/extension-events.d.ts.map +0 -1
  157. package/lib/dataloaders/registry-extension-data-loader.d.ts +0 -6
  158. package/lib/dataloaders/registry-extension-data-loader.d.ts.map +0 -1
  159. package/lib/dataloaders/registry-extension-data-loader.js +0 -6
  160. package/lib/dataloaders/registry-extension-data-loader.js.map +0 -1
  161. package/lib/graphql/schemas/service.graphql.js +0 -1
  162. package/lib/graphql/schemas/service.graphql.js.map +0 -1
  163. package/lib/services/extension-service.d.ts +0 -42
  164. package/lib/services/extension-service.d.ts.map +0 -1
  165. package/lib/services/extension-service.js +0 -60
  166. package/lib/services/extension-service.js.map +0 -1
  167. package/lib/store/models/registry-extension-model.d.ts +0 -5
  168. package/lib/store/models/registry-extension-model.d.ts.map +0 -1
  169. package/lib/store/models/registry-extension-model.js +0 -83
  170. package/lib/store/models/registry-extension-model.js.map +0 -1
  171. package/lib/store/repositories/registry-extension-repository.d.ts +0 -54
  172. package/lib/store/repositories/registry-extension-repository.d.ts.map +0 -1
  173. package/lib/store/repositories/registry-extension-repository.js +0 -137
  174. package/lib/store/repositories/registry-extension-repository.js.map +0 -1
  175. package/lib/templates/services/RegistryExtensionDataLoader.ts.template +0 -2
@@ -1,2 +1,248 @@
1
- export declare const resolvers: ((pubsub: import("graphql-subscriptions").PubSub, logger?: import("@cdm-logger/core/lib/interface").ILogger) => import("common").IResolvers)[];
1
+ export declare const resolvers: (((pubsub: import("graphql-subscriptions").PubSub, logger?: import("@cdm-logger/core/lib/interface").ILogger) => import("common").IResolvers) | (() => {
2
+ Query: {
3
+ instances: (root: any, args: any, ctx: any) => Promise<any>;
4
+ gallery: (root: any, { query }: {
5
+ query?: {};
6
+ }, ctx: any) => Promise<any>;
7
+ galleryExtension: (root: any, { extensionSlug }: {
8
+ extensionSlug: any;
9
+ }, ctx: any) => Promise<any>;
10
+ };
11
+ Mutation: {
12
+ startExtensionHost: (root: any, args: any, ctx: any) => Promise<boolean>;
13
+ };
14
+ }) | (() => {
15
+ Query: {
16
+ marketplaceFormTemplates: (_: unknown, { input }: {
17
+ input?: {
18
+ search?: string;
19
+ category?: string;
20
+ publisherId?: string;
21
+ installed?: boolean;
22
+ limit?: number;
23
+ offset?: number;
24
+ };
25
+ }, context: {
26
+ user?: {
27
+ id: string;
28
+ name: string;
29
+ email: string;
30
+ };
31
+ }) => Promise<{
32
+ nodes: {
33
+ id: string;
34
+ name: string;
35
+ description: string;
36
+ category: string;
37
+ version: string;
38
+ author: string;
39
+ publisherId: string;
40
+ tags: string[];
41
+ schema: string;
42
+ uiSchema: string;
43
+ downloads: number;
44
+ rating: number;
45
+ reviewCount: number;
46
+ createdAt: Date;
47
+ updatedAt: Date;
48
+ installed: boolean;
49
+ preview: any;
50
+ publisher: {
51
+ id: string;
52
+ name: string;
53
+ email: string;
54
+ };
55
+ }[];
56
+ totalCount: number;
57
+ pageInfo: {
58
+ hasNextPage: boolean;
59
+ hasPreviousPage: boolean;
60
+ startCursor: string;
61
+ endCursor: string;
62
+ };
63
+ }>;
64
+ marketplaceFormTemplate: (_: unknown, { id }: {
65
+ id: string;
66
+ }, context: {
67
+ user?: {
68
+ id: string;
69
+ name: string;
70
+ email: string;
71
+ };
72
+ }) => Promise<{
73
+ id: string;
74
+ name: string;
75
+ description: string;
76
+ category: string;
77
+ version: string;
78
+ author: string;
79
+ publisherId: string;
80
+ tags: string[];
81
+ schema: string;
82
+ uiSchema: string;
83
+ downloads: number;
84
+ rating: number;
85
+ reviewCount: number;
86
+ createdAt: Date;
87
+ updatedAt: Date;
88
+ installed: boolean;
89
+ preview: any;
90
+ publisher: {
91
+ id: string;
92
+ name: string;
93
+ email: string;
94
+ };
95
+ }>;
96
+ marketplaceInstalledFormTemplates: () => Promise<{
97
+ id: string;
98
+ name: string;
99
+ description: string;
100
+ category: string;
101
+ version: string;
102
+ author: string;
103
+ publisherId: string;
104
+ tags: string[];
105
+ schema: string;
106
+ uiSchema: string;
107
+ downloads: number;
108
+ rating: number;
109
+ reviewCount: number;
110
+ createdAt: Date;
111
+ updatedAt: Date;
112
+ installed: boolean;
113
+ preview: any;
114
+ publisher: {
115
+ id: string;
116
+ name: string;
117
+ email: string;
118
+ };
119
+ }[]>;
120
+ marketplaceMyFormTemplates: () => Promise<any[]>;
121
+ marketplacePopularFormTemplates: () => Promise<any[]>;
122
+ marketplaceRecentFormTemplates: () => Promise<any[]>;
123
+ };
124
+ Mutation: {
125
+ marketplacePublishFormTemplate: (_: unknown, { input }: {
126
+ input: unknown;
127
+ }, context: {
128
+ user?: {
129
+ id: string;
130
+ name: string;
131
+ email: string;
132
+ };
133
+ }) => Promise<{
134
+ success: boolean;
135
+ message: string;
136
+ formTemplate: {
137
+ id: string;
138
+ name: string;
139
+ description: string;
140
+ category: string;
141
+ version: string;
142
+ author: string;
143
+ publisherId: string;
144
+ tags: string[];
145
+ schema: string;
146
+ uiSchema: string;
147
+ downloads: number;
148
+ rating: number;
149
+ reviewCount: number;
150
+ createdAt: Date;
151
+ updatedAt: Date;
152
+ installed: boolean;
153
+ preview: any;
154
+ publisher: {
155
+ id: string;
156
+ name: string;
157
+ email: string;
158
+ };
159
+ };
160
+ }>;
161
+ marketplaceInstallFormTemplate: (_: unknown, { input }: {
162
+ input: {
163
+ id: string;
164
+ };
165
+ }, context: {
166
+ user?: {
167
+ id: string;
168
+ name: string;
169
+ email: string;
170
+ };
171
+ }) => Promise<{
172
+ success: boolean;
173
+ message: string;
174
+ formTemplate: {
175
+ id: string;
176
+ name: string;
177
+ description: string;
178
+ category: string;
179
+ version: string;
180
+ author: string;
181
+ publisherId: string;
182
+ tags: string[];
183
+ schema: string;
184
+ uiSchema: string;
185
+ downloads: number;
186
+ rating: number;
187
+ reviewCount: number;
188
+ createdAt: Date;
189
+ updatedAt: Date;
190
+ installed: boolean;
191
+ preview: any;
192
+ publisher: {
193
+ id: string;
194
+ name: string;
195
+ email: string;
196
+ };
197
+ };
198
+ }>;
199
+ marketplaceUninstallFormTemplate: () => Promise<{
200
+ success: boolean;
201
+ message: string;
202
+ }>;
203
+ marketplaceUpdateFormTemplate: () => Promise<{
204
+ success: boolean;
205
+ message: string;
206
+ formTemplate: {
207
+ id: string;
208
+ name: string;
209
+ description: string;
210
+ category: string;
211
+ version: string;
212
+ author: string;
213
+ publisherId: string;
214
+ tags: string[];
215
+ schema: string;
216
+ uiSchema: string;
217
+ downloads: number;
218
+ rating: number;
219
+ reviewCount: number;
220
+ createdAt: Date;
221
+ updatedAt: Date;
222
+ installed: boolean;
223
+ preview: any;
224
+ publisher: {
225
+ id: string;
226
+ name: string;
227
+ email: string;
228
+ };
229
+ };
230
+ }>;
231
+ marketplaceDeleteFormTemplate: () => Promise<{
232
+ success: boolean;
233
+ message: string;
234
+ }>;
235
+ marketplaceRateFormTemplate: () => Promise<{
236
+ success: boolean;
237
+ message: string;
238
+ }>;
239
+ };
240
+ Subscription: {
241
+ marketplaceFormTemplateEvents: {
242
+ subscribe: (_: unknown, { publisherId }: {
243
+ publisherId?: string;
244
+ }) => AsyncIterator<unknown, any, any>;
245
+ };
246
+ };
247
+ }))[];
2
248
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/graphql/resolvers/index.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,SAAS,gJAAiD,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/graphql/resolvers/index.ts"],"names":[],"mappings":"AAQA,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;iBASujC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2BAAsuJ,CAAC;;;;KADpzL,CAAC"}
@@ -1 +1 @@
1
- import {resolver}from'./registry-extension-resolver.js';import {resolver as resolver$1}from'./installed-extension-resolver.js';const resolvers = [resolver, resolver$1];export{resolvers};//# sourceMappingURL=index.js.map
1
+ import {resolver}from'./registry-extension-resolver.js';import {resolver as resolver$1}from'./installed-extension-resolver.js';import {resolver as resolver$2}from'./gallery-resolver.js';import {publisherResolver}from'./publisher-resolver.js';import {marketplaceFormResolver}from'./marketplace-form-resolver.js';import {publisherAnalyticsResolver}from'./publisher-analytics-resolver.js';import {formTemplateResolvers}from'./form-templates-resolver.js';const resolvers = [resolver, resolver$1, resolver$2, publisherResolver, marketplaceFormResolver, publisherAnalyticsResolver, formTemplateResolvers];export{resolvers};//# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"installed-extension-resolver.d.ts","sourceRoot":"","sources":["../../../src/graphql/resolvers/installed-extension-resolver.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAuB,UAAU,EAAE,MAAM,eAAe,CAAC;AAEhE,eAAO,MAAM,QAAQ,GAAI,QAAQ,MAAM,EAAE,SAAS,SAAS,CAAC,OAAO,KAAG,UAgOpE,CAAC"}
1
+ {"version":3,"file":"installed-extension-resolver.d.ts","sourceRoot":"","sources":["../../../src/graphql/resolvers/installed-extension-resolver.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAuB,UAAU,EAA0C,MAAM,eAAe,CAAC;AAExG,eAAO,MAAM,QAAQ,GAAI,QAAQ,MAAM,EAAE,SAAS,SAAS,CAAC,OAAO,KAAG,UAsXpE,CAAC"}
@@ -1,27 +1,66 @@
1
1
  const resolver = (pubsub, logger) => ({
2
2
  InstalledExtension: {
3
- extension: (root, args, ctx) => {
4
- // Check if extension exists and is not null/undefined before calling dataloader
5
- if (!root.extension || root.extension === null || root.extension === undefined) {
3
+ organization: (root, args, context, info) => {
4
+ const {
5
+ organizationDataLoader
6
+ } = context;
7
+ // The organization field from the model contains an ObjectId reference
8
+ if (!root.organization) {
9
+ return null;
10
+ }
11
+ // Convert ObjectId to string for the dataloader
12
+ const organizationId = String(root.organization);
13
+ return organizationDataLoader.load(organizationId);
14
+ },
15
+ extension: (root, args, {
16
+ registryExtensionDataLoader
17
+ }) => {
18
+ // The extension field contains an ObjectId reference
19
+ if (!root.extension) {
20
+ return null;
21
+ }
22
+ // Convert ObjectId to string for the dataloader
23
+ const extensionId = String(root.extension);
24
+ return registryExtensionDataLoader.load(extensionId);
25
+ },
26
+ sourceDocument: async (root, _args, ctx) => {
27
+ if (!root.sourceCollection || !root.sourceDocumentId) {
28
+ return null;
29
+ }
30
+ try {
31
+ return await ctx.extensionSourceDocumentDataLoader.load(root.sourceCollection, root.sourceDocumentId);
32
+ } catch (error) {
33
+ if (logger) {
34
+ logger.error('Error loading source document for InstalledExtension:', error);
35
+ }
6
36
  return null;
7
37
  }
8
- const extensionSlug = String(root.extension); // Convert ObjectId to string
9
- return ctx.registryExtensionDataLoader.load(extensionSlug);
10
38
  }
11
39
  },
12
40
  Query: {
13
41
  /**
14
- * Get all installed extensions for the current tenant
42
+ * Get all installed extensions for the current user/organization
15
43
  */
16
- async installedExtensions(root, args, {
44
+ async installedExtensions(root, {
45
+ enabled,
46
+ orgName
47
+ }, {
17
48
  userContext,
18
- installedExtensionService
49
+ installedExtensionService,
50
+ slugService
19
51
  }) {
20
- const query = {
21
- tenantId: userContext.tenantId
22
- };
23
- if (args.enabled !== undefined) {
24
- query['settings.effectiveEnabled'] = args.enabled;
52
+ const query = {};
53
+ // Map orgName to orgId using slugService for filtering
54
+ if (orgName) {
55
+ const orgId = await slugService.resolveOrganizationSlug(orgName);
56
+ if (orgId) {
57
+ query.orgId = orgId;
58
+ }
59
+ } else {
60
+ query.orgId = userContext.organization?.id;
61
+ }
62
+ if (enabled !== undefined) {
63
+ query['settings.effectiveEnabled'] = enabled;
25
64
  }
26
65
  const results = await installedExtensionService.getInstalledExtensions(query);
27
66
  return results;
@@ -31,27 +70,44 @@ const resolver = (pubsub, logger) => ({
31
70
  */
32
71
  async installedExtension(root, args, {
33
72
  userContext,
34
- installedExtensionService
73
+ installedExtensionService,
74
+ slugService
35
75
  }) {
36
- return installedExtensionService.getInstalledExtension(userContext.tenantId, args.extensionSlug);
76
+ let orgId;
77
+ if (args.orgName) {
78
+ orgId = await slugService.resolveOrganizationSlug(args.orgName);
79
+ }
80
+ const result = await installedExtensionService.getInstalledExtension(orgId, args.extensionSlug);
81
+ return result;
37
82
  },
38
83
  /**
39
84
  * Get installed extensions that need attention (updates, deprecated, etc.)
40
85
  */
41
86
  async extensionsNeedingAttention(root, args, {
42
87
  userContext,
43
- installedExtensionService
88
+ installedExtensionService,
89
+ slugService
44
90
  }) {
45
- return installedExtensionService.getExtensionsNeedingAttention(userContext.tenantId);
91
+ let orgId;
92
+ if (args.orgName) {
93
+ orgId = await slugService.resolveOrganizationSlug(args.orgName);
94
+ }
95
+ const result = await installedExtensionService.getExtensionsNeedingAttention(orgId);
96
+ return result;
46
97
  },
47
98
  /**
48
99
  * Check for available updates
49
100
  */
50
101
  async extensionUpdates(root, args, {
51
102
  userContext,
52
- installedExtensionService
103
+ installedExtensionService,
104
+ slugService
53
105
  }) {
54
- return installedExtensionService.checkForUpdates(userContext.tenantId, args.extensionSlug);
106
+ let orgId;
107
+ if (args.orgName) {
108
+ orgId = await slugService.resolveOrganizationSlug(args.orgName);
109
+ }
110
+ return installedExtensionService.checkForUpdates(orgId, args.extensionSlug);
55
111
  }
56
112
  },
57
113
  Mutation: {
@@ -61,15 +117,35 @@ const resolver = (pubsub, logger) => ({
61
117
  async installExtension(root, args, {
62
118
  userContext,
63
119
  installedExtensionService,
64
- registryExtensionService
120
+ registryExtensionService,
121
+ slugService
65
122
  }) {
66
123
  try {
67
- const installedExtension = await installedExtensionService.installExtension({
124
+ // Map orgName to orgId using slugService if provided
125
+ let orgId;
126
+ if (args.input.orgName) {
127
+ orgId = await slugService.resolveOrganizationSlug(args.input.orgName);
128
+ if (!orgId) {
129
+ return {
130
+ success: false,
131
+ extension: null,
132
+ message: `Organization '${args.input.orgName}' not found`
133
+ };
134
+ }
135
+ }
136
+ const installData = {
68
137
  ...args.input,
69
- tenantId: userContext.tenantId,
138
+ accountId: userContext.accountId,
139
+ orgId,
140
+ // This will be the mapped orgId from orgName
141
+ version: args.input.version,
142
+ // Ensure version is passed through
70
143
  installedVersion: args.input.version,
71
144
  installedBy: userContext.accountId
72
- });
145
+ };
146
+ console.log('GraphQL Resolver - Install Data:', JSON.stringify(installData, null, 2));
147
+ console.log('Original args.input:', JSON.stringify(args.input, null, 2));
148
+ const installedExtension = await installedExtensionService.installExtension(installData, userContext.tenantId);
73
149
  return {
74
150
  success: true,
75
151
  extension: installedExtension,
@@ -89,10 +165,15 @@ const resolver = (pubsub, logger) => ({
89
165
  async uninstallExtension(root, args, {
90
166
  userContext,
91
167
  installedExtensionService,
92
- registryExtensionService
168
+ registryExtensionService,
169
+ slugService
93
170
  }) {
94
171
  try {
95
- const success = await installedExtensionService.uninstallExtension(userContext.tenantId, args.extensionSlug, userContext.accountId);
172
+ let orgId;
173
+ if (args.orgName) {
174
+ orgId = await slugService.resolveOrganizationSlug(args.orgName);
175
+ }
176
+ const success = await installedExtensionService.uninstallExtension(orgId, args.extensionSlug, userContext.accountId, userContext.tenantId);
96
177
  if (success) {
97
178
  // Update the registry extension as uninstalled
98
179
  await registryExtensionService.updateExtension(args.extensionSlug, {
@@ -115,9 +196,14 @@ const resolver = (pubsub, logger) => ({
115
196
  */
116
197
  async toggleExtension(root, args, {
117
198
  userContext,
118
- installedExtensionService
199
+ installedExtensionService,
200
+ slugService
119
201
  }) {
120
- const extension = await installedExtensionService.toggleExtension(userContext.tenantId, args.extensionSlug, args.enabled, userContext.accountId);
202
+ let orgId;
203
+ if (args.orgName) {
204
+ orgId = await slugService.resolveOrganizationSlug(args.orgName);
205
+ }
206
+ const extension = await installedExtensionService.toggleExtension(orgId, args.extensionSlug, args.enabled, userContext.accountId, userContext.tenantId);
121
207
  return {
122
208
  success: true,
123
209
  extension: extension,
@@ -129,9 +215,14 @@ const resolver = (pubsub, logger) => ({
129
215
  */
130
216
  async updateExtensionSettings(root, args, {
131
217
  userContext,
132
- installedExtensionService
218
+ installedExtensionService,
219
+ slugService
133
220
  }) {
134
- const extension = await installedExtensionService.updateExtensionSettings(userContext.tenantId, args.extensionSlug, args.settings, userContext.accountId);
221
+ let orgId;
222
+ if (args.orgName) {
223
+ orgId = await slugService.resolveOrganizationSlug(args.orgName);
224
+ }
225
+ const extension = await installedExtensionService.updateExtensionSettings(orgId, args.extensionSlug, args.settings, userContext.accountId, userContext.tenantId);
135
226
  return {
136
227
  success: true,
137
228
  extension: extension,
@@ -143,9 +234,14 @@ const resolver = (pubsub, logger) => ({
143
234
  */
144
235
  async updateExtensionVersion(root, args, {
145
236
  userContext,
146
- installedExtensionService
237
+ installedExtensionService,
238
+ slugService
147
239
  }) {
148
- const extension = await installedExtensionService.updateExtensionVersion(userContext.tenantId, args.extensionSlug, args.version, userContext.accountId);
240
+ let orgId;
241
+ if (args.orgName) {
242
+ orgId = await slugService.resolveOrganizationSlug(args.orgName);
243
+ }
244
+ const extension = await installedExtensionService.updateExtensionVersion(orgId, args.extensionSlug, args.version, userContext.accountId, userContext.tenantId);
149
245
  return {
150
246
  success: true,
151
247
  extension: extension,
@@ -157,9 +253,14 @@ const resolver = (pubsub, logger) => ({
157
253
  */
158
254
  async syncExtensionsWithRegistry(root, args, {
159
255
  userContext,
160
- installedExtensionService
256
+ installedExtensionService,
257
+ slugService
161
258
  }) {
162
- await installedExtensionService.syncWithRegistry(userContext.tenantId);
259
+ let orgId;
260
+ if (args.orgName) {
261
+ orgId = await slugService.resolveOrganizationSlug(args.orgName);
262
+ }
263
+ await installedExtensionService.syncWithRegistry(orgId, userContext.tenantId);
163
264
  return {
164
265
  success: true,
165
266
  message: 'Extensions synced with registry successfully'
@@ -170,14 +271,39 @@ const resolver = (pubsub, logger) => ({
170
271
  */
171
272
  async cleanupExtensions(root, args, {
172
273
  userContext,
173
- installedExtensionService
274
+ installedExtensionService,
275
+ slugService
174
276
  }) {
175
- const result = await installedExtensionService.cleanupExtensions(userContext.tenantId, args.dryRun || false);
277
+ let orgId;
278
+ if (args.orgName) {
279
+ orgId = await slugService.resolveOrganizationSlug(args.orgName);
280
+ }
281
+ const result = await installedExtensionService.cleanupExtensions(orgId, userContext.tenantId, args.dryRun || false);
176
282
  return {
177
283
  success: true,
178
284
  result,
179
285
  message: args.dryRun ? 'Cleanup preview completed' : `Cleanup completed: ${result.removed.length} removed, ${result.deprecated.length} deprecated`
180
286
  };
287
+ },
288
+ /**
289
+ * Clean up orphaned extensions that exist in installed_extensions but not in system_extension registry
290
+ */
291
+ async cleanupOrphanedExtensions(root, args, {
292
+ userContext,
293
+ installedExtensionService,
294
+ slugService
295
+ }) {
296
+ let orgId;
297
+ if (args.orgName) {
298
+ orgId = await slugService.resolveOrganizationSlug(args.orgName);
299
+ }
300
+ const result = await installedExtensionService.cleanupOrphanedExtensions(orgId, userContext.tenantId, args.dryRun || false);
301
+ return {
302
+ success: true,
303
+ removed: result.removed,
304
+ warnings: result.warnings,
305
+ message: args.dryRun ? `Preview: ${result.removed.length} orphaned extension(s) would be removed` : `Cleanup completed: ${result.removed.length} orphaned extension(s) removed`
306
+ };
181
307
  }
182
308
  }
183
309
  });export{resolver};//# sourceMappingURL=installed-extension-resolver.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"installed-extension-resolver.js","sources":["../../../src/graphql/resolvers/installed-extension-resolver.ts"],"sourcesContent":[null],"names":[],"mappings":"AAES,MAAA,QAAQ;AACjB,EAAA,kBAAoB,EAAA;AACpB,IAAA,SAA8B,EAAA,CAAA,IAAY,EAAA,IAAA;AAE1C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"installed-extension-resolver.js","sources":["../../../src/graphql/resolvers/installed-extension-resolver.ts"],"sourcesContent":[null],"names":[],"mappings":"AAES,MAAA,QAAQ;AACjB,EAAA,kBAAoB,EAAA;AACpB,IAAA,YAA8B,EAAA,CAAU,IAA0C,EAAA,mBAAsB,KAAA;AAExG,MAAA,MAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -0,0 +1,13 @@
1
+ import { PubSub } from 'graphql-subscriptions';
2
+ import { CdmLogger } from '@cdm-logger/core';
3
+ import { IResolvers } from 'common/server';
4
+ /**
5
+ * Marketplace Form Submission Resolver
6
+ *
7
+ * Handles enhanced marketplace features for extension management:
8
+ * - Form submission processing
9
+ * - Extension validation
10
+ * - Enhanced extension publishing
11
+ */
12
+ export declare const marketplaceFormResolver: (pubsub: PubSub, logger?: CdmLogger.ILogger) => IResolvers;
13
+ //# sourceMappingURL=marketplace-form-resolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"marketplace-form-resolver.d.ts","sourceRoot":"","sources":["../../../src/graphql/resolvers/marketplace-form-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,EAAsB,MAAM,eAAe,CAAC;AAE/D;;;;;;;GAOG;AACH,eAAO,MAAM,uBAAuB,GAAI,QAAQ,MAAM,EAAE,SAAS,SAAS,CAAC,OAAO,KAAG,UA+HnF,CAAC"}
@@ -0,0 +1,90 @@
1
+ /**
2
+ * Marketplace Form Submission Resolver
3
+ *
4
+ * Handles enhanced marketplace features for extension management:
5
+ * - Form submission processing
6
+ * - Extension validation
7
+ * - Enhanced extension publishing
8
+ */
9
+ const marketplaceFormResolver = (pubsub, logger) => ({
10
+ Mutation: {
11
+ /**
12
+ * Process marketplace form submissions
13
+ * Supports different submission types: extension-publish, extension-validate, extension-update
14
+ */
15
+ async marketplaceFormSubmission(root, args, ctx) {
16
+ if (logger) {
17
+ logger.debug('marketplaceFormSubmission args [%j]', args);
18
+ }
19
+ const result = await ctx.registryExtensionService.formSubmission({
20
+ extensionSlug: args.input.extensionSlug,
21
+ formData: args.input.formData,
22
+ submissionType: args.input.submissionType,
23
+ metadata: args.input.metadata
24
+ });
25
+ return {
26
+ success: result.success,
27
+ message: result.message,
28
+ errors: result.errors || [],
29
+ submissionId: result.submissionId,
30
+ data: result.data
31
+ };
32
+ },
33
+ /**
34
+ * Validate extension before publishing
35
+ * Checks manifest structure, version format, and extension conflicts
36
+ */
37
+ async marketplaceValidateExtension(root, args, ctx) {
38
+ if (logger) {
39
+ logger.debug('marketplaceValidateExtension args [%j]', args);
40
+ }
41
+ const result = await ctx.registryExtensionService.validateExtension({
42
+ manifest: args.input.manifest,
43
+ bundle: args.input.bundle,
44
+ sourceMap: args.input.sourceMap,
45
+ extensionSlug: args.input.extensionSlug,
46
+ version: args.input.version
47
+ });
48
+ return {
49
+ isValid: result.isValid,
50
+ errors: result.errors.map(e => ({
51
+ field: e.field,
52
+ message: e.message,
53
+ code: e.code
54
+ })),
55
+ warnings: result.warnings.map(w => ({
56
+ field: w.field,
57
+ message: w.message,
58
+ code: w.code
59
+ })),
60
+ metadata: result.metadata
61
+ };
62
+ },
63
+ /**
64
+ * Enhanced extension publishing with validation and pre-release support
65
+ * Includes force publishing and comprehensive error handling
66
+ */
67
+ async marketplacePublishExtension(root, args, ctx) {
68
+ if (logger) {
69
+ logger.debug('marketplacePublishExtension args [%j]', args);
70
+ }
71
+ const result = await ctx.registryExtensionService.publishExtensionEnhanced({
72
+ extensionSlug: args.input.extensionSlug,
73
+ manifest: args.input.manifest,
74
+ bundle: args.input.bundle,
75
+ sourceMap: args.input.sourceMap,
76
+ version: args.input.version,
77
+ releaseNotes: args.input.releaseNotes,
78
+ force: args.input.force,
79
+ preRelease: args.input.preRelease
80
+ });
81
+ return {
82
+ success: result.success,
83
+ extension: result.extension ? result.extension : null,
84
+ message: result.message,
85
+ errors: result.errors || [],
86
+ releaseId: result.releaseId
87
+ };
88
+ }
89
+ }
90
+ });export{marketplaceFormResolver};//# sourceMappingURL=marketplace-form-resolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"marketplace-form-resolver.js","sources":["../../../src/graphql/resolvers/marketplace-form-resolver.ts"],"sourcesContent":[null],"names":[],"mappings":"AAAA;AACA;AACA;AAEA;;;;;;;AAOG;AACH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}