@adminide-stack/marketplace-module-server 12.0.4-alpha.91 → 12.0.4-alpha.95

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 (110) hide show
  1. package/Readme.md +321 -0
  2. package/lib/constants/extension-events.d.ts +136 -0
  3. package/lib/constants/extension-events.d.ts.map +1 -0
  4. package/lib/containers/module.d.ts +8 -0
  5. package/lib/containers/module.d.ts.map +1 -1
  6. package/lib/containers/module.js +9 -3
  7. package/lib/containers/module.js.map +1 -1
  8. package/lib/dataloaders/index.d.ts +2 -0
  9. package/lib/dataloaders/index.d.ts.map +1 -0
  10. package/lib/dataloaders/registry-extension-data-loader.d.ts +6 -0
  11. package/lib/dataloaders/registry-extension-data-loader.d.ts.map +1 -0
  12. package/lib/dataloaders/registry-extension-data-loader.js +6 -0
  13. package/lib/dataloaders/registry-extension-data-loader.js.map +1 -0
  14. package/lib/graphql/resolvers/index.d.ts +1 -1
  15. package/lib/graphql/resolvers/index.d.ts.map +1 -1
  16. package/lib/graphql/resolvers/index.js +1 -0
  17. package/lib/graphql/resolvers/index.js.map +1 -0
  18. package/lib/graphql/resolvers/installed-extension-resolver.d.ts +5 -0
  19. package/lib/graphql/resolvers/installed-extension-resolver.d.ts.map +1 -0
  20. package/lib/graphql/resolvers/installed-extension-resolver.js +183 -0
  21. package/lib/graphql/resolvers/installed-extension-resolver.js.map +1 -0
  22. package/lib/graphql/resolvers/registry-extension-resolver.d.ts +5 -0
  23. package/lib/graphql/resolvers/registry-extension-resolver.d.ts.map +1 -0
  24. package/lib/graphql/resolvers/{resolvers.js → registry-extension-resolver.js} +59 -47
  25. package/lib/graphql/resolvers/registry-extension-resolver.js.map +1 -0
  26. package/lib/graphql/schemas/extension-registry.graphql +74 -0
  27. package/lib/graphql/schemas/extension-registry.graphql.js +1 -0
  28. package/lib/graphql/schemas/extension-registry.graphql.js.map +1 -0
  29. package/lib/graphql/schemas/index.d.ts.map +1 -1
  30. package/lib/graphql/schemas/index.js +1 -4
  31. package/lib/graphql/schemas/index.js.map +1 -1
  32. package/lib/graphql/schemas/installed-extension.graphql +294 -0
  33. package/lib/graphql/schemas/installed-extension.graphql.js +1 -0
  34. package/lib/graphql/schemas/installed-extension.graphql.js.map +1 -0
  35. package/lib/graphql/schemas/service.graphql +181 -0
  36. package/lib/graphql/schemas/service.graphql.js +1 -0
  37. package/lib/graphql/schemas/service.graphql.js.map +1 -0
  38. package/lib/index.d.ts +2 -0
  39. package/lib/index.d.ts.map +1 -1
  40. package/lib/index.js +1 -1
  41. package/lib/index.js.map +1 -1
  42. package/lib/module.d.ts.map +1 -1
  43. package/lib/module.js +6 -4
  44. package/lib/module.js.map +1 -1
  45. package/lib/plugins/extension-moleculer-service.d.ts +86 -0
  46. package/lib/plugins/extension-moleculer-service.d.ts.map +1 -0
  47. package/lib/plugins/index.d.ts +2 -0
  48. package/lib/plugins/index.d.ts.map +1 -0
  49. package/lib/services/extension-service.d.ts +35 -47
  50. package/lib/services/extension-service.d.ts.map +1 -1
  51. package/lib/services/extension-service.js +33 -15
  52. package/lib/services/extension-service.js.map +1 -1
  53. package/lib/services/index.d.ts +2 -0
  54. package/lib/services/index.d.ts.map +1 -1
  55. package/lib/services/installed-extension-service-ext.d.ts +13 -0
  56. package/lib/services/installed-extension-service-ext.d.ts.map +1 -0
  57. package/lib/services/installed-extension-service-ext.js +271 -0
  58. package/lib/services/installed-extension-service-ext.js.map +1 -0
  59. package/lib/services/installed-extension-service.d.ts +93 -0
  60. package/lib/services/installed-extension-service.d.ts.map +1 -0
  61. package/lib/services/installed-extension-service.js +400 -0
  62. package/lib/services/installed-extension-service.js.map +1 -0
  63. package/lib/services/installed-extension-service.test.d.ts +2 -0
  64. package/lib/services/installed-extension-service.test.d.ts.map +1 -0
  65. package/lib/store/index.d.ts +1 -1
  66. package/lib/store/index.d.ts.map +1 -1
  67. package/lib/store/models/index.d.ts +1 -0
  68. package/lib/store/models/index.d.ts.map +1 -1
  69. package/lib/store/models/installed-extension-model.d.ts +4 -0
  70. package/lib/store/models/installed-extension-model.d.ts.map +1 -0
  71. package/lib/store/models/installed-extension-model.js +297 -0
  72. package/lib/store/models/installed-extension-model.js.map +1 -0
  73. package/lib/store/models/registry-extension-model.d.ts +2 -7
  74. package/lib/store/models/registry-extension-model.d.ts.map +1 -1
  75. package/lib/store/models/registry-extension-model.js +40 -19
  76. package/lib/store/models/registry-extension-model.js.map +1 -1
  77. package/lib/store/repositories/index.d.ts +3 -0
  78. package/lib/store/repositories/index.d.ts.map +1 -0
  79. package/lib/store/repositories/installed-extension-repository.d.ts +71 -0
  80. package/lib/store/repositories/installed-extension-repository.d.ts.map +1 -0
  81. package/lib/store/repositories/installed-extension-repository.js +414 -0
  82. package/lib/store/repositories/installed-extension-repository.js.map +1 -0
  83. package/lib/store/repositories/registry-extension-repository.d.ts +54 -0
  84. package/lib/store/repositories/registry-extension-repository.d.ts.map +1 -0
  85. package/lib/store/{repository → repositories}/registry-extension-repository.js +44 -42
  86. package/lib/store/repositories/registry-extension-repository.js.map +1 -0
  87. package/lib/templates/constants/DB_COLL_NAMES.ts.template +5 -0
  88. package/lib/templates/constants/SERVER_TYPES.ts.template +3 -0
  89. package/lib/templates/repositories/InstalledExtensionRepository.ts.template +94 -0
  90. package/lib/templates/repositories/RegistryExtensionRepository.ts.template +10 -15
  91. package/lib/templates/services/InstalledExtensionDataLoader.ts.template +2 -0
  92. package/lib/templates/services/InstalledExtensionService.ts.template +168 -0
  93. package/lib/templates/services/RegistryExtensionDataLoader.ts.template +2 -0
  94. package/lib/templates/services/RegistryExtensionService.ts.template +10 -10
  95. package/lib/tests/extension-integration.test.d.ts +2 -0
  96. package/lib/tests/extension-integration.test.d.ts.map +1 -0
  97. package/lib/tests/test-extension-services.d.ts +1 -0
  98. package/lib/tests/test-extension-services.d.ts.map +1 -0
  99. package/package.json +12 -7
  100. package/lib/graphql/resolvers/resolvers.d.ts +0 -2
  101. package/lib/graphql/resolvers/resolvers.d.ts.map +0 -1
  102. package/lib/graphql/resolvers/resolvers.js.map +0 -1
  103. package/lib/graphql/schemas/extension.graphql +0 -57
  104. package/lib/graphql/schemas/extension.graphql.js +0 -1
  105. package/lib/graphql/schemas/extension.graphql.js.map +0 -1
  106. package/lib/store/repository/index.d.ts +0 -2
  107. package/lib/store/repository/index.d.ts.map +0 -1
  108. package/lib/store/repository/registry-extension-repository.d.ts +0 -31
  109. package/lib/store/repository/registry-extension-repository.d.ts.map +0 -1
  110. package/lib/store/repository/registry-extension-repository.js.map +0 -1
@@ -0,0 +1,294 @@
1
+ """
2
+ Installed extension status enumeration
3
+ """
4
+ enum InstalledExtensionStatus {
5
+ installed
6
+ deprecated_installed
7
+ suspended
8
+ orphaned
9
+ force_disabled
10
+ }
11
+
12
+ """
13
+ Registry status cached from extensionRegistry
14
+ """
15
+ enum ExtensionRegistryStatus {
16
+ active
17
+ deprecated
18
+ suspended
19
+ removed
20
+ emergency_removed
21
+ }
22
+
23
+ """
24
+ Runtime activation state
25
+ """
26
+ enum ExtensionActivationState {
27
+ enabled
28
+ disabled
29
+ disabled_by_user
30
+ disabled_by_admin
31
+ disabled_by_policy
32
+ }
33
+
34
+ """
35
+ Extension lifecycle management information
36
+ """
37
+ type ExtensionLifecycle @entity(embedded: true) {
38
+ registryStatus: ExtensionRegistryStatus! @column
39
+ isOrphaned: Boolean! @column
40
+ deprecationWarningShown: Boolean! @column
41
+ autoUpdateBlocked: Boolean! @column
42
+ lastRegistryCheck: String! @column
43
+ }
44
+
45
+ """
46
+ Admin policies for extension behavior
47
+ """
48
+ type ExtensionPolicies @entity(embedded: true) {
49
+ allowOrphanedExecution: Boolean! @column
50
+ requireSecurityUpdates: Boolean! @column
51
+ autoRemoveDeprecated: Boolean! @column
52
+ deprecationGracePeriod: Int! @column
53
+ }
54
+
55
+ """
56
+ Extension settings for user preferences and system state
57
+ """
58
+ type ExtensionSettings @entity(embedded: true) {
59
+ userEnabled: Boolean! @column
60
+ systemEnabled: Boolean! @column
61
+ effectiveEnabled: Boolean! @column
62
+ userConfig: JSON @column
63
+ systemConfig: JSON @column
64
+ }
65
+
66
+ """
67
+ Runtime activation error information
68
+ """
69
+ type ExtensionActivationError @entity(embedded: true) {
70
+ message: String! @column
71
+ code: String! @column
72
+ timestamp: String! @column
73
+ }
74
+
75
+ """
76
+ Performance metrics
77
+ """
78
+ type ExtensionMetrics @entity(embedded: true) {
79
+ activationTime: Float! @column
80
+ memoryUsage: Float! @column
81
+ lastMeasured: String! @column
82
+ }
83
+
84
+ """
85
+ Runtime information about extension execution
86
+ """
87
+ type ExtensionRuntime @entity(embedded: true) {
88
+ activationState: ExtensionActivationState! @column
89
+ lastActivated: DateTime @column(overrideType: "Date")
90
+ lastDeactivated: DateTime @column(overrideType: "Date")
91
+ activationError: ExtensionActivationError @embedded
92
+ metrics: ExtensionMetrics @embedded
93
+ }
94
+
95
+ """
96
+ Audit log entry for extension actions
97
+ """
98
+ type ExtensionAuditEntry @entity(embedded: true) {
99
+ action: String! @column
100
+ timestamp: DateTime! @column(overrideType: "Date")
101
+ user: UserAccount! @column(overrideType: "ObjectId")
102
+ details: JSON @column
103
+ }
104
+
105
+ """
106
+ Main installed extension type
107
+ """
108
+ type InstalledExtension implements Node @entity {
109
+ id: ID! @id
110
+ tenantId: String! @column
111
+ extension: RegistryExtension @column(overrideType: "ObjectId")
112
+ installedVersion: String! @column
113
+ status: InstalledExtensionStatus! @column
114
+ lifecycle: ExtensionLifecycle! @embedded
115
+ policies: ExtensionPolicies! @embedded
116
+ settings: ExtensionSettings! @embedded
117
+ runtime: ExtensionRuntime! @embedded
118
+ installedAt: DateTime! @column(overrideType: "Date")
119
+ installedBy: UserAccount! @column(overrideType: "ObjectId")
120
+ lastUpdated: DateTime @column(overrideType: "Date")
121
+ lastUpdatedBy: UserAccount @column(overrideType: "ObjectId")
122
+ availableVersion: String @column
123
+ dependencies: [String!] @column
124
+ dependents: [String!] @column
125
+ auditLog: [ExtensionAuditEntry!] @embedded
126
+ }
127
+
128
+ """
129
+ Registry information for display
130
+ """
131
+ type ExtensionRegistryInfo {
132
+ displayName: String!
133
+ description: String!
134
+ publisher: String!
135
+ latestVersion: String!
136
+ tags: [String!]!
137
+ categories: [String!]!
138
+ deprecation: JSON
139
+ suspension: JSON
140
+ }
141
+
142
+ """
143
+ Notification action
144
+ """
145
+ type NotificationAction {
146
+ label: String!
147
+ action: String!
148
+ url: String
149
+ extensionSlug: String
150
+ }
151
+
152
+ """
153
+ Extension notification
154
+ """
155
+ type ExtensionNotification {
156
+ type: String!
157
+ severity: String!
158
+ message: String!
159
+ actions: [NotificationAction!]
160
+ }
161
+
162
+ """
163
+ Extension update information
164
+ """
165
+ type ExtensionUpdate {
166
+ extensionSlug: String!
167
+ currentVersion: String!
168
+ availableVersion: String!
169
+ isSecurityUpdate: Boolean!
170
+ }
171
+
172
+ """
173
+ Extension cleanup result
174
+ """
175
+ type ExtensionCleanupResult {
176
+ removed: [String!]!
177
+ deprecated: [String!]!
178
+ warnings: [String!]!
179
+ }
180
+
181
+ """
182
+ Input for installing an extension
183
+ """
184
+ input InstallExtensionInput {
185
+ extensionSlug: String!
186
+ version: String!
187
+ policies: ExtensionPoliciesInput
188
+ settings: ExtensionSettingsInput
189
+ }
190
+
191
+ """
192
+ Input for extension policies
193
+ """
194
+ input ExtensionPoliciesInput {
195
+ allowOrphanedExecution: Boolean
196
+ requireSecurityUpdates: Boolean
197
+ autoRemoveDeprecated: Boolean
198
+ deprecationGracePeriod: Int
199
+ }
200
+
201
+ """
202
+ Input for extension settings
203
+ """
204
+ input ExtensionSettingsInput {
205
+ userEnabled: Boolean
206
+ systemEnabled: Boolean
207
+ userConfig: JSON
208
+ systemConfig: JSON
209
+ }
210
+
211
+ """
212
+ Response type for extension mutations
213
+ """
214
+ type ExtensionMutationResponse {
215
+ success: Boolean!
216
+ extension: InstalledExtension
217
+ message: String!
218
+ }
219
+
220
+ """
221
+ Response type for cleanup operations
222
+ """
223
+ type ExtensionCleanupResponse {
224
+ success: Boolean!
225
+ result: ExtensionCleanupResult
226
+ message: String!
227
+ }
228
+
229
+ """
230
+ Response type for sync operations
231
+ """
232
+ type ExtensionSyncResponse {
233
+ success: Boolean!
234
+ message: String!
235
+ }
236
+
237
+ extend type Query {
238
+ """
239
+ Get all installed extensions for the current tenant
240
+ """
241
+ installedExtensions(enabled: Boolean): [InstalledExtension!]!
242
+
243
+ """
244
+ Get a specific installed extension
245
+ """
246
+ installedExtension(extensionSlug: String!): InstalledExtension
247
+
248
+ """
249
+ Get installed extensions that need attention
250
+ """
251
+ extensionsNeedingAttention: [InstalledExtension!]!
252
+
253
+ """
254
+ Check for available updates
255
+ """
256
+ extensionUpdates(extensionSlug: String): [ExtensionUpdate!]!
257
+ }
258
+
259
+ extend type Mutation {
260
+ """
261
+ Install an extension from the registry
262
+ """
263
+ installExtension(input: InstallExtensionInput!): ExtensionMutationResponse!
264
+
265
+ """
266
+ Uninstall an extension
267
+ """
268
+ uninstallExtension(extensionSlug: String!): ExtensionMutationResponse!
269
+
270
+ """
271
+ Enable or disable an extension
272
+ """
273
+ toggleExtension(extensionSlug: String!, enabled: Boolean!): ExtensionMutationResponse!
274
+
275
+ """
276
+ Update extension settings
277
+ """
278
+ updateExtensionSettings(extensionSlug: String!, settings: JSON!): ExtensionMutationResponse!
279
+
280
+ """
281
+ Update an extension to a newer version
282
+ """
283
+ updateExtensionVersion(extensionSlug: String!, version: String!): ExtensionMutationResponse!
284
+
285
+ """
286
+ Sync installed extensions with registry
287
+ """
288
+ syncExtensionsWithRegistry: ExtensionSyncResponse!
289
+
290
+ """
291
+ Clean up deprecated or removed extensions
292
+ """
293
+ cleanupExtensions(dryRun: Boolean): ExtensionCleanupResponse!
294
+ }
@@ -0,0 +1 @@
1
+ var installedExtensionSchema = "\"\"\"\nInstalled extension status enumeration\n\"\"\"\nenum InstalledExtensionStatus {\n installed\n deprecated_installed\n suspended\n orphaned\n force_disabled\n}\n\n\"\"\"\nRegistry status cached from extensionRegistry\n\"\"\"\nenum ExtensionRegistryStatus {\n active\n deprecated\n suspended\n removed\n emergency_removed\n}\n\n\"\"\"\nRuntime activation state\n\"\"\"\nenum ExtensionActivationState {\n enabled\n disabled\n disabled_by_user\n disabled_by_admin\n disabled_by_policy\n}\n\n\"\"\"\nExtension lifecycle management information\n\"\"\"\ntype ExtensionLifecycle @entity(embedded: true) {\n registryStatus: ExtensionRegistryStatus! @column\n isOrphaned: Boolean! @column\n deprecationWarningShown: Boolean! @column\n autoUpdateBlocked: Boolean! @column\n lastRegistryCheck: String! @column\n}\n\n\"\"\"\nAdmin policies for extension behavior\n\"\"\"\ntype ExtensionPolicies @entity(embedded: true) {\n allowOrphanedExecution: Boolean! @column\n requireSecurityUpdates: Boolean! @column\n autoRemoveDeprecated: Boolean! @column\n deprecationGracePeriod: Int! @column\n}\n\n\"\"\"\nExtension settings for user preferences and system state\n\"\"\"\ntype ExtensionSettings @entity(embedded: true) {\n userEnabled: Boolean! @column\n systemEnabled: Boolean! @column\n effectiveEnabled: Boolean! @column\n userConfig: JSON @column\n systemConfig: JSON @column\n}\n\n\"\"\"\nRuntime activation error information\n\"\"\"\ntype ExtensionActivationError @entity(embedded: true) {\n message: String! @column\n code: String! @column\n timestamp: String! @column\n}\n\n\"\"\"\nPerformance metrics\n\"\"\"\ntype ExtensionMetrics @entity(embedded: true) {\n activationTime: Float! @column\n memoryUsage: Float! @column\n lastMeasured: String! @column\n}\n\n\"\"\"\nRuntime information about extension execution\n\"\"\"\ntype ExtensionRuntime @entity(embedded: true) {\n activationState: ExtensionActivationState! @column\n lastActivated: DateTime @column(overrideType: \"Date\")\n lastDeactivated: DateTime @column(overrideType: \"Date\")\n activationError: ExtensionActivationError @embedded\n metrics: ExtensionMetrics @embedded\n}\n\n\"\"\"\nAudit log entry for extension actions\n\"\"\"\ntype ExtensionAuditEntry @entity(embedded: true) {\n action: String! @column\n timestamp: DateTime! @column(overrideType: \"Date\")\n user: UserAccount! @column(overrideType: \"ObjectId\")\n details: JSON @column\n}\n\n\"\"\"\nMain installed extension type\n\"\"\"\ntype InstalledExtension implements Node @entity {\n id: ID! @id\n tenantId: String! @column\n extension: RegistryExtension @column(overrideType: \"ObjectId\")\n installedVersion: String! @column\n status: InstalledExtensionStatus! @column\n lifecycle: ExtensionLifecycle! @embedded\n policies: ExtensionPolicies! @embedded\n settings: ExtensionSettings! @embedded\n runtime: ExtensionRuntime! @embedded\n installedAt: DateTime! @column(overrideType: \"Date\")\n installedBy: UserAccount! @column(overrideType: \"ObjectId\")\n lastUpdated: DateTime @column(overrideType: \"Date\")\n lastUpdatedBy: UserAccount @column(overrideType: \"ObjectId\")\n availableVersion: String @column\n dependencies: [String!] @column\n dependents: [String!] @column\n auditLog: [ExtensionAuditEntry!] @embedded\n}\n\n\"\"\"\nRegistry information for display\n\"\"\"\ntype ExtensionRegistryInfo {\n displayName: String!\n description: String!\n publisher: String!\n latestVersion: String!\n tags: [String!]!\n categories: [String!]!\n deprecation: JSON\n suspension: JSON\n}\n\n\"\"\"\nNotification action\n\"\"\"\ntype NotificationAction {\n label: String!\n action: String!\n url: String\n extensionSlug: String\n}\n\n\"\"\"\nExtension notification\n\"\"\"\ntype ExtensionNotification {\n type: String!\n severity: String!\n message: String!\n actions: [NotificationAction!]\n}\n\n\"\"\"\nExtension update information\n\"\"\"\ntype ExtensionUpdate {\n extensionSlug: String!\n currentVersion: String!\n availableVersion: String!\n isSecurityUpdate: Boolean!\n}\n\n\"\"\"\nExtension cleanup result\n\"\"\"\ntype ExtensionCleanupResult {\n removed: [String!]!\n deprecated: [String!]!\n warnings: [String!]!\n}\n\n\"\"\"\nInput for installing an extension\n\"\"\"\ninput InstallExtensionInput {\n extensionSlug: String!\n version: String!\n policies: ExtensionPoliciesInput\n settings: ExtensionSettingsInput\n}\n\n\"\"\"\nInput for extension policies\n\"\"\"\ninput ExtensionPoliciesInput {\n allowOrphanedExecution: Boolean\n requireSecurityUpdates: Boolean\n autoRemoveDeprecated: Boolean\n deprecationGracePeriod: Int\n}\n\n\"\"\"\nInput for extension settings\n\"\"\"\ninput ExtensionSettingsInput {\n userEnabled: Boolean\n systemEnabled: Boolean\n userConfig: JSON\n systemConfig: JSON\n}\n\n\"\"\"\nResponse type for extension mutations\n\"\"\"\ntype ExtensionMutationResponse {\n success: Boolean!\n extension: InstalledExtension\n message: String!\n}\n\n\"\"\"\nResponse type for cleanup operations\n\"\"\"\ntype ExtensionCleanupResponse {\n success: Boolean!\n result: ExtensionCleanupResult\n message: String!\n}\n\n\"\"\"\nResponse type for sync operations\n\"\"\"\ntype ExtensionSyncResponse {\n success: Boolean!\n message: String!\n}\n\nextend type Query {\n \"\"\"\n Get all installed extensions for the current tenant\n \"\"\"\n installedExtensions(enabled: Boolean): [InstalledExtension!]!\n\n \"\"\"\n Get a specific installed extension\n \"\"\"\n installedExtension(extensionSlug: String!): InstalledExtension\n\n \"\"\"\n Get installed extensions that need attention\n \"\"\"\n extensionsNeedingAttention: [InstalledExtension!]!\n\n \"\"\"\n Check for available updates\n \"\"\"\n extensionUpdates(extensionSlug: String): [ExtensionUpdate!]!\n}\n\nextend type Mutation {\n \"\"\"\n Install an extension from the registry\n \"\"\"\n installExtension(input: InstallExtensionInput!): ExtensionMutationResponse!\n\n \"\"\"\n Uninstall an extension\n \"\"\"\n uninstallExtension(extensionSlug: String!): ExtensionMutationResponse!\n\n \"\"\"\n Enable or disable an extension\n \"\"\"\n toggleExtension(extensionSlug: String!, enabled: Boolean!): ExtensionMutationResponse!\n\n \"\"\"\n Update extension settings\n \"\"\"\n updateExtensionSettings(extensionSlug: String!, settings: JSON!): ExtensionMutationResponse!\n\n \"\"\"\n Update an extension to a newer version\n \"\"\"\n updateExtensionVersion(extensionSlug: String!, version: String!): ExtensionMutationResponse!\n\n \"\"\"\n Sync installed extensions with registry\n \"\"\"\n syncExtensionsWithRegistry: ExtensionSyncResponse!\n\n \"\"\"\n Clean up deprecated or removed extensions\n \"\"\"\n cleanupExtensions(dryRun: Boolean): ExtensionCleanupResponse!\n}\n";export{installedExtensionSchema as default};//# sourceMappingURL=installed-extension.graphql.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"installed-extension.graphql.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -0,0 +1,181 @@
1
+
2
+ extend enum MoleculerServiceName {
3
+ ExtensionService
4
+ }
5
+
6
+ enum ExtensionServiceAction {
7
+ OnExtensionInstalled
8
+ OnExtensionUninstalled
9
+ OnExtensionEnabled
10
+ OnExtensionDisabled
11
+ OnExtensionUpdated
12
+ OnExtensionVersionUpdated
13
+ OnExtensionConfigurationUpdated
14
+ OnExtensionSyncCompleted
15
+ OnExtensionCleanupCompleted
16
+ OnExtensionStatusChanged
17
+ OnExtensionActivationFailed
18
+ OnExtensionDeprecated
19
+ OnExtensionOrphaned
20
+ }
21
+
22
+ # Extension Event Types for codegen
23
+
24
+ """
25
+ Event fired when an extension is installed
26
+ """
27
+ type ExtensionInstalledEvent {
28
+ extensionSlug: String!
29
+ tenantId: String!
30
+ installedBy: String!
31
+ installedVersion: String!
32
+ registryRef: String!
33
+ installedAt: String!
34
+ policies: JSON
35
+ settings: JSON
36
+ }
37
+
38
+ """
39
+ Event fired when an extension is uninstalled
40
+ """
41
+ type ExtensionUninstalledEvent {
42
+ extensionSlug: String!
43
+ tenantId: String!
44
+ uninstalledBy: String!
45
+ uninstalledAt: String!
46
+ wasEnabled: Boolean!
47
+ dependencies: [String!]
48
+ }
49
+
50
+ """
51
+ Event fired when an extension is enabled
52
+ """
53
+ type ExtensionEnabledEvent {
54
+ extensionSlug: String!
55
+ tenantId: String!
56
+ enabledBy: String!
57
+ enabledAt: String!
58
+ previousState: String!
59
+ }
60
+
61
+ """
62
+ Event fired when an extension is disabled
63
+ """
64
+ type ExtensionDisabledEvent {
65
+ extensionSlug: String!
66
+ tenantId: String!
67
+ disabledBy: String!
68
+ disabledAt: String!
69
+ reason: String! # 'user', 'admin', 'policy', 'system'
70
+ }
71
+
72
+ """
73
+ Event fired when an extension is updated
74
+ """
75
+ type ExtensionUpdatedEvent {
76
+ extensionSlug: String!
77
+ tenantId: String!
78
+ updatedBy: String!
79
+ updatedAt: String!
80
+ changes: JSON! # { status?, settings?, policies?, runtime? }
81
+ previousVersion: String
82
+ newVersion: String
83
+ }
84
+
85
+ """
86
+ Event fired when an extension version is updated
87
+ """
88
+ type ExtensionVersionUpdatedEvent {
89
+ extensionSlug: String!
90
+ tenantId: String!
91
+ updatedBy: String!
92
+ fromVersion: String!
93
+ toVersion: String!
94
+ updatedAt: String!
95
+ isSecurityUpdate: Boolean!
96
+ }
97
+
98
+ """
99
+ Event fired when extension configuration is updated
100
+ """
101
+ type ExtensionConfigurationUpdatedEvent {
102
+ tenantId: String!
103
+ extensionSlug: String!
104
+ updatedBy: String!
105
+ updatedAt: String!
106
+ configType: String! # 'user' or 'system'
107
+ previousConfig: JSON
108
+ newConfig: JSON!
109
+ }
110
+
111
+ """
112
+ Event fired when extension sync with registry is completed
113
+ """
114
+ type ExtensionSyncCompletedEvent {
115
+ tenantId: String!
116
+ syncedAt: String!
117
+ extensionsChecked: Int!
118
+ extensionsUpdated: Int!
119
+ extensionsOrphaned: Int!
120
+ errors: [String!]
121
+ }
122
+
123
+ """
124
+ Event fired when extension cleanup is completed
125
+ """
126
+ type ExtensionCleanupCompletedEvent {
127
+ tenantId: String!
128
+ cleanedAt: String!
129
+ extensionsRemoved: [String!]!
130
+ extensionsDeprecated: [String!]!
131
+ warnings: [String!]
132
+ dryRun: Boolean!
133
+ }
134
+
135
+ """
136
+ Event fired when extension status changes
137
+ """
138
+ type ExtensionStatusChangedEvent {
139
+ tenantId: String!
140
+ extensionSlug: String!
141
+ previousStatus: String!
142
+ newStatus: String!
143
+ changedBy: String
144
+ changedAt: String!
145
+ reason: String
146
+ }
147
+
148
+ """
149
+ Event fired when extension activation fails
150
+ """
151
+ type ExtensionActivationFailedEvent {
152
+ tenantId: String!
153
+ extensionSlug: String!
154
+ failedAt: String!
155
+ error: JSON! # { message, code, stack }
156
+ attemptCount: Int!
157
+ willRetry: Boolean!
158
+ }
159
+
160
+ """
161
+ Event fired when an extension is deprecated
162
+ """
163
+ type ExtensionDeprecatedEvent {
164
+ tenantId: String!
165
+ extensionSlug: String!
166
+ deprecatedAt: String!
167
+ deprecationInfo: JSON! # { reason, alternative, gracePeriod }
168
+ affectedInstallations: Int!
169
+ }
170
+
171
+ """
172
+ Event fired when an extension becomes orphaned (removed from registry)
173
+ """
174
+ type ExtensionOrphanedEvent {
175
+ tenantId: String!
176
+ extensionSlug: String!
177
+ orphanedAt: String!
178
+ lastKnownVersion: String!
179
+ removalReason: String
180
+ policyAction: String! # 'keep', 'disable', 'remove'
181
+ }
@@ -0,0 +1 @@
1
+ var serviceSchema = "\nextend enum MoleculerServiceName {\n ExtensionService\n}\n\nenum ExtensionServiceAction {\n OnExtensionInstalled\n OnExtensionUninstalled\n OnExtensionEnabled\n OnExtensionDisabled\n OnExtensionUpdated\n OnExtensionVersionUpdated\n OnExtensionConfigurationUpdated\n OnExtensionSyncCompleted\n OnExtensionCleanupCompleted\n OnExtensionStatusChanged\n OnExtensionActivationFailed\n OnExtensionDeprecated\n OnExtensionOrphaned\n}\n\n# Extension Event Types for codegen\n\n\"\"\"\nEvent fired when an extension is installed\n\"\"\"\ntype ExtensionInstalledEvent {\n extensionSlug: String!\n tenantId: String!\n installedBy: String!\n installedVersion: String!\n registryRef: String!\n installedAt: String!\n policies: JSON\n settings: JSON\n}\n\n\"\"\"\nEvent fired when an extension is uninstalled\n\"\"\"\ntype ExtensionUninstalledEvent {\n extensionSlug: String!\n tenantId: String!\n uninstalledBy: String!\n uninstalledAt: String!\n wasEnabled: Boolean!\n dependencies: [String!]\n}\n\n\"\"\"\nEvent fired when an extension is enabled\n\"\"\"\ntype ExtensionEnabledEvent {\n extensionSlug: String!\n tenantId: String!\n enabledBy: String!\n enabledAt: String!\n previousState: String!\n}\n\n\"\"\"\nEvent fired when an extension is disabled\n\"\"\"\ntype ExtensionDisabledEvent {\n extensionSlug: String!\n tenantId: String!\n disabledBy: String!\n disabledAt: String!\n reason: String! # 'user', 'admin', 'policy', 'system'\n}\n\n\"\"\"\nEvent fired when an extension is updated\n\"\"\"\ntype ExtensionUpdatedEvent {\n extensionSlug: String!\n tenantId: String!\n updatedBy: String!\n updatedAt: String!\n changes: JSON! # { status?, settings?, policies?, runtime? }\n previousVersion: String\n newVersion: String\n}\n\n\"\"\"\nEvent fired when an extension version is updated\n\"\"\"\ntype ExtensionVersionUpdatedEvent {\n extensionSlug: String!\n tenantId: String!\n updatedBy: String!\n fromVersion: String!\n toVersion: String!\n updatedAt: String!\n isSecurityUpdate: Boolean!\n}\n\n\"\"\"\nEvent fired when extension configuration is updated\n\"\"\"\ntype ExtensionConfigurationUpdatedEvent {\n tenantId: String!\n extensionSlug: String!\n updatedBy: String!\n updatedAt: String!\n configType: String! # 'user' or 'system'\n previousConfig: JSON\n newConfig: JSON!\n}\n\n\"\"\"\nEvent fired when extension sync with registry is completed\n\"\"\"\ntype ExtensionSyncCompletedEvent {\n tenantId: String!\n syncedAt: String!\n extensionsChecked: Int!\n extensionsUpdated: Int!\n extensionsOrphaned: Int!\n errors: [String!]\n}\n\n\"\"\"\nEvent fired when extension cleanup is completed\n\"\"\"\ntype ExtensionCleanupCompletedEvent {\n tenantId: String!\n cleanedAt: String!\n extensionsRemoved: [String!]!\n extensionsDeprecated: [String!]!\n warnings: [String!]\n dryRun: Boolean!\n}\n\n\"\"\"\nEvent fired when extension status changes\n\"\"\"\ntype ExtensionStatusChangedEvent {\n tenantId: String!\n extensionSlug: String!\n previousStatus: String!\n newStatus: String!\n changedBy: String\n changedAt: String!\n reason: String\n}\n\n\"\"\"\nEvent fired when extension activation fails\n\"\"\"\ntype ExtensionActivationFailedEvent {\n tenantId: String!\n extensionSlug: String!\n failedAt: String!\n error: JSON! # { message, code, stack }\n attemptCount: Int!\n willRetry: Boolean!\n}\n\n\"\"\"\nEvent fired when an extension is deprecated\n\"\"\"\ntype ExtensionDeprecatedEvent {\n tenantId: String!\n extensionSlug: String!\n deprecatedAt: String!\n deprecationInfo: JSON! # { reason, alternative, gracePeriod }\n affectedInstallations: Int!\n}\n\n\"\"\"\nEvent fired when an extension becomes orphaned (removed from registry)\n\"\"\"\ntype ExtensionOrphanedEvent {\n tenantId: String!\n extensionSlug: String!\n orphanedAt: String!\n lastKnownVersion: String!\n removalReason: String\n policyAction: String! # 'keep', 'disable', 'remove'\n}";export{serviceSchema as default};//# sourceMappingURL=service.graphql.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service.graphql.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
package/lib/index.d.ts CHANGED
@@ -1,4 +1,6 @@
1
1
  import { Feature } from '@common-stack/server-core';
2
2
  declare const _default: Feature<import("@common-stack/server-core").ConfigurationScope, any>;
3
3
  export default _default;
4
+ export * from './services';
5
+ export * from './store';
4
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;;AAGpD,wBAAmC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;;AAGpD,wBAAmC;AAEnC,cAAc,YAAY,CAAC;AAC3B,cAAc,SAAS,CAAC"}
package/lib/index.js CHANGED
@@ -1 +1 @@
1
- import {Feature}from'@common-stack/server-core';import module from'./module.js';var index = new Feature(module);export{index as default};//# sourceMappingURL=index.js.map
1
+ import {Feature}from'@common-stack/server-core';import module from'./module.js';export{RegistryExtensionService}from'./services/extension-service.js';export{InstalledExtensionService}from'./services/installed-extension-service.js';export{InstalledExtensionServiceExt}from'./services/installed-extension-service-ext.js';export{RegistryExtensionModelFunc}from'./store/models/registry-extension-model.js';export{InstalledExtensionModelFunc}from'./store/models/installed-extension-model.js';export{RegistryExtensionRepository}from'./store/repositories/registry-extension-repository.js';export{InstalledExtensionRepository}from'./store/repositories/installed-extension-repository.js';var index = new Feature(module);export{index as default};//# sourceMappingURL=index.js.map
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/index.ts"],"sourcesContent":[null],"names":[],"mappings":"gFAGA,YAAmC,IAAA,OAAA,CAAA,MAAA,CAAA"}
1
+ {"version":3,"file":"index.js","sources":["../src/index.ts"],"sourcesContent":[null],"names":[],"mappings":"uqBAGA,YAAmC,IAAA,OAAA,CAAA,MAAA,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../src/module.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;;AAYpD,wBAuBG"}
1
+ {"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../src/module.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;;AAiBpD,wBAuBG"}
package/lib/module.js CHANGED
@@ -1,16 +1,18 @@
1
- import {find,get}from'lodash-es';import {Feature}from'@common-stack/server-core';import {SERVER_TYPES}from'common/server';import {resolver}from'./graphql/resolvers/resolvers.js';import {schema}from'./graphql/schemas/index.js';import {extensionModule}from'./containers/module.js';const extensionServiceGen = container => {
1
+ import {find,get}from'lodash-es';import {Feature}from'@common-stack/server-core';import {SERVER_TYPES}from'common/server';import {resolvers}from'./graphql/resolvers/index.js';import {schema}from'./graphql/schemas/index.js';import {extensionModule}from'./containers/module.js';const extensionServiceGen = container => {
2
2
  container.get('Environment');
3
3
  return {
4
- registryExtensionService: container.get(SERVER_TYPES.IRegistryExtensionService)
4
+ registryExtensionService: container.get(SERVER_TYPES.IRegistryExtensionService),
5
+ installedExtensionService: container.get(SERVER_TYPES.IInstalledExtensionService),
6
+ registryExtensionDataLoader: container.get(SERVER_TYPES.IRegistryExtensionDataLoader)
5
7
  };
6
8
  };
7
9
  var module = new Feature({
8
10
  schema,
9
- createResolversFunc: resolver,
11
+ createResolversFunc: resolvers,
10
12
  createContainerFunc: [extensionModule],
11
13
  createServiceFunc: extensionServiceGen,
12
14
  middleware: [app => {
13
- app.get('/_registry/:accountName/:extension/:version?', (req, res, next) => {
15
+ app.get('/_registry/:accountName/:extension/:version?', (req, res) => {
14
16
  // TODO: Add validation of all params exist or not.
15
17
  // for example, if `extension` is missing we should throw some valid error.
16
18
  req.services.registryExtensionService.findExtension(`${req.params.accountName}/${req.params.extension}`, req.params.version).then(data => {
package/lib/module.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"module.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"module.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -0,0 +1,86 @@
1
+ import { Service, ServiceBroker } from 'moleculer';
2
+ import { Container } from 'inversify';
3
+ /**
4
+ * Extension Moleculer Service Plugin
5
+ * Handles incoming Moleculer broadcasts for extension events and manages
6
+ * configuration registry for contributions and extensions
7
+ */
8
+ export declare class ExtensionMoleculerService extends Service {
9
+ private container;
10
+ constructor(broker: ServiceBroker, { container }: {
11
+ container: Container;
12
+ });
13
+ /**
14
+ * Register extension contributions to configuration registry
15
+ */
16
+ private registerExtensionContributions;
17
+ /**
18
+ * Unregister extension contributions from configuration registry
19
+ */
20
+ private unregisterExtensionContributions;
21
+ /**
22
+ * Activate extension contributions
23
+ */
24
+ private activateExtensionContributions;
25
+ /**
26
+ * Deactivate extension contributions
27
+ */
28
+ private deactivateExtensionContributions;
29
+ /**
30
+ * Update contribution state in registry
31
+ */
32
+ private updateContributionState;
33
+ /**
34
+ * Update extension configuration in registry
35
+ */
36
+ private updateExtensionConfiguration;
37
+ /**
38
+ * Refresh contribution configuration
39
+ */
40
+ private refreshContributionConfiguration;
41
+ /**
42
+ * Refresh extension contributions for new version
43
+ */
44
+ private refreshExtensionContributions;
45
+ /**
46
+ * Update contribution version in registry
47
+ */
48
+ private updateContributionVersion;
49
+ /**
50
+ * Handle orphaned extensions
51
+ */
52
+ private handleOrphanedExtensions;
53
+ /**
54
+ * Handle deprecated extensions
55
+ */
56
+ private handleDeprecatedExtensions;
57
+ /**
58
+ * Clean up contribution registry entries
59
+ */
60
+ private cleanupContributionRegistry;
61
+ /**
62
+ * Mark contributions as failed
63
+ */
64
+ private markContributionsAsFailed;
65
+ /**
66
+ * Mark contributions as deprecated
67
+ */
68
+ private markContributionsAsDeprecated;
69
+ /**
70
+ * Mark contributions as orphaned
71
+ */
72
+ private markContributionsAsOrphaned;
73
+ /**
74
+ * Get extension configuration
75
+ */
76
+ private getExtensionConfiguration;
77
+ /**
78
+ * Get extension contributions
79
+ */
80
+ private getExtensionContributions;
81
+ /**
82
+ * Get all active contributions for tenant
83
+ */
84
+ private getActiveContributions;
85
+ }
86
+ //# sourceMappingURL=extension-moleculer-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extension-moleculer-service.d.ts","sourceRoot":"","sources":["../../src/plugins/extension-moleculer-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAiBtC;;;;GAIG;AACH,qBAAa,yBAA0B,SAAQ,OAAO;IAClD,OAAO,CAAC,SAAS,CAAY;gBAEjB,MAAM,EAAE,aAAa,EAAE,EAAE,SAAS,EAAE,EAAE;QAAE,SAAS,EAAE,SAAS,CAAA;KAAE;IA6Q1E;;OAEG;YACW,8BAA8B;IAc5C;;OAEG;YACW,gCAAgC;IAM9C;;OAEG;YACW,8BAA8B;IAM5C;;OAEG;YACW,gCAAgC;IAM9C;;OAEG;YACW,uBAAuB;IAMrC;;OAEG;YACW,4BAA4B;IAM1C;;OAEG;YACW,gCAAgC;IAM9C;;OAEG;YACW,6BAA6B;IAM3C;;OAEG;YACW,yBAAyB;IAMvC;;OAEG;YACW,wBAAwB;IAMtC;;OAEG;YACW,0BAA0B;IAMxC;;OAEG;YACW,2BAA2B;IAMzC;;OAEG;YACW,yBAAyB;IAMvC;;OAEG;YACW,6BAA6B;IAM3C;;OAEG;YACW,2BAA2B;IAMzC;;OAEG;YACW,yBAAyB;IAOvC;;OAEG;YACW,yBAAyB;IAOvC;;OAEG;YACW,sBAAsB;CAMvC"}
@@ -0,0 +1,2 @@
1
+ export * from './extension-moleculer-service';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/plugins/index.ts"],"names":[],"mappings":"AAAA,cAAc,+BAA+B,CAAC"}